@sema-agent/client-core 0.95.0 → 0.97.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 (233) hide show
  1. package/CHANGELOG.md +269 -0
  2. package/README.md +61 -31
  3. package/dist/adapt/arms.js +7 -1
  4. package/dist/adapt/toolCards.d.ts +1 -0
  5. package/dist/adapt/toolCards.js +16 -3
  6. package/dist/adapt/wireShapes.js +2 -16
  7. package/dist/adapter/activeRunSelfHeal.d.ts +4 -2
  8. package/dist/adapter/activeRunSelfHeal.js +32 -6
  9. package/dist/adapter/downstream/eventToSdkMessage.js +11 -3
  10. package/dist/adapter/downstream/terminalToSdkResult.js +14 -11
  11. package/dist/adapter/runStream.js +30 -47
  12. package/dist/agentSession/backgroundView.js +2 -15
  13. package/dist/agentSession/engineAgentRegistryRead.js +5 -4
  14. package/dist/agentSession/engineSessionBackgroundStop.js +22 -15
  15. package/dist/agentsWireCaps.d.ts +1 -1
  16. package/dist/agentsWireCaps.js +29 -12
  17. package/dist/approvalDecidedByCapability.d.ts +2 -0
  18. package/dist/approvalDecidedByCapability.js +0 -1
  19. package/dist/approvalsStreamLiveCapability.d.ts +2 -0
  20. package/dist/approvalsStreamLiveCapability.js +3 -2
  21. package/dist/attachmentSeatCapability.d.ts +2 -0
  22. package/dist/attachmentSeatCapability.js +0 -1
  23. package/dist/callerCwdCapability.d.ts +2 -4
  24. package/dist/callerCwdCapability.js +0 -7
  25. package/dist/centerWiringCapability.d.ts +2 -4
  26. package/dist/centerWiringCapability.js +4 -9
  27. package/dist/classifierVerdictWire.js +4 -16
  28. package/dist/clientSlice.js +1 -1
  29. package/dist/cloudConfigWireCaps.d.ts +4 -4
  30. package/dist/cloudConfigWireCaps.js +241 -85
  31. package/dist/coreValuePorts.d.ts +11 -7
  32. package/dist/coreValuePorts.js +5 -8
  33. package/dist/credentialProvenance.d.ts +28 -0
  34. package/dist/credentialProvenance.js +76 -0
  35. package/dist/decideFailureNote.js +3 -1
  36. package/dist/decideReceipt.js +7 -10
  37. package/dist/declared/supportFloorDeclared.js +3 -3
  38. package/dist/deviceExecutorManagementCapability.d.ts +2 -0
  39. package/dist/deviceExecutorManagementCapability.js +3 -2
  40. package/dist/displayUntrusted.d.ts +10 -3
  41. package/dist/displayUntrusted.js +371 -60
  42. package/dist/engineCapReader.d.ts +8 -2
  43. package/dist/engineCapReader.js +15 -7
  44. package/dist/engineCapsCache.d.ts +17 -3
  45. package/dist/engineCapsCache.js +268 -43
  46. package/dist/engineDirectory.d.ts +79 -0
  47. package/dist/engineDirectory.js +186 -0
  48. package/dist/engineErrorCodes.d.ts +17 -1
  49. package/dist/engineErrorCodes.js +46 -16
  50. package/dist/engineNoticeCodes.d.ts +17 -0
  51. package/dist/engineNoticeCodes.js +54 -1
  52. package/dist/executionLaneCapability.d.ts +2 -0
  53. package/dist/executionLaneCapability.js +3 -2
  54. package/dist/fileHistoryCaptureCapability.d.ts +16 -0
  55. package/dist/fileHistoryCaptureCapability.js +98 -2
  56. package/dist/fileHistoryLegNotice.js +4 -0
  57. package/dist/fleet/bgSubagentRow.d.ts +15 -0
  58. package/dist/fleet/bgSubagentRow.js +67 -0
  59. package/dist/fleet/fleetLedger.d.ts +1 -0
  60. package/dist/fleet/fleetLedger.js +164 -126
  61. package/dist/fleet/fleetProjection.d.ts +1 -0
  62. package/dist/fleet/fleetProjection.js +10 -3
  63. package/dist/fleetTaskDesc.js +4 -17
  64. package/dist/gateOutcome.d.ts +12 -1
  65. package/dist/gateOutcome.js +56 -1
  66. package/dist/gateVocabulary.d.ts +2 -2
  67. package/dist/gateVocabulary.js +4 -3
  68. package/dist/generated/engineAskFaceTables.js +1 -1
  69. package/dist/generated/engineFactTables.d.ts +5 -3
  70. package/dist/generated/engineFactTables.js +17 -4
  71. package/dist/generated/engineNoticeTables.js +12 -3
  72. package/dist/generated/sdkFactTables.d.ts +2 -0
  73. package/dist/generated/sdkFactTables.js +7 -0
  74. package/dist/generated/settingsSchemaFns.d.ts +3 -0
  75. package/dist/generated/settingsSchemaFns.js +53 -0
  76. package/dist/generated/toolNameTables.d.ts +1 -1
  77. package/dist/generated/toolNameTables.js +1 -42
  78. package/dist/hitl/approvalDecisionNoteAudit.js +2 -2
  79. package/dist/hitl/approvalEndingCause.d.ts +2 -0
  80. package/dist/hitl/approvalEndingCause.js +26 -21
  81. package/dist/hitl/approvalHolds.d.ts +16 -1
  82. package/dist/hitl/approvalHolds.js +52 -12
  83. package/dist/hitl/askGateWire.js +1 -0
  84. package/dist/hitl/askParkRowRouting.js +1 -1
  85. package/dist/hitl/automaticAnswerVerdict.d.ts +1 -1
  86. package/dist/hitl/automaticAnswerVerdict.js +13 -10
  87. package/dist/hitl/decisionConflict.js +4 -5
  88. package/dist/hitl/decisionRefusal.d.ts +8 -0
  89. package/dist/hitl/decisionRefusal.js +55 -14
  90. package/dist/hitl/frameRouter.d.ts +3 -1
  91. package/dist/hitl/frameRouter.js +58 -39
  92. package/dist/hitl/gateLedger.d.ts +0 -5
  93. package/dist/hitl/gateLedger.js +0 -21
  94. package/dist/hitl/hitlBridge.d.ts +6 -2
  95. package/dist/hitl/hitlBridge.js +46 -11
  96. package/dist/hitl/localAllowRule.d.ts +1 -0
  97. package/dist/hitl/localAllowRule.js +2 -2
  98. package/dist/hitl/noAllowCause.d.ts +2 -1
  99. package/dist/hitl/noAllowCause.js +3 -2
  100. package/dist/hitl/parkResolver.d.ts +1 -0
  101. package/dist/hitl/parkResolver.js +14 -56
  102. package/dist/hitl/parkRowBirthWait.d.ts +1 -0
  103. package/dist/hitl/parkRowBirthWait.js +2 -2
  104. package/dist/hitl/planReviewWire.d.ts +1 -0
  105. package/dist/hitl/planReviewWire.js +98 -20
  106. package/dist/hitl/replayedApproval.d.ts +3 -3
  107. package/dist/hitl/replayedApproval.js +21 -16
  108. package/dist/hitl/sessionPolicyDeliverable.d.ts +0 -1
  109. package/dist/hitl/sessionPolicyDeliverable.js +17 -17
  110. package/dist/hitl/sessionPolicyWire.d.ts +2 -0
  111. package/dist/hitl/sessionPolicyWire.js +15 -3
  112. package/dist/hitl/standingRows.d.ts +19 -0
  113. package/dist/hitl/standingRows.js +148 -0
  114. package/dist/hitl/suspendedReopen.js +2 -1
  115. package/dist/hitl/toolApprovalWire.d.ts +22 -10
  116. package/dist/hitl/toolApprovalWire.js +286 -47
  117. package/dist/hookMatcherVerdict.d.ts +1 -9
  118. package/dist/hookMatcherVerdict.js +21 -61
  119. package/dist/hooksWireCaps.js +2 -2
  120. package/dist/hostCallbackGuard.d.ts +1 -0
  121. package/dist/hostCallbackGuard.js +6 -0
  122. package/dist/index.d.ts +26 -12
  123. package/dist/index.js +20 -10
  124. package/dist/liveModelCatalog.d.ts +13 -0
  125. package/dist/liveModelCatalog.js +56 -0
  126. package/dist/mcpProbeCapability.d.ts +2 -4
  127. package/dist/mcpProbeCapability.js +3 -8
  128. package/dist/mcpWireCaps.d.ts +1 -0
  129. package/dist/mcpWireCaps.js +4 -1
  130. package/dist/memoryComplianceCapability.d.ts +2 -4
  131. package/dist/memoryComplianceCapability.js +3 -8
  132. package/dist/memoryOriginCapability.d.ts +2 -4
  133. package/dist/memoryOriginCapability.js +3 -8
  134. package/dist/memorySpecWire.js +2 -2
  135. package/dist/modelIdentityResolvability.d.ts +2 -2
  136. package/dist/modelIdentityResolvability.js +14 -5
  137. package/dist/noticePresentation.d.ts +68 -0
  138. package/dist/noticePresentation.js +247 -0
  139. package/dist/outputStyleSeatCapability.d.ts +2 -1
  140. package/dist/outputStyleSeatCapability.js +0 -4
  141. package/dist/ownKey.d.ts +2 -0
  142. package/dist/ownKey.js +18 -0
  143. package/dist/peerFrames.js +13 -9
  144. package/dist/peerLaneCapability.d.ts +2 -0
  145. package/dist/peerLaneCapability.js +3 -2
  146. package/dist/permissionModesCapability.d.ts +2 -4
  147. package/dist/permissionModesCapability.js +0 -7
  148. package/dist/permissionRuleIssue.js +0 -3
  149. package/dist/permissionRulesWriteCapability.d.ts +2 -0
  150. package/dist/permissionRulesWriteCapability.js +3 -2
  151. package/dist/permissionsAllowGrantCapability.d.ts +2 -0
  152. package/dist/permissionsAllowGrantCapability.js +4 -2
  153. package/dist/permissionsDeclaration.d.ts +2 -0
  154. package/dist/permissionsDeclaration.js +72 -59
  155. package/dist/printPermissionOutcome.d.ts +12 -0
  156. package/dist/printPermissionOutcome.js +50 -0
  157. package/dist/printToolResultFrame.d.ts +1 -0
  158. package/dist/printToolResultFrame.js +5 -9
  159. package/dist/promptBlockedCopy.d.ts +5 -0
  160. package/dist/promptBlockedCopy.js +35 -0
  161. package/dist/protocolSegment.d.ts +9 -6
  162. package/dist/protocolSegment.js +31 -21
  163. package/dist/providerRejection.d.ts +4 -0
  164. package/dist/providerRejection.js +75 -14
  165. package/dist/replayBody.d.ts +12 -0
  166. package/dist/replayBody.js +25 -0
  167. package/dist/request/taskRequest.d.ts +1 -4
  168. package/dist/request/taskRequest.js +74 -19
  169. package/dist/resumeRefusalCopy.js +9 -25
  170. package/dist/retryStatus.d.ts +9 -1
  171. package/dist/retryStatus.js +9 -2
  172. package/dist/rewindArchiveCapability.d.ts +3 -13
  173. package/dist/rewindArchiveCapability.js +12 -58
  174. package/dist/rewindArchiveReading.d.ts +17 -0
  175. package/dist/rewindArchiveReading.js +55 -0
  176. package/dist/ruleCompileVerdict.d.ts +9 -1
  177. package/dist/ruleCompileVerdict.js +29 -4
  178. package/dist/runTerminal.d.ts +48 -5
  179. package/dist/runTerminal.js +215 -12
  180. package/dist/sandboxWire.js +13 -0
  181. package/dist/sdkWireTransit.d.ts +2 -1
  182. package/dist/sdkWireTransit.js +1 -0
  183. package/dist/sealedKeyCapability.d.ts +2 -4
  184. package/dist/sealedKeyCapability.js +0 -7
  185. package/dist/seam.js +4 -2
  186. package/dist/seatContract.d.ts +76 -11
  187. package/dist/seatContract.js +222 -27
  188. package/dist/sessionPolicyCapability.d.ts +2 -0
  189. package/dist/sessionPolicyCapability.js +3 -2
  190. package/dist/sessionReadRedactionCapability.d.ts +2 -4
  191. package/dist/sessionReadRedactionCapability.js +0 -7
  192. package/dist/sessionSyncFileHistory.d.ts +4 -0
  193. package/dist/sessionSyncFileHistory.js +66 -0
  194. package/dist/sessionSyncFileHistoryCapability.d.ts +2 -1
  195. package/dist/sessionSyncFileHistoryCapability.js +3 -5
  196. package/dist/skillToolListsCapability.d.ts +2 -1
  197. package/dist/skillToolListsCapability.js +3 -5
  198. package/dist/sqlEngineCapability.d.ts +2 -0
  199. package/dist/sqlEngineCapability.js +4 -3
  200. package/dist/steerPriorityCapability.d.ts +2 -1
  201. package/dist/steerPriorityCapability.js +3 -5
  202. package/dist/storePostureCapability.d.ts +2 -4
  203. package/dist/storePostureCapability.js +4 -9
  204. package/dist/subagent/engineSubagentSteer.js +7 -5
  205. package/dist/subagentContentStore.js +4 -15
  206. package/dist/supportFloor.d.ts +1 -0
  207. package/dist/supportFloor.js +13 -9
  208. package/dist/systemReminderTag.d.ts +1 -0
  209. package/dist/systemReminderTag.js +8 -0
  210. package/dist/toolHistoryBadTurn.js +3 -2
  211. package/dist/toolHistoryMismatch.d.ts +0 -3
  212. package/dist/toolHistoryMismatch.js +3 -7
  213. package/dist/toolResult.d.ts +12 -1
  214. package/dist/toolResult.js +55 -1
  215. package/dist/toolResultContent.d.ts +2 -0
  216. package/dist/toolResultContent.js +63 -0
  217. package/dist/usageAnalytics.js +40 -16
  218. package/dist/userInvokedSkillsCapability.d.ts +2 -1
  219. package/dist/userInvokedSkillsCapability.js +3 -5
  220. package/dist/webSearchBackendCapability.d.ts +2 -0
  221. package/dist/webSearchBackendCapability.js +3 -2
  222. package/dist/wireErrorTriage.d.ts +2 -0
  223. package/dist/wireErrorTriage.js +91 -38
  224. package/dist/wireFailureShape.d.ts +20 -3
  225. package/dist/wireFailureShape.js +128 -72
  226. package/dist/workflowsJournalCapability.d.ts +2 -0
  227. package/dist/workflowsJournalCapability.js +3 -2
  228. package/dist/writeProtectionCapability.d.ts +2 -0
  229. package/dist/writeProtectionCapability.js +3 -2
  230. package/docs/INTEGRATION-CLIENTS.md +1784 -20
  231. package/package.json +5 -5
  232. package/dist/engineRefusedToolName.d.ts +0 -1
  233. package/dist/engineRefusedToolName.js +0 -8
package/CHANGELOG.md CHANGED
@@ -49,6 +49,275 @@
49
49
  > 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
50
50
  > commit 漏转在发布前就红,不再靠人记。
51
51
 
