对话记录清理(提供商修正)

本文档描述了在运行前(构建模型上下文时)应用于对话记录的提供商特定修正。这些是内存中的调整,用于满足提供商的严格要求。它们不会重写磁盘上存储的 JSONL 对话记录。 涵盖范围包括: 工具调用 id 清理 工具结果配对修复 轮次验证 / 排序 思考签名清理 图片负载清理 如需了解对话记录存储细节,请参阅: /reference/session-management-compaction 运行位置 所有对话记录清理逻辑集中在嵌入式运行器中: 策略选择:src/agents/transcript-policy.ts 清理/修复应用:src/agents/pi-embedded-runner/google.ts 中的 sanitizeSessionHistory 策略根据 provider、modelApi 和 modelId 来决定应用哪些规则。 全局规则:图片清理 图片负载始终会被清理,以防止因大小限制导致提供商端拒绝(对超大 base64 图片进行缩放/重新压缩)。 实现: src/agents/pi-embedded-helpers/images.ts 中的 sanitizeSessionMessagesImages src/agents/tool-images.ts 中的 sanitizeContentBlocksImages 提供商矩阵(当前行为) OpenAI / OpenAI Codex 仅图片清理。 切换到 OpenAI Responses/Codex 模型时,丢弃孤立的推理签名(没有后续内容块的独立推理项)。 不进行工具调用 id 清理。 不进行工具结果配对修复。 不进行轮次验证或重新排序。 不生成合成工具结果。 不剥离思考签名。 Google (Generative AI / Gemini CLI / Antigravity) 工具调用 id 清理:严格字母数字。 工具结果配对修复和合成工具结果。 轮次验证(Gemini 风格的轮次交替)。 Google 轮次排序修正(如果历史记录以助手开头,则在前面添加一个小型用户引导消息)。 Antigravity Claude:规范化思考签名;丢弃未签名的思考块。 Anthropic / Minimax(Anthropic 兼容) ...

未命名文档

名称由来 OpenClaw = CLAW + TARDIS,因为每只太空龙虾都需要一台时空机器。 致谢 Peter Steinberger (@steipete) - 创建者,龙虾语者 Mario Zechner (@badlogicc) - Pi 创建者,安全渗透测试员 Clawd - 那只要求取个更好名字的太空龙虾 核心贡献者 Maxim Vovshin (@Hyaxia, 36747317+[email protected]) - Blogwatcher skill Nacho Iacovino (@nachoiacovino, [email protected]) - 位置解析(Telegram 和 WhatsApp) 许可证 MIT - 像海洋中的龙虾一样自由。 “我们都只是在玩自己的提示词而已。"(某个 AI,大概是 token 吸多了)

测试

完整测试套件(测试集、实时测试、Docker):测试 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)才能取消跳过。 模型延迟基准测试(本地密钥) 脚本:scripts/bench-model.ts 用法: source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10 可选环境变量:MINIMAX_API_KEY、MINIMAX_BASE_URL、MINIMAX_MODEL、ANTHROPIC_API_KEY 默认提示词:“Reply with a single word: ok. No punctuation or extra text.” 上次运行(2025-12-31,20 次): minimax 中位数 1279ms(最小 1114,最大 2431) opus 中位数 2454ms(最小 1224,最大 3170) 新手引导 E2E(Docker) Docker 是可选的;这仅用于容器化的新手引导冒烟测试。 ...

设备型号数据库(友好名称)

macOS 配套应用通过将 Apple 型号标识符(例如 iPad16,6、Mac16,6)映射为人类可读的名称,在实例 UI 中显示友好的 Apple 设备型号名称。 该映射以 JSON 形式内置于: apps/macos/Sources/OpenClaw/Resources/DeviceModels/ 数据来源 我们目前内置的映射来自 MIT 许可的仓库: kyle-seongwoo-jun/apple-device-identifiers 为保持构建的确定性,JSON 文件固定到特定的上游提交(记录在 apps/macos/Sources/OpenClaw/Resources/DeviceModels/NOTICE.md 中)。 更新数据库 选择要固定的上游提交(iOS 和 macOS 各一个)。 更新 apps/macos/Sources/OpenClaw/Resources/DeviceModels/NOTICE.md 中的提交哈希。 重新下载固定到这些提交的 JSON 文件: IOS_COMMIT="<commit sha for ios-device-identifiers.json>" MAC_COMMIT="<commit sha for mac-device-identifiers.json>" curl -fsSL "https://raw.githubusercontent.com/kyle-seongwoo-jun/apple-device-identifiers/${IOS_COMMIT}/ios-device-identifiers.json" \ -o apps/macos/Sources/OpenClaw/Resources/DeviceModels/ios-device-identifiers.json curl -fsSL "https://raw.githubusercontent.com/kyle-seongwoo-jun/apple-device-identifiers/${MAC_COMMIT}/mac-device-identifiers.json" \ -o apps/macos/Sources/OpenClaw/Resources/DeviceModels/mac-device-identifiers.json 确保 apps/macos/Sources/OpenClaw/Resources/DeviceModels/LICENSE.apple-device-identifiers.txt 仍与上游一致(如果上游许可证发生变更,请替换该文件)。 验证 macOS 应用能够正常构建(无警告): swift build --package-path apps/macos