docs(website): add changelog page and publish v0.1.14 notes
This commit is contained in:
@@ -1,5 +1,36 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.1.14] - 2026-02-19
|
||||||
|
### Added
|
||||||
|
- Added Claude `/rewind` command support.
|
||||||
|
- Added slash command access in the draft agent composer.
|
||||||
|
- Added `@` workspace file autocomplete in chat prompts.
|
||||||
|
- Added support for pasting images directly into prompt attachments.
|
||||||
|
- Added optimistic image previews for pending user message attachments.
|
||||||
|
- Added shared desktop/web overlay scroll handles, including file preview panes.
|
||||||
|
|
||||||
|
### Improved
|
||||||
|
- Improved worktree flow after shipping, including better merged PR detection.
|
||||||
|
- Improved draft workflow by enabling the explorer sidebar immediately after CWD selection.
|
||||||
|
- Improved new worktree-agent defaults by prefilling CWD to the main repository.
|
||||||
|
- Improved desktop command autocomplete behavior to match combobox interactions.
|
||||||
|
- Improved git sync UX by simplifying sync labels and only showing Sync when a branch diverges from origin.
|
||||||
|
- Improved desktop settings and permissions UX in Tauri.
|
||||||
|
- Improved scrollbar visibility, drag interactions, tracking, and animation timing on web/desktop.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed worktree archive/setup lifecycle issues, including terminal cleanup and archive timing.
|
||||||
|
- Fixed worktree path collisions by hashing CWD for collision-safe worktree roots.
|
||||||
|
- Fixed terminal sizing when switching back to an agent session.
|
||||||
|
- Fixed accidental terminal closure risk by adding confirmation for running shell commands.
|
||||||
|
- Fixed archive loading-state consistency across the sidebar and agent screen.
|
||||||
|
- Fixed autocomplete popover stability and workspace suggestion ranking.
|
||||||
|
- Fixed dictation timeouts caused by dangling non-final segments.
|
||||||
|
- Fixed server lock ownership when spawned as a child process by using parent PID ownership.
|
||||||
|
- Fixed hidden directory leakage in server CWD suggestions.
|
||||||
|
- Fixed agent attention notification payload consistency across providers.
|
||||||
|
- Fixed daemon version badge visibility in settings when daemon version data is unavailable.
|
||||||
|
|
||||||
## [0.1.9] - 2026-02-17
|
## [0.1.9] - 2026-02-17
|
||||||
### Improved
|
### Improved
|
||||||
- Unified structured-output generation through a single shared schema-validation and retry pipeline.
|
- Unified structured-output generation through a single shared schema-validation and retry pipeline.
|
||||||
|
|||||||
Generated
+1169
-2
File diff suppressed because it is too large
Load Diff
@@ -17,6 +17,7 @@
|
|||||||
"@tanstack/react-start": "^1.120.3",
|
"@tanstack/react-start": "^1.120.3",
|
||||||
"react": "^19.1.0",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.1.0",
|
||||||
|
"react-markdown": "^10.1.0",
|
||||||
"wrangler": "^4.59.1"
|
"wrangler": "^4.59.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
import { Route as rootRouteImport } from './routes/__root'
|
import { Route as rootRouteImport } from './routes/__root'
|
||||||
import { Route as PrivacyRouteImport } from './routes/privacy'
|
import { Route as PrivacyRouteImport } from './routes/privacy'
|
||||||
import { Route as DocsRouteImport } from './routes/docs'
|
import { Route as DocsRouteImport } from './routes/docs'
|
||||||
|
import { Route as ChangelogRouteImport } from './routes/changelog'
|
||||||
import { Route as IndexRouteImport } from './routes/index'
|
import { Route as IndexRouteImport } from './routes/index'
|
||||||
import { Route as DocsIndexRouteImport } from './routes/docs/index'
|
import { Route as DocsIndexRouteImport } from './routes/docs/index'
|
||||||
import { Route as DocsWorktreesRouteImport } from './routes/docs/worktrees'
|
import { Route as DocsWorktreesRouteImport } from './routes/docs/worktrees'
|
||||||
@@ -31,6 +32,11 @@ const DocsRoute = DocsRouteImport.update({
|
|||||||
path: '/docs',
|
path: '/docs',
|
||||||
getParentRoute: () => rootRouteImport,
|
getParentRoute: () => rootRouteImport,
|
||||||
} as any)
|
} as any)
|
||||||
|
const ChangelogRoute = ChangelogRouteImport.update({
|
||||||
|
id: '/changelog',
|
||||||
|
path: '/changelog',
|
||||||
|
getParentRoute: () => rootRouteImport,
|
||||||
|
} as any)
|
||||||
const IndexRoute = IndexRouteImport.update({
|
const IndexRoute = IndexRouteImport.update({
|
||||||
id: '/',
|
id: '/',
|
||||||
path: '/',
|
path: '/',
|
||||||
@@ -79,6 +85,7 @@ const DocsBestPracticesRoute = DocsBestPracticesRouteImport.update({
|
|||||||
|
|
||||||
export interface FileRoutesByFullPath {
|
export interface FileRoutesByFullPath {
|
||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
|
'/changelog': typeof ChangelogRoute
|
||||||
'/docs': typeof DocsRouteWithChildren
|
'/docs': typeof DocsRouteWithChildren
|
||||||
'/privacy': typeof PrivacyRoute
|
'/privacy': typeof PrivacyRoute
|
||||||
'/docs/best-practices': typeof DocsBestPracticesRoute
|
'/docs/best-practices': typeof DocsBestPracticesRoute
|
||||||
@@ -92,6 +99,7 @@ export interface FileRoutesByFullPath {
|
|||||||
}
|
}
|
||||||
export interface FileRoutesByTo {
|
export interface FileRoutesByTo {
|
||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
|
'/changelog': typeof ChangelogRoute
|
||||||
'/privacy': typeof PrivacyRoute
|
'/privacy': typeof PrivacyRoute
|
||||||
'/docs/best-practices': typeof DocsBestPracticesRoute
|
'/docs/best-practices': typeof DocsBestPracticesRoute
|
||||||
'/docs/cli': typeof DocsCliRoute
|
'/docs/cli': typeof DocsCliRoute
|
||||||
@@ -105,6 +113,7 @@ export interface FileRoutesByTo {
|
|||||||
export interface FileRoutesById {
|
export interface FileRoutesById {
|
||||||
__root__: typeof rootRouteImport
|
__root__: typeof rootRouteImport
|
||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
|
'/changelog': typeof ChangelogRoute
|
||||||
'/docs': typeof DocsRouteWithChildren
|
'/docs': typeof DocsRouteWithChildren
|
||||||
'/privacy': typeof PrivacyRoute
|
'/privacy': typeof PrivacyRoute
|
||||||
'/docs/best-practices': typeof DocsBestPracticesRoute
|
'/docs/best-practices': typeof DocsBestPracticesRoute
|
||||||
@@ -120,6 +129,7 @@ export interface FileRouteTypes {
|
|||||||
fileRoutesByFullPath: FileRoutesByFullPath
|
fileRoutesByFullPath: FileRoutesByFullPath
|
||||||
fullPaths:
|
fullPaths:
|
||||||
| '/'
|
| '/'
|
||||||
|
| '/changelog'
|
||||||
| '/docs'
|
| '/docs'
|
||||||
| '/privacy'
|
| '/privacy'
|
||||||
| '/docs/best-practices'
|
| '/docs/best-practices'
|
||||||
@@ -133,6 +143,7 @@ export interface FileRouteTypes {
|
|||||||
fileRoutesByTo: FileRoutesByTo
|
fileRoutesByTo: FileRoutesByTo
|
||||||
to:
|
to:
|
||||||
| '/'
|
| '/'
|
||||||
|
| '/changelog'
|
||||||
| '/privacy'
|
| '/privacy'
|
||||||
| '/docs/best-practices'
|
| '/docs/best-practices'
|
||||||
| '/docs/cli'
|
| '/docs/cli'
|
||||||
@@ -145,6 +156,7 @@ export interface FileRouteTypes {
|
|||||||
id:
|
id:
|
||||||
| '__root__'
|
| '__root__'
|
||||||
| '/'
|
| '/'
|
||||||
|
| '/changelog'
|
||||||
| '/docs'
|
| '/docs'
|
||||||
| '/privacy'
|
| '/privacy'
|
||||||
| '/docs/best-practices'
|
| '/docs/best-practices'
|
||||||
@@ -159,6 +171,7 @@ export interface FileRouteTypes {
|
|||||||
}
|
}
|
||||||
export interface RootRouteChildren {
|
export interface RootRouteChildren {
|
||||||
IndexRoute: typeof IndexRoute
|
IndexRoute: typeof IndexRoute
|
||||||
|
ChangelogRoute: typeof ChangelogRoute
|
||||||
DocsRoute: typeof DocsRouteWithChildren
|
DocsRoute: typeof DocsRouteWithChildren
|
||||||
PrivacyRoute: typeof PrivacyRoute
|
PrivacyRoute: typeof PrivacyRoute
|
||||||
}
|
}
|
||||||
@@ -179,6 +192,13 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof DocsRouteImport
|
preLoaderRoute: typeof DocsRouteImport
|
||||||
parentRoute: typeof rootRouteImport
|
parentRoute: typeof rootRouteImport
|
||||||
}
|
}
|
||||||
|
'/changelog': {
|
||||||
|
id: '/changelog'
|
||||||
|
path: '/changelog'
|
||||||
|
fullPath: '/changelog'
|
||||||
|
preLoaderRoute: typeof ChangelogRouteImport
|
||||||
|
parentRoute: typeof rootRouteImport
|
||||||
|
}
|
||||||
'/': {
|
'/': {
|
||||||
id: '/'
|
id: '/'
|
||||||
path: '/'
|
path: '/'
|
||||||
@@ -271,6 +291,7 @@ const DocsRouteWithChildren = DocsRoute._addFileChildren(DocsRouteChildren)
|
|||||||
|
|
||||||
const rootRouteChildren: RootRouteChildren = {
|
const rootRouteChildren: RootRouteChildren = {
|
||||||
IndexRoute: IndexRoute,
|
IndexRoute: IndexRoute,
|
||||||
|
ChangelogRoute: ChangelogRoute,
|
||||||
DocsRoute: DocsRouteWithChildren,
|
DocsRoute: DocsRouteWithChildren,
|
||||||
PrivacyRoute: PrivacyRoute,
|
PrivacyRoute: PrivacyRoute,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
import { Link, createFileRoute } from '@tanstack/react-router'
|
||||||
|
import ReactMarkdown from 'react-markdown'
|
||||||
|
import changelogMarkdown from '../../../../CHANGELOG.md?raw'
|
||||||
|
import '~/styles.css'
|
||||||
|
|
||||||
|
export const Route = createFileRoute('/changelog')({
|
||||||
|
head: () => ({
|
||||||
|
meta: [
|
||||||
|
{ title: 'Changelog - Paseo' },
|
||||||
|
{
|
||||||
|
name: 'description',
|
||||||
|
content:
|
||||||
|
'Product updates, fixes, and improvements shipped in each Paseo release.',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
component: Changelog,
|
||||||
|
})
|
||||||
|
|
||||||
|
function Changelog() {
|
||||||
|
return (
|
||||||
|
<div className="min-h-screen bg-background">
|
||||||
|
<div className="max-w-4xl mx-auto p-6 md:p-12">
|
||||||
|
<header className="flex items-center justify-between gap-4 mb-8">
|
||||||
|
<Link to="/" className="flex items-center gap-3">
|
||||||
|
<img src="/logo.svg" alt="Paseo" className="w-6 h-6" />
|
||||||
|
<span className="text-lg font-medium">Paseo</span>
|
||||||
|
</Link>
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<Link
|
||||||
|
to="/docs"
|
||||||
|
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
||||||
|
>
|
||||||
|
Docs
|
||||||
|
</Link>
|
||||||
|
<a
|
||||||
|
href="https://github.com/getpaseo/paseo"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
||||||
|
>
|
||||||
|
GitHub
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<article className="changelog-markdown rounded-xl border border-border bg-card/40 p-6 md:p-8">
|
||||||
|
<ReactMarkdown>{changelogMarkdown}</ReactMarkdown>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -86,6 +86,12 @@ function Nav() {
|
|||||||
>
|
>
|
||||||
Docs
|
Docs
|
||||||
</a>
|
</a>
|
||||||
|
<a
|
||||||
|
href="/changelog"
|
||||||
|
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
||||||
|
>
|
||||||
|
Changelog
|
||||||
|
</a>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/getpaseo/paseo"
|
href="https://github.com/getpaseo/paseo"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
|||||||
@@ -13,6 +13,68 @@
|
|||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Markdown rendering styles for /changelog */
|
||||||
|
.changelog-markdown {
|
||||||
|
color: rgba(250, 250, 250, 0.82);
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown h1 {
|
||||||
|
color: var(--color-foreground);
|
||||||
|
font-size: 2rem;
|
||||||
|
line-height: 1.2;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown h2 {
|
||||||
|
color: var(--color-foreground);
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: 1.3;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
border-bottom: 1px solid var(--color-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown h3 {
|
||||||
|
color: var(--color-foreground);
|
||||||
|
font-size: 1.125rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown p {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown ul {
|
||||||
|
list-style: disc;
|
||||||
|
margin-left: 1.25rem;
|
||||||
|
margin-top: 0.75rem;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
display: grid;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown li {
|
||||||
|
padding-left: 0.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown a {
|
||||||
|
color: var(--color-foreground);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog-markdown a:hover {
|
||||||
|
color: rgba(250, 250, 250, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
@theme {
|
@theme {
|
||||||
--color-background: #0a0a0a;
|
--color-background: #0a0a0a;
|
||||||
--color-foreground: #fafafa;
|
--color-foreground: #fafafa;
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
declare module '*.md?raw' {
|
||||||
|
const content: string
|
||||||
|
export default content
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import path from 'node:path'
|
||||||
import { defineConfig } from 'vite'
|
import { defineConfig } from 'vite'
|
||||||
import tsConfigPaths from 'vite-tsconfig-paths'
|
import tsConfigPaths from 'vite-tsconfig-paths'
|
||||||
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
|
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
|
||||||
@@ -5,9 +6,14 @@ import { cloudflare } from '@cloudflare/vite-plugin'
|
|||||||
import react from '@vitejs/plugin-react'
|
import react from '@vitejs/plugin-react'
|
||||||
import tailwindcss from '@tailwindcss/vite'
|
import tailwindcss from '@tailwindcss/vite'
|
||||||
|
|
||||||
|
const repoRoot = path.resolve(__dirname, '../..')
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
server: {
|
server: {
|
||||||
port: 8082,
|
port: 8082,
|
||||||
|
fs: {
|
||||||
|
allow: [repoRoot],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
cloudflare({ viteEnvironment: { name: 'ssr' } }),
|
cloudflare({ viteEnvironment: { name: 'ssr' } }),
|
||||||
|
|||||||
Reference in New Issue
Block a user