52
+ ## 0.97.0(2026-10-14)
53
+
54
+ > 主题:清账 + 提货 —— 支持底线抬到服务端 7.126.0 / 引擎 7.49.5 / sdk 21.1.0(团队编排四键删、审批卡词 `approvalCard`、提交幂等码、终局失败详情四臂、`allowTools`、目录候选被整拒读口;引擎改名表退役)· 单一真源收口余项(CC-688 / 689 / 696 / 704 / 705)· 座位契约余项(CC-699 / 703)· 能力位(CC-690 / 692)· 中心配置告示句与影子 models 文档(CC-693 / 702 / 708 / 719)· 舰队账本(CC-700)· 决断拒收判官取位与抛出物读法(CC-706 / 709 / 712)· 审批已结一处存(CC-632 / 710)· 展示封长记号(CC-707)· 工具卡退化空卡(CC-697)· 传输失败分类读口(CC-698);两同义行(`projectEngineRuleNames` / `describePrintLaneAllowKept`)在终端删掉壳侧实现之后删行。
55
+
56
+ ### Removed
57
+
58
+ - **Support for servers below 7.126.0 (engine below 7.49.5) and SDK below 21.1.0 is withdrawn**(CC-715;接入文档 **§124 PK-1**):支持底线三件同批抬到服务端 **7.126.0** / 引擎 **7.49.5** / sdk **21.1.0**,peer 地板 `>=20.0.0` → **`>=21.1.0`**。只为底线以下而存在的读法同批退役(下面三条)。
59
+ - **引擎改名词的两代读法删除**(CC-715;退役登记 RL-123;**§124 PK-2**;🔴 型面 BREAKING:公面型 `ApprovalMandateWord` 少一员 `write_protection_unresolved`):支持范围内的服务端只发现名 `target_unresolved` / `config.path_view_unresolved`。旧词 / 旧码到达读成表外 —— 强制词读口答缺席、理由句落中性句;自动答判定对带旧词的强制卡答 `unknown`;放行原因落通用句;旧通告码不在码册、受众按 `operator`。本版早先那一条「理由句口也经改名表读」(**§124 WR-1**)随改名表一起收回(未发版,同版内改口)。
60
+ - **根入口删除名 `ASK_PARK_GATE_KINDS`**(CC-715;退役登记 RL-135;**§124 PK-4**;🔴 型面 BREAKING,零别名):审批腿门种的手写副本。读成员表改读根入口转口的 sdk 常量 `APPROVAL_DECIDE_GATE_KINDS`;判「一行 / 一道门归哪只决断口」读 `durableDecideLegOf`。同名 `PLAN_REVIEW_GATE_KINDS` 仍在根入口,但现在就是 sdk 21.1.0 那一只(同值;型由 `readonly string[]` 收窄成 sdk 的字面元组 —— 以任意串调 `.includes` 的地方编译红,改读 `durableDecideLegOf`)。
61
+ - **请求装配口的团队编排四键 `council` / `debate` / `rounds` / `lenses` 删除**(CC-715;退役登记 RL-134;**§124 PK-8**;🔴 型面 BREAKING):服务端 7.126.0 起对这四键答 `400 request.body_shape`(场景透传键只剩 `repo`)。入参型删这四键(带着它们的对象字面量编译红);运行期带着 ⇒ 装配期按不认识的键 `TypeError` 拒,不再上 wire。
62
+ - **根入口删除名 `isFsApprovalGate`(0.97.0 退出公面)**(CC-696;退役登记 RL-129;接入文档 **§124 HT-1** / §2z;🔴 型面 BREAKING,根入口运行期导出 1629 → 1628):这只谓词的首行把门种位 `tool_approval` 当审批门、放行任意工具名 —— 那个词是审批门的 pending 种,不是门种,wire 的门种位上从不出现;它与待决行的「门种 → 耐久决断腿」一张表(`durableDecideLegOf`)回答同一问却前提不同。停驻门归哪条审批臂现在只有一条读法(见 `### Fixed` HT-2),公面读法 `isToolApprovalGate`;只问工具名是不是 fs 写用 `toolNameIsFsWrite`。🔴 硬破坏三句:① 按名 import 或原名转出它的端编译红(终端一处转出 + 测试);② 运行期没有替身(零别名);③ 改读 `isToolApprovalGate(gate)`(停驻门是不是工具审批停驻)或 `toolNameIsFsWrite(name)`(名字族),断言「门种位 `tool_approval` 进」的测试格作废。
63
+ - `isEngineRefusedToolName` (root entry). Read `ruleToolNameVerdictOf(name).kind` instead: neither `current` nor `unknown` means the engine refuses the name; `unknown` means it cannot be told here. (CC-688)
64
+ - Known limit KL-158 (a name retired by a newer engine than the build-time table judged writable): the table is gone, the check is the one the host installs, and a session-rule write naming a refused tool is refused by the server before anything is stored. KL-183 is rewritten for the same reason: an entry already in a record is only missed when the connected engine is newer than the engine the host installs. (CC-689)
65
+ - **判定口输入 `ReplayPendingBasis.settled`(0.95.0 加的可选键)退役**(CC-632;退役登记 RL-133;接入文档 **§124 RP-2**;🔴 型面 BREAKING:可选输入键删除,三端零读点):「这一问已有结局」现在只有一处存 —— 进程级已结表,判定口第 0 条自己读它;宿主自备映射交入是同一事实的第二存处,对象上带着这一键也不读、不抛、不改判。同批删已知限制 KL-744(「已见结局」只记流内帧腿自己见到的结局,悬挂 ask 腿与宿主问车道那一路不进账)。
66
+ - **座位请求「Always allow (this session)」那一档改由判官派生:`ToolPermissionRequest.sessionRow?: true` 取代 0.96.0 的座位位 `rememberRefused`;过境口 `toolPermissionRequestAskBits(card, requestId?)` 多第二参**(CC-699;接入文档 **§124 HT-3** / §124y;🔴 型面 BREAKING + 行为变):0.96.0 座位只过境引擎的「记不住」声明(严格 `true`),座位卡按「不是 true ⇒ 照渲」读 —— 那一位读不出(非 `true` 值 / 读就抛 / 卡上读不出的证据含它)、只在原型链上、或座位的决断口带不走会话放行时,卡上判官 `standingRowsOf` 说不给而座位照渲(按了也只放行这一次)。现在过境口按判官会话行的同一前提(引擎没说记不住、那一位读得出、卡读得出)∧ 第二参 `requestId` 的域带得走(`live:` / `durable:`;`question:` / `elicit:` / `plan:` 带不走)铸 `sessionRow: true`,座位卡只读 `sessionRow === true`;第二参缺席 ⇒ 不铸;入参本身是座位请求(自带 `requestId` 键)⇒ 不铸(判决只在铸请求时做一次,座位卡直接读请求上的这一位);输入上自带的 `sessionRow` 一律不搬。`TOOL_PERMISSION_REQUEST_KEYS` 换一员(−`rememberRefused` +`sessionRow`);卡入参 `ApprovalCardRequest.rememberRefused` 与读口 `readApprovalRememberRefused` 不动。🔴 硬破坏三句:① 读座位请求 `rememberRefused` 位或按 `Pick<ToolPermissionRequest, …, 'rememberRefused'>` 取型的端编译红;② 宿主不给过境口补第二参 ⇒ 座位请求不带 `sessionRow` ⇒ 改读它的座位卡不再渲那一档(闭合失败);③ 铸座位请求时把本请求的 `requestId` 作第二参传给过境口,座位卡改读 `sessionRow === true`。
67
+
68
+ ### Added
69
+
70
+ - **提交幂等「同键换体」的拒绝:码 `CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH` + 判定 `isIdempotencyPayloadMismatchCode(code)` + 措辞 `idempotencyPayloadMismatchContent()`**(CC-715;**§124 PK-5**;根入口运行期导出 +3):服务端 7.126.0 起同一把 `Idempotency-Key` 再投一个不同的请求体答 `409 conflict.idempotency_payload_mismatch`(不回放、不新建)。三条提交腿同一只判定:抛错的腿取 `classifyTurnWireError(err).errorCode`,开流之后才被拒的那一腿取终局读数的码;结果帧的错误行在服务端原句之后补本包那一句(「重试就原样重发同一份请求;要发另一个请求就换一把新键」)。本包的提交路径不自带幂等键,撞上它的是自带键而前后两次体不同的调用方。
71
+ - **审批卡词读口 `readApprovalCardWord(carrier)` + 卡请求位 `ApprovalCardRequest.approvalCard`**(CC-715;**§124 PK-7**;根入口运行期导出 +1):服务端 7.126.0 起活卡帧与待决行带引擎铸的卡词 `approvalCard`(八词闭集,问答卡 = `question`),取代按工具名回推的 `contentKind`(本包从未读过它)。读口只认 sdk 闭集里的词,缺席 / 表外 / 坏形一律缺席(不编 `generic`);活卡帧与待决行两条腿同一把读法上卡,v1 呈卡帧不带。只作展示 / 分诊,不参与决断。
72
+ - **请求体 `allowTools`**(CC-715;**§124 PK-9**):引擎的可用性选择器(只给点名的工具),交互与无人值守两条车道照发,`[]` = 什么都不给(照发,不当缺席);名单在读到的那一拍就定下(之后入参对象上别的取值器改原数组,发出去的仍是那一拍的名单);不是串数组 ⇒ 装配期 `TypeError`;side-channel 车道无座。名字对不对由服务端判(`400 config.tool_face_control`)。
73
+ - **在线目录「最近一份配置候选被整拒」读口:`modelCandidateRejectedOf(catalog?)` + 措辞 `modelCandidateRejectedContent(reading)`**(CC-715;**§124 PK-11**;根入口运行期导出 +2):服务端 7.126.0 `GET /v1/models` 的 `candidateRejected`;三态 `not_reported`(不说「没拒」)/ `rejected`(被拒的配置域、时刻、来源)/ `unreadable`;回体读口原样过境这一位。
74
+ - **根入口转口 sdk 21.1.0 的两只决断口门种常量 `APPROVAL_DECIDE_GATE_KINDS` / `PLAN_REVIEW_GATE_KINDS` 与成员型 `ApprovalDecideGateKind` / `PlanReviewGateKind`**(CC-715;**§124 PK-4**):就是 sdk 那两个对象(引用相等);本包门种判官的两张表由它们的构建期生成物派生。
75
+ - **`isSdkRunParked(status)` / `SDK_PARKED_RUN_STATUSES` 上根入口**(接入文档 **§124 SR-1**;根入口运行期导出 +2,型面零变):sdk 停驻 run 的两词(`suspended` / `needs_review`)与谓词此前只在包内(`terminalStatuses`,0.95.0 起单源),终端壳自持一份并集;现在上根,壳侧并集随换钉退役。
76
+ - **整份能力位读数上根入口:`engineCapsLandingOf(baseUrl)` + 型 `EngineCapsLanding`**(CC-690;接入文档 **§124 CL-1**;根入口运行期导出 +1):宿主要「这台引擎的 `/v1/capabilities` 说了什么」的整份对象(列能力表、交给本包的投影)时,此前只能自己再取一发存第二份,并自定缺键怎么算。现在读本包落地那一份:三态 —— `landed`(带 `caps`:落地那一拍回体的快照,深冻结,与能力位读器、按键读口读的是同一只;同一次落地两读同一只记录)/ `not_landed`(没探 / 在飞 / 失败 / 回体不是对象 / 被作废 / 地址不是非空串;要分在飞与失败,先等 `engineCapsSettled`)/ `unreadable`(探测交回的回体根读不出)。🔴 缺键极性只在这一处成文:`caps` 上一位不是自有数据位 = 引擎没报 = 不知道,既不是 `true` 也不是引擎明说的 `false`(`engineCapState` 答 `absent`、`engineCapTrue` 答 `false`);在 `caps` 上写「不是 `false` 就算开」是第二条读法。它也是包内取落地的唯一读法:按键读口、嵌套口、能力位读器与 `observedEngineAnswer` 都改从它派生(读数逐字不变,行为差只在下面 Fixed 一行)。
77
+ - **同一台引擎换探测闭包时更新重探登记而不失效:`rotateEngineCapsProbe(baseUrl, probe)` + 型 `EngineCapsProbeRotation`**(CC-692;**§124 CL-3**;根入口运行期导出 +1;KL-753 删行):令牌轮换后重建客户端、而该地址的能力回体已经落地时,新闭包交给 `kickEngineCapsProbe` 会被幂等闸挡回、不更新重探登记 ⇒ 之后「回体已落地而某一位读不成形」的重探(文件检查点收紧闸经它)仍调首探那只闭包,旧令牌失效则恒败、关了检查点的用户一直被拒。新口三态:`started`(没有落地也没有在飞 ⇒ 与 kick 同,起跑)/ `registered`(已有落地或在飞 ⇒ 不起跑、不失效、不推进代际、零请求,只把之后的重探换成这一只)/ `ignored`(地址不是非空串或探测不是函数 ⇒ 什么都不做)。普通 kick 被闸挡回仍不改登记;引擎换人仍走两参 `invalidateEngineCaps`。
78
+ - `ruleToolNameVerdictOf(name)` and its type `RuleToolNameReading` on the root entry: the engine's tool-name check read as `current` / `retired` (with `currentName` when the engine names one) / `unprefixed_namespace` / `unmintable_segment` / `unknown` (check not installed, threw, or answered outside those four words). Never throws. Neither `current` nor `unknown` means the engine refuses the name. (CC-688)
79
+ - `AgentToolListFlawKind` gains `unmintable_segment` (a protocol name whose server or peer segment the engine never mints — engines refuse such a deny-list entry when they can list every tool) and `unjudged` (the engine's tool-name check is not installed or gave no clear answer for that entry). A switch over the flaw kinds needs the two new arms. (CC-688)
80
+ - `SessionPolicyRemovalOutcome` gains `{ kind: 'judge_failed' }`: the engine's tool-name check is not installed, or gave no clear answer for an entry the removal had to judge — nothing is removed and nothing is written (it is not reported as `nothing_to_remove`). `sessionPolicyRemovalNotice` has its own sentence. A switch over the outcome kinds needs the new arm. (CC-688)
81
+ - **工具结果卡结局读口 `readToolCardOutcome(record)`(CC-697;根入口 +1 函数、+2 型 `ToolCardOutcomeReading` / `ToolCardDegradedCause`)**:转录里的工具结果卡此前只有标记 —— 信封 `_sema_degraded`(没有引擎送来的正文,`content` 是空串占位)与 `_sema_not_executed`(引擎明说没执行)—— 和 `is_error`;端只看 `is_error` / `content` 就把占位卡渲成成功的空结果,网页端为此各自铸了句子。现在一只读口:三态 + 成因 + 一句话 —— `normal`(真结果,成败照旧看 `is_error`,读口不改写)/ `degraded`(`not-executed` 引擎没执行,与 `is_error` 正交且先于占位成因;`error-without-detail` 引擎报了错但没给正文;`no-result` 没有结果、记录看不出它跑没跑〔占位卡上的 `is_error: false` 是占位,不是成功〕;`unrecognised` 别的包版本写的标记,不猜成因)/ `unreadable`(不是工具结果记录,或占位标记位读不出 —— 读不出不读成 `normal`)。入参是整条 user 工具结果记录(交互转录行与 `-p` 帧同键同形、两车道同答);全程自有数据位、访问器不执行、永不抛。句子不分工具族、不含内部名;`no-result` 的一句对「轮末收扫」与「真 `tool_end` 无正文」两种成因同为真,所以不说运行停了。
82
+ - **`CloudModelRefIssue.reason` 闭集多一员 `unvouched`**(CC-708;接入文档 **§124 RO-1**;型面只增、additive,运行期导出零变):只出现在 `roles` 键下(`at` = 角色键、带 `target`),意思是「角色点名的模型在目录里,但宿主没有注入本机条目判定口,本包担保不了本机引擎收不收那一条 ⇒ 这个角色没投」;`cloudEffectiveNotices` 为它多一类 `warn` 句(点名角色与模型,说缺的是判定口)。对该联合做穷尽分支的宿主要补这一员(三端无穷尽读点,见 §124d)。
83
+ - **测试钩 `__resetSettledApprovalsForTests()`**(CC-632;**§124 RP-3**;测试钩 59 → 60):清进程级已结表(不动在途持有、卡口与同调用卡账本)。已结表跨用例存活 —— 复用固定 approvalId 的测试用例之间要清;真部署上 approvalId 是服务端铸的唯一 id,不会撞。
84
+ - **mcp 条目的 `toolAxes` 随请求过境**(接入文档 **§124 PK-13**;入参型 `McpConfigLike` +1 可选成员 `toolAxes?: unknown`,运行期导出零变):本地 `.mcp.json` 腿(`mcpConfigToSpec` / `mcpConfigsToSpecs`)与中心配置腿(`cloudMcpToSpecs`)把条目上的按工具效果轴覆盖原样带到请求面 `McpServerSpec.toolAxes` —— 在场且不是 `undefined` ⇒ 同一个值原样过境,缺席不铸;不校形,坏形的处置归服务端(只收认得的轴词)。与服务端 7.126.0 中心腿投影同一读法;此前这一键在两条腿上都被丢掉。
85
+
86
+ ### Changed
87
+
88
+ - **终局失败详情 `RunTerminalFailureDetail` 收成按 `kind` 分臂的联合**(CC-715;**§124 PK-6**;🔴 型面 BREAKING;服务端 7.126.0 / sdk 21):四臂 —— `provider_rejected`(`status` 承重;`code` / `providerCondition` / `providerConditionSource` 照旧,新增 `providerResetAtMs` 与 `route`)/ `coded`(带码失败的结构化详情,JSON 纯值冻结快照;自引用那一枝略去,超总量预算整只缺席)/ `model_output_invalid`(`cause` 两词 + `outputLimit` 输出上限事实)/ `unrecognized`(表外种类只带原词)。修前是单形 `{ kind: string; status?; code?; … }`,表外种类原样带回连同 `status` / `code`;现在只进 `unrecognized`。承重位坏 ⇒ 整只缺席,可选位坏只省那一位。「普通对象」按跨 realm 形认(原型为 `null` 或原型自己的原型为 `null`):别的 realm(vm 上下文 / iframe)解析出来的同一份 JSON 与本 realm 同答。
89
+ - **开发依赖 sdk `^20.0.0` → `^21.1.0`**(CC-715;**§124 PK-1**):sdk 21 删 `TaskRequest.council` / `debate` 与 `contentKind`(本包零读点)、加 `allowTools` / `approvalCard` / 终局失败详情三臂联合 / 两只门种常量。
90
+ - **开发依赖引擎 core 7.49.1 → **7.49.5**(接入文档 §124 CK 行;型面零变、行为零变)**:7.49.2 – 7.49.5 的 wire 清单合计三项,本包零读点 —— `SHELL_READ_FINDINGS` +`unanswered`(7.49.2)、`ReadCandidate` +`device` / `through` 与 `ShellReadRedirect` +`fd`(7.49.3,均可选位);7.49.4 / 7.49.5 清单为空(7.49.5 = Windows 规则文件店平台谓词,本包不读)。生成物 `src/generated/*.ts` 按 7.49.5 重生,逐字节与盘上对账(门 `upstream-tables`)。
91
+ - **续跑 / 停驻 / 分型读口读抛出物的机读位与决断拒收判官同一条读法:只认自有数据位**(接入文档 **§124 EX-2**;行为面收紧,公面导出名与型零变):`resumeReopenFromError` / `refusedParkFromError` / `resumeRefusalFromError` / `resumeRetryLaterFromError` 与 `classifyTurnWireError` / `isWireTransportError` / `isPreStreamDrainingReject` / `drainingRetryDelayMs` 读 `errorCode` / `status` / `retryAfterSec` / `retryAfterMs` 此前沿原型链普通取值 —— 同一对象判官说「已决」,读口却说「仍待决可续读」或「等 30 秒可再试」;自有访问器在读口里被执行,抛错的取值器让 `resumeRefusalFromError` 外抛。现在只在原型链上 ⇒ 当没带,自有访问器 ⇒ 读不出(取值器不执行;续跑 / 停驻读口答 `null`,分型读口落 0.97.0 起的读不出态)。真 sdk 错误上这些位都是实例自有数据位,读数不变。`message` / `name` / `cause` 照旧(内建错误的 `name` 在原型上)。
92
+ - **能力位读器族多一态 `unreadable`:落地在手而这一位读不出,不再答「没观测」**(CC-704 ①;接入文档 **§124 CP-1**;🔴 型面 BREAKING:29 只读数型联合各 +1 臂 `{ kind: 'unreadable' }`,公面导出名零变;行为变):`observedXxx(baseUrl)` 此前对「这一地址没有落地」与「落地在手,而这一位是自有访问器 / 读描述符就抛 / 值不是这只读器认的形」同答 `{ kind: 'unobserved' }`,而按键现读的 `engineCapValue` 对同一只访问器位答 `unreadable` —— 同一份回体两种答法;下游据「没观测」去等探测、去重探,而重探修不好一个读不出的位。现在两态由读器工厂一处铸、按「有没有落地」二分:没有落地 ⇒ `unobserved`;落地在手而投影没给出读数 ⇒ `unreadable`(每次新铸)。各读器的 doctor 句多一句(回报到了、这一项本端读不了、照这样报再探也不会变);`sql` 读器的 `store` 座在场而读不出改答 `unreadable`(此前 `not_reported`;`store` 缺席仍 `not_reported`)。各判据口(`fileHistoryCaptureMode` 等)对 `unreadable` 与 `unobserved` 同答「不知道」;唯一分开答的是 `rewindSpecForMode('both', …, reading)` 的 `restoreFiles` 键:没观测 ⇒ 照发(不替引擎断言,与此前同),读不出 ⇒ 不发(与「读不懂」同臂,收紧方向;此前读不出被当成没观测 ⇒ 照发)。🔴 硬破坏三句:① 对这 29 只读数型写穷举 `switch` + `never` 的宿主编译红一次,补 `unreadable` 一臂(三端 origin/main 零命中);② 按 `reading.kind === 'unobserved'` 分支的宿主,「落地在手而读不出」那一形此后走另一臂 —— 收紧方向的判定(「判不出就拒」)要把 `unreadable` 一并算进「判不出」,或改调本包的判定口(接入文档 §124y 点名读点);③ 用 `project*Capability(caps) ?? { kind: 'unobserved' }` 自铸读数的宿主,回体在手时可改铸 `{ kind: 'unreadable' }`。29 只读数型:`ApprovalDecidedByReading` / `ApprovalsStreamLiveReading` / `AttachmentSeatReading` / `CallerCwdReading` / `CenterWiringReading` / `DeviceExecutorManagementReading` / `ExecutionLaneReading` / `FileHistoryCaptureReading` / `McpProbeReading` / `MemoryComplianceReading` / `MemoryOriginReading` / `OutputStyleSeatReading` / `PeerLaneReading` / `PermissionModesReading` / `PermissionRulesWriteReading` / `PermissionsAllowGrantReading` / `RewindArchiveReading` / `SealedKeyReading` / `SessionPolicyReading` / `SessionReadRedactionReading` / `SessionSyncFileHistoryReading` / `SkillToolListsReading` / `SqlEngineReading` / `SteerPriorityReading` / `StorePostureReading` / `UserInvokedSkillsReading` / `WebSearchBackendReading` / `WorkflowsJournalReading` / `WriteProtectionReading`。
93
+ - **文件历史收紧闸的拒句按成因分三句**(CC-704 ①;接入文档 **§124 CP-2**;行为变,判定词闭集 `FILE_HISTORY_TIGHTEN_VERDICTS` 不变):`fileHistoryUnjudgedRefusal` / `judgeFileHistoryTighten` 在 `unjudged` 时此前一句通吃(「Try again in a moment」),对「读到了而读不出 / 引擎没报 / 不认识的词」也叫用户稍后再发,而再发永远是同一个结局。现在按读数选句:还没读到(`unobserved`,或手里没有用得上的读数)⇒ 稍后再发;落地在手而这一位读不出(`unreadable`)⇒ 本端读不了,照这样报再发不会变;引擎没报 / 不认识的词 ⇒ 引擎没说,再发不会变。三句都说「没发出去」与同一条出路(打开文件检查点,这一次照常记录)。重探照旧每次 `unjudged` 起一发(请求数不变)。按句子文本分支的宿主(不该有)会读到三句。
94
+ - **能力回体的可落地判据只剩一只:首探与刷新都只收普通记录**(CC-704 ②;接入文档 **§124 CP-3**;行为变,型面零变):总缓存的首探此前收任何非 `null` 对象(数组 / 类实例 / `Date` / `Map` / 读描述符就抛的代理照落),重探刷新只收普通记录 —— 同一只回体两条路两个结局(首探落下的类实例,读器还读得出值;刷新拒同一只)。现在唯一的落地写点先过同一只判据:非普通记录 ⇒ 不落地,与探测失败同一处置(不缓存、下一次 kick 再来;读器 `unobserved`、`engineCapState` 答 `unprobed`)。线上回体恒是 JSON 对象,三端的探测闭包都原样交回 sdk 的回体 ⇒ 零行为差;只有宿主自造非普通对象当回体时看得到差别。子代尾随 / 子代终报的包内读口在没有身份键时探的那一发回体同样过这一只判据(非普通记录 ⇒ 不认,与有身份键时同答;此前类实例 / 数组 / `Map` 回体照读出能力位)。
95
+ - **后台视图不再自探能力位;「assistant 面挂没挂」只看路由自己的 501**(CC-705;接入文档 **§124 CP-4**;行为变,型面零变):`createBackgroundView(client)` 此前首轮自调 `client.capabilities()`、读 `approvals` 位存进视图私有一格(不随 `invalidateEngineCaps` 换代),当「面没挂」的第二个答者。支持底线服务端(7.125.0)上 `approvals` 为假时 `/v1/assistant/*` 先于任何帧答 501 `capability.checkpoint_store_required`(同一只谓词铸),视图既有的 501 ⇒ `not-configured` 臂已覆盖。现在视图零能力请求,assistant 源与 fleet 源同一只判官、同一个先后(501 ⇒ `not-configured`、401 ⇒ `unauthorized`、其余 ⇒ `unavailable`)。行为差只在边角:面未配时 assistant 腿这一轮恰好瞬断 / 5xx ⇒ `unavailable`(此前若能力已探到假则 `not-configured`;下一轮 501 回来即改正);面未配 ∧ 凭据被拒 ⇒ `unauthorized`(与 fleet 源同判);支持底线以下、面未配时路由答 404 的服务端 ⇒ `unavailable`。
96
+ - **One reading for "does the engine accept this rule tool name" (CC-688 / CC-689).** The session-rule deliverability check (`sessionPolicyDeliverable`), the refused-entry removal (`removeRefusedSessionRules`), the sub-agent tool-list pre-check (`agentToolListFlaws` / `projectAgentsForWire`) and the request-body assembly (`permissionsDeclaration` / `permissionsDeclarationReport`) now all ask the engine's own tool-name check — the `judgeRuleToolName` value port, read through `ruleToolNameVerdictOf` — and nothing else; the build-time retired-name table and the hand-written four-name successor table are gone. What changes for a caller: (a) the deliverability check asks it for every name that survives the plain-text steps, not only for protocol names — an ordinary name the installed engine has retired since this package was built is withheld as `legacy_tool_name` (with the engine's `currentName`), and when the check is not installed or cannot answer, a deny batch with such a name is unreadable (it was answered from the build-time table); (b) the request-body assembly rewrites a retired tool name to the current name the engine gives in the deny and ask buckets — now also `KillBash`, `bash`, `read_file`, … (reported in `rewritten[]`) — and keeps every retired name in the allow bucket as `retired_tool_name` (`Task` / `KillShell` / `AgentOutputTool` / `BashOutputTool` in allow were rewritten and granted before); a retired name the engine gives no current name for, and a retired tool part of a content-form rule, stay kept as before; (c) the sub-agent tool-list pre-check judges case twins only against a supplied roster (without one it compared against the current names from the retired-name table), and no longer passes an entry it cannot check: an entry the engine's check calls `unmintable_segment`, or cannot answer for, is reported (see Added) and, with `withholdRefusedDenyLists`, holds back that agent's definition like any other deny-list problem.
97
+ - **云配置里被丢弃的 MCP 服务器条目现在有告示句(CC-693)**:此前 `projectEffectiveBody` 的 `droppedMcpServers` 只在投影读数里,用户只看到那台服务器的工具不见了。现在给人看的句子并进云配置唯一的措辞出口 `cloudEffectiveNotices(projection)`(其入参型多一个必填键 `droppedMcpServers`,`projectEffectiveBody` 的产物本就带它;公面导出名零增删):有条目被丢弃时,每个出现的成因一句并点名那几条 —— 缺必需设置、传输本端不支持、同时设了 `principalHeader` 与 `assertionHeader`、超过传给引擎的条数上限(32)为 `warn`;面板里关掉的为 `info`;成因词表外与读不出的行并入一句兜底 `warn`(不猜成因),清单本身读不出一句 `warn`;键不在或清单为空不出句。名单封 5 个(`+N more`)、同名只点一次、读不出名字的行计数;次序「降级告警 → 目录引用 → 被丢弃条目 → 预算 → 能力上限」。终端的开机横幅与状态命令都经这一只函数,换钉即显示(零改码)。
98
+
99
+ ### Fixed
100
+
101
+ - **影子 models 文档:与 `models.default` 同指一个模型的 `roles.default` 不再被判 `shadowed`,它自己的旁键原样保留**(CC-702;接入文档 **§124 WR-2**;只在老控制面〔仍发 settings-schema 10 形 `default` 键〕的回体上可达):修前判据是整只对象 `JSON.stringify` 全等 —— 同指一个模型、却多一个旁键(`effort` 一类;不在 settings-schema 12.2.1 的 `RoleTarget` 契约里:契约只有 `{model}` 与 `{select:{tier,needs,prefer}}` 两形,别的键本机读法一律剥掉)的 `roles.default` 被记一条 `shadowed`、整只丢掉,旁键无痕消失,用户还读到「该角色被缺省模型设置盖住」(两位指向同一个模型,这句话说不通)。现在判据只比模型指向(`model` 位,精确字节):同指 ⇒ 没有被盖住的东西,这一位原样带上(与 11 形 `roles.default` 的原样过境同一条读法;`{default:b, roles:{default:{model:b, effort:…}}}` 与 `{roles:{default:{model:b, effort:…}}}` 两代回体产出逐字节同);指向不同(含 `select` 形 / 无 `model` 位 / 非对象)⇒ 照旧整只记 `shadowed`,旁键不挪给胜出的那一位。与上游一次性迁移 SS-M9「同名 ⇒ 不算被压过」同判据(差分格对迁移收据核过);带旁键的影子文档经本机读法会报一条 `unknown-keys-dropped`(整域不降级;服务端候选门把这类告警当整树拒收的理由——未知键一律是候选门错误,与 11 形回体里同样带旁键的角色、与其它 role 的旁键同律)。
102
+ - **回体根读不出时能力位读器同答未观测(CC-690;**§124 CL-2**;行为修正)**:探测交回的回体根读不出(陷阱会抛的代理)时,`observedSqlEngine` 此前答 `{ kind: 'not_reported' }`(「读到了能力表、没报 SQL」),同族其余读器答未观测。现在这一形(非普通记录)过不了可落地判据、不落地(CP-3),全部能力位读器答 `unobserved`;可落地判据过了而快照途中根读不出的落地记作 `unreadable`,读器族不投影、答 `unreadable`(CP-1 同词);线上 JSON 回体到不了这一形。
103
+ - **座位入站判官的键读法与载体种类收口(CC-703;接入文档 §124 OD-1;行为面收紧,成文改口)**:`checkSendMessageRequest` / `checkSessionRowPatchRequest` 与它们里面的三只嵌套闭形(`rewind` / `settings` / `retainSubagentSessions`)原先用 `Object.keys` 枚举键、用 `isObject` 判载体 —— 不可枚举的自有键(哪怕值是坏的、哪怕是表外键)不进循环,门对它零判(`{ sessionId, pinned: true }` 上挂一个不可枚举的自有 `title: 5` 返回 `true`);`Date` / `Map` / `Set` 挂上自有位也过门,而结构化克隆对内建对象只带内建的那部分,门读到的与送出去的不是同一份。现在键只有一条读法(`Reflect.ownKeys` 的串键,每键经座位门既有的唯一取值口读过一遍:不可枚举的自有键拒并点名那一键,放什么值都一样),载体只有一条判法(`isPlainRecord`:原型是 `Object.prototype` 或 `null`;`Date` / `Map` / `Set` / 类实例 / 自定义原型的载体拒),取值落在 `null` 原型的袋里(`Object.prototype` 上被污染的同名键不会被读成这一位);符号键照旧不算载荷键。公面导出名 / 型 / 常量零变;三端 origin/main 上这两只判官零调用点(桌面端 `sendMessage` 入口自写入站门),真部署零影响。成文改口:接入文档 §123a PB-4 / §123c G-PB1 里「不可枚举位 / 只在原型链上的位不算带了」与座位入站判官「自定义原型的载体过门」两句,以本条为准(门 `seat-session-patch` PS8 / `seat-carriers` C8)。
104
+ - **决断拒收判官的机读位只读自有数据位(CC-706;接入文档 §124 OD-2;行为面收紧,成文改口)**:`decisionRefusalAskReading`(及它派生的 `isAlreadyResolvedFailure`、`classifyDecisionRefusal().standing`、包内中断撤卡判定口)读失败对象上的 `unreadable` 标记 / `kind` / `code` / `safetyCode` / `name` / `errorCode` / `status` / `reason` 原先按普通取值 —— 一只自有访问器 `name` 回 `AskDecidedError`、或原型链上放一个 `errorCode: 'conflict.ask_decided'` / `status: 410`,就能把一发未决的拒收读成 `settled`(取值器被执行),而同一判官读 404 成因位早已按自有数据位,同一只判官两条读法。现在这几位与 404 成因位同一条读法:自有数据位 ⇒ 值;只在原型链上 ⇒ 缺席(没有这条证据);自有访问器 / 代理陷阱抛 ⇒ `unreadable`,这些位的取值器一次都不执行。判官的另两种入参形 —— 活卡结局便签(`readToolApprovalRespondRefusal` 的 `status` / `errorCode`)与决断腿拍平结局(`errorCode` 经机读码三态读口 `readWireErrorCodeReading` / 铸口 `readWireCodes`)—— 是铸点从抛出物上读来的,铸点同样只认自有数据位:否则抛出物原型链里的 `errorCode: 'conflict.ask_decided'` 被洗成便签 / 拍平结局上的自有数据位再喂判官,判官的读法就形同虚设(门 `decision-refusal-standing` HJ10 端到端过真耐久决断腿)。sdk 真错误类实例的 `name` / `errorCode` / `status` 本就是实例自有数据位(构造里赋值;唯一的原型取值器是 `extra`,仍经 `readThrownExtra` 读),所以真 sdk 错误上读数逐位同修前(门 `decision-refusal-standing` HJ9 把这一前提钉在 sdk 真实例的描述符读数上)。公面导出名 / 型零变;失败文字的转换 `String(失败对象)` 与 `retriable` 位的读法不变(它们从不出 `settled`);404 成因位经 `extra` 的读法(沿原型链,因 sdk 的 `extra` 是类上的取值器)不在本条射程,见接入文档 §124 包侧缺口 ③。成文改口:此前门里「原型上的访问器(sdk 错误类形)照读」一格由「原型取值器不是证据」取代。
105
+ - **真 wire 上门种 `human` / `irreversible_ask` + 名单外工具(WebFetch、MCP 工具、Monitor 等)的停驻帧,流内不出审批卡**(CC-696;接入文档 **§124 HT-2**):停驻帧归哪条审批臂此前由门种词 `tool_approval`(wire 上不出现)∪ fs 写名 ∪ Bash 名判,真 wire 的审批门种对名单外工具答「不是停驻」—— 流内不出卡,run 停在门上等下一条消息的自愈腿。现在门种读「门种 → 耐久决断腿」同一张表(`durableDecideLegOf`):门种归审批腿 ⇒ 问答工具进问答臂、其余任意工具进工具审批臂(卡形由端的卡口按工具名分发);门种读不出 ⇒ 按名字族(与修前名字腿逐字同);计划门 / 其余门种 / 闭集之外的词 / 读门种就抛 ⇒ 两臂都不进。wire 上不可达的形随之收紧:门种位 `tool_approval`、计划门 + fs 写名、非门种词 + `AskUserQuestion` 此前进臂,现在不进。工具审批腿取件的回落腿(停驻的调用身份缺席或在待决表里没命中时按工具挑行)随之按停驻门自己的工具挑:门的工具属 fs 写 / shell 族 ⇒ 两族(与修前同);族外工具 ⇒ 只认同名行,不拿同 task 先排着的 fs 写 / Bash 行顶替;`surfaceFsApprovalAndDecide` 多一个可选第六参 `parkToolName`(不传 = 修前行为)。`isToolApprovalGate` 签名不变,答法随之变。已知限制 KL-591 第 ② 处(「停驻能否在流上被认出看门本体名」)随之销 —— 调用方工具以名字表里的名字作别名时(如 `MyShell` 别名 `Bash`)停驻照样出卡。门:durable-decide-leg DL6(门种表逐格 / 真 wire 形端到端 / 同词旧形不进臂)· permission-denial-projection O5(真引擎 Runner 读数)。
106
+ - `removeRefusedSessionRules` removes entries whose server or peer segment the engine never mints (`mcp__srv__`, `mcp__`, `mcp__github.com__x`, a segment with a space, …): engines from 7.48.0 refuse to start a run over them, and the removal answered `nothing_to_remove` before. (CC-688)
107
+ - **错误分型口对读不出的字段不再外抛**(CC-698):`classifyTurnWireError` / `isWireTransportError` 的头注一直写「纯判定,永不抛」,但抛出物上的 `status` / `errorCode` / `message` / `cause` / `name` 任何一格是读就抛的取值器(或已撤销的代理),或把整只对象转成字符串的钩子抛(含无原型对象),异常都会原样外抛 —— 而这两个口通常正是在 `catch` 里被调用的,异常会替换原抛出物。修后五格各自受保护、恰读一次;**读不出是显式一态**(不是异常,也不折成缺席):`status` 读不出 ⇒ 无从排除「引擎答过了」⇒ 不判 `http`、也不判 `transport`(`isWireTransportError` 答 `false`),也不认领 park 信号(park 的「流断在候人决断、不是故障」同样预设引擎没应答),落 `internal`;其余格读不出 ⇒ 当没带(`errorCode` 键缺席、`message` 退到 `String(err)`、`cause` 不算在场、`name` 不进 park 臂),别的格不连坐;`String(err)` 本身抛 ⇒ `message` / `detail` 落固定句 `the call failed with an error this client could not render`;`internal.name` 在 `name` 读不出时取 `typeof` 标签。http 臂的码相关附加位(`storedRowWhere` / `sessionUnreadable` / `leaseUnavailable`)从同一份 `errorCode` 快照出发、不再另读一遍(读不出就是读不出,不会被随后又读成功的一次读重新认领)。两个口的传输判据收成同一只判官(此前各写一遍)。同族三只读口读同样几格,同形收口:`isPreStreamDrainingReject` 读不出 ⇒ `false`;`drainingRetryDelayMs` 的 `retryAfterMs` 读不出 ⇒ 当缺席走退避梯;`resumeRetryLaterFromError` 的 `errorCode` 读不出 ⇒ `null`。普通形(含 `null` / 原始值 / Error 实例)的答案与 0.96.0 逐一相同。接入文档 §124。
108
+ - **展示封长不再劈开遮盖记号**(CC-707):按长度截断已洗过的文本时(`displayUntrusted({ max })` / `displayUntrustedMarks` / `capForDisplay` / `cutForDisplay`〔`noticePrintLine` 的句界截断〕/ 点名坏轮句 `toolHistoryBadTurnSentence` 的前 60 码点预览 / 审批决断备注 `readDecisionNoteAudit` 的 200 码元尾截),截点落进一枚遮盖记号 `«redacted:…»` 内部,屏上会留下 `«reda` 这种既不是记号也不是字的残片。修后记号当原子:截点落进记号内部 ⇒ 退到记号之前(整枚去,不劈),记号恰好放得下 ⇒ 整枚留;只认完整闭形(`«redacted»` / `«redacted:词»` / `«redacted:词:词»`,词为 1 – 16 个小写字母或连字符),未闭合 / 夹空格 / 超长词不是记号、照旧可截。射程:修前的残片里没有任何值(**无秘密外露**),被劈开的是「这里被遮过」的标志本身,按记号闭形识别遮盖的读者认不出残片。「结果恒 ≤ `max`」的承诺不变(避让可能让结果更短,与代理对 / 转义 token 的避让同)。`noticePrintLine` 的 8000 字防御栏在洗法里预截断的余量同步改为按封长最大退让量派生(修前固定余量 2,记号整枚退让后会让超栏文本静默变短且不带截断记号)。接入文档 §124。
109
+ - **影子 models 文档:所有 `{model: 串}` 形角色过同一只受理闸;没有注入 `entryAccepted` 时这一形角色不投、各记一行 `unvouched`,不再因点名一条本机引擎会剔掉的条目而拖整个 models 域落默认**(CC-708;接入文档 **§124 RO-1**;行为变,只对没有注入 `entryAccepted` 的调用方):修前 `cloudModelsToDoc` / `projectEffectiveBody` 没有判定口时,`roles` 按目录名字判 —— 点名一条本机引擎会剔掉的条目(例:`provider: "anthropic"` 却没配 `api: "anthropic-messages"`)的角色原样写进影子文档,本机读法随后整域落默认(实测 `domain-defaulted`、目录 0 条,整份云端目录消失),所有角色(含 11 形 `roles.default`)一视同仁地受害;而同一个缺省模型在 10 形回体里(`default` 键)没有判定口时是不投的(也不记)—— 同一件事两条相反的读法。现在 `{model: 串}` 形引用(11 形 `roles.*`、10 形 `default` 投成的 `roles.default`)只走一只受理闸:读不出 / 不在目录 ⇒ 剔并记账(`unreadable` / `dangling`,名字就判得出,用不着判定口);在目录且注入的判定口收 ⇒ 带上;注入的判定口拒 ⇒ 只丢点名它的角色并记 `rejected`(点名好条目的角色留);在目录而没有判定口可担保 ⇒ 不投,**每个没投的角色记一行 `unvouched`**(点名角色键与模型名;缺的是判定口,不是角色或条目有错 —— 目录健康也一样,因为包不知道哪条会被本机引擎剔掉;缺席不等于没发生,读 `modelRefIssues` 的宿主要看得见「这些角色因为没给判定口而没投」)。10 形 `default` 此前没有判定口时连悬空也不记,现在与 11 形一致(`default` 胜出而没投 ⇒ 一行 `unvouched`,被它盖住的同位 `roles.default` 同指不双记、异指记 `shadowed`)。`{select}` 形不指向目录条目,照投。两代回体(10 形 `default` ⇄ 11 形 `roles.default`)没有判定口时也产出逐字节同的影子文档与问题账。注入 `entryAccepted` 的宿主读数零变。旁键 / 畸形角色目标仍原样过境(由本机读法自己说话),不在本条范围。
110
+ - **fleet 台账:task 帧与快照帧同一条尾段规则,前代读数忽略**(CC-700;接入文档 **§124 FL-8 / FL-9**;行为修正,公面导出名与型零变;0.96.0 起既有):同一后台任务的行读数(裸 id 与 `<runId> <id>` 复合 id 共享尾段)此前两臂各判 —— task 帧臂按到达序入账,同尾段还有在飞别名时到的终态行照进留存池(两行并存;随后同代 completed 终态通知把在飞那条退休,展示面一条 failed 一条 completed);两臂的入账口都不比周期:迟到的前代 running 帧复活行并撤掉新一代的终态证据,同代 completed 通知随即把 failed 洗成 completed,同 id 的前代终态帧把新一代在飞行结掉。现在规则只在唯一入账口一处:周期早于这一尾段已知最高周期的读数忽略(快照的整体替换也不抽走这一尾段原有的在飞行);更新一代的读数让更早一代的别名离场;同代或判不出先后时在飞胜;否则终态结算尾段、双生收敛成一条 —— 同一组读数经两臂、任意到达序同答(快照仍是整体替换:快照里没有的行按已离场处理,与此前同)。前代通知(按同一只尾段判官)整段不动状态面:不退休在飞行、不改写留存条目、不入事实台账,在飞行自己的最新一帧没报周期时也一样(此前照退休,过窗即从在飞读面消失);尾段周期的有界记录不再挤掉仍有在飞行 / 留存条目的尾段。0.96.0 本条目「同尾段双生行收敛成一条」只对快照臂成立,勘误见 §124z。
111
+ - **已答 / 已收口的审批不再在别的路上再开一张卡:「审批已有结局」在一个进程里只记一处**(CC-632 / CC-710;接入文档 **§124 RP-1 / RP-4 / RP-5**,勘误 **§124z** 回指 §122d FX 行;行为修正,型面零变):修前它是每只桥自己的台账,换桥(新 turn)/ 悬挂 ask 腿 / 宿主自己的问车道都看不见;公开持有口 `joinApprovalHolder` 在活卡持有者放手之后恒答 `free`(与同一进程里帧腿台账记着的 `answered` 相反)—— 宿主问车道据此为已答的问再开一张耐久卡、再发一次耐久决断(续流实测;壳认领闸先吞掉重复帧、或续流上只来 `approval_request` 两形宿主补记也接不住)。现在:写点只两处(活卡持有者落定那一拍 —— 答复送达并拿到语义答复 / 中断拒绝被引擎收下;引擎收口帧,带转停驻位),帧腿判定口第 0 条、活卡入口(流内帧腿与悬挂 ask 腿共用)、`joinApprovalHolder`、包内停驻行腿都读这一处:持有者放手之后 `joinApprovalHolder` 对已结的问答 `joined`(转停驻仍答 `free`,停驻那一问照常要停驻卡);活卡入口对已结的问零卡零发、交回那一只结局 + `joinedInFlight`。答复回 404 / 宿主撤卡 / 编辑被拒仍不记(KL-745)。🔴 成文改口:「中断拒绝落定后同键再来 = 新决断(第二张卡)」作废 —— 中断拒绝被收下的问在本进程已结;`interrupted` 的写点从「发起」挪到「被收下」(发送失败 / 202 停驻中 ⇒ 不记,放手后照常再呈卡)。
112
+ - **抛出物的 `extra` 与其余机读位同一条读法:对象自有的数据位照读,不是自有位时只认 sdk 错误类的类形(CC-709;接入文档 §124 EX-1;行为面收紧,成文改口)**:`extra`(404 成因 `cause`、写口 / 撤销口 `committed`、续跑折叠 `blockedBy`、拒体 `field` 与各体源结构位都经它到达)此前沿原型链普通取值 —— `Object.create({ extra: { cause: 'run_cancelled' } })` 加自有 `status: 404` 就被 `decisionRefusalAskReading` 读成 `settled`(`isAlreadyResolvedFailure` 为真、`classifyDecisionRefusal().standing` 为 `settled-elsewhere`、中断撤卡不出告警),原型上别家类的取值器与对象自有的访问器也被执行。现在:对象自有的数据位 ⇒ 读;对象自有的访问器 ⇒ 读不出(不执行);不是自有位 ⇒ 原型链上最近持有 `extra` 的节点自己是某个类的原型、链上有内建 `Error` 类的原型(按结构认,不按本 realm 的 `Error.prototype` 恒等,也不读持有者类的名字 —— 生产包压缩后 sdk 的类名会被改写)、那一位是取值器(sdk 错误类的类形)⇒ 按对象自己的取值读,即 sdk 在 `toApiError` 给这一只对象盖的章;其余(链上的数据位、别家类的取值器、`Object.prototype` 上的植入、同名而不继承内建 `Error` 的类 —— 含宿主自造的 `class Error {}` 及其子类)⇒ 缺席;「内建 `Error`」按内建真实性认(构造函数是引擎内建的 `Error`、原型带内建三位),不只按名字。跨 sdk 模块实例、跨 realm 照读(宿主或测试里同时有两份 sdk、或 sdk 错误铸在另一个 realm 时不丢;把取值转发给原对象的代理包装同样读得出)—— 否则 503 `committed: 'unknown'` 会落成缺席、撤销腿放宽成可重发。伪造面:任何继承**内建** `Error` 的类在原型上放一只 `extra` 取值器都会被执行 —— 与在对象上直接放自有数据位 `extra` 同权,不多给读数。同族四处并到同一读法:安全停码只认实例自有数据位 `code`(决断腿把它铸成拍平结局的 `safetyCode` / `code`;修前原型链上的 `code: 'no_pending'` 被洗成自有位、判官读拍平结局答 `settled`)、拒体 `retriable` 只认自有数据位(自有访问器修前在判官里被执行,现在读数 `unreadable`)、409 分码 `conflict` 的 `errorCode` / `name` / `field` 只认自有数据位(修前同一只分类结果里 `errorCode` 缺席而 `conflict` 在场);失败文字的转换只出续读提示、从不出 `settled`(读法不变)。sdk 真实例与自有数据位的重建形读数逐位同修前(门对冻结的旧读法逐形对拍);公面导出名 / 型零变。
113
+ - **「码自己说清了处置」先于「已决」:可等 / 拒在认领之前 / 卡仍待决的续跑拒绝不再经失败文字读成门已决(CC-712;接入文档 §124 EX-2;行为面收紧,公面谓词答案变)**:`isAlreadyResolvedFailure`(停驻解析的「门已决」判据,端的重开挂点也读它)对**没有状态码**的失败形 —— 决断腿拍平结局、无状态码的抛出物 —— 只要机读码不被判官认领,就去扫失败文字的「门早已决」词表;`resume.preflight_rejected`(带等待窗时明说可等)、`resume.usage_window_exhausted`、`resume.placement_mismatch`、续跑 reopen 族带 `retriable: true`(卡仍待决)这几码判官都不认,失败文字恰含 already / not found 就答真,端据此撤卡,而同一对象 `resumeRefusalFromError` / `resumeRetryLaterFromError` / `resumeReopenFromError` 说的是「仍待决 / 稍后可重试」。现在「码自己说清了处置」只有一只谓词 `isCodeClassifiedGateFailure`,成员加上续跑拒绝的两张码表本身(`RESUME_RETRY_LATER_CODES` ∪ `RESUME_REFUSAL_CODES`),`isGateStandingErrorCode` 加上 reopen 族 ∧ `retriable: true`;`decisionRefusalAskReading` 把这一判挪到一切「已决」证据之前(码说清了处置 ⇒ 未决,不看状态码、不扫文字)。「已决」只剩终局证据:本地 `no_pending`、`conflict.ask_decided`、`gone.ask`、410(非 `gone.ask_parked`)、404 ∧ 结束成因、码缺席时 `AskDecidedError`;无码无状态码的老形照旧扫词续读。公面导出名 / 型零变;`isCodeClassifiedGateFailure` 对上面三码、`isGateStandingErrorCode` 对 reopen 族 ∧ `retriable: true` 从 `false` 改答 `true`;门还在的码(如 `corrupt`)遇到 410 / 404 结束成因这类自相矛盾的回体时,修前读作已决,现在读作未决。
114
+ - **影子 models 文档:注入 `entryAccepted` 时 `tierGroups` / `activeTierGroup` 读不出不再让整个调用外抛**(CC-719;接入文档 **§124 RO-2**;行为修正,公面导出名与型零变):models 文档在这两位上读描述符就抛(代理陷阱)或取值器抛时,`projectEffectiveBody` / `cloudModelsToDoc` 此前整个外抛(`tierGroups` 取值器抛时连不注入也外抛)。现在两位只在注入判定口时读、各读一次;读不出 ⇒ 该位不投,`modelRefIssues` 记 `{ key, at: 'models', reason: 'unreadable', outcome: 'dropped' }`(与整份文档读不出的另两行同一形)并各出一句 `warn`,别的位照常。JSON 回体上不可达。
115
+ - **请求装配口:入参上不可枚举的已知键不再被当成缺席**(接入文档 **§124 PK-9**;行为修正,型面零变):装配口此前只收入参上可枚举的键,一个以 `Object.defineProperty` 挂上的 `allowTools: []` 被读成「不选择」(这一次运行挂上全部工具)、`allowTools: 'bad'` 绕过坏形拒。现在装配口认识的顶层键自有即在场、不看可枚举:不可枚举的数据位照读(`[]` 照发、坏形照拒),不可枚举的访问器与可枚举的同一读序、同一拍物化;不认识的键仍只看可枚举(宿主框架挂的不可枚举标记位不当表外键拒)。
116
+ - **决断拒收判官在压缩过的消费端包里认得出码缺席的重建形**(接入文档 **§124 OD-2**;行为修正,公面导出名与型零变;0.96.0 起既有):码被剥掉、只带 `name` 的跨包重建形此前按 sdk 类的 `.name` 比 —— 消费端生产包经压缩器改写类名后,`{ name: 'AskDecidedError' }` 读成未决(`ApprovalStaleError` 的「门已挪走」、`ParkedResumeStartupError` 的「未决」同失)。现在按字面协议名比(`AskDecidedError` / `ApprovalStaleError` / `ParkedResumeStartupError`),压缩与否同答;真 sdk 错误带 `errorCode`、走码臂,读数不变。
117
+
118
+ ### Gates
119
+
120
+ - 新门 1 道(包侧投影门三件:门 / gates-manifest 登记 / README Guards 行):`run-server-7126-pick-test.mjs`(I 幂等 409 三腿一判 · C 卡词读口与两腿上卡 · D 终局详情四臂 · G 门种表转口引用相等 · T 编排四键退役与 `allowTools` · M 候选被拒三态 · F 服务端 7.126.0 发布字节)。
121
+ - 支持底线 / 地板换代按新律改格:support-floor-projection SF1f / SF1g / CT1a · sdk-floor `FLOOR` + ②d-6 地板线见证 · gate-negative-controls sdk-floor 锚(21.1.0 → 21.1.1)· server-7122-pick F0 与地板线见证取法(同 major 且不低于地板)· server-7125-pick P0 · server-7119-fixture ≥7.126.0 档(评审团腿文件不在)· server-7114-fixture H2(拒体 detail 多 `reason`)· server-7124-pick V 段(样本读者抬到 7.126.0)· hook-matcher-verdict 新档 ≥7.126.0 / 7.125.x(服务端 7.126.0 起编不过 / 求值超过时限的正则 matcher 整请求拒,登记 `rej-form`;文档逐代表换到 §124 G-PK8)· engine-account-keys-projection F6(`coded` 臂补承重位)· 会话 id 只收 uuid 的三只夹具腿(disable-skills-wire / request-uplift / server-7115-fixture)。
122
+ - 改名表退役(RL-123)同批改口:gate-vocabulary M1 / M1b / M4 / M8 / M9 / M10 · upstream-tables A3 / G19-3 – G19-5 · automatic-answer-verdict A5b · mode-release-projection D1c · print-permission-outcome R0c · engine-notice-catalog G11d / G11e · durable-card-display-keys ⑯ · hitl-gate-honesty F17m。
123
+ - 团队编排四键退役(RL-134)与门种表转口(RL-135)同批改口:task-request-omission-receipt · disable-skills-wire G-DS7(语料去四键,摘要用 0.89.0 发布产物重取、本树逐字节同)· client-core-pure B4 / B7 / F6 · server-7119-fixture Z1b · durable-decide-leg DL1 / DL1b / DL5 · selfheal-reopen G2⓪ / G8①e · sdk-wire-transit 值级 / 型级名单 · approval-frame-keys(镜像 +`approvalCard`)· durable-card-display-keys ⑦ · terminal-cause-projection G-PR4(表外种类改读 `unrecognized`)/ G-BD7e(与上一发布产物对拍的登记类)。
124
+ - **gate-vocabulary**:M4 改口 ——「两代同一事实的两个词也各一句」作废,改为本表只一代、现役六词逐字互异;M10 改口 —— 改名表模块不在(源码与构建产物)、句表键 == 强制词闭集、句口函数体里零折名调用(本版早先「退役词读成现名那一句」的格随改名表退役收回)。**upstream-tables** A3 两格改口(句表键型 = 现役词、字面量自己 `satisfies`;成员集取冻结词表、不再取句表的键)。**cloud-effective-projection**:+S8a 一对(同指带旁键的两代回体逐字节同)与 S8a2⑥b – ⑥p(同指带旁键不丢 / 不出盖住句 / 整条投影同读数 / 差分对迁移收据 / 本机读法读回恰一条 `unknown-keys-dropped` / 写出的是数据副本、不与入参共享引用;反钉:指向不同与 `select` 形 / 非对象仍 `shadowed`、非 default 角色旁键过境、精确字节比较;设计反钉:11 形 `roles.default` 不加第二道受理闸,与其它 role 同属原样过境)。
125
+ - 新门 1 道(包侧投影门三件:门 / gates-manifest 登记 / README Guards 行):
126
+ - `run-engine-caps-landing-projection-test.mjs`:整份能力位读数三态(未落地各成因 / 快照深冻结且宿主改写看不见 / 根读不出)· 缺键极性(规格字面:按键读口的读数 = 门内规格判官作用在整份读数上,多地址 × 多键)· 能力位读器从整份读数派生(`not_landed` ⇒ `unobserved`、`unreadable` ⇒ `unreadable`)· 轮换口三态与时序(落地后轮换 ⇒ 重探调新闭包、旧闭包零次,经包内重探口与文件检查点收紧闸各一格;普通 kick 不改登记的对照;在飞首探 / 在飞刷新 / 同步重入 / 连续轮换 / 失效两形)· KL-753 已删行。
127
+ - 新门 2 道(包侧投影门三件:门 / gates-manifest 登记 / README Guards 行):
128
+ - `run-cloud-mcp-dropped-notice-test.mjs`:🆕 0.97.0 CC-693 —— 被丢弃的 MCP 条目告示句:五成因各恰一句并点名(真 `cloudMcpToSpecs` 产出五成因各一行)、`disabled` 为 `info` 其余 `warn`、句子零内部成因词、次序钉在降级告警与预算之间、名单封顶与去重、成因词表外 / 坏行(`null` · 字符串 · reason 非串 · 取值器抛 · `constructor` · `__proto__`)兜底不连坐、清单读不出一句 `warn` / 键不在与空清单不出句,产物声明里成因联合恰五词、句子表声明在该联合上。
129
+ - `run-tool-card-outcome-test.mjs`:🆕 0.97.0 CC-697 —— 工具结果卡结局读口:真管线产物(转录 user 行与 `-p` 帧)上八形矩阵(有正文成功 / 失败 / 空串 / 无 output 成功 / 无 output 失败 / `notExecuted` 三形)读数、收扫卡与「无 output 的真 tool_end」卡读数逐字同、两车道同答;读不出矩阵(入参十形、占位位访问器 / 代理 / 原型链 / 非包常量值、`notExecuted` 非字面 true 六形与访问器、`is_error` 读就抛、已撤销代理)不抛且不读成 `normal`;四句互不相同零内部名、`no-result` 不说运行停了;源码(词法器剥注释)句子表绑成因联合、`notExecuted` 经既有严格真标记读口、占位常量不重写字面,产物里四句各恰一处铸点。
130
+ - **cloud-effective-projection**:🆕 CC-708 S8k 20 格 —— 没有判定口时 `{model}` 形角色不投并各记一行 `unvouched`、同一份经本机读法读回整域不落默认;告示句一格;注入判定口时一好一坏角色的反钉(好的留、坏的恰一条 `rejected`);两代回体(10 形 `default` ⇄ 11 形 `roles.default`)没有判定口时也逐字节同(文档与问题账各五对);悬空 / 空名角色照旧剔并记账、在目录里的不投并各记 `unvouched`;万能格 144 种(坏 / 健康目录 × 有 / 无判定口 × `default` × `subagent` × 六种位态)逐格精确比对影子文档的 `roles` 与问题账、本机读法零次整域作废;10 形 `default` 与 `roles.default` 同在 24 种;健康目录 + 没有判定口的取舍钉;S5k′ / S8a2⑥k 两格改口(修前:没有判定口时 `roles.default → a` 原样写出 / 「按目录名字判,已知射程:整域落默认」)。
131
+ - **fleet-terminal-retain**:+R 段 50 格(CC-700):两臂 × 全部到达序同答(8 组)· 逐形时序(前代 running / 前代终态 / 新一代终态顶替别名 / 通知与行帧同一条周期轴 / 前代通知不退休最新一帧没报周期的在飞行 / 快照前代读数保住在飞行、同尾段带当代读数时照常替换)· 并发(有界尾段记录在 520 条别的尾段压力下保住有行尾段的周期)· 失败分类(坏形周期位按缺席、尾段为空串)。**panel-reduce**:PR-C3 周期源尺子跟着账本换名(尾段账 `.gen` 读、`raiseTailGen` / `isFormerGeneration` 形参)+ 尺子自检格 PR-C3′ⁱ。
132
+ - 新门 1 道(包侧投影门三件:门 / gates-manifest 登记 / README Guards 行):`run-approval-settled-single-source-test.mjs`(19 格:宿主问车道读同一处 / 转停驻负控 / 悬挂 ask 腿写读同一处 / 换桥 / 判定口单一读法 / 不记的三形与写在答复落定那一拍 / 中断拒绝只在被收下时记(404 / 同步抛 / 202 / 转停驻先到四形不记)/ 有界 4096);**approval-respond-parking** G-PK8b 成文改口(停驻体读口在持有者体里两处:答复 + 中断拒绝落定)。**hitl-wave2** G-HW2-1t / G-HW2-6d 成文改口(落定后同键再来 ⇒ 已结、零卡零发);**replayed-approval-disposition** RS0 / RS1 / RS3 / RS4c / RC3 种子改走真写路径(活卡答复送达 / 卡被中止 / 收口帧),RS1d 改钉「交入的映射不读」;复用固定 approvalId 的门经 `_gate-lib.mjs` 的 `freshSettledApprovalsPerCardPort`(每装一次卡口 = 新宿主进程)或逐格清表。
133
+ - **decision-refusal-standing**:+HJ11 段(CC-709):前提格钉 sdk 真实例的描述符读数(`extra` 不是实例自有位、最近持有者是 `APIError.prototype` 的取值器、继承 `Error`;类名不是判据输入;`retriable` 是实例自有数据位)· 类名改写与真压缩包(esbuild minify,sdk 与本包同一 bundle)两枚钉· 原型链伪造各形(数据位 / 别家取值器 / 自有访问器 / 中间插层 / 覆写取值器的子类 / 代理 / `Object.prototype` 植入的数据位与取值器 / `Error.prototype` 植入的取值器 / 同名不继承 `Error` 的负控)四个出口都不是 `settled` 且取值器零执行 · 跨 sdk 模块实例正控与伪造面成文格 · 与冻结旧读法 23 形逐形对拍 · 同族四处(安全停码含耐久决断腿端到端、`retriable`、409 分码、失败文字)· 源码名册。**server-7124-pick** XR8b / XR8c 改口(键名字面量只在常量声明一处、那只常量只在逐层读自有描述符一处引用)。**resume-refusal-copy / rules-legacy-tool-name-projection / server-7119-fixture / workflow-decide-refusal / wire-refusal-copy / resume-retry-later** 各 +2 格(另一份 sdk 模块实例铸的错误读得出 / 同名不继承 `Error` 的类读不到);成文改口:这几道门与 **client-core-pure**、**refusal-machine-reads** 里用对象自有的 `get extra()` 或自造类「模拟」sdk 错误的夹具改用 sdk 的 `toApiError` 铸(读口不再执行自有访问器),原本靠展开取值器得到的自有数据位形改写成显式的自有数据位;13.1.0 手搭形的类名照原样叫 `APIError`。
134
+ - **decision-refusal-standing**:+HJ12 段(CC-712):无状态码的可等预检拒四形(拍平结局 / 抛出物 × 窗在头 / 在体)不是已决 · 同表别码与 reopen 族(带 / 不带 `retriable`)· 码先于状态码 · 公面码认领谓词逐员 · 生成池 2160 形对拍(「仍待决 / 可等 / 拒在认领之前」五只读口任一认得 ⇒ 判官不答已决、停驻解析不续读)· 终局拒收正控 · 耐久决断腿端到端 · 源码名册(码认领在第一条「已决」证据之前、恰一处);HJ5 全形对拍的独立期望成文改口(`corrupt` 遇 410 / 404 结束成因读作未决)。
135
+ - 本版修复批改格:**cloud-effective-projection** +S10 段(CC-719:models 文档 `tierGroups` / `activeTierGroup` 读抛不外抛,两种入参 × 验收读数原形 / 取值器抛 / 一位读不出不连坐 / 取值器恰跑一次 / 告示句)· **server-7126-pick** +T8 段(不可枚举的已知键:`allowTools` 数据位 `[]` / 坏形 / 访问器 / 数据阶段物化、`excludeAllTools`、不可枚举表外键负控、可枚举与不可枚举逐值同答)与 +D7 段(终局失败详情三臂在另一 realm 解析的同一份 JSON 上逐值同答,类实例两 realm 照拒)· **decision-refusal-standing** HJ11a +3 形(祖先是同名自造 `Error` 类)、HJ11h 源码名册改口(内建 `Error` 按内建真实性认)、HJ11c +压缩包里码缺席的重建形三名与 sdk 类名同值格、+HJ13 段(续跑 / 停驻 / 分型读口的机读位与判官同一条读法:票面两形、生成池、分型四格、真 sdk 实例正控)· **client-core-pure** F3E-cc698r / cc698s / cc698s2 改口(`errorCode` 自有访问器读不出、不执行)· **additive-key-passthrough** G7 段:`toolAxes` 由记账不透传改为透传(G7g 两腿在透传集、G7g″ 两传输 × 九值形同一引用过境、G7h 与服务端 7.126.0 中心腿投影逐值同答)· **engine-caps-single-source** +G-SB2b / G-SB2c(无键一发路过同一只可落地判据)与 **engine-cap-snapshot-readers** G-CR45 两格 / G-CR51b 改口(无地址一发路与有地址同答;判据调用点恰两处、各在其位)· **server-7113-fixture** B 段按代际分向(<7.113.0 / 7.113.0 – 7.125.x / ≥7.126.0 有身份边界与 dev-open 两向)。
136
+
137
+ ### Known limits(本版新增)
138
+
139
+ - KL-758:fleet 台账同一尾段、同一周期(或判不出先后)的两条双生终态行终态词不同(如 failed + completed)时末到者胜 —— 尾段规则顺序无关性的唯一例外,两臂同答(CC-700;§124 FL-8)。服务端一个周期只封一个终态,真引擎未见此形;真 wire 一旦出现即改成「终态词冲突 ⇒ 记冲突、不洗账」。
140
+
141
+ ## 0.96.0(2026-10-13)
142
+
143
+ > 主题:终端 1.0.148 对接版 —— 支持底线三件同号(server 7.125.0 / core 7.48.0 / sdk 20.0.0)与 settings-schema 12 提货;清账与单一真源收口(规则工具名判官 / 门种一张表 / 计划审阅结局判法 / 总缓存落地写点 / hooks matcher 契约读法 / 文件历史没搬句与收紧闸 / 探针两位判序 / 凭据网三形);座位改名置顶与最近目录;服务商拒收分类词。净值(相对 0.95.0):根入口运行期导出 1587 → 1629(+55 / −13),测试钩 73 → 59,门清单 232 → 256,退役登记在册 31 / 已退役 62。提货 —— server 7.125.0(CC-636)/ sdk 20.0.x(CC-633)/ settings-schema 12.2.1(CC-655);影子 models 文档改出 settings-schema 11 形(CC-637);404 成因读法与座位门 / 能力位读器成文例外收口(CC-638 / CC-639);`CONFIG_REFUSAL_CODES` 退役(CC-560 ②)。
144
+
145
+ ### Removed
146
+
147
+ - **根入口删除名 `CONFIG_REFUSAL_CODES`**(CC-560 ②;接入文档 **§123 FA-2** / §2z;🔴 型面 BREAKING,三端 `src` 零命中):配置拒绝码的冻结 20 员登记表退役。它包内零读点、三端零读点,且与前缀谓词 `isConfigRefusalCode` 回答同一问(这是不是一条配置拒绝)却对近形(大小写 / 尾空白 / 少一段点)答案不同 —— 两条读法。「是不是配置拒绝」只剩 `isConfigRefusalCode`(`config.` 前缀,开集)这一条读法;各 `CONFIG_*` 码常量、出路句口与工具声明门九码的族读口不动。0.94.0 / 0.95.0 段里对该表的描述(「识别表」「订正名分」)以本条为准。根公面运行期导出 1587 → 1586。
148
+ - **`recordBgTerminalFacts`(0.96.0 退出公面) 退出根入口**(CC-348;退役登记 RL-104;接入文档 **§123 RT-1** / §2z;🔴 型面 BREAKING,根入口运行期导出 −1,三端代码零调用):通知终局事实(「最近一条被收下的后台通知说了什么」)的写者只该是 fleet 账本收通知那一臂 —— 包内照用同一只函数,三端没有写者(终端只在一个文件的头注里提到这个名字,网页端 / 桌面端 / 管理台零命中)。读口 `getBgTerminalFacts` 与型 `BgTerminalFacts` 不动,历史事实与行的当前终态的边界(§122 SC-7)不变。按名 import 它的端编译红一次(三端实际无需改)。根公面运行期导出 1592 → 1591。
149
+ - **23 个三端零读点的过渡口退出根入口:9 只 `noteEngineCapsFor*` 与 14 只 `__reset*ReadingsForTests`**(CC-344 余项;退役登记 RL-121 / RL-122,分别由 RL-113 / RL-114 拆出;接入文档 **§123 RT-6 / RT-7** / §2z;🔴 型面 BREAKING,根入口运行期导出 −9、测试钩 −14):tee 口 9 只 = `noteEngineCapsForCallerCwd`(0.96.0 退出公面) / `noteEngineCapsForStorePosture`(0.96.0 退出公面) / `noteEngineCapsForSessionReadRedaction`(0.96.0 退出公面) / `noteEngineCapsForSealedKey`(0.96.0 退出公面) / `noteEngineCapsForPermissionModes`(0.96.0 退出公面) / `noteEngineCapsForMemoryOrigin`(0.96.0 退出公面) / `noteEngineCapsForMemoryCompliance`(0.96.0 退出公面) / `noteEngineCapsForMcpProbe`(0.96.0 退出公面) / `noteEngineCapsForCenterWiring`(0.96.0 退出公面);测试钩 14 只 = `__reset<X>ReadingsForTests`,X 取 CallerCwd / UserInvokedSkills / StorePosture / SteerPriority / SkillToolLists / SessionSyncFileHistory / SessionReadRedaction / SealedKey / PermissionModes / OutputStyleSeat / MemoryOrigin / MemoryCompliance / McpProbe / CenterWiring。它们 0.95.0 起就是空调用 / 只清读器自己的记忆表,三端 origin/main 逐名扫描零代码读点(终端 `sema/engineGateSyncAllow.test.ts:2666` 里的 `noteEngineCapsForPermissionModes`(0.96.0 退出公面) 是一条断言「不含此名」的正则,不是调用),所以不再留一版。按名 import 它们的端编译红一次(三端实际无需改);要清读数改调 `__resetEngineCapsCacheForTests`。其余 20 只 tee 口与 15 只测试钩三端读点仍在,见下 `### Deprecated`。根公面运行期导出 1591 → 1582,测试钩 73 → 59。
150
+ - **根入口删除名 `discussionWorkflowName`;端口名 `DISCUSSION_WORKFLOW_NAME` 同退**(CC-606;接入文档 **§123 PC-4** / §2z;🔴 型面 BREAKING):引擎 7.49.0 删了讨论工作流整族(包根不再导出这一名,`Workflow({ name: "discussion" })` 不再解析),端口没有可装的原件 —— `CORE_VALUE_PORT_NAMES` 十七 → 十六件,`CoreValuePorts` 少这一成员;装配根照旧带这一键装 ⇒ 无人读。终端 `/discuss` 与装配根各有一处读 / 装,随终端换钉引擎 7.49 同批删。
151
+ - **座位设置态 `SettingsState` 退役缺省模型位 `defaultModel`**(CC-572;退役登记 RL-125;接入文档 **§123 S2-1**;🔴 型面 BREAKING):部署的缺省模型此前有两个座位位、两条读法 —— 座位 `listModels()` 交的在线目录上的 `defaultModel`(服务端的答案,读法 `liveDefaultModelOf`),与宿主往 `settingsState` 里另存的一份串(桌面端填的是 `/health.model`,形与取值时点都与前者不同)。现在缺省模型只经 `liveDefaultModelOf(listModels() 的结果)` 读,`SettingsState` 只剩 `engineVersion?` / `dataRoot?`;宿主往 `settingsState` 发布 `defaultModel` 键(任何值、含 `undefined`)⇒ 出站门拒,拒因点名「读在线目录」。🔴 硬破坏三句:① 带 `defaultModel` 键的 `SettingsState` 字面量与读 `state.defaultModel` 的端编译红;② 宿主不改仍发该键 ⇒ 座位出站门运行期拒、整只态不过门;③ 要渲缺省模型就读 `liveDefaultModelOf(目录)`:`listed` ⇒ 行名 / `not_listed` ⇒ 服务端给的 id / `unknown` ⇒ 不渲缺省名(不要把 `null` 或占位当答案)。顺带收紧:`settingsState` 出站门此前把数组当对象放行(所有位可选,空数组恰好全缺席),现只收普通对象(数组、`Date` / `Map` 等内建对象拒:结构化克隆会丢挂在它们上面的自有位)。
152
+ - **影子 models 文档不再写 settings-schema 10 一代的键(`default` / `atModelAllowlist`);问题账的键名与闭集随之收口**(CC-637;退役登记 RL-94;接入文档 **§123 PB-5 – PB-8** / §123y;🔴 型面 BREAKING〔闭集读数值〕,公面导出名零变):`cloudModelsToDoc` / `projectEffectiveBody(…).modelsDoc` 现在只出 11 一代的形 —— 缺省模型 = `roles.default`、@ 提及 = `atMention`(`only` 带名单、`none` 照写、`all` 与缺席同义不写)。11 一代读法里 `default` / `atModelAllowlist` 是退役键墓碑(在场即拒),此前靠本机引擎启动时的一次性迁移才读得通;现在文档本身就是它的读法。`CloudModelRefIssue.key` 由 `'models' | 'default' | 'roles' | 'atModelAllowlist' | 'tierGroups' | 'activeTierGroup'` 收成 `'models' | 'roles' | 'atMention' | 'tierGroups' | 'activeTierGroup'`(缺省模型的痕挂 `roles` · `at:'default'`、@ 提及的痕挂 `atMention`);`reason` 闭集 +`'shadowed'`;`outcome:'kept'` 只剩 `models` 键一形。对 `key === 'default'` / `'atModelAllowlist'` 做分支的宿主此后走不到那一臂(三端 origin/main 零命中:终端只按 `key === 'models'` 读),对象字面量或 `switch` 穷举这些联合的宿主编译红一次。KL-54 与 KL-665 两行已知限制随之删行(id 不复用)。
153
+ - **随支持底线越过而删的四条过渡读法(退役登记 RL-42 / RL-43 / RL-44 / RL-110 / RL-111;接入文档 **§123 PA-10**;型面零变)**:① 引擎 7.42.0 退役的规则 lint 码 `invalid.allow_param_rule` / `unsupported.bash_prefix` / `unsupported.file_glob` 不再有自己的一句 —— 这三码今天到达与任何不认识的码同落兜底句(说出码与引擎那一句);② 410 `gone.ask` 体上只认 `cause` 键,≤7.123.x 的旧体键 `deniedReason` 不再读(成因缺席、终态照读);404 `tool_approval.not_pending` 的旧词 `voided` / `denied` 不再算「这一问已结束」;③ 决断口 409 `approval_binding_mismatch` + `field:"answer"`(≤7.123.x 的答案席旧形)不再归 `answer_invalid`,与绑定码族里归不了类的形同答、照铸安全停。支持底线之内的服务端 / 引擎都不发这几形。
154
+ - **根入口删除名 `retiredToolNames`;端口名 `RETIRED_TOOL_NAMES` 同退**(CC-629;退役登记 RL-126;接入文档 **§123 PT-2** / §2z;🔴 型面 BREAKING):「规则里的工具名够不够得着任何工具」改由引擎判官 `judgeRuleToolName` 一只答(见 Added),退役名表这一件唯一的读点(请求体装配口退役名那一腿)改读判官后零读点 —— `CORE_VALUE_PORT_NAMES` 十六件里换一件(−`RETIRED_TOOL_NAMES` +`judgeRuleToolName`),`CoreValuePorts` 少这一成员;装配根照旧带这一键装 ⇒ 无人读。🔴 硬破坏三句:① 按完整型 `CoreValuePorts` 建袋的装配根多带 `RETIRED_TOOL_NAMES` ⇒ 编译红(与同版删 `DISCUSSION_WORKFLOW_NAME` 同一只对象字面量),读 `retiredToolNames()` 的端编译红;② 运行期:JS 宿主照旧装这一键 ⇒ 无人读,不抛;③ 删掉这一键与它的导入,读口自检改读 `ruleToolNameJudgement('read_file', new Set())`。
155
+ - **`HookMatcherVerdict` 受理臂退役 `names` 键**(CC-636 ④ / CC-434 ③;接入文档 **§123 SS-6** / §123y;🔴 型面 BREAKING,三端 `src` 零读点):那份名单是本包自带的名字表切分的产物 —— hooks matcher 的读法从本版起只剩设置契约那一只(`hookMatcherSelects` / `hookMatcherForm`,它不交名单),受理臂只剩 `kind` / `reading` / `aliases`(JS 宿主读 `verdict.names` 今天得 `undefined`;要名字改调契约 `hookMatcherSelects(matcher, name)` 逐名问)。要名字的宿主直接调设置契约的读法,不在端上另切一份。
156
+ - **≤7.124.x 服务端「无 `status` 的 409 冲突体」两只读臂退役:载体规则里 `status` 缺席又无 `terminal` 的 `done.result` 当载体那一支 + 重放臂折叠口 `foldReplayBusyFrame`**(CC-685;退役登记 RL-128,与支持底线抬升同版执行;接入文档 **§123 RA-1 / RA-2**;型面零变:两件都不在根入口,公面名与签名不动):支持底线抬到服务端 7.125.0 之后,幂等重放臂把原始 409 冲突体(无 `status`)逐字放进 `done.result` 的形只剩 ≤7.124.x 才发(7.125.0 起拒收与冲突终帧一律带 `status: 'failed'`)。折叠口(0.96.0 CC-631 立、同版退役,没有发出过)与载体规则里的那一支删除;`status` 缺席且自带 `terminal` 位的引擎结果形(因由形)仍是载体。行为变只在 ≤7.124.x:这一形的冲突体经公面判别口 `activeRunBusySignal` 答 `null`(0.95.0 答非 null)、终局行落 `Outcome unknown` 一行、结果帧带 `_sema_outcome: 'unknown'`;包内判据 `frameProvesDelivery` 对它读 `true`(KL-754)。门 `run-replay-busy-row-projection-test` 改名为 `run-active-run-busy-read-projection-test`,重放臂各格删,单一读法 / 因由形 / 源码钉留下。
157
+
158
+ ### Added
159
+
160
+ - **座位 chrome 词表 +2 词(CC-645,additive)**:`CHROME_EVENT_KINDS` 由四词(`panel_task` / `notification_terminal` / `prompt_suggestions` / `subagent_lifecycle`)增为六词,新增 `text_segment_end` / `thinking_segment_end` —— 引擎明报的段权威全文(脱敏 / 改写)的唯一载体。修前座位出站门(`checkSeatChromeEnvelope`)拒这两词,按词表转发 chrome 事件的宿主转不出它们,座位 lane 上的活体文本永远收不到权威替换。公面导出名零变;`ChromeEventKind` 联合 +2 字面量(对它做穷举 `switch` / `Record<ChromeEventKind, …>` 的宿主编译红一次),且改为绑在 `ChromeEvent` 自己的判别键上(`Extract<ChromeArmKind, …>`):座位词表里写一个 `ChromeEvent` 没有的词、或 `ChromeEvent` 删 / 改名一个座位词,编译当场红(修前那两条 `Covers` 钉比较的是元组自身派生的类型,恒真)。宿主若按 `CHROME_EVENT_KINDS.includes(event.kind)` 转发,升级后这两种事件自动开始过境 —— 渲染层要有消费它们的臂。
161
+ - **座位请求过境 `rememberRefused`(CC-642,additive)**:`ToolPermissionRequest` / `TOOL_PERMISSION_REQUEST_KEYS` +`rememberRefused?: true`(服务端 ≥7.116.0 成文位:这张卡上「本会话放行」记不住);`toolPermissionRequestAskBits(card)` 带这一位,与卡口两条腿(活卡帧 / 耐久待决行)同一只读口 `readApprovalRememberRefused`(自有键 ∧ 严格 `true` 才上座;缺席 = 服务端没说,不是 `false`;读就抛 ⇒ 缺席)。修前座位卡在这类卡上照渲「Always allow (this session)」(兑付不了的钮)。座位出站门不校这一位(同其余展示增强位,覆盖表豁免)。
162
+ - **服务商拒绝的分类词 `PROVIDER_REJECTION_KINDS` 与型 `ProviderRejectionKind`**(CC-549;接入文档 **§123 WD-1**;根入口运行期导出 +1):冻结五词 `schema_invalid` / `auth` / `rate_limited` / `resend_eligible` / `unknown`。合成终局行上的 `_sema_provider_rejection_resend` 多一位 `kind`(`{ resend, text, kind }`)。分类函数不上根入口(端读行上的键;0.95.0 退出根入口的自由函数同理由)。
163
+ - **`CAPABILITY_IMAGE_INDEX_REQUIRED`**(CC-584;**§123 WD-4**;根入口运行期导出 +1):`'capability.image_index_required'`,单机(文件后端)引擎对沙箱镜像池恒答的 501 码,与同族 `CAPABILITY_*` 码常量同居 `engineErrorCodes`。
164
+ - **`modelSetupDecision` 可选第三参 `hostCanConfigureRoute`;`ModelSetupDecision` 多两词 `offer_route_setup` / `explain_route_unconfigurable`**(CC-579;**§123 WD-6**;型面联合加员:对该联合做 `switch` + `never` 穷举的宿主编译红一次)。第三参与 `hostCanConfigureModel` 同形(布尔),缺席 = 不知道。
165
+ - **`APPROVAL_PARKING_WARN_TEXT` 上根入口**(CC-577;**§123 HW-2**):停驻中那一句基句 `This approval is being parked; answer it again on the parked card when it appears.` —— 活卡 respond 回 `202 parking_in_progress` 且引擎没给 `retryAfterMs` 时通知的全文。此前是包内件(0.93.1 G-PK8e 钉着不上根),自己拼停驻告知的宿主(走回落腿的、直调 respond 的)只能留逐字副本;现在读这一只常量,副本随之退役。带句尾的 `approvalParkingNoticeText` 与通知铸口 `surfaceApprovalParking` 仍是内部件。根入口 +1 名。
166
+ - **放行披露的用户面句口 `modeReleaseReasonSentence(reason)` 与「按调用只说一次」的已说过账 `createReleaseDisclosureLedger()`**(CC-440 ② ③;**§123 HW-3 / HW-4**):放行原因词(`GateModeReleaseView.reason` / 判定口姿态车道的 `releaseReason`)此前只有词、没有句,每个读它的宿主各自翻译。句口:闭集词各一句(`rule_unreadable` 规则读不出、`target_unresolved` 写入落点读不出〔引擎 7.49.0 现名;老引擎仍发的旧词 `write_protection_unresolved` 经改名表读成同一句,两代读法见 PC-3〕),表外词(引擎比本包新)走通用句且**不回显该词**,缺席 / 非串 / 空串 ⇒ `undefined`(不渲);两处来路(放行账、判定口)同词同句。已说过账:`has(identity)` 只读、`mark(identity)` 单调写 —— **宿主在那一行真的上了屏 / 进了转录之后才 `mark`**;身份 = `toolCallId`(按会话代 `epoch` 限域)→ 回落 `callKey` → 都缺席恒「没说过」(照说);有界先进先出 256、不续命;坏形身份(访问器不跑 / 原型链 / 抛错代理)当缺席;每本账一份实例、无模块级状态。根入口 +2 名;型 `ReleaseDisclosureIdentity` / `ReleaseDisclosureLedger`。
167
+ - **`replayedApprovalClosesCardFrame(disposition)`**(CC-440 ④;**§123 HW-5**):回交给宿主的重放处置里,哪一种该让同一只问的 `approval_request` 卡帧按「已收口」去重 —— 唯一答 `true` 的是崩溃收敛行(`decided` 且带闭集成因词,与 `replayedApprovalSentence` 读同一张成因表);无成因的 `decided`(接到清单请求的副本内存里没有,跨副本恢复口要留)、带 `settled` 的、`live` / `unknown`、成因表外与一切坏形一律 `false`(不收口 = 卡仍可见)。此前这条判据只写在回交口注释里、端各自抄一行。`unknown` 臂的时间线句早已是 `replayedApprovalSentence`(0.95.0),端自铸的句子换读它即可。根入口 +1 名。
168
+ - **后台子代身份判定三端共用一只谓词(CC-643)**:根入口 +8 名 —— `isBackgroundSubagentRow(row)`(这一行是不是一只后台子代)· `isBackgroundWorkRow(row)`(横幅 / 问询卡「N 个后台任务 / 子代」那一格:后台子代,外加后台 bash / 监视器句柄)· `isOwnBackgroundSubagentRow(row, own)`(再加归属:会话流只顶替「归属」那一半,不顶替「行种类」)· `liveBgRowOwnership()` / `liveBgRowOwnershipFor(sessionKey)`(现读归属读数,一批行判一次)· 句柄契约 `DURABLE_AGENT_HANDLE_RE`(与 `@sema-agent/core` 包根同名的持久 agent 句柄正则,构建期从已装引擎生成,不是手抄)/ `isAgentHandle(rowId)` / `nonAgentHandleKind(rowId)`;型 `BgSubagentRowFacts` / `BgRowOwnership` / `NonAgentHandleKind`。规则按求值序:行无 id ⇒ 否;复合 id 或 `sourceLane === "run-leg"`(前台委派行)⇒ 否;非 agent 句柄(后台 bash / 监视器)⇒ 否;有父的单段行 ⇒ 是;无父只认 agent 族句柄(持久 agent 句柄,或 `wa` + 16 位 hex)。背景:fleet 在飞读面交的是全部非终态行,server ≥ 7.125.0 带 `?session=` 的会话流还会带回该会话的 run 行与它的前台(转发)子代行,「是不是后台子代」此前由终端壳自写一份,现归包。非 agent 句柄的前缀字母不手写:`scripts/gen-upstream-tables.mjs` 新增第十四批,对引擎任务登记簿逐任务型实铸一次读出前缀,进生成物 `CORE_TASK_HANDLE_PREFIXES`(不上根入口)。入参读不出时的缺席语义逐键见接入文档 §123b。
169
+ - **在飞读面行 `EngineActiveBgTask` 新增可选键 `sourceLane`(CC-643)**:wire 行上有非空串 ⇒ 原样带出;缺席 / 空串 / 非串 ⇒ 整键缺席(不编默认车道)。task 帧与 snapshot 两路入账的读面行形同一,通知退休行同样带。`readEngineActiveBgTasks` 交的是全部非终态 task 行、不分种类(server ≥ 7.125.0 的会话流含该会话的 run 行与前台委派行)—— 这一条写在源码 TSDoc 与接入文档 §123a FL-7(dist 的 `.d.ts` 构建期去注释,文字落点是接入文档)。
170
+ - **`decisionRefusalAskReading(failure)` 与型 `DecisionRefusalAskReading`**(CC-602;接入文档 **§123 HJ-1**;根入口运行期导出 +1):「一发被拒的决断,所问的那一问是否已决」的唯一读数,三态 `settled` / `not_settled` / `unreadable`。入参是决断口抛出的错误对象、活卡结局的 `respondRefusal` 便签或决断腿的拍平结局。`settled` 只从肯定证据来:本地 `no_pending`、409 `conflict.ask_decided`、`gone.ask` 或 `gone.ask_parked` 以外的 410、404 体上的「已结束」成因词、码被剥掉时 sdk `AskDecidedError` 类名;`NotFoundError` 类名、无成因词的 404、只说明「你看的那张已不是当前的」四码、`gone.ask_parked`(流内问已转成停驻卡、仍在等)、失败文字里像「已决」的词都不是证据。决断拒收分类、中断撤卡的告警判定与 `isAlreadyResolvedFailure` 都从这一只读数派生。
171
+ - **配置地址展示口 `displayConfiguredUrl(url, opts?)` 与上传判据 `queryCarriesCredential(query)`**(CC-288;接入文档 **§123 DC-1 / DC-2**;根入口运行期导出 +2):两只口同读一只 query 值判官 —— 键名是凭据标签,或值是已知前缀 / 高熵形,或值里嵌着凭据结构(嵌套地址的 userinfo、`标签=值`、方案词 + 值、嵌套能力地址,含百分号编码层与 `+` 作空格)⇒ 带凭据。展示口与 `displayUntrusted` 同一条管线(选项同义),只有 query 值按这只判官遮:`?tenant=acme` / `?region=us-east-1` 原样,只靠 query 区分的多租户端点分得开;`deployment` / `name` / `tenant` 等非秘密语义键下的可读词链(`my-gpt4-deployment-eastus2-prod01`)上屏;没有 `://` 的 scheme 写法(`https:/h/…`)按解析器组件重建后再遮。上传判据只判不改 = 展示口按不放宽的口径扫这条 query 会不会动它的字节(显示放的可读词链上传判有;展示口会遮的 —— 含两层编码的标签键、键名本身是凭据形 —— 一律判有);非串入参 ⇒ `false`。
172
+ - **通告呈现事实(CC-462;接入文档 **§123 NT-1 – NT-5**;根入口运行期导出 +9)**:三端共用的「这句通告说给谁听 / 有没有用户能做的事 / 是不是同一次发生 / 截在哪」从终端壳收进包,端只留座位装配。`cutForDisplay(text, budget, { boundary?, mark? })`:句界截断原语(句界 → 子句 → 词界 → 字符,每级保住至少一半可用长度;记号计入预算;代理对与 `\uXXXX` 转义 token 不劈,与 `displayUntrusted({ max })` 同一只封长;预算不是有限数 ⇒ 不截)。`noticePresentationFacts(notice, deployment?)`:`audience` 三态(码册内读生成表,册外 / 非串 ⇒ `unknown`)· `outlet`(`detail.remedy` 自有数据位非空串才 `present`,否则 `unknown`;`absent` 要等 core 码册机读新列,今天不铸)· `remedy` 原样 · `occurrence`(表内七码且身份键读得出 ⇒ `{ kind: 'occurrence', key }`,其余 `{ kind: 'event' }`)· `seatClass`。座位类表 `NOTICE_SEAT_CLASS` / `noticeSeatClassOf`(常驻+提示 / 常驻 / 瞬时 / 诊断;座位位置仍归各端)。出路可达判官 `outletReachable` / `planOutletRendering` / `OUTLET_KINDS`(七种出路 × 六位部署事实,读不出一律 `unknown`,`unknown` 不断言)。`noticePrintLine`:`-p` stderr 行 `[sema] <整句> [<码>]` 的唯一铸点(码名在行尾方括号;预算按受众 1000 / 160,截在句界,全文去处只在有会话转录时附,没有载体不截,单行,凭据面同一只洗法)与 `NOTICE_FULL_TEXT_CAP`(8000)。新型 15 个。`capDisplay` 由私有改为包内导出(不上根入口)。
173
+ - **`-p` 权限结局行 `printPermissionOutcomeOf`(CC-485;接入文档 **§123 NT-6**;根入口运行期导出 +2:另有 `PRINT_PERMISSION_OUTCOME_FORMS`)**:只读引擎的结局(`gateOutcomeOf(tool_end)` 的视图),三形一张句表 —— 模式拒(`dontAsk` 一句点名模式并带 allow 规则出路;`bypassPermissions` 说它判不出写落点是否受保护;模式词缺席 / 表外 ⇒ 通用句,不回显该词)· 无人可问(「这条车道没有审批通道」,**不再断言模式**)· 模式放行(放行原因句,与 `modeReleaseReasonSentence` 同一只铸点)。其余结局 / 门记录缺席 / 坏记录 ⇒ `undefined`。受众恒 `user`,出路由铸句方声明,座位类读 `NOTICE_SEAT_CLASS` 同一格。终端壳按「旗 + 壳本地视角」两源读模式、`--permission-mode dontAsk` 的拒句写成「under the default permission mode」的读法,换读后由本口取代。
174
+ - **重试状态多两位:`providerCondition` / `providerConditionSource`**(CC-606;**§123 PC-6**;additive):引擎 7.49.0 在重试帧上说服务商对被重试那次应答的判词(今天可重试的 `throttled` / `overloaded` / `unknown`)与它凭的证据,两层投影此前都剥掉;现在原样到 `RetryStatus` 顶层(开集串,非空才在)。`error.rateLimits` 仍 `null`、`error` 上不加判别位 —— 额度判定不从重试帧派生。`BRAIN_STATUS_PAYLOAD_KEYS` 十一 → 十三。
175
+ - **`task.tool_turn_incomplete` 读数多一位 `outcome`**(CC-606;**§123 PC-7**;additive):引擎 7.49.1 在掉了调用的那一轮上说结局(`terminal` / `reissued`);缺席 = 没说结局或老引擎,不补词。
176
+ - **具名型 `RuleGrammarView`;端口 `ruleToolGrammarOf` 的返回型放宽到 `'command' | 'domain' | 'name' | 'path'`**(CC-606;**§123 PC-5**):引擎 7.43.0 起多答 `name`、7.49.0 起多答 `domain`,此前端口型只有两词,宿主装引擎原件要型断言;现在按完整型装零断言。
177
+ - **云模式执行体读口(CC-622,additive)**:根入口 +4 个函数、+11 个型。`projectEngineDirectory(body)`(`GET /api/v1/engines` 回体 → 行名册)· `projectMeEngine(body)`(`GET /api/v1/me/engine` 回体 → 读数)· `decideMeEngine(reading)`(candidates 判定:`connect` / `no-engine` / `choose` / `unresolved`)· `engineOverrideOf(set, requested)`(`--engine <name>` 只在名册内选:`select` / `not-listed` / `duplicate` / `row-unreadable` / `unreadable` / `invalid`)。读法:回体整个不成形 ⇒ `undefined`(读数作废,不冒充「零台」;`engines: []` / `candidates: []` 才是零台);读不出的行不连坐别的行并计入 `unreadableRows`;行上 `viaCenter` 只认同源相对路径(它会被拼在已登录中心的 origin 之后并带用户令牌发出,绝对 URL / 协议相对 / 含空白或控制符 / 查询与片段 / 点段〔含百分号编码形〕一律让整行读不出);`kind` / `posture` / `rule` 按开集读(表外词原文透传,不抛、不折成已知词);`online` 缺席不折 `false`;`target` 判不出 ≠ 没有(`null` 才是服务端明说没有目标,判不出不落成 `no-engine`);表外 `rule` + 无 `target` 既不说「没有引擎」也不说「歧义」;`connect` 不凭 `target` 单键放行(名册缺席、不含 `target`、与 `rule` 的计数不符都判 `unresolved`);读不出的行里名字仍读得出的算重名证据,`--engine` 对它们答 `duplicate` / `row-unreadable`;名册读不出时 `--engine` 不放行、不回落到名册外按名直连。传输留在端(经 `RegistryClient.request`),本件只读已取回的 JSON 体。接入文档 §123 CL 行。
178
+ - **座位「最近目录」:可缺动词 `listRecentFolders()` / `noteRecentFolder(path)`、能力位 `recents`、唯一读法 `recentFoldersOf` 与编排口 `readRecentFolders`**(CC-574;网页端 [9916] 第 10 条;接入文档 **§123 S2-2**;根入口运行期导出 +2;🔴 编译面:`LocalSessionsApi` +2 方法、`SeatCapabilityName` 联合 +1 字面量):0.94.0 桥整退后座位没有最近目录的位,渲染端只能自写「记录行 `cwd` 去重」,Recent 只列开过会话的目录。现在「最近目录」= 会话记录行的 `cwd`(有会话的目录,派生、宿主不登记)∪ 宿主登记行(用户选过、不一定开过会话的目录),读法只有 `recentFoldersOf` 一只:按路径原文字节去重,同一路径时刻取较晚者,说得出时刻的在前(登记行取 `lastUsedAt`,记录行取 `lastActivityAt` 再取 `createdAt`),平手登记行在前;`sessions` / `registered` 缺席 = 那一半没供给,两半都没供给 ⇒ `null`、供给了空数组 ⇒ `[]`(读到了、真的没有);读不懂的行跳过不连坐。`readRecentFolders` 把能力位三态与动词调用编排在一起:能力位不是 `reported ∧ available` ⇒ 不调动词(`host: "skipped"`),动词抛 / 回执读不成 / 回执非空而一行都读不懂 ⇒ `host: "unreadable"` 且记录行那一半照读(读不出不折成「真的没有」;部分行读不懂时好行照用、读数的 `unreadableRows` 如实数出)。两只动词的出站门逐行对账(信封与行只收普通对象;路径非空串、`lastUsedAt` 在场即串),`noteRecentFolder` 回执复用通用 `{ ok }` 回执(`false` = 宿主没收,不是错误);能力位 `recents` 管这一组动词(缺席 = 宿主没说,出站门闭集、读口三态、禁用句三句同 `pickFolder` 一律)。`pickFolder` 回执、记录行 `cwd` 与登记行路径三处的「非空串」判据收成包内一只(行为不变)。
179
+ - **v1 呈卡帧卡面 → 卡入参事实的投影口 `approvalCardFactsOfV1(card)`(CC-449;接入文档 **§123 CD-1**;根入口运行期导出 +1,型 `ApprovalCardV1Facts`)**:`approval_request` 帧的 `card`(经 sdk `isApprovalRequestFrameV1` 窄化后取)按活卡帧腿**同一批读器**投成卡入参事实,两面同名的每一位同在同缺、同值(门对正形与坏形逐键差分)。载体差两处:真人位读 `risk.requiresRealApproval`;作答通路是问决断口(只收 approve / deny)⇒ 规则候选落只读位 `ruleOffersReadOnly`、不盖 `allowSessionCarried`。入参被省略 / 缺席 / 非对象 ⇒ 回落形 + `argsUnavailable` + 说明句(与活卡帧腿同一只;卡上不再给「编辑后批准」)。子代徽章与出处链的判别同活卡帧腿(出处链只在子代卡上、形不合整只不上)。宿主位(`callKey` 经 `askGateQuestionId(askId)`、`signal`、窗三键与本地收帧锚点)由装配点补;入参不是对象 ⇒ `undefined`;一位读就抛只丢那一位;出参冻结。端侧逐键手写的 v1 卡投影可整段换成本口(§123y)。
180
+ - **卡上三行放行的单一判官 `standingRowsOf(card, host?)`(CC-482;**§123 CD-2**;根入口运行期导出 +1,型 `StandingRows` / `StandingRowsWhy` / `StandingRowWhy` / `StandingPersistentRow` / `StandingRowsHostFacts`)**:一次答「本会话放行」「以后别问」(`engine_offer` / `local_whole_tool` / `none`)「部署名单那一问的本会话放行」三行与逐行理由。三行都是放宽方向,一律闭合失败:卡读不出、引擎声明记不住(`rememberRefused`)、那一位在场而读不出 ⇒ 三行都不给(规则候选在场也不给);会话行要卡上的作答通路事实 `allowSessionCarried`;名单会话行另要问类每一员都是名单那一问;引擎候选(可兑位或只读位)⇒ `engine_offer`,候选键在场而读不出 ⇒ `none`;本地整工具行要无引擎候选、引擎没点名规则车道关门(`ruleOffersAbsence` 缺席)、入参可得、授予绑定读作 `none`、一条 allow 规则清得掉这一问(`automaticAnswerVerdict(card, 'standing_rule')` 答 `may_answer`),且宿主报卡面恰为通用面、这条整工具规则按当前发送快照会随请求发出。卡上 `unreadableEvidence` 含 `rememberRefused` ⇒ 三行都不给;其余非空 ⇒ 「以后别问」一行不给(坏形 / 原型链上的 / 读就抛的证据不会经投影洗成缺席)。永不抛,出参冻结。
181
+ - **卡入参 +3 可选位(CC-482;**§123 CD-3**;型 `ApprovalGrantBinding`)**:`allowSessionCarried?: true`(本包按腿铸卡时盖的作答通路事实:活卡帧腿与待决行腿盖,v1 投影口不盖;缺席 = 带不走,或不是本包铸的卡)· `grantBinding?: 'bound' | 'none' | 'unreadable'`(批准这张卡是否还授予这一次调用之外的东西:载体上的授予摘要与工具名按 sdk 契约句读,三条腿同一只读法、恒盖)· `unreadableEvidence?: readonly string[]`(载体上在场却读不出、因而没上卡的放宽相关证据键 —— 记不住位、治理 / 真人 / 强制位与强制词、出身词、规则车道缺席词与候选、让位证据、问类对;只在非空时盖)。三位追加在卡入参末尾,既有键序与值不变;干净载体上 `unreadableEvidence` 不出现。
182
+ - **报告口 `kept[]` 的编译器拒收行带编译器的码与句**(CC-578 ③;接入文档 **§123 RF-1**;additive):`PermissionsKeptRule` 多两只可选键 `code` / `message`,只在 `reason === 'compile_refused'` 的行上、且编译器对这一条答的那一位是非空串时在场 —— 与判「拒收」同一次调用交回(问的是归一 / 改写后的那一串、同一读法、同一根基),宿主不必再为了码与句去问第二次同一只编译器。别的理由的行恒无这两键;同串同桶重复的行照第一次的结局。`message` 原样(句中可能引用用户写的规则串),显示前经 `displayUntrusted`。
183
+ - **活卡结局便签 `respondRefusal` 带齐分类要读的机读位:`retriable` / `extra` / `unreadable`**(CC-578 ④;**§123 RF-2**;additive):拒体自有 `retriable` 严格为 `true` ⇒ `retriable: true`(读法与两条决断腿拍平结局的同名位同一只);拒体原样袋上的 404 成因词与 409 席位词 ⇒ `extra: { cause?, field? }`(与抛出物同一读法、非空串才带,只此两词);抛出物上「这一问是否已决」读不出 ⇒ `unreadable: true`。三位都 present-iff、绝不铸 `false`。修前便签只有状态码 / 码 / 句:同一次拒绝以抛出物形与便签形进 `classifyDecisionRefusal` / `decisionRefusalAskReading` / 收口门,答案可以不同 —— 可重试的拒收与 404 他副本在便签上不读作瞬时、已结束的 404 不读作已在别处结算、409 问答载荷席读成行完整性拒、读不出的 410 读成已决。只有这些位读得出、状态码 / 码 / 句都读不出时不铸便签(「至少一位可呈现」不变)。
184
+ - **安全停闭集 `GATE_FAILURE_CODES` / `HitlSafetyCode` 加员 `binding_missing`**(CC-578 ⑤;**§123 RF-3**;型面联合加员:对 `HitlSafetyCode` / `GateFailureCode` 做穷举 `switch` 或 `Record<…>` 的宿主编译红一次,三端 `src` 零命中):待决行缺 D-1 绑定位、本地拦下、一个字节都没发。行为变化见 `### Changed`。
185
+ - **场景拒绝的出句 `scenarioNotAllowedContent(detail, requestedScenario?, surface?)` 与型 `ScenarioDenySurface`**(CC-389,原 KL-44;接入文档 **§123 FS-1 / FS-2**;根入口运行期导出 +1、型 +1,公面 1603 → 1604):场景执法拒绝(400 `scenario_not_allowed`,或续跑腿折成 409 `resume_blocked_by_policy` 而原码是它)此前判型在包里(`scenarioDenyFromError`)、句子归各端 —— 终端一句,网页端另写一句(还另写了一遍 allowlist 过滤),决断出口(只带折叠码的结局)出不了带允许清单的专句。现在句子与允许清单渲染都在包里:`·` 分段「主语 · `Available: <清单>`(空表不渲)· 出路尾(`You can also omit the scenario to run on your default assignment`)」;缺省面(`'request'`)与终端现句在干净输入上逐字节同;`'resumed_work'` 面给续跑腿 / 决断出口用:主语换「The scenario this work resumes under」、不带出路尾(决断体里没有可省的场景位,说了是假出路);名字(请求的场景名与清单项)逐名转义控制字符 / 双向覆写等,**不封长**(场景名是标识符:无标记截短会把共享前缀的两个名字显示成同一个,用户复制屏上的名字重试会提交另一个名字;干净文本任意长度逐字节不变)。入参按不可信读(`detail` 不是对象 / `allowlist` 不是数组或含非串项 / 取值器抛 ⇒ 按空表退让,永不抛)。
186
+ - **决断失败结局的原码位 `blockedBy`**(CC-389;**§123 FS-3**;additive 可选键):审批 approve · deny 两条决断腿与提问卡决断腿的 `failed` 结局,在外层码 `errorCode` 是续跑腿折叠码(`resume_blocked_by_policy`)且体上 `blockedBy` 读成非空串时,多带折叠前的原码(例 `scenario_not_allowed`);`errorCode` 仍是外层码(两个位两个命名空间,不合并);缺席 · 空串 · 非串 · 取值器抛 · 别的外层码上的同名键 ⇒ 键不铸;按状态派生的粗码也原样带(只搬运不解释)。`blockedBy` 的读法收成唯一读口(续跑折叠读数 `resumePolicyBlockFromError` 与 `effectiveWireErrorCode` 同读它,三态不变;一处成文的收紧:顶层 `blockedBy` 在场却不是非空串〔非串 / 取值器抛〕而 `extra` 里有串时,修前 `effectiveWireErrorCode` 回落 `extra` 答原码,现在读成「读不出」、答折叠码本身 —— 真 sdk 错误上顶层没有这一位,只手搓的错误对象可触发)。
187
+ - **取件等待与本地规则解析的可选注入口 `onFailure(log)`**(CC-517 (c);**§123 FS-6**;additive 可选成员):`ParkRowBirthWaitDeps.onFailure?` 与 `LocalAllowRuleDeps.onFailure?` —— 这两只纯模块没有日志口,「原抛出物只进宿主日志」此前只做到了不上屏;现在抛出物的日志形(`String(e)` 截 300 字,含类名)交给它(每次抛出调一次);回调同步抛 / 返回被拒的 Promise ⇒ 经包内唯一的宿主回调隔离口留一行 debug 痕迹、不改判决、不产生未处理拒绝;宿主不给 ⇒ 与此前逐字节同。
188
+ - **调用级两个标记 `tool_start.recovered` / `tool_end.notExecuted` 过境(CC-654;接入文档 **§123 KY-1 / KY-2**;additive 超集键,根入口零新增名)**:引擎 7.49.0 起 `tool_start` 帧可带字面 `true` 的 `recovered`(引擎在**关闭**一只开始帧从未发出的调用时补铸的开始帧 —— 中断 run 的对账、续跑进程关闭死进程宣告过的调用;它不断言执行与否),`tool_end` 帧可带字面 `true` 的 `notExecuted`(引擎对「这只调用从未执行」有**正证据**:停批的兄弟、开始前被打断、对账关闭了一只这个 run 没起过的调用)。两层投影的白名单此前都把它们剥掉。现在:开始帧的 assistant 信封多超集键 `_sema_tool_recovered: true`(交互转录与 `-p` 帧同一个键);收口帧的内部 `tool_end_result` 臂多 `notExecuted: true`,`-p` 帧与交互转录的 tool_result 行信封多 `_sema_not_executed: true`(键都在信封上、不在 tool_use / tool_result 块上 —— 块随 `/compact` 直发服务商)。🔴 严格真标记,只读自有数据位(取值器不执行),缺席 / 假 / 形不对 / 读不出一律不铸键;**缺席既不是「跑过了」也不是「没跑」**(引擎逐字:执行中被打断、下次进程启动才对账关闭的调用都不带 `notExecuted`),本包不铸任何反向键,`recovered` 也不蕴含 `notExecuted`。服务端 7.126.0 线之前这两键不上线(= 缺席)。
189
+ - **完成终局的机读账:`readRunTerminal` 的 `completed` 读数多可选位 `detail`,新型 `RunTerminalCompletedDetail`(CC-654;**§123 KY-3**;additive)**:最后一轮服务商用引擎不读的结束词收了尾(回合照留,可能被截短)而 run 在这一轮完成时,完成因由带 `detail { kind: 'finish_reason_unknown', finishReasonUnknown }`。读数两臂:`{ kind: 'finish_reason_unknown', finishReasonUnknown }` 与表外种类 `{ kind: 'unrecognized', word }`(开集,只带原 kind 词)。缺席 / 坏形 / 读就抛 ⇒ 整只缺席且读数仍是 `completed`(**缺席不等于干净收尾**:老引擎 / 老服务端不过境)。只在因由形上读,平面形结构上没有这一位。
190
+ - **失败终局 `provider_rejected` 详情多两位 `providerCondition` / `providerConditionSource`(CC-654;**§123 KY-5**;additive)**:服务商用 4xx 拒绝了请求的终局上,引擎说服务商对账号 / 容量说了什么(引擎闭集词:额度耗尽 · 可重试条件但预算用尽 · 凭据 / 权限 / 请求本身……)与它凭的证据;`RunTerminalFailureDetail` 此前只收 `kind / status / code`,这两位被剥掉。现在开集串原样透传(不手抄闭集),只在 `provider_rejected` 臂上读,逐键独立(一位读不出只省这一位,`status` / `code` 照交)。🔴 缺席 = 没判(与 `unknown` 同读),不得渲成「额度耗尽」;判词**不改**「改了重发」的状态分档。
191
+ - **两只通告事实读器 `readFinishReasonUnknown` / `readStreamEndIgnored`,派发表 +2 行(CC-654;**§123 KY-3 / KY-4**;根入口运行期导出 +2)**:`route.finish_reason_unknown`(服务商用引擎不读的结束词结束了一轮:`finishReason` 回声形串,`?` 是合法词)与 `route.stream_end_ignored`(第一条终结语句之后流里又来了东西:`statement` 开集 / `word` / `frames` 正整数),此前只登记在码册里、读器答 `undefined`。受众不变(user);必填格缺 / 空串 / 非串 ⇒ 整只缺席,绝不抛。
192
+ - **云模式凭据来源判词 `credentialProvenance(facts)`(CC-170,接入文档 **§123 CV-1**,additive)**:根入口运行期导出 +2(`credentialProvenance`、冻结四词 `CREDENTIAL_ATTACH_WORDS`)、型 +8(`CredentialFacts` / `CredentialProvenance` / `CredentialAttachWord` / `CredentialFactName` / `CredentialTargetKind` / `CredentialTargetProvenance` / `CredentialConsent` / `CredentialSidecarOwnership`)。「这台引擎目标上附的是哪一类凭据」的唯一读法:入参是宿主给的生命周期事实(布尔 / 闭集词 / 核验结果词,**不读环境、不碰凭证值**:把令牌串当「在不在」旗标传入读成读不出,且不回显),答 `{ kind: 'word', word: 'local-sidecar' | 'service-token' | 'registry' | 'none' }` 或 `{ kind: 'unreadable', reason }`。读法:本机托管行只看受护 sidecar 的归属核验结果(核过 ⇒ `local-sidecar`,核不过 ⇒ `none`),与服务令牌在不在、引擎此刻死活都无关,锚点绑定 / 存活这类身份事实不读;远端 / 回环 pin 上,第一次写进程槽之前就已导出的服务令牌 ⇒ `service-token`;否则已登录 ∧ 目标经连接步骤钉住(回环另需已同意)⇒ `registry`;手导基址永不自动注登录令牌;`none` 是正面事实(没附凭据),入参缺席 / 坏形 / 表外词(含 `kind: 'manual'`:manual 是出身不是 kind)/ 自有访问器 / 代理陷阱 / 只在原型链上的键一律 `unreadable` 并点名读不出的那一位,绝不折成 `none`;判定路径没走到的入参不读、不影响答案;永不抛。零 import、零宿主状态。
193
+ - **座位 `patchSession`:会话行改名 / 置顶的一只可缺动词**(CC-634;网页端 [10123] 请托;接入文档 **§123 PB-1 – PB-4**;🔴 对实现 `LocalSessionsApi` 的宿主是必填成员):`LocalSessionsApi` +`patchSession(req: SessionRowPatchRequest): Promise<LocalSessionRecord>`(宿主转投引擎 `sessions.patch`,服务端 ≥ 7.125.0),入参 `{ sessionId, title?: string | null, pinned?: boolean }` —— `title` 串 = 改名、`null` = 清回自动标题(空串是坏体)、至少带一位;回执 = 改完之后的列表行。`LocalSessionRecord` +可缺位 `pinned`(缺席 = 没置顶或宿主不知道,按没置顶读)。能力位 `patchSession` 进 `SEAT_CAPABILITY_NAMES`(读口 / 订阅口 / 禁用句三句同其余能力位;宿主在引擎端写口不可用时报 `false`)。入站判官 `checkSessionRowPatchRequest` / `isSessionRowPatchRequest` + 键集 `SESSION_ROW_PATCH_REQUEST_KEYS`(根入口运行期 +3):只判形,**不抄**服务端的标题规则(1 – 120 个字符、首尾无空白;越界得到服务端的 typed 400 `request.field_invalid`)。座位不再需要渲染端自己的改名 / 置顶旁路表,写口只有这一只。
194
+ - **终局读数 `RunTerminalRead` 多一个可选位 `replay: true`;提交幂等的重放体按嵌套结果读**(CC-636 ①;接入文档 **§123 PA-2**;additive):服务端 ≥7.125.0 同一把 `Idempotency-Key` 已建过 run 行时,终帧 `done.result` 是那一行的读面 + `replay: true`(sdk 20 `RunReplayRecord`),结局在嵌套的 `result`。`readRunTerminal` 先按严格 `replay === true` 分流:读嵌套的引擎结果,缺席才读行状态(行上句子位是 `error`);读数带 `replay: true`。修前这一形按扁平行状态读,失败码 / 句子 / 门 / 挡下理由丢失。首答、在飞合流的首答逐字、拒绝三键与冲突臂上不带这一位。
195
+ - **舰队视图 `FleetTaskView` 多一个可选键 `workspaceSnapshot?: 'failed'`**(CC-633;接入文档 **§123 PA-4**;additive):服务端 ≥7.125.0 顶层 run 终态帧的工作区快照残局键 —— 这条 run 结束时的工作区快照没存上(下一条 run 恢复的是上一份)。恰为 `"failed"` 才落键;缺席或别的值 ⇒ 整键缺席(缺席不是「存上了」);它不是 run 失败,`status` 各读各的。`FLEET_TASK_VIEW_KEYS` / `FLEET_TASK_ROW_WIRE_KEYS` 各 +1。
196
+ - **core 值级端口 `judgeRuleToolName`(规则工具名判官)+ 读口 `ruleToolNameJudgement` + 型 `RuleToolNameVerdictView`**(CC-629;接入文档 **§123 PT-1**;🔴 型面 BREAKING:`CoreValuePorts` 必填员 +1):引擎 7.48.0 包根的 `judgeRuleToolName(name, roster)` 是「规则里的工具名够不够得着任何工具」的唯一判官(四词 `current` / `retired` / `unprefixed_namespace` / `unmintable_segment`;7.48.0 起空工具段 `mcp__srv__` 也答 `unmintable_segment`)。装配根原样装进来(名表末位追加);读口没装 ⇒ `undefined`(不编 `current`),引擎的抛原样上抛;`RuleToolNameVerdictView.kind` 按开集串读(引擎加词时原样装得进,本包读点把表外词当判不出)。🔴 硬破坏三句:① 按完整型建袋的装配根缺这一件 ⇒ 编译红并点名它;② JS 宿主漏装 ⇒ 请求体装配口有规则要投即抛并点名 `judgeRuleToolName`,会话规则可送判定对协议名整批读不懂;③ 从 `@sema-agent/core` 多导入 `judgeRuleToolName` 放进袋(宿主装的引擎须 ≥ 7.48.0)。
197
+ - **会话同步「文件历史没搬」的用户面句与判定:`FILE_HISTORY_SKIPPED_NOTICE` / `fileHistorySyncNotice(result)` / `fileHistorySyncNoticeIdentity(result)`**(CC-408;CC-502、CC-463 P2-c 并入;接入文档 **§123 FH-1 / FH-2**;根入口运行期导出 +3):推 / 拉 / 导入三条同步腿与自动同步对「只同步了对话、文件历史没搬」应说同一句话,此前由终端壳自铸。`fileHistorySyncNotice(result)`:同步结果自有的 `fileHistory` 位恰为 `"skipped"` 才说那一句(只同步了对话 / 为什么 / 对 `/rewind` 恢复文件的后果 / 再同步不会补);`carried` / `none` / 位缺席(老服务端、本地短路、冲突返回)/ 非对象 / 读就抛 ⇒ 不说、不抛;`skipped` 而结果自带的源清单**明说**文件历史信封为空(零追踪文件 ∧ 零回退边界)⇒ 不说(没有东西丢),清单缺席 / 读不出 / 形不认按「有东西没搬」说。`fileHistorySyncNoticeIdentity(result)`:会说这句话时给发生身份(会话 × 源清单叶 entry,不透明串,只比相等),让同一会话在源端没有新轮时不重复说;清单缺席 / 叶为空 ⇒ `undefined`。能力位缺席(7.52 – 7.115 的单机后端)的处置在 sdk 同步编排(17.0.0 起),本包不在转口上再包一层。
198
+ - **`isFileHistoryBlobMissing(err)`**(CC-408;**§123 FH-3**;根入口运行期导出 +1):同步取文件历史 blob 时 404 `not_found.blob`(清单没引用该 hash,或字节不存在)的判口 —— 状态恰为数字 404 **且**机读码严格等于 `not_found.blob`;码缺席(含旧形粗码 `not_found.resource`)/ 表外码(前缀族、大小写、尾空白)/ 状态缺席或不是 404 / 非对象 / 读就抛 ⇒ `false`、不抛。同步腿的 catch 把其余 404 说成「会话不在」时用它排除「这一个 blob 取不到」这一件事。
199
+ - **文件检查点「判不出 × 用户要收紧 ⇒ 拒」与已缓存坏位的单飞重探:`FILE_HISTORY_TIGHTEN_VERDICTS` / `fileHistoryTightenVerdict` / `fileHistoryUnjudgedRefusal` / `judgeFileHistoryTighten`**(CC-443;**§123 FH-4 / FH-5**;根入口运行期导出 +4;另有型 `FileHistoryTightenVerdict` / `FileHistoryTightenJudgement`):用户把文件检查点关了、而引擎读数判不出能不能按会话关(没观测 / 引擎没报这一位 / 不认识的词 / 畸形读数)时,片段口 `fileHistoryDeclarationField` 给空片段 —— 请求照常发、引擎照常捕获,用户的设置被静默违背,而包里没有口能把这一形表达成拒绝。`fileHistoryTightenVerdict(reading, captureOffByUser)` 四词闭集:意图非严格 `true` ⇒ `not_requested`;`on-optional` ⇒ `declare`;`off` ⇒ `already_off`;其余一切 ⇒ `unjudged`(读数判官同源 `fileHistoryCaptureMode`)。`fileHistoryUnjudgedRefusal(reading, captureOffByUser)`:`unjudged` ⇒ 拒句(这一发没发出去;引擎没报能不能按会话关,现在发可能照样被记录;稍后再发,或把文件检查点打开后照常记录这一次),其余 `undefined`。`judgeFileHistoryTighten(captureOffByUser, { baseUrl?, withinMs? })`:提交前只调这一口 —— 非 `unjudged` 零网络;`unjudged` ⇒ 对该地址恰一次单飞重探(同地址并发多次只飞一发;回体已落地而这一位读不成形的「已缓存坏位」也修得了;重探失败不动旧落地、别的读器不受牵连;缺省有界等 3000 ms,`withinMs: 0` = 只起不等),重读再判,仍 `unjudged` ⇒ 带拒句返回;`opts.baseUrl` 显式给了却不是非空串、或读就抛 ⇒ 不知道要判哪一台引擎,意图为真按拒(绝不回退到默认读取的另一台引擎上去放行),`withinMs` 读不出只读成「不等」;重探回体须是普通对象(数组等畸形回体不替换有效落地),同地址同拍重入并入同一发。片段口本身不变。**只有收紧方向允许「判不出就拒」。**
200
+ - **`engineSupportFloorEffective(floor?)`:`engineVersionTier` 的有效门槛一只读口**(CC-687;接入文档 **§123 EF-1**;公面 +1 函数,additive):`engineVersionTier(version, floor?)` 的实际门槛是声明的服务端底线 `SUPPORT_FLOOR.server` 与 `floor` 取高;此前端要在拒句里写「低于哪一版」只能渲手里传进去的 `floor` 常量 —— 常量落到底线之下之后,门按底线拒、句子说的却是常量(判与渲两条读法)。新口答的就是同一次取高的结果(纯 `x.y.z` 串):一只内部判官同时吐出门槛与三态,`engineVersionTier` 取三态、新口取门槛,不是第二份比较。`floor` 缺席 ⇒ 底线;低于底线 ⇒ 底线;高于底线 ⇒ `floor` 原串;坏形 `floor` 与 `engineVersionTier` 同一条(`TypeError`、不回显值)。生成物名 `DECLARED_SUPPORT_FLOOR` 不出公面(单名:公面读底线只有 `SUPPORT_FLOOR`)。**行为变(极端输入)**:版本串的每一段须是安全整数(≤ 2^53 − 1)—— 超界段此前按丢精度的数值比(2^53 与 2^53 + 1 折成同值),会让回显的门槛原串和门实际放行的最小版本分叉;现在超界段的版本串读作 `unknown`(`engineVersionTier` / `coreVersionTier`)、超界段的 `floor` 同 `TypeError`,恰在 2^53 − 1 上的段照常读。真实服务端 / 引擎版本串不会碰到这一条。
201
+ - **耐久决断腿判定口(CC-662,additive)**:`durableDecideLegOf(row)` / 型 `DurableDecideLeg` —— 一行待决归哪条耐久决断腿的唯一读法,五词闭集 `approval` / `plan_review` / `other_gate` / `unreadable` / `absent`,永不抛;`askParkForeignGateKind` 改由它派生。`DecidePlanReviewOptions.parkedResult`(CC-661,可选):这张计划卡所答的那次停驻结果,供决断前门身份(接入文档 §123 PP-2 / PP-4)。
202
+
203
+ ### Changed
204
+
205
+ - **勘误(0.95.0 段已冻结,此处回指;外部验收 [10143] 指出)**:① 0.95.0 主题句里的「`absent` 退词」不是 0.95.0 的改动 —— 那是 0.94.0 CC-173(`HeadlessPermissionResolution['source']` 去 `'absent'`,接入文档 §121 RQ-2),0.95.0 型面 BREAKING 三项应读作「终态词表 / 谓词改名带属主、七条过渡臂退役、RX 行三十名与 `isSeatModelCatalog` / `classifyRegistryConflict` / `isScopeGoneError` 退出根入口」;② 0.95.0 `### Removed` 首条「无根入口删除名」错:同节 RX-1 / RX-2 / WB-4 等条目已逐条列出,根入口实为 −43 / +83(净 +40,与「净值」行一致);③ 终态词表离开根入口的是 **10** 名(`TERMINAL_FLEET_TASK_STATUSES` / `isTerminalStatus` / `CLAIM_RELEASED_STATES` / `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTerminalNotSuccess` / `RUN_TERMINAL_STATUSES` / `RUN_TERMINAL_NOT_SUCCESS_STATUSES` / `TERMINAL_CAUSE_KINDS` / `isTaskNotificationTerminalStatus` / `isTerminalCauseKind`),发布说明只点了前五名;逐名「改用什么」见接入文档 §2z。
206
+ - **字符面旧三口与同伴署名改读 `displayUntrusted` 同一张宽集字符表(CC-635;CC-393 收口)**:`escapeDisplayControlChars` / `collapseLabel` / `capForDisplay` 与消息署名规范化不再各带一份字符集,而是同一张表的三组选项(转义不折平 / 折平再转义 / 标成空格再折平),不洗凭据。格式类整类此后转义上屏 —— 零宽 U+200B – U+200D、词连接符 U+2060、不可见运算子 U+2061 – U+2064、U+FEFF、软连字符 U+00AD、标签字符 U+E0001 / U+E0020 – U+E007F、行间注记 U+FFF9 – U+FFFB 等;emoji 连字与连接文字 / 印度系文字里的 ZWJ / ZWNJ、RGI 地区旗按 `displayUntrusted` 同一只语境判原样保留。署名规范化另收 C1 控制符、双向控制全族与孤代理项(此前原样)。逐码位只收紧:此前标出的码位一个不放。🔴 **显示字节会变**:含上述字符的标签、描述、横幅、拒因句多出可见转义(astral 码位写成 `\u{E0041}` 形);含它们的署名多出空格,只由它们组成的署名按缺席(可选位只丢那一位,必填位整帧按普通通知)。三端零编译红、零改码(读点见接入文档 §123d)。
207
+ - 消息署名的来源核对(载体 `from` 与 `_sema_provenance.from` 必须相等)改按**原串**比较:此前比的是展示规范化之后的署名,只差控制符 / 格式类 / 双向控制 / 孤代理的两个串会被当成同一来源(宽集扩表后碰撞面更大);两个铸点写的是同一个值,合法帧不受影响。规范化只管呈现,不参与判别。
208
+ - `capForDisplay` 的封长与 `displayUntrusted({ max })` 同一只实现:`\u{…}` 转义 token 同样不劈,截出新形(emoji 连字被截掉右半)时在截断串上再跑一遍;非正 / `NaN` 上限 ⇒ 空串、`Infinity` ⇒ 不封,与此前同;非数(如串 `'5'`)上限 ⇒ 空串(此前按 `Number()` 折算,0.95.0 得 `"abcde"`)。hook 故障横幅的 512 字符帽改用同一只封长(此前按字符切,可留半枚转义 token 或劈开代理对)。
209
+ - **总缓存按键现读的五个口与能力位读器族同一条读法(CC-596;接入文档 §123 CR-7;🔴 型面联合加员)**:`engineCapState` / `engineCapValue` / `engineCapTrue` / `engineCapString`(根入口)与包内的 `engineCapNestedTrue`、有界异步口 `engineCapStateVia` 此前按 `in` + 普通取值读 —— 自有访问器会被执行、只在原型链上的键算在场、`engineCapValue` / `engineCapString` / `engineCapNestedTrue` 遇到读就抛的位会外抛;29 只投影读器则只认自有数据位。现在取位只有一处:自有数据位才算值(值 `undefined` 与键不在同判缺席),自有访问器不执行、读描述符就抛 ⇒ 读不出(显式一态),只在原型链上的键算缺席。读不出的出口:`engineCapState` ⇒ `non_boolean`、`engineCapValue` ⇒ `{ kind: 'unreadable' }`(新)、`engineCapTrue` / `engineCapNestedTrue` ⇒ `false`、`engineCapString` ⇒ `undefined`。🔴 `EngineCapValueState` 多一员 `{ kind: 'unreadable' }`(对该联合做穷举 `switch` + `never` 的宿主编译红一次;三端 origin/main 里只有终端一处读点 `engineCapValue(…, 'version')`,按 `kind` 比较、不穷举)。真引擎回体是 JSON 解析产物,线上读数不变;变化只在手造的回体(取值器 / 原型链 / 代理)上。`engineCapState` 对「自有键值为 `undefined`」此前答 `non_boolean`,现答 `absent`(与读器族和 `engineCapValue` 同)。接入文档 §122 包侧缺口 CR ④ 的事实句自本版不成立(§123z 回指)。
210
+ - **`toolEndOutputText` 改读转录投影那一条文字读法(CC-648;接入文档 §123 TR-1;行为变,公面名不变)**:「工具结果正文的文字是什么」包内此前三条读法(这只公面读口只取 text 块、分类器识别另有一只 `'\n'` 连接并收 `{content}` 对象形的本地版、0.96.0 的转录投影叶),三处的差在任何真到达的输入上都不改读点判定,收成一只、零选项。读数变化:空数组 ⇒ `''`(此前 `undefined`,与空串两答);读得出的图像块 ⇒ `[image]`;有读不出的块 ⇒ 末尾一条 `[unsupported content omitted]`(此前静默丢;只有图 / 只有读不出的块此前 `undefined`);裸串与纯文本块不变;非串非数组仍 `undefined`。包内引擎中止串的精确等值读它:带图或带读不出块的帧不再读成中止串。
211
+ - **`classifierDenyFromToolEnd` 读同一条读法(CC-648;§123 TR-2;行为变,收窄)**:裁决载体只认裸串或恰一个块(多块帧不再是裁决;此前多 text 块按 `'\n'` 连接后可中);`{content:[…]}` 对象形(不在工具结果的 wire 契约里)不再认;不带 `type:'text'` 的项不再当正文。引擎铸的拒绝正文(单串 / 单 text 块,带或不带信封)判定与此前逐值同。
212
+ - **TaskOutput 结果的 `tool_result.content` 是模型面原文串(CC-649;§123 TR-4;行为变,型面收窄)**:此前交互转录的 block content 是对象 `{retrieval_status, task}`(不是合法的 tool_result content 形,与 `-p` 帧的串两车道不同),现在两车道同是原文串(截断带 `\n…(truncated)`),对象只在信封 `tool_use_result`(值与此前逐字节同);带图时与别的工具同一条块化规则。`wireOutputToBody` 对 TaskOutput 把对象放在 `toolUseResult` 位。`ToolResultBody.content` 型由 `unknown` 收窄为 `string | unknown[]`。
213
+ - **待决行缺 D-1 绑定位的安全停改铸 `binding_missing`(CC-578 ⑤,行为变;接入文档 §123 RF-3 / RF-4)**:修前这一形与引擎 409 `approval_binding_mismatch` 同铸 `binding_mismatch`,两个出处只能按错误句子的开头分。现在 `HitlSafetyError.code` / 耐久腿结局 `safetyCode` / 问答腿结局 `code` 上,`binding_mismatch` 只表示引擎答了绑定冲突(字节已出站),`binding_missing` 表示本地发送前拦下;两者照旧都是安全停(重呈给人,绝不自动重发)。「这一问是否已决」判官、`isAlreadyResolvedFailure` 与停驻解析把新词读作本地闭集码(未决;失败文字里有「已决」类词也不续读),与其余本地码同答。按 `code === 'binding_mismatch'` 认「本地缺绑定」的宿主改认 `binding_missing`;按句子开头分出处的读法可以删。`GATE_FAILURE_CODES` 同版冻结(此前是可变数组,宿主往里 `push` 一个词,包内白名单就放行表外词);型不变。
214
+ - **重试行 stalled 臂的 `detail` 过展示出口(CC-517 (e);§123 FS-7,行为变:显示字节变)**:0.68.0 的约定是「原样透传,一个字不改写」;但同批引擎字节在另四条 error 臂上自 0.94.0 起已过 `displayUntrusted`(`error.formatted`),这一臂是漏网的出口。现在 `RetryStatus` stalled 臂的 `detail` 与那四条臂同一只出口(缺省单行载体:先洗凭据、再标控制符与双向符、最后折行);干净文本逐字节不变;洗完为空 ⇒ 键不铸;仍不截断(封顶归端)。
215
+ - **`readEngineNoticeFacts` 对 `route.finish_reason_unknown` / `route.stream_end_ignored` 由答 `undefined` 变为答 typed 事实(CC-654,行为变;**§123 KY-3 / KY-4**)**:终端 `-p` 机读车道按「受众 user 且派发口有读数」给通告帧附 `facts`(读码推断,见 §123 KY-3 的终端读点),这两码的 `-p` 通告帧自本版起多一个 `facts` 键;交互呈现不变(仍是引擎原句)。
216
+ - **能力回体落地存描述符级快照,读器族与五口读同一只不可变快照(CC-653;接入文档 **§123 KY-8**;行为变;KL-724 销)**:此前落地存的是宿主交来的那只活对象 —— 读器族按落地记录记忆化首读投影,五个按键现读的口(`engineCapState` / `engineCapValue` / `engineCapTrue` / `engineCapString` 与包内的嵌套口)每次现读那只对象,宿主在探测闭包返回之后就地改写回体时两类读口对同一位可能给出不同答案(KL-724)。现在落地那一拍把回体照「读法同一条」深读一遍存另一只对象:只读自有位的**描述符**(取值器一次都不执行),访问器位在快照里仍读不出,代理陷阱抛的节点整只读不出,环保图形,超 64 层 / 10 万节点的子树按读不出(闭合失败),原型既非 `Object.prototype` 也非 `null` 的节点挂一只外来原型(读器按「是不是普通对象」判畸形的判据照旧),快照深冻结;宿主的对象不冻结、不改写。落地之后宿主改写自己的对象两类读口都看不见 —— 要换能力位走 `invalidateEngineCaps` 重探。🔴 快照这一遍可能调到宿主代码(回体是代理时的陷阱,此前在第一次读时才调):陷阱里换代是合法重入,快照做完再核一次代际,旧引擎的快照不落地。
217
+ - **整张悬空的 @ 名单不再原样保留,经上游收窄读法剔空成 `{mode:"none"}`**(CC-637;**§123 PB-6**;KL-54 销):修前 10 一代里剔空 = 空名单 = 「谁都能 @」,所以整张悬空的名单原样写进去,本机引擎因此整域拒收(启动时改用环境目录、刷新时保留上一份)。11 一代的 `only` 名单剔空就是 `none`(收紧方向,上游 `narrowAtMention` 的同一读法):文档可写、本机引擎整域不落缺省;问题账逐名记 dropped,外加一条整设置的 `{key:'atMention', at:'atMention', reason:'dangling'}` 并出一句 warn(名单里的模型一个都用不了,@ 提及整个关掉;目录条目一条都没过判定口、目录原样保留时本机整域拒收这份设置,`none` 不生效 ⇒ 这一条与这一句不出)。
218
+ - **`atMention: {mode:"none"}`(一个都不许 @)照写**(CC-637;**§123 PB-6**;KL-665 销;cli [10138] ④ 的 C-4 探针):修前影子文档写不出这一态(10 一代空名单 = 全部可 @)⇒ 不写、记 `unsupported`、一句「本机 @ 不受限」的 warn —— 放宽方向;现在写 `{mode:"none"}`,问题账零条、无 warn。`only` 名单照写(C-3 探针)。
219
+ - **10 形回体里 `models.default` 与 `roles.default` 同在且指向不同:取 `models.default`,被盖住的 `roles.default` 记 `shadowed`**(CC-637;**§123 PB-7**):11 形里缺省模型只有 `roles.default` 一位;取 `models.default` 与上游一次性迁移 SS-M9 同向(新增差分格对上游迁移逐值核过)。修前两键各自照写。只在老控制面回体上出现。
220
+ - **影子 models 文档里 `roles` 的缺省模型排第一位、空 `roles` 不写**(CC-637;**§123 PB-5**;外部验收 [10156] G-UP5):两代回体 `{default:b}` 与 `{roles:{default:{model:b}}}`(注入 `entryAccepted` 时)产出逐字节同的影子文档 —— 此前后者多一个空键 `roles:{}`。
221
+ - **🔴 支持底线三件同号抬:服务端 7.115.0 → 7.125.0、引擎 7.40.1 → 7.48.0、sdk 19.0.0 → 20.0.0;peer `@sema-agent/sdk` `>=19.0.0` → `>=20.0.0`**(CC-633 / CC-636;接入文档 **§123 PA-1** / §0a;型面零变):`SUPPORT_FLOOR` 三项换值;`engineVersionTier` / `coreVersionTier` 的门槛下限随之抬 —— 服务端 7.115.0 – 7.124.x 的版本串今天答 `legacy`,调用方另给的门槛低于新底线时按新底线判(只抬不降)。开发依赖 `@sema-agent/sdk` 换钉 `^20.0.0`(sdk 20 = 服务端 7.125.0 锁步 major;20.0.1 已弃用)。两视角实测:本包源码读 sdk 20 的舰队行型声明;已发 `.d.ts` 对装 sdk 20 的消费方 `skipLibCheck: false` 零错。换钉本版之前,服务端须 ≥ 7.125.0、sdk 须 20.x。
222
+ - **请求体装配口与会话规则可送判定:「工具名够不够得着工具」只读引擎判官**(CC-629;接入文档 **§123 PT-3 / PT-4**;退役登记 RL-127):此前三处各管一段手写文法(退役名表查表、「含 `__` 而无协议前缀」、协议段的对端段切分与铸名比对 —— 后者漏判空工具段 `mcp__srv__`,会话规则可送判定只剩「点了对端、没点工具」一道门挡它),现在退役名 / 无前缀 / 段铸不出三问都问同一只判官(退役名的**改写**仍走 0.90.0 起的继任名表 `normalizeLegacyToolName`,统一改读判官的 `currentName` 随 CC-688 收口);判官之外留两条不是同一问的关(名字里有左括号;服务端受理口不收的 `<前缀><段>` 不完整形),名字关在前、规则编译器在后。可见变化:① 铸名端口没装或抛不再改判决 —— allow 桶里判官答 current 的协议名照投、段铸不出的留下 `unminted_protocol_segment`(此前一律 `judge_failed`),deny / ask 段铸不出的照进 `unreachable[]`、只缺 `mintedPrefix`(KL-512 删);② 判官装着却答不上来(抛 / 回的不是四词之一)⇒ 装配口抛(与必备端口缺席同一条),可送判定整批读不懂;③ 会话规则可送判定的答案逐条不变(装满端口时),依赖的端口由协议表 + 铸名两件换成判官一件(KL-570 改写)。
223
+ - **`hookMatcherVerdict` 改读设置契约的唯一读法(不锚定)**(CC-636 ④ / CC-434 ③;接入文档 **§123 SS-5**,成文改口 G-SS5 – G-SS7):「matcher 选中哪些名字 / 是哪一形」只问设置契约 `hookMatcherSelects` / `hookMatcherForm`(构建期从开发依赖原样派生,运行期零 import),本包自带的名字表切分与锚定 `^(?:…)$` 删除 —— 服务端 7.125.0 受理面与终端执行器问的就是这一只。含正则字符的 matcher 整串按不锚定正则读:`"ListPeers)|(Read"` 拒 → 不判(`invalid_pattern`,服务端同样受理)、`"ListPee."` / `"Peers$"` 受理 → 拒、`"ListPeers|Agent."` 拒 → 受理,本口判了的形与服务端 7.125.0 起的提交结果逐格同(7.114.x – 7.124.x 服务端自持锚定读法,这几形答案不同);名字表形与全匹配形不变。正则形仍过本包的静态求值预算。逐代读法表换到 §123「G-SS7」(§117 那张冻结)。
224
+ - **中心配置 mcp http 条目同设 `principalHeader` 与 `assertionHeader` ⇒ 整条不投,丢弃账记 `principal-and-assertion-header`**(CC-655;接入文档 **§123 SS-2 / SS-3**;`CloudMcpDropReason` 联合 +1 字面量):两个键回答同一个问题(这台服务器的请求上用哪个头送身份),设置契约 12.2.0 在条目层判同设非法;此前本腿只投 `principalHeader`,等于替它择一。与契约同答的射程是两位都为非空串;任一位为空串 / 非串时契约整条拒,本腿照投读得出的那一位(中心配置既有的「形漂移不抛」姿势)。被丢条目的 `headerRefs` 不再报进 `missingEnv`。`assertionHeader` 本身本版不过境 —— 请求面(sdk `McpServerSpec` 的 http 传输)没有这个键,服务端任务提交腿会剥掉、MCP 探测口会拒;请求面声明它那一版改为原样过境。条目级三只透明键 `toolAxes` / `authForm` / `entryKind` 两条投影腿都不过境(§123 SS-4)。
225
+ - **开发依赖 settings-schema `^11.2.0` → `^12.2.1`**(接入文档 **§123 SS-1**):本包运行期不 import 设置契约包;既有生成物逐字节同,函数批 +2(`hookMatcherSelects` / `hookMatcherForm`)。
226
+ - **门种表与服务端决断口对齐(CC-662)**:`ASK_PARK_GATE_KINDS` 改为 `human` / `irreversible_ask`,`PLAN_REVIEW_GATE_KINDS` 改为 `plan_review`,`REVIEW_PARK_GATE_KINDS` 改为 `plan_review` / `needs_review` —— 退出的 `policy_ask` / `tool_approval` / `dry_run_review` 不是门种,wire 的门种位上从不出现;三张表对引擎停驻登记表两向编译期钉。门种位写这两个非门种词的待决行不再入审批臂(§123 PP-3 / PP-5)。
227
+ - **审批卡「为什么问」那一句的判序按线上契约改口:结构位在前、散文并渲在后(CC-691;接入文档 §123 PR-1;行为变,型面零变)**:`askProbeReasonDetail(card)` 在 0.94.0(CC-191)写成「`probeReason` 散文优先」,与服务端线上契约对该键的成文(优先渲 `probeCause`、没有结构位才回落本键、两键同在可并渲、禁把本键拆 / 解析成结构)相反 —— 成文例外,0.94.0 的「散文优先」作废。现在:`probeCause` 是记录 ⇒ 本包按码的那一句在前(码词形合才带 `(check code: …)`;只结构位时句子与此前逐字同),`probeReason` 在场(自有数据属性 ∧ 非空白串)⇒ 经 `displayUntrusted` 单行形以一个空格接在后面,此时结构句去掉「the engine did not say the specific reason」半句(紧跟的散文就是原因;「句′。 散文」;散文不拆、不解析、不从里面读码)。只有「两键同在」一形的读数变(此前只出散文);只有散文 ⇒ 散文、只有结构位 ⇒ 本包一句、两缺 / 读就抛 ⇒ `undefined`,三形与 0.94.0 逐字相同。并渲串长度不夹(长度归端),两键按键隔离(一键读不出只降那一键)。公面导出名、签名、返回型零变。
228
+
229
+ ### Deprecated
230
+
231
+ - **`subscribeEngineAgentPanel` / `subscribeEngineAgentPanelAbsence` 再留一版,预告:随消费端删掉包装之后的下一个本包版本删除**(CC-114;退役登记 RL-89 / RL-90;**§123 RT-2**):本版行为不变。0.95.0 预告的删除条件(消费端改订行差分口 `subscribeEnginePanelRows`)在本版发布时未成立 —— 终端面板桥仍订这两口,所以不在本版删。🔴 删除那一版的硬破坏三句:① 按名 import 这两个名字的端编译红(运行期该名为 `undefined`,调用即抛);② 旧口的事实流与缺席上报随之退役,行差分口以 `upsert` 行上的 `fields.absence` 交同一件事,不再有第二条读法;③ 改订 `subscribeEnginePanelRows`、缺席标从差分里读,删掉旧口调用与喂旧口的测试写法。
232
+ - **`resetManualCompactCapability()` 再留一版,预告:随消费端删掉包装之后的下一个本包版本删除**(CC-344;退役登记 RL-101;**§123 RT-3**):本版行为不变(0.95.0 起它是空调用:`/compact` 的能力位没有私有表,失效只走 `invalidateEngineCaps`)。网页端在引擎重连失效处与 `invalidateEngineCaps` 同拍调它、终端门面再导出它,所以不在本版删。🔴 删除那一版的硬破坏三句:① 按名 import 或再导出它的端编译红(运行期调用即抛);② 对读数与行为零影响 —— 它本来就什么也不清;③ 删掉这一行调用与再导出,失效只走 `invalidateEngineCaps`。
233
+ - **20 只 `noteEngineCapsFor*` 再留一版,预告:随消费端删掉包装之后的下一个本包版本删除**(CC-344 余项;退役登记 RL-113;**§123 RT-4**):本版行为不变(空调用,读数只从总缓存的落地派生)。终端的 caps 探测闭包与十一份门面、网页端的回退读数探针仍在调,所以这 20 只不在本版删(三端零读点的另外 9 只已在本版删,见上 `### Removed`)。🔴 删除那一版的硬破坏三句:① 按名 import 或再导出这些名的端编译红(运行期调用即抛);② 对读数零影响 —— 它们本来就是空调用(探测闭包里同拍读读口得到 `unobserved` 的现状删除前后一样,KL-725);③ 删掉这些调用与门面再导出,闭包里同拍要用读数的读手上那一发回体的投影 `project*Capability(caps)`。
234
+ - **15 只 `__reset*ReadingsForTests` 再留一版,预告:随消费端删掉包装之后的下一个本包版本删除**(CC-344 余项;退役登记 RL-114;**§123 RT-5**):本版行为不变(只清读器自己的记忆表,下一次读按总缓存的落地重新投影)。终端的测试与十份门面再导出仍在用,所以这 15 只不在本版删(三端零读点的另外 14 只已在本版删,见上 `### Removed`)。🔴 删除那一版的硬破坏三句:① 按名 import 的测试代码与门面再导出编译红;② 对读数零影响 —— 它们没有读账可清;③ 要重置读数改调 `__resetEngineCapsCacheForTests`(总缓存的重置),并删掉门面再导出里的这些名。
235
+ - **开发依赖 `@sema-agent/core` 换钉 `7.49.1`(精确钉),构建期事实表重生成**(CC-606;**§123 PC-1**):通告码册 87 → 90(`config.write_protection_unresolved` 改名 `config.path_view_unresolved` 同位、+3 `route.*`〔受众 user 的两码本版另加事实读器,见 Added / **§123 KY-3 / KY-4**〕,**§123 PC-8**);问类仲裁表 +`unverifiable_shell_text`,写入落点读不出的那一类与放行原因词改名 `target_unresolved`(**§123 PC-3**);allow 惰性理由 −`path_pattern` −`domain`。生成物单代;老服务端(≤ 7.125.0)仍发的同一事实旧名 —— 强制词 / 问类 / 放行原因 `write_protection_unresolved`、通告码 `config.write_protection_unresolved` —— 经包内一张改名表与新名同读(判定口同答、同一句、通告照旧在册),支持底线越过引擎 7.49.0 那一版删这张表。
236
+ - **强制词表 `APPROVAL_MANDATE_WORDS` 改取引擎包根生成物,并收老引擎仍发的旧词(两代读法)**(CC-606;**§123 PC-2**;型面 +1 员):引擎 7.49.0 把 `write_protection_unresolved` 改名 `target_unresolved`,sdk 的声明仍是旧词;此前值就是 sdk 那只数组,新词读成缺席。现在七词(新词一句、旧词那一句照旧),值为冻结数组;旧词在支持底线越过引擎 7.49.0 那一版删。
237
+
238
+ ### Fixed
239
+ - **发布前最后一批修正(行为面七处,型面零变)**:① `standingRowsOf` 的持久行:放行证据(`ruleOffers` / `ruleOffersReadOnly`)只认**自有数据位** —— 只在原型链上 / 自有取值器 ⇒ 不给「以后别问」(`offers_unreadable`),取值器零执行(此前宽读照给 `engine_offer`;门 `standing-rows` R6b / R6c);② 流式腿对 `done.result` 的三处消费(错误行的工具历史载体 / 工具历史账的会话回显 id 与 run id / 计费 chrome 的 `stats`)改经同一只 `engineResultOf`(重放体读嵌套引擎结果),与结果帧同读一处 —— 此前重放体上 `_sema_tool_history_mismatch` / `/rewind` 出路句丢、`run_cost_reconciled` 不发(门 `server-7125-pick` RS1);③ 根入口的三只闭集 `SESSION_ROW_PATCH_REQUEST_KEYS` / `CHROME_EVENT_KINDS` / `SEAT_EVENT_TYPES` 冻结(一个 `push` 就能放宽判官的闭形;门 `seat-session-patch` PS7);④ `findPendingForTask` 身份点名的那一行在队列里却不归审批腿 ⇒ 码由 `no_pending` 改 **`wrong_gate`**(本地闭集既有码):那一问**仍在等、只是门不对**,唯一判官读作 `not_settled`,不再被读成已决(门 `durable-decide-leg` DL4b′ / DL4b⁗、`terminal-cause-projection` E4);⑤ 待决行门种**读就抛** ⇒ `unreadable`(不进审批候选池、身份点名到它 ⇒ `wrong_gate` 不回落到另一行);缺席 / null / 空串 / 非串仍是 `absent`(门 DL2 / DL4b⁗′);⑥ 计划审阅结局:决断 200 体自述「卡仍 pending」(`retriable:true`)只在回拉**没有更晚的反证**时才判 `still_parked`(证得出)—— 回拉已 `completed` 或门身份已换(别的客户端推进了)⇒ `unconfirmed`,不按旧回执放开陈旧拦截(门 `plan-review-outcome-verdict` POV0);⑦ 门 `file-history-tighten` G16b 的「重入者不拿占位提前返回」改用微任务屏障,不再与墙钟竞速(并发负载下假红)。
240
+
241
+ - 记忆规格未知键句(`unknownMemorySpecKeysNote`):键名里的格式类字符逐枚转义进引号,astral 码位整枚写成 `\u{…}`(此前原样上屏)。
242
+ - hook 故障横幅(`hookFailureNoticeText`)在 512 字符帽上不再留半枚转义 token、不再劈开代理对。
243
+ - CC-393(原 KL-71「旧三口字符集窄于新口默认、署名规范化不折 C1 与双向族」)随本版字符表单源收口;接入文档 §101 包侧缺口 ② 与 §101 / §105 的「旧三口逐字节保持」判据自本版不再成立(§123z 回指)。
244
+ - **`text_segment_end` / `thinking_segment_end` 之后不再有同段增量(CC-645)**:权威全文里「还没泄出去的尾巴」此前要等下一帧才作为 `stream_delta` 排出,序列是 `[…, text_segment_end(diverged), stream_delta(尾)]` —— 端按契约用 `content` 整段重渲之后又收到一条迟到增量,尾巴渲两遍(`… Quill Quill`)。现在臂内先排尾增量再发段终事件;未分歧(尾巴为空)时序列与 0.95.0 逐字同。
245
+ - **中断撤卡撞 404 时,真 sdk 错误上「那一问已结束」的成因读不出,仍出「session may stay locked」**(CC-638;接入文档 **§123 FA-1**):中断时把挂着的那一问用一次拒绝结算掉,拒绝撞 `404 tool_approval.not_pending` 且体上带「已结束」的成因词(行上十词;≤7.123.x 的 `voided` / `denied` 同版随支持底线退役,见本段 Removed 的 PA-10 条)本应静默;但成因判官按「自有数据描述符」读抛出物的 `extra`,而 sdk 的 `APIError.extra` 是类上的取值器,在真 sdk 抛出的错误上成因词恒读不出,于是「could not cancel the pending question — the session may stay locked」照出(手搓成自有数据位的测试夹具读得出,所以门没见到)。现在抛出物的 `extra` 位只有一只读口(沿原型链普通取值;取值器抛 / 代理陷阱抛 / 已撤销的代理 ⇒ 读不出,不外抛),成因判官与包内另五处读该位的口并入它、三态的翻译与修前相同(唯一差别:`extra` 是已撤销的代理时,410 成因读位与归因拒 `field` 读位修前在判形上外抛,现在按「读不出」处置 —— 成因缺席且不回落旧键、`field` 回落读顶层);带成因词的 404 上,中断撤卡观察与决断拒收分类同答「已结束」。没有成因词 / `unknown_or_other_replica` / 读不出的 404 仍出该句(404 不是存在性神谕,闭合失败,不变)。门:`server-7124-pick` 新 XR 段(真 sdk 类实例与真 `AgentClient` 两条线 × 四种成因词 × 两只判定口,读口单源以语法树钉)。
246
+ - **工具结果带图像时,转录 `tool_result.content` 变成块数组(CC-641,行为变;接入文档 §123 HP-1)**:引擎 `tool_end.output` 带图像块且不是错误结果时,交互转录与 `-p` 帧上的 `tool_result.content` 从「恒串」变成块数组 —— 文本块 `{type:'text',text}` 与图像块 `{type:'image',source:{type:'base64',media_type,data}}`(图像数据只判是串、与 CC 同判,字节与引擎送来的逐字节同、顺序不变);纯文本结果仍是串(与修前逐字同),错误结果的 content 恒串,信封上的 `tool_use_result` 不变。读不出的块(图像数据不是串 / 媒体类型不在 jpeg · png · gif · webp / 未知类型)不进 content,末尾补一条 `[unsupported content omitted]`。按串直渲 content 的读点先判 `Array.isArray`。
247
+ - **工具结果里的图像在包内被压成字面 `[image]`(CC-641;[10159])**:修前两份块数组展平都把图像块换成 `[image]`,图像字节在包内丢失,端上拿不到模型看到的那张图;现两份展平收成一只实现(`flattenWireOutput` / `flattenToolOutput` / `coerceOutput` 同答),转录 content 保留图像块(见 Changed);文字读法里读不出的块不再静默消失,以一条告知收尾。
248
+ - **用量分析:同一个时间戳在日序列与小时序列上答案不一(CC-640;[10156])**:修前日序列做日历校验、小时序列走宽容解析,`2026-02-30` 在小时序列被收下并算进 `peakHourUtc`;现一只读口 —— 日期形或带时区的日期时间形、真实日历日,带偏移先换到 UTC,日键与小时出自同一次解析;读不出的点在 `projectUsageSeries` 就丢、计入 `unreadable`(两序列同答)。无时区的日期时间形改按读不出(修前小时随看的人的本地时区变)。
249
+ - **服务商把请求体形判不合(400 / 422 + 回声词在表)不再被劝「改了重发」**(CC-549;**§123 WD-2 / WD-3**):此前一切 400 的终局句都是「Change it … and send it again」,对请求体形被拒这一类方向相反(用户改措辞改不了)。现在这一类给另一句(措辞改了没用;查所配模型与端点,或报给运行引擎的一方),回声词不进句;其余拒绝的句子逐字节不变。`adapt` 重建合成行时,0.95.0 及以前铸的转录行(键只有 `resend` / `text`)重放不丢重发句:`kind` 缺席走旧一代读法由状态推导(不读码),`kind` 在场则须是闭集词且与状态、句一致,否则整键丢。
250
+ - **`sandboxDegradeHint` 认单机引擎的 501 `capability.image_index_required`**(CC-584;**§123 WD-5**):此前这一码不在闭集,用户只见被截断的原文。现按码(状态 501 ∧ 码恰等,不读句子)给具名降级句:这台引擎的存储后端没有镜像索引,换 SQL 后端的 worker 或不带 `--sandbox`。
251
+ - **路由缺口的决策句去掉「向导帮不上」半句,并按宿主位三向**(CC-579;**§123 WD-6 / WD-7**):此前句子写死「model setup will not help」并不读可配位,而终端向导能配路由。现在 `explain_route_gap` 专指宿主没报能不能配(中性句),能配 ⇒ `offer_route_setup`,不能配 ⇒ `explain_route_unconfigurable`。两参调用的决策结果与 0.95.0 逐值同。
252
+ - **型面 BREAKING:`NoAllowCause` 联合增员 `'engine_ask_rule'`;`RuleLadderNoAllowFacts` 多可选位 `noAskRuleMatched`;`policyDenyReason` 两车道各多一句**(CC-576;接入文档 **§123 HW-1**):原因词 `engine_ask_rule` = 卡上规则车道必问且问类或出身为 `ask_rule`(引擎判出的 ask 规则),而宿主阶梯证明**用户这一侧确无 ask 命中**(`noRuleMatched` ∨ 新位 `noAskRuleMatched`;后者专给「本地有 allow 命中、被卡上问类让位」那一形,`noRuleMatched` 说不了)—— 那条规则不在用户设置里(例:部署的 `APPROVAL_REQUIRE` 名单),用户设置清不掉、加 allow 答不了,两车道拒因句说「引擎那一侧的规则、用户设置批不了」,不给「删规则 / 加 allow」。判序只动第 4 步;本地 ask 命中(`askRuleMatched`)与预算用尽仍先于它;证据位缺席 / 非严格 `true` / 原型链 / 访问器 / 读抛 ⇒ 仍答旧词 `ask_rule`(不排除是用户自己的那条);单有新位而卡上不说 ask 规则 ⇒ 不产本词。**行为变**:卡类集含 `ask_rule` × `{ noRuleMatched: true }` 此前答 `ask_rule`、现答 `engine_ask_rule`(0.94.0 G-HD4 该格成文改口,见 §123c / §123z)。对 `NoAllowCause` 写穷举 `switch` 的宿主编译红(加一臂)。
253
+ - **被 `userPromptSubmit` hook 挡下的提示,终局句按成因出 CC 形句、引擎信封不再上屏**(CC-603;终端请托 [10068];KL-735 收口;**§123 LN-1**):此前 `blocked` 终局只有一句 `Run blocked: <reason>`,而 `reason` 是引擎按模型侧车道框好的话 —— `<system-reminder mark="…">` 信封连同会话 mark 原样上屏,机读成因 `detail.cause` 不渲。现在终局行与结果帧 `errors[0]` 经同一只出句口:hook 拒绝(`cause: 'block'`)⇒ `UserPromptSubmit operation blocked by hook:` 换行接 hook 自己的话(按不可信文本过展示出口、信封标签记号拆净,含零宽字符拼的);`crashed` / `timeout` / `cancelled` 各一句固定话并点明提示没有被提交;表外成因词只出句首、不回显原词。`detail` 缺席或坏形(服务端 <7.113.0、种类表外、成因缺席 / 非串)⇒ 落回 `Run blocked: <reason>`,整只引擎信封解开;agent 自己写的 `reason` 逐字节不变。新句计治理终态行(`isGovernanceStopRowText` 认,不叠 `Run stopped:` 前缀、不是 `API Error:`)。不带 CC 句尾的 `Original prompt: …`(流里没有提示原文)。
254
+ - **续跑被拒那一族三码,「门还在」判定同答**(CC-630;**§123 LN-2**):`isGateStandingErrorCode(code, true)` / `isCodeClassifiedGateFailure(code, true)` 此前只认 `checkpoint.unsupported_version`,另两码(`checkpoint.walltime_axis_retired` / `checkpoint.config_refused`)同样是 409 ∧ `retriable: true`(卡仍待决)却答 `false`,「门已决」判官对它们回落到失败文字扫词。现在族码表只登一处(与族读口 `refusedParkFromError` 同一张),三码 ∧ `retriable === true` 同答 `true`;`retriable` 缺席 / false / 非布尔仍是 `false`。
255
+ - **「会话已有在跑的 run」的判别体与载体规则各只定义一处;因由形两边同认**(CC-631;0.95.0 CC-391 的同轴孪生;**§123 LN-3**):公面判别口 `activeRunBusySignal` 与终局行 / 结果帧的选臂此前各读一份(判别体内联在适配层、载体规则散在两处);现在读同一只判别体 `classifyActiveRunBusy` 与同一条载体规则 `activeRunBusyCarrierOf`(都住 `engineErrorCodes`,不在根入口)。顺带收口一个方向的分歧:因由形 `terminal.code` 为占锁码的帧,终局行此前认、判别口不认,现在两边都认。≤7.124.x 服务端幂等重放臂回放的无 `status` 冲突体不在此条:见 `### Removed` 的 CC-685 条(同版退役)。
256
+ - **fleet 台账:终态行只有一处归宿(CC-644)**:此前重连快照带回的终态行(completed / failed / killed)留在活跃集里 —— 没有任何过期机制(server 对快照里的终态行不配 remove 帧,`project()` 对活跃集里的行不看留存窗),页脚上停掉的后台子代行长驻;同根的两个旁支:task 帧终态行的 remove 帧若丢失同样长驻,`clearAllRetainedFleetRows` 清不掉它们,而快照不含该行的下一次重连又会把它当场抹掉(应保留到窗过)。现在 task 帧臂与 snapshot 臂经同一个入账口,终态行只进留存池(窗 `TERMINAL_RETAIN_MS` 从本地接收时刻起算,同一行重复投递续窗,被查看中的行不过期),活跃集只留非终态行:窗过被摘、清池清得掉、后一份不含该行的快照抽不走它、同尾段双生行收敛成一条、尾段上有在飞行时终态条目不留(与快照行序无关)。通知臂里「活跃集里的终态行」那一支随镜像退役 —— 留存池独立成路那一支原本就覆盖同一套方向规则(洗绿拦截 / 升级改写 / 前代挡)。
257
+ - **终态证据活过留存窗(CC-644)**:终态行只住留存池之后,「行帧确认过 failed / killed」这条证据不能随展示条目一起过窗消失 —— 台账为此另记一本按尾段的有界终态证据(状态词 + 周期,上限 512,与周期水位同族),写者是终态入账那一个入口,复活(非终态入账)按尾段撤销、换会话换账清空;证据账自己周期单调(更早一代的终态与复活之后迟到的前代终态帧不覆盖 / 不重植)。通知在行已退场、池条目已过窗或被清之后到达时,零命中路径把它与通知事实台账并列当先例:同周期的 completed 回声不再把已知的 failed / killed 记成成功(0.95.0:remove 到了的常规路径过窗即无拦;remove 丢失时靠长驻的活跃集镜像拦,镜像随本版退役),新周期的 completed 与升级方向(completed → killed)照常收下。
258
+ - **同批的读数变化(CC-644)**:① `FleetLedger.status().taskCount` 只数活跃(非终态)行;② `onBgNotificationAccepted` 的第二参 `rowIds` 只含活跃行(通知到达时该行已是终态 ⇒ 空);③ `onTaskRemoved` 读口的 `unknownRow` / `stale` 把留存池里行帧车道结算过的终态条目算作「账本持有这一行」(终态帧之后的离场帧仍不标 `unknownRow`;通知车道推定退休的条目与 0.95.0 一样不算);同一 id 的重复离场帧在窗内不再标 `unknownRow`;④ snapshot 里缺 id / 空 id / 非串 id / null 的项,以及 task 帧的非串 id,此前把 `undefined` 键写进活跃集或在尾段计算里抛 TypeError(拆帧消费循环),现按同一判丢弃并计 `droppedMalformed`,同批好行照收。
259
+ - **「这一问是否已决」三处判据对同一形答案不同(CC-602 / CC-646;接入文档 §123 HJ-2 / HJ-3,行为变)**:修前决断拒收分类(404 一律算「已在别处结算」)、中断撤卡的告警判定(404 另要成因词)与 `isAlreadyResolvedFailure`(sdk `NotFoundError` 类名算已决、不认 `conflict.ask_decided`)各有一份判据。现在三处读同一只 `decisionRefusalAskReading`:① `classifyDecisionRefusal` 对无成因词 / 成因读不出 / 表外词 / `unknown_or_other_replica` 的 404 与 404 `not_found.approval` / `not_found.checkpoint` 答 `refused-pending`(修前 `settled-elsewhere`),`decisionRefusalClosesOut` 对它读权威列表,仍在等才收口;`unknown_or_other_replica` 另带 `transient: true`(换副本再送才有意义),收口门对它不收口;② `isAlreadyResolvedFailure` 对 409 `conflict.ask_decided` 与 410 `gone.ask_parked` 答 `true`(后者是门已挪走、流会送来停驻卡),对码被剥掉的 `NotFoundError` 答 `false`,类名不再越过在场的码,带状态码的抛出物不再按失败文字判;两条决断腿的拍平结局除这两码外与 0.95.0 逐格同(失败文字词表照旧只在无机读位时作续读提示);③ 中断撤卡的告警判定与分类对每一形同答;相对 0.95.0,中断撤卡撞 410 `gone.ask_parked` 时改为照出「会话可能仍被锁」告警(修前静默,而那一问已转成停驻卡、仍在等),其余形告警与否不变。
260
+ - **会话历史错配的出路句不再靠「模块加载」才知道引擎能不能回退对话(CC-595;接入文档 §123 CR-6)**:出路句(`Run /rewind to recover the conversation.`)与次数句的说话前提里有一条「引擎明说没有对话锚就不补」,判官此前由能力位读面模块在加载时接给出路句叶子;`package.json` 声明了 `sideEffects: false`,打包宿主只引出路句叶子与总缓存、没人 import 读面模块时判官永远没接上,引擎明说无对话锚时仍补句(答案取决于 import 顺序)。现在出路句叶子直接读 `/rewind` 能力位读器 —— 与 `/rewind` 菜单同一份按落地记忆化的读数;接线口与模块变量退役(它们从未在根入口,公面零变化),全包钉死「顶层零加载期副作用语句」。
261
+ - **百分号编码的凭据在展示出口上不再原样上屏(CC-604,行为变:显示字节变;接入文档 §123 DC-3)**:凭据面的一次扫描多几只读面 —— 原文与屏上文本含可解的 `%XX` 时逐层(至多三层)解码,同一组识别网在解码读面上照跑,遮盖落回原文的转义字节(屏上不解码)。修前前缀网与标签网只看原文:`token%3D<低熵前缀形>`、`api_key%3D<值>`、`Authorization%3A%20Bearer%20<值>`、编码分隔与值之间隔空白、整条编码的地址原样上屏;高熵形只被裸值网偶然遮成 `token%«redacted:secret»`(把转义的两位十六进制并进记号)。现在一律 `token%3D«redacted:secret»` 形,前后诊断词逐字节留着;包内自铸句(合成终局行、结果帧错误、引擎错误行)走同一只扫描,一并受益。
262
+ - **路径前导的已知前缀凭据(CC-604,行为变;§123 DC-4)**:散文字面形网修前把 `/` 之后的词一律当路径段放行,`GET /sk-…`、`/v1/keys/sk-…` 与编码形 `%2Fsk-…` 原样上屏。现在已知前缀(整词随机段 ≥ 16,及粘在 `_` / `-` 之后的前缀)在 `/` 之后照遮;`file:` 地址里的段(`file:` 须起一个 token,嵌在请求路径 / query 值里的子串不算)、反斜杠与点之后照旧放行(本机路径),裸不透明值的形状判据在路径段上仍不判(随机段是 ID / 哈希)。
263
+ - KL-736(凭据前缀网不认 `%XX` 编码的分隔与路径前导)随上两条收口删行。
264
+ - **`-p` 帧的 `is_error` 与交互转录同一位(CC-649;§123 TR-3)**:工具名不是 Bash、结构化结果按退出码判失败(`structured` 是 bash 形、`exitCode` 非零且无良性注记)时,`-p` 帧此前标 `false`(只认工具名 `bash`)而交互转录标 `true`;反过来,正文缺席(或结构化结果只带 `exitCode`)而退出码非零时,交互转录此前标 `false`。现在「这次结果是不是错误」只在关卡结果层折一次(结构化退出读数不以正文在场为前提),两车道读同一位。
265
+ - **决断出口的失败句补上场景拒的专句(CC-389,行为变:失败句多一句;接入文档 §123 FS-2)**:续跑腿折叠 409(`resume_blocked_by_policy`)而原码是 `scenario_not_allowed` 时,审批 approve · deny、提问卡、计划审阅四条决断出口的失败句修前只有折叠句(点名原码、不带允许清单);现在折叠句之后补一句 `— The scenario this work resumes under is not in your allowed list · Available: <清单>`(补句组合口 `decideFailureNote` 第九臂;非折叠的 400 形同句;折叠句保留,它说的「是否已消费未知」是场景句不说的另一件事)。
266
+ - **四个出口的 `message` 不再兜底成裸类名 / `[object Object]`(CC-517 (a);接入文档 §123 FS-4,行为变)**:持久规则写 · 会话策略写 · 记忆治理 · MCP 探测四个出口共用的结构快照 `message`,兜底曾是 `String(e)`:抛出物是带类名而 `message` 为空的 Error 时屏上是裸类名,是无 `message` 的对象时是 `[object Object]`(0.94.0 CC-508 只收了另七处)。现在与那七处同一份读法(自带 message ⇒ 非空串 / 数 / 布尔 / bigint 抛出物的文本 ⇒ 固定兜底句 `the call failed with an error this client could not render`),两条读法回答同一问的存量收成一条(结构快照的 `message` 就是那一只取句函数的产物)。非 Error 的抛出物里,对象自带的 `toString()` 不再被当作句子。
267
+ - **子代转向口 `steerEngineSubagent` 的 `detail`(CC-517 (b);接入文档 §123 FS-5,行为变)**:`not-running` / `error` 两臂的 `detail`(终端渲 `Failed to message agent: <detail>`)修前是 `e instanceof Error ? e.message : String(e)` / `String(e)`:带类名而 message 为空 ⇒ 空串 / 裸类名,有 message 的 Error ⇒ 「Class: message」,对象 ⇒ `[object Object]`,已撤销的代理上 `instanceof` / `String` 还会抛。现在取同一份读法,原抛出物的日志形(含类名)只进宿主日志;`error` 臂带状态码时 `detail` 仍只是状态码字串(不变)。
268
+ - **计划审阅的结局句 `The plan_review decision failed: HTTP <status> <msg>` 同读法(CC-517 同形存量;接入文档 §123 FS-8,行为变)**:`<msg>` 修前同样是 `e instanceof Error ? e.message : String(e)`(message 为空 ⇒ 句尾什么都没有,对象 ⇒ `[object Object]`);现在取同一份读法,带自己 message 的错误句子逐字节不变。
269
+ - **后台停止口的能力门:`background.exitFaces` 子位不再普通取值(CC-653;接入文档 **§123 KY-7**;行为修正)**:`stopEngineSessionBackground` 先读 `capabilities.background.exitFaces`,父位走总缓存的显式态,子位却是 `Object.hasOwn` + 普通取值 —— 子位是自有访问器时取值器**会执行**:返回 `true` 的访问器能把门打开(请求发了出去),抛的靠口内 `catch` 分类成 `capability_unknown`。现在两层都经总缓存的嵌套位读口(自有数据位、访问器不执行、显式五态),`unreadable` ⇒ `capability_unknown`,`not_reported` / 非 `true` ⇒ `no_exit_face`,只有数据位字面 `true` 放行;零请求、取值器零执行。
270
+ - **`capability_unknown` 的句子按成因分向(CC-653;**§123 KY-9**)**:此前「还没读到」与「读到了但这一位读不出」共用一句「等探测落定再调」—— 对读不出的位(访问器 / 读描述符就抛)永远等不到。现在两句一张表:没落地 ⇒ 等探测落定再调(不变);读不出 ⇒ 说引擎报的形本端读不了、这条连线上再调不会变;表外成因走通用句,两句都不回显回体里的任何原词,都点明零请求。
271
+ - **同形存量两处同批收口(CC-653;**§123 KY-10**)**:`readEngineAgentRegistry` 的 `caps.background.listFace`(此前普通取值:返回 `true` 的访问器让门打开、请求发出)与根入口 `engineSupportsTaskAgents` 的 `taskAgents` 位(此前注入 client 腿上取值器抛会直接抛出调用,返回 `true` 的访问器读成确证支持)。现在都读自有数据位、取值器不执行:前者读不出 ⇒ `read_failed`(与「明说没有」`no_list_face` 分得开),后者读不出 ⇒ `undefined`(无法确证),数据位行为逐字不变。
272
+ - KL-724(落地之后宿主就地改写回体,两类读口可分叉)随快照落地收口删行(见上 `### Changed`)。
273
+ - **提交幂等的重放体在结果帧上不再被当成引擎结果**(CC-636 ①;接入文档 **§123 PA-2**):服务端 ≥7.125.0 的重放体(sdk 20 `RunReplayRecord`)是 run 行的读面,引擎结果在嵌套的 `result`。修前结果帧投影 `doneToSdkResult` 把外层行当引擎结果读 —— `result` 落成整只嵌套对象、`num_turns` 落 0、选中模型缺席;现在读嵌套那一份(会话 id 取嵌套回显,缺席取行上的),终局分流照读整份载体。
274
+ - 计划审阅决断结局(CC-661):决断后任务落 `failed` / `blocked` / `timeout` 等非完成状态不再判 `took_effect`、不再说「resumed to completion」(今判 `unconfirmed`,正文只陈述读数);决断 200 体自述卡仍待决(`retriable: true`)判 `still_parked`(此前回拉读到 `suspended` 时判成推进到新门);决后仍 `needs_review` 而说不出是不是同一道门 ⇒ `unconfirmed`(此前断言「同一道门、没生效」);「推进到新的审批门、下一张卡会跟上」只在回拉读得出新停驻且那道门有决断卡时说(停在 `resource_limit` / `task_done` 等或门种读不出 ⇒ `unconfirmed`);「re-checked」只在状态来自决后回拉时写(§123 PP-1)。耐久审批取件:身份点名的待决行门种不归审批腿时不再回落到同一任务的另一行(§123 PP-6)。
275
+ - **传输失败分类:`terminated` / `other side closed` 两项按整词判(CC-694;接入文档 §123 NF-1;[10296] ①)**:网络词面基表 `WIRE_NETWORK_ERROR_PATTERN` 里这两项此前是裸子串 —— `SyntaxError('Unterminated string in JSON at position 0')` 的消息含 `terminated`,被 `classifyTurnWireError` / `isWireTransportError` 判成 `transport`(连接类失败),端上渲成「连接断了」;现在这两项加字边界,这条错判 `internal`。undici 原句(`TypeError: terminated` / `SocketError: other side closed`)判决不变,`cause` 在场仍先判 `transport`;基表其余十一项(errno 码、`UND_ERR` 码前缀族、`fetch failed`、`socket hang up`)逐项原样,导出名 / 型零变。端自带的词面表(网页端 `NETWORK_PATTERNS`)要同批加边界,见接入文档 123d。
276
+ - **不可信文本出口的凭据网补三形(CC-695;接入文档 §123 NF-2;[10296] ②;行为面收紧)**:① 粘连名 —— 名字以单数凭据词(token / key / secret / password / authorization / credential)收尾、前面粘着任意字母 / 数字的(`PGPASSWORD=<值>` / `CUSTOMSECRET=` / `MYAPIKEY=` / `dbPassword:` / `{"githubToken":…}` / `secretAccessKey=` / `privateKey:`),此前值原样上屏(只有词首与下划线之后的名字算标签:`FOO_TOKEN=` 遮而 `PGPASSWORD=` 不遮);现在遮值、名字留着。不收:复数(`maxTokens` / `inputTokens` / `MAXTOKENS` 是计量词)、名字后还有字(`tokenizer=` / `keyboard=` / `passwordless=` / `KEY_ID=`)、英文词 `monkey` / `turkey` / `donkey` / `hockey` / `whiskey` / `jockey` / `lackey`;配置地址的 query 键名判据(`queryCarriesCredential` / `displayConfiguredUrl`)与词级网读同一只标签判据,粘连名的键同步带凭据。② 方案词 `bearer` / `basic` 左边紧贴词字符(`_Bearer <值>` / `x_Bearer` / `1Bearer` / `xBearer`)此前原样上屏;现在遮值(`token` 方案词的左界不动)。③ 已知凭据前缀打头、其后一整段字母数字 ≥ 6 字的词(`sk-abcdefghijk` / `ghp_abcdef`)此前被「最长连续段 ≥ 16」的门槛放过;现在整词换记号。这道 16 的门槛是本包散文网自己加的(上游字面形判据对 `sk-abc` 这类短形照认、无长度下限),连字符分段的仓名(`sk-video-generation-toolkit`)与 5 字以内的短名(`sk-video` / `sk-tools`)仍放行。三形都只向多遮方向动,修前已遮的形一字节不变 —— 新认的词只当外层标签用,不当「里层词」去截断一只包着它的外层值(旧标签整段遮住的值里嵌着 `abcPassword=https://h/…` 之类仍整段遮,门 NF3d / NF3e 与差分门的嵌套形池钉)。门 DO15 的族外键一侧随之把 `PGPASSWORD` / `secretAccessKey` / `privateKey` 挪到成员一侧(词表一个词没加,变的是名字可以粘在别的字后面);KL-84 / KL-627 相应订正。已知限制见 KL-755 – KL-757。
277
+
278
+ ### Gates
279
+ - 新门 24 道(包侧投影门三件:门 / gates-manifest 登记 / README Guards 行):
280
+ - `run-active-run-busy-read-projection-test.mjs`:🆕 0.96.0 CC-631(0.95.0 CC-391 的同轴孪生)· CC-685(≤7.124.x 重放臂退役;包侧投影门三件之一):「会话已有在跑的 run」终局行 / 结果帧 / 公面判别口同一条读法 —— RB0 尺子(扁平 409 恰一行锁定句)· RB4 一池 16 帧(扁平 / ≤7.124.x 无…
281
+ - `run-approval-card-v1-projection-test.mjs`:🆕 0.96.0 CC-449(包侧投影门三件之一):v1 呈卡帧卡面 → 卡入参事实的唯一投影口 `approvalCardFactsOfV1` —— V1 两腿一读法:sdk 帧键锚与卡键锚的交集逐键喂同值(正形 + 坏形)给活卡帧腿与 v1 口,卡入参同在同缺同值(候选按作答通路落位:活卡帧 ruleOffers…
282
+ - `run-bg-subagent-row-test.mjs`:🆕 0.96.0 CC-643(包侧投影门三件之一):后台子代身份判定三端共用一只谓词(自终端壳 fleetBgSubagentRow 整只上收)—— G0 公面 · G1 句柄契约(DURABLE_AGENT_HANDLE_RE == 已装 core 同名正则;非 agent 句柄前缀字母 == core 登记簿 m…
283
+ - `run-credential-provenance-test.mjs`:CC-170 U3 云模式凭据来源纯判词 `credentialProvenance(facts)`(词表 = 终端设计稿 `credential.attach` 四词 `local-sidecar` / `service-token` / `registry` / `none`,携带计划表 A 的行逐行字面钉):入参…
284
+ - `run-display-credential-reach-test.mjs`:🆕 0.96.0 展示出口凭据网的射程门(包侧投影门三件之一;CC-604 KL-736 收口 + CC-288 T1):DC 段 —— 百分号解码读面是同一次扫描里的几只读面(原文与屏上文本各自逐层 ≤ 3 层解码、解码字映回整枚 `%XX`,同一组候选生成器照跑,遮盖落回原文、屏上字节不解码):低熵 / 高熵编码分…
285
+ - `run-durable-decide-leg-test.mjs`:🆕 0.96.0 CC-662(包侧投影门三件之一):待决行门类判别单源 —— 门种 → 耐久决断腿一张表 + 一只判定口 `durableDecideLegOf`。DL1 三表值(ASK = human / irreversible_ask;PLAN = plan_review;REVIEW = plan_revie…
286
+ - `run-engine-account-keys-projection-test.mjs`:🆕 0.96.0 CC-654(引擎 7.49.0 余五键的包侧投影,承 CC-606 的重试帧 / 工具轮结局两位):P 产品面七名在 dist 根入口 / T `tool_start.recovered` —— 正控(开始帧 assistant 信封多超集键 `_sema_tool_recovered: true`…
287
+ - `run-engine-directory-test.mjs`:CC-622 云控制面执行体目录 / 我的执行体两条读口回体的投影与判定:回体整个不成形 ⇒ 读数作废(undefined),不冒充「零台」(`engines: []` / `candidates: []` 才是零台的正面事实)· 读不出的行不连坐别的行并计入 `unreadableRows`(名册不再宣称完整)· 🔴…
288
+ - `run-fail-sentence-test.mjs`:🆕 0.96.0 用户面失败句两件(G-FS-A–H;CC-389 / CC-517;包侧投影门三件之一):A 场景拒出句单源 `scenarioNotAllowedContent(detail, requestedScenario?, surface?)` —— 缺省('request')面对终端现句的冻结旧实现 4…
289
+ - `run-file-history-tighten-test.mjs`:🆕 0.96.0 CC-443(包侧投影门三件之一;实现住 `dist/fileHistoryCaptureCapability.js` 与总缓存 `dist/engineCapsCache.js`):文件检查点「判不出 × 用户要收紧 ⇒ 拒」+ 已缓存坏位的单飞重探 —— S 公面:`FILE_HISTORY_TI…
290
+ - `run-fleet-terminal-retain-test.mjs`:🆕 0.96.0 CC-644(包侧投影门三件之一):fleet 台账终态行只有一处归宿、一只处置函数 —— 终态行只住留存池、活跃集只留非终态行,task 帧臂与 snapshot 臂经同一个入账口(`admitRow` → `settleTerminalRow`)。修前 snapshot 带回的终态行留在活跃集、永…
291
+ - `run-notice-presentation-test.mjs`:🆕 0.96.0 CC-462(通告呈现设计的包口;包侧投影门三件之一):通告呈现事实 —— C 句界截断原语 `cutForDisplay`(放得下原样含恰等于预算;句界 → 子句 → 词界 → 字符,每级保住至少一半可用长度,否则降级;`boundary:'word'` 跳过句界与子句;记号计…
292
+ - `run-plan-review-outcome-verdict-test.mjs`:🆕 0.96.0 CC-661(包侧投影门三件之一):计划审阅决断结局判法单源 + 公面口带决断前门身份。一条规则 = 每个结局词只由正面证据给出,证据不足一律 unconfirmed;判官只有 `planReviewSettledVerdict` 一只、句子按判词选。POV1 failed(approve / rej…
293
+ - `run-print-permission-outcome-test.mjs`:🆕 0.96.0 CC-485(终端请托;包侧投影门三件之一):`-p` 车道权限结局行 `printPermissionOutcomeOf` 只读引擎的结局(`tool_end.gate.disposition`,经真读口 `gateOutcomeOf`),三形闭集一张句表 —— M 模式拒…
294
+ - `run-prompt-blocked-sentence-projection-test.mjs`:🆕 0.96.0 CC-603(终端请托;包侧投影门三件之一):被 `userPromptSubmit` hook 挡下提示的终局(`blocked` ∧ `detail.kind === 'prompt_blocked_by_hook'`)按 `detail.cause` 出 CC 形句 —— PB1…
295
+ - `run-refusal-machine-reads-test.mjs`:🆕 0.96.0 CC-578(终端 [9910] ③④⑤ 包侧请托;包侧投影门三件之一):审批 / 规则拒绝结局上三件机读位 —— 规则一句:一次拒绝的成因只有一个机读位,就在那一类结局已有的位上。RF3 规则编译器拒收的码与句随报告口 `kept[]` 那一行走(`compile_refused` 行带 `code…
296
+ - `run-seat-recents-test.mjs`:🆕 0.96.0(CC-574;包侧投影门三件之一):座位「最近目录」两动词 + 能力位 `recents` + 唯一读法。一条规则 = 最近目录 = 会话记录行 `cwd`(有会话的目录,派生、宿主不登记)∪ 宿主登记行(用户选过的目录),读法只有 `recentFoldersOf` 一只。RC1 登记(两动词进动词…
297
+ - `run-seat-session-patch-test.mjs`:🆕 0.96.0(CC-634;包侧投影门三件之一):座位「会话行改名 / 置顶」一只可缺动词 `patchSession` + 入站判官 + 能力位。一条规则 = 写口只有这一只座位动词、判官只有 `checkSessionRowPatchRequest`、回执就是既有行形 `LocalSessionRecord`(…
298
+ - `run-seat-settings-default-model-test.mjs`:🆕 0.96.0(CC-572;包侧投影门三件之一):座位设置态不再另存缺省模型 —— 缺省模型只一口:`liveDefaultModelOf(listModels() 的结果)`。SD1 型(`SettingsState` 成员恰 engineVersion / dataRoot,TypeScript AST 读构建…
299
+ - `run-server-7125-pick-test.mjs`:🆕 0.96.0(服务端 7.125.0 / sdk 20 提货 + 支持底线三件同号;CC-636 + CC-633,包侧投影门三件之一;判据 §123c G-PA1 – G-PA7):R 提交幂等重放体 —— 终局读口按严格 `replay === true` 分流、读嵌套引擎结果、缺席读行状态(…
300
+ - `run-session-sync-file-history-test.mjs`:🆕 0.96.0 CC-408(CC-502 / CC-463 P2-c 并入;包侧投影门三件之一;实现住 `dist/sessionSyncFileHistory.js`,根入口具名转出四只运行期口):会话同步「文件历史没搬」的用户面事实 —— S 公面:四只口在根入口与叶子同一对象、在公面基线里,`NOT_FOUN…
301
+ - `run-standing-rows-test.mjs`:🆕 0.96.0 CC-482(包侧投影门三件之一):卡上三行放行的单一判官 `standingRowsOf(card, host?)` —— 放宽方向闭合失败:R1 卡读不出(非对象 / 读就抛)三行都不给 · R2 rememberRefused 严格 true(自有或原型链)三行都不给、候选在场也不给 · R3 …
302
+ - `run-tool-result-content-projection-test.mjs`:🆕 0.96.0 CC-641(包侧投影门三件之一):工具结果正文 `tool_end.output` → 转录 `tool_result.content` 的唯一投影(零 import 叶 `toolResultContent.ts`,块形照 CC 2.1.296 外来工具结果内容归一那一只)—— I 读得出的图像块…
303
+ - `run-user-facing-sentence-readers-test.mjs`:0.96.0 三句用户面句的读口(CC-549 / CC-584 / CC-579;包侧投影门三件之一),每格断言最终渲出来的行文本 + 键 / 降级句 / 决策句:A 服务商 400 分类 —— A0 根入口只出闭集 `PROVIDER_REJECTION_KINDS`(冻结、五词、基线同批),不出自由函数 `pro…
304
+ - 对上一发布产物逐字节对拍的两格改登记形(合车):`terminal-cause-projection` G-PRC6e(除 0.96.0 加性位 `kind` 外逐字节同)/ G-BD7d(除 completed.detail 位外逐字节同,被剥的恰是读作 completed 且输入 detail 带自有 kind 串的那一类);`client-core-pure` G-BG5a 登记 TaskOutput 内容形有意差分;`server-7125-pick` Z1 会话行 pinned 零读点钉改登记形(恰 `src/seatContract.ts` 一处)。
305
+
306
+ ### Known limits(本版新增)
307
+
308
+ - KL-746:`runModelSwitchProbe` 在宿主端口永不落定时无自带时限(时限属宿主传输层;test 验收 [10156] G-SB60)。
309
+ - KL-747:变体选择符(U+FE00 – U+FE0F、U+E0100 – U+E01EF)与其余非格式类的默认可忽略码位不在字符表里 —— 一枚基字后跟一串变体选择符可夹带不可见字节;合法 emoji 呈现与异体字序列依赖它们,按语境标另立判据。
310
+ - KL-748:服务商 400 / 422 的 schema 细分靠本包持有的六词回声词表(服务商公开词的镜像,无实抓证据);Anthropic 家族对一切 400 报同一个通用型,分不出 schema、保持原状态档(CC-549)。
311
+ - KL-749:百分号解码读面只解 ASCII 转义、至多三层(与上游字面形判据的容错逐个解码同一读法):编码的非 ASCII 分隔 / 空白(全角 `=` 的 `%EF%BC%9D`、`%C2%A0`)与第四层起的编码在自由文本出口上看不见;配置地址展示口与上传判据对解不完的值按带凭据处置。
312
+ - KL-750:已知前缀凭据在反斜杠 / 点之后与 `file:` 地址里照旧放行(本机路径读法);反过来,`/` 之后以已知前缀打头且随机段 ≥ 16 的 POSIX 目录名本版起被遮(多遮)。
313
+ - KL-751:服务端 7.115.x 结构性不带 `rememberRefused` ⇒ 缺席读作「引擎没声明记不住」,`standingRowsOf` 在这一代上照给会话行 / 名单会话行;引擎实际没记住时,由作答回执的记住回显与「记住未生效」告知说真话(CC-482)。
314
+ - KL-752:`judgeFileHistoryTighten` 的重探没有自带时限 —— 宿主的能力探测闭包永不落定时,在飞的那一发一直占着该地址的单飞位,之后的调用都并入它、各自按自己的 `withinMs` 放弃等待并给拒句(时限属宿主传输层;与 `kickEngineCapsProbe` 的在飞位同)。
315
+ - KL-753:重探口复用总缓存里真起跑过的最后一只探测闭包,被幂等闸挡回的 `kickEngineCapsProbe` 不改写登记 —— 同一地址令牌轮换后客户端重建、新闭包只交给被挡回的 kick 时,「回体已落地而这一位读不成形」的重探仍调首探那只闭包(旧令牌若已失效则恒败、关了检查点的用户被拒);换新闭包的通道是两参 `invalidateEngineCaps(baseUrl, probe)`。
316
+ - KL-754:≤7.124.x 服务端幂等重放臂回放的无 `status` 409 冲突体,公面判别口 `activeRunBusySignal` 不再认(答 `null`,CC-685),包内判据 `frameProvesDelivery` 因此把它读成「建了 run 的帧」—— 投递账本记 delivered、文件历史绑定把提交绑到一个并未建出的 run;终局行落 `Outcome unknown` 一行。这一形只有低于支持底线(服务端 7.125.0)的服务端才发,包不为出支持范围的服务端保留过渡臂;宿主让附着门放行 ≤7.124.x 的服务端时才会碰到。
317
+ - KL-755:凭据标签的粘连名只认单数收尾 —— 粘连复数名(`adminTokens=` / `BOTKEYS=`)原样(计量词 `maxTokens` / `inputTokens` 与它同形不可分);`key` 收尾的英文词只排除 `monkey` 一族七词,表外的(`hotkey` 等)与以 `key` / `token` 收尾的普通驼峰名(`cacheKey: abc`)值被遮(多遮,与下划线形同类)(CC-695)。
318
+ - KL-756:方案词 `bearer` / `basic` 左界放开与已知前缀短形门槛(整段字母数字 ≥ 6 字)带来两类多遮(另:连字符 / 下划线分段的短 `sk-` 值不遮,与仓名不可分):词尾是 `bearer` / `basic` 的英文词后接放行表之外的词(`pallbearer carried it`);6 字以上单段字母数字的 `sk-` / `ghp_` 打头仓名 / 包名(`sk-converter`)(CC-695)。
319
+ - KL-757:标签值恰是诊断词闭集里的词(`none` / `null` / `basic` / `missing` …)时不遮 —— `PGPASSWORD=Basic` 的值原样,桌面端冻结的本地句式网(任何值都遮)会遮这一形(CC-695;门 NF4c 钉现状)。
320
+
52
321
  ## 0.95.0(2026-10-12)
53
322
 
54
323
  > 主题:终端 1.0.147 对接版 —— 引擎 7.48 / 服务端 7.124 / 设置契约 11 / sdk 19 提货(型面 BREAKING:终态词表 / 谓词改名带属主、`absent` 退词、七条过渡臂退役);面板行归约口;能力位读器族与终态词表收口;审批成因闭集与排空期重开;审批卡跨腿持有(同一张卡只在一条腿上出);技能工具表随能力位上 wire;0.95.0 窗内欠账按票收口(各条见 Fixed / Changed)。