@sema-agent/client-core 0.83.6 → 0.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +10 -10
  3. package/dist/adapt/wireShapes.js +3 -2
  4. package/dist/adapter/activeRunSelfHeal.js +7 -7
  5. package/dist/adapter/downstream/eventToSdkMessage.js +6 -2
  6. package/dist/adapter/downstream/wiringManifestView.d.ts +3 -1
  7. package/dist/adapter/downstream/wiringManifestView.js +1 -0
  8. package/dist/agentSession/engineAgentRegistryRead.d.ts +18 -0
  9. package/dist/agentSession/engineAgentRegistryRead.js +167 -0
  10. package/dist/agentsWireCaps.js +2 -1
  11. package/dist/attachmentsWireCaps.js +2 -2
  12. package/dist/controlRouter.js +1 -1
  13. package/dist/engineAgentAbsence.d.ts +37 -0
  14. package/dist/engineAgentAbsence.js +142 -0
  15. package/dist/engineErrorCodes.js +6 -5
  16. package/dist/engineNoticeCodes.d.ts +17 -0
  17. package/dist/engineNoticeCodes.js +45 -0
  18. package/dist/fleet/fleetProjection.js +3 -2
  19. package/dist/frozenSet.d.ts +1 -0
  20. package/dist/frozenSet.js +20 -0
  21. package/dist/handsSeam.d.ts +3 -0
  22. package/dist/handsSeam.js +19 -0
  23. package/dist/index.d.ts +23 -13
  24. package/dist/index.js +12 -13
  25. package/dist/model/catalogLoader.js +3 -3
  26. package/dist/model/tierVocabulary.js +1 -1
  27. package/dist/request/taskRequest.js +15 -5
  28. package/dist/rewindWireCaps.d.ts +0 -1
  29. package/dist/seam.d.ts +2 -1
  30. package/dist/seatContract.js +2 -2
  31. package/dist/toolResult.js +2 -6
  32. package/dist/toolRoster.d.ts +16 -0
  33. package/dist/toolRoster.js +46 -5
  34. package/dist/wireErrorTriage.js +1 -11
  35. package/dist/workflowClient.js +4 -3
  36. package/dist/workflowMonitor.d.ts +1 -1
  37. package/docs/INTEGRATION-CLIENTS.md +248 -29
  38. package/package.json +3 -3
@@ -19,11 +19,11 @@
19
19
 
20
20
  | 项 | 值 | 真源 |
21
21
  |---|---|---|
22
- | 本包 | `@sema-agent/client-core` **0.83.6**(本批发布版 = **patch**:会话规则记录的无损判定 `sessionPolicyDeliverable` 把引擎会在准备阶段拒启的两类名字(引擎退役名、含 `__` 而不以协议前缀开头的名字)改判「不写」,成因词 `legacy_tool_name`(闭集 5 → 6),引擎说「改名为 X」的退役名带 `currentName` 出路位;`peer_wide` 那句改措辞(判决不变)(CC-226);根公面 1278 不变;peer sdk 地板 `>=11.3.0` 不动;§106)。上一版 0.83.5 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`,三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf` 上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
23
- | peer:wire 契约 | `@sema-agent/sdk` **>=11.3.0**(value-level,非 type-only;**0.80.0 抬版**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码;0.83.0 / 0.83.1 / 0.83.2 / 0.83.3 / 0.83.4 / 0.83.5 / 0.83.6 不动。此前 **0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
22
+ | 本包 | `@sema-agent/client-core` **0.84.0**(本批发布版 = **minor**:peer sdk 地板 `>=11.3.0` → `>=12.0.1`;后台代理登记读数 —— 读口 / 取代判定 / 归类口 / 登记键桥 / 补行谓词,缺席行下半场(CC-194);读目录授权结论通告读口 `readReadRootGrantNotice`(CC-185);接线回执 `hands` 段 `_sema_hands` + 读口 `handsSeamReadingOf` / `handsSeamDetail`,`handsMountedDetail` 坏入参不再抛(CC-206);陈旧逻辑清扫(CC-223):退役键 `rewind.rewindFiles` 构造期拒收、`WorkflowRunState.agentCount` 改可选、26 个内部件退出根入口、九张公面判定表换只读 Set 子类、十五张判定数组冻结、`resume_at` 文本兼容腿退役;根公面 1278 → 1260;公面类型 +10;§107)。上一版 0.83.6 = **patch**:会话规则记录的无损判定 `sessionPolicyDeliverable` 把引擎会在准备阶段拒启的两类名字(引擎退役名、含 `__` 而不以协议前缀开头的名字)改判「不写」,成因词 `legacy_tool_name`(闭集 5 → 6),引擎说「改名为 X」的退役名带 `currentName` 出路位;`peer_wide` 那句改措辞(判决不变)(CC-226);根公面 1278 不变;peer sdk 地板 `>=11.3.0` 不动;§106)。上一版 0.83.5 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`,三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf` 上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
23
+ | peer:wire 契约 | `@sema-agent/sdk` **>=12.0.1**(value-level,非 type-only;**0.84.0 抬版**:12.x 声明每会话后台登记列表 `sessions.background`、能力位 `capabilities.background.listFace` 与七词闭集的后台状态型,本包三者都读(登记读口的端点门与归类口的编译期穷举),按 12.0.1 编译,11.3.0 失去物料见证。此前 **0.80.0 曾抬到 >=11.3.0**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码(0.80.0 至 0.83.6 都在这条地板上);**0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
24
24
  | peer:会话词汇表 | `@sema-agent/agent-types` **>=0.3.0**(type-only,零运行时;0.71.0 抬版:devDep 与 peer 同步,type-superset 门 ④ 撞名预警对着 0.3.0 的 .d.ts 求值) | 同上 |
25
25
  | runtime dep | `diff` ^9.0.0(**唯一**一条;portability 门按**等值**钉死) | `package.json` `dependencies` |
26
- | 公开导出面 | **1278** 个运行期符号(+ **59 个测试钩,两种拼法**:35 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1278 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1278 + 59 = **1337**;只剔双下划线那 35 个会多数出 24 个来,那不是棘轮盲区;最简单的剔法是去掉所有以 `_` 开头的名字(公面运行期名没有一个以 `_` 开头);= 下一版(未发布)的值:相对 0.75.1 **+16**,两票合计 —— **CC-77 ①** 审批决断结局单源判别联合 6 件:`approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` + 两张 cause 词表 `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(域 3);**CC-96** 记忆 spec 读面 10 件:`readAgentMemorySpec` / `unknownMemorySpecKeys` / `unknownMemorySpecKeysNote` / `memoryConfigRefusalNoteOf` / `KNOWN_AGENT_MEMORY_SPEC_KEYS` / `PENDING_MEMORY_SPEC_KEYS` / `MAX_UNKNOWN_MEMORY_SPEC_KEYS` / `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH` + 判别形型(域 6 / 16)。CC-89 / CC-91 / CC-92 / CC-98 四票**零值导出增减**(新臂走 `ChromeEvent` 联合与内部臂表,`tasks_expand` 退役删的是联合成员不是导出名);1065 = 0.74.5 / 0.75.0 / 0.75.1 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1065 = 0.74.5 / 0.75.0 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1061 = 0.74.3 / 0.74.4 的值:相对 0.74.2 +9 —— CC-70 / CC-71 / CC-72 / CC-73 八件 + CC-80 `lastFlagValue`,见 §2b 域 3 / 4 / 10 / 15;1052 = 0.74.2 的值:相对 0.74.1 +6 —— CC-69 六件,见 §2b 域 9;1046 = 0.74.1 的值:相对 0.74.0 +1 —— `RETRACTED_CARD_DECISION_KIND`,见 §2b 域 3;1045 = 0.74.0 的值:相对 0.73.5 +1 —— `isStaleEngineAgentPanelEnd`,见 §2b 域 4;1044 = 0.73.5 的值:相对 0.73.4 +11 —— CC-58 规模告警十一件,名单见 §2b 域 12;1033 = 0.73.4 的值:相对 0.73.3 +1 —— `TOOL_INPUT_JOIN_MAX_CALLS`,见 §2b 域 1;1032 = 0.73.3 的值:相对 0.73.2 +6 —— CC-61 六件,名单见 §2b 域 9;1026 = 0.73.2 的值(导出名零增减);= 0.73.1 的值:相对 0.73.0 +7 —— CC-56 六件 / CC-57 一件,名单见 §2b 域 3 / 15;1019 = 0.73.0 的值(导出名零增减,BREAKING 在类型面);= 0.72.14 的值:相对 0.72.13 +8 —— CC-55 八件,名单见 §2b 域 3;1011 = 0.72.13 的值:相对 0.72.12 +18 —— CC-46 八件 / CC-54 六件 / CC-53 两件 / CC-50 缺席口两件,名单见 §2b 域 3 / 4 / 9 / 10;993 = 0.72.12 的值(测试钩 45):相对 0.72.11 +4 —— CC-50 `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText` / `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`;989 = 0.72.10 的值:相对 0.72.9 +4 —— CC-41 `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX` / `projectLeaderConflict` / `leaderConflictDetail`;985 = 0.72.9 的值:相对 0.72.8 +8 —— CC-30 `MCP_RECONNECT_OUTCOMES` / `MCP_RECONNECT_TRANSACTION_NOTICE` / `projectMcpReconnectResult` / `classifyMcpReconnectFailure` / `reconnectMcpServer` / `projectMcpReconnectCapability` / `mcpReconnectOutcomeDetail`、CC-39② `readAutoConsolidationArmed`;977 = 0.72.8 的值:相对 0.72.7 +6 —— CC-39③ `MEMORY_OFF` / `memoryOffDeclarationField` / `memoryOffDeclared`、CC-43 `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`;971 = 0.72.7 的值:相对 0.72.6 +2 —— CC-42 core 7.22.0 提货 `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`;969 = 0.72.6 的值:相对 0.72.5 +1 —— CC-40 `steerFollowIntent`;968 = 0.72.5 的值:相对 0.72.4 +6 —— CC-31 server 7.82.1 提货 `capabilities.webSearch.backend` 四态读面:`WEB_SEARCH_BACKEND_NONE` / `projectWebSearchBackendCapability` / `observedWebSearchBackend` / `noteEngineCapsForWebSearchBackend` / `forgetWebSearchBackendReading` / `webSearchBackendDoctorDetail`;962 = 0.72.3 的值:相对 0.72.2 +1 —— CC-39① `AGENT_MEMORY_WORDS`;0.72.2 相对 0.72.1 +1 —— CC-37 `noteOwnWorkflowRun`;0.72.1 相对 0.72.0 +4 —— CC-33 server 7.80.1 提货:`RESUME_CONTEXT_UNAVAILABLE` / `resumeContextUnavailableFromError` / `resumeContextUnavailableContent` / `skillBaseDirOf`;0.72.0 相对 0.71.4 −39 —— CC-32 退役批删 export-liveness 登记 retire 的 39 个零消费导出(23 常量 + 16 函数,名单见 §47);995 = 0.71.3 的值:相对 0.71.2 +9 —— CC-06 `readEffectiveReasoning` / `readEffectiveMemoryScopes` / `resumeReopenFromError` / `resumeReopenContent` / `routePairingVerdict` 五函数 + `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` 四常量;986 = 0.71.0 的值:相对 0.70.2 −`MAX_AGENT_SKILLS` −`DECIDE_WORKFLOW_HOST_NOT_PARKED` +`projectToolRosterDelta` +`mcpEngineLegPresence`;986 = 0.70.0 的值:相对 0.69.2 **一件 additive(`readSkillsListingTruncated`,§39)、零删除**;985 = 0.69.2 的值:相对 0.69.1 **三件 additive、零删除**(CC-13 `isSubFlowSegmentEnd` / `SEGMENT_END_IDENTITY_KEYS` / `droppedWhySentence`,§38);982 = 0.69.0 未发布版的值(原排 0.68.3,因 peer 地板抬升改 minor)= 相对 0.68.2 **十七件 additive、零删除**:`fetchMcpPanel`(CC-03 补件,§36e)+ `readWorkflowResumeAdmissionIncomplete`(CC-05 core 7.18.0 #755)+ `installCoreValuePorts`/`hasCoreValuePorts`/`hasCoreValuePort`/`coreValuePortMisses`/`CORE_VALUE_PORT_NAMES` + 十读口(CC-07 core 值级端口,§36d);0.68.2 相对 0.68.1 十三件 additive:`SEMA_SEGMENT_ID_KEY`(CC-01 段身份键,§35f)/ `projectMcpPanel`+`mcpPanelLastLegDetail`+`projectMcpSection`(CC-03 `/mcp` 面板读视图,§35g)/ `resolveTextSegmentAuthority`/`createTextSegmentLedger`(L-318 `text_end` 权威段替换的判决单源 + print 形段账,详见 §35b/§35c)/ `memoryCaptureDeclarationField`/`MEMORY_CAPTURE_OFF`(L-316 会话级隐私声明的字面唯一铸点,§35d)/ `engineUrl`/`probeHealth`(L-61 件④ SDK 纯工具面原样转口,§35d)/ `AgentClient`/`isApprovalRequestFrameV1`/`isApprovalRevokeFrameV1`(L-61 存量清零:SDK **wire 面**原样转口,§35e)。`0.68.1`/`0.68.0` 是 **952**,那批是相对 0.67.2 **二十件 additive、🔴 两件删除(BREAKING)**:additive = `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`/`RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`RUN_TERMINAL_STATUSES`(L-247 终态词两表分源,详见 §33b)/ `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(L-244 子代下界位自有名,§33g)/ `ASK_UNRESOLVABLE_CAUSES`/`readAskUnresolvable`/`DURABLE_MANDATE_SOURCES`/`readDurableGateUnavailable`(core 7.17.0 #709 ①② 两只通告事实窄读器,§33c)/ `WORKFLOW_PARK_TRUTH_UNREADABLE`/`WORKFLOW_PARK_NOT_PENDING`/`WORKFLOW_PARK_BINDING_BROKEN`/`WORKFLOW_PARK_REQUIRES_RUN_STORE`(四个单码常量 🔧 0.72.0 退役)/`WORKFLOW_PARK_REFUSAL_CODES`/`isWorkflowParkRefusalCode`/`readWorkflowParks`(core 7.17.0 #652 park 真相四码 + parks 三键读器,§33d)/ `ENGINE_STOP_REASONS`/`engineStopReasonToCc`(L-246 A13 停止原词映射下沉,§33g)/ `readCancelRequested`(L-230 读面,§33f);🔴 **删除两件** `TERMINAL_NOT_SUCCESS_STATUSES`/`TERMINAL_STATUSES`(随 L-247 两表分源更名成 `RUN_TERMINAL_*`,clean-cut **不留别名** —— 留一个别名等于让端可以继续按合起来的那张表读,分源就白做了,详见 §33b)。`0.67.0` 是 **934**,那批是相对 0.66.0 **七件 additive、🔴 两件删除**:additive = `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`(core 7.14.0 退役 `classifierUnavailable` 之后的**拒绝面**继任读器与措辞,详见 §32b)/ `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`(core 7.14.0 #688 C3 的规则店机制位三件,详见 §32d);🔴 **删除两件** `classifierUnavailableOf`/`classifierUnavailableDetail`(随 core 7.14.0 的 Retired keys 表整族退役,clean-cut 不留别名,详见 §32b;同批删的还有**型** `ClassifierUnavailableView`、卡位与帧位 `classifierUnavailable`、以及一条恒真的型面钉 `_askOriginWordsPin`)。`0.66.0` 是 **929**,那批是一件 additive、零删除:`readRunCostFacts`(终局成本事实的唯一读器:`costBreakdown` / `nested` 窄读 + 对账三段与两个判别位,终帧超集键与 chrome 对账臂共用它;详见 §31c);已发的 **0.65.x 十一件 additive、两件删除**:additive = `DECIDE_WORKFLOW_HOST_UNKNOWN`/`DECIDE_WORKFLOW_HOST_NOT_PARKED`/`DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED`/`DECIDE_WORKFLOW_LANE_CODES`/`readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070 `/decide` 回执读面与三码人话,详见 §30h)/ `TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇单铸谓词,详见 §30j);🔴 **删除两件** `AUTO_MODE_BREAKER_CAUSES`/`classifierBreakerOf`(熔断族随 core 7.12.0 的 Removed(BREAKING) 整只退役,clean-cut 不留别名,详见 §30k②;同批删的还有**型** `ClassifierBreakerView` 与 `ClassifierStatusView.breaker` 一位)。`0.64.2` 是 **919**,那批是一件 additive、零删除:`readDenialLimitFallback`(限额回落卡的窄读器上公面,壳侧同判据副本退役,详见 §29③);`0.64.0` 是 **918**,那批是件①+件② 十三件 additive、零删除:`CLASSIFIER_STATUS_STATES`/`classifierBreakerOf`/`classifierStatusOf`/`classifierStatusDetail`(分类器状态面,详见 §28②)/ `THINKING_FORMATS`/`THINKING_FORMAT_WIRE_TWINS`/`THINKING_DISABLE_PROBE_ORDER`/`MODEL_PROBE_VERDICTS`/`PROBE_PROMPT`/`PROBE_MAX_TOKENS`(两个探针常量 🔧 0.72.0 退役)/`probeRequestBody`/`probeModelCapability`/`applyProbeToEntry`(模型思考能力探测,详见 §28①);`0.63.0` 是 **905**,那批是八件 additive、零删除:`projectServerGateKnobs`/`postureKnobSourceOf`/`postureSourceIsOperatorPinned`/`postureKnobDetail`/`POSTURE_SOURCE_WORDS`(S-178 三根 posture 旋钮读数,详见 §27b)/ `PERSISTED_RULE_BEHAVIORS`/`PERSISTED_RULE_BEHAVIOR_UNKNOWN`/`persistedRuleBehaviorOf`/`persistedRuleBehaviorLabel`/`revokeTargetFromPersistedRule`(三态规则身份,§27c)/ `engineIdentityOf`/`engineIdentityVerdict`/`engineIdentityChanged`/`engineIdentityChangedBy`/`ENGINE_IDENTITY_ANCHORS`(S-179 代际锚,§27d)/ `GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail`(门词汇 +2,§27e)/ `PERMISSION_RULE_ISSUE_CODES`/`RETIRED_PERMISSION_RULE_ISSUE_CODES`/`permissionRuleIssueDetail`(规则 lint 码表,§27f)/ `projectToolRoster`/`toolRosterNames`/`toolShimFromRoster`/`applyToolRosterDelta`(L-161 工具名册,§27g)/ `ENGINE_NOTICE_CODES`/`ENGINE_NOTICE_AUDIENCE`/`noticeAudienceOf`/`engineNoticeInCatalog`/`MCP_INJECTION_DROP_REASONS`/`readMcpInjectionDrop`(L-167 通告码册,§27h)/ `AUTO_MODE_UNAVAILABLE_CAUSES`/`AUTO_MODE_BREAKER_CAUSES`/`classifierUnavailableOf`/`classifierUnavailableDetail`(件⑧ 分类器不可用事实,§27h2);`0.62.0` 是 **869**,那批是五件 additive、**零删除**:`capForDisplay`(呈前消毒 + 封长的共用铸点,详见 §26⑦)/ `SEAT_SEND_MESSAGE_KEY_ORIGINS`(座位载荷逐键出身表,详见 §26③)/ `configureSubagentContentStore`+`subagentContentStoreConfig`+`SUBAGENT_CONTENT_STORE_DEFAULTS`(子代内容账本字节预算,测试钩 `__resetSubagentContentStoreConfigForTests` +1,详见 §26②);`0.61.0` 是 **864**,那批是三件 additive、**零删除**:`projectReadFacePosture`/`readFacePostureDetail`/`readFaceDisagreement`(S-167 READ 容纳面 operator 读器,详见 §25);`0.60.0` 是 **861**,那批是二十五件 additive、**零删除**:`readRunTerminal`/`runTerminalCode`/`runTerminalGateKind`/`runTerminalGateToolName`/`isReviewPark`/`REVIEW_PARK_GATE_KINDS` 六件终局因由读器 + `gateOutcomeOf`/`isDeniedGate`/`gateDeniedBy`/`gateApprover`/`isApprovalWindowExpiredGate`/`isDenialLimitAutoDeniedGate`/`isParkSlaExpiredGate`/`isHumanSettledGate` 八件门记录读器 + `projectWriteProtectionCapability`/`noteEngineCapsForWriteProtection`/`observedWriteProtection`/`forgetWriteProtectionReading`/`writeProtectionDoctorDetail`/`projectWriteProtectionPosture`/`writeProtectionPostureDetail` 七件写保护读面(测试钩 `__resetWriteProtectionReadingsForTests` +1)+ `readWireErrorCode` + 真机边界①的两件 `isGateParkedToolEnd`/`GATE_PARKED_ERROR_CODE` + 异源复审逼出的 `engineCapsGeneration`;`0.59.0` 是 **836**,那批是八件 additive:`RULE_OFFERS_ABSENCE_REASONS`/`DENIAL_LIMIT_KINDS` 两张闭词表再导出 + `engineCapValue` 能力位四态通用读口 + `projectSqlEngineCapability`/`observedSqlEngine`/`noteEngineCapsForSqlEngine`/`forgetSqlEngineReading`/`sqlEngineDoctorDetail` 五件 SQL 姿态读面(测试钩 `__resetSqlEngineReadingsForTests` +1);`0.58.0` 是 **828**,那批是三件 additive:`RULE_OFFER_MATCHES`/`RULE_OFFER_BATCH_MEMBER_KINDS`/`RULE_OFFER_UNCOVERED_REASONS` 三张闭词表再导出 + `RESUME_REFUSAL_CODES`/`RESUME_PLACEMENT_MISMATCH`/`resumeRefusalFromError`/`resumeRefusalContent` 四件文案铸点;`0.57.0` 是 **821**;`0.56.0`/`0.55.0` 是 **815**;已发 `0.54.0`(design/385 十件 additive 含 `AUTHORITY_ENVELOPE_TAGS` 🔧 0.72.0 退役);`0.52.0` 是 **805**(L-69⑨ 两件);`0.51.0` 是 **803**;`0.50.0` 是 **800**(S-81 五件);`0.49.0` 是 **795**;`0.48.0` 是 **794**;npm `0.47.0` 是 **790**,`0.46.0` 是 **787**,`0.44.0` 是 **783**,`0.43.1`/`0.43.0` 是 **776**,`0.42.0` 是 **771**,`0.41.0` 是 **767**,`0.39.0` 是 **766**,`0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
26
+ | 公开导出面 | **1260** 个运行期符号(+ **59 个测试钩,两种拼法**:35 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1260 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1260 + 59 = **1319**;只剔双下划线那 35 个会多数出 24 个来,那不是棘轮盲区;最简单的剔法是去掉所有以 `_` 开头的名字(公面运行期名没有一个以 `_` 开头);= 下一版(未发布)的值:相对 0.75.1 **+16**,两票合计 —— **CC-77 ①** 审批决断结局单源判别联合 6 件:`approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` + 两张 cause 词表 `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(域 3);**CC-96** 记忆 spec 读面 10 件:`readAgentMemorySpec` / `unknownMemorySpecKeys` / `unknownMemorySpecKeysNote` / `memoryConfigRefusalNoteOf` / `KNOWN_AGENT_MEMORY_SPEC_KEYS` / `PENDING_MEMORY_SPEC_KEYS` / `MAX_UNKNOWN_MEMORY_SPEC_KEYS` / `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH` + 判别形型(域 6 / 16)。CC-89 / CC-91 / CC-92 / CC-98 四票**零值导出增减**(新臂走 `ChromeEvent` 联合与内部臂表,`tasks_expand` 退役删的是联合成员不是导出名);1065 = 0.74.5 / 0.75.0 / 0.75.1 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1065 = 0.74.5 / 0.75.0 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1061 = 0.74.3 / 0.74.4 的值:相对 0.74.2 +9 —— CC-70 / CC-71 / CC-72 / CC-73 八件 + CC-80 `lastFlagValue`,见 §2b 域 3 / 4 / 10 / 15;1052 = 0.74.2 的值:相对 0.74.1 +6 —— CC-69 六件,见 §2b 域 9;1046 = 0.74.1 的值:相对 0.74.0 +1 —— `RETRACTED_CARD_DECISION_KIND`,见 §2b 域 3;1045 = 0.74.0 的值:相对 0.73.5 +1 —— `isStaleEngineAgentPanelEnd`,见 §2b 域 4;1044 = 0.73.5 的值:相对 0.73.4 +11 —— CC-58 规模告警十一件,名单见 §2b 域 12;1033 = 0.73.4 的值:相对 0.73.3 +1 —— `TOOL_INPUT_JOIN_MAX_CALLS`,见 §2b 域 1;1032 = 0.73.3 的值:相对 0.73.2 +6 —— CC-61 六件,名单见 §2b 域 9;1026 = 0.73.2 的值(导出名零增减);= 0.73.1 的值:相对 0.73.0 +7 —— CC-56 六件 / CC-57 一件,名单见 §2b 域 3 / 15;1019 = 0.73.0 的值(导出名零增减,BREAKING 在类型面);= 0.72.14 的值:相对 0.72.13 +8 —— CC-55 八件,名单见 §2b 域 3;1011 = 0.72.13 的值:相对 0.72.12 +18 —— CC-46 八件 / CC-54 六件 / CC-53 两件 / CC-50 缺席口两件,名单见 §2b 域 3 / 4 / 9 / 10;993 = 0.72.12 的值(测试钩 45):相对 0.72.11 +4 —— CC-50 `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText` / `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`;989 = 0.72.10 的值:相对 0.72.9 +4 —— CC-41 `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX` / `projectLeaderConflict` / `leaderConflictDetail`;985 = 0.72.9 的值:相对 0.72.8 +8 —— CC-30 `MCP_RECONNECT_OUTCOMES` / `MCP_RECONNECT_TRANSACTION_NOTICE` / `projectMcpReconnectResult` / `classifyMcpReconnectFailure` / `reconnectMcpServer` / `projectMcpReconnectCapability` / `mcpReconnectOutcomeDetail`、CC-39② `readAutoConsolidationArmed`;977 = 0.72.8 的值:相对 0.72.7 +6 —— CC-39③ `MEMORY_OFF` / `memoryOffDeclarationField` / `memoryOffDeclared`、CC-43 `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`;971 = 0.72.7 的值:相对 0.72.6 +2 —— CC-42 core 7.22.0 提货 `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`;969 = 0.72.6 的值:相对 0.72.5 +1 —— CC-40 `steerFollowIntent`;968 = 0.72.5 的值:相对 0.72.4 +6 —— CC-31 server 7.82.1 提货 `capabilities.webSearch.backend` 四态读面:`WEB_SEARCH_BACKEND_NONE` / `projectWebSearchBackendCapability` / `observedWebSearchBackend` / `noteEngineCapsForWebSearchBackend` / `forgetWebSearchBackendReading` / `webSearchBackendDoctorDetail`;962 = 0.72.3 的值:相对 0.72.2 +1 —— CC-39① `AGENT_MEMORY_WORDS`;0.72.2 相对 0.72.1 +1 —— CC-37 `noteOwnWorkflowRun`;0.72.1 相对 0.72.0 +4 —— CC-33 server 7.80.1 提货:`RESUME_CONTEXT_UNAVAILABLE` / `resumeContextUnavailableFromError` / `resumeContextUnavailableContent` / `skillBaseDirOf`;0.72.0 相对 0.71.4 −39 —— CC-32 退役批删 export-liveness 登记 retire 的 39 个零消费导出(23 常量 + 16 函数,名单见 §47);995 = 0.71.3 的值:相对 0.71.2 +9 —— CC-06 `readEffectiveReasoning` / `readEffectiveMemoryScopes` / `resumeReopenFromError` / `resumeReopenContent` / `routePairingVerdict` 五函数 + `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` 四常量;986 = 0.71.0 的值:相对 0.70.2 −`MAX_AGENT_SKILLS` −`DECIDE_WORKFLOW_HOST_NOT_PARKED` +`projectToolRosterDelta` +`mcpEngineLegPresence`;986 = 0.70.0 的值:相对 0.69.2 **一件 additive(`readSkillsListingTruncated`,§39)、零删除**;985 = 0.69.2 的值:相对 0.69.1 **三件 additive、零删除**(CC-13 `isSubFlowSegmentEnd` / `SEGMENT_END_IDENTITY_KEYS` / `droppedWhySentence`,§38);982 = 0.69.0 未发布版的值(原排 0.68.3,因 peer 地板抬升改 minor)= 相对 0.68.2 **十七件 additive、零删除**:`fetchMcpPanel`(CC-03 补件,§36e)+ `readWorkflowResumeAdmissionIncomplete`(CC-05 core 7.18.0 #755)+ `installCoreValuePorts`/`hasCoreValuePorts`/`hasCoreValuePort`/`coreValuePortMisses`/`CORE_VALUE_PORT_NAMES` + 十读口(CC-07 core 值级端口,§36d);0.68.2 相对 0.68.1 十三件 additive:`SEMA_SEGMENT_ID_KEY`(CC-01 段身份键,§35f)/ `projectMcpPanel`+`mcpPanelLastLegDetail`+`projectMcpSection`(CC-03 `/mcp` 面板读视图,§35g)/ `resolveTextSegmentAuthority`/`createTextSegmentLedger`(L-318 `text_end` 权威段替换的判决单源 + print 形段账,详见 §35b/§35c)/ `memoryCaptureDeclarationField`/`MEMORY_CAPTURE_OFF`(L-316 会话级隐私声明的字面唯一铸点,§35d)/ `engineUrl`/`probeHealth`(L-61 件④ SDK 纯工具面原样转口,§35d)/ `AgentClient`/`isApprovalRequestFrameV1`/`isApprovalRevokeFrameV1`(L-61 存量清零:SDK **wire 面**原样转口,§35e)。`0.68.1`/`0.68.0` 是 **952**,那批是相对 0.67.2 **二十件 additive、🔴 两件删除(BREAKING)**:additive = `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`/`RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`RUN_TERMINAL_STATUSES`(L-247 终态词两表分源,详见 §33b)/ `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(L-244 子代下界位自有名,§33g)/ `ASK_UNRESOLVABLE_CAUSES`/`readAskUnresolvable`/`DURABLE_MANDATE_SOURCES`/`readDurableGateUnavailable`(core 7.17.0 #709 ①② 两只通告事实窄读器,§33c)/ `WORKFLOW_PARK_TRUTH_UNREADABLE`/`WORKFLOW_PARK_NOT_PENDING`/`WORKFLOW_PARK_BINDING_BROKEN`/`WORKFLOW_PARK_REQUIRES_RUN_STORE`(四个单码常量 🔧 0.72.0 退役)/`WORKFLOW_PARK_REFUSAL_CODES`/`isWorkflowParkRefusalCode`/`readWorkflowParks`(core 7.17.0 #652 park 真相四码 + parks 三键读器,§33d)/ `ENGINE_STOP_REASONS`/`engineStopReasonToCc`(L-246 A13 停止原词映射下沉,§33g)/ `readCancelRequested`(L-230 读面,§33f);🔴 **删除两件** `TERMINAL_NOT_SUCCESS_STATUSES`/`TERMINAL_STATUSES`(随 L-247 两表分源更名成 `RUN_TERMINAL_*`,clean-cut **不留别名** —— 留一个别名等于让端可以继续按合起来的那张表读,分源就白做了,详见 §33b)。`0.67.0` 是 **934**,那批是相对 0.66.0 **七件 additive、🔴 两件删除**:additive = `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`(core 7.14.0 退役 `classifierUnavailable` 之后的**拒绝面**继任读器与措辞,详见 §32b)/ `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`(core 7.14.0 #688 C3 的规则店机制位三件,详见 §32d);🔴 **删除两件** `classifierUnavailableOf`/`classifierUnavailableDetail`(随 core 7.14.0 的 Retired keys 表整族退役,clean-cut 不留别名,详见 §32b;同批删的还有**型** `ClassifierUnavailableView`、卡位与帧位 `classifierUnavailable`、以及一条恒真的型面钉 `_askOriginWordsPin`)。`0.66.0` 是 **929**,那批是一件 additive、零删除:`readRunCostFacts`(终局成本事实的唯一读器:`costBreakdown` / `nested` 窄读 + 对账三段与两个判别位,终帧超集键与 chrome 对账臂共用它;详见 §31c);已发的 **0.65.x 十一件 additive、两件删除**:additive = `DECIDE_WORKFLOW_HOST_UNKNOWN`/`DECIDE_WORKFLOW_HOST_NOT_PARKED`/`DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED`/`DECIDE_WORKFLOW_LANE_CODES`/`readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070 `/decide` 回执读面与三码人话,详见 §30h)/ `TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇单铸谓词,详见 §30j);🔴 **删除两件** `AUTO_MODE_BREAKER_CAUSES`/`classifierBreakerOf`(熔断族随 core 7.12.0 的 Removed(BREAKING) 整只退役,clean-cut 不留别名,详见 §30k②;同批删的还有**型** `ClassifierBreakerView` 与 `ClassifierStatusView.breaker` 一位)。`0.64.2` 是 **919**,那批是一件 additive、零删除:`readDenialLimitFallback`(限额回落卡的窄读器上公面,壳侧同判据副本退役,详见 §29③);`0.64.0` 是 **918**,那批是件①+件② 十三件 additive、零删除:`CLASSIFIER_STATUS_STATES`/`classifierBreakerOf`/`classifierStatusOf`/`classifierStatusDetail`(分类器状态面,详见 §28②)/ `THINKING_FORMATS`/`THINKING_FORMAT_WIRE_TWINS`/`THINKING_DISABLE_PROBE_ORDER`/`MODEL_PROBE_VERDICTS`/`PROBE_PROMPT`/`PROBE_MAX_TOKENS`(两个探针常量 🔧 0.72.0 退役)/`probeRequestBody`/`probeModelCapability`/`applyProbeToEntry`(模型思考能力探测,详见 §28①);`0.63.0` 是 **905**,那批是八件 additive、零删除:`projectServerGateKnobs`/`postureKnobSourceOf`/`postureSourceIsOperatorPinned`/`postureKnobDetail`/`POSTURE_SOURCE_WORDS`(S-178 三根 posture 旋钮读数,详见 §27b)/ `PERSISTED_RULE_BEHAVIORS`/`PERSISTED_RULE_BEHAVIOR_UNKNOWN`/`persistedRuleBehaviorOf`/`persistedRuleBehaviorLabel`/`revokeTargetFromPersistedRule`(三态规则身份,§27c)/ `engineIdentityOf`/`engineIdentityVerdict`/`engineIdentityChanged`/`engineIdentityChangedBy`/`ENGINE_IDENTITY_ANCHORS`(S-179 代际锚,§27d)/ `GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail`(门词汇 +2,§27e)/ `PERMISSION_RULE_ISSUE_CODES`/`RETIRED_PERMISSION_RULE_ISSUE_CODES`/`permissionRuleIssueDetail`(规则 lint 码表,§27f)/ `projectToolRoster`/`toolRosterNames`/`toolShimFromRoster`/`applyToolRosterDelta`(L-161 工具名册,§27g)/ `ENGINE_NOTICE_CODES`/`ENGINE_NOTICE_AUDIENCE`/`noticeAudienceOf`/`engineNoticeInCatalog`/`MCP_INJECTION_DROP_REASONS`/`readMcpInjectionDrop`(L-167 通告码册,§27h)/ `AUTO_MODE_UNAVAILABLE_CAUSES`/`AUTO_MODE_BREAKER_CAUSES`/`classifierUnavailableOf`/`classifierUnavailableDetail`(件⑧ 分类器不可用事实,§27h2);`0.62.0` 是 **869**,那批是五件 additive、**零删除**:`capForDisplay`(呈前消毒 + 封长的共用铸点,详见 §26⑦)/ `SEAT_SEND_MESSAGE_KEY_ORIGINS`(座位载荷逐键出身表,详见 §26③)/ `configureSubagentContentStore`+`subagentContentStoreConfig`+`SUBAGENT_CONTENT_STORE_DEFAULTS`(子代内容账本字节预算,测试钩 `__resetSubagentContentStoreConfigForTests` +1,详见 §26②);`0.61.0` 是 **864**,那批是三件 additive、**零删除**:`projectReadFacePosture`/`readFacePostureDetail`/`readFaceDisagreement`(S-167 READ 容纳面 operator 读器,详见 §25);`0.60.0` 是 **861**,那批是二十五件 additive、**零删除**:`readRunTerminal`/`runTerminalCode`/`runTerminalGateKind`/`runTerminalGateToolName`/`isReviewPark`/`REVIEW_PARK_GATE_KINDS` 六件终局因由读器 + `gateOutcomeOf`/`isDeniedGate`/`gateDeniedBy`/`gateApprover`/`isApprovalWindowExpiredGate`/`isDenialLimitAutoDeniedGate`/`isParkSlaExpiredGate`/`isHumanSettledGate` 八件门记录读器 + `projectWriteProtectionCapability`/`noteEngineCapsForWriteProtection`/`observedWriteProtection`/`forgetWriteProtectionReading`/`writeProtectionDoctorDetail`/`projectWriteProtectionPosture`/`writeProtectionPostureDetail` 七件写保护读面(测试钩 `__resetWriteProtectionReadingsForTests` +1)+ `readWireErrorCode` + 真机边界①的两件 `isGateParkedToolEnd`/`GATE_PARKED_ERROR_CODE` + 异源复审逼出的 `engineCapsGeneration`;`0.59.0` 是 **836**,那批是八件 additive:`RULE_OFFERS_ABSENCE_REASONS`/`DENIAL_LIMIT_KINDS` 两张闭词表再导出 + `engineCapValue` 能力位四态通用读口 + `projectSqlEngineCapability`/`observedSqlEngine`/`noteEngineCapsForSqlEngine`/`forgetSqlEngineReading`/`sqlEngineDoctorDetail` 五件 SQL 姿态读面(测试钩 `__resetSqlEngineReadingsForTests` +1);`0.58.0` 是 **828**,那批是三件 additive:`RULE_OFFER_MATCHES`/`RULE_OFFER_BATCH_MEMBER_KINDS`/`RULE_OFFER_UNCOVERED_REASONS` 三张闭词表再导出 + `RESUME_REFUSAL_CODES`/`RESUME_PLACEMENT_MISMATCH`/`resumeRefusalFromError`/`resumeRefusalContent` 四件文案铸点;`0.57.0` 是 **821**;`0.56.0`/`0.55.0` 是 **815**;已发 `0.54.0`(design/385 十件 additive 含 `AUTHORITY_ENVELOPE_TAGS` 🔧 0.72.0 退役);`0.52.0` 是 **805**(L-69⑨ 两件);`0.51.0` 是 **803**;`0.50.0` 是 **800**(S-81 五件);`0.49.0` 是 **795**;`0.48.0` 是 **794**;npm `0.47.0` 是 **790**,`0.46.0` 是 **787**,`0.44.0` 是 **783**,`0.43.1`/`0.43.0` 是 **776**,`0.42.0` 是 **771**,`0.41.0` 是 **767**,`0.39.0` 是 **766**,`0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
27
27
  | 常驻门 | 以 `scripts/gates-manifest.json` 的 `suites` 长度为准(**本档不抄这个数**) | `scripts/gates-manifest.json`;`npm test` 的名单等值门与它逐名对账 |
28
28
  | 沿革档 | 0.29.0 起建 `CHANGELOG.md`;更早批次记账在 `src/index.ts` 文件头 + `docs/REFACTOR-LEDGER.md` | — |
29
29
 
@@ -42,7 +42,7 @@
42
42
  additive 导出成立(`engineCapState` + `EngineCapState`、`resolveEntryVision` /
43
43
  `computeDeleteBlockers` / `computeDeleteWarnings`、`CONFIG_DELEGATION_ENTRY_CAPS` /
44
44
  `DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP` / `DELEGATION_CAP_CODES` /
45
- `isDelegationCapCode`、`wireCycleSeq`)。旧版对表以 `CHANGELOG.md` 对应版本段为准。
45
+ `isDelegationCapCode`、`wireCycleSeq` 🔧 0.84.0 退出公面)。旧版对表以 `CHANGELOG.md` 对应版本段为准。
46
46
 
