Skip to content

ACP codebuddy.ai/* 扩展命名空间参考

CodeBuddy 在 ACP(Agent Client Protocol)上的全部私有扩展清单:_meta 扩展键 + _codebuddy.ai/* 扩展方法。

面向两类读者:① 第三方 ACP 客户端(Zed 等)——想知道哪些扩展可以读、哪些绝不该自己造; ② CodeBuddy / WorkBuddy 内部开发者——改准入链路时,需要知道哪条键属于标准面、哪条属于多租户私有通道。

0. 最重要的一条:标准 ACP 面零 _meta 可用

cbc --acpinitialize / session/new / session/prompt 全链路,客户端可以一个 codebuddy.ai/* _meta 都不带,且必须完整可用。 这是硬契约,不是「目前碰巧能跑」。

机制上由 process-login 组合根保证(profile cbc-tui / cbc-headless / agent-sdk-js-single):

  • src/node/session/process-login-admission-authority.ts —— 进程内自持 transport credential 与 principal, issueMainAdmission() 在同一处同时构造准入 envelope 与其 grant;
  • src/node/session/process-login-acp-admission-service.ts:60-84 —— admitAndActivate()整体替换metadata 为本进程自产的 ticket。原文注释即为契约:「客户端 _meta 完全不参与身份决策」。

外部 ACP 客户端既不可能、也不应该构造 runtime 准入 envelope,因此这条零 meta 路径是标准面的唯一正确形态。

常驻防线:src/e2e/acp-zero-meta-contract.spec.ts —— 裸 stdio NDJSON 驱动 bin/codebuddy --acp, 全程零 meta 跑 initialize → session/new → session/prompt,并对「missing … metadata」类错误直接判红。

对照面:multi-owner-headless 走的是 session-payload 组合根,它的 session/new强制显式携带 _meta['codebuddy.ai/sessionAdmissionV2'](见 runtime-admission-acp-adapter.ts:47-48ACP Session request is missing sessionAdmissionV2 metadata)。那是私有通道,不是 ACP 协议要求—— 两条组合根的差别只在「envelope 的生产者是谁」,与标准面无关。

C3 变更(workbuddy-single 形态正名 B1):WorkBuddy 桌面端(workbuddy-single)与 workbuddy-completion-warm 已从「per-session wire 身份 envelope」改为进程级身份注入—— daemon 在 initialize 之后经 _codebuddy.ai/activateWorkbuddyOwnerRuntime (warm 侧是 _codebuddy.ai/activateCompletionRuntime)注入一次 owner 授权,此后 CLI 进程内 自产 envelope。这两条面的 session/new 不再携带 sessionAdmissionV2 / authSession, 只保留 launcher 的 runtimeTransportCredential(transport 认证不变式,自签之前逐次校验) 与两个非身份业务授权键 sessionGrantV1 / completionDispatchGrantV1(§3.1)。

sessionAdmissionV2 的生产面收敛为三处,只有第一处仍过 daemon→CLI 的 wire: ① host control sidecar(daemon 侧 workbuddy-host-control-authority.ts); ② teammate leader 进程内自签、经 bootstrap channel 下发给 child (workbuddy-admission-security.ts issueTeammateAdmissionMetadata); ③ C3 后 workbuddy-single / completion-warm 进程内自签的主 envelope(同文件 issueMainAdmissionMetadata / issueCompletionDispatchMetadata)。

1. 分类口径

标注含义
公共公共可选扩展。标准 ACP 面(cbc --acp)可见或可选携带;缺失不影响协议可用;第三方客户端可以安全地读取、按需忽略。
私有多租户私有通道,仅 session-payload 组合根(WorkBuddy daemon ↔ CLI、multi-owner-headless)生产与消费。第三方 ACP 客户端不得生产这些键;标准面永远不会要求它们。

方向记法:A→C = Agent 发给 Client(响应 / 通知);C→A = Client 发给 Agent(请求参数);双向 = 两个方向都出现。

2. 清单口径与对账

行号锚点免责:本文档所有 文件:行号 锚点对应撰写(及最近一次校对)时点的源码,仅供快速定位; 源码演进后行号必然漂移。以「文件 + 引用文案 / 符号」grep 为准,行号只作辅助。

canonical grep(可复核)

bash
# 在 genie 仓根执行;git grep 天然排除 node_modules / dist / lib / out-tsc 等构建产物
git grep --untracked -hoE "codebuddy\.ai/[A-Za-z0-9_.-]*" -- 'packages/**/*.ts' 'packages/**/*.tsx' | sort -u | wc -l
# => 195(去重后的 token 数)

