Daemon 内部实现
定位 HTTP、ACP、事件、审批和 MCP 生命周期的实现责任。
This page has not been translated into English yet. The original Chinese version is shown below.
这一组面向修改或排查 Qwen Code daemon 内部实现的开发者。运行服务先看Daemon 使用与运维,应用开发先看SDK。
进程与信任边界
flowchart LR
C[HTTP 与 SSE 客户端] --> H[Serve HTTP 运行时]
H --> B[工作区 ACP Bridge]
B --> A[qwen --acp 子进程]
A --> M[工作区 MCP 连接池]
M --> S[MCP 服务]
B --> E[各会话 EventBus 与审批协调]每个活动 workspace runtime 有自己的 bridge 和 ACP child,不在不同工作区之间共享。HTTP/SSE 终止于 daemon,模型与工具执行发生在 child;两者通过 ACP stdio 连接。ACP 不是客户端访问 daemon 的 REST 协议。
默认 single scope 复用一个逻辑会话,thread scope 按对话拆分。会话拆分不自动成为操作系统隔离或完整多租户授权边界。
按问题进入
- 启动与关闭:配置验证、内部 hosting 生命周期和退出证明。
- HTTP 中间件:认证、Origin、日志与路由检查顺序。
- ACP Bridge:工作区运行时、队列、channel factory 与早期事件。
- Bridge 生命周期:预热、空闲回收、恢复超时与关闭。
- 审批协调:四种策略、quorum 和请求状态。
- 审批传输与身份:REST/ACP 标识、取消与授权检查。
实现位置
| 责任 | 主要路径 |
|---|---|
| 启动和 Express 组装 | packages/cli/src/serve/run-qwen-serve.ts、server.ts |
| bridge、会话、审批和 EventBus | packages/acp-bridge/ |
| MCP pool、entry 与 workspace budget | packages/core/src/tools/ |
| HTTP/SSE SDK 和共享 transcript | packages/sdk-typescript/src/daemon/ |
| Web Shell 消费者 | packages/web-shell/client/daemon/ |
内部 F1/F2/F3/F4 是上游实现里程碑,不是用户套餐或协议版本。修改行为时仍应核对 capability 与具体来源,而不能只依据里程碑名称。
阅读旧说明的边界
上游索引保留了一些过时总述,例如“只有 TypeScript 提供 daemon client”;当前Java SDK已经有 daemon 路径。UI 事件数量也随增量接口变化,不应把索引中的固定数字当作完整契约。
TUI、IDE 与渠道的历史适配草案和当前共享 UI 文档并存。新工作按具体实现与客户端适配边界判断,不能把拟议入口或计划迁移直接写成默认产品行为。
MCP 与文件服务
会话与事件协议
-
Capability 与版本:逐项预检和条件广告。
In this section
- Serve 启动与关闭理解配置校验、工作区规范化以及内部 hosting 的生命周期绑定。
- HTTP 检查顺序与冷启动定位 Host、Origin、bearer、日志和 JSON 解析各自覆盖的请求。
- ACP Bridge 与执行队列理解工作区 child 复用、prompt FIFO、模型切换和早期事件缓冲。
- Bridge 回收与恢复边界避免关闭竞态,理解恢复超时、隔离新会话和有界 replay。
- 多客户端审批策略配置 first-responder、designated、consensus 或 local-only,并理解默认等待。
- 审批标识与跨连接投票区分 ACP 连接内 JSON-RPC ID、bridge requestId 和会话绑定。
- MCP 连接池与生命周期理解共享 transport、会话视图、重启以及空闲回收的实际条件。
- MCP 配置指纹与隔离判断哪些变化创建新连接,哪些过滤仍可共享 transport。
- Workspace MCP 预算控制按服务名预留名额,理解滞回警告、批量拒绝和不同管理路径。
- WorkspaceFileSystem 的读写边界区分 HTTP 文件访问、同机 ACP 工具例外与有限窗口读取。
- 文件错误、审计与 ACP 传递按 errorKind 区分路径、权限、并发、内容和系统 I/O 故障。
- 会话生命周期与客户端身份区分 create、attach、load、resume、detach 和会话终止。
- 会话归档、删除与持久化证明处理活动与归档冲突、严格 flush 和不能自动修复的所有权异常。
- Daemon worktree 恢复与所有权转移理解 marker 证明、superseded 会话和 task reset 的失败边界。
- Prompt 接纳、队列与终态用 promptId 区分已接纳、取消请求、执行结束和恢复出的历史结果。
- Daemon 事件封套与状态投影区分 wire envelope、ACP metadata、会话状态和前向兼容。
- SSE 重连、Epoch 与重同步保留事件游标和 bus epoch,处理四类缺口并区分历史裁剪。
- SSE 背压与慢客户端区分帧数、字节、重放预算和 MCP App 文本降级。
- Capability 预检与版本契约按具体行为检查特性标签,区分协议、封套和事件版本。