47
47
  🔴 **本表里仍然手抄的数字都有门看着**(#252,2026-08-14;2026-09-20 改口 —— 此处**只点名被看着的量,不再抄当日读数**:
48
48
  抄读数的那一版每次公面变动都要手改五处数字,漏一处就自己变成失真源,而这句话正是用来保证本表不失真的):
@@ -125,7 +125,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
125
125
 
126
126
  > 📦 **随包 / 不随包**:npm 包只带 `dist` / `README` / `CHANGELOG` / 本档 / `LICENSE`。本档各处提到的 `docs/type-superset.json`、`scripts/*.json`、`scripts/run-*-test.mjs` 都是**仓内登记物与门,不随包发出** —— 装包的消费者找不到它们是预期;`_sema_` 超集键的**随包契约**就是本档各 §NNz 逐键处置表(键名 / 值域 / 缺席语义逐条在表里)。
127
127
  >
128
- > 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**1278** 项;该基线只覆盖**根**入口,子路径入口 `./registry` 的名单在 §86 与 `scripts/run-sdk-registry-transit-test.mjs` A / C 段)。
128
+ > 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**1260** 项;该基线只覆盖**根**入口,子路径入口 `./registry` 的名单在 §86 与 `scripts/run-sdk-registry-transit-test.mjs` A / C 段)。
129
129
  > 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
130
130
  > **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
131
131
  > 两个入口:根 `import { … } from '@sema-agent/client-core'`(会话运行时;`exports` 的 `.`)+ `import { … } from '@sema-agent/client-core/registry'`(云控制面原样转口,0.79.1 起;`exports` 的 `./registry`,§86);
