Files
paseo/public-docs/hub/concepts.zh-CN.md
T
Mohamed Boudra bd15e40e94 Serve paseo.sh in Simplified Chinese (#7373)
* 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.
2026-10-21 13:13:03 +07:00

3.5 KiB
Raw Blame History

title, description, nav
title description nav
Hub 工作原理 Provider 事件如何到达 workflow 和 Paseo daemon。 工作原理

Hub 工作原理

Hub 把请求到达的地方与运行 Agent 的机器连接起来。

GitHub / Slack / Discord / manual request
                    ↓
                  Hub
        matches a project trigger
                    ↓
                workflow
          runs ordered agent steps
                    ↓
             Paseo daemon
             starts the agent

组成部分

  • 连接让 Hub 接收来自 GitHub、Slack 或 Discord 的事件。
  • daemon 是一台运行 Paseo daemon 的已注册机器。
  • 项目把一份配置与它使用的连接和 daemon 组织在一起。
  • 环境指定 workflow step 在哪里运行:一个 daemon、它的工作目录,以及可选的 worktree。
  • 触发器说明哪个 Provider 事件可以启动 workflow,以及允许哪些事件通过。
  • workflow 是触发器匹配后运行的一组有序 step。
  • step 启动一次 Agent 执行,有自己的提示词、Agent 选择、凭据、回复能力和限制。

当项目使用 GitHub 来源时,配置位于 .paseo/hub.yml 以及按约定发现的 .paseo/workflows/*.yml 文件中。一个项目同一时间只有一个生效的配置版本。

从事件到 Agent

  1. Provider 向 Hub 发送事件。GitHub 和 Slack 使用 webhook;Discord 使用它的 gateway 连接;手动运行使用 Hub API。
  2. Hub 验证 Provider 事件,并识别它对应的项目资源,例如仓库、工作区或服务器。
  3. Hub 评估触发器及其过滤器,包括必填的 from_users 允许列表。
  4. 匹配的触发器根据当前生效的配置版本创建一次 workflow 运行。
  5. workflow 评估下一个 step。if 条件为假时跳过该 step;为真时在配置的 daemon 上启动它。
  6. daemon 启动 Agent,Hub 记录它的回复、结构化输出、状态和完成情况。
  7. 下一个 step 可以看到已完成 step 的输出。没有剩余 step 时,workflow 运行完成。

完整的配置示例见 Workflow。

激活

Hub 同步配置包时,会校验每个源文件并解析其中的引用:

  • filters.repo、filters.workspace 和 filters.guild 必须指向通过组织的连接可以访问的资源。
  • environment.daemon 必须匹配一个已注册 daemon 的友好 slug。
  • step id、表达式、输入过滤器、输出 schema 和时长必须有效。
  • 每个有限的环境或命名 Agent 结果都必须存在并通过校验。
  • 提示词片段必须能在该提交中 .paseo/workflows/partials/ 下解析到。

如果激活失败,Hub 会保留之前生效的版本。Configuration 标签页会显示失败的同步及其校验错误;Activity 继续反映上一个生效的版本。

安全边界

对于来自外部的事件,触发器要求 from_users 允许列表不能为空。请保护好配置仓库,因为任何能够修改生效配置的人,都可以决定项目使用哪些连接、daemon 和 Agent 能力。

这些控制措施不会把 Agent 放进沙箱,也不会让输入变得安全。主机边界、Provider 原生策略和纵深防御方面的指导见 Hub 安全。

触发器从不隐含 GitHub 凭据。无论运行由什么启动,只有当 step 声明了 github 块时,它才拥有 GitHub 权限。