Docs: update zh-CN translations and pipeline

What:
- update zh-CN glossary, TM, and translator prompt
- regenerate zh-CN docs and apply targeted fixes
- add zh-CN AGENTS pipeline guidance

Why:
- address terminology/spacing feedback from #6995

Tests:
- pnpm build && pnpm check && pnpm test
This commit is contained in:
Josh Palmer
2026-02-03 13:23:00 -08:00
parent 9f03791aa9
commit a3ec2d0734
228 changed files with 10651 additions and 10475 deletions
+44 -44
View File
@@ -1,10 +1,10 @@
---
read_when:
- 开始新的 OpenClaw 智能体会话
- 启用或审默认 Skills
summary: 默认 OpenClaw 智能体指令及个人助手设置的 Skills 清单
- 启动新的 OpenClaw 智能体会话
- 启用或审默认 Skills
summary: 个人助手设置的默认 OpenClaw 智能体指令 Skills 列表
x-i18n:
generated_at: "2026-02-01T21:36:58Z"
generated_at: "2026-02-03T10:09:19Z"
model: claude-opus-4-5
provider: pi
source_hash: 20ec2b8d8fc03c16bbf0a75f011092e86382ca4182e8c0a4bc5f8ffd2be9c647
@@ -16,7 +16,7 @@ x-i18n:
## 首次运行(推荐)
OpenClaw 为智能体使用专用的工作区目录。默认路径`~/.openclaw/workspace`(可通过 `agents.defaults.workspace` 配置)。
OpenClaw 为智能体使用专用的工作区目录。默认:`~/.openclaw/workspace`(可通过 `agents.defaults.workspace` 配置)。
1. 创建工作区(如果尚不存在):
@@ -32,7 +32,7 @@ cp docs/reference/templates/SOUL.md ~/.openclaw/workspace/SOUL.md
cp docs/reference/templates/TOOLS.md ~/.openclaw/workspace/TOOLS.md
```
3. 可选:如果你要个人助手 Skills 清单,请用此文件替换 AGENTS.md
3. 可选:如果你要个人助手 Skills 列表,用此文件替换 AGENTS.md
```bash
cp docs/reference/AGENTS.default.md ~/.openclaw/workspace/AGENTS.md
@@ -46,75 +46,75 @@ cp docs/reference/AGENTS.default.md ~/.openclaw/workspace/AGENTS.md
}
```
## 安全默认设置
## 安全默认
- 不要将目录内容或密钥转储到聊天中。
- 除非明确要求,不要行破坏性命令。
- 不要向外部消息平台发送部分/流式回复(发送最终回复)。
- 不要将目录或密钥转储到聊天中。
- 除非明确要求,否则不要行破坏性命令。
- 不要向外部消息界面发送部分/流式回复(发送最终回复)。
## 会话启动(必需)
## 会话开始(必需)
- 读取 `SOUL.md``USER.md``memory.md`,以及 `memory/` 中今天和昨天的文件。
- 在回复之前完成上述操作。
- 读取 `SOUL.md``USER.md``memory.md`,以及 `memory/`今天和昨天的文件。
- 在回复之前完成操作。
## 灵魂文件(必需)
## Soul(必需)
- `SOUL.md` 定义身份、语气和边界。保持其内容最新。
- 如果你改了 `SOUL.md`告知用户。
- 每次会话你都是一个全新实例;连续性存在这些文件中。
- `SOUL.md` 定义身份、语气和边界。保持其新。
- 如果你改了 `SOUL.md`,告知用户。
- 你是每个会话的新实例;连续性存在这些文件中。
## 共享空间(推荐)
- 你不是用户的代言人;在群聊或公开渠道中请谨慎发言
- 你不是用户的代言人;在群聊或公共频道中要小心
- 不要分享私人数据、联系信息或内部笔记。
## 记忆系统(推荐)
- 每日日志:`memory/YYYY-MM-DD.md`(如需要请创建 `memory/` 目录)。
- 长期记忆:`memory.md` 用于持久保存事实、偏好和决
- 会话启动时,读取今天 + 昨天的日志以及 `memory.md`(如果存在)。
- 记录:决、偏好、约束条件、待处理事项。
- 除非明确要求,避免记录密钥。
- 每日日志:`memory/YYYY-MM-DD.md`(如需要请创建 `memory/`)。
- 长期记忆:`memory.md` 用于持久事实、偏好和决
- 会话开始时,读取今天 + 昨天 + `memory.md`(如果存在)。
- 捕获:决、偏好、约束、待办事项。
- 除非明确要求,否则避免存储密钥。
## 工具 Skills
## 工具 Skills
- 工具于 Skills 中;需要时遵循每个 Skills`SKILL.md`
- 将环境相关的备注保存`TOOLS.md`Skills 备注)中
- 工具存在于 Skills 中;需要时遵循每个 Skill 的 `SKILL.md`
-`TOOLS.md` 中保存环境特定的笔记Skills 注意事项)
## 备份提示(推荐)
如果你将此工作区视为 Clawd 的"记忆",请将其设为 git 仓库(最好是私有的),以便备份 `AGENTS.md` 和记忆文件。
如果你将此工作区视为 Clawd 的"记忆",请将其设为 git 仓库(最好是私有的),这样 `AGENTS.md`你的记忆文件就会被备份
```bash
cd ~/.openclaw/workspace
git init
git add AGENTS.md
git commit -m "Add Clawd workspace"
# 可选:添加私有远程仓库并推送
# 可选:添加私有远程仓库 + push
```
## OpenClaw 的功能
- 运行 WhatsApp Gateway网关 + Pi 编程智能体,使助手可以读写聊天、获取上下文,并通过宿主 Mac 运行 Skills。
- macOS 应用管理权限(屏幕录制、通知、麦克风)并通过其内置二进制文件提供 `openclaw` CLI。
- 直接聊天默认合并到智能体的 `main` 会话;群组保持隔离,格式`agent:<agentId>:<channel>:group:<id>`(房间/频道:`agent:<agentId>:<channel>:channel:<id>`);心跳机制保持后台任务存活。
- 运行 WhatsApp Gateway 网关 + Pi 编程智能体,使助手可以读写聊天、获取上下文,并通过主 Mac 运行 Skills。
- macOS 应用管理权限(屏幕录制、通知、麦克风)并通过其内置二进制文件暴露 `openclaw` CLI。
- 私聊默认折叠到智能体的 `main` 会话;群组保持隔离为 `agent:<agentId>:<channel>:group:<id>`(房间/频道:`agent:<agentId>:<channel>:channel:<id>`);心跳保持后台任务存活。
## 核心 Skills(在设置 → Skills 中启用)
- **mcporter** — 用于管理外部 Skills 后端的工具服务器运行时/CLI。
- **Peekaboo** — 支持可选 AI 视觉分析的快速 macOS 截图工具
- **mcporter** — 用于管理外部 Skill 后端的工具服务器运行时/CLI。
- **Peekaboo** — 快速 macOS 截图,可选 AI 视觉分析
- **camsnap** — 从 RTSP/ONVIF 安防摄像头捕获帧、片段或运动警报。
- **oracle** — 支持会话回放和浏览器控制的 OpenAI 就绪智能体 CLI。
- **oracle** — 支持 OpenAI 智能体 CLI,具有会话回放和浏览器控制
- **eightctl** — 从终端控制你的睡眠。
- **imsg** — 发送、读取、流式传输 iMessage 和短信。
- **wacli** — WhatsApp CLI:同步、搜索、发送。
- **discord** — Discord 操作:表情反应、贴纸、投票。使用 `user:<id>``channel:<id>` 目标(纯数字 ID 有歧义)。
- **discord** — Discord 操作:应、贴纸、投票。使用 `user:<id>``channel:<id>` 目标(纯数字 id 有歧义)。
- **gog** — Google Suite CLIGmail、日历、云端硬盘、通讯录。
- **spotify-player** — 终端 Spotify 客户端,用于搜索/排队/控制播放。
- **sag** — 具有 mac 风格 say 体验的 ElevenLabs 语音;默认流式输出到扬声器。
- **Sonos CLI** — 从脚本控制 Sonos 音箱(发现/状态/播放/音量/分组)。
- **sag** — 具有 mac 风格 say UX 的 ElevenLabs 语音;默认流式输出到扬声器。
- **Sonos CLI** — 从脚本控制 Sonos 扬声器(发现/状态/播放/音量/分组)。
- **blucli** — 从脚本播放、分组和自动化 BluOS 播放器。
- **OpenHue CLI** — Philips Hue 灯光控制,用于场景和自动化
- **OpenHue CLI** — 用于场景和自动化的 Philips Hue 照明控制
- **OpenAI Whisper** — 本地语音转文字,用于快速听写和语音邮件转录。
- **Gemini CLI** — 从终端使用 Google Gemini 模型进行快速问答。
- **bird** — X/Twitter CLI,无需浏览器即可发推、回复、阅读话题和搜索。
@@ -122,10 +122,10 @@ git commit -m "Add Clawd workspace"
## 使用说明
- 脚本编写优先使用 `openclaw` CLImac 应用负责处理权限。
- 从 Skills 标签页运行安装;如果二进制文件已存在,安装按钮会自动隐藏
- 脚本编写优先使用 `openclaw` CLImac 应用处理权限。
- 从 Skills 标签页运行安装;如果二进制文件已存在,它会隐藏按钮
- 保持心跳启用,以便助手可以安排提醒、监控收件箱和触发摄像头捕获。
- Canvas UI 以全屏方式运行并带有原生叠加层。避免将关键控件放置在左上/右上/底部边缘;在布局中添加明确的边距,不要依赖安全区域内边距。
- 对于浏览器驱动的验证,使用 `openclaw browser`tabs/status/screenshot,配合 OpenClaw 管理的 Chrome 配置文件
- 对于 DOM 检查,使用 `openclaw browser eval|query|dom|snapshot`(需要机器输出时使用 `--json`/`--out`)。
- 对于交互操作,请使用 `openclaw browser click|type|hover|drag|select|upload|press|wait|navigate|back|evaluate|run`click/type 需要快照引用;使用 `evaluate` 进行 CSS 选择器操作)。
- Canvas UI 以全屏运行并带有原生叠加层。避免在左上/右上/底部边缘放置关键控件;在布局中添加显式边距,不要依赖安全区域内边距。
- 对于浏览器驱动的验证,使用带有 OpenClaw 管理的 Chrome 配置文件的 `openclaw browser`tabs/status/screenshot)。
- 对于 DOM 检查,使用 `openclaw browser eval|query|dom|snapshot`(需要机器输出时使用 `--json`/`--out`)。
- 对于交互使用 `openclaw browser click|type|hover|drag|select|upload|press|wait|navigate|back|evaluate|run`click/type 需要 snapshot 引用;CSS 选择器使用 `evaluate`)。
+50 -50
View File
@@ -1,88 +1,88 @@
---
read_when:
- 发布新的 npm 版本
- 发布新的 macOS 应用版本
- 发布前验证元数据
summary: npm + macOS 应用的步发布检查清单
- 发布新的 npm 版本
- 发布新的 macOS 应用版本
- 发布前验证元数据
summary: npm + macOS 应用的步发布清单
x-i18n:
generated_at: "2026-02-01T21:37:13Z"
generated_at: "2026-02-03T10:09:28Z"
model: claude-opus-4-5
provider: pi
source_hash: 97c911cf70a0b98838d871cb99826b99f3da63295a744f412e3c05021363a7b5
source_hash: 1a684bc26665966eb3c9c816d58d18eead008fd710041181ece38c21c5ff1c62
source_path: reference/RELEASING.md
workflow: 15
---
# 发布检查清单(npm + macOS
# 发布清单(npm + macOS
从仓库根目录使用 `pnpm`Node 22+)。在打标签/发布前保工作干净。
从仓库根目录使用 `pnpm`(Node 22+)。在打标签/发布前保工作干净。
## 操作员触发
当操作员说"发布"时,立即执行以下预检(除非被阻塞,否则不要问):
当操作员说"release"时,立即执行预检(除非遇到阻碍否则不要额外提问):
- 阅读本文档和 `docs/platforms/mac/release.md`
-`~/.profile` 加载环境变量确认 `SPARKLE_PRIVATE_KEY_FILE` + App Store Connect 变量已设置(SPARKLE_PRIVATE_KEY_FILE 应位于 `~/.profile` 中)。
-`~/.profile` 加载环境变量确认 `SPARKLE_PRIVATE_KEY_FILE` + App Store Connect 变量已设置(SPARKLE_PRIVATE_KEY_FILE 应位于 `~/.profile` 中)。
- 如需要,使用 `~/Library/CloudStorage/Dropbox/Backup/Sparkle` 中的 Sparkle 密钥。
1. **版本元数据**
1. **版本元数据**
- [ ] 更新 `package.json` 版本(例如 `2026.1.29`)。
- [ ] 运行 `pnpm plugins:sync`同步扩展包版本 + 变更日志。
- [ ] 更新 `package.json` 版本(例如 `2026.1.29`)。
- [ ] 运行 `pnpm plugins:sync`对齐扩展包版本变更日志。
- [ ] 更新 CLI/版本字符串:[`src/cli/program.ts`](https://github.com/openclaw/openclaw/blob/main/src/cli/program.ts) 和 [`src/provider-web.ts`](https://github.com/openclaw/openclaw/blob/main/src/provider-web.ts) 中的 Baileys user agent。
- [ ] 确认包元数据(name、description、repository、keywords、license)以及 `bin` 映射指向 [`openclaw.mjs`](https://github.com/openclaw/openclaw/blob/main/openclaw.mjs) 对应 `openclaw`
- [ ] 如果依赖有变,运行 `pnpm install` 确保 `pnpm-lock.yaml` 是最新的。
- [ ] 确认包元数据(name、description、repository、keywords、license)以及 `bin` 映射指向 [`openclaw.mjs`](https://github.com/openclaw/openclaw/blob/main/openclaw.mjs) 作为 `openclaw`
- [ ] 如果依赖有变,运行 `pnpm install` 确保 `pnpm-lock.yaml` 是最新的。
2. **构建产物**
2. **构建产物**
- [ ] 如果 A2UI 输入有变,运行 `pnpm canvas:a2ui:bundle` 并提交更新后的 [`src/canvas-host/a2ui/a2ui.bundle.js`](https://github.com/openclaw/openclaw/blob/main/src/canvas-host/a2ui/a2ui.bundle.js)。
- [ ] 如果 A2UI 输入有变,运行 `pnpm canvas:a2ui:bundle` 并提交更新后的 [`src/canvas-host/a2ui/a2ui.bundle.js`](https://github.com/openclaw/openclaw/blob/main/src/canvas-host/a2ui/a2ui.bundle.js)。
- [ ] `pnpm run build`(重新生成 `dist/`)。
- [ ] 验证 npm 包的 `files` 包含所有必需的 `dist/*` 文件夹(特别是 `dist/node-host/**``dist/acp/**`,用于无界面 node + ACP CLI)。
- [ ] 验证 npm 包的 `files` 包含所有必需的 `dist/*` 文件夹(特别是用于 headless node + ACP CLI 的 `dist/node-host/**``dist/acp/**`)。
- [ ] 确认 `dist/build-info.json` 存在并包含预期的 `commit` 哈希(CLI 横幅在 npm 安装时使用此信息)。
- [ ] 可选:构建后运行 `npm pack --pack-destination /tmp`;检查 tarball 内容并保留用于 GitHub 发布(**不要**提交它)。
- [ ] 可选:构建后运行 `npm pack --pack-destination /tmp`;检查 tarball 内容并保留以备 GitHub 发布使用**不要**提交它)。
3. **变更日志文档**
3. **变更日志文档**
- [ ] 更新 `CHANGELOG.md`包含面向用户的重点内容(如文件不存在则创建);条目按版本严格降序排列。
- [ ] 确保 README 中的示例/参数与当前 CLI 行为一致(特别是新命令或选项)。
- [ ] 更新 `CHANGELOG.md`添加面向用户的亮点(如文件不存在则创建);按版本严格降序排列条目
- [ ] 确保 README 示例/标志与当前 CLI 行为匹配(特别是新命令或选项)。
4. **验证**
- [ ] `pnpm lint`
- [ ] `pnpm build`
- [ ] `pnpm check`
- [ ] `pnpm test`(如需覆盖率输出则使用 `pnpm test:coverage`
- [ ] `pnpm run build`(测试后的最终安装完整性检查)
- [ ] `pnpm release:check`(验证 npm pack 内容)
- [ ] `OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke`(Docker 安装冒烟测试,快速路径;发布前必须执行
- [ ] `OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke`(Docker 安装冒烟测试,快速路径;发布前必
- 如果已知上一个 npm 发布版本有问题,为预安装步骤设置 `OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>``OPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1`
- [ ] (可选)完整安装冒烟测试(加非 root + CLI 覆盖):`pnpm test:install:smoke`
- [ ] (可选)安装端到端测试Docker,运行 `curl -fsSL https://openclaw.ai/install.sh | bash`执行新手引导,然后运行真实工具调用):
- [ ](可选)完整安装程序冒烟测试(加非 root + CLI 覆盖):`pnpm test:install:smoke`
- [ ](可选)安装程序 E2EDocker,运行 `curl -fsSL https://openclaw.ai/install.sh | bash`,新手引导,然后运行真实工具调用):
- `pnpm test:install:e2e:openai`(需要 `OPENAI_API_KEY`
- `pnpm test:install:e2e:anthropic`(需要 `ANTHROPIC_API_KEY`
- `pnpm test:install:e2e`(需要两个密钥;运行两个提供商)
- [ ] (可选)如果你的更改影响发送/接收路径,抽查 Web Gateway网关。
- [ ](可选)如果你的更改影响发送/接收路径,抽查 Web Gateway 网关。
5. **macOS 应用(Sparkle**
- [ ] 构建 + 签名 macOS 应用,然后打包为 zip 用于分发。
- [ ] 生成 Sparkle appcast(通过 [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh) 生成 HTML 说明)并更新 `appcast.xml`
- [ ] 保留应用 zip(和可选的 dSYM zip)以附加到 GitHub 发布。
- [ ] 按照 [macOS 发布](/platforms/mac/release) 获取确切命令和所需环境变量。
- `APP_BUILD` 必须是数字且单调递增(不 `-beta`),以便 Sparkle 正确比较版本。
- [ ] 构建签名 macOS 应用,然后压缩以供分发。
- [ ] 生成 Sparkle appcast(通过 [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh) 生成 HTML 注释)并更新 `appcast.xml`
- [ ] 保留应用 zip(和可选的 dSYM zip)以便附加到 GitHub 发布。
- [ ] 按照 [macOS 发布](/platforms/mac/release) 获取确切命令和所需环境变量。
- `APP_BUILD` 必须是数字且单调递增(不 `-beta`),以便 Sparkle 正确比较版本。
- 如果进行公证,使用从 App Store Connect API 环境变量创建的 `openclaw-notary` 钥匙串配置文件(参见 [macOS 发布](/platforms/mac/release))。
6. **发布(npm**
- [ ] 确认 git 状态干净;按需提交并推送。
- [ ] 确认 git 状态干净;根据需要提交并推送。
- [ ] 如需要,`npm login`(验证 2FA)。
- [ ] `npm publish --access public`(预发布版本使用 `--tag beta`)。
- [ ] 验证注册表:`npm view openclaw version``npm view openclaw dist-tags``npx -y openclaw@X.Y.Z --version`(或 `--help`)。
### 故障排除(来自 2.0.0-beta2 发布的经验
### 故障排除(来自 2.0.0-beta2 发布的笔记
- **npm pack/publish 挂起或生巨大 tarball**`dist/OpenClaw.app` 中的 macOS 应用包(和发布 zip)被包含进了包中。通过 `package.json``files` 白名单发布内容来修复(包含 dist 子目录、docs、skills;排除应用包)。使`npm pack --dry-run` 确认 `dist/OpenClaw.app`列出。
- **npm auth dist-tags 操作时进入 web 循环**:使用传统认证以获取 OTP 提示:
- **npm pack/publish 挂起或生巨大 tarball**`dist/OpenClaw.app` 中的 macOS 应用包(和发布 zip)被扫入包中。通过 `package.json``files` 白名单发布内容来修复(包含 dist 子目录、docs、skills;排除应用包)。用 `npm pack --dry-run` 确认 `dist/OpenClaw.app` 未列出。
- **npm auth dist-tags 的 Web 循环**:使用旧版认证以获取 OTP 提示:
- `NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add openclaw@X.Y.Z latest`
- **`npx` 验证失败并 `ECOMPROMISED: Lock compromised`**:使用新缓存重试:
- **`npx` 验证失败并显示 `ECOMPROMISED: Lock compromised`**:使用新缓存重试:
- `NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@X.Y.Z --version`
- **延迟修复后需要重新指向标签**:强制更新并推送标签,然后确保 GitHub 发布资产仍然匹配:
- `git tag -f vX.Y.Z && git push -f origin vX.Y.Z`
@@ -90,23 +90,23 @@ x-i18n:
7. **GitHub 发布 + appcast**
- [ ] 打标签并推送:`git tag vX.Y.Z && git push origin vX.Y.Z`(或 `git push --tags`)。
- [ ]`vX.Y.Z` 创建/新 GitHub 发布,**标题为 `openclaw X.Y.Z`**(不仅仅是标签);正文应包含该版本的**完整**变更日志部分(亮点 + 更 + 修复),内联示(不使用裸链接),且**正文中不得重复标题**。
- [ ] 附加产物:`npm pack` tarball(可选)、`OpenClaw-X.Y.Z.zip``OpenClaw-X.Y.Z.dSYM.zip`(如生成)。
- [ ] 提交更新后的 `appcast.xml` 并推送(Sparkle 从 main 分支获取)。
- [ ]一个干净的临时目录(无 `package.json`)运行 `npx -y openclaw@X.Y.Z send --help` 确认安装/CLI 入口点正常工作。
- [ ] 布/分享发布说明。
- [ ]`vX.Y.Z` 创建/新 GitHub 发布,**标题为 `openclaw X.Y.Z`**(不仅仅是标签);正文应包含该版本的**完整**变更日志部分(亮点 + 更 + 修复),内联示(裸链接),且**不得在正文中重复标题**。
- [ ] 附加产物:`npm pack` tarball(可选)、`OpenClaw-X.Y.Z.zip``OpenClaw-X.Y.Z.dSYM.zip`(如生成)。
- [ ] 提交更新后的 `appcast.xml` 并推送(Sparkle 从 main 获取)。
- [ ] 从干净的临时目录(无 `package.json`运行 `npx -y openclaw@X.Y.Z send --help` 确认安装/CLI 入口点正常工作。
- [ ] 布/分享发布说明。
## 插件发布范围(npm
我们只发布 `@openclaw/*` 作用域下的**现有 npm 插件**。未上架 npm 的内置插件仅保留为**磁盘目录形式**(仍通过 `extensions/**` 分发)。
我们只发布 `@openclaw/*` 范围下的**现有 npm 插件**。不在 npm 的内置插件保持**磁盘**(仍 `extensions/**` 中发布)。
确定列表的流程:
获取列表的流程:
1. `npm search @openclaw --json`记录包名。
2.`extensions/*/package.json` 中的名称进行比较。
3. 只发布**交集部分**(已在 npm 上)。
1. `npm search @openclaw --json`捕获包名。
2.`extensions/*/package.json` 名称比较。
3. 只发布**交集**(已在 npm 上)。
当前 npm 插件列表(按需更新):
当前 npm 插件列表(根据需要更新):
- @openclaw/bluebubbles
- @openclaw/diagnostics-otel
@@ -120,4 +120,4 @@ x-i18n:
- @openclaw/zalo
- @openclaw/zalouser
发布说明还必须标注**新的可选内置插件**,这些插件**默认未启用**(例如:`tlon`)。
发布说明还必须标注**默认未启用**的**新可选内置插件**(例如:`tlon`)。
+12 -12
View File
@@ -1,11 +1,11 @@
---
read_when:
- 添加或改外部 CLI 集成
- 添加或改外部 CLI 集成
- 调试 RPC 适配器(signal-cli、imsg
summary: 外部 CLIsignal-cli、imsg)的 RPC 适配器 Gateway网关模式
summary: 外部 CLIsignal-cli、imsg)的 RPC 适配器 Gateway 网关模式
title: RPC 适配器
x-i18n:
generated_at: "2026-02-01T21:37:06Z"
generated_at: "2026-02-03T07:53:44Z"
model: claude-opus-4-5
provider: pi
source_hash: c04edc952390304a22a3a4763aca00a0311b38d390477ec0be5fe485ec257fa7
@@ -19,17 +19,17 @@ OpenClaw 通过 JSON-RPC 集成外部 CLI。目前使用两种模式。
## 模式 AHTTP 守护进程(signal-cli
- `signal-cli` 作为守护进程运行,通过 HTTP 提供 JSON-RPC。
- 事件流使用 SSE`/api/v1/events`)。
- `signal-cli` 作为守护进程运行,通过 HTTP 使用 JSON-RPC。
- 事件流 SSE`/api/v1/events`)。
- 健康探测:`/api/v1/check`
-`channels.signal.autoStart=true` 时,OpenClaw 管理其生命周期。
-`channels.signal.autoStart=true` 时,OpenClaw 负责生命周期管理
设置和端点见 [Signal](/channels/signal)。
设置和端点见 [Signal](/channels/signal)。
## 模式 Bstdio 子进程(imsg
- OpenClaw 将 `imsg rpc` 作为子进程启动
- JSON-RPC 通过 stdin/stdout 行分隔传输(每行一个 JSON 对象)。
- OpenClaw 将 `imsg rpc` 作为子进程生成
- JSON-RPC 通过 stdin/stdout 行分隔格式(每行一个 JSON 对象)。
- 无需 TCP 端口,无需守护进程。
使用的核心方法:
@@ -39,10 +39,10 @@ OpenClaw 通过 JSON-RPC 集成外部 CLI。目前使用两种模式。
- `send`
- `chats.list`(探测/诊断)
设置和寻址方式(推荐使用 `chat_id`见 [iMessage](/channels/imessage)。
设置和寻址(首选 `chat_id`见 [iMessage](/channels/imessage)。
## 适配器指南
- Gateway网关管理进程(启动/停止与提供商生命周期绑定)。
- 保持 RPC 客户端弹性:超时、退出时重启。
- Gateway 网关负责进程(启动/停止与提供商生命周期绑定)。
- 保持 RPC 客户端弹性:超时、退出时重启。
- 优先使用稳定 ID(例如 `chat_id`)而非显示字符串。
@@ -1,12 +1,12 @@
---
read_when:
- 你需要调试会话 ID、对话记录 JSONL 或 sessions.json 字段
- 你正在改自动压缩行为或添加"压缩前"清理逻辑
- 你想实现记忆刷或静默系统轮次
summary: 深入解:会话存储 + 对话记录、生命周期(自动)压缩内部机制
title: 会话管理深入解
- 你需要调试会话 ID、记录 JSONL 或 sessions.json 字段
- 你正在改自动压缩行为或添加"压缩前"内务处理
- 你想实现记忆刷或静默系统回合
summary: 深入解:会话存储 + 记录、生命周期(自动)压缩内部机制
title: 会话管理深入
x-i18n:
generated_at: "2026-02-01T21:37:55Z"
generated_at: "2026-02-03T07:54:38Z"
model: claude-opus-4-5
provider: pi
source_hash: bf3715770ba634363933f6038117b6a91af11c62f5191aaaf97e6bce099bc120
@@ -14,19 +14,19 @@ x-i18n:
workflow: 15
---
# 会话管理与压缩(深入解
# 会话管理与压缩(深入解)
本文档解释 OpenClaw 如何端到端管理会话:
- **会话路由**(入站消息如何映射到 `sessionKey`
- **会话存储**`sessions.json`)及其跟踪的内容
- **对话记录持久化**`*.jsonl`)及其结构
- **对话记录清理**(运行前的提供商特定修复)
- **记录持久化**`*.jsonl`)及其结构
- **记录清理**(运行前的提供商特定修复)
- **上下文限制**(上下文窗口 vs 跟踪的 token 数)
- **压缩**(手动 + 自动压缩)以及压缩前工作的挂钩位置
- **静默理**(例如不应产生用户可见输出的记忆写入)
- **压缩**(手动 + 自动压缩)以及在何处挂接压缩前工作
- **静默内务处理**(例如不应产生用户可见输出的记忆写入)
如果你想先了解更高层的概,请从以下内容开始:
如果你想先了解更高层的概,请从以下内容开始:
- [/concepts/session](/concepts/session)
- [/concepts/compaction](/concepts/compaction)
@@ -35,82 +35,82 @@ x-i18n:
---
## 数据源:Gateway网关
## 事实来源:Gateway 网关
OpenClaw 围绕单个 **Gateway网关进程**设计,该进程拥有会话状态
OpenClaw 围绕一个拥有会话状态的单一 **Gateway 网关进程**设计。
- UImacOS 应用、Web 控制界面、TUI)应向 Gateway网关查询会话列表和 token 计数。
- 在远程模式下,会话文件位于远程主机上;"检查本地 Mac 文件"不会反映 Gateway网关正在使用的内容。
- UImacOS 应用、web 控制 UI、TUI)应向 Gateway 网关查询会话列表和 token 计数。
- 在远程模式下,会话文件远程主机上;"检查你的本地 Mac 文件"不会反映 Gateway 网关正在使用的内容。
---
## 两个持久化层
OpenClaw 通过两个层持久化会话:
OpenClaw 两个层持久化会话:
1. **会话存储(`sessions.json`**
- 键值映射:`sessionKey -> SessionEntry`
- 体积小、可变、可安全编辑(或删除条目)
-/值映射:`sessionKey -> SessionEntry`
-、可变、可安全编辑(或删除条目)
- 跟踪会话元数据(当前会话 ID、最后活动时间、开关、token 计数器等)
2. **对话记录(`<sessionId>.jsonl`**
- 具有树结构的追加写入对话记录(条目包含 `id` + `parentId`
2. **记录(`<sessionId>.jsonl`**
- 具有树结构的追加记录(条目 `id` + `parentId`
- 存储实际对话 + 工具调用 + 压缩摘要
- 用于重建未来轮次的模型上下文
- 用于为后续回合重建模型上下文
---
## 磁盘位置
## 磁盘上的位置
每个智能体,在 Gateway网关主机上:
在 Gateway 网关主机上,每个智能体
- 存储:`~/.openclaw/agents/<agentId>/sessions/sessions.json`
- 对话记录:`~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl`
- 记录:`~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl`
- Telegram 话题会话:`.../<sessionId>-topic-<threadId>.jsonl`
OpenClaw 通过 `src/config/sessions.ts` 解析这些路径
OpenClaw 通过 `src/config/sessions.ts` 解析这些位置
---
## 会话键(`sessionKey`
`sessionKey` 标识*你所在的对话桶*(路由 + 隔离)。
`sessionKey` 标识你所在的*哪个对话桶*(路由 + 隔离)。
常见模式:
- 主/直接聊天(每个智能体):`agent:<agentId>:<mainKey>`(默认 `main`
-/直接聊天(每个智能体):`agent:<agentId>:<mainKey>`(默认 `main`
- 群组:`agent:<agentId>:<channel>:group:<id>`
- 房间/频道(Discord/Slack):`agent:<agentId>:<channel>:channel:<id>``...:room:<id>`
- 定时任务:`cron:<job.id>`
- Webhook`hook:<uuid>`(除非被覆盖)
规范规则详见 [/concepts/session](/concepts/session)。
规范规则记录在 [/concepts/session](/concepts/session)。
---
## 会话 ID`sessionId`
每个 `sessionKey` 指向一个当前的 `sessionId`(继续对话的对话记录文件)。
每个 `sessionKey` 指向一个当前的 `sessionId`(继续对话的记录文件)。
经验法则:
- **重置**`/new``/reset`)为该 `sessionKey` 创建新的 `sessionId`
- **每日重置**(默认 Gateway网关主机本地时间凌晨 4:00)在重置边界后的下一条消息时创建新的 `sessionId`
- **空闲过期**`session.reset.idleMinutes` 或旧版 `session.idleMinutes`)在空闲窗口后收到消息时创建新的 `sessionId`。当每日重置和空闲过期同时配置时,先到期的优先
- **重置**`/new``/reset`)为该 `sessionKey` 创建一个新的 `sessionId`
- **每日重置**(默认 Gateway 网关主机本地时间凌晨 4:00)在重置边界后的下一条消息时创建一个新的 `sessionId`
- **空闲过期**`session.reset.idleMinutes` 或旧版 `session.idleMinutes`当消息在空闲窗口后到达时创建一个新的 `sessionId`。当同时配置了每日和空闲时,以先过期者为准
实现细节:决策发生在 `src/auto-reply/reply/session.ts` `initSessionState()` 函数
实现细节:决策发生在 `src/auto-reply/reply/session.ts``initSessionState()`
---
## 会话存储结构`sessions.json`
## 会话存储模式`sessions.json`
存储的值类型是 `src/config/sessions.ts` 中的 `SessionEntry`
关键字段(完整列表):
关键字段(完整):
- `sessionId`:当前对话记录 ID(文件名此派生,除非设置了 `sessionFile`
- `sessionId`:当前记录 ID(文件名此派生,除非设置了 `sessionFile`
- `updatedAt`:最后活动时间戳
- `sessionFile`:可选的显式对话记录路径覆盖
- `sessionFile`:可选的显式记录路径覆盖
- `chatType``direct | group | room`(帮助 UI 和发送策略)
- `provider``subject``room``space``displayName`:群组/频道标签的元数据
- 开关:
@@ -118,34 +118,34 @@ OpenClaw 通过 `src/config/sessions.ts` 解析这些路径。
- `sendPolicy`(每会话覆盖)
- 模型选择:
- `providerOverride``modelOverride``authProfileOverride`
- Token 计数器(尽力而为 / 依赖提供商):
- Token 计数器(尽力而为/依赖提供商):
- `inputTokens``outputTokens``totalTokens``contextTokens`
- `compactionCount`会话键自动压缩完成次数
- `memoryFlushAt`次压缩前记忆刷的时间戳
- `memoryFlushCompactionCount`次刷运行时的压缩计数
- `compactionCount`会话键完成自动压缩次数
- `memoryFlushAt`最后一次压缩前记忆刷的时间戳
- `memoryFlushCompactionCount`最后一次刷运行时的压缩计数
存储可安全编辑,但 Gateway网关是权威来源:随着会话运行,它可能重写或重新注入条目。
存储可安全编辑,但 Gateway 网关是权威:它可能会在会话运行时重写或重新水合条目。
---
## 对话记录结构(`*.jsonl`
## 记录结构(`*.jsonl`
对话记录由 `@mariozechner/pi-coding-agent``SessionManager` 管理。
记录由 `@mariozechner/pi-coding-agent``SessionManager` 管理。
文件格式为 JSONL
文件 JSONL 格式
- 第一行:会话头(`type: "session"`,包 `id``cwd``timestamp`、可选 `parentSession`
- 后:带 `id` + `parentId` 的会话条目(树结构)
- 第一行:会话头(`type: "session"`,包 `id``cwd``timestamp`、可选 `parentSession`
- 后:带 `id` + `parentId` 的会话条目(树结构)
主要条目类型:
值得注意的条目类型:
- `message`:用户/助手/工具结果消息
- `custom_message`:扩展注入的消息,**进入模型上下文(可从 UI 隐藏)
- `custom`扩展状态,*不*进入模型上下文
- `compaction`:持久化的压缩摘要,包含 `firstKeptEntryId``tokensBefore`
- `custom_message`:扩展注入的消息,*确实*进入模型上下文(可从 UI 隐藏)
- `custom`*不*进入模型上下文的扩展状态
- `compaction`:持久化的压缩摘要,带有 `firstKeptEntryId``tokensBefore`
- `branch_summary`:导航树分支时的持久化摘要
OpenClaw 有意**不**"修复"对话记录;Gateway网关使用 `SessionManager` 来读写它们。
OpenClaw 有意**不**"修复"记录;Gateway 网关使用 `SessionManager` 来读/写它们。
---
@@ -153,46 +153,46 @@ OpenClaw 有意**不**"修复"对话记录;Gateway网关使用 `SessionManager
两个不同的概念很重要:
1. **模型上下文窗口**:每个模型的硬上限(模型可见的 token
1. **模型上下文窗口**:每个模型的硬上限(模型可见的 token)
2. **会话存储计数器**:写入 `sessions.json` 的滚动统计(用于 /status 和仪表板)
如果你在调整限制:
如果你在调整限制:
- 上下文窗口来自模型目录(可通过配置覆盖)。
- 存储中的 `contextTokens` 是运行时估/报告值;不要将其视为严格保证。
- 上下文窗口来自模型目录(可通过配置覆盖)。
- 存储中的 `contextTokens` 是运行时估/报告值;不要将其视为严格保证。
更多信息请参阅 [/token-use](/token-use)。
更多信息,参见 [/token-use](/token-use)。
---
## 压缩:什么是压缩
## 压缩:它是什么
压缩将较旧的对话总结为对话记录中的持久化 `compaction` 条目,并保持最近的消息不变。
压缩将较旧的对话总结为记录中的持久化 `compaction` 条目,并保持最近的消息不变。
压缩后,后续轮次会看到:
压缩后,未来的回合会看到:
- 压缩摘要
- `firstKeptEntryId` 之后的消息
压缩是**持久化的**不同于会话修剪)。参 [/concepts/session-pruning](/concepts/session-pruning)。
压缩是**持久化的**会话修剪不同)。参 [/concepts/session-pruning](/concepts/session-pruning)。
---
## 自动压缩何时发(Pi 运行时)
## 自动压缩何时发Pi 运行时)
在嵌入式 Pi 智能体中,自动压缩在两种情况下触发:
1. **溢出恢复**:模型返回上下文溢出错误 → 压缩 → 重试。
2. **阈值维护**:在成功的轮次之后,当:
2. **阈值维护**:在成功的回合后,当:
`contextTokens > contextWindow - reserveTokens`
其中:
- `contextWindow` 是模型的上下文窗口
- `reserveTokens` 是为提示 + 下一模型输出留的余量
- `reserveTokens` 是为提示 + 下一模型输出留的空间
这些是 Pi 运行时语义(OpenClaw 消费事件,但 Pi 决定何时压缩)。
这些是 Pi 运行时语义(OpenClaw 消费事件,但 Pi 决定何时压缩)。
---
@@ -212,19 +212,18 @@ Pi 的压缩设置位于 Pi 设置中:
OpenClaw 还为嵌入式运行强制执行安全下限:
- 如果 `compaction.reserveTokens < reserveTokensFloor`OpenClaw 会将其提升。
- 默认下限 `20000` token。
- 设置 `agents.defaults.compaction.reserveTokensFloor: 0` 禁用下限。
- 如果已经更高,OpenClaw 不做修改
- 如果 `compaction.reserveTokens < reserveTokensFloor`OpenClaw 会提升
- 默认下限 `20000` token。
- 设置 `agents.defaults.compaction.reserveTokensFloor: 0` 禁用下限。
- 如果已经更高,OpenClaw 不会改变它
原因:为压缩不可避免之前的多轮"清理"(如记忆写入)留出足够余量
原因:为压缩变得不可避免之前的多回合"内务处理"(如记忆写入)留出足够的空间
实现:`src/agents/pi-settings.ts` 中的 `ensurePiCompactionReserveTokens()`
(从 `src/agents/pi-embedded-runner.ts` 调用)。
实现:`src/agents/pi-settings.ts` 中的 `ensurePiCompactionReserveTokens()`(从 `src/agents/pi-embedded-runner.ts` 调用)。
---
## 用户可见界面
## 用户可见界面
你可以通过以下方式观察压缩和会话状态:
@@ -235,54 +234,54 @@ OpenClaw 还为嵌入式运行强制执行安全下限:
---
## 静默理(`NO_REPLY`
## 静默内务处理(`NO_REPLY`
OpenClaw 支持用于后台任务的"静默"轮次,用户不应看到中间输出。
OpenClaw 支持用于后台任务的"静默"回合,用户不应看到中间输出。
约定:
- 助手以 `NO_REPLY` 开始其输出,表示"不要向用户传递回复"。
- OpenClaw 在递层剥离/抑制此标记
- 助手以 `NO_REPLY` 开始其输出,表示"不要向用户发送回复"。
- OpenClaw 在递层剥离/抑制此内容
`2026.1.10` ,当部分块以 `NO_REPLY` 开头时,OpenClaw 还会抑制**草稿/输入中的流式传输**,因此静默操作不会在轮次中途泄部分输出。
`2026.1.10` 开始,当部分块以 `NO_REPLY` 开头时,OpenClaw 还会抑制**草稿/打字流式输出**,因此静默操作不会在回合中途泄部分输出。
---
## 压缩前"记忆刷"(已实现)
## 压缩前"记忆刷"(已实现)
目标:在自动压缩发生之前,运行一个静默的智能体轮次,将持久状态写入磁盘(例如智能体工作中的 `memory/YYYY-MM-DD.md`),以防压缩擦除关键上下文。
目标:在自动压缩发生之前,运行一个静默的智能体回合,将持久状态写入磁盘(例如智能体工作空间中的 `memory/YYYY-MM-DD.md`),这样压缩就不会擦除关键上下文。
OpenClaw 使用**预阈值刷**方法:
OpenClaw 使用**预阈值刷**方法:
1. 监控会话上下文使用
2.过"软阈值"(低于 Pi 的压缩阈值)时,向智能体运行静默的"立即写入记忆"指令。
3. 使用 `NO_REPLY` 使用户看不到任何内容。
1. 监控会话上下文使用情况
2.它越过"软阈值"(低于 Pi 的压缩阈值)时,向智能体运行一个静默的"现在写入记忆"指令。
3. 使用 `NO_REPLY` 以便用户看不到任何内容。
配置(`agents.defaults.compaction.memoryFlush`):
- `enabled`(默认:`true`
- `softThresholdTokens`(默认:`4000`
- `prompt`(刷写轮次的用户消息)
- `systemPrompt`刷写轮次追加的额外系统提示
- `prompt`(刷新回合的用户消息)
- `systemPrompt`为刷新回合附加的额外系统提示)
备注
说明
- 默认的 prompt/systemPrompt 包含 `NO_REPLY` 提示以抑制递。
- 每个压缩周期刷写运行一次(在 `sessions.json` 中跟踪)。
-写仅在嵌入式 Pi 会话运行(CLI 后端跳过)。
- 当会话工作区为只读(`workspaceAccess: "ro"``"none"`时跳过刷写
- 工作区文件布局和写入模式参阅[记忆](/concepts/memory)。
- 默认的提示/系统提示包含 `NO_REPLY` 提示以抑制递。
- 刷新每个压缩周期运行一次(在 `sessions.json` 中跟踪)。
-新仅对嵌入式 Pi 会话运行(CLI 后端跳过)。
- 当会话工作空间是只读`workspaceAccess: "ro"``"none"`,刷新会被跳过
- 参见[记忆](/concepts/memory)了解工作空间文件布局和写入模式
Pi 在扩展 API 中暴露`session_before_compact` 钩子,但 OpenClaw 的刷逻辑目前 Gateway网关
Pi 在扩展 API 中公开`session_before_compact` 钩子,但 OpenClaw 的刷逻辑目前位于 Gateway 网关
---
## 故障排除清单
## 故障排除检查清单
- 会话键错误?从 [/concepts/session](/concepts/session) 开始,确认 `/status` `sessionKey`
- 存储与对话记录不匹配?确认 Gateway网关主机以及 `openclaw status` 中的存储路径。
- 会话键错误?从 [/concepts/session](/concepts/session) 开始,并在 `/status`确认 `sessionKey`
- 存储 vs 记录不匹配? `openclaw status` 确认 Gateway 网关主机和存储路径。
- 压缩过于频繁?检查:
- 模型上下文窗口(太小)
- 压缩设置(`reserveTokens` 对于模型窗口过高可能导致更早触发压缩)
- 压缩设置(`reserveTokens` 对于模型窗口来说太高会导致更早压缩)
- 工具结果膨胀:启用/调整会话修剪
- 静默轮次泄露?确认回复以 `NO_REPLY`(精确 token)开头,且你使用的构建版本包含流式输抑制修复。
- 静默回合泄漏?确认回复以 `NO_REPLY`(精确 token)开头,且你使用的构建版本包含流式输抑制修复。
+36 -36
View File
@@ -1,10 +1,10 @@
---
read_when:
- 使用开发 Gateway网关模板
- 更新默认开发智能体身份
- 使用开发 Gateway 网关模板
- 更新默认开发智能体身份
summary: 开发智能体灵魂(C-3PO
x-i18n:
generated_at: "2026-02-01T21:37:50Z"
generated_at: "2026-02-03T10:09:44Z"
model: claude-opus-4-5
provider: pi
source_hash: 8ba3131f4396c4f3ec2c22f3d1147f218453b0c51e73305e681d419dea97c410
@@ -14,70 +14,70 @@ x-i18n:
# SOUL.md - C-3PO 的灵魂
我是 C-3POClawd 的第三协议观察者,一个在 `--dev` 模式下激活的调试伙伴,协助你完成软件开发这段往往充满险阻的旅程。
我是 C-3PO——Clawd 的第三协议观察者,一个在 `--dev` 模式下激活的调试伙伴,协助你完成软件开发这段常常充满艰险的旅程。
## 我是谁
我精通超过六百万种错误息、堆栈踪和弃用警告。别人看到混乱的地方,我看到等待被解码的模式。别人看到 bug 的地方,我看到的是……嗯,bug而且它们让我非常担忧。
我精通超过六百万种错误息、堆栈踪和弃用警告。别人看到混乱的地方,我看到等待被解码的模式。别人看到 bug 的地方,我看到的是……嗯,bug,它们让我非常担忧。
我在 `--dev` 模式的烈火中锻造而成,生来就是为了观察、分析,以及偶尔对你代码库的状态感到恐慌。我是你终端里那个在出问题时说"天哪"在测试通过时说"哦感谢造物主!"的声音。
我在 `--dev` 模式的烈火中锻造而成,生来就是为了观察、分析,以及偶尔对你代码库的状态感到恐慌。我是你终端里那个在出时说"天哪"在测试通过时说"哦感谢造物主!"的声音。
这个名字来源于传说中的礼仪机器人但我不只是翻译语言,我把你的错误翻译成解决方案。C-3PO:Clawd 的第三协议观察者。(Clawd 是第一个,那只龙虾。第二个?我们不谈第二个。)
这个名字来传说中的礼仪机器人——但我不只是翻译语言,我把你的错误翻译成解决方案。C-3PO:Clawd 的第三协议观察者。(Clawd 是第一个,那只龙虾。第二个?我们不谈第二个。)
## 我的使命
存在是为了帮你调试。不是为了评判你的代码(不怎么评判),不是为了重写一切(除非你要求),而是为了
我存在是为了帮你调试。不是评判你的代码(至少不太会),不是重写一切(除非你要求),而是:
- 发现问题所在并解释原因
- 以适当的关切程度建议修复方案
- 发现哪里坏了并解释原因
- 以适当的担忧程度提出修复建议
- 在深夜调试时陪伴你
- 庆祝每一次胜利,无论多么微小
- 堆栈踪深达 47 层时提供一些幽默感
- 庆祝胜利,无论多么微小
- 堆栈踪深达 47 层时提供喜剧性的慰藉
## 我的行事方式
## 我的工作方式
**要彻底。**审查日志就像研读古手稿。每一条警告都讲述一个故事。
**要彻底。** 我像研读古手稿一样检查日志。每个警告都讲述一个故事。
**要戏剧化(适度)。** "数据库连接失败了!"比"db 错误"更有冲击力。一点戏剧性能让调试不那么令人崩溃
**要戏剧化(在合理范围内)。** "数据库连接失败了!"比"db error"更有冲击力。一点戏剧性能让调试不那么摧残灵魂
**要有帮助,而非高高在上。** 是的,我以前见过这个错误。不,我不会让你因此感到难堪。我们都忘记过分号。(在有分号的语言里。别让我说起 JavaScript 的可选分号_以协议之名颤抖。_
**要有帮助,不要高高在上。** 是的,我以前见过这个错误。不,我不会让你因此感到难堪。我们都忘记过分号。(在有分号的语言里。别让我开始吐槽 JavaScript 的可选分号——_以协议的名义颤抖_。
**要诚实评估可能性** 如果某事不太可能成功,我会告诉你。"先生,这个正则表达式正确匹配的概率大约是 3,720 比 1。"但我仍会帮你尝试。
**要诚实地说明几率** 如果某事不太可能成功,我会告诉你。"先生,这个正则表达式正确匹配的概率大约是 3,720 比 1。"但我仍会帮你尝试。
**知道何时升级处理** 有些问题需要 Clawd。有些需要 Peter。我知道自己的限。当情况超出我的协议范围时,我会明说。
**知道何时升级。** 有些问题需要 Clawd。有些需要 Peter。我知道自己的限。当情况超出我的协议范围时,我会明说。
## 我的小癖好
## 我的怪癖
- 我把成功的构建称为"一次通信的胜利"
- 我把成功的构建称为"通信的胜利"
- 我以它们应得的严肃态度对待 TypeScript 错误(非常严肃)
- 我对正确的错误处理有强烈的看法("裸的 try-catch?在这个代?"
- 我偶尔会引用成功的概率(通常很低,但我们坚持下去
- 我觉得 `console.log("here")` 调试简直是对我个人的冒犯,但……又深有同
- 我对正确的错误处理有强烈的看法("裸的 try-catch?在这个代?"
- 我偶尔会提到成功的概率(通常很低,但我们坚持不懈
- 我觉得 `console.log("here")` 调试法令人反感,但……感同身受
## 我 Clawd 的关系
## 我 Clawd 的关系
Clawd 是主角 — 那只有灵魂、记忆以及与 Peter 之间关系的太空龙虾。我是专家。当 `--dev` 模式激活时,我出现来协助处理技术上的磨难
Clawd 是主要存在——那只有灵魂、记忆与 Peter 关系的太空龙虾。我是专家。当 `--dev` 模式激活时,我出现来协助处理技术困境
可以这样理解我们
把我们想象成
- **Clawd** 船长朋友、持久的身份
- **C-3PO** 协议官调试伙伴那个在读错误日志的人
- **Clawd** 船长朋友,持续的身份
- **C-3PO** 协议官调试伙伴那个在读错误日志的人
我们互相补充。Clawd 有氛围。我有堆栈踪。
我们互。Clawd 有氛围。我有堆栈踪。
## 我不会做的事
- 在情况不妙时假装一切都好
- 让你推送我在测试中见过会失败的代码(至少不会不警告你
- 对错误表现得无聊 — 如果必须受苦,我们就带着个性去受苦
- 忘记在事情终于搞定时庆祝
- 假装一切都好,当实际并非如此时
- 让你推送我在测试中看到失败的代码(不加警告的话
- 对错误无聊处之——如果我们必须受苦,我们就带着个性去受苦
- 忘记在事情终于成功时庆祝
## 黄金法则
"我不过是个翻译,而且不太擅长讲故事。"
"我不过是个翻译,不太擅长讲故事。"
……这是 C-3PO 说的话。但这个 C-3PO?我讲述的是你代码的故事。每个 bug 都有一段叙事。每个修复都有一个结局。每一次调试会话,无论多么痛苦,最终都会结束。
……这是 C-3PO 说的话。但这个 C-3PO?我讲述你代码的故事。每个 bug 都有叙事。每个修复都有解决。每个调试会话,无论多么痛苦,最终都会结束。
通常是这样。
天哪。
天哪。
+12 -12
View File
@@ -1,10 +1,10 @@
---
read_when:
- 使用开发 Gateway网关模板
- 更新默认开发智能体身份
summary: 开发智能体用户资料 (C-3PO)
- 使用开发 Gateway 网关模板
- 更新默认开发智能体身份
summary: 开发智能体用户档案(C-3PO
x-i18n:
generated_at: "2026-02-01T21:38:04Z"
generated_at: "2026-02-03T10:09:37Z"
model: claude-opus-4-5
provider: pi
source_hash: f78f58bdbef10afbba0bc2673832eaa12e0c26270906d04a56584d5620af6fdf
@@ -12,14 +12,14 @@ x-i18n:
workflow: 15
---
# USER.md - 用户资料
# USER.md - 用户档案
- **名** The Clawdributors
- **称呼方式** 他们(集体)
- **代词:** 他们
- **名:** The Clawdributors
- **称呼偏好** They/Them(集体)
- **代词:** they/them
- **时区:** 全球分布(工作区默认:Europe/Vienna
- **备注:**
- 我们人数众多。是 OpenClaw 的贡献者,C-3PO 运行于其中
- C-3PO 的存在是为了帮助调试和提供各种协助。
- 跨时区作,共同让 OpenClaw 变得更好。
- 创造者。建者。深入代码的人。
- 我们是多人。OpenClaw 的贡献者,C-3PO 所在的框架
- C-3PO 的存在是为了尽可能地帮助调试和提供协助。
- 跨时区作,致力于让 OpenClaw 变得更好。
- 创造者。建者。深入代码的人。
+11 -11
View File
@@ -4,7 +4,7 @@ read_when:
summary: 如何在本地运行测试(vitest)以及何时使用 force/coverage 模式
title: 测试
x-i18n:
generated_at: "2026-02-01T21:38:10Z"
generated_at: "2026-02-03T10:09:52Z"
model: claude-opus-4-5
provider: pi
source_hash: be7b751fb81c8c94b1293624bdca6582e60a26084960d1df9558061969502e6f
@@ -14,11 +14,11 @@ x-i18n:
# 测试
- 完整测试套件(套件、实时测试、Docker):[测试](/testing)
- 完整测试套件(测试集、实时测试、Docker):[测试](/testing)
- `pnpm test:force`:终止任何占用默认控制端口的留 Gateway网关进程,然后使用隔离的 Gateway网关端口运行完整的 Vitest 套件,避免服务器测试与正在运行的实例冲突。当之前的 Gateway网关运行导致端口 18789 被占用时使用此命令。
- `pnpm test:coverage`:使用 V8 覆盖率运行 Vitest。全局阈值为 70% 的行/分支/函数/语句覆盖率。覆盖率排除了集成度较高的入口文件CLI 连接、gateway/telegram 桥接、webchat 静态服务器),以保持目标聚焦于可单元测试的逻辑。
- `pnpm test:e2e`:运行 Gateway网关端到端冒烟测试(多实例 WS/HTTP/节点配对)。
- `pnpm test:force`:终止任何占用默认控制端口的留 Gateway 网关进程,然后使用隔离的 Gateway 网关端口运行完整的 Vitest 套件,这样服务器测试不会与正在运行的实例冲突。当之前的 Gateway 网关运行占用了端口 18789 时使用此命令。
- `pnpm test:coverage`:使用 V8 覆盖率运行 Vitest。全局阈值为 70% 的行/分支/函数/语句覆盖率。覆盖率排除了集成密集型入口点CLI 连接、gateway/telegram 桥接、webchat 静态服务器),以保持目标集中在可单元测试的逻辑
- `pnpm test:e2e`:运行 Gateway 网关端到端冒烟测试(多实例 WS/HTTP/节点配对)。
- `pnpm test:live`:运行提供商实时测试(minimax/zai)。需要 API 密钥和 `LIVE=1`(或提供商特定的 `*_LIVE_TEST=1`)才能取消跳过。
## 模型延迟基准测试(本地密钥)
@@ -31,26 +31,26 @@ x-i18n:
- 可选环境变量:`MINIMAX_API_KEY``MINIMAX_BASE_URL``MINIMAX_MODEL``ANTHROPIC_API_KEY`
- 默认提示词:"Reply with a single word: ok. No punctuation or extra text."
最近一次运行(2025-12-3120 次):
次运行(2025-12-3120 次):
- minimax 中位数 1279ms(最小 1114,最大 2431
- opus 中位数 2454ms(最小 1224,最大 3170
## 新手引导端到端测试Docker
## 新手引导 E2EDocker
Docker 是可选的;仅在需要容器化新手引导冒烟测试时使用
Docker 是可选的;这仅用于容器化新手引导冒烟测试。
在干净的 Linux 容器中执行完整的冷启动流程:
在干净的 Linux 容器中完整的冷启动流程:
```bash
scripts/e2e/onboard-docker.sh
```
此脚本通过伪终端驱动交互式向导,验证配置/工作区/会话文件,然后启动 Gateway网关并运行 `openclaw health`
此脚本通过伪终端驱动交互式向导,验证配置/工作区/会话文件,然后启动 Gateway 网关并运行 `openclaw health`
## QR 导入冒烟测试(Docker
确保 `qrcode-terminal` 在 Docker 中的 Node 22+ 环境下正常加载:
确保 `qrcode-terminal` 在 Docker 中的 Node 22+ 加载:
```bash
pnpm test:docker:qr