* feat(website): serve paseo.sh in Simplified Chinese
Every page of the website now has a Simplified Chinese version under
/zh-CN: the interface, docs, blog posts, comparison pages, legal pages,
all changelog releases and the homepage mockup. English URLs are unchanged.
The URL alone decides the language. There is no browser-language redirect
and no stored preference, because either would have to redirect the
unprefixed English URLs that people share and search engines index.
Internal links carry the page's language instead, and hreflang alternates
point Chinese search results at /zh-CN.
Translated headings pin the English anchor with {#id}, so section links
work in both languages. content-translations.test.ts fails when a page
has no translation or a translation's headings drift from the English.
Changelog releases and plugin listings without a translation render
whole in English under a notice, so a release never waits on one.
Plugin manifests and the registry gain optional translations and
OVERVIEW.zh-CN.md fields; older clients and registries ignore them.
* feat(website): replace the native language select with an EN/ZH menu
The header showed an OS-native select whose popup did not match the site.
The trigger now shows the language abbreviated (EN, ZH) and opens a menu in
the app's dropdown style that names each language in itself, with its name
in the page language underneath. Rows are real links to the same page in
that language; arrows, Escape, outside presses and taps behave as a menu
button, and the menu keeps itself on screen when a narrow header pushes the
trigger toward an edge.
Also drops the stray space after the full-width comma in the Chinese
homepage subtitle.
* docs(website): translate main's new docs and 0.12.0 release notes
Main added Keep run workspaces to the schedules docs, rewrote plugin icons
around inline SVG, and promoted 0.12.0 with new entries. Bring the Chinese
pages and changelog in line so no section falls back to English.
* fix(server): leave plugin listing translations to the registry
The daemon rejected manifests whose translations the registry would refuse,
so a plugin main installs could fail to load here. Paseo never reads
translations; the registry validates them at publish. Docs now say which
checks are automated at publish and which are human review.
* docs(plugins): describe the registry's final overview translation discovery
* style(server): format manifest test
* test(app): measure sidebar rows one at a time
After a reload the developer error toast appears while expectVerticalOrder
measures every row at once. Each concurrent boundingBox runs the toast
locator handler, and only one of them resumes, so the poll timed out on
every attempt since #7424. Measuring sequentially keeps one action in flight.
* test(app): return sidebar row measuring to main
#7480 hides the developer toast instead of running a locator handler, so
measuring the rows concurrently no longer races it. Reverts 41ac23016.
* test(app): wait for the compact shell before opening compact Changes
The shell survives the breakpoint, so right after the resize the wide
Explorer could still be visible: the test skipped the Explorer toggle and
the tab then disappeared, or toggled at the wrong time. Wait for the
compact-shell marker, as the composer helpers do since #7424.
* docs(website): translate main's plugin file panel docs
* test(app): edit the code font size after the font family remount
A committed appearance change remounts the settings screen through
AppearanceStyleBoundary, and the new form starts from the stored size.
Filling the size before that remount lost the edit in CI.
* docs(website): translate main's client/ui import docs
Follows #7474: one /client/ui entry, StreamedText instead of useRevealedText,
SettingsGroup dropped from the settings table, and the new
'UI imports in v0.13' migration section.
* test(app): wait for the previous layout's file panel picker to leave
After a resize the old layout's picker animates out while the new one is
already mounted, so the Use button matched two elements and the strict
locator failed. Wait for the shell's layout and a single picker first.
3.5 KiB
title, description, nav
| title | description | nav |
|---|---|---|
| 工作区 | 了解 Paseo 如何把工作目录、Agent、终端和浏览器组织成工作区。 | 工作区 |
工作区
Paseo 围绕工作区组织,而不是围绕聊天。
工作区是任务发生的地方。它有一个工作目录,可以同时包含多个正在运行的会话。在应用中,每个会话以一个标签页打开。
项目包含工作区
侧边栏从项目开始。项目可以是一个 git 仓库、一个 GitHub 项目,或者运行 Paseo daemon 的机器上的任意目录。
每个项目中都有工作区。例如:
my-app
├── main
├── fix-login-flow
└── redesign-settings
每个工作区都是一个独立的工作场所。你可以为主检出保留一个,为某个功能再创建一个,或者把一个 GitHub PR 作为另一个工作区打开。
使用 CLI 项目命令注册、列出、重命名或删除项目。
工作区包含会话
Agent 以会话的形式在工作区中运行。一个工作区可以同时打开一个或多个 Agent 会话,以及终端、浏览器和 diff。
这一点很重要,因为真实的开发很少能装进一段长长的聊天。你可能让一个 Agent 实现某个功能,打开一个终端运行服务,再启动另一个 Agent 审查 diff,同时在旁边开着浏览器。它们都属于同一个任务,所以应该放在一起。
在 Paseo 中,工作区是稳定的容器,会话是你在其中运行的东西。
选择隔离方式
每个工作区都有一种隔离模式:
- 本地 使用一个现有目录,例如你的主检出。当会话应该共享磁盘上已有的文件时使用。
- 新建 worktree 创建或打开一个受管理的 git worktree。当任务需要自己的目录和分支时使用。
工作区是产品概念;git worktree 是隔离其文件的一种方式。多个工作区可以指向同一个受管理的 worktree,Paseo 会在最后一个引用它的工作区被归档后删除该 worktree。
创建工作区
关于从启动并行 Agent 到审查和测试其改动的桌面端完整流程,请参见运行并行任务。
你可以在应用中或通过 CLI 创建工作区:
paseo workspace create --isolation local --path ~/dev/my-app --title main
paseo workspace create --isolation worktree --path ~/dev/my-app --base origin/main
你也可以创建工作区而不立即启动 Agent。工作区及其工作目录依然就绪;你可以打开终端、运行服务或浏览文件,稍后再启动 Agent。
无论哪种方式,工作区创建后都可以向其中添加更多会话。在 Agent 旁边打开一个终端,启动第二个 Agent 审查改动,或打开一个浏览器标签页检查本地服务。每个会话都是同一个工作区中的一个标签页。
创建 Agent 和创建工作区是两个独立的操作。如果你想让 Agent 位于某个已有的工作区,请传入工作区 ID。在人工操作的 shell 中直接运行 paseo run 会创建一个新的本地工作区;当某个 Agent 运行它时,Paseo 会识别调用者,并在调用者的工作区中创建一个子 Agent。
Worktree
Paseo 中的每个工作区都由一个工作目录支撑。当这个目录是 git worktree 时,每个任务都会获得独立的分支和隔离的环境。
如果想了解配置 setup 钩子、脚本和服务的细节,请继续阅读 Git worktree。