@sema-agent/client-core 0.88.0 → 0.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +208 -0
  2. package/README.md +27 -21
  3. package/dist/adapter/activeRunSelfHeal.js +4 -2
  4. package/dist/adapter/downstream/eventToSdkMessage.js +4 -2
  5. package/dist/adapter/downstream/wiringManifestView.d.ts +9 -0
  6. package/dist/adapter/downstream/wiringManifestView.js +27 -0
  7. package/dist/adapter/runStream.d.ts +2 -0
  8. package/dist/adapter/runStream.js +157 -32
  9. package/dist/attachmentsWireCaps.d.ts +13 -2
  10. package/dist/attachmentsWireCaps.js +25 -5
  11. package/dist/controlRouter.d.ts +7 -1
  12. package/dist/controlRouter.js +43 -1
  13. package/dist/coreValuePorts.d.ts +1 -0
  14. package/dist/disableSkillsWire.d.ts +17 -0
  15. package/dist/disableSkillsWire.js +52 -0
  16. package/dist/displayUntrusted.js +122 -55
  17. package/dist/engineCapReader.js +12 -1
  18. package/dist/engineNoticeCodes.d.ts +25 -9
  19. package/dist/engineNoticeCodes.js +161 -68
  20. package/dist/fileHistoryLegNotice.d.ts +20 -0
  21. package/dist/fileHistoryLegNotice.js +122 -0
  22. package/dist/gateOutcome.d.ts +1 -1
  23. package/dist/gateOutcome.js +1 -0
  24. package/dist/generated/engineFactTables.d.ts +1 -0
  25. package/dist/generated/engineFactTables.js +3 -0
  26. package/dist/generated/engineNoticeTables.d.ts +3 -0
  27. package/dist/generated/engineNoticeTables.js +107 -2
  28. package/dist/hitl/toolApprovalWire.d.ts +6 -2
  29. package/dist/hitl/toolApprovalWire.js +30 -0
  30. package/dist/hookToolAliases.d.ts +3 -0
  31. package/dist/hookToolAliases.js +10 -0
  32. package/dist/hooksWireCaps.js +80 -12
  33. package/dist/index.d.ts +14 -3
  34. package/dist/index.js +10 -3
  35. package/dist/permissionsAllowGrantCapability.d.ts +17 -0
  36. package/dist/permissionsAllowGrantCapability.js +75 -0
  37. package/dist/permissionsDeclaration.d.ts +25 -0
  38. package/dist/permissionsDeclaration.js +227 -0
  39. package/dist/pluginHooksWire.d.ts +46 -4
  40. package/dist/pluginHooksWire.js +277 -24
  41. package/dist/promptDelivery.d.ts +5 -2
  42. package/dist/promptDelivery.js +8 -3
  43. package/dist/providerRejection.d.ts +7 -0
  44. package/dist/providerRejection.js +58 -0
  45. package/dist/request/taskRequest.d.ts +2 -0
  46. package/dist/request/taskRequest.js +67 -9
  47. package/dist/runTerminal.d.ts +6 -0
  48. package/dist/runTerminal.js +23 -0
  49. package/dist/sdkRegistryTransit.d.ts +1 -0
  50. package/dist/sdkRegistryTransit.js +1 -0
  51. package/dist/seam.d.ts +3 -0
  52. package/dist/seatContract.d.ts +9 -1
  53. package/dist/seatContract.js +10 -0
  54. package/dist/subagent/engineSubagentSteer.d.ts +8 -1
  55. package/dist/subagent/engineSubagentSteer.js +26 -3
  56. package/dist/supportFloor.d.ts +10 -0
  57. package/dist/supportFloor.js +42 -0
  58. package/dist/taskRequestWords.d.ts +1 -0
  59. package/dist/taskRequestWords.js +14 -0
  60. package/docs/INTEGRATION-CLIENTS.md +896 -14
  61. package/package.json +3 -3
@@ -19,11 +19,11 @@
19
19
 
20
20
  | 项 | 值 | 真源 |
21
21
  |---|---|---|
22
- | 本包 | `@sema-agent/client-core` **0.88.0**(本批发布版 = **minor**:展示出口凭据面一次扫描(带凭据的输入上输出字节变、干净文本逐字节同、一轮即不动;CC-247);崩溃收敛 `cause` 认第二个词 `shutdown_before_park`(`CrashConvergedRow.cause` 型联合 +1 词,穷尽分支的端编译期红;CC-218);服务端自铸通告 `server.model_unreachable` 入受众表与事实读器 `readModelUnreachable`(CC-270 ①);开发依赖换钉引擎 `~7.37.1`、放行原因闭集镜像 `GATE_MODE_RELEASE_REASON_WORDS` / `isGateModeReleaseReasonWord`、修复通告事实读器 `readToolTurnRepaired`、通告码册 80 → 81(`EngineNoticeFactsCode` +2 员;CC-272);会话所有者自助记忆抹除 `eraseSessionMemory` / `sessionMemoryEraseOutcome` + 三只闭集镜像(CC-264);registry 同一个 409 的两义判别 `classifyRegistryConflict` / `isScopeGoneError`(CC-280);请求键 `requireExistingSession`(车道表 44 → 45 行)与被拒读口 `requireExistingSessionRefusalFromError` / 一句 `requireExistingSessionRefusalContent`(CC-281);投递事实账本 `createPromptDeliveryLedger` + 两只按消息行的读口 `promptKnownUndelivered` / `withoutUndeliveredPrompts`(判据 = 引擎为这次提交建了 run;CC-271);plan 决断台账:离门证据结掉、还没被认领的登记由投递口认领原笔(CC-278);`wiring_manifest` 帧 `fileHistory` 段(`WiringManifestChromeEvent.fileHistory?` / `WiringManifestView.fileHistory?`,超集键 `_sema_fileHistory`;CC-279);根公面 1356 → 1372;测试钩 62 不变;公面类型名 922 → 942;超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§114)。上一版 0.87.0 = **minor**:会话历史 tool_use 错配的自救出路 —— 合成终局错误行超集键 `_sema_tool_history_mismatch`、`EmitContext.offersRewind?` 声明面出路句与连续次数句、根入口两只纯函数 `classifyToolHistoryMismatch` / `resolveToolHistoryRewindTarget`(CC-268);崩溃收敛 needsHuman 行的闭集因由位 `needsHumanReason`(CC-269);停车 fail-soft 同步终帧与结果帧的真因超集键 `_sema_park_failed_reason`(CC-273);workflow 活动台账 / 监视器源的 `authToken` 收取值函数、连线身份按凭证来源认(CC-274);`armDetachCancel` 入参 `authToken` 收取值函数、取件口每调现读(CC-275);chrome 臂 `suspended_reopened`(`ChromeEvent` +1 臂,穷尽分支的端编译期红;CC-276);根公面 1354 → 1356;测试钩 62 不变;公面类型名 922 不变;超集键 +2;peer sdk 地板 `>=12.0.1` 不动;§113)。上一版 0.86.0 = **minor**:引擎 7.34.0 提货两代读法 —— 事实表第二批构建期生成、`GATE_DENIED_BY_WORDS` 两代并集十一词(元素型 `GateDeniedByWord`,`mode` 专句)、门记录权限模式两臂与读口 `gateModeRelease`、通告码册六码与六只事实读器(`EngineNoticeFactsCode` +6)、`STRUCTURED_DETAIL_TYPES` +`read_unestablished`、本人规则店读不出两代读法、`shell_gate_tighten` 改句(CC-249 / CC-245 / CC-230);服务端 7.105.0 提货 —— 会话规则写口拒名码 `rules.legacy_tool_name` 的具名结局与 `isRulesRefusalCode`(CC-251)、门前只读路 401 的 `unauthorized` 态与 `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`(CC-252);请求键 `approverPosture` 退役、构造期按名拒,两个运行期名字退出根入口(逐名见 §2z)(CC-253);`AskUnresolvableFactsView.remedy?`(CC-254);开发依赖引擎 `~7.36.0`(CC-255 换钉 7.35.0,`CONFIG_REFUSAL_CODES` 8 → 17;CC-261 再换钉 7.36.0),通告码册 73 → 80;`adapt()` 错误信封不再回落读旧名 `result`(CC-221);服务端 7.106.0 提货 —— caps `store` / `centerWiring` 窄读口、SQL 姿态两代读、计费入口 503 `fleet.lease_unavailable` 读口与一句话(CC-250),`executionLane.isolated` 与「本机无 OS 沙箱」判定(CC-256),请求键 `inheritEnv` 与版本闸片段口、两只拒按码出句(CC-257),权限规则表超帽坏项读口与一句(CC-262),工具声明拒按码认领(CC-263),请求体键形拒两张键表读口(CC-265);`-p` 首帧工具来源超集键 `_sema_tools_source` / `_sema_tools_fallback_reason` 与铸口 `printInitToolFaceSupersetKeys`(CC-266),三张估计工具表改为常驻(CC-267);根公面 1310 → 1354;测试钩 60 → 62;公面类型 891 → 922;超集键 +2;peer sdk 地板 `>=12.0.1` 不动(sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下本版 `.d.ts` 严格编译均零错误);§112)。上一版 0.85.2 = **patch**:自愈重开两只失败结局带 `errorCode`(这一次重开放弃所依据的那一发失败请求的外层 wire 码,present-iff;判定形不带),重开判决不成功臂 +`_sema_errorCode`(宿主可选铸;宿主重开口抛错时本包铸)(CC-260);自愈腿读错误对象与成功应答记录上的各位收进保护(读不出按缺席,不再 reject;`atMostOnceFailureClass` / `readSteerDelivery` / `readSteerReceiptStatus` 不再抛);根公面 1310 不变;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§111)。上一版 0.85.1 = **patch**:请求装配回执省略成因的终端用户向句表 `TASK_REQUEST_OMISSION_CAUSE_NOTICES` 与取句口 `taskRequestOmissionCauseNotice`(与接入方那只 `taskRequestOmissionCauseDetail` 同源于同一成因闭集、逐词不同句;表外 / 读不出 ⇒ 一句通用句,不抛、不回显),接入方那张句表的字面量补挂 `satisfies`(CC-248);plan-review 重开口在「这个会话没有接能显示卡的界面」那一形上答 `{ reopened: false, _sema_noPresentationSurface: true }`,自愈结局两臂带 `noPresentationSurface`、自愈行五句补一句成因,重开前提(宿主为该会话键订阅问题帧端口)成文(CC-258);自愈腿读宿主重开判决收进保护(某一位读不出按缺席,不再 reject),宿主日志 / 探针口抛错不再改变判决;多会话宿主的按会话呈现回执登记口 `registerArmedGateFromQuestionIdFor` 回到根入口(0.72.0 退出公面的名字复活;CC-259);根公面 1307 → 1310;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§110)。上一版 0.85.0 = **minor**:引擎事实表(通告码册 / 受众表 / MCP 注入丢弃原因 / 会话规则翻译判定内部两表)改为构建期生成,`ASK_ORIGIN_WORDS` / `APPROVAL_MANDATE_WORDS` 就是 SDK 导出的数组(不再冻结),四个思考档 / 权限模式型改为 SDK 型的别名,包内单源(CC-230);子代族八入口与两只行停止门收注入 client,写动词失败结局 +`unconfirmed`,`classifySubagentResumeFailure` 同判(CC-236);`sessionPolicyDeliverable` 收可选名册,`SessionPolicyWithheldWhy` 六词 → 七词(CC-228);过渡物退役登记与到期门,`adapt()` 不再认旧名 `attachedFiles`,三个运行期名字退出根入口(逐名见 §2z),`surfaceRememberNotApplied` 撤回退役预告(CC-221);plan-review 决断台账六口,`reopenPlanReviewCard` 按台账拒开(CC-241);会话后台任务停止口 `stopEngineSessionBackground` 与受据归类口 `engineSessionBackgroundReceiptReadingOf`(CC-246);服务端 7.104.0 会话侧:会话存档读不出三载体读口与人话 `corruptSessionContent`、`session.records_skipped` 进册(`SERVER_NOTICE_AUDIENCE` 三行)、删会话 409 读口、`/decide` 停驻挪动族读口(CC-217 / CC-243);服务端 7.104.0 能力 / 同步体侧:同步 park 新体与 park 行 `result`、`fileHistoryCaptureMode` 认 `on-optional` 与请求词片段口 `fileHistoryDeclarationField`、公钥发现读口 `projectSealedKeyCapability`、折叠粗码 `isStatusDerivedCoarseCode`(CC-243);同名影子对账门按语义判(CC-222);导出存活门读已提交历史(CC-240);根公面 1275 → 1307;测试钩 59 → 60;公面类型 +34;peer sdk 地板 `>=12.0.1` 不动;§109)。上一版 0.84.1 = **patch**:`<system-reminder>` 开标签定位口 `findSystemReminderOpenTag`(CC-210);detach durable-off 400 纯判定 `isDetachDurableOff400`,`detachDurableOffHint` 对读属性会抛的错误对象改回 `null`(CC-219);服务端自铸通告码进码册与受众表 `SERVER_NOTICE_AUDIENCE`(`instructions.source_changed` 回到用户面)+ 事实读器 `readInstructionsSourceChanged`(CC-213);按码派发的通告事实口 `readEngineNoticeFacts` + 派发表 `ENGINE_NOTICE_FACT_READERS`,`readReadRootGrantNotice` 入参型放宽(CC-214);停泊审批决断 422 `parked_resume.startup_failed` 的读口 / 一句话 / 判定与码优先 `isCodeClassifiedGateFailure`(CC-225);拒启会话的窄撤销动词 `removeRefusedSessionRules` 与出路句 `legacyToolNameFailureNoteOf`,`CONFIG_REFUSAL_CODES` 七员 → 八员(CC-229);plan-review 编排三口与两只能力探针收注入 client(CC-209);CC 形 `permission_denials` 收入参只被传输层脱敏过的拒绝 + 超集位 `_sema_tool_input_redacted`(CC-235);凭据读法两处放行收口(CC-234);根公面 1260 → 1275;公面类型 +18;peer sdk 地板 `>=12.0.1` 不动;§108)。上一版 0.84.0 = **minor**:peer sdk 地板 `>=11.3.0` → `>=12.0.1`;后台代理登记读数 —— 读口 / 取代判定 / 归类口 / 登记键桥 / 补行谓词,缺席行下半场(CC-194);读目录授权结论通告读口 `readReadRootGrantNotice`(CC-185);接线回执 `hands` 段 `_sema_hands` + 读口 `handsSeamReadingOf` / `handsSeamDetail`,`handsMountedDetail` 坏入参不再抛(CC-206);陈旧逻辑清扫(CC-223):退役键 `rewind.rewindFiles` 构造期拒收、`WorkflowRunState.agentCount` 改可选、26 个内部件退出根入口、九张公面判定表换只读 Set 子类、十五张判定数组冻结、`resume_at` 文本兼容腿退役;根公面 1278 → 1260;公面类型 +10;§107)。上一版 0.83.6 = **patch**:会话规则记录的无损判定 `sessionPolicyDeliverable` 把引擎会在准备阶段拒启的两类名字(引擎退役名、含 `__` 而不以协议前缀开头的名字)改判「不写」,成因词 `legacy_tool_name`(闭集 5 → 6),引擎说「改名为 X」的退役名带 `currentName` 出路位;`peer_wide` 那句改措辞(判决不变)(CC-226);根公面 1278 不变;peer sdk 地板 `>=11.3.0` 不动;§106)。上一版 0.83.5 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`,三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf` 上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
23
- | peer:wire 契约 | `@sema-agent/sdk` **>=12.0.1**(value-level,非 type-only;**0.84.0 抬版**:12.x 声明每会话后台登记列表 `sessions.background`、能力位 `capabilities.background.listFace` 与七词闭集的后台状态型,本包三者都读(登记读口的端点门与归类口的编译期穷举),按 12.0.1 编译,11.3.0 失去物料见证;0.84.1 / 0.85.0 / 0.85.1 / 0.85.2 / 0.86.0 / 0.87.0 / 0.88.0 不动(0.86.0:sdk 14 的三处型面 BREAKING 本包已按结构读覆盖,本版 `.d.ts` 在 sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下严格编译零错误,§112y)。此前 **0.80.0 曾抬到 >=11.3.0**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码(0.80.0 至 0.83.6 都在这条地板上);**0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
22
+ | 本包 | `@sema-agent/client-core` **0.90.0**(本批发布版 = **minor**:引擎 7.40.1 / 服务端 7.113.0 / 7.114.0 / sdk 16 探针提货(开发依赖换钉引擎 `~7.40.1`;通告码册 86 → 85,事实读器 `readLegacyModeSeedMigrated` 与具名型 `LegacyModeSeedMigratedFactsView` 🔧 退出公面(型面 BREAKING,逐名见 §2z;`EngineNoticeFactsCode` −1 员,穷尽分支的端编译期红);请求键 `attachments.planModeReminder` 退役(型面 BREAKING:`AttachmentsSpec` −1 位、`ATTACHMENTS_SPEC_KEYS` 10 → 9、`SEMA_ATTACHMENTS=full` 点满 7 → 6 员,显式点名即抛;服务端 ≥ 7.113.0 对带这一键的提交回 400);用户输入没被用上读器读子代副本位 `childSessionId`(`UserInputUndrainedFactsView` +1 可选位);结算词表 13 → 14(+`policy_allowed`;服务端 7.113.0 起无人值守按类放行记在策略名下,`isHumanSettledGate` 对它答假);入参镜像 `AllowDenyPolicyOptionsView.scope?`;sdk 16.0.0 进地板见证矩阵;CC-291);云控制面子路径入口 `./registry` 转口登录 / 令牌轮换 / scope 列举与切换五名(值级 10 → 15;CC-136);文件历史一句的五态判定 `fileHistoryLegNoticeVerdict`、两句措辞 `fileHistoryLegNoticeSentence` 与声明事实账本 `createFileHistoryDeclarationLedger` / 出站体读口 `fileHistoryDeclarationOfBody`(CC-294);hooks matcher 工具别名读口 `hookToolAliasesOf` / `canonicalHookToolName`(表由构建期从引擎静态工具目录生成;CC-298);机读支持底线声明 `SUPPORT_FLOOR` / `supportFloorOf` 与引擎版本三态判定 `engineVersionTier`,状态派生粗码表改与上游双源对拍(CC-299);投递账本两只绑定方法 `knownUndeliveredMessage` / `withoutUndelivered`(`PromptDeliveryLedger` 接口 +2 必有成员 —— 型面 BREAKING 第三处:自写替身赋给该型的端编译红;CC-300);请求体 `settings.permissions` 三桶装配口 `permissionsDeclaration` 与 allow 放行能力位读器(CC-302);「改了重发」判定口 `providerRejectionResend` +1 可选参(会话历史 tool_use 错配让位)与错误载体铸口 `toolHistoryErrorCarrierOf`(CC-309);能力位读器(`observed*()` 十八只)交出的读数冻结(就地改写在严格模式下抛 `TypeError`);`attachments` 声明的拒绝改抛具名类 `AttachmentsSpecRefused`(`TypeError` 的子类;`SEMA_ATTACHMENTS` 与请求装配两处同一个类,`message` 一字不动;CC-316);请求体权限规则装配口对被引擎规则编译器拒收的整工具名同样不投(CC-302 修订:修前只有改写出的名字过编译器);根公面 1379 → 1397(+19 −1);测试钩 62 → 63;公面类型名 952 → 964;超集键不变;peer sdk 地板 `>=12.0.1` 不动;§116)。上一版 0.89.0 = **minor**:引擎 7.38 提货(开发依赖换钉引擎 `~7.38.2`;通告码册 81 → 86、引擎铸方表接手服务端自铸码的受众,`SERVER_NOTICE_AUDIENCE` 🔧 退出公面(型面 BREAKING,逐名见 §2z);工具轮不完整读器 `readToolTurnIncomplete`、用户输入没被用上读器 `readUserInputUndrained` 与一句 `userInputUndrainedNotice`(`EngineNoticeFactsCode` +3 员,穷尽分支的端编译期红);终局服务商拒绝详情 `readRunTerminal` 的 `failed.detail` 与「改了重发」判定口 `providerRejectionResend`;steer 账本 503 `ledger_unavailable` 一张码表三条腿(`ControlSafetyCode` +1 员、子代 steer 结局联合 +1 臂,穷尽分支的端编译期红);省略成因短语口 `taskRequestOmissionCausePhrase`;CC-282);审批四面问类两位 `askClass` / `classes`(三型各 +2 可选位;CC-284);请求键 `disableSkills` 与片段口 `disableSkillsDeclaration`(车道表 45 → 46 行;CC-277);hooks 设置来源条目的唯一执行者与本端跳过口 `settingsHooksKeptLocally`(`PLUGIN_HOOK_REASONS` +5 词、`PLUGIN_HOOK_EXCLUSION_REASONS` +1 词,穷尽分支的端编译期红;CC-287);凭据被拒判官 `isReadCredentialRefusal` 上根入口(CC-289);服务端 7.111.0 两项(接线回执新段 `instructions`、子代转向成功结局 `messageId`;CC-282 余项)与展示出口无标签 `Token <值>` 形照遮(CC-290);根公面 1372 → 1379;测试钩 62 不变;公面类型名 942 → 952;超集键 +1(98 → 99,`_sema_instructions`);peer sdk 地板 `>=12.0.1` 不动;§115)。上一版 0.88.0 = **minor**:展示出口凭据面一次扫描(带凭据的输入上输出字节变、干净文本逐字节同、一轮即不动;CC-247);崩溃收敛 `cause` 认第二个词 `shutdown_before_park`(`CrashConvergedRow.cause` 型联合 +1 词,穷尽分支的端编译期红;CC-218);服务端自铸通告 `server.model_unreachable` 入受众表与事实读器 `readModelUnreachable`(CC-270 ①);开发依赖换钉引擎 `~7.37.1`、放行原因闭集镜像 `GATE_MODE_RELEASE_REASON_WORDS` / `isGateModeReleaseReasonWord`、修复通告事实读器 `readToolTurnRepaired`、通告码册 80 → 81(`EngineNoticeFactsCode` +2 员;CC-272);会话所有者自助记忆抹除 `eraseSessionMemory` / `sessionMemoryEraseOutcome` + 三只闭集镜像(CC-264);registry 同一个 409 的两义判别 `classifyRegistryConflict` / `isScopeGoneError`(CC-280);请求键 `requireExistingSession`(车道表 44 → 45 行)与被拒读口 `requireExistingSessionRefusalFromError` / 一句 `requireExistingSessionRefusalContent`(CC-281);投递事实账本 `createPromptDeliveryLedger` + 两只按消息行的读口 `promptKnownUndelivered` / `withoutUndeliveredPrompts`(判据 = 引擎为这次提交建了 run;CC-271);plan 决断台账:离门证据结掉、还没被认领的登记由投递口认领原笔(CC-278);`wiring_manifest` 帧 `fileHistory` 段(`WiringManifestChromeEvent.fileHistory?` / `WiringManifestView.fileHistory?`,超集键 `_sema_fileHistory`;CC-279);根公面 1356 → 1372;测试钩 62 不变;公面类型名 922 → 942;超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§114)。上一版 0.87.0 = **minor**:会话历史 tool_use 错配的自救出路 —— 合成终局错误行超集键 `_sema_tool_history_mismatch`、`EmitContext.offersRewind?` 声明面出路句与连续次数句、根入口两只纯函数 `classifyToolHistoryMismatch` / `resolveToolHistoryRewindTarget`(CC-268);崩溃收敛 needsHuman 行的闭集因由位 `needsHumanReason`(CC-269);停车 fail-soft 同步终帧与结果帧的真因超集键 `_sema_park_failed_reason`(CC-273);workflow 活动台账 / 监视器源的 `authToken` 收取值函数、连线身份按凭证来源认(CC-274);`armDetachCancel` 入参 `authToken` 收取值函数、取件口每调现读(CC-275);chrome 臂 `suspended_reopened`(`ChromeEvent` +1 臂,穷尽分支的端编译期红;CC-276);根公面 1354 → 1356;测试钩 62 不变;公面类型名 922 不变;超集键 +2;peer sdk 地板 `>=12.0.1` 不动;§113)。上一版 0.86.0 = **minor**:引擎 7.34.0 提货两代读法 —— 事实表第二批构建期生成、`GATE_DENIED_BY_WORDS` 两代并集十一词(元素型 `GateDeniedByWord`,`mode` 专句)、门记录权限模式两臂与读口 `gateModeRelease`、通告码册六码与六只事实读器(`EngineNoticeFactsCode` +6)、`STRUCTURED_DETAIL_TYPES` +`read_unestablished`、本人规则店读不出两代读法、`shell_gate_tighten` 改句(CC-249 / CC-245 / CC-230);服务端 7.105.0 提货 —— 会话规则写口拒名码 `rules.legacy_tool_name` 的具名结局与 `isRulesRefusalCode`(CC-251)、门前只读路 401 的 `unauthorized` 态与 `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`(CC-252);请求键 `approverPosture` 退役、构造期按名拒,两个运行期名字退出根入口(逐名见 §2z)(CC-253);`AskUnresolvableFactsView.remedy?`(CC-254);开发依赖引擎 `~7.36.0`(CC-255 换钉 7.35.0,`CONFIG_REFUSAL_CODES` 8 → 17;CC-261 再换钉 7.36.0),通告码册 73 → 80;`adapt()` 错误信封不再回落读旧名 `result`(CC-221);服务端 7.106.0 提货 —— caps `store` / `centerWiring` 窄读口、SQL 姿态两代读、计费入口 503 `fleet.lease_unavailable` 读口与一句话(CC-250),`executionLane.isolated` 与「本机无 OS 沙箱」判定(CC-256),请求键 `inheritEnv` 与版本闸片段口、两只拒按码出句(CC-257),权限规则表超帽坏项读口与一句(CC-262),工具声明拒按码认领(CC-263),请求体键形拒两张键表读口(CC-265);`-p` 首帧工具来源超集键 `_sema_tools_source` / `_sema_tools_fallback_reason` 与铸口 `printInitToolFaceSupersetKeys`(CC-266),三张估计工具表改为常驻(CC-267);根公面 1310 → 1354;测试钩 60 → 62;公面类型 891 → 922;超集键 +2;peer sdk 地板 `>=12.0.1` 不动(sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下本版 `.d.ts` 严格编译均零错误);§112)。上一版 0.85.2 = **patch**:自愈重开两只失败结局带 `errorCode`(这一次重开放弃所依据的那一发失败请求的外层 wire 码,present-iff;判定形不带),重开判决不成功臂 +`_sema_errorCode`(宿主可选铸;宿主重开口抛错时本包铸)(CC-260);自愈腿读错误对象与成功应答记录上的各位收进保护(读不出按缺席,不再 reject;`atMostOnceFailureClass` / `readSteerDelivery` / `readSteerReceiptStatus` 不再抛);根公面 1310 不变;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§111)。上一版 0.85.1 = **patch**:请求装配回执省略成因的终端用户向句表 `TASK_REQUEST_OMISSION_CAUSE_NOTICES` 与取句口 `taskRequestOmissionCauseNotice`(与接入方那只 `taskRequestOmissionCauseDetail` 同源于同一成因闭集、逐词不同句;表外 / 读不出 ⇒ 一句通用句,不抛、不回显),接入方那张句表的字面量补挂 `satisfies`(CC-248);plan-review 重开口在「这个会话没有接能显示卡的界面」那一形上答 `{ reopened: false, _sema_noPresentationSurface: true }`,自愈结局两臂带 `noPresentationSurface`、自愈行五句补一句成因,重开前提(宿主为该会话键订阅问题帧端口)成文(CC-258);自愈腿读宿主重开判决收进保护(某一位读不出按缺席,不再 reject),宿主日志 / 探针口抛错不再改变判决;多会话宿主的按会话呈现回执登记口 `registerArmedGateFromQuestionIdFor` 回到根入口(0.72.0 退出公面的名字复活;CC-259);根公面 1307 → 1310;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§110)。上一版 0.85.0 = **minor**:引擎事实表(通告码册 / 受众表 / MCP 注入丢弃原因 / 会话规则翻译判定内部两表)改为构建期生成,`ASK_ORIGIN_WORDS` / `APPROVAL_MANDATE_WORDS` 就是 SDK 导出的数组(不再冻结),四个思考档 / 权限模式型改为 SDK 型的别名,包内单源(CC-230);子代族八入口与两只行停止门收注入 client,写动词失败结局 +`unconfirmed`,`classifySubagentResumeFailure` 同判(CC-236);`sessionPolicyDeliverable` 收可选名册,`SessionPolicyWithheldWhy` 六词 → 七词(CC-228);过渡物退役登记与到期门,`adapt()` 不再认旧名 `attachedFiles`,三个运行期名字退出根入口(逐名见 §2z),`surfaceRememberNotApplied` 撤回退役预告(CC-221);plan-review 决断台账六口,`reopenPlanReviewCard` 按台账拒开(CC-241);会话后台任务停止口 `stopEngineSessionBackground` 与受据归类口 `engineSessionBackgroundReceiptReadingOf`(CC-246);服务端 7.104.0 会话侧:会话存档读不出三载体读口与人话 `corruptSessionContent`、`session.records_skipped` 进册(`SERVER_NOTICE_AUDIENCE` 🔧 0.89.0 退出公面前的三行)、删会话 409 读口、`/decide` 停驻挪动族读口(CC-217 / CC-243);服务端 7.104.0 能力 / 同步体侧:同步 park 新体与 park 行 `result`、`fileHistoryCaptureMode` 认 `on-optional` 与请求词片段口 `fileHistoryDeclarationField`、公钥发现读口 `projectSealedKeyCapability`、折叠粗码 `isStatusDerivedCoarseCode`(CC-243);同名影子对账门按语义判(CC-222);导出存活门读已提交历史(CC-240);根公面 1275 → 1307;测试钩 59 → 60;公面类型 +34;peer sdk 地板 `>=12.0.1` 不动;§109)。上一版 0.84.1 = **patch**:`<system-reminder>` 开标签定位口 `findSystemReminderOpenTag`(CC-210);detach durable-off 400 纯判定 `isDetachDurableOff400`,`detachDurableOffHint` 对读属性会抛的错误对象改回 `null`(CC-219);服务端自铸通告码进码册与受众表 `SERVER_NOTICE_AUDIENCE`(🔧 0.89.0 退出公面;`instructions.source_changed` 回到用户面)+ 事实读器 `readInstructionsSourceChanged`(CC-213);按码派发的通告事实口 `readEngineNoticeFacts` + 派发表 `ENGINE_NOTICE_FACT_READERS`,`readReadRootGrantNotice` 入参型放宽(CC-214);停泊审批决断 422 `parked_resume.startup_failed` 的读口 / 一句话 / 判定与码优先 `isCodeClassifiedGateFailure`(CC-225);拒启会话的窄撤销动词 `removeRefusedSessionRules` 与出路句 `legacyToolNameFailureNoteOf`,`CONFIG_REFUSAL_CODES` 七员 → 八员(CC-229);plan-review 编排三口与两只能力探针收注入 client(CC-209);CC 形 `permission_denials` 收入参只被传输层脱敏过的拒绝 + 超集位 `_sema_tool_input_redacted`(CC-235);凭据读法两处放行收口(CC-234);根公面 1260 → 1275;公面类型 +18;peer sdk 地板 `>=12.0.1` 不动;§108)。上一版 0.84.0 = **minor**:peer sdk 地板 `>=11.3.0` → `>=12.0.1`;后台代理登记读数 —— 读口 / 取代判定 / 归类口 / 登记键桥 / 补行谓词,缺席行下半场(CC-194);读目录授权结论通告读口 `readReadRootGrantNotice`(CC-185);接线回执 `hands` 段 `_sema_hands` + 读口 `handsSeamReadingOf` / `handsSeamDetail`,`handsMountedDetail` 坏入参不再抛(CC-206);陈旧逻辑清扫(CC-223):退役键 `rewind.rewindFiles` 构造期拒收、`WorkflowRunState.agentCount` 改可选、26 个内部件退出根入口、九张公面判定表换只读 Set 子类、十五张判定数组冻结、`resume_at` 文本兼容腿退役;根公面 1278 → 1260;公面类型 +10;§107)。上一版 0.83.6 = **patch**:会话规则记录的无损判定 `sessionPolicyDeliverable` 把引擎会在准备阶段拒启的两类名字(引擎退役名、含 `__` 而不以协议前缀开头的名字)改判「不写」,成因词 `legacy_tool_name`(闭集 5 → 6),引擎说「改名为 X」的退役名带 `currentName` 出路位;`peer_wide` 那句改措辞(判决不变)(CC-226);根公面 1278 不变;peer sdk 地板 `>=11.3.0` 不动;§106)。上一版 0.83.5 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`,三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf` 上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
23
+ | peer:wire 契约 | `@sema-agent/sdk` **>=12.0.1**(value-level,非 type-only;**0.84.0 抬版**:12.x 声明每会话后台登记列表 `sessions.background`、能力位 `capabilities.background.listFace` 与七词闭集的后台状态型,本包三者都读(登记读口的端点门与归类口的编译期穷举),按 12.0.1 编译,11.3.0 失去物料见证;0.84.1 / 0.85.0 / 0.85.1 / 0.85.2 / 0.86.0 / 0.87.0 / 0.88.0 / 0.89.0 / 0.90.0 不动(0.86.0:sdk 14 的三处型面 BREAKING 本包已按结构读覆盖,本版 `.d.ts` 在 sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下严格编译零错误,§112y;0.90.0:地板见证矩阵改为路径列表 —— 开发依赖 12.0.1 + 15.0.0 / 15.2.0 / 15.3.0 / 16.0.0 探针树逐份验,`.d.ts` 对 sdk 16.0.0 严格编译零错,§116 SD-1)。此前 **0.80.0 曾抬到 >=11.3.0**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码(0.80.0 至 0.83.6 都在这条地板上);**0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
24
24
  | peer:会话词汇表 | `@sema-agent/agent-types` **>=0.3.0**(type-only,零运行时;0.71.0 抬版:devDep 与 peer 同步,type-superset 门 ④ 撞名预警对着 0.3.0 的 .d.ts 求值) | 同上 |
25
25
  | runtime dep | `diff` ^9.0.0(**唯一**一条;portability 门按**等值**钉死) | `package.json` `dependencies` |
26
- | 公开导出面 | **1372** 个运行期符号(+ **62 个测试钩,两种拼法**:38 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1372 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1372 + 62 = **1434**;只剔双下划线那 38 个会多数出 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`(后者 🔧 0.85.0 退出公面)两张闭词表再导出 + `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
+ | 公开导出面 | **1397** 个运行期符号(+ **63 个测试钩,两种拼法**:39 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1397 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1397 + 63 = **1460**;只剔双下划线那 39 个会多数出 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`(后者 🔧 0.85.0 退出公面)两张闭词表再导出 + `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`(**1372** 项;该基线只覆盖**根**入口,子路径入口 `./registry` 的名单在 §86 与 `scripts/run-sdk-registry-transit-test.mjs` A / C 段)。
128
+ > 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**1397** 项;该基线只覆盖**根**入口,子路径入口 `./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,31 +149,31 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
149
149
  `WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
150
150
  **4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
151
151
 
152
- 1372 项的内部构成(帮助端估读表大小;0.88.0 +12 函数 +4 常量(CC-270 ① 服务端自铸通告事实读器 `readModelUnreachable`;CC-272 放行原因闭集镜像 `GATE_MODE_RELEASE_REASON_WORDS` + 判词谓词 `isGateModeReleaseReasonWord` + 修复通告事实读器 `readToolTurnRepaired`;CC-264 会话记忆抹除调用口 `eraseSessionMemory` + 判定口 `sessionMemoryEraseOutcome` + 三只闭集镜像;CC-280 registry 409 判别 `classifyRegistryConflict` / `isScopeGoneError`;CC-281 被拒读口 `requireExistingSessionRefusalFromError` + 一句 `requireExistingSessionRefusalContent`;CC-271 `createPromptDeliveryLedger` / `promptKnownUndelivered` / `withoutUndeliveredPrompts`);0.87.0 +2 函数(CC-268 会话历史 tool_use 错配的判型口 `classifyToolHistoryMismatch` + 回退节点解析口 `resolveToolHistoryRewindTarget`);0.86.0 +40 函数 +6 常量 −1 函数 −1 常量(CC-249 引擎 7.34.0 提货:六只通告事实读器 + 权限模式折回原因闭集 + 门记录模式放行读口;CC-251 写口拒名码常量 + `rules.` 族前缀谓词;CC-252 凭据没被接受那一句;CC-253 `APPROVER_POSTURE_BYPASS` / `approverPostureDeclarationField` 🔧 0.86.0 退出公面,逐名见 §2z;CC-250 存储姿态六口 + 中心接线六口 + 计费入口 503 码常量 + 读口 + 一句;CC-256 本机无 OS 沙箱判定 + 一句 + 诊断面车道段读口;CC-257 `inheritEnv` 两词闭集 + 判词口 + 版本地板常量 + 版本闸 + 片段口 + 不发那一句 + 两只拒各读口与一句;CC-262 / CC-263 / CC-265 权限规则表 · 工具声明族 · 键形拒两张键表各一读口一句 / 谓词;CC-266 `-p` 首帧来源超集键铸口);0.85.1 +2 函数 +1 常量(CC-248 回执省略成因的终端用户向取句口 + 句表;CC-259 按会话呈现回执登记口复活,0.72.0 退出过);0.85.0 +26 函数 +9 常量 −2 函数 −1 常量(CC-241 plan-review 决断台账六口;CC-246 会话后台任务停止口 + 受据归类口 + 三态闭集;CC-217 / CC-243 服务端 7.104.0 会话侧:存档读不出三载体读口 + 判定 + 人话 + 码常量、跳过记录通告读器 + 补句、删会话 409 读口 + 措辞 + 码常量、停驻挪动族读口 + 措辞 + 判定 + 闭集 + 三码常量;CC-243 能力 / 同步体侧:公钥发现四口、文件历史请求词片段口 + 常量、粗码识别表 + 判定;CC-221 三个运行期名字退出公面,逐名见 §2z);0.84.1 +11 函数 +4 常量(CC-210 开标签定位口 / CC-219 detach 400 纯判定 / CC-213 服务端自铸码受众表 + 事实读器 / CC-214 按码派发口 + 派发表 / CC-225 停泊决断 422 读口 + 措辞 + 码优先判定 + 码常量 / CC-229 撤销动词 + 措辞 + 出路句 + 判据本体 + 码常量);0.84.0 +8 函数 −7 常量 −19 函数(CC-194 B 半登记读数五口 / CC-185 读目录授权结论通告读口 / CC-206 `hands` 段读口与措辞两口;CC-223 收回 0.71.3 预告的 26 个 `export *` 放大件,🔧 0.84.0 退出公面,逐名见 CHANGELOG 0.84.0);0.83.5 +1 函数(CC-204 字符面标记位置读口 `displayUntrustedMarks`);0.83.4 +4 函数(CC-205 `<system-reminder>` 剥离 / 解包两口;CC-203 座位过境口;CC-201 清「用户关卡」记号口);0.83.2 +15 函数 +4 常量(CC-193 姿态放行谓词 / CC-195 强制词闭集 + 成员判据 + 读口 + 措辞 / CC-194 缺席行判定 11 函数 + 3 常量);0.83.1 +10 函数 +6 常量(CC-112 展示层安全出口 `displayUntrusted` / CC-117 会话规则记录无损判定 + 措辞单源 + 五词成因闭集 / CC-174 插件 hook 每轮计划 + 查询口 + 事件判定口 + 四只措辞口 + 五张闭集);0.83.0 −3 函数(联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 🔧 0.83.0 退出公面)+1 函数(CC-175 `terminalReasonForResult`);0.82.7 +5 函数(CC-182 每请求联网搜索配置三态判决:段判决 / env 判决 / 两车道合成 / 措辞单源 / endpoint 显示形);0.82.5 +5 函数 +1 常量(CC-169 print 车道 init 帧工具面:流包装器 / 判定闸 / 名册信号分类口 / 判定口 / 留痕措辞单源 + 等待上界常量);0.82.2 +1 函数(CC-164 云控制面有效配置回体措辞单源 `cloudEffectiveNotices`);0.82.1 +15 函数(CC-154 续跑折叠码读口 + 措辞 / CC-163 文件历史捕获读口六口 / CC-151 模型身份可解析判据五口 / CC-161 自定义代理载荷作废重投口 / 决断失败码「门还在」判定;测试钩 +1);0.82.0 +17 函数 +1 常量(CC-146 `/rewind` 代码档与对话档可用性读口投影 + 三口读账 + 两只判据 + 三句措辞 / CC-150 额度投影三口 / CC-152 装配期无手两口 / CC-154 取码单源 + 折叠码常量 / CC-156 坏档行坐标读口 + 措辞);0.80.0 +1 常量 +10 函数(CC-133 结算词表镜像 `SETTLEMENT_KIND_WORDS` + 五函数 / CC-134 三函数 / CC-132 两函数);0.79.0 +8 常量 +21 函数 +1 类(CC-74 MCP 状态面两张词表 + 九函数 / CC-110 `approvalIsMandated` + `mandatedApprovalDetail` / CC-116 · 118 · 123 `APPROVER_POSTURE_BYPASS`(🔧 0.86.0 退出公面)+ `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):**366** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
153
- (矩阵、键集、env 名、锚串)而非可调用物;**7** 项是 PascalCase 运行期值
154
- (`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError` / `APIError`);
152
+ 1397 项的内部构成(帮助端估读表大小;0.90.0 +16 −1 函数 +2 常量 +1 类(CC-291:引擎 7.39.0 退役通告码 `resume.legacy_mode_seed_migrated`,其事实读器 `readLegacyModeSeedMigrated` 退出公面(退出根入口),逐名见 §2z;CC-294 文件历史一句:`fileHistoryLegNoticeVerdict` / `fileHistoryLegNoticeSentence` / `fileHistoryDeclarationOfBody` / `createFileHistoryDeclarationLedger` + `FILE_HISTORY_LEG_VERDICTS`;CC-298 hooks matcher 工具别名读口 `hookToolAliasesOf` / `canonicalHookToolName`;CC-299 支持底线声明:`SUPPORT_FLOOR` / `supportFloorOf` / `engineVersionTier`;CC-302 请求体权限三桶装配口 `permissionsDeclaration` 与 allow 放行能力位读器 `projectPermissionsAllowGrantCapability` / `noteEngineCapsForPermissionsAllowGrant` / `observedPermissionsAllowGrant` / `forgetPermissionsAllowGrantReading` / `permissionsAllowGrantAvailable` / `permissionsAllowGrantDoctorDetail`;CC-309 错误载体铸口 `toolHistoryErrorCarrierOf`;CC-316 `attachments` 声明拒绝的具名类 `AttachmentsSpecRefused`;§116);0.89.0 +8 函数 −1 常量(CC-282 通告 / 终局 / 省略成因:`readToolTurnIncomplete` / `readUserInputUndrained` / `userInputUndrainedNotice` / `providerRejectionResend` / `taskRequestOmissionCausePhrase`,`SERVER_NOTICE_AUDIENCE` 🔧 0.89.0 退出公面,逐名见 §2z;CC-277 `disableSkillsDeclaration`;CC-287 `settingsHooksKeptLocally`;CC-289 `isReadCredentialRefusal`);0.88.0 +12 函数 +4 常量(CC-270 ① 服务端自铸通告事实读器 `readModelUnreachable`;CC-272 放行原因闭集镜像 `GATE_MODE_RELEASE_REASON_WORDS` + 判词谓词 `isGateModeReleaseReasonWord` + 修复通告事实读器 `readToolTurnRepaired`;CC-264 会话记忆抹除调用口 `eraseSessionMemory` + 判定口 `sessionMemoryEraseOutcome` + 三只闭集镜像;CC-280 registry 409 判别 `classifyRegistryConflict` / `isScopeGoneError`;CC-281 被拒读口 `requireExistingSessionRefusalFromError` + 一句 `requireExistingSessionRefusalContent`;CC-271 `createPromptDeliveryLedger` / `promptKnownUndelivered` / `withoutUndeliveredPrompts`);0.87.0 +2 函数(CC-268 会话历史 tool_use 错配的判型口 `classifyToolHistoryMismatch` + 回退节点解析口 `resolveToolHistoryRewindTarget`);0.86.0 +40 函数 +6 常量 −1 函数 −1 常量(CC-249 引擎 7.34.0 提货:六只通告事实读器 + 权限模式折回原因闭集 + 门记录模式放行读口;CC-251 写口拒名码常量 + `rules.` 族前缀谓词;CC-252 凭据没被接受那一句;CC-253 `APPROVER_POSTURE_BYPASS` / `approverPostureDeclarationField` 🔧 0.86.0 退出公面,逐名见 §2z;CC-250 存储姿态六口 + 中心接线六口 + 计费入口 503 码常量 + 读口 + 一句;CC-256 本机无 OS 沙箱判定 + 一句 + 诊断面车道段读口;CC-257 `inheritEnv` 两词闭集 + 判词口 + 版本地板常量 + 版本闸 + 片段口 + 不发那一句 + 两只拒各读口与一句;CC-262 / CC-263 / CC-265 权限规则表 · 工具声明族 · 键形拒两张键表各一读口一句 / 谓词;CC-266 `-p` 首帧来源超集键铸口);0.85.1 +2 函数 +1 常量(CC-248 回执省略成因的终端用户向取句口 + 句表;CC-259 按会话呈现回执登记口复活,0.72.0 退出过);0.85.0 +26 函数 +9 常量 −2 函数 −1 常量(CC-241 plan-review 决断台账六口;CC-246 会话后台任务停止口 + 受据归类口 + 三态闭集;CC-217 / CC-243 服务端 7.104.0 会话侧:存档读不出三载体读口 + 判定 + 人话 + 码常量、跳过记录通告读器 + 补句、删会话 409 读口 + 措辞 + 码常量、停驻挪动族读口 + 措辞 + 判定 + 闭集 + 三码常量;CC-243 能力 / 同步体侧:公钥发现四口、文件历史请求词片段口 + 常量、粗码识别表 + 判定;CC-221 三个运行期名字退出公面,逐名见 §2z);0.84.1 +11 函数 +4 常量(CC-210 开标签定位口 / CC-219 detach 400 纯判定 / CC-213 服务端自铸码受众表 + 事实读器 / CC-214 按码派发口 + 派发表 / CC-225 停泊决断 422 读口 + 措辞 + 码优先判定 + 码常量 / CC-229 撤销动词 + 措辞 + 出路句 + 判据本体 + 码常量);0.84.0 +8 函数 −7 常量 −19 函数(CC-194 B 半登记读数五口 / CC-185 读目录授权结论通告读口 / CC-206 `hands` 段读口与措辞两口;CC-223 收回 0.71.3 预告的 26 个 `export *` 放大件,🔧 0.84.0 退出公面,逐名见 CHANGELOG 0.84.0);0.83.5 +1 函数(CC-204 字符面标记位置读口 `displayUntrustedMarks`);0.83.4 +4 函数(CC-205 `<system-reminder>` 剥离 / 解包两口;CC-203 座位过境口;CC-201 清「用户关卡」记号口);0.83.2 +15 函数 +4 常量(CC-193 姿态放行谓词 / CC-195 强制词闭集 + 成员判据 + 读口 + 措辞 / CC-194 缺席行判定 11 函数 + 3 常量);0.83.1 +10 函数 +6 常量(CC-112 展示层安全出口 `displayUntrusted` / CC-117 会话规则记录无损判定 + 措辞单源 + 五词成因闭集 / CC-174 插件 hook 每轮计划 + 查询口 + 事件判定口 + 四只措辞口 + 五张闭集);0.83.0 −3 函数(联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 🔧 0.83.0 退出公面)+1 函数(CC-175 `terminalReasonForResult`);0.82.7 +5 函数(CC-182 每请求联网搜索配置三态判决:段判决 / env 判决 / 两车道合成 / 措辞单源 / endpoint 显示形);0.82.5 +5 函数 +1 常量(CC-169 print 车道 init 帧工具面:流包装器 / 判定闸 / 名册信号分类口 / 判定口 / 留痕措辞单源 + 等待上界常量);0.82.2 +1 函数(CC-164 云控制面有效配置回体措辞单源 `cloudEffectiveNotices`);0.82.1 +15 函数(CC-154 续跑折叠码读口 + 措辞 / CC-163 文件历史捕获读口六口 / CC-151 模型身份可解析判据五口 / CC-161 自定义代理载荷作废重投口 / 决断失败码「门还在」判定;测试钩 +1);0.82.0 +17 函数 +1 常量(CC-146 `/rewind` 代码档与对话档可用性读口投影 + 三口读账 + 两只判据 + 三句措辞 / CC-150 额度投影三口 / CC-152 装配期无手两口 / CC-154 取码单源 + 折叠码常量 / CC-156 坏档行坐标读口 + 措辞);0.80.0 +1 常量 +10 函数(CC-133 结算词表镜像 `SETTLEMENT_KIND_WORDS` + 五函数 / CC-134 三函数 / CC-132 两函数);0.79.0 +8 常量 +21 函数 +1 类(CC-74 MCP 状态面两张词表 + 九函数 / CC-110 `approvalIsMandated` + `mandatedApprovalDetail` / CC-116 · 118 · 123 `APPROVER_POSTURE_BYPASS`(🔧 0.86.0 退出公面)+ `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):**367** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
153
+ (矩阵、键集、env 名、锚串)而非可调用物;**8** 项是 PascalCase 运行期值
154
+ (`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError` / `APIError` / 0.90.0 CC-316 `AttachmentsSpecRefused`);
155
155
  **35** 项是 `*For(sessionKey, …)` 的 per-session 变体(0.85.1 +1:`registerArmedGateFromQuestionIdFor` 复活,多会话宿主的按会话呈现回执登记口,§110;0.84.0 −3:`notePlanReviewAnsweredFor` / `planReviewArmedKeyFor` / `waitForGateArmedFor` 🔧 0.84.0 退出公面;0.72.0 −4:`clearArmedGateFor` / `onGateArmedFor` / `notePlanReviewAnsweredIfDecisiveFor` 退出公面,第四名 `registerArmedGateFromQuestionIdFor` 即 0.85.1 复活的那一只)(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
156
156
 
157
- ### 2b. 域图(16 域,逐域计数之和 = 1372)
157
+ ### 2b. 域图(16 域,逐域计数之和 = 1397)
158
158
 
159
159
  | # | 域 | 名数 | 承重导出 | 用途 | 实现锚 |
160
160
  |---|---|---|---|---|---|
161
- | 1 | **适配内核(下行主链)** | 70 | `classifyToolHistoryMismatch` / `resolveToolHistoryRewindTarget`(0.87.0 CC-268:会话历史 tool_use 错配的判型口 —— 与合成终局错误行超集键 `_sema_tool_history_mismatch` 同一只判型,只认 HTTP 400 且 provider 那句话在消息开头,永不抛 —— 与回退节点解析口 —— 宿主转录行 + 错配 ⇒ 坏轮 prompt 行 / 从头开始 / 六理由判不了,不越过没有引擎句柄的 prompt;§113)· `handsSeamReadingOf` / `handsSeamDetail`(0.84.0 CC-206:接线回执 `hands` 段三态读口 + 措辞单源,「没有自带工具」那一句与 `handsMountedDetail` 同句首句尾,两者不是同一个事实;§107)· `terminalReasonForResult`(0.83.0 CC-175:结果帧 CC 键 `terminal_reason` 的读口,与铸点同一只判据,给端自拼的结果帧与旧转录;§100)· `handsMountedFromManifest` / `handsMountedDetail`(0.82.0 CC-152:装配期「这一 run 有没有手」三态判据 + 措辞单源,读 `wiring_manifest` 名册的 `mountedBy`;§92)· `readSubmitWiringManifest`(0.78.1 CC-121:非流式提交 200 体 `TaskResult.wiringManifest` 的三态读口,view 与流式腿 chrome 臂同一张;§83)· `TOOL_INPUT_JOIN_MAX_CALLS`(0.73.4 CC-34:终帧拒绝清单第三键的本流快照上限;§66)· `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText`(0.72.12 CC-50:第三条中性终局行「结局不知道」,读结果帧 `_sema_outcome`;§59)· `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`(0.72.8 CC-43:runStream 第二条中性臂 —— core malformed tool-call 一族的行身份;§55)· `readEffectiveReasoning` · `readEffectiveMemoryScopes`(0.71.3 CC-06:终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` 的窄读器,§45)· `isSubFlowSegmentEnd` · `SEGMENT_END_IDENTITY_KEYS` · `droppedWhySentence`(0.69.2 CC-13:三件出公面,§38)· `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `SEMA_SEGMENT_ID_KEY`(0.68.2 CC-01:committed assistant 文本行顶层段身份键的唯一字面量出处,壳只读)· `projectMcpSection`(0.68.2 CC-03:`wiring_manifest.mcp[]` 与 `/mcp` 面板 `lastLegMcp.mcp[]` 共用的同一只条目读器)· `readRunCostFacts`(0.66.0:终局成本事实的**唯一读器** —— `TaskStats.costBreakdown` / `nested` 逐键窄读 + 对账三段(own/nested/compaction)与两个「没定价」判别位;终帧的两个超集键与 chrome 臂 `run_cost_reconciled` **共用它**,两面不会各算各的,详见 §31c)· `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`(0.68.0 / L-247:**core 终局因由**闭集,四词 `completed|failed|blocked|paused`)· `RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`RUN_TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇的**单铸谓词**,0.68.0 随 L-247 **两表分源**更名 —— `killed` 属 server run 行状态面、`paused` 属 core 因由面,合成一张会让两边加词时都读不出该改哪儿;`blocked` 是 agent 自报终态,`suspended`/`needs_review` 刻意不在表里,详见 §33b / §30j)· `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(0.68.0 / L-244:子代用量下界位的**自有名**与唯一判据,与终帧 `_sema_usage_lower_bound` 分名,详见 §33g) · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
161
+ | 1 | **适配内核(下行主链)** | 77 | `fileHistoryLegNoticeVerdict` / `fileHistoryLegNoticeSentence` + `FILE_HISTORY_LEG_VERDICTS` / `createFileHistoryDeclarationLedger` / `fileHistoryDeclarationOfBody`(0.90.0 CC-294:接线回执 `fileHistory` 段的五态判定与两句措辞单源,只有「带了声明仍在捕获」与「按会话关不掉」两态出句 + 「这条 run 的提交带没带关断声明」的进程内账本与出站体读口,绑定判据与投递账本同一只;§116)· `toolHistoryErrorCarrierOf`(0.90.0 CC-309:同一终局的错误载体〔终局码 / 服务商状态 / 失败句原值,只读自有数据位〕铸口 —— 本包终局行判会话历史 tool_use 错配与「改了重发」判定口的让位读同一只;§116)· `providerRejectionResend`(0.89.0 CC-282:终局服务商拒绝详情的「改了重发」判定口,只读状态码、两句;`readRunTerminal` 的 `failed` 臂同批多可选位 `detail?`;§115;0.90.0 CC-309 +1 可选参:同一终局的错误载体判为错配 ⇒ 让位)· `classifyToolHistoryMismatch` / `resolveToolHistoryRewindTarget`(0.87.0 CC-268:会话历史 tool_use 错配的判型口 —— 与合成终局错误行超集键 `_sema_tool_history_mismatch` 同一只判型,只认 HTTP 400 且 provider 那句话在消息开头,永不抛 —— 与回退节点解析口 —— 宿主转录行 + 错配 ⇒ 坏轮 prompt 行 / 从头开始 / 六理由判不了,不越过没有引擎句柄的 prompt;§113)· `handsSeamReadingOf` / `handsSeamDetail`(0.84.0 CC-206:接线回执 `hands` 段三态读口 + 措辞单源,「没有自带工具」那一句与 `handsMountedDetail` 同句首句尾,两者不是同一个事实;§107)· `terminalReasonForResult`(0.83.0 CC-175:结果帧 CC 键 `terminal_reason` 的读口,与铸点同一只判据,给端自拼的结果帧与旧转录;§100)· `handsMountedFromManifest` / `handsMountedDetail`(0.82.0 CC-152:装配期「这一 run 有没有手」三态判据 + 措辞单源,读 `wiring_manifest` 名册的 `mountedBy`;§92)· `readSubmitWiringManifest`(0.78.1 CC-121:非流式提交 200 体 `TaskResult.wiringManifest` 的三态读口,view 与流式腿 chrome 臂同一张;§83)· `TOOL_INPUT_JOIN_MAX_CALLS`(0.73.4 CC-34:终帧拒绝清单第三键的本流快照上限;§66)· `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText`(0.72.12 CC-50:第三条中性终局行「结局不知道」,读结果帧 `_sema_outcome`;§59)· `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`(0.72.8 CC-43:runStream 第二条中性臂 —— core malformed tool-call 一族的行身份;§55)· `readEffectiveReasoning` · `readEffectiveMemoryScopes`(0.71.3 CC-06:终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` 的窄读器,§45)· `isSubFlowSegmentEnd` · `SEGMENT_END_IDENTITY_KEYS` · `droppedWhySentence`(0.69.2 CC-13:三件出公面,§38)· `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `SEMA_SEGMENT_ID_KEY`(0.68.2 CC-01:committed assistant 文本行顶层段身份键的唯一字面量出处,壳只读)· `projectMcpSection`(0.68.2 CC-03:`wiring_manifest.mcp[]` 与 `/mcp` 面板 `lastLegMcp.mcp[]` 共用的同一只条目读器)· `readRunCostFacts`(0.66.0:终局成本事实的**唯一读器** —— `TaskStats.costBreakdown` / `nested` 逐键窄读 + 对账三段(own/nested/compaction)与两个「没定价」判别位;终帧的两个超集键与 chrome 臂 `run_cost_reconciled` **共用它**,两面不会各算各的,详见 §31c)· `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`(0.68.0 / L-247:**core 终局因由**闭集,四词 `completed|failed|blocked|paused`)· `RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`RUN_TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇的**单铸谓词**,0.68.0 随 L-247 **两表分源**更名 —— `killed` 属 server run 行状态面、`paused` 属 core 因由面,合成一张会让两边加词时都读不出该改哪儿;`blocked` 是 agent 自报终态,`suspended`/`needs_review` 刻意不在表里,详见 §33b / §30j)· `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(0.68.0 / L-244:子代用量下界位的**自有名**与唯一判据,与终帧 `_sema_usage_lower_bound` 分名,详见 §33g) · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
162
162
  | 2 | **seam 公共契约** | 4(其余为 type-only) | `CHROME_ARMS` · `deriveTranscriptId` · `snapshotSegmentIdentity` / `snapshotIsSubFlow`(0.76.1:身份四键一次性快照助手,投影口与 adapt 侧全部臂的唯一身份读点;§77)| 公共词汇 + **id 确定性不变量**(同一条流重放 ⇒ 同一串 id)。`CHROME_ARMS` = 端「我要消费哪些 chrome 臂」的对照清单 | `src/seam.ts` |
163
163
  | 3 | **HITL 决断卡链**(§4/§5 主战场) | 230 | `GATE_MODE_RELEASE_REASON_WORDS` / `isGateModeReleaseReasonWord`(0.88.0 CC-272:门记录放行账 `released.reason` 的闭集镜像与判词谓词,值取构建期生成物;读口 `gateModeRelease` 仍按开集透传;§114)· `gateModeRelease`(0.86.0 CC-249:门记录放行臂上「权限模式替人答掉一问」那一条账的具名读口,与 `gateOutcomeOf` 同一只窄读器;缺席不是「没经过模式放行」;§112)· `registerArmedGateFromQuestionIdFor`(0.85.1 CC-259:多会话宿主在自己的会话键上登记呈现回执,`reopenPlanReviewCard` 回执形等的就是这个会话键上的回执;0.72.0 退出公面的名字复活;§110)· `decideParkMovedFromError` / `decideParkMovedContent` / `isDecideParkMovedCode` / `DECIDE_PARK_MOVED_CODES` + `DECIDE_NOT_PARKED` / `DECIDE_GATE_MOVED` / `DECIDE_CLAIM_LOST`(0.85.0 CC-243:`/decide` 停驻挪动三码的读口、按码分说的一句与判定,四个决断出口补句、停泊腿按码续读流;`isCodeClassifiedGateFailure` 不收本族;§109)· `notePlanReviewDecisionHandedOver` / `planReviewPendingReadMark` / `planReviewDecisionInFlight` / `notePlanReviewDecisionNotApplied` / `notePlanReviewGateLeft` / `latestPlanReviewDecisionMark`(0.85.0 CC-241:plan-review 决断台账 —— 交出登记 + 读起点刻度 + 拒开判据 + 「没生效」与「离门」两只说一声的口 + 交出刻度;`reopenPlanReviewCard` 按它拒开;§109)· `isCodeClassifiedGateFailure`(0.84.1 CC-225:这枚决断失败码自己说清了处置、失败文字不许再按「门已决」词表扫 —— `isGateStandingErrorCode` 的两码 ∪ 422 `parked_resume.startup_failed`;§108)· `removeRefusedSessionRules` / `sessionPolicyRemovalNotice` / `isEngineRefusedToolName`(0.84.1 CC-229:会话规则记录里引擎会拒启的条目的窄撤销动词 + 八臂措辞单源 + 引擎准备期按名字拒启的判据本体,比 `sessionPolicyDeliverable` 的 `legacy_tool_name` 判词宽;撤销动词必交这台部署一跑的工具名册,名册里的名与别名不撤;§108)· `toolPermissionRequestAskBits` / `clearPlanReviewUserDismissals`(0.83.4 CC-203 / CC-201:卡请求 → 座位请求的四位过境口,与卡请求同一把窄读;会话换代时清「用户关卡」记号;§104)· `askSurvivesPosture` / `readApprovalMandate`(0.83.2 CC-193 / CC-195:常驻姿态下「这一张卡能不能由姿态答掉」三态谓词;卡上强制词读口,缺席答缺席;§102)· `sessionPolicyDeliverable` / `sessionPolicyWithheldNotice` / `SESSION_POLICY_WITHHELD_WHY`(0.83.1 CC-117:一批规则串能不能无损写进会话规则记录 —— 整批可送才送、五词成因闭集、每词一句措辞单源;宿主侧那一份的继任;§101)· `isPolicyRefusedGate` / `denyAttributionRefusalFromError` / `denyAttributionRefusalContent` / `removalConsequenceLineForBehavior` / `ruleRemovalBehaviorOf`(0.80.0 CC-133 · CC-132:策略拒谓词 + 归因键三码读口与人话 + 删除规则后果句铸点与闭集读口;§87)· `HITL_POLICY_DENY_MESSAGE` / `APPROVAL_DENY_SETTLED_BY_WORDS` / `readApprovalDenySettledBy` / `SEMA_DENIAL_KIND_KEY`(0.79.0 CC-125:deny 收口帧按 `settledBy` 分两串的冻结句、决断对象归因位的两词可达子集与只认自有数据属性的读器、分类词信封键名;§85)· `approvalIsMandated`(0.79.0 CC-110:审批卡「清不掉」判据口,帧位 ∨ 寄存行缺席词两条腿一个真源;§85)· `readSessionPolicy` / `tightenSessionPolicy` / `tightenedSessionRules` / `classifySessionPolicyFailure` / `sessionPolicyTightenNotice` / `SESSION_POLICY_RULE_FIELDS` / `SESSION_POLICY_TIGHTEN_UNKNOWN_WHY`(0.77.0 CC-105:会话策略窄读 + 收紧编排五臂判别联合)· `writePersistedRule` / `PERSISTED_RULE_WRITE_BEHAVIORS` / `PERSISTED_RULE_WRITE_REFUSAL_CAUSES` / `PERSISTED_RULE_WRITE_UNKNOWN_REASONS`(0.77.0 CC-103:持久规则单步写面,词表派生不手抄;§79)· `persistedRulesWriteAvailable`(0.76.1 CC-102:单步写入口便利口,只派生自写键自己的四态,不与撤销面那只合取;§77)· `approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` / `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(CC-77 ①:「一次审批决断最后怎么了」的单源判别联合 `decided` / `not_sent` / `unsettled`,两条腿的结局对象一次判别;既有结局型面一字不动)· `approvalOutcomeNoteOf` / `APPROVAL_NOTE_RETRACTED_DETAIL` / `APPROVAL_NOTE_EDIT_REFUSED_DETAIL`(0.74.5 CC-88:审批结局便签单源;§73)· `decideReceiptReopen` / `suspendedReopenOf`(0.74.3 CC-73:reopen 族第二臂;§71)· `RETRACTED_CARD_DECISION_KIND`(0.74.1 CC-67:卡口无决断收口;§69)· `planReviewOutcomeTail`(0.73.1 CC-57:outcome 尾句六态单铸点;投递口闩;§63)· `readLivePendingRows` / `suspendedSubagentAsks` / `countApprovalsAwaitingDecision` / `createSuspendedAskTracker` / `livePendingRowToApprovalFrame` / `surfaceSuspendedAskAndRespond` / `surfaceEditRefusedOnBlindAsk` + `EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT`(0.72.14 CC-55:悬挂的流内 ask 读面 / 视图 / 去重账 / 决断口;§61)· `planReviewCardOptions` / `planReviewChoiceFromAnswer` / `versionSupportsPlanReviewModeAfter` / `isPlanReviewModeAfter` + `PLAN_REVIEW_APPROVE_AUTO_LABEL` / `PLAN_REVIEW_APPROVE_MANUAL_LABEL` / `PLAN_REVIEW_MODE_AFTER_WORDS` / `PLAN_REVIEW_MODE_AFTER_MIN_ENGINE`(0.72.13 CC-46:plan_review 批准后模式 `permissionModeAfter` 发口与三选卡双闸;§60)· `makeHitlCanUseTool` · `HitlBridge` · `findPendingForTask` · `readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070:`/decide` 200 = **投递受理**不是「门已解决」;`executionOutcome` 缺席 = 未知,详见 §30h) · `HitlSafetyError` · `bridgeAskUserQuestionGates` · `surfaceToolApprovalFrameAndRespond` / `surfaceFsApprovalAndDecide` · `readToolApprovalRespondAck` · `installApprovalCardPort(For)` · `installHitlHostSurface(For)` · `armPlanReviewApproval` · `reopenPlanReviewCard` · `decidePlanReview` · `startApprovalsFeed` · `pendingRowIsOwnedByThisSession` · `approvalCallKey`/`liveFrameCallKey`/`planReviewQuestionId` · `registerArmedGateFor`/`wasGateArmedFor` · `waitForGateArmed`/`onGateArmed`/`gateArmedWaitMs`(#244 F1 呈现回执事件源) · `planReviewArmedKey`/`notePlanReviewAnswered`/`notePlanReviewAnsweredIfDecisive`(A-024.4 plan 呈现分代;`waitForGateArmed` / `planReviewArmedKey` / `notePlanReviewAnswered` 三只的 `*For` 变体 0.84.0 退出公面) · `toolEndOutputText` · `waitForParkRowBirth` · `classifyAskParkRows` / `askParkRowArm` / `classifyAskParkChainFailure` · `readDecisionNoteAudit` / `decisionNoteAuditLine` · `resumeRunningOptions` / `resumeChoiceFromLabels` · `persistedRulesLaneAvailable`/`persistedRulesGovernanceAvailable` · `classifyRulesFailure` · `listAllPersistedRules` · `classifySkippedReason` · `readRulePersistOutcome`(#244 F2:persist-ack 读口与 `readToolApprovalRespondAck` 合成一处) · `parseLocalAllowRule`(durable 腿本地落规则窄化骨架,谓词经 `LocalAllowRuleDeps` 注入) · `readToolApprovalRespondRefusal`(#225 件5,0.42.0:respond 抛错的结构化原文读口 —— 三位各自防御读、各自缺席不铸、**三位皆缺席时整只返 `undefined`**;原样交还零加工,UNTRUSTED-for-display)· `installEditedRuleTextPrechecker` / `hasEditedRuleTextPrechecker` / `precheckEditedRuleText`([5076] 转出口,0.42.0:core 5.57.0 `precheckEditedRuleText` 的**端口注入形** —— 类型面 + 注入口 + 诚实缺席读口。🔴 **不是** value 级 re-export,理由见 §7 缺口 **P-34**;未装 ⇒ 返 `undefined`,绝不编一个 `{ok:true}`)· `RULE_NOT_SENT_WARN_TEXT` + `RULE_NOT_SENT_REJECTED_WARN_TEXT`(#334,0.43.0:人在卡上按下的「不再询问」被整条丢弃时的诚实告知(文案两句;发告知的两只函数 0.84.0 起是包内件)——**两条刻意分开**:前者=**引擎能力位未确认**(换台引擎/等探测就好),后者=**这次选择没过包内表核/互斥核**(表外文本/坏下标/两臂同场,换引擎也不会变) —— 编辑臂 `respondFreeFormRules` 与批臂 `respondBatchRuleOffers` 两条同形存量共用一条,与 `surfaceRememberNotApplied` 同族纪律:决断照送、只是规则没存,静默丢掉用户明确意图 = 让人以为功能坏了)· `projectCrashConverged`(L-38,0.49.0:`/v1/approvals` additive 键 `crashConverged` 的分桶投影 —— 崩溃收敛的孤儿审批读面,**缺席 ≠ 空数组**、分桶恰一个合取、坏行丢弃并计数,详见 §12;同批把 `ApprovalsResourceLike.list()` 的返回位 additive 放宽成 `ApprovalsListEnvelope`,老形 `{pending}` 仍可赋值)· `readRuleOffers` / `readRuleOfferSupply`(L-103/[C228],0.57.0 additive 导出:「不再询问」候选两代 wire 键的窄读器**公面化** —— 此前只经卡端口出包,不走卡端口架构的宿主只能自己重铸一把,而它承载的是兑付安全判据(原始下标不前移/逐条丢坏/闭集 kind/两代取舍序),详见 §20)· `RULE_OFFERS_ABSENCE_REASONS` / `DENIAL_LIMIT_KINDS`〔后者 🔧 0.85.0 退出公面,值改从 `@sema-agent/sdk` 根入口取〕(0.59.0 / sdk 8.3.0 提货:`ruleOffersAbsence` 三词与 `denialLimitFallback.limit` 二词的**运行期**闭词表再导出 —— 与 0.58.0 那三张同一条纪律:端拿它做判定别再手抄字面量。⚠️ **本包自己不拿这两张表做窄读判定**(两处都按开集透传,词表属主是 core、server 已按闭集拒过),再导出只是给端的 `switch` 一份可数的表,端仍必须带 `default` 臂,详见 §23a)· `DecideTransportRetryExhaustedError`(Inkglow-1085 P0a:decide 出站瞬断重试耗尽的 typed 判别 —— HitlBridge 内建单次退避重试,耗尽走重呈臂不判死 turn;端一般只消费行为,不需要 instanceof) · `gateOutcomeOf` / `isDeniedGate` / `gateDeniedBy` / `gateApprover` / `isApprovalWindowExpiredGate` / `isDenialLimitAutoDeniedGate` / `isParkSlaExpiredGate` / `isHumanSettledGate`(0.60.0 / engine ≥7.64.0:`tool_end.gate` 整条门记录的窄读器 + 判定谓词 —— 取代退役的四个正交词 `settledBy`/`resolution`/`autoDenied`/`approver`。🔴 **判定归包**:「是不是审批窗自己走完的拒绝」旧形上是端各自拼的两键合取,而三条窗词现在分得开、合并读回去等于把刚修好的判别力扔掉;⚠️ 公面型一律带 `View` 后缀 —— 本文件的 `GateOutcome`(决断腿结局)与 sdk 的 `GateOutcome`(引擎门记录)**同名不同义**,详见 §24c)· `isGateParkedToolEnd`(「这次调用没在这里结算」的**第二形**谓词:gate 缺席 + `errorCode:"gate.parked"`;端判这件事必须与 `isApprovalWindowExpiredGate` **两形合读**) · `readWireErrorCode`(B-037 候包件②:decide/取件失败上引擎 wire 机器码的单源读口,结构视图读不 `instanceof`;与本包铸的 `code` 是两个命名空间,详见 §24g)| suspended→decide→resume 环。🔴 **D-1 两元组 verbatim 回显**是字节级断言的安全不变量,端**不许重实现它的任何一段**。🔴 键空间边界(web [C1] d3 拦截):`gateIdentity` 四常量两函数只覆盖 HITL questionId/callKey 空间;seat 的 `TOOL_PERMISSION_REQUEST_ID_DOMAINS`(`plan:` 等)是另一键空间,**两者绝不合并**(合并=座位校验器静默拒全部 plan-review 卡) | `src/hitl/hitlBridge.ts`、`toolApprovalWire.ts`、`askGateWire.ts`、`planReviewWire.ts`、`hitlHostSurface.ts`、`gateIdentity.ts`、`armedGateRegistry.ts`、`parkOwnership.ts`、`parkResolver.ts`、`approvalsFeed.ts`、`frameRouter.ts`(**只挑名导出** `toolEndOutputText`/`ENGINE_ABORT_TOOL_RESULT`/`HITL_REJECT_MESSAGE`/`HITL_INTERRUPT_MESSAGE_FOR_TOOL_USE`)、`parkRowBirthWait.ts`、`approvalDecisionNoteAudit.ts`、`askParkRowRouting.ts`、`resumeRunningCard.ts`(#265 上收的判定层)、`persistedRulesWire.ts`、`localAllowRule.ts`(#244 F2 规则侧)、`crashConverged.ts`(L-38 崩溃收敛读面)、`sessionPolicyDeliverable.ts`(0.83.1 CC-117 会话规则无损判定)、`askSurvivesPosture.ts`(0.83.2 CC-193 姿态放行谓词)、`src/gateOutcome.ts` |
164
164
  | 4 | **子代 wire + 面板侧信道台账** | 110 | `stopEngineSessionBackground` / `engineSessionBackgroundReceiptReadingOf` / `ENGINE_SESSION_BACKGROUND_RECEIPT_STATES`(0.85.0 CC-246:会话后台任务停止口 + 受据三态归类口与闭集镜像,三端公共转调与单源措辞;认不出的受据词一律归「可能仍在跑」;§109)· `readEngineAgentRegistry` / `isEngineAgentRegistryListingSuperseded` / `engineAgentRegistryReadingOf` / `engineAgentRegistryKeyOf` / `engineAgentRegistryRowsMissingFromHost`(0.84.0 CC-194 B 半:后台代理登记读口 + 取代判定 + 归类口 + 登记键桥 + 补行谓词,宿主据此给缺席行回收入参的 `registry` 位填真读数;§107)· `isEngineAgentAbsentRow` / `engineAgentAbsenceMarkOf` / `engineAgentAbsenceClockStopMs` / `engineAgentPanelEventClearsAbsence` / `engineAgentRowCountsAsRunning` / `tallyEngineAgentRows` / `engineAgentTurnSweepSettles` / `reapEngineAgentAbsentRows` / `engineAgentAbsenceTtlDueAtMs` / `engineAgentAbsenceDroppedLine` / `engineAgentTerminalAfterDropLine` + `ENGINE_AGENT_ABSENT_ROW_TEXT` / `ENGINE_AGENT_ABSENCE_TTL_MS` / `ENGINE_AGENT_REGISTRY_READINGS`(0.83.2 CC-194:后台子代缺席行的判定 / 计数 / sweep 豁免 / 回收 / 措辞单源,回收只在后台代理登记确认离场时;§102)· `isNewEngineAgentPanelCycle`(0.74.5 CC-87:新周期单源判据;§73)· `resolveEnginePanelTaskId` / `MAX_HELD_WIRE_TICK_BEATS` / `clearEnginePanelTaskResidentByWire`(0.74.3 CC-70:子代身份归一读口、缓一拍节拍上限、按 wire id 清常驻标(前代终态不清当代);§71)· `isStaleEngineAgentPanelEnd`(0.74.0 CC-66:面板 end 的周期身份判据;§68)· `subscribeEngineAgentPanelAbsence` / `publishEngineAgentPanelAbsence`(0.72.13:fleet 行缺席上报的**独立订阅口** —— 不上主通道,老消费者结构上收不到;§60 S-5)· `tailEngineSubagent` · `installSubagentActivitySink` · `installSubagentTailMetaSink`(#280 件2:tail meta 帧发布口,`contentFrames` 判别位载体)· `stopEngineTask` + `classifyTaskStopConflict` · `fetchEngineSubagentReport` · `steerEngineSubagent`(0.32.0 未发布 #280 件A:additive 第三参 `childTaskId` —— 端有行上下文时**应当**传,传了就走「台账优先 / 缺席即诚实缺席 + 缺席留痕」的 Q3 口径,与 tail·taskOutput·subagentOutput 三腿同姿势、与孪生 resume 腿共用同一个 `resolveOwnerRunId` 判据;**不传**则逐字维持旧行为=回落在飞 run)· `resumeSettledSubagent` + `resolveSubagentResumeContext` + `resolveOwnerRunId` + `classifySubagentResumeFailure` + `subagentResumeAvailable`(#242 批 2 A-028.7:resume 判定半场上收,与 steer 孪生同居;取址三态 = 台账有行用行值 / 指名了行但台账缺席则**诚实缺席绝不回落在飞 run** / 没指名行才回落。出路文案归端)· `recordSubagentOwnerFromProgress` + `getBgParentRunOwner`(A-028.6:「子代 → 宿主 run」**单表**,宿主 run 必须由持 stream-local 值的调用方显式传入,包内绝不从 `activeEngineRunId()` 推断)· `auditRetainWithoutWake`([4000] Q5:引擎宣示 `subagentResume` + 本端在付 `retainSubagentSessions` + 端未实现 `wakeSubagent` ⇒ 响亮一条;`CLIENT_VERBS.wakeSubagent` 维持 fail-soft)· `subscribeSubagentContent` · `subscribeEngineAgentPanel` · `publishQuestionFrame` / `respondToQuestion` · `configureSubagentContentStore` / `subagentContentStoreConfig` / `SUBAGENT_CONTENT_STORE_DEFAULTS`(0.62.0:子代内容账本的**字节预算** —— 此前只有条数帽而单条无上限,一条 base64 工具结果就能让一个子代槽吃到十几 MB;越限从最早的内容开始丢并留一条可渲染的 `truncated` 记录,总帽淘汰整条最久未用的账本。配置面 fail-loud,详见 §26②)| 驱动与观测委派子代;经 module 级台账喂活体 agent/task 面板。全部**能力位 gate**(§5b) | `src/subagent/*.ts`、`src/subagentContentStore.ts`、`src/engineAgentPanelStore.ts`、`src/engineAgentAbsence.ts`(0.83.2 CC-194 缺席行判定与措辞)、`src/agentSession/engineAgentRegistryRead.ts`(0.84.0 CC-194 B 半登记读口)、`src/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
165
165
  | 5 | **fleet 投影** | 38 | `displayUntrustedMarks`(0.83.5 CC-204:同一只出口另报每一枚字符面标记的 UTF-16 区间,`text` 与同选项的出口逐字节同;§105)· `displayUntrusted`(0.83.1 CC-112:wire 派生文本上屏前的合成出口三端单源 —— 凭据两网 ∘ 字符三网,选项按载体选;本域 `escapeDisplayControlChars` / `collapseLabel` / `capForDisplay` 三只旧口改由同一只字符面引擎实现、输出逐字节不变,字符集窄于新口默认;§101)· `createFleetLedger` · `projectTasks` · `projectWorkflows` · `projectFleetAgentRows` · `readEngineActiveBgTasks` · `FLEET_TASK_VIEW_KEYS` · `escapeDisplayControlChars`(不可见字符可见化,行标签/描述消毒的共享底座)· `capForDisplay`(0.62.0:呈前**消毒 + 封长**的共用铸点 —— 先转义、后按转义结果封长,截点避开半截转义 token 与合法代理对;本包该族四处此前各写一份、其中三份顺序是反的,详见 §26⑦) | 老 `fleetClient` 那一刀的成品:**帧体归库、连接归端** —— 端持 SSE 连接,库做行投影 + 保留台账 | `src/fleet/fleetProjection.ts`、`src/fleet/fleetLedger.ts`、`src/fleetAgentPanelProjection.ts`、`src/fleetTaskDesc.ts`、`src/displayUntrusted.ts`(0.83.1 CC-112:展示层安全出口单源,本域三只旧口的字符面引擎) |
166
- | 6 | **请求装配(上行唯一构造口)** | 40 | `requireExistingSessionRefusalFromError` / `requireExistingSessionRefusalContent`(0.88.0 CC-281:请求键 `requireExistingSession` 被服务端拒 —— 会话不在 / 没给会话 id —— 的读口与一句,粗码形读消息尾括注、带码形直接认;§114)· `inheritEnvDeclaration` / `inheritEnvServerSupport` / `inheritEnvWithheldNotice` / `isInheritEnvWord` + `INHERIT_ENV_WORDS` / `INHERIT_ENV_MIN_SERVER`(0.86.0 CC-257:请求键 `inheritEnv` 的版本闸片段口 —— 服务端整串正式版 ≥ 7.106.0 才给 `{ inheritEnv }`,否则空片段 + 回执成因与一句终端用户面话;两词闭集与判词口、版本地板常量;缺席 = 缺省清洗且清掉本会话上一条声明;§112)· `taskRequestOmissionCauseNotice` / `TASK_REQUEST_OMISSION_CAUSE_NOTICES`(0.85.1 CC-248:回执省略成因的终端用户向取句口与句表,与接入方那只同源于同一成因闭集、逐词不同句;表外 / 读不出 ⇒ 一句通用句,不抛、不回显;§110)· `fileHistoryDeclarationField` / `FILE_HISTORY_DISABLED`(0.85.0 CC-243:「这一次运行别捕获文件历史」请求词片段口 —— 只在能力读数是 `on-optional` 且宿主意图是别捕获时给 `{ fileHistory: 'disabled' }`,老服务端对这一键整条 400;字面常量供断言锚;§109)· `REQUEST_LANES` / `APPROVER_POSTURE_BYPASS` / `approverPostureDeclarationField`〔后两者 🔧 0.86.0 退出公面:请求键 `approverPosture` 退役,宿主仍给即构造期按名拒;§112〕/ `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` |
166
+ | 6 | **请求装配(上行唯一构造口)** | 43 | `permissionsDeclaration`(0.90.0 CC-302:请求体 `settings.permissions` 三桶装配口 —— 每只桶按来源信任序排、过与引擎同一只的安全投影;allow 只在能力位读到「按放行规则编」时才发;§116)· `disableSkillsDeclaration`(0.89.0 CC-277:请求键 `disableSkills` 的唯一取值口,读能力位给 `{ disableSkills: true }` 片段或 `withheld` 一句;车道表 45 → 46 行;§115)· `taskRequestOmissionCausePhrase`(0.89.0 CC-282:回执省略成因的从句短语口,与整句表同表派生;§115)· `requireExistingSessionRefusalFromError` / `requireExistingSessionRefusalContent`(0.88.0 CC-281:请求键 `requireExistingSession` 被服务端拒 —— 会话不在 / 没给会话 id —— 的读口与一句,粗码形读消息尾括注、带码形直接认;§114)· `inheritEnvDeclaration` / `inheritEnvServerSupport` / `inheritEnvWithheldNotice` / `isInheritEnvWord` + `INHERIT_ENV_WORDS` / `INHERIT_ENV_MIN_SERVER`(0.86.0 CC-257:请求键 `inheritEnv` 的版本闸片段口 —— 服务端整串正式版 ≥ 7.106.0 才给 `{ inheritEnv }`,否则空片段 + 回执成因与一句终端用户面话;两词闭集与判词口、版本地板常量;缺席 = 缺省清洗且清掉本会话上一条声明;§112)· `taskRequestOmissionCauseNotice` / `TASK_REQUEST_OMISSION_CAUSE_NOTICES`(0.85.1 CC-248:回执省略成因的终端用户向取句口与句表,与接入方那只同源于同一成因闭集、逐词不同句;表外 / 读不出 ⇒ 一句通用句,不抛、不回显;§110)· `fileHistoryDeclarationField` / `FILE_HISTORY_DISABLED`(0.85.0 CC-243:「这一次运行别捕获文件历史」请求词片段口 —— 只在能力读数是 `on-optional` 且宿主意图是别捕获时给 `{ fileHistory: 'disabled' }`,老服务端对这一键整条 400;字面常量供断言锚;§109)· `REQUEST_LANES` / `APPROVER_POSTURE_BYPASS` / `approverPostureDeclarationField`〔后两者 🔧 0.86.0 退出公面:请求键 `approverPosture` 退役,宿主仍给即构造期按名拒;§112〕/ `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 台账** | 49 | `noteOwnWorkflowRun`(0.72.2 CC-37:own 台账显式登记口,adapter workflow lane 门在 own-run 正向证明下同拍调;§49)· `installNotificationQueuePort` · `normalizeTaskNotification` · `taskNotificationDedupKeyFromWire` · `registerOutstandingBgTask` / `registerOutstandingWorkflowRun` · `notificationQueuePortMisses` · `subscribeOutstandingWorkflows` · `outstandingDeliverableWorkflowCount` | `task_notification` 归一 + 去重 + 投递进宿主命令队列的**一把闸**;`outstandingDeliverableWorkflowCount()` 是 headless `-p` 的**退出门** · `classifyPeerNotification` / `renderPeerFrameTranscriptText` / `parsePeerFrameText` / `peerFrameDisplayName` + 三张闭集表(design/385,0.54.0:同一条 `task_notification` 车道上三条**引擎注入帧**的类型化投影 —— 判别位=载体在场而非 summary 文本,详见 §17) | `src/notifications.ts`(11 个 module 台账) |
168
168
  | 8 | **工具结果卡** | 28 | `findSystemReminderOpenTag`(0.84.1 CC-210:开标签定位口,与剥离 / 解包同一个判定,文法常量不上公面;§108)· `stripSystemReminderBlocks` / `unwrapSystemReminder`(0.83.4 CC-205:引擎 `<system-reminder>` 信封壳的剥离与整条解包,开标签只认引擎铸的两形,线性时间;§104)· `displayBody`(0.78.1 CC-113:工具结果正文的人类面读口,剥本包铸的不可信围栏,三形互不折叠;§83)· `structuredToToolUseResult` · `readAsyncLaunchedAgentReceipt` · `wireOutputToBody` · `parseModelFacingBash` · `getPatchFromContents` · `toolEndResultToUserFrame` · `flattenToolOutput` | 铸端要渲的 `tool_result` 卡体,含客户端 diff hunk(唯一 runtime dep 的用处) | `src/toolResult.ts`、`src/printToolResultFrame.ts`、`src/diff/patch.ts` |
169
- | 9 | **能力/旋钮 wire 门族** | 198 | `projectStorePostureCapability` / `noteEngineCapsForStorePosture` / `observedStorePosture` / `forgetStorePostureReading` + `storePersistence` / `storePostureDoctorDetail`(0.86.0 CC-250:caps `store` 存储姿态四态读口与读账、持久判据三值、doctor 一行;键缺席 = 老引擎没报,不是「不持久」;§112)· `projectCenterWiringCapability` / `noteEngineCapsForCenterWiring` / `observedCenterWiring` / `forgetCenterWiringReading` + `callerQuotaLease` / `centerWiringDoctorDetail`(0.86.0 CC-250:caps `centerWiring` 中心接线读口,缺席按同体 `store` 分 `none` / `not_reported`,调用方租约六词判决,doctor 一行;§112)· `noOsSandboxOnThisHost` / `noOsSandboxContent` / `projectExecutionLaneWiring`(0.86.0 CC-256:`executionLane.isolated` 读进车道读数后的「本机无 OS 沙箱」三值判定与那一句,operator 诊断面车道段同一份判据;§112)· `projectSealedKeyCapability` / `noteEngineCapsForSealedKey` / `observedSealedKey` / `forgetSealedKeyReading`(0.85.0 CC-243:能力面公钥发现段 `sealedKey` 的四态读口与读账,只出公钥三键、键缺席 = 不要封;§109)· `hooksWirePlan` / `pluginHookVerdictOf` / `hooksNotRunNotice` / `pluginHookExecutorLabel` / `pluginHookReasonText` / `settingsHookDropText` / `isEngineFiredHookEvent` + `ENGINE_FIRED_HOOK_EVENTS` / `PLUGIN_HOOK_DISPOSITIONS` / `PLUGIN_HOOK_REASONS` / `PLUGIN_HOOK_EXCLUSION_REASONS` / `SETTINGS_HOOK_DROP_REASONS`(0.83.1 CC-174:插件 hook 每轮计划 —— 逐条判「投给引擎 / 本客户端执行 / 如实不跑」,请求体 hooks 与本地跳过用同一份,开机「不会执行」清单与 `/hooks` 标注措辞单源,五张闭集;读口是 `SettingsPort` 的可选成员 `enabledPluginHooks`(型面,不计名数);§101)· `invalidateTaskAgentsWire`(0.82.1 CC-161:自定义代理载荷作废并重投,就绪门等最新一代,§93 S-14)· `projectFileHistoryCaptureCapability` / `noteEngineCapsForFileHistoryCapture` / `observedFileHistoryCapture` / `forgetFileHistoryCaptureReading` / `fileHistoryCaptureMode` / `fileHistoryCaptureDoctorDetail`(0.82.1 CC-163:`capabilities.fileHistoryCapture` 四态读口 + 判据 + 措辞单源;§93)· `observedRewindArchive` / `rewindCodeArchiveAvailability` / `rewindConversationAvailability` / `rewindArchiveDoctorDetail` / `rewindConversationDoctorDetail`(0.82.0 CC-146:`/rewind` 代码档与对话档可用性四位窄读口 + 端判据三态 + 措辞单源,替掉壳侧「本地备份表非空」那条判据;§92)· `mcpEngineLegLivenessOf` / `mcpDetailLegNote` / `isMcpLivenessState`(0.80.0 CC-134:引擎腿活性六档读口 + 九句范围说明铸点 + 活性三词判据上公面;§87)· `projectMcpProbeCapability` / `noteEngineCapsForMcpProbe` / `observedMcpProbe` / `forgetMcpProbeReading` / `mcpProbeAvailable` / `mcpProbeDoctorDetail`(0.79.0 CC-74:`capabilities.mcpProbe` 四态读口 + 「这次调用要不要上 wire」三态 + doctor 句;§85)· `projectSessionPolicyCapability` / `observedSessionPolicy` / `sessionPolicyFaceAvailable`(0.77.0 CC-105:`capabilities.sessionPolicy` 四态读口 + 渲不渲写入口三态;§79)· `projectMemoryComplianceCapability` / `memoryComplianceVerbsAvailable` · `projectMemoryOriginCapability` / `memoryOriginVerbsAvailable`(0.76.1 CC-97a:`capabilities.memoryCompliance` / `memoryOrigin` 两只四态读口,同判据不同位、各持一张表;§77)· `projectPeerLaneCapability` / `observedPeerLane` / `peerLaneAvailable`(0.76.1 CC-102:`capabilities.peerLane` 四态读口 + 露不露跨会话入口的三态判据;非 HTTP 面)· `projectPermissionRulesWriteCapability` / `observedPermissionRulesWrite` / `permissionRulesWriteAvailable`(0.76.1 CC-102:`capabilities.permissionRulesWrite` 四态读口 —— 键缺席 = 二进制比单步写口老、藏入口;在场按本键的值判这次够不够得着;§77)· `projectDeviceExecutorManagementCapability` / `noteEngineCapsForDeviceExecutorManagement` / `observedDeviceExecutorManagement` / `forgetDeviceExecutorManagementReading` / `deviceExecutorManagementDoctorDetail` / `deviceManagementVerbsAvailable`(0.74.2 CC-69;§70)· `projectApprovalsStreamLiveCapability` / `noteEngineCapsForApprovalsStreamLive` / `observedApprovalsStreamLive` / `forgetApprovalsStreamLiveReading` / `approvalsStreamLiveDoctorDetail` / `livePendingNeedsReconcile`(0.73.3 CC-61;§65)· `projectExecutionLaneCapability` / `noteEngineCapsForExecutionLane` / `observedExecutionLane` / `forgetExecutionLaneReading` / `executionLaneDoctorDetail` / `toolsRunHereFromExecutionLane`(0.72.13 CC-54:`capabilities.executionLane` 四态读面,键缺席 ≠ 不是本机车道;§60)· `AGENT_MEMORY_WORDS`(0.72.3 CC-39①:`memory: user|project|local` 三词;`projectAgentsForWire` 把它们同映射为 `agents[].memory = { scopes:[agent:<type>], writeScope }`;§50)· `skillBaseDirOf`(0.72.1 CC-33:`SkillSpec.baseDir` 窄读 = server 顶层门同一只结构判据;`skillCommandsToSpecs` 第三参 `{ toolsRunHere }` 只在本机车道带;§48)· `projectAgentsForWire` / `awaitTaskAgentsWire` · `hooksForWire` · `mcpConfigsToSpecs` · `ultracodeForRequest` · `buildWebSearchEnv`(`resolveWebSearch` 🔧 0.83.0 退出公面,换读域 15 的 `resolveWebSearchVerdict`) · `attachmentsForRequest` · `projectEffectiveBody` · `classifySelfOrchestrationRefusal` / `stripSelfOrchestrationIntent` / `projectWorkflowsGate` / `SELF_ORCHESTRATION_RETRY_WITHOUT`(S-81,server 7.57.0:上面两条 stamp 腿的**背面** —— 半配置多租户形态下 server 把带 `selfOrchestration` / `settings.ultracode` 的提交 501 拒掉,判型/去键/caps 闸三处都是判定不是文案,详见 §13) · `engineCapsGeneration`(0.60.0,异源对抗复审 [medium] 逼出:caps 探测的**当代号**读口 —— 代际闸在 probe **返回之后**才跑,而宿主的读面 tee 是在 probe **内部**落地的 ⇒ 一次慢的旧探测能把上一台引擎的读数写回来。宿主在**起探测那一刻**抓号、tee 时交回 `{generation}`,陈旧那一发整只丢掉;不传 = 逐字节同行为,详见 §24e)| 逐功能的「引擎有没有这个能力 + 这个字段怎么上 wire」投影器,由 `buildTaskRequest` 组装。🔴 `hooksForWire()` 是 **fail-closed**:无 `SettingsPort` ⇒ 返回 `undefined`(信任门,不是取值) | 17 个 `src/*WireCaps.ts` + `src/scratchpadWireCaps.ts`、`src/hooksWireCaps.ts`、`src/goalStopHook.ts`、`src/websearch/searchProviderPresets.ts`、`src/selfOrchestrationDenial.ts`(S-81 拒绝判定层)、`src/pluginHooksWire.ts`(0.83.1 CC-174:插件 hook 判定 / 措辞 / 闭集,经 `src/hooksWireCaps.ts` 编排) |
169
+ | 9 | **能力/旋钮 wire 门族** | 208 | `AttachmentsSpecRefused`(0.90.0 CC-316:`attachments` 声明被拒时 `SEMA_ATTACHMENTS` 与请求装配两处抛的同一个具名类,`TypeError` 的子类;自有位 `token` / `why` / `allowed` / `key?`;§116)· `canonicalHookToolName` / `hookToolAliasesOf`(0.90.0 CC-298:hooks matcher 的工具别名读口,别名 → 引擎内置工具规范名,表由构建期从已装引擎的静态工具目录生成、不手抄;只含内置工具的别名;§116)· `projectPermissionsAllowGrantCapability` / `noteEngineCapsForPermissionsAllowGrant` / `observedPermissionsAllowGrant` / `forgetPermissionsAllowGrantReading` + `permissionsAllowGrantAvailable` / `permissionsAllowGrantDoctorDetail`(0.90.0 CC-302:「allow 规则按放行规则编」能力位三态读器 + 判据单源 + doctor 句;位名候定;§116)· `settingsHooksKeptLocally`(0.89.0 CC-287:hooks 设置来源条目的本端跳过口,按 matcher + 条目身份对照计划的请求体,判给引擎的不跑;§115)· `projectStorePostureCapability` / `noteEngineCapsForStorePosture` / `observedStorePosture` / `forgetStorePostureReading` + `storePersistence` / `storePostureDoctorDetail`(0.86.0 CC-250:caps `store` 存储姿态四态读口与读账、持久判据三值、doctor 一行;键缺席 = 老引擎没报,不是「不持久」;§112)· `projectCenterWiringCapability` / `noteEngineCapsForCenterWiring` / `observedCenterWiring` / `forgetCenterWiringReading` + `callerQuotaLease` / `centerWiringDoctorDetail`(0.86.0 CC-250:caps `centerWiring` 中心接线读口,缺席按同体 `store` 分 `none` / `not_reported`,调用方租约六词判决,doctor 一行;§112)· `noOsSandboxOnThisHost` / `noOsSandboxContent` / `projectExecutionLaneWiring`(0.86.0 CC-256:`executionLane.isolated` 读进车道读数后的「本机无 OS 沙箱」三值判定与那一句,operator 诊断面车道段同一份判据;§112)· `projectSealedKeyCapability` / `noteEngineCapsForSealedKey` / `observedSealedKey` / `forgetSealedKeyReading`(0.85.0 CC-243:能力面公钥发现段 `sealedKey` 的四态读口与读账,只出公钥三键、键缺席 = 不要封;§109)· `hooksWirePlan` / `pluginHookVerdictOf` / `hooksNotRunNotice` / `pluginHookExecutorLabel` / `pluginHookReasonText` / `settingsHookDropText` / `isEngineFiredHookEvent` + `ENGINE_FIRED_HOOK_EVENTS` / `PLUGIN_HOOK_DISPOSITIONS` / `PLUGIN_HOOK_REASONS` / `PLUGIN_HOOK_EXCLUSION_REASONS` / `SETTINGS_HOOK_DROP_REASONS`(0.83.1 CC-174:插件 hook 每轮计划 —— 逐条判「投给引擎 / 本客户端执行 / 如实不跑」,请求体 hooks 与本地跳过用同一份,开机「不会执行」清单与 `/hooks` 标注措辞单源,五张闭集;读口是 `SettingsPort` 的可选成员 `enabledPluginHooks`(型面,不计名数);§101)· `invalidateTaskAgentsWire`(0.82.1 CC-161:自定义代理载荷作废并重投,就绪门等最新一代,§93 S-14)· `projectFileHistoryCaptureCapability` / `noteEngineCapsForFileHistoryCapture` / `observedFileHistoryCapture` / `forgetFileHistoryCaptureReading` / `fileHistoryCaptureMode` / `fileHistoryCaptureDoctorDetail`(0.82.1 CC-163:`capabilities.fileHistoryCapture` 四态读口 + 判据 + 措辞单源;§93)· `observedRewindArchive` / `rewindCodeArchiveAvailability` / `rewindConversationAvailability` / `rewindArchiveDoctorDetail` / `rewindConversationDoctorDetail`(0.82.0 CC-146:`/rewind` 代码档与对话档可用性四位窄读口 + 端判据三态 + 措辞单源,替掉壳侧「本地备份表非空」那条判据;§92)· `mcpEngineLegLivenessOf` / `mcpDetailLegNote` / `isMcpLivenessState`(0.80.0 CC-134:引擎腿活性六档读口 + 九句范围说明铸点 + 活性三词判据上公面;§87)· `projectMcpProbeCapability` / `noteEngineCapsForMcpProbe` / `observedMcpProbe` / `forgetMcpProbeReading` / `mcpProbeAvailable` / `mcpProbeDoctorDetail`(0.79.0 CC-74:`capabilities.mcpProbe` 四态读口 + 「这次调用要不要上 wire」三态 + doctor 句;§85)· `projectSessionPolicyCapability` / `observedSessionPolicy` / `sessionPolicyFaceAvailable`(0.77.0 CC-105:`capabilities.sessionPolicy` 四态读口 + 渲不渲写入口三态;§79)· `projectMemoryComplianceCapability` / `memoryComplianceVerbsAvailable` · `projectMemoryOriginCapability` / `memoryOriginVerbsAvailable`(0.76.1 CC-97a:`capabilities.memoryCompliance` / `memoryOrigin` 两只四态读口,同判据不同位、各持一张表;§77)· `projectPeerLaneCapability` / `observedPeerLane` / `peerLaneAvailable`(0.76.1 CC-102:`capabilities.peerLane` 四态读口 + 露不露跨会话入口的三态判据;非 HTTP 面)· `projectPermissionRulesWriteCapability` / `observedPermissionRulesWrite` / `permissionRulesWriteAvailable`(0.76.1 CC-102:`capabilities.permissionRulesWrite` 四态读口 —— 键缺席 = 二进制比单步写口老、藏入口;在场按本键的值判这次够不够得着;§77)· `projectDeviceExecutorManagementCapability` / `noteEngineCapsForDeviceExecutorManagement` / `observedDeviceExecutorManagement` / `forgetDeviceExecutorManagementReading` / `deviceExecutorManagementDoctorDetail` / `deviceManagementVerbsAvailable`(0.74.2 CC-69;§70)· `projectApprovalsStreamLiveCapability` / `noteEngineCapsForApprovalsStreamLive` / `observedApprovalsStreamLive` / `forgetApprovalsStreamLiveReading` / `approvalsStreamLiveDoctorDetail` / `livePendingNeedsReconcile`(0.73.3 CC-61;§65)· `projectExecutionLaneCapability` / `noteEngineCapsForExecutionLane` / `observedExecutionLane` / `forgetExecutionLaneReading` / `executionLaneDoctorDetail` / `toolsRunHereFromExecutionLane`(0.72.13 CC-54:`capabilities.executionLane` 四态读面,键缺席 ≠ 不是本机车道;§60)· `AGENT_MEMORY_WORDS`(0.72.3 CC-39①:`memory: user|project|local` 三词;`projectAgentsForWire` 把它们同映射为 `agents[].memory = { scopes:[agent:<type>], writeScope }`;§50)· `skillBaseDirOf`(0.72.1 CC-33:`SkillSpec.baseDir` 窄读 = server 顶层门同一只结构判据;`skillCommandsToSpecs` 第三参 `{ toolsRunHere }` 只在本机车道带;§48)· `projectAgentsForWire` / `awaitTaskAgentsWire` · `hooksForWire` · `mcpConfigsToSpecs` · `ultracodeForRequest` · `buildWebSearchEnv`(`resolveWebSearch` 🔧 0.83.0 退出公面,换读域 15 的 `resolveWebSearchVerdict`) · `attachmentsForRequest` · `projectEffectiveBody` · `classifySelfOrchestrationRefusal` / `stripSelfOrchestrationIntent` / `projectWorkflowsGate` / `SELF_ORCHESTRATION_RETRY_WITHOUT`(S-81,server 7.57.0:上面两条 stamp 腿的**背面** —— 半配置多租户形态下 server 把带 `selfOrchestration` / `settings.ultracode` 的提交 501 拒掉,判型/去键/caps 闸三处都是判定不是文案,详见 §13) · `engineCapsGeneration`(0.60.0,异源对抗复审 [medium] 逼出:caps 探测的**当代号**读口 —— 代际闸在 probe **返回之后**才跑,而宿主的读面 tee 是在 probe **内部**落地的 ⇒ 一次慢的旧探测能把上一台引擎的读数写回来。宿主在**起探测那一刻**抓号、tee 时交回 `{generation}`,陈旧那一发整只丢掉;不传 = 逐字节同行为,详见 §24e)| 逐功能的「引擎有没有这个能力 + 这个字段怎么上 wire」投影器,由 `buildTaskRequest` 组装。🔴 `hooksForWire()` 是 **fail-closed**:无 `SettingsPort` ⇒ 返回 `undefined`(信任门,不是取值) | 17 个 `src/*WireCaps.ts` + `src/scratchpadWireCaps.ts`、`src/hooksWireCaps.ts`、`src/goalStopHook.ts`、`src/websearch/searchProviderPresets.ts`、`src/selfOrchestrationDenial.ts`(S-81 拒绝判定层)、`src/pluginHooksWire.ts`(0.83.1 CC-174:插件 hook 判定 / 措辞 / 闭集,经 `src/hooksWireCaps.ts` 编排)、`src/hookToolAliases.ts`(0.90.0 CC-298:hooks matcher 工具别名读口;表是生成物 `src/generated/engineFactTables.ts` 的 `CORE_HOOK_TOOL_ALIASES`) |
170
170
  | 10 | **headless / 部署旋钮 wire** | 62 | `isDetachDurableOff400`(0.84.1 CC-219:detach durable-off 400 纯判定,不带进程门,只认锚句不认码,一律不抛;§108)· `lastFlagValue`(0.74.3 CC-80:argv 末次旗值扫描原语上公面;§71)· `probeEngineDetachSupport` / `detachSupportDisclosure`(0.72.13 CC-53:detach 版本闸三态读口 + 披露句;§60)· `parseSandboxArgv` / `sandboxRequestFields` · `parseLimitsArgv` / `limitsForPrint` · `resolveHeadlessFinalVerify` · `resolveHeadlessPermissionMode` · `resolveHeadlessInteractiveTools` · `armDetachCancel` + `detachCancelArm` + `isDetachArmed` · `withHeadlessR1Reconnect` | `-p`/headless 车道的 env+argv 旋钮。🔴 `detachWire` 是**拆**的补偿:判定与 cancel-arm 台账在库,信号路径的裸 fetch 留宿主(`detachCancelArm()` 是取件口) | `src/sandboxWire.ts`、`scenarioWire.ts`、`finalVerifyWire.ts`、`limitsWire.ts`、`interactiveToolsWire.ts`、`headlessPermissionModeWire.ts`、`headlessReconnectWire.ts`、`detachWire.ts` |
171
171
  | 11 | **模型目录与预算** | 72 | `modelIdentityResolvability` / `modelIdentityDetail` / `modelSetupDecision` / `modelSetupNotice` / `observedEngineAnswer`(0.82.1 CC-151:「引擎启动时拿不拿得到模型名」三态判据 + 向导两位决策 + 措辞单源,§93 S-11)· `routePairingVerdict`(0.71.3 CC-06:`ModelInfo.routePairing` ok / broken / unknown 三态读口,§45)· `resolveModelCatalog` · `loadCatalogWithSources` · `PROVIDER_PRESETS` / `MODEL_FAMILIES` · `defaultMaxTokensFor` · `getLiveModelCatalog` / `setLiveModelCatalogRefresher` · `providerAuthMethods` / `beginDeviceCodeAuth` · `providerCatalogRows` / `providerCatalogRowDetail` / `providerPresetById`(#244 F4 族D A-028.17:46 家表的规范折表层 —— 全表不重排、诚实缺席「model id typed in」,cli 目录/web 向导同一份折表)· `TIER_ORDER` / `CC_TIER_ALIASES` / `isTier` / `resolveTierBinding`(A-028.18:档位词表+校验+fail-open 降档派生单源;settings 存储归宿主)· `resolveEntryVision` / `computeDeleteBlockers` / `computeDeleteWarnings`(0.38.0 #318 件③ 上收:Model Hub 供给面的三端公共判定 —— vision 生效值+来源三态、删除断链核(拒删+指路)、删除降级后果(照删但必说)。**零 IO**,读盘那半场留各端;`doc === null` 的两义在调用方分流) | 三层 provider 目录解析(线上 URL → 包内预设 → 用户覆盖)+ per-model `maxTokens` 封顶。线上腿需注入 `CatalogFetchJson`,缺席 ⇒ 整条不启用(`online.reason='no-fetch-port'`);缓存落盘经 `CatalogCachePort` | `src/model/{catalog,catalogLoader,providerAuth,providerPresets,providerCatalog,tierVocabulary}.ts`、`src/liveModelCatalog.ts`、`src/modelBudgetRule.ts`、`src/sessionModelLatch.ts`、`src/effortWire.ts` |
172
- | 12 | **workflow 与后台工作视图** | 37 | `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`(0.86.0 CC-252:门前只读路「凭据没被接受」那一句,workflow 监视器 `unauthorized` 态与后台视图 fleet 源 `unauthorized` 共用;§112)· `evaluateWorkflowSize` / `readWorkflowSizeWarningEnvCaps` / `workflowSizeWarningTextForWidth` + `WORKFLOW_SIZE_WARNING_AGENT_CAP` / `_TOKEN_CAP` / `_TOKENS_PER_AGENT` / `_ENV_NAMES` / `_TEXT_LONG` / `_TEXT_SHORT` / `_TEXT_MIN` / `WORKFLOW_SIZE_GUIDELINE_AGENT_CAPS`(0.73.5 CC-58:规模告警判定三态;§67)· `projectLeaderConflict` / `leaderConflictDetail` + `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX`(0.72.10 CC-41:leader run 终局 `needs_human` + `result.conflict` 三形读面 none / unreadable / conflict,缺席不可分、filesTruncated 只认 true、salvaged 原样给落盘口;§57)· `projectWorkflowRun` · `readWorkflowResumeAdmissionIncomplete`(0.68.3 CC-05:core 7.18.0 `resumeAdmissionIncomplete` 在场 = 不是 resume 基,与 `readWorkflowParks` 同一条投影义务)· `createLiveWorkflowSource` · `ensureWorkflowActivityLedger` · `readWorkflowActivityLedger` · `stopWorkflowActivityLedger` · `resetWorkflowActivityLedgers` · `createBackgroundView` · `projectBackgroundView` · `recordWorkflowAgentTaskId` · `agentDisplayStatus` | 活过一个 turn 的长任务读面:workflow run + 跨 session 后台任务归一表(`assistant.tasks` 与 fleet SSE **两源独立降级**) | `src/workflow.ts`、`src/workflowClient.ts`、`src/workflowMonitor.ts`、`src/agentSession/backgroundView.ts`(+ 纯类型 `src/agentSession/contract.ts`) |
172
+ | 12 | **workflow 与后台工作视图** | 38 | `isReadCredentialRefusal`(0.89.0 CC-289:门前只读路「凭据没被接受」判官上根入口,与 workflow 监视器 / 后台视图 fleet 源同一只函数;§115)· `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`(0.86.0 CC-252:门前只读路「凭据没被接受」那一句,workflow 监视器 `unauthorized` 态与后台视图 fleet 源 `unauthorized` 共用;§112)· `evaluateWorkflowSize` / `readWorkflowSizeWarningEnvCaps` / `workflowSizeWarningTextForWidth` + `WORKFLOW_SIZE_WARNING_AGENT_CAP` / `_TOKEN_CAP` / `_TOKENS_PER_AGENT` / `_ENV_NAMES` / `_TEXT_LONG` / `_TEXT_SHORT` / `_TEXT_MIN` / `WORKFLOW_SIZE_GUIDELINE_AGENT_CAPS`(0.73.5 CC-58:规模告警判定三态;§67)· `projectLeaderConflict` / `leaderConflictDetail` + `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX`(0.72.10 CC-41:leader run 终局 `needs_human` + `result.conflict` 三形读面 none / unreadable / conflict,缺席不可分、filesTruncated 只认 true、salvaged 原样给落盘口;§57)· `projectWorkflowRun` · `readWorkflowResumeAdmissionIncomplete`(0.68.3 CC-05:core 7.18.0 `resumeAdmissionIncomplete` 在场 = 不是 resume 基,与 `readWorkflowParks` 同一条投影义务)· `createLiveWorkflowSource` · `ensureWorkflowActivityLedger` · `readWorkflowActivityLedger` · `stopWorkflowActivityLedger` · `resetWorkflowActivityLedgers` · `createBackgroundView` · `projectBackgroundView` · `recordWorkflowAgentTaskId` · `agentDisplayStatus` | 活过一个 turn 的长任务读面:workflow run + 跨 session 后台任务归一表(`assistant.tasks` 与 fleet SSE **两源独立降级**) | `src/workflow.ts`、`src/workflowClient.ts`、`src/workflowMonitor.ts`、`src/agentSession/backgroundView.ts`(+ 纯类型 `src/agentSession/contract.ts`) |
173
173
  | 13 | **座位 IPC 契约** | 34 | `LOCAL_SESSIONS_SPEC` · `SEAT_METHOD_NAMES` · `SEAT_EVENT_TYPES` · `isLocalSessionEvent` · `isToolPermissionRequest` · `toolPermissionRequestId` · `SEAT_VALIDATOR_KEY_COVERAGE` · `SEAT_SEND_MESSAGE_KEY_ORIGINS`(0.62.0:座位载荷**逐键出身**登记 —— 每个位要么写明转投哪个引擎请求位、要么写明为什么不上 wire;常驻门对**装在盘上的** sdk 型面逐名核,详见 §26③)| desktop↔web 座位 IPC 契约的**单一真源**(此前两边各一份、名字零重合 ⇒ 编译器永远不会告诉你它们漂了)。🔴 加 verb 忘了加 `LOCAL_SESSIONS_SPEC` **不报错**:preload 不注册 channel、渲染端读到 `undefined` | `src/seatContract.ts`(**零 import**,纯类型 + 常量 + 纯谓词)。🔴 **证据等级标注(0.42.0,test [5087] 的「语料**种类**缺口」/ cli [5088] 认领件)**:该文件里所有以「CC 如何如何」为形的断言(`212 methods` / `854-channel census` / 方法名逐字保留 / `fQe` 逐字段对照 / 一切 `.vite/build/index.chunk-*.js` 坐标)**证据等级 = 桌面 unpack,本地语料库不可复验** —— 本仓手边可复验的参照语料**只覆盖终端 CLI 形态**的静态产物,拿它去 grep 桌面壳里的符号只会零命中,而零命中在这里**既不证真也不证伪**。复核这些断言**不得**拿本仓语料当反证 |
174
174
  | 14 | **宿主端口与会话槽** | 41 | `installHost` · `installHostFor` · `installCoreValuePorts` + 十读口 + 三存在性口(0.69.0 CC-07:core 值级面端口注入,Node 宿主装配根装、浏览器 lane 恒缺席)· `hostPortMisses(For)` · `DEFAULT_SESSION_KEY` · `hostEnv` · `unrefTimer` · `parseLocaleTag` / `pickUiLanguage`(#244 F4 族D A-028.20:locale tag 手术单源 + UI 语言判定;与 `resolveRegionHint` 双出口成文 —— 语言偏好域 en/zh ≠ 地址可达域 cn/intl/unknown,`zh-Hant` 前者 zh 后者 intl 是设计)· `engineNamespaceKeyFor` / `mergeSessionMapRecord` / `mergeEngineEntry`(A-028.12:会话 id 映射单一键形 + merge 判定;存储经 `SessionMapStorePort` 归端 —— cli 文件锁/原子写,web localStorage)| 进程/端级装配层(settings/fs/queue/timers/session/log/probe),与 per-turn 的 `AdapterContext` **分层**。头注的判定规则:**这个能力每 turn 都会变吗?** 会 ⇒ `ctx`;不会 ⇒ `installHost` | `src/host.ts`、`src/hostEnv.ts`、`src/sessionSlot.ts`、`src/unrefTimer.ts`、`src/env/{localeGeo,localeTag,uiLanguage}.ts`、`src/sessionMap.ts` |
175
175
  | 15 | **控制面与传输** | 216 | `eraseSessionMemory` / `sessionMemoryEraseOutcome` + `SESSION_MEMORY_ERASE_REFUSAL_REASONS` / `SESSION_MEMORY_ERASE_UNCONFIRMED_WHYS` / `SESSION_MEMORY_ERASE_RETRIES`(0.88.0 CC-264:会话所有者自助记忆抹除 —— 按 wire 直发恰一发,四档判定 + 单源句 + 七值重发姿势;§114)· `classifyRegistryConflict` / `isScopeGoneError`(0.88.0 CC-280:registry 同一个 409 的两义判别,与新版 SDK 同名同答;§114)· `createPromptDeliveryLedger` / `promptKnownUndelivered` / `withoutUndeliveredPrompts`(0.88.0 CC-271:提交事实账本与两只按消息行的读口,判据 = 引擎为这次提交建了 run;§114)· `printInitToolFaceSupersetKeys`(0.86.0 CC-266:`-p` 首帧 `system/init` 两只来源超集键 `_sema_tools_source` / `_sema_tools_fallback_reason` 的铸口,`withPrintInitFrame` 已铺在宿主那只首帧对象上;自建首帧的宿主展开它的结果;§112)· `FLEET_LEASE_UNAVAILABLE` / `fleetLeaseUnavailableFromError` / `fleetLeaseUnavailableContent`(0.86.0 CC-250:计费入口 503 `fleet.lease_unavailable` 按码读口与一句话,`classifyTurnWireError` 的 `http` 判决同批带 `leaseUnavailable`;§112)· `hostPostureRefusalFromError` / `hostPostureRefusalContent` · `inheritEnvRefusalFromError` / `inheritEnvRefusalContent` · `settingsPermissionBucketRefusalFromError` / `settingsPermissionBucketRefusalContent` · `toolDeclarationRefusalFromError` / `toolDeclarationRefusalContent` · `bodyShapeRefusalFromError` / `bodyShapeRefusalTouchesSettings`(0.86.0 CC-257 / CC-262 / CC-263 / CC-265:新提交两只拒、权限规则表超帽坏项、工具声明族「不是暂时故障」、请求体键形拒两张键表 —— 五对按码读口与单源句;§112)· `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 | **引擎词汇表与包自检** | 143 | `readModelUnreachable`(0.88.0 CC-270 ①:服务端自铸通告 `server.model_unreachable` 的事实读器,受众 user;§114)· `readToolTurnRepaired`(0.88.0 CC-272:`context.tool_turn_repaired` 的事实读器,受众运维面;§114)· `readRuleStoreUnavailable` / `readClassifierUnavailable` / `readPermissionModeUnavailable` / `readAskReleasedByMode` / `readReadDenyUnapplied` / `readLegacyModeSeedMigrated` + `PERMISSION_MODE_FOLD_REASONS`(0.86.0 CC-249:引擎 7.34.0 新铸六条通告的事实读器,挂进按码派发口;分支键按闭集读、描述性词原样透传;§112)· `RULES_LEGACY_TOOL_NAME` / `isRulesRefusalCode`(0.86.0 CC-251:会话规则写口拒名码常量与 `rules.` 族前缀谓词,开集;§112)· `isCorruptSessionError` / `isCorruptSessionResult` / `isCorruptSessionRunRow` / `isCorruptSessionCode` / `corruptSessionContent` / `CORRUPT_SESSION_ERROR_CODE`(0.85.0 CC-217:会话存档读不出在 HTTP 拒体 / 终局因由 / run 行三处载体同一判定 + 单源人话;§109)· `readSessionRecordsSkipped` / `sessionRecordsSkippedNote`(0.85.0 CC-217:服务端自铸通告 `session.records_skipped` 的事实读器,计数读不出答 `'unknown'` 不折 0;§109)· `sessionDeleteConflictFromError` / `sessionDeleteConflictContent` / `CONFLICT_SESSION_CHILDREN_ALIVE`(0.85.0 CC-243:删会话 409 按码分三形与三句;§109)· `STATUS_DERIVED_COARSE_CODES` / `isStatusDerivedCoarseCode`(0.85.0 CC-243:服务端分发器按状态补的粗码识别表与判定,以铸点为准;§109)· `SERVER_NOTICE_AUDIENCE` / `readInstructionsSourceChanged`(0.84.1 CC-213:服务端自铸通告码 → 受众两行,在册判据与受众读口同认;`instructions.source_changed` 的事实读器;§108)· `readEngineNoticeFacts` / `ENGINE_NOTICE_FACT_READERS`(0.84.1 CC-214:按码派发的 typed 通告事实口 + 派发表,七只读器八个码,只有受众 `user` 的六码属用户面;§108)· `PARKED_RESUME_STARTUP_FAILED` / `parkedResumeStartupFromError` / `parkedResumeStartupContent`(0.84.1 CC-225:停泊审批决断 422 的码常量、读口与按成因分说的一句话,同一个决定不重发、deny 照开;§108)· `CONFIG_LEGACY_TOOL_NAME` / `legacyToolNameFailureNoteOf`(0.84.1 CC-229:拒启码常量与启动失败出路句,只按码判,列四处可能的位置;§108)· `readReadRootGrantNotice`(0.84.0 CC-185:读目录授权两枚结论通告 `approval.read_root_granted` / `approval.read_root_grant_rejected` 的事实读口,按 `toolCallId` 对卡,没有 granted 通告 = 什么都没加;§107)· `APPROVAL_MANDATE_WORDS` / `isApprovalMandateWord` / `approvalMandateDetail`(0.83.2 CC-195:强制位站在哪一个词上的六词闭集,与引擎型面编译期双向钉;成员判据;每词一句说明;§102)· `resumePolicyBlockFromError` / `resumePolicyBlockContent`(0.82.1 CC-154:续跑折叠码 `resume_blocked_by_policy` 自己的读数与措辞,原码三态;§93)· `corruptStoredRowWhere` / `corruptStoredRowContent`(0.82.0 CC-156:续跑上下文坏档时引擎点名的那一行的读口与措辞单源;§92)· `effectiveWireErrorCode` / `RESUME_POLICY_FOLD_CODE`(0.82.0 CC-154:政策折叠码与「按原码判」的取码单源;§92)· `SETTLEMENT_KIND_WORDS` / `ccToolDenialKindForSettledBy` / `ccToolDenialKindForToolEnd`(0.80.0 CC-133:结算词十三词镜像 + 「谁结算的」→ CC 分类词单铸映射 + `tool_end` 帧合流读口;§87)· `CC_TOOL_DENIAL_KINDS` / `isCcToolDenialKind` / `isCcToolDenialKindADenial` / `isGateDeniedByWord`(0.79.0 CC-125:上游转录记录键 `toolDenialKind` 七词镜像 + 两只谓词 + `DeniedBy` 十词成员谓词;§85)· `mandatedApprovalDetail`(0.79.0 CC-110:「这张卡清不掉」那一句的唯一铸点;§85)· `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH`(CC-96:记忆面两个**构造期**拒码,进既有 `config.` 族识别表;400 拼写 / 409 冲突,分诊归引擎)· `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`(0.72.12 CC-50:通知自己的四终态词,含 `cancelled`;与 run 级终态表两张表;§59)· `ENGINE_NOTICE_CODES` 71(0.83.0 CC-186:引擎 7.30.0 / 7.31.0 +2 `config.context_settings_swapped` / `config.secret_env_scrubbed`,均 operator;§100。历史:0.82.1 69、0.79.0 68、0.72.11 CC-49 67 —— core 7.23.0 +1 `config.write_protection_unresolved`,operator,兄弟码 `target_view_absent` 之后;§58)· `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`(0.72.7 CC-42:通告 `mcp.server_redialed` 事实读器,outcome 三词闭集、added/removed 计数;§54)· `RESUME_CONTEXT_UNAVAILABLE`(0.72.1 CC-33;不进两个 resume 闭集:不可等、也不是换参数)· `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` · `resumeReopenFromError` / `resumeReopenContent`(0.71.3 CC-06:resume reopen 族三码闭集 + 读口 + 三句,§45)· `readSkillsListingTruncated`(0.70.0 CC-04:`skills.listing_truncated` 事实读器,§39)· `CONFIG_REFUSAL_CODES` / `isConfigRefusalCode` · `DECIDE_WORKFLOW_LANE_CODES`(+ 三个具名码;`/decide` workflow 车道,三条出路刻意不合并,详见 §30h)· `STOP_CONFLICT_CODES` · `isInterruptedToolEndCode` · `isRewindFamilyCode` · `CLIENT_VERBS` · `compensationSplitViolations` · `DELEGATION_CAP_CODES` / `isDelegationCapCode` / `DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP`(0.38.0 #318 件④:core 5.48.0 design/323 委派席位到限**两码,处置不对称禁合并** —— 并发帽=**可等**(兄弟结束即有位)/ 会话累计帽=**等也没用**(这条会话的配额用尽))· `CONFIG_DELEGATION_ENTRY_CAPS`(同批入 `CONFIG_REFUSAL_CODES` 识别表)· `delegationCapDispositionOf` / `MCP_SERVER_REVOKED`(0.39.0 载体到货消费件:core 5.50.0 补 `{ error: code, code }` 孪生拼法后两码真上 `tool_end.errorCode`,0.38.0「先立词不落消费分支」的已知局限自此解除;处置轴 `wait-for-slot` / `reuse-existing-or-await-reap` 机器可读(累计帽=retained-window 帐,行回收配额即回,处置=SendMessage 复用,**非**「换会话/永久耗尽」——0.38.0 段该句系勘误),未知 `delegation.*` 码 ⇒ `undefined`;`mcp.server_revoked` = 操作员 mid-session 吊销 server 后的工具面本地闸(被吊销的 server **名**今天不过 wire 境:detail.server 是进程内位,抬升腿只 lift code——归因渲染候 core 补 typed detail,已点名);载体门 = engine-vocab G3 腿锚 core dist 铸点)· `CAPABILITY_SELF_ORCHESTRATION_REQUIRED`(S-81,server 7.57.0:提交面的 selfOrchestration 准入拒绝码。🔴 **复用码** —— 与其它 `capability.*` 501 同体形而处置不同,消费点必须按**恰等**判、绝不放宽成前缀判;判型与「去键重发一次」归 `src/selfOrchestrationDenial.ts`,详见 §13) · `GATE_PARKED_ERROR_CODE`(0.60.0:「门把这次调用 park 了」的机读码单源 —— `frameRouter` 的连坐/中断判据与 `gateOutcome.isGateParkedToolEnd` 读同一个常量;真机黑盒直证 park 短路帧上**没有 `gate`**,这个码是那一形唯一的信号,详见 §24c)| 三端分臂共用的**去字面化** `errorCode` 词表(病根正是三端各抄一份字面);编译期 verb 闭合门;搬迁补偿登记表 | `src/engineErrorCodes.ts`(计数以 `scripts/public-export-baseline.json` 为准,别手抄;A-028.11/.13 补 `DRAINING_ERROR_CODE`/`SCENARIO_NOT_ALLOWED_ERROR_CODE`/`RESUME_AT_ERROR_CODE_PREFIX`;#318 件④ 补 `delegation.*` 族四位 + `config.delegation_entry_caps`;0.39.0 补三新码消费件三位);S-81 补 `capability.self_orchestration_required` 一位;L-102 补 `resume.*` 时间性拒绝二码 + 闭集 `RESUME_RETRY_LATER_CODES` 三位)、`src/classifierVerdictWire.ts`、`src/compensations.ts`、`src/clientSlice.ts`;**0.67.0 补锚**(这三件的导出一直计在本域,而本表此前没有它们的锚行 —— 如实补上,不是搬家):`src/gateVocabulary.ts`(`GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail` + 🆕 `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`,详见 §32d)、`src/autoModeUnavailable.ts`(`AUTO_MODE_UNAVAILABLE_CAUSES` + 🆕 `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`;🔴 同批**删**`classifierUnavailableOf`/`classifierUnavailableDetail`,详见 §32b)、`src/classifierStatus.ts`(`CLASSIFIER_STATUS_STATES`/`classifierStatusOf`/`classifierStatusDetail`)|
176
+ | 16 | **引擎词汇表与包自检** | 147 | `SUPPORT_FLOOR` / `supportFloorOf` / `engineVersionTier`(0.90.0 CC-299:本包机读支持底线声明 —— 服务端 / 引擎 / sdk 三项「仍然支持的最老一版」,冻结对象 + 组件读口;引擎(服务端)版本串三态判定,只认纯 `x.y.z`,门槛 = 声明的服务端底线、调用方只能抬不能降;§116)· `readToolTurnIncomplete`(0.89.0 CC-282:`task.tool_turn_incomplete` 的事实读器,受众 user;§115)· `readUserInputUndrained` / `userInputUndrainedNotice`(0.89.0 CC-282:`task.user_steer_undrained` / `task.user_followup_undrained` 的一只读器两臂与四句用户面话;§115)· `readModelUnreachable`(0.88.0 CC-270 ①:服务端自铸通告 `server.model_unreachable` 的事实读器,受众 user;§114)· `readToolTurnRepaired`(0.88.0 CC-272:`context.tool_turn_repaired` 的事实读器,受众运维面;§114)· `readRuleStoreUnavailable` / `readClassifierUnavailable` / `readPermissionModeUnavailable` / `readAskReleasedByMode` / `readReadDenyUnapplied` / `readLegacyModeSeedMigrated`〔🔧 0.90.0 退出公面,见 §2z〕 + `PERMISSION_MODE_FOLD_REASONS`(0.86.0 CC-249:引擎 7.34.0 新铸六条通告的事实读器,挂进按码派发口;分支键按闭集读、描述性词原样透传;§112)· `RULES_LEGACY_TOOL_NAME` / `isRulesRefusalCode`(0.86.0 CC-251:会话规则写口拒名码常量与 `rules.` 族前缀谓词,开集;§112)· `isCorruptSessionError` / `isCorruptSessionResult` / `isCorruptSessionRunRow` / `isCorruptSessionCode` / `corruptSessionContent` / `CORRUPT_SESSION_ERROR_CODE`(0.85.0 CC-217:会话存档读不出在 HTTP 拒体 / 终局因由 / run 行三处载体同一判定 + 单源人话;§109)· `readSessionRecordsSkipped` / `sessionRecordsSkippedNote`(0.85.0 CC-217:服务端自铸通告 `session.records_skipped` 的事实读器,计数读不出答 `'unknown'` 不折 0;§109)· `sessionDeleteConflictFromError` / `sessionDeleteConflictContent` / `CONFLICT_SESSION_CHILDREN_ALIVE`(0.85.0 CC-243:删会话 409 按码分三形与三句;§109)· `STATUS_DERIVED_COARSE_CODES` / `isStatusDerivedCoarseCode`(0.85.0 CC-243:服务端分发器按状态补的粗码识别表与判定,以铸点为准;§109)· `readInstructionsSourceChanged`(0.84.1 CC-213:`instructions.source_changed` 的事实读器;服务端自铸码的受众手写表 `SERVER_NOTICE_AUDIENCE` 已于 0.89.0 退出公面,逐名见 §2z,受众与在册改读 `noticeAudienceOf` / `engineNoticeInCatalog`;§108 / §115)· `readEngineNoticeFacts` / `ENGINE_NOTICE_FACT_READERS`(0.84.1 CC-214:按码派发的 typed 通告事实口 + 派发表,七只读器八个码,只有受众 `user` 的六码属用户面;§108)· `PARKED_RESUME_STARTUP_FAILED` / `parkedResumeStartupFromError` / `parkedResumeStartupContent`(0.84.1 CC-225:停泊审批决断 422 的码常量、读口与按成因分说的一句话,同一个决定不重发、deny 照开;§108)· `CONFIG_LEGACY_TOOL_NAME` / `legacyToolNameFailureNoteOf`(0.84.1 CC-229:拒启码常量与启动失败出路句,只按码判,列四处可能的位置;§108)· `readReadRootGrantNotice`(0.84.0 CC-185:读目录授权两枚结论通告 `approval.read_root_granted` / `approval.read_root_grant_rejected` 的事实读口,按 `toolCallId` 对卡,没有 granted 通告 = 什么都没加;§107)· `APPROVAL_MANDATE_WORDS` / `isApprovalMandateWord` / `approvalMandateDetail`(0.83.2 CC-195:强制位站在哪一个词上的六词闭集,与引擎型面编译期双向钉;成员判据;每词一句说明;§102)· `resumePolicyBlockFromError` / `resumePolicyBlockContent`(0.82.1 CC-154:续跑折叠码 `resume_blocked_by_policy` 自己的读数与措辞,原码三态;§93)· `corruptStoredRowWhere` / `corruptStoredRowContent`(0.82.0 CC-156:续跑上下文坏档时引擎点名的那一行的读口与措辞单源;§92)· `effectiveWireErrorCode` / `RESUME_POLICY_FOLD_CODE`(0.82.0 CC-154:政策折叠码与「按原码判」的取码单源;§92)· `SETTLEMENT_KIND_WORDS` / `ccToolDenialKindForSettledBy` / `ccToolDenialKindForToolEnd`(0.80.0 CC-133:结算词十三词镜像 + 「谁结算的」→ CC 分类词单铸映射 + `tool_end` 帧合流读口;§87)· `CC_TOOL_DENIAL_KINDS` / `isCcToolDenialKind` / `isCcToolDenialKindADenial` / `isGateDeniedByWord`(0.79.0 CC-125:上游转录记录键 `toolDenialKind` 七词镜像 + 两只谓词 + `DeniedBy` 十词成员谓词;§85)· `mandatedApprovalDetail`(0.79.0 CC-110:「这张卡清不掉」那一句的唯一铸点;§85)· `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH`(CC-96:记忆面两个**构造期**拒码,进既有 `config.` 族识别表;400 拼写 / 409 冲突,分诊归引擎)· `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`(0.72.12 CC-50:通知自己的四终态词,含 `cancelled`;与 run 级终态表两张表;§59)· `ENGINE_NOTICE_CODES` 71(0.83.0 CC-186:引擎 7.30.0 / 7.31.0 +2 `config.context_settings_swapped` / `config.secret_env_scrubbed`,均 operator;§100。历史:0.82.1 69、0.79.0 68、0.72.11 CC-49 67 —— core 7.23.0 +1 `config.write_protection_unresolved`,operator,兄弟码 `target_view_absent` 之后;§58)· `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`(0.72.7 CC-42:通告 `mcp.server_redialed` 事实读器,outcome 三词闭集、added/removed 计数;§54)· `RESUME_CONTEXT_UNAVAILABLE`(0.72.1 CC-33;不进两个 resume 闭集:不可等、也不是换参数)· `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` · `resumeReopenFromError` / `resumeReopenContent`(0.71.3 CC-06:resume reopen 族三码闭集 + 读口 + 三句,§45)· `readSkillsListingTruncated`(0.70.0 CC-04:`skills.listing_truncated` 事实读器,§39)· `CONFIG_REFUSAL_CODES` / `isConfigRefusalCode` · `DECIDE_WORKFLOW_LANE_CODES`(+ 三个具名码;`/decide` workflow 车道,三条出路刻意不合并,详见 §30h)· `STOP_CONFLICT_CODES` · `isInterruptedToolEndCode` · `isRewindFamilyCode` · `CLIENT_VERBS` · `compensationSplitViolations` · `DELEGATION_CAP_CODES` / `isDelegationCapCode` / `DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP`(0.38.0 #318 件④:core 5.48.0 design/323 委派席位到限**两码,处置不对称禁合并** —— 并发帽=**可等**(兄弟结束即有位)/ 会话累计帽=**等也没用**(这条会话的配额用尽))· `CONFIG_DELEGATION_ENTRY_CAPS`(同批入 `CONFIG_REFUSAL_CODES` 识别表)· `delegationCapDispositionOf` / `MCP_SERVER_REVOKED`(0.39.0 载体到货消费件:core 5.50.0 补 `{ error: code, code }` 孪生拼法后两码真上 `tool_end.errorCode`,0.38.0「先立词不落消费分支」的已知局限自此解除;处置轴 `wait-for-slot` / `reuse-existing-or-await-reap` 机器可读(累计帽=retained-window 帐,行回收配额即回,处置=SendMessage 复用,**非**「换会话/永久耗尽」——0.38.0 段该句系勘误),未知 `delegation.*` 码 ⇒ `undefined`;`mcp.server_revoked` = 操作员 mid-session 吊销 server 后的工具面本地闸(被吊销的 server **名**今天不过 wire 境:detail.server 是进程内位,抬升腿只 lift code——归因渲染候 core 补 typed detail,已点名);载体门 = engine-vocab G3 腿锚 core dist 铸点)· `CAPABILITY_SELF_ORCHESTRATION_REQUIRED`(S-81,server 7.57.0:提交面的 selfOrchestration 准入拒绝码。🔴 **复用码** —— 与其它 `capability.*` 501 同体形而处置不同,消费点必须按**恰等**判、绝不放宽成前缀判;判型与「去键重发一次」归 `src/selfOrchestrationDenial.ts`,详见 §13) · `GATE_PARKED_ERROR_CODE`(0.60.0:「门把这次调用 park 了」的机读码单源 —— `frameRouter` 的连坐/中断判据与 `gateOutcome.isGateParkedToolEnd` 读同一个常量;真机黑盒直证 park 短路帧上**没有 `gate`**,这个码是那一形唯一的信号,详见 §24c)| 三端分臂共用的**去字面化** `errorCode` 词表(病根正是三端各抄一份字面);编译期 verb 闭合门;搬迁补偿登记表 | `src/engineErrorCodes.ts`(计数以 `scripts/public-export-baseline.json` 为准,别手抄;A-028.11/.13 补 `DRAINING_ERROR_CODE`/`SCENARIO_NOT_ALLOWED_ERROR_CODE`/`RESUME_AT_ERROR_CODE_PREFIX`;#318 件④ 补 `delegation.*` 族四位 + `config.delegation_entry_caps`;0.39.0 补三新码消费件三位);S-81 补 `capability.self_orchestration_required` 一位;L-102 补 `resume.*` 时间性拒绝二码 + 闭集 `RESUME_RETRY_LATER_CODES` 三位)、`src/classifierVerdictWire.ts`、`src/compensations.ts`、`src/clientSlice.ts`;**0.67.0 补锚**(这三件的导出一直计在本域,而本表此前没有它们的锚行 —— 如实补上,不是搬家):`src/gateVocabulary.ts`(`GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail` + 🆕 `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`,详见 §32d)、`src/autoModeUnavailable.ts`(`AUTO_MODE_UNAVAILABLE_CAUSES` + 🆕 `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`;🔴 同批**删**`classifierUnavailableOf`/`classifierUnavailableDetail`,详见 §32b)、`src/classifierStatus.ts`(`CLASSIFIER_STATUS_STATES`/`classifierStatusOf`/`classifierStatusDetail`)|
177
177
 
178
178
  🔴 **`engineErrorCodes` 的开集纪律**(该文件头注逐字):这些 `ReadonlySet` / 前缀谓词一律是**识别表**,
179
179
  回答的是「我认不认得这个码」,**绝不是**「合法码只有这些」。消费点 `switch` **必须留 `default`**,
@@ -185,6 +185,8 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
185
185
 
186
186
  | 退役 | 名 | 退出版本 | 改用什么 |
187
187
  |---|---|---|---|
188
+ | 🔧 退出公面 | `readLegacyModeSeedMigrated`(+ 具名型 `LegacyModeSeedMigratedFactsView`) | 0.90.0 | 无(引擎 7.39.0 删掉了那条一次性迁移,通告码 `resume.legacy_mode_seed_migrated` 退出码册 86 → 85;老引擎仍可能发这一码 —— 按册外码处置:`readEngineNoticeFacts` 答 `undefined`、`engineNoticeInCatalog` 答 `false`,端走册外兜底分流、渲引擎给的 `message`;型面 BREAKING:按名 import 它们的端、对 `EngineNoticeFactsCode` 穷举的 `switch` 里写了这一码的分支,编译期红;四端源码零读点,见 §116 EN-1) |
189
+ | 🔧 退出公面 | `SERVER_NOTICE_AUDIENCE` | 0.89.0 | `noticeAudienceOf(code)` / `engineNoticeInCatalog(code)`(引擎 7.38.0 起码册自带铸方表,服务端自铸四码入册;四码答案逐码同 0.88.0:`instructions.source_changed` / `session.records_skipped` / `server.model_unreachable` ⇒ `user`,`memory.layer_locked_legacy` ⇒ `operator`,全部在册;型面 BREAKING,见 §115 NM-3) |
188
190
  | 🔧 退出公面 | `APPROVER_POSTURE_BYPASS` | 0.86.0 | 无(请求键 `approverPosture` 退役:引擎按名拒收、服务端 7.106.0 起整条 400;本包构造期按名拒,见 §112 A-1–A-3。**不要**改发 `permissionMode` —— 这一键从不授权任何东西) |
189
191
  | 🔧 退出公面 | `approverPostureDeclarationField` | 0.86.0 | 无(同上;删掉拼进请求的那一段,别换成别的请求词) |
190
192
  | 🔧 退出公面 | `DENIAL_LIMIT_KINDS` | 0.85.0 | `@sema-agent/sdk` 根入口的同名运行期值(同一个数组);型面 `DenialLimitKind` 在本包照旧导出 |
@@ -4682,7 +4684,7 @@ an argument」。audience 答另一问:这条事实**说给谁听**。
4682
4684
  **签名**
4683
4685
 
4684
4686
  ```ts
4685
- ENGINE_NOTICE_CODES: readonly string[] // 81 码,顺序同源(core 7.37.1 +1:context.tool_turn_repaired;0.88.0。此前 core 7.36.0 +1:route.tool_call_id_folded;0.86.0。此前 core 7.34.0 +6:config.permission_mode_unavailable / permission.ask_released_by_mode / permission.read_deny_unapplied / permission.rule_store_unavailable / resume.legacy_mode_seed_migrated / classifier.unavailable;0.86.0。此前 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)
4687
+ ENGINE_NOTICE_CODES: readonly string[] // 85 码,顺序同源(core 7.39.0 −1:resume.legacy_mode_seed_migrated〔那条一次性迁移删了,通告码退出码册;老引擎仍可能发它,按册外码处置〕;0.90.0。此前 core 7.38.0 +5:task.tool_turn_incomplete / instructions.source_changed / session.records_skipped / memory.layer_locked_legacy / server.model_unreachable;0.89.0。此前 core 7.37.1 +1:context.tool_turn_repaired;0.88.0。此前 core 7.36.0 +1:route.tool_call_id_folded;0.86.0。此前 core 7.34.0 +6:config.permission_mode_unavailable / permission.ask_released_by_mode / permission.read_deny_unapplied / permission.rule_store_unavailable / resume.legacy_mode_seed_migrated / classifier.unavailable;0.86.0。此前 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)
4686
4688
  ENGINE_NOTICE_AUDIENCE: Readonly<Record<string, 'user' | 'operator'>>
4687
4689
  noticeAudienceOf(code: unknown): 'user' | 'operator'
4688
4690
  engineNoticeInCatalog(code: unknown): boolean
@@ -9644,6 +9646,886 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
9644
9646
 
9645
9647
  **包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(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)。
9646
9648
 
9649
+ ## §116 🆕 0.90.0(2026-10-04)引擎 7.40.1 / 服务端 7.113.0 / 7.114.0 / sdk 16 探针提货(通告码册 86 → 85 与 `readLegacyModeSeedMigrated` 退出公面 · 用户输入没被用上读子代上报位 · 结算词表 +`policy_allowed` 与策略结算记在策略名下 · `attachments.planModeReminder` 退役 · 入参镜像 `scope?` · sdk 16.0.0 进地板见证矩阵) · sdk registry 五名转口(云控制面子路径入口 `@sema-agent/client-core/registry` 值级 10 → 15) · 文件历史一句的判定与声明事实账本归包(五态判定 · 两句措辞 · 出站体读口 · 进程内声明账本) · hooks matcher 工具别名读口(`hookToolAliasesOf` / `canonicalHookToolName`;构建期从引擎静态工具目录生成) · 机读支持底线声明 + 引擎版本三态判定 + 状态派生粗码表上游双源对拍 · 投递账本的两只绑定方法(账本对象上的 `knownUndeliveredMessage` / `withoutUndelivered`) · 请求体 `settings.permissions` 三桶装配口 `permissionsDeclaration` + allow 放行能力位读器 · 「改了重发」判定口的错配让位与错误载体铸口(`providerRejectionResend` +1 可选参 · `toolHistoryErrorCarrierOf`)· `attachments` 拒绝改抛具名类 `AttachmentsSpecRefused`(`TypeError` 的子类)· 权限规则装配口对被引擎规则编译器拒收的整工具名同样不投 · 能力位读器读数冻结(🔴 minor;**型面 BREAKING 三处**〔`readLegacyModeSeedMigrated` / `LegacyModeSeedMigratedFactsView` 退出公面;请求键 `attachments.planModeReminder` 退役;`PromptDeliveryLedger` 接口 +2 必有成员(自写替身赋给该型的端编译红)〕;根公面运行期导出 1379 → 1397〔+19 −1〕;测试钩 62 → 63;公面类型名 952 → 964〔+13 −1〕;`EngineNoticeFactsCode` −1 员〔穷尽分支的端编译期红〕;`ENGINE_NOTICE_CODES` 86 → 85;`SETTLEMENT_KIND_WORDS` 13 → 14;`ATTACHMENTS_SPEC_KEYS` 10 → 9;`UserInputUndrainedFactsView` / `AllowDenyPolicyOptionsView` 各 +1 可选位;子路径入口 `./registry` 值级 10 → 15;`providerRejectionResend` +1 可选参;能力位读器(`observed*()` 十八只)交出的读数冻结〔就地改写:非严格模式无效、严格模式抛 `TypeError`〕;零新投影臂;开发依赖引擎 `~7.38.2` → `~7.40.1`;peer sdk 地板 `>=12.0.1` 不动)
9650
+
9651
+ > **minor**,本段按票序收录:
9652
+ > ① **CC-136**:子路径入口原样转口 `requestDeviceCode` / `pollUntilApproved` / `refreshTokens` / `listScopes` / `switchScope` 五名(RG-1 – RG-6),§86 R-3「未转的五名」那一行改口(116r)。additive;不用云控制面的端零动作。
9653
+ > ② **CC-291**(引擎 7.38.3 / 7.39.0 / 7.39.1 / 7.39.2 / 7.40.0 / 7.40.1 六版累积 + 服务端 7.113.0 / 7.114.0 夹具 + sdk 16.0.0 见证):① 引擎通告码册 86 → 85:通告码 `resume.legacy_mode_seed_migrated` 随引擎 7.39.0 删掉的一次性迁移退出码册,事实读器与具名型同批退出根入口(EN-1 – EN-3);② 用户输入没被用上的**子代副本帧**(引擎 7.39.0 起,子代 run 收场时没用上的输入在父会话里再说一条)读出 `childSessionId`,用户面一句对确定的两形多一语(EN-4);③ 结算词表 13 → 14 词(+`policy_allowed`),`who.party` 第五方 `policy`;服务端 7.113.0 起无人值守路径按类放行记成 `policy_allowed` 而不再是 `human_allowed`、策略拒的 party 由 `none` 改 `policy`(EN-5 – EN-7,SV-2);④ `attachments.planModeReminder` 退役:键表 10 → 9,`SEMA_ATTACHMENTS=full` 不再带它,显式点名即抛(SV-1)—— 不升级的话,服务端 7.113.0 上带 `full` 的终端每一发都是 `400 request.field_invalid`;⑤ `AllowDenyPolicyOptionsView` +`scope?`(EN-9);服务端夹具换钉 7.113.0 的行为对拍与 sdk 16.0.0 进地板见证矩阵(SV-3 – SV-6、SD-1)。
9654
+ > ③ **CC-294**:引擎在接线回执上对一条 run 报了 `fileHistory`(`on` / `disabled`)之后,端说不说、说哪一句 —— 五态判定 `fileHistoryLegNoticeVerdict`、两句措辞 `fileHistoryLegNoticeSentence`、闭集 `FILE_HISTORY_LEG_VERDICTS`;「这条 run 的提交带没带关断声明」的事实来自进程内账本 `createFileHistoryDeclarationLedger` 与出站体读口 `fileHistoryDeclarationOfBody`(FH-1 – FH-4)。「没照办」那一句改口(116a′)。投递账本 `deliveredByFrame` 在撤销式代理帧上不再外抛(FH-5)。
9655
+ > ④ **CC-298**:hooks matcher 工具别名读口 —— 引擎内置工具的别名 → 规范名(`ListPeers` → `ListAgents`),表由构建期从已装引擎的静态工具目录生成,端不再手抄镜像表(HA-1 – HA-6)。
9656
+ > ⑤ **CC-299**:① 本包第一次把「还支持哪一版以上的服务端 / 引擎 / sdk」写成机读声明 —— 根入口 `SUPPORT_FLOOR` 与组件读口 `supportFloorOf`(SF-1 – SF-4);② 引擎(服务端)自报版本串的三态判定 `engineVersionTier`(只认纯 `x.y.z`;门槛 = 声明的服务端底线,调用方只能抬不能降;VT-1 – VT-4);③ 状态派生粗码表 `STATUS_DERIVED_COARSE_CODES` 的上游真源到货(服务端契约附录 A.1e + sdk 16.0.0 同名常量),表不变、改为三向对拍,peer 地板不抬(RL-1 – RL-3)。
9657
+ > ⑥ **CC-300**:`createPromptDeliveryLedger()` 出的账本对象多两只读口 —— `knownUndeliveredMessage(message)` 与 `withoutUndelivered(messages)`,与 0.88.0 起根入口的两只自由函数 `promptKnownUndelivered(ledger, message)` / `withoutUndeliveredPrompts(ledger, messages)` **同一份判定、逐格同答**,只是把「账本实参」收进账本自己;宿主一只账本一次接线,调用点不再带账本。自由函数照旧导出、答案不变,账本参数型放宽为只要求 `knownUndelivered` 一只成员(按 0.89.0 九口形自写的旧账本替身照常传入);接口加两个成员只影响「把自写替身赋给 `PromptDeliveryLedger` 型」的那一处(116y)。
9658
+ > 🔴 按行的方法**叫 `knownUndeliveredMessage`、不叫 `knownUndelivered`**:`knownUndelivered(uuid)` 是 0.88.0 起账本上的 uuid 键口(入参是串,语义不变)。两个口入参域互斥,不做重载:串 ⇒ uuid ⇒ 只走 `knownUndelivered`;消息行(对象)⇒ 只走 `knownUndeliveredMessage`。
9659
+ > ⑦ **CC-302**:① 请求体 `settings.permissions` 的三只桶由本包装配 —— deny / ask 按来源信任序排、过与引擎同一只的安全投影(PM-1 – PM-4);**每个要投出的整工具名也过引擎规则编译器**(名字里带 `)` / `\` 的整工具规则被编译器拒收,修前归一后没改名而跳过这一步照投、服务端整发 422,PM-11);② allow 桶只在引擎能力位明说「allow 按规则读、不当名单」时才发(PM-5 – PM-7;发出去的 allow 是表态、不是免问);③ 能力位位名候定,今天的一切引擎都读「没报」⇒ allow 一条都不发(PM-6)。
9660
+ > **到货点名**(CC-136):终端 —— 登录 / 令牌刷新 / scope 切换那条腿对 `@sema-agent/sdk/registry` 的五条直连 import 改落本入口(116d);网页端 / 管理台 / 桌面端 —— 按本机参照树检索(读的是哪一个提交见 116d)没有同类直连,零改动即得。
9661
+ > **到货点名**(CC-291):终端 —— 零改动即得:🔴 但本包不升则 `SEMA_ATTACHMENTS=full` 对服务端 ≥7.113.0 一发就 400(SV-1);测试格 `engineNoticeChromeArm.test.ts` N31d 按旧码册断言「该码在册」⇒ 册外后红(EN-1;116d);steer 未用上通告换读包句时一并得子代句(EN-4;请托方的 0.89.0 待办未变)。网页端 / 管理台 / 桌面端 —— 零读点、零改动。
9662
+ > **到货点名**(CC-294):终端 —— 删壳侧的判定 / 两句 / 按 run 记的声明账,换读本包五只口(116d);网页端 / 管理台 / 桌面端 —— 零改动(今天不渲这一句)。
9663
+ > **到货点名**(CC-298):终端 —— 壳侧钉版镜像表换读后删表,别名对账格改判包读口对夹具引擎(116d)。网页端 / 管理台 / 桌面端 —— 零改动即得。
9664
+ > **到货点名**(CC-299):终端 —— 引擎附着门的版本读法可换读 `engineVersionTier`(带终端自己的门槛,见 116d)。网页端 / 桌面端 / 管理台 —— 零改动即得。
9665
+ > **到货点名**(CC-300):终端 —— 请托方一件(两只同名薄包装换调账本方法后删除,同名影子对账门过渡表里对应两行随之删),按 116d。网页端 / 管理台 / 桌面端 —— 零改动即得(新增的是账本对象上的成员,不改任何既有口)。
9666
+ > ⑧ **CC-309**:「改了重发」判定口 `providerRejectionResend(detail, carrier?)` 加可选第二参,载体由本包铸 —— 新根入口 `toolHistoryErrorCarrierOf(终局帧或终局结果)` 交出同一终局的错误载体(终局码 / 服务商状态 / 失败句原值,只读自有数据位),本包终局行判会话历史 tool_use 错配读的就是这一只;宿主把它的返回值交给判定口,判为错配时让位(答 `undefined`),不与那一行的 `/rewind` 出路句同时给(PR-1 / PR-2)。不传载体与 0.89.0 逐字节同。
9667
+ > **到货点名**(CC-309):终端 —— 请托方(渲「改了再发」那一句的接线处传 `toolHistoryErrorCarrierOf(同一终局帧)` 的返回值,删壳侧按错配键让位,116d);网页端 / 管理台 / 桌面端 —— 不渲这一句的零改动,渲的同终端。
9668
+ > ⑨ **服务端 7.114.0**(夹具换钉):设置 hooks 的工具事件 matcher 选中别名、选不中正名 ⇒ fresh 提交 400(字面 / 正则 / 两端空白 / 逗号名字表 / 竖线名字表 / 含空段同一条规则;7.113.0 只拒字面形与竖线名字表形)。本包对 matcher 零改码:原样透传、不预检(HK-1;KL-416)。
9669
+ > **到货点名**(CC-302):终端 —— 请托方(换读 `permissionsDeclaration`,删自己的规则投影一族;读面两处同批换,见 116d);网页端 / 管理台 / 桌面端 —— 零读点(请求面不装配 `settings.permissions`),零改动即得。
9670
+ > ⑩ **CC-316**:`attachments` 声明被拒时的错误型 —— `attachmentsForRequest(env)` 对 `SEMA_ATTACHMENTS` 的拒绝(未登记键 / 对字面真族用 `-` / 只关不开的键用 `+` 或裸键 / `key=value` 形不合 / `todoReminderMode` 取值不合 / 点名退役键)与 `buildTaskRequest` 对 `attachments` 对象里退役键的拒绝,抛**同一个具名类** `AttachmentsSpecRefused`(`TypeError` 的子类;SV-7)。壳按 `instanceof` 接,不靠解析消息串;`message` 一字不动。
9671
+ > **到货点名**(CC-316):终端 —— 请托方(构造请求那一步按类接,116d / 116y);网页端 / 管理台 / 桌面端 —— 不读 `SEMA_ATTACHMENTS`、不手写 `attachments` 对象的零改动。
9672
+
9673
+ ### 116a. 处置表
9674
+
9675
+ 包处置列与各端列的词同 §115a(按本机克隆的只读检索,读的是哪一个提交见 116d)。
9676
+
9677
+ | # | 面 | 包处置 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
9678
+ |---|---|---|---|---|---|---|---|---|---|
9679
+ | EN-1 | 通告码册 `ENGINE_NOTICE_CODES` / `ENGINE_NOTICE_AUDIENCE`(引擎 7.39.0 起 −`resume.legacy_mode_seed_migrated`) | changed(consumed;生成物三表各 −1 行) | 86 → 85 | 零改动即得(产品源码零读点);🔴 测试格 N31d 断言该码「在包的码册」⇒ 册外后红,改判册外兜底(通用行仍恰一行,N31e 不变) | n/a | n/a | n/a | pending(G-EN1) | 116b |
9680
+ | EN-2 | `readLegacyModeSeedMigrated`(退出公面)+ 具名型 `LegacyModeSeedMigratedFactsView`(退出公面) | 🔴 removed(型面 BREAKING;退役登记 RL-19) | 根入口导出 → 不再导出;`EngineNoticeFactsCode` −1 员 | 零改动即得(四端产品源码零具名 import;对 `EngineNoticeFactsCode` 穷举的 `switch` 里写了这一码的分支编译期红) | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-EN1) | 116y ① |
9681
+ | EN-3 | 该码在老引擎(< 7.39.0)上的读法 | changed(册外码处置) | 在册 / `operator` / typed 事实 → 册外:`readEngineNoticeFacts` 答 `undefined`、`engineNoticeInCatalog` 答 `false`、`noticeAudienceOf` 照旧答 `operator`(保守缺省,与它在册时的受众同值) | 零改动即得(通用行渲引擎给的 `message`) | n/a | n/a | n/a | pending(G-EN1;KL-411) | 116b |
9682
+ | EN-4 | `UserInputUndrainedFactsView.childSessionId?` + `userInputUndrainedNotice` 入参 `Pick` +1 位 | added(可选位;0.89.0 UI-5 declined → consumed;KL-364 销) | 子代副本帧读成父会话自己的、句子里没有「在一个子代里」→ 读数带 `childSessionId`、steer × `leg_end` 与 follow-up 两句多说「在一个子代的 run 里」(不带 id) | pending(请托方换读包句时一并得;壳侧 `sema/upstreamBridge.ts:1083` 自写句不读这一位) | n/a | n/a | n/a | pending(G-EN2;KL-410) | 116b |
9683
+ | EN-5 | `SETTLEMENT_KIND_WORDS`(core `SETTLEMENT_KINDS` 逐词逐序抄件) | changed(consumed;+`policy_allowed`,排在 `policy_refused` 前) | 13 → 14 词 | 零改动即得(产品源码零读点) | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-EN3) | 116b |
9684
+ | EN-6 | `SETTLEMENT_PARTIES` 五词 / `SettlementWhoView.party` | consumed(开集透传,不铸镜像表) | `person` / `engine` / `host` / `none` 四词说明 → 五词(+`policy`);表外词原样带回 | 零改动即得 | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-EN3) | 116b |
9685
+ | EN-7 | `isHumanSettledGate` / `isPolicyRefusedGate` 对新词与新记法 | 不变(判词不判 party);新词不新增谓词(无消费场景前不铸) | `policy_allowed` ⇒ 两只谓词都答 `false`;`policy_refused` 两代 party(`none` / `policy`)同答 `true` | 零读点 | 零读点 | 零读点 | 零读点 | pending(G-EN3;KL-412) | 116b |
9686
+ | EN-8 | `ASK_CLASSES` +`shell_floor`(7.39.0)+`unstated`(7.40.0);`AskOriginFacts.tightened` +`unstated`;`ModePolicy` +必填 `unstated`、`HandsBandOptions` −`readCyberReminder`(7.40.0 两处硬破坏);`ToolSpec` / `ToolGateInput` / `AgentTool` `permissionSeat` {`passthrough`};`PROMPT_BLOCK_CAUSES` / `TerminalBlockedDetail` / `isEngineRefusal` / `receiveHookResult` / `OUTPUT_STYLE_NAME_MAX` 等 7.39.0 新名 | consumed(问类读器开集原样收,本包无镜像常量;其余零读点 —— grep `src/` 零命中) | 问类:`unstated` 卡在端上不丢(走「不认识的类」兜底、渲普通卡形);其余无 | 零改动即得 | 零改动即得 | 零改动即得 | 零改动即得 | 回归约束(G-EN4) | 116b |
9687
+ | EN-9 | `AllowDenyPolicyOptionsView.scope?`(core 7.40.0 `createAllowDenyPolicy` 入参 +`'grant' \| 'narrowing'`) | added(可选位;值原样透传,本层不判成员、不补缺省) | 缺此位 → 与 core 第一参键集逐键相等 | 零改动即得 | n/a | n/a | n/a | pending(G-EN5) | 116b |
9688
+ | EN-10 | `steering_injected.source` 引擎 7.39.0 −`plan_mode` +`output_style`;任务规格 `outputStyle` 席 | declined(服务端 7.113.0 不接 `TaskSpec.outputStyle`,经服务端的 run 不会带 `output_style` 来源;出现时落默认句 `Steering injected (output_style)` 不丢;`plan_mode` 行留作老引擎词) | 0.89.0 W-1 / W-2 watch → 到货但无路径,仍候服务端受理 `outputStyle` | — | — | — | — | 回归约束(G-EN6) | 116b |
9689
+ | SV-1 | 请求键 `attachments.planModeReminder`(引擎 7.39.0 / 服务端 7.113.0 / sdk 16 型面均已删) | 🔴 removed(型面 BREAKING;显式点名即抛) | `ATTACHMENTS_SPEC_KEYS` 10 → 9;`AttachmentsSpec` −`planModeReminder?`;`SEMA_ATTACHMENTS=full` 点满 7 员 → 6 员;`planModeReminder` / `+` / `-` 前缀 / 夹在多 token 里:铸 `true` 或抛「literal-true 族不接受减号」→ 一律抛,句子点名退役与出路;宿主手写的 `attachments` 对象点名这一键(任何大小写 / 前后空白 / `+` `-` 前缀 / `=值` 形)⇒ `buildTaskRequest` 抛 `TypeError`,句子按「键」措辞(0.89.0 原样上 wire);值为 `undefined` 的按缺席(不抛、请求体不带);只在带 `attachments` 的 `live: true` 车道判 | 零改动即得(`full` 的产出少一键;🔴 本包不升 ⇒ 服务端 ≥7.113.0 上 `full` 一发 400) | n/a | n/a | n/a | pending(G-SV1;KL-409) | 116b |
9690
+ | SV-2 | 结算记法值变更:无人值守路径按类放行 `human_allowed` + `person` → `policy_allowed` + `policy`(+`who.approver: "unattended_class_answer"`);策略拒 `policy_refused` 的 party `none` → `policy` | consumed(读口开集透传两代记法;`isHumanSettledGate` 不再把机器放行读成「人批的」) | 同一次机器放行:7.112.x 及更早 `isHumanSettledGate` 真 → 7.113.0 起假 | 零读点 | 零读点 | 零读点 | 零读点 | pending(G-SV4;KL-412) | 116b |
9691
+ | SV-3 | 会话读三口(`GET /v1/sessions/:id` 详情 / `/head` / `/events`)非属主 404 的码 | consumed(本包会话读口不按码分诊,零改读) | `not_found.run` + run 长文 → `not_found.session` + `session not found` | 零读点 | 零读点 | 零读点 | 零读点 | 回归约束(G-SV2) | 116b |
9692
+ | SV-4 | 不带 `Idempotency-Key` 的 live steer:`human_input.inputId` 等于受理回执 `messageId` | consumed(零行为变化:投递账本按消息 uuid 记、不读 `inputId` 值) | 引擎自铸 → 等于回执 `messageId` | 零读点 | 零读点 | 零读点 | 零读点 | 回归约束(G-SV3) | 116b |
9693
+ | SV-5 | `task.user_steer_undrained` `crashed` 臂事实句「…ended before the engine confirmed consuming them」;受理账本新结清词 `consumed` | consumed(本包句子不抄服务端原句;`detail` 不变) | — | 零改动即得 | — | — | — | — | 116b |
9694
+ | SV-6 | 服务端 7.113.0 其余项:`blocked` 终局的 `terminal.detail { kind:"prompt_blocked_by_hook", cause, hookReason? }`(四面同形)· `checkpoint.config_refused` 409 · 两个 409 码多 `retriable:true` · 受理账本新结清词 `consumed` | 零读点(`readRunTerminal` 不读 `blocked.detail`;续跑拒绝读口按粗码 / 状态码分形、不读这几个码)—— 🔴 KL-371 的升级判据(引擎 `blocked.detail` 到货)本版满足,是否转立票由汇总定,本版不建读口 | — | 零改动即得 | — | — | — | — | — |
9695
+ | SV-7 | `attachments` 声明被拒时的错误型(`attachmentsForRequest(env)` 的 env 口与 `buildTaskRequest` 的装配口) | changed(additive:根公面 +1 名 `AttachmentsSpecRefused`,`class … extends TypeError`;`message` 一字不动) | env 口抛普通 `Error`、装配口抛无自有位的 `TypeError` → 两处抛同一个具名类:`instanceof Error` ∧ `TypeError` ∧ `AttachmentsSpecRefused` 三真,`name` 为 `'AttachmentsSpecRefused'`;自有数据位 `token`(被拒的 token / 键)/ `why`(理由半句,与 `message` 里同一份)/ `allowed`(合法形,冻结数组:env 口 = 句里列的九项,装配口 = `ATTACHMENTS_SPEC_KEYS` 九个键名)/ `key`(只在装配口在场,= 被拒的键;env 口没有这一位) | 🔴 pending(请托方:构造请求那一步按 `instanceof AttachmentsSpecRefused` 接,`-p` 非零退出,不靠消息串;116d)| n/a | n/a | n/a | pending(G-SV5) | 116b |
9696
+ | SD-1 | sdk 16.0.0(major)探针树 | consumed(进地板见证矩阵;peer 地板 `>=12.0.1` 不动;本包 `.d.ts` 对 16.0.0 严格编译零错) | 地板见证 12.0.1 → 12.0.1 ∪ 15.0.0 / 15.2.0 / 15.3.0 / 16.0.0(`SEMA_SDK_WITNESS` 路径列表) | n/a | n/a | n/a | n/a | 回归约束(G-SD1) | 116c |
9697
+ | RG-1 | 子路径入口值级 `requestDeviceCode` / `pollUntilApproved` / `refreshTokens` | added(值级 +3;原样转口) | 无 → 与 `@sema-agent/sdk/registry` 同名导出**同一函数对象**;不包装、不改签名、不补默认值、不吞错 | 🔴 pending(请托方:登录腿五条直连 import 改落本入口,116d) | n/a(无同类直连) | n/a | n/a | pending(G-RGT1) | 116b |
9698
+ | RG-2 | 子路径入口值级 `listScopes` / `switchScope` | added(值级 +2;原样转口) | 同 RG-1 | 同 RG-1 | n/a | n/a | n/a | pending(G-RGT1) | 116b |
9699
+ | RG-3 | 五名的签名型 | 上游自带(本入口不新增型导出) | 返回型 / 入参型按上游声明读;五名所在声明文件出发的相对 import 闭包(含出到 registry 目录之外的一跳)零裸说明符;干净安装树 `skipLibCheck: false` 零 `Cannot find module`;返回型不是 `any` | 零改动即得 | — | — | — | pending(G-RGT3) | 116b |
9700
+ | RG-4 | 五名的响应型别名 `DeviceCodeResponse` / `TokenGrantResponse` / `ScopesListResponse` / `ScopeSwitchResponse` | declined(本入口只转值;端上存量只用值,具名型取 `Awaited<ReturnType<typeof 函数名>>` 或契约包同名型;有消费请托进来再加) | — | 零改动即得(终端已从契约包取两个响应型) | — | — | — | — | 116b |
9701
+ | RG-5 | 同入口邻名(本版仍不转):`logoutRegistry` / `REGISTRY_DEVICE_GRANT_TYPE` / `REGISTRY_SCOPES_PATHS` / `InMemoryTokenProvider` / `RegistryAdmin` / `ADMIN_ENDPOINTS` / `putMeConfig` / `ConfigCasConflictError` / `ScopeConfigCasConflictError` / `getScopeConfigPublished` / `putScopeConfigDraft` / `getPublishState` / `requestPublish` / `REGISTRY_OAUTH_ERROR_CODES` | declined(端上没有对应消费;要用哪一件带请托进来) | — | 现状不变 | — | — | — | pending(G-RGT5) | 116b |
9702
+ | RG-6 | peer 地板 / 根入口 / 公面基线 / §0a 计数 | 不变 | `@sema-agent/sdk >=12.0.1` 不抬(五名在 12.0.1 / 15.3.0 / 16.0.0 三代都在);这一面住子路径入口、不进根 barrel,根公面运行期导出不因本项变化 | 回归约束 | 零改动即得 | 零改动即得 | 零改动即得 | 回归约束(G-RGT2 / G-RGT7) | — |
9703
+ | FH-1 | `fileHistoryLegNoticeVerdict` / `FILE_HISTORY_LEG_VERDICTS` | added(consumed:引擎 `wiring_manifest.fileHistory` 段 × 能力位 `fileHistoryCapture` × 提交体 `fileHistory`) | 无 → 五态纯函数(72 格真值表见 116c) | 换读(删壳侧同名判定) | n/a(不渲) | n/a | n/a | pending(G-FH8 – G-FH12) | 116a′ 第 1 – 3 条 |
9704
+ | FH-2 | `fileHistoryLegNoticeSentence` | added | 无 → 两态出句(结论在句首;`not_honored` 新句) | 换读(删壳侧两句常量与句口) | n/a | n/a | n/a | pending(G-FH8 / G-FH10 / G-FH16) | 116a′ 第 1 条 |
9705
+ | FH-3 | `createFileHistoryDeclarationLedger` | added | 无 → 进程内账本(记 / 绑 / 查三口;绑定判据与 `deliveredByFrame` 同一只) | 换读(删壳侧按 run 记的账与两处写入点) | n/a | n/a | n/a | pending(G-FH13) | 116b |
9706
+ | FH-4 | `fileHistoryDeclarationOfBody` | added | 无 → 出站体读口(只认自有可枚举的数据属性;`toJSON` / 这一键是取值器 / 体上任何自有可枚举取值器 / 描述符与属性访问不一致 / 这一键的值是非 null 对象 ⇒ `unknown`) | 换读(删壳侧「真出站体 → 事实」) | n/a | n/a | n/a | pending(G-FH14) | 116b |
9707
+ | FH-5 | `createPromptDeliveryLedger().deliveredByFrame` | fixed | 撤销式代理帧外抛 `TypeError` → 不记、不抛 | 零改动即得 | 零改动即得 | n/a | n/a | pending(G-FH15) | 116b |
9708
+ | HA-1 | `canonicalHookToolName(name)`(根入口) | added(consumed:引擎静态工具目录每条的 `face.aliases`) | 无 → 别名 ⇒ 规范名;其余一切(规范名自己 / 表外名 / 空串 / 原型键 / 非串入参)原样返回;逐字比、不折大小写与空白、永不抛 | pending(换读后删壳侧钉版镜像表) | n/a(不跑本地 hooks) | n/a | n/a | pending(G-HA1 – G-HA6) | 116b |
9709
+ | HA-2 | `hookToolAliasesOf()`(根入口) | added | 无 → 别名 → 规范名的冻结表(每次同一实例,null 原型);今天 `{ ListPeers: 'ListAgents' }` | pending(同 HA-1:要枚举时用,单名查询用 HA-1) | n/a | n/a | n/a | pending(G-HA6) | 116b |
9710
+ | HA-3 | 表的来源 | added(构建期生成;不手抄) | 终端壳侧钉版手抄 → 本包从已装引擎静态工具目录(包根读口 `describeToolCatalog()`)展开每条 `face.aliases` 生成;生成器遇目录读口缺席 / 形不对 / 一张别名都没有 / 别名撞别条的规范名 / 两条对同一别名给不同规范名 / 别名是整数形串一律拒生成(非零退出,不落盘空表) | pending(对账格改读包读口,116d) | n/a | n/a | n/a | pending(G-HA7) | 116b |
9711
+ | HA-4 | 根公面名数 | changed(additive) | +2(本版各项合计 1379 → 1397;表 `HOOK_TOOL_ALIASES` 是模块内部件,不上根入口) | 零改动即得 | 零改动即得 | n/a | 零改动即得 | pending(G-HA1) | 116y |
9712
+ | HA-5 | 参数别名 `pathTarget.aliases`(Read / Edit 等的 `path`) | declined(不是工具别名,不进表) | — | — | — | — | — | 回归约束(G-HA8) | 116b |
9713
+ | HA-6 | 调用方 `spec.tools` 声明的别名 / MCP 工具的别名 | declined(不在静态目录里;对它们原样返回,端若要认,自带那一份声明;KL-391) | — | — | — | — | — | 回归约束(G-HA3) | 116b |
9714
+ | SF-1 | 根入口 `SUPPORT_FLOOR` | added(公面 +1;冻结对象,型面三只 `string` 位,不带字面值) | 无 → `{ server: '7.104.0', core: '7.33.8', sdk: '12.0.1' }`(本版是保守初值,KL-404) | 零改动即得(升级提示要点名底线时读它) | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-SF1) | 116b |
9715
+ | SF-2 | 根入口 `supportFloorOf(component)` | added(公面 +1) | 无 → `'server'` / `'core'` / `'sdk'` 答底线,别的一律 `undefined` | 零改动即得 | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-SF2) | 116b |
9716
+ | SF-3 | 型 `SupportFloor` / `SupportFloorComponent` | added(公面类型 +2) | — | — | — | — | — | — | — |
9717
+ | SF-4 | 本包支持范围的口径 | changed(成文) | 隐含在测试用的最老那份服务端里 → 一份声明三项;过渡读法的退役按声明判(声明越过某一版 ⇒ 那一版之前才有的老读法当版执行退役) | 回归约束 | 回归约束 | 回归约束 | 回归约束 | — | 116a′ 第 4 条 |
9718
+ | VT-1 | 根入口 `engineVersionTier(version, floor?)` | added(公面 +1) | 无 → `'engine'`(纯 `x.y.z` 且不低于门槛,等于算)/ `'legacy'`(纯 `x.y.z` 且低于门槛)/ `'unknown'`(读不懂) | pending(请托方:引擎附着门的版本读法换读,带 `floor`,见 116d) | n/a(不按引擎版本分支) | n/a | n/a | pending(G-VT1 – G-VT4) | 116b |
9719
+ | VT-2 | 型 `EngineVersionTier` | added(公面类型 +1;三词字面联合) | — | — | — | — | — | — | — |
9720
+ | VT-3 | 带前后缀的版本串(预发布 `-rc.1` / 构建元数据 `+build` / `v` 前缀 / 首尾空白)与不是版本号的词 | 一律 `unknown` | — | 回归约束(终端今天对前一类按低于门槛处置、对后一类按判不出处置;换读后两类都是 `unknown`,要分开处置就保留自己的形判,KL-405) | — | — | — | pending(G-VT2) | 116b |
9721
+ | VT-4 | 调用方门槛 `floor` | 只能抬不能降(实际门槛 = 两者取高);不是纯 `x.y.z` ⇒ `TypeError`(先于版本判定,错误文本不回显值) | — | 回归约束 | — | — | — | pending(G-VT3) | 116b |
9722
+ | RL-1 | `STATUS_DERIVED_COARSE_CODES` / `isStatusDerivedCoarseCode` | 不变(九词与顺序逐字节同 0.89.0);上游真源改为服务端契约附录 A.1e 与 sdk 16.0.0 同名常量,门三向对拍(服务端分发器铸点 / sdk 同名常量 / 契约那一节) | — | 零改动即得 | 零改动即得 | 零改动即得 | 零改动即得 | 回归约束(G-RL1) | 116a′ 第 5 条 |
9723
+ | RL-2 | sdk 16.0.0 的同名常量 `STATUS_DERIVED_COARSE_CODES` | declined(本版不从 sdk 导入:peer 地板 `>=12.0.1` 上 sdk 12 – 15.4 的入口没有这个导出,具名导入会让装着这些版本的宿主在加载本包时就失败;peer 地板不为一张九词的表抬) | 门内对拍读三只变量 `SEMA_SDK16_ROOT` / `SEMA_SDK15_ROOT` / `SEMA_SDK15_ROOT_OLD`(与开发依赖)里每一份 sdk;一份 ≥16.0.0 都没有 ⇒ 标未跑,必跑档红 | 零改动即得(两份同名同序,装了 sdk 16 的端读哪一份答案都一样) | 零改动即得 | 零改动即得 | 零改动即得 | — | 116b |
9724
+ | RL-3 | 老引擎两代读法(`ruleStoreUnreadable` 一族、「谁拒的」退役词 `plan_mode`、请求键 `approverPosture` 的按名专句) | 不变(本版不删);退役条件改按声明判:声明的引擎底线越过 7.34.0 ⇒ 删前两项,声明的服务端底线越过 7.106.0 ⇒ 删第三项 | — | 零改动即得 | 零改动即得 | 零改动即得 | 零改动即得 | — | 116y ② |
9725
+ | PD-6 | 账本对象方法 `knownUndeliveredMessage(message)` | added(接口 +1 成员;CC-300) | 无 → 按消息行判「确知没交出去」,与 `promptKnownUndelivered(ledger, message)` 同答(不叫 `knownUndelivered`:那是 uuid 键口) | pending(请托方:换调方法后删同名薄包装 `promptKnownUndelivered`;入参型 `object \| null \| undefined`,`unknown` 入参的调用点先收窄或直接传 —— 运行期非对象答 `false`、不抛) | pending(非必改:同样要「这条没送到」的端可采) | pending(非必改) | n/a | pending(G-PD11 / G-PD12 / G-PD13 / G-PD15 / G-PD16) | 116b |
9726
+ | PD-7 | 账本对象方法 `withoutUndelivered(messages)` | added(接口 +1 成员;CC-300) | 无 → 旁路载荷过滤,与 `withoutUndeliveredPrompts(ledger, messages)` 同答:只剔确知没交出去的行,其余原样保序,返回新数组;非数组 ⇒ 空数组 | pending(请托方:换调方法后删同名薄包装 `withoutUndeliveredPrompts`;跨会话合并账本那一处同改读方法) | 同 PD-6 | 同 PD-6 | n/a | pending(G-PD12 / G-PD13 / G-PD15) | 116b |
9727
+ | PD-8 | 既有 `promptKnownUndelivered(ledger, message)` / `withoutUndeliveredPrompts(ledger, messages)` / `knownUndelivered(uuid)` 与账本其余九只口 | 不变(自由函数的账本参数型放宽,见 116c G-PD18) | 答案逐字同 0.89.0;两只自由函数照旧导出,参数型由整只 `PromptDeliveryLedger` 放宽为 `Pick<PromptDeliveryLedger, 'knownUndelivered'>`(调用点零改动) | 回归约束 | 回归约束 | 回归约束 | n/a | 回归约束(G-PD14) | — |
9728
+ | PM-1 | 根入口 `permissionsDeclaration(input, caps)` | added(公面 +1;型 +4:`PermissionsDeclaration` / `PermissionsDeclarationBuckets` / `PermissionsDeclarationInput` / `WireRuleOrigins`,外加 `WireRuleOrigin`) | 无 → 三桶片段 `{ permissions?: { deny?, ask?, allow? } }` | 🔴 pending(请托方:stamp 两车道与读面两处换读,删壳侧投影一族,见 116d) | n/a | n/a | n/a | pending(G-PM1 – G-PM10) | 116b |
9729
+ | PM-2 | deny / ask 桶的次序与内容 | consumed(与终端 1.0.140 请求体逐字节同;整服务器写法、被编译器拒收的整工具名两形除外,见 PM-9 / PM-11) | 来源信任序(托管策略 > 命令行 > `--settings` > 会话 > 用户 > 本地 > 项目 > 说不清的),同一来源内按来源表登记序;命令行 deny 并在命令行那一档;同一条规则跨桶不去重 | 回归约束(换读前后请求体逐字节同,登记差异两类见 116b) | — | — | — | 回归约束(G-PM3) | 116b |
9730
+ | PM-3 | 安全投影(三桶同一只) | consumed | 退役名 / 无协议前缀的 `__` 短形 / 不完整协议名 / 路径文法的 `~/` 规则 / 引擎规则编译器拒收的规则不发;整工具规则投归一后的工具名(**每个整工具名也过编译器**,PM-11),内容形规则投原串 | 同 PM-2 | — | — | — | pending(G-PM6) | 116b |
9731
+ | PM-4 | 条数 | 不变(本口不截断) | 服务端 7.106.0 起超 1000 条的桶整请求 400 `over_cap`;本口不替引擎截 | 回归约束 | — | — | — | pending(G-PM8) | 116b |
9732
+ | PM-5 | allow 桶 | added(新上请求体;门控) | 恒不发 → 能力位读数 `present ∧ grants === true` 时发投影后的非空 allow;其余一律不发、永不发空数组 | 🔴 pending(请托方:allow 规则交给本口,不再在壳侧判版本;壳侧同步放行保留) | n/a | n/a | n/a | pending(G-PM1 / G-PM2 / G-PM4 / G-PM5) | 116a′ 第 6 条 |
9733
+ | PM-6 | 能力位读器 `observedPermissionsAllowGrant` 一族 + 判据 `permissionsAllowGrantAvailable` + doctor 句 | added(公面 +6、测试钩 +1、型 +1 `PermissionsAllowGrantReading`) | 无 → 三态 `unobserved` / `not_reported` / `present{grants}`;位名候定(`settings.permissions.allowGrant`,布尔),今天一切引擎读 `not_reported` | pending(宿主能力探测链加一只 tee,与兄弟读器并列) | n/a | n/a | n/a | pending(G-PM1 / G-PM4) | 116b |
9734
+ | PM-7 | 入参纪律 | added | 字段只在原型链上 / 桶不是数组 / 来源表不是 Map 形 / 入参不是对象 / 数组空洞在原型链上有值 ⇒ `TypeError`;数组里的非串、空串、纯空洞跳过 | 零改动即得(壳侧入参是普通对象) | — | — | — | pending(G-PM10) | 116b |
9735
+ | PM-8 | 引擎值级端口缺席 | added | 有规则要投而 `MCP_NAMESPACE` / `RETIRED_TOOL_NAMES` / `protocolOf` / `ruleToolGrammarOf` / `validatePermissionRules` 缺任一 ⇒ 抛并点名;没有规则要投 ⇒ 不抛 | 零改动即得(终端装配根已装端口) | n/a(不调本口) | n/a | n/a | pending(G-PM9) | 116b |
9736
+ | PM-9 | 整服务器 / 整 peer 写法(引擎协议前缀表上的每一个协议:`mcp__<服务器>` / `a2a__<peer>`;按引擎读法去两端空白之后:前缀之后非空、不含 `__`、不以 `_` 结尾;整工具形 `(*)` / `()` 同)| added(三桶同一条改写,在安全投影之前;协议前缀问引擎的 `protocolOf`,不手抄) | 终端 1.0.140 不发(安全投影判不完整协议名,规则留在壳侧匹配器上;deny / ask 就此丢在引擎那一侧)→ 改写成原名 + `__*` 再过安全投影:装着的引擎规则编译器对两形三种行为逐名同判(逐协议);服务端 7.104.0 – 7.114.0 八代受理口对裸形 deny / ask 整请求拒、对 `__*` 形三桶都收(逐协议)。仍只留客户端匹配器的形:服务器 / peer 段以 `_` 结尾(改写后会在第一个 `__` 处拆成别的服务器)(KL-396);改写出的名字被引擎规则编译器拒收的归 PM-11(KL-418) | 回归约束(终端 1.0.140 把这一形留在壳侧匹配器上;换读后引擎侧也执行,壳侧匹配器照旧生效、两边同判) | n/a | n/a | n/a | 本版证明(G-PM11) | 116b |
9737
+ | PM-10 | `permissionsAllowGrantDoctorDetail(reading)` 对宿主自拼的坏读数 | added | 无 → 句子从判据同一只派生:「sent」⇔ 判据真;「引擎说不」⇔ 自有 `kind: 'present'` ∧ 自有 `grants === false`;`not_reported` ⇒「没报」那一句;其余(`grants` 非布尔 / 缺席、表外 `kind`、`null`、位只在原型链上、读它就抛)⇒「读不出」那一句;永不抛 | 零改动即得(doctor 行读的是读口给的读数) | n/a | n/a | n/a | 本版证明(G-PM12) | 116b |
9738
+ | PM-11 | 整工具名被引擎规则编译器拒收(名字里带右括号 / 反斜杠、没有左括号,不是整服务器 / 整 peer 写法;如 `shell\runner(*)` 归一成 `shell\runner`、`odd)name()` 归一成 `odd)name`)| changed(三桶同一条;修前只有改写出的名字过编译器,归一后没改名的整工具名跳过这一步) | 终端 1.0.140 与本口修前照发(整工具名不过编译器;引擎对它答 `invalid.paren`,服务端整请求 422)→ 不投,规则留在客户端匹配器上;编译器答不上来(抛 / 回非数组)⇒ deny / ask 照投、allow 不投(与内容形、改写出的名字同一条策略)。含左括号的整工具名本来就不投(安全投影),不变 | 零改动即得(换读 `permissionsDeclaration` 即得;壳侧匹配器照旧生效) | n/a | n/a | n/a | pending(G-PM13) | 116b |
9739
+ | PR-1 | `providerRejectionResend(detail, carrier?)`(CC-309;0.89.0 §115 PR 行「只读状态码」)| changed(型面 additive:可选第二参) | 只读状态码 → 只读状态码;给了同一终局的错误载体且判为会话历史 tool_use 错配 ⇒ `undefined`(那一行的出路是 `/rewind` 出路句,「改了重发」在错配会话上永远不成);载体原样交判型口 `classifyToolHistoryMismatch`(同一只判型、同一读法 ⇒ 两只口对任何载体同答;读它就抛 / 不是对象 ⇒ 判不出 = 不让位);不传 / 判不出 ⇒ 与 0.89.0 逐字节同 | 🔴 pending(请托方:渲 resend 句的接线处传 `toolHistoryErrorCarrierOf(同一终局帧)` 的返回值,不自拼;删壳侧按键让位,116d) | pending(若渲 resend 句,同传) | pending(同网页端) | n/a | 本版证明(G-PRC6a / G-PRC6f / G-PRC7 / G-PRC9)· 回归约束(G-PRC6b – G-PRC6e / G-PRC8) | 116b |
9740
+ | PR-2 | 根入口 `toolHistoryErrorCarrierOf(terminalOrResult)`(CC-309) | added(公面 +1) | 无 → 同一终局的错误载体 `{ code?, status?, message? }`:终局码(failed 因由的 `code` / 扁平形 `errorCode`)、服务商状态(结果上 `apiFailure.status`,没有则取服务商拒绝详情的 `status`)、失败句原值;入参 = `done` 帧 / 它的 `result` / `failed` 帧 / run 行的 `result`;只读自有数据位,不是 failed 终局 / 读不出 / 终局行不落 `API Error:` 臂(409 占锁行、治理终态行、模型输出问题行 —— 与铸行处选臂同一只判据)⇒ 空载体 `{}`;冻结、null 原型;本包终局行判错配(挂 `_sema_tool_history_mismatch` 与 `/rewind` 出路句)读的就是这一只 ⇒ 键在 ⇔ 判定口让位 | 🔴 pending(同 PR-1) | pending(同 PR-1) | pending(同 PR-1) | n/a | 本版证明(G-PRC7) | 116b |
9741
+ | CR-1 | 能力位读器家族(`observed*()` 十八只)交出的读数 | changed(读账里的读数逐层冻结) | 交出缓存里那一只可变对象,读者就地改它会改掉此后所有读者的答案(放行位改真 ⇒ allow 被交出去;`not_reported` 读数改成 `present` 同形)→ 读账里存着的读数(`present` / `not_reported` / 逐位读器某一位 `malformed`)一律冻结:非严格模式改写无效、严格模式抛 `TypeError`,再读仍原值;未观测读数每次新铸、不进读账(改写它不影响下一次读);交给 tee 的能力回体不冻 | 零改动即得(本机检索四端无就地改读数的写法) | 零改动即得 | 零改动即得 | 零改动即得 | 本版证明(G-FRZ1) | 116b |
9742
+ | HK-1 | 设置 hooks 的工具事件 matcher(服务端 7.114.0:选中别名、选不中正名 ⇒ fresh 提交 `400 request.field_invalid`,句子点名别名与正名) | consumed(透传 + 夹具格;本包不求值、不预检) | ≤7.111.x 一律受理、7.113.x 只拒字面形与竖线名字表形 → 7.114.0 起字面 / 正则 / 两端空白 / 逗号名字表 / 竖线名字表 / 含空段同一条规则;也选中正名的受理。本包装配口原样透传 matcher、跳过口按原串做键,零改码 | 零改动即得(服务端那一句原样到宿主) | n/a(不发设置 hooks) | n/a | n/a | 回归约束(G-HKM1,夹具逐代断言表) | 116b |
9743
+
9744
+ ### 116a′. 成文改口(旧判据眼作废 → 新判据眼)
9745
+
9746
+ 1. **作废**(CC-294;§114 **G-FH7**):「用户显式关文件检查点、引擎报 `fileHistory: "on"` ⇒ 渲『本会话未按声明执行』」。旧判据眼看到「关了 ∧ 报 on ⇒ 说没照办」就判绿 —— 那一句在三种部署形上是误归因:关断声明只在能力位 `on-optional` 时才上请求体,能力位 `on-always` / 没读到 / 老引擎没报时声明根本没发过;能力位 `on-optional` 时还原文件的那一次提交也刻意不带。新判据眼分三向:
9747
+ - **说「没照办」(`not_honored`)**:这条 run 的提交**真带了** `fileHistory: "disabled"`(账本 `declarationOf(runId) === 'sent'`)∧ 报 `on`。能力位、用户此刻的设置都不看。屏上那一句换成「The engine is still capturing file history for this session, though your settings asked it not to.」—— 旧英文句「File checkpoints are turned off in your settings, but the engine reports it is still capturing file history for this session (it did not honor the setting).」作废;按旧句逐字断言的格判红是正确行为。
9748
+ - **改说「按会话关不掉」(`not_offered`)**:用户关了 ∧ 没带(或不知道带没带)∧ 能力位 `on-always` ∧ 报 `on` ⇒「This engine always captures file history and cannot turn it off per session, even though file checkpoints are off in your settings.」;旧判据眼看到的「没照办」在这一形上判红是正确行为。
9749
+ - **零句**:能力位 `on-optional` 而这一发没带(还原文件那一次)、能力位 `off` / 读不到 / 认不出而没带或不知道带没带、用户没关、引擎报 `disabled`。旧判据眼在这些格上要「没照办」一句 —— 判红是正确行为。
9750
+ - **两版同**:带了声明 ∧ 报 `on` ⇒ 说一句(只换了措辞);报 `disabled` ⇒ 不说「没照办」;回执上没报 ⇒ 不渲「已关闭」。
9751
+ 2. **作废**(CC-294;§114 **G-FH7** 后半):「帧上缺席 ⇒ 渲『引擎没报』那一档」—— 本版没有那一档的句子,回执上没报(或报了表外词)⇒ `unknown`、零句。按「要有一句引擎没报」写的格判红是正确行为;「不渲已关闭」一半不变。
9752
+ 3. **改读**(CC-294;与上一份宿主侧实现的差,零句之间):回执上报了**表外词**且用户没关 ∧ 声明不是 sent ⇒ `unknown`(上一份宿主侧实现答 `not_declared`,而回执缺席时它答 `unknown`;本包两者同答);用户关了 ∧ 不知道带没带 ∧ 报 `disabled` ⇒ `unknown`(不知道带没带时分不出「带了且照办」与「没带、部署本来就不捕获」)。类表 12 格 / 宿主侧 144 格网格 18 格,全是零句之间,屏上不变。
9753
+ 4. (CC-299)「本包支持的最老服务端 = 本包测试用的最老那份服务端」(从没写成文,各处按这个默认读)作废 → 以 `SUPPORT_FLOOR` 为准。两者本版同值(服务端 7.104.0);以后底线按声明抬,测试夹具里低于声明的那几份可以下线,不再反过来决定底线。
9754
+ 5. (CC-299)「状态派生粗码表与服务端分发器逐词对拍」(§109 / §114 的说法;已发段不回改)→ 三向对拍:服务端分发器铸点、sdk ≥ 16.0.0 的同名常量(逐项同序)、服务端契约附录 A.1e 的表。判定口的答案逐词不变。
9755
+ 6. **改读**(CC-302):「请求体 `settings.permissions.allow` 恒缺席」→ 「能力位读数不是 `present ∧ grants === true` 时缺席;是时 = 投影后的非空 allow」。今天的一切引擎都不报这一位 ⇒ 实测仍是缺席;按旧句写的格在能力位真的那一形上判红是正确行为。
9756
+ 7. **新判据**(CC-302):「allow 规则到没到引擎」只按 `permissionsAllowGrantAvailable(observedPermissionsAllowGrant(baseUrl))` 断言,不按引擎版本号推。
9757
+ 8. **改读**(CC-291;EN-1):「通告码册八十六码」→ **八十五码**(§115 G-NM1 的长度眼作废,新门同名格接替);「运维面四个」→ **三个**(`context.tool_turn_repaired` / `mcp.server_redialed` / `skills.listing_truncated`);「用户面十六个」不变。
9758
+ 9. **作废**(CC-291;EN-2):§112 N-7 / G-N1 / G-N7 / G-N8 里「`readLegacyModeSeedMigrated`(已退役)读得出 `{ permissionMode?, droppedKeys, sessionId, runId }`」「受众 `operator` 的码含 `resume.legacy_mode_seed_migrated`」一类格 —— 本版起该码册外、读器不在(以 §2z 为准);既有段不回改。
9759
+ 10. **改读**(CC-291;EN-4):§115 UI-5 / G-UI5「`childSessionId` 本版不读,带它与不带它读数逐字节同」→ **读**:带它(自有非空串)⇒ 读数多 `childSessionId`;缺席 ⇒ 键不铸。按旧判据写的格在带 `childSessionId` 的输入上判红是正确行为。§115b「引擎 7.39.0 起父会话可能先后收到两条……读数分不开两者」→ 现在分得开(副本读数带 `childSessionId`、无 `runId`)。
9760
+ 11. **改读**(CC-291;SV-1):「`SEMA_ATTACHMENTS=full` 点满 literal-true 族 7 员」→ **6 员**;「`ATTACHMENTS_SPEC_KEYS` 全 10 键」→ **9 键**;「`-planModeReminder` 抛 literal-true 族不接受减号」→ 抛**退役句**(点名「已退役」与出路)。
9761
+ 12. **改读**(CC-291;EN-5 / EN-7;§87 / §112 / 门词汇表一类):「结算词十三词」→ **十四词**;「`policy_refused` 的 `who.party` 恒 `none`」→ **两代两说**:服务端 7.93.3 – 7.112.x 记 `none`,7.113.0 起记 `policy`(与 `policy_allowed` 同一方);「无人值守路径上机器放行读成 `human_allowed`」→ 服务端 7.113.0 起记 `policy_allowed`。按词判的谓词不变(`isPolicyRefusedGate` 只认词不认 party)。
9762
+ 13. **改读**(CC-291;EN-8):「`shell_floor` 是引擎闭集外的预告类」(§115 / 门 G-AC3 旧注)→ 引擎 7.39.0 起在 `ASK_CLASSES` 里,`unstated`(7.40.0)同;本包读器仍不判成员,按词分支带 `default` 的义务不变。
9763
+ 14. **作废**(§115d SL-1 终端处置句):「共用处置 `sema/queuedPromptSteer.ts:286-331`(留队列当下一条发、不重试)与它一致,零改动」—— 那一腿原有自铸的码字面与句子,终端自 1.0.141 起换读本包那一句;§115d 的终端坐标读的是 1.0.139(钉 0.86.0)的旧形,以终端当前源码为准。本包面零变化。
9764
+ 15. **改口**(§115d OP-1 处置列):「pending(请托方:成因行改读短语口,行形不变)」→ **declined** —— 终端自 1.0.140 起读本包整句口(OP-2),成因短语口无消费位;公面名 `taskRequestOmissionCausePhrase` 保留、不退役(网页端 / 桌面端要短语形仍可读;§115d 「成因短语(OP-1,请托方)」一段按此读)。
9765
+ 16. **改读**(CC-309;PR-1):§115 PR 行「『改了重发』只读状态码」→「只读状态码;给了同一终局的错误载体(`toolHistoryErrorCarrierOf` 铸的那一只)且判为会话历史 tool_use 错配 ⇒ 让位(`undefined`)」。不传载体的格两版逐字节同;传了错配载体的格按旧句要「改了再发」那一句的判红是正确行为。
9766
+
9767
+ ### 116r. §86 R-3 改口
9768
+
9769
+ §86 R-3(「未转的五名 · **declined / pending** · 今天转不干净(签名型来自上游只在 devDependencies 里的声明包)· 端的登录 / 令牌刷新 / scope 切换那条腿**继续直连**;退役条件本批到六 / 七」)**自 0.90.0 起作废**:这五名已转(RG-1 / RG-2),那条腿改从本入口取;「转不干净」的原因(声明面传递引用一个未安装的声明包)自 0.84.0 的 sdk 12.0.1 起上游已改为自带。§86 已发段冻结不回改,以本段为准;R-1「云控制面十个值」的计数自本版起读作十五个值(十个 + 本段五名)。
9770
+
9771
+ ### 116b. 缺席语义(逐键)
9772
+
9773
+ **sdk registry 五名转口(CC-136)**
9774
+ - **五名是函数引用,本包不增加读口**:没有「读不到 / 读不懂 / 上游没报」的投影问题 —— 调用的全部行为(令牌存储读写、拒绝时抛什么、轮询超时怎么收、响应里多出或缺少的字段)都是上游那一份实现的,本包**不补默认值、不替宿主选 `fetch`、不替宿主存令牌、不加 `catch`**。响应型带开放位(`[k: string]: unknown`),本包不窄化、不深拷。
9775
+ - **上游少了其中一名 / 改了名**:本包构建期 `export … from` 编译红、常驻门红(**不是跳过**),端不会在运行期拿到静默的 `undefined`。peer 地板之下的老 SDK 没有这五名:地板 `>=12.0.1` 把它挡在安装期。
9776
+ - **错误类**:五名抛出的 `OAuthFlowError` / `RegistryApiError` 就是本入口同名转出的那两只类的实例(同一类对象),`instanceof` 照旧。
9777
+ - **邻名缺席**:RG-5 列的名字在本入口**不存在**(`undefined`),不是「存在但抛错」;要用请托进来。
9778
+
9779
+ **引擎 7.40.1 / 服务端 7.113.0 / 7.114.0 / sdk 16 提货(CC-291)**
9780
+
9781
+ **通告**
9782
+ - `resume.legacy_mode_seed_migrated` **册外**:`engineNoticeInCatalog` 答 `false`、`readEngineNoticeFacts` 答 `undefined`(不抛)、`noticeAudienceOf` 答 `operator`(册外码的保守缺省;与它在册时的受众碰巧同值 —— 不是「这条是运维面」的判决)。老引擎(< 7.39.0)续跑 7.34.0 之前写下的停泊行时仍可能发它:端走册外兜底分流(渲引擎给的 `message`),没有 typed 事实(KL-411)。**没收到这条 ≠ 没发生迁移**(引擎 ≥ 7.39.0 不再迁、也不再说)。
9783
+ - `readUserInputUndrained`:`childSessionId` 缺席 = 这一条**不是**子代副本(引擎自己那一帧 / 服务端 `crashed` 臂 / 老引擎)—— **不等于**「这件事不在子代里」:老引擎(< 7.39.0)根本不发副本,子代里没用上的输入在父会话里没有这一条。在场 = 副本帧:此时 `sessionId` / `taskId` 是**父的**、`childSessionId` 是子代会话,`runId` 恒缺席(副本不带)。取值不是非空串 / 只在原型链上 / 读它就抛 ⇒ 只丢这一位、条数与别的位照交。
9784
+ - `userInputUndrainedNotice` 的 `childSessionId` 只认自有非空串(同读器);读它就抛 / 缺席 ⇒ 落自己那一句。`crashed` / 表外 `cause` / follow-up 带表外 `cause` 上带这一位不改句。句子不带任何 id。
9785
+ - 子代副本与子代自己那一帧是两帧:本包不合并、不跨帧去重(KL-410)。
9786
+
9787
+ **结算**
9788
+ - `policy_allowed` ⇒ `isHumanSettledGate` / `isPolicyRefusedGate` / 其余三只具名谓词**全答 `false`**(机器放行,不是人批的、不是拒);`ccToolDenialKindForToolEnd` 对它答 `undefined`(只认拒绝)。**缺席 `settlement` ≠ 没问过**(同 §87)。
9789
+ - `who.party` 读口开集:五词(`person` / `policy` / `engine` / `host` / `none`)与表外词都原样带回;缺 `party` ⇒ 整只结算不成形(同旧)。`who.approver` 是 **UNTRUSTED-for-display**(同旧):`unattended_class_answer` 是服务端 7.113.0 的取值,端只渲染、不据它鉴权。
9790
+ - 两代记法:服务端 < 7.113.0 的无人值守路径按类放行记 `human_allowed` + `person`,记录上无从与真人批准分开,本包如实读那个词、不反推(KL-412)。
9791
+
9792
+ **请求键**
9793
+ - `SEMA_ATTACHMENTS` 显式点名 `planModeReminder`(含大小写变体、`+` / `-` 前缀、`=值`、单 token / 多 token)⇒ `attachmentsForRequest` **抛**:句子点名「retired with core 7.39.0 / server 7.113.0」与出路(要 plan 姿态发 `permissionMode: "plan"`)。其余未登记词的老语义不动(单 token ⇒ 回落默认对;多 token 里 ⇒ 抛「unknown attachments key」)。宿主手写的 `attachments` 对象:点名这一键(任何大小写 / 前后空白 / `+` `-` 前缀 / `=值` 形,值不是 `undefined`,或这一键是取值器)⇒ `buildTaskRequest` 抛 `TypeError`,句子按「键」措辞 —— 精确键 `planModeReminder` 上 wire 会被服务端 ≥7.113.0 整发 400,别的拼写服务端忽略、本包从严拒(显式点名退役键的宿主多半以为它还管用);值为 `undefined` 的数据属性按缺席(JSON 序列化本来就丢它):不抛、请求体上不带这一键。只在带 `attachments` 的车道(`live: true` 的交互 / print)判;别的车道这一位本来就不上请求体。**没有这一键 ≠ 没有 plan 姿态提醒**:服务端 ≥7.113.0 / 引擎 ≥7.39.0 在 plan 模式运行里由引擎自己陈述(KL-409)。
9794
+ - **拒绝的错误型(CC-316;SV-7)**:env 口与装配口抛**同一个类** `AttachmentsSpecRefused`(`TypeError` 的子类,`instanceof Error` / `instanceof TypeError` 也为真;`name` 恒 `'AttachmentsSpecRefused'`)。`message` 的形:env 口 `SEMA_ATTACHMENTS: refusing token "<token>" — <why>. Legal tokens: <allowed 以 ' | ' 相连>`;装配口 `buildTaskRequest: refusing attachments key <键的 JSON 串> — <why>`;两口逐字节同 0.89.0(env 口)/ 本版此前(装配口)。自有数据位逐位读法:`token` —— 被拒的那个 token(env 口:整串小写之后的那一段,所以点名 `planModeReminder` 的 token 是 `planmodereminder`、`+budgetUsd` 是 `+budgetusd`;装配口:对象的键原样,含前后空白与前缀);`why` —— 理由半句(上面 `message` 里拼进去的那一份);`allowed` —— 合法形的**冻结**数组(env 口:`off` / `full` / `all` / `default` / `<literalTrueKey>` / `+<literalTrueKey>` / `-agentListing` / `-skillsListing` / `todoReminderMode=baseline|off` 九项,其中两项是带占位的文法写法;装配口:`ATTACHMENTS_SPEC_KEYS` 的九个键名;就地改写抛 `TypeError`、不串到下一次抛出);`key` —— **只有装配口抛出的实例上有**(= `token`),env 口抛出的实例没有这一自有位(`Object.hasOwn(e, 'key')` 为假),壳据此分是哪一口抛的。不同拒绝原因共用这一个类、不分子类:判「是不是这一类拒绝」按 `instanceof`,判「哪个 token」按 `token`,不要拿 `why` 的文字分支(句子可能润色)。缺席语义:这几位都由抛出方在构造时一次写入,没有「读不到」;唯一可缺席的是 `key`(见上)。依旧解析消息串的壳照常工作,新写的按类接。
9795
+
9796
+ **问类 / 其余**
9797
+ - 问类读器开集:`ASK_CLASSES` 里的每个词(含 `shell_floor` / `unstated`)作 `askClass` / `classes` 都原样在场;缺席不是「普通问」(同 §115b)。
9798
+ - `steering_injected` 的 `output_style` 来源(引擎 7.39.0 新增;服务端 7.113.0 不接 `outputStyle` 席,经服务端不会出现):落默认句 `Steering injected (output_style)`、不丢。
9799
+
9800
+ **文件历史一句(CC-294)**
9801
+
9802
+ **判定入参四维(`FileHistoryLegNoticeInput`)**
9803
+ - `capability` 缺席 / 不是读数形 / 读它就抛 ⇒ 按「能力位不知道」判(同 `{ kind: 'unobserved' }`):声明不是 sent 时**从不出句**;声明 sent ∧ 报 `on` 仍是 `not_honored`(声明事实不看能力位)。判类用 `fileHistoryCaptureMode`,与请求片段口 `fileHistoryDeclarationField` 同一只判据 —— 片段口发不发声明与判定口怎么读能力位不会两说。
9804
+ - `declaration` 缺席 / 不是 `sent` / `not_sent` 两词 ⇒ `unknown`(不是 `not_sent`)。
9805
+ - `captureOffByUser` 只认严格 `true`;缺席 / `"true"` / `1` ⇒ 没关(与片段口同律:片段口在这些值上也不发声明)。
9806
+ - `legWord` 缺席 / 非串 / 空串 / 表外词(含大小写变体 `ON`、带空白的 ` on`)⇒ 没说一个读得懂的词 ⇒ `unknown`、零句;**不折 `disabled`、不折 `on`**。
9807
+ - 入参对象只认**自有**属性:原型链上的同名键不算在场(按该维缺席判);入参读不动(非对象 / 撤销式代理 / 取值器抛)⇒ `unknown`;绝不抛。
9808
+
9809
+ **出站体读口 `fileHistoryDeclarationOfBody(body)`**
9810
+ - 自有、可枚举的**数据属性** `fileHistory` 恰为 `"disabled"` ⇒ `sent`;读得动的普通对象而没有这一键(或别的值、原型链上才有、不可枚举)⇒ `not_sent` —— 与 JSON 序列化后上 wire 的那一份同答。
9811
+ - 🔴 证明不了上 wire 的就是这一份 ⇒ `unknown`(不是 `sent`:`sent` 是能让端说「没照办」的那一个答案):体带可调用的 `toJSON`(自有或继承 —— 上 wire 的是它的返回值)、这一键是取值器(读口读的那一次不是 SDK 序列化的那一次)、体上**任何**自有可枚举键是取值器(序列化逐键取值时会跑它,它可以删 / 改这一键;符号键也算)、描述符上的值与属性访问(`body.fileHistory`;代理的取值陷阱、序列化取值都走这一步)不相同、这一键的值是非 null 对象(`new String('disabled')` 序列化成 `"disabled"`、带 `toJSON` 的对象可以返回任何值 —— 本口证明不了序列化成什么;原始值与函数值〔JSON 丢键〕照旧)。三只陷阱同口径撒谎的代理、嵌套值在序列化时回头改顶层体,本口仍看不见(KL-401)。体不是普通数据对象时先物化:`const wire = JSON.parse(JSON.stringify(body))`,对 `wire` 记、把 `wire` 交给 SDK。
9812
+ - 非对象 / 数组 / 读描述符或 `toJSON` 就抛 ⇒ `unknown`,宿主把它交给 `declared` 时不记(等于没调)。
9813
+ - 🔴 记录点是**装配完、交给 SDK 之前的那一份体**,不是片段口的返回:片段口给了而宿主装配后拿掉这一键(还原文件那一次)时,按片段记会记成 `sent`、引擎照常捕获 ⇒ 误说「没照办」。
9814
+
9815
+ **账本 `createFileHistoryDeclarationLedger()`**
9816
+ - `declarationOf(runId)` 答 `unknown`:这条 run 从没绑过(恢复进来的 / 别的进程提交的 / 接管重连的 / 本进程换了一只账本)、绑上的提交从没记过、同一条 run 上的记录互相矛盾(一只 sent 一只 not_sent,或同一提交先后记了两个词)、run id 不是非空串 —— **都不是 `not_sent`**。
9817
+ - `boundToRun` 只在「这一帧证明引擎为这次提交建了 run」时绑:开流首帧 `meta`、开流重放的审批卡 / 撤卡、会话已有在跑 run 的拒收帧(含幂等重放形)都**不绑** —— 拒收帧带的 `activeTaskId` 与重放卡带的 `taskId` 是**别的** run 的 id,宿主从它们取 id 来绑也不会把这一发的声明记到别人头上。判据与 `createPromptDeliveryLedger().deliveredByFrame` 是同一只。
9818
+ - 没有读回 / 落盘口:声明事实说的是**本进程**放上 wire 的那一份体;换进程之后的 run 一律 `unknown`(零句),不凭旧记录指控引擎。
9819
+ - `declared` / `boundToRun` 对坏键 / 坏 run id / 表外词答 `false`、不记、不抛;`declared(key, 'unknown')` 不记。
9820
+
9821
+ **投递账本(FH-5)**
9822
+ - `deliveredByFrame(batch, 撤销式代理帧)` 0.89.0 外抛 `TypeError` → 本版不记、不抛;同包其余入口在撤销式代理上仍外抛(KL-402)。
9823
+
9824
+ **hooks 工具别名(CC-298)**
9825
+ - 表是构建期冻结的字面常量,运行期不读引擎 —— **没有「引擎读不到」这回事**;表恒非空(生成器遇目录读口缺席 / 抛 / 形不对、一张别名都没有一律拒生成,不落盘空表冒充「引擎没有别名」),恒与构建时装的引擎一致。
9826
+ - `canonicalHookToolName` 对表外名(含空串、参数名、`constructor` / `__proto__` / `toString` 等原型键)⇒ **原样返回**,不是 `undefined`、不是空串;对规范名自己 ⇒ 原样。逐字比 core 原形:`listpeers` / `ListPeers `(尾随空白)/ 含零宽字符的写法都**不**命中。
9827
+ - 入参不是串(JS 宿主给了 `undefined` / `null` / 数 / 对象 / 数组 / `String` 对象)⇒ **原样返回同一个值**,不抛、不按 `toString` 当串认;型契约是 `string`,这是对 JS 宿主的宽容,不是第二种用法。
9828
+ - `hookToolAliasesOf()` 每次交同一个冻结实例;键 = 别名、值 = 规范名;**null 原型**:拿工具名当键直接取值(`table[name]`)对 `constructor` / `__proto__` 一类原型键读 `undefined`;对返回对象加键 / 改值进不去(ESM 严格模式下抛 `TypeError`)。
9829
+ - 射程:只含静态目录里**内置**工具的别名。调用方 `spec.tools` 声明的别名、MCP 工具的别名不在静态目录里,不在表;参数别名(`pathTarget.aliases`)不是工具别名,不在表;表是构建时那一版引擎的快照,引擎之后新增的内置别名要等本包下一版换钉才进(KL-391)。
9830
+ - 本口只回答「这个名字是不是某个内置工具的别名」;matcher 的通配 / 正则语法不在本口 —— 端按自己的 matcher 语法逐段取出工具名后再过本口。
9831
+
9832
+ **支持底线 / 引擎版本三态 / 粗码表(CC-299)**
9833
+ - `SUPPORT_FLOOR` 三项恒在场(构建期常量,冻结)。本版取值是保守初值:服务端底线取本包测试必跑的最老那份服务端,不是各端回报的底线;各端回报后按回报改值(KL-404)。
9834
+ - `core` 一项是「那一版服务端精确依赖的引擎版本」:活引擎的 wire 上**没有**引擎版本可读(`GET /v1/capabilities` 的 `version` 与 `/health` 的 `version` 都是服务端包的版本)⇒ 端不按它判任何活引擎,它只供本包自己的退役条件(KL-407)。
9835
+ - `supportFloorOf` 答 `undefined` = 「本包没有对这个名字声明底线」(大小写不同 / 带空白 / 原型链上的名字 / 非串同此),**不是**「不设底线、什么版本都支持」。
9836
+ - `engineVersionTier` 答 `'unknown'` = 版本串读不懂:没给 / 非串 / 空串 / 预发布 / 构建元数据 / `v` 前缀 / 首尾空白 / 段数不是三 / 前导零 / 服务端读不出自身版本时报的 `"unknown"`。**不是**「旧」也**不是**「新」—— 怎么处置由端按自己的车道定(本包不替端选放行还是拒绝)。低于门槛的预发布(如 `7.103.0-rc.1`)同样是 `'unknown'`,不是 `'legacy'`。
9837
+ - `'legacy'` = 低于门槛:本包不再承诺在这台引擎上行为正确;**不是**「一定不能用」。`'engine'` = 不低于门槛;**不是**「这台引擎有某某功能」—— 按功能判的版本闸 / 能力位照旧各问各的。
9838
+ - `floor` 缺席 / 等于声明 ⇒ 与不给同答;低于声明 ⇒ 按声明判(只能抬不能降)。
9839
+ - 粗码:sdk 12 – 15.4 没有同名常量 —— 读本包那一份;sdk ≥ 16.0.0 两份同名同序。服务端 < 7.113.0 的契约里没有那一节,不影响本包判定(判定只读本包的表)。
9840
+
9841
+ **投递账本绑定方法(CC-300)**
9842
+ - `knownUndeliveredMessage(message)` 答 `false` 的各种情形**都不是**「这条交出去了」:行没有 `uuid`(缺席 / 非串 / 空串 / 取值器抛)· 这条消息没走过提交路径(恢复进来的旧轮次、本地命令回显 = 不知道)· 入参不是对象(`undefined` / `null` / 数字 / **裸串**)。`true` 恒指「本账本记过它 attempted、且没记 delivered」。
9843
+ - 裸串不是消息行:`ledger.knownUndeliveredMessage('<uuid>')` 恒答 `false`,按 uuid 问用 `ledger.knownUndelivered('<uuid>')`;反向,`ledger.knownUndelivered({ uuid })` 同样恒答 `false`(对象不是 uuid)。两个口入参域互斥。
9844
+ - `withoutUndelivered(messages)`:行表不是数组 ⇒ 空数组(不是「没有要剔的行」);数组里的非对象元素(`null` / `undefined` / 串 / 数字)原样保留(不知道不剔);行的 `uuid` 取值器抛 ⇒ 这一行原样保留。
9845
+ - 用 `fromRecords` 读回的记录建的账本:读回记录里只有 attempted ⇒ 确知没交出去;attempted + delivered ⇒ 交出去;读回里没有这行的记录(含被坏行跳过的)⇒ 两判皆假 —— 与现场记下的同权,不因「是读回来的」多一档;账本从没见过的旧消息两判皆假不变。
9846
+ - 方法是闭包绑定,不读 `this`:脱离账本取出、`this` 缺席、`this` 被改、`{ ...ledger }` 展开拷贝、账本被再冻结之后答案不变;读的是账本**此刻**的状态(之后的写入立刻可见,不是快照),两只账本互不串。
9847
+
9848
+ **权限规则(CC-302)**
9849
+
9850
+ **装配口(PM-1 – PM-5、PM-7、PM-8)**
9851
+
9852
+ - 能力位读数不是 `present ∧ grants === true`(`unobserved` / `not_reported` / `present` 而 `grants: false` / 宿主自拼的坏读数)⇒ 不发 allow;壳侧照旧对引擎发来的审批按 allow 规则同步放行(与上一版同一条路)。
9853
+ - `allow` 缺席(`undefined` / `null`)⇒ 不发;投影之后为空 ⇒ 不发(永不发 `allow: []` —— 把 allow 当名单读的引擎上空名单是「全拒」)。
9854
+ - `deny` / `ask` 缺席 ⇒ 空桶 ⇒ 请求体上没有这一键。
9855
+ - `origins` 缺席 / 某一桶的来源表缺席 / 表里查不到这条规则 / 来源词不在信任序里 ⇒ 这条规则按最不受信处置,保持入参原序。来源表按**原串**查(归一之前的那一串);表里有、桶里没有的规则一条都不加。
9856
+ - `cliDeny` 缺席 ⇒ 不并入;在场 ⇒ 过同一只安全投影后排在命令行那一档。
9857
+ - 三只桶都空 ⇒ `{}`(没有 `permissions` 键)。
9858
+ - 引擎规则编译器对某条规则**答不上来**(抛 / 回非数组)⇒ deny / ask 那一条照发,allow 那一条不发(判不出一律往收紧落)。
9859
+ - 与终端 1.0.140 的五类登记差异(其余逐字节同):① 规则名恰是 `Object.prototype` 上的成员名(`toString` / `constructor` …)⇒ 终端整份投影抛错,本口当普通名字判;② 宿主当前目录不以 `/` 开头 ⇒ 终端不给规则编译根基、相对路径规则判「编译不了」而不发,本口照发(收紧方向;KL-395);③ 规则数组有空洞而原型链上在那个下标有值(`Array.prototype` 被写过)⇒ 终端把那个值当规则发,本口 `TypeError`(静默跳过会丢一条 deny / ask,照读是替原型链上的写入者发规则)。纯空洞两边都跳过;④ 整服务器 / 整 peer 写法(`mcp__<服务器>` / `a2a__<peer>`)⇒ 终端丢,本口改写成原名 + `__*` 投(PM-9)。
9860
+ - 整工具名同过编译器(三桶同一条;CC-302 修订,PM-11):每个要投出的整工具名 —— 改写出的与归一后没改名的 —— 都过引擎规则编译器**同一只判定、同一条策略**:拒收 ⇒ 不投(规则留在客户端匹配器上);答不上来(抛 / 回非数组)⇒ deny / ask 照投、allow 不投。名字里带 `)` / `\`(没有 `(`)的整工具规则(`shell\runner(*)` 归一成 `shell\runner`、`odd)name()` 归一成 `odd)name`,含协议名 `mcp__s)rv__tool` 的服务器段与工具段)因此不上请求体;含 `(` 的整工具名本来就由安全投影挡下。修前(0.89.0 的终端 1.0.140 与本版此前)只有改写出的名字过编译器,上面这几形名字没变、跳过校验照投,引擎对它们答 `invalid.paren`、服务端整请求 422。本机实测(core 7.40.1,U+0000 – U+30FF 逐字符放进裸名 / 协议名服务器段 / 协议名工具段 / 整服务器写法,裸形与 `(*)` 形各一遍):修后不投的恰是 `(` `)` `\` 三个字符,不论放在哪一段;修前裸名与两段里只有 `(` 不投、`)` 与 `\` 照投。登记差异 ⑤:终端 1.0.140 对这一形照发,本口不投(KL-418)。
9861
+ - 整服务器 / 整 peer 写法(三桶同一条;引擎协议前缀表上的每一个协议,今天 `mcp__` / `a2a__`):按引擎读裸规则的读法先去两端空白(`mcp__srv ` / ` a2a__peer` 引擎都读作去空白那一形),再改写成原名 + `__*` 过安全投影;服务器 / peer 段以 `_` 结尾的不改写(`srv_` + `__*` 在第一个 `__` 处拆成服务器 `srv`、判决与裸形不同);改写出的名字过引擎规则编译器、拒收的不发(归整工具名同过编译器那一条,PM-11 / KL-418);空段(`mcp__` / `a2a__`)/ 空工具段(`mcp__a__`)/ 内容形 `mcp__<服务器>(x)` / 大小写不同的前缀 / 引擎不认得的前缀不改写、照旧不发 —— 这几形与服务器 / peer 段以 `_` 结尾的只留在客户端匹配器上(KL-396)。协议前缀问 `protocolOf` 端口(引擎的协议前缀表,本包不手抄);五只端口缺任一而有规则要投 ⇒ 抛并点名(同 PM-8)。
9862
+ - 引擎规则编译器对某条 deny / ask 规则答不上来 ⇒ 那一条照发、未经校验;远端引擎若编译不了它,整份请求 422(KL-414)。装着的另几只端口自己抛(`RETIRED_TOOL_NAMES.has` / `protocolOf` / `ruleToolGrammarOf`)⇒ 原样外抛(装 core 的同名实现时不发生)。
9863
+
9864
+ **能力位(PM-6)**
9865
+
9866
+ - `unobserved` = 本进程没有这台引擎可用的能力读数(没收到 / 最近一次读不懂);`not_reported` = 路径上任一段缺席(**不是**「不支持」);`present` 带引擎报的布尔。
9867
+ - 中间段在场而不是普通对象、叶子在场而不是布尔 ⇒ 读不懂 ⇒ 删格(⇒ `unobserved`),不留上一台引擎的读数。原型链上的段不算在场。
9868
+ - 位名候定:服务端尚未发布这一位;定名不同时下一版改读(KL-392)。
9869
+ - doctor 句 `permissionsAllowGrantDoctorDetail` 从判据同一只派生:说「sent」恒等于判据真;宿主自拼的坏读数(`grants` 非布尔 / 缺席、不认识的 `kind`、非对象、`null`、位只在原型链上、读它就抛)⇒「读不出」那一句,不说 sent、不说「引擎说不」、不抛。
9870
+
9871
+ **能力位读数冻结(CR-1)**
9872
+
9873
+ - 读口(十八只 `observed*()`)交出的读数是读账里那一只对象,0.90.0 起逐层冻结 —— `present`、`not_reported` 与逐位读器某一位 `malformed` 的读数同律:就地改它在非严格模式下无效、严格模式抛 `TypeError`,再读仍是原值。要改就拷一份再改。未观测读数(`unobserved`,含畸形删格之后)每次新铸、不进读账、不冻(改写它不影响下一次读);交给 tee 的能力回体不冻(读数不与它共用对象)。
9874
+
9875
+ **「改了重发」让位(CC-309,PR-1)**
9876
+
9877
+ - 载体由本包铸:`toolHistoryErrorCarrierOf(同一终局帧)`(`done` 帧 / 它的 `result` / `failed` 帧都行)。本包终局行判错配读的就是这一只,宿主把它的返回值原样交给判定口 ⇒ 行上有错配键 ⇔ 判定口让位。壳自拼的 `{ code, status, message }` 照收,但只有本包铸的那一只保证与行上的键同答(服务商状态取 `apiFailure.status`,没有则取服务商拒绝详情的 `status` —— 自拼时漏掉后一处,两边就两说)。
9878
+ - `toolHistoryErrorCarrierOf` 只读自有数据位:取值器 / 只在原型链上的位 / 读它就抛 ⇒ 该位缺席;不是 failed 终局(完成 / 治理挡下 / 暂停 / 读不出)、入参不是对象 ⇒ 空载体 `{}`(判型答「不是错配」);终局行不落在 `API Error:` 臂 —— 带占锁位 `activeTaskId` 的 409 占锁行、治理 / 契约终态行、以模型输出问题句开头的行 —— 同样空载体:选臂与铸行处读同一只判据,那几臂上本包不判错配、不补 `/rewind` 句,判定口也就不让位。产出冻结、null 原型(按属性访问读它只看得到它自己的三位)、只带在场的位。
9879
+ - 同一帧同一拍只读一遍:本包终局行**选臂与铸载体用同一份读数**(铸行处算好一份交给载体铸口,载体铸口不再对同一帧重读)。占锁位 `activeTaskId` / 终局码这类位若是「只在某一次读答某个值」的取值器(只有宿主自建对象可达,JSON 帧上不可达),行文与行上的错配键仍同源:占锁话的那一行不会带错配键与 `/rewind` 句,错配行也不会因为第二次读答了占锁而丢键。公面口 `toolHistoryErrorCarrierOf(同一帧)` 自己调一次也只读一遍。「有没有终局行」只有一个判据 —— 错误句非空:空串句(`failed` 帧 `errorMessage: ''`)不出终局行,载体也是空载体。
9880
+ - `carrier` 缺席 = 不让位(与 0.89.0 逐字节同);在场 ⇒ 原样交给 `classifyToolHistoryMismatch`(同一只判型、同一读法:属性访问、受保护读),两只公面口对任何载体同答 —— 取值器照读、原型链上的位照读(SDK 错误对象这类类实例可直接交);不是对象 / 读它就抛 / 撤销式代理 ⇒ 判不出 = 不让位、照旧给句、不抛。每读一次答不同的取值器,两只口各读一次时可能两说(本包铸的载体没有取值器)。判为错配 ⇒ `undefined`:**不是**「不能改了重发」,而是同一行已有 `/rewind` 出路句、两句不同时给。`detail` 不是服务商拒绝 / 缺席时载体不起作用(照旧 `undefined`)。
9881
+ - 🔴 让位之后屏上剩哪一句看车道:`/rewind` 出路句只在交互车道且宿主声明本面有 `/rewind`(`EmitContext.offersRewind`)时由本包补在那一行上;`-p` / 工具车道、没声明 `/rewind` 的宿主、或「只回退对话」判官答 unavailable 时那一行不补出路句 ⇒ 让位之后两句都没有(行上只有错误原文与错配键)。
9882
+
9883
+ **设置 hooks 的 matcher(服务端 7.114.0,HK-1)**
9884
+
9885
+ - 本包对 matcher 不求值、不预检:装配口原样上请求体,跳过口按原串做键(两端空白不归一)。服务端 ≥7.114.0 对「选中别名、选不中正名」的 matcher 整请求 400,句子点名别名与正名 —— 那一句原样到宿主;7.113.0 只拒字面形与竖线名字表形(`ListPeers` / `Read|ListPeers`),更老的一律受理(别名那一组运行期永不命中、一句话都没有)。本包没有提交前的预检,**没被本包拒不等于服务端会收**(KL-416)。
9886
+
9887
+ ### 116c. 黑盒判据骨架
9888
+
9889
+ > 🔴 标「本版证明」的格在**上一版(0.89.0)**产物上必须 FAIL、在 0.90.0 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读之后的行为(包层跑不了)。两版读数原样附在括注里的格,请验收方记下自己两次跑的产物标识(版本 + tarball shasum)。
9890
+
9891
+ **sdk registry 五名转口(CC-136)**
9892
+ - **G-RGT1**(本版证明;同一对象):在 sdk 12.0.1 / 15.3.0 / 16.0.0 三代各装一次,`import * as reg from '@sema-agent/client-core/registry'` 与 `import * as up from '@sema-agent/sdk/registry'`,五名逐个 `reg[n] === up[n]` 为真;本入口全部十五个值同样逐个为真。
9893
+ - **G-RGT2**(本版证明;在场):三代上五名在该代 sdk 的 JS 产物里是函数、在声明入口里是值级具名导出(`export { type X }` 不算);删掉其中一名的 sdk 副本 ⇒ 本包常驻门红(不是跳过)。
9894
+ - **G-RGT3**(本版证明;型自带):五名所在声明文件出发的相对 import 闭包零裸说明符;不继承祖先 `node_modules` 的干净树上 `skipLibCheck: false`,`import { 五名 } from '@sema-agent/client-core/registry'` 零 `Cannot find module`(干净树按装着的 12.0.1 量,另两代按声明闭包判);返回型与入参型不是 `any`(把 `device_code` 赋给 `number` 必须报错、`requestDeviceCode(123)` 必须报错)。
9895
+ - **G-RGT4**(本版证明;不吞错):五名对一个会抛的上游行为(例如令牌端点回 4xx)抛出的就是上游的错误类实例,本包不改写、不加包装。
9896
+ - **G-RGT5**(本版证明;表外名不转 —— 0.89.0 恰十个名字):`Object.keys(await import('@sema-agent/client-core/registry'))` 恰十五个名字,RG-5 列的十四个邻名一个都没有;同入口的上游里这些邻名确实存在(对照物料)。
9897
+ - **G-RGT7**(回归约束;根干净):`import * as root from '@sema-agent/client-core'` 上本入口的十七个名字(十五值 + 两型)一个都没有;根公面运行期导出不因本项变化。
9898
+
9899
+ **引擎 7.40.1 / 服务端 7.113.0 / 7.114.0 / sdk 16 提货(CC-291)**
9900
+
9901
+ > 两版读数原样附在括注里(0.89.0 = 发布 tarball 实跑,0.90.0 = 本版实跑);请验收方记下自己两次跑的产物标识(版本 + tarball shasum)。纯包层、只走根入口公面;服务端夹具(可选)= 新一代服务端 ≥7.113.0(7.113.0 内嵌引擎 7.39.1;7.114.0 内嵌引擎 7.39.2,两者在 G-SV2 – G-SV4 上同答)/ 老一代 7.111.0(内嵌引擎 7.38.2)npm 包。
9902
+
9903
+ - **G-EN1**(本版证明):`ENGINE_NOTICE_CODES.length`;`typeof readLegacyModeSeedMigrated`〔已退役〕;`engineNoticeInCatalog('resume.legacy_mode_seed_migrated')`;`noticeAudienceOf(同)`;`readEngineNoticeFacts({ code:'resume.legacy_mode_seed_migrated', message:'m', detail:{ migrated:{ droppedKeys:['a'] }, sessionId:'s', runId:'r' } })`。(0.89.0:`86` / `function` / `true` / `operator` / `{ code, audience:'operator', facts:{ droppedKeys:['a'], sessionId:'s', runId:'r' } }`;0.90.0:`85` / `undefined` / `false` / `operator` / `undefined`)
9904
+ - **G-EN2**(本版证明):`readUserInputUndrained({ code:'task.user_steer_undrained', message:'m', detail:{ steer:2, cause:'leg_end', taskId:'pt', sessionId:'parent-s', childSessionId:'child-s' } })` 与它的 `userInputUndrainedNotice`;follow-up 同法(`followUp:1`、无 `cause`)。(0.89.0:`{ kind:'steer', count:2, cause:'leg_end', taskId:'pt', sessionId:'parent-s' }`〔无 `childSessionId`〕/ `2 messages you sent while the run was in progress were not used before the run ended and will not be delivered. Send them again if you still need them.`;0.90.0:读数多 `childSessionId:'child-s'`、句子 `2 messages you sent while the run was in progress were not used before a sub-agent's run ended and will not be delivered. Send them again if you still need them.`;follow-up 句 `1 follow-up message you queued was not used before a sub-agent's run ended and will not be delivered. Send it again if you still need it.`)。真铸点:引擎 `undrainedUserInputNotices({ steer:2, followUp:1 }, 'ct', 'child-s', 'cr', { sessionId:'parent-s', taskId:'pt' })` 四帧(自己两帧 + 父会话副本两帧),副本读成 `{ …, taskId:'pt', sessionId:'parent-s', childSessionId:'child-s' }`、无 `runId`;自己那两帧读数与 0.89.0 逐字节同。负控:`childSessionId` 取 `''` / `7` / `null` / `['c']` / 取值器抛 / 只在原型链上 ⇒ 只丢这一位、条数照交;`crashed` / 表外 `cause` / follow-up 表外 `cause` 上带它句子不变。
9905
+ - **G-EN3**(本版证明):`SETTLEMENT_KIND_WORDS.length` 与是否含 `policy_allowed`;`isHumanSettledGate(gateOutcomeOf({ gate:{ disposition:{ kind:'allowed' }, settlement:{ kind:'policy_allowed', who:{ party:'policy', approver:'unattended_class_answer' }, when:1 }, origin:'ask' } }))`;`gateOutcomeOf` 读出的 `settlement`。(0.89.0:`13` / false / —〔`policy_allowed` 作开集词原样读得出,谓词答 `false`〕;0.90.0:`14` / true / `false`;读数两代都是 `{ kind:'policy_allowed', who:{ party:'policy', approver:'unattended_class_answer' }, when:1 }`)。回归约束:`policy_refused` 的 `who.party` 取 `none` 与 `policy` 两形 ⇒ `isPolicyRefusedGate` 同答 `true`;五个 party 词与一个表外词读口原样带回;`human_allowed` + `person` 老记法 `isHumanSettledGate` 仍 `true`。
9906
+ - **G-EN4**(回归约束):已装引擎 `ASK_CLASSES` 的每个词(含 `shell_floor` / `unstated`)作 `askClass` / 单员 `classes` 过卡投影都原样在场。(两版同)
9907
+ - **G-EN5**(本版证明):`AllowDenyPolicyOptionsView` 的键集与 core `createAllowDenyPolicy` 第一参逐键相等,`scope` 两侧都可选、字面联合 `"grant" | "narrowing"` 逐字同;`createAllowDenyPolicy({ allow:['Read'], scope:'narrowing' })` 装的那一只收到同一对象、`scope` 不被判 / 改 / 补缺省。(0.89.0:键集缺 `scope`〔型面〕;运行期透传两版同)
9908
+ - **G-EN6**(回归约束):`steeringLabel('output_style')` ⇒ `Steering injected (output_style)`、`steeringLabel('plan_mode')` ⇒ 原句(老引擎词留着);`output_style` 来源的 `steering_injected` 帧过投影不丢。(两版同)
9909
+ - **G-SV1**(本版证明):`ATTACHMENTS_SPEC_KEYS.length`、`Object.keys(attachmentsForRequest({ SEMA_ATTACHMENTS:'full' })).sort()`;`attachmentsForRequest({ SEMA_ATTACHMENTS:'default,planModeReminder' })` / `'planModeReminder'` / `'default,-planModeReminder'`。(0.89.0:`10` / `backgroundTasks,budgetUsd,changedFiles,mcpInstructions,planModeReminder,todoReminder,toolsDelta` / `{"backgroundTasks":true,"toolsDelta":true,"planModeReminder":true}` / `{"planModeReminder":true}` / 抛「`planModeReminder` belongs to the literal-true family …」;0.90.0:`9` / 六键不含 `planModeReminder` / 三者都抛、句子含 `retired` 与 `permissionMode`)。夹具:服务端 7.113.0 `dist/http/admission.js` 的 attachments 形说明键集恰为本包九键、带 `planModeReminder` ⇒ `400 request.field_invalid`;服务端 7.111.0 十键含它。
9910
+ - **G-SV2**(回归约束,夹具):真 `handleSessions` + 真 `createRequestGuards().runOwnerOk` 起在本机 http 上,非属主 `GET` 详情 / `/head` / `/events` ⇒ 404;7.113.0 码 `not_found.session`、7.111.0 码 `not_found.run`;属主 200 不变;本包 `fetchDelegatedPrompt`(`sessions.get`)经真 SDK client 打非属主 404 ⇒ `unreadable`(两代同答,不抛、可重试)。
9911
+ - **G-SV3**(回归约束,夹具):真 `handleRuns` 的 `run-steer`,不带 `Idempotency-Key`:7.113.0 的 `live.steer` 收到 `inputId === 回执 messageId === 账本受理的 messageId`;7.111.0 的选项里无 `inputId`。同一 `inputId` 的 `queued` / `applied` 两帧(不同 `eventId`)各投一帧中性账本臂、`inputId` / `delivery` / `eventId` 原样;投递账本两帧只记一次 delivered(按消息 uuid 记、不读 `inputId` 值;`inputId` 与 uuid 同值 / 不同值 / 缺席三形答案逐字相同)。
9912
+ - **G-SV4**(本版证明,夹具):7.113.0 真模块 `createUnattendedOnAsk(undefined)({ classes:['ordinary'] })` 答 `{ allow:true, settledBy:'policy', approver:'unattended_class_answer' }`(7.111.0:`true`);引擎铸口 `settledByDecider('policy','allowed', approver)` 铸 `policy_allowed` + `policy`;`isHumanSettledGate` 对它 `false`(7.111.0 一代:引擎 `SETTLEMENT_KINDS` 13 词、无 `policy_allowed`、只有 `settledByPerson`,机器放行记 `human_allowed`,`isHumanSettledGate` `true`);带这条记录的 `tool_end` 帧过投影不丢。
9913
+ - **G-SD1**(回归约束):`SEMA_SDK_WITNESS` 列出的每份 sdk(开发依赖 12.0.1 + 15.0.0 / 15.2.0 / 15.3.0 / 16.0.0 探针树)仍导出本包值级符号、仍声明 `TaskStats.costMicroUsd`、带地板理由的三处 12.x 声明;sdk ≥16.0.0 的 `Settlement` 词集(去重)与 core `SETTLEMENT_KINDS` 全等。没有 ≥16.0.0 见证 ⇒ 门打 `SKIPPED-SECTION`(必跑档红)。
9914
+
9915
+ **文件历史一句(CC-294)**
9916
+
9917
+ > 两版读数原样附在括注里。纯包层,只走根入口公面;零网络。记号:`R(w) = { kind: 'present', word: w }`,`U = { kind: 'unobserved' }`,`V(c, d, u, l) = fileHistoryLegNoticeVerdict({ capability: c, declaration: d, captureOffByUser: u, legWord: l })`,`S = fileHistoryLegNoticeSentence`。
9918
+
9919
+ **72 格真值表**(行 = 能力位类 × 声明 × 用户;列 = 回执上的词;能力位类经 `fileHistoryCaptureMode` 判:`off` / `on-always` / `on-optional` / 其余一律 unknown;用户 off = 严格 `true`;词 ? = 缺席 / 表外词 / 非串。NH = `not_honored`,NO = `not_offered`,H = `honored`,ND = `not_declared`,? = `unknown`)
9920
+
9921
+ | 格 | 能力位 | 声明 | 用户 | `on` | `disabled` | ? |
9922
+ |---|---|---|---|---|---|---|
9923
+ | 1–3 | off | sent | off | NH | H | ? |
9924
+ | 4–6 | off | sent | not_off | NH | H | ? |
9925
+ | 7–9 | off | not_sent | off | ? | ND | ? |
9926
+ | 10–12 | off | not_sent | not_off | ND | ND | ? |
9927
+ | 13–15 | off | unknown | off | ? | ? | ? |
9928
+ | 16–18 | off | unknown | not_off | ND | ND | ? |
9929
+ | 19–21 | on-always | sent | off | NH | H | ? |
9930
+ | 22–24 | on-always | sent | not_off | NH | H | ? |
9931
+ | 25–27 | on-always | not_sent | off | NO | ND | ? |
9932
+ | 28–30 | on-always | not_sent | not_off | ND | ND | ? |
9933
+ | 31–33 | on-always | unknown | off | NO | ? | ? |
9934
+ | 34–36 | on-always | unknown | not_off | ND | ND | ? |
9935
+ | 37–39 | on-optional | sent | off | NH | H | ? |
9936
+ | 40–42 | on-optional | sent | not_off | NH | H | ? |
9937
+ | 43–45 | on-optional | not_sent | off | ND | ND | ? |
9938
+ | 46–48 | on-optional | not_sent | not_off | ND | ND | ? |
9939
+ | 49–51 | on-optional | unknown | off | ? | ? | ? |
9940
+ | 52–54 | on-optional | unknown | not_off | ND | ND | ? |
9941
+ | 55–57 | unknown | sent | off | NH | H | ? |
9942
+ | 58–60 | unknown | sent | not_off | NH | H | ? |
9943
+ | 61–63 | unknown | not_sent | off | ? | ND | ? |
9944
+ | 64–66 | unknown | not_sent | not_off | ND | ND | ? |
9945
+ | 67–69 | unknown | unknown | off | ? | ? | ? |
9946
+ | 70–72 | unknown | unknown | not_off | ND | ND | ? |
9947
+
9948
+ 计数:NH 8 / NO 2 / H 8 / ND 21 / ? 33。规则(先中先得):① 词 ? ⇒ ? ② 声明 sent ⇒ 词 `on` ? NH : H ③ 用户没关 ⇒ ND ④ 词 `on` ∧ 能力位 `on-always` ⇒ NO ⑤ 声明 not_sent ∧(词 `disabled` ∨ 能力位 `on-optional`)⇒ ND ⑥ 其余 ⇒ ?。
9949
+
9950
+ **判定与句子**
9951
+ - **G-FH8**(本版证明):`V(R('on-optional'), 'sent', true, 'on')` 与 `S(…)`。(0.89.0:`fileHistoryLegNoticeVerdict` 不是函数;0.90.0:`'not_honored'` / 「The engine is still capturing file history for this session, though your settings asked it not to.」)
9952
+ - **G-FH9**(本版证明):`V(R('on-optional'), 'not_sent', true, 'on')` 与 `S(…)`。(0.89.0:不是函数;0.90.0:`'not_declared'` / `null`)
9953
+ - **G-FH10**(本版证明):`V(R('on-always'), 'not_sent', true, 'on')`、`V(R('on-always'), 'unknown', true, 'on')` 与 `S('not_offered')`。(0.89.0:不是函数;0.90.0:两格 `'not_offered'` / 「This engine always captures file history and cannot turn it off per session, even though file checkpoints are off in your settings.」)
9954
+ - **G-FH11**(本版证明):`V(U, 'unknown', true, 'on')`、`V(U, 'not_sent', true, 'on')`、`V(U, 'sent', true, 'on')`。(0.89.0:不是函数;0.90.0:`'unknown'` / `'unknown'` / `'not_honored'`)
9955
+ - **G-FH12**(本版证明):对 `l ∈ { undefined, 'partial_Word', 'ON', '' }` 与 72 格的其余三维全组合,`V(…)` 恒 `'unknown'`;`fileHistoryLegNoticeVerdict(Object.create({ capability: R('on-optional'), declaration: 'sent', captureOffByUser: true, legWord: 'on' }))`(四维全在原型链上)⇒ `'unknown'`。(0.89.0:不是函数;0.90.0:全 `'unknown'`)
9956
+
9957
+ **账本与出站体**
9958
+ - **G-FH13**(本版证明):`L = createFileHistoryDeclarationLedger()`;`L.declared('k', 'sent')`;`L.boundToRun('k', 'r', { type: 'meta', taskId: 'r' })`;`L.boundToRun('k', 'r', { type: 'done', result: { status: 'failed', errorCode: 'conflict.session_active_run', activeTaskId: 'r0' } })`;读 `L.declarationOf('r')`;再 `L.boundToRun('k', 'r', { type: 'text_delta', delta: 'x' })`;读 `L.declarationOf('r')`;另起一只账本把四只写口倒序调一遍(正文帧绑定 → 拒收帧绑定 → `meta` 绑定 → 记 `sent`)再读。(0.89.0:不是函数;0.90.0:前两次绑定答 `false`、第一次读 `'unknown'`、第三次绑定答 `true`、第二次读 `'sent'`、倒序那一只读 `'sent'`)
9959
+ - **G-FH14**(本版证明):`fileHistoryDeclarationOfBody` 对 `{ fileHistory: 'disabled' }` / `{}` / `Object.create({ fileHistory: 'disabled' })` / `null` / `{ fileHistory: 'disabled', toJSON() { return {} } }` / `Object.defineProperty({}, 'fileHistory', { enumerable: true, get: () => 'disabled' })`。(0.89.0:不是函数;0.90.0:`'sent'` / `'not_sent'` / `'not_sent'` / `'unknown'` / `'unknown'` / `'unknown'`)
9960
+ - **G-FH14c**(本版证明):`fileHistoryDeclarationOfBody` 对 `{ objective: 'o', fileHistory: new String('disabled') }`(`JSON.stringify` 得 `{"objective":"o","fileHistory":"disabled"}`)/ `{ fileHistory: { toJSON() { return 'disabled' } } }`(`JSON.stringify` 同样把这一键写成 `"disabled"`)/ `{ fileHistory: { mode: 'disabled' } }` / `{ fileHistory: ['disabled'] }`;对照 `{ fileHistory: 5 }` / `{ fileHistory: true }` / `{ fileHistory: () => 'disabled' }`。(0.90.0 修前〔本版此前〕:前四形 `'not_sent'` —— 前两形 wire 上其实带了关断声明;0.90.0:前四形 `'unknown'`,对照三形仍 `'not_sent'`)
9961
+ - **G-FH14b**(本版证明):`fileHistoryDeclarationOfBody` 对 `new Proxy({ fileHistory: 'disabled' }, { get: (t, k, r) => k === 'fileHistory' ? undefined : Reflect.get(t, k, r) })`(描述符报 disabled、取值答 undefined;`JSON.stringify` 得 `{}`)/ 先定义一只会删这一键的可枚举取值器 `other`、再赋 `fileHistory: 'disabled'` 的体(`JSON.stringify` 得 `{"other":1}`)/ `{ fileHistory: 'disabled' }` 后加一只可枚举取值器 / 诚实代理 `new Proxy({ fileHistory: 'disabled' }, {})`。(0.89.0:不是函数;0.90.0:`'unknown'` / `'unknown'` / `'unknown'` / `'sent'`)端到端:把前两种体交给真 SDK 发,假引擎收到的体不带 `fileHistory`、账本 `unknown`、零句。
9962
+ - **G-FH15**(本版证明):`r = Proxy.revocable({}, {}); r.revoke(); createPromptDeliveryLedger().deliveredByFrame(['u'], r.proxy)`。(0.89.0:抛 `TypeError`;0.90.0:`[]`)
9963
+ - **G-FH16**(端侧验收):终端接 `on-optional` 部署、关文件检查点提交一条,引擎回执报 `on` ⇒ 底栏出 G-FH8 那一句(百字符内读得到结论);同一会话用「回退代码」那一次提交 ⇒ 不出句;接 `on-always` 部署 ⇒ 出 G-FH10 那一句;回执不带这一段的老服务端 ⇒ 什么都不出。
9964
+
9965
+ **hooks 工具别名(CC-298)**
9966
+
9967
+ > 两版读数原样附在括注里(0.89.0 = 上一版的产物,0.90.0 = 本版实跑);请验收方记下自己两次跑的产物标识(版本 + tarball shasum)。纯包层,只走根入口公面;G-HA7 的引擎对照 = 开发依赖引擎 7.40.1 包根的 `describeToolCatalog()` 与 `rosterToolName(roster, name)`(引擎自己的名字解析:先按规范名认、再按别名认、都不是 ⇒ 原样)。前缀:G-HA = hooks 工具别名读口(CC-298)。
9968
+
9969
+ - **G-HA1**(本版证明):根入口 `hookToolAliasesOf` / `canonicalHookToolName` 是函数;根入口**没有** `HOOK_TOOL_ALIASES`(`hasOwn` 为 `false`)。(0.89.0:两名 `undefined`)
9970
+ - **G-HA2**(本版证明):`canonicalHookToolName('ListPeers')` ⇒ `'ListAgents'`;`canonicalHookToolName('ListAgents')` ⇒ `'ListAgents'`。(0.89.0:读口不存在)
9971
+ - **G-HA3**(本版证明):表外名原样 —— `Read` / `Bash` / `Write` / `Edit` / `mcp__srv__tool` / `path` / `file_path` / `ListPeer` / `ListPeersX` / `Unknown` / 空串 / 单空格 / `0` 以及原型键 `constructor` / `__proto__` / `toString` / `hasOwnProperty` / `valueOf` / `isPrototypeOf` / `toLocaleString` / `propertyIsEnumerable` / `__defineGetter__`,逐个 `canonicalHookToolName(n) === n`。(0.89.0:读口不存在)
9972
+ - **G-HA4**(本版证明):不折叠 —— `listpeers` / `LISTPEERS` / `Listpeers` / `listPeers` / `LISTAGENTS` / `listagents` / ` ListPeers`(前导空格)/ `ListPeers `(尾随空格)/ `\tListPeers` / `ListPeers\n` / `List\u200bPeers` 逐个原样;只有与引擎原形逐字相同的 `ListPeers` 命中。(0.89.0:读口不存在)
9973
+ - **G-HA5**(本版证明):非串入参 `undefined` / `null` / `7` / `0` / `true` / `{}` / `[]` / `['ListPeers']` / `Symbol.iterator` / `new String('ListPeers')` / `{ toString: () => 'ListPeers' }` / 一个函数,逐个原样返回同一个值(`Object.is` 相等)、整轮不抛。(0.89.0:读口不存在)
9974
+ - **G-HA6**(本版证明):`hookToolAliasesOf()` 两次调用 `===`、冻结、`Object.entries` 恰 `[['ListPeers','ListAgents']]`;`table['constructor']` / `table['__proto__']` / `table['toString']` / `table['Read']` 读 `undefined`;`table.Probe = 'X'` 与 `table.ListPeers = 'Evil'` 进不去(严格模式 / ESM 下抛 `TypeError`,非严格模式静默忽略),之后 `canonicalHookToolName('ListPeers')` 仍是 `'ListAgents'`。(0.89.0:读口不存在)
9975
+ - **G-HA7**(本版证明,夹具):对开发依赖引擎 7.40.1 —— 以 `roster = { entries: describeToolCatalog().map(e => ({ name: e.name, aliases: e.face.aliases ?? [] })) }`,对「`catalogToolNames()` 的全部名字 ∪ 目录各条规范名 ∪ G-HA3 / G-HA4 的全部探针」逐个断言 `canonicalHookToolName(n) === rosterToolName(roster, n)`(本版 79 个名字,零分歧);`Object.keys(hookToolAliasesOf())` 恰为目录里不是任何条目规范名的别名、逐键逐序(今天 `['ListPeers']`),值恰为声明它的条目的 `name`。(0.89.0:读口不存在。这一格是终端「别名对账格」换读后的形:包读口对夹具引擎)
9976
+ - **G-HA8**(回归约束):参数别名不进表 —— 引擎目录里 `pathTarget.aliases`(今天 `path`)的每个名字,`canonicalHookToolName(n) === n` 且不在 `Object.keys(hookToolAliasesOf())` 里。
9977
+ - **G-HA9**(端侧验收):终端换读后,壳侧源码不再持有别名镜像表(`ListPeers` 串字面量除测试夹具外零处);一条 matcher 写成 `ListPeers` 的 hook 与写成 `ListAgents` 的 hook 对同一只工具的调用命中同样的条目;别名对账格读的是包读口 + 夹具引擎。
9978
+
9979
+ **支持底线 / 引擎版本三态 / 粗码表(CC-299)**
9980
+ - **G-SF1**(本版证明):`Object.isFrozen(SUPPORT_FLOOR)` 且 `Object.keys(SUPPORT_FLOOR).sort()` 是 `['core', 'sdk', 'server']`;三值依次 `'7.33.8'` / `'12.0.1'` / `'7.104.0'`;`SUPPORT_FLOOR.server = '0.0.0'` 在严格模式下抛且值不变。
9981
+ - **G-SF2**(本版证明):`supportFloorOf('server')` ⇒ `'7.104.0'`;`supportFloorOf('Server')` / `supportFloorOf(' server')` / `supportFloorOf('toString')` / `supportFloorOf(null)` / `supportFloorOf(['server'])` ⇒ `undefined`。
9982
+ - **G-VT1**(本版证明):`engineVersionTier('7.104.0')` ⇒ `'engine'`;`'7.104.1'` / `'7.105.0'` / `'8.0.0'` ⇒ `'engine'`;`'7.103.999'` / `'6.999.999'` / `'7.99.0'` ⇒ `'legacy'`(按数比,不按串比)。
9983
+ - **G-VT2**(本版证明):`'v7.110.0'` / `'7.110.0-rc.1'` / `'7.110.0+build.5'` / `' 7.110.0'` / `'7.110.0\n'` / `'7.110'` / `'7.110.0.1'` / `'07.110.0'` / `'unknown'` / `''` / `'7.103.0-rc.1'` / `undefined` / `null` / `7110` / `new String('7.110.0')` ⇒ `'unknown'`,都不抛。
9984
+ - **G-VT3**(本版证明):`engineVersionTier('7.105.0', '7.106.0')` ⇒ `'legacy'`;`('7.106.0', '7.106.0')` ⇒ `'engine'`;`('7.103.5', '7.0.0')` ⇒ `'legacy'`(只能抬不能降);`('7.110.0', 'v7.106.0')` 抛 `TypeError`,错误文本不含 `v7.106.0`;`('nightly', 'v7.106.0')` 同样抛(先于版本判定)。
9985
+ - **G-VT4**(端侧验收,活引擎):读 `GET /v1/capabilities` 的 `version`,`engineVersionTier(version)` 在服务端 ≥ 7.104.0 上答 `'engine'`;服务端换成预发布版答 `'unknown'`。
9986
+ - **G-RL1**(回归约束):`STATUS_DERIVED_COARSE_CODES` 与 sdk 16.0.0 根入口的同名常量逐项同序相等(九词);九词各自 `isStatusDerivedCoarseCode` 答 `true`,`'conflict'` / `'not_found'` / `'Request.Rejected'` 答 `false`(同 0.89.0)。
9987
+
9988
+ **投递账本绑定方法(CC-300)**
9989
+
9990
+ > 纯包层,只走根入口公面。前缀 G-PD 续 §114c(G-PD1 – G-PD10)。
9991
+
9992
+ - **G-PD11**(本版证明):`const L = createPromptDeliveryLedger()` 之后 `typeof L.knownUndeliveredMessage` / `typeof L.withoutUndelivered`。(0.89.0:`'undefined'` / `'undefined'`;0.90.0:`'function'` / `'function'`)
9993
+ - **G-PD12**(本版证明):`L.attempted(['u1','u2'])` → `L.deliveredByFrame(['u2'], { type: 'text_delta', delta: 'x' })` ⇒ `L.knownUndeliveredMessage({ uuid: 'u1' })` 真、`({ uuid: 'u2' })` 假、`({ uuid: 'never' })` 假;`L.withoutUndelivered([{ uuid: 'u1' }, { uuid: 'u2' }, { uuid: 'never' }, { type: 'system' }])` ⇒ 只剩后三行、保序。(0.89.0:两句都抛「不是函数」)
9994
+ - **G-PD13**(本版证明):同一账本、入参依次取 `undefined` / `null` / `'u1'`(裸串)/ `7` / `{}` / `{ type: 'user' }` / `{ uuid: '' }` / `{ uuid: 5 }` / `{ uuid: 'u1' }` / `{ uuid: 'u2' }` / `{ uuid: 'never' }` / 读 `uuid` 就抛的对象 ⇒ `L.knownUndeliveredMessage(x) === promptKnownUndelivered(L, x)` 逐格成立(十二格全 `false`,除 `{ uuid: 'u1' }` 为 `true`);`L.withoutUndelivered(rows)` 与 `withoutUndeliveredPrompts(L, rows)` 逐元素同(`rows` 含非对象元素时同样);非数组入参(`undefined` / `'x'` / `{ length: 1 }`)两边都答 `[]`。(0.89.0:方法缺席)
9995
+ - **G-PD14**(回归约束):`L.knownUndelivered('u1')` 真、`L.knownUndelivered('u2')` 假、`L.knownUndelivered({ uuid: 'u1' })` 假;`promptKnownUndelivered(L, 'u1')`(裸串)假;`withoutUndeliveredPrompts(L, [{ uuid: 'u1' }, { uuid: 'u2' }])` ⇒ 只剩 `u2` 那一行。(两版同)
9996
+ - **G-PD15**(本版证明):`const { knownUndeliveredMessage: k, withoutUndelivered: w } = L;` `k({ uuid: 'u1' })` 真、`k.call(null, { uuid: 'u1' })` 真、`k.call({}, { uuid: 'u1' })` 真、`({ ...L }).knownUndeliveredMessage({ uuid: 'u1' })` 真、`w([{ uuid: 'u1' }, { uuid: 'u2' }]).length === 1`;`Object.isFrozen(L)` 真。之后 `L.deliveredByFrame(['u1'], { type: 'text_delta', delta: 'x' })` ⇒ `k({ uuid: 'u1' })` 转假(读的是活账本)。(0.89.0:`k` / `w` 为 `undefined`,调用即抛)
9997
+ - **G-PD16**(本版证明,读回):`const R = createPromptDeliveryLedger(); R.fromRecords([{ u: 'a', s: 'a' }, { u: 'b', s: 'a' }, { u: 'b', s: 'd' }, { u: '', s: 'a' }, null])` ⇒ `R.knownUndeliveredMessage({ uuid: 'a' })` 真、`({ uuid: 'b' })` 假、`({ uuid: 'c' })` 假;`R.withoutUndelivered([{ uuid: 'a' }, { uuid: 'b' }, { uuid: 'c' }])` ⇒ 剩 `b`、`c` 两行。(0.89.0:方法缺席)
9998
+ - **G-PD18**(本版证明,TypeScript 端):`promptKnownUndelivered({ knownUndelivered: (u: string) => u === 'x' }, null)` 与 `withoutUndeliveredPrompts({ knownUndelivered: (u: string) => u === 'x' }, [1])` 编译通过;缺 `knownUndelivered` 的对象(`{}` / 去掉该键的账本形)仍被拒(TS2345)。(0.89.0:前两句 TS2345 —— 参数型要求账本九口齐;0.90.0:通过)
9999
+ - **G-PD19**(本版证明,TypeScript 端,接口加成员):`declare const legacy: Omit<PromptDeliveryLedger, 'knownUndeliveredMessage' | 'withoutUndelivered'>` 之后,`promptKnownUndelivered(legacy, null)` / `withoutUndeliveredPrompts(legacy, [1])` 编译通过(两版同),`const x: PromptDeliveryLedger = legacy` ⇒ TS2739。(0.89.0:最后一句通过 —— 两键本就不在接口上;0.90.0:TS2739)
10000
+ - **G-PD17**(端侧验收):终端换读之后,`sema/promptDelivery.ts` 里不再有 `export function promptKnownUndelivered` / `export function withoutUndeliveredPrompts` 两只同名薄包装;原调用点(116d 列)直调账本方法;同名影子对账门过渡表里终端那两行同批删除。
10001
+
10002
+ **权限规则(CC-302)**
10003
+
10004
+ (`P(x)` = 宿主 settings 里 `permissions` 的那一列;`body` = 一次提交的请求体;「能力位真」= `/v1/capabilities` 带 `settings.permissions.allowGrant: true` 的服务端。)
10005
+
10006
+ - **G-PM1**(端侧验收;换读前后同答 = 回归约束):今天的任一服务端(不报这一位)× `P(allow) = ["mcp__srv__echo"]` ⇒ `body.settings.permissions.allow` 缺席;审批照旧由客户端按 allow 规则放行。
10007
+ - **G-PM2**(端侧验收;候能力位真的服务端):能力位真 × 同上 ⇒ `body.settings.permissions.allow = ["mcp__srv__echo"]`;无人值守车道上该 MCP 调用不出审批。
10008
+ - **G-PM3**(端侧验收;回归约束,整服务器写法与被编译器拒收的整工具名两形除外 —— 见 G-PM11 / G-PM13):同一份 settings × 任一服务端 ⇒ `body.settings.permissions.deny` / `.ask` 与上一版终端发出的逐字节同。
10009
+ - **G-PM4**(端侧验收;回归约束):能力位为假 / 读不懂 / 本进程还没读到 ⇒ 同 G-PM1。
10010
+ - **G-PM5**(端侧验收;候能力位真的服务端):能力位真 × `P(allow) = ["Bash(npm:*)", "Read(./x)"]` ⇒ 这两条不在 `body` 里(引擎规则编译器不把这两种形收作 allow);审批照旧由客户端放行。
10011
+ - **G-PM6**(端侧验收;回归约束):`P(deny)` 含退役名(`MultiEdit`)/ 无前缀短形(`figma__x`)/ `Edit(~/x)` ⇒ 这些不在 `body` 里,请求不被 422。
10012
+ - **G-PM7**(端侧验收;回归约束):托管策略层与项目层各一条 deny ⇒ `body` 里托管那一条在前。
10013
+ - **G-PM8**(端侧验收;回归约束):一只桶在投影后超过 1000 条 ⇒ 服务端 400 `over_cap`(不截断)。
10014
+ - **G-PM9**(端侧验收):宿主没装引擎值级端口而有规则要投 ⇒ 装配期抛错、没有请求发出。
10015
+ - **G-PM10**(端侧验收):入参某个桶只在原型链上,或某只规则数组有空洞而 `Array.prototype` 在那个下标有值 ⇒ 装配期 `TypeError`。
10016
+ - **G-PM11**(本版证明):装 core 值级端口后,`permissionsDeclaration({ deny: ['mcp__srv'], ask: ['mcp__srv(*)'], allow: ['mcp__srv'] }, { kind: 'present', grants: true })` ⇒ `{ permissions: { deny: ['mcp__srv__*'], ask: ['mcp__srv__*'], allow: ['mcp__srv__*'] } }`;`deny: ['mcp__srv', 'mcp__srv__*']` ⇒ 只一条;`deny: ['mcp__srv ', ' mcp__srv', 'mcp__srv\t']` ⇒ 恰一条 `mcp__srv__*`;`deny: ['a2a__peer'], ask: [' a2a__peer\t', 'a2a__q(*)']` ⇒ `{ permissions: { deny: ['a2a__peer__*'], ask: ['a2a__peer__*', 'a2a__q__*'] } }`;`deny: ['mcp__', 'a2a__', 'mcp__a__', 'mcp__srv(x)', 'MCP__srv', 'A2A__peer', 'xyz__peer', 'mcp__srv_', 'a2a__peer_', 'mcp__x)']` ⇒ `{}`。夹具:服务端 7.104.0 – 7.114.0 每一代受理口(`parseTaskSettings` → `deriveSettingsPolicy`)收 `mcp__srv__*` / `a2a__srv__*` 三桶、编出的策略对该服务器 / peer 的工具答该行为;裸 `mcp__srv` / `a2a__srv` 在 deny / ask 上整请求拒。(0.89.0:本口不存在)
10017
+ - **G-PM12**(本版证明):`permissionsAllowGrantDoctorDetail` 对 `{ kind: 'present', grants: 1 }` / `{ kind: 'present', grants: 'no' }` / `{ kind: 'present' }` / `{ kind: 'weird', grants: true }` / `null` / `undefined` / `Object.assign(Object.create({ kind: 'present' }), { grants: true })` 逐个答「读不出」那一句(与 `{ kind: 'unobserved' }` 同句)、不抛;只有 `permissionsAllowGrantAvailable` 为真的读数说「sent」。(0.89.0:本口不存在)
10018
+ - **G-PM13**(本版证明):装 core 值级端口后,`permissionsDeclaration({ deny: ['shell\\runner(*)', 'Read'], ask: ['odd)name()', 'Read'], allow: ['a)b\\c', 'Read'] }, { kind: 'present', grants: true })`;再各一遍把那一形换成 右括号 `odd)name` / 反斜杠 `shell\runner` / 两者并存 `a)\b(*)` / 服务器段含 `(` 的 `mcp__a(b`(三桶都试)。(0.89.0 与本版此前:前三形投出 `shell\runner` / `odd)name` / `a)b\c` 等〔归一后名字没变,跳过编译校验;引擎对它们答 `invalid.paren`,服务端整请求 422〕,第四形本来就不投;0.90.0:四形一条都不投,`Read` 照投 ⇒ `{ permissions: { deny: ['Read'], ask: ['Read'], allow: ['Read'] } }`)。装的 `validatePermissionRules` 抛 / 回非数组 ⇒ `deny: ['Read', 'mcp__srv']` ⇒ `{ deny: ['Read', 'mcp__srv__*'] }`,`allow: ['Read', 'mcp__srv']`(能力位真)⇒ 不投(0.89.0:allow 的整工具名 `Read` 照投、改写名不投)。
10019
+ - **G-FRZ1**(本版证明):`noteEngineCapsForApprovalsStreamLive(u, { approvalsStreamLive: false })` 之后 `const a = observedApprovalsStreamLive(u)`;`Object.isFrozen(a)`;非严格模式函数里 `a.live = true` 之后再读 `observedApprovalsStreamLive(u)`;严格模式 `a.kind = 'x'`。十八只读器同律(带嵌套 `view` 的读数逐层冻)。(0.89.0:`false` / 改写生效、再读 `{ kind: 'x', live: true }` / 不抛;0.90.0:`true` / `{ kind: 'present', live: false }` / 抛 `TypeError`)同法对 `noteEngineCapsForApprovalsStreamLive(u, {})` 之后的 `not_reported` 读数:非严格模式 `a.kind = 'present'; a.live = true` 之后再读仍 `{ kind: 'not_reported' }`、严格模式抛。(0.89.0:再读变成 `present`;0.90.0:不变)
10020
+ - **G-SV5**(本版证明):`attachmentsForRequest({ SEMA_ATTACHMENTS: v })`,`v` 取 `'default,notAKey'` / `'default,-budgetUsd'` / `'default,+agentListing'` / `'default,todoReminder=on'` / `'default,todoReminderMode=maybe'` / `'planModeReminder'`;`buildTaskRequest({ objective: 'o', sessionId: 's', live: true, attachments: { todoReminder: true, planModeReminder: true } }, 'interactive')`(`print` 车道同)。看抛出物:`e instanceof Error` / `e instanceof TypeError` / `e instanceof AttachmentsSpecRefused` / `e.name` / `e.token` / `e.key` / `Object.hasOwn(e, 'key')` / `e.allowed` / `e.message`。(0.89.0:env 口抛普通 `Error`〔`instanceof TypeError` 假〕,`planModeReminder` 一项不拒;装配口原样透传。本版此前:env 口 `Error`、装配口 `TypeError`,都无自有位;0.90.0:两处都抛 `AttachmentsSpecRefused`,三个 `instanceof` 全真、`name` 为类名;env 口 `token` 是整串小写之后的那一段〔`notakey` / `-budgetusd` / `+agentlisting` / `todoreminder=on` / `todoremindermode=maybe` / `planmodereminder`〕、无 `key` 位、`allowed` 九项;装配口 `token` = `key` = 点名的键、`allowed` = 九个键名;`message` 逐字节不变 —— 对 0.89.0 发布产物,两边都拒的那几形 token 的 `message` 逐字节同)。
10021
+ - **G-HKM1**(回归约束,夹具;回归约束 = 这张逐代断言表):服务端发布包真受理口(`createAdmission(...).prepareSpec`)对 `settings.hooks.PreToolUse[0].matcher` 九形 —— `ListPeers` / `List.*Peers` / ` ListPeers ` / `Read,ListPeers` / `Read|ListPeers` / `|ListPeers` / `ListAgents|ListPeers` / `Read` / `mcp__srv__.*` —— 逐代精确期望:≥7.114.0 ⇒ 前六形 400 `request.field_invalid` 且句子同时含 `ListPeers` 与 `ListAgents`、后三形受理;7.113.x ⇒ 只有字面 `ListPeers` 与竖线名字表 `Read|ListPeers` 400(同句形)、其余七形受理;≤7.111.x ⇒ 九形全受理。夹具列表里的每一份按版本落一档(不是只跑第一份);表外的代(7.112.x / 预发布)按红处置、先实测再登一档。本包 `buildTaskRequest` 两车道把这九只 matcher 原样放上请求体,过 ≥7.114.0 受理口与直交同答;`settingsHooksKeptLocally` 按原串做键(请求体里是 ` ListPeers `、本端组写 `ListPeers` ⇒ 不跳)。(两版同:本包零改码)
10022
+ - **G-AT1**(本版证明):`buildTaskRequest({ objective: 'o', sessionId: 's', live: true, attachments: { todoReminder: true, planModeReminder: true } }, 'interactive')`;键换成 `PLANMODEREMINDER` / ` planModeReminder ` / `+planModeReminder` / `planModeReminder=on`、值换成 `false`、车道换成 `print` 同。(0.89.0:原样透传,请求体带这一键;0.90.0:抛 `TypeError`,句子含 `planModeReminder` / `retired` / `permissionMode` 与「remove the key」;精确键那一句说服务端会 400,别的拼写那一句说服务端忽略这一拼写、本包从严拒)不带退役键的 `attachments`(含 `planModeReminderX` 这类只是包含该词的键)原样透传。
10023
+ - **G-AT2**(回归约束):同一入参把值换成 `undefined`(`{ todoReminder: true, planModeReminder: undefined }`,键名换成上面四种写法同)、两车道。(0.89.0 与 0.90.0 同:不抛,请求体 `attachments` 序列化后恰 `{"todoReminder":true}`;0.90.0 另保证产出的 `attachments` 对象上没有这一键)
10024
+
10025
+ **「改了重发」让位(CC-309)**
10026
+
10027
+ - **G-PRC6a**(本版证明;门 `run-terminal-cause-projection-test.mjs` 同号):`D = { kind: 'provider_rejected', status: 400, code: 'invalid_request_error' }`;`C = { code: 'invalid_request', status: 400, message: 'Anthropic HTTP 400: {"type":"error","error":{"type":"invalid_request_error","message":"messages.5: `tool_use` ids must be unique"}}' }`;`providerRejectionResend(D, C)`;三种错配句(缺 tool_result / 孤儿 tool_result / 重复 id)与三种载体形(三位 / 无码 / 只有句)同。(0.89.0:第二参被忽略 ⇒ `{ resend: 'edit_and_resend', … }`;0.90.0:`undefined`)端上的载体用 `toolHistoryErrorCarrierOf` 铸(G-PRC7),这里手写 `C` 只为把判定口单拎出来验。
10028
+ - **G-PRC6b**(回归约束;门同号):非错配载体(别的 400 句 / 空对象 / 码不对 / 状态不对 / 句中引用)交给 `providerRejectionResend(D, ·)` ⇒ 与不传载体逐字节同(`edit_and_resend` 那一句)。
10029
+ - **G-PRC6c**(回归约束;门同号):坏载体(串 / 数 / 数组 / 取值器抛 / 撤销式代理 / 非对象)交给 `providerRejectionResend(D, ·)` ⇒ 判不出、不抛、与不传载体逐字节同(照旧给句)。
10030
+ - **G-PRC6d**(回归约束;门同号):载体判为错配,但 `detail` 不是服务商拒绝 / 缺席 ⇒ 照旧 `undefined`(载体只让位,不铸句)。
10031
+ - **G-PRC6e**(回归约束;门同号):`providerRejectionResend(D)` / `(D, undefined)` 与 0.89.0 发布产物逐字节同;一池 280 余只 `detail`(种类 × 状态 × 码的交叉 + 敌意形)上不传载体与 0.89.0 逐字节同(没给基线产物 ⇒ 门标为未跑)。
10032
+ - **G-PRC6f**(本版证明):手搓载体池(状态 / 句 / 码是自有取值器、三位只在原型链上、SDK 形错误对象〔状态是原型取值器、句是「400 <回体>」〕、状态是串 `"400"`、只有句)逐只算 `classifyToolHistoryMismatch(c)` 与 `providerRejectionResend(D, c)`。(0.90.0:两口逐只同答 —— 判型说错配 ⇔ 判定口让位;0.89.0:判定口不读第二参,判型说错配的那几只上两句同时给)
10033
+ - **G-PRC7**(本版证明,端到端;门 `run-tool-history-mismatch-projection-test.mjs` D2c):三只 `done` 帧 —— ① `result.terminal = { kind: 'failed', code: 'invalid_request', message: 'messages.5: `tool_use` ids must be unique', detail: { kind: 'provider_rejected', status: 400 } }`、无 `apiFailure`;② 同一 `terminal` 去掉 `detail`、`result.apiFailure = { status: 400 }`;③ 两位都缺 —— 各交 `runStream`(交互车道、`offersRewind: true`)看合成终局行带不带 `_sema_tool_history_mismatch`,再算 `providerRejectionResend(readRunTerminal(result)?.detail, toolHistoryErrorCarrierOf(帧))`。(0.89.0:`toolHistoryErrorCarrierOf` 不存在;① 行不带键、无 `/rewind` 句〔终局行判错配的服务商状态只取 `apiFailure.status`〕,判定口第二参被忽略 ⇒ `edit_and_resend`;② 行带键 + `/rewind` 句;③ 行不带键。0.90.0:① 行带键 + `/rewind` 句、判定口 `undefined`;② 行带键 + `/rewind` 句、判定口 `undefined`〔没有 `detail`〕;③ 行不带键、判定口 `undefined`〔没有 `detail`〕;三只帧上「行带键」与「判定口对同一载体让位」同真同假,「改了再发」句与 `/rewind` 句永不同时给)同一终局再带占锁位 `activeTaskId`(409 占锁行)或错误句以模型输出问题句开头 ⇒ 行不带键、载体为空、判定口不让位(0.90.0)。
10034
+ - **G-PRC8**(回归约束;门 `run-terminal-cause-projection-test.mjs` G-PRC6f 与 D2c 同形):载体三位里任一位是自有取值器 —— `Object.defineProperty({ code: 'invalid_request', message: <错配句> }, 'status', { enumerable: true, get: () => 401 })` —— 交给 `providerRejectionResend(D, ·)`。(两版同:给 `edit_and_resend` 那一句 —— 0.89.0 不读第二参;0.90.0 判定口与判型口同读这只载体,状态 401 ⇒ 不是错配)`toolHistoryErrorCarrierOf` 对结果上的取值器 / 原型链上的位只读自有数据位,终局行判错配与判定口让位对这些形同答。
10035
+ - **G-PRC9**(本版证明;门 `run-tool-history-mismatch-projection-test.mjs` D2c):`done` 帧 `{ type: 'done', result: { terminal: { kind: 'failed', code: 'invalid_request', message: <带引擎前缀的错配句> }, apiFailure: { status: 400 } } }`,`result` 上另有自有取值器 `activeTaskId`,**第 N 次读才答 `'r0'`、其余答 `undefined`**(N = 1 / 2 / 3);`failed` 帧同形(取值器在帧上)。交 `runStream`(交互车道、`offersRewind: true`)看终局行与读次数。(0.90.0 修前〔本版此前〕:取值器被读 2 次〔铸行处一次、载体铸口一次〕;N = 1 时行文是占锁话、却带错配键与 `/rewind` 句;N = 2 / 3 时行文是 API 错误行、却不带键 —— 行文与键各说各话。0.90.0:读 1 次;N = 1 ⇒ 占锁行、无键、无 `/rewind`;N = 2 / 3 ⇒ 错配行、带键、带 `/rewind`)。另两形:`failed` 帧上 `errorCode` 是自有取值器,前 k 次答 `limits.max_turns_exceeded`(治理码)/ `conflict.session_active_run`(占锁码)、之后答 `invalid_request`(及反向),错误句是带引擎前缀的错配句(k = 0…6)—— 0.90.0 修前 k = 4…6 得「Run stopped」行带错配键与 `/rewind` 句、占锁变体 k = 3…5 得「This session is locked」行带键;0.90.0:治理行 / 占锁行一律无键、无 `/rewind`,带键的只有 `API Error:` 臂;`failed` 帧 `errorMessage: ''`(空串)⇒ 不出终局行,载体也是空载体(修前载体是 `{ code }`)。
10036
+
10037
+ ### 116d. 端上要动的读点
10038
+
10039
+ 坐标来自本机克隆的只读检索,各组读的提交写在组标题里;终端的产品源码坐标省去开头的 src 目录;本机克隆可能落后远端,行号会漂,合并前请各端对自己的最新主干重看一遍。
10040
+
10041
+ **终端**
10042
+
10043
+ - **sdk registry 五名转口(CC-136;参照树 1.0.140 提交 `1defd44c`)**:`sema/cloudAuth.ts` 对 `@sema-agent/sdk/registry` 的五条直连 import(`requestDeviceCode` / `pollUntilApproved` / `refreshTokens` / `listScopes` / `switchScope`;参照树 1.0.140 提交 `1defd44c` 的 25 – 31 行)改从 `@sema-agent/client-core/registry` 取,删那条直连 import 与对应的直连豁免登记(壳注释写明的退役条件 = 本包转口到货);调用签名、错误分支、`instanceof` 逐字节零改(同一份实现)。`@sema-agent/settings-schema/api/auth` 的两个响应型 import 不动。
10044
+ - **引擎 7.40.1 / 服务端 7.113.0 / 7.114.0 / sdk 16 提货(CC-291;终端 tag v1.0.140〔1defd44c〕,钉本包 0.89.0)**
10045
+ - 🔴 测试格 `sema/engineNoticeChromeArm.test.ts` N31d(「`route.tool_call_id_folded` / `resume.legacy_mode_seed_migrated`(运维受众)在包的码册、不在明拒表」):`engineNoticeInCatalog('resume.legacy_mode_seed_migrated')` 本版起答 `false` ⇒ 这一码从该格的在册断言里撤出,改判册外兜底(N31e 的「收到 ⇒ 通用行恰一行」不变,老引擎仍可能发它)。
10046
+ - steer 未用上通告(EN-4):`sema/upstreamBridge.ts:1083` 壳侧 `task.user_steer_undrained` 自写句不读 `childSessionId`;换读包句时(0.89.0 UI-1 请托方待办,未变)`readUserInputUndrained(notice)` → `userInputUndrainedNotice(facts)` 一并得子代句,零额外改动。
10047
+ - `SEMA_ATTACHMENTS`(SV-1):`sema/seamQuery.ts:1565` 经本包 `attachmentsForRequest`,`full` 的产出少一键,零改动即得;测试 `sema/attachmentsWireCaps.test.ts` 的 `full` 格只钉「≥5 键且含 `backgroundTasks` / `toolsDelta`」(六键仍过)、默认格断言不带 `planModeReminder`,不受影响。
10048
+ - 结算 / 通告码册 / 问类 / `createAllowDenyPolicy`(`sema/coreValuePortsHost.ts:61` 装的是引擎同一只、`sema/settings/seam.ts:133` 不传 `scope`):零读点、零改动即得。
10049
+ - **文件历史一句(CC-294;终端 tag v1.0.141〔70c17545〕,钉本包 ≥0.90.0 时同批)**
10050
+ - 判定与两句:`sema/fileHistoryCaptureCapability.ts:143-164`(`FileHistoryLegNoticeVerdict` 型与 `fileHistoryLegNoticeVerdict`)、`:166-185`(两句常量与 `fileHistoryLegNoticeLine`)⇒ 删,换读 `fileHistoryLegNoticeVerdict` / `fileHistoryLegNoticeSentence`。🔴 本包的判定与这一份同名 —— 换钉同批删,别留同名转口。
10051
+ - 声明账:`:88-127`(`FileHistoryDeclarationFact` / `fileHistoryDeclarationFactOf` / 模块级 128 行先进先出表 / `noteRunFileHistoryDeclaration` / `fileHistoryDeclarationForRun`)⇒ 删,换一只 `createFileHistoryDeclarationLedger()`(进程一只)。写入点 `sema/liveClient.ts:1805`(流式提交拿到响应头那一拍)⇒ 装配后那一拍 `declared(key, fileHistoryDeclarationOfBody(liveBody))`,流上每帧 `boundToRun(key, runId, frame)`;`:2055`(durable 提交回执)⇒ 同样 `declared`,绑定改在跟那条 run 的事件流的第一帧(只拿回执不跟流时那条 run 读 `unknown`,KL-400)。读点 `sema/upstreamBridge.ts:2691-2699` ⇒ `declarationOf(meta.boundRunId?.())` 换读账本,判定与句子换包口。
10052
+ - 去重留在端上(`fileHistoryLegNoticeShown` 按判定记、只认真上屏;KL-398)。审计行照旧只落判定与声明两只闭集词。
10053
+ - 端侧测试 `sema/wiringManifestArm.test.ts` Y17r – Y17t 的六条性质对本包判定全成立(本包门 D1 按同一张 144 格网格跑过);按 `not_declared` 断言「表外词 ∧ 用户没关」或「用户关 ∧ 不知道带没带 ∧ 报 disabled」的格改 `unknown`(116a′ 第 3 条)。
10054
+ - **hooks 工具别名(CC-298;读点检索沿用 §115d 的读法,本版未重查各端新提交)**
10055
+ - hooks matcher 别名(HA-1 – HA-3,请托方):壳侧钉版镜像表(终端自家退役登记 `hook-tool-aliases-mirror` 一行,钉本包 ≥ 0.90.0)换读 `canonicalHookToolName(name)`(单名查询)或 `hookToolAliasesOf()`(要枚举时),换读后删表与那一行登记;别名对账格由「壳侧表 vs 夹具引擎」改为「本包读口 vs 夹具引擎」(G-HA7 形)。本包只回答「是不是内置工具的别名」:matcher 的通配 / 正则语法与调用方 / MCP 声明的别名留在端(KL-391)。
10056
+ - **支持底线 / 引擎版本三态 / 粗码表(CC-299)**:引擎附着门(终端 `sema/engineAttachCapabilityGate.ts` 的版本读法 `parseEngineVersion` / `isLooseEngineVersion` / `versionAtLeast` 与门槛 `ENGINE_MODE_ARBITRATION_SINCE`)。🔴 换读用 **带门槛** 的形 `engineVersionTier(version, '7.106.0')`:终端的附着门槛(7.106.0)高于本包声明的服务端底线(7.104.0),不带 `floor` 的形会把 7.104.x / 7.105.x 判成 `'engine'` —— 直接替换会让附着门对这两版放行。三态对位:`'engine'` ⇒ 通行;`'legacy'` ⇒ 确证旧引擎;`'unknown'` ⇒ 终端今天按形分两种处置(带前后缀的版本号按低于门槛、别的按判不出),要保留这一分法就留自己的形判(KL-405)。本包声明的服务端底线越过 7.106.0 之后,可去掉 `floor` 实参。
10057
+ - **投递账本绑定方法(CC-300;终端 tag v1.0.140〔1defd44c〕,钉本包 0.89.0)**
10058
+ - `sema/promptDelivery.ts:52-53` 两只别名导入、`:198-200` `promptKnownUndelivered(m: unknown)` 与 `:203-205` `withoutUndeliveredPrompts<T>(msgs)` 两只同名薄包装(模块变量 `ledger` 作账本实参):换调账本方法后这两只与两条别名导入一并删;调用点怎样拿到账本引用由终端定(本包不规定)。
10059
+ - `sema/promptDelivery.ts:283` 跨会话文件合并的账本 `merged` 上 `ledgerWithoutUndeliveredPrompts(merged, msgs)` → `merged.withoutUndelivered(msgs)`;同文件内 `:292`(`latestPromptKnownUndelivered`)与 `:306`(自动标题的种子过滤)对 `promptKnownUndelivered` 的两处调用 → `ledger.knownUndeliveredMessage(...)`;`unknown` 入参的调用点先收窄成 `object`,或直接传(运行期非对象答 `false`)。
10060
+ - 模块外直接调这两只同名包装的点(换调用形、判定不变):`utils/permissions/yoloClassifier.ts:1017`、`hooks/useAwaySummary.ts:39`、`commands/btw/btw.tsx:216`、`commands/rename/rename.ts:30`、`services/awaySummary.ts:72`、`services/compact/compact.ts:1453`。经终端自有函数间接用的点(`hooks/useAwaySummary.ts:118` 经 `latestPromptKnownUndelivered`、`commands/insights.ts:2883` 经 `withoutUndeliveredPromptsInSessionFile`)只在 `promptDelivery.ts` 内部换读,调用点零改动。
10061
+ - 登记物:同名影子对账门豁免表里终端 `sema/promptDelivery.ts` 的 `promptKnownUndelivered` / `withoutUndeliveredPrompts` 两行 —— 薄包装删除后随之删(过渡表期限 0.90.0 = 删行期限,本版不改窗)。
10062
+ - **`attachments` 声明的拒绝(CC-316;终端 tag v1.0.141〔70c17545〕,钉本包 0.89.0)**
10063
+ - 🔴 请托方(SV-7):`sema/seamQuery.ts:1577`(交互车道)与 `sema/seamQueryEngine.ts:903`(`-p` 车道)两处 `attachmentsForRequest()` 调用 —— 抛出物是 `AttachmentsSpecRefused`(`TypeError` 的子类)。构造请求那一步的 catch 处按 `e instanceof AttachmentsSpecRefused` 接:交互车道把 `e.message` 渲给用户、`-p` 车道写 stderr 并以非零退出码结束,不靠 `e.message` 的前缀或文字识别;要渲「哪个 token 坏了、合法形有哪些」直接读 `e.token` / `e.allowed`。本机只读检索该 tag 上这两处调用周围没有就地 catch(抛出物冒到调用方的上层;上层怎么接由端定)。装配口那一路(`buildTaskRequest` 对手写 `attachments` 的拒绝)终端不手写该对象,零读点。
10064
+ - **权限规则(CC-302;终端 tag v1.0.140〔1defd44c〕,钉本包 ^0.88.0)**
10065
+ - 🔴 stamp 两车道(PM-1 / PM-5,请托方):`sema/settingsRulesWire.ts:1092` `buildWireSettingsStamp` 内部的 `projectPermissionUnits(full, { cliDeny, ruleOrigins })` 换成 `permissionsDeclaration({ deny: perms.deny, ask: perms.ask, allow: perms.allow, origins: ruleOrigins, cliDeny: flags.deny }, observedPermissionsAllowGrant(baseUrl))` —— `cliDeny` 交**原串**(`CliToolFlagsWire.deny`,本口自己投影),`--allowedTools` 进 `allow` 并在 `origins.allow` 里记 `cliArg`;调用点 `sema/interactiveSettingsStamp.ts:783` / `:876`、`sema/printModeEngine.ts:228`。`full` 形里 `permissions` 的其它子键照旧由壳合并(`{ ...permRest, ...d.permissions }`)。本口的三种抛(引擎值级端口缺席 / 入参形不对 / 装着的端口自己抛 —— 原样外抛,装 core 的同名实现时不发生;规则编译校验器抛不在此列,那一条照发,KL-414)在交互车道落进既有的投影抛错臂(`sema/interactiveSettingsStamp.ts:847`,发上一份发过的那一份),不另写兜底。
10066
+ - 🔴 读面两处同批换(PM-2):`wireRuleSurface`(`sema/settingsRulesWire.ts:861`,doctor `commands/doctor/axesRows.ts:424` / `:432`)与 `rulesWithheldFromEngine`(`:955`,`sema/replEntry.tsx:3554` / `sema/printModeEngine.ts:219`)今天各自调 `projectPermissionUnits` 数条数 —— 改数 `permissionsDeclaration(…)` 的产物,屏上的条数与请求体上的才是同一只函数算的。
10067
+ - 换读后可删:`projectPermissionUnits` / `projectBucketByTrust`(`:779` – `:830`)。`WIRE_RULE_TRUST_ORDER`(`:695`)与 `wireRuleOriginsOf` / `mergeRuleOriginsMostTrusted`(`:726` / `:751`)是壳侧建来源表的装配,留端;建表的序须与本口的信任序同(116b),终端那份 `WireRuleOrigins`(deny / ask 两张表)原样可交。`projectEngineRuleNames` 仍被死规则告知行等读面使用,本版不动。
10068
+ - 能力位 tee(PM-6):宿主能力探测链上与兄弟读器并列加 `noteEngineCapsForPermissionsAllowGrant(baseUrl, caps, { generation })`,温切后 `forgetPermissionsAllowGrantReading(baseUrl)`;doctor 权限行可接 `permissionsAllowGrantDoctorDetail`。
10069
+ - 壳侧同步放行保留(老引擎与能力位没读到时它是唯一执行者;引擎已放行的调用不再发审批,这一臂自然不触发)。
10070
+ - 整服务器写法(PM-9):换读后 `mcp__<服务器>` 改写成 `mcp__<服务器>__*` 上请求体(三桶);壳侧匹配器对这一形照旧生效,两边同判。
10071
+ - **「改了重发」让位(CC-309;PR-1 / PR-2;终端 tag v1.0.141〔70c17545〕`seam/adapter/runStream.ts:84-89` `providerResendTextOf`)**:渲 `providerRejectionResend` 那一句的接线处,第二参传 `toolHistoryErrorCarrierOf(holder)` 的返回值 —— `holder` 就是那一处已经交给 `readRunTerminal` 的同一只(`done` 帧的 `result`,或 `failed` 帧本身);不自拼 `{ code, status, message }`(本包终局行判错配读的就是这一只,自拼会漏掉服务商拒绝详情上的状态)。传了之后删壳侧「看到错配键就把 resend 句清回空」一类按键让位(终端 1.0.141 在出口按行上的错配键清掉那一句)。没传的接线行为与 0.89.0 逐字节同。
10072
+
10073
+ **网页端 / 管理台 / 桌面端**
10074
+
10075
+ - **CC-136**(网页端 / 管理台 / 桌面端):按本机参照树检索,没有对这五名的 `@sema-agent/sdk/registry` 直连(网页端零命中;管理台命中的是自家存储与状态机的同名方法,不是 SDK 导入;桌面端零命中);🔴 本机检索读的是参照树的某一提交,不是各仓当天主干 —— 有同类直连的端同改。
10076
+ - **CC-291**(读的提交:网页端 `origin/main` 0fb6df3 · 管理台 `origin/main` 21b8951 · 桌面端冻结〔HEAD 9ce3736〕):零读点(管理台只有两处注释提到 `createAllowDenyPolicy`)、零改动。
10077
+ - **CC-294**:**网页端**(0fb6df3):零读点(`ui/lib/engine/turn-request-ledger.ts` 只在一条请求键注释里提到文件历史,不渲这一句);日后要渲,只经本包五只口,不要自写判定。**桌面端**:冻结期零改动。
10078
+ - **CC-298**:**网页端 / 管理台**:不跑本地 hooks、不按工具名认 matcher —— 零改动即得。**桌面端**:冻结期零改动。
10079
+ - **CC-299**(网页端 / 桌面端 / 管理台):零改动即得;不按引擎版本分支。若要在「引擎太旧」的提示里点名底线,读 `supportFloorOf('server')`,不要手抄版本号。
10080
+ - **CC-300**:网页端 / 管理台 / 桌面端零读点(`createPromptDeliveryLedger` / `promptKnownUndelivered` / `withoutUndeliveredPrompts` 在这三端源码里零命中)。
10081
+ - **CC-302**:请求面不装配 `settings.permissions`(本机检索零读点),零改动即得(读的提交:网页端 `origin/main` 0fb6df3 · 管理台 `origin/main` 21b8951 · 桌面端冻结〔HEAD 9ce3736〕)。
10082
+ - **CC-309**:若渲 `providerRejectionResend` 那一句,同终端传 `toolHistoryErrorCarrierOf(同一终局帧)` 的返回值(PR-1 / PR-2);不渲的端零改动。
10083
+ - **CR-1 / HK-1**:零改动即得(不就地改能力位读数;不发设置 hooks)。
10084
+
10085
+ **验收方**
10086
+
10087
+ - **CC-294**:G-FH8 – G-FH15 包层可跑;G-FH16 端侧验收。
10088
+ - **CC-298**:新增 G-HA 一组;G-HA9 为端侧验收格。公面名数 1379 → 1397(本版各项合计;CC-298 计 +2)。
10089
+ - **CC-302**:G-PM1 / G-PM3 / G-PM4 / G-PM6 – G-PM8 在今天的服务端上可跑;G-PM2 / G-PM5 候服务端发布这一位的那一版;G-PM11 / G-PM12 包层可跑(G-PM11 夹具腿要服务端 npm 包)。
10090
+ - **CC-309 / CR-1 / HK-1 / SV-1 装配口**:G-PRC6a – G-PRC6f / G-PRC7 / G-PRC8 / G-PRC9 / G-FRZ1 / G-AT1 / G-AT2 包层可跑;G-HKM1 要服务端 ≥7.114.0、7.113.x、≤7.111.x 三档各至少一份 npm 包。
10091
+
10092
+ ### 116y. 🔴 三端升级必读(固定段式)
10093
+
10094
+ 1. **换钉 `^0.90.0` 之前**(本版型面 BREAKING 共**三处**:CC-291 两处 + CC-300 一处,逐条见下):
10095
+ - 🔴 **CC-291**(型面 BREAKING 两处;编译红落在三类位置:对 `EngineNoticeFactsCode` 穷举的 `switch` 里写了 `'resume.legacy_mode_seed_migrated'` 分支处 · 按名引用 `readLegacyModeSeedMigrated` / `LegacyModeSeedMigratedFactsView` 处 · 手写 `attachments.planModeReminder` 的装配处):① **根入口删两名**:`readLegacyModeSeedMigrated`(退出公面)与具名型 `LegacyModeSeedMigratedFactsView`(型面 BREAKING;本机检索四端产品源码零具名 import,只有终端测试格 N31d 按在册断言,见 116d)—— 按名 import 的端 / 对 `EngineNoticeFactsCode` 穷举的 `switch` 写了 `'resume.legacy_mode_seed_migrated'` 分支的端,TypeScript 编译红一次;老引擎仍发这一码时按册外码处置。② **`AttachmentsSpec` 删一位**:按该型写 `{ planModeReminder: true }` 的宿主编译红;宽型 / JS 宿主写得出来的,交给 `buildTaskRequest` 时抛同一句退役句(任何大小写 / 前缀形);`SEMA_ATTACHMENTS` 显式点名它从铸 `true` 改为抛 —— 先删这一词。③ **终端 / 任何用 `SEMA_ATTACHMENTS=full` 的宿主**:本包不升时对服务端 ≥7.113.0 每一发都会是 `400 request.field_invalid`;升到 0.90.0 即解。 🔴 终端 tag 1.0.140(钉本包 `^0.88.0`)以及装本包 0.88.x / 0.89.x 的任何宿主:`SEMA_ATTACHMENTS=full` 时 `attachmentsForRequest()` 装出的 `attachments` 带 `planModeReminder`(0.88.0 与 0.89.0 产物实跑:`full` 七键含它),服务端 ≥ 7.113.0 对这样的每一发都回 `400 request.field_invalid`;0.90.0 起 `full` 六键、不再装出这一键。终端测试格 `sema/engineNoticeChromeArm.test.ts` N31d 断言 `resume.legacy_mode_seed_migrated` 在码册,换钉 0.90.0 后红(改判册外兜底,见 116d)。
10096
+ - **CC-136**:零动作;不用云控制面的端不受任何影响(根入口零变化)。要从本入口取这五名的端:先装 0.90.0(五名是这一版新增的转口,`^0.89.0` 的范围里没有),再迁移 import;peer SDK 地板仍是 `>=12.0.1`,不用抬。
10097
+ - **CC-294**:零编译红(本项全是新名,穷尽分支不受影响);新公面 **五** 名、公面类型名 +4(逐名见 CHANGELOG「公面合计」)。🔴 终端:本包新出的 `fileHistoryLegNoticeVerdict` 与壳侧同名函数撞名 —— 终端 1.0.141 已先铸同名判定(壳先铸),本包到货后删:换钉同批删壳侧那一份与它的两句、按 run 记的声明账(116d),不要留转口。本版同名影子对账表为它登一行(第二份实现,语义差分格逐格对拍:差只许落在两类零句之间,壳删后随行退)。已发导出的可观察变化:`createPromptDeliveryLedger().deliveredByFrame` 在撤销式代理帧上不再外抛(只有宿主自建对象可达)。
10098
+ - **CC-298**:① 无编译红(纯 additive:根入口 +2 名 `hookToolAliasesOf` / `canonicalHookToolName`,无型面删改)。② 已发导出的可观察变化:无(新读口,不改任何已发导出的读数)。
10099
+ - **CC-299**:本段零编译红(只加名);根公面 +3 名(`SUPPORT_FLOOR` / `supportFloorOf` / `engineVersionTier`)、公面类型名 +3;粗码表九词与顺序不变;peer sdk 地板 `>=12.0.1` 不动。
10100
+ - 🔴 **CC-300**(型面 BREAKING 第三处):只消费账本的端零动作 —— 本项只在账本对象上加成员,既有口、既有答案、根公面名单都不变,两只自由函数的参数型反而放宽(按 0.89.0 九口形自写的旧账本替身照常传进去,G-PD18 / G-PD19)。自己手写了「账本接口的替身」(测试替身 / 内存桩),并把它**赋给 `PromptDeliveryLedger` 型**(变量标注 / 返回型 / 实现该接口)的端,TypeScript 编译红一次(接口 +2 个必有成员):补两只成员,或把替身改成直接用 `createPromptDeliveryLedger()` 的真账本;本机检索四端源码没有这种替身(终端只持工厂产物)。
10101
+ - **CC-302**:零编译红(零穷尽 `switch` 受影响的型);新公面 **七** 名 + 测试钩一名(`permissionsDeclaration`、能力位读器四口 + 投影 + 判据 + doctor 句);公面类型名 +6。
10102
+ - **CC-309**:零编译红(`providerRejectionResend` 只加可选第二参);根公面 +1 名 `toolHistoryErrorCarrierOf`(错误载体铸口,型是结构型、不另出名);不传载体与 0.89.0 逐字节同。
10103
+ - **CC-316**:零编译红(新名 `AttachmentsSpecRefused`,不改任何已发导出的型);根公面 +1 名(类)。已发导出的可观察变化:`attachmentsForRequest` 的拒绝 `instanceof TypeError` 由假变真(此前抛普通 `Error`),`message` 一字不动 —— 按消息串识别的写法照常工作,但新写的按类接。
10104
+ - **能力位读数冻结(CR-1)**:零编译红;🔴 就地改 `observed*()` 交出的读数的写法在严格模式下改为抛 `TypeError`(本机检索四端没有这种写法)—— 要改先拷一份。
10105
+ 2. **逐面**:
10106
+ - **云控制面**(CC-136):五名改从 `@sema-agent/client-core/registry` 取;🔴 子路径 `types` 要 `moduleResolution: bundler` 或 `node16` / `nodenext`(`node10` 解析不到 `exports` 子路径的 `types` 条件;同 §86)。
10107
+ - **响应型**(CC-136):本入口不转别名;要具名型取 `Awaited<ReturnType<typeof 函数名>>` 或契约包同名型。
10108
+ - **新码**(CC-136):🔴 端上新写的云控制面逻辑不要走转口口,写进本包(同 §86)。
10109
+ - **通告**(CC-291):子代副本帧(`childSessionId` 在场)是父会话里的第二条,`sessionId` / `taskId` 是父的,与子代自己那一帧不去重也不合并;渲本包句即可,不要自写「nothing was delivered」。`childSessionId` 缺席不是「不在子代里」。码册册外的码(含老引擎仍发的 `resume.legacy_mode_seed_migrated`)走册外兜底,别把 `undefined` 读成「没这回事」。
10110
+ - **结算**(CC-291):机器放行(`policy_allowed`)不是人批的 —— 别据 `human_allowed` 之外的词渲「你批准了」;`policy_refused` 的 party 两代两说,按词判、不按 `party` 判;`who.approver` 只渲染、不鉴权。
10111
+ - **请求键**(CC-291):不要再给请求塞 `attachments.planModeReminder`(服务端 ≥7.113.0 整份 400);要 plan 姿态发 `permissionMode: "plan"`。
10112
+ - **判定**(CC-294):屏上那一句只按 `fileHistoryLegNoticeSentence(fileHistoryLegNoticeVerdict(…))` 出;不要自己拿「用户关了 ∧ 报 on」判「没照办」(116a′ 第 1 条)。
10113
+ - **账本**(CC-294):记的是装配完的那一份出站体,不是片段口的返回;体要是普通数据对象(带 `toJSON` 或取值器的体读成 `unknown`,先物化再记再发);绑定的 run id 用这条流自己记下的那一个(响应头 / 流首帧 `meta.taskId`),不要读进程级的「当前 run」。每一帧都可以喂 `boundToRun`,同一帧既是绑定证据又是接线回执时先绑后判。
10114
+ - **hooks matcher 别名**(CC-298):按工具名认 matcher 的地方,先过 `canonicalHookToolName(name)` 再比;不要在端上另抄一份别名表(引擎一加别名就悄悄对不上)。表外名、规范名自己、空串、原型键都原样回来,不要对返回值做「是不是 `undefined`」的判断。逐字比 —— 不要在调用前自行折大小写 / 裁空白(那会把引擎认为是两个名字的串并成一个)。
10115
+ - **支持底线 / 引擎版本 / 粗码**(CC-299):① 判引擎版本只经 `engineVersionTier`,不要自写版本解析;终端带自己的门槛(116d)。② 老引擎两代读法(RL-3)在声明的底线越过 7.34.0(引擎)/ 7.106.0(服务端)那一版删除,删除那一版是 minor 并提前一版预告;依赖 `RULE_STORE_UNREADABLE_KINDS` 一族公面名的端届时编译红。③ 粗码:装了 sdk 16 的端读 sdk 的常量或本包的常量都可以(同名同序);装着 sdk 12 – 15.4 的端只读本包的。
10116
+ - **按行问「确知没交出去」**(CC-300):用 `ledger.knownUndeliveredMessage(row)`;按 uuid 问仍是 `ledger.knownUndelivered(uuid)`,别把串交给前者(恒 `false`)、别把行交给后者(恒 `false`)。
10117
+ - **旁路载荷过滤**(CC-300):`ledger.withoutUndelivered(rows)`;行表不是数组得到空数组,不是「没有要剔的」。
10118
+ - **权限规则**(CC-302):请求体的 `settings.permissions` 三只桶只经 `permissionsDeclaration` 装,不要在端上自己排序 / 过滤 / 拼 allow;🔴 不要按引擎版本号直接塞 `permissions.allow` —— 把 allow 当名单读的引擎会拒掉名单外的全部工具。发出去的 allow 不等于免问:它在引擎那边是「有人对这只工具表过态」,引擎自己要问的(写门、shell 一类)照样会问,壳侧的同步放行与审批答复路径不要因为 allow 上了请求体就撤;内容形 allow 本口不投,仍留端上放行。
10119
+ - **规则里带括号 / 反斜杠的工具名**(CC-302 修订,PM-11):名字里带 `)` 或 `\` 的整工具规则(如 `shell\runner(*)`)被引擎规则编译器拒收,本包不再把它们放上请求体 —— 规则只在客户端匹配器上生效(引擎那一侧没有这条规则);端上若要提示用户「这条规则没发给引擎」,按 `permissionsDeclaration` 的产物与自己的规则表差集去数,不要自己重判。
10120
+ - **构造请求那一步的拒绝**(CC-316):对 `attachmentsForRequest(env)` 与 `buildTaskRequest(...)` 的调用按 `instanceof AttachmentsSpecRefused` 接;`-p` 车道捕获后把 `e.message` 写 stderr 并以非零退出码结束,交互车道渲给用户;不要靠消息串前缀识别(token 的写法在句子里,句子可能润色),要 token 读 `e.token`、要合法形读 `e.allowed`;`e.key !== undefined` ⇒ 来自请求对象的键,否则来自 `SEMA_ATTACHMENTS` 的 token。
10121
+ - **「改了重发」**(CC-309):渲 `providerRejectionResend` 那一句的端,第二参传 `toolHistoryErrorCarrierOf(同一终局帧)` 的返回值,不自拼;错配行上它答 `undefined` —— 交互车道且宿主声明本面有 `/rewind` 时屏上只留 `/rewind` 出路句,`-p` / 工具车道或没有 `/rewind` 的宿主上两句都没有(行上只剩错误原文)。终端:删壳侧按错配键让位的接线(116d)。
10122
+ - **设置 hooks 的 matcher**(服务端 7.114.0):本包不预检;写 matcher 时用工具的正名(`canonicalHookToolName` 可把别名换成正名),服务端对「只选中别名」的 matcher 整请求拒。
10123
+ - **能力位**(CC-302):把 `noteEngineCapsForPermissionsAllowGrant` 接进能力探测链,`caps` 取 `observedPermissionsAllowGrant(baseUrl)`;位名候定,服务端定名后本包改读、端零改动。
10124
+ - **缺席 = 没说**:(CC-136)本入口没有新读口 —— 五名的行为缺席语义全在上游。(CC-291)`childSessionId` 缺席不是「不是子代」;册外码的 `undefined` 不是「事实为空」;没有 `planModeReminder` 不是「没有 plan 提醒」。(CC-294)声明 `unknown` 不是「没带」;回执上没报不是「没捕获」也不是「在捕获」;能力位读不到不是「关不掉」。(CC-298)表外名原样不等于「引擎没有这只工具」;调用方 / MCP 声明的别名不在表里,不等于「它不是别名」(KL-391)。(CC-300)`knownUndeliveredMessage` 答 `false` 不是「交出去了」,是「不知道」或「入参不是消息行」;读回账本里没有记录的旧行两判皆假,不渲成「没送到」。(CC-302)能力位 `not_reported` 不是「不支持」;`permissions` 缺席不是「没有规则」而是「没有可发的规则」。
10125
+ - **各端**:(CC-291)终端 —— 116d 一条测试格改判;其余零改动即得(换读包句的 0.89.0 待办仍在)。网页端 / 管理台 / 桌面端 —— 零改动。(CC-294)终端 —— 116d 三处删 + 换读;网页端 / 管理台 / 桌面端 —— 零改动。(CC-298)终端 —— 换读后删壳侧钉版镜像表与它的退役登记一行,别名对账格改判包读口对夹具引擎(116d)。网页端 / 管理台 / 桌面端 —— 零改动即得。(CC-300)终端 —— 请托方一件按 116d(删两只同名薄包装,影子表两行随删)。网页端 / 管理台 / 桌面端 —— 零改动即得。(CC-302)终端 —— 请托方,stamp 两车道 + 读面两处同批换读,删壳侧投影一族(116d)。网页端 / 管理台 / 桌面端 —— 零改动即得。
10126
+ 3. **成文改口**:
10127
+ - **CC-136**:见 116r(§86 R-3 一条:declined / pending → 已转;R-1 的「十个值」读作十五个值);既有段不回改,以本段为准。
10128
+ - **CC-291**:见 116a′ 第 8 – 13 条(码册与运维面码数一条 · 旧读器格作废一条 · `childSessionId` 格一条 · `full` 与键面一条 · 结算词数与 party 一条 · `shell_floor` 一条);既有段(§87 / §112 / §115 等)不回改,以本段为准;活段 §0a / §2 / §2b / §2z 与签名块通告码表长同批改。
10129
+ - **CC-294**:116a′ 第 1 – 3 条(G-FH7 两半作废、与上一份宿主侧实现零句之间的 18 格)。
10130
+ - **CC-298**:① 终端别名对账格的判据由「壳侧表逐名等于夹具引擎的别名」改为「包读口 `canonicalHookToolName` 对夹具引擎的名字解析逐名同答、`hookToolAliasesOf()` 的键恰为引擎目录里不是规范名的别名」(G-HA7 取代旧格);② 根入口公面名数 1379 → 1397(§115 起的「公面 1379」一类断言按本版数重锚;本版各项合计)。既有段(§101 / §108 / §109 / §112 / §114 / §115 等)不回改,以本段为准。
10131
+ - **CC-299**:见 116a′ 第 4 – 5 条(支持范围的口径一条 · 粗码表对拍一条);已发段不回改,以本段为准;活段 §0a / §2 / §2b 同批改(公面 1397、域 1 名数 77、域 16 名数 147)。
10132
+ - **CC-300**:无(0.88.0 §114 与 0.89.0 §115 对投递账本的既有表述原样成立;§114a PD-1 里「九只口」指当时的口数,本版起账本共十一只口:九只 uuid 键口与读写口 + 本节两只按行方法)。
10133
+ - **CC-302**:见 116a′ 第 6 – 7 条(allow 恒缺席一条 · 「allow 到没到引擎」判据一条);既有段不回改,以本段为准。
10134
+ - **CC-309**:见 116a′ 第 16 条(§115 PR 行「只读状态码」一条);已发段不回改,以本段为准。
10135
+
10136
+ **包侧缺口:** sdk registry 转口(CC-136)—— ① 本入口不转五名的响应型别名与同入口十四个邻名(RG-4 / RG-5;端上没有对应消费,有请托再加)· ② 干净安装树的 `skipLibCheck: false` 零 `Cannot find module` 只在装着的 12.0.1 上实测,15.3.0 / 16.0.0 两代按声明闭包零裸说明符判(同一缺口根因的另一读法);文件历史一句(CC-294)—— ③ 账本不记「为什么没带」:进程里第一次提交早于能力读数时没带声明、到说话时能力位已是 `on-optional` ⇒ 零句(KL-399;宿主义务见 KL-244)· ④ durable 提交只拿回执不跟流时绑不上(KL-400)· ⑤ 去重留端(KL-398)· ⑥ 投递账本其余入口在撤销式代理上仍外抛(KL-402);hooks 工具别名(CC-298)—— ⑦ 表是构建期快照:引擎之后新增的内置别名要等本包下一版换钉才进表;调用方 `spec.tools` 声明的别名与 MCP 工具的别名不在静态目录里、不在表;本口只回答「是不是内置工具的别名」,matcher 的通配 / 正则语法不在本口(KL-391);支持底线(CC-299)—— ⑧ 支持底线本版是保守初值,不是各端回报的值(KL-404)· ⑨ 引擎底线一项在活引擎上读不到,只供退役条件判(KL-407)· ⑩ `engineVersionTier` 的 `'unknown'` 不分「带前后缀的版本号」与「不是版本号的词」(KL-405)· ⑪ 粗码表仍是本包的本地字面量,sdk 支持底线越过 16.0.0 那一版改为转出 sdk 的常量;在那之前与 sdk 常量、契约那一节的一致只在门里核(KL-406)· ⑫ 既有五只「按服务端版本判功能在不在」的读口(`versionSupportsLimits` / `versionSupportsDetach` / `ccStopSemanticsFromVersion` / `versionSupportsPlanReviewModeAfter` / `inheritEnvServerSupport`)各用各的门槛,读法也不全同(前两只按前缀认三段数字,第三只去首尾空白、认前导零,后两只与 `engineVersionTier` 同为整串正式版),不随支持底线收;其中四只的门槛已低于声明的服务端底线(KL-408);投递账本(CC-300)—— ⑬ 方法绑定在创建它的那只账本上,账本没有「清空」「换底层集合」的口(两只集合只增不删);要重来就新建一只账本对象,终端 `withoutUndeliveredPromptsInSessionFile` 那种「合并出一只临时账本再过滤」的形态照旧是新建账本、读回、再调它的方法 · ⑭ 按 `PromptDeliveryLedger` 型自写并赋给该型的账本替身(测试桩)在 0.90.0 起要补两只成员(型面上是接口加必有成员,不是新名字;只传给两只自由函数的旧替身不受影响);权限规则(CC-302)—— ⑮ 能力位位名候定:服务端尚未发布这一位,今天 allow 一条都不发;定名不同时下一版改读(KL-392)· ⑯ 规则能不能编译由客户端装的引擎值级端口判,不是远端引擎:两边版本不同时,客户端收而远端拒 ⇒ 整请求 422,客户端拒而远端收 ⇒ 那条 allow 不发(deny / ask 自上一版终端起即如此;KL-393)· ⑰ 一只桶超过引擎条数上限时整请求被拒,本口不替引擎截断(三桶同律;KL-394)· ⑱ 规则编译根基取固定的绝对路径:不给任务根基的引擎车道上相对路径规则会被拒收(与上一版终端在 `/` 起头的当前目录上同形;KL-395)· ⑲ 每条规则的「最受信来源」由宿主建来源表时决定,本口只按交给它的那一个来源排 · ⑳ 整服务器 / 整 peer 写法(`mcp__<服务器>` / `a2a__<peer>`,引擎协议前缀表上的每一个协议)改写成原名 + `__*` 发(三桶);服务器 / peer 段以 `_` 结尾的仍只留客户端匹配器(KL-396) · ㉑ 能力位读器与其它能力位读器同律按属性访问读,宿主自建的能力回体上的取值器照读(KL-397);引擎 7.40.1 / 服务端 7.113.0 / 7.114.0 / sdk 16 提货(CC-291)—— ㉒ 被引擎侧 UserPromptSubmit 拦下的主提交的机读因由(`terminal.detail { kind:"prompt_blocked_by_hook", … }`,引擎 7.39.0 / 服务端 7.113.0 起)今天不读,仍只显示成 `blocked` 终局 + 文字(KL-371 的升级判据本版满足) · ㉓ 引擎 7.39.0 / 7.40.0 的 `ModePolicy` +必填 `unstated`、`HandsBandOptions` −`readCyberReminder` 两处硬破坏本包零读点(grep 核过),本版不建读口 · ㉔ 结算词 `policy_allowed` 无具名谓词(无消费场景前不铸,KL-415) · ㉕ 开发依赖 sdk 12.x 的 `Settlement` 联合没有 `policy_allowed`,编译期正向钉登记了一个滞后词,等 peer 地板抬到 ≥16.0.0 再收(KL-413;这个滞后词只许是字面量联合、不在地板 sdk 的结算联合里而在最新一代 sdk 与引擎的词表里,门按语法树核;退役登记 RL-20) · ㉖ 子代副本帧与子代自己那一帧不合并(KL-410) · ㉗ `planModeReminder` 退役后老部署(服务端 <7.113.0 ∧ 引擎 <7.39.0)少一条显式开关(KL-409) · ㉘ 老引擎仍发已退役通告码,按册外码处置、无 typed 事实(KL-411);文件历史一句(CC-294)—— ㉙ 出站体读口仍看不见三形:三只陷阱同口径撒谎的代理、嵌套值在序列化时回头改顶层体、记完之后宿主又改体(KL-401);权限规则(CC-302)—— ㉚ 规则编译器对某条 deny / ask 答不上来 ⇒ 那一条照发、未经校验,远端编译不了时整请求 422(KL-414);服务端 7.114.0 —— ㉛ 设置 hooks 的 matcher 本包不预检,「只选中别名」的 matcher 由服务端整请求拒(KL-416);「改了重发」(CC-309)—— ㉜ 让位要宿主把 `toolHistoryErrorCarrierOf` 铸的载体交进来,不传时错配行上仍给「改了再发」那一句;宿主自拼的载体照收(与判型口同一读法),但不保证与行上的错配键同答(KL-417);请求构造(CC-316 / CC-302 修订)—— ㉝ 名字里带 `(` `)` `\` 的整工具 / 整服务器 / 整 peer 规则只留客户端匹配器、不上请求体(PM-11;KL-418);`AttachmentsSpecRefused` 不按拒绝原因分子类(判原因按 `token`,不按 `why` 的文字);文件历史一句(CC-294)—— ㉞ 声明事实账本只增不删,常驻进程长期大量提交时内存随提交数涨(KL-403);结算(CC-291)—— ㉟ 服务端 <7.113.0 的无人值守腿把机器按类放行的那一问记成 `human_allowed`,`isHumanSettledGate` 在那一代上读成「人批的」(记录上分不开;KL-412)。
10137
+
10138
+ ## §115 🆕 0.89.0(2026-10-03)引擎 7.38 提货(通告码册 81 → 86 与铸方表接手服务端自铸码受众 · 工具轮不完整与用户输入没被用上两族读器 · 终局服务商拒绝详情与「改了重发」判定口 · steer 账本 503 一张码表三条腿 · 省略成因短语口)+ 审批四面问类两位 + 请求键 `disableSkills` + hooks 设置来源条目唯一执行者 + 凭据被拒判官上公面(+ 服务端 7.111.0 两项:`wiring_manifest.instructions` · 子代转向成功结局 `messageId` + 展示出口无标签 `Token <值>` 形照遮)(🔴 minor;型面 BREAKING 一处〔`SERVER_NOTICE_AUDIENCE` 退出公面〕;根公面运行期导出 1372 → 1379〔+8 −1〕;测试钩 62 不变;公面类型名 942 → 952〔+10〕;`EngineNoticeFactsCode` +3 员、`ControlSafetyCode` +1 员、子代 steer 结局联合 +1 臂、`PLUGIN_HOOK_REASONS` +6 词、`PLUGIN_HOOK_EXCLUSION_REASONS` +1 词〔穷尽分支的端编译期红〕;`ENGINE_NOTICE_CODES` 81 → 86;车道表 45 → 46;审批卡 / 宿主请求 / 活卡帧三型各 +2 可选位;hooks 计划 +2 位〔`settingsVerdicts` / `settingsExcluded`〕、引擎事实 +1 位〔`hooksCapable`〕、入参 +2 可选位;`WiringManifestChromeEvent` / `WiringManifestView` 各 +1 可选位〔`instructions?`〕、子代转向成功结局 +1 可选位〔`messageId?`〕;超集键 +1〔`_sema_instructions`〕;peer sdk 地板 `>=12.0.1` 不动;开发依赖引擎 `~7.37.1` → `~7.38.2`)
10139
+
10140
+ > **minor**,七项同发(按票序):
10141
+ > ① **CC-282**(引擎 7.38 提货):码册 81 → 86;引擎码册自带的铸方表接手服务端自铸码的受众,本包手写四行表退役、公面名删除(NM-1 – NM-6);`task.tool_turn_incomplete` 事实读器(TI-1 – TI-3);`task.user_steer_undrained` / `task.user_followup_undrained` 一只读器两臂 + 一句用户面话(UI-1 – UI-6);终局 `failed.detail`(服务商拒绝详情)窄读 + 「改了重发」判定口与两句,只读状态码(PR-1 – PR-4);steer 账本写不进的 503 归「原文稍后重发」一档,主 run / 自愈 / 子代三条腿读同一张码表(SL-1 – SL-4);省略成因短语口与整句同表派生(OP-1 – OP-2);引擎 7.38 其余类型位逐键处置(TY-1 – TY-5);引擎 7.39.0 预告四项登记观察(W-1 – W-4)。
10142
+ > ② **CC-284**:审批四面(活卡帧 / 待决行 / 卡 / 队列行)问类两位 `askClass` / `classes` 窄读投影(AC-1 – AC-6)。
10143
+ > ③ **CC-277**:请求键 `disableSkills`(不装部署技能与请求技能)上车道表 + 冲突按名拒 + 能力位两代读法片段口(DS-1 – DS-6)。
10144
+ > ④ **CC-287**:hooks 计划给设置来源条目定**唯一执行者**,与插件条目共用一只判定;本端跳过口按内容认条目、只对照请求体(HK-1 – HK-10,115a-1)。
10145
+ > ⑤ **CC-289**:凭据被拒判官 `isReadCredentialRefusal` 上根入口(CR-1 – CR-2)。
10146
+ > ⑥ 服务端 7.111.0 两项(CC-282 余项):`wiring_manifest` 接线回执新段 `instructions`(这条腿准备时项目记忆加载器选中的指令文件)投影、子代转向成功结局 `messageId` 透传;只带这一段的帧开始出事件(IN-1 – IN-4 · MI-1)。
10147
+ > ⑦ **CC-290**:展示出口对无标签裸 `Token <值>` / `token <值>` 形照遮 —— `token` 进方案词网,与 `Bearer` / `basic` 同分隔、同放行判法;同批两处只多遮的收拢(URL 片段断点、跨行控制串一遍落定;DU-7 – DU-10)。
10148
+ > ⑧ 下一 minor(0.90.0)合成行行种机读位与读法的口形预告见 115e(本版零代码)。
10149
+ > **到货点名**:终端 —— 请托方七件(hooks 跳过口与两只新入参及两处接缝、`--disable-slash-commands` 接片段口、fleet 流 401 改调判官、steer 未用上通告改读包句、成因行改读短语口、终局错误行出路句改读判定口、指令文件来源读点)按 115d;🔴 `ControlSafetyCode` 穷尽 `switch` 编译红一次(+`ledger_unavailable`)。网页端 / 管理台 —— 零改动即得(审批卡多两只可选位;不渲 `engine_notice`)。桌面端 —— 冻结期零改动。
10150
+
10151
+ ### 115a. 处置表
10152
+
10153
+ 包处置列与各端列的词同 §114a(按本机克隆的只读检索,读的是哪一个提交见 115d)。
10154
+
10155
+ | # | 面 | 包处置 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
10156
+ |---|---|---|---|---|---|---|---|---|---|
10157
+ | NM-1 | `ENGINE_NOTICE_CODES` | changed(consumed:引擎 7.38 码册 +5;生成物) | 81 → 86(+`task.tool_turn_incomplete` / `instructions.source_changed` / `session.records_skipped` / `memory.layer_locked_legacy` / `server.model_unreachable`) | 零改动即得(呈现闸按码册判,新码由兜底行变通用行) | n/a(不渲 `engine_notice`) | n/a | 零改动即得(按码原词投) | pending(G-NM1 / G-NM5) | 115a′ 第 1 条 |
10158
+ | NM-2 | 服务端自铸码的受众来源 | changed(引擎码册铸方表接手;手写表退役) | 手写四行表 → 引擎生成表;四码的受众逐码同 0.88.0 | 零改动即得 | n/a | n/a | n/a | 回归约束(G-NM3) | 115b |
10159
+ | NM-3 | 根入口 `SERVER_NOTICE_AUDIENCE`(🔧 退出公面)| 🔴 removed(型面 BREAKING) | 冻结四键对象 → 不再导出 | 零改动即得(源码零读点) | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-NM4) | 115y ① |
10160
+ | NM-4 | `engineNoticeInCatalog` / `noticeAudienceOf` | changed(只查生成物) | 生成码册 ∪ 手写表 → 生成码册;`task.tool_turn_incomplete` 册外 / `operator` → 在册 / `user` | 零改动即得 | n/a | n/a | n/a(只在测试里断言别的码) | pending(G-NM2) | 115a′ 第 2 条 |
10161
+ | NM-5 | 通告码册常驻门对服务端发布包的对账 | changed(门内) | 对服务端手写受众表逐行对 → 对引擎铸方表与服务端会话流白名单对(服务端 7.110.0 起不再持手写表) | — | — | — | — | — | — |
10162
+ | NM-6 | 引擎 7.38 起闭集数组冻结 | 不变(本包读口对冻结入参与未冻结入参同答、不就地改入参) | — | 回归约束 | — | — | — | 回归约束(G-NM6) | — |
10163
+ | NM-7 | 事实读器与派发口读通告信封(`code` / `detail`);`providerRejectionResend` 读终局读数的 `detail` | changed(只认自有属性;收紧方向) | 按属性访问(原型链上的同名键算在场;派发口读出后再交读器)→ 只认自有属性(只在原型链上 ⇒ `undefined`,派发口与直读器、句口同答;来自 JSON 的通告读数不变) | 零改动即得 | 零改动即得 | n/a | 零改动即得 | pending(G-NM7 / G-PR3e) | 115a′ 第 16 条 |
10164
+ | TI-1 | 根入口 `readToolTurnIncomplete` + 派发表一行 | added(公面 +1) | 派发口答 `undefined` → `{ code, audience:'user', facts:{ cause, count, sessionId, runId, toolCallIds? } }` | pending(非必改:要专属句再读位;今天落通用行) | n/a | n/a | n/a | pending(G-TI1 – G-TI4) | 115b |
10165
+ | TI-2 | 型 `ToolTurnIncompleteCause` | added(公面类型 +1;引擎闭集的字面联合) | — | 零改动即得 | — | — | — | — | 115b |
10166
+ | TI-3 | `cause` 读法 | 开集透传 | 表外词原样带回 | 回归约束 | — | — | — | pending(G-TI3) | 115b |
10167
+ | UI-1 | 根入口 `readUserInputUndrained` + 派发表两行(steer / follow-up 两码同一读器) | added(公面 +1) | 派发口答 `undefined` → `{ kind:'steer'\|'followUp', count, cause?, taskId?, sessionId?, runId? }` | 🔴 pending(请托方:终端 1.0.140 已在壳侧按 `cause` 分两句〔自家措辞,登记了退役条件〕—— 退掉壳侧那一份、换读包句,见 115d) | n/a | n/a | n/a | pending(G-UI1 – G-UI6) | 115b |
10168
+ | UI-2 | 根入口 `userInputUndrainedNotice(facts)` | added(公面 +1) | 无 → 按 `kind` × `cause` 四句(表外 / 缺 `cause` 走保守句);读不懂的入参 ⇒ `undefined`(返回型 `string \| undefined`) | 🔴 pending(同 UI-1;两只都答 `undefined` 时落既有通用行) | n/a | n/a | n/a | pending(G-UI7) | 115b |
10169
+ | UI-3 | `crashed` 臂 `runId` | 结构性缺席 | — | 回归约束(不按 `runId` 判坏形) | — | — | — | pending(G-UI2) | 115b |
10170
+ | UI-4 | 去重口径 | 不变(本包不铸去重键) | 同一条告知 run 的流内 `(code, taskId)` 恰一帧;跨流不去重、条数相加;重放按事件序号去重 | 回归约束(终端现行按事件身份去重,相容) | — | — | — | — | 115b |
10171
+ | UI-5 | 引擎 7.39.0 预告的子代上报位 `childSessionId` | declined(本版不读;读数形留位,到货当版加一只可选位) | — | 零改动即得 | — | — | — | 回归约束(G-UI5:带它与不带它读数逐字节同) | 115b |
10172
+ | UI-6 | `cause` 在 follow-up 码上 | 开集透传(引擎今天不铸;铸了照读,表外词落保守句) | — | 零改动即得 | — | — | — | pending(G-UI6g / G-UI7c) | 115b |
10173
+ | PR-1 | `readRunTerminal` failed 臂 `detail?` | added(可选位;服务端 7.110.0 / 引擎 7.38 起) | 不读 → `{ kind, status?, code? }` 窄读(`provider_rejected` 而缺状态码或状态码不在 400–599 ⇒ 整只丢;只读自有数据位;扁平形不读) | pending(请托方:错误行按 PR-2 分两句) | pending(非必改:`ui/lib/engine/engine-turn-legs.ts` 用 `readRunTerminal`,要分句就读) | n/a | pending(非必改) | pending(G-PR1 / G-PR3 / G-PR4) | 115b |
10174
+ | PR-2 | 根入口 `providerRejectionResend(detail)` | added(公面 +1) | 无 → `{ resend:'edit_and_resend'\|'not_by_editing', text }`;只读状态码(400 / 413 / 422 ⇒ 改了重发;其余 ⇒ 改了也不行,句子按档给出路:401 / 403 查凭据 · 404 换模型 · 429 等一等再发 · 5xx 稍后再试 · 其余查账户或稍后再试) | pending(请托方) | pending(非必改) | n/a | pending(非必改) | pending(G-PR2) | 115a′ 第 3 条 |
10175
+ | PR-3 | 型 `RunTerminalFailureDetail` / `ProviderRejectionResend` | added(公面类型 +2) | — | — | — | — | — | — | — |
10176
+ | PR-4 | 无 `detail` 的失败终局 | 不变 | 三面读数逐字节同 0.88.0 | 回归约束 | 回归约束 | — | 回归约束 | 回归约束(G-PR5) | — |
10177
+ | SL-1 | `ControlSafetyCode` +`ledger_unavailable` 与处置句 | changed(型 +1 员;码表 +1 行,类名兜底 +1 行) | `steering.ledger_unavailable` 落开集位 `steering_other` → 专位 + 「没送到、原文稍后重发(同一个幂等键照用)」;主 run 腿与另两条腿同一合取(状态码 503 ∧ 码或类名),码或类名在而状态码对不上(502 / 串 / 缺席)仍落 `steering_other`;开集位 `steering_other` 的处置句按状态码分两句(4xx「没落地」= 0.88.0 原句 / 非 4xx「送达未知」) | 🔴 编译红一次(`sema/controlSafetyAdvice.ts` 穷尽 `switch`);运行期有兜底不抛 | n/a | n/a | n/a | pending(G-SL1 / G-SL2) | 115y ① |
10178
+ | SL-2 | 自愈 steer 腿的送达判定(`atMostOnceFailureClass`) | changed | 503 一律「送达未知」→ 503 ∧ 该码 ⇒「确知没送到」(服务端先记账后交引擎,账本写不进时引擎零字节) | 零改动即得(自愈三选卡在这一形上不再说「可能已送到」) | 零改动即得 | n/a | n/a | pending(G-SL3);回归约束(G-SL3b) | 115a′ 第 4 条 |
10179
+ | SL-3 | 子代 steer 结局 +1 臂 `{ ok:false, reason:'not-delivered', safety:'ledger_unavailable', detail }` | changed(联合 +1 臂;公面类型 +1 `SubagentSteerNotDelivered`) | 503 → `reason:'error', detail:'503'` → 专臂,`detail` 是那一句;条件 = 503 且该码(与自愈腿同一判定;状态码读 `status`,缺席读 `statusCode`) | 零改动即得(终端按 `detail ?? reason` 渲,非穷尽) | n/a | n/a | n/a | pending(G-SL4) | 115y ① |
10180
+ | SL-4 | 其余八码 | 不变 | — | 回归约束 | — | — | — | 回归约束(G-SL5) | — |
10181
+ | OP-1 | 根入口 `taskRequestOmissionCausePhrase(cause)` | added(公面 +1) | 无 → 成因从句(小写起头、无句点,接在端自己的「没发出去」半句之后);表外 ⇒ 认不出原因那一句 | pending(请托方:成因行改读短语口,行形不变) | n/a | n/a | n/a | pending(G-OP2 / G-OP3) | 115b |
10182
+ | OP-2 | `TASK_REQUEST_OMISSION_CAUSE_NOTICES` 四句与表外兜底句 | 不变(改为与短语同表派生;编译期两向钉由整句表移到两列表) | 逐字节同 0.88.0 | 回归约束 | — | — | — | 回归约束(G-OP1) | — |
10183
+ | TY-1 | 引擎 7.38 `AssistantMessage.apiErrorCode` | declined | 不上端面(服务端不过境) | — | — | — | — | — | 115b |
10184
+ | TY-2 | 引擎 7.38 `SessionMemoryStatus.writeHome` | declined | 服务端会话记忆状态路由刻意不带这一位 | — | — | — | — | — | 115b |
10185
+ | TY-3 | 引擎 7.38 hook 回调上下文 `permissionMode` | n/a | 服务端 hook 载荷内部,本包零读点 | — | — | — | — | — | — |
10186
+ | TY-4 | 引擎 7.38 工具调用 id 折叠理由 +`duplicate` | 不变 | 对应通告是运维面、本包无读器 | — | — | — | — | — | — |
10187
+ | TY-5 | 开发依赖引擎 `~7.37.1` → `~7.38.2` | changed(构建期) | 7.38.1 / 7.38.2 闭集零变化 | n/a | n/a | n/a | n/a | — | — |
10188
+ | TY-6 | 开发依赖 `@sema-agent/settings-schema` `^6.0.0` → `^7.0.1`(CC-296) | consumed(构建期;不进 peer、不出包) | 本包 `src/` 零 import、7.0.0 删除 / 改形的 WorkerSpec 面零读点;读该包产物的六道常驻门换钉前后逐格同读(`hooks.js` 两版逐字节同);门侧补两格对账(G-HK29;公面门 ⑤c) | 零改动即得(终端 1.0.141 已先行钉 7.0.x) | 零改动即得 | 零改动即得 | 零改动即得 | — | — |
10189
+ | W-1 | `steering_injected.source` 引擎 7.39.0 预告 −`plan_mode` +`output_style` | watch | 本包标签表开集 + 默认句,不会红;到货后加一行标签、`plan_mode` 行留作老引擎词 | — | — | — | — | — | — |
10190
+ | W-2 | 任务规格 `outputStyle` 席 | watch | 候服务端受理 | — | — | — | — | — | — |
10191
+ | W-3 | 问类闭集 +`shell_floor` | watch(零改动:AC 读法开集) | — | — | — | — | — | — | 115b |
10192
+ | W-4 | 门记录结算 +`policy_allowed` / 当事方 `policy` | watch(门记录读口开集透传) | — | — | — | — | — | — | — |
10193
+ | AC-1 | 活卡帧 `tool_approval` 的 `askClass?` / `classes?` | consumed(服务端 7.109.0 起铸) | 不投 → 成对窄读(在场原样冻结;半对 / 首员不符 / 重复员 / 坏形 ⇒ 两位都丢;不判成员、不重排) | pending(非必改:卡面可选显示问类) | 零改动即得 | 零改动即得 | 零改动即得 | pending(G-AC1 – G-AC3) | 115b |
10194
+ | AC-2 | 待决行(`livePending[].frame`) | consumed(随帧腿,零额外代码) | 同 AC-1(行顶层不带这一对,只认整帧里的) | 同 AC-1 | 零改动即得 | — | — | pending(G-AC4) | 115b |
10195
+ | AC-3 | 耐久待决行(运维队列行,`GET /v1/approvals` 的 `pending[]` 行顶层)与卡 → 座位过境口 `toolPermissionRequestAskBits` | consumed | 同 AC-1(同一只成对窄读) | 同 AC-1 | 零改动即得(座位腿经过境口自动多带两位) | 零改动即得 | 零改动即得 | pending(G-AC5 / G-AC6 / G-AC7) | 115b |
10196
+ | AC-4 | 型 `ApprovalCardRequest` / `ToolPermissionRequest` / `ToolApprovalFrame` 各 +2 可选位;`TOOL_APPROVAL_FRAME_KEYS_MIRROR` 31 → 33、`TOOL_PERMISSION_REQUEST_KEYS` 14 → 16 | added | — | 零改动即得 | 零改动即得(键表恰等断言加两键) | 零改动即得(手拼请求不受影响) | 零改动即得 | 回归约束(G-AC9) | 115a′ 第 9 条 |
10197
+ | AC-5 | 门记录两臂的同名两位 | 不变 | — | 回归约束 | 回归约束 | — | — | 回归约束(G-AC8) | — |
10198
+ | AC-6 | `approval_request` 卡面(呈卡帧 / 断连重放帧)上的同一对 | 不变(信封原样过境,0.65.0 起本包不窄读这一面) | 端用自己的 v1 谓词窄化后读 `card.askClass` / `card.classes` | — | — | — | — | 回归约束(G-AC6b) | 115b |
10199
+ | DS-1 | `TaskRequestInput.disableSkills?: true` + 车道表一行 | added(车道表 45 → 46) | 表外键 ⇒ `TypeError` → interactive / print(live)带 `disableSkills:true`;非 live ⇒ 回执 `not_live`;utility ⇒ 回执 `off_lane`;座位读数 interactive / print `seated`(live 门后)、utility `none` / `off_lane` | pending(请托方:`--disable-slash-commands` 接 DS-4 片段口) | n/a(零读点) | n/a | n/a | pending(G-DS1) | 115a′ 第 5 条 |
10200
+ | DS-2 | `false` / `undefined` / `null` | 不变语义 | 不发、不进回执(替服务端重申缺省) | — | — | — | — | pending(G-DS2) | 115b |
10201
+ | DS-3 | 坏值 / 与非空 `skills` 或任一非空 `agents[].skills` 同在 | added(装配期按名拒;兜底层落 `agents` 后同判) | → `TypeError`(坏值句点名键、不回显值;冲突句点名两键、说二选一、不回显技能名);**不分车道、不受 live 门**;报错次序:坏值 → 表外键 → 缺会话 → 冲突 → utility 车道前提。`applyLiveRequestDefaults` 在「带这一键 ∧ 落位后的 agents 带技能」这一形上 `TypeError`(该函数唯一会抛的一形) | pending(随 DS-4 请托:带技能的 agent 定义要在交 agents 之前决定二选一,见 115d) | — | — | — | pending(G-DS3 / G-DS4) | 115b |
10202
+ | DS-4 | 根入口 `disableSkillsDeclaration(want, baseUrl)` | added(公面 +1,型 +1) | 无 → 能力位落地且为真才给 `{disableSkills:true}`;没报 / 为假 / 未读到 / 读不懂 ⇒ 不给键 + 一句;**意图是 `true` / `false` / 缺席以外的值 ⇒ `TypeError`,先于能力位判**(能力位没读到时也拒 —— 不借「这一次不发」吞掉打错的值);产物冻结 | pending(请托方) | n/a | n/a | n/a | pending(G-DS5 / G-DS6) | 115b |
10203
+ | DS-5 | 能力位 `disableSkills` | consumed(两代读法) | 缺席 = 服务端 ≤ 7.108.0 没报,**不折**「不支持」 | — | — | — | — | — | 115b |
10204
+ | DS-6 | 不带这一键的一切装配 | 不变 | 逐字节同 0.88.0 | 回归约束 | 回归约束 | — | 回归约束 | 回归约束(G-DS7) | — |
10205
+ | HK-1 | hooks 计划对设置来源条目的执行者判定 | changed(CC-287;插件与设置来源共用一只判定) | 设置来源条目照投、端的本地执行器照跑(引擎事件上两边都跑)→ 每条恰一个执行者(115a-1) | 🔴 pending(请托方:本地执行器按 HK-5 跳过) | 零改动即得(无本地执行器,读数不变) | n/a | n/a | pending(G-HK1 – G-HK9 / G-HK13) | 115a-1 · 115a′ 第 6 条 |
10206
+ | HK-2 | 请求体 `settings.hooks` | changed(只多拿掉一类) | 引擎事件上执行者判为「本端」或被「非用户所写」排除的设置来源条目不再上请求体(部署要身份、`taskSettings.hooks: false` 时,本端跑得了的那几只同样不上 —— 引擎本来整份忽略);其余逐字节同 0.88.0(非引擎事件、形坏 / 表外型条目、本端跑不了的条目照旧) | 见 HK-1 | 零改动即得 | n/a | n/a | 回归约束(G-HK11 / G-HK12 / G-HK22) | 115a′ 第 6 条 |
10207
+ | HK-3 | 计划入参 `shellHookTypesByEvent?` / `promptAuthoredByUser?` | added(可选位) | 型表缺席 ⇒ 插件条目按 0.88.0 口径(报了事件即全型);设置来源条目 command / http 按事件、prompt / agent 视为本端跑不了(留在请求体上照投);`promptAuthoredByUser` 缺席 ⇒ 用户所写;坏形 ⇒ 当缺席 | pending(请托方:两只都交,与换钉同批) | n/a | n/a | n/a | pending(G-HK6 / G-HK7 / G-HK20) | 115b |
10208
+ | HK-4 | 计划 `settingsVerdicts` / `settingsExcluded`、引擎事实 `hooksCapable` | added(计划型面 +2 位,引擎事实 +1 位) | — 判形口(`hooksForWire({ plan })` 认不认计划)与跳过口(`settingsHooksKeptLocally`)对缺这两只数组的计划同按空数组收下(跳过口按空排除表照比请求体:随请求发出的那几只本端认得出);在场就必须是数组(跳过口遇在场而不是数组 ⇒ 读不懂、本端照跑) | 零改动即得(按 0.88.0 型面拼 / 派生计划的 JS 宿主照旧可用;TypeScript 自造计划字面量要补两位) | — | — | — | pending(G-HK1 / G-HK7 / G-HK19 / G-HK30) | 115b |
10209
+ | HK-5 | 根入口 `settingsHooksKeptLocally(plan, event, group, opts?)` | added(公面 +1;与插件跳过口同形) | 无 → 按内容(matcher + 条目身份)对照计划的请求体认条目(🔴 交原样的设置组,不补缺省 `shell`、不改条目;matcher 缺席 / 空串 / `*` 同义 —— 都是全匹配),返回本端该跑的那几只(零改动时返回同一数组引用);压缩两事件收 `engineCompaction`;非用户所写的提交上 `UserPromptSubmit` ⇒ 空;请求体一侧只认自有键,本端组 / 条目按属性访问读(本端执行器读到什么就按什么比:类实例、原型上的取值器照读) | 🔴 pending(请托方) | n/a | n/a | n/a | pending(G-HK1 / G-HK10 / G-HK18 / G-HK31) | 115a-1 |
10210
+ | HK-6 | `PLUGIN_HOOK_REASONS` +6(`engine_hooks_off` / `engine_hooks_unknown` / `engine_type_skipped`〔PowerShell 形 command,确定〕/ `engine_llm_limit`〔本事件第五只起的 prompt / agent,引擎可能跳过,不确定〕/ `engine_unconfirmed` / `engine_elsewhere`)/ `PLUGIN_HOOK_EXCLUSION_REASONS` +1(`prompt_not_user_authored`) | changed(词表 +7) | — | 零改动即得(按词穷尽零读点) | — | — | — | — | 115y ① |
10211
+ | HK-7 | 插件条目的判定 | changed(两处订正) | ① 端交了型表时,本端执行器跑不了的型(终端:agent 型、非四事件上的 prompt 型)不再判「本端跑」,改「不会执行」并进清单;② 「非用户所写」的提交上 UserPromptSubmit 条目排除(`excluded` 同词);端不交型表时插件判定逐格同 0.88.0 | 零改动即得(清单多出如实的行) | — | — | — | pending(G-HK6p / G-HK7p);回归约束(G-HK14) | 115a′ 第 7 条 |
10212
+ | HK-8 | 「不会执行」清单 `hooksNotRunNotice` | changed | 设置来源只列被拿掉的两类 → 另列执行者判为「不会执行」的设置来源条目(PowerShell 形 command;引擎整份忽略且本端跑不了);被拿掉条目是否列,按端报的型表问「本端跑不跑得了这一型」 | 零改动即得(多出的行如实) | — | — | — | pending(G-HK9 / G-HK15 / G-HK21) | — |
10213
+ | HK-9 | 主提交被引擎侧 UserPromptSubmit 拦下的机读因由 | pending(候引擎 7.39.0 与服务端提货那一版) | 本版端上只见 `blocked` 终局 + 文字 | 候 | — | — | — | — | 115b |
10214
+ | HK-10 | `-p` 车道 / 不报本地事件的宿主 / 不传计划的 `hooksForWire()` | 不变 | 请求体逐字节同 0.88.0 | 回归约束 | 回归约束 | — | — | 回归约束(G-HK11 / G-HK12) | — |
10215
+ | CR-1 | 根入口 `isReadCredentialRefusal(e)` | added(公面 +1;零行为变化) | 包内判官 → 公面(与包内两处读口是**同一只函数**) | pending(请托方:fleet 流计数改调它;去抖留端) | n/a | n/a | n/a | pending(G-CR1 / G-CR3) | 115b |
10216
+ | CR-2 | 判官射程 | 不变 | 401 ∧ 码 ∈ {`auth.unauthorized`, 无码 / 空码};身份类两码不算 | 回归约束 | — | — | — | 回归约束(G-CR2) | 115b |
10217
+ | IN-1 | chrome `wiring_manifest` 臂 `instructions?: { readonly selected: readonly string[] }` | added(可选成员;服务端 7.111.0 起) | 未知段静默 → 在场原样冻结副本(`selected:[]` 原样;缺席不补键) | pending(请托方:指令文件来源读点;见 115d) | n/a(本机检索零读点) | n/a | n/a(零读点) | 本版证明(G-IN1 – G-IN4、G-IN6、G-IN7) | 115b |
10218
+ | IN-2 | `WiringManifestView.instructions?`(`readSubmitWiringManifest`) | added(视图 ≡ chrome 臂的两道编译期钉随之过) | — | 零改动即得 | — | — | — | 本版证明(G-IN1f / G-IN3d) | — |
10219
+ | IN-3 | 超集键 `_sema_instructions` | added(超集键 +1) | — | 零改动即得 | 零改动即得 | 零改动即得 | 零改动即得 | 回归约束 | — |
10220
+ | IN-4 | 只带这一段的帧 | changed | chrome:`not_in_slice` → 成臂;提交回执:`unreadable` → `manifest` | 零改动即得(见 115a′ 第 8 条两处可观察变化) | — | — | — | 本版证明(G-IN3、G-IN5 真帧格) | 115a′ 第 8 条 |
10221
+ | MI-1 | 子代转向成功结局 `messageId?` | added(可选位;服务端 7.111.0 起) | 不读 → 自有非空串原样 | 零改动即得(`screens/REPL.tsx` 只渲 `receipt`,调试日志整只序列化会多一键) | 零读点 | — | 零读点 | 本版证明(G-MI1) | 115b |
10222
+ | DU-7 | `displayUntrusted` / `displayUntrustedMarks` / 本包铸点(合成终局行、结果帧 `errors[]`):无标签的方案词 `token` | changed(CC-290;只多遮) | `Token <值>` / `token <值>` 原样 → `Token «redacted:secret»`(全出口,只开 URL 结构面的出口除外 —— 那一只本来不认词级形,与 `Bearer <值>` 同);放行表内的英文词原样;地址路径以 `/token` 收尾后接三位状态码(日志行形)原样;同一位置能按标签读的照旧按标签读;凭据标签的值以 `token` 方案词起头(`"token": "Token <…>"`)⇒ 外层标签整值遮(与 0.88.0 同字节);`token` 只给它自己的值加遮盖,标签与 `bearer` / `basic` 的值照 0.88.0 读 | 零改动即得(判据形「不含值 ∧ 含 `«redacted:`」直接成立) | 零改动即得 | n/a | 零改动即得 | pending(G-DU17 – G-DU20 / G-DU23 / G-DU24 / G-DU26 / G-DU27) | 115a′ 第 11 / 15 / 17 条 |
10223
+ | DU-8 | 带 scheme 的地址:query / 片段里「值 + Unicode 空白 + 方案词 / 标签」 | changed(只多遮;判据与 `,` / `;` 处并成一只) | 一律断开、让给词级面 → 只在那一对的分隔是 ASCII 空白时断;否则值在片段里、按 query / 片段整只遮(全开出口上方案词 / 标签名随之并进 query 记号) | 零改动即得 | 零改动即得 | n/a | 零改动即得 | pending(G-DU21) | 115a′ 第 12 条 |
10224
+ | DU-9 | 跨行控制串的屏上内容 | changed(只多遮;幂等收口) | 折平 / 转义形出口上要洗两遍才落定 → 一遍落定 | 零改动即得 | 零改动即得 | n/a | 零改动即得 | pending(G-DU22) | 115a′ 第 13 条 |
10225
+ | DU-10 | 公面签名 / 类型 / 选项 | 不变 | 零新公面名;`DisplayUntrustedOptions` 各位语义不变 | — | — | — | — | 回归约束 | — |
10226
+
10227
+ #### 115a-1 · hooks 执行者:一只判定(HK-1)
10228
+
10229
+ 对每一只过了治理(工作区信任 / 托管关停 / 启动模式 / 只剩托管)、在引擎点亮的九个事件之一上的 command / http / prompt / agent 条目,按序取第一条成立的:
10230
+
10231
+ 1. 事件是 UserPromptSubmit,而计划入参说这一发的 prompt **不是用户写的** ⇒ 排除:不上请求体、本端也不跑、不进「不会执行」清单(插件条目同)。
10232
+ 2. 先问「引擎为什么不一定跑它」,按序取第一条:PowerShell 形 command(引擎恒跳,确定)/ 能力位 `taskSettings.hooks` 显式为假(引擎整份忽略,确定)/ 能力位没读到或没报(不确定)/ prompt · agent 型在本事件请求体上(去重后、只数留在请求体上的)排在第四只之后(不确定 —— 引擎只数真跑了的这类条目)。
10233
+ 3. 没有理由(引擎确定会跑)⇒ 本端能跑这一只且引擎不确认是本客户端在本机起的 ⇒ **本端跑**、不上请求体;否则 ⇒ **引擎跑**:上请求体,本端跳过。
10234
+ 4. 有理由且本端能跑 ⇒ **本端跑**、不上请求体。
10235
+ 5. 有确定理由且本端跑不了 ⇒ **不会执行**:照 0.88.0 上请求体,进清单。
10236
+ 6. 有不确定理由且本端跑不了 ⇒ 照上请求体,判 `engine_unconfirmed`(引擎多半会跑,本包证不了;不进清单)。
10237
+ 7. 压缩两事件(PreCompact / PostCompact)上,第 3 条里「本端能跑而引擎不确认自有」与第 4 条里「理由不确定」的条目改判 **引擎跑**(`engine_unconfirmed`,上请求体)—— 引擎在 run 中途自动压缩时只跑请求带来的 hooks,端的执行器没有机会先跑;移出请求体就是那一次谁都不跑。理由确定的(PowerShell 形 / 能力 false:引擎反正不跑)与 prompt / agent 排在第四只之后(引擎在自动压缩里本来也超限不跑)照第 4 条本端跑。客户端发起的压缩里本端经跳过口 + `engineCompaction` 去重(KL-368 / KL-369)。
10238
+
10239
+ 「本端能跑」= 端报了这个事件,且(端没交型表 ∨ 型表没列这个事件 ∨ 列了这一型);例外:端没交型表时,设置来源的 prompt / agent 条目按「本端跑不了」判(留在请求体上照投)。非引擎事件上的设置来源条目、形坏(含必要字段坏形:`command` / `url` / `prompt` 不是非空串)或表外型的条目不判定,照 0.88.0 上请求体。压缩两事件(PreCompact / PostCompact):引擎对自动压缩与客户端发起的压缩请求都跑(只跑请求带来的 hooks);本端跳过口收 `engineCompaction`(引擎这一次真压了 / 没交 ⇒ 判给引擎的条目本端跳;没压 ⇒ 本端照跑)。插件条目沿用 §101 的投影条件,同一只判定的插件分支;端交了型表时「本端跑」只给本端真能跑的型。
10240
+
10241
+ ### 115a′. 成文改口(旧判据眼作废 → 新判据眼)
10242
+
10243
+ 1. **改读**(CC-282):「通告码册八十一码」→ **八十六码**(§114 G-TT1 的长度眼作废,G-NM1 接替);「派发表用户面码恰十三个」→ **十六个**(+`task.tool_turn_incomplete` / `task.user_steer_undrained` / `task.user_followup_undrained`),运维面四个不变。「`approval.read_root_granted` 紧跟 `task.interrupt_unconsumed`」(§109 / §114 G13 一类)作废 → 紧跟 `task.tool_turn_incomplete`,其前一位才是 `task.interrupt_unconsumed`。
10244
+ 2. **作废**(CC-282):§108a / §109a / §114a′ 第 7 条「`SERVER_NOTICE_AUDIENCE`(退出公面)键集恰为 N 行」一类格 —— 本版起根入口不再有这个名字;四只服务端码的受众改按 `noticeAudienceOf` 断言(值不变,G-NM3)。§114 末行「包侧缺口」⑨「服务端自铸码的受众仍由本包手写一张四行小表」收口。「`session.records_skipped` / `server.model_unreachable` 不在引擎码册里」(§108 K0c / §114 M0c 一类)作废 → 在引擎码册里,铸方记服务端;受众值不变。
10245
+ 3. **新判据**(CC-282):「终局失败能不能改了重发」只按 `providerRejectionResend(readRunTerminal(…).detail)` 断言;**不要**按 `detail` 在场判(401 / 403 / 429 也带服务商拒绝详情)。
10246
+ 4. **改读**(CC-282):自愈三选卡 steer 腿遇 503 ∧ `steering.ledger_unavailable`:修前「送达未知」→ 本版「确知没送到」。按「5xx 一律送达未知」写的格在这一码上作废,其余 5xx 不变(G-SL3b)。
10247
+ 5. **作废**(CC-277):「`disableSkills` 是表外键 ⇒ 装配口 `TypeError`」→ interactive / print 有座、utility `off_lane`;按旧行为写的格判红是正确行为。
10248
+ 6. **改读**(CC-287):「端的本地执行器跑设置来源 hook、请求体照投」作废 → 每条恰一个执行者;按「请求体 `settings.hooks` 等于各来源拼接(去重后)」断言的格,在端报了本地触发的引擎事件(终端交互车道:UserPromptSubmit / PreCompact / PostCompact)上改按 `settingsVerdicts` 断言(判给本端的条目不在请求体里)。部署要身份(`taskSettings.hooks: false`)时这些事件上本端跑得了的条目同样不在请求体里(此前文字「多租户上照旧上请求体」作废,以本条为准)。`-p` 车道、不报本地事件的宿主与不传计划的 `hooksForWire()` 不受影响。压缩两事件例外:引擎可能跑的条目(能力真而不确认自有 / 能力没读到)判 engine / `engine_unconfirmed`、照在请求体里(引擎自动压缩只跑请求带来的 hooks;115a-1 第 7 条),只有引擎确定不跑的(能力 false / PowerShell 形)与本事件第五只起的 prompt / agent(引擎自动压缩时本来也超限不跑)在本端能跑时判给本端、不在请求体里。
10249
+ 7. **改读**(CC-287;§101 插件 hook):「端报了某事件 ⇒ 该事件上投不了的插件条目判『本端跑』」射程收成「端报了该事件**且**端在该事件上能跑这一型」(端交 `shellHookTypesByEvent` 时);端不交则同 §101。
10250
+ 8. **作废**(服务端 7.111.0 两项):「只带 `instructions` 一段的 `wiring_manifest` 帧 ⇒ `not_in_slice`」「非流式回执只带这一段 ⇒ `unreadable`」→ 成臂 / `manifest`;`wiring_manifest` 事件键集加 `instructions`(present-iff 服务端陈述了)。两处可观察的连带变化:① print 车道名册判定口 `printInitRosterSignal` 对只带这一段的帧答 `no-roster` / `manifest-without-roster`(0.88.0 这一帧不出消息、判定口继续等);② 终端一次性任务回落里读 `readSubmitWiringManifest` 的那一处,对只带这一段、没有名册的回执从「回执读不出」那一句换成「回执报的工具数读不出」那一句(两句都拒用结果,结论不变;真部署上服务端 7.111.0 的回执恒带 `autoMode` 等段,只带这一段的回执是构造形)。§114 / §109 各处「十一段」→「十二段」。
10251
+ 9. **改读**(CC-284):「`TOOL_APPROVAL_FRAME_KEYS_MIRROR` 恰 31 键」→ 33 键、「`TOOL_PERMISSION_REQUEST_KEYS` 恰 14 键」→ 16 键(各 +`askClass` / `classes`);「`toolPermissionRequestAskBits` 出参键集恰为 …」在卡入参带一对时多两键。卡入参上本来没有这两位,没有可作废的旧判据。
10252
+ 10. **作废**(CC-282):按「`readUserInputUndrained` 读数含 `childSessionId`」写的格 —— 本版不读那一位(UI-5,G-UI5 钉带它与不带它读数逐字节同)。
10253
+ 11. **改读**(CC-290;DU-7):「无标签的 `Token <值>` / `token <值>` 原样上屏」(含按此写的现状钉)作废 → 全出口遮值(只开 URL 结构面的出口除外,同 `Bearer <值>`)。方案词 `token` 的放行表是闭集(取自错误串与日志里 `token` 之后实际出现的英文词);表外的英文词、数字、反引号里的变量名、引号包着的词、截短回显的值都按值遮 —— 多遮一个词,不露凭据(KL-382)。地址路径以 `/token` 收尾后紧跟三位 HTTP 状态码(日志行 `POST /oauth/token 400 Bad Request`)原样放行,路径尾后跟别的值照遮。端侧按字节断言「`token` 后面那个词原样」的格须先核那个词在不在放行表里(本包不导出这张表)。
10254
+ 12. **改读**(CC-290;DU-8;KL-384):只开 URL 结构面的出口是读数变化方向不同的出口(上一版原样 → 本版遮);全开出口上变化只在记号位置(方案词 / 标签名并进 query 记号)。
10255
+ 13. **改读**(CC-290;DU-9;KL-385):只影响「洗过再洗」的读数 —— 一遍的输出在这一形上多遮一段(上一版第二遍才遮的那一段),再洗一遍不变。
10256
+ 14. **改读**(CC-282;SL-1):开集位 `steering_other` 的处置句按状态码分两句 —— 4xx 上仍是 0.88.0 原句(`the steer did NOT land; …`);5xx / 状态码是串 / 缺席上换「`treat delivery as unknown (do not resend as if it had certainly been dropped); …`」(0.88.0 一律「没落地」)。按「`steering_other` 一律说没落地」写的格在非 4xx 形上作废,4xx 形不变。自愈腿与 cancel 腿共用的送达判定 `atMostOnceFailureClass` 读状态码改与主 run / 子代两腿同口(`status ?? statusCode`,数值才算):`{ statusCode: <4xx> }` 形从 `unknown` 改 `rejected`。三条腿逐格同答(G-SL6 / G-SL6b)。
10257
+ 15. **改读**(CC-290;DU-7;KL-386):凭据**标签**的值以方案词 `token` 起头(`"token": "Token https://h/<串>/x"`、`password: Token<NBSP>https://h/<串>`)⇒ 外层标签不让位,整只值按标签值遮,与 0.88.0 同字节;`bearer` / `basic` 起头的照旧让给里层方案词(0.88.0 既有形)。裸值形 `password: Token <值>`(ASCII 空格分隔)两只记号并排(`password: «redacted:secret» «redacted:secret»`;0.88.0 露里层值)。按「标签值里的 `Token <地址>` 主机 / 路径原样」写的格作废。射程:「整只值按标签值遮」只对外层值是一只的形成立 —— 引号值、或里层 `token` 与地址之间是非 ASCII 空白(不换行空格 / 表意空格 / 各宽空格 / 盲文空点);ASCII 空格分隔、不加引号的 `password: Token https://h/<串>` 外层值在 ASCII 空格处止,两版都只遮 `Token`、地址按结构显示(既有形,KL-386)。
10258
+ 16. **改读**(NM-7;收紧方向):事实读器与派发口只认通告信封的**自有** `code` / `detail`;`Object.create({ code, detail })` 一类只在原型链上的信封、`Object.prototype` 上植入的同名键 ⇒ `undefined`(派发口、直读器、句口三者同答)。按「原型链上的信封经派发口读得出事实」写的格作废;JSON 来的通告不受影响。`providerRejectionResend` 读终局读数的 `detail` 同律。
10259
+ 17. **改读**(DU-7;KL-386):`token` 方案词只给它自己的值加遮盖,不改标签与 `bearer` / `basic` 方案词的值怎么读 —— 外层值以别的字符起头再接 `token` 族方案词 + 非 ASCII 空白 + 地址(`Authorization: “Token\u00a0https://h/<串>”`)、`bearer` / `basic` 的值里接 `token` + 地址(`Bearer Token\u00a0https://h/<串>`)、引号值里 `bearer` / `basic` 之后再出现 `token` + 地址(`password: "Bearer x Token https://h/<串>"`)⇒ 与 0.88.0 同字节整值 / 整截遮。按「外层值在里层 `token` 处截断、里层 `token` 的地址按结构显示」写的格作废;ASCII 空格分隔的 `Bearer Token https://h/<串>` 外层值在 ASCII 空格处止(`Token` 在放行表里),地址仍按结构显示(既有形)。
10260
+ - 新增 G-NM1 – G-NM7 / G-TI1 – G-TI7 / G-UI1 – G-UI9 / G-PR1 – G-PR6 / G-SL1 – G-SL6b / G-OP1 – G-OP4 / G-AC1 – G-AC9 / G-DS1 – G-DS7 / G-HK0 – G-HK31 / G-CR1 – G-CR3 / G-IN1 – G-IN8 / G-MI1 / G-DU17 – G-DU27(115c)。
10261
+
10262
+ ### 115b. 缺席语义(逐键)
10263
+
10264
+ **通告(CC-282)**
10265
+ - `readToolTurnIncomplete` 答 `undefined`:不是这一码 / `detail` 不是对象 / `cause`、`count`、`sessionId`、`runId` 任一缺席或坏形 / 读它就抛 —— **不是**「这条 run 的工具轮都完整」。`toolCallIds` 缺席 = 引擎判它不是可回显的 id 形或为空,不是「没有涉及的调用」。`cause` 是表外词 = 更新的引擎加的词,原样带回;按词分支带 `default`。
10266
+ - 这一条通告整个没来:工具轮完整,**或**服务端 < 7.110.0(这一码不在会话流白名单里,被挡下;KL-365)**或**引擎 < 7.38 —— 三者在端上分不开。
10267
+ - `readUserInputUndrained` 答 `undefined`:条数缺 / 非正整数(或读它就抛)—— 不是「消息都被用上了」。`cause` 缺席(steer 码)= 引擎 < 7.38 那一代没有这一位,**不等于** `leg_end`;`userInputUndrainedNotice` 对它走保守句(KL-363)。`runId` 在 `crashed` 臂上恒缺席(进程已重启,没有那条 run 的句柄),不是坏形。读数里没有子代位:引擎 7.39.0 预告的子代上报那一条(父会话里再说一条子代的未用上)本版不读那一位 —— 到货后那一条读成父腿自己的、句子里也不说「在一个子代里」,下一版接(KL-364)。
10268
+ - follow-up 码上 `cause` 引擎今天不铸;在场则原样带回,`userInputUndrainedNotice` 对 follow-up 只认缺席或 `leg_end` 落 follow-up 句,别的词落保守句。
10269
+ - `userInputUndrainedNotice` 答 `undefined` = 入参不是读器交得出的读数,不是「没有要说的」;读器答 `undefined` 时端落既有通用行(渲引擎给的 `message`)。
10270
+ - 去重:同一条告知 run 的流内 `(code, taskId)` 恰一帧;跨告知 run 可以再说(待办分页 / 告知记号写失败)⇒ **到一帧渲一帧、条数相加**,重放按事件序号去重,不要按 `code + taskId` 跨流去重。引擎 7.39.0 起父会话可能在同一次收场先后收到父腿自己那条与子代上报那条:本版读数分不开两者,**两条都渲、不去重**(条数相加)。
10271
+ - `crashed` 那一句的意思是「服务端已受理,进程停之前没确认是否用上」—— 不说「从未用上」;引擎下一版给出用上的证据后,这一句会收窄(KL-362)。
10272
+ - 码册外的码:`readEngineNoticeFacts` 答 `undefined`、`noticeAudienceOf` 答 `operator` —— 「本版不认识」,不是判决(同 §114b)。
10273
+
10274
+ **终局服务商拒绝(CC-282)**
10275
+ - `failed.detail` 缺席:服务端 < 7.110.0 不过境,**或**引擎 < 7.38 不铸,**或**这次失败本来不是服务商拒绝 —— 三者分不开;**不是**「不是服务商拒绝」。`code` 缺席 = 服务商没给码,或服务端按回声准入规则剥掉了它。
10276
+ - `kind` 是表外词:原样带回(连同合形的 `status` / `code`);`providerRejectionResend` 对它答 `undefined`。
10277
+ - `providerRejectionResend` 答 `undefined` 时,端落既有失败呈现,**不得**从 `message` 文字猜「能不能改了重发」。`edit_and_resend` 只说「改了再发有望过」,不保证过(KL-376)。
10278
+ - `providerRejectionResend` 只读 `detail` 的 `kind` 与 `status` 两位;入参 `null` / 非对象 / 读属性就抛 ⇒ `undefined`(「说不出」,不是「不能改了重发」)。
10279
+
10280
+ **steer(CC-282)**
10281
+ - `ledger_unavailable` 只在服务端 ≥ 7.110.0 的主 run steer / interrupt 上出现,子代 steer 自服务端 7.111.0 起;更老的服务端在同一形上答 200 applied(没有账本)。码表外的 `steering.*` 仍落 `steering_other`(开集)。那一位的处置句按状态码分两句:4xx 上「没落地」(0.88.0 原句;服务端收到、解析、明确拒);5xx / 状态码是串 / 缺席上「送达未知、别当它确知被丢而重发」(0.88.0 一律「没落地」)。「码在而状态码不是 503」的体也落这一位,同样按状态码取句。
10282
+ - 子代 steer 只在「503 且码为 `steering.ledger_unavailable`」时落 `not-delivered`;503 不带码、或 503 带别的码,仍是 `reason: 'error'`(`detail` 为状态码串),与 0.88.0 相同。只剩类名(码被剥)时,sdk 15.2.0 起的专类能认出,更早的 sdk 造出的是 `SteeringError` 基类 ⇒ 认不出是哪一码,主 run 腿落 `steering_other`、自愈腿与子代腿按「送达未知 / error」答(KL-378)。
10283
+ - 自愈三选卡用户形 steer 腿撞账本 503 时,行首仍说「The engine rejected handing your message…」,括注里的服务端原句说清是服务端没记下(KL-377)。
10284
+
10285
+ **省略成因短语(CC-282)**
10286
+ - 短语是成因从句,不含「没发出去」那半句(那半句是端的行形)。`other_channel` 的短语说「那一部分由另一步决定发什么」—— 端把它接在「这一次没发出去」后面时,另一步仍可能发了同一位(KL-359)。
10287
+ - 读不出的成因(表外词 / 非串 / 原型链名 / 会抛的对象)⇒ 兜底从句 `for a reason this version does not recognize`,不抛、不回显那个词;它与整句表的兜底句同出一张表(整句的分隔是逗号)。
10288
+
10289
+ **引擎 7.38 其余类型位**
10290
+ - 端上读不到 `apiErrorCode` / `writeHome`:服务端不把它们放到客户端面,与引擎版本无关。
10291
+
10292
+ **审批问类(CC-284)**
10293
+ - `askClass` 与 `classes` **同在同缺**(本包保证:卡入参 / 座位请求上读不出成对就两位都不给)。缺席 = 服务端 < 7.109.0 / 该版本之前就已停下的那只问 / 引擎不盖类的站 / 服务端判坏形已丢 —— **不是**「普通问」(`ordinary` 是一个真词,只在在场时出现)。
10294
+ - 在场时首员 = `askClass`;含本包不认识的词 = 更新的引擎加的类(开集),原样带;顺序是服务端交出的序(服务端 7.110.0 起是引擎规范序,7.109.0 原样),本包不重排(KL-360)。
10295
+ - 带重复员的一对(同一个词出现两次)本包两位都不带 —— 服务端 7.110.0 起自己拒这一形;7.109.0 照样交出,这时 `approval_request` 卡面(信封原样)上带着、卡入参上不带。引擎铸的类集没有重复员,正常路径走不到(KL-361)。
10296
+
10297
+ **`disableSkills`(CC-277)**
10298
+ - 请求上缺席 = 服务端缺省(装技能)。`false` 与缺席同义(服务端只认 `true`),本包不发。
10299
+ - 能力位缺席 = 服务端 ≤ 7.108.0「没报」,**不是**「不支持」—— 这类服务端对未知请求键整份 400(`request.body_shape`),所以片段口在没报 / 未读到时不给键。`withheld.cause: 'unprobed'` = 本进程还没读到这台引擎的能力,不是引擎的答案;端先 `await engineCapsSettled(baseUrl)` 再取片段可消除(KL-357)。
10300
+ - `withheld` 缺席 ≠「技能已关」:给了键之后这一发是否真的没装技能只有引擎知道(看首个 `wiring_manifest` 的工具清单里有没有 `Skill`)。
10301
+ - 同一会话中途才开始带这一键:此前已向模型宣告过技能清单的会话,引擎补一条「这些技能已不可用」的增量;要整段会话都没有技能,从会话第一发起就带(能力没读到的首发不带 —— KL-357)。
10302
+ - 与非空 `skills` / 带技能的 agent 定义同交 ⇒ 本包按名拒,**不替宿主剪**(剪技能或丢声明都是替用户选了一边)—— 端二选一(KL-358)。空数组不算冲突。
10303
+
10304
+ **hooks 执行者(CC-287)**
10305
+ - `settingsVerdicts` 空 ≠ 没有设置来源 hook:治理整体关掉时整轮零判定;判定只覆盖引擎九事件上的 command / http / prompt / agent 条目,非引擎事件、形坏、表外型的条目不判定(原样上请求体)。`settingsExcluded` 只在端报 `promptAuthoredByUser: false` 时有行。
10306
+ - `hooksCapable: null` = 能力位没读到,或读到了但没报这一位 / 不是布尔 —— 都 ≠ 引擎不跑 hooks;`false` = 引擎显式说忽略请求带来的 hooks(部署要身份)。
10307
+ - `engine_unconfirmed` = 照上请求体、引擎多半会跑,本包证不了(能力位没读到且本端跑不了;或 prompt / agent 在本事件里排在第四只之后且本端跑不了;KL-368;压缩两事件上另含「能力真而不确认自有」与「能力没读到」两形,本端能跑也照投 —— 引擎自动压缩只跑请求带来的 hooks,KL-369;排在第四只之后的 prompt / agent 在压缩两事件上本端能跑时判本端,与其余事件同)。这类条目不进「不会执行」清单。
10308
+ - `engine_elsewhere` = 引擎**不确认**是本客户端在本机起的(端报了「不是」,或没报),本端能跑 ⇒ 本端跑(KL-367)。压缩两事件不判这一词(见上一条)。
10309
+ - 判给引擎的条目由引擎跑:子进程看到的是**引擎的环境口径**(引擎白名单的基础变量 + `CLAUDE_PROJECT_DIR` + 设置里的 `env`),不是本机终端的环境 —— 依赖本机环境变量的 hook,请把变量放进设置的 `env`(KL-370)。
10310
+ - `settingsHooksKeptLocally` 保留一条 ≠ 引擎不跑它:请求体里对不上(计划没见过 / 条目身份算不出)的一律保留(宁可多跑一次,不漏跑);跳过口只读计划的请求体,不读别的位 —— 端按自己的规则从计划派生出的新计划同样可用。
10311
+ - 端不交 `shellHookTypesByEvent` 时:设置来源条目 command / http 按「报了事件 = 能跑」读,prompt / agent 一律交引擎、本端不跑(引擎这一次不跑时 —— 部署要身份,或能力没读到而引擎其实不跑 —— 端本可在 UserPromptSubmit 等事件上跑的 prompt 也不跑);插件条目仍按「报了事件 = 该事件全型」读 —— 端须与换钉同批交型表(KL-372)。
10312
+ - 引擎侧 UserPromptSubmit 拦下主提交:本版端上只见 `blocked` 终局 + 文字,与模型自己报告做不下去同形;**不要**从文字猜「是 hook 拦的」。机读因由候引擎 7.39.0(KL-371)。
10313
+ - 引擎跑的 UserPromptSubmit 注入的上下文进了发给模型的那条消息,端上没有单独一行(KL-371)。
10314
+ - `once: true` 的条目改由引擎跑后,「一次」的射程由引擎执行器定:引擎每次装任务 hooks 新建一张已触发表,不是整会话一次(任务与请求的对应关系是读码推断,未逐环取证;KL-374)。
10315
+
10316
+ **凭据被拒判官(CC-289)**
10317
+ - `false` ≠「不是认证问题」:401 + `auth.principal_required` / `principal_unverified` 是身份问题,也答 `false`(§112 KL-266 射程不变)。
10318
+ - 判官只读抛出物的状态与码两个位(结构读,不看类、不看正文);读不出状态 ⇒ `false`;状态是 401 而码读不出 ⇒ 与「无码」同读,答 `true`(sdk 造出的错误对象码是数据位、读不会失败,此形只在手造的异常对象上出现;KL-379)。
10319
+
10320
+ **服务端 7.111.0 两项(CC-282 余项)**
10321
+ - `instructions` **整段缺席 = 这条腿没有关于指令文件的陈述**:老服务端(< 7.111.0)、部署没接项目记忆加载器、没有执行环境的腿、工作目录不是本机绝对目录、委派子代腿 —— **不是**「没有指令文件」,不许渲成「这条腿没读任何指令文件」。`selected: []` 才是「找过了、一个都没有」。段报的是这条腿准备时读到的那一份,不是盘上此刻;续跑腿报会话快照(同一会话里两腿之间新放的指令文件不一定出现在后一腿的这一段里)。
10322
+ - `instructions` 只在实时 `wiring_manifest` 帧、它的落账回放与非流式提交回执上有;静态诊断面没有这一段(那里缺席不携带任何信息,本包也不读那一面的这一段)。
10323
+ - `instructions.selected` 成员按开集交:服务端改候选链(加一员 / 改拼写)时新拼写原样到端,本包不按今天的四个候选判、不判段长;端按词分支必带 `default` 臂(KL-380)。
10324
+ - 子代转向成功结局 `messageId` 缺席 = 服务端 < 7.111.0(子代转向不经账本)或回执没带 —— 不是「没有受理记录」,也不补、不自铸。续聊已结束子代的回执本来就没有这一位。本包只原样交、不与会话读面「受理了、没用上」那一行做关联(KL-381)。
10325
+
10326
+ **展示出口(CC-290)**
10327
+ - 本版不增删任何键 / 选项位;`DisplayUntrustedOptions` 各位缺席时的缺省不变(同 §114b)。方案词 `token` 的放行表不导出:端不要自抄一份去判「哪个词会被遮」。`credentialWords: false`(只开 URL 结构面)的出口不认词级方案词形:`Token <值>` 在那一只出口上与 `Bearer <值>` 同样不遮(同 §114b)。
10328
+ - 无标签、方案词后紧跟尖括号 / 括号包着的值是占位写法,不遮(KL-383);不要拿它判「这条日志里没有凭据」。
10329
+
10330
+ ### 115c. 黑盒判据骨架
10331
+
10332
+ > 🔴 标「本版证明」的格在**上一版(0.88.0)**产物上必须 FAIL、在 0.89.0 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读之后的行为(包层跑不了)。两版读数原样附在括注里(0.88.0 = 上一版的产物,0.89.0 = 本版实跑);请验收方记下自己两次跑的产物标识(版本 + tarball shasum)。纯包层,只走根入口公面;服务端夹具(可选)= 新一代服务端 7.110.0(内嵌引擎 7.38.0)/ 老一代 7.109.0(内嵌引擎 7.37.1)npm 包,问类与 `disableSkills` 两组的老一代另含 7.108.0;铸点函数按发布包 dist 文件路径直接 import;G-IN / G-MI 两组的夹具 = 服务端 7.111.0(新一代)/ 7.110.0(老一代)发布包,声明对拍用 sdk 15.3.0 / 15.2.0 探针树。前缀:G-NM / G-TI / G-UI / G-PR / G-SL / G-OP = 引擎 7.38 提货(CC-282)、G-AC = 审批问类(CC-284)、G-DS = `disableSkills`(CC-277)、G-HK = hooks 执行者(CC-287)、G-CR = 凭据被拒判官(CC-289)、G-IN / G-MI = 服务端 7.111.0 两项(CC-282 余项)、G-DU = 展示出口(CC-290,编号续 §114c 的 G-DU16)。
10333
+
10334
+ **引擎 7.38 提货**
10335
+ - **G-NM1**(本版证明):`ENGINE_NOTICE_CODES.length` 与是否含 `task.tool_turn_incomplete`。(0.88.0:`81` / false;0.89.0:`86` / true)
10336
+ - **G-NM2**(本版证明):`noticeAudienceOf('task.tool_turn_incomplete')`、`engineNoticeInCatalog(同)`。(0.88.0:`operator` / false;0.89.0:`user` / true)
10337
+ - **G-NM3**(回归约束):`instructions.source_changed` / `memory.layer_locked_legacy` / `session.records_skipped` / `server.model_unreachable` 四码 `noticeAudienceOf` 依次 `user` / `operator` / `user` / `user`,`engineNoticeInCatalog` 全真。(两版同)
10338
+ - **G-NM4**(本版证明):根入口 `SERVER_NOTICE_AUDIENCE`(退出公面)。(0.88.0:冻结四键对象 `{"instructions.source_changed":"user","memory.layer_locked_legacy":"operator","session.records_skipped":"user","server.model_unreachable":"user"}`;0.89.0:`undefined`)
10339
+ - **G-NM5**(本版证明,夹具):新一代服务端会话流白名单(33 码)逐码 `engineNoticeInCatalog`;老一代(32 码)同法。(0.88.0:新一代 32 真 1 假〔册外 `task.tool_turn_incomplete`〕、老一代全真;0.89.0:两代全真)
10340
+ - **G-NM7**(本版证明;只认自有属性):派发表每一码 × 四形 —— `code` 只在原型链上 / `detail` 只在原型链上 / 两者都只在原型链上 / `Object.prototype` 上植入 `code` + `detail`(植完即删)⇒ `readEngineNoticeFacts`、该码的直读器、句口(`userInputUndrainedNotice` / `sessionRecordsSkippedNote`)同答 `undefined`;自有形对照读得出。(0.88.0:各读器与派发口按属性访问读信封,继承形读得出事实;0.89.0 修前:直读器 `readUserInputUndrained` / `readToolTurnIncomplete` 答 `undefined`,派发口仍答出事实)
10341
+ - **G-NM6**(回归约束):派发表每一码的全形 `detail` 深冻结后与未冻结的同答、未冻结的入参读后逐字节不变;引擎包根的冻结数组直接当名单位入参与其副本同答;把引擎 7.38.2 包根全部冻结闭集数组(96 只)喂进本模块全部函数一轮后,每只仍冻结、序列化逐字节同。(两版同 PASS;旧写法只判「一轮后仍冻结」,冻结数组上的写入会抛、被读口吞掉,对就地写入不会响)
10342
+ - **G-TI1**(本版证明,夹具):引擎 7.38.2(开发依赖)与新一代服务端夹具(内嵌引擎 7.38.0)各用工具轮不完整席(`createToolTurnIncompleteSeat`)触发 `truncated` 两次,收到的通告喂 `readEngineNoticeFacts`。(0.88.0:`undefined`;0.89.0:恰一帧 `{ code:'task.tool_turn_incomplete', audience:'user', facts:{ cause:'truncated', count:2, sessionId:'s1', runId:'r1' } }`)
10343
+ - **G-TI2**(本版证明):手造帧 `toolCallIds:['a','b']` ⇒ `{ cause:'truncated', count:2, toolCallIds:['a','b'], sessionId, runId }`、名单冻结;`['a', 1]` ⇒ 四格照交、无 `toolCallIds` 键。
10344
+ - **G-TI3**(本版证明):`cause:'some_future_word'` ⇒ 原样带回;引擎四词各读得出。
10345
+ - **G-TI4**(本版证明):缺 `runId` / `count:0` / detail 键在原型链上 / 信封 `code` / `detail` 在原型链上 / 取值器抛 ⇒ `undefined`,不抛;码不对的通告不给读。
10346
+ - **G-TI5 – G-TI7**(本版证明):每格只读一次;经派发口受众 `user`;本包产物不抄引擎的那几句通告原文(引擎给的 `message` 照用)。
10347
+ - **G-UI1**(本版证明,夹具):引擎 `undrainedUserInputNotices({ steer:1, followUp:0 }, 't', 's', 'r')` 的输出喂 `readUserInputUndrained`(开发依赖腿与新一代夹具腿同)。(0.88.0:读器不在;0.89.0:`{ kind:'steer', count:1, cause:'leg_end', taskId:'t', sessionId:'s', runId:'r' }`)
10348
+ - **G-UI2**(本版证明,夹具):新一代服务端 `buildCrashedSteerNotice({ steer:2, taskId:'t', sessionId:'s' })`。(0.89.0:`{ kind:'steer', count:2, cause:'crashed', taskId:'t', sessionId:'s' }`,无 `runId` 键)
10349
+ - **G-UI3**(本版证明,夹具):同 G-UI1 但 `{ steer:0, followUp:3 }`。(0.89.0:`{ kind:'followUp', count:3, taskId:'t', sessionId:'s', runId:'r' }`,无 `cause` 键)
10350
+ - **G-UI4**(本版证明,夹具):老一代引擎(7.37.1)同一函数铸的 steer 帧(`detail` 无 `cause`)。(0.89.0:`{ kind:'steer', count:4, taskId:'t', sessionId:'s', runId:'r' }`,无 `cause` 键,不补 `leg_end`;句口落保守句)
10351
+ - **G-UI5**(回归约束):手造 `childSessionId:'c'` ⇒ 读数与不带它时逐字节同、读数无此键。(两版读数:0.88.0 读器不在;0.89.0 `{ kind:'steer', count:1, cause:'leg_end', sessionId:'s' }` 两份同)
10352
+ - **G-UI6**(本版证明):`detail.steer` 为串 / 小数 / 0 ⇒ `undefined`;`taskId` / `sessionId` / `runId` / `cause` 坏形只丢那一位、条数照交;取值器抛与原型链上的键同判;每格只读一次。
10353
+ - **G-UI7**(本版证明):`userInputUndrainedNotice` 对 G-UI1 / G-UI2 / G-UI3 / 表外 `cause` / G-UI4 五份读数 ⇒ **四句互异**(表外 `cause` 与缺 `cause` 两份同落保守句,条数相同时逐字节同);`crashed` 句含「先看那条 run 的记录」义、不含「没用上」义;句中无用户正文、无 id;读不懂的入参 ⇒ `undefined`、不抛。(0.88.0:非函数)实跑句子(条数 1 / 2 / 3 / 4 / 4):
10354
+ - `leg_end`:`1 message you sent while the run was in progress was not used before the run ended and will not be delivered. Send it again if you still need it.`
10355
+ - `crashed`:`2 messages you sent to an earlier run were accepted, but the server stopped before that run finished, so whether the run used them is not known. Check that run's transcript and results before sending them again.`
10356
+ - follow-up:`3 follow-up messages you queued were not used before the run ended and will not be delivered. Send them again if you still need them.`
10357
+ - 保守句:`4 messages you sent during a run may not have been used, and the reason was not reported in a form this version recognizes. Check the run's transcript before sending them again.`
10358
+ - follow-up 的保守句(follow-up 码带表外 `cause`,含 `crashed`):名词换成排队的 follow-up —— `2 follow-up messages you queued may not have been used, and the reason was not reported in a form this version recognizes. Check the run's transcript before sending them again.`
10359
+ - **G-UI8**(本版证明):本包产物不抄引擎 / 服务端的通告原句。
10360
+ - **G-UI9**(本版证明;只认自有属性):`Object.prototype.cause = 'leg_end'` 时 `userInputUndrainedNotice(readUserInputUndrained({ code:'task.user_steer_undrained', detail:{ steer:1 } }))` ⇒ 无 `cause` 的保守句(不是 `leg_end` 那一句);`kind` / `count` 只在原型链上的入参 ⇒ `undefined`;`cause` 只在原型链上 ⇒ 当缺席;数组入参 ⇒ `undefined`。两只读器的信封 `code` / `detail` 只在原型链上 ⇒ `undefined`(G-TI4 / G-UI6 同律)。
10361
+ - **G-PR1**(本版证明):`readRunTerminal` 读 `{ terminal:{ kind:'failed', code:'c', message:'m', detail:{ kind:'provider_rejected', status:400, code:'invalid_request_error' } } }` ⇒ failed 臂 `detail` 深等。(0.88.0:`{"kind":"failed","plane":"cause","code":"c","message":"m"}` 无 `detail` 键;0.89.0:同键 + `"detail":{"kind":"provider_rejected","status":400,"code":"invalid_request_error"}`)
10362
+ - **G-PR2**(本版证明):`providerRejectionResend` 对状态 400 / 413 / 422 ⇒ `edit_and_resend`;401 / 403 / 404 / 408 / 409 / 429 / 451 / 500 / 503 / 529 ⇒ `not_by_editing`;`text` 逐字等于对应那一句(`edit_and_resend` 一句;`not_by_editing` 按档五句 —— 401 / 403 / 404 / 429 / 5xx / 其余,两两互异;含 `HTTP <状态码>`、不含 `code` 的值);同一 400 带不带 `code`、`code` 是什么,答案逐字相同。(0.88.0:非函数)
10363
+ - **G-PR3**(本版证明):`detail:{ kind:'provider_rejected' }`(无状态码)⇒ failed 臂无 `detail`;状态码 `'400'` / 99 / 600 / 400.5 / NaN / Infinity / null / true 同;`providerRejectionResend(undefined)` ⇒ `undefined`。**G-PR3e**(本版证明;只认自有属性):`Object.prototype.detail = { kind:'provider_rejected', status:400 }`(植完即删)时 `providerRejectionResend` 对 `undefined` / `null` / `{}` / `{ kind:'other_kind' }` / `{ kind:'provider_rejected' }` 仍一律 `undefined`。(0.89.0 修前:前三形与末形答 `edit_and_resend`)
10364
+ - **G-PR4**(本版证明):`detail:{ kind:'other_kind', status:418 }` ⇒ `detail` 只含这两位;`providerRejectionResend` ⇒ `undefined`;三位都只在原型链上 ⇒ 无 `detail` 键。(0.89.0:`{"kind":"other_kind","status":418}`)**G-PR4g**(回归约束):`other_kind` + 200 ⇒ 状态码照收(400–599 只约束 `provider_rejected`)。
10365
+ - **G-PR5**(回归约束):无 `detail` 的失败终局在扁平形 / 因由形 / 嵌套暂停三种形上的读数逐字节同 0.88.0(比对时值为 `undefined` 的键也算,多出 `detail: undefined` 判红);坏形 `detail`(null / 数组 / 串 / 0 / 取值器抛 / 代理抛)⇒ 读数与无 `detail` 逐字节同、不抛;`doneToSdkResult` 带不带 `detail` 投影逐字节同。
10366
+ - **G-PR1f – G-PR5f**(本版证明,夹具):新一代(服务端 7.110.0 / 引擎 7.38.0)由引擎铸点函数造 400 / 401 / 403 / 429 失败、经服务端过境整形 ⇒ 读数 `detail` 与过境字节深等(`{"kind":"provider_rejected","status":<状态码>,"code":"some_code"}`);400 ⇒ `edit_and_resend`,401 / 403 / 429 ⇒ `not_by_editing`;529 ⇒ 不铸 `detail`;服务端按回声准入规则剥掉的 `code` ⇒ 读数无 `code`、判定照答。老一代(服务端 7.109.0 / 引擎 7.37.1)同构造 ⇒ 读数无 `detail` 键、逐字节同修前形,判定口 `undefined`。
10367
+ - **G-PR6**(端侧验收):服务商回 400 ⇒ 错误行带「改了重发」那一句;回 401 ⇒ 带另一句。
10368
+ - **G-SL1**(本版证明):控制路由的 steer 遇抛出物 `{ status:503, errorCode:'steering.ledger_unavailable' }`。(0.88.0:`steering_other` + 开集句;0.89.0:`ledger_unavailable` + 那一句)
10369
+ - **G-SL2**(本版证明,夹具):sdk 12.0.1(peer 地板)与 15.0.0 由 503 体造出 `SteeringError` 基类(带码)⇒ 按码认;sdk 15.2.0 造出专类、剥掉 `errorCode` ⇒ 按类名认;三者都答 `ledger_unavailable`。(0.88.0:前两者 `steering_other`,15.2.0 剥码形非族〔原样抛 `SteeringLedgerUnavailableError`〕)
10370
+ - **G-SL3**(本版证明):`atMostOnceFailureClass({ status:503, errorCode:'steering.ledger_unavailable' })`。(0.88.0:`unknown`;0.89.0:`rejected`)**G-SL3b**(回归约束,合取两半各一格):`{ status:503 }` / `{ status:502, errorCode:'x' }` / 500 + 该码 / 无状态码 + 该码 / 503 + `steering.queue_full` / 503 + 表外 steering 码 / 503 + 读码就抛 ⇒ 两版都 `unknown`、不抛。**G-SL3e / G-SL3f**(本版证明,消费点):自愈三选卡 steer 腿(注入形 / 用户形)撞「503 + 该码」⇒ `running-steer-failed` / `rejected`,行文说没送到(用户形:`Your message was NOT sent; send it again`),不说「可能已送到」。
10371
+ - **G-SL4**(本版证明):子代 steer(注入件抛 503 + 该码)的结局。(0.88.0:`{ ok:false, reason:'error', detail:'503' }`;0.89.0:`{ ok:false, reason:'not-delivered', safety:'ledger_unavailable', detail:<那一句> }`)补:500 + 该码 ⇒ `{ ok:false, reason:'error', detail:'500' }`;503 + 别的码 ⇒ `detail:'503'`(两版同)。
10372
+ - **G-SL5**(回归约束):其余八码的安全位与句子逐字节同 0.88.0(含别名码;表外码按 409 喂,4xx 上同 0.88.0 原句;非 4xx 上的改口见 G-SL6 / G-SL6b)。
10373
+ - **G-SL6**(本版证明):同一抛出物喂主 run(`ControlRouter.steer`)/ 自愈(`atMostOnceFailureClass`)/ 子代(`steerEngineSubagent`)三条腿,九形 ⇒ `503 + 码` / `只剩类名 + 503` / `statusCode:503 + 码` 三形三腿都答「确知没送到」(`ledger_unavailable` / `rejected` / `not-delivered`);`502 + 码` / `"503" + 码` / 无状态码 + 码 / 只剩类名 + 502 / 只剩类名无状态码 / `statusCode:502 + 码` 六形三腿都不说(`steering_other` + 送达未知句 / `unknown` / `error`)。(0.88.0:三腿九形都不说 —— 主 run 腿 `steering_other`〔只剩类名三形原样抛〕、自愈腿 `unknown`、子代腿 `error`)
10374
+ - **G-SL6b**(本版证明;表外码与 `statusCode` 拼法):`{status:422, errorCode:'steering.zzz_future'}` / `{statusCode:422, 同码}` / 422 + `steering.ledger_unavailable` / `{name:'SteeringError', status:409}` ⇒ 三腿同答「确知没送到」:主 run `steering_other` + 0.88.0 原句(`… the steer did NOT land; …`)/ 自愈 `rejected` / 子代 `error`(`detail` 为状态码串)或 `not-running`(409);`{statusCode:409, errorCode:'steering.not_running'}` ⇒ 主 run `not_running` / 自愈 `rejected` / 子代 `not-running`;503 + 表外码 / 无状态码 + 表外码 / `{name:'SteeringError', status:503}` ⇒ 三腿同答「送达未知」:主 run `steering_other` + 送达未知句 / 自愈 `unknown` / 子代 `error`。(0.88.0:主 run 一律「没落地」,503 / 无状态码三形上与自愈 `unknown` 相左;`statusCode` 拼法的 4xx 自愈 `unknown`、子代 `error`)
10375
+ - **G-OP1**(回归约束):`TASK_REQUEST_OMISSION_CAUSE_NOTICES` 四句与表外兜底句逐字节同 0.88.0(门内嵌 0.88.0 发布产物金样)。
10376
+ - **G-OP2**(本版证明):每个成因 整句 === 前导 + `: ` + `taskRequestOmissionCausePhrase(c)` + `.`;兜底句 === `Not sent with this request` + `, ` + 兜底从句 + `.`;`phrase('off_lane')` 恰为 `this kind of request does not carry this setting, so giving it or leaving it out makes no difference to what this request sends`。(0.88.0:非函数;0.89.0:四个等式与兜底等式全成立)
10377
+ - **G-OP3**(本版证明):表外词 / 空串 / 大小写变体 / 数字 / `null` / `undefined` / 符号 / 对象 / 数组 / 包装串 / 会抛的 `toString` · `toPrimitive` / 全陷阱抛的代理 / 已撤销代理 / 函数 / 五个原型链名 / 原型污染名 ⇒ `for a reason this version does not recognize`,不抛。(0.88.0:非函数)
10378
+ - **G-OP4**(本版证明,源码级):src 里整句字面量零处。(0.88.0:5 处 —— 四句 + 兜底句;0.89.0:0 处)
10379
+
10380
+ **审批问类**
10381
+ - **G-AC1**(本版证明):活卡帧带 `askClass:'write_protection', classes:['write_protection','mode']` ⇒ 卡口收到的请求带同值两位,`classes` 冻结、不是帧上那只数组。(0.88.0:两位缺席;0.89.0:同值冻结)
10382
+ - **G-AC2**(本版证明 —— 负向格,两版同答):只带其一 ⇒ 两位都缺席。(0.88.0:缺席;0.89.0:缺席)
10383
+ - **G-AC3**(本版证明):`classes[0] ≠ askClass` / `askClass` 不在 `classes` 里 / 重复员 / 空数组 / 非串员 / 空串员 / `askClass` 空串或非串 / `classes` 非数组或 null / 稀疏 / 两位或其一只在原型链上 / 某一员只在原型链上 ⇒ 缺席(两版同答);`askClass:'shell_floor', classes:['shell_floor']`、表外词与已知词混排、非规范序的一对 ⇒ 原样在场。(0.88.0:后三形缺席;0.89.0:在场、原样顺序)
10384
+ - **G-AC4**(本版证明):待决行整帧带一对 ⇒ 帧腿卡请求带一对;行顶层凭空一对 / 帧上半对 / 盲卡形 ⇒ 缺席。(0.88.0:首格缺席;0.89.0:在场)
10385
+ - **G-AC5**(本版证明):耐久待决行顶层带一对 ⇒ 卡请求带一对;`toolPermissionRequestAskBits(带一对的卡)` ⇒ 带一对;半对 / 首员不符 / 重复员 / 原型链 ⇒ 过境口两位都不上;带两位的座位请求过座位门,两位坏形不拒整条请求。(0.88.0:缺席;0.89.0:在场)
10386
+ - **G-AC6**(本版证明,夹具):服务端以带类的停车行出运维队列行(行投影)、经 JSON 过境后走本包耐久待决行腿 ⇒ 首铸代(7.109.0)与规范序代(7.110.0)在场、同值;同一代按出帧处同一只成对窄读组装的活卡帧 ⇒ 帧腿在场;老一代(7.108.0)同构造 ⇒ 行投影不带、卡请求缺席。(0.88.0:三代都缺席;0.89.0:7.109.0 / 7.110.0 在场,7.108.0 缺席)
10387
+ - **G-AC6b**(回归约束,夹具):服务端建卡 → 卡信封 → 断连重放帧 → 本包投影 ⇒ `approval_request` 卡面上的两位与服务端建的卡逐字同(7.108.0 不带;7.109.0 / 7.110.0 带)。(两版同)
10388
+ - **G-AC7**(本版证明,夹具):规范序代(7.110.0)对非规范序类集重排 ⇒ 本包两条卡腿读数 = 重排后的序;它拒了的形(规范序首员 ≠ `askClass` / 重复员)⇒ 缺席;首铸代(7.109.0)原样交出非规范序 ⇒ 本包原样(不重排);首铸代交出重复员 ⇒ 本包两位都丢(比这一代服务端严,与下一代同判;KL-361)。(0.88.0:缺席;0.89.0:与服务端交出形逐字同,重复员一格除外)
10389
+ - **G-AC8**(回归约束):门记录拒绝臂只有 `askClass` ⇒ 照读、`classes` 缺席;首员不符照读;放行臂三键在场即成账、缺 `classes` 整只缺席。(两版同)
10390
+ - **G-AC9**(回归约束;本机有新版 SDK 探针树时,没有则如实报 SKIP):帧键镜像 33 键与 SDK 15.2.0 `TOOL_APPROVAL_FRAME_KEYS`(减去退役登记)两向相等;SDK 15.2.0 卡键锚相对开发依赖 SDK 新增的两键都已在卡入参上。(0.88.0:31 / 不等;0.89.0:33 / 相等)
10391
+
10392
+ **`disableSkills`**
10393
+ - **G-DS1**(本版证明):interactive / print(live)⇒ 体带 `disableSkills:true`、回执无此行、出口判官零未登记键;非 live ⇒ 不发、回执 `not_live`;utility(入参带字面量 `excludeAllTools: true`,该车道的必带前提)⇒ 不发、回执 `off_lane`;车道表行与 `skills` 行座位集相同。(0.88.0:`TypeError`「入参带了本包不认识的键 "disableSkills"」)
10394
+ - **G-DS2**(本版证明):`false` ⇒ 三车道 × live 两态都不发、不进回执、不抛(utility 入参带 `excludeAllTools: true`)。(0.88.0:`TypeError`)`undefined` / `null` 两版都不发。
10395
+ - **G-DS3**(本版证明):`'yes'` / `'true'` / `'false'` / `''` / `1` / `0` / `{}` / `[]` / `['x']` ⇒ `TypeError` 坏值句、不回显值,utility / 非 live 同拒。(0.88.0:`TypeError`,但是「不认识的键」那一句)
10396
+ - **G-DS4**(本版证明):与非空 `skills` 同交 ⇒ `TypeError` 点名两键;`skills:[]` ⇒ 过;入参 `agents:[{ name:'b', skills:[…] }]` ⇒ `TypeError` 点名 `agents[].skills`;live 兜底层落带技能的 `agents`(宿主给的,或请求体自带的)⇒ 该层 `TypeError`;不带这一键时兜底层照落带技能的 agents、不抛(两版同)。(0.88.0:装配口为「不认识的键」那一句,兜底层不抛)
10397
+ - **G-DS5**(本版证明):能力缓存依次为 `{ disableSkills:true }` / 无此键 / `false` / 从没探过(含 baseUrl 缺席)/ `'yes'` ⇒ `disableSkillsDeclaration(true, url)` 依次 `{"field":{"disableSkills":true}}` / `withheld.cause` `not_reported` / `unsupported` / `unprobed` / `unreadable`;失效口之后回到 `unprobed`。(0.88.0:非函数)
10398
+ - **G-DS5b**(本版证明):已撤销的代理作 `disableSkills`(片段口 / 装配口)⇒ 本包坏值句,形状报 `typeof=object / unreadable`、不回显值。(0.88.0:装配口〔片段口未上〕按表外键拒)
10399
+ - **G-DS6**(本版证明,夹具):新一代服务端 7.110.0 受理面(直调 `createAdmission().prepareSpec`,假响应对象)对「`disableSkills:true` + 非空 skills」答 `400 request.field_conflict`、对 agents[].skills 那一形同答、对 `'yes'` 答 `400 request.field_invalid`,本包在装配期 / 兜底层 / 构造期先拒;本包经片段口装出的三形请求体(只带这一键 / `+ skills:[]` / `+ 不带技能的 agents`)过新一代受理面零 400;老一代服务端 7.108.0 对带这一键的体答 `400 request.body_shape`、`unknownKeys:["disableSkills"]`,而能力位缺席时经片段口装出的体不带这一键、过老一代受理面零 400。
10400
+ - **G-DS7**(回归约束):车道表 46 行(0.88.0:45);不带这一键的装配 / 回执 / 兜底层 / 车道表其余行 / 座位读数 / 出口判官读数,对同一语料的 sha256 逐字节同 0.88.0 发布产物(两版同)。
10401
+
10402
+ **hooks 执行者**(设置来源条目 `h` = 计数型 command hook;终端形 = `shellHookEvents` 交互车道 22 事件 + `shellHookTypesByEvent`:command / http 全事件,prompt 四事件,agent 无)
10403
+ - **G-HK0**(本版证明):矩阵 设置来源 × 事件{UserPromptSubmit, PreCompact, PreToolUse, Stop} × 型{command, PowerShell command, http, prompt, agent} × 能力{真, 假, 没读到} × 自有{是, 否, 没报} × 端形{终端, `-p`, 无本地执行器, 只报事件不交型表} × prompt 是否用户所写 × 压缩{没交, 压了, 没压, 引擎自动压缩}(压缩只在 PreCompact 上变)共 2520 份计划(「只报事件」端形:执行器真能跑的同终端,期望按端报了的算 —— prompt / agent 视为本端跑不了;KL-372),逐格按服务端执行语义 + 本端执行器模型求「这一次一共跑几次」:两边任一真能跑 ⇒ 恰 1;被排除或两边都跑不了 ⇒ 0;能力没读到的格两种真实世界都算;「引擎自动压缩」那一列本端执行器不触发,只有请求体上的条目能跑 ⇒ 引擎真能跑 ⇒ 恰 1。取舍格(KL-369):能力没读到 × 引擎其实不跑 × PreCompact 没交 / 压了 × 本端能跑的型 ⇒ 期望 0(条目照投、本端按请求体跳过;门里单独计数,48 格;0.88.0 在这些格上本端跑 1 次)。(0.88.0:三种端形 168 格不符,例「能力真 / UserPromptSubmit / command / 终端形」= 2,另 48 格取舍格;0.89.0:0 格不符)
10404
+ - **G-HK0c**(本版证明;压缩两事件):终端形交了型表,user 的 PreCompact / PostCompact 各一只 command ⇒ 能力真 × 自有:engine / `projected`;能力真 × 没报自有 / 非自有、能力没读到 × 自有:engine / `engine_unconfirmed`;四形都在请求体、「不会执行」清单空。**G-HK0d**(回归约束):能力 false × 自有 ⇒ shell / `engine_hooks_off`、不在请求体;PowerShell 形 ⇒ shell / `engine_type_skipped`、不在请求体。**G-HK0e**(本版证明):能力没读到的 PreCompact 条目(`engine_unconfirmed`)过跳过口 —— `engineCompaction: 'performed'` / 没交 ⇒ `[]`,`'not_performed'` ⇒ 同一数组引用。(0.88.0:无判定、条目原样上请求体、本端全跑)
10405
+ - **G-HK0f**(本版证明;压缩两事件 × 超限条目):PreCompact / PostCompact 上六只 prompt / agent 条目 × 能力真 / 假 × 自有三态 × 端形三种(压缩事件跑 prompt / agent、不跑、什么都不报)× 压缩世界四种(没交 / 压了 / 没压 / 引擎自动压缩)共 144 份计划 864 格,引擎一半按「能力真 ∧ 在请求体 ∧ 这一次真压了 ∧ 本事件请求体上 LLM 位次 ≤ 4」⇒ 逐格「这一次一共跑几次」== 期望,期望 1 而实得 0 的格 0;**G-HK0f-2**:本端能跑 ⇒ 第五只 shell / `engine_llm_limit`、不在请求体;本端跑不了 ⇒ engine / `engine_unconfirmed`、在请求体。(0.89.0 修前:第五 / 六只判 engine / `engine_unconfirmed`、跳过口随之把它从本端拿掉 ⇒ 客户端发起的压缩里 24 格谁都不跑)
10406
+ - **G-HK0b**(本版证明):只报事件 `[UserPromptSubmit, PreCompact, PostCompact, SessionStart]`、不交型表 × 能力真 × 非自有 / 没报自有:UserPromptSubmit 的 agent 型、PreCompact 的 prompt 型 ⇒ engine / `projected`、在请求体、清单空;能力没读到 × 自有 ⇒ engine / `engine_unconfirmed`、照投;交了型表的同形答 engine / `projected`(回归);command ⇒ shell / `engine_elsewhere`(回归);插件 prompt 型判定不变(shell / `not_command`,回归)。(0.88.0:无判定、条目原样上请求体)
10407
+ - **G-HK1**(本版证明):终端形、自起引擎、能力真;user 的 UserPromptSubmit `h` + project 的 PowerShell 形 `p` ⇒ `h` 判 engine / `projected`、上请求体,`p` 判 shell / `engine_type_skipped`、不上;跳过口 `{hooks:[h]}` ⇒ `[]`,跨源合并组 `{hooks:[p,h]}` ⇒ `[p]`。(0.88.0:无判定、两只都上请求体、本端全跑)**G-HK1b**:同一计划下本端组只有那只 PowerShell 形(请求体上有可比对的条目、本端组零命中)⇒ 返回同一数组引用。
10408
+ - **G-HK2**(本版证明):同上只 `h`,`hooks:false` ⇒ shell / `engine_hooks_off`、不上请求体、跳过口返回同一数组引用。(0.88.0:上请求体)
10409
+ - **G-HK3**(本版证明):能力位没读到 ⇒ `hooksCapable: null`、shell / `engine_hooks_unknown`、不上请求体。(0.88.0:上请求体)
10410
+ - **G-HK4**(本版证明):`engineOwnedByThisShell:false` ⇒ UserPromptSubmit 的 `h` 判 shell / `engine_elsewhere`、不上;同计划 PreToolUse 的 `h` 判 engine / `projected`、上。(0.88.0:两只都上)
10411
+ - **G-HK5**(本版证明):prompt 型 UserPromptSubmit 条目 ⇒ engine / `projected`、上请求体、跳过口 `[]`。(0.88.0:上请求体、本端也跑)
10412
+ - **G-HK6**(本版证明):agent 型 UserPromptSubmit 条目:能力真 ⇒ engine / `projected`;能力没读到 ⇒ engine / `engine_unconfirmed`、照上请求体(本端跑不了 agent)。**G-HK6p**:同形插件条目投不了 ⇒ `not_run`、清单一行。(0.88.0:插件判 shell / `engine_capability_absent`、无行)
10413
+ - **G-HK7**(本版证明):`promptAuthoredByUser:false` ⇒ 设置来源 UserPromptSubmit 条目进 `settingsExcluded`(`prompt_not_user_authored`)、不上请求体、跳过口 `[]`、不进清单;PreToolUse 不受影响。**G-HK7p**:插件 UserPromptSubmit 条目进 `excluded` 同词、查询口查不到、不上请求体。(0.88.0:两源都上请求体)
10414
+ - **G-HK8**(本版证明):UserPromptSubmit 上五只 prompt ⇒ 前四 engine / `projected`、第五 shell / `engine_llm_limit`;请求体四只;跳过口留第五只。**G-HK8b**:user `[q1,q2,q3]` + project `[q1,q4]` ⇒ 位次按去重后数,`q4` 第四只、engine。**G-HK8c**:PreCompact 上五只 prompt(终端本地跑不了)⇒ 第五只 engine / `engine_unconfirmed`、照上请求体、不进清单。**G-HK8d**:同一只 prompt 在两个 matcher 下是两只(wire 去重键含 matcher,服务端各数一只)⇒ 第五只(c 组第三)本端跑、请求体 4 只。**G-HK8e**:引擎不归本端,四只 prompt 本端跑(离开请求体)、两只 agent 本端跑不了 ⇒ agent 位次 1 / 2、引擎跑、不是「未确认」;请求体恰 2 只(判给本端的 LLM 条目不占引擎位次)。(0.88.0:无判定、五只全上)
10415
+ - **G-HK9**(本版证明):Stop 上 PowerShell 形 command ⇒ `not_run` / `engine_type_skipped`,请求体字节照旧,清单一行 `User settings: Stop hook will not run — the engine does not run PowerShell command hooks.`(0.88.0:无行)
10416
+ - **G-HK10**(本版证明):PreCompact 上判给引擎的条目:`engineCompaction:'performed'` / 没交 ⇒ `[]`;`'not_performed'` ⇒ 原数组(同一引用)。**G-HK10b**:UserPromptSubmit 上交 `'not_performed'` 照跳。(0.88.0:无此口)
10417
+ - **G-HK11**(回归约束):`-p` 车道(只报非引擎事件,带 / 不带型表)× 能力三态 × 自有两态 ⇒ 请求体逐字节同「不报本地事件」那一份。
10418
+ - **G-HK12**(回归约束):不报本地事件的宿主(带 / 不带型表)同上。
10419
+ - **G-HK13**(本版证明,夹具):新一代服务端发布版执行入口(`parseHooksConfig` + `createTaskHooks`)起 UserPromptSubmit 席跑一次,另按跳过口模拟本端执行器 ⇒ 计数文件恰 1 行。**G-HK13b**:能力没读到 ⇒ 不投、本端跑 ⇒ 1 行。**G-HK13c**:prompt 型(给载体)⇒ 引擎一次、本端零次。**G-HK13c′**(取舍格):不给载体 ⇒ 服务端记 `llm_carrier_unavailable`、合计零次(KL-366)。**G-HK13d**(尺子):发布装配的 `createTaskHooks` 唯一调用点带两只载体。**G-HK13o**(回归约束,老一代服务端):判给引擎的条目引擎侧照跑一次。(0.88.0:2 行 / 2 行 / 合计 2)
10420
+ - **G-HK14**(回归约束):插件 hook 既有判定格(§101 起)逐条同(闭集长度格按本版 19 / 6 改锚)。
10421
+ - **G-HK15**(本版证明):`hooks:false` + 无本端执行器 + Stop 条目 ⇒ `not_run` / `engine_hooks_off`,清单一行 `User settings: Stop hook will not run — the connected engine ignores hooks sent with requests.`(0.88.0:无行)
10422
+ - **G-HK16**(端侧验收):终端交互:计数型 UserPromptSubmit「一句话恰一次」/ `-p` 一次 / run 进行中补发一次 / 工具性提交零次 / 注入的上下文请求体内恰一份 / `/compact` 压缩前后各一次。
10423
+ - **G-HK17**(回归约束):`hooksNotRunNotice` 收只有插件判定与设置拿掉两位的半截计划不抛。
10424
+ - **G-HK18**(本版证明):请求体上只有逐字同的插件条目 ⇒ 本端的设置条目照留(插件组不进跳过口的内容索引)。
10425
+ - **G-HK19**(本版证明):`hooksCapable`:没读到 / `hooks` 键缺席 / 非布尔 / `taskSettings` 缺席 ⇒ `null`;`hooks:false` / `taskSettings:false` ⇒ `false`;`hooks:true` ⇒ `true`。
10426
+ - **G-HK20**(本版证明):`shellHookTypesByEvent` 坏形(数组 / 含非串 / 值非数组 / 读的时候抛 / 串)⇒ 当缺席 + debug 一行;`promptAuthoredByUser` 非布尔 ⇒ 按用户所写 + debug 一行。
10427
+ - **G-HK21**(本版证明):交型表时被拿掉条目的 `notRun` 按条目型问「本端跑不跑得了」(UserPromptSubmit 上的 `mcp_tool` ⇒ 真、进清单);不交 ⇒ 与 0.88.0 同。
10428
+ - **G-HK22**(回归约束):形坏 / 表外型设置条目不判定、原对象上请求体。
10429
+ - **G-HK23**(本版证明):新原因词的句子不把没读到 / 没确认的说成事实。**G-HK23b**:`pluginHookReasonText('engine_type_skipped')` === `the engine does not run PowerShell command hooks`;`engine_llm_limit` 的句子含 `may`、不提 PowerShell。
10430
+ - **G-HK24**(本版证明):终端形、能力真、非自有,UserPromptSubmit 一组 `[坏, cmd]`,坏 ∈ {`command:42` / `command:''` / 缺 `command` / `http` 的 `url:42` / 缺 `url` / `prompt` 的 `prompt:42` / 含 NUL / `agent` 的 `prompt:''`} ⇒ 坏条目原样在请求体、`settingsVerdicts` 无行、清单空;同组 `cmd` ⇒ shell / `engine_elsewhere`、不投。(0.88.0:无判定、两只都原样上请求体;坏条目的请求体字节两版同)
10431
+ - **G-HK25**(本版证明):计划的 `settingsVerdicts` 换成 `[null]` / `[{}]` / 原因表外 / 来源表外 / 处置表外 / 事件非引擎 / 下标非整数 / 读的时候抛 ⇒ `hooksNotRunNotice` 不抛、那一行不出;坏行夹着合形行 ⇒ 合形那一行照出。`settingsExcluded` 换成 `[{event:'PreToolUse'}]` 等坏行 ⇒ `settingsHooksKeptLocally` 返回同一数组引用;合形排除行 ⇒ `[]`。(0.88.0:计划没有这两位、没有跳过口)
10432
+ - **G-HK26**(本版证明):请求体组与本端组的 matcher 各取 {缺席, `undefined`, `null`, `''`, `'*'`} 的 25 种组合 ⇒ 本端跳、引擎跑,一共恰 1 次;本端组 matcher `manual` ⇒ 本端照跑。(0.88.0:没有跳过口,本端全跑)
10433
+ - **G-HK27**(本版证明;只认自有属性):跳过口 —— 本端组 `hooks` 取值器抛 / 全抛代理 / 已撤销代理 ⇒ 不抛、与缺 `hooks` 同答;计划 `settingsExcluded` 行字段只在原型链上 / 请求体条目字段只在原型链上 / 请求体事件只在原型链上 / 请求体组的 `hooks` 只在原型链上 ⇒ 都不授权跳过(返回同一数组引用 —— 这些键不过 JSON,引擎收不到);`hooksNotRunNotice` 对字段只在原型链上的判定行不列;判定行六键 / 排除行五键里只把**一个**键挪到原型链上也同判(G-HK27d)。(0.88.0:没有跳过口)
10434
+ - **G-HK30**(本版证明):六键计划(手拼一只 PreToolUse command;真计划去掉两位)与八键计划经 `hooksForWire({ plan })` + `settingsHooksKeptLocally`:请求体带的每只设置 hook「引擎跑 + 本端跑」恰 1;`settingsExcluded` 在场而不是数组 / `wire` 在场而不是对象 ⇒ 本端照跑(同一数组引用);`settingsExcluded` 只在原型链上 ⇒ 当缺席(按空数组比,本端跳)。(0.89.0 修前:六键计划上每只 2 次)
10435
+ - **G-HK31**(本版证明):本端组 / 条目是类实例(取值器在原型上)或 `Object.create` 出来的 × PreCompact / PreToolUse(matcher `Bash`)/ UserPromptSubmit,请求体那一只是普通对象 ⇒「引擎跑 + 本端跑」恰 1(12 格)。(0.89.0 修前:类实例 / `Object.create` 条目与 PreToolUse 上的类实例组每格 2 次)
10436
+ - **G-HK28**(回归约束 + 本版证明):按 0.88.0 型面拼的六键计划(没有 `settingsVerdicts` / `settingsExcluded`,带一只插件条目)交 `hooksForWire({ plan })` ⇒ 认作计划,`=== plan.wire`(两版同);两位在场但不是数组 ⇒ 按不传处置(本版证明)。(0.88.0:六键计划认作计划、两位在场而不是数组也认作计划)
10437
+ - **G-HK29**(本版证明;夹具:已装的 `@sema-agent/settings-schema`):`command` / `http` / `prompt` / `agent` 四型 × 十二种承重字段取值(`'x'` / 空格 / 空串 / 含 NUL / 单 NUL / 汉字 / 数字 / `null` / 缺席 / 数组 / 对象 / `true`)共 48 格,UserPromptSubmit 一组 `[该条目, cmd]`,期望由上游受理面 `HooksConfig.safeParse` 现算:上游拒 ⇒ 本包不判定(`settingsVerdicts` 无行、条目原样在请求体),上游收 ⇒ 本包判定(有行),同组 `cmd` 每格都判定。上游契约读不到 ⇒ 这一格标为未跑。(0.88.0 无此格:本包判定口与上游受理面的一致只在手写坏形表里对本包一侧断言)
10438
+ - **E4**(本版证明):包内每事件 LLM 条目上限 4 == 引擎源码与新一代夹具执行器。
10439
+
10440
+ **凭据被拒判官**
10441
+ - **G-CR1**(本版证明):根入口 `isReadCredentialRefusal` 是函数,且与包内两处读口共用的是同一只函数(同一引用)。(0.88.0:`undefined`)
10442
+ - **G-CR2**(回归约束,语义):`{ status:401, errorCode:'auth.unauthorized' }` / `{ status:401 }` / 空码 ⇒ `true`;`auth.principal_required` / `principal_unverified` / 别的 401 码 / 403 / 407 / 状态是串 / 只有码没有状态 / 状态取值器抛 / 非对象 ⇒ `false`;永不抛。判表 24 行在 0.88.0 的包内判官上与 0.89.0 的包内与公面判官上逐行同答。三处同答:同一抛出物经后台视图 fleet 源出 `unauthorized` ⟺ 公面判官答 `true`。**G-CR2c**(取舍格,KL-379):401 + 码取值器抛 ⇒ 与无码 401 同读(现读法)。
10443
+ - **G-CR3**(本版证明,夹具):sdk 12.0.1(开发依赖)/ 15.2.0 / 15.0.0 三代各自把 401 体(带 `auth.unauthorized` / 无码 / 空码 / 空体)造成的 `AuthError` ⇒ 公面判官 `true`、后台视图 fleet 源出 `unauthorized`;同三代造出的 401 `auth.principal_required`(`AuthError`)/ 401 `principal_unverified`(`PrincipalUnverifiedError`)/ 403 / 407 ⇒ `false`、fleet 源出 `unavailable`。(0.88.0:公面非函数)门环境:15.x 两代各用一只环境变量钉探针树 —— `SEMA_SDK15_ROOT`(15.2.0)与 `SEMA_SDK15_ROOT_OLD`(15.0.0;冒号分隔可多个);缺席的一代打 `SKIPPED-SECTION`(收集器记 PARTIAL,不当绿)。
10444
+
10445
+ **服务端 7.111.0 两项**
10446
+ - **G-IN1**(本版证明):帧 `instructions:{ selected:['AGENTS.md'] }` ⇒ 内部臂 `_sema_instructions`、chrome 事件、提交回执视图三面同值且冻结(段对象与数组);交出的不是入参那一只,入参事后被改不影响已交出的值;段内多余成员不过境;提交回执视图与流式腿 chrome 事件去掉 `kind` / `laneProof` 逐字节相等。(0.88.0:三面都没有这一键)
10447
+ - **G-IN2**(本版证明):`selected:[]` ⇒ 三面都在场、空数组;与同帧缺席这一段的读数互异。(0.88.0:缺席)
10448
+ - **G-IN3**(本版证明):只带这一段的帧(`['CLAUDE.md']` 或 `[]`)⇒ 投影成臂、chrome 恰一条(键只有 `kind` / `laneProof` / `instructions` / `eventId`)、提交回执 `manifest`;子流三键任一 ⇒ 不上主面。(0.88.0:`none / not_in_slice`、提交回执 `unreadable`)
10449
+ - **G-IN4**(回归约束 + 坏形):帧上缺席 / 值为 `undefined` ⇒ 三面无此键(不折 `{selected:[]}`);十四种坏形(`null` / 串 / 数 / 布尔 / 数组无包层 / 空对象 / `selected` 为串 · `null` · 类数组对象 / 含数 / 含空串 / 一好一坏 / 有洞 / 洞由原型补值 / `selected` 在原型链上)⇒ 整段缺席、同帧别段照交;只有坏形这一段 ⇒ `not_in_slice` / `unreadable`;原型链上的 `instructions` 不算在场;`instructions` 或 `selected` 读取时抛 ⇒ 段缺席、同帧 `mcp: []` 照交、不抛。(0.88.0 上这些格同样不出这一键 —— 那一版根本不读这一段;本格守的是本版读法不把坏形放进来)
10450
+ - **G-IN5**(本版证明,夹具):服务端 7.111.0 发布包真铸链 —— 加载器陈述(`instruction-selection.js` 的 `settleLegInstructionStatement`)→ 腿段 → 租户面与 operator 面两只投影器 → 本包:选中 `AGENTS.md` / `.claude/CLAUDE.md` / 一个都没选中三种陈述 × 两面,chrome 与非流式回执的 `instructions` 与真帧逐字节同;没有陈述 ⇒ 真帧与 chrome 都没有这一键;本包十二段里只带这一段的真帧 ⇒ 成臂。服务端 7.110.0 发布包:没有加载器陈述模块、投影器单参,同一构造真帧无此段 ⇒ chrome / 提交回执都没有这一键。(0.88.0:7.111.0 真帧的这一段不出;只带这一段的真帧不出事件)
10451
+ - **G-IN6**(本版证明):开集 —— `['GEMINI.md']` / `['docs/AGENTS.md']` / `['agents.md']` / `['CLAUDE.md','AGENTS.md']` 原字节交到 chrome 与提交回执(不按四个候选、不按段长收窄)。
10452
+ - **G-IN7**(本版证明):不经投影口直接喂进适配层的内部臂(宿主自建管线 / 重放存量转录)上,`_sema_instructions` 再过同一只窄读:好形 ⇒ 冻结副本;只带坏形 ⇒ 不产事件;坏形 + 别段好形 ⇒ 别段照交、无此键。
10453
+ - **G-IN8**(回归约束,声明对拍,不随服务端夹具必跑档):sdk 15.3.0 的 `wiring_manifest` 事件臂声明可选 `instructions`、`WiringManifestInstructions` 只有必带的 `selected` 数组;sdk 15.2.0 臂上没有它。
10454
+ - **G-MI1**(本版证明):子代转向 200 回执带非空串 `messageId` ⇒ 成功结局 `{ ok, receipt, messageId }`,`ok` / `receipt` 逐字节不变,注入 client 形与已装目标形同答;回执没有 ⇒ 结局无此键(与 0.88.0 逐字节同);空串 / 数 / `null` / 布尔 / 对象 / 数组 / 原型链上的同名键 / 读取时抛 ⇒ 不带、不抛;回执体 `null` / `undefined` / 串 ⇒ 缺省句、无此键。夹具:服务端 7.111.0 发布包的真路由(子代转向那一臂)起在本机,开发依赖 sdk 与 sdk 15.3.0 两只真 client 打过去 ⇒ 结局 `messageId` 与 200 回执逐字节同、与服务端账本受理的是同一个值;服务端 7.110.0 真路由 ⇒ 回执无此键、子代转向不经账本、结局无此键,`ok` / `receipt` 与新一代逐字节同。声明对拍:sdk 15.3.0 `SubagentSteerReceipt.messageId?` 在、15.2.0 不在。(0.88.0:成功结局恒无此键)
10455
+
10456
+ **展示出口**(`W(s)` = `displayUntrusted(s, { controls: false, bidi: false, foldLines: false })`,`D(s, o)` = `displayUntrusted(s, o)`,`LINE = { foldLines: false, mark: 'dot' }`,`FIELD = { foldLines: false, mark: 'escape' }`,同 §114c;「凭据两网全关」= `{ credentialUrls: false, credentialWords: false }`;不可见 / 非 ASCII 空白写成 `\uXXXX`)
10457
+ - **G-DU17**(本版证明;终端给的字节判据形):`W('Token sk-l963-PLACEHOLDER')` 与 `D('Token sk-l963-PLACEHOLDER')` 恰 `Token «redacted:secret»`(不含 `sk-l963-PLACEHOLDER` ∧ 含 `«redacted:`);`token sk-l963-PLACEHOLDER` ⇒ `token «redacted:secret»`;`MCP server failed: Token sk-l963-PLACEHOLDER rejected` ⇒ `MCP server failed: Token «redacted:secret» rejected`;`Token abcdefghijklmnopqrstuvwxyz0123456789` ⇒ `Token «redacted:secret»`。(0.88.0:四形原样)
10458
+ - **G-DU18**(回归约束;两版同):`Authorization: Token sk-l963-PLACEHOLDER` ⇒ `Authorization: Token «redacted:secret»`;`token=…` ⇒ `token=«redacted:secret»`;`Token: …` ⇒ `Token: «redacted:secret»`;`Bearer …` / `bearer …` ⇒ 值换记号;`Token sk-live-0123456789abcdefghijklmnop` ⇒ `Token «redacted:secret»`;``token: `GITHUB_TOKEN` `` 原样;`token = count` ⇒ `token = «redacted:secret»`。
10459
+ - **G-DU19**(负向;两版同 —— 本版证明的另一半;门里共 24 句,下列取其中 15 句):下列各句在 `W` / `D(·)` / `D(·, LINE)` / `D(·, FIELD)` 上与「凭据两网全关的同选项出口」逐字节同:`Token count: 1234`、`tokens = 3`、`token expired`、`the token was rejected`、`Invalid token`、`OAuth token refresh failed: invalid_grant`、`token exchange failed with HTTP 400`、`prompt token budget exhausted (200000 tokens)`、`the access token has expired; run /login`、`MCP server: token endpoint returned 401`、`token limit exceeded: 4096`、`Failed to refresh token\nPlease run /login again`、`token doesn't match the expected audience`、`token will expire in 5 minutes`、`TOKEN LIMIT REACHED`。
10460
+ - **G-DU20**(本版证明;邻形):分隔换成 `\u00a0` / `\u3000` / `\u2003` / `\u115f` / `\u2800` / `\u200b` / `\u00ad` / `\u200f` / `\u0007` / `\n`、方案词写成 `TOKEN` / `ToKeN`、值被 `"…"` / `'…'` / 反引号包着、整句在 OSC / DCS / APC / C1 OSC 控制串里、`--token <值>` / `password: Token <值>` / `{"auth":"Token <值>"}`:全出口(只开 URL 结构面除外)不露值。尖括号 / 括号包着的值(`Token <…>`、`Bearer <…>`、`api_key=<…>`)两版都原样(占位写法;KL-383)。(0.88.0:除占位写法外各形露值)
10461
+ - **G-DU21**(本版证明;只开 URL 结构面出口):`https://h/?a=1\u00a0token\u00a0<值> tail` 与 `https://h/?a=1\u00a0Bearer\u00a0<值> tail` ⇒ `https://h/?a=«redacted:query» tail`;`https://h/?a=1\u00a0token=<值>&b=2` ⇒ `https://h/?a=«redacted:query»&b=«redacted:query»`。(0.88.0:后两形在这一出口露值)`W('https://h/?a=1\u00a0token <值>')` ⇒ `https://h/?a=«redacted:query»\u00a0token «redacted:secret»`(分隔是 ASCII 空格,照旧让给词级面)。
10462
+ - **G-DU22**(本版证明;幂等):`D('\u001bPBearer \n\u001b]8;;h\u001b\\')` 恰 `\u001BPBearer \u001B]«redacted:secret»;;h\u001B\`(字面转义形),再洗一遍不变;`password:` 同形同。(0.88.0:一遍 `…\u001B]8;;h…`、两遍才遮 `8`)
10463
+ - **G-DU23**(回归约束;两版同 —— 路径尾状态码放行):`POST https://auth.example/oauth/token 400 Bad Request` / `GET /api/v1/token 200 OK` / `POST /oauth/token 401 Unauthorized` / `curl -X POST https://id.example/oauth2/token failed: 503` ⇒ 全出口(`W` / `D(·)` / `LINE` / `FIELD` / 只开 URL 结构面 / 只开词级面)与凭据两网全关的同选项出口逐字节同,即原样;路径尾后跟别的值照遮:`POST https://auth.example/oauth/token abcdefgh` ⇒ `POST https://auth.example/oauth/token «redacted:secret»`。(0.88.0:四形原样;路径尾后跟别的值那一形原样)
10464
+ - **G-DU24**(本版证明;引号包着的放行词照遮):`token "count"` ⇒ `token "«redacted:secret»"`;`Token "please"` / `Bearer "only"` / `basic "auth"` 的机读口输出都含 `«redacted:` 且不含引号里那个词;单引号 `token 'count'` 同。(0.88.0:前两形原样,`Bearer` / `basic` 两形已遮)
10465
+ - **G-DU26**(本版证明 + 回归约束;标签值以 `token` 方案词起头):`W('"token": "Token https://h/SECRET123456/x"')` ⇒ `"token": "«redacted:secret»"`;`W('password: Token\u00a0https://h/<值>')` ⇒ `password: «redacted:secret»`;`W('"api_key":"Token <值>"')` ⇒ `"api_key":"«redacted:secret»"`;`W('password: Token <值>')` ⇒ `password: «redacted:secret» «redacted:secret»`;全出口(只开 URL 结构面除外)不露值。回归:`"token": "Bearer https://h/<值>/x"` / `password: basic https://h/<值>/x` 两版同字节(地址主机 / 路径原样,KL-386);`key: token: <值>` ⇒ `key: token: «redacted:secret»`;无标签 `Token https://h/p?x=1` ⇒ `Token https://h/p?«redacted:query»`(按方案词 + 地址豁免,与 `Bearer` 同;0.88.0 ⇒ `Token https://h/p?x=«redacted:query»`)。(0.88.0:前三形同本版,`password: Token <值>` ⇒ `password: «redacted:secret» <值>`)
10466
+ - **G-DU27**(本版证明 + 回归约束;`token` 只加遮盖):机读口逐字节 —— `W('Authorization: “Token\u00a0https://hooks.example/services/T00/B00/<值>”')` ⇒ `Authorization: «redacted:secret»`;`` W('password=`Token\u3000https://hooks.example/p/<值>`') `` ⇒ `password=«redacted:secret»`;`W('Bearer “Token\u00a0https://hooks.example/p/<值>”')` ⇒ `Bearer «redacted:secret»`;`W('Basic *token\u2003https://h.example/p/<值>/x')` ⇒ `Basic «redacted:secret»`;`W('password: "Bearer x Token https://h.example/p/<值>/x"')` ⇒ `password: "Bearer «redacted:secret» «redacted:secret»"`;`W('password=x.Token\u00a0https://h.example/p/<值>')` ⇒ `password=«redacted:secret»`;`W('Basic Token\u00a0<值>')` ⇒ `Basic «redacted:secret»`(共十形,全为 0.88.0 字节;全出口不露值)。回归:`W('password: Token https://h.example/p/<值>')` ⇒ `password: «redacted:secret» https://h.example/p/<值>`(ASCII 空格、不加引号:既有形,两版同);`W('Bearer Token <值>')` ⇒ `Bearer Token «redacted:secret»`;`W('password: Token <值>')` ⇒ `password: «redacted:secret» «redacted:secret»`。(0.89.0 修前:十形里九形露地址路径或值)
10467
+ - **G-DU25**(回归约束 + 本版证明;解析器诊断一组两版同,负控一组本版照遮):`SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON` / `Unexpected token u in JSON at position 0` / `SyntaxError: Unexpected token 'export'` / `Token indices sequence length is longer than …` 等 18 句全出口原样(与凭据两网全关同字节);`unexpected` 不是左邻(`token '<值>'` / `Unexpectedly token '<值>'` / 两枚空格 / 制表符 / 换行 …)⇒ 引号值照遮。(0.88.0:前一组原样)
10468
+
10469
+ ### 115d. 端上要动的读点
10470
+
10471
+ 坐标来自本机克隆的只读检索,读的提交:终端 tag v1.0.139(e8c463c6)· 网页端 `origin/main` 0fb6df3 · 管理台 `origin/main` 21b8951 · 桌面端冻结(钉本包 0.13.0,HEAD 9ce3736)。终端 / 管理台的产品源码坐标省去开头的 src 目录,网页端坐标从仓根起(`ui/`);本机克隆可能落后远端,行号会漂,合并前请各端对自己的最新主干重看一遍。
10472
+
10473
+ **终端**(v1.0.139;钉本包 0.86.0)
10474
+
10475
+ - 🔴 steer 账本 503(SL-1,编译红一次):`sema/controlSafetyAdvice.ts:85` 穷尽 `switch` + `:168` `assertExhaustive` —— 补 `ledger_unavailable` 一臂,渲本包那一句(「没送到、原文稍后重发」);共用处置 `sema/queuedPromptSteer.ts:286-331`(留队列当下一条发、不重试)与它一致,零改动。子代(SL-3):`screens/REPL.tsx:4334-4348` 渲 `detail ?? reason`,新臂把句子放 `detail`,零改动即得。🔴 开集位兜底:终端 1.0.140 `sema/controlSafetyAdvice.ts:56-63` 的 `UNRECOGNISED` 渲「nothing was delivered — retry it」(注释自称判词逐字照包),与本包这一位的句子不一致 —— 本包按状态码分两句(4xx「没落地」;5xx / 状态码是串 / 缺席「送达未知,别当它确知被丢而重发」;115a′ 第 14 条),壳侧这一句在非 4xx 形上会让用户重发一条可能已送到的话。请改读本包句(`ControlSafetyError.message` 里 ` — ` 之后那一段),或按同一把尺分两句。
10476
+ - 🔴 steer 未用上通告(UI-1 / UI-2,请托方):终端 1.0.140 已在壳侧按 `detail.cause` 分两句(`sema/upstreamBridge.ts:1072-1095`,自家措辞 —— `crashed` 句为「may have reached the model」;`detail.steer` 按条数读;退役条件登记在终端自家退役登记表的 `steer-undrained-cause-open-compare` 一行)⇒ 请退掉壳侧这一份,换读包句:`readUserInputUndrained(notice)` → `userInputUndrainedNotice(facts)`;两只都答 `undefined` 时落既有通用行(渲引擎给的 `message`),不要回落旧句。句子不带子代位(引擎 7.39.0 的子代上报那一条本版读成父腿自己的)。去重沿用现行的事件身份顺序(`:2403-2428`),与 115b 口径相容。
10477
+ - 终局服务商拒绝(PR-1 / PR-2,请托方):今天终局只读 kind(`sema/liveClient.ts:913` 等);错误行出路句改读 `providerRejectionResend(readRunTerminal(…)?.detail)` 的 `text`,`undefined` 时照旧。
10478
+ - 成因短语(OP-1,请托方):`sema/printLaneRequestReceipt.ts:96` 的行形 `${旗} was not sent on this run: ${…}.` 不变,`CAUSE_TEXT`(`:81-87`)换成 `taskRequestOmissionCausePhrase(cause)`;终端自家退役登记(scripts/uplift-retirement-registry.json:479 那一行)随换读处置。换读后 `other_channel` 那一行的行形「was not sent on this run」对这一成因不是逐字真(KL-359)。
10479
+ - hooks 执行者(HK-1 / HK-3 / HK-5,请托方):① `sema/pluginHooksWirePlan.ts` 给计划多交两只入参 —— `shellHookTypesByEvent` 由 `:123-136`(四事件 prompt 表与 `localExecutorRunsHookType`)按车道生成(与 `shellHookEventsFor` 同一份事件表);`promptAuthoredByUser`:`wireHooksForTurn('interactive', { mainLane:false })` 的工具性提交与 `isMeta` 注入(`sema/engineTaskNotification.ts:107` → `utils/processUserInput/processUserInput.ts:217`)交 `false`。② `utils/hooks.ts:1725-1737` 取快照组那一步对设置来源组过 `settingsHooksKeptLocally(plan, event, group, { engineCompaction })`(计划锁存照 `enginePluginHookSkipper` `sema/pluginHooksWirePlan.ts:479-500` 的既有机制;插件跳过不变)。③ `/compact`(`commands/compact/compact.ts:133` `requestEngineCompact` 的结果)映成 `engineCompaction` 交给本地压缩前后两次触发(`services/compact/compact.ts:482-490` 一带):引擎这次真压了 ⇒ `'performed'`;不支持 / 离线 / 不在跑 ⇒ `'not_performed'`。
10480
+ - 🔴 **接缝一(派发前减法;读码推断,未实跑)**:`rejudgeLatchedPlan`(`sema/pluginHooksWirePlan.ts:314-369`)与 `refilterHooksForDispatch`(`:392-455`)按值比对「此刻现算计划的请求体」做减法。本版起请求体还反映执行者判定(不只治理):引擎在一次提交的 UserPromptSubmit 阶段与派发之间被温切(同地址换一台)⇒ 能力缓存回到未读到 ⇒ 现算计划把那只 hook 判给本端 ⇒ 减法拿掉本端已按「引擎跑」跳过的条目 ⇒ 这一轮零次(KL-373)。请把减法收窄为「只减治理拿掉的」:现算计划 `settingsVerdicts` 里判 `shell` 的不算治理拿掉、不减。
10481
+ - 🔴 **接缝二(非用户所写的提交)**:插件 UserPromptSubmit 条目在 `promptAuthoredByUser:false` 时进 `excluded`,`pluginHookVerdictOf` 答 `undefined`,`enginePluginHookSkipper` 只跳 `engine` ⇒ 会本地跑。`processUserInput.ts:217` 对 `isMeta` 也走本地 UserPromptSubmit 阶段 —— 请在「非用户所写」的提交上整段不触发本地 UserPromptSubmit(与包的排除同一事实)。
10482
+ - 顺带:`refineVerdictForLocalExecutor`(`sema/pluginHooksWirePlan.ts:530-536`)里按型改判那一半在交了型表后成为恒等,可退;托管专层的本地抑制那一半不在本票。
10483
+ - `disableSkills`(DS-1 / DS-4,请托方):`sema/engineWireInjection.ts:233` 判旗后今天只把 `skills` 置空(`:172` → `sema/seamQuery.ts:791` 省略键)—— 部署技能照装;改为把 `...disableSkillsDeclaration(true, baseUrl).field` 交装配口(交互 `sema/seamQuery.ts:1654`、`-p` `sema/seamQueryEngine.ts:1334`),`withheld` 时渲 `withheld.text`。同一提交里 `skills` 不交(或交空数组);用户 agent 定义里写了技能的,带这一键时本包按名拒(二选一,KL-358),端要在交 agents 之前决定怎么处置。要首发也关技能,取片段前先 `await engineCapsSettled(baseUrl)`(KL-357)。
10484
+ - fleet 流 401(CR-1,请托方):`sema/fleetClient.ts:487` 的 `verdict.kind === 'http' && verdict.status === 401` 改调 `isReadCredentialRefusal(err)`(终端源码对它零命中);去抖(`sema/fleetStreamRefusalNotice.ts:35-37`)与四种来源的句子(`:88`)留端;句子前半可改用 `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`。
10485
+ - 审批问类(AC-1 – AC-3,非必改):卡面 `sema/liveToolApprovalWire.ts:354` / `:484`、`sema/askFrameNotes.ts:360`、停车卡 `:218` 可选显示问类;缺席不渲「普通」。
10486
+ - `wiring_manifest.instructions`(IN-1,请托方,随服务端 7.111.0):`sema/upstreamBridge.ts:2596-2613` 的 `noteWiringManifestReading` 展开式补 `...(e.instructions !== undefined ? { instructions: e.instructions } : {})`(缺席不补键,与同处 `hands` 同律)。🔴 终端自家的逐段处置门(终端仓 scripts/wiring-manifest-sections.json + 对应门)有两腿会因本版 / 换 sdk 变红:**包侧投影腿**读本包 `dist/seam.d.ts` 的 `WiringManifestChromeEvent` 成员名,换钉本包 0.89.0 当拍多出 `instructions`(0.88.0 起的 `fileHistory` 同理,终端 v1.0.139 钉 0.86.0 时还没吃到)⇒ `packageProjection.sections` 加这两段;**sdk 分母腿**读 sdk `events.d.ts` 的事件臂顶层键,换 sdk ≥ 15.3.0 当拍多出 `instructions` ⇒ 加一行处置。子代转向结局(MI-1):`screens/REPL.tsx:4334-4348` 只渲 `receipt`,零改动即得。
10487
+
10488
+ **网页端**(0fb6df3;钉 0.84.1)
10489
+
10490
+ - 审批问类:引擎卡 `ui/lib/engine/engine-hitl-frames.ts:163`、待决行 `ui/lib/engine/suspended-subagent-ask-wire.ts:58`、座位卡 `ui/lib/desktop/local-sessions-transport.ts:510`(经 `toolPermissionRequestAskBits(req)` 铺座位面,`:574`)—— 多两只可选位,零改动即得;座位面若有「键集恰等」断言,加这两键。
10491
+ - 终局:`ui/lib/engine/engine-turn-legs.ts:228/314` 用 `readRunTerminal`、不读 `detail`;要分「改了重发」两句就接 PR-2(重发类句在 `ui/lib/turn-error-classify.ts:451/497`)。
10492
+ - `engine_notice` / `wiring_manifest` 登记为不消费(`ui/lib/engine/chrome-arm-ledger.ts:126/164`);hooks 不随请求投、无本地执行器 —— 零改动。
10493
+
10494
+ **管理台**(21b8951;钉 ^0.84.1)
10495
+
10496
+ - `engine_notice` 按码与原词投 warning(`lib/chat/transport/turn-mapping.ts:727`),不经本包受众 —— `SERVER_NOTICE_AUDIENCE`(退出公面)删名零影响;新五码照原词显示。
10497
+ - 审批读 mandate / origin(`lib/chat/transport/hitl-frames.ts:379`、`components/chat/hitl-card.tsx:137`、`lib/approvals/inbox.ts:134`)—— 零改动。
10498
+ - 终局 `lib/chat/transport/run-terminal-wording.ts:15` 四臂 switch 不读 `detail` —— 零改动(要分句就接 PR-2)。
10499
+
10500
+ **桌面端**:冻结期零改动(`SERVER_NOTICE_AUDIENCE`(退出公面)/ 问类 / hooks / `disableSkills` 零读点;`ToolPermissionRequest` 手拼不受可选位影响)。
10501
+
10502
+ **验收方**
10503
+
10504
+ - 新增 G-NM / G-TI / G-UI / G-PR / G-SL / G-OP / G-AC / G-DS / G-HK / G-CR / G-IN / G-MI / G-DU 十三组;按 115a′ 改锚(码册八十六 · 受众表名退役 · 「改了重发」只读状态码 · 自愈 503 + 账本码 · `disableSkills` 不再被拒 · hooks 请求体三事件 · 展示出口无标签 `token` 方案词形 · 插件「本端跑」射程 · 审批键表 33 / 16 · `wiring_manifest` 十二段)。G-PR6 / G-HK16 为端侧验收格。
10505
+
10506
+ ### 115e. 下一 minor(0.90.0)口形预告:合成行的行种机读位(本版零代码)
10507
+
10508
+ - 合成终局行铸点盖超集键 `_sema_row_kind`(六词:`api_error` / `governance_stop` / `model_output_error` / `outcome_unknown` / `session_busy` / `engine_link`),同带 `_sema_error_code`(与同一终局结果帧同一来源)与可证的 CC `error` 词;读口 `rowKindOf(m, { hostKinds? })`(只读自有键、精确字节)、`isSyntheticRow(m)`(不抛)、`inferLegacyRowKind(m, { requireFlag })`(旧转录的唯一正文推断口);`classifySubmitFailure(err)` 与本版「改了重发」共用同一张状态分档表。
10509
+ - 三只正文谓词 `isGovernanceStopRowText` / `isModelOutputErrorRowText` / `isOutcomeUnknownRowText` 0.90.0 标弃用、0.91.0 退出根入口。
10510
+ - 详细设计段随 0.90.0 的接入文档段先行。
10511
+
10512
+ ### 115y. 🔴 三端升级必读(固定段式)
10513
+
10514
+ 1. **换钉 `^0.89.0` 之前**:① 对 `ControlSafetyCode`、`EngineNoticeFactsCode`、子代 steer 结局联合、`PluginHookReason` / `PluginHookExclusionReason` 做穷尽 `switch` / 穷尽 `Record` 的 TypeScript 端编译红一次 —— 补 `ledger_unavailable` 一臂(终端 `sema/controlSafetyAdvice.ts` 必红)、`'task.tool_turn_incomplete'` / `'task.user_steer_undrained'` / `'task.user_followup_undrained'` 三行、`not-delivered` 一臂、六个原因词与一个排除词;本机检索只有终端那一处。② **根入口删一名** `SERVER_NOTICE_AUDIENCE`(退出公面;本机检索四端源码零读点)—— 改用 `noticeAudienceOf(code)`,四码答案不变;新公面 **八** 名(逐名见 CHANGELOG「公面合计」);公面类型名 +10;三型各 +2 可选位(两只公开键表 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 31 → 33、`TOOL_PERMISSION_REQUEST_KEYS` 14 → 16)、hooks 计划 +2 数组(判形口对缺这两只的计划按空数组收下:按 0.88.0 型面拼 / 派生计划的 JS 宿主零改动;TypeScript 自造计划字面量要补两位)/ 引擎事实 +1 位 / 入参 +2 可选位、`TaskRequestInput.disableSkills?` 对构造方 additive。③ 已发导出的可观察变化(不改代码也会看到):码册 86 码,`task.tool_turn_incomplete` 经包按受众分发时上用户面,`task.tool_turn_incomplete` / `task.user_steer_undrained` / `task.user_followup_undrained` 经派发口有 typed 读数(此前 `undefined`);自愈 steer 腿遇账本 503 说「确知没送到」;主 run steer 遇表外 `steering.*` 码时处置句按状态码分两句(4xx「没落地」同 0.88.0,非 4xx 改「送达未知」);`atMostOnceFailureClass` 认 `statusCode` 拼法的状态码;卡入参 / 座位过境口在服务端 ≥ 7.109.0 上多出问类两位(缺席时逐字节同 0.88.0);交互车道的设置来源 UserPromptSubmit / PreCompact / PostCompact 条目判给本端时不再出现在请求体里(部署要身份时本端跑得了的那几只同样不在;压缩两事件上引擎可能跑的条目不判给本端、照在请求体里 —— 引擎自动压缩只跑请求带来的 hooks;第五只起的 prompt / agent 本端跑得了时仍判本端),判给引擎时请求体照旧(端接 HK-5 之前本端执行器照旧跑 —— 仍是两次,接了才一次);端交了型表后插件条目在本端跑不了的型上判「不会执行」,清单多出如实的行;设置来源 PowerShell 形 command 与「引擎整份忽略且本端跑不了」的条目进清单;`buildTaskRequest` 对 `disableSkills` 不再一律按「不认识的键」拒(`true` 上请求体 / `false` 不发 / 坏值换成坏值句),`applyLiveRequestDefaults` 在「请求带 `disableSkills: true` ∧ 落位后的 agents 带技能」这一形上抛 `TypeError`(只有带新键的请求走得到);展示出口在带凭据的输入上输出字节变(无标签 `Token <值>` / `token <值>` 此前原样、本版遮;放行表内的英文词、`/token` 路径尾后接状态码、尖括号占位原样;URL 片段值后隔不换行空格再跟方案词 / 标签的形在只开 URL 结构面的出口上多遮;跨行控制串内容一遍落定);`wiring_manifest` chrome 事件 / `WiringManifestView` 多一可选键 `instructions`,只带这一段的帧开始出事件;子代转向成功结局多一可选键 `messageId`;事实读器与派发口对只在原型链上的通告信封(`code` / `detail`)答 `undefined`(来自 JSON 的通告不受影响)。对这两只型做「键集穷尽」断言(例如逐段处置表与 `WiringManifestChromeEvent` 成员名对账)的端,换钉当拍补一行。④ peer sdk 地板 `>=12.0.1` 不动;开发依赖引擎 `~7.38.2`(构建期)。
10515
+ 2. **逐面**:
10516
+ - **通告**:`task.user_steer_undrained` 的 `crashed` 臂不要说「从未用上、请重发」—— 用 `userInputUndrainedNotice`;读不出时落通用行。去重按事件身份,不要按 `code + taskId` 跨流去重。
10517
+ - **终局**:「改了重发」只认 `providerRejectionResend`;不要按 `detail` 在场判,也不要读 `message` 文字。
10518
+ - **steer**:账本 503 = 确知没送到,原文稍后重发(同一个幂等键照用);不要把它渲成「可能已送到」。表外 `steering.*` 码:4xx 没落地;5xx / 状态码是串 / 缺席 = 送达未知,别按确知被丢重发 —— 直接渲本包的处置句,不要自写一句「nothing was delivered」。
10519
+ - **审批问类**:两位同在同缺;缺席不渲「普通」;按词分支带 `default`(下一版引擎会加类)。
10520
+ - **`disableSkills`**:只经 `disableSkillsDeclaration` 拿字段,不要直接往请求里塞 `true`(老服务端整份 400);`withheld` 时把那一句告诉用户;同一提交别再交技能 / 带技能的 agent 定义(二选一)。
10521
+ - **hooks**:🔴 计划交 `shellHookTypesByEvent` 与 `promptAuthoredByUser`(与换钉同批 —— 只报事件不交型表时,设置来源的 prompt / agent 一律交引擎、本端不跑,引擎这一次不跑时本端跑得了的 prompt 也不跑;KL-372),本地执行器对设置来源组过 `settingsHooksKeptLocally`(插件跳过照旧),`/compact` 交 `engineCompaction`;派发前若按现算计划做减法,只减治理拿掉的(115d 接缝一);非用户所写的提交整段不触发本地 UserPromptSubmit(115d 接缝二)。判给引擎的 hook 看到的是引擎的环境(放进设置的 `env` 的变量才在),被它拦下的主提交本版只显示为 `blocked` 终局 —— 这两点写进端自己的发布说明。
10522
+ - **展示出口**:零改动即得;按字节断言出口输出的端侧格,若断言「`token` 后面那个词原样」,先核那个词是不是英文普通词(表外的词本版会被遮)。
10523
+ - **缺席 = 没说**:`detail` 缺席不是「不是服务商拒绝」;问类缺席不是「普通」;能力位缺席不是「不支持」;`instructions` 缺席不是「没有指令文件」;判官答 `false` 不是「不是认证问题」。
10524
+ - **各端**:终端 —— 请托方七件按 115d;🔴 `ControlSafetyCode` 编译红一次;成因行、steer 未用上通告与终局错误行改读包句;hooks 两处接缝;指令文件来源读点与逐段处置门补行。网页端 / 管理台 —— 零改动即得(审批卡多两只可选位)。桌面端 —— 冻结期零改动。
10525
+ 3. **成文改口**:见 115a′(码册与用户面码数一条 · 受众表名退役一条 · 「改了重发」判据一条 · 自愈 503 一条 · `disableSkills` 一条 · hooks 两条 · `wiring_manifest` 一条 · 审批键表一条 · `childSessionId` 格一条 · steer 处置句一条 · 展示出口五条 · 通告信封一条);既有段(§101 / §108 / §109 / §112 / §114 等)不回改,以本段为准;活段 §0a / §2 / §2b 与签名块通告码表长同批改。
10526
+
10527
+ **包侧缺口:** hooks(CC-287)—— ① 被引擎侧 UserPromptSubmit 拦下的主提交没有机读因由(候引擎 7.39.0 与服务端提货那一版;本版端上与模型自报 `blocked` 同形;KL-371)· ② 引擎能力面只有 `taskSettings.hooks` 一只布尔,没有按型的位:prompt / agent 型按发布服务端的装配事实判「引擎会跑」,自行嵌入且不给 hook 载体的宿主上会静默不跑(KL-366)· ③ prompt / agent 条目在本事件里排在第四只之后、本端又跑不了时判 `engine_unconfirmed`、不进清单(本端跑得了时判本端,依据词 `engine_llm_limit`,压缩两事件同;引擎只数真跑了的这类条目,投影期说不准;KL-368)· ④ 压缩前后 hook 的执行者依赖端交「引擎这次压没压」;引擎已安排压缩但之后再没有 run 时一次都不跑(KL-369)· ⑤ 判给引擎的 hook 子进程看不到本机终端的环境变量(KL-370)· ⑥ 引擎跑的 UserPromptSubmit 注入的上下文在端上没有单独一行(KL-371);终局(CC-282)—— ⑦ 「改了重发」只读状态码:服务商对非正文问题(模型参数、账户能力)回 400 也会说「改了重发」;413 与 422 归「可编辑」(KL-376);审批问类(CC-284)—— ⑧ 不判类成员、不重排(开集原样;服务端 7.110.0 起才按引擎规范序交出;KL-360)· ⑨ 带重复员的一对本包两位都不带(比服务端 7.109.0 严;引擎铸的类集走不到;KL-361);通告(CC-282)—— ⑩ 引擎 7.39.0 起子代收场没用上的输入会在父会话再说一条,本版读器不读子代位(那一条读成父腿自己的;KL-364);`crashed` 那一句在引擎给出用上的证据之前只能说「不知道」(KL-362);`disableSkills`(CC-277)—— ⑪ 能力位没读到时第一条请求不关技能(带一句说明;KL-357);与带技能的 agent 定义同交按名拒,本包不替宿主剪 agent 的技能(KL-358);凭据(CC-289)—— ⑫ 401 身份类两码仍无专句(§112 射程);服务端 7.111.0 两项(CC-282)—— ⑬ `instructions.selected` 成员按开集原字节交,本包不判它是不是今天的候选、不判段长(KL-380)· ⑭ 子代转向 `messageId` 只原样交、不与会话读面「受理了、没用上」那一行关联(KL-381);登记物 —— ⑮ 终端侧两只同名读口 `promptKnownUndelivered` / `withoutUndeliveredPrompts` 本版仍是注入本进程账本的薄包装:下一个 minor 在账本对象上出同判的两只方法,终端改调方法后删包装(过渡表期限 0.90.0);终端回执成因词表已随终端 1.0.140 改读本包整句表而退;十处基线存量由终端在下一版一次清(复核期 0.91.0),过渡物退役登记四行按期复核(0.91.0);展示出口(CC-290)—— ⑯ 方案词 `token` 后放行表外的英文词 / 数字 / 反引号变量名多遮一个词;地址路径以 `/token` 收尾后接三位状态码的日志行形放行,路径尾后跟别的值照遮(KL-382)· ⑰ 标签 / 方案词的值以 `<` / `(` / `[` / `{` 起头时不认(两版同,占位写法;KL-383)· ⑱ 标签值写成「`bearer` / `basic` 方案词 + 地址」(`"token": "Bearer https://<主机>/<路径>"`)时地址的主机 / 路径原样显示(query / userinfo / 片段照遮;0.88.0 同);`token` 方案词不在此列(只给它自己的值加遮盖,外层值照 0.88.0 读),唯 ASCII 空格分隔、不加引号的 `password: Token https://<主机>/<路径>` 两版都只遮 `Token`(KL-386)· ⑲ 「下一对键值」的第二种读法(记号之后隔点 / 空格再跟一枚凭据名)里方案词名单仍是 `bearer` / `basic` 两员,`token` 在那里按标签读;一轮即不动由全池差分与模糊幂等实测兜住,名单尚未与方案词判法并成一份 · ⑳ 已知凭据字面形判据(与配置层同一份,逐条对拍)仍只认 `bearer` / `basic` 前缀,不认 `token` + 空白;`token` 的方案词形只由展示出口的方案词判法认 · ㉑ 「标签值以方案词起头 ⇒ 让给方案词」的让位通则在方案词的值是地址时是否改为外层整值遮,候 0.90.0 评估(改为外层整值遮的写法会在同一遍双方案词、引号地址 + 里层标签两形露凭据,本版不收);既有读法(0.88.0 同,本版不改)—— ㉒ 失败终局因由的 `code` / `kind` 与插件判定行字段按属性访问读,宿主原型被扩展时原型链上的同名键算在场(KL-387)· ㉓ steer 抛出物的 `status` / `statusCode` / `errorCode` 是读它就抛的取值器时,主 run 的 steer 把读取错误原样抛给调用方(KL-388)· ㉔ hooks 跳过口客户端一侧按属性访问读,`Object.prototype` 上放着组 / 条目字段名(如 `matcher`)时认不出已发出(KL-390)。
10528
+
9647
10529
  ## §114 🆕 0.88.0(2026-10-02)展示出口凭据面一次扫描 + 崩溃收敛 `cause` 第二词 + `server.model_unreachable` 入册 + 开发依赖换钉引擎 7.37.1(放行原因闭集镜像 · 修复通告读器)+ 会话所有者自助记忆抹除 + registry 409 两义判别 + 请求键 `requireExistingSession` 与被拒读口 + 投递事实判定归包 + plan 决断台账离门认领 + `wiring_manifest.fileHistory`(🔴 minor;型面 BREAKING 零处(对构造方);根公面运行期导出 1356 → 1372〔+16〕;测试钩 62 不变;公面类型名 922 → 942〔+20〕;`CrashConvergedRow.cause` 闭集 +1 词、`EngineNoticeFactsCode` +2 员〔穷尽分支的端编译期红〕;`WiringManifestChromeEvent.fileHistory?` / `WiringManifestView.fileHistory?` / `TaskRequestInput.requireExistingSession?` 三只可选位;展示出口在带凭据输入上输出字节变;超集键 +1〔`_sema_fileHistory`〕;零新投影臂;车道表 44 → 45 行;`ENGINE_NOTICE_CODES` 80 → 81;`SERVER_NOTICE_AUDIENCE` 三行 → 四行;peer sdk 地板 `>=12.0.1` 不动;开发依赖引擎 `~7.36.0` → `~7.37.1`)
9648
10530
 
9649
10531
  > **minor**,十票同发(按票序):