@sema-agent/client-core 0.83.1 → 0.83.3

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.
@@ -19,11 +19,11 @@
19
19
 
20
20
  | 项 | 值 | 真源 |
21
21
  |---|---|---|
22
- | 本包 | `@sema-agent/client-core` **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.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.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.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
- | 公开导出面 | **1254** 个运行期符号(+ **59 个测试钩,两种拼法**:35 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1254 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1254 + 59 = **1313**;只剔双下划线那 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
+ | 公开导出面 | **1273** 个运行期符号(+ **59 个测试钩,两种拼法**:35 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1273 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1273 + 59 = **1332**;只剔双下划线那 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
 
@@ -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`(**1254** 项;该基线只覆盖**根**入口,子路径入口 `./registry` 的名单在 §86 与 `scripts/run-sdk-registry-transit-test.mjs` A / C 段)。
128
+ > 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**1273** 项;该基线只覆盖**根**入口,子路径入口 `./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,19 +149,19 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
149
149
  `WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
150
150
  **4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
151
151
 
152
- 1254 项的内部构成(帮助端估读表大小;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):**347** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
152
+ 1273 项的内部构成(帮助端估读表大小;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` 常量数据表/词汇表
153
153
  (矩阵、键集、env 名、锚串)而非可调用物;**7** 项是 PascalCase 运行期值
154
154
  (`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError` / `APIError`);
155
155
  **37** 项是 `*For(sessionKey, …)` 的 per-session 变体(0.72.0 −4:`clearArmedGateFor` / `onGateArmedFor` / `registerArmedGateFromQuestionIdFor` / `notePlanReviewAnsweredIfDecisiveFor` 退出公面)(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
156
156
 
157
- ### 2b. 域图(16 域,逐域计数之和 = 1254)
157
+ ### 2b. 域图(16 域,逐域计数之和 = 1273)
158
158
 
159
159
  | # | 域 | 名数 | 承重导出 | 用途 | 实现锚 |
160
160
  |---|---|---|---|---|---|
161
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` |
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 主战场) | 215 | `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 会话规则无损判定)、`src/gateOutcome.ts` |
164
- | 4 | **子代 wire + 面板侧信道台账** | 93 | `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/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
163
+ | 3 | **HITL 决断卡链**(§4/§5 主战场) | 217 | `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
165
  | 5 | **fleet 投影** | 39 | `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:展示层安全出口单源,本域三只旧口的字符面引擎) |
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
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 台账) |
@@ -173,7 +173,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
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
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 | **引擎词汇表与包自检** | 111 | `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`)|
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`)|
177
177
 
178
178
  🔴 **`engineErrorCodes` 的开集纪律**(该文件头注逐字):这些 `ReadonlySet` / 前缀谓词一律是**识别表**,
179
179
  回答的是「我认不认得这个码」,**绝不是**「合法码只有这些」。消费点 `switch` **必须留 `default`**,
@@ -1553,7 +1553,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
1553
1553
 
1554
1554
  | **P-42** | low @cli @web @desktop | 🆕 **Esc halt 只上收了判定,发射面仍在各端**(0.47.0 件③,刻意的分工不是半成品):`planInteractiveHalt` 给判据与升级码闭集,`POST /v1/runs/:id/interrupt` 的**发射**(以及 `?session=` 供给、超时窗、台账、留痕)仍归端。cli 侧那条「裸 fetch 直拨 interrupt」的网络面豁免,**退役条件就是端接上这个口子**(壳换装不在 0.47.0 批内) | `src/interactiveHalt.ts`;§10 | 按 §10b 的分支表接:判定用本包,发射用端自己的传输腿;🔴 halt 必须排在撕 SSE **之前**(§10c 第 1 条) |
1555
1555
 
1556
- | **P-43** | ✅ **已收(对实现了读口的宿主)**(0.83.0,CC-162) | 🔧 **`hooksForWire()` 第四条治理规则 0.83.0 已补**:非 managed 来源(user / project / local / flag)的 `disableAllHooks` 按**合并值**判 —— `SettingsPort.mergedDisableAllHooks?()` 为 `true` ⇒ 只发 managed 的 hooks(非 managed 设置关不掉组织下发的),会话目标的 Stop 钩子一并不发;宿主没实现这个可选读口 ⇒ 仍是旧行为(只认 managed 那一份),每个已装端口告警一次;读口抛错 ⇒ 按合并值为真处置(managed 的照发)。**合并顺序订正**:本行旧文「四源按 policy→user→project→local 后写覆盖前写」是错的 —— 真序 user → project → local → flag → policy,policy 最后写、优先级最高;policy → user → project → local 是本包发往引擎的 hooks 数组的**拼接**顺序,不是合并标量的顺序。不做逐源近似的理由不变(「任一来源为 true」在 user=`true` ∧ local=`false` 上判反)。余项:CC 云会话路径的逐来源语义本版不跟、宿主的安全模式本包没有读口(§100 包侧缺口 ⑤;0.83.1 起插件 hook 有安全·bare 位 `suppressedByStartupMode`(§101),设置来源仍没有) | `src/hooksWireCaps.ts`(头注「第四条腿」段)· `src/host.ts` `SettingsPort.mergedDisableAllHooks`;§15b/§15d;§100a-5 | 装 `SettingsPort` 的宿主实现 `mergedDisableAllHooks()`,返回本机 hooks 执行器读的同一个合并值;**未实现**的宿主仍**不要**假定用户 settings 里的 `disableAllHooks` 会挡住引擎腿的 hooks |
1556
+ | **P-43** | ✅ **已收(对实现了读口的宿主)**(0.83.0,CC-162) | 🔧 **`hooksForWire()` 第四条治理规则 0.83.0 已补**:非 managed 来源(user / project / local / flag)的 `disableAllHooks` 按**合并值**判 —— `SettingsPort.mergedDisableAllHooks?()` 为 `true` ⇒ 只发 managed 的 hooks(非 managed 设置关不掉组织下发的),会话目标的 Stop 钩子一并不发;宿主没实现这个可选读口 ⇒ 仍是旧行为(只认 managed 那一份),每个已装端口告警一次;读口抛错 ⇒ 按合并值为真处置(managed 的照发)。**合并顺序订正**:本行旧文「四源按 policy→user→project→local 后写覆盖前写」是错的 —— 真序 user → project → local → flag → policy,policy 最后写、优先级最高;policy → user → project → local → flag(0.83.3 起含 flag,排在 local 之后)是本包发往引擎的 hooks 数组的**拼接**顺序,不是合并标量的顺序 —— 托管在前的理由(引擎 hook 执行器三种资源先到先得,托管排后会被挤掉)与已知代价(`PreToolUse` 上排在托管之后的 hook 能在托管放行之后改写输入)见 §103a H-9 与 §103 包侧缺口 ⑧。不做逐源近似的理由不变(「任一来源为 true」在 user=`true` ∧ local=`false` 上判反)。余项:CC 云会话路径的逐来源语义本版不跟、宿主的安全模式本包没有读口(§100 包侧缺口 ⑤;0.83.1 起插件 hook 有安全·bare 位 `suppressedByStartupMode`(§101),设置来源 —— 0.83.3 起含 flag 来源 —— 在这一位下仍不收窄,§103 包侧缺口 ③) | `src/hooksWireCaps.ts`(头注「第四条腿」段)· `src/host.ts` `SettingsPort.mergedDisableAllHooks`;§15b/§15d;§100a-5 | 装 `SettingsPort` 的宿主实现 `mergedDisableAllHooks()`,返回本机 hooks 执行器读的同一个合并值;**未实现**的宿主仍**不要**假定用户 settings 里的 `disableAllHooks` 会挡住引擎腿的 hooks |
1557
1557
 
1558
1558
  | **P-44** | ✅ **已收**(0.58.0,sdk 8.2.0 提货)@cli @web @desktop | ✅ **上游已补齐,本条转已收** —— sdk **8.2.0**(S-134 五锚)把这一族型面缺口一次补完:①`respond` 体 `persistRule` 由单臂 `{rule}` 换成具名**两臂互斥**联合 `PersistRuleSelection`(`{rule, edited?}` ∣ `{batchOfferIndex}`,互斥用 `?: never` 钉在编译期 ⇒ server 那句 `PERSIST_RULE_BATCH_EXCLUSIVE_ERROR` 400 永远打不到线上);②`ToolApprovalFrame` / `ApprovalCard` / `PendingCheckpoint` 三腿同一个 `RuleOffer` 判别联合(含 `match` 四员闭词表、成员 `command`/`directoryRead` 两臂、additive `uncoveredDetail`);③`ToolApprovalRespondAck` 补 `persistedRule` / `persistedRules` / `persistedRuleAnchors` 三位。🔴 **本包侧本来就零 cast、也不需要 cast**(0.57.0 原文,逐字仍成立):本包**不铸 respond 的 wire 体** —— `RespondToolApprovalFn` 是**宿主注入**的函数型,包只把扁平兄弟位(`persistRule: string` / `persistRuleEdited?: true` / `persistRuleBatchOfferIndex?: number`)交给注入面。⇒ 吃这个缺口的一直是**三端的注入面**。本包 0.58.0 这一侧的动作是:归一形 `RuleOffer` 一族改由 sdk 派生、`ToolApprovalRespondAckView` 与 `PersistedRuleAnchor` 两个包内自铸形按各自写下的退役条款回收成 sdk 形的别名、`AHEAD_OF_ANCHOR` 里那条 `ruleOffers` 领先登记到期自红删除(详见 **§22a**)。🔴 **三端还要做的那一半(本条转已收之后的剩余动作)**:注入面那处宽 `cast`(或自铸的 respond 包装形)现在可以删掉,改直接用 sdk 8.2.0 的 `PersistRuleSelection` —— 两臂互斥由编译期钉,`{rule, batchOfferIndex}` 同场会**编译红**(这正是要的);`batchOfferIndex: 0` 逐字进 body(`0` 不被 falsy 吞)。同样别再在端侧自铸同名 `RuleOffer` 形:归一形与它的伴生类型自 0.57.0 起在本包公面上,三张闭词表自 0.58.0 起也在(§22b) | `src/hitl/toolApprovalWire.ts`(两处「候 sdk 补锚」头注已随本批锚到 8.2.0 / 回收)· `scripts/run-approval-frame-keys-test.mjs`(该条 `AHEAD_OF_ANCHOR` 登记已删)· `scripts/run-sdk-floor-test.mjs`(地板 8.2.0) | 端按上一栏「剩余动作」删自己的宽 cast;peer 地板随本包抬到 `>=8.2.0`,提货前先抬依赖 |
1559
1559
 
@@ -4637,7 +4637,7 @@ an argument」。audience 答另一问:这条事实**说给谁听**。
4637
4637
  **签名**
4638
4638
 
4639
4639
  ```ts
4640
- ENGINE_NOTICE_CODES: readonly string[] // 71 码,顺序同源(core 7.31.0 +2:config.context_settings_swapped〔7.30.0〕/ config.secret_env_scrubbed;0.83.0。此前 core 7.29.0 +1 route.response_model_mismatch;0.82.1)
4640
+ ENGINE_NOTICE_CODES: readonly string[] // 73 码,顺序同源(core 7.32.0 +2:approval.read_root_granted / approval.read_root_grant_rejected;0.83.2。此前 core 7.31.0 +2:config.context_settings_swapped〔7.30.0〕/ config.secret_env_scrubbed;0.83.0。此前 core 7.29.0 +1 route.response_model_mismatch;0.82.1)
4641
4641
  ENGINE_NOTICE_AUDIENCE: Readonly<Record<string, 'user' | 'operator'>>
4642
4642
  noticeAudienceOf(code: unknown): 'user' | 'operator'
4643
4643
  engineNoticeInCatalog(code: unknown): boolean
@@ -9599,6 +9599,309 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
9599
9599
 
9600
9600
  **包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(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)。
9601
9601
 
9602
+ ## §103 🆕 0.83.3(2026-09-26)flag 来源的 hooks 进请求体 + 规则列举口入参只要 `list` + 模型身份认目录缺省(patch;根公面运行期导出 1273 不变;公面类型 +1〔`RulesListFacade`〕;`HookSettingsSource` +1 员 `flagSettings`;`ModelIdentityLanes['modelCatalogFile']` 闭集 +`complete`;`LocalEngineModelIdentityReading` +1 可选位 `engineAcceptsCatalogDefault`;`listAllPersistedRules` 入参放宽〔`list` 必填、其余四口可选〕;零投影臂;peer sdk 地板 `>=11.3.0` 不动)
9603
+
9604
+ > **patch**,三件同发 + 一件「次序不变」的成文(本节按 0.83.3 的读法写;若与本版发布帖不一致,以发布帖为准):
9605
+ > ① **flag 来源的 hooks 进请求体**:宿主经 `SettingsPort.getSettingsForSource('flagSettings')` 交来的设置(启动参数给的设置文件与内联设置)里写的 hooks,此前到不了引擎;本版起与 user / project / local 同一条投影、同一套治理。
9606
+ > ② **设置来源 hooks 的拼接次序不变**:managed 仍在最前(managed → user → project → local → flag),flag 来源排在 local 之后。为什么不跟设置合并的次序(managed 最后写)走、以及托管在前的已知代价,见 H-9 与包侧缺口 ⑧。
9607
+ > ③ **规则列举口只要 `list`**:`listAllPersistedRules` 的入参由完整五口放宽为只要 `list`(具名型 `RulesListFacade`;其余四口作为可选成员认得,内联对象字面量、参数不写型的箭头照样可传,拼错口名照样报错);只装读 / 撤两口的宿主直接用本口。另写清列举 / 撤销两口会遇到 `classifyRulesFailure` 的哪几臂(103a-1)。
9608
+ > ④ **模型身份认目录缺省**:服务端 7.101.0 起启动环境里的模型名或目录缺省任一在场即可启动;宿主报本机引擎接受目录缺省时,只用模型目录文件的配置判可解析;报不接受判不可解析;不报仍判不出。
9609
+ > **服务端 7.102.0 起**:§102 候服务端的两件在真部署上到货 —— 停泊审批卡(耐久重开 / 重连出来的卡)上的 `origin`(§102 O-1)与审批卡上的 `mandate`(§102 M-1;服务端的审批帧、活挂起行与运维队列行都带)。本包零改动生效;§102 G-M5(此前按 N/A)自此可跑。
9610
+ > **表态现势**:patch,全速模式,不设表态窗;各端列写本版读点普查的结论。
9611
+
9612
+ ### 103a. 处置表
9613
+
9614
+ | # | 面 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
9615
+ |---|---|---|---|---|---|---|---|---|
9616
+ | H-1 | `hooksForWire()` / `hooksWirePlan()` 的设置来源 | 四源 → **五源**,flag 来源拼在 local 之后(拼接序见 H-9)。治理同进退:`allowManagedHooksOnly` / hooks 面的 `strictPluginOnlyCustomization` 锁 / 非 managed 来源的合并 `disableAllHooks`(读口抛错同判)⇒ flag 来源一并不发(只发 managed);managed `disableAllHooks` / 未受信工作区 / 信任或 managed 读取抛错 ⇒ 零发。0.83.1 起的两类拿掉(带参数的 command 条目、传了计划时的 `mcp_tool`)与不传计划时的一次性告警对 flag 来源同样生效。flag 来源读取抛错 ⇒ 只当这一源没配 hooks(调试记一行),其余来源照发。flag 来源的 `Stop` hook 上请求体 ⇒ 显式 `--final-verify` 让位(与其余来源同判) | consumed(零改动即得:宿主口已按来源名转交,flag 来源由宿主自己的设置读取合成文件与内联两处) | n/a(不调 `hooksForWire()`,与 §100a 同) | n/a(不调 `hooksForWire()`,与 §100a 同) | n/a | pending | 103b · G-H1–G-H5 / G-H7 |
9617
+ | H-2 | `HookSettingsSource` +`flagSettings`;计划 `settingsDropped[].source` 可为 `flagSettings`;`hooksNotRunNotice` 这一源的措辞 `Flag settings` | 四员 → 五员(型面放宽) | n/a(今天无读点) | n/a | n/a | n/a | pending | G-H4 |
9618
+ | H-9 | 请求体上同一事件的设置来源拼接次序;`plan.settingsDropped` 与 `hooksNotRunNotice(plan)` 的来源次序 | **不变**,只多一源:managed → user → project → local → **flag**(managed 仍在最前,flag 排在 local 之后)。不跟设置合并的次序(managed 最后写)走:引擎的 hook 执行器按请求体次序执行,有三种先到先得的资源 —— 每事件墙钟预算(120 秒,用完之后排在后面的同步条目不再启动)、`PreToolUse` 之外每事件四条模型条目(`prompt` / `agent`)的上限、`additionalContext` 总帽(一万字符,顺序保留、只截尾);managed 排在后面时,排在前面的非 managed hook 能把 managed 的守卫挤掉(不执行,调用照常)。已知代价(包侧缺口 ⑧):`PreToolUse` 上排在 managed 之后的非 managed hook(设置来源与插件注册的组)能在 managed 放行之后改写输入,与 0.83.2 同 | consumed(零改动;次序与 0.83.2 同) | n/a(不调 `hooksForWire()`) | n/a(不调 `hooksForWire()`) | n/a | pending | 103a′ · G-H2 / G-H4b / G-H6 / G-H6b |
9619
+ | R-1 | `listAllPersistedRules(facade: RulesListFacade & Partial<Omit<RulesFacade, 'list'>>, params?, opts?)`;新具名型 `RulesListFacade = Pick<RulesFacade, 'list'>` | 入参完整五口 `RulesFacade` → 只要 `list`(放宽:其余四口是型上认得的可选成员 ⇒ 完整五口 / 读撤两口 / 只 `list` 写成内联对象字面量都过型,箭头的参数不写型也拿得到上下文类型,拼错口名照样报错;完整五口变量照样可传,运行期行为不变。成员与 `RulesFacade` 同名口型不兼容的对象仍被拒,与 0.83.2 同严) | n/a(零改动) | pending(建议:自带的列全口与失败分类换读本包 `listAllPersistedRules` / `classifyRulesFailure`,判据见 103a-1,同批删本地同名那份) | n/a | n/a | pending | 103a-1 · G-R1 / G-R2 |
9620
+ | M-1 | `ModelIdentityLanes['modelCatalogFile']` | 闭集 `partial` / `absent` / `unreadable` → +`complete`(= 目录里有一只启用的、可作缺省的模型;算不算数看 M-2 位) | pending(接模型身份判据时按本定义报目录一格:文件存在不等于里面有一只启用的缺省模型) | n/a(远程拓扑) | pending(有本机引擎时同终端) | n/a | pending | 103b · G-M1–G-M3 |
9621
+ | M-2 | `LocalEngineModelIdentityReading.engineAcceptsCatalogDefault?: boolean` | 无 → 新增可选位:宿主报它要起的本机引擎接不接受「目录缺省代替启动时的模型名」(按宿主自己钉的引擎版本判;服务端 7.101.0 起接受)。目录一格 `complete` 时:`true` ⇒ 这一路可解析;`false` ⇒ 按 `partial`;缺席(含值为 `undefined` 的键)/ 非布尔 ⇒ 这一路判不出(`unknown`,不折「不接受」)。只对目录一格起作用;远程拓扑与别的来路不读它 | pending(同 M-1) | n/a | pending(同 M-1) | n/a | pending | 103b · G-M1 / G-M2 / G-M2′ |
9622
+ | M-3 | `modelIdentityDetail` 目录一路四段新措辞 | 新增(逐字见 103a-2);既有各句逐字不变 | 零改动即得 | n/a | 同终端 | n/a | pending | 103a-2 · G-M4 |
9623
+
9624
+ #### 103a-1 · 列举 / 撤销两口会遇到的失败臂
9625
+
9626
+ `classifyRulesFailure` 共十六个 `kind`(十五个具名臂 + 通用 `error`)。只装读 / 撤两口的宿主会遇到的是下面这些;其余几臂(`ticket-dead` / `retry-same-ticket` 属于导入口,`field-refused` / `write-indeterminate` / `write-not-committed` 属于单步写口)在这两口上不出现。
9627
+
9628
+ | `kind` | 列举(`GET /v1/rules`) | 撤销(`DELETE /v1/rules`) | 处置 |
9629
+ |---|---|---|---|
9630
+ | `lane-unavailable` | ✓ | ✓ | 这台部署没接规则店 ⇒ 整面藏起来 |
9631
+ | `forbidden` | ✓(读别人名下) | ✓(撤别人名下) | 越权被拒;不重试 |
9632
+ | `cursor-stale` | ✓ | — | 游标失效:`listAllPersistedRules` 已丢游标从头重列一次,再撞才交出;过滤 `scope` 读不出形也落这一臂(见包侧缺口) |
9633
+ | `body-shape` | — | ✓ | 撤销体读不出形(身份三键 / `scope`);改请求,不重试 |
9634
+ | `retryable` | — | ✓ | 什么都没写(`committed: "no"` 或老服务端缺席);可原样重发 |
9635
+ | `remove-indeterminate` | — | ✓ | 墓碑可能已落而读回失败;不盲重试,用列举对账 |
9636
+ | `route-missing` | ✓ | ✓ | 服务端比这条路由老 ⇒ 藏治理入口 |
9637
+ | `method-unsupported` | ✓ | ✓ | 路径在、这个动词不在(引擎自己的裸 `method_not_allowed`)⇒ 服务端比这个动词老 |
9638
+ | `method-refused` | ✓ | ✓ | 405 而码给不出出处(中间层也能发):撤销上按「结局说不清」对账,别据此要求升级或藏入口 |
9639
+ | `too-many-candidates` | — | 仅当撤销体超过服务端请求体上限(单条规则实际到不了) | 缩短后重发 |
9640
+ | `error` | ✓ | ✓ | 其余一切(未鉴权、限流、服务端 5xx、坏形 2xx 页、跨页 rev 漂移、坏规则行、坏 `nextCursor`、翻不完、没码的 501);失败信息原样可显示 |
9641
+
9642
+ 🔴 **「规则店不在」只认机器码 `capability.rule_store_required`**,不认 501 状态码本身:引擎的错误信封恒带机器码;一个没码的 501 谁都能发(反向代理对不认识的动词就回 501)。凭裸 501 藏整面、或在写口说「确知没写」,等于把出处交给了一个任何中间层都能发的状态码 —— 出错时代价是把一个活着的治理面藏掉。没码的 501 落 `error`,如实显示失败原句。自带「裸 501 ⇒ 规则店不在」判法的端换读本口时按此改口。
9643
+
9644
+ #### 103a-2 · 目录一路的四段新措辞
9645
+
9646
+ | 场景 | `modelIdentityDetail(reading)` |
9647
+ |---|---|
9648
+ | 本机 ∧ 目录一格 `complete` ∧ `engineAcceptsCatalogDefault: true`(且之前的来路都没有 `complete`) | `the local model catalog file supplies a model name as its default, and the local engine accepts a catalog default in place of a startup model name, so it can start with it — whether its gateway accepts that name is a separate check` |
9649
+ | 本机 ∧ 目录一格 `complete` ∧ 位 `false` ∧ 其余来路都明说 `partial` / `absent` | `no model name is configured for the local engine to start with — the local model catalog file names a default model, but the local engine is reported not to accept a catalog default in place of a startup model name, and the engine does not start without one`(别的来路有 `partial` 时,在 `…startup model name` 之后接 `, and <来路> carries part of a model configuration (such as a gateway address or a credential) but no model name`) |
9650
+ | 本机 ∧ 目录一格 `complete` ∧ 位缺席(含值为 `undefined` 的键)∧ 其余来路都没有 `complete` | 判不出句 `whether the local engine has a model name is unknown — <各段>, and no other place this client reads provides one` 里目录的那一段:`the local model catalog file names a default model, but whether the local engine accepts a catalog default in place of a startup model name was not reported`(别的来路也判不出时,那几段在前,以 ` and ` 接目录这一段) |
9651
+ | 同上,位在场但不是布尔 | 同一位置的一段:`the local model catalog file names a default model, but the report of whether the local engine accepts a catalog default in place of a startup model name gave no usable reading` |
9652
+ | 本机 ∧ 目录一格 `complete` ∧ 位 `false` ∧ 别的来路有判不出的(其余都没有 `complete`) | 判不出句里目录的那一段(与第二句的目录段同一措辞):`the local model catalog file names a default model, but the local engine is reported not to accept a catalog default in place of a startup model name`(判不出的那几段在前,以 ` and ` 接目录这一段) |
9653
+
9654
+ 例(位 `false`、设置文件 `unreadable`、其余来路 `absent`):`whether the local engine has a model name is unknown — this client's settings file could not be read and the local model catalog file names a default model, but the local engine is reported not to accept a catalog default in place of a startup model name, and no other place this client reads provides one`。
9655
+
9656
+ 例(位缺席、其余来路 `absent`):`whether the local engine has a model name is unknown — the local model catalog file names a default model, but whether the local engine accepts a catalog default in place of a startup model name was not reported, and no other place this client reads provides one`。
9657
+
9658
+ ### 103a′. 成文改口
9659
+
9660
+ - **作废**:§93 S-11(0.82.1)「目录文件一格型上没有 `complete`;运行期报 `complete` ⇒ 判不出(`unknown`),措辞说这一路给的读数用不了」的判据眼。本版起目录一格报 `complete` 时:位 `true` ⇒ `resolvable`;位 `false` ⇒ 按 `partial`;位缺席 / 非布尔 ⇒ 仍判不出(`unknown`),但措辞改为点名目录里有缺省模型(103a-2 第三 / 四段;位 `false` 而别路判不出的 `unknown` 句见第五段);「这一路给的读数用不了」只留给表外词。
9661
+ - **改读(模型身份)**:目录一格 `complete` ∧ 位 `true` ⇒ `resolvable`(决策 `proceed`);位 `false` ⇒(其余来路都明说时)`not_resolvable`(决策 `offer_setup` / `explain_unconfigured`),措辞为 103a-2 第二句;位缺席(含值为 `undefined` 的键)/ 非布尔 ⇒ `unknown`(决策 `proceed`,与 0.83.2 同答)。装 0.83.3 后按「目录 complete 一律 unknown」去判位 `true` / `false` 两形的格判红是预期行为。
9662
+ - **改读**:「本包发往引擎的 hooks 数组只含四源」的判据眼作废。
9663
+ - **新增**:G-H1–G-H7(含 G-H4b / G-H6b)/ G-R1–G-R2 / G-M1–G-M5(含 G-M2′)。
9664
+ - **不变**:请求体上设置来源 hooks 的拼接次序 —— managed 在前(§7 P-43「policy → user → project → local 是本包发往引擎的 hooks 数组的拼接顺序」一句照旧成立,本版只在末尾多一个 flag);它**不**跟合并标量的顺序(user → project → local → flag → managed,§100a-5)走,理由见 H-9;合并标量的顺序;`mergedDisableAllHooks` 读口的契约;列举口的翻页与失败语义;远程拓扑的模型身份判据。
9665
+ - 已发段(§93、§100、§101、§102)不回改,以本段为准;§7 P-43 是活段,随版改。
9666
+
9667
+ ### 103b. 缺席语义(逐键)
9668
+
9669
+ - 宿主不交 flag 来源(`getSettingsForSource('flagSettings')` 返回 `null` / 缺 `hooks`)= 这一源没配 hooks ⇒ 请求体上没有 flag 来源的组(其余来源的次序按 H-9)。宿主的设置口对不认识的来源名**抛错**时,每轮记一行调试、这一源按没配处置 —— 建议返回 `null`。
9670
+ - `settingsDropped[].source === 'flagSettings'` 只说「这一条来自 flag 来源」,不说它是文件还是内联(本包看到的是宿主合成的一份)。
9671
+ - 拼接次序:同一事件的设置来源组按 managed → user → project → local → flag 拼接;某一源没配 / 读不出 ⇒ 这一源空着,其余次序不变。`settingsDropped` 与开机清单的来源次序是同一张表。
9672
+ - `engineAcceptsCatalogDefault` 缺席(含值为 `undefined` 的自有键 —— `{ …, engineAcceptsCatalogDefault: maybe }` 一类展开写法)= 宿主没说本机引擎接不接受目录缺省 ⇒ 目录这一路**判不出**(不折「不接受」;其余来路都明说时 `unknown`,与 0.83.2 同答),措辞说 `was not reported`。在场但不是布尔 = 报了、读不懂 ⇒ 同样判不出,措辞说那份报告 `gave no usable reading`(端报了就不说「没报」)。只有字面 `false` 才按「不接受」(`partial`)处置;位 `false` 而别的来路判不出 ⇒ 整体 `unknown`,判不出句里照样有「宿主报引擎不接受」的目录段。原型链上的同名位不算(按缺席)。
9673
+ - 目录一格 `complete` 缺席(报 `partial` / `absent`)在位为 `true` 时**不会**被位救成可解析;报 `unreadable` / 缺键仍按判不出(`unknown`)。目录这一路判不出时,别的来路 `complete` 照样判可解析。
9674
+ - 远程拓扑上带着 `engineAcceptsCatalogDefault` / `lanes` = 不读(远程只看应答观测)。
9675
+ - `RulesListFacade` 不含 `revoke` / `write` / 导入两口:本包的列全口不会调它们;撤销、单步写、导入仍各走各自的口。
9676
+
9677
+ ### 103c. 黑盒判据骨架
9678
+
9679
+ > 🔴 标「本版证明」的格在 **0.83.2** 产物上必须 FAIL、在 0.83.3 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读 / 升级之后的行为,不按包的两版产物对拍。请记下两次跑的产物标识(版本 + tarball shasum)。前缀:G-H = hooks、G-R = 规则列举口、G-M = 模型身份。
9680
+
9681
+ - **G-H1**(本版证明,纯包层;H-1):`installHost({ settings })`,设置口对 `flagSettings` 交 `{ hooks: { PreToolUse: [g] } }`(`g = { matcher: '*', hooks: [{ type: 'command', command: 'flag-guard' }] }`)、其余来源 `null`、信任门 `false`、`mergedDisableAllHooks: () => false` ⇒ `hooksForWire().PreToolUse[0] === g`(原对象)。判别点:0.83.2 答 `undefined`。
9682
+ - **G-H2**(本版证明,纯包层;H-1 / H-9 拼接序):五个来源各一组、命令依次 `p`(managed)/ `u` / `j` / `l` / `f` ⇒ `PreToolUse` 各组首条命令顺序为 `p u j l f`。判别点:0.83.2 为 `p u j l`(flag 缺席;其余次序两版同)。
9683
+ - **G-H3**(回归约束,纯包层;H-1 治理 —— 两版都 PASS,0.83.3 上才有判别力):同 G-H2 的五源,分别加 managed `allowManagedHooksOnly: true` / `strictPluginOnlyCustomization: true` / `strictPluginOnlyCustomization: ['hooks']` / 合并读口答 `true` / 合并读口抛错 ⇒ 只剩 `p`;managed `disableAllHooks: true` / 信任门答 `true` / 信任门抛错 / managed 读取抛错 ⇒ `hooksForWire()` 为 `undefined`。
9684
+ - **G-H4**(本版证明,纯包层;H-1 / H-2 拿掉与措辞):flag 来源一组 `[{ type: 'command', command: 'keep' }, { type: 'command', command: 'node', args: ['x.js'] }]`(事件 `PreToolUse`)⇒ 不传计划:请求体该组只剩 `keep`,告警恰一条且点名 `PreToolUse`;`hooksWirePlan({ engineOwnedByThisShell: true, shellHookEvents: [] }).settingsDropped` 恰一条 `{ source: 'flagSettings', event: 'PreToolUse', groupIndex: 0, hookIndex: 1, reason: 'exec_form_unsupported', notRun: true }`;`hooksNotRunNotice(plan)` 恰一行,以 `Flag settings: PreToolUse hook will not run — ` 开头。判别点:0.83.2 请求体无该组、零告警、零拿掉。
9685
+ - **G-H4b**(回归约束,纯包层;H-9 次序的可观察面):managed 与 user 各一组 `[{ type: 'command', command: 'node', args: ['x.js'] }]`(事件 `PreToolUse`)⇒ `hooksWirePlan({ engineOwnedByThisShell: true, shellHookEvents: [] }).settingsDropped` 的来源依次 `policySettings`、`userSettings`;`hooksNotRunNotice(plan)` 两行,依次以 `Managed settings: ` / `User settings: ` 开头。两版同答(托管在前)。
9686
+ - **G-H5**(端侧验收;射程:终端,本机引擎,升级到 0.83.3 后):启动参数 `--settings <文件>`,文件里写一条 `PreToolUse` 的 command hook(命令写一个标记文件)⇒ 让代理跑一次工具,标记文件出现(hook 在引擎侧执行);同一条写进内联设置同判。
9687
+ - **G-H6**(回归约束,包层 + 服务端发布版的 hook 执行入口;H-9 托管在前守住三种资源):把 `hooksForWire()` 原样交给服务端的 `parseHooksConfig` + `createTaskHooks`,三形:① **墙钟预算**:managed 一组 `echo managed-guard >&2; exit 2`,user 一组(另三格换成 project / local / flag)`touch <标记文件>; exit 0`;装一只时钟垫片 —— 标记文件出现后 `Date.now()` 前跳 200 秒(模拟那条命令跑满 120 秒预算,不真等),调完复原 ⇒ `PreToolUse`(`Bash`,`{ command: 'ls' }`)答 `{ action: 'deny', message: 'managed-guard' }`;`UserPromptSubmit` 同构(组不带 matcher)答 `{ block: 'managed-guard' }`。② **模型条目上限**:`UserPromptSubmit` 上 user(另一格 flag)一组四条 `prompt` 条目、managed 一组一条 `prompt` 条目;`hookLlm` 假件对 managed 那条答 `{"decision":"block","reason":"managed-dlp"}`、其余答 `{}` ⇒ 答 `{ block: 'managed-dlp' }`。③ **上下文总帽**:`UserPromptSubmit` 与 `PostToolUse` 各一格,managed 一组的 `additionalContext` 为一句短标记,user 两组、flag 一组各 4000 字 ⇒ 回体 `additionalContext` 含 managed 那句。两版都 PASS(0.83.2 同为托管在前;flag 各格在 0.83.2 上请求体只有 managed 组,同样 PASS)。尺子自证:手排「非 managed 在前」的请求体,三形都应答成 managed 被挤掉(预算形无意见 + 执行器记 `hook_event_deadline_exceeded`;上限形无意见 + 记 `llm_entries_per_event_cap`;上下文形不含那句、带截断标记)—— 这组不成立时本格没有判别力,先查服务端版本。
9688
+ - **G-H6b**(回归约束 · 已知代价显形,包层 + 服务端发布版的 hook 执行入口;H-9 / 包侧缺口 ⑧):managed 一组 `if grep -q MARK; then echo deny >&2; exit 2; fi; exit 0`(输入里见到标记就拒)、user 一组(另三格换成 project / local / flag)放行并把输入改写成带标记的命令(标准输出 `{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow","updatedInput":{"command":"MARK"}}}`)⇒ 对 `Bash` 输入 `{ command: 'ls' }` 调 `preToolUse` 答 `{ action: 'allow', updatedInput: { command: 'MARK' } }`(managed 看到的是改写前的输入)。user / project / local 两版同答;flag 一格 0.83.2 答无意见(请求体上没有 flag 组),0.83.3 同其余三格。这是记账格,不是期望行为:服务端支持为 managed 组按最终输入执行之后,本格随包侧缺口 ⑧ 一起改。
9689
+ - **G-H7**(本版证明,纯包层;H-1 下游):设置口只对 `flagSettings` 交 `{ hooks: { Stop: [{ matcher: '*', hooks: [{ type: 'command', command: 'flag-stop' }] }] } }` ⇒ `resolveHeadlessFinalVerifyDetail(['--final-verify'], {}, hooksForWire())` 答 `{ on: false, offReason: 'stop-hook' }`。判别点:0.83.2 答 `{ on: true }`。
9690
+ - **G-R1**(本版证明,纯包层;R-1 型面):一份消费方 `.ts` 从包入口引入,`declare const twoPort: { list: RulesFacade['list']; revoke: RulesFacade['revoke'] }` 与 `{ list: async () => ({ rules: [], rev: 1 }) }` 各传给 `listAllPersistedRules`,`import type { RulesListFacade }` 标注一个变量再传,`declare const full: RulesFacade` 后把 `{ list: full.list, revoke: full.revoke }` 与 `{ list: (p, o) => full.list(p, o), revoke: (b, o) => full.revoke(b, o) }`(参数不写型)各写成内联字面量传 ⇒ `tsc --noEmit` 零诊断。判别点:0.83.2 报 TS2345(缺 `write` / `ccImportPrepare` / `ccImportRedeem`)与 TS2724(无 `RulesListFacade`)。
9691
+ - **G-R2**(回归约束,纯包层):完整五口照样零诊断 —— `full` 变量、`{ list: full.list, revoke: full.revoke, write: full.write, ccImportPrepare: full.ccImportPrepare, ccImportRedeem: full.ccImportRedeem }` 内联字面量、五口写成参数不写型的内联箭头(`list: (p, o) => full.list(p, o)` 一类)三形;内联字面量拼错口名 `{ list: full.list, revokee: full.revoke }` 恰报一条(TS2561,点名 `revokee`)两版同;运行期同一只两页假件两版都答 `{ ok: true }`、两条、`rev` 取自服务端、只调 `list`:第一页 `{ rules: [r1], rev: 3, nextCursor: 'c1' }`、第二页 `{ rules: [r2], rev: 3 }`,规则行取服务端列举行的形 `{ behavior: 'allow', rule: 'Bash(git status)', scope: 'global', tool: 'Bash', match: 'exact', command: 'git status', adds: [], source: 'user', status: 'live' }`(`r2` 换 `rule` / `command`;本包列全口只要求 `rule` / `scope` 是非空串,判据不读其余各键);`classifyRulesFailure({ status: 501 })` 两版都答 `error`,带 `errorCode: 'capability.rule_store_required'` 两版都答 `lane-unavailable`。
9692
+ - **G-M1**(本版证明,纯包层;M-1 / M-2):`modelIdentityResolvability({ engine: 'local', lanes: { processEnv: 'absent', settingsEnv: 'absent', modelCatalogFile: 'complete', followedSettingsFile: 'absent', followedProviderEnv: 'absent' }, engineAcceptsCatalogDefault: true })` ⇒ `resolvable`;`modelSetupDecision(那个结果, true)` ⇒ `proceed`。判别点:0.83.2 答 `unknown`(目录一格的 `complete` 不在闭集)。
9693
+ - **G-M2**(本版证明,纯包层;改口格):同一读数位为 `false` ⇒ `not_resolvable`;`modelSetupDecision(…, true)` ⇒ `offer_setup`,`modelSetupDecision(…, false)` ⇒ `explain_unconfigured`。判别点:0.83.2 答 `unknown` ⇒ `proceed`。
9694
+ - **G-M2′**(回归约束,纯包层):同一读数去掉位 / 位为显式 `undefined` / `'true'` / `1` / `null` ⇒ `unknown`;`modelSetupDecision(…, true)` ⇒ `proceed`。两版同答(0.83.2 上目录一格的 `complete` 不在闭集;0.83.3 上位没报 / 读不懂 ⇒ 目录这一路判不出)。措辞两版不同,见 G-M4。
9695
+ - **G-M3**(回归约束,纯包层):目录一格 ∈ {`partial`, `absent`, `unreadable`, 缺键, 表外词} × 另一来路 ∈ {`complete`, `partial`, `absent`, `unreadable`, 缺键} 的 25 格,位 `true` / `false` / 缺席三者判据与 `modelIdentityDetail` 逐字同答,且位缺席时与 0.83.2 同答;远程拓扑带位与本地 `lanes` 仍只看应答观测。
9696
+ - **G-M4**(本版证明,纯包层;M-3):103a-2 四段逐字。第一句(可解析)匹配「已配置」形(含 `supplies a model name`)且含 `separate check`;第二句(位 `false`)匹配「没配置」形(`no model name is configured`)、不匹配「已配置」形,且不含 `carries part of a model configuration` 指目录;第三 / 四段所在的判不出句既不匹配「已配置」也不匹配「没配置」形、含 `names a default model`,第三段含 `was not reported`,第四段不含而含 `gave no usable reading`;目录 `complete` ∧ 位缺席 ∧ 设置文件 `unreadable` ⇒ 判不出句同时含 `this client's settings file could not be read` 与目录那一段;目录 `complete` ∧ 位 `false` ∧ 设置文件 `unreadable` ⇒ 判不出句同时含 `this client's settings file could not be read` 与 `the local model catalog file names a default model, but the local engine is reported not to accept a catalog default`、不含 `was not reported`;位为显式 `undefined` 与键缺席逐字同句(含 `was not reported`、不含 `gave no usable reading`)。判别点:0.83.2 上目录 `complete` 各形都答 `…the local model catalog file gave no usable reading…`(不说目录里有缺省模型)。
9697
+ - **G-M5**(端侧验收;射程:终端 / 桌面端,本机引擎,宿主接本版并按本机引擎版本报位):只写模型目录文件(有一只启用的模型)、启动环境与设置里都不写模型名 ⇒ 本机引擎为服务端 7.101.0 或更新(位 `true`):首启不弹模型配置向导,引擎正常起;换回更早的引擎(位 `false`):弹向导;宿主不报位:不弹向导(`unknown` ⇒ `proceed`),引擎起不来时显示引擎自己那句错误。
9698
+ - 包层行为钉在门 `run-hooks-merged-disable-projection-test.mjs`(FS 段;FS7a = G-H6、FS7b = G-H6b,要装好的服务端包)、`run-rules-side-test.mjs`(G3t)、`run-model-identity-resolvability-test.mjs`(S8 段)。
9699
+
9700
+ ### 103d. 端上要动的读点
9701
+
9702
+ **终端**
9703
+
9704
+ - H-1:零改动即得 —— 宿主口已按来源名转交,终端自己的设置读取对 flag 来源合成启动参数文件与内联设置两处。升级后 `--settings` 里的 hooks 在引擎侧执行(G-H5);`--settings` 里的 `Stop` hook 会让显式 `--final-verify` 让位(G-H7)。
9705
+ - H-9:零改动(次序与 0.83.2 同,flag 组排在 local 之后)。
9706
+ - M-1 / M-2:接模型身份判据时,目录一格按「目录里有一只启用的、可作缺省的模型」报 `complete`(只是文件存在报 `partial` 或按实际内容判),并按终端钉的本机引擎版本报 `engineAcceptsCatalogDefault`(服务端 7.101.0 起为 `true`,更早为 `false`)。不报位 ⇒ 只用目录的用户照常进入、不弹向导(判不出),引擎起不来时显示引擎自己那句错误。
9707
+
9708
+ **网页端**
9709
+
9710
+ - R-1(建议):自带的列全口与失败分类换读本包 `listAllPersistedRules` / `classifyRulesFailure`;两口宿主对象(变量或内联字面量)直接传。🔴 改口:「规则店不在」只认机器码(103a-1),裸 501 落 `error`、如实显示原句,不再藏整面。同批删本地同名那份。
9711
+ - H-1 / H-9 / M-1 / M-2:零读点(不调 `hooksForWire()`;模型身份恒远程拓扑)。
9712
+
9713
+ **桌面端**
9714
+
9715
+ - M-1 / M-2:有本机引擎时同终端;连远程引擎时零读点。
9716
+ - H-1 / H-9:零读点(不调 `hooksForWire()`,与 §100a 同)。
9717
+
9718
+ **管理台**
9719
+
9720
+ - 零读点。
9721
+
9722
+ **验收方**
9723
+
9724
+ - 按 103c 各格;按「目录一格报 `complete` ⇒ 一律 `unknown`」「请求体设置来源只含四源」断言的判据按 103a′ 改锚(「请求体设置来源托管在前」的判据照旧成立)。
9725
+
9726
+ ### 103y. 🔴 三端升级必读(固定段式)
9727
+
9728
+ 1. **换钉 `^0.83.3` 之前**:无前置编译改动(纯放宽:`HookSettingsSource` 多一员、目录一格闭集多一词、读数多一个可选位、列全口入参放宽为「`list` 必填、其余四口可选」、多一个具名型)。🔴 例外:按 `HookSettingsSource` 或 `ModelIdentityLanes['modelCatalogFile']` 做**穷尽**分支(`switch` 带 `never` 兜底 / `Record<HookSettingsSource, …>` 表)的代码要补一臂(今天检索未见这类读点)。可观察变化:① 宿主设置口交 flag 来源时,那一源的 hooks 上请求体(此前不上);其中的 `Stop` hook 会让显式 `--final-verify` 让位(`resolveHeadlessFinalVerifyDetail` 答 `offReason: 'stop-hook'`,G-H7);② 请求体上设置来源 hooks 的次序不变(managed 在前),flag 来源的组排在 local 之后;`settingsDropped` 与开机清单里 flag 来源的行排在 local 之后;③ 设置口对不认识的来源名抛错的宿主,每轮多一行调试(建议返回 `null`);④ 模型身份:目录一格报 `complete` 的读数,报位 `true` 由 `unknown` 变 `resolvable`、报位 `false` 由 `unknown` 变 `not_resolvable`(别的来路判不出时仍 `unknown`,措辞点名目录);没报位(含值为 `undefined` 的键)仍 `unknown`,措辞改为点名目录 —— 今天没有端报这一格 `complete`。
9729
+ 2. **逐面**:终端 —— H-1 零改动即得、H-9 次序不变;接模型身份判据时按 103d 报目录一格与位。网页端 —— 规则列全口与失败分类建议换读本包,「规则店不在」改为只认机器码;其余零读点。桌面端 —— 有本机引擎时模型身份同终端;hooks 两行零读点。管理台 —— 零读点。
9730
+ 3. **成文改口**:见 103a′(作废 / 改读 / 新增 / 不变);已发段(§93、§100、§101、§102)不回改,以本段为准;§7 P-43 随版改。
9731
+
9732
+ **包侧缺口:** hooks —— ① flag 来源按宿主交来的一份读,不分启动参数文件与内联设置;宿主只交文件那份时内联设置里的 hooks 仍到不了引擎(KL-124)· ② 设置来源之间不去重,同一条 hook 写在两个来源里请求体上出现两次(本包按来源逐份拼接、不做内容去重;KL-125)· ③ 宿主报的启动模式位 `suppressedByStartupMode`(安全 / bare)只筛插件 hook,设置来源(user / project / local,本版起含 flag)在这一位下不收窄、照发引擎(KL-128)。规则 —— ④ 列举口第一页因过滤 `scope` 读不出形回的 `request.query_invalid` 落 `cursor-stale`,列全口不重试、原样交出;按「重试」提示对这一形没有用(KL-126)· ⑤ 失败判官只留 `status` / `errorCode` / `message` / `retryAfterSec` / `committed` 几格,引擎回体里的其余机读细格停在 wire 上(同 §83y ④)。模型身份 —— ⑥ 宿主不报 `engineAcceptsCatalogDefault` 时只用目录的配置答 `unknown`(不弹向导);位由宿主按自己钉的引擎版本判,本包不按版本号判 · ⑦ 目录一格 `complete` 不答「那只模型在本机能不能服务 / 网关认不认那个名」,配置中心下发的目录在启动预算之后才到的,启动时算不在场(KL-127)。 拼接序 —— ⑧ managed 在前时,`PreToolUse` 上排在 managed 之后的非 managed hook(设置来源与插件注册的组)能在 managed 放行之后改写输入,managed 的守卫看到的是改写前的输入(与 0.83.2 同);反过来把 managed 排到最后,会被引擎 hook 执行器的每事件墙钟预算、每事件模型条目上限与上下文总帽挤掉(不执行、调用照常)。两种次序在逐条执行的执行器上都有绕过;真正的解在引擎侧(请求体标出 managed 组、为它预留预算与上限、按最终输入执行 managed、因预算或上限没执行的同步条目按拒绝处置),本包届时按新契约标出 managed 组(KL-129)。
9733
+ ```
9734
+
9735
+ ---
9736
+
9737
+ ## §102 🆕 0.83.2(2026-09-26)审批卡一族三件 —— 常驻姿态下的放行谓词 `askSurvivesPosture`(CC-193)+ 卡上「强制位站在哪一个词上」`mandate` 与读口 / 措辞 + 通告码册 +2(CC-195)+ 停泊卡带出身词(CC-196)—— 与后台子代「缺席行」判定与措辞归包(CC-194)(patch;根公面 +19 名,1254 → 1273〔`askSurvivesPosture` / `readApprovalMandate` / `APPROVAL_MANDATE_WORDS` / `isApprovalMandateWord` / `approvalMandateDetail`;缺席行 3 常量 + 11 函数〕;公面类型 +13;`ApprovalCardRequest` / `ToolApprovalFrame` 各 +1 可选键 `mandate`;帧键镜像 30 → 31;`ENGINE_NOTICE_CODES` 71 → 73;开发依赖引擎 `~7.32.0`;零投影臂;peer sdk 地板 `>=11.3.0` 不动)
9738
+
9739
+ > **patch**,四件同发(本节按 0.83.2 的读法写;若与本版发布帖不一致,以发布帖为准):
9740
+ > ① **姿态放行谓词归包**(CC-193):会替人答审批卡的常驻模式下「这一张能不能由姿态答掉」,三端一只口;读卡上出身词与宿主 settings ask 规则读数两路,三态,「不知道」不折成放行。
9741
+ > ② **引擎 7.32.0 提货**(CC-195):卡上 `mandate`(强制位站在哪一个词上,六词闭集)两条腿同一把窄读、读口与每词一句说明;通告码册 +2。
9742
+ > ③ **停泊卡带出身词**(CC-196):待决列表行 → 卡的重铸补 `origin`,与活卡帧腿同形。
9743
+ > ④ **后台子代「缺席行」判定与措辞归包**(CC-194 A 半):缺席事件怎么发不变(§59 / §60 S-5:`subscribeEngineAgentPanelAbsence`,载荷 `{ taskId, lastSeenAtMs, absentForMs, wireTaskId? }`);本版新增的是**收到之后**的判定与措辞,三端共读,端只留接线(订阅 / 定时器 / 写自己的状态)与渲染。入参是本包自己的缺席事件形、三位最小行事实(`EngineAgentAbsenceRowFacts`:`status` / `absence?` / `viewing?`)与回收时每行一只的后台代理登记读数;端把自己的行映射过来即可,本包不认任何端的界面状态位名,也不读环境变量(TTL 要缩短的端自己传 `ttlMs`)。
9744
+ > 按会话读后台代理登记的读口([8377];随服务端 7.102.0)与「引擎登记为在跑 ⇒ 界面必须有这一行」的对账本版不做;在它到来之前,端给的登记读数只能是 `unknown`,缺席行一行都不删。
9745
+ > 另:审批 feed 一枚扇给多个会话的晚接入配方见 102f(零代码)。
9746
+ > **表态现势**:patch,全速模式,不设表态窗;各端列写本版读点普查的结论。
9747
+
9748
+ ### 102a. 处置表
9749
+
9750
+ #### 102a-A · 审批卡一族(S / M / O / N)
9751
+
9752
+ 各端列的词同 §101a:`pending·认领` / `pending` / `n/a`;具体坐标见 102d。
9753
+
9754
+ | # | 面 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
9755
+ |---|---|---|---|---|---|---|---|---|
9756
+ | S-1 | `askSurvivesPosture(req: { readonly origin?: string } \| null \| undefined, facts?: AskPostureFacts \| null): AskPostureVerdict`;型 `AskPostureVerdict`(`{ kind: 'must_ask'; by: AskPostureSurvivalRoad } \| { kind: 'posture_may_answer' } \| { kind: 'unknown' }`)/ `AskPostureFacts { settingsAskRuleMatched?: boolean }` / `AskPostureSurvivalRoad`(`'origin' \| 'settings_ask_rule'`) | — → **新增**:常驻姿态下的单一谓词。判法见 102a-1;返回值冻结,纯函数;JSON 形入参(普通对象 / 数组 / 原始值)不抛,带会抛的取值器或 Proxy 陷阱的对象会把异常原样抛出 | pending(必改:壳侧 bypass 臂前自带的 ask 规则判定换读本口,判据见 102a-1;治理 / 安全出身 / 强制三臂照旧在前) | n/a(无姿态自动应答;将来加时直接用本口) | n/a(同左) | n/a | pending | 102a-1 · 102b · G-S1–G-S4 |
9757
+ | M-1 | `ApprovalCardRequest.mandate?: ApprovalMandateWord` / `ToolApprovalFrame.mandate?: string`;帧键镜像 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` +`mandate`(30 → 31) | 无 → 活卡帧腿与停泊审批行腿经同一把窄读上卡:只认严格在场的六词之一(精确字节);表外 / 坏形 / 缺席 ⇒ 卡上没有这一位、不编词。词在场 ⇒ `approvalIsMandated` 答 `true`(上游契约:词在场 ⇔ 那个词就是强制位的全部理由 ⇒ 有词必有位;只有词没有位是矛盾形,按强制读 = 收紧);卡上 `mandated` 键仍只透传 wire 原位,不从词长出来;`approvalIsMandated` 的入参型改为具名导出型 `ApprovalMandatedFacts`(三位都可缺,含 `mandate?: string`;只带 `mandate` 的最小形可直接传),入参放宽、零编译面回退 | n/a(零改动即得;要显示理由见 M-3) | n/a | n/a | n/a | pending | 102b · G-M2 / G-M3 |
9758
+ | M-2 | `APPROVAL_MANDATE_WORDS`(冻结,六词)/ `ApprovalMandateWord` / `isApprovalMandateWord(v)` / `readApprovalMandate(card)` | — → **新增**:闭集、成员判据、读口(只读自有键;缺席答缺席)。词表与引擎逐词逐序同源 | n/a | n/a | n/a | n/a | pending | 102b · G-M4 |
9759
+ | M-3 | `approvalMandateDetail(word: ApprovalMandateWord): string` | — → **新增**:每词一句「为什么这张卡必须问」(句子见 102a-2)。与 `mandatedApprovalDetail()` 并列不互替:那一句答「什么清不掉它、谁可以当场答」,这一句只答「为什么它站在强制上」 | pending(建议:强制卡上 `readApprovalMandate(card)` 有词时,在 `mandatedApprovalDetail()` 那一行旁边渲这一句) | pending(建议,同左) | n/a(座位契约 `ToolPermissionRequest` 无 `mandated` / `mandate` 位,存量缺口) | n/a | pending | 102a-2 · G-M4 |
9760
+ | O-1 | 停泊审批行 → 卡的 `origin`(`surfaceFsApprovalAndDecide`) | 行顶层 `origin` 在重铸处丢失 → 与活卡帧腿逐字同形透传(非空串、原文字节、开集、缺席不编词、绝不折成 `policy`);`riskDescriptor` 里的同名键不认。两腿与 `askSurvivesPosture` 共用一把读法:只认**自有键**(活卡帧腿此前按原型链读 —— JSON 帧零变化) | n/a(零改动即得) | n/a | n/a | n/a | pending | 102b · G-O1 |
9761
+ | N-1 | `ENGINE_NOTICE_CODES` / `ENGINE_NOTICE_AUDIENCE` +`approval.read_root_granted` / `approval.read_root_grant_rejected`(audience `user`) | 码册外(只落调试)→ 码册内、说给用户听;位置紧跟 `task.interrupt_unconsumed`;71 → 73 | n/a(按码册分发的通用行零改动即渲;要专属文案另议) | n/a | n/a | n/a | pending | 102b · G-N1 |
9762
+
9763
+ #### 102a-B · 后台子代缺席行(A)
9764
+
9765
+ 各端处置:终端 pending(必改:A-1–A-7 换读、删本地判据;行句 / TTL / 回收句 / 回收后终态句四个同名名字按同名影子对账登记豁免,到期 0.85.0);网页端 pending(建议:接任务面时直接读本组读口,今天不订阅缺席口 = 零改动);桌面端 n/a(同网页端);管理台 n/a(零读点)。
9766
+
9767
+ | # | 面 | 本包做了什么 | 端要做什么 |
9768
+ |---|---|---|---|
9769
+ | A-1 | 缺席行判据 `isEngineAgentAbsentRow(row)` | **new**:缺席标在场 ⇔ 缺席行;**不看 status**(缺席行的 status 恒是最后已知态,通常 `running`);坏入参(非对象 / `absence` 非对象)⇒ `false` | 凡按 status 出标签处(行 / 详情页头 / 舰队树)先判本谓词;命中渲 `ENGINE_AGENT_ABSENT_ROW_TEXT`,不渲任何终态词 |
9770
+ | A-2 | 落标 `engineAgentAbsenceMarkOf(row, ev)` · 停表 `engineAgentAbsenceClockStopMs(row)` | **new**:只在 `status === 'running'` 的行上、只在首次缺席时返回标 `{ lastSeenAtMs, absentForMs }`;行已不是 `running`(真终态先到)、已是缺席行、事件时刻不是有限数 ⇒ `null`(这条事件不作数)。停表点 = `lastSeenAtMs` | 订阅缺席口:`null` 就不动行;否则把标存在行上,**status 一个字不改**;elapsed 按「真终局钟 ?? 停表点 ?? 现在」算 |
9771
+ | A-3 | 撤标 `engineAgentPanelEventClearsAbsence(ev, current?)` | **new**:主通道 `tick` / `fleet-row`(行回来了)⇒ 撤;`end` ⇒ 撤,但 `current`(端记在行上的当代周期身份)判得出它是上一周期迟到的 ⇒ 不撤(判据同 `isStaleEngineAgentPanelEnd`);`sweep` 与认不出的 kind ⇒ 不撤 | 主通道每条事件先问一次;撤标同拍撤停表(行回来了,钟接着走);`end` 照旧走你自己的 settle |
9772
+ | A-4 | 在跑数 `engineAgentRowCountsAsRunning(row)` · 分格 `tallyEngineAgentRows(rows)` | **new**:在跑 = status 为 `running` / `pending` 且不是缺席行;分格读数 `{ running, absent, byStatus }`,缺席行**只进 `absent`**,不进 `running`,也不进 `byStatus` 的任何一格;`byStatus` 按端的状态词原样分(无原型对象) | pill / 页脚「N 个后台任务」/ 非交互车道的等待闸 / 面板小标题一律读这两只;缺席行仍可见、仍可进入查看,只是不计数 |
9773
+ | A-5 | turn 末 sweep `engineAgentTurnSweepSettles(taskId, row)` | **new**:只有「`running` ∧ 非缺席 ∧ 非常驻」才结;常驻读本包常驻台账(`isEnginePanelTaskResident`) | 收到主通道 `sweep` 时逐行问;`false` 的行一个字不动 |
9774
+ | A-6 | 回收 `reapEngineAgentAbsentRows(rows, { nowMs, ttlMs?, owned? })` · `engineAgentAbsenceTtlDueAtMs(row, ttlMs?)` · `ENGINE_AGENT_ABSENCE_TTL_MS` · `ENGINE_AGENT_REGISTRY_READINGS` | **new**:缺席行自 `lastSeenAtMs` 起满 `ttlMs`(缺省 30 分钟;坏值回落缺省)**只是去看登记读数的时刻**:该行 `registry` 为 `ended`(登记里已是终态)或 `not_listed`(本会话登记里没有它)⇒ 进 `reclaim`,回收事实 `{ taskId, lastSeenAtMs, absentForMs, dueAtMs, registry }`;为 `running`(登记里仍是非终态,含停泊)/ `unknown` / 缺席 / 认不出的词 ⇒ **不删,也不进 `heldByViewer`**;登记确认离场但 `viewing === true`(有人正看着)⇒ 不回收、进 `heldByViewer`;到期前不看读数(`ended` 也不删);grace 窗与这条路无关;非缺席行永不走这条路;`owned` 在场时只判其中的 id;`nowMs` 不是有限数 ⇒ 一行都不回收 | 按 `engineAgentAbsenceTtlDueAtMs` 上一只到点闹钟(本包对同一个缺席周期只发一条事件,事件本身不是节拍),到点与 turn 末各问一次;**登记不确认离场就不续拍**(不起常驻轮询,下一个自然节拍再同判);登记读口到来之前 `registry` 只能给 `unknown`(或不给);对 `reclaim` 每条:删行 + 上一行 `engineAgentAbsenceDroppedLine`(**不许静默**);`heldByViewer` 的行在观看结束时再问一次 |
9775
+ | A-7 | 措辞 `ENGINE_AGENT_ABSENT_ROW_TEXT` · `engineAgentAbsenceDroppedLine(label, ttlMs?, removeReason?)` · `engineAgentTerminalAfterDropLine(label, status, hasReport)` | **new**:三句单源;行句 = `engine no longer reports this agent · it may still be running`;行句与回收句零终态词、不说「已结束」(登记说它不在跑,不等于知道它成了什么);回收句的分钟数由 TTL 反推;`removeReason`(舰队离场原词,开集)在场就原样说出并声明它不是结局,缺席 / 空串一字不加;回收后终态句只转述真终态路径带来的原词;展示名、离场原词与回收后终态句的 `status` 过 `displayUntrusted`(单行、控制符转义;原词封 64) | 端不再自铸这三句;离场原词与「这一行回收过」需要端自己记(见包侧缺口) |
9776
+
9777
+ #### 102a-1 · `askSurvivesPosture` 判法
9778
+
9779
+ 1. 读卡上的自有键 `origin`:非空字符串才算在场(原文字节,不 trim、不改大小写);原型链上的同名键、非字符串、空串 = 缺席。
9780
+ 2. 出身词是七个必问词之一 ⇒ `{ kind: 'must_ask', by: 'origin' }`(宿主报了「没命中」也说不掉):`content_question` / `org_rule` / `hook` / `ask_rule`,以及 `org_unavailable` / `rule_store_unavailable`(组织治理源 / 规则店读不出;`ruleStoreUnreadable` 的 `store` / `call` 两形一律)/ `denial_limit_fallback`(分类器连拒到上限后交给人)—— 后三个是引擎要求只能由真人答的出身:前两个引擎一律带 `requiresRealApproval`,`denial_limit_fallback` 由引擎自己的铸点带上(部署策略自带回落词时可以不带这一位,本口照样必问 —— 收紧方向);停泊卡上今天未必带得到那一位,本口不依赖它。
9781
+ 3. 否则 `facts.settingsAskRuleMatched === true` ⇒ `{ kind: 'must_ask', by: 'settings_ask_rule' }`。
9782
+ 4. 否则 `settingsAskRuleMatched === false`,且出身词缺席或是本版认得的另外四个之一(`ancestor_marked` / `shell_gate_tighten` / `safety_tighten` / `policy`:出身词本身不足以判,它们可带可不带更强的位,由宿主既有检查先判)⇒ `{ kind: 'posture_may_answer' }`。
9783
+ 5. 其余 ⇒ `{ kind: 'unknown' }`。两形:① 宿主**没报**(缺席或非布尔)—— 不论出身词缺席还是认得的非必问词:settings ask 规则那一路(CC 先于 bypass 判它,与谁先问无关)命没命中不知道;引擎持设置时引擎侧命中会铸 `ask_rule`,但设置不下发 / 读不出发送档时宿主是唯一匹配者,本口分不出这两种部署,所以 `policy` 一类的出身词在宿主没报时也不说「可以放」;② 本版不认识的出身词(宿主报了没命中也一样:它可能恰是一个新的必问出身)。
9784
+
9785
+ 宿主怎么报 `settingsAskRuleMatched`:只认**正向命中**。命令拆不全、判不出(变量展开、命令替换等)报 `false`;没有跑匹配器就**不报**(缺席与 `false` 是两件事 —— 没报时除七个必问出身词外一律 `unknown`)。拿到 `unknown` 时按自己的 settings 规则判,**不要**当放行。
9786
+
9787
+ 入参射程:JSON 形入参(普通对象 / 数组 / 原始值)不抛;带会抛的取值器或 Proxy 陷阱的对象会把异常原样抛出(本口不吞)。
9788
+
9789
+ 本口**不读** `governanceForced` / `requiresRealApproval` / `mandated` / `mandate`:它们是另一类、更强的事实,宿主既有的检查排在本口之前(例:治理 ⇒ 出卡;只有真人能清 ⇒ 出卡;持久规则清不掉 ⇒ 出卡;然后才问本口)。只调本口而删了那几项检查 = 回归。
9790
+
9791
+ #### 102a-2 · 六个词与六句说明
9792
+
9793
+ | 词 | 什么时候在场 | `approvalMandateDetail(词)` |
9794
+ |---|---|---|
9795
+ | `operator_always` | 部署给 shell 命令下了逐次确认令 | `this deployment requires a separate confirmation for each shell command, and this call is one of them` |
9796
+ | `tool_marks` | 工具自己声明了对外写 / 不可逆 | `this tool declares that it reaches outside this machine or makes changes that cannot be undone` |
9797
+ | `probe_mandate` | 这一次调用的检查判定它要单独确认(内置 shell 检查:读本会话允许目录之外的路径) | `the check run on this call marked it as needing its own confirmation (the built-in shell check does so for a read outside the directories allowed for this session)` |
9798
+ | `probe_unanswered` | 检查问了没答上(超时 / 失败),边界未知 | `the check run on this call did not answer (it timed out or failed), so whether the call stays inside the directories allowed for this session is unknown` |
9799
+ | `write_protection` | 这次改动的目标在写保护表上 | `this change lands on a protected location (the agent's own configuration), which is confirmed one change at a time` |
9800
+ | `write_protection_unresolved` | 写保护判定解析不出这次改动落在哪 | `the protected-location check could not tell where this change lands, so whether it touches a protected location is unknown` |
9801
+
9802
+ 表外值(只会来自强转):交一句中性话 `the reason reported for this confirmation is not one this client recognises, so it shows no reason`,不渲那个值、不抛。
9803
+
9804
+ ### 102a′. 成文改口
9805
+
9806
+ - **作废**:① 「停泊审批卡上恒无 `origin`」的判据眼(O-1 起行上有即卡上有);② 「`ENGINE_NOTICE_CODES` 七十一码」「`approval.read_root_*` 码册外」(N-1 起七十三码、两枚在册);③ 「帧键镜像 30 键」(M-1 起 31 键)。
9807
+ - **新增**:G-S1–G-S4 / G-M1–G-M5 / G-O1 / G-N1 / G-R1(回归约束)/ G-A1–G-A4 / G-E1–G-E3。
9808
+ - **作废**:§60a S-5「订阅缺席口 ⇒ … **+ 置可回收标**(等价 `notified` + `evictAfter = now + grace`)」—— 缺席行不按 grace 窗回收,也不按 30 分钟无条件回收。旧判据眼「缺席 30 秒 / 30 分钟后行被回收」装 0.83.2 后判红是预期行为。
9809
+ - **改读**:§59a S-1 / §60a S-5 的行句「engine no longer reports this agent · outcome unknown」→ `ENGINE_AGENT_ABSENT_ROW_TEXT`(`… · it may still be running`);按旧句做文本匹配的判据 / 探针同批改锚。回收 = A-6(到期 ∧ 登记确认离场才删,删必上一行说明);grace 窗只属于已有终态的行。
9810
+ - **改读(终端)**:壳侧自带的「settings ask 规则先于姿态」判定换读本口时,报读数的键名改为 `settingsAskRuleMatched`,判不出 / 求值抛错由「不报」改为报 `false`(见 102d S-1)。
9811
+ - **改读**:§85 S-5 判据口 `approvalIsMandated` 的读数由两种扩到三种 —— 闭集内的 `mandate` 词在场也答 `true`(有词必有位);`{ mandated: true }` / `{ ruleOffersAbsence: 'mandated' }` / `{}` 三形答案不变(G-R1)。按「只有词没有位 ⇒ `false`」写的判据眼作废。
9812
+ - **不变**:§59 S-1 / §60 S-5 的缺席事件形、去重(每个缺席周期一条)、缓冲与回放规则、「不许翻译成 completed / failed / stopped」。
9813
+ - 已发段(§59、§60、§100、§101)不回改,以本段为准。
9814
+
9815
+ ### 102b. 缺席语义(逐键)
9816
+
9817
+ - `mandate` 缺席 = 那一问不站在单一的表内词上(另有治理 / hook / 祖先那几扇门,或不止一个理由),或引擎 / 服务端还不铸这一位 —— **不是**「不强制」(读 `mandated` / `approvalIsMandated`);表外词与坏形同缺席。`readApprovalMandate` 对缺席答 `undefined`(JSON 形入参不抛;带会抛的取值器或 Proxy 陷阱的对象会把异常原样抛出)。
9818
+ - `mandate` 在场而 `mandated` 缺席(上游契约下的矛盾形:词在场 ⇔ 那个词就是强制位的全部理由,有词必有位):词照上卡,卡上 `mandated` 键仍不长出(只透传 wire 原位);`approvalIsMandated` 答 `true`(按强制读 = 收紧方向)。
9819
+ - 停泊卡的 `origin` 缺席 = 行上没有这一位(今天的服务端即如此)、或是老服务端 / 非 ask 路径 —— **不是** `policy`。
9820
+ - `askSurvivesPosture` 的 `facts` 缺席 / `null` / `settingsAskRuleMatched` 非布尔 = 宿主没报 ⇒ 除七个必问出身词外一律 `unknown`(认得的非必问词也是);`unknown` 不是放行。
9821
+ - 两枚新通告码缺席 = 没有审批人的读根授权答复,或服务端尚未转发这两枚。
9822
+ - `absence` 缺席 = 这一行不是缺席行(引擎在报它,或它已有终态);**不是**「缺席了 0 毫秒」。
9823
+ - `viewing` 缺席 = 没人正看着(或端没有这一概念)。🔴 它不是服务端后台登记行上的 `retained`(那一位指「服务被显式保留」,与有没有人在看无关),接线时不许拿它来填。
9824
+ - 缺席标与回收事实上的 `absentForMs` = 缺席事件检出时的读数(检出阈值,约 30 秒),**不是**回收时已缺席多久;要后者用 `nowMs − lastSeenAtMs`。
9825
+ - `registry` 缺席 = 读不到登记 = 与 `unknown` 同判:**不删**。闭集外的词同判。`ended` / `not_listed` 不是结局:它们只准许删行,这一行成了什么由真终态路径说。
9826
+ - `removeReason` 缺席 / 空串 = 引擎没说为什么离场 ⇒ 回收句只说 `outcome unknown`,不补词。
9827
+ - 回收事实里没有状态词位:回收不是结局,本包不替它定 completed / failed / stopped;`registry` 只记准许删行的那一只读数。
9828
+ - `engineAgentAbsenceClockStopMs` / `engineAgentAbsenceTtlDueAtMs` 返回 `undefined` = 不是缺席行(不是 0)。
9829
+
9830
+ ### 102c. 黑盒判据骨架
9831
+
9832
+ > 🔴 标「本版证明」的格在 **0.83.1** 产物上必须 FAIL、在 0.83.2 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读之后的行为,不按包的两版产物对拍。请记下两次跑的产物标识(版本 + tarball shasum)。前缀:G-S = 姿态谓词、G-M = `mandate`、G-O = 停泊卡出身词、G-N = 通告码册、G-A = 缺席行纯判定、G-E = 缺席行端侧。
9833
+
9834
+ - **G-S1**(本版证明,纯包层;S-1):`askSurvivesPosture({ origin: 'hook' }, {})` ⇒ `{ kind: 'must_ask', by: 'origin' }`;`({ origin: 'ask_rule' })` / `({ origin: 'org_rule' })` / `({ origin: 'content_question' })` / `({ origin: 'org_unavailable' })` / `({ origin: 'rule_store_unavailable' })` / `({ origin: 'denial_limit_fallback' })` 同;`({ origin: 'policy' }, { settingsAskRuleMatched: false })` ⇒ `{ kind: 'posture_may_answer' }`;`({ origin: 'policy' }, {})` ⇒ `{ kind: 'unknown' }`(宿主没报,认得的非必问词也不放);`({}, {})` ⇒ `{ kind: 'unknown' }`;`({}, { settingsAskRuleMatched: true })` ⇒ `{ kind: 'must_ask', by: 'settings_ask_rule' }`;`({}, { settingsAskRuleMatched: false })` ⇒ `posture_may_answer`。判别点:0.83.1 无此导出。
9835
+ - **G-S2**(本版证明,纯包层;S-1 坏形):`({ origin: 'hook' }, { settingsAskRuleMatched: false })` ⇒ 仍 `must_ask`;`({ origin: 'org_unavailable' }, { settingsAskRuleMatched: false })` / `({ origin: 'rule_store_unavailable', ruleStoreUnreadable: 'call' }, { settingsAskRuleMatched: false })` / `({ origin: 'denial_limit_fallback' }, { settingsAskRuleMatched: false })` ⇒ 仍 `{ kind: 'must_ask', by: 'origin' }`(判别点:0.83.1 无此导出);`({ origin: 'Hook' }, { settingsAskRuleMatched: false })` ⇒ `unknown`;`({}, { settingsAskRuleMatched: 'true' })` ⇒ `unknown`;`({ origin: 'policy' }, { settingsAskRuleMatched: 'true' })` ⇒ `unknown`(非布尔 = 没报);`({ origin: 'policy', requiresRealApproval: true, mandated: true, governanceForced: true }, { settingsAskRuleMatched: false })` ⇒ `posture_may_answer`(射程:本口不读这几位);返回值 `Object.isFrozen` 为真。
9836
+ - **G-S3**(本版证明,纯包层;S-1 × O-1 端到端):停泊腿驱动一行 `{ …, origin: 'hook', mandated: true }`,卡口收到的卡请求喂 `askSurvivesPosture(card, {})` ⇒ `must_ask`(by `origin`)。判别点:0.83.1 上卡请求没有 `origin`(且无此导出)。
9837
+ - **G-S4**(端侧验收;射程:真部署,终端 bypass,宿主改读本口后):settings 里 `"ask": ["Bash(git push:*)"]`,bypass 下让代理执行 `git push` ⇒ 出卡(不被姿态答掉);同会话 `ls` ⇒ 零卡。
9838
+ - **G-M1**(本版证明,纯包层;M-2):`APPROVAL_MANDATE_WORDS` 逐词逐序等于 `operator_always, tool_marks, probe_mandate, probe_unanswered, write_protection, write_protection_unresolved` 且冻结;`isApprovalMandateWord('Tool_marks') === false`;`readApprovalMandate({ mandate: 'tool_marks' }) === 'tool_marks'`、`readApprovalMandate({ mandate: 'mandated' }) === undefined`、`readApprovalMandate(Object.create({ mandate: 'tool_marks' })) === undefined`。
9839
+ - **G-M2**(本版证明,纯包层;M-1 活卡帧腿):`surfaceToolApprovalFrameAndRespond({ type: 'tool_approval', approvalId: 'x', toolName: 'Bash', args: { command: 'cat /etc/hosts' }, mandated: true, mandate: 'probe_mandate' }, …)` ⇒ 卡请求 `mandate === 'probe_mandate'`;`mandate: 'brand_new'` ⇒ 卡请求无这一键;只有 `mandate` 没有 `mandated` ⇒ 词上卡、卡请求无 `mandated` 键、`approvalIsMandated(card) === true`(词在场 ⇒ 有位)。
9840
+ - **G-M3**(本版证明,纯包层;M-1 停泊腿):待决行 `{ …, mandated: true, mandate: 'write_protection' }` ⇒ 卡请求 `mandate === 'write_protection'`;`riskDescriptor: { mandate: 'tool_marks' }` ⇒ 无这一键。
9841
+ - **G-M4**(本版证明,纯包层;M-3):六句两两不同,各 ≥ 40 字,不含任何一个词表标识符;都不匹配 `/\b(write|add|create|save)\b[^.]*\brule\b/i`、`/every time|each time/i`、`/\bonly a (person|human)\b/i`;与 `mandatedApprovalDetail()` / `askOriginDetail(每个词)` / `gateDeniedByDetail(每个词)` / `ruleStoreUnreadableDetail('store'|'call')` 都不同。
9842
+ - **G-M5**(本版证明;射程:真部署,服务端发布版带上 `mandate` 之后):会话根外读一个文件触发强制卡 ⇒ 卡请求 `mandate === 'probe_mandate'`,`approvalMandateDetail` 那一句在屏上;服务端未带之前本格 N/A(不是 FAIL)。
9843
+ - **G-O1**(本版证明,纯包层;O-1):停泊腿驱动一行 `{ …, origin: 'hook' }` ⇒ 卡请求 `origin === 'hook'`;`origin: ' Hook '` ⇒ 原样;`origin: ''` / `7` / `null` ⇒ 无这一键;行上无 `origin` ⇒ 无这一键(不是 `policy`);活卡帧与停泊行的原型链上挂 `origin: 'hook'`(自有键上没有)⇒ 卡请求无这一键(只认自有键)。判别点:0.83.1 上停泊卡恒无 `origin`,活卡帧腿会把原型链上的 `origin` 上卡。
9844
+ - **G-N1**(本版证明,纯包层;N-1):`ENGINE_NOTICE_CODES.length === 73`;`approval.read_root_granted` 紧跟 `task.interrupt_unconsumed`、`approval.read_root_grant_rejected` 紧跟它;`noticeAudienceOf` 两枚都答 `user`;`engineNoticeInCatalog` 两枚都答 `true`。
9845
+ - **G-R1**(回归约束,纯包层):`approvalIsMandated` 对 `{ mandated: true }` / `{ ruleOffersAbsence: 'mandated' }` / `{}` 的答案与 0.83.1 相同;`mandatedApprovalDetail()` 逐字不变。
9846
+
9847
+ **后台子代缺席行(G-A / G-E)**
9848
+
9849
+ 射程:G-A 组在发布包上用 node 直接 import 就能跑(纯判定层);G-E 组要求端已换读本版这组读口。计数一律按**行**计。
9850
+
9851
+ - **G-A1**(本版证明,纯包层):真投影 `projectFleetAgentRowsFor` 喂一条 `running` 行,再喂空表、钟推 31 秒 ⇒ 缺席订阅口恰收到这一行一条事件;`engineAgentAbsenceMarkOf({ status: 'running' }, ev)` 返回恰两键的标;带上标的行:`isEngineAgentAbsentRow` 为真、`engineAgentRowCountsAsRunning` 为假、`tallyEngineAgentRows([row])` 为 `running === 0`、`absent === 1`、`byStatus` 无自有键(`Object.keys(t.byStatus).length === 0`)、`engineAgentTurnSweepSettles` 为假、`engineAgentAbsenceClockStopMs` = 最后一次喂它的时刻。
9852
+ - **G-A2**(本版证明,纯包层):同一行不带 `registry`,`reapEngineAgentAbsentRows` 在 `lastSeenAtMs + 30 分钟` 与 `+ 300 分钟` 都给空 `reclaim`、空 `heldByViewer`;`registry: 'unknown'` 与 `'running'` 同;`registry: 'ended'` 在 `+ 30 分钟 − 1 毫秒` 给空、在 `+ 30 分钟` 恰一条,五键恰为 `taskId` / `lastSeenAtMs` / `absentForMs` / `dueAtMs` / `registry`;`'not_listed'` 同样恰一条且 `registry === 'not_listed'`;`registry: 'ended'` 且 `viewing: true` ⇒ `reclaim` 空、`heldByViewer` 恰这一 id;`registry: 'unknown'` 且 `viewing: true` ⇒ 两表都空;`registry: 'ended'` 且只带旧名 `retained: true` ⇒ 照常恰一条回收(旧名不读)。
9853
+ - **G-A3**(本版证明,纯包层):同一投影再喂回这一行 ⇒ 主通道 `fleet-row` 一条,`engineAgentPanelEventClearsAbsence` 为真;再喂终态行 ⇒ `end` 一条,同样为真;`{ kind: 'end', cycleSeq: 1 }` 对 `current = { cycleSeq: 2 }` 为假;`{ kind: 'sweep' }` 为假。
9854
+ - **G-A4**(本版证明,纯包层):`ENGINE_AGENT_ABSENT_ROW_TEXT` 逐字为 `engine no longer reports this agent · it may still be running`;`engineAgentAbsenceDroppedLine('x')` 以 ` · outcome unknown` 结尾;行句与回收句都不含 completed / failed / stopped / killed / done / success / finished / ended;`engineAgentTerminalAfterDropLine('a\u0007\nb', 'completed\u001b[31m\nx', false)` 不含控制字节与换行(展示名与 `status` 都消毒)。
9855
+ - **G-E1**(端侧验收(端换读后);射程:端已换读本组读口):一只后台子代的舰队行消失 > 30 秒且无终态 ⇒ 任务列表那一行渲缺席句、计时停住;页脚在跑数不含它;下一轮结束后它没被标成完成。
9856
+ - **G-E2**(端侧验收(端换读后);射程同上,服务端尚无登记读口):同一行 30 分钟后**仍在**任务面上,转录里**没有**回收句;它回来(又有进度帧)⇒ 缺席句消失、计时接着走。
9857
+ - **G-E3**(端侧验收(端换读后);射程同上):缺席期间真终态到达 ⇒ 缺席句消失、按终态渲。
9858
+ - 包层行为钉在门 `run-engine-agent-absence-projection-test.mjs`。
9859
+
9860
+ ### 102d. 端上要动的读点
9861
+
9862
+ **终端**
9863
+
9864
+ - S-1:bypass 臂前自带的「settings ask 规则先于姿态」判定(壳侧先落的那一处)→ 换成 `askSurvivesPosture(card, { settingsAskRuleMatched })`:`must_ask` ⇒ 出卡;`posture_may_answer` ⇒ 姿态放行;`unknown` ⇒ 按壳自己的 settings 规则判(不当放行)。`settingsAskRuleMatched` 由壳的匹配器报:只认正向命中,拆不全 / 判不出 / 求值抛错报 `false`,没跑匹配器才不报。🔴 必改两处:键名用 `settingsAskRuleMatched`(不是壳侧现有判定用的那个键名);判不出与抛错两形改报 `false`(壳侧现有装配交的是空对象)。治理臂 / 安全出身臂 / 强制让位臂照旧排在它前面。
9865
+ - M-3(建议):强制卡上 `readApprovalMandate(card)` 有词时,在 `mandatedApprovalDetail()` 那一行旁边渲 `approvalMandateDetail(word)`。
9866
+
9867
+ **网页端 / 桌面端**
9868
+
9869
+ - S-1:今天没有姿态自动应答,零改动;将来加时直接用本口。
9870
+ - M-3:网页端(建议)同终端;桌面端 n/a —— 座位契约 `ToolPermissionRequest` 上没有 `mandated` / `mandate` 位,桌面端的强制卡拿不到这两位(存量缺口,见包侧缺口)。
9871
+
9872
+ **管理台**
9873
+
9874
+ - 零读点。
9875
+
9876
+ **验收方**
9877
+
9878
+ - 按 102c 各格;按「停泊卡恒无 `origin`」「七十一码」「帧键镜像 30 键」断言的判据按 102a′ 改锚。
9879
+
9880
+ **后台子代缺席行**
9881
+
9882
+ - **终端**:判据与措辞今天在终端自己的一只叶子里(行句常量、30 分钟常量、回收句、回收后终态句四个名字与本版同名),另有在跑单源与面板桥的 sweep / 撤标 / 回收三臂,以及一只登记读数接缝(今天恒答不知道)。换读映射:终端行上的缺席位 → `absence`、查看态标 → `viewing`(🔴 不是服务端后台登记行的 `retained`:那一位指「服务被显式保留」)、状态词原样 → `status`、登记接缝的四种读数 → `registry` 四词;停表由 `engineAgentAbsenceClockStopMs` 给,不必再往行上写结束时刻;TTL 测试旋钮由端自己读好传 `ttlMs`。这四个同名名字按 §100e 的同名影子对账登记了豁免行(到期 0.85.0),终端换读后删本地那份、请在发布帖里点一下,本包同批删行。
9883
+ - **网页端 / 桌面端**:检索未见缺席订阅口的读点(今天不订阅 = 离场的行停在最后已知态、不回收,与 0.72.11 相同)。接任务面时按 102a 订阅并读本组读口。
9884
+
9885
+ ### 102f. 审批 feed 一枚扇给多个会话(配方,零代码)
9886
+
9887
+ 订阅回调是**边沿触发**:只在快照内容变化(或从「不知道」恢复)时发。端把一枚 feed 扇给多个会话的计数账(`createSuspendedAskTracker`,每会话一只)时,晚于首拍接入的会话在引擎侧审批集合真变之前拿不到现势。接入的同一拍按拉面补读一次:
9888
+
9889
+ - `handle.reading()` 为 `present` ⇒ `tracker.ingest(reading.snapshot)`;
9890
+ - 为 `unknown` ⇒ 可喂 `handle.snapshot()`(上一张真快照;已接入的会话在「不知道」期间不撤卡,喂它新会话才与之一致),为 `null` 不喂;
9891
+ - 为 `unobserved` ⇒ 不喂,等首拍。
9892
+
9893
+ 端自己缓存最近一次发布物、接入即重放与此等价(「不知道」臂喂进新账是零 delta)。显式刷新 `refresh()` 在回体整段读不懂时先发「不知道」臂再 reject(端的视图不受影响,reject 留给「按下刷新」的端显示失败);调它的端请 `.catch()`,不调的端零影响。
9894
+
9895
+ ### 102y. 🔴 三端升级必读(固定段式)
9896
+
9897
+ 1. **换钉 `^0.83.2` 之前**:无前置编译改动(只增公面;`ApprovalCardRequest` / `ToolApprovalFrame` 各多一个可选键)。可观察变化:① 停泊审批行带出身词时,重开的卡上多一个 `origin`(今天的服务端行上还没有,零变化);② 服务端带上 `mandate` 之后,卡上多一个 `mandate`;③ `approval.read_root_granted` / `approval.read_root_grant_rejected` 两枚通告从「码册外、只落调试」变成用户面的通用通告行;④ `approvalIsMandated` 对只带闭集内 `mandate` 词、不带 `mandated` 位的卡答 `true`(上游契约下不出现的矛盾形,今天服务端不带 `mandate`,零变化);⑤ 活卡帧腿的 `origin` 只认自有键(JSON 帧零变化)。
9898
+ - **缺席行**:零前置(patch;只增)。终端自己那份判定与措辞可以先留着,换读前两份行为一致(合法入参逐项同;本包只在坏入参上更严:坏事件不落标、坏 TTL 回落 30 分钟、坏钟不回收、`absence: null` 不算缺席、展示名与离场原词呈前消毒)。
9899
+ 2. **逐面**:终端 —— bypass 臂前的 settings ask 规则判定换读 `askSurvivesPosture`(102d),`unknown` 退回自己的规则判、不当放行,既有的治理 / 安全出身 / 强制三项检查保留在它前面;强制卡建议加渲 `approvalMandateDetail`。🔴 终端换读时**必改两处**,否则行为会变:① 报读数的键名是 `settingsAskRuleMatched`(终端现有的壳侧同名判定用的是另一个键名,原样传进来本口读不到 ⇒ 当作没报);② 判不出 / 求值抛错报 `false`(不是不报)—— 没报时除七个必问出身词外一律 `unknown`。两处都改对之后,本口与终端现行的壳侧判定逐格同答;漏改任一处,`policy` 一类出身会从放行变成 `unknown`,而把 `unknown` 当放行会丢掉 settings ask 规则的命中(把它当出卡则 bypass 下这一类卡全部出现)—— 两种都不对。网页端 / 桌面端 —— 没有姿态自动应答,零改动;强制卡网页端建议同终端,桌面端座位契约没有这两位(n/a)。管理台 —— 零读点。
9900
+ - **缺席行**:订阅缺席口的端,把「算不算缺席 / 算不算在跑 / sweep 结不结 / 能不能删 / 说什么」五件全部换读 102a 的读口,删本地判据;回收时给每行填登记读数(读口到来之前只能是 `unknown` 或不给 ⇒ 一行不删);删必上回收句;登记不确认离场就不续拍;有人正看着的行只在登记确认离场后单列、观看结束再问一次。不订阅缺席口的端零改动(行为与此前相同)。
9901
+ 3. **成文改口**:见 102a′(作废 / 改读 / 新增 / 不变);已发段(§59、§60、§100、§101)不回改,以本段为准。
9902
+
9903
+ **包侧缺口:** 姿态谓词 —— ① 只读出身词与宿主 settings 读数两路,`governanceForced` / `requiresRealApproval` / `mandated` / `mandate` 归宿主既有检查(KL-108)· ② 治理源 / 规则店读不出与分类器限额回落三类出身按必问收(与引擎「只能由真人答」的不变式一致);祖先标记、粗粒度 shell 门、外联 / 不可逆 / 写保护标、部署策略几类出身不拦 —— 出身词本身不足以判,由宿主既有检查先判(祖先标记要祖先原问题的事实,本包没有这一读位);不可验证的递归删与根外读今天不以出身词表达(前者骑 `requiresRealApproval`,后者骑 `mandate`),不在本口射程(KL-109);规则店读不出的「这一次调用对不上规则」一形(`ruleStoreUnreadable: 'call'`)同按必问收,按引擎对两形同一权限语义的说明取向(KL-122)· ③ `hook` 出身一律必须问,CC 在 bypass 下对 hook ask 是有条件保留(KL-110)· ④ settings ask 规则的匹配在各端,本包只收一个布尔;没有匹配器的宿主不报,除七个必问出身词外一律答 `unknown`(认得的非必问词也是;KL-111)· ⑤ 本版不认识的出身词即使宿主报了没命中也答 `unknown`(KL-112)。停泊卡 —— ⑥ 今天的服务端待决列表行不带 `origin`,停泊卡重开时仍缺出身词;行上带上即生效、端零改动。升级判据:服务端 7.102.0 的运维队列行 / pending 帧 / livePending 顶层带上 `origin`(发布时点 registry 上最新的服务端仍是 7.101.1,今天还不带;KL-113)。`mandate` —— ⑦ 服务端发布版带上之前卡上恒缺席;SDK 运行期锚未跟(KL-114)。通告 —— ⑧ 带读根授权批准的回答口本版不做(候服务端的能力位与决断体形),两枚码只镜像。 缺席行 —— ⑨ 按会话读后台代理登记的读口与「引擎登记为在跑 ⇒ 界面必须有行」的对账候服务端 7.102.0([8377]);在此之前端给的登记读数只能是 `unknown`,**缺席行一行都不删** —— 长会话里「引擎不再报、也没有终态」的行会一直挂在任务面上,直到它回来、真终态到达或会话结束(宁可多挂,不可把仍在跑的子代删掉;KL-118);服务端 7.101.1 起在跑的后台子代不再被过早摘出舰队列表([8382]),这类行会少很多 · ⑩ 缺席事件不带舰队离场原词:回收句要说出原词,端须自己按舰队账本的离场回调记账(KL-115) · ⑪ 「这一行回收过」的记账与「回收后真终态」的判定在端(本包只出措辞;KL-116) · ⑫ 在跑数把 `pending` 算在跑(与状态闸同),不区分前台行 —— 同一张表里混有前台行的端先滤再数(KL-117)。 审批 feed —— ⑬ 订阅回调只在内容变化时发,一 feed 多会话的晚接入按 102f 补读,包不另设回放口(KL-119)· ⑭ `refresh()` 在回体读不懂时 reject,调它的端须接住(KL-120)。 座位契约 —— ⑮ `ToolPermissionRequest`(桌面端经座位契约收审批请求)没有 `mandated` / `mandate` 位:桌面端的强制卡拿不到「清不掉」与「为什么强制」两件事(存量缺口,本版不补;M-3 桌面端 n/a)。 措辞 —— ⑯ 回收句的分钟数按 `Math.round(ttlMs / 60000)`:`ttlMs` 小于 30 秒时说 `after 0 min`(与终端同;只在测试旋钮缩短 TTL 时出现;KL-121)。
9904
+
9602
9905
  ## §101 🆕 0.83.1(2026-09-26)展示层安全出口三端单源 `displayUntrusted` 与合成终局行 / `errors[]` 铸点洗凭据(CC-112 / CC-187)+ 会话规则记录的无损判定归包(CC-117)+ 插件 hook 执行方逐条判定与「不会执行」清单(CC-174)(patch;根公面 +16 名,1238 → 1254〔`displayUntrusted` +1;CC-117 +2 函数 +1 常量;CC-174 +7 函数 +5 常量〕;公面类型 +26;`SettingsPort` +1 可选成员;`hooksForWire` +1 可选参;结果帧 `errors[]` 与合成终局行正文的凭据位换成记号〔wire 可见,方向只会更安全〕;设置来源的 `mcp_tool` / exec 形 hook 条目不再上请求体;peer sdk 地板 `>=11.3.0` 不动)
9603
9906
 
9604
9907
  > **patch**,三件同发(本节按 0.83.1 的读法写;若与本版发布帖不一致,以发布帖为准):