
Open Cowork Agent执行引擎深潜一句话指令如何变成一连串工具调用【免费下载链接】open-coworkOpen-source AI agent desktop app for Windows macOS. One-click install Claude Code, MCP tools, and Skills — with sandbox isolation, multi-model support, and Feishu/Slack integration.项目地址: https://gitcode.com/gh_mirrors/op/open-coworkOpen Cowork 是一款开源的 AI Agent 桌面应用支持 Windows 与 macOS它把Agent 执行引擎、MCP 工具、Skills 技能包、沙箱隔离整合进一个桌面端。当你输入帮我重构这个函数这样一句话时背后的 Agent 执行引擎会在几秒内完成沙箱准备、模型解析、上下文组装并把模型返回的工具调用逐个执行、逐个回传——本文将带你完整走查这条链路。一句话发出后Agent 引擎经历了什么整个执行引擎的核心入口是CoworkAgentRunner类的 run() 方法它接收三个参数会话对象、用户 prompt、历史消息列表。可以把它理解成一条6 站流水线阶段做什么关键源码① 沙箱准备WSL / Lima 环境同步工作目录与 Skillssandbox-adapter.ts② 模型解析通过 pi-ai 把配置的模型字符串解析成可路由对象pi-model-resolution.ts③ 上下文组装冷启动时注入带 Token 预算的对话历史agent-runner.ts④ 工具桥接MCP 服务器工具按mcp__服务名__工具名格式挂给模型mcp-manager.ts⑤ 流式执行处理 text/thinking/toolCall 事件边生成边回传 UIagent-runner.ts⑥ 结果落库助手消息、工具结果写入会话数据库session-manager.ts下面逐站拆解。第 1 站沙箱先行工具调用在隔离环境中执行如果开启了沙箱模式run()的第一步不是调用模型而是先把工作目录同步进隔离环境Windows通过 WSL 把项目文件拷贝进 Linux 发行版并用 rsync 把内置 Skills 同步到沙箱的.claude/skills目录见 agent-runner.tsmacOS通过 Lima 虚拟机完成同样的同步流程lima-sync.ts同步期间 UI 会收到sandbox.sync事件显示正在同步文件…的进度。模型看到的虚拟路径是/workspace真实沙箱路径会被自动替换输出内容里不会泄漏本机真实目录。第 2 站模型解析——把配置变成可路由对象引擎用 pi-ai SDK 做模型路由pi-model-resolution.ts支持 Anthropic、OpenAI 兼容协议、Ollama 本地模型等多种后端读取 config-store.ts 中用户配置的 provider / baseUrl / 模型名在 pi-ai 注册表中查找模型找不到时会构建一个合成模型兜底Ollama 场景还会实时请求/api/show获取模型的真实上下文窗口大小这一步决定了后面所有请求走哪条协议通道是多模型支持的基础。第 3 站上下文组装——冷启动的记忆回放同一个会话第二次发消息时SDK 会话被复用通过 pi-session-runtime.ts 构建运行时签名判断是否失效。但冷启动如重启应用后没有 SDK 会话引擎会做一次精巧的历史回放从数据库中取最近的用户/助手消息agent-runner.ts按上下文窗口的 30% 分配 Token 预算从新到旧逐条装入用estimateCharsPerToken区分中文约 1.5 字符/Token与英文约 4 字符/Token保证预算估算准确历史序列化为conversation_history前缀拼在 prompt 之前超出的旧消息会标注已省略 N 条此外compaction-extension.ts 提供自动压缩扩展当上下文接近窗口上限时引擎会插入正在压缩上下文…的追踪步骤自动摘要长对话避免记忆溢出。第 4 站工具桥接——内置工具 MCP 工具汇成一池模型能调用哪些工具取决于两路来源内置编码工具由 Agent SDK 的createCodingTools提供读写文件、执行 shell 等MCP 工具MCPManager 扫描所有已连接的 MCP 服务器把每个工具按mcp__服务名__工具名命名规范注册给模型用户安装的 Skills 技能包会在会话首次运行时链接到 Agent 配置目录让模型知道有哪些技能可用。第 5 站流式执行——工具调用如何被看见这是整条链路最精彩的阶段。SDK 会话以事件流方式运行引擎在 agent-runner.ts 中switch处理每一类事件① 模型开始说话message_update事件按内容分三种——text_delta文字增量逐字推给 UI 渲染thinking_delta思考过程增量显示在思考中折叠块里toolcall_start模型决定调用工具了引擎立刻向 UI 推送一个tool_call追踪步骤你看到的那个正在运行读取文件…卡片就是这么来的② 工具真正执行tool_execution_start→ 工具执行 →tool_execution_end。执行层由 ToolExecutor 负责普通模式SandboxToolExecutor 负责沙箱模式并用 path-containment.ts 做路径包含校验防止模型写出越界操作。执行完毕的结果会截断到 800 字符回传 UI完整结果则写回模型继续推理——模型调用工具 → 拿到结果 → 再决定下一步就在这个循环里不断往复直到模型输出最终文本。③ 特殊能力subagent-extensionsubagent-extension.ts允许模型派生子 Agent 并行干活权限敏感操作会弹出确认对话框用户选择始终允许后规则存入 permission-rules-store.ts。循环防护三级刹车防止死循环Agent 自主循环调工具最大的风险是跑飞比如反复读同一个文件。LoopGuard 用两层策略盯着每一次工具调用 该模块是纯函数设计不依赖 Electron可独立单元测试。第 1 层哈希连续检测——对每条助手消息的工具调用组合做哈希相同哈希连续出现3 次警告 → 5 次强制停顿 → 8 次直接终止阈值定义在 agent-runner-loop-guard.ts第 2 层单工具频次检测——捕获参数不同但工具相同的循环比如连续读不同文件30 次警告 → 50 次停顿 → 80 次终止触发警告时引擎会向会话注入一条请停下来的引导消息相当于给 Agent 踩刹车触发终止则直接中止本轮。想看源码这些文件是最佳入口文件看点agent-runner.ts执行引擎主流程3000 行run()方法从第 1189 行开始agent-runner-loop-guard.ts三级循环防护纯函数实现易读agent-runner-message-end.ts消息结束时的错误归一化与追踪状态处理tool-executor.ts工具执行与沙箱路由mcp-manager.tsMCP 服务器连接与工具注册subagent-extension.ts子 Agent 派生与超时控制session-manager.ts会话生命周期与消息持久化测试agent-runner.test 系列 可对照阅读各分支行为总结一句话 → 一串工具调用的完整路径回顾整条链路你输入一句话→run()启动流水线沙箱同步工作目录与 Skills 进隔离环境模型解析确定路由协议与上下文窗口上下文组装冷启动时回放带预算的历史工具池就绪内置工具 MCP 工具 Skills流式循环模型输出 → 工具调用 → 执行 → 结果回传 → 继续推理全程受 LoopGuard 三级刹车看护结果落库并以追踪步骤实时渲染在 UI 上理解了这条流水线你就掌握了 Open Cowork 的心脏。它的设计亮点在于每一步都是可观测的UI 上的每个卡片对应一类事件、每一步都是受控的沙箱 权限 循环防护这正是桌面端 Agent 应用能放手让 AI 干活的底气所在。【免费下载链接】open-coworkOpen-source AI agent desktop app for Windows macOS. One-click install Claude Code, MCP tools, and Skills — with sandbox isolation, multi-model support, and Feishu/Slack integration.项目地址: https://gitcode.com/gh_mirrors/op/open-cowork创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考