* 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.4 KiB
title, description, nav
| title | description | nav |
|---|---|---|
| 为 Hub 配置 GitHub | 创建 Hub 用于仓库访问和事件触发器的 GitHub App。 | GitHub App |
为 Hub 配置 GitHub
Hub 通过一个由你创建并拥有的 GitHub App 与 GitHub 通信。一个 App 服务于一个 Hub;安装它的每个账号或组织都会成为一个连接。
打开 Apps → GitHub。Hub 会给出当前的回调 URL、所需的仓库权限、订阅的事件,以及需要从 GitHub 复制回来的字段。保存之前,Hub 会验证这个 App。
公开 URL 要求
仓库访问和安装不需要 GitHub webhook。GitHub 事件触发器和配置同步则需要:GitHub 必须能够把事件投递到一个公开的 HTTPS URL。
在本地 HTTP 的 Hub 上,Apps 指南允许你配置仓库访问,并说明事件设置不可用。设置 PASEO_HUB_APP_URL 后,在 Hub 的公开地址上重新打开它,即可添加 webhook 密钥和事件。
GitHub 会使用以下 Hub URL:
| 设置项 | Hub URL |
|---|---|
| Homepage URL | <PASEO_HUB_APP_URL> |
| Callback URL | <PASEO_HUB_APP_URL>/api/integrations/github/callback |
| Setup URL | <PASEO_HUB_APP_URL>/api/integrations/github/setup |
| Webhook URL | <PASEO_HUB_APP_URL>/webhook |
请保持 GitHub 的 SSL 验证开启。
订阅 GitHub 事件
在 Subscribe to events 下,选择 Issue comment、Issues、Pull requests、Pull request review、Pull request review comment 和 Push。github.pull_request_created 和 github.pull_request_label_added 需要 Pull requests。
连接仓库
Hub 验证 App 之后,选择 Install on GitHub。选择 App 可以访问的账号或组织以及仓库。
请从 Hub 发起安装,而不是使用 GitHub 自己的安装按钮。这一来一回会把安装绑定到当前的 Hub 组织。
连接会以一个由账号派生的 slug 出现。例如,安装在 getpaseo 上会成为 getpaseo-github。Hub 组织需要多少安装就可以连接多少。
连接提供什么
- 事件:来自该安装可见仓库的 issue、评论、审查和推送。参见 GitHub 触发器。
- 配置同步:仓库可以保存标准的
.paseo配置包。参见配置。 - 执行凭据:对于明确请求 GitHub 权限的 workflow step,Hub 会签发限定范围的 GitHub App token。
daemon 上已认证的 gh CLI 不会配置 Hub 的 GitHub 集成。它仍然可以在 Hub 限定的 GitHub 权限之外为 Agent 服务,但受 daemon 和 Provider 自身的环境与权限策略约束。
通过环境变量配置
把应用密钥保存在 Hub 之外的部署可以设置:
GITHUB_APP_ID=
GITHUB_APP_SLUG=
GITHUB_APP_CLIENT_ID=
GITHUB_APP_CLIENT_SECRET=
GITHUB_APP_PRIVATE_KEY=
GITHUB_WEBHOOK_SECRET=
私钥是从 GitHub 下载的 PEM 文件的内容。如果部署挂载了这个文件,请改用 GITHUB_APP_PRIVATE_KEY_PATH。
环境变量配置优先于已保存的 GitHub App,并在 Apps 下显示为 Managed by environment。完整的环境变量配置包含 webhook 密钥,因此需要一个公开的 webhook 地址。