* 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.
5.0 KiB
title, description, nav
| title | description | nav |
|---|---|---|
| 连接 | 通过 SSH、中继或 Tailscale 把 Paseo 客户端连接到你的 daemon。 | 连接 |
连接
你的 Paseo 应用连接的是运行在你电脑或服务器上的 daemon。Paseo 桌面端和 CLI 可以通过 SSH 隧道连接。移动客户端可以通过 Paseo 中继连接,或者用 Tailscale 直接连接。
这里说的是客户端到 daemon 的传输。如果你要找的是由 GitHub、Slack 和 Discord 事件启动 Agent 的服务,那是 Hub。
SSH
SSH 传输通过你本地的 OpenSSH 客户端连接到一个已有的 daemon。它不会在远程主机上安装、启动或配置 Paseo。
连接之前:
- 在远程主机上启动 Paseo daemon。
- 确认
ssh user@host可以通过密钥或 SSH agent 登录。Paseo 使用非交互式 SSH,并遵循你的 OpenSSH 配置。
CLI 接受 SSH URI 作为主机:
paseo --host ssh://user@host ls -a
daemon 应位于远程主机的 127.0.0.1:6767。SSH URL 中的端口是 SSH 服务器的端口:
paseo --host ssh://user@host:2222 ls -a
用 daemonPort 设置不同的远程 daemon 端口:
paseo --host 'ssh://user@host?daemonPort=7777' ls -a
请把 --host 放在命令之前。paseo daemon status 查看的是默认的本地 home;要查询远程 daemon,请使用 paseo --host ssh://user@host daemon status。paseo --host ssh://user@host run --cwd /path/on/remote ... 需要一个在远程主机上存在的工作目录。
在 Paseo 桌面端中,打开 设置 → 添加主机 → 远程 SSH,输入同样的 ssh:// 目标地址;如果端口与默认值不同,请带上 :port 或 ?daemonPort=。
如果远程 daemon 设置了密码,请在 守护进程密码 中输入;它会随主机一起保存,并在每次连接时发送,与直连的密码一样。SSH 登录本身仍然基于密钥,Paseo 从不提示输入 SSH 密码。
Paseo 中继
中继无需 Tailscale、端口转发或网络配置即可工作。流量是端到端加密的。
在你启用之前,中继是关闭的。
在 Paseo 桌面端启用中继
- 打开 设置 → 你的主机 → 配对设备。
- 选择 启用中继。
- 用手机上的 Paseo 扫描二维码,或者复制配对链接并粘贴到手机应用中。
在 CLI 中启用中继
运行:
paseo daemon pair
在提示时确认。Paseo 会打印二维码和配对链接。用手机上的 Paseo 扫描二维码,或在手机应用中选择 粘贴配对链接。
Tailscale
在 daemon 所在的机器和你的手机上安装 Tailscale,并在两台设备上登录同一个 tailnet。
1. 找到 daemon 机器的 Tailscale IP
在 daemon 机器上运行:
tailscale ip -4
复制它打印出的地址。下面的示例使用 100.101.102.103。
2. 配置 daemon
打开 ~/.paseo/config.json,把 daemon.listen 设置为 Tailscale IP:
{
"$schema": "https://paseo.sh/schemas/paseo.config.v1.json",
"version": 1,
"daemon": {
"listen": "100.101.102.103:6767"
}
}
保留文件中已有的其他设置。如果文件中已有 daemon 对象,请把 listen 加到该对象中。
如需用密码限制访问,请参见密码认证。
重启 daemon:
paseo daemon restart
如果 daemon 由 Paseo 桌面端管理,请使用 设置 → 你的主机 → 概览 → 重启 Daemon。
3. 连接手机应用
- 在手机上连接 Tailscale。
- 打开 Paseo,进入 设置 → 添加主机 → 直接连接。
- 在 Host 中输入 Tailscale IP。
- 在 端口 中输入
6767。 - 保持 使用 SSL 关闭,然后选择 连接。
如果该主机已经通过中继配对过,Paseo 会把直连添加到同一个主机上。
故障排查
- SSH 认证失败:在终端中运行
ssh user@host,在那里修复密钥、agent、主机密钥或~/.ssh/config条目。Paseo 不会提示输入 SSH 密码。 - SSH 能连上但 Paseo 被拒绝:在远程主机上运行
paseo daemon status。SSH 传输不会启动 daemon。 - SSH 能连上但 Paseo 报告 “Password required”:远程 daemon 受密码保护。从主机中移除这个 SSH 连接并重新添加,这次在 守护进程密码 中输入 daemon 密码。
- 连接超时:检查两台设备上的 Tailscale 是否都已连接,以及你使用的是否是 daemon 机器的 Tailscale IP。
- 连接被拒绝:运行
paseo daemon status,确认 daemon 正在配置的 IP 和端口上运行。 - 配置修改没有生效:运行
paseo reload。daemon.listen是启动时生效的设置,所以当命令提示时请重启。