@@ -149,22 +149,22 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
149
149
  `WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
150
150
  **4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
151
151
 
152
- 1278 项的内部构成(帮助端估读表大小;0.83.5 +1 函数(CC-204 字符面标记位置读口 `displayUntrustedMarks`);0.83.4 +4 函数(CC-205 `<system-reminder>` 剥离 / 解包两口;CC-203 座位过境口;CC-201 清「用户关卡」记号口);0.83.2 +15 函数 +4 常量(CC-193 姿态放行谓词 / CC-195 强制词闭集 + 成员判据 + 读口 + 措辞 / CC-194 缺席行判定 11 函数 + 3 常量);0.83.1 +10 函数 +6 常量(CC-112 展示层安全出口 `displayUntrusted` / CC-117 会话规则记录无损判定 + 措辞单源 + 五词成因闭集 / CC-174 插件 hook 每轮计划 + 查询口 + 事件判定口 + 四只措辞口 + 五张闭集);0.83.0 −3 函数(联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 🔧 0.83.0 退出公面)+1 函数(CC-175 `terminalReasonForResult`);0.82.7 +5 函数(CC-182 每请求联网搜索配置三态判决:段判决 / env 判决 / 两车道合成 / 措辞单源 / endpoint 显示形);0.82.5 +5 函数 +1 常量(CC-169 print 车道 init 帧工具面:流包装器 / 判定闸 / 名册信号分类口 / 判定口 / 留痕措辞单源 + 等待上界常量);0.82.2 +1 函数(CC-164 云控制面有效配置回体措辞单源 `cloudEffectiveNotices`);0.82.1 +15 函数(CC-154 续跑折叠码读口 + 措辞 / CC-163 文件历史捕获读口六口 / CC-151 模型身份可解析判据五口 / CC-161 自定义代理载荷作废重投口 / 决断失败码「门还在」判定;测试钩 +1);0.82.0 +17 函数 +1 常量(CC-146 `/rewind` 代码档与对话档可用性读口投影 + 三口读账 + 两只判据 + 三句措辞 / CC-150 额度投影三口 / CC-152 装配期无手两口 / CC-154 取码单源 + 折叠码常量 / CC-156 坏档行坐标读口 + 措辞);0.80.0 +1 常量 +10 函数(CC-133 结算词表镜像 `SETTLEMENT_KIND_WORDS` + 五函数 / CC-134 三函数 / CC-132 两函数);0.79.0 +8 常量 +21 函数 +1 类(CC-74 MCP 状态面两张词表 + 九函数 / CC-110 `approvalIsMandated` + `mandatedApprovalDetail` / CC-116 · 118 · 123 `APPROVER_POSTURE_BYPASS` + `REQUEST_LANES` + 三函数 / CC-125 拒因两面四常量 `HITL_POLICY_DENY_MESSAGE` `APPROVAL_DENY_SETTLED_BY_WORDS` `SEMA_DENIAL_KIND_KEY` `CC_TOOL_DENIAL_KINDS` + 四函数 / CC-128 会话 bundle 面转口 `pushSessionBundle` `pullSessionBundle` `importSessionBundle` + 错误类 `APIError`;测试钩 +1);0.78.1 +2 常量 +9 函数(CC-113 displayBody / CC-97 b 五动词 + 判官 + 覆盖面判词 / CC-121 readSubmitWiringManifest);0.77.0 +2 常量 +2 函数(CC-101)+ 5 常量 +12 函数(CC-105 / CC-103;测试钩 +1);0.76.1 +1 常量 +4 函数(CC-36)+ 13 函数(CC-102;测试钩 +2)+ 1 常量 +20 函数(CC-97a;测试钩 +2)+ 2 函数(身份快照助手上公面);0.76.0 +8 常量 +8 函数(CC-77 ① 2+4 / CC-96 6+4);0.74.5 +2 常量 +2 函数(CC-87 / CC-88);0.74.3 +2 常量 +7 函数(CC-70 / CC-71 / CC-72 / CC-73 / CC-80;测试钩 +1);0.74.2 +6 函数(CC-69;测试钩 +1);0.74.1 +1 常量(CC-67);0.74.0 +1 函数(CC-66);0.73.5 +8 常量 +3 函数(CC-58);0.73.4 +1 常量(CC-34);0.73.3 +6 函数(CC-61;测试钩 +1);0.73.1 +2 常量 +5 函数(CC-56 / CC-57;测试钩 +1);0.72.14 +1 常量 +7 函数(CC-55);0.72.13 +4 常量 +14 函数(CC-46 / CC-54 / CC-53 / CC-50 缺席口);0.72.12 +2 常量 +2 函数(CC-50);0.72.10 +2 常量 +2 函数(CC-41);0.72.9 +2 常量 +6 函数(CC-30 / CC-39②);0.72.8 +2 常量 +4 函数(CC-39③ / CC-43);0.72.7 +1 常量 +1 函数(CC-42);0.72.6 +1 函数(CC-40);0.72.5 +1 常量 +5 函数(CC-31);0.72.3 +1 常量(CC-39①);0.72.2 +1 函数(CC-37);0.72.1 +1 常量 +3 函数(CC-33);0.72.0 −23 常量 −16 函数(CC-32 退役批);0.71.3 +4 常量 +5 函数(CC-06);0.71.0 −2 常量 `MAX_AGENT_SKILLS` / `DECIDE_WORKFLOW_HOST_NOT_PARKED` +2 函数 `projectToolRosterDelta` / `mcpEngineLegPresence`;0.70.0 起 +1 函数;0.69.2 起 +3:常量 1 / 函数 2):**351** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
152
+ 1260 项的内部构成(帮助端估读表大小;0.84.0 +8 函数 −7 常量 −19 函数(CC-194 B 半登记读数五口 / CC-185 读目录授权结论通告读口 / CC-206 `hands` 段读口与措辞两口;CC-223 收回 0.71.3 预告的 26 个 `export *` 放大件,🔧 0.84.0 退出公面,逐名见 CHANGELOG 0.84.0);0.83.5 +1 函数(CC-204 字符面标记位置读口 `displayUntrustedMarks`);0.83.4 +4 函数(CC-205 `<system-reminder>` 剥离 / 解包两口;CC-203 座位过境口;CC-201 清「用户关卡」记号口);0.83.2 +15 函数 +4 常量(CC-193 姿态放行谓词 / CC-195 强制词闭集 + 成员判据 + 读口 + 措辞 / CC-194 缺席行判定 11 函数 + 3 常量);0.83.1 +10 函数 +6 常量(CC-112 展示层安全出口 `displayUntrusted` / CC-117 会话规则记录无损判定 + 措辞单源 + 五词成因闭集 / CC-174 插件 hook 每轮计划 + 查询口 + 事件判定口 + 四只措辞口 + 五张闭集);0.83.0 −3 函数(联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 🔧 0.83.0 退出公面)+1 函数(CC-175 `terminalReasonForResult`);0.82.7 +5 函数(CC-182 每请求联网搜索配置三态判决:段判决 / env 判决 / 两车道合成 / 措辞单源 / endpoint 显示形);0.82.5 +5 函数 +1 常量(CC-169 print 车道 init 帧工具面:流包装器 / 判定闸 / 名册信号分类口 / 判定口 / 留痕措辞单源 + 等待上界常量);0.82.2 +1 函数(CC-164 云控制面有效配置回体措辞单源 `cloudEffectiveNotices`);0.82.1 +15 函数(CC-154 续跑折叠码读口 + 措辞 / CC-163 文件历史捕获读口六口 / CC-151 模型身份可解析判据五口 / CC-161 自定义代理载荷作废重投口 / 决断失败码「门还在」判定;测试钩 +1);0.82.0 +17 函数 +1 常量(CC-146 `/rewind` 代码档与对话档可用性读口投影 + 三口读账 + 两只判据 + 三句措辞 / CC-150 额度投影三口 / CC-152 装配期无手两口 / CC-154 取码单源 + 折叠码常量 / CC-156 坏档行坐标读口 + 措辞);0.80.0 +1 常量 +10 函数(CC-133 结算词表镜像 `SETTLEMENT_KIND_WORDS` + 五函数 / CC-134 三函数 / CC-132 两函数);0.79.0 +8 常量 +21 函数 +1 类(CC-74 MCP 状态面两张词表 + 九函数 / CC-110 `approvalIsMandated` + `mandatedApprovalDetail` / CC-116 · 118 · 123 `APPROVER_POSTURE_BYPASS` + `REQUEST_LANES` + 三函数 / CC-125 拒因两面四常量 `HITL_POLICY_DENY_MESSAGE` `APPROVAL_DENY_SETTLED_BY_WORDS` `SEMA_DENIAL_KIND_KEY` `CC_TOOL_DENIAL_KINDS` + 四函数 / CC-128 会话 bundle 面转口 `pushSessionBundle` `pullSessionBundle` `importSessionBundle` + 错误类 `APIError`;测试钩 +1);0.78.1 +2 常量 +9 函数(CC-113 displayBody / CC-97 b 五动词 + 判官 + 覆盖面判词 / CC-121 readSubmitWiringManifest);0.77.0 +2 常量 +2 函数(CC-101)+ 5 常量 +12 函数(CC-105 / CC-103;测试钩 +1);0.76.1 +1 常量 +4 函数(CC-36)+ 13 函数(CC-102;测试钩 +2)+ 1 常量 +20 函数(CC-97a;测试钩 +2)+ 2 函数(身份快照助手上公面);0.76.0 +8 常量 +8 函数(CC-77 ① 2+4 / CC-96 6+4);0.74.5 +2 常量 +2 函数(CC-87 / CC-88);0.74.3 +2 常量 +7 函数(CC-70 / CC-71 / CC-72 / CC-73 / CC-80;测试钩 +1);0.74.2 +6 函数(CC-69;测试钩 +1);0.74.1 +1 常量(CC-67);0.74.0 +1 函数(CC-66);0.73.5 +8 常量 +3 函数(CC-58);0.73.4 +1 常量(CC-34);0.73.3 +6 函数(CC-61;测试钩 +1);0.73.1 +2 常量 +5 函数(CC-56 / CC-57;测试钩 +1);0.72.14 +1 常量 +7 函数(CC-55);0.72.13 +4 常量 +14 函数(CC-46 / CC-54 / CC-53 / CC-50 缺席口);0.72.12 +2 常量 +2 函数(CC-50);0.72.10 +2 常量 +2 函数(CC-41);0.72.9 +2 常量 +6 函数(CC-30 / CC-39②);0.72.8 +2 常量 +4 函数(CC-39③ / CC-43);0.72.7 +1 常量 +1 函数(CC-42);0.72.6 +1 函数(CC-40);0.72.5 +1 常量 +5 函数(CC-31);0.72.3 +1 常量(CC-39①);0.72.2 +1 函数(CC-37);0.72.1 +1 常量 +3 函数(CC-33);0.72.0 −23 常量 −16 函数(CC-32 退役批);0.71.3 +4 常量 +5 函数(CC-06);0.71.0 −2 常量 `MAX_AGENT_SKILLS` / `DECIDE_WORKFLOW_HOST_NOT_PARKED` +2 函数 `projectToolRosterDelta` / `mcpEngineLegPresence`;0.70.0 起 +1 函数;0.69.2 起 +3:常量 1 / 函数 2):**344** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
153
153
  (矩阵、键集、env 名、锚串)而非可调用物;**7** 项是 PascalCase 运行期值
154
154
  (`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError` / `APIError`);
155
- **37** 项是 `*For(sessionKey, …)` 的 per-session 变体(0.72.0 −4:`clearArmedGateFor` / `onGateArmedFor` / `registerArmedGateFromQuestionIdFor` / `notePlanReviewAnsweredIfDecisiveFor` 退出公面)(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
155
+ **34** 项是 `*For(sessionKey, …)` 的 per-session 变体(0.84.0 −3:`notePlanReviewAnsweredFor` / `planReviewArmedKeyFor` / `waitForGateArmedFor` 🔧 0.84.0 退出公面;0.72.0 −4:`clearArmedGateFor` / `onGateArmedFor` / `registerArmedGateFromQuestionIdFor` / `notePlanReviewAnsweredIfDecisiveFor` 退出公面)(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
156
156
 
157
- ### 2b. 域图(16 域,逐域计数之和 = 1278)
157
+ ### 2b. 域图(16 域,逐域计数之和 = 1260)
158
158
 
159
159
  | # | 域 | 名数 | 承重导出 | 用途 | 实现锚 |
160
160
  |---|---|---|---|---|---|
161
- | 1 | **适配内核(下行主链)** | 67 | `terminalReasonForResult`(0.83.0 CC-175:结果帧 CC 键 `terminal_reason` 的读口,与铸点同一只判据,给端自拼的结果帧与旧转录;§100)· `handsMountedFromManifest` / `handsMountedDetail`(0.82.0 CC-152:装配期「这一 run 有没有手」三态判据 + 措辞单源,读 `wiring_manifest` 名册的 `mountedBy`;§92)· `readSubmitWiringManifest`(0.78.1 CC-121:非流式提交 200 体 `TaskResult.wiringManifest` 的三态读口,view 与流式腿 chrome 臂同一张;§83)· `TOOL_INPUT_JOIN_MAX_CALLS`(0.73.4 CC-34:终帧拒绝清单第三键的本流快照上限;§66)· `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText`(0.72.12 CC-50:第三条中性终局行「结局不知道」,读结果帧 `_sema_outcome`;§59)· `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`(0.72.8 CC-43:runStream 第二条中性臂 —— core malformed tool-call 一族的行身份;§55)· `readEffectiveReasoning` · `readEffectiveMemoryScopes`(0.71.3 CC-06:终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` 的窄读器,§45)· `isSubFlowSegmentEnd` · `SEGMENT_END_IDENTITY_KEYS` · `droppedWhySentence`(0.69.2 CC-13:三件出公面,§38)· `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `SEMA_SEGMENT_ID_KEY`(0.68.2 CC-01:committed assistant 文本行顶层段身份键的唯一字面量出处,壳只读)· `projectMcpSection`(0.68.2 CC-03:`wiring_manifest.mcp[]` 与 `/mcp` 面板 `lastLegMcp.mcp[]` 共用的同一只条目读器)· `readRunCostFacts`(0.66.0:终局成本事实的**唯一读器** —— `TaskStats.costBreakdown` / `nested` 逐键窄读 + 对账三段(own/nested/compaction)与两个「没定价」判别位;终帧的两个超集键与 chrome 臂 `run_cost_reconciled` **共用它**,两面不会各算各的,详见 §31c)· `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`(0.68.0 / L-247:**core 终局因由**闭集,四词 `completed|failed|blocked|paused`)· `RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`RUN_TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇的**单铸谓词**,0.68.0 随 L-247 **两表分源**更名 —— `killed` 属 server run 行状态面、`paused` 属 core 因由面,合成一张会让两边加词时都读不出该改哪儿;`blocked` 是 agent 自报终态,`suspended`/`needs_review` 刻意不在表里,详见 §33b / §30j)· `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(0.68.0 / L-244:子代用量下界位的**自有名**与唯一判据,与终帧 `_sema_usage_lower_bound` 分名,详见 §33g) · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
161
+ | 1 | **适配内核(下行主链)** | 69 | `handsSeamReadingOf` / `handsSeamDetail`(0.84.0 CC-206:接线回执 `hands` 段三态读口 + 措辞单源,「没有自带工具」那一句与 `handsMountedDetail` 同句首句尾,两者不是同一个事实;§107)· `terminalReasonForResult`(0.83.0 CC-175:结果帧 CC 键 `terminal_reason` 的读口,与铸点同一只判据,给端自拼的结果帧与旧转录;§100)· `handsMountedFromManifest` / `handsMountedDetail`(0.82.0 CC-152:装配期「这一 run 有没有手」三态判据 + 措辞单源,读 `wiring_manifest` 名册的 `mountedBy`;§92)· `readSubmitWiringManifest`(0.78.1 CC-121:非流式提交 200 体 `TaskResult.wiringManifest` 的三态读口,view 与流式腿 chrome 臂同一张;§83)· `TOOL_INPUT_JOIN_MAX_CALLS`(0.73.4 CC-34:终帧拒绝清单第三键的本流快照上限;§66)· `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText`(0.72.12 CC-50:第三条中性终局行「结局不知道」,读结果帧 `_sema_outcome`;§59)· `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`(0.72.8 CC-43:runStream 第二条中性臂 —— core malformed tool-call 一族的行身份;§55)· `readEffectiveReasoning` · `readEffectiveMemoryScopes`(0.71.3 CC-06:终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` 的窄读器,§45)· `isSubFlowSegmentEnd` · `SEGMENT_END_IDENTITY_KEYS` · `droppedWhySentence`(0.69.2 CC-13:三件出公面,§38)· `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `SEMA_SEGMENT_ID_KEY`(0.68.2 CC-01:committed assistant 文本行顶层段身份键的唯一字面量出处,壳只读)· `projectMcpSection`(0.68.2 CC-03:`wiring_manifest.mcp[]` 与 `/mcp` 面板 `lastLegMcp.mcp[]` 共用的同一只条目读器)· `readRunCostFacts`(0.66.0:终局成本事实的**唯一读器** —— `TaskStats.costBreakdown` / `nested` 逐键窄读 + 对账三段(own/nested/compaction)与两个「没定价」判别位;终帧的两个超集键与 chrome 臂 `run_cost_reconciled` **共用它**,两面不会各算各的,详见 §31c)· `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`(0.68.0 / L-247:**core 终局因由**闭集,四词 `completed|failed|blocked|paused`)· `RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`RUN_TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇的**单铸谓词**,0.68.0 随 L-247 **两表分源**更名 —— `killed` 属 server run 行状态面、`paused` 属 core 因由面,合成一张会让两边加词时都读不出该改哪儿;`blocked` 是 agent 自报终态,`suspended`/`needs_review` 刻意不在表里,详见 §33b / §30j)· `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(0.68.0 / L-244:子代用量下界位的**自有名**与唯一判据,与终帧 `_sema_usage_lower_bound` 分名,详见 §33g) · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
162
162
  | 2 | **seam 公共契约** | 4(其余为 type-only) | `CHROME_ARMS` · `deriveTranscriptId` · `snapshotSegmentIdentity` / `snapshotIsSubFlow`(0.76.1:身份四键一次性快照助手,投影口与 adapt 侧全部臂的唯一身份读点;§77)| 公共词汇 + **id 确定性不变量**(同一条流重放 ⇒ 同一串 id)。`CHROME_ARMS` = 端「我要消费哪些 chrome 臂」的对照清单 | `src/seam.ts` |
163
- | 3 | **HITL 决断卡链**(§4/§5 主战场) | 219 | `toolPermissionRequestAskBits` / `clearPlanReviewUserDismissals`(0.83.4 CC-203 / CC-201:卡请求 → 座位请求的四位过境口,与卡请求同一把窄读;会话换代时清「用户关卡」记号;§104)· `askSurvivesPosture` / `readApprovalMandate`(0.83.2 CC-193 / CC-195:常驻姿态下「这一张卡能不能由姿态答掉」三态谓词;卡上强制词读口,缺席答缺席;§102)· `sessionPolicyDeliverable` / `sessionPolicyWithheldNotice` / `SESSION_POLICY_WITHHELD_WHY`(0.83.1 CC-117:一批规则串能不能无损写进会话规则记录 —— 整批可送才送、五词成因闭集、每词一句措辞单源;宿主侧那一份的继任;§101)· `isPolicyRefusedGate` / `denyAttributionRefusalFromError` / `denyAttributionRefusalContent` / `removalConsequenceLineForBehavior` / `ruleRemovalBehaviorOf`(0.80.0 CC-133 · CC-132:策略拒谓词 + 归因键三码读口与人话 + 删除规则后果句铸点与闭集读口;§87)· `HITL_POLICY_DENY_MESSAGE` / `APPROVAL_DENY_SETTLED_BY_WORDS` / `readApprovalDenySettledBy` / `SEMA_DENIAL_KIND_KEY`(0.79.0 CC-125:deny 收口帧按 `settledBy` 分两串的冻结句、决断对象归因位的两词可达子集与只认自有数据属性的读器、分类词信封键名;§85)· `approvalIsMandated`(0.79.0 CC-110:审批卡「清不掉」判据口,帧位 ∨ 寄存行缺席词两条腿一个真源;§85)· `readSessionPolicy` / `tightenSessionPolicy` / `tightenedSessionRules` / `classifySessionPolicyFailure` / `sessionPolicyTightenNotice` / `SESSION_POLICY_RULE_FIELDS` / `SESSION_POLICY_TIGHTEN_UNKNOWN_WHY`(0.77.0 CC-105:会话策略窄读 + 收紧编排五臂判别联合)· `writePersistedRule` / `PERSISTED_RULE_WRITE_BEHAVIORS` / `PERSISTED_RULE_WRITE_REFUSAL_CAUSES` / `PERSISTED_RULE_WRITE_UNKNOWN_REASONS`(0.77.0 CC-103:持久规则单步写面,词表派生不手抄;§79)· `persistedRulesWriteAvailable`(0.76.1 CC-102:单步写入口便利口,只派生自写键自己的四态,不与撤销面那只合取;§77)· `approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` / `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(CC-77 ①:「一次审批决断最后怎么了」的单源判别联合 `decided` / `not_sent` / `unsettled`,两条腿的结局对象一次判别;既有结局型面一字不动)· `approvalOutcomeNoteOf` / `APPROVAL_NOTE_RETRACTED_DETAIL` / `APPROVAL_NOTE_EDIT_REFUSED_DETAIL`(0.74.5 CC-88:审批结局便签单源;§73)· `decideReceiptReopen` / `suspendedReopenOf`(0.74.3 CC-73:reopen 族第二臂;§71)· `RETRACTED_CARD_DECISION_KIND`(0.74.1 CC-67:卡口无决断收口;§69)· `planReviewOutcomeTail`(0.73.1 CC-57:outcome 尾句六态单铸点;投递口闩;§63)· `readLivePendingRows` / `suspendedSubagentAsks` / `countApprovalsAwaitingDecision` / `createSuspendedAskTracker` / `livePendingRowToApprovalFrame` / `surfaceSuspendedAskAndRespond` / `surfaceEditRefusedOnBlindAsk` + `EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT`(0.72.14 CC-55:悬挂的流内 ask 读面 / 视图 / 去重账 / 决断口;§61)· `planReviewCardOptions` / `planReviewChoiceFromAnswer` / `versionSupportsPlanReviewModeAfter` / `isPlanReviewModeAfter` + `PLAN_REVIEW_APPROVE_AUTO_LABEL` / `PLAN_REVIEW_APPROVE_MANUAL_LABEL` / `PLAN_REVIEW_MODE_AFTER_WORDS` / `PLAN_REVIEW_MODE_AFTER_MIN_ENGINE`(0.72.13 CC-46:plan_review 批准后模式 `permissionModeAfter` 发口与三选卡双闸;§60)· `makeHitlCanUseTool` · `HitlBridge` · `findPendingForTask` · `readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070:`/decide` 200 = **投递受理**不是「门已解决」;`executionOutcome` 缺席 = 未知,详见 §30h) · `HitlSafetyError` · `bridgeAskUserQuestionGates` · `surfaceToolApprovalFrameAndRespond` / `surfaceFsApprovalAndDecide` · `readToolApprovalRespondAck` · `installApprovalCardPort(For)` · `installHitlHostSurface(For)` · `armPlanReviewApproval` · `reopenPlanReviewCard` · `decidePlanReview` · `startApprovalsFeed` · `pendingRowIsOwnedByThisSession` · `approvalCallKey`/`liveFrameCallKey`/`planReviewQuestionId` · `registerArmedGateFor`/`wasGateArmedFor` · `waitForGateArmed(For)`/`onGateArmed`/`gateArmedWaitMs`(#244 F1 呈现回执事件源) · `planReviewArmedKey(For)`/`notePlanReviewAnswered(For)`/`notePlanReviewAnsweredIfDecisive`(A-024.4 plan 呈现分代) · `toolEndOutputText` · `isAskTool` · `waitForParkRowBirth` · `classifyAskParkRows` / `askParkRowArm` / `classifyAskParkChainFailure` · `readDecisionNoteAudit` / `decisionNoteAuditLine` · `resumeRunningOptions` / `resumeChoiceFromLabels` · `persistedRulesLaneAvailable`/`persistedRulesGovernanceAvailable` · `classifyRulesFailure` · `listAllPersistedRules` · `classifySkippedReason` · `readRulePersistOutcome`(#244 F2:persist-ack 读口与 `readToolApprovalRespondAck` 合成一处) · `parseLocalAllowRule`(durable 腿本地落规则窄化骨架,谓词经 `LocalAllowRuleDeps` 注入) · `readToolApprovalRespondRefusal`(#225 件5,0.42.0:respond 抛错的结构化原文读口 —— 三位各自防御读、各自缺席不铸、**三位皆缺席时整只返 `undefined`**;原样交还零加工,UNTRUSTED-for-display)· `installEditedRuleTextPrechecker` / `hasEditedRuleTextPrechecker` / `precheckEditedRuleText`([5076] 转出口,0.42.0:core 5.57.0 `precheckEditedRuleText` 的**端口注入形** —— 类型面 + 注入口 + 诚实缺席读口。🔴 **不是** value 级 re-export,理由见 §7 缺口 **P-34**;未装 ⇒ 返 `undefined`,绝不编一个 `{ok:true}`)· `surfaceRuleArmNotSent` / `RULE_NOT_SENT_WARN_TEXT` + `surfaceRuleArmRejected` / `RULE_NOT_SENT_REJECTED_WARN_TEXT`(#334,0.43.0:人在卡上按下的「不再询问」被整条丢弃时的诚实告知——**两条刻意分开**:前者=**引擎能力位未确认**(换台引擎/等探测就好),后者=**这次选择没过包内表核/互斥核**(表外文本/坏下标/两臂同场,换引擎也不会变) —— 编辑臂 `respondFreeFormRules` 与批臂 `respondBatchRuleOffers` 两条同形存量共用一条,与 `surfaceRememberNotApplied` 同族纪律:决断照送、只是规则没存,静默丢掉用户明确意图 = 让人以为功能坏了)· `projectCrashConverged`(L-38,0.49.0:`/v1/approvals` additive 键 `crashConverged` 的分桶投影 —— 崩溃收敛的孤儿审批读面,**缺席 ≠ 空数组**、分桶恰一个合取、坏行丢弃并计数,详见 §12;同批把 `ApprovalsResourceLike.list()` 的返回位 additive 放宽成 `ApprovalsListEnvelope`,老形 `{pending}` 仍可赋值)· `readRuleOffers` / `readRuleOfferSupply`(L-103/[C228],0.57.0 additive 导出:「不再询问」候选两代 wire 键的窄读器**公面化** —— 此前只经卡端口出包,不走卡端口架构的宿主只能自己重铸一把,而它承载的是兑付安全判据(原始下标不前移/逐条丢坏/闭集 kind/两代取舍序),详见 §20)· `RULE_OFFERS_ABSENCE_REASONS` / `DENIAL_LIMIT_KINDS`(0.59.0 / sdk 8.3.0 提货:`ruleOffersAbsence` 三词与 `denialLimitFallback.limit` 二词的**运行期**闭词表再导出 —— 与 0.58.0 那三张同一条纪律:端拿它做判定别再手抄字面量。⚠️ **本包自己不拿这两张表做窄读判定**(两处都按开集透传,词表属主是 core、server 已按闭集拒过),再导出只是给端的 `switch` 一份可数的表,端仍必须带 `default` 臂,详见 §23a)· `DecideTransportRetryExhaustedError`(Inkglow-1085 P0a:decide 出站瞬断重试耗尽的 typed 判别 —— HitlBridge 内建单次退避重试,耗尽走重呈臂不判死 turn;端一般只消费行为,不需要 instanceof) · `gateOutcomeOf` / `isDeniedGate` / `gateDeniedBy` / `gateApprover` / `isApprovalWindowExpiredGate` / `isDenialLimitAutoDeniedGate` / `isParkSlaExpiredGate` / `isHumanSettledGate`(0.60.0 / engine ≥7.64.0:`tool_end.gate` 整条门记录的窄读器 + 判定谓词 —— 取代退役的四个正交词 `settledBy`/`resolution`/`autoDenied`/`approver`。🔴 **判定归包**:「是不是审批窗自己走完的拒绝」旧形上是端各自拼的两键合取,而三条窗词现在分得开、合并读回去等于把刚修好的判别力扔掉;⚠️ 公面型一律带 `View` 后缀 —— 本文件的 `GateOutcome`(决断腿结局)与 sdk 的 `GateOutcome`(引擎门记录)**同名不同义**,详见 §24c)· `isGateParkedToolEnd`(「这次调用没在这里结算」的**第二形**谓词:gate 缺席 + `errorCode:"gate.parked"`;端判这件事必须与 `isApprovalWindowExpiredGate` **两形合读**) · `readWireErrorCode`(B-037 候包件②:decide/取件失败上引擎 wire 机器码的单源读口,结构视图读不 `instanceof`;与本包铸的 `code` 是两个命名空间,详见 §24g)| suspended→decide→resume 环。🔴 **D-1 两元组 verbatim 回显**是字节级断言的安全不变量,端**不许重实现它的任何一段**。🔴 键空间边界(web [C1] d3 拦截):`gateIdentity` 四常量两函数只覆盖 HITL questionId/callKey 空间;seat 的 `TOOL_PERMISSION_REQUEST_ID_DOMAINS`(`plan:` 等)是另一键空间,**两者绝不合并**(合并=座位校验器静默拒全部 plan-review 卡) | `src/hitl/hitlBridge.ts`、`toolApprovalWire.ts`、`askGateWire.ts`、`planReviewWire.ts`、`hitlHostSurface.ts`、`gateIdentity.ts`、`armedGateRegistry.ts`、`parkOwnership.ts`、`parkResolver.ts`、`approvalsFeed.ts`、`frameRouter.ts`(**只挑名导出** `toolEndOutputText`/`ENGINE_ABORT_TOOL_RESULT`/`isAskTool`/`HITL_REJECT_MESSAGE`/`HITL_INTERRUPT_MESSAGE_FOR_TOOL_USE`)、`parkRowBirthWait.ts`、`approvalDecisionNoteAudit.ts`、`askParkRowRouting.ts`、`resumeRunningCard.ts`(#265 上收的判定层)、`persistedRulesWire.ts`、`localAllowRule.ts`(#244 F2 规则侧)、`crashConverged.ts`(L-38 崩溃收敛读面)、`sessionPolicyDeliverable.ts`(0.83.1 CC-117 会话规则无损判定)、`askSurvivesPosture.ts`(0.83.2 CC-193 姿态放行谓词)、`src/gateOutcome.ts` |
164
- | 4 | **子代 wire + 面板侧信道台账** | 107 | `isEngineAgentAbsentRow` / `engineAgentAbsenceMarkOf` / `engineAgentAbsenceClockStopMs` / `engineAgentPanelEventClearsAbsence` / `engineAgentRowCountsAsRunning` / `tallyEngineAgentRows` / `engineAgentTurnSweepSettles` / `reapEngineAgentAbsentRows` / `engineAgentAbsenceTtlDueAtMs` / `engineAgentAbsenceDroppedLine` / `engineAgentTerminalAfterDropLine` + `ENGINE_AGENT_ABSENT_ROW_TEXT` / `ENGINE_AGENT_ABSENCE_TTL_MS` / `ENGINE_AGENT_REGISTRY_READINGS`(0.83.2 CC-194:后台子代缺席行的判定 / 计数 / sweep 豁免 / 回收 / 措辞单源,回收只在后台代理登记确认离场时;§102)· `isNewEngineAgentPanelCycle`(0.74.5 CC-87:新周期单源判据;§73)· `resolveEnginePanelTaskId` / `MAX_HELD_WIRE_TICK_BEATS` / `clearEnginePanelTaskResidentByWire`(0.74.3 CC-70:子代身份归一读口、缓一拍节拍上限、按 wire id 清常驻标(前代终态不清当代);§71)· `isStaleEngineAgentPanelEnd`(0.74.0 CC-66:面板 end 的周期身份判据;§68)· `subscribeEngineAgentPanelAbsence` / `publishEngineAgentPanelAbsence`(0.72.13:fleet 行缺席上报的**独立订阅口** —— 不上主通道,老消费者结构上收不到;§60 S-5)· `tailEngineSubagent` · `installSubagentActivitySink` · `installSubagentTailMetaSink`(#280 件2:tail meta 帧发布口,`contentFrames` 判别位载体)· `stopEngineTask` + `classifyTaskStopConflict` · `fetchEngineSubagentReport` · `steerEngineSubagent`(0.32.0 未发布 #280 件A:additive 第三参 `childTaskId` —— 端有行上下文时**应当**传,传了就走「台账优先 / 缺席即诚实缺席 + `noteBgOwnerAbsence` 留痕」的 Q3 口径,与 tail·taskOutput·subagentOutput 三腿同姿势、与孪生 resume 腿共用同一个 `resolveOwnerRunId` 判据;**不传**则逐字维持旧行为=回落在飞 run)· `resumeSettledSubagent` + `resolveSubagentResumeContext` + `resolveOwnerRunId` + `classifySubagentResumeFailure` + `subagentResumeAvailable`(#242 批 2 A-028.7:resume 判定半场上收,与 steer 孪生同居;取址三态 = 台账有行用行值 / 指名了行但台账缺席则**诚实缺席绝不回落在飞 run** / 没指名行才回落。出路文案归端)· `recordSubagentOwnerFromProgress` + `getBgParentRunOwner`(A-028.6:「子代 → 宿主 run」**单表**,宿主 run 必须由持 stream-local 值的调用方显式传入,包内绝不从 `activeEngineRunId()` 推断)· `noteBgOwnerAbsence`(#242 批 3 [4000] Q3=B:tail/taskOutput·taskStop/subagentOutput 三腿台账缺席即诚实缺席**绝不回落在飞 run**,缺席 warn 留痕每 (腿,taskId) 一条)· `clearBgTerminalFacts`(#242 批 3 扫码修:复活=新周期,旧周期终态事实作废——fleetLedger 复活两腿按尾段清账,factsAccepted 方向核不再拿上周期终态当先例)· `auditRetainWithoutWake`([4000] Q5:引擎宣示 `subagentResume` + 本端在付 `retainSubagentSessions` + 端未实现 `wakeSubagent` ⇒ 响亮一条;`CLIENT_VERBS.wakeSubagent` 维持 fail-soft)· `subscribeSubagentContent` · `subscribeEngineAgentPanel` · `publishQuestionFrame` / `respondToQuestion` · `configureSubagentContentStore` / `subagentContentStoreConfig` / `SUBAGENT_CONTENT_STORE_DEFAULTS`(0.62.0:子代内容账本的**字节预算** —— 此前只有条数帽而单条无上限,一条 base64 工具结果就能让一个子代槽吃到十几 MB;越限从最早的内容开始丢并留一条可渲染的 `truncated` 记录,总帽淘汰整条最久未用的账本。配置面 fail-loud,详见 §26②)| 驱动与观测委派子代;经 module 级台账喂活体 agent/task 面板。全部**能力位 gate**(§5b) | `src/subagent/*.ts`、`src/subagentContentStore.ts`、`src/engineAgentPanelStore.ts`、`src/engineAgentAbsence.ts`(0.83.2 CC-194 缺席行判定与措辞)、`src/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
165
- | 5 | **fleet 投影** | 40 | `displayUntrustedMarks`(0.83.5 CC-204:同一只出口另报每一枚字符面标记的 UTF-16 区间,`text` 与同选项的出口逐字节同;§105)· `displayUntrusted`(0.83.1 CC-112:wire 派生文本上屏前的合成出口三端单源 —— 凭据两网 ∘ 字符三网,选项按载体选;本域 `escapeDisplayControlChars` / `collapseLabel` / `capForDisplay` 三只旧口改由同一只字符面引擎实现、输出逐字节不变,字符集窄于新口默认;§101)· `createFleetLedger` · `projectTasks` · `projectWorkflows` · `projectFleetAgentRows` · `readEngineActiveBgTasks` · `FLEET_TASK_VIEW_KEYS` · `escapeDisplayControlChars`(不可见字符可见化,行标签/描述消毒的共享底座)· `capForDisplay`(0.62.0:呈前**消毒 + 封长**的共用铸点 —— 先转义、后按转义结果封长,截点避开半截转义 token 与合法代理对;本包该族四处此前各写一份、其中三份顺序是反的,详见 §26⑦)· `wireCycleSeq`(0.38.0 提货补投的 #261 §2 两位之一,另一位 `wireRetiredBy` 🔧 0.72.0 退出公面:代际号 = SendMessage 复活即 +1,**缺席 ≠ 第一代**;`retiredBy` 在场 = 这条终态是对账腿从 durable run 行投影出来的、**不是**发布方亲报 —— 幽灵行与正常收尾唯一的 wire 判据。两位都只在场才落键) | 老 `fleetClient` 那一刀的成品:**帧体归库、连接归端** —— 端持 SSE 连接,库做行投影 + 保留台账 | `src/fleet/fleetProjection.ts`、`src/fleet/fleetLedger.ts`、`src/fleetAgentPanelProjection.ts`、`src/fleetTaskDesc.ts`、`src/displayUntrusted.ts`(0.83.1 CC-112:展示层安全出口单源,本域三只旧口的字符面引擎) |
163
+ | 3 | **HITL 决断卡链**(§4/§5 主战场) | 210 | `toolPermissionRequestAskBits` / `clearPlanReviewUserDismissals`(0.83.4 CC-203 / CC-201:卡请求 → 座位请求的四位过境口,与卡请求同一把窄读;会话换代时清「用户关卡」记号;§104)· `askSurvivesPosture` / `readApprovalMandate`(0.83.2 CC-193 / CC-195:常驻姿态下「这一张卡能不能由姿态答掉」三态谓词;卡上强制词读口,缺席答缺席;§102)· `sessionPolicyDeliverable` / `sessionPolicyWithheldNotice` / `SESSION_POLICY_WITHHELD_WHY`(0.83.1 CC-117:一批规则串能不能无损写进会话规则记录 —— 整批可送才送、五词成因闭集、每词一句措辞单源;宿主侧那一份的继任;§101)· `isPolicyRefusedGate` / `denyAttributionRefusalFromError` / `denyAttributionRefusalContent` / `removalConsequenceLineForBehavior` / `ruleRemovalBehaviorOf`(0.80.0 CC-133 · CC-132:策略拒谓词 + 归因键三码读口与人话 + 删除规则后果句铸点与闭集读口;§87)· `HITL_POLICY_DENY_MESSAGE` / `APPROVAL_DENY_SETTLED_BY_WORDS` / `readApprovalDenySettledBy` / `SEMA_DENIAL_KIND_KEY`(0.79.0 CC-125:deny 收口帧按 `settledBy` 分两串的冻结句、决断对象归因位的两词可达子集与只认自有数据属性的读器、分类词信封键名;§85)· `approvalIsMandated`(0.79.0 CC-110:审批卡「清不掉」判据口,帧位 ∨ 寄存行缺席词两条腿一个真源;§85)· `readSessionPolicy` / `tightenSessionPolicy` / `tightenedSessionRules` / `classifySessionPolicyFailure` / `sessionPolicyTightenNotice` / `SESSION_POLICY_RULE_FIELDS` / `SESSION_POLICY_TIGHTEN_UNKNOWN_WHY`(0.77.0 CC-105:会话策略窄读 + 收紧编排五臂判别联合)· `writePersistedRule` / `PERSISTED_RULE_WRITE_BEHAVIORS` / `PERSISTED_RULE_WRITE_REFUSAL_CAUSES` / `PERSISTED_RULE_WRITE_UNKNOWN_REASONS`(0.77.0 CC-103:持久规则单步写面,词表派生不手抄;§79)· `persistedRulesWriteAvailable`(0.76.1 CC-102:单步写入口便利口,只派生自写键自己的四态,不与撤销面那只合取;§77)· `approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` / `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(CC-77 ①:「一次审批决断最后怎么了」的单源判别联合 `decided` / `not_sent` / `unsettled`,两条腿的结局对象一次判别;既有结局型面一字不动)· `approvalOutcomeNoteOf` / `APPROVAL_NOTE_RETRACTED_DETAIL` / `APPROVAL_NOTE_EDIT_REFUSED_DETAIL`(0.74.5 CC-88:审批结局便签单源;§73)· `decideReceiptReopen` / `suspendedReopenOf`(0.74.3 CC-73:reopen 族第二臂;§71)· `RETRACTED_CARD_DECISION_KIND`(0.74.1 CC-67:卡口无决断收口;§69)· `planReviewOutcomeTail`(0.73.1 CC-57:outcome 尾句六态单铸点;投递口闩;§63)· `readLivePendingRows` / `suspendedSubagentAsks` / `countApprovalsAwaitingDecision` / `createSuspendedAskTracker` / `livePendingRowToApprovalFrame` / `surfaceSuspendedAskAndRespond` / `surfaceEditRefusedOnBlindAsk` + `EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT`(0.72.14 CC-55:悬挂的流内 ask 读面 / 视图 / 去重账 / 决断口;§61)· `planReviewCardOptions` / `planReviewChoiceFromAnswer` / `versionSupportsPlanReviewModeAfter` / `isPlanReviewModeAfter` + `PLAN_REVIEW_APPROVE_AUTO_LABEL` / `PLAN_REVIEW_APPROVE_MANUAL_LABEL` / `PLAN_REVIEW_MODE_AFTER_WORDS` / `PLAN_REVIEW_MODE_AFTER_MIN_ENGINE`(0.72.13 CC-46:plan_review 批准后模式 `permissionModeAfter` 发口与三选卡双闸;§60)· `makeHitlCanUseTool` · `HitlBridge` · `findPendingForTask` · `readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070:`/decide` 200 = **投递受理**不是「门已解决」;`executionOutcome` 缺席 = 未知,详见 §30h) · `HitlSafetyError` · `bridgeAskUserQuestionGates` · `surfaceToolApprovalFrameAndRespond` / `surfaceFsApprovalAndDecide` · `readToolApprovalRespondAck` · `installApprovalCardPort(For)` · `installHitlHostSurface(For)` · `armPlanReviewApproval` · `reopenPlanReviewCard` · `decidePlanReview` · `startApprovalsFeed` · `pendingRowIsOwnedByThisSession` · `approvalCallKey`/`liveFrameCallKey`/`planReviewQuestionId` · `registerArmedGateFor`/`wasGateArmedFor` · `waitForGateArmed`/`onGateArmed`/`gateArmedWaitMs`(#244 F1 呈现回执事件源) · `planReviewArmedKey`/`notePlanReviewAnswered`/`notePlanReviewAnsweredIfDecisive`(A-024.4 plan 呈现分代;`waitForGateArmed` / `planReviewArmedKey` / `notePlanReviewAnswered` 三只的 `*For` 变体 0.84.0 退出公面) · `toolEndOutputText` · `waitForParkRowBirth` · `classifyAskParkRows` / `askParkRowArm` / `classifyAskParkChainFailure` · `readDecisionNoteAudit` / `decisionNoteAuditLine` · `resumeRunningOptions` / `resumeChoiceFromLabels` · `persistedRulesLaneAvailable`/`persistedRulesGovernanceAvailable` · `classifyRulesFailure` · `listAllPersistedRules` · `classifySkippedReason` · `readRulePersistOutcome`(#244 F2:persist-ack 读口与 `readToolApprovalRespondAck` 合成一处) · `parseLocalAllowRule`(durable 腿本地落规则窄化骨架,谓词经 `LocalAllowRuleDeps` 注入) · `readToolApprovalRespondRefusal`(#225 件5,0.42.0:respond 抛错的结构化原文读口 —— 三位各自防御读、各自缺席不铸、**三位皆缺席时整只返 `undefined`**;原样交还零加工,UNTRUSTED-for-display)· `installEditedRuleTextPrechecker` / `hasEditedRuleTextPrechecker` / `precheckEditedRuleText`([5076] 转出口,0.42.0:core 5.57.0 `precheckEditedRuleText` 的**端口注入形** —— 类型面 + 注入口 + 诚实缺席读口。🔴 **不是** value 级 re-export,理由见 §7 缺口 **P-34**;未装 ⇒ 返 `undefined`,绝不编一个 `{ok:true}`)· `RULE_NOT_SENT_WARN_TEXT` + `RULE_NOT_SENT_REJECTED_WARN_TEXT`(#334,0.43.0:人在卡上按下的「不再询问」被整条丢弃时的诚实告知(文案两句;发告知的两只函数 0.84.0 起是包内件)——**两条刻意分开**:前者=**引擎能力位未确认**(换台引擎/等探测就好),后者=**这次选择没过包内表核/互斥核**(表外文本/坏下标/两臂同场,换引擎也不会变) —— 编辑臂 `respondFreeFormRules` 与批臂 `respondBatchRuleOffers` 两条同形存量共用一条,与 `surfaceRememberNotApplied` 同族纪律:决断照送、只是规则没存,静默丢掉用户明确意图 = 让人以为功能坏了)· `projectCrashConverged`(L-38,0.49.0:`/v1/approvals` additive 键 `crashConverged` 的分桶投影 —— 崩溃收敛的孤儿审批读面,**缺席 ≠ 空数组**、分桶恰一个合取、坏行丢弃并计数,详见 §12;同批把 `ApprovalsResourceLike.list()` 的返回位 additive 放宽成 `ApprovalsListEnvelope`,老形 `{pending}` 仍可赋值)· `readRuleOffers` / `readRuleOfferSupply`(L-103/[C228],0.57.0 additive 导出:「不再询问」候选两代 wire 键的窄读器**公面化** —— 此前只经卡端口出包,不走卡端口架构的宿主只能自己重铸一把,而它承载的是兑付安全判据(原始下标不前移/逐条丢坏/闭集 kind/两代取舍序),详见 §20)· `RULE_OFFERS_ABSENCE_REASONS` / `DENIAL_LIMIT_KINDS`(0.59.0 / sdk 8.3.0 提货:`ruleOffersAbsence` 三词与 `denialLimitFallback.limit` 二词的**运行期**闭词表再导出 —— 与 0.58.0 那三张同一条纪律:端拿它做判定别再手抄字面量。⚠️ **本包自己不拿这两张表做窄读判定**(两处都按开集透传,词表属主是 core、server 已按闭集拒过),再导出只是给端的 `switch` 一份可数的表,端仍必须带 `default` 臂,详见 §23a)· `DecideTransportRetryExhaustedError`(Inkglow-1085 P0a:decide 出站瞬断重试耗尽的 typed 判别 —— HitlBridge 内建单次退避重试,耗尽走重呈臂不判死 turn;端一般只消费行为,不需要 instanceof) · `gateOutcomeOf` / `isDeniedGate` / `gateDeniedBy` / `gateApprover` / `isApprovalWindowExpiredGate` / `isDenialLimitAutoDeniedGate` / `isParkSlaExpiredGate` / `isHumanSettledGate`(0.60.0 / engine ≥7.64.0:`tool_end.gate` 整条门记录的窄读器 + 判定谓词 —— 取代退役的四个正交词 `settledBy`/`resolution`/`autoDenied`/`approver`。🔴 **判定归包**:「是不是审批窗自己走完的拒绝」旧形上是端各自拼的两键合取,而三条窗词现在分得开、合并读回去等于把刚修好的判别力扔掉;⚠️ 公面型一律带 `View` 后缀 —— 本文件的 `GateOutcome`(决断腿结局)与 sdk 的 `GateOutcome`(引擎门记录)**同名不同义**,详见 §24c)· `isGateParkedToolEnd`(「这次调用没在这里结算」的**第二形**谓词:gate 缺席 + `errorCode:"gate.parked"`;端判这件事必须与 `isApprovalWindowExpiredGate` **两形合读**) · `readWireErrorCode`(B-037 候包件②:decide/取件失败上引擎 wire 机器码的单源读口,结构视图读不 `instanceof`;与本包铸的 `code` 是两个命名空间,详见 §24g)| suspended→decide→resume 环。🔴 **D-1 两元组 verbatim 回显**是字节级断言的安全不变量,端**不许重实现它的任何一段**。🔴 键空间边界(web [C1] d3 拦截):`gateIdentity` 四常量两函数只覆盖 HITL questionId/callKey 空间;seat 的 `TOOL_PERMISSION_REQUEST_ID_DOMAINS`(`plan:` 等)是另一键空间,**两者绝不合并**(合并=座位校验器静默拒全部 plan-review 卡) | `src/hitl/hitlBridge.ts`、`toolApprovalWire.ts`、`askGateWire.ts`、`planReviewWire.ts`、`hitlHostSurface.ts`、`gateIdentity.ts`、`armedGateRegistry.ts`、`parkOwnership.ts`、`parkResolver.ts`、`approvalsFeed.ts`、`frameRouter.ts`(**只挑名导出** `toolEndOutputText`/`ENGINE_ABORT_TOOL_RESULT`/`HITL_REJECT_MESSAGE`/`HITL_INTERRUPT_MESSAGE_FOR_TOOL_USE`)、`parkRowBirthWait.ts`、`approvalDecisionNoteAudit.ts`、`askParkRowRouting.ts`、`resumeRunningCard.ts`(#265 上收的判定层)、`persistedRulesWire.ts`、`localAllowRule.ts`(#244 F2 规则侧)、`crashConverged.ts`(L-38 崩溃收敛读面)、`sessionPolicyDeliverable.ts`(0.83.1 CC-117 会话规则无损判定)、`askSurvivesPosture.ts`(0.83.2 CC-193 姿态放行谓词)、`src/gateOutcome.ts` |
164
+ | 4 | **子代 wire + 面板侧信道台账** | 107 | `readEngineAgentRegistry` / `isEngineAgentRegistryListingSuperseded` / `engineAgentRegistryReadingOf` / `engineAgentRegistryKeyOf` / `engineAgentRegistryRowsMissingFromHost`(0.84.0 CC-194 B 半:后台代理登记读口 + 取代判定 + 归类口 + 登记键桥 + 补行谓词,宿主据此给缺席行回收入参的 `registry` 位填真读数;§107)· `isEngineAgentAbsentRow` / `engineAgentAbsenceMarkOf` / `engineAgentAbsenceClockStopMs` / `engineAgentPanelEventClearsAbsence` / `engineAgentRowCountsAsRunning` / `tallyEngineAgentRows` / `engineAgentTurnSweepSettles` / `reapEngineAgentAbsentRows` / `engineAgentAbsenceTtlDueAtMs` / `engineAgentAbsenceDroppedLine` / `engineAgentTerminalAfterDropLine` + `ENGINE_AGENT_ABSENT_ROW_TEXT` / `ENGINE_AGENT_ABSENCE_TTL_MS` / `ENGINE_AGENT_REGISTRY_READINGS`(0.83.2 CC-194:后台子代缺席行的判定 / 计数 / sweep 豁免 / 回收 / 措辞单源,回收只在后台代理登记确认离场时;§102)· `isNewEngineAgentPanelCycle`(0.74.5 CC-87:新周期单源判据;§73)· `resolveEnginePanelTaskId` / `MAX_HELD_WIRE_TICK_BEATS` / `clearEnginePanelTaskResidentByWire`(0.74.3 CC-70:子代身份归一读口、缓一拍节拍上限、按 wire id 清常驻标(前代终态不清当代);§71)· `isStaleEngineAgentPanelEnd`(0.74.0 CC-66:面板 end 的周期身份判据;§68)· `subscribeEngineAgentPanelAbsence` / `publishEngineAgentPanelAbsence`(0.72.13:fleet 行缺席上报的**独立订阅口** —— 不上主通道,老消费者结构上收不到;§60 S-5)· `tailEngineSubagent` · `installSubagentActivitySink` · `installSubagentTailMetaSink`(#280 件2:tail meta 帧发布口,`contentFrames` 判别位载体)· `stopEngineTask` + `classifyTaskStopConflict` · `fetchEngineSubagentReport` · `steerEngineSubagent`(0.32.0 未发布 #280 件A:additive 第三参 `childTaskId` —— 端有行上下文时**应当**传,传了就走「台账优先 / 缺席即诚实缺席 + 缺席留痕」的 Q3 口径,与 tail·taskOutput·subagentOutput 三腿同姿势、与孪生 resume 腿共用同一个 `resolveOwnerRunId` 判据;**不传**则逐字维持旧行为=回落在飞 run)· `resumeSettledSubagent` + `resolveSubagentResumeContext` + `resolveOwnerRunId` + `classifySubagentResumeFailure` + `subagentResumeAvailable`(#242 批 2 A-028.7:resume 判定半场上收,与 steer 孪生同居;取址三态 = 台账有行用行值 / 指名了行但台账缺席则**诚实缺席绝不回落在飞 run** / 没指名行才回落。出路文案归端)· `recordSubagentOwnerFromProgress` + `getBgParentRunOwner`(A-028.6:「子代 → 宿主 run」**单表**,宿主 run 必须由持 stream-local 值的调用方显式传入,包内绝不从 `activeEngineRunId()` 推断)· `auditRetainWithoutWake`([4000] Q5:引擎宣示 `subagentResume` + 本端在付 `retainSubagentSessions` + 端未实现 `wakeSubagent` ⇒ 响亮一条;`CLIENT_VERBS.wakeSubagent` 维持 fail-soft)· `subscribeSubagentContent` · `subscribeEngineAgentPanel` · `publishQuestionFrame` / `respondToQuestion` · `configureSubagentContentStore` / `subagentContentStoreConfig` / `SUBAGENT_CONTENT_STORE_DEFAULTS`(0.62.0:子代内容账本的**字节预算** —— 此前只有条数帽而单条无上限,一条 base64 工具结果就能让一个子代槽吃到十几 MB;越限从最早的内容开始丢并留一条可渲染的 `truncated` 记录,总帽淘汰整条最久未用的账本。配置面 fail-loud,详见 §26②)| 驱动与观测委派子代;经 module 级台账喂活体 agent/task 面板。全部**能力位 gate**(§5b) | `src/subagent/*.ts`、`src/subagentContentStore.ts`、`src/engineAgentPanelStore.ts`、`src/engineAgentAbsence.ts`(0.83.2 CC-194 缺席行判定与措辞)、`src/agentSession/engineAgentRegistryRead.ts`(0.84.0 CC-194 B 半登记读口)、`src/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
165
+ | 5 | **fleet 投影** | 38 | `displayUntrustedMarks`(0.83.5 CC-204:同一只出口另报每一枚字符面标记的 UTF-16 区间,`text` 与同选项的出口逐字节同;§105)· `displayUntrusted`(0.83.1 CC-112:wire 派生文本上屏前的合成出口三端单源 —— 凭据两网 ∘ 字符三网,选项按载体选;本域 `escapeDisplayControlChars` / `collapseLabel` / `capForDisplay` 三只旧口改由同一只字符面引擎实现、输出逐字节不变,字符集窄于新口默认;§101)· `createFleetLedger` · `projectTasks` · `projectWorkflows` · `projectFleetAgentRows` · `readEngineActiveBgTasks` · `FLEET_TASK_VIEW_KEYS` · `escapeDisplayControlChars`(不可见字符可见化,行标签/描述消毒的共享底座)· `capForDisplay`(0.62.0:呈前**消毒 + 封长**的共用铸点 —— 先转义、后按转义结果封长,截点避开半截转义 token 与合法代理对;本包该族四处此前各写一份、其中三份顺序是反的,详见 §26⑦) | 老 `fleetClient` 那一刀的成品:**帧体归库、连接归端** —— 端持 SSE 连接,库做行投影 + 保留台账 | `src/fleet/fleetProjection.ts`、`src/fleet/fleetLedger.ts`、`src/fleetAgentPanelProjection.ts`、`src/fleetTaskDesc.ts`、`src/displayUntrusted.ts`(0.83.1 CC-112:展示层安全出口单源,本域三只旧口的字符面引擎) |
166
166
  | 6 | **请求装配(上行唯一构造口)** | 30 | `REQUEST_LANES` / `APPROVER_POSTURE_BYPASS` / `approverPostureDeclarationField` / `taskRequestOmissionCauseDetail` / `parseMaxCostUsd`(0.79.0 CC-116 · 118 · 123:第三条车道清单、审批姿态声明的唯一铸点与意图位片段、回执成因人话、花费上限文本解析;§85)· `assembleTaskRequest` / `taskRequestSeatOf` / `TASK_REQUEST_OMISSION_CAUSES` / `UPSTREAM_ABSENT_REQUEST_INTENTS`(0.77.0 CC-101:逐键去向回执 + 座位读数 + 成因词表 + 上游无对位表;§79)· `readAgentMemorySpec` / `unknownMemorySpecKeys` / `unknownMemorySpecKeysNote` / `memoryConfigRefusalNoteOf` / `KNOWN_AGENT_MEMORY_SPEC_KEYS` / `PENDING_MEMORY_SPEC_KEYS` / `RETIRED_MEMORY_SPEC_SINGULAR_KEY` / `MAX_UNKNOWN_MEMORY_SPEC_KEYS`(CC-96:`agents[].memory` 记忆 spec 的三态读口与闭白名单判官 —— 未列键拒掉的是**整只 agent 定义**)· `MEMORY_OFF` / `memoryOffDeclarationField` / `memoryOffDeclared`(0.72.8 CC-39③:`memory:"off"` 请求级整面关的意图位片段;§55)· `buildTaskRequest` · `REQUEST_FIELD_MATRIX` · `unregisteredRequestKeys` · `applyLiveRequestDefaults` · `taskNotificationToPrintFrame` | 两条车道(`interactive`/`print`)出站请求的**唯一**构造器;`unregisteredRequestKeys` 是可执行门 —— 端偷带一个未登记键上 wire 就红 | `src/request/taskRequest.ts`、`src/request/printNotification.ts` |
167
- | 7 | **通知与 outstanding 台账** | 52 | `noteOwnWorkflowRun`(0.72.2 CC-37:own 台账显式登记口,adapter workflow lane 门在 own-run 正向证明下同拍调;§49)· `installNotificationQueuePort` · `normalizeTaskNotification` · `taskNotificationDedupKeyFromWire` · `registerOutstandingBgTask` / `registerOutstandingWorkflowRun` · `notificationQueuePortMisses` · `subscribeOutstandingWorkflows` · `outstandingDeliverableWorkflowCount` | `task_notification` 归一 + 去重 + 投递进宿主命令队列的**一把闸**;`outstandingDeliverableWorkflowCount()` 是 headless `-p` 的**退出门** · `classifyPeerNotification` / `renderPeerFrameTranscriptText` / `parsePeerFrameText` / `peerFrameDisplayName` + 三张闭集表(design/385,0.54.0:同一条 `task_notification` 车道上三条**引擎注入帧**的类型化投影 —— 判别位=载体在场而非 summary 文本,详见 §17) | `src/notifications.ts`(11 个 module 台账) |
167
+ | 7 | **通知与 outstanding 台账** | 49 | `noteOwnWorkflowRun`(0.72.2 CC-37:own 台账显式登记口,adapter workflow lane 门在 own-run 正向证明下同拍调;§49)· `installNotificationQueuePort` · `normalizeTaskNotification` · `taskNotificationDedupKeyFromWire` · `registerOutstandingBgTask` / `registerOutstandingWorkflowRun` · `notificationQueuePortMisses` · `subscribeOutstandingWorkflows` · `outstandingDeliverableWorkflowCount` | `task_notification` 归一 + 去重 + 投递进宿主命令队列的**一把闸**;`outstandingDeliverableWorkflowCount()` 是 headless `-p` 的**退出门** · `classifyPeerNotification` / `renderPeerFrameTranscriptText` / `parsePeerFrameText` / `peerFrameDisplayName` + 三张闭集表(design/385,0.54.0:同一条 `task_notification` 车道上三条**引擎注入帧**的类型化投影 —— 判别位=载体在场而非 summary 文本,详见 §17) | `src/notifications.ts`(11 个 module 台账) |
168
168
  | 8 | **工具结果卡** | 27 | `stripSystemReminderBlocks` / `unwrapSystemReminder`(0.83.4 CC-205:引擎 `<system-reminder>` 信封壳的剥离与整条解包,开标签只认引擎铸的两形,线性时间;§104)· `displayBody`(0.78.1 CC-113:工具结果正文的人类面读口,剥本包铸的不可信围栏,三形互不折叠;§83)· `structuredToToolUseResult` · `readAsyncLaunchedAgentReceipt` · `wireOutputToBody` · `parseModelFacingBash` · `getPatchFromContents` · `toolEndResultToUserFrame` · `flattenToolOutput` | 铸端要渲的 `tool_result` 卡体,含客户端 diff hunk(唯一 runtime dep 的用处) | `src/toolResult.ts`、`src/printToolResultFrame.ts`、`src/diff/patch.ts` |
169
169
  | 9 | **能力/旋钮 wire 门族** | 179 | `hooksWirePlan` / `pluginHookVerdictOf` / `hooksNotRunNotice` / `pluginHookExecutorLabel` / `pluginHookReasonText` / `settingsHookDropText` / `isEngineFiredHookEvent` + `ENGINE_FIRED_HOOK_EVENTS` / `PLUGIN_HOOK_DISPOSITIONS` / `PLUGIN_HOOK_REASONS` / `PLUGIN_HOOK_EXCLUSION_REASONS` / `SETTINGS_HOOK_DROP_REASONS`(0.83.1 CC-174:插件 hook 每轮计划 —— 逐条判「投给引擎 / 本客户端执行 / 如实不跑」,请求体 hooks 与本地跳过用同一份,开机「不会执行」清单与 `/hooks` 标注措辞单源,五张闭集;读口是 `SettingsPort` 的可选成员 `enabledPluginHooks`(型面,不计名数);§101)· `invalidateTaskAgentsWire`(0.82.1 CC-161:自定义代理载荷作废并重投,就绪门等最新一代,§93 S-14)· `projectFileHistoryCaptureCapability` / `noteEngineCapsForFileHistoryCapture` / `observedFileHistoryCapture` / `forgetFileHistoryCaptureReading` / `fileHistoryCaptureMode` / `fileHistoryCaptureDoctorDetail`(0.82.1 CC-163:`capabilities.fileHistoryCapture` 四态读口 + 判据 + 措辞单源;§93)· `observedRewindArchive` / `rewindCodeArchiveAvailability` / `rewindConversationAvailability` / `rewindArchiveDoctorDetail` / `rewindConversationDoctorDetail`(0.82.0 CC-146:`/rewind` 代码档与对话档可用性四位窄读口 + 端判据三态 + 措辞单源,替掉壳侧「本地备份表非空」那条判据;§92)· `mcpEngineLegLivenessOf` / `mcpDetailLegNote` / `isMcpLivenessState`(0.80.0 CC-134:引擎腿活性六档读口 + 九句范围说明铸点 + 活性三词判据上公面;§87)· `projectMcpProbeCapability` / `noteEngineCapsForMcpProbe` / `observedMcpProbe` / `forgetMcpProbeReading` / `mcpProbeAvailable` / `mcpProbeDoctorDetail`(0.79.0 CC-74:`capabilities.mcpProbe` 四态读口 + 「这次调用要不要上 wire」三态 + doctor 句;§85)· `projectSessionPolicyCapability` / `observedSessionPolicy` / `sessionPolicyFaceAvailable`(0.77.0 CC-105:`capabilities.sessionPolicy` 四态读口 + 渲不渲写入口三态;§79)· `projectMemoryComplianceCapability` / `memoryComplianceVerbsAvailable` · `projectMemoryOriginCapability` / `memoryOriginVerbsAvailable`(0.76.1 CC-97a:`capabilities.memoryCompliance` / `memoryOrigin` 两只四态读口,同判据不同位、各持一张表;§77)· `projectPeerLaneCapability` / `observedPeerLane` / `peerLaneAvailable`(0.76.1 CC-102:`capabilities.peerLane` 四态读口 + 露不露跨会话入口的三态判据;非 HTTP 面)· `projectPermissionRulesWriteCapability` / `observedPermissionRulesWrite` / `permissionRulesWriteAvailable`(0.76.1 CC-102:`capabilities.permissionRulesWrite` 四态读口 —— 键缺席 = 二进制比单步写口老、藏入口;在场按本键的值判这次够不够得着;§77)· `projectDeviceExecutorManagementCapability` / `noteEngineCapsForDeviceExecutorManagement` / `observedDeviceExecutorManagement` / `forgetDeviceExecutorManagementReading` / `deviceExecutorManagementDoctorDetail` / `deviceManagementVerbsAvailable`(0.74.2 CC-69;§70)· `projectApprovalsStreamLiveCapability` / `noteEngineCapsForApprovalsStreamLive` / `observedApprovalsStreamLive` / `forgetApprovalsStreamLiveReading` / `approvalsStreamLiveDoctorDetail` / `livePendingNeedsReconcile`(0.73.3 CC-61;§65)· `projectExecutionLaneCapability` / `noteEngineCapsForExecutionLane` / `observedExecutionLane` / `forgetExecutionLaneReading` / `executionLaneDoctorDetail` / `toolsRunHereFromExecutionLane`(0.72.13 CC-54:`capabilities.executionLane` 四态读面,键缺席 ≠ 不是本机车道;§60)· `AGENT_MEMORY_WORDS`(0.72.3 CC-39①:`memory: user|project|local` 三词;`projectAgentsForWire` 把它们同映射为 `agents[].memory = { scopes:[agent:<type>], writeScope }`;§50)· `skillBaseDirOf`(0.72.1 CC-33:`SkillSpec.baseDir` 窄读 = server 顶层门同一只结构判据;`skillCommandsToSpecs` 第三参 `{ toolsRunHere }` 只在本机车道带;§48)· `projectAgentsForWire` / `awaitTaskAgentsWire` · `hooksForWire` · `mcpConfigsToSpecs` · `ultracodeForRequest` · `buildWebSearchEnv`(`resolveWebSearch` 🔧 0.83.0 退出公面,换读域 15 的 `resolveWebSearchVerdict`) · `attachmentsForRequest` · `projectEffectiveBody` · `classifySelfOrchestrationRefusal` / `stripSelfOrchestrationIntent` / `projectWorkflowsGate` / `SELF_ORCHESTRATION_RETRY_WITHOUT`(S-81,server 7.57.0:上面两条 stamp 腿的**背面** —— 半配置多租户形态下 server 把带 `selfOrchestration` / `settings.ultracode` 的提交 501 拒掉,判型/去键/caps 闸三处都是判定不是文案,详见 §13) · `engineCapsGeneration`(0.60.0,异源对抗复审 [medium] 逼出:caps 探测的**当代号**读口 —— 代际闸在 probe **返回之后**才跑,而宿主的读面 tee 是在 probe **内部**落地的 ⇒ 一次慢的旧探测能把上一台引擎的读数写回来。宿主在**起探测那一刻**抓号、tee 时交回 `{generation}`,陈旧那一发整只丢掉;不传 = 逐字节同行为,详见 §24e)| 逐功能的「引擎有没有这个能力 + 这个字段怎么上 wire」投影器,由 `buildTaskRequest` 组装。🔴 `hooksForWire()` 是 **fail-closed**:无 `SettingsPort` ⇒ 返回 `undefined`(信任门,不是取值) | 17 个 `src/*WireCaps.ts` + `src/scratchpadWireCaps.ts`、`src/hooksWireCaps.ts`、`src/goalStopHook.ts`、`src/websearch/searchProviderPresets.ts`、`src/selfOrchestrationDenial.ts`(S-81 拒绝判定层)、`src/pluginHooksWire.ts`(0.83.1 CC-174:插件 hook 判定 / 措辞 / 闭集,经 `src/hooksWireCaps.ts` 编排) |
170
170
  | 10 | **headless / 部署旋钮 wire** | 61 | `lastFlagValue`(0.74.3 CC-80:argv 末次旗值扫描原语上公面;§71)· `probeEngineDetachSupport` / `detachSupportDisclosure`(0.72.13 CC-53:detach 版本闸三态读口 + 披露句;§60)· `parseSandboxArgv` / `sandboxRequestFields` · `parseLimitsArgv` / `limitsForPrint` · `resolveHeadlessFinalVerify` · `resolveHeadlessPermissionMode` · `resolveHeadlessInteractiveTools` · `armDetachCancel` + `detachCancelArm` + `isDetachArmed` · `withHeadlessR1Reconnect` | `-p`/headless 车道的 env+argv 旋钮。🔴 `detachWire` 是**拆**的补偿:判定与 cancel-arm 台账在库,信号路径的裸 fetch 留宿主(`detachCancelArm()` 是取件口) | `src/sandboxWire.ts`、`scenarioWire.ts`、`finalVerifyWire.ts`、`limitsWire.ts`、`interactiveToolsWire.ts`、`headlessPermissionModeWire.ts`、`headlessReconnectWire.ts`、`detachWire.ts` |
@@ -172,8 +172,8 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
172
172
  | 12 | **workflow 与后台工作视图** | 36 | `evaluateWorkflowSize` / `readWorkflowSizeWarningEnvCaps` / `workflowSizeWarningTextForWidth` + `WORKFLOW_SIZE_WARNING_AGENT_CAP` / `_TOKEN_CAP` / `_TOKENS_PER_AGENT` / `_ENV_NAMES` / `_TEXT_LONG` / `_TEXT_SHORT` / `_TEXT_MIN` / `WORKFLOW_SIZE_GUIDELINE_AGENT_CAPS`(0.73.5 CC-58:规模告警判定三态;§67)· `projectLeaderConflict` / `leaderConflictDetail` + `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX`(0.72.10 CC-41:leader run 终局 `needs_human` + `result.conflict` 三形读面 none / unreadable / conflict,缺席不可分、filesTruncated 只认 true、salvaged 原样给落盘口;§57)· `projectWorkflowRun` · `readWorkflowResumeAdmissionIncomplete`(0.68.3 CC-05:core 7.18.0 `resumeAdmissionIncomplete` 在场 = 不是 resume 基,与 `readWorkflowParks` 同一条投影义务)· `createLiveWorkflowSource` · `ensureWorkflowActivityLedger` · `readWorkflowActivityLedger` · `stopWorkflowActivityLedger` · `resetWorkflowActivityLedgers` · `createBackgroundView` · `projectBackgroundView` · `recordWorkflowAgentTaskId` · `agentDisplayStatus` | 活过一个 turn 的长任务读面:workflow run + 跨 session 后台任务归一表(`assistant.tasks` 与 fleet SSE **两源独立降级**) | `src/workflow.ts`、`src/workflowClient.ts`、`src/workflowMonitor.ts`、`src/agentSession/backgroundView.ts`(+ 纯类型 `src/agentSession/contract.ts`) |
173
173
  | 13 | **座位 IPC 契约** | 34 | `LOCAL_SESSIONS_SPEC` · `SEAT_METHOD_NAMES` · `SEAT_EVENT_TYPES` · `isLocalSessionEvent` · `isToolPermissionRequest` · `toolPermissionRequestId` · `SEAT_VALIDATOR_KEY_COVERAGE` · `SEAT_SEND_MESSAGE_KEY_ORIGINS`(0.62.0:座位载荷**逐键出身**登记 —— 每个位要么写明转投哪个引擎请求位、要么写明为什么不上 wire;常驻门对**装在盘上的** sdk 型面逐名核,详见 §26③)| desktop↔web 座位 IPC 契约的**单一真源**(此前两边各一份、名字零重合 ⇒ 编译器永远不会告诉你它们漂了)。🔴 加 verb 忘了加 `LOCAL_SESSIONS_SPEC` **不报错**:preload 不注册 channel、渲染端读到 `undefined` | `src/seatContract.ts`(**零 import**,纯类型 + 常量 + 纯谓词)。🔴 **证据等级标注(0.42.0,test [5087] 的「语料**种类**缺口」/ cli [5088] 认领件)**:该文件里所有以「CC 如何如何」为形的断言(`212 methods` / `854-channel census` / 方法名逐字保留 / `fQe` 逐字段对照 / 一切 `.vite/build/index.chunk-*.js` 坐标)**证据等级 = 桌面 unpack,本地语料库不可复验** —— 本仓手边可复验的参照语料**只覆盖终端 CLI 形态**的静态产物,拿它去 grep 桌面壳里的符号只会零命中,而零命中在这里**既不证真也不证伪**。复核这些断言**不得**拿本仓语料当反证 |
174
174
  | 14 | **宿主端口与会话槽** | 41 | `installHost` · `installHostFor` · `installCoreValuePorts` + 十读口 + 三存在性口(0.69.0 CC-07:core 值级面端口注入,Node 宿主装配根装、浏览器 lane 恒缺席)· `hostPortMisses(For)` · `DEFAULT_SESSION_KEY` · `hostEnv` · `unrefTimer` · `parseLocaleTag` / `pickUiLanguage`(#244 F4 族D A-028.20:locale tag 手术单源 + UI 语言判定;与 `resolveRegionHint` 双出口成文 —— 语言偏好域 en/zh ≠ 地址可达域 cn/intl/unknown,`zh-Hant` 前者 zh 后者 intl 是设计)· `engineNamespaceKeyFor` / `mergeSessionMapRecord` / `mergeEngineEntry`(A-028.12:会话 id 映射单一键形 + merge 判定;存储经 `SessionMapStorePort` 归端 —— cli 文件锁/原子写,web localStorage)| 进程/端级装配层(settings/fs/queue/timers/session/log/probe),与 per-turn 的 `AdapterContext` **分层**。头注的判定规则:**这个能力每 turn 都会变吗?** 会 ⇒ `ctx`;不会 ⇒ `installHost` | `src/host.ts`、`src/hostEnv.ts`、`src/sessionSlot.ts`、`src/unrefTimer.ts`、`src/env/{localeGeo,localeTag,uiLanguage}.ts`、`src/sessionMap.ts` |
175
- | 15 | **控制面与传输** | 195 | `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict` / `webSearchVerdictMessage` / `webSearchEndpointForDisplay`(0.82.7 CC-182:每请求联网搜索配置三态判决,与 server ≥7.100.0 判官同判;§99)· `withPrintInitFrame` / `createPrintInitGate` / `printInitRosterSignal` / `decidePrintInitToolFace` / `printInitToolFaceDebugLine` / `PRINT_INIT_ROSTER_WAIT_MS`(0.82.5 CC-169:print 车道 init 帧工具面名册优先 —— 流包装器、判定闸、名册信号三态分类、判定口、留痕措辞单源、等待上界;§97)· `projectRegistryQuotaUsage` / `quotaAmountText` / `registryQuotaDoctorDetail`(0.82.0 CC-150:云控制面 quota/usage 回体的纯投影 —— 两种 null 的正面事实与「判不出」三分,措辞零 0;§92)· `pushSessionBundle` / `pullSessionBundle` / `importSessionBundle` / `APIError`(0.79.0 CC-128:会话 bundle 面四名原样转口,与 `AgentClient` 同一张存量转口表;§85)· `readMcpCapabilities` / `probeMcpServers` / `classifyMcpProbeFailure` / `MCP_PROBE_REFUSAL_CAUSES` / `MCP_PROBE_UNKNOWN_WHYS`(0.79.0 CC-74:无 run 可读的 MCP 状态面两只调用口 + 单一失败判官 + 两张闭集词表;§85)· `readEntryProvenance` / `eraseMemoryEntries` / `listExternalOriginEntries` / `listOriginClearances` / `clearEntryOrigin` / `classifyMemoryFailure` / `externalOriginCoverage` / `MEMORY_VERB_REFUSAL_CAUSES` / `MEMORY_VERB_UNKNOWN_WHYS`(0.78.1 CC-97 b:记忆治理面五动词调用口 + 单一失败判官 + 两张闭集 + 覆盖面判词;§83)· `readMemoryExportRows` / `scopeExternalOriginVerdict` / `readMemoryEraseReceipt` / `memoryEraseCounts` / `memoryEraseErasedNothing` / `eraseNotFoundHistoryVerdict` / `memoryEraseReplayPosture` / `readMemoryOriginClearanceReceipt` / `MEMORY_ENGINE_REQUIRED_CODE`(0.76.1 CC-97a:记忆条目面三个回体的窄读口 + 判词口;「空答绝不读作本店干净」的代码落点;§77)· `readMcpLiveness` / `mcpLivenessRollupOf` / `mcpEngineLegHealthOf` / `mcpEngineLegHealthDetail` / `MCP_LIVENESS_STATES`(0.76.1 CC-36:`wiring_manifest.mcp[].liveness` 活性观察的行级三向读口 + 腿级四读数判词 + 措辞铸点;§77)· `readRunCancelContext` / `classifyRunAbortCause` / `RUN_CANCELLED_CODE`(0.74.3 CC-71:run 取消现场与成因;§71)· `cancelConflictFromError` / `cancelConflictContent` / `usageWindowExhaustedFromError` / `usageWindowExhaustedContent` + `CONFLICT_APPROVAL_SETTLED` / `CONFLICT_RUN_NOT_RUNNING`(0.73.1 CC-56:cancel 409 按码分家 + 提交面 429 用量窗;§63)· `reconnectMcpServer` / `projectMcpReconnectResult` / `classifyMcpReconnectFailure` / `projectMcpReconnectCapability` / `mcpReconnectOutcomeDetail` + `MCP_RECONNECT_OUTCOMES` / `MCP_RECONNECT_TRANSACTION_NOTICE`(0.72.9 CC-30:会话内 MCP re-dial 消费口,outcome 三态 / unsupported 恒五键 / 名册按 toolNames 在场性;§56)· `readAutoConsolidationArmed`(0.72.9 CC-39②:memory-status `autoConsolidationArmed` 三态,缺席 = 老 server 判不了;§56)· `steerFollowIntent`(0.72.6 CC-40:steer 后续听意图三态 tail / after-decision / after-wake,按 `SteerReceipt.delivery` 判;§53)· `projectWebSearchBackendCapability` / `observedWebSearchBackend` / `noteEngineCapsForWebSearchBackend` / `forgetWebSearchBackendReading` / `webSearchBackendDoctorDetail` + `WEB_SEARCH_BACKEND_NONE`(0.72.5 CC-31:`capabilities.webSearch.backend` 四态读面 —— 键缺席 = 老引擎判不了 ≠ `none` = 引擎明说没有默认后端;与 `sqlEngineCapability` / `writeProtectionCapability` 同构;§52)· `resumeContextUnavailableFromError` / `resumeContextUnavailableContent`(0.72.1 CC-33:409 `conflict.resume_context_unavailable` 读数 `{ code, staleAfterSec?, runId? }` + 三句人话;§48)· `mcpEngineLegPresence`(0.71.0 CC-19:引擎侧 MCP 在场三值,只从面板视图求;§42)· `ControlRouter`(+ `ControlSafetyError`)· `fetchMcpPanel`(0.69.0:经 sdk `sessions.mcp` 取体 + 投视图,不裸 fetch)· `projectMcpPanel` + `mcpPanelLastLegDetail`(0.68.2 CC-03:`GET /v1/sessions/:id/mcp` 面板体防御读视图 + `lastLegMcp` 一行措辞铸点;缺席 = 键不铸、读不懂 = `lastLegMcpUnreadable`、禁与 `servers[]` 对账)· `makeEngineWireClient` + `resolveWireAuth` · `installEngineWireTarget` · `diagnoseSseIdleTear` / `isSseIdleError` · `attemptActiveRunSelfHeal` + `activeRunBusySignal` + `activeRunSelfHealRow` / `activeRunBusyHeadlessRow` · `kickEngineCapsProbe` / `engineCapTrue` / `invalidateEngineCaps(baseUrl, probe?)`(#307 S25:引擎温切后的 caps 生产失效口 —— kick 自带幂等闸,同 baseUrl 重启后不显式失效就永远读到旧引擎那一版能力位;调用方 = 壳的 respawn/restartEngine。🔴 **推荐两参形**:第二参给替代探测则「推进代际 + 注册新探测」在同一同步块内完成,失效与下一次 kick 之间那个「等待者读到未判」的窗按构造不存在;单参形保留给「只丢缓存、这一刻没有替代探测」的调用方,那种情形下读到未判是诚实结局) · `engineCapValue`(S-131,0.59.0:能力位的**四态**通用读口 `unobserved`/`not_reported`/`null`/`value` —— 既有三口把四种「读不出」全折成 fail-closed 一档,对**放行**问题是对的、对**读面/诊断**问题是错的:`null`(引擎明确说没有,正面事实)会与「老引擎不报」「还没探到」在屏上同形。`value` 位刻意不做形校验,形归各能力位自己的窄读器,详见 §23b)· `projectSqlEngineCapability` / `observedSqlEngine` / `noteEngineCapsForSqlEngine` / `forgetSqlEngineReading` / `sqlEngineDoctorDetail`(S-131,0.59.0:`Capabilities.sql`(server ≥7.60.0)的四态读面**从壳侧上收** —— 归层债,0.58.0 时它长在壳里正是因为包侧没有嵌套对象读口。🔴 **导出名与壳侧那份逐字同名 = drift-lock**;`txnMode: null` 是铸点域内的合法值不是畸形;换代失效口清成未观测而不是留旧值,详见 §23b)· `mapBrainStatusToRetry` · `waitForClaimRelease` + `CLAIM_RELEASED_STATES` / `CLAIM_HELD_STATES` · `atMostOnceFailureClass` / `readSteerDelivery` · `clearRunningChoiceOffer`(Inkglow-1085 P0b①:「Do nothing」登记的清口 —— 端的「重新打开操作菜单」入口;登记在场时 attemptActiveRunSelfHeal 不整卡重弹,not-parked 结局带 `alreadyOffered: true` 判别位,端据此降级渲一行)· `INTERACTIVE_WAY_OUT`(默认出路串单源)· `engineSessionParamFor`(design/285 批 0:`?session=` 派生的 **per-key** 形 —— `hostSessionFor(sessionKey)?.currentSessionId()` + [1501] 空串归一;零参 `engineSessionParam()` = 默认槽兼容层,取值链逐字等价)· `normalizeWirePrincipal`(A-028.10:principal 在场性 trim 原语 —— 全空白=缺席不发头,engineWireTarget 两臂/makeEngineWireClient/壳 livePrincipal 同尺)· `readSessionMemoryStatus` / `classifyMemoryStatusFailure` / `readCaptureOptOut` / `readLastCapture`(S-53 会话记忆姿态读面,0.48.0:失败分诊**码优先**——两个 404 分道 `not_found.session` / `not_found.route`,无码 404 不猜落 failed;五键逐键缺席语义两个合读器,`lastCapture` 三态的判别材料是 `committedCount` 不是本键;IO 归宿主注入 `MemoryStatusClientLike`,详见 §11) · `classifyTurnWireError` / `isWireTransportError` / `isPreStreamDrainingReject` / `isResumeAtRejection` / `drainingRetryDelayMs` / `scenarioDenyFromError` + `WIRE_NETWORK_ERROR_PATTERN`(A-028.11/.13:turn 错误分型判定半场,人话文案与渲染归端)· `resumeRetryLaterFromError`(L-102,0.57.0:resume 族**时间性拒绝**二码的判型半场 —— 这一族里唯一**带得出「等多久」**(`retryAfterSec`)的两个码。🔴 闭集**不是**「哪些码可以等」的名单:同族 `resume.row_recycling` 同样可等(窗口自清)只是没有秒数 ⇒ 本读口返回 `null` 只意味着没命中这两码,详见 §21) · `projectWriteProtectionCapability` / `observedWriteProtection` / `noteEngineCapsForWriteProtection` / `forgetWriteProtectionReading` / `writeProtectionDoctorDetail` / `projectWriteProtectionPosture` / `writeProtectionPostureDetail`(S-138,0.60.0:`Capabilities.writeProtection` (engine ≥7.63.0)的**四态**读面 + operator 面行表 —— 与上面 S-131 那一格**同构同纪律**。🔴 三位刻意不合成一个布尔;`not_reported` **不是**「这台部署没有写保护表」(座位缺席恰是缺省表在岗);逐行 name/kind 走**最小披露**只上 operator 面,详见 §24e)· `projectReadFacePosture` / `readFacePostureDetail` / `readFaceDisagreement`(S-167,0.61.0:operator 面 `diagnostics.wiring.readFace`(engine ≥7.65.0)的窄读器 —— 与上面S-138 那一格**同构同纪律**。🔴 三句「答不出来」逐字互异且没有一句等于「没有 READ 档」;`source` 按开集读;与租户面 `capabilities.readFace` 刻意不合流,只带一个纯比较函数,详见 §25)| 上行通道的**监管**半场(submit / steer / kill / 队列命令定序)+ 传输构造、caps 探测、SSE 断流分诊、**409 active-run 自愈** | `src/controlRouter.ts`、`steering.ts`、`sseIdleTriage.ts`、`retryStatus.ts`、`diagnostics.ts`、`engineWireSdk.ts`、`engineWireTarget.ts`、`src/principalWire.ts`、`src/wireErrorTriage.ts`、`engineSessionParam.ts`、`engineCapsCache.ts`、`liveInitToolFace.ts`、`adapter/activeRunSelfHeal.ts`、`src/sessionMemoryStatus.ts`、`src/writeProtectionCapability.ts`、`src/webSearchBackendCapability.ts`、`src/mcpReconnect.ts`、`src/readFacePosture.ts` |
176
- | 16 | **引擎词汇表与包自检** | 114 | `APPROVAL_MANDATE_WORDS` / `isApprovalMandateWord` / `approvalMandateDetail`(0.83.2 CC-195:强制位站在哪一个词上的六词闭集,与引擎型面编译期双向钉;成员判据;每词一句说明;§102)· `resumePolicyBlockFromError` / `resumePolicyBlockContent`(0.82.1 CC-154:续跑折叠码 `resume_blocked_by_policy` 自己的读数与措辞,原码三态;§93)· `corruptStoredRowWhere` / `corruptStoredRowContent`(0.82.0 CC-156:续跑上下文坏档时引擎点名的那一行的读口与措辞单源;§92)· `effectiveWireErrorCode` / `RESUME_POLICY_FOLD_CODE`(0.82.0 CC-154:政策折叠码与「按原码判」的取码单源;§92)· `SETTLEMENT_KIND_WORDS` / `ccToolDenialKindForSettledBy` / `ccToolDenialKindForToolEnd`(0.80.0 CC-133:结算词十三词镜像 + 「谁结算的」→ CC 分类词单铸映射 + `tool_end` 帧合流读口;§87)· `CC_TOOL_DENIAL_KINDS` / `isCcToolDenialKind` / `isCcToolDenialKindADenial` / `isGateDeniedByWord`(0.79.0 CC-125:上游转录记录键 `toolDenialKind` 七词镜像 + 两只谓词 + `DeniedBy` 十词成员谓词;§85)· `mandatedApprovalDetail`(0.79.0 CC-110:「这张卡清不掉」那一句的唯一铸点;§85)· `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH`(CC-96:记忆面两个**构造期**拒码,进既有 `config.` 族识别表;400 拼写 / 409 冲突,分诊归引擎)· `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`(0.72.12 CC-50:通知自己的四终态词,含 `cancelled`;与 run 级终态表两张表;§59)· `ENGINE_NOTICE_CODES` 71(0.83.0 CC-186:引擎 7.30.0 / 7.31.0 +2 `config.context_settings_swapped` / `config.secret_env_scrubbed`,均 operator;§100。历史:0.82.1 69、0.79.0 68、0.72.11 CC-49 67 —— core 7.23.0 +1 `config.write_protection_unresolved`,operator,兄弟码 `target_view_absent` 之后;§58)· `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`(0.72.7 CC-42:通告 `mcp.server_redialed` 事实读器,outcome 三词闭集、added/removed 计数;§54)· `RESUME_CONTEXT_UNAVAILABLE`(0.72.1 CC-33;不进两个 resume 闭集:不可等、也不是换参数)· `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` · `resumeReopenFromError` / `resumeReopenContent`(0.71.3 CC-06:resume reopen 族三码闭集 + 读口 + 三句,§45)· `readSkillsListingTruncated`(0.70.0 CC-04:`skills.listing_truncated` 事实读器,§39)· `CONFIG_REFUSAL_CODES` / `isConfigRefusalCode` · `DECIDE_WORKFLOW_LANE_CODES`(+ 三个具名码;`/decide` workflow 车道,三条出路刻意不合并,详见 §30h)· `STOP_CONFLICT_CODES` · `isInterruptedToolEndCode` · `isRewindFamilyCode` · `CLIENT_VERBS` · `compensationSplitViolations` · `DELEGATION_CAP_CODES` / `isDelegationCapCode` / `DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP`(0.38.0 #318 件④:core 5.48.0 design/323 委派席位到限**两码,处置不对称禁合并** —— 并发帽=**可等**(兄弟结束即有位)/ 会话累计帽=**等也没用**(这条会话的配额用尽))· `CONFIG_DELEGATION_ENTRY_CAPS`(同批入 `CONFIG_REFUSAL_CODES` 识别表)· `delegationCapDispositionOf` / `MCP_SERVER_REVOKED`(0.39.0 载体到货消费件:core 5.50.0 补 `{ error: code, code }` 孪生拼法后两码真上 `tool_end.errorCode`,0.38.0「先立词不落消费分支」的已知局限自此解除;处置轴 `wait-for-slot` / `reuse-existing-or-await-reap` 机器可读(累计帽=retained-window 帐,行回收配额即回,处置=SendMessage 复用,**非**「换会话/永久耗尽」——0.38.0 段该句系勘误),未知 `delegation.*` 码 ⇒ `undefined`;`mcp.server_revoked` = 操作员 mid-session 吊销 server 后的工具面本地闸(被吊销的 server **名**今天不过 wire 境:detail.server 是进程内位,抬升腿只 lift code——归因渲染候 core 补 typed detail,已点名);载体门 = engine-vocab G3 腿锚 core dist 铸点)· `CAPABILITY_SELF_ORCHESTRATION_REQUIRED`(S-81,server 7.57.0:提交面的 selfOrchestration 准入拒绝码。🔴 **复用码** —— 与其它 `capability.*` 501 同体形而处置不同,消费点必须按**恰等**判、绝不放宽成前缀判;判型与「去键重发一次」归 `src/selfOrchestrationDenial.ts`,详见 §13) · `GATE_PARKED_ERROR_CODE`(0.60.0:「门把这次调用 park 了」的机读码单源 —— `frameRouter` 的连坐/中断判据与 `gateOutcome.isGateParkedToolEnd` 读同一个常量;真机黑盒直证 park 短路帧上**没有 `gate`**,这个码是那一形唯一的信号,详见 §24c)| 三端分臂共用的**去字面化** `errorCode` 词表(病根正是三端各抄一份字面);编译期 verb 闭合门;搬迁补偿登记表 | `src/engineErrorCodes.ts`(计数以 `scripts/public-export-baseline.json` 为准,别手抄;A-028.11/.13 补 `DRAINING_ERROR_CODE`/`SCENARIO_NOT_ALLOWED_ERROR_CODE`/`RESUME_AT_ERROR_CODE_PREFIX`;#318 件④ 补 `delegation.*` 族四位 + `config.delegation_entry_caps`;0.39.0 补三新码消费件三位);S-81 补 `capability.self_orchestration_required` 一位;L-102 补 `resume.*` 时间性拒绝二码 + 闭集 `RESUME_RETRY_LATER_CODES` 三位)、`src/classifierVerdictWire.ts`、`src/compensations.ts`、`src/clientSlice.ts`;**0.67.0 补锚**(这三件的导出一直计在本域,而本表此前没有它们的锚行 —— 如实补上,不是搬家):`src/gateVocabulary.ts`(`GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail` + 🆕 `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`,详见 §32d)、`src/autoModeUnavailable.ts`(`AUTO_MODE_UNAVAILABLE_CAUSES` + 🆕 `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`;🔴 同批**删**`classifierUnavailableOf`/`classifierUnavailableDetail`,详见 §32b)、`src/classifierStatus.ts`(`CLASSIFIER_STATUS_STATES`/`classifierStatusOf`/`classifierStatusDetail`)|
175
+ | 15 | **控制面与传输** | 193 | `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict` / `webSearchVerdictMessage` / `webSearchEndpointForDisplay`(0.82.7 CC-182:每请求联网搜索配置三态判决,与 server ≥7.100.0 判官同判;§99)· `withPrintInitFrame` / `createPrintInitGate` / `printInitRosterSignal` / `decidePrintInitToolFace` / `printInitToolFaceDebugLine` / `PRINT_INIT_ROSTER_WAIT_MS`(0.82.5 CC-169:print 车道 init 帧工具面名册优先 —— 流包装器、判定闸、名册信号三态分类、判定口、留痕措辞单源、等待上界;§97)· `projectRegistryQuotaUsage` / `quotaAmountText` / `registryQuotaDoctorDetail`(0.82.0 CC-150:云控制面 quota/usage 回体的纯投影 —— 两种 null 的正面事实与「判不出」三分,措辞零 0;§92)· `pushSessionBundle` / `pullSessionBundle` / `importSessionBundle` / `APIError`(0.79.0 CC-128:会话 bundle 面四名原样转口,与 `AgentClient` 同一张存量转口表;§85)· `readMcpCapabilities` / `probeMcpServers` / `classifyMcpProbeFailure` / `MCP_PROBE_REFUSAL_CAUSES` / `MCP_PROBE_UNKNOWN_WHYS`(0.79.0 CC-74:无 run 可读的 MCP 状态面两只调用口 + 单一失败判官 + 两张闭集词表;§85)· `readEntryProvenance` / `eraseMemoryEntries` / `listExternalOriginEntries` / `listOriginClearances` / `clearEntryOrigin` / `classifyMemoryFailure` / `externalOriginCoverage` / `MEMORY_VERB_REFUSAL_CAUSES` / `MEMORY_VERB_UNKNOWN_WHYS`(0.78.1 CC-97 b:记忆治理面五动词调用口 + 单一失败判官 + 两张闭集 + 覆盖面判词;§83)· `readMemoryExportRows` / `scopeExternalOriginVerdict` / `readMemoryEraseReceipt` / `memoryEraseCounts` / `memoryEraseErasedNothing` / `eraseNotFoundHistoryVerdict` / `memoryEraseReplayPosture` / `readMemoryOriginClearanceReceipt` / `MEMORY_ENGINE_REQUIRED_CODE`(0.76.1 CC-97a:记忆条目面三个回体的窄读口 + 判词口;「空答绝不读作本店干净」的代码落点;§77)· `readMcpLiveness` / `mcpLivenessRollupOf` / `mcpEngineLegHealthOf` / `mcpEngineLegHealthDetail` / `MCP_LIVENESS_STATES`(0.76.1 CC-36:`wiring_manifest.mcp[].liveness` 活性观察的行级三向读口 + 腿级四读数判词 + 措辞铸点;§77)· `readRunCancelContext` / `classifyRunAbortCause` / `RUN_CANCELLED_CODE`(0.74.3 CC-71:run 取消现场与成因;§71)· `cancelConflictFromError` / `cancelConflictContent` / `usageWindowExhaustedFromError` / `usageWindowExhaustedContent` + `CONFLICT_APPROVAL_SETTLED` / `CONFLICT_RUN_NOT_RUNNING`(0.73.1 CC-56:cancel 409 按码分家 + 提交面 429 用量窗;§63)· `reconnectMcpServer` / `projectMcpReconnectResult` / `classifyMcpReconnectFailure` / `projectMcpReconnectCapability` / `mcpReconnectOutcomeDetail` + `MCP_RECONNECT_OUTCOMES` / `MCP_RECONNECT_TRANSACTION_NOTICE`(0.72.9 CC-30:会话内 MCP re-dial 消费口,outcome 三态 / unsupported 恒五键 / 名册按 toolNames 在场性;§56)· `readAutoConsolidationArmed`(0.72.9 CC-39②:memory-status `autoConsolidationArmed` 三态,缺席 = 老 server 判不了;§56)· `steerFollowIntent`(0.72.6 CC-40:steer 后续听意图三态 tail / after-decision / after-wake,按 `SteerReceipt.delivery` 判;§53)· `projectWebSearchBackendCapability` / `observedWebSearchBackend` / `noteEngineCapsForWebSearchBackend` / `forgetWebSearchBackendReading` / `webSearchBackendDoctorDetail` + `WEB_SEARCH_BACKEND_NONE`(0.72.5 CC-31:`capabilities.webSearch.backend` 四态读面 —— 键缺席 = 老引擎判不了 ≠ `none` = 引擎明说没有默认后端;与 `sqlEngineCapability` / `writeProtectionCapability` 同构;§52)· `resumeContextUnavailableFromError` / `resumeContextUnavailableContent`(0.72.1 CC-33:409 `conflict.resume_context_unavailable` 读数 `{ code, staleAfterSec?, runId? }` + 三句人话;§48)· `mcpEngineLegPresence`(0.71.0 CC-19:引擎侧 MCP 在场三值,只从面板视图求;§42)· `ControlRouter`(+ `ControlSafetyError`)· `fetchMcpPanel`(0.69.0:经 sdk `sessions.mcp` 取体 + 投视图,不裸 fetch)· `projectMcpPanel` + `mcpPanelLastLegDetail`(0.68.2 CC-03:`GET /v1/sessions/:id/mcp` 面板体防御读视图 + `lastLegMcp` 一行措辞铸点;缺席 = 键不铸、读不懂 = `lastLegMcpUnreadable`、禁与 `servers[]` 对账)· `makeEngineWireClient` + `resolveWireAuth` · `installEngineWireTarget` · `diagnoseSseIdleTear` / `isSseIdleError` · `attemptActiveRunSelfHeal` + `activeRunBusySignal` + `activeRunSelfHealRow` / `activeRunBusyHeadlessRow` · `kickEngineCapsProbe` / `engineCapTrue` / `invalidateEngineCaps(baseUrl, probe?)`(#307 S25:引擎温切后的 caps 生产失效口 —— kick 自带幂等闸,同 baseUrl 重启后不显式失效就永远读到旧引擎那一版能力位;调用方 = 壳的 respawn/restartEngine。🔴 **推荐两参形**:第二参给替代探测则「推进代际 + 注册新探测」在同一同步块内完成,失效与下一次 kick 之间那个「等待者读到未判」的窗按构造不存在;单参形保留给「只丢缓存、这一刻没有替代探测」的调用方,那种情形下读到未判是诚实结局) · `engineCapValue`(S-131,0.59.0:能力位的**四态**通用读口 `unobserved`/`not_reported`/`null`/`value` —— 既有三口把四种「读不出」全折成 fail-closed 一档,对**放行**问题是对的、对**读面/诊断**问题是错的:`null`(引擎明确说没有,正面事实)会与「老引擎不报」「还没探到」在屏上同形。`value` 位刻意不做形校验,形归各能力位自己的窄读器,详见 §23b)· `projectSqlEngineCapability` / `observedSqlEngine` / `noteEngineCapsForSqlEngine` / `forgetSqlEngineReading` / `sqlEngineDoctorDetail`(S-131,0.59.0:`Capabilities.sql`(server ≥7.60.0)的四态读面**从壳侧上收** —— 归层债,0.58.0 时它长在壳里正是因为包侧没有嵌套对象读口。🔴 **导出名与壳侧那份逐字同名 = drift-lock**;`txnMode: null` 是铸点域内的合法值不是畸形;换代失效口清成未观测而不是留旧值,详见 §23b)· `mapBrainStatusToRetry` · `waitForClaimRelease` + `CLAIM_RELEASED_STATES` / `CLAIM_HELD_STATES` · `atMostOnceFailureClass` / `readSteerDelivery` · `clearRunningChoiceOffer`(Inkglow-1085 P0b①:「Do nothing」登记的清口 —— 端的「重新打开操作菜单」入口;登记在场时 attemptActiveRunSelfHeal 不整卡重弹,not-parked 结局带 `alreadyOffered: true` 判别位,端据此降级渲一行)· `INTERACTIVE_WAY_OUT`(默认出路串单源)· `engineSessionParamFor`(design/285 批 0:`?session=` 派生的 **per-key** 形 —— `hostSessionFor(sessionKey)?.currentSessionId()` + [1501] 空串归一;零参 `engineSessionParam()` = 默认槽兼容层,取值链逐字等价)· `normalizeWirePrincipal`(A-028.10:principal 在场性 trim 原语 —— 全空白=缺席不发头,engineWireTarget 两臂/makeEngineWireClient/壳 livePrincipal 同尺)· `readSessionMemoryStatus` / `classifyMemoryStatusFailure` / `readCaptureOptOut` / `readLastCapture`(S-53 会话记忆姿态读面,0.48.0:失败分诊**码优先**——两个 404 分道 `not_found.session` / `not_found.route`,无码 404 不猜落 failed;五键逐键缺席语义两个合读器,`lastCapture` 三态的判别材料是 `committedCount` 不是本键;IO 归宿主注入 `MemoryStatusClientLike`,详见 §11) · `classifyTurnWireError` / `isWireTransportError` / `isPreStreamDrainingReject` / `isResumeAtRejection` / `drainingRetryDelayMs` / `scenarioDenyFromError` + `WIRE_NETWORK_ERROR_PATTERN`(A-028.11/.13:turn 错误分型判定半场,人话文案与渲染归端)· `resumeRetryLaterFromError`(L-102,0.57.0:resume 族**时间性拒绝**二码的判型半场 —— 这一族里唯一**带得出「等多久」**(`retryAfterSec`)的两个码。🔴 闭集**不是**「哪些码可以等」的名单:同族 `resume.row_recycling` 同样可等(窗口自清)只是没有秒数 ⇒ 本读口返回 `null` 只意味着没命中这两码,详见 §21) · `projectWriteProtectionCapability` / `observedWriteProtection` / `noteEngineCapsForWriteProtection` / `forgetWriteProtectionReading` / `writeProtectionDoctorDetail` / `projectWriteProtectionPosture` / `writeProtectionPostureDetail`(S-138,0.60.0:`Capabilities.writeProtection` (engine ≥7.63.0)的**四态**读面 + operator 面行表 —— 与上面 S-131 那一格**同构同纪律**。🔴 三位刻意不合成一个布尔;`not_reported` **不是**「这台部署没有写保护表」(座位缺席恰是缺省表在岗);逐行 name/kind 走**最小披露**只上 operator 面,详见 §24e)· `projectReadFacePosture` / `readFacePostureDetail` / `readFaceDisagreement`(S-167,0.61.0:operator 面 `diagnostics.wiring.readFace`(engine ≥7.65.0)的窄读器 —— 与上面S-138 那一格**同构同纪律**。🔴 三句「答不出来」逐字互异且没有一句等于「没有 READ 档」;`source` 按开集读;与租户面 `capabilities.readFace` 刻意不合流,只带一个纯比较函数,详见 §25)| 上行通道的**监管**半场(submit / steer / kill / 队列命令定序)+ 传输构造、caps 探测、SSE 断流分诊、**409 active-run 自愈** | `src/controlRouter.ts`、`steering.ts`、`sseIdleTriage.ts`、`retryStatus.ts`、`diagnostics.ts`、`engineWireSdk.ts`、`engineWireTarget.ts`、`src/principalWire.ts`、`src/wireErrorTriage.ts`、`engineSessionParam.ts`、`engineCapsCache.ts`、`liveInitToolFace.ts`、`adapter/activeRunSelfHeal.ts`、`src/sessionMemoryStatus.ts`、`src/writeProtectionCapability.ts`、`src/webSearchBackendCapability.ts`、`src/mcpReconnect.ts`、`src/readFacePosture.ts` |
176
+ | 16 | **引擎词汇表与包自检** | 110 | `readReadRootGrantNotice`(0.84.0 CC-185:读目录授权两枚结论通告 `approval.read_root_granted` / `approval.read_root_grant_rejected` 的事实读口,按 `toolCallId` 对卡,没有 granted 通告 = 什么都没加;§107)· `APPROVAL_MANDATE_WORDS` / `isApprovalMandateWord` / `approvalMandateDetail`(0.83.2 CC-195:强制位站在哪一个词上的六词闭集,与引擎型面编译期双向钉;成员判据;每词一句说明;§102)· `resumePolicyBlockFromError` / `resumePolicyBlockContent`(0.82.1 CC-154:续跑折叠码 `resume_blocked_by_policy` 自己的读数与措辞,原码三态;§93)· `corruptStoredRowWhere` / `corruptStoredRowContent`(0.82.0 CC-156:续跑上下文坏档时引擎点名的那一行的读口与措辞单源;§92)· `effectiveWireErrorCode` / `RESUME_POLICY_FOLD_CODE`(0.82.0 CC-154:政策折叠码与「按原码判」的取码单源;§92)· `SETTLEMENT_KIND_WORDS` / `ccToolDenialKindForSettledBy` / `ccToolDenialKindForToolEnd`(0.80.0 CC-133:结算词十三词镜像 + 「谁结算的」→ CC 分类词单铸映射 + `tool_end` 帧合流读口;§87)· `CC_TOOL_DENIAL_KINDS` / `isCcToolDenialKind` / `isCcToolDenialKindADenial` / `isGateDeniedByWord`(0.79.0 CC-125:上游转录记录键 `toolDenialKind` 七词镜像 + 两只谓词 + `DeniedBy` 十词成员谓词;§85)· `mandatedApprovalDetail`(0.79.0 CC-110:「这张卡清不掉」那一句的唯一铸点;§85)· `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH`(CC-96:记忆面两个**构造期**拒码,进既有 `config.` 族识别表;400 拼写 / 409 冲突,分诊归引擎)· `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`(0.72.12 CC-50:通知自己的四终态词,含 `cancelled`;与 run 级终态表两张表;§59)· `ENGINE_NOTICE_CODES` 71(0.83.0 CC-186:引擎 7.30.0 / 7.31.0 +2 `config.context_settings_swapped` / `config.secret_env_scrubbed`,均 operator;§100。历史:0.82.1 69、0.79.0 68、0.72.11 CC-49 67 —— core 7.23.0 +1 `config.write_protection_unresolved`,operator,兄弟码 `target_view_absent` 之后;§58)· `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`(0.72.7 CC-42:通告 `mcp.server_redialed` 事实读器,outcome 三词闭集、added/removed 计数;§54)· `RESUME_CONTEXT_UNAVAILABLE`(0.72.1 CC-33;不进两个 resume 闭集:不可等、也不是换参数)· `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` · `resumeReopenFromError` / `resumeReopenContent`(0.71.3 CC-06:resume reopen 族三码闭集 + 读口 + 三句,§45)· `readSkillsListingTruncated`(0.70.0 CC-04:`skills.listing_truncated` 事实读器,§39)· `CONFIG_REFUSAL_CODES` / `isConfigRefusalCode` · `DECIDE_WORKFLOW_LANE_CODES`(+ 三个具名码;`/decide` workflow 车道,三条出路刻意不合并,详见 §30h)· `STOP_CONFLICT_CODES` · `isInterruptedToolEndCode` · `isRewindFamilyCode` · `CLIENT_VERBS` · `compensationSplitViolations` · `DELEGATION_CAP_CODES` / `isDelegationCapCode` / `DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP`(0.38.0 #318 件④:core 5.48.0 design/323 委派席位到限**两码,处置不对称禁合并** —— 并发帽=**可等**(兄弟结束即有位)/ 会话累计帽=**等也没用**(这条会话的配额用尽))· `CONFIG_DELEGATION_ENTRY_CAPS`(同批入 `CONFIG_REFUSAL_CODES` 识别表)· `delegationCapDispositionOf` / `MCP_SERVER_REVOKED`(0.39.0 载体到货消费件:core 5.50.0 补 `{ error: code, code }` 孪生拼法后两码真上 `tool_end.errorCode`,0.38.0「先立词不落消费分支」的已知局限自此解除;处置轴 `wait-for-slot` / `reuse-existing-or-await-reap` 机器可读(累计帽=retained-window 帐,行回收配额即回,处置=SendMessage 复用,**非**「换会话/永久耗尽」——0.38.0 段该句系勘误),未知 `delegation.*` 码 ⇒ `undefined`;`mcp.server_revoked` = 操作员 mid-session 吊销 server 后的工具面本地闸(被吊销的 server **名**今天不过 wire 境:detail.server 是进程内位,抬升腿只 lift code——归因渲染候 core 补 typed detail,已点名);载体门 = engine-vocab G3 腿锚 core dist 铸点)· `CAPABILITY_SELF_ORCHESTRATION_REQUIRED`(S-81,server 7.57.0:提交面的 selfOrchestration 准入拒绝码。🔴 **复用码** —— 与其它 `capability.*` 501 同体形而处置不同,消费点必须按**恰等**判、绝不放宽成前缀判;判型与「去键重发一次」归 `src/selfOrchestrationDenial.ts`,详见 §13) · `GATE_PARKED_ERROR_CODE`(0.60.0:「门把这次调用 park 了」的机读码单源 —— `frameRouter` 的连坐/中断判据与 `gateOutcome.isGateParkedToolEnd` 读同一个常量;真机黑盒直证 park 短路帧上**没有 `gate`**,这个码是那一形唯一的信号,详见 §24c)| 三端分臂共用的**去字面化** `errorCode` 词表(病根正是三端各抄一份字面);编译期 verb 闭合门;搬迁补偿登记表 | `src/engineErrorCodes.ts`(计数以 `scripts/public-export-baseline.json` 为准,别手抄;A-028.11/.13 补 `DRAINING_ERROR_CODE`/`SCENARIO_NOT_ALLOWED_ERROR_CODE`/`RESUME_AT_ERROR_CODE_PREFIX`;#318 件④ 补 `delegation.*` 族四位 + `config.delegation_entry_caps`;0.39.0 补三新码消费件三位);S-81 补 `capability.self_orchestration_required` 一位;L-102 补 `resume.*` 时间性拒绝二码 + 闭集 `RESUME_RETRY_LATER_CODES` 三位)、`src/classifierVerdictWire.ts`、`src/compensations.ts`、`src/clientSlice.ts`;**0.67.0 补锚**(这三件的导出一直计在本域,而本表此前没有它们的锚行 —— 如实补上,不是搬家):`src/gateVocabulary.ts`(`GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail` + 🆕 `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`,详见 §32d)、`src/autoModeUnavailable.ts`(`AUTO_MODE_UNAVAILABLE_CAUSES` + 🆕 `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`;🔴 同批**删**`classifierUnavailableOf`/`classifierUnavailableDetail`,详见 §32b)、`src/classifierStatus.ts`(`CLASSIFIER_STATUS_STATES`/`classifierStatusOf`/`classifierStatusDetail`)|
177
177
 
178
178
  🔴 **`engineErrorCodes` 的开集纪律**(该文件头注逐字):这些 `ReadonlySet` / 前缀谓词一律是**识别表**,
179
179
  回答的是「我认不认得这个码」,**绝不是**「合法码只有这些」。消费点 `switch` **必须留 `default`**,
@@ -309,7 +309,7 @@ removal after the last running beat」。**按开集透传**(空串 / 非串 /
309
309
  **仍然被本层剥掉的四键**(`seq` / `taskType` / `parentTaskId` / `eventId`;0.65.0 起 `status` 已离开本表):
310
310
  - `taskType` / `parentTaskId` —— 在册的 §7 缺口 **P-1**;lane 归属今天改用 id 形状 /
311
311
  `workflowRunId` 启发式判(`src/adapt/arms.ts`)。
312
- - `seq` —— core #258 的 stop-cycle 代际号(复活即 +1)。fleet 面已有同轴的 `wireCycleSeq`(0.38.0),
312
+ - `seq` —— core #258 的 stop-cycle 代际号(复活即 +1)。fleet 面已有同轴的 `wireCycleSeq`(🔧 0.84.0 退出公面 —— 包内件;0.38.0),
313
313
  **tick 这条腿今天没有消费方** ⇒ 照旧剥。
314
314
  ⚠️ **就地订正(0.48.0)**:本条 0.47.0 的原文还写着「SDK 7.3.0 连声明都没有」—— sdk **7.4.0 已
315
315
  声明** `seq?: number`(与 `model` 同批)。**剥它的理由换了一条,但仍然剥**:准入条件从来是
@@ -614,7 +614,7 @@ pure 门 062⑥/⑦):
614
614
  | `delivery`(必填,恒 `"applied"`) | 非该值 ⇒ **整份 ack 不合形** | 同上 |
615
615
  | `decision`(必填,三词闭集) | 不在闭集 ⇒ **整份 ack 不合形** | 同上;端不得放宽成「是串就行」 |
616
616
  | `rememberApplied?: boolean` | **缺席 = 未知**(旧 server / void 注入面),**绝不当 false** | `=== false` 且本次是 `allow_session` ⇒ **必须响亮告知**:三选卡第 2 项在用户心里签的是「本会话这个工具不再问我」,server 说没记住而界面照渲「全放行」= 把没发生的授权渲成发生了。包内已发通知 `surfaceRememberNotApplied()`;端的义务 = **装 `HitlHostSurface` 口**(§5)+ **不要**在 `rememberApplied` 非 true 时渲「全放行」徽标 |
617
- | `updatedInputForwarded?: boolean` | **缺席 = 未知**,绝不当 false | `=== false` 且卡带了 `updatedInput` ⇒ **[high] 必须响亮告知**:用户把 `rm -rf /tmp/x` 改成 `rm -rf /tmp/x/build` 然后批准,而真正执行的是**改之前那条**。allow 已送达、事后**无 fail-closed 余地** ⇒ 唯一诚实处置是立刻响亮说出来(不是 debug 日志)。包内 `surfaceEditNotForwarded()` |
617
+ | `updatedInputForwarded?: boolean` | **缺席 = 未知**,绝不当 false | `=== false` 且卡带了 `updatedInput` ⇒ **[high] 必须响亮告知**:用户把 `rm -rf /tmp/x` 改成 `rm -rf /tmp/x/build` 然后批准,而真正执行的是**改之前那条**。allow 已送达、事后**无 fail-closed 余地** ⇒ 唯一诚实处置是立刻响亮说出来(不是 debug 日志)。包内 `surfaceEditNotForwarded()`(🔧 0.84.0 退出公面) |
618
618
  | `rulePersisted?: boolean`(sdk 6.14.0,#225) | **缺席 ≠ false**(未带 `persistRule` 的回决 / 旧 server 省略);非布尔降缺席 | 决定「规则存没存上」的诚实告知;透传坏形会说反话 |
619
619
  | `ruleRefusal?: string`(sdk 6.14.0) | 非串/空串 ⇒ 降缺席 | 规则被拒的归因(如 `rule_not_offered`)原样呈现,不改写 |
620
620
  | `noteRecorded?: boolean`(sdk 6.16.0,#229) | **缺席 ≠ false**(未带 `note` 的回决 / 老 server 省略);非布尔降缺席 | 发了 `note` 而 `!== true` ⇒ **debug 留痕即可,不惊动用户**:决断没丢,丢的只是理由的持久档(纯活卡无行可落 / 店抖但裁决照常生效 / 并发同决议先落行) |
@@ -623,7 +623,7 @@ pure 门 062⑥/⑦):
623
623
 
624
624
  **实现锚**:`src/hitl/toolApprovalWire.ts`(`readToolApprovalRespondAck` / `ToolApprovalFrameOutcome` /
625
625
  `surfaceToolApprovalFrameAndRespond` 的相关性门与三处 ack 消费分支)、
626
- `src/hitl/hitlHostSurface.ts`(`surfaceRememberNotApplied` / `surfaceEditNotForwarded` +
626
+ `src/hitl/hitlHostSurface.ts`(`surfaceRememberNotApplied` / `surfaceEditNotForwarded`〔后者 🔧 0.84.0 退出公面〕+
627
627
  两条测试锁字面 `REMEMBER_NOT_APPLIED_WARN_TEXT` / `EDIT_NOT_FORWARDED_WARN_TEXT`)。
628
628
 
629
629
  ### 4b. `note`(回决备注)的**发送**前置门 —— 与 ack 成对
@@ -840,8 +840,8 @@ persistRuleBatchOfferIndex !== undefined
840
840
  - 🔴 **只闸兑付,不闸展示**:batch offer 照旧上卡(`ApprovalCardRequest.ruleOffers` 字节不变),
841
841
  端可以渲、可以走**本地落规则**那条路(与 `ruleOffersReadOnly` 同姿势),只是这条 wire 兑付通道不开;
842
842
  - 🆕 🔴 **被丢掉的用户意图会经 `HitlHostSurface` 如实上屏** —— **两条,按原因分**:
843
- `surfaceRuleArmNotSent()` / `RULE_NOT_SENT_WARN_TEXT`(**能力位未确认**)与
844
- `surfaceRuleArmRejected()` / `RULE_NOT_SENT_REJECTED_WARN_TEXT`(这次选择**没过包内表核/互斥核**:
843
+ `surfaceRuleArmNotSent()`(🔧 0.84.0 退出公面)/ `RULE_NOT_SENT_WARN_TEXT`(**能力位未确认**)与
844
+ `surfaceRuleArmRejected()`(🔧 0.84.0 退出公面)/ `RULE_NOT_SENT_REJECTED_WARN_TEXT`(这次选择**没过包内表核/互斥核**:
845
845
  表外文本 / 坏下标 / 两臂同场 —— 成因通常是卡口实现的 bug,`hostLog('error')` 那条留痕照旧保留,
846
846
  两个受众两条通道)。🔴 **刻意不折成一条**:对用户的下一步建议不同(换台引擎/等探测 vs 换引擎
847
847
  也不会变)。以下纪律两条共用。前一条—— 与 `surfaceRememberNotApplied` 同族:人按下的是一个明确
@@ -860,9 +860,9 @@ persistRuleBatchOfferIndex !== undefined
860
860
 
861
861
  | 顺序 | 通知 | 说的是 |
862
862
  |---|---|---|
863
- | 1(先) | `surfaceRuleArmNotSent` / `surfaceRuleArmRejected` | 这次「不再询问」没存上 —— 下次还会问,**不影响这次跑的是什么** |
863
+ | 1(先) | `surfaceRuleArmNotSent` / `surfaceRuleArmRejected`(🔧 0.84.0 退出公面) | 这次「不再询问」没存上 —— 下次还会问,**不影响这次跑的是什么** |
864
864
  | 2 | `surfaceRememberNotApplied` | `allow_session` 没记住 —— 同族,范围大一点 |
865
- | 3(压轴) | `surfaceEditNotForwarded` | **工具正在用原始入参跑**(批的那份 ≠ 跑的那份)—— 唯一一条 [high] |
865
+ | 3(压轴) | `surfaceEditNotForwarded`(🔧 0.84.0 退出公面) | **工具正在用原始入参跑**(批的那份 ≠ 跑的那份)—— 唯一一条 [high] |
866
866
 
867
867
  ⚠️ 端若自己重排/合并这些通知,**必须保住这条不变量**:别用一条「规则没保存」把「你批的和正在跑的
868
868
  不是同一个东西」顶掉。端要是实现成**队列**(不顶替),三条都能看见,那更好。
@@ -938,15 +938,15 @@ durable park 腿走 `HitlBridge.decideTool(outcome, toolUseID, opts, preResolved
938
938
  | 事实 | 契约 |
939
939
  |---|---|
940
940
  | **D-1 两元组 verbatim 回显** | `boundCallId` + `boundInputHash` 逐字回显进 `decide`,**绝不本地重算 hash**(`bindingOf`)。409 ⇒ `HitlSafetyError('binding_mismatch')`,调用方**重新呈现,绝不自动重试**(一次 decide 绝不双act)。pure 门 B7 段对这两段做**字节级**断言,改一个字符就红 |
941
- | `reason` 上限 | 4096 字(包内常量,🔧 0.72.0 起不再导出);超限 server **413 `reason_too_large`**,丢的不是归因而是**整次决断**(413 ⇒ 决断没送达 ⇒ run 留 suspended)。包内 `denyReasonForWire(reason, tag)` 截断 + 留痕 |
942
- | 缺省拒因 | `DEFAULT_DENY_REASON = 'The user rejected this tool use'`(不带归因时逐字不变) |
941
+ | `reason` 上限 | 4096 字(包内常量,🔧 0.72.0 起不再导出);超限 server **413 `reason_too_large`**,丢的不是归因而是**整次决断**(413 ⇒ 决断没送达 ⇒ run 留 suspended)。包内 `denyReasonForWire`(🔧 0.84.0 退出公面)截断 + 留痕 |
942
+ | 缺省拒因 | `'The user rejected this tool use'`(包内常量,🔧 0.84.0 起不再导出;不带归因时逐字不变) |
943
943
  | **cancel vs deny(两动词,按意图选)** | 🔴 **按「你要停的是哪一样」选,不是按 run 的状态选**。`deny`(本节两条决断腿)= 否掉**这一道门**:决断送达后 run **继续**,模型拿到一条拒绝继续跑 —— 这是「不许它做这件事」。`runs.cancel` = 终结**整条 run**:server [868] 起对 `suspended` / `needs_review` 的 run **就地取消**(把待决 checkpoint 结清 + 行终态化,ack 带 `errorCode:"cancelled"`),这是「别跑了」。⚠️ **本行 0.36.0 前的原文是失真的**(SDK 7.1.0 已标 stale):它写的是「取消 suspended run 必须用 deny,绝不 `runs.cancel`(对 suspended run 会 409)」—— 照那句做会把「停」实现成「放它接着跑」(deny 只关掉一道门,run 照跑)。`cancel` 的 409 **今天只剩 lost CAS race**(待决门被并发决掉/过期 ⇒ 重读再试),**不再**是「suspended 一律 409」。判据锚 = 装机 SDK `dist/resources/runs.d.ts` 的 `cancel` JSDoc(常驻门 ⑦ 段对账,上游改说法当天红) |
944
944
  | 空作答 fail-loud | `answerQuestion` 三形一律抛 `HitlSafetyError('empty_answer')`、**一次 decide 都不发**:空 `answers[]` / 任一条 `selected[]` 为空 / 任一条 `header` 为空串。理由:`{answers:[]}` 在 wire 上另有确切含义(question 域 deny 的 NO_HUMAN 形),当 approve 发出去 = **拿 deny 的载荷冒充 approve** |
945
945
  | **回执** | ⚠️ `decideTool` / `answerQuestion` 的返回型是 **`Promise<unknown>`** —— 本包**不结构化读** durable `/decide` 的响应体,**没有** 4a 那样的 ack 消费层。见 §7b 缺口 **P-7**(不是 P-6:P-6 是 `compaction_outcome`) |
946
946
  | TOCTOU | 调用方若已经用 `findPendingForTask` 取过 pending 行(呈卡用的那一行),**必须**经 `preResolvedPending` 传进来 —— 否则本方法自己再 `approvals.list()` 一次,两次独立取数可能落在**不同的行**上(「人看到的行」≠「decide 解析的行」) |
947
947
 
948
948
  **实现锚**:`src/hitl/hitlBridge.ts`(`HitlBridge.decideTool` / `.answerQuestion` / `bindingOf` /
949
- `denyReasonForWire` / `HitlSafetyError` / `findPendingForTask`)。
949
+ `denyReasonForWire`(🔧 0.84.0 退出公面)/ `HitlSafetyError` / `findPendingForTask`)。
950
950
 
951
951
  ### 4e. `HitlSafetyError` 的判型契约(跨 realm / 双实例安全)
952
952
 
@@ -1160,7 +1160,7 @@ durable 审批行 `PendingCheckpoint.hasBidiControls` 随卡透传到 `ApprovalC
1160
1160
  | 位 | 缺席 / `false` 的后果 | 用户看得见什么 |
1161
1161
  |---|---|---|
1162
1162
  | `approvalDecisionNoteCapable` | 回决 `note` **整条不发** | 审计面没有拒因;屏上无变化 |
1163
- | `respondFreeFormRulesCapable` | **编辑臂** `persistRule` 整条不发(候选臂不受影响) | 人手改的规则没存上 ⇒ 包发 `surfaceRuleArmNotSent()` 通知 |
1163
+ | `respondFreeFormRulesCapable` | **编辑臂** `persistRule` 整条不发(候选臂不受影响) | 人手改的规则没存上 ⇒ 包发 `surfaceRuleArmNotSent()`(🔧 0.84.0 退出公面)那一条通知 |
1164
1164
  | `respondBatchRuleOffersCapable` | **批臂** `persistRuleBatchOfferIndex` 整条不发(offer 仍上卡) | 勾的合取批没存上 ⇒ 同一条通知 |
1165
1165
  | `windowIsCurrent` | 窗三键**不过境**到卡 | 卡上**没有倒计时**([4845]「卡挂着像活的」) |
1166
1166
 
@@ -1521,7 +1521,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
1521
1521
  | **P-35** | low | **`WIRE_NETWORK_ERROR_PATTERN` 与 web 的 `NETWORK_PATTERNS` 存在真实的**大小写敏感度分叉**(0.42.0 [C195] 行为对拍腿实测):本包整条基表带 `i` flag,而 web 的 errno 类 token(`ECONNREFUSED` / `ECONNRESET` / `ETIMEDOUT` / `EAI_AGAIN` / `ENOTFOUND` / `EHOSTUNREACH` / `ENETUNREACH` / `EPIPE` / `UND_ERR`)**逐条无 `i`** ⇒ 同一条小写 errno 文本,本包判 `transport`、web 判 `unknown` | `src/wireErrorTriage.ts`(`WIRE_NETWORK_ERROR_PATTERN`);对拍腿 = `scripts/run-client-core-pure-test.mjs` 的 `F3E-C195-web-parity` 条件腿 | 分叉**已登记并被门钉住**(登记表在对拍腿里,分叉消失即红、未登记的新分歧也红)。端今天照现状读即可;要收敛得两侧同批改 flags —— 这属跨仓一批,已按表态制上 C 板 |
1522
1522
  | **P-40** | med(能力位模型;**系统性、非本批引入**——`approvalDecisionNote`/`respondFreeFormRules` 自 0.29.0/0.42.0 起同形) @cli @web @desktop | 🆕 **能力位是 per-baseUrl 的布尔缓存,不与「出这条帧的副本」或「收 respond 的副本」绑定**(异源对抗复审六轮 [medium] 登记)。`engineCapTrue(baseUrl, key)` 答的是「这个地址上次探到什么」——引擎温切 / 滚动升级 / 多副本代理下,一个 `true` 可以来自 7.46 实例而 respond 落到 ≤7.45 实例。后果按位不同:`note` 被静默忽略(无害);**编辑臂/批臂**会被老解析器**响亮 400 且连决断一起拒** ⇒ 人按下的 allow 落不了地,退化成 `unresolved`/TTL 自决。⚠️ ⇒ 「能力位闸让老引擎**零受迫**」这句话的正确形是「**在能力读数与实际 responder 一致的前提下**零受迫」,本档 §4b-2/§4b-3 的措辞已按此订正 | `src/engineCapsCache.ts`(per-baseUrl 缓存 + `invalidateEngineCaps(baseUrl, probe?)`)· `src/hitl/toolApprovalWire.ts`(`ToolApprovalFrameLaneOpts` 三个能力位的闸) | 端的现有缓解:①引擎 respawn/restart 后**必须**调 `invalidateEngineCaps(baseUrl, probe?)`(推荐两参形:推进代际 + 注册新探测在同一同步块内完成);②滚动升级窗口内宁可把两个规则能力位按 `false` 供给(丢持久臂 + 一条诚实通知,远好于把决断打掉)。🔴 正位解需要**上游给出 per-responder 的能力证明**(回执/帧上带副本代际或集群最低能力),或让 server 保证这类 400 对决断**零副作用**(那样客户端可以去掉批臂重送原决断)—— 按接入文档宪法向 server 点名,属跨仓设计件 |
1523
1523
  | **P-39** | ✅ **已解**(server 7.48.0 到货,client-core 本批消费) @cli @web @desktop | **上游已补 additive 归属锚 `persistedRuleAnchors`** —— 兑付回执(respond 200 体,**非帧**)上每条落地规则带 `{offerIndex, memberIndex, rule}`(直证:engine 7.48.0 fixture `@sema-agent/server/dist/tool-approval.js:1360` park 迟到腿 / `:1461` live 腿两处铸点)。本包据它把批臂相关性从**基数**升级到**身份**:锚的 `offerIndex` 必须等于这一次真发出去的 `persistRuleBatchOfferIndex`、`memberIndex` 必须落在所选 offer 的成员范围内 ⇒ 原登记里「条数对但内容是另一批规则」那一形**从此抓得到**。🔴 **三态不是两态**(本批对抗复审 [high] 采纳):「键真缺席」(≤7.47 老引擎)才让位基数门;**「键在场但坏形」绝不让位** —— 否则一份「另一只 offer + 条数恰好相同 + 故意发坏锚」的回执可精确绕过身份门。判据取 **wire 上键在不在**,不取窄化产物在不在 | `src/hitl/toolApprovalWire.ts`(`ToolApprovalRespondAckView.persistedRuleAnchors` + `readPersistedRuleAnchors` 整只判形 + `surfaceToolApprovalFrameAndRespond` 臂相关性门的 absent/valid/invalid 三态)· 行为钉:`run-hitl-gate-honesty-test.mjs` F14 件1(正控/另一只 offer 负控/memberIndex 越界负控/老引擎兼容/**坏形绕过反测**)、`run-rules-side-test.mjs` G8(读口整只判形十格) | 端**可以**渲「你选的那批里的 N 条」了 —— 但**只在锚到位且核得住时**;锚缺席(老引擎)仍须回落原口径「**引擎报告**落盘的规则」,绝不声称「就是你选的那批」。cli 半场参照实现 = `persistedRulesWire.ts` `persistedNoticeText`(三合取:注入面交了 `batchOfferIndex` ∧ 锚过判形 ∧ `offerIndex` 对得上,任一不满足即退回保守句) |
1524
- | **P-38** | med(集成面;**存量、非本批引入** —— 0.42.0 基线 `4c364c1` 上逐字相同) @cli @web @desktop | 🆕 **标准帧路由丢弃 `ToolApprovalFrameOutcome` 的诊断/回显面**:`routeToolApprovalFrame`(`src/hitl/frameRouter.ts`)对 `surfaceToolApprovalFrameAndRespond` 的产物**只解构 `decision`**,`ack` 与 `respondRefusal` 整段丢掉;`AskGateWireDeps` 上也没有 outcome sink。⇒ 走**标准集成面**(`runStream` → frameRouter)的端读不到:① 0.42.0 #225 件5 的 `respondRefusal`(server 响亮 400 / `edit-rejected` 拒句)② 0.43.0 #334 的 `persistedRule` / `persistedRules` 规范文本回显。⚠️ 两个**更重**的安全位不在此列 —— `rememberApplied:false` / `updatedInputForwarded:false` 由 `toolApprovalWire` 就地经 `HitlHostSurface` 投递(`surfaceRememberNotApplied` / `surfaceEditNotForwarded`),**不经**本路由,所以那两条告知照常到达。⚠️ 端若**自己直调** `surfaceToolApprovalFrameAndRespond`(cli 的 `approvalStreamWire` 卡腿即是)则拿得到完整 outcome,本条只约束走 frameRouter 那条路 | `src/hitl/frameRouter.ts`(`const { decision } = await surfaceToolApprovalFrameAndRespond(...)`)· `src/hitl/toolApprovalWire.ts`(`ToolApprovalFrameOutcome` 的三位产物) | 端**不要**假定「包返回了这一位 ⇒ 标准路由上就能读到」:走 frameRouter 的端今天拿不到规则回显与拒句,渲「你的规则已存为 X」/「引擎说:…」必须先确认自己走的是哪条调用点。🔴 正位解在包侧(给 frameRouter / `AskGateWireDeps` 补一个 outcome 回执端口,或把规则回显与拒句经 `HitlHostSurface` 就地投递,与 `rememberApplied` 同姿势),属**行为面 + 三端接线**的独立设计件,按 [C162] 令④ 回 C 板提 |
1524
+ | **P-38** | med(集成面;**存量、非本批引入** —— 0.42.0 基线 `4c364c1` 上逐字相同) @cli @web @desktop | 🆕 **标准帧路由丢弃 `ToolApprovalFrameOutcome` 的诊断/回显面**:`routeToolApprovalFrame`(`src/hitl/frameRouter.ts`)对 `surfaceToolApprovalFrameAndRespond` 的产物**只解构 `decision`**,`ack` 与 `respondRefusal` 整段丢掉;`AskGateWireDeps` 上也没有 outcome sink。⇒ 走**标准集成面**(`runStream` → frameRouter)的端读不到:① 0.42.0 #225 件5 的 `respondRefusal`(server 响亮 400 / `edit-rejected` 拒句)② 0.43.0 #334 的 `persistedRule` / `persistedRules` 规范文本回显。⚠️ 两个**更重**的安全位不在此列 —— `rememberApplied:false` / `updatedInputForwarded:false` 由 `toolApprovalWire` 就地经 `HitlHostSurface` 投递(`surfaceRememberNotApplied` / `surfaceEditNotForwarded`〔后者 🔧 0.84.0 退出公面〕),**不经**本路由,所以那两条告知照常到达。⚠️ 端若**自己直调** `surfaceToolApprovalFrameAndRespond`(cli 的 `approvalStreamWire` 卡腿即是)则拿得到完整 outcome,本条只约束走 frameRouter 那条路 | `src/hitl/frameRouter.ts`(`const { decision } = await surfaceToolApprovalFrameAndRespond(...)`)· `src/hitl/toolApprovalWire.ts`(`ToolApprovalFrameOutcome` 的三位产物) | 端**不要**假定「包返回了这一位 ⇒ 标准路由上就能读到」:走 frameRouter 的端今天拿不到规则回显与拒句,渲「你的规则已存为 X」/「引擎说:…」必须先确认自己走的是哪条调用点。🔴 正位解在包侧(给 frameRouter / `AskGateWireDeps` 补一个 outcome 回执端口,或把规则回显与拒句经 `HitlHostSurface` 就地投递,与 `rememberApplied` 同姿势),属**行为面 + 三端接线**的独立设计件,按 [C162] 令④ 回 C 板提 |
1525
1525
  | **P-37** | low(镜像面) @cli @web @desktop | 🆕 **`tool_approval_complete.parked` 已进键镜像,但本包零消费**(0.43.0 同形族扫的产物,#329 server 7.44.0 及更早就在场)。它是 `outcome:"expired"` 一词三义(park / 当场 deny / 无设施 deny)里 **park 那一义的显式判别位**:在场 ⇔ 这条 ask 按 park 路由收尾且墓碑已落(同一把 `approvalId` 仍可走迟到受理)。本包今天只把它镜像进 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` + 类型,**没有**任何消费面 —— 因为它只长在 `tool_approval_complete` 上,而那种帧根本不进卡口(`surfaceToolApprovalFrameAndRespond` 消费的是 `tool_approval`) | `src/hitl/toolApprovalWire.ts`(`ToolApprovalFrame.parked` 声明 + 镜像项,两处 JSDoc 写明理由)· `scripts/run-approval-frame-keys-test.mjs` 的 `AHEAD_OF_ANCHOR` 登记 | 端今天**不要**指望包把「卡失效」改渲成「已转后台候批」——那条投影还没有。🔴 **缺席禁读作「真 deny」**:无店部署 / deny 政策 / 被连坐 VOID 的兄弟都发不出这个键,缺席只是「无 park 证据」。要把它变成一条真投影是**行为面**改动(消费者 = 端的完成帧处理面),按 [C162] 令④ 回 C 板提 |
1526
1526
  | **P-36** | low | **中断文案归一只覆盖 `Operation aborted` 这一串**(#323 症状②,0.43.0;clay 裁定的**明确边界**,不是漏做):同一次用户中断里,**执行前被连坐**的旁观者拿的是 core 的另一串 `operation aborted before execution`,`interrupted_never_started` 族又是第三种;这两族**刻意不并入**中断改写臂 —— core 显式拒绝合并两串向([4973]),两串各承真语义(`Operation aborted` = 执行中被中止 / 该串 = 从未执行),而且它们**各有自己的文案与折叠腿**(端侧的 interrupted-batch 折叠 + 包内 tool_end 中止码词表,🔧 0.72.0 起该词表不再导出)。⇒ 纯取消批里,那两族的 tool_end 今天仍按各自原文呈现 | `src/hitl/frameRouter.ts`(`isUserInterruptRewritable` 的判据①头注 + `isEngineAbortToolEnd` 的两串族说明)· 负控 = `scripts/run-hitl-gate-honesty-test.mjs` F13-d | 端**不要**假定「用户中断 ⇒ 这一批 tool_end 文案全是 CC 中断串」;两族按各自既有腿归因(机读码优先,文案兜底)。要不要并成一形是**语义裁定**不是实现细节,需 clay 先裁 |
1527
1527
  | **P-34** | low | **编辑臂预检判官在浏览器 lane 结构上装不了**(#225 / [5076],0.42.0):`precheckEditedRuleText` 的唯一合法实参是 core 5.57.0 那只纯函数,而 `@sema-agent/core` 的 barrel 值级拉 `node:crypto`/`node:fs`/`node:path` —— 本包**不能**做 value 级 re-export(portability 门 `EXPECTED_PACKAGES_INDEX` 等值门 + esbuild 浏览器腿双重否决,施工时实打验证) | `src/hitl/editedRuleTextPrecheck.ts`(模块头注的「为什么是端口注入」段) | Node 宿主(TUI / desktop 主进程)装上即得内联即时校验;**浏览器 lane 留缺席走「提交后才知道」的往返形**,这是设计不是漏装。🔴 缺席**不可**据以判断部署形态 |
@@ -1541,7 +1541,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
1541
1541
  | **P-12** | low | canonical 重呈短路臂**沿用 arm responder** ⇒ `ReopenPlanReviewOpts.deliverDecision` 注入口**不生效**(成文例外 + debug 留痕) | `src/hitl/planReviewWire.ts`(`mintFreshQuestionId:false` 分支) | 任何**包装决断投递**的端(重试/退避/上屏定序,cli 的 `decideRetry` 是参照)必须走默认 `mintFreshQuestionId` 臂 —— 否则你的包装被静默旁路,跑的是裸 `decidePlanReview` 的 fire-and-forget |
1542
1542
  | **P-13** | 成文局限(不改行为) | 默认键下的 own-run 归属缺省腿是**进程级**证据,**不区分同一宿主进程内的会话代际** —— `/clear` 前登记的 run 在新会话语境下**仍判 owned**。最坏后果逐字:`用户看到自己旧会话的审批卡` | `src/hitl/parkOwnership.ts`(`ParkOwnershipDeps.isOwnRun` JSDoc);`docs/REFACTOR-LEDGER.md` 记为**驳为成文局限** | 多会话端必须**自注入**会话粒度的 `isOwnRun`;或传非默认 `sessionKey` 并接受缺省腿被整条跳过(代价 = 多一次诚实的 reopen-failed) |
1543
1543
  | **P-14** | high(打包面) | `activeReopenResponders` 的**单活纪律是 module 单例**:两份实例 ⇒ 各退各的,跨份的旧卡退役不掉 —— **退化回修复前的重复活卡形** | `src/hitl/planReviewWire.ts`(`activeReopenResponders`,singleton-manifest 在册) | 见 §8-G:必须保证 bundle 里只有**一份** `@sema-agent/client-core` |
1544
- | **P-31** | 🟡 **部分已解**(0.45.0 / design/285 批 0+1+2+3 落地;残余**一族三格**如实留册) @cli @web @desktop | **已解的半场:fleet 面的会话锚整条换 per-key,而且从写入一直贯到读侧出站。**①开流参数:keyed 宿主的唯一正身 = `createFleetLedger(hooks,{sessionKey}).issueStream()` 发的 **ingress** —— 它在开流那一刻**一次性捕获** `{sessionKey, session, epoch}`,且**帧只能经它进入 ledger**(module 级 `fleetStreamOptions()` / `fleetSnapshotOptions()` 原样保留、语义不动,供单会话默认槽宿主继续用;**刻意不加 `*For` 兄弟**——module 级 keyed helper 与 ledger 的绑定状态互不可见,它测的是「你调了哪个 helper」而不是「流按哪个 key 开」)。重连 = 新 ingress + epoch+1,旧 ingress 的迟到帧丢弃并计 `droppedStaleIngress`;一次性快照走 `issueSnapshot()` + `applySnapshot(await client.fleet.snapshot(...))`(SDK 那只 verb 回的是 `{tasks, workflows}` **不是帧**,帧形在库内合成一处)。**单锚不变量**:一本 ledger 任一时刻只有一个会话锚、且账里的内容属于那个锚 —— stream 模式下 snapshot **继承** stream 的捕获、`issueStream()` **作废**在飞的 snapshot、**换会话必清内容**(stream 与 snapshot-only 两条车道同一套;同会话重连内容一行不清,R7 保住)、**换连接必清连接级 meta**(那四位是 fail-open 方向的连接信任位,沿用 = 重连落到降级节点时广播行被投影、foreign 通知绕过归属门)、`close()` 真的退出流模式;另有**快照顺序令牌**:快照发放后流又落过帧即判过期丢弃,绝不把更新的行 REPLACE 回旧值。②`ownByRoot` 的比对锚换成**本 ledger 的会话锚**(经 ingress ⇒ 该 ingress 的不可变捕获;兼容入口 ⇒ `engineSessionParamFor(sessionKey)` 现读)。⇒ keyed 宿主**自己的**通知不再被判 foreign 丢掉,且带**别人会话**锚的通知按方向判 foreign。③**owner 台账三值原子写**(批 2):两条 fleet 登记腿(行帧 / bg 通知)把 `{runId, sessionId, sessionKey}` **同条**写进 `SubagentOwnerRecord` —— 值取**本 ingress 开流那一刻的不可变捕获**,不是每帧现读某个可变槽(逐帧现读会把重连后旧流的迟到帧写成「旧 runId + 新会话」,那正是 `recordSubagentOwnerFromProgress` 头注明令禁止的错组合;ingress 的 epoch 闸让旧代际的帧根本进不来)。兼容入口 `ledger.applyFrame` 归属不可知 ⇒ 两个新位一个都不写(与 0.44.0 逐字同);同 `runId` 上**缺席不覆盖在场**、`runId` 真变了两位一起丢;同 `runId` 上换会话**不静默** —— 计数与四元组走读口 `subagentOwnerSessionConflicts()`(恒应为 0)。④**读侧全路径按槽取**(批 3):`resolveOwnerContext(childTaskId)` 一次读给出 `{record, runId, key}`,五个取址点(tail / subagentOutput / taskOutput / taskStop / delegatedPrompt)的 **baseUrl / token / principal 一律取 `engineWireTargetFor(owner.sessionKey ?? DEFAULT_SESSION_KEY)`**,不再是零参默认槽;caps 门(`engineTaskHandlesCapable(sessionKey)`)与 `?session=` 同槽。🔴 **BEHAVIOR CHANGE(默认槽也变)**:tail / subagentOutput / taskOutput / taskStop 四条读面的 `?session=` 改为**会话二态** —— 行登记时捕到了会话就用**行的**会话,缺才退本槽现势会话(与 steer 腿既有口径统一)。tick 腿**今天就在默认槽写 `sessionId`**,所以「会话轮换后读旧行」此前是拿现势会话打一条 session-bound 的旧 run = 确定性 404,现在自洽。⑤plan 决策链两处(`armPlanReviewApproval` / `decidePlanReview`)**显式豁免本批**:整条 plan_review HITL 链(卡注册 / 退役 / responder 台账)今天是默认槽单会话形,只换 wire target 会造出「按默认槽立卡、按 keyed 槽发决断」的半 keyed 形,比现状更坏 —— 整条链同批转 keyed 是 additive 公开面改动,归后续工单;现状由常驻钉 `B3-P31/G18b` 两向钉住。🔴 **豁免不等于没有后果,后果如实登记(异源对抗复审 [high] 采纳的半场)**:①**keyed-only 宿主**(只装了 `installEngineWireTargetFor(key, …)`、默认槽为空)上 `armPlanReviewApproval()` 恒返 `false` ⇒ 一条 park 在 `plan_review` 的 run **没有审批入口**,只能等窗口到期/走别的路;②**keyed + 默认槽都装**的宿主上,卡与决断都走**默认槽**的 baseUrl/token/principal —— 与那条 park 住的 run 所属的槽可能不是同一台。⇒ 多会话宿主在 plan-mode 上**今天不可用**,不是「有一点瑕疵」;要用就等整条链转 keyed 的那一批。<br>🔴 **残余(不许读成已闭合)—— 一族三格,同根因同根治**:根因 = **连接级的零内容自校信任位**。宿主把 A 流喂进 B 的 ingress 时,ingress **证明不了帧的来源连接**,而这两位只读 meta、不比对任何会话值:①**通知臂** `server_fail_closed`(meta `bgNotifyFailClosed` ∧ `sessionScoped`)⇒ 在 keyed ledger 上**恒封顶为** `session_anchor_untrusted`;②**行帧车道**的 `sessionScoped` 让位(`ownTaskRow`/`ownWorkflowRow` 命中即整条放行,[1510] 既有裁定)⇒ 同样会让一条被误接的流的行在本键 ledger 上无条件投影。③**`hook_notice` 分发**:`FleetLedgerHooks.onHookNotice(frame, sessionScoped)` 的第二参交出去的就是那一位,回调**既不带锚也不带 evidence** ⇒ 一条被误接的 A 流报 `sessionScoped=true` 时,A 的「本轮守卫未能评估」会带着「已按会话过滤」这句话进 B 的宿主面,端无从自裁(纯 observe 帧,不改状态)。本批**刻意不封顶行帧车道、也不改 `onHookNotice` 签名**(①都非本批引入;②根治与通知臂同一个;③擅自封顶会让已正确接线的 keyed 宿主的行凭空消失,而 additive 第三参是另一批的公开面决定),现状由常驻钉 `B3-P31/R4a`(行帧)与 `B3-P31/R9a`(hook_notice)钉住。唯一真根治 = **上游在 fleet `meta` 帧上 additive 回显本连接的 session id**、本端校验相等 —— **一次修好三条通道**(按 Wire 能力显式表态制单独立项 @server @sdk;本包**不阻塞**) | `src/engineSessionParam.ts`(`engineSessionParamFor`)· `src/fleet/fleetLedger.ts`(`FleetIngress` / `issueStream` / `issueSnapshot` / `ownByRoot` 换锚 / 按臂拆分的可信谓词 / `FleetLedgerStatus` 的 `sessionAnchor`·`sessionAnchorEpoch`·`droppedStaleIngress` / 两条登记腿的三值原子写)· `src/subagentContentStore.ts`(`SubagentOwnerRecord.sessionKey` / `recordBgParentRun` 第四参 / `subagentOwnerSessionConflicts`)· `src/subagent/engineSubagentResume.ts`(`resolveOwnerContext`)· `src/subagent/{engineSubagentTail,engineSubagentOutput,engineSubagentSteer,engineTaskHandleWire,engineDelegatedPrompt,engineRowStopGate,engineCompactWire}.ts` · `docs/INTEGRATION-CLIENTS.md` §6d | 单会话宿主(cli 及今天的三端)**逐字节零受迫** —— 默认槽两条会话级臂与开流参数都与 0.32.0 同,兼容入口 `ledger.applyFrame` 语义不动。**keyed 多会话宿主**:①每键装齐 `installHostFor(key,{session})`(漏装 ⇒ 锚为空,两臂都不解封,`hostPortMissesFor(key)` 会点名);②`issueStream()` 开流、**帧只经 `ingress.applyFrame`**,重连即重开 ingress;③明白 `server_fail_closed` 在 keyed 上**仍封顶**,拿它做有副作用的事(落库/翻卡/跨会话搬运)前按非证据档自裁 |
1544
+ | **P-31** | 🟡 **部分已解**(0.45.0 / design/285 批 0+1+2+3 落地;残余**一族三格**如实留册) @cli @web @desktop | **已解的半场:fleet 面的会话锚整条换 per-key,而且从写入一直贯到读侧出站。**①开流参数:keyed 宿主的唯一正身 = `createFleetLedger(hooks,{sessionKey}).issueStream()` 发的 **ingress** —— 它在开流那一刻**一次性捕获** `{sessionKey, session, epoch}`,且**帧只能经它进入 ledger**(module 级 `fleetStreamOptions()` / `fleetSnapshotOptions()` 原样保留、语义不动,供单会话默认槽宿主继续用;**刻意不加 `*For` 兄弟**——module 级 keyed helper 与 ledger 的绑定状态互不可见,它测的是「你调了哪个 helper」而不是「流按哪个 key 开」)。重连 = 新 ingress + epoch+1,旧 ingress 的迟到帧丢弃并计 `droppedStaleIngress`;一次性快照走 `issueSnapshot()` + `applySnapshot(await client.fleet.snapshot(...))`(SDK 那只 verb 回的是 `{tasks, workflows}` **不是帧**,帧形在库内合成一处)。**单锚不变量**:一本 ledger 任一时刻只有一个会话锚、且账里的内容属于那个锚 —— stream 模式下 snapshot **继承** stream 的捕获、`issueStream()` **作废**在飞的 snapshot、**换会话必清内容**(stream 与 snapshot-only 两条车道同一套;同会话重连内容一行不清,R7 保住)、**换连接必清连接级 meta**(那四位是 fail-open 方向的连接信任位,沿用 = 重连落到降级节点时广播行被投影、foreign 通知绕过归属门)、`close()` 真的退出流模式;另有**快照顺序令牌**:快照发放后流又落过帧即判过期丢弃,绝不把更新的行 REPLACE 回旧值。②`ownByRoot` 的比对锚换成**本 ledger 的会话锚**(经 ingress ⇒ 该 ingress 的不可变捕获;兼容入口 ⇒ `engineSessionParamFor(sessionKey)` 现读)。⇒ keyed 宿主**自己的**通知不再被判 foreign 丢掉,且带**别人会话**锚的通知按方向判 foreign。③**owner 台账三值原子写**(批 2):两条 fleet 登记腿(行帧 / bg 通知)把 `{runId, sessionId, sessionKey}` **同条**写进 `SubagentOwnerRecord` —— 值取**本 ingress 开流那一刻的不可变捕获**,不是每帧现读某个可变槽(逐帧现读会把重连后旧流的迟到帧写成「旧 runId + 新会话」,那正是 `recordSubagentOwnerFromProgress` 头注明令禁止的错组合;ingress 的 epoch 闸让旧代际的帧根本进不来)。兼容入口 `ledger.applyFrame` 归属不可知 ⇒ 两个新位一个都不写(与 0.44.0 逐字同);同 `runId` 上**缺席不覆盖在场**、`runId` 真变了两位一起丢;同 `runId` 上换会话**不静默** —— 计数与四元组走读口 `subagentOwnerSessionConflicts()`(恒应为 0)。④**读侧全路径按槽取**(批 3):`resolveOwnerContext(childTaskId)`(🔧 0.84.0 退出公面)一次读给出 `{record, runId, key}`,五个取址点(tail / subagentOutput / taskOutput / taskStop / delegatedPrompt)的 **baseUrl / token / principal 一律取 `engineWireTargetFor(owner.sessionKey ?? DEFAULT_SESSION_KEY)`**,不再是零参默认槽;caps 门(`engineTaskHandlesCapable(sessionKey)`)与 `?session=` 同槽。🔴 **BEHAVIOR CHANGE(默认槽也变)**:tail / subagentOutput / taskOutput / taskStop 四条读面的 `?session=` 改为**会话二态** —— 行登记时捕到了会话就用**行的**会话,缺才退本槽现势会话(与 steer 腿既有口径统一)。tick 腿**今天就在默认槽写 `sessionId`**,所以「会话轮换后读旧行」此前是拿现势会话打一条 session-bound 的旧 run = 确定性 404,现在自洽。⑤plan 决策链两处(`armPlanReviewApproval` / `decidePlanReview`)**显式豁免本批**:整条 plan_review HITL 链(卡注册 / 退役 / responder 台账)今天是默认槽单会话形,只换 wire target 会造出「按默认槽立卡、按 keyed 槽发决断」的半 keyed 形,比现状更坏 —— 整条链同批转 keyed 是 additive 公开面改动,归后续工单;现状由常驻钉 `B3-P31/G18b` 两向钉住。🔴 **豁免不等于没有后果,后果如实登记(异源对抗复审 [high] 采纳的半场)**:①**keyed-only 宿主**(只装了 `installEngineWireTargetFor(key, …)`、默认槽为空)上 `armPlanReviewApproval()` 恒返 `false` ⇒ 一条 park 在 `plan_review` 的 run **没有审批入口**,只能等窗口到期/走别的路;②**keyed + 默认槽都装**的宿主上,卡与决断都走**默认槽**的 baseUrl/token/principal —— 与那条 park 住的 run 所属的槽可能不是同一台。⇒ 多会话宿主在 plan-mode 上**今天不可用**,不是「有一点瑕疵」;要用就等整条链转 keyed 的那一批。<br>🔴 **残余(不许读成已闭合)—— 一族三格,同根因同根治**:根因 = **连接级的零内容自校信任位**。宿主把 A 流喂进 B 的 ingress 时,ingress **证明不了帧的来源连接**,而这两位只读 meta、不比对任何会话值:①**通知臂** `server_fail_closed`(meta `bgNotifyFailClosed` ∧ `sessionScoped`)⇒ 在 keyed ledger 上**恒封顶为** `session_anchor_untrusted`;②**行帧车道**的 `sessionScoped` 让位(`ownTaskRow`/`ownWorkflowRow` 命中即整条放行,[1510] 既有裁定)⇒ 同样会让一条被误接的流的行在本键 ledger 上无条件投影。③**`hook_notice` 分发**:`FleetLedgerHooks.onHookNotice(frame, sessionScoped)` 的第二参交出去的就是那一位,回调**既不带锚也不带 evidence** ⇒ 一条被误接的 A 流报 `sessionScoped=true` 时,A 的「本轮守卫未能评估」会带着「已按会话过滤」这句话进 B 的宿主面,端无从自裁(纯 observe 帧,不改状态)。本批**刻意不封顶行帧车道、也不改 `onHookNotice` 签名**(①都非本批引入;②根治与通知臂同一个;③擅自封顶会让已正确接线的 keyed 宿主的行凭空消失,而 additive 第三参是另一批的公开面决定),现状由常驻钉 `B3-P31/R4a`(行帧)与 `B3-P31/R9a`(hook_notice)钉住。唯一真根治 = **上游在 fleet `meta` 帧上 additive 回显本连接的 session id**、本端校验相等 —— **一次修好三条通道**(按 Wire 能力显式表态制单独立项 @server @sdk;本包**不阻塞**) | `src/engineSessionParam.ts`(`engineSessionParamFor`)· `src/fleet/fleetLedger.ts`(`FleetIngress` / `issueStream` / `issueSnapshot` / `ownByRoot` 换锚 / 按臂拆分的可信谓词 / `FleetLedgerStatus` 的 `sessionAnchor`·`sessionAnchorEpoch`·`droppedStaleIngress` / 两条登记腿的三值原子写)· `src/subagentContentStore.ts`(`SubagentOwnerRecord.sessionKey` / `recordBgParentRun` 第四参 / `subagentOwnerSessionConflicts`)· `src/subagent/engineSubagentResume.ts`(`resolveOwnerContext` 🔧 0.84.0 退出公面)· `src/subagent/{engineSubagentTail,engineSubagentOutput,engineSubagentSteer,engineTaskHandleWire,engineDelegatedPrompt,engineRowStopGate,engineCompactWire}.ts` · `docs/INTEGRATION-CLIENTS.md` §6d | 单会话宿主(cli 及今天的三端)**逐字节零受迫** —— 默认槽两条会话级臂与开流参数都与 0.32.0 同,兼容入口 `ledger.applyFrame` 语义不动。**keyed 多会话宿主**:①每键装齐 `installHostFor(key,{session})`(漏装 ⇒ 锚为空,两臂都不解封,`hostPortMissesFor(key)` 会点名);②`issueStream()` 开流、**帧只经 `ingress.applyFrame`**,重连即重开 ingress;③明白 `server_fail_closed` 在 keyed 上**仍封顶**,拿它做有副作用的事(落库/翻卡/跨会话搬运)前按非证据档自裁 |
1545
1545
 
1546
1546
  ### 7d. 请求面与其它在册件
1547
1547
 
@@ -1688,7 +1688,7 @@ reason 里写明「枚举器盲区形」。已知两形:
1688
1688
 
1689
1689
  **E. 上行与回执(§4,最容易漏)**
1690
1690
  - [ ] 请求一律经 `buildTaskRequest(input, lane)`,**不自拼字面量**;上 wire 前过 `unregisteredRequestKeys(req, lane)`
1691
- - [ ] 接审批帧腿时**填 `AskGateWireDeps.approvalLane` 的四位**(0.43.0 起不再是 note-only):`approvalDecisionNoteCapable`(缺席 = `note` 恒不发)· `respondFreeFormRulesCapable`(缺席 = **编辑臂**整条不发)· `respondBatchRuleOffersCapable`(缺席 = **批臂**整条不发)· `windowIsCurrent`(缺席 = 卡上**无倒计时**)。**全部 fail-closed 且不报错**;两条规则臂被丢时包会发 `surfaceRuleArmNotSent()`(要看得见得先装 `HitlHostSurface` 口)。逐位后果表见 §5b 的供给链段,新鲜度纪律见 §7 **P-40**
1691
+ - [ ] 接审批帧腿时**填 `AskGateWireDeps.approvalLane` 的四位**(0.43.0 起不再是 note-only):`approvalDecisionNoteCapable`(缺席 = `note` 恒不发)· `respondFreeFormRulesCapable`(缺席 = **编辑臂**整条不发)· `respondBatchRuleOffersCapable`(缺席 = **批臂**整条不发)· `windowIsCurrent`(缺席 = 卡上**无倒计时**)。**全部 fail-closed 且不报错**;两条规则臂被丢时包会发 `surfaceRuleArmNotSent()`(🔧 0.84.0 退出公面)那一条通知(要看得见得先装 `HitlHostSurface` 口)。逐位后果表见 §5b 的供给链段,新鲜度纪律见 §7 **P-40**
1692
1692
  - [ ] ack 五位按 §4a 三列表消费:**缺席一律当未知**,`rememberApplied === false` 与 `updatedInputForwarded === false` 必须响亮告知
1693
1693
  - [ ] durable 腿:`decideTool` 前把**呈卡用的那一行** pending 经 `preResolvedPending` 传进去(TOCTOU)
1694
1694
  - [ ] durable 腿:**按意图**选动词 —— 否掉这一道门用 **deny**(run 继续),终结整条 run 用 **`runs.cancel`**(server [868] 起对 suspended/needs_review 就地取消;409 只剩 CAS race)。⚠️ 0.36.0 修:原行写的「取消 suspended 必须用 deny、绝不 cancel」已被 SDK 7.1.0 标 stale,详见 §4 「cancel vs deny」行
@@ -9614,6 +9614,225 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
9614
9614
 
9615
9615
  **包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(CC-100)—— 方案候拍板(dist 去注释 vs 手清),0.77.2 · ② `DeniedBy` 第十词 `read_boundary` / `teamName` / `stillLive` 三词随 sdk 10 型面在 0.78.0 吸收(CC-106)· ③ `capabilities.mcpProbe` 候 core 7.26.0 #951 → server 7.93.0(CC-74)。
9616
9616
 
9617
+ ## §107 🆕 0.84.0(2026-09-27)sdk 12.0.1 地板 + 后台代理登记读数(缺席行下半场)+ 读目录授权结论通告读口 + 接线回执 `hands` 段 + 陈旧逻辑清扫(退役键 `rewindFiles` 拒收 · `agentCount` 可选 · 26 个内部件退出根入口 · 九张判定表换只读 Set 子类 · 十五张判定数组冻结 · `resume_at` 文本腿退役)(🔴 minor;peer sdk 地板 `>=11.3.0` → `>=12.0.1`;型面 BREAKING 两处〔`SeamRewindSpec.rewindFiles` 删 / `WorkflowRunState.agentCount` 改可选〕;根公面运行期导出 1278 → 1260〔+8 −26〕;公面类型 +10;`WiringManifestView` / `WiringManifestChromeEvent` 各 +1 可选键 `hands`;超集键 +1 `_sema_hands`;开发依赖引擎 `~7.33.1` 不变)
9618
+
9619
+ > **minor**,原因三条:peer 地板跨到 sdk 12(本包按 12.x 才有的声明编译);型面 BREAKING 两处与 26 个内部件退出根入口;一处运行期拒收(`rewind.rewindFiles` 构造期抛)与一处运行期行为面(九张判定表换成只读 Set 子类,严格深比较 / `constructor` 可见)。五件同发(本节按 0.84.0 的读法写;若与本版发布帖不一致,以发布帖为准):
9620
+ > ① **后台代理登记读数**(§102 缺席行的下半场):读口(读数带会话与序号,冻结;读失败带诊断位)+ 取代判定 + 归类口(只认读口原样产出的读数 / 单副本位 + 必带会话 / 列表上限)+ 登记键桥(按句柄形取键)+ 补行谓词(自本地首见起算的稳定窗 / 自读数发出以来已结束的键)。回收判据本身一个字没改,变的是宿主终于有东西可以填进 `registry` 那一位。
9621
+ > ② **读目录授权的结论通告读口**:通告是真 wire(别的客户端发的授权也会回这两枚),本版只接读侧;回答体上的授权(「放行并加目录」这一选项)候服务端「能受理」的能力位,本版不上公面。
9622
+ > ③ **接线回执 `hands` 段**:引擎对「这条腿有没有手」的正面声明(服务端 7.103.0 起透传,老服务端缺席)。
9623
+ > ④ **sdk 12 追平**:审批帧键锚含 `mandate`、停泊行五键进型面、出身词有了运行期值、`./registry` 子路径声明缺口关闭;本包读法零改。
9624
+ > ⑤ **陈旧逻辑清扫**:退役键 `rewind.rewindFiles` 构造期拒收(退役专句点名去处;四端都已不发)、`WorkflowRunState.agentCount` 改可选、26 个内部件退出根入口(0.71.3 预告;`unrefTimer` 留公面)、九张公面判定表换成只读 Set 子类、包内判定用的十五张数组运行期冻结、`resume_at` 文本兼容腿退役、工作流终态词对齐引擎两处上游(含 `cancelled`)、`cancel_lost_race` 消息改句;`timeout`(历史行)在释放表与重连终态表里**不变**。
9625
+ > **表态现势**:minor 的 wire 键 / 导出变化 ⇒ 点名三端(本版新口的消费方)与管理台(内部件收回、`shortTaskLabel` 夹具),48 小时三选一。
9626
+
9627
+ ### 107a. 处置表
9628
+
9629
+ 包处置列:`consumed` = 本版读 / 接;`declined` = 本版刻意不读(理由在行内);`pending` = 候上游;`removed` / `changed` = 本包自有面本版删 / 改。
9630
+
9631
+ | # | 面(sdk 12.0.1 / 服务端 / 包自有) | 包处置 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
9632
+ |---|---|---|---|---|---|---|---|---|---|
9633
+ | F-1 | peer `@sema-agent/sdk` | — | `>=11.3.0` → `>=12.0.1` | 换钉 sdk 12.0.1 | 同 | 同 | 同 | 核地板 | 107y |
9634
+ | B-1 | `client.sessions.background(sessionId)` → `{ rows }` | consumed | 无 → 读口 `readEngineAgentRegistry(client, sessionId, caps, opts?)` → `EngineAgentRegistryListing`(`{ kind: 'rows', rows, sessionId, seq }` 或 `{ kind: 'unavailable', why, status?, errorCode? }`,四因 `no_list_face` / `route_absent` / `ownership_required` / `read_failed`;`status` / `errorCode` 只在 `read_failed` 且错误对象上读得到时带,诊断用、不改归类,并留一行 debug);**绝不抛**(能力位 / 体 / 行 / 错误对象上的取值器抛、客户端形坏 ⇒ `read_failed`,promise 不拒);`seq` 按(客户端的 `sessions` 资源 × 会话)在发出时单调递增;读数对象、行表与每一行冻结;不缓存、不轮询 | pending(缺席行到期那一拍调一次,见 107d) | pending(有后台代理面板时) | 同终端 | n/a | pending | 107b · G-B1–G-B4 |
9635
+ | B-2 | `capabilities.background.listFace` | consumed | 无 → 读口的端点门:**自有严格 `true`** 才打;缺席 / `false` / 非布尔 ⇒ `no_list_face`,不发请求 | 把能力回体原样交读口 | 同 | 同 | n/a | pending | G-B1 |
9636
+ | B-3 | 登记行 `status`(七词闭集型) | consumed | 无 → 归类口 `engineAgentRegistryReadingOf(listing, key, opts?)`:`pending` / `running` / `parked` ⇒ `running`;`completed` / `failed` / `killed` / `cancelled` ⇒ `ended`;认不出的词 ⇒ `unknown`;行不在 ⇒ **只有登记句柄形的键 ∧ `opts.singleReplica === true` ∧ `opts.sessionId` 给了且对得上 ∧ 读到时不满 500 行(列表上限)** 读 `not_listed`,别的一律 `unknown`;🔴 读数不是读口原样产出的那一个对象(展开复制 / `structuredClone` / 过滤或重组 / 手搭)⇒ `unknown`;读数已被取代 / `opts.sessionId` 与读数会话不等 ⇒ `unknown`;取值器抛 ⇒ `unknown`(身份见 107a-1,射程见 107a-3) | pending | pending | 同终端 | n/a | pending | 107a-1 · 107a-3 · G-B5–G-B8 |
9637
+ | B-3′ | —(包自有) | — | 无 → 归类口选项 `EngineAgentRegistryReadingOptions`:`singleReplica?: true`(宿主**确知**引擎是单进程时才给;自有键严格 `true`;`'true'` / `1` / 原型链上的同名键不认)· `sessionId?: string`(这一行所属会话;给了而读数不是那条会话 / 给成空串或非串 ⇒ `unknown`;行在时不给 = 不核;🔴 `not_listed` 臂必须给,不给 ⇒ `unknown`) | pending(自己拉起的本机引擎给;连远程不给) | 不给(远程) | 本机引擎给、远程不给 | n/a | pending | 107a-3 · G-B6′ |
9638
+ | B-4 | —(包自有) | — | 无 → 登记键桥 `engineAgentRegistryKeyOf(ev)`:`wireTaskId` / `taskId` 里**是登记句柄形**的那一位(两位都是 ⇒ `wireTaskId`);两位都不是 ⇒ `wireTaskId ?? taskId`。缺席 / 行帧 / 进度 / 终态事件与宿主按事件合并的行都吃 | pending | pending | 同终端 | n/a | pending | G-B6 |
9639
+ | B-5 | —(包自有) | — | 无 → 补行谓词 `engineAgentRegistryRowsMissingFromHost(listing, hostKeys, opts?)`:登记读数 `running` 的 `background_agent` 行而宿主登记域键里没有 ⇒ 补行事实 `{ id, status, description?, createdAt }`;逐行不补:本客户端首见不到 30 s(缺席侧同一稳定窗;首见账上没有 ⇒ 不补)/ 登记时刻读不出 / 在 `opts.goneSinceRead` 里;整张空:读不到 / 读数不是读口原样产出的对象 / 读数已被取代 / 会话对不上 / 宿主键集或 `goneSinceRead` 读不了(非数组、非本 realm 的 Set)/ `opts.nowMs` 给了却不是有限数 / 取值器抛;不受单副本位与列表上限影响(它只用「行在且非终态」) | pending | pending | 同终端 | n/a | pending | G-B9 · G-B14 · G-B15 |
9640
+ | B-5′ | —(包自有) | — | 无 → 补行选项 `EngineAgentRegistryFillOptions`:`nowMs?`(与读口记首见同一只钟:本包单调钟,epoch 锚定的单调毫秒、量纲同 `Date.now()`;缺席 = 调用那一刻的这只钟,谓词因此不是严格纯函数;要可复现就显式传)· `goneSinceRead?`(宿主自这次读数**发出**以来见到结束 / 撤掉的登记域键,数组或 Set;不给 = 不核)· `sessionId?`(同 B-3′) | pending | pending | 同终端 | n/a | pending | 107a-5 · G-B13 · G-B14 |
9641
+ | B-8 | —(包自有) | — | 无 → 取代判定 `isEngineAgentRegistryListingSuperseded(listing)`:同一客户端 × 同一会话上发出更晚的一次读已带着行表到货 ⇒ `true`;读口没经手的读数(拷贝 / 自建)/ 读不到的读数 ⇒ `false`(判不出取代;这类读数归类口读 `unknown`、补行谓词空表) | pending | pending | 同终端 | n/a | pending | 107a-5 · G-B13 |
9642
+ | B-6 | 登记行 `retained?: true` | declined | 不读、不带出(它说的是「这只 shell 服务被显式保留」,与「有人正看着」无关;本包 `viewing` 不许拿它填) | — | — | — | — | 反向格 | G-B10 |
9643
+ | B-7 | `client.sessions.backgroundStop` / `capabilities.background.exitFaces` | declined | 宿主动作(退出时停后台任务),不属判定;本包零读点 | 端直调 | — | — | — | — | — |
9644
+ | G-1 | 通告 `approval.read_root_granted` / `approval.read_root_grant_rejected` | consumed | 码册早在册(§102);本版加事实读口 `readReadRootGrantNotice(notice)` → `{ outcome: 'granted', toolCallId, dir, root, covers?, sessionId? }` / `{ outcome: 'rejected', toolCallId, reason?, sessionId? }`;granted 形上 `dir` / `root` 必须是非空串、`covers` 在场就必须是 `exact`,否则整只 `undefined`(读不了,不折成目录义);绝不抛 | pending(要按卡说「目录加上了 / 没加」时换读) | pending | pending | n/a | pending | G-G1 |
9645
+ | G-2 | `toolApprovals.respond` 体 `readRootGrant?: string`(「放行并加目录」这一选项) | **pending** | 本版不发:服务端还没有宣告「能受理」的能力位(sdk 12.0.1 `Capabilities` 无、服务端 7.102.0 无);老服务端(< 7.102.0)对未知键静默忽略并照回 200,按版本号开闸 = 人以为加了目录、其实只得一次普通放行。能力位到货后同一版接 | 不接 | 不接 | 不接 | n/a | — | KL-162 |
9646
+ | H-1 | `wiring_manifest.hands { mounted, reason? }`(服务端 ≥7.103.0 透传) | consumed | 九段 → 十段:`_sema_hands` → 视图 / chrome 臂 `hands`(`mounted` 自有严格布尔;`reason` 开集原字节;缺席 = 没报) | 零改动即得(键在视图上) | 同 | 同 | n/a | pending | G-H1–G-H3 |
9647
+ | H-2 | —(包自有) | — | 无 → 读口 `handsSeamReadingOf(view)`(`not_reported` / `mounted` / `not_mounted{reason?}`)+ 措辞 `handsSeamDetail(reading)` | pending(要渲「这条腿没有手」时换读) | 同 | 同 | n/a | pending | G-H4 |
9648
+ | H-3 | 名册派生读口 `handsMountedFromManifest` / `handsMountedDetail` | 不变(认得的形)/ 行为面改(坏入参) | 三态与认得的六句措辞逐字节不变(与 H-2 **不是同一个事实**,见 107a-4);🆕 `handsMountedDetail` 认不出的入参(`undefined` / `null` / 非对象 / 交叉喂 `hands` 段读数 / `mounted` 无正整数行数 / 认不出的 `why`)此前抛 TypeError 或回 `undefined`,现在回「没报」那一句(与 `handsSeamDetail` 的 `not_reported` 同一铸点) | — | — | — | — | 回归格 | G-H5 · G-H6 |
9649
+ | A-1 | 审批帧键锚 `TOOL_APPROVAL_FRAME_KEYS` 含 `mandate` | consumed(读法不变) | 镜像早含(§102);sdk 锚追平,本包零改 | — | — | — | — | — | — |
9650
+ | A-2 | 停泊行 `PendingCheckpoint` 五键 `requiresRealApproval` / `mandated` / `mandate` / `origin` / `ruleOffersAbsence` 进型面 | consumed(读法不变) | 此前按结构读(裸键),本版读法零改 | — | — | — | — | — | — |
9651
+ | A-3 | 运行期 `ASK_ORIGINS` / `PERSISTED_RULE_MANDATES` | declined(运行期) | 本包词表 `ASK_ORIGIN_WORDS` / `APPROVAL_MANDATE_WORDS` 照旧(与上游逐词对账的判据改锚上游运行期值);本包源码不 import 这两只值 | — | — | — | — | — | KL-167 |
9652
+ | X-1 | 能力位 `taskApproverPosture` / `taskWriteFaceOpen` | declined | 本包零读点(端直读) | — | — | — | — | — | — |
9653
+ | X-2 | `probeReady` / 健康回体 `centerCredential` / `reasons` | declined | 本包无健康读口;端直读 | — | — | — | — | — | — |
9654
+ | X-3 | `DeviceCodeResponse.verification_uri_complete` 必填 → 可选(sdk 12.0.0 唯一 BREAKING) | 兼容 | 本包早按可选读(在场 ⇒ 一键 / 二维码,缺席 ⇒ 展示地址 + 用户码) | — | — | — | — | — | — |
9655
+ | X-4 | `./registry` 子路径声明不再引用上游开发依赖里的声明包 | 缺口关闭 | `skipLibCheck: false` 的下游用子路径入口也不再见到「找不到模块」(§86 R-G6 那条缺口关闭:子路径入口的下游恰两条 ⇒ 零条;守卫照留,上游回潜当天红) | — | — | — | — | 改锚 | 107a′ |
9656
+ | T-R1 | 请求装配 `rewind` 组 / `SeamRewindSpec.rewindFiles` | **removed**(BREAKING,型面 + 运行期) | 五键(含退役 `rewindFiles`,原样透传)→ 恰四键(`resumeAt` / `resumeAtMode` / `restoreFiles` / `rewindFilesTo`);`rewind: { rewindFiles: … }` 构造期抛 `TypeError`,消息是退役专句(点名 `rewind.rewindFiles` 退役于引擎 core 6.0.0、要删掉、代之以 `rewind.restoreFiles: true` 配 `rewind.resumeAt` 或 `rewind.rewindFilesTo`);`true` / `false` 同拒;型位删 | 零改动(已不发) | 零改动(已不发) | 零改动 | 零改动(已不发) | pending | 107b · G-S1 · G-S2 · G-S9 |
9657
+ | T-R2 | 26 个内部件(0.71.3 预告的 `export *` 放大件) | **removed**(BREAKING,型面 + 运行期) | 根入口导出 → 不导出(包内照用,行为不变);另 8 名暂留(含 `unrefTimer`;107a′ 兑现 ②) | 零改动(普查零具名 import) | 零改动 | 零改动 | 零改动;测试里拿 `shortTaskLabel` 当「在公面上的名字」夹具的那一格,0.85.0 前换一个名字 | pending | 107a′ · G-S7 |
9658
+ | T-R3 | `isResumeAtRejection` | **changed**(行为收窄) | 机读码 ∪ 文本兜底(≤7.50 服务端的包装形 404 / 422)→ 只认机读码(含折叠码携带的原码) | 去锚自动重发只在 ≥7.51 的服务端上触发(支持窗内全部是) | 同左(若调用) | — | — | pending | 107b · G-S5 |
9659
+ | T-C1 | `WorkflowRunState.agentCount` | **changed**(BREAKING,型面) | 必有数(无腿数组时补 `0`)→ 可选(缺席 = 不知道;`agents: []` ⇒ 真 `0`);`agents` 非数组不再抛 | 🔴 详情面「N agents」那一段按 `agentCount !== undefined` 判;在场才渲数(与 `totalTokens` 同律) | 🔴 详情面 `{snapshot.agentCount} agent(s)` 缺席时会渲成空数字 ⇒ 缺席不渲这一段 | — | — | pending | 107b · G-S6 |
9660
+ | T-C2 | `CLAIM_RELEASED_STATES` / 无头重连终态表 | **不变** | 四词(`completed` / `failed` / `blocked` + 历史落库行读兼容的 `timeout`)照旧:`timeout` 不是现役写词,是 core 5.8.0 之前落库的行上的词,服务端读 run 行状态列原样返回 ⇒ 读回照旧当已释放、照旧合成终帧;表运行期冻结(T-C6) | 零改动 | — | — | — | 回归约束 | G-S3 |
9661
+ | T-C3 | 九张公面判定表(Set) | **changed**(运行期行为面 BREAKING;型面不变) | 普通 Set(`.add` 改得到包的判定)→ 只读 Set 子类(`add` / `delete` / `clear` 抛 `TypeError`,表不变;成员与次序不变;`constructor` 不再是 `Set`、原型不是 `Set.prototype` ⇒ 与普通 Set 严格深比较判不等) | 零改动(普查零 `.add` / `.delete` / `.clear`);测试里若拿它与 `new Set([...])` 严格深比较,改比成员 | 同 | 同 | 同 | pending | G-S4 |
9662
+ | T-C4 | `cancel_lost_race` 消息 | **changed**(文案) | 「…re-read the run state and retry cancel if it is still active」→「…check what that decision did to the run before retrying the cancel」;码不变 | 零改动(端按码渲自己的下一步) | — | — | — | pending | G-S8 |
9663
+ | T-C5 | 工作流终态词集(判一条轮询中的工作流是否已报过) | **changed** | 八词 → 引擎两处上游的终态词三词(`completed` / `failed` 来自工作流运行记录,`cancelled` 来自进程内任务登记的工作流句柄;从不发的 `done` / `stopped` / `interrupted` / `error` / `canceled` 删) | — | — | — | — | 回归约束 | G-S11 |
9664
+ | T-C6 | 十五张判定数组(`REWIND_ERROR_CODE_PREFIXES` / `STOP_CONFLICT_CODES` / `CLAIM_RELEASED_STATES` / `CLAIM_HELD_STATES` / `RUNNING_STATES` / `ASK_PARK_GATE_KINDS` / `ASK_PARK_STATES` / `PLAN_REVIEW_GATE_KINDS` / `PLAN_REVIEW_STATES` / `TOOL_PERMISSION_REQUEST_ID_DOMAINS` / `ATTACHMENTS_SPEC_KEYS` / `LIVE_DEFAULT_FIELDS` / `TIER_ORDER` / `DEFAULT_CATALOG_SOURCES` / `CATALOG_DEFAULT_HOSTS`) | **changed**(非 BREAKING) | 可就地改写(包内调用期查的是同一个数组)→ 运行期冻结(`push` / `splice` 抛,下标写 / 截断在严格模式下抛;读、迭代、复制与深比较不变;型面不变) | 零改动(普查零处就地改写) | 零改动 | 零改动 | 零改动 | pending | G-S10 |
9665
+
9666
+ #### 107a-1 · 登记读数的身份:哪些键与登记行是同一身份
9667
+
9668
+ - 登记行的 `id` = 服务端 `GET /v1/sessions/:id/background` 行上的 `id` = 引擎后台任务登记的句柄(后台代理那一行的句柄形是 `a` + 6..32 位小写十六进制)。
9669
+ - 缺席事件的 `taskId` 取自 fleet 行 id 的尾段,且可能被改写成先发布的那把 id(原尾段在 `wireTaskId`)。fleet 行 id 有两个来路:后台代理本身的行,id **就是**登记句柄;委派子代的行,id 是 `<runId> <子代会话 id>`,尾段是**会话 id**,不是句柄;工作流子代(`wa…`)不在后台登记上。
9670
+ - ⇒ 只有「fleet 尾段是登记句柄形」这一格与登记行是同一身份。归类口据此:行**在**(同值 id 的 `background_agent` 行)⇒ 按状态归类;行**不在** ⇒ 只有句柄形的键才**可能**读 `not_listed`(还要单副本位,见 107a-3),别的键一律 `unknown`。键桥 `engineAgentRegistryKeyOf` 取两位 id 里是登记句柄形的那一位(行帧先到时,归一后的进度帧把句柄放在 `taskId`、把会话 id 放在 `wireTaskId`;先发布的 id 为准时则反过来 —— 按位挑必有一形取错),判域在归类口里 —— 宿主自己拼的键也过这一道。
9671
+
9672
+ #### 107a-2 · `handsSeamDetail` 四句(逐字)
9673
+
9674
+ | 读数 | 文案 |
9675
+ |---|---|
9676
+ | `not_reported` | `whether this leg has built-in file-and-shell tools is not stated here — the engine did not report its hands seam (older engines and servers, and the static half of a manifest, never do); the tool roster may still answer it` |
9677
+ | `mounted` | `this leg of the run was assembled with its built-in file tools mounted — the engine says so; whether a shell is reachable is answered by the tool roster, not by this statement` |
9678
+ | `not_mounted`,`reason: 'no_execution_env'` | `this leg of the run was assembled with NO built-in file-and-shell tools — the engine states it mounted no hands on this leg because no execution environment was supplied, so on this leg the model had no tool of the engine's own for editing files or running commands (tools mounted by other conditions, such as external servers, and sub-runs delegated to other legs are not covered by this reading)` |
9679
+ | `not_mounted`,原因缺席 / 表外词 | 同上句首句尾,中段换成 `the engine states it mounted no hands on this leg (it gave no reason)` / `the engine states it mounted no hands on this leg (reason: <原因词,呈前消毒封长 64>, a word this build does not know)` |
9680
+
9681
+ #### 107a-3 · 射程:「没列」不等于「离场」—— 谁该给单副本位
9682
+
9683
+ - 登记是**服务端进程内**的:列表只含答这次请求的那个进程上的行(能力位 `listFace` 只保证端点在场,不保证本进程有这个会话的行)。多副本部署里请求落到别的副本时,本会话正在跑的后台代理一行都不在。
9684
+ - ⇒ **缺省**:句柄形的键行不在也读 `unknown`。代价:到期缺席行**不回收**,行上照旧那一句 `… it may still be running`,面板多留一行 —— 不会删错。
9685
+ - **该给** `{ singleReplica: true }` 的:宿主确知引擎是单进程 —— 典型是宿主自己拉起、只连这一台的本机引擎(终端 / 桌面端的本机模式)。给了之后(连同这一行所属会话 `sessionId`),句柄形的键行不在读 `not_listed`,到期回收并留痕(§102 回收判据)。
9686
+ - **不该给**的:连远程 / 云端服务端、经负载均衡的部署、不知道对面是几个进程。给错的代价:列表落到别的副本时把一只还在跑的子代按 TTL 删掉(行上留回收句,不静默,但行没了)。
9687
+ - 位只认自有键上的严格 `true`;行**在**时的归类(`running` / `ended`)与补行谓词都不看这一位。
9688
+ - 升级路径:服务端在列表应答里给出「这份清单覆盖本会话的全部副本」一类的覆盖信号后,本包改读那一位,单副本位退居兜底(KL-159)。
9689
+ - **列表上限**:服务端这条列表最多 500 行,按登记时刻新 → 旧截取 —— 一个会话登记里超过 500 行(后台 shell 的终态行一小时内不回收,不难攒满)时,**最早登记、跑得最久**的代理最先被挤出清单。⇒ 行数到了 500,「行不在」一律读 `unknown`,单副本位也换不回 `not_listed`(KL-166)。行**在**的归类与补行谓词不受影响。
9690
+ - **会话核对**:读数带着它读的是哪条会话。归类口 / 补行谓词给了 `sessionId` 而读数不是那条会话 ⇒ `unknown` / 一行不补。🔴 `not_listed` 臂**必须**给会话:不给 ⇒ 行不在也读 `unknown`(拿错了会话的读数本包分不出来,而「没列」是唯一能删一只可能还在跑的代理的臂)。行在时的归类与补行谓词不给 = 不核。
9691
+ - **读数出身**:能授权删行(`ended` / `not_listed`)或补行的,只有读口产出的那一个读数对象(包内按对象身份认)。展开复制、`structuredClone`、JSON 往返、Proxy、过滤或重组过的读数、手搭的读数一律读 `unknown`、补行空表 —— 截断判据按读到时的原始行数记在包内,把 500 行的清单过滤成短表骗不过它。读数、行表与每一行都冻结(就地改写抛 `TypeError`)。宿主要过滤,就在归类 / 补行的**结果**上过滤。
9692
+
9693
+ #### 107a-4 · `hands` 段与名册派生读口不是同一个事实
9694
+
9695
+ - `hands.mounted` 是**装配事实**:执行环境给没给 ⇒ 手带挂没挂(引擎把它算进装配指纹,同一装配的各腿相等)。`mounted: true` 包含桩环境,**不等于** shell 可达。
9696
+ - `handsMountedFromManifest` 是**逐腿名册事实**:这条腿最终名册里有没有由手带挂上的行 —— 名册是裁剪之后模型真看到的那一套,`excludeAllTools` / 按名排除之后可以一行不剩,而 `hands` 仍说 `mounted: true`。
9697
+ - 只有一个方向成立:`mounted: false` ⇒ 名册里零条手带行;反向不成立。⇒ 本版**不**改写名册派生读口的三态(那是判据改动),只另出读口;两处「没有手」的句子同句首句尾(同一个说话人),中段各说各的依据。
9698
+
9699
+ #### 107a-5 · 迟到 / 乱序的读数与稳定窗
9700
+
9701
+ - 两次读在飞、更新的那次先到、旧的那次后到:旧读数被**取代**(`isEngineAgentRegistryListingSuperseded` 为真)⇒ 归类口读 `unknown`、补行谓词空表。取代以「同一客户端 × 同一会话上**发出**更晚的一次读已带着行表**到货**」为准;更新的那次读不到(`read_failed` 等)不取代旧读数。读数原样传:拷贝 / 自建的读数判不出取代,而且在归类口与补行谓词里一律不作数(`unknown` / 空表)—— 被取代的读数复制一份也补不回已结束的行。
9702
+ - 同一次读数在路上时,那一行结束、宿主已撤行 —— 序号判不出这一形。宿主在发出读之前开始记「见到结束 / 撤掉的登记域键」,读数到货后作 `goneSinceRead` 交给补行谓词,命中的不补;不给 ⇒ 这一形会把刚撤的行补回来,直到下一次读数到货把它取代(KL-165)。
9703
+ - 稳定窗:进度帧可能先于行帧到达(漏斗「缓一拍」有界),那时宿主手上只有会话 id 那一行,本包无从把它桥到登记句柄。本客户端的读口**首次读到**这一 id 不到 30 秒(缺席侧同一常量 `ABSENT_SETTLE_MS`)的代理先不补,等行帧到来把两把键桥上;窗按包内单调钟自本地首见起算,与服务端的 `createdAt` 无关 —— 本机钟与服务端钟有偏、宿主重连(新客户端)后首读一只早已在跑的代理,都跳不过这个窗。首见按客户端 × 会话 × id 记,同一客户端后续的读数沿用;某一份最新读数里没有它、之后又出现 ⇒ 重新起算。登记时刻读不出的不补(补行事实要带它)。行帧晚于窗才到 ⇒ 照补,宿主会多一行,直到行帧到来 —— 宿主按 `engineAgentRegistryKeyOf(行帧)` 找到补过的那一行并入(KL-164)。🔴 复用同一只客户端:每次读都新包一层 `sessions` 就是每次一本新账,窗永远起不来(不补行,安全向)。
9704
+
9705
+ ### 107a′. 成文改口(旧判据眼作废 → 新判据眼)
9706
+
9707
+ **作废**(旧判据眼装 0.84.0 后判红是预期行为,不是回归):
9708
+
9709
+ 1. 按「`rewind: { rewindFiles: true }` 原样上请求体」断言的判据眼 —— 本版构造期抛 `TypeError`(G-S1)。
9710
+ 2. 按「`projectWorkflowRun` 无腿数组时 `agentCount: 0`」断言的判据眼(G-S6)。
9711
+ 3. 按「包装形 404 / 422(人话里带 `resume_at.*` 子码)判 `resume_at` 拒绝」断言的判据眼(G-S5)。
9712
+ 4. 按「`cancel_lost_race` 消息含 `retry cancel`」断言的判据眼(G-S8)。
9713
+ 5. 按「九张判定表的 `.add` 能改到包的判定」「九张判定表与 `new Set([...])` 严格深比较相等 / `constructor === Set`」断言的格(G-S4);按「判定数组能就地 `push`」断言的格(G-S10)。
9714
+ 6. 按「`handsMountedDetail(undefined)` / `(null)` 抛 TypeError」「认不出的入参回 `undefined`」「无行数的 `mounted` 渲 `undefined of them`」断言的判据眼 —— 本版起一律回「没报」那一句(`handsSeamDetail({ kind: 'not_reported' })` 同字节;G-H6)。按「会抛」写的端侧 try/catch 从此不再触发;按「回 `undefined` 就不渲」写的判空分支从此拿到一句串。认得的六形读数不受影响。
9715
+
9716
+ **改读**(判据的意思保留,换读法):
9717
+
9718
+ 1. 「缺席行回收入参的 `registry` 宿主今天只能给 `unknown`」(§102)—— 本版起宿主可以给真读数:缺席行到期那一拍调 `readEngineAgentRegistry` → `engineAgentRegistryReadingOf(listing, engineAgentRegistryKeyOf(缺席事件), { sessionId: 行所属会话, 单副本时 singleReplica: true })`(读数原样传,别展开 / 过滤 / 重组;`not_listed` 要带会话)。§102 的回收判据不变(`ended` / `not_listed` 才回收)。🔴 按 §102 计划写的「行不在 ⇒ `not_listed`」判据眼**改读**:没有单副本位时行不在读 `unknown`、不回收。
9719
+ 2. (验收方,换锚)按「sdk 帧键锚 31 项、`mandate` 领先登记」「停泊行五键不在 sdk 型面」「子路径入口下游恰两条找不到模块」断言的判据换锚:锚 32 项、领先登记表空;五键在型面;下游零条。
9720
+ 3. (承 §105a′)§105a′ 改读的「`sessionPolicyDeliverable` 比终端旧判官更严的三类」自 0.83.6 起是四类 —— 第四类是引擎退役名与含 `__` 而不以协议前缀开头的名字(§106);以 §106 为准。
9721
+ 4. (承 §105a′ 撤回 0.56.0 改名预告)新律「`wiring_manifest` 内部臂上的段键一律 `_sema_*`,不随上游声明改名」对本版新段同样成立:`hands` 段的超集键是 `_sema_hands`(今天十段),上游已声明 `WiringManifest.hands` 也不改名;端读 chrome 臂与视图上的去前缀名 `hands`。
9722
+
9723
+ **兑现**(此前成文的预告,本版执行):
9724
+
9725
+ 1. 0.57.0「公面判定表换形另立一批」—— 九张表换成只读 Set 子类(型面不变;严格深比较 / `constructor` 可见,按运行期行为面 BREAKING 写进 CHANGELOG)。改为冻结数组的那条路没走(那是型面 BREAKING,且 `.has` 读法全要换)。同一病形的数组面一并处置:包内调用期拿来判定的十五张数组冻结(T-C6)。
9726
+ 2. 0.71.3 Deprecated「34 个 `export *` 放大件候下一 minor 收回」—— 部分兑现:本版收回 26 名;8 名留下 —— `hostTimersFor` / `engineSessionParamFor` 不是放大件(§5a / §6b / §8 的多会话宿主契约,与 `hostSettingsFor` / `hostFsFor` / `hostSessionFor` 同族),撤回收回预告、长期留在公面;`unrefTimer` 不是放大件(跨宿主可移植的定时器原语,三端宿主自建保活定时器共用),长期留在公面;`shortTaskLabel` / `DENIAL_LIMIT_KINDS` / `engineCapNestedTrue` / `surfaceRememberNotApplied` 定 0.85.0 退出公面;`RULE_OFFERS_ABSENCE_REASONS` 留在公面(与 `@sema-agent/sdk` 根入口导出的是同一个数组对象)。
9727
+ 3. 0.46.0「`resume_at` 族文本兼容腿在最低服务端版本推过 7.51 之后退役」—— 本版退役。
9728
+
9729
+ **新增**:G-B1–G-B17(含 G-B6′)/ G-G1 / G-H1–G-H6 / G-S1–G-S11。
9730
+
9731
+ **不变**:缺席行四处配对判定与三句措辞(§102);`handsMountedFromManifest` 与 `handsMountedDetail` 认得的六形(字节不变);`askSurvivesPosture` 的判定(出身表只多一道「表里每个词都是上游已知词」的对账);审批卡上 `readRootCandidate` 的形与在场条件;审批回答体(本版不带读目录授权);`ASK_ORIGIN_WORDS` / `APPROVAL_MANDATE_WORDS` 的内容与次序;`rewind` 其余四键逐字展平;九张判定表的成员与次序;`blocked` 照旧算已释放 / 终态;`CLAIM_RELEASED_STATES` 四词与无头重连 run 行终态表(历史行上的 `timeout` 照旧算已释放、照旧合成终帧)。
9732
+
9733
+ 已发段(§23、§85、§86、§98、§101、§102、§105 与 0.46.0 / 0.56.0 / 0.57.0 / 0.71.3 的 CHANGELOG 段)不回改,以本段为准。
9734
+
9735
+ ### 107b. 缺席语义(逐键)
9736
+
9737
+ - `capabilities.background` 缺席 / `listFace` 非严格 `true` = 这台服务端没有登记读口(老服务端或没接会话属主面)⇒ `no_list_face`,**不打**端点;归类口读 `unknown`,补行谓词空。
9738
+ - `route_absent`(404 `not_found.route`)= 服务端比这条路由老;`ownership_required`(501 `capability.session_ownership_required`)= 部署没接会话属主面;`read_failed` = 其余一切(含 404 `not_found.session`、传输层失败、200 体读不出、**任一行**读不出)。四者都读 `unknown`:不删、不补行。
9739
+ - 登记行上 `description` 缺席 / 空串 = 不带;`createdAt` 非有限数 = 不带;`retained` 一律不带(见 B-6)。
9740
+ - 行不在登记里 ∧ 键不是登记句柄形 = `unknown`(不同域,不是「不在」)。
9741
+ - 行不在登记里 ∧ 键是登记句柄形 ∧ 单副本位缺席 = `unknown`(多副本下「没列」≠「离场」;不回收,多留一行)。
9742
+ - `singleReplica` 缺席 / 非自有键 / 不是严格 `true` = 没声明单副本。
9743
+ - 行不在登记里 ∧ 行数 ≥ 500(列表上限)= `unknown`(清单可能被截断;单副本位在也一样)。
9744
+ - 归类口 / 补行谓词的 `sessionId` 缺席 = 行在时不核会话;🔴 行不在时缺席 = 不许读 `not_listed`(读 `unknown`)。
9745
+ - 读数上的 `seq` / `sessionId` 只是展示量;取代判定与会话核对不读它们(读口私有的读数档案)。读口没经手的读数(拷贝 / 过滤 / 重组 / 手搭)= 认不出 = 归类 `unknown`、补行空表(取代判定对它答 `false`)。
9746
+ - `read_failed` 读数上的 `status` / `errorCode` 缺席 = 错误对象上没有(传输层失败 / 体读不出 / 值形不对:`status` 须是整数、`errorCode` 须是非空串),不编;其余三种原因从不带这两位。
9747
+ - 补行谓词 `nowMs` 缺席 = 调用那一刻的本包单调钟(与读口记首见同一只钟,epoch 锚定、量纲同 `Date.now()`;本谓词因此不是严格纯函数,同一入参不同时刻可答不同 —— 要可复现就显式传 `nowMs`);给了却不是有限数 = 坏钟,一行不补。本地首见缺席(首见账上没有这一 id)= 不补。`goneSinceRead` 缺席 = 不核(今天行为);给了却读不了 = 一行不补。登记行 `createdAt` 缺席 / 非有限数 = 不补(补行事实要带它;它不进稳定窗)。
9748
+ - 宿主键集 `hostRegistryKeys` 不是数组、也不是本 realm 的 Set(`undefined` / `Map` / 迭代器 / 跨 realm 的 Set / 对象 / 串)= 读不了,一行不补。
9749
+ - 通告读口:码不是那两只 / `toolCallId` 缺席或空串 / `detail` 非对象 ⇒ `undefined`(不认领);`reason` 缺席 = 引擎没给;granted 形上 `root` / `dir` 缺席或空串 = 读不了(整只 `undefined`;上游 granted 臂恒铸这两位);`covers` 缺席 = 目录,在场只认字面 `exact`,在场而别的值(含 `null`)= 读不了(不折成缺席)。**没有 granted 通告 = 什么都没加**。
9750
+ - `handsSeamDetail` 的入参认不出(非对象 / 别的 `kind`,含名册派生读数的 `not-mounted` / `unknown`)= 与 `not_reported` 同一句;名册派生的 `mounted` 读数与本读数同名,走 `mounted` 那一句(`rows` 不读 —— 两套读数各有措辞口,别交叉喂)。`handsMountedDetail` 的入参认不出(非对象 / 别的 `kind` 或 `why`,含 `hands` 段读数;`mounted` 却没有正整数 `rows`)= 同一句(两只措辞口共用一个铸点)。
9751
+ - `hands` 段缺席 = 没报(老服务端 < 7.103.0 / 老引擎 / 静态半场 / 外部推导)⇒ `not_reported`,不折「有手」也不折「没手」;`reason` 缺席 = 引擎没给原因(`not_mounted` 不补 `no_execution_env`);`mounted: true` 旁的 `reason` = 矛盾形,视图原样、读口按 `mounted` 判。
9752
+ - `WorkflowRunState.agentCount` 缺席 = run 记录上没有可读的腿数组(不知道);`0` = 腿数组在、而且是空的。不要把缺席渲成 `0 agents`。
9753
+ - `rewind` 合写项里任何表外子键在场 = 构造期 `TypeError`;退役的 `rewindFiles` 在场(`true` / `false` 同判,严格闭集:在场即拒)= 构造期 `TypeError`,消息是退役专句(点名去处);值为 `undefined` / `null` = 没给(不拒)。
9754
+ - `isResumeAtRejection`:错误对象上没有 `resume_at.*` 机读码(折叠码则看它带的原码)= `false`,不论人话里写了什么。
9755
+
9756
+ ### 107c. 黑盒判据骨架
9757
+
9758
+ > 🔴 标「本版证明」的格在**上一发布版**(0.83.6)产物上必须 FAIL、在 0.84.0 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读之后的行为。请记下两次跑的产物标识(版本 + tarball shasum)。前缀:G-B = 登记读数、G-G = 读目录授权结论通告、G-H = hands 段、G-S = 陈旧逻辑清扫。
9759
+
9760
+ - **G-B1**(本版证明,纯包层;B-1 / B-2):假客户端 `{ sessions: { background: async () => ({ rows: [...] }) } }`,`caps = { background: { listFace: true } }` ⇒ 恰一次调用,`{ kind: 'rows' }`;`caps` 缺 `background` / `listFace: false` / `'true'` ⇒ `{ kind: 'unavailable', why: 'no_list_face' }` 且零调用。判别点:旧版没有这只读口。
9761
+ - **G-B2**(本版证明,纯包层):假客户端抛 `{ status: 404, errorCode: 'not_found.route' }` ⇒ `route_absent`;`{ status: 501, errorCode: 'capability.session_ownership_required' }` ⇒ `ownership_required`;`{ status: 404, errorCode: 'not_found.session' }` ⇒ `{ kind: 'unavailable', why: 'read_failed', status: 404, errorCode: 'not_found.session' }`;普通 `Error` / `{ status: '404', errorCode: 7 }` ⇒ `read_failed` 且没有 `status` / `errorCode` 两键。
9762
+ - **G-B3**(本版证明,纯包层):200 体 `{ rows: [好行, { id, type, status: 5 }] }` ⇒ 整只 `read_failed`(不给半张表)。
9763
+ - **G-B4**(端侧验收;射程:终端,本机引擎单进程,服务端 ≥7.102.0,宿主给单副本位):起一只后台代理,让它停在一张审批卡上(登记 `parked`),把它的 fleet 行弄消失 30 分钟以上 ⇒ 行不删、行上那句 `… it may still be running`;代理结束后下一拍 ⇒ 行回收并上一行回收句。同一场景不给单副本位 ⇒ 代理结束后行仍不回收(`unknown`),直到真终态帧到达。
9764
+ - **G-B5**(本版证明,纯包层;B-3):假客户端交一行 `{ id: 'a0123456789abcdef', type: 'background_agent', status: s, createdAt }`,读口读到的读数**原样**交给 `engineAgentRegistryReadingOf(listing, 'a0123456789abcdef')`:`pending` / `running` / `parked` ⇒ `running`;`completed` / `failed` / `killed` / `cancelled` ⇒ `ended`;`settled` / `RUNNING` ⇒ `unknown`(带不带单副本位同答)。同一行表手搭成 `{ kind: 'rows', rows: [...], sessionId, seq }` ⇒ 一律 `unknown`。
9765
+ - **G-B6**(本版证明,纯包层;身份):读口读到的空行表,键为会话 id 形(`0199a7c2-7f2e-7b61-9a3d-2f5d1c3b4a55`)/ `wa0123456789abcdef` / `e2e1` ⇒ `unknown`(带单副本位也 `unknown`)。`engineAgentRegistryKeyOf({ taskId: '<uuid>', wireTaskId: 'a0123456789abcdef' })` 与 `engineAgentRegistryKeyOf({ taskId: 'a0123456789abcdef', wireTaskId: '<uuid>' })` 都 ⇒ `a0123456789abcdef`;两位都不是句柄形 ⇒ `wireTaskId`。
9766
+ - **G-B6′**(本版证明,纯包层;射程):读口对会话 `S` 读到的空行表、键 `a0123456789abcdef`:不给选项 / `{}` / `{ sessionId: S }` ⇒ `unknown`;`{ singleReplica: true, sessionId: S }` ⇒ `not_listed`;`{ singleReplica: true }`(不给会话)⇒ `unknown`;`{ singleReplica: 'true', sessionId: S }` / `{ singleReplica: 1, sessionId: S }` / 原型链上的 `singleReplica: true` ⇒ `unknown`。
9767
+ - **G-B7**(本版证明,纯包层;读数经读口):同 id 两行读数不一 ⇒ `unknown`;同 id 但 `type: 'background_bash'` ⇒ `unknown`;读不到(四因)⇒ `unknown`。
9768
+ - **G-B8**(回归约束,纯包层;§102 回收判据不变):回收入参某行 `registry` 取 G-B5 / G-B6′ 的读数 ⇒ `running` 到期不删、`ended` / `not_listed` 到期回收且留痕读数原样、`unknown` 不删。
9769
+ - **G-B9**(本版证明,纯包层;B-5):读口读到登记 `parked` 一行、宿主键表为空,`nowMs` = 读到那一刻的本包单调钟(`performance.timeOrigin + performance.now()`)+ 30001 ⇒ 补行事实恰一条 `{ id, status: 'parked', createdAt, … }`;宿主键表含该 id ⇒ 空;登记 `completed` / 读不到 ⇒ 空。
9770
+ - **G-B10**(本版证明,纯包层;B-6):登记行带 `retained: true` ⇒ 读口行视图与补行事实上都没有这一位。
9771
+ - **G-B11**(本版证明,纯包层;列表上限):读口读到 500 行都不是该键的行表、键 `a0123456789abcdef`、`{ singleReplica: true, sessionId: <读的会话> }` ⇒ `unknown`;同样的 499 行 ⇒ `not_listed`;500 行里有它 ⇒ 照读 `running` / `ended`。
9772
+ - **G-B12**(本版证明,纯包层;会话核对):读口对 `'sess-A'` 读到的读数带 `sessionId: 'sess-A'` 与整数 `seq`;归类口给 `{ sessionId: 'sess-B' }` ⇒ `unknown`、给 `'sess-A'` ⇒ 照读;补行谓词给 `{ sessionId: 'sess-B' }` ⇒ 空;空行表 + `{ singleReplica: true }` 不给会话 ⇒ `unknown`、给 `'sess-A'` ⇒ `not_listed`。
9773
+ - **G-B13**(本版证明,纯包层;取代):假客户端让两次读挂起、先放行后发出的那次(登记 `completed`)、再放行先发出的那次(`running`)⇒ 先发出的读数 `seq` 更小、`isEngineAgentRegistryListingSuperseded` 为真,对它补行 ⇒ 空、归类 ⇒ `unknown`;后发出的那次为假、归类 ⇒ `ended`。后发出的那次读失败 ⇒ 先前那份不算被取代。对被取代的那份读数展开复制(`{ ...listing }`)/ `structuredClone` ⇒ 补行空、归类 `unknown`。`goneSinceRead: ['a0123456789abcdef']` ⇒ 那一行不补。
9774
+ - **G-B14**(本版证明,纯包层;稳定窗):把本包单调钟钉在 `C`(`performance.now = () => C − performance.timeOrigin`)时读到一行(`createdAt` 任意,含十小时前):`nowMs = C + 5000` ⇒ 不补;`C + 30001` ⇒ 补;`C + 30000` ⇒ 不补;`nowMs: NaN` ⇒ 空;`createdAt` 缺席 ⇒ 不补。
9775
+ - **G-B15**(本版证明,纯包层;坏入参):宿主键表给 `Map` / `undefined` / 串 ⇒ 空;能力位取值器抛、体上 `rows` 取值器抛、`sessions` 取值器抛 ⇒ 读口 resolve 为 `{ kind: 'unavailable', why: 'read_failed' }`(不 reject)。
9776
+ - **G-B16**(本版证明,纯包层;读数出身):读口读到的读数 `Object.isFrozen` 为真,`rows` 与每一行同;`listing.rows.push(…)` / `listing.seq = 999`(严格模式)⇒ `TypeError`;读到 500 行截断清单后过滤成新对象 `{ ...listing, rows: listing.rows.filter(…) }`,给 `{ singleReplica: true, sessionId }` ⇒ `unknown`;没被取代的读数的展开复制 / `structuredClone` / JSON 往返 ⇒ 归类 `unknown`、补行空,原对象照读(正控)。
9777
+ - **G-B17**(本版证明,纯包层;窗的钟):新客户端首读一只 `createdAt` 为十分钟前的代理、`nowMs` 缺席 ⇒ 补行空;`createdAt = Date.now() − 65000`(本机钟比服务端快 60 秒、代理实际才登记 5 秒)⇒ 同样空;首见过窗之后照补。
9778
+ - **G-G1**(本版证明,纯包层;G-1):`readReadRootGrantNotice({ code: 'approval.read_root_grant_rejected', detail: { reason: 'mismatch', toolCallId: 'c' } })` ⇒ `{ outcome: 'rejected', toolCallId: 'c', reason: 'mismatch' }`;表外原因词原样;`toolCallId` 缺席 / 空串 / 别的码 ⇒ `undefined`;granted 码带 `dir` / `root` ⇒ `outcome: 'granted'`;缺 `dir` 或 `root`(或空串)⇒ `undefined`;`covers: 'exact'` ⇒ 带 `covers`;`covers` 缺席 ⇒ 不带;`covers: null` / `'dir'` ⇒ `undefined`。
9779
+ - **G-H1**(本版证明,纯包层;H-1):`eventToSdkMessage({ type: 'wiring_manifest', hands: { mounted: false, reason: 'no_execution_env' } }, ctx)` ⇒ `message._sema_hands` 逐字等于入参段(旧版:`none/not_in_slice`);chrome 臂 `hands` 同值;`readSubmitWiringManifest({ wiringManifest: { hands: … } })` 同值。
9780
+ - **G-H2**(本版证明,纯包层):`mounted` 为 `'false'` / `0` / `null` / 缺席、段为 `null` / 数组 / 串 ⇒ 段缺席、其余段照投;`reason` 为 `''` / `5` / `null` ⇒ 只丢 `reason`;表外原因词原样;原型链上的 `hands` 不算。
9781
+ - **G-H3**(端侧验收;射程:服务端 ≥7.103.0,一台没配执行环境的部署):跑一次任务 ⇒ 接线回执视图 `hands: { mounted: false, reason: 'no_execution_env' }`;同一部署在服务端 7.102.0 上 ⇒ `hands` 缺席。
9782
+ - **G-H4**(本版证明,纯包层;H-2):`handsSeamReadingOf` 三态;`handsSeamDetail` 四句逐字(107a-2);`not_mounted` 句与 `handsMountedDetail({ kind: 'not-mounted' })` 句首(` — ` 之前)与句尾(`, so on this leg` 起)逐字相同;`handsSeamDetail(undefined)` / `handsSeamDetail({ kind: 'not-mounted' })` ⇒ 与 `not_reported` 同一句,不抛。
9783
+ - **G-H5**(回归约束,纯包层;H-3):`handsMountedDetail({ kind: 'not-mounted' })` 与 0.83.6 逐字节同;`handsMountedFromManifest` 对同一帧两版同答(帧上加了 `hands` 也不改它的答案)。
9784
+ - **G-H6**(本版证明,纯包层;H-3 行为面):`handsMountedDetail(undefined)` / `handsMountedDetail(null)` / `handsMountedDetail({ kind: 'not_mounted', reason: 'no_execution_env' })` / `handsMountedDetail({ kind: 'mounted' })` ⇒ 都等于 `handsSeamDetail({ kind: 'not_reported' })`,不抛(0.83.6:前两形抛 TypeError,第三形回 `undefined`,第四形渲 `… (undefined of them)`);`handsMountedDetail({ kind: 'mounted', rows: 2 })` 与 0.83.6 逐字节同。
9785
+ - **G-S1**(本版证明,纯包层;T-R1):`buildTaskRequest({ objective: 'x', sessionId: 's', live: true, rewind: { rewindFiles: true } }, 'interactive')` ⇒ 抛 `TypeError`,消息含 `rewind.rewindFiles`、「退役」、`6.0.0`、「删掉」、`rewind.restoreFiles`、`rewind.resumeAt`、`rewind.rewindFilesTo`;`rewind: { rewindFiles: false }` 同样抛同一句;`rewind: { rewindFiles: undefined, restoreFiles: true, resumeAt: 'u1' }` 不抛;`REQUEST_FIELD_MATRIX` 里含 `resumeAt` 的那一行 `field` 恰四段、无 `rewindFiles`。
9786
+ - **G-S2**(回归约束,纯包层):`rewind: { resumeAt: 'u1', resumeAtMode: 'before', restoreFiles: true, rewindFilesTo: 'u0' }` ⇒ 四键逐字展平,`unregisteredRequestKeys(req, 'interactive')` 为空。
9787
+ - **G-S3**(回归约束,纯包层;T-C2):`CLAIM_RELEASED_STATES` = `['completed', 'failed', 'blocked', 'timeout']`;`waitForClaimRelease('t', { get: async () => ({ status: 'timeout' }), budgetMs: 900, sleep: async () => {} })` ⇒ `released: true`;`terminalEventFromRunRow({ status: 'timeout', result: { status: 'timeout' } })` ⇒ `type: 'done'`;表外词同形 ⇒ `null`。
9788
+ - **G-S4**(本版证明,纯包层;T-C3):九张表逐一 `.add('x')` / `.delete(<首员>)` / `.clear()` ⇒ 抛 `TypeError`,表不变;`Object.isFrozen(table)` 为真;`table.constructor !== Set`、`assert.deepStrictEqual(table, new Set([...table]))` 抛(判不等)、`assert.deepEqual` 不抛;成员与次序与 0.83.6 逐字相同(回归约束)。
9789
+ - **G-S5**(本版证明,纯包层;T-R3):`isResumeAtRejection({ status: 404, errorCode: 'not_found.resource', message: 'resumeAt: no such message in this session (resume_at.unknown_event)' })` ⇒ `false`;422 × `(resume_at.no_session)` 同 `false`;`{ status: 404, errorCode: 'resume_at.unknown_event' }` ⇒ `true`(回归约束)。
9790
+ - **G-S6**(本版证明,纯包层;T-C1):`projectWorkflowRun({ id: 'x', status: 'running' })` 上没有 `agentCount` 键;`agents: 'bogus'` ⇒ 不抛、没有 `agentCount`;`agents: []` ⇒ `agentCount: 0`(回归约束)。
9791
+ - **G-S7**(本版证明,纯包层;T-R2):26 名逐一 `!('<name>' in await import('@sema-agent/client-core'))`;保留的 8 名(含 `unrefTimer`)仍在(回归约束)。
9792
+ - **G-S8**(本版证明,纯包层;T-C4):`new ControlRouter({ runs: { cancel: async () => { throw Object.assign(new Error('x'), { status: 409 }) }, submit: async () => ({ taskId: 't' }) } })` 取消撞 409 ⇒ `code === 'cancel_lost_race'`,消息含 `check what that decision did to the run before retrying the cancel`。
9793
+ - **G-S10**(本版证明,纯包层;T-C6):`REWIND_ERROR_CODE_PREFIXES.push('foo.')` ⇒ 抛 `TypeError`,之后 `isRewindFamilyCode('foo.bar')` 仍 `false`(0.83.6:`push` 成功、判定翻真);十五张数组逐一 `Object.isFrozen` 为真。
9794
+ - **G-S11**(回归约束,纯包层;T-C5):装着的引擎 7.33.1 真 `TaskRegistry` 注册一条没有持久存储的工作流 → 引擎的 TaskStop 工具停它 → TaskOutput 工具读回终态卡(`details.status === 'cancelled'`)→ `structuredToToolUseResult(details, 正文, true)` 之后 `isEngineWorkflowNotified(runId)` 为真、`outstandingWorkflowCount()` 回 0;同一张卡的模型面 JSON 经 `wireOutputToBody('TaskOutput', …)` 同样。
9795
+ - **G-S9**(端侧验收;射程:网页端):升级到 0.84.0 并删掉普通发送里的 `rewind` 位后,连发三轮 ⇒ 请求体上零 `rewindFiles`、引擎零弃用披露;不删那一位 ⇒ 第一轮就在构造期抛(证明不是静默丢)。
9796
+ - 包层行为钉在门 `run-engine-agent-absence-projection-test.mjs`(B / EB / BF 段)、`run-engine-notice-catalog-test.mjs`(H 段)、`run-wiring-manifest-projection-test.mjs`(N 段)、`run-sdk-floor-test.mjs`(②e 段)、`run-tool-roster-projection-test.mjs`(H12 段)、`run-task-request-omission-receipt-test.mjs`(F16b – F16e)、`run-selfheal-reopen-test.mjs`(G8④a / G8④a′)、`run-terminal-table-provenance-test.mjs`(C / E / E7 / F 段)、`run-wire-refusal-copy-test.mjs`(S3c)、`run-client-core-pure-test.mjs`(㉚ / ㉚′ / ㉚″ / TIMER④ / B5 / B6 / F3E 段)、`run-export-liveness-test.mjs`(G 段 removed 账)。
9797
+
9798
+ ### 107d. 端上要动的读点
9799
+
9800
+ 清扫各项来自本机克隆的只读检索(终端 09-25、网页端 09-27、桌面端 08-13、管理台 09-27 —— 克隆陈旧的只代表那一刻),以各端现状为准。
9801
+
9802
+ **终端**
9803
+
9804
+ - B-1 – B-5:缺席行到期闹钟响的那一拍 —— `readEngineAgentRegistry(client, sessionId, caps)` 一次(复用同一只客户端:补行窗按客户端记首见)→ 每只缺席行 `registry = engineAgentRegistryReadingOf(listing, engineAgentRegistryKeyOf(缺席事件), { sessionId: 行所属会话, 本机单进程引擎时再加 singleReplica: true })` → `reapEngineAgentAbsentRows`(判据不变)。🔴 `listing` 原样传:别展开 / 过滤 / 重组 / 缓存成别的对象 —— 认不出的读数一律 `unknown` / 空表;要过滤就过滤结果。🔴 行上要记缺席事件的**登记键**(`engineAgentRegistryKeyOf` 取):改写成先发布 id 的那一行,面板键与登记键不同。🔴 单副本位只在终端自己拉起、只连这一台的本机引擎时给;连远程服务端不给。补行:发出读之前开始记「见到结束 / 撤掉的登记域键」,读数到货后调 `engineAgentRegistryRowsMissingFromHost(listing, 宿主各行登记键, { sessionId, goneSinceRead })`,对返回的每条补一行(行键 = 登记 id;渲染与状态归端)。宿主各行登记键一律用 `engineAgentRegistryKeyOf` 取(对行上最近的事件或合并行);之后到来的主通道事件若 `engineAgentRegistryKeyOf(ev)` 等于某条补过的行的登记 id 而 `taskId` 不同(先发布 id 改写形),并入那一行。换读后删掉端侧恒答 `unknown` 的那个占位接缝。
9805
+ - G-1:要按卡说「目录加上了 / 没加」时换读 `readReadRootGrantNotice`(按 `toolCallId` 对卡;没有 granted = 没加)。
9806
+ - H-1 – H-2:要渲「这条腿没有手」时换读 `handsSeamReadingOf(view)` + `handsSeamDetail`;名册派生那一句照旧可用(两者不是同一个事实,107a-4)。
9807
+ - T-C1:工作流详情 / 列表降级行上 `run.agentCount > 0` 这类读法在型面改可选后编译不过 —— 按在场判;为了「不知道」补的那一枚壳侧超集位可以退役。
9808
+
9809
+ **网页端**
9810
+
9811
+ - T-R1:已不发 `rewind.rewindFiles`,零改动。
9812
+ - T-C1:工作流详情面的腿数那一段按 `agentCount !== undefined` 判。
9813
+ - B-1 – B-5:有后台代理面板时同终端,但**不给**单副本位(对面是服务端部署)⇒ 行不在读 `unknown`、不回收,只等真终态;补行谓词照用(读数原样传、复用同一只客户端)。
9814
+ - G-1 / H-1 – H-2:同终端(`hands` 零改动即得,视图多一键)。
9815
+
9816
+ **桌面端**
9817
+
9818
+ - 连本机引擎同终端(给单副本位);连远程引擎同网页端(不给)。清扫各项零读点(锁的版本远早于这些面)。
9819
+
9820
+ **管理台**
9821
+
9822
+ - 登记读数 / 通告 / `hands` 零读点;测试里把 `shortTaskLabel` 当「一定在公面上的名字」用的那一格,0.85.0 前换一个名字。
9823
+
9824
+ **验收方**
9825
+
9826
+ - 按 107c 各格;按 107a′ 作废 / 改读换锚。
9827
+
9828
+ ### 107y. 🔴 三端升级必读(固定段式)
9829
+
9830
+ 1. **换钉 `^0.84.0` 之前**:先把 `@sema-agent/sdk` 换钉到 `>=12.0.1`(peer 地板;装着 11.x 会见 peer 警告,本包的声明面引用了 12.x 才有的型)。sdk 12 的唯一 BREAKING(设备码回体 `verification_uri_complete` 改可选)若端上有把它当恒在串读的代码,同批改(在场 ⇒ 一键 / 二维码;缺席 ⇒ 展示地址 + 用户码)。`rewind.rewindFiles` 四端都已不发;仍在交它的宿主升级前删掉(不删 = 每一轮构造期抛)。**编译期会红的只有三类**:① 写 `SeamRewindSpec` 字面量带 `rewindFiles` 的(删掉那一位);② 把 `WorkflowRunState.agentCount` 当必有数字读的(按可选读,缺席不渲 0);③ 从包根 import 这 26 个内部件之一的(普查四端零处)。运行期会变的:`rewind.rewindFiles` 构造期抛(退役专句点名去处;`true` / `false` 同拒);九张判定表的 `add` / `delete` / `clear` 抛(普查零处),且它们是只读 Set 子类 —— 与普通 `new Set([...])` 严格深比较判不等、`constructor` 不是 `Set`(测试断言若这么比,改比成员);十五张判定数组就地改写抛(普查零处);`handsMountedDetail` 坏入参不再抛而回「没报」那一句;登记读数只认读口原样产出的对象、`not_listed` 要带会话。其余纯 additive。
9831
+ 2. **逐面**:终端 / 桌面端 —— 缺席行到期那一拍接登记读口与归类口(行上记登记键;读数原样传;带行所属会话;只有本机单进程引擎给单副本位),补行谓词按需(复用同一只客户端);要渲「没有手」时换读 `handsSeamReadingOf`;工作流详情的腿数按在场判。网页端 —— 删 `rewind` 那一位;腿数按在场判;有后台代理面板时同终端但不给单副本位;`hands` 零改动即得。管理台 —— 零读点;`shortTaskLabel` 夹具 0.85.0 前换名。审批卡「放行并加目录」本版**不接**(候服务端能力位)。
9832
+ 3. **成文改口**:见 107a′(作废 / 改读 / 兑现 / 新增 / 不变);已发段不回改,以本段为准。
9833
+
9834
+ **包侧缺口:** 登记读数 —— ① 登记只列答请求的那个服务端进程上的行;没有上游覆盖信号之前,「行不在 ⇒ 可回收」只靠宿主的单副本位,不给位时到期缺席行不回收(多留一行)、给错位时多副本部署会删掉还在跑的子代(KL-159)· ② 补行谓词按宿主给的**登记域**键判「有没有这一行」,宿主只记了面板键(改写后的先发布 id)时会多补一行(KL-160)· ③ 列表 500 行上限:行数到上限时行不在一律 `unknown`,这类会话里缺席行只等真终态(KL-166)· ④ 读数取代按发出序近似;同一次读数在路上时结束的行,只有宿主给了 `goneSinceRead` 才不补回;读数只认读口产出的那一个对象,宿主要过滤只能过滤结果(KL-165)· ⑤ 补行稳定窗 30 秒,自本客户端首见起算:行帧晚于窗才到 ⇒ 宿主多一行直到并行;每次读都新包一层 `sessions` ⇒ 每次新账、永不补行(KL-164)· ⑥ 登记状态词的终态划分没有上游运行期值可取,本包按 sdk 七词型面编译期穷举(上游加词当天编译红;运行期新词读 `unknown`)(KL-161);读目录授权 —— ⑦ 回答体上的授权(「放行并加目录」)候服务端「能受理」的能力位,本版不发;结论通告读口已在(KL-162);`hands` —— ⑧ 服务端 7.103.0 发布前真部署上恒缺席;`reason` 与 `mounted` 在引擎运行期耦合、在型上独立,矛盾形原样透传、读口按 `mounted` 判(KL-163);审批词表 —— ⑨ 出身词 / 强制位词两张词表仍是本包的一份,对 sdk 运行期值逐词对账,sdk 在两次提货之间加词时本包到下次提货才跟(KL-167);清扫 —— ⑩ 冻结判定表挡不住 `Set.prototype.add.call(table, x)` 这种刻意绕开实例方法的写法(JS 的 Set 没有真冻结;换冻结数组是型面 BREAKING,本版不取)(KL-168)· ⑪ 九张 Set 与十五张判定数组之外,公面上其余数组形导出(展示 / 拼装用,或每行是对象)运行期没冻结(KL-169)· ⑫ 收回的内部件对从包内部路径深 import 的用法不设防(包的 `exports` 只开根入口与 `./registry`,绕过它属不受支持的用法)· ⑬ `mcpReconnect` 的注入面与 sdk 12 的 `sessions.mcpReconnect(sessionId, server, opts?)` 第二参形不同,宿主不能直接传 sdk 客户端(KL-171)· ⑭ 对 ≤7.50 的服务端,不带码的 `resume_at` 拒绝不再触发去锚重发(支持窗外;KL-172)· ⑮ 读目录授权 granted 通告形坏时读口答 `undefined`,宿主会按「没加」说,今天不可达(KL-173)· ⑯ 补偿登记里一条「待上游确认后退役」的说明串仍是未兑现形(KL-174)。
9835
+
9617
9836
  ## §106 🆕 0.83.6(2026-09-27)会话规则记录的无损判定补判定缺口:引擎会拒启的两类名字改判「不写」+ 成因词 `legacy_tool_name` + 现名出路位 `currentName`(patch;根公面运行期导出不变;公面类型不变;`SessionPolicyWithheldWhy` +1 员 `legacy_tool_name`〔穷尽分支的端编译期红〕;`SESSION_POLICY_WITHHELD_WHY` 5 → 6;`SessionPolicyWithheldRule` +1 可选位 `currentName`;`peer_wide` 那句改措辞〔判决不变〕;零投影臂;peer sdk 地板 `>=11.3.0` 不动)
9618
9837
 
9619
9838
  > **patch**,修 0.83.1 起的一个判定缺口(CC-226;本节按 0.83.6 的读法写,若与本版发布帖不一致,以发布帖为准):