Files
paseo/public-docs/hub/quickstart.zh-CN.md
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

5.7 KiB

title, description, nav
title description nav
Hub 快速开始 在本地运行 Hub,并用你机器上的 Agent 回复一次 Slack 提及。 快速开始

Hub 快速开始

在你的机器上运行 Hub,无需公开服务器即可连接 Slack,并用仓库中的 Agent 回复一次提及。Hub 的浏览器设置流程会把你引导到终端,paseo hub init 会为你编写并部署一个起步触发器。

你需要已安装并正在运行的 Paseo、Node.js,以及一个你可以在其中创建应用的 Slack 工作区。

1. 启动 Hub

npx @getpaseo/hub

打开它打印的地址(通常是 http://localhost:3000),并按 Hub 的要求创建管理员账号。

首次运行不需要数据库、Docker、环境变量或 API key。Hub 会创建内嵌数据库和你的组织。

Hub 会打开 Home,这是一份清单,列出了提及能够启动 Agent 之前必须满足的四件事:连接一个应用、连接一个 daemon、创建一个触发器、运行它。下面的步骤就是这四件事。Home 会根据你的组织实际拥有的内容判断每一项,打印下一步需要的命令,并在四项全部完成后收起。

2. 连接 Slack

Set up your apps 说明了如何创建 Slack 应用,并提供一份可以粘贴到 Slack 中的 manifest。保持选择 Socket Mode。它由 Hub 主动向外连接,不需要公开地址或 HTTPS。

把 App-level token 和 Bot token 粘贴回 Hub,然后选择 Connect Slack。把机器人邀请到你要使用它的频道:

/invite @Paseo

GitHub 和 Discord 可以稍后再配置。它们的设置一直在 Apps 下可用。

3. 连接代码所在的机器

Connect a daemon 会显示一条已经填好此 Hub 地址的命令:

paseo hub login http://localhost:3000

在代码所在的机器上、Agent 要工作的仓库中运行它。之后也请在该目录中运行下面的初始化命令,这样它就会成为触发器的工作目录。

在打开的浏览器标签页中批准登录。保持 Hub 标签页打开:它会监测 daemon,并自动显示 Daemon connected。daemon 连接后,选择 Continue。

4. 创建起步触发器

批准登录后,对 Connect this daemon to Paseo Hub? 和 Allow Hub automations to run agents on this daemon? 都回答 Yes。执行权限默认为否,因此请为本次设置显式开启。如果你回答了否,Home 会显示 daemon 已连接但无法运行 Agent,并给出修复命令:paseo hub permissions grant hub.execute。

然后运行:

paseo hub init

选择 Custom endpoint 并确认 http://localhost:3000。设置流程会复用你的登录和 daemon 连接,然后列出可用于此触发器的应用连接。如果只连接了一个 Slack 工作区,它会自动选择该连接。如果有多个可用连接,请选择 Trigger connection。如果没有任何连接就绪,设置流程会把你引导到 Hub → Apps,并在选择 Agent 或写入文件之前停止。

问题 需要填写的内容
起步 Agent 的 Provider、模型和模式 你 daemon 上的 Claude、Codex 或 OpenCode。建议的模型和模式条目即其默认值。
你的 Slack 成员 ID U01234567,唯一允许触发机器人的账号。
现在部署吗? 是,以在 Hub 中激活此触发器。

Provider 必须提供可选择的模型和执行模式。如果没有默认模式,请选择 Agent 应该使用的模式。Hub 以无人值守的方式运行 Agent,因此只接受 Claude、Codex 和 OpenCode,并会在部署前根据你的 daemon 检查模型、模式和选项。其他 Provider,或 daemon 不提供的值,会在这里就被拒绝,而不是等到第一次运行。

查找 Slack ID 说明了如何复制你的成员 ID。Slack 工作区来自所选的应用连接。

设置流程会校验触发器并写入:

.paseo/
└── triggers/
    └── slack-help.yml

如果 slack-help.yml 已经存在,设置流程会在替换该文件之前询问你。其他文件保持不变。如果你拒绝部署,准备好后请在这个仓库中运行 paseo hub deploy。

5. 提及机器人

在你邀请了机器人的频道中:

@Paseo have a look

Hub 会在你的 daemon 上启动 Agent,并把它的回复发布在 Slack 子区中。终端会给出 Triggers 的链接,你可以在那里管理触发器并查看它的运行记录。如果什么都没运行,活动会告诉你这次提及是被过滤掉了,还是根本没有匹配到任何触发器。

接下来

  • Hub 工作原理:一个事件如何变成你 daemon 上的一次 workflow 运行。
  • 生成的起步触发器:逐字段解释设置流程写入的文件。
  • Workflow:路由、提示词和 Provider 回复。
  • Hub 安全:在扩大 from_users 或授予 Agent GitHub 权限之前请先阅读。

Hub 把本地状态保存在你的用户数据目录中,通常是 ~/.local/share/paseo-hub。当本地运行不再满足需求时,自托管介绍了部署和高级配置。