--untracked 是必须的:不带它只统计已跟踪文件,任何尚未提交的新增源文件都会 被漏掉,对账数字随提交时机漂移。只对账 token 数,不对账命中行数 —— 行数对 无关的注释改动都敏感,做不成稳定锚点。

注意:-oE 的字符类不含 /,所以 _codebuddy.ai/foo 会被切出 token codebuddy.ai/foo(丢掉前导下划线), _codebuddy.ai/session/rollback 会被切成 codebuddy.ai/session195 是 token 数,不是 key 数, 需要按下表四分后才等于真实清单。

195 = 142 + 44 + 3 + 6,逐项在本文档内可查:

数量是什么落在本文档
A142真正的 _meta 扩展键§3(全部列出)
B44JSON-RPC 扩展方法/通知名(_codebuddy.ai/*),被 grep 切掉了下划线§4(全部列出)
C3命名空间前缀 / 通配写法,不是独立键§5.1
D6产品站 URL 路径伪命中(https://www.codebuddy.ai/...§5.2

C3 对账变更(194→195):A 桶净额不变(删 completionDispatchId / completionExecutionDigest,加 sessionGrantV1 / completionDispatchGrantV1); B 桶 43→44(新增 _codebuddy.ai/activateWorkbuddyOwnerRuntime)。

判别方法(可复现):对每个 token,看它在源码里出现时前一个字符——_ ⇒ 扩展方法(B), ./ ⇒ URL(D),其余 ⇒ _meta 键(A);再把「后面还能接 /*」的通配前缀挑出来(C)。

3. _meta 扩展键全清单(142 条)

3.1 准入 / 身份 / 凭据(14 条)

本组是「公共 vs 私有」分界最要紧的地方。

方向分类生产者消费者语义
runtimeAdmissionA→C公共CLI,runtime-admission-acp-adapter.ts:10-11,30-39initialize 响应)session-payload 侧的 daemon(据此构造 envelope);标准面客户端可忽略进程准入握手:schemaVersion / runtimeProfile / runtimeConfigSha256 / processInstanceId / handshakeNonce两条组合根都发,零 meta e2e 用它锚定 runtimeProfile === 'cbc-headless'
sessionAdmissionV2C→A私有multi-owner issuer(进程外签发);WorkBuddy 家族现仅剩 host control sidecar(workbuddy-host-control-authority.tsruntime-admission-acp-adapter.ts:47-53multi-owner-acp-admission-service.ts:164session/new / session/load 的准入 envelope。缺失即 ACP Session request is missing sessionAdmissionV2 metadataprocess-login 与 C3 后的 workbuddy-single / completion-warm 均由 CLI 自产覆盖,客户端无需也不应携带
sessionGrantV1C→A私有daemon,workbuddy-runtime-admission.ts buildSessionGrantMetadata(C3 新增)workbuddy-single-admission-authority.ts readWorkbuddySessionGrant(仅 workbuddy-single 装配)身份撤出 _meta 后仍需过 wire 的非身份业务授权:canonicalSessionId(daemon 的会话主键,captureRuntimeBinding 断言回报相等)/ environment.values(prewarm 命中路径下 session 增量 env 的唯一送达通道)/ workspace{root,cwd,allowedRoots}不参与身份决策;标准 ACP 面不读该键
completionDispatchGrantV1C→A私有daemon,workbuddy-runtime-admission.ts buildCompletionDispatchGrantMetadata(C3 新增)workbuddy-single-admission-authority.ts readWorkbuddyCompletionDispatchGrant(仅 completion-warm 装配)completion warm 的 per-dispatch 执行授权executionSubPolicyId + 其 digest / dispatchId / executionDigest / workspace。身份来自进程级注入,执行天花板仍逐 dispatch 由 daemon 下达;缺该键即 fail-closed
authSessionC→A私有daemon(session-payload 身份种子)acp-agent.ts:2141-2143 → per-session auth holder{ auth: { accessToken, tokenType?, domain?, refreshToken? }, account?: { uid? } }。account 字段一律由 JWT 派生,绝不采信客户端自报
productConfigC→A私有daemon(workbuddy-server/src/agent/cli-product-env.ts:170acp-agent.ts:2144-2146per-session 产品配置注入:endpoint / networkEnvironment
runtimeTransportCredential双向私有准入核心(multi-owner-acp-admission-service.ts:38-39host-teammate-admission-security.ts:41同上绑定 transport 的一次性凭据,用于 admit 时证明连接身份
runtimeSessionBindingV2A→C私有multi-owner-acp-admission-service.ts:40-41workbuddy-session-admission-authority.ts:18daemon准入成功后回带的 exact binding 投影:ownerId / ownerGeneration / canonicalSessionId / sessionGeneration / resourceId
runtimeBindingTokenC→A私有daemonagent-client-protocol/src/common/runtime-wire-authority.ts:1acp-agent.ts:2147-2155wire 请求的 binding token;非空字符串否则 RUNTIME_BINDING_TOKEN_INVALID
runtimeAuthority双向私有daemon / CLIruntime-wire-authority.ts:2wire fencing 权威快照(processIncarnation / connectionEpoch / owner / session / run 各代际),失配抛 RUNTIME_*_STALE
teamNamespaceActivationC→A公共leader 启动 teammate 时注入(host-teammate-launch.ts:138workbuddy-teammate-launch.ts:124teammate 子进程team 命名空间激活声明。两条组合根共用,不是 session-payload 独有;第三方客户端不会遇到。限定:唯一消费通道是 teammate bootstrap 启动链(teammate-runner.ts:272receiveWorkbuddyTeammateBootstrap 返回的 bootstrap metadata 上读取),不是 ACP wire 上的客户端 _meta;第三方客户端在标准 ACP 面生产该键不会被任何路径消费
userinfoA→C公共acp-agent.ts:1963-1974authenticate 响应)客户端 UI登录用户信息:userId / userName / userNickname / enterpriseId / enterpriseName / authType
accessToken——私有无生产者(协议上不存在)——仅出现在日志脱敏覆盖用例(workbuddy-core/.../conversation-file-logger.spec.ts:44):验证「带命名空间前缀的 token 键同样被 [redacted]」。列在此处防止今后误当作可用键
homeDir——公共已退役——已退役死字段,生产与消费两侧代码均已物理删除(D6-7):全仓唯一命中是反向门禁用例 settings-persession-invariants.spec.ts:10,断言 acp-agent.ts 里不再出现该键——连存量兼容读侧都没有,客户端携带不会被任何路径读取。homeDir 恒由 JWT 派生(resolveControlledHomeDir)。仅为「不要重新启用该键名」而留档

3.2 请求关联与追踪(16 条)

全部 公共:Agent 在响应 / 通知的 _meta 上回带,客户端可选消费;requestId / messageRequestId / userMessageId / messageId 也接受客户端在 session/prompt 上先行下发(acp-agent.ts:2925-2938),缺省则由 CLI 自产。

方向生产者语义
requestId双向acp-agent.ts:2925,3412一次模型请求的全链路关联 ID(命中数最高的键)
messageId双向acp-agent.ts:2937,3349消息级 ID
messageRequestId双向acp-agent.ts:2932,3423消息 ↔ 请求的关联 ID
userMessageId双向acp-agent.ts:2931用户消息 ID(session/prompt 响应也回带)
promptRequestId双向acp-agent.ts:3415-3416Renderer 每次 send/resend 生成的业务关联 ID,供 Desktop 埋点 + Galileo 串联
clientRequestIdC→A客户端工具调用上的客户端自定义关联 ID(workbuddy-server/src/session/handlers.ts:1634
modelRequestIdA→Cacp-view.ts:694模型侧请求 ID
traceIdA→Cacp-agent.ts:3075CLI 侧 trace ID
traceparentA→Cacp-agent.ts:2866,3429W3C traceparent 回传,使 renderer 的 stream_render span 能挂到 prompt.send 下
runIdA→Cacp-agent.ts:263SessionRunStateMachine 的 run ID
runStateRevisionA→Cacp-agent.ts:262run 状态快照 revision
agentPhaseA→Cacp-agent.ts:261Agent 执行阶段(AgentPhaseInfo
timestampA→Cacp-timestamp-meta.ts:124-128时间戳(归一化时会删除该扁平键,统一走规范位置)
sendTimeC→ARenderer用户点击发送的时间戳,供 message 维度用户视角 TTFT 计算(galileo-timing-hook.ts:110
lfConvIdA→C上游LF 会话 ID(扁平透传,agent-ui/src/adapters/acp-message-accumulator.spec.ts:1132
lfConvReqIdA→C上游LF 会话请求 ID(同上)

3.3 会话属性与模式(14 条)

方向分类生产者 → 消费者语义
mode双向公共acp-agent.ts:2984,3072场景模式(scene mode)
userIdC→A公共Renderer → session.metaacp-agent.ts:2888埋点 / trace attribute 用的用户 ID(不参与身份决策,身份只认 JWT)
conversationId双向公共acp-agent.ts:2889 / workbuddy-app/.../stream-span-manager.ts:144上游会话 ID
localeC→A公共acp-agent.ts:2890(兼容 language语言 / 区域
expertId双向公共acp-agent.ts:2891,2987专家(expert)ID
expertSelectionA→C公共workbuddy-server/.../expert-selection-reminder.ts:7专家选择提醒块标记
parentSessionIdA→C公共acp-protocol.ts:319,342子代理会话的父 session ID
isSubAgentA→C公共acp-protocol.ts:319,342是否子代理会话(注意与下面 isSubagent 大小写不同,属历史遗留双写)
isSubagentA→C公共api-schema.ts:1803use-acp.ts:284工具调用维度「是否子代理调用」
subagentTypeA→C公共api-schema.ts:1804子代理类型(默认 general-purpose
isBackgroundA→C公共api-schema.ts:1805是否后台执行
isPlaygroundA→C公共stream-span-manager.ts:148是否 playground 场景
continueC→A公共acp-agent.ts:2560session/new 上声明「继续上次对话」
sessionControl双向公共workbuddy-core/.../conversation-prompt-operations.ts:12会话控制指令载荷

3.4 会话生命周期与错误(12 条)

方向分类生产者语义
errorMessageA→C公共acp-agent.ts:414,3066stopReason: 'refusal' 并列的可读错误文案
finishReasonA→C公共acp-view.ts:703模型 finish reason
outcomeA→C公共acp-agent.ts:3087-3088prompt 结果判定(SUCCESS 等)
businessFailedA→C公共acp-utils.ts:1004业务失败标记,供 UI renderer 与传输失败区分
cancelReasonA→C公共acp-protocol.ts:973取消原因
cancelCauseA→C公共automation-prompt-builder.ts:285prompt result 上的取消成因(automation 优先读它)
terminationReasonA→C公共acp-broadcast-service.ts:435终止原因(如 prompt_timeout
promptFailurePhaseA→C公共workbuddy-server/src/backend/prompt-replay-safety.ts:2prompt 失败发生的阶段
promptFailureReasonA→C公共同上 :3prompt 失败原因
promptReplaySafeA→C公共同上 :1该次失败是否可安全重放
transportLostA→C公共workbuddy-agent-adapter-next.ts:10689传输连接丢失标记
transportErrorA→C公共同上 :10690传输错误码(如 ws_rpc_connection_lost

3.5 工具调用扩展(20 条)

全部 公共,绝大多数由 acp-agent.ts:5013-5064 一段集中从 provider data 复制到 toolCallMeta

生产者语义
toolNameacp-agent.ts:4093,4168工具名
toolCallIdacp-broadcast-service.ts:287关联的工具调用 ID
parentToolCallIdacp-agent.ts:3949,4004父工具调用 ID(子代理嵌套)
toolCancelReasonacp-agent.ts:578工具取消原因(permission_denied 用于与普通取消区分)
toolFailReasonacp-agent.ts:650工具失败原因分类
toolResultTitlepersisted-transcript-projector.ts:72工具结果标题(转写投影用)
descriptionacp-agent.ts:5047,6344工具调用描述
operationacp-agent.ts:5046,6343操作类型(如 mcp-ui reverse tools/call
targetacp-agent.ts:5045,6342操作目标(如 MCP server 名)
filenameacp-utils.ts:654关联文件名
imagesacp-broadcast-service.ts:684图片载荷
rawResponseacp-utils.ts:997工具原始结构化结果,透传给 UI renderer(如 web-search)
bulkDeleteInfoacp-agent.ts:5059-5060批量删除信息
bypassHintacp-agent.ts:5056-5057旁路提示
interceptTypeacp-agent.ts:5044,6758拦截类型
sandboxInterceptacp-agent.ts:5013,5043沙箱拦截标记
sandboxApprovalModeacp-agent.ts:5053-5054沙箱审批模式
mcpUiInterceptacp-agent.ts:4853,6341MCP-UI 反向调用拦截标记
hookacp-utils.ts:770session-manager.ts:766Hook 结构化阻断信息
detailsacp-agent.ts:6800事件补充明细

3.6 权限 / 计划 / 目标(8 条)

全部 公共

生产者语义
decisionacp-broadcast-service.ts:289权限决策结果
permissionResolvedacp-broadcast-service.ts:286权限已解决通知
planContentapi-schema.ts:1808ExitPlanMode 的计划正文
goalProgressuse-acp.ts:491-492目标进度
goalRecapacp-broadcast-service.ts:487目标回顾
goalStatususe-acp.ts:522-523目标状态
interruptionRequestacp-broadcast-service.ts:221session-replay.ts:692中断(HITL)请求载荷
promptSuggestionprompt-suggestion-service.ts:502Prompt 建议

3.7 历史回放与转写投影(10 条)

方向分类生产者语义
historyReplayA→C公共session-replay.ts:392历史回放边界标记(start / 结束)
historyReplayTotalItemsA→C公共session-replay.ts:393回放总条目数(仅 start 时)
rendererHistoryReplayA→C公共conversation-frame-classifier.ts:83replay-event-classifier.ts:82渲染层回放标记
ownerSnapshotHistoryReplayA→C私有replay-event-classifier.ts:87conversation-frame-classifier.ts:84owner 快照回放标记——owner 概念只在 session-payload 多租户下成立
isSessionSeparatorA→C公共conversation-frame-classifier.ts:91会话分隔帧标记
separatorExtraA→C公共同上 :94分隔帧附加信息
createTimeA→C公共同上 :93帧创建时间
offsetA→C公共workbuddy-agent-adapter-next.ts:6458转写源 offset(旧键)
sourceOffsetA→C公共agent-member-utils.ts:242team-runtime.ts:461转写源 offset(新键,优先于 offset
originalBytesA→C公共persisted-transcript-projector.ts:71转写截断前的原始字节数

3.8 上下文压缩 compact(6 条)

全部 公共,走 session_info_update._meta

生产者语义
compactTypecontext-protocol.ts:231压缩类型,desktop adapter 据此决定呈现
compactStatusconversation-frame-classifier.ts:231压缩状态
compact-cancelledcontext-protocol.ts:287{ cancelled: true } —— 压缩被取消
compact-limit-reachedcontext-protocol.ts:295{ limitReached: true } —— 触达压缩上限
compactTruncatedpersisted-transcript-projector.ts:70该帧在压缩中被截断
isCompactInternalacp-agent.ts:3200,3396该 prompt 是 compact 内部触发(不计入用户可见轮次)

3.9 Team / teammate(7 条)

方向分类生产者语义
teamUpdateA→C公共acp-team-bridge.ts:745,779Team 状态事件(成员状态变更等)
memberEventA→C公共acp-team-bridge.ts:602成员流式消息的归属标签(成员名)
memberNameA→C公共acp-agent.ts:5037工具调用所属成员名
isTeamMemberA→C公共acp-agent.ts:5036该工具调用来自 team 成员
agentColorA→C公共acp-agent.ts:5039成员展示色
syntheticTeammateMessageA→C公共team-runtime-loader.ts:691workbuddy-agent-adapter-next.ts:4945合成的 teammate 消息(非模型直出)
teammateSummaryA→C公共同上 :693 / :4946teammate 摘要文本

3.10 Workflow(14 条)

全部 公共,由 src/node/workflow/acp/workflow-acp-bridge.ts:146-190 一处集中生产,键空间统一为 codebuddy.ai/workflow*

语义
workflowEventKind:151事件类型
workflowRunId:156,168运行 ID
workflowName:157工作流名
workflowStatus:158运行状态
workflowAgentCount:159agent 总数
workflowCachedCount:160命中缓存的 agent 数
workflowPhaseCount:161阶段总数
workflowError:163运行级错误
workflowPhase:169当前阶段
workflowAgentKey:175agent key
workflowAgentLabel:177agent 展示名
workflowAgentPhase:180agent 阶段
workflowAgentError:183agent 级错误
workflowAgentTokens:186agent token 消耗

3.11 外部渠道接入 channel(6 条)

全部 公共,由 acp-utils.ts:481-491 生产、Web UI use-acp.ts:202-213 消费。承载企业微信等外部渠道的来源信息。

语义
channelSource渠道来源标识
channelSender发送者 ID
channelSenderName发送者展示名
channelChatId会话 ID
channelChatType会话类型(single / group
commandKind命令种类(slash

3.12 MCP-UI 与消息队列(4 条)

方向分类生产者语义
sendMessageModeC→A公共MCP-UI widget(mcp-app-handlers.ts:79,112widget 回写消息的行为路由:send / fill
message_queue_updateA→C公共acp-broadcast-service.ts:462消息队列增量更新
newSessionIdA→C公共acp-command-attachment-router.ts:73命令触发新建会话后的新 sessionId
sessionResetA→C公共acp-command-attachment-router.ts:72会话被重置(如 /clear

3.13 内容与用量(5 条)

方向分类生产者语义
usageByCategoryA→C公共acp-protocol.ts:64,1331usage_update 的分类用量;不变式:sum(usageByCategory) === update.used
contentFilterNoticeA→C公共context-protocol.ts:258内容过滤提示(true 时该 text 块是过滤告知)
hiddenPromptContextC→A公共colleague-mention-context.ts:15该 prompt 块是隐藏上下文,不在 UI 呈现
progressA→C公共acp-agent.ts:3820stream-json-protocol.ts:554session_info_update 上的进度载荷
sourceEventA→C公共acp-utils.ts:146该 update 的来源事件客观描述(facets),供 adapter 分流

3.14 模型标识(4 条)

全部 公共acp-agent.ts:3437-3447 集中回填。

语义
requestModelId请求所用模型 ID
requestModelName请求所用模型名
responseModelId实际响应模型 ID
responseModelName实际响应模型名(conversation-event-machine.ts:334

3.15 completion warm 与其它(2 条)

C3 变更:completionDispatchId / completionExecutionDigest 两个扁平键已随 buildEphemeralMetadata 一并物理删除,其语义并入 §3.1 的 completionDispatchGrantV1(结构化的 per-dispatch 执行授权)。

方向分类生产者语义
statusA→C公共acp-session-info-router.ts:136-137conversation-event-machine.ts:763session_info_update 的状态字段
modelA→C公共stream-span-manager.ts:145扁平模型名(span 归因用)

私有键小计(10 条)sessionAdmissionV2sessionGrantV1completionDispatchGrantV1authSessionproductConfigruntimeTransportCredentialruntimeSessionBindingV2runtimeBindingTokenruntimeAuthorityownerSnapshotHistoryReplay —— 再加上「无生产者但归属凭据面」的 accessToken,共 11 条在标准 ACP 面永远不出现。 其余 131 条为公共可选扩展。

4. _codebuddy.ai/* 扩展方法 / 通知全清单(44 条)

ACP 规定自定义方法以下划线前缀 + 反向域名命名空间。这些不是 _meta,但共享同一命名空间, 第三方客户端同样需要知道它们的公共 / 私有归属。清单入口:packages/agent-client-protocol/src/common/types.ts:25-35

方法名方向分类语义
_codebuddy.ai/questionA→C(request)公共HITL 提问,等待客户端应答(acp-protocol.ts:900
_codebuddy.ai/resolveInterruptionC→A(request)公共客户端回答中断请求(acp-agent.ts:5565-5570
_codebuddy.ai/artifactA→C(notify)公共产物推送(session-replay.ts:523
_codebuddy.ai/commandA→C(notify)公共命令事件(types.ts:25
_codebuddy.ai/checkpointA→C(notify)公共checkpoint 事件(session-replay.ts:601
_codebuddy.ai/session/rollbackC→A(request)公共会话回滚(acp-agent.ts:5812
_codebuddy.ai/session/rollbackFilesC→A(request)公共文件级回滚
_codebuddy.ai/session/previewFileRollbackC→A(request)公共回滚预览
_codebuddy.ai/file_history_snapshotA→C(notify)公共文件历史快照(types.ts:29
_codebuddy.ai/fileTreeChangedA→C(notify)公共文件树变更(须带 filePath)
_codebuddy.ai/authUrlA→C(notify)公共登录跳转 URL(types.ts:27
_codebuddy.ai/getUserInfoC→A(request)公共拉取用户信息(acp-agent.ts:5578
_codebuddy.ai/uiControlA→C(request)公共UI 控制指令(types.ts:35
_codebuddy.ai/system_initA→C(notify)公共系统初始化通知
_codebuddy.ai/tool_inputA→C(request)公共工具输入征询(agent-provider/examples/question-example.ts:16
_codebuddy.ai/delegateToolA→C(request)公共工具代理执行(delegate-tool-manager.ts:299
_codebuddy.ai/delegateToolsChangedC→A(notify)公共客户端可代理工具集变更(acp-agent.ts:5580
_codebuddy.ai/refreshPluginsC→A(request)公共请求刷新插件(acp-agent.ts:5584
_codebuddy.ai/plugins_changedA→C(notify)公共插件集变更
_codebuddy.ai/mcp_servers_changedA→C(notify)公共MCP server 集变更
_codebuddy.ai/models_changedA→C(notify)公共模型列表变更
_codebuddy.ai/product_config_changedA→C(notify)公共产品配置变更
_codebuddy.ai/identity_changedA→C(notify)公共身份变更广播(主进程写入后广播到所有 live session)
_codebuddy.ai/queue_state_changedA→C(notify)公共队列状态变更
_codebuddy.ai/message_queue_snapshot_changedA→C(notify)公共消息队列快照变更
_codebuddy.ai/automation_snapshotA→C(notify)公共automation 快照
_codebuddy.ai/interaction_timeoutA→C(notify)公共交互超时(cloud-agent-event-bridge.ts:10
_codebuddy.ai/teamsA→C(notify)公共Team SSE 事件(use-collab-queue.ts:5
_codebuddy.ai/conversationA→C(notify)公共会话事件(use-conversation-events.ts:50
_codebuddy.ai/mcpUiCallToolC→A(request)公共MCP-UI 反向 tools/call
_codebuddy.ai/mcpUiReadResourceC→A(request)公共MCP-UI 读资源
_codebuddy.ai/mcpUiUpdateModelContextC→A(request)公共MCP-UI 更新模型上下文
_codebuddy.ai/mcpUiRequestDisplayModeC→A(request)公共MCP-UI 请求显示模式
_codebuddy.ai/mcpUiResourceTeardownC→A(request)公共MCP-UI 资源释放
_codebuddy.ai/respondToSandboxInterceptC→A(request)公共应答沙箱拦截(codebuddy-code-backend.ts:1909
_codebuddy.ai/admitControlC→A(request)私有control Session 准入。process-login 组合根直接 throwprocess-login-acp-admission-service.ts:87-90),仅 workbuddy-host-sidecar
_codebuddy.ai/runtimeCredentialUpdateC→A(request)私有per-session exact 凭据更新(acp-agent.ts:5595
_codebuddy.ai/runtimeControlCredentialUpdateC→A(request)私有control binding 凭据更新(acp-agent.ts:5597
_codebuddy.ai/runtimeOwnerCredentialUpdateC→A(request)私有owner 级批量凭据更新(acp-agent.ts:5599),对应 bulkApplyExactCredentialUpdates
_codebuddy.ai/activateWorkbuddyOwnerRuntimeC→A(request)私有C3 新增:向 workbuddy-single 进程注入一次 owner 授权(authSession + product 材料 + 凭据句柄),此后 session/new 零身份 meta。载荷 = {proof, processInstanceId, handshakeNonce, runtimeConfigSha256, ownerGeneration},验证点 workbuddy-admission-security.ts activateOwnerRuntime
_codebuddy.ai/activateCompletionRuntimeC→A(request)私有激活 completion warm 运行时;C3 起 claims 追加 credentialMaterial,同时承担 warm 侧的进程级 owner 注入,且凭据刷新后会以同 ownerGeneration、新 proof 重复调用(整体替换语义)
_codebuddy.ai/completionDispatchC→A(request)私有分发一次 completion(acp-agent.ts:5738
_codebuddy.ai/completionRuntimeDiagnosticsC→A(request)私有completion 运行时诊断(acp-agent.ts:5708
_codebuddy.ai/disposeEphemeralSessionC→A(request)私有销毁 ephemeral session(acp-agent.ts:5676
_codebuddy.ai/disposePersistentSessionC→A(request)私有销毁 persistent session(acp-agent.ts:5705
_codebuddy.ai/example————测试用占位方法名,仅出现在 workbuddy-server/src/server-owned-handlers.spec.ts:2113,无生产实现

表内 46 行 = 44 个 grep token + session/rollbackFiles / session/previewFileRollback 两个子路径 (它们与 session/rollback 共享 token codebuddy.ai/session,grep 只算一次)。

5. 非键命中(9 条)

5.1 命名空间前缀 / 通配写法(3 条)

token出现形态说明
codebuddy.ai/startsWith('codebuddy.ai/') / startsWith('_codebuddy.ai/')命名空间前缀本身。守卫点:workflow-acp-bridge.spec.ts:82sandbox-proxy/src/handler/artifacts-proxy.ts:70sandbox-proxy/src/replay/replay.ts:1047
codebuddy.ai/workflow注释里的 codebuddy.ai/workflow*键空间通配写法(workflow-acp-bridge.ts:146),不是独立键
codebuddy.ai/mcpUi注释里的 _codebuddy.ai/mcpUi*5 个 MCP-UI 扩展方法的通配写法(mcp-apps-extmethod.spec.ts:4

5.2 产品站 URL 路径伪命中(6 条)

以下 token 出自 https://www.codebuddy.ai/... / https://code.codebuddy.ai/... 这类 URL,与协议无关:

token出处
codebuddy.ai/docskeybinding-template.ts:18,52mcp-approval-box.tsx:16
codebuddy.ai/schemaskeybinding-template.ts:17,51
codebuddy.ai/loginchat-ui/src/browser/login/login.tsx:149
codebuddy.ai/agentsagent-ui/src/utils/workbuddy-share-origin.spec.ts:312
codebuddy.ai/profileuse-error-banner.tsx:186.../profile/plan
codebuddy.ai/v2model-provider.spec.ts:454,520(API baseURL)

6. 给第三方 ACP 客户端的规则

  1. 不要生产任何 codebuddy.ai/* _meta 键来做身份或准入。§3.1 标注为「私有」的键由 CodeBuddy 内部 组合根签发,客户端自造只会被拒(envelope 校验、digest 比对、fencing 全都过不去)。
  2. 可以安全读取所有「公共」键,并按需忽略。它们全部是可选增量信息,语义变化不会破坏基础 ACP 流程。
  3. session/prompt 上可选携带的关联 IDrequestId / messageId / messageRequestId / userMessageId / promptRequestId / clientRequestId / sendTime / traceparent)是唯一推荐客户端 主动生产的一组——它们只影响埋点与链路串联,不参与任何鉴权判断。
  4. _codebuddy.ai/* 扩展方法:§4 里标注「私有」的 9 个(admitControl + 三个 runtime*CredentialUpdate
    • completion 三件套 + dispose 两件套)只在 WorkBuddy 内部通道出现,标准面调用会被拒绝。

7. 相关文档

  • ACP 协议集成 —— --acp 启动方式、Zed 配置、协议特性
  • _meta 常驻 e2e:src/e2e/acp-zero-meta-contract.spec.ts
  • 准入契约实现:src/node/session/runtime-admission-acp-adapter.tssrc/node/session/process-login-acp-admission-service.tssrc/node/session/multi-owner-acp-admission-service.ts
  • profile 注册表:packages/runtime-admission-protocol/src/runtime-admission-contract.ts