@sema-agent/client-core 0.112.0 → 0.113.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.
- package/CHANGELOG.md +153 -0
- package/README.md +37 -24
- package/dist/adapt/arms.js +7 -1
- package/dist/adapt/textStream.d.ts +2 -0
- package/dist/adapt/textStream.js +27 -1
- package/dist/adapter/activeRunSelfHeal.d.ts +7 -5
- package/dist/adapter/activeRunSelfHeal.js +38 -66
- package/dist/adapter/downstream/eventToSdkMessage.js +4 -0
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +8 -0
- package/dist/adapter/downstream/terminalToSdkResult.js +36 -1
- package/dist/adapter/runStream.d.ts +2 -12
- package/dist/adapter/runStream.js +46 -19
- package/dist/agentSession/engineAgentRegistryRead.js +2 -1
- package/dist/agentSession/engineSessionBackgroundStop.js +2 -2
- package/dist/attachmentOutcome.d.ts +35 -0
- package/dist/attachmentOutcome.js +192 -0
- package/dist/attachmentPathPlan.d.ts +67 -0
- package/dist/attachmentPathPlan.js +203 -0
- package/dist/attachmentRoute.d.ts +9 -1
- package/dist/attachmentRoute.js +23 -2
- package/dist/declared/supportFloorDeclared.d.ts +1 -1
- package/dist/declared/supportFloorDeclared.js +1 -0
- package/dist/deviceRebind.js +2 -3
- package/dist/displayUntrusted.js +126 -19
- package/dist/engineAddress.d.ts +1 -1
- package/dist/engineAddress.js +9 -6
- package/dist/engineErrorCodes.d.ts +3 -0
- package/dist/engineErrorCodes.js +4 -0
- package/dist/engineNoticeCodes.d.ts +34 -4
- package/dist/engineNoticeCodes.js +133 -6
- package/dist/engineUnavailable.d.ts +4 -2
- package/dist/engineUnavailable.js +99 -17
- package/dist/fleet/fleetLedger.d.ts +9 -3
- package/dist/fleet/fleetLedger.js +112 -16
- package/dist/fleet/fleetProjection.d.ts +5 -0
- package/dist/fleet/fleetProjection.js +9 -1
- package/dist/gateVocabulary.d.ts +7 -0
- package/dist/gateVocabulary.js +40 -14
- package/dist/generated/engineFactTables.d.ts +4 -2
- package/dist/generated/engineFactTables.js +198 -2
- package/dist/generated/engineNoticeTables.js +56 -8
- package/dist/generated/settingsSchemaFns.d.ts +7 -0
- package/dist/generated/settingsSchemaFns.js +11 -0
- package/dist/generated/settingsSchemaHash.d.ts +1 -0
- package/dist/generated/settingsSchemaHash.js +58 -0
- package/dist/generated/settingsSchemaOwnKeyRead.js +6 -1
- package/dist/generated/settingsSchemaTables.d.ts +3 -2
- package/dist/generated/settingsSchemaTables.js +14 -0
- package/dist/generated/settingsSchemaTightenVerdict.d.ts +1 -0
- package/dist/generated/settingsSchemaTightenVerdict.js +125 -0
- package/dist/headlessPermissionModeWire.d.ts +7 -2
- package/dist/headlessPermissionModeWire.js +77 -8
- package/dist/hitl/approvalDecisionDoor.d.ts +24 -0
- package/dist/hitl/approvalDecisionDoor.js +77 -0
- package/dist/hitl/approvalDelivery.d.ts +6 -0
- package/dist/hitl/approvalDelivery.js +57 -7
- package/dist/hitl/approvalResolution.d.ts +6 -3
- package/dist/hitl/approvalResolution.js +24 -2
- package/dist/hitl/approvalsFeed.js +1 -1
- package/dist/hitl/automaticAnswerVerdict.d.ts +1 -1
- package/dist/hitl/decisionSend.d.ts +7 -4
- package/dist/hitl/decisionSend.js +90 -41
- package/dist/hitl/frameRouter.d.ts +3 -3
- package/dist/hitl/frameRouter.js +5 -0
- package/dist/hitl/hitlBridge.d.ts +1 -0
- package/dist/hitl/hitlBridge.js +17 -4
- package/dist/hitl/hitlHostSurface.d.ts +3 -2
- package/dist/hitl/hitlHostSurface.js +5 -3
- package/dist/hitl/legacyApprovalShapes.d.ts +142 -0
- package/dist/hitl/legacyApprovalShapes.js +1 -0
- package/dist/hitl/livePendingAsk.d.ts +4 -4
- package/dist/hitl/livePendingAsk.js +5 -3
- package/dist/hitl/parkResolver.js +1 -1
- package/dist/hitl/persistedRulesWire.js +2 -2
- package/dist/hitl/planReviewCard.d.ts +4 -2
- package/dist/hitl/planReviewCard.js +66 -1
- package/dist/hitl/planReviewWire.d.ts +34 -2
- package/dist/hitl/planReviewWire.js +326 -150
- package/dist/hitl/sessionPolicyWire.js +16 -7
- package/dist/hitl/subagentSource.d.ts +1 -0
- package/dist/hitl/subagentSource.js +11 -0
- package/dist/hitl/toolApprovalWire.d.ts +34 -10
- package/dist/hitl/toolApprovalWire.js +182 -33
- package/dist/hookMatcherVerdict.d.ts +2 -1
- package/dist/hookMatcherVerdict.js +3 -2
- package/dist/hooksReaderGenerations.d.ts +8 -0
- package/dist/hooksReaderGenerations.js +49 -0
- package/dist/hooksWireCaps.js +43 -18
- package/dist/hostSettingsSource.d.ts +1 -1
- package/dist/hostSettingsSource.js +2 -2
- package/dist/hostTurnSettings.d.ts +2 -2
- package/dist/hostTurnSettings.js +87 -47
- package/dist/humanTurn.d.ts +2 -1
- package/dist/humanTurn.js +44 -13
- package/dist/humanTurnRead.d.ts +7 -0
- package/dist/humanTurnRead.js +23 -14
- package/dist/humanTurnSentences.js +3 -0
- package/dist/i18n/messages.en.d.ts +93 -5
- package/dist/i18n/messages.en.js +100 -12
- package/dist/i18n/messages.zh.js +110 -15
- package/dist/index.d.ts +29 -15
- package/dist/index.js +17 -9
- package/dist/liveModelCatalog.js +1 -0
- package/dist/liveQuestionStore.d.ts +2 -0
- package/dist/liveQuestionStore.js +7 -2
- package/dist/localConfig/kernel.d.ts +2 -1
- package/dist/localConfig/kernel.js +12 -18
- package/dist/localConfig/mcp/edit.js +25 -27
- package/dist/localConfig/mcp/servers.js +5 -8
- package/dist/localConfig/modelPool.d.ts +6 -1
- package/dist/localConfig/modelPool.js +104 -27
- package/dist/localConfig/modelPoolWords.d.ts +2 -0
- package/dist/localConfig/modelPoolWords.js +1 -0
- package/dist/localConfig/settingsWrite.js +1 -14
- package/dist/localConfig/skills.js +9 -16
- package/dist/localEngineSpawn.d.ts +29 -1
- package/dist/localEngineSpawn.js +62 -1
- package/dist/mcpLiveness.d.ts +1 -1
- package/dist/mcpProbeWire.js +2 -2
- package/dist/mcpReconnect.js +2 -2
- package/dist/model/catalogLoader.js +3 -17
- package/dist/model/onboardJudgement.d.ts +8 -0
- package/dist/model/onboardJudgement.js +8 -3
- package/dist/model/onboardSteps.d.ts +19 -0
- package/dist/model/onboardSteps.js +76 -0
- package/dist/notifications.js +20 -12
- package/dist/ownKey.d.ts +4 -0
- package/dist/ownKey.js +61 -0
- package/dist/pathShape.d.ts +14 -0
- package/dist/pathShape.js +44 -0
- package/dist/planReviewCardFacts.d.ts +3 -0
- package/dist/planReviewCardFacts.js +20 -3
- package/dist/planReviewOutcomeCause.d.ts +2 -0
- package/dist/planReviewOutcomeCause.js +12 -0
- package/dist/pluginHooksWire.d.ts +20 -8
- package/dist/pluginHooksWire.js +204 -86
- package/dist/prepareRefusal.d.ts +2 -0
- package/dist/prepareRefusal.js +11 -1
- package/dist/request/taskRequest.js +3 -1
- package/dist/resultFrameKeys.d.ts +1 -0
- package/dist/resultFrameKeys.js +3 -0
- package/dist/resumeRefusalCopy.js +3 -1
- package/dist/retryStatus.d.ts +11 -1
- package/dist/retryStatus.js +15 -4
- package/dist/runTerminal.d.ts +1 -0
- package/dist/runTerminal.js +15 -1
- package/dist/sdkWireTransit.d.ts +1 -1
- package/dist/seatContract.d.ts +12 -3
- package/dist/seatContract.js +24 -13
- package/dist/sessionEngine.js +1 -1
- package/dist/sessionHooksRoster.js +8 -6
- package/dist/sessionIdSegment.d.ts +0 -1
- package/dist/sessionIdSegment.js +1 -3
- package/dist/sessionMemoryErase.js +2 -2
- package/dist/sessionMemoryStatus.js +2 -1
- package/dist/sessionOccupant.d.ts +29 -0
- package/dist/sessionOccupant.js +78 -0
- package/dist/settingsHooksSalvage.d.ts +4 -1
- package/dist/settingsHooksSalvage.js +22 -9
- package/dist/skillOverrideChain.d.ts +3 -0
- package/dist/skillOverrideChain.js +31 -4
- package/dist/skillsWireCaps.d.ts +16 -2
- package/dist/skillsWireCaps.js +47 -20
- package/dist/subagent/agentStateDetail.js +32 -8
- package/dist/subagent/engineCompactWire.js +48 -36
- package/dist/subagent/engineDelegatedPrompt.d.ts +3 -2
- package/dist/subagent/engineDelegatedPrompt.js +65 -28
- package/dist/subagentEditOutcomes.d.ts +9 -0
- package/dist/subagentEditOutcomes.js +43 -0
- package/dist/supportFloor.d.ts +2 -1
- package/dist/supportFloor.js +1 -1
- package/dist/toolResult.js +4 -2
- package/dist/toolRoster.d.ts +1 -0
- package/dist/toolRoster.js +1 -0
- package/dist/usageAnalytics.js +2 -1
- package/dist/userAttachmentEnvelope.d.ts +11 -0
- package/dist/userAttachmentEnvelope.js +7 -2
- package/dist/userAttachmentSeat.d.ts +7 -1
- package/dist/userAttachmentSeat.js +44 -7
- package/dist/wiringInstructionsAttribution.js +8 -2
- package/docs/INTEGRATION-CLIENTS.md +1654 -16
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -49,6 +49,159 @@
|
|
|
49
49
|
> 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
|
|
50
50
|
> commit 漏转在发布前就红,不再靠人记。
|
|
51
51
|
|
|
52
|
+
## 0.113.0(2026-11-12)
|
|
53
|
+
|
|
54
|
+
> 主题:审批决断跟随服务端的决断门(服务端 7.152.0 起必需);计划审阅的决断与结局更可靠(受理快照只读一份、结局有机读位与一句、卡发布前核对对话仍在);钩子交不交引擎按对端的设置契约判、守卫事件与条目键按服务端能力读;本机引擎与地址:自起引擎绑别处须显式打开开关、拒启读口认出路表新形、配置地址展示补严、引擎目标地址变严;首次接入有一只步骤计划,模型池视图对读不出的环境与用户设置如实说(接入文档 **§143 AD-1 – AD-3 · OB-1 – OB-7 · PR-1 – PR-7 · PB-1 – PB-4 · SS-2 / SS-4 · HW-1 – HW-5 · BG-1 – BG-6 · EU-9 – EU-12 · CF-1 · EA-1**;🔴 行为变 + 型面 BREAKING,逐条见下)
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- **自起引擎绑址门(CC-1459;接入文档 §143 BG-1 – BG-6)**:宿主自起的本机引擎缺省只绑 `127.0.0.1`;绑别处须宿主显式打开一个开关(宿主把开关读成布尔、经 `bindAcknowledged` 交给包),打开时一句风险提示。新增纯函数门 `localEngineBindGateOf({ requested, acknowledged })` ⇒ `pass{ handed, disclose }` 或 `refuse{ reason: 'bind-not-acknowledged' }`:缺省 = 请求缺席 / 非串 / 空 / 去首尾空白后恰为 `127.0.0.1` ⇒ `pass{ handed: undefined, disclose: false }`(不覆写、不披露);其余任何值(`::1` / `localhost` / `127.0.0.2` / `127.1` / `0.0.0.0` 一视同仁,不做地址分类与规范化)要开关:开 ⇒ `pass{ handed: <去首尾空白后的请求原串>, disclose: true }`,没开 ⇒ 拒;开关只认自有数据位上的 `true`(缺席 / `'true'` 串 / 数 / 访问器 / 只在原型上的 `true` 都按没开);判的串就是交的串,由包派生,宿主没有另交 `handed` 的位;永不抛、结果冻结。随之:播种拒因闭集 `LOCAL_ENGINE_SEED_REFUSALS`(`policy-unreadable` · `bind-not-acknowledged`)· 披露词闭集 `LOCAL_ENGINE_BIND_DISCLOSURES`(`bind-acknowledged`)· 机读码由词单向派生的 `localEngineSeedRefusalCodeOf`(`bind_not_acknowledged`,全仓只此一处铸)· 两语句口 `localEngineBindSentence(gate, switchKey, lang?)`(拒句回显宿主交入的开关键名恰一次并给两条出路 —— 把 `BIND_HOST` 改回 `127.0.0.1` 或删掉 / 打开开关接受风险;披露句 = 一句风险提示:别的机器或本机别的程序可能连上它并以你的身份执行命令)。
|
|
59
|
+
- **附件判词口按用途作答 · 附件判官 path 臂(CC-1390;§143 PA-1 / PA-2 / PA-7;型面加性:根入口 +1 型名 `AttachmentRouteFallback`,零新运行期名)**:`userAttachmentSeatAdmits(reading, use?)` 加可选 `use = { supply?, scenario?, lane? }`(`use` 缺席与上一发布逐字节同);`supply: 'path'` 只在席位入口含本车道词、席位供给含 `path`、且场景卡的 `attachmentSupplies` 读得出并含 `path` 时答 yes,卡没交 / 卡上无此位 / 坏形 ⇒ unknown,读得出而不含 ⇒ no。`attachmentRouteOf` 加 `seat` / `scenario` / `lane` 三入参与 `{ route: 'attach_path', otherwise }` 臂:工具在本机 ⇒ 原表照答、三新位不读(本机会话的 `@` 本版不变);工具不在本机或位置确认不了 ∧ `at_mention` ∧ path 维为 yes ⇒ `attach_path`(`otherwise` = 原表的不附形);其余腿永不 path;三入参缺席与 0.111.0 逐字节同。
|
|
60
|
+
- **附件批组合口 `attachmentRoutePlanOf` · path 描述符编码(CC-1390;§143 PA-3 / PA-4;型面加性:根入口 +2 运行期名 `attachmentRoutePlanOf` / `attachmentPathOverflowText`)**:组合口逐件问附件判官,答 `attach_path` 的件按提及序过路径与行段合法性、依序占席位 `maxEntries` 位,出与入参同长同序、逐层冻结的步表(`send_path` / `read_local` / `withhold`;没排上的路径件带 `pathFallback`);只在批坏形(`malformed_input`)或 `uuid` 重复(`duplicate_uuid`)时整批拒。path 描述符 `{ kind: 'path', name, path, lines? }` 只取自 `send_path` 步;`encodeHumanTurn` 按同一只判词口复判(新可选位 `HumanTurnCaps.scenario`),不收 ⇒ 引用形 `path_not_admitted`,steer 车道 ⇒ `lane_has_no_path_seat`;path 件先于内容件入座、不参与体积降级挑选;正文为空且只有 path 座 ⇒ 每件一句指针句。`attachmentPathOverflowText(why, lang?)` 给没排上的原因一句。
|
|
61
|
+
- **用户附件回执结局读口 `attachmentOutcomesOf(sent, report)` + 闭集 `ATTACHMENT_OUTCOMES` + 句口 `attachmentOutcomeText(row, lang?)`**(CC-1390;**§143 PA-5**;型面加性:根入口运行期 +3、型 +5〔`AttachmentOutcome` / `AttachmentOutcomeRow` / `AttachmentSupply` / `AttachmentOutcomesSent` / `AttachmentOutcomesReport`〕;消息目录 +8 键:`attachments.outcome.*` 七键与 `notice.prepareRefusal.userAttachmentPath`):引擎回执行只按**声明序号**(`ordinal` 从 1 起 ↔ `userAttachmentOrdinals[ordinal - 1]`)回到宿主的附件,不按名字配对;序号越界或行的种类与那一条的供给类相反 ⇒ 整帧错位、全部 `unknown`;缺行 ⇒ 那一件 `unknown`;同序号多行词同才用(只对读口已投影的好行成立)。结局五词 `attached` / `partial` / `not_attached`(引擎同名词原样)· `refused`(整请求被拒;拒体点名的那一件 `named: true`)· `unknown`(读不出;映射外的词落此,原词留在 `engineOutcome` —— 含引擎 7.66.0 对会话里已读未变的文件答的 `unchanged`:本口答 `unknown`,宿主渲「说不准」那一句,不渲「已附上」)。可选位 `sent.inputId` / `report.inputId`:两边都在场且不等 ⇒ 全部 `unknown`(不拿别的提交的回执冒充)。整请求被拒时同口给出 `refusalNoteFacts { index, namedSupply }`,原样交 `prepareRefusalNoteOf`。
|
|
62
|
+
- **根入口新增两只读口 `approvalAgentIdOf` / `subagentBadgeFor`(CC-1499;§143 BD;型面加性:根入口运行期 +2)**:`approvalAgentIdOf(carrier)`(卡上委派腿 agent id 的读口:自有数据位非空串逐字,其余 ⇒ `undefined`,永不抛)与 `subagentBadgeFor(carrier)`(徽章口:与卡请求上的 `workerBadge` 同一只读法,永不抛),供宿主把自己叠的那份徽章覆盖换成读包。
|
|
63
|
+
- **新读口 `readPlanReviewCurrentGate(e)`(CC-1493;§143 OC-3;型面加性:根入口运行期 +1)**:409 `approval_stale` 拒体里引擎回显的当前门编号,读不出 ⇒ `undefined`。
|
|
64
|
+
- **计划卡发布那一步核对对话是否还在(§143 PB-1;宿主口缺席与修前逐字节同)**:`armPlanReviewApproval` 第三参 `ArmPlanReviewOptions.stillHere?` 与 `reopenPlanReviewCard` 选项 `ReopenPlanReviewSharedOpts.stillHere?`(与 `ActiveRunSelfHealDeps.stillHere` 同形同义:严格 `true` ⇒ 还在,严格 `false` ⇒ 已离开)。包铸计划卡的**发布那一步**读它:重开铸卡段两处(首个副作用之前;撤旧卡之后、新卡发布之前),首呈账本等待支两处(读回之后出卡之前;出卡里撤旧卡之后发布之前);首呈同步两支不读。非「还在」⇒ 不发卡帧、不登记作答口(首个副作用之前读到的另**不撤旧卡**);重开判决带新拒开词 `conversation_left`(宿主说已离开)/ `conversation_unconfirmed`(宿主交了口却答不清:`undefined` / 非布尔 / 抛 / 返回 thenable / 字段在场而不是函数)。口缺席或值为 `undefined` ⇒ 与修前逐字节同。`PLAN_REVIEW_REOPEN_REFUSALS` 由五词扩为七词。
|
|
65
|
+
- **自愈触发的重开转交对话在场口(§143 PB-1)**:自愈腿调 `ActiveRunSelfHealDeps.reopenPlanReview` 时,宿主交给自愈依赖的 `stillHere` **原样**放进第二参(缺席不递);宿主把第二参展开交给 `reopenPlanReviewCard` 即让重开口读到同一只口。第二参型为具名接口 `PlanReviewReopenCallOptions`(`{ trigger?, checkpointId?, stillHere? }`,随根入口出);宿主包装重开口时用它标注形参。
|
|
66
|
+
- **两个新拒开词的最终出句(§143 PB-2;用户形 / 注入形 × 两语)**:对话已切走 ⇒「回到那个对话计划卡会再出现」;无法确认 ⇒「未重开计划卡」。不落通用「重开失败」句;整行覆盖口 `rowFor` 照旧先问;不向宿主要 `keepSessionWayOut`、不嵌 `wayOut`(与「卡是你关的」句同律)。目录键 +7(en / zh):`approval.planReview.heading.{plain,gate,replaces}` · `session.selfHeal.row.planReopenFailed.{conversationLeft,conversationUnconfirmed}` · `session.selfHeal.injected.planReopenConversation{Left,Unconfirmed}`。
|
|
67
|
+
- **卡事实四口上根(CC-1493 (a);§143 PB-3;型面加性:根入口运行期 +4)**:`mintPlanReviewCardFacts` / `registeredPlanReviewCardFacts` / `currentPlanReviewGateOf` / `samePlanReviewCardFacts` + 型 `PlanReviewCurrentGate`。`PlanReviewCurrentGate.generation` **只作「还是不是同一代读数」的相等比较**(注册表级单调,记录被有界表挤掉再建也不复用旧号;不是跨来源的新旧刻度,不要排序、不要和别处的号比大小)。
|
|
68
|
+
- **卡头 `PlanReviewCardView.heading`(CC-1505;§143 PB-4)**:`PlanReviewCardView.heading`(恒在):门身份在场 ⇒ `Plan review — gate {门身份}`,缺席 / 事实读不出 ⇒ `Plan review`;帧带 `_sema_planReviewReplaces: true` 且门身份在场 ⇒ 后接「This card replaces an earlier plan card.」(两语)。门身份进卡头前过展示出口(控制字符与双向控制字符画成可见转义、凭据记号遮盖、封长 120 码元);机读身份在 `facts.checkpointId` 保留原值,决断只认它。
|
|
69
|
+
- **帧位 `_sema_planReviewReplaces`(CC-1505;§143 PB-4;超集键 +1,只铸 `true`)**:本包上一次**交给宿主帧处理器且处理器没抛**的卡问的是另一道门。同门重发不带该位;没有呈现面 / 处理器抛 / 记录被挤 / 任一边缺门身份 ⇒ 不盖(缺席不是「没有换代」的断言)。该位说的是「本包交出过」,不是「宿主展示过」。
|
|
70
|
+
- **审批卡「为什么问你」首眼一句:新读口 `approvalCardHeadlineOf(card, lang?)`(CC-1517;§143 HL-1 – HL-5;型面加性:根入口运行期 +2)**:返回 `{ source: 'origin', text }` 或 `undefined`。九个出身词(`ancestor_marked`、`org_unavailable`、`org_rule`、`rule_store_unavailable`、`hook`、`denial_limit_fallback`、`shell_gate_tighten`、`safety_tighten`、`integrity_guard`〔引擎 7.67.0 新词,§143 UP-7〕)与本客户端不认识的出身词各有一句,英 / 中两语,对读者直说(「this one needs your decision」)。四个静默出身词(`content_question`、`plan_review`、`ask_rule`、`policy`)、出身缺席或坏形、卡不是对象 ⇒ `undefined`:什么都不渲、不补占位。句子从不回显线上词。`approvalCardReasons`、`askOriginNoteOf`、`askOriginDetail` 的输出与 0.112.1 逐字节相同(`safety_tighten` 那一句按本版 §143 ST-1 改口,除外)。根入口新名:`approvalCardHeadlineOf`、`APPROVAL_CARD_HEADLINE_SOURCES`(`['origin']`),型 `ApprovalCardHeadline` 与 `ApprovalCardHeadlineSource`。本版不读卡上的 `headline` 键。
|
|
71
|
+
- **座位动词 `pickFile()` 与能力位 `pickFile`(「Add a file」对话框;CC-575;§143 PF-1 / PF-2;🔴 BREAKING(型面):`LocalSessionsApi` +1 必填成员)**:按完整 `LocalSessionsApi` 型写座位实现或测试替身的宿主编译红一次 —— 迁移:补一只 `pickFile`;宿主弹不了文件对话框就在座位能力表报 `pickFile: false`(渲染端读能力表,不会调它),这时实现恒回 `null` 即可(`null` 只表示用户取消,不要拿它表示「做不到」)。`LocalSessionsApi` 新增能力位管的动词(接口必填成员)`pickFile(): Promise<string | null>`,与 `pickFolder` 同形 —— `null` = 用户取消(不是错误,不落任何条目);非空路径串 = 选中的文件(原文字节,不 trim、不规范化);宿主弹不了框要在座位能力表 `seatCapabilitiesState` 里报 `pickFile: false`,不是回 `null`。`SEAT_CAPABILITY_NAMES` 末位追加 `pickFile`,`SeatCapabilitiesState` 多可选位 `pickFile?: boolean`;读口 `seatCapability(state, 'pickFile')` / `watchSeatCapability` 与禁用句 `seatCapabilityUnavailableDetail('pickFile', reading)`(「Adding a file isn't available: …」三句)同 `pickFolder` 一套;出站门 `LOCAL_SESSIONS_SPEC.methods.pickFile` 认 `null` 与非空串、拒空串 / 非串 / 数组 / 对象(拒因点名 `pickFile`),路径判据与 `pickFolder` 回执同一只。只交回路径:不读文件内容、不多选、不带类型过滤。
|
|
72
|
+
- **fleet 账本自己把引擎报为可续的已结束后台子代列为 idle(CC-1480;§143 IDLE-1 / IDLE-2;型面加性:根入口运行期 +5,本条与下两条合计)**:`ledger.project(nowMs).tasks` 的元素型为 `FleetLedgerTaskView[]`(`FleetTaskView` 加 `idleUntil?: null`):当前一代以 `completed` 结束且 `resumable: true`、此后没有被撤回或作废的行,过了留存窗仍列出、带 `idleUntil: null`,直到这一代首次结束后 `RESUMABLE_IDLE_FALLBACK_MS`(6 分钟)。`null` 表示截止未知 —— 引擎今天不报截止,回落窗不是截止。`fleetTaskShownStatus(view)` 给出要显示的状态词(键在场时为 `idle`,否则为行的状态)。
|
|
73
|
+
- **`noteFleetTaskNotification(n)` / `noteFleetTaskNotificationFor(sessionKey, n)`(CC-1480;§143 IDLE-3)**:把本轮流上的 `task_notification` 交给账本,让它的结束事实算数(抬该任务的周期水位并并入结束事实;从不新建、改动或退休行)。读不出的通知什么都不改。
|
|
74
|
+
- **`FLEET_LEDGER_TASK_VIEW_EXTRA_KEYS`(CC-1480;§143 IDLE-1)**:账本行在 `FleetTaskView` 之上多出的键。
|
|
75
|
+
- **计划审阅决断的受理回调 `onAccepted`(§143 PR-1;型面加性:根入口型名 +2 `PlanReviewDecisionAccepted` / `PlanReviewAcceptedEngine`)**:`decidePlanReview` 第四参与 `armPlanReviewApproval` 第三参、`reopenPlanReviewCard` 铸新身份臂的选项多一位 `onAccepted?(accepted)`。最后一发 POST 落定为 2xx(含 `default` 去档重发的那一发)之后、决后回拉之前恰一次;没发出 / 最后一发抛 / 被在飞闩或决断词入口拒掉的那次不回调。载荷冻结:外层 `taskId` / `dispatchNo` / `decision` / `questionId?` 与这一笔结局的机读位同值;`engine` = 受理体自有数据位(`taskId` / `sessionId` / `status` / `checkpointId` 非空串,`decisionCommitted` 严格 `true`;别的值与访问器 / 原型链上的位 ⇒ 键缺席;体不是对象 ⇒ `{}`;`engine.taskId` 缺席不拿决断路径上的任务号回填);`decided?: { verdict: 'approved' | 'rejected', plan }` = 落定行,present-iff 结清证据在场 ∧ 受理体没说重新停驻 ∧ 决断是批准 / 拒绝 ∧ 这一发带着卡上的门身份 ∧ 卡正文 `shown`(`plan` = 本包在这张卡上展示的正文)。回调同步抛 / 返回被拒的 thenable / 永不落定 ⇒ 一行 debug,结局与投递不变。复用同 id 的重开臂带它 ⇒ 当场拒(`invalid_call`)。
|
|
76
|
+
- **结局机读位三位(§143 PR-2 / PR-3 / PR-4;队列项 `_sema_planReviewOutcome` 与 `onOutcome` 载荷同值;型上可选)**:`delivery: 'submit' | 'follow'`(本包铸的结局恒带:受理体证出这道门已以本笔结清 ∧ 决断是拒绝 / 要模型重呈 ⇒ `follow`,宿主跟着那条 run、不再把结局作为新的一轮提交;其余 ⇒ `submit`;判据不读 `effect`)· `gateIdOmitted?: true`(本笔拒绝 / 重呈因门编号被拒认过而不带门编号、且确实发出 —— 与结局正文「没带门编号」那一句同一判据)· `wayOut?`(引擎拒体上的出路词原词:本笔落在通用拒收臂且正文据它给了出路时落键,例 409 `checkpoint.invalid_outcome` + `wayOut: "cancel_run"`)。队列口对外来结局三位各读一次:`delivery` 只认两词、`gateIdOmitted` 只认严格 `true`、`wayOut` 非空串原样过境(开集);其余键不落。
|
|
77
|
+
- **结局给人看的那一句 `planReviewOutcomeNotice(outcome, cardOnScreen?, lang?)`(§143 PR-6;根入口运行期 +1;目录键 +11 `approval.planReview.notice.*`,en / zh)**:一张判定表 —— 头句按 `effect`(没发出 / 引擎拒了 / 仍停在同一道审阅〔成因 `stored_form_unsupported` ⇒ 再决也不会生效、取消后重提〕/ 说不准生效没有;生效 / 推进无头句;其余 ⇒ `undefined`)+ 原因段(成因只经配对表:`card_missing` / `gate_moved` / `gate_untrusted`;`card_withholds` 降级为头句通句)+ 出路段(`effect` 为 `not_applied` 且 `wayOut` 是本包认得的词)+「没带门编号」一句(`gateIdOmitted` 严格 `true` 且 `effect` 不是 `not_sent`;生效 / 推进也出)+「计划审阅卡在屏上」(宿主交 `cardOnScreen === true` 且有头句;只陈述在场)。中文无空格接缝。永不抛。
|
|
78
|
+
- **出身词 `integrity_guard` 有它自己的一句(CC-1419;§143 UP-7)**:引擎 7.67.0 新出身词(引擎常开的完整性守卫就这次调用提的问)—— 详情层一句(`askOriginDetail` / `askOriginNoteOf` / `approvalCardReasons` 的出身行;en / zh;不静默)与卡面首眼一句(`approvalCardHeadlineOf`;en「A built-in protection asked about this action; its own words are in the details.」/ zh「内置的保护检查就这个操作提了问;它自己的说明在详情里。」);守卫自己的原话仍走卡上 `message` 行,本句只说谁提的问。耐久待决行 `askReasons` 里 `by: "integrity_guard"` 的条目经既有读口 `approvalAskReasonsOf` 读得出。
|
|
79
|
+
- **配对状态 `broken:protocol_plaintext_credentials` 判作 broken(CC-1510;§143 UP-8)**;`MCP_FAILURE_KINDS` +`revoked`。
|
|
80
|
+
- **重试状态两新位 `RetryStatus.providerMessage` / `.toolCallId`(CC-1510;§143 UP-9)**:服务商原话过一次展示出口后交出,被判调用的 id 原样交出;缺席 = 服务商没说可信的话 / 不在判某次调用。
|
|
81
|
+
- **两枚续跑拒码有句(CC-1510;§143 UP-10)**:`resume.isolation_scope_mismatch` / `resume.agent_definition_mismatch`(en / zh 各一句)。
|
|
82
|
+
- **名册行 `ToolRosterEntryView.remoteName`(CC-1510;§143 UP-11)**:引擎报的远端原始工具名,原样交出;缺席 ⇒ 键缺席(不拿 `name` 回填)。
|
|
83
|
+
- **`SUPPORT_FLOOR_SETTINGS_CONTRACT` 与型 `HooksWireSettingsContract`(CC-1523;§143 SS-4;型面加性)**:没有对端时显式传它 = 按支持底线那一代判;`SUPPORT_FLOOR` / `SupportFloorComponent` 多 `settingsContract` 一项(15.1.0);`EngineFiredHookEvent` 改为设置契约属主表十员并集。
|
|
84
|
+
- **根入口新增反馈位拒码表 `FEEDBACK_REFUSAL_CODES` 与判读口 `feedbackRefusalOf(error)`(CC-1441;§143 FB-1;型面加性:根入口运行期 +2)**:`/decide` 体里的 `feedback` 键被服务端以 feedback 专属码拒的那一个(冻结数组,今天恰一员 `feedback_not_in_proof`)与判读口(布尔;读不出码 / 表外码 / 抛出物不是对象 ⇒ `false`,永不抛);包内「去掉 `feedback` 重发恰一次」读同一只,端侧不必再抄码词。
|
|
85
|
+
- **技能投影「没发」读口 `skillCommandsWithheldOf(cmds, opts?)` 与闭集 `SKILL_WITHHELD_REASONS`(CC-1490;§143 SK-3;型面加性:根入口运行期 +2,型 +3 `SkillWithheldRow` / `SkillWithheldReason` / `SkillCmdWithSubject`)**:答「这一批命令里哪几只因身份读不全而没发」—— 行 = 名 + 来路 + 原因词 `identity_unreadable`(今天恰一词);与投影口读同一只判官;同时覆盖「交了主语但读不出」(此前静默不发)。没交 `skillOverrides` ⇒ `[]`。提示句由宿主出,本包只给机读。
|
|
86
|
+
- **切断通告的扩展车道(CC-1253;§143 RX-1 / RX-2;型面:`TurnInterruptedFactsView.lane` +1 员 `extension_abort`、+2 可选位 `extension` / `turn`,`SteerCutVerdict` +1 员 `extension_abort`)**:引擎 7.67.0 起扩展可以结束正在运行的这一轮,切断通告 `task.turn_interrupted` 带 `cause: "extension_abort"` 与发起的扩展名、回合号。`readTurnInterrupted` 把它读成自己的车道(修前读成「认不出」),`extension` / `turn` 只在这一车道交、坏形只省那一位;`turnInterruptedNotice(facts, lang?)` 多一只可选 `lang`,这一车道出一句(en / zh):扩展名读得出 ⇒「The extension "<名>" ended the running turn — …」(名字过展示出口:控制符可见化、凭据形遮盖、封长 64),否则 ⇒「An extension ended the running turn — …」;其余三车道的句逐字节不变(仍是英文)。`steerCutVerdict` 对这一车道答 `extension_abort`(与回执 id 无关)。对 `lane` / 判词做穷尽判断的宿主会编译红一次,加一臂即可。
|
|
87
|
+
- **结果帧切断者位 `_sema_turn_aborted_by` 与读口 `resultTurnAbortedByOf(frame)`(CC-1253;§143 RX-3;根入口运行期 +1)**:引擎结果的 `turnAbortedBy`(让这次运行最后一回合以切断收场的扩展名)原文过境到结果帧(成功臂与错误信封同带);缺席 = 引擎没这么说(老引擎 / 最后一回合不是切断收场 / 切断之后又有回合)。与切断通告上的扩展名是两件事实,本包不互推。只过境,不改任何判决。
|
|
88
|
+
- **结果帧受理位 `_sema_intake` 与读口 `resultIntakeOf(frame)` + 型 `ResultIntake`(CC-1309;§143 RX-4;根入口运行期 +1)**:引擎结果的 `intake` 过境 —— `{ committed: true, sessionId, entryId }`(这次调用的输入以那一条进了那个会话)或 `{ committed: false }`(什么都没收进去;为什么没收读这一帧自己的结局)。铸点与读口同一只判形:判别位恰为布尔、受理臂两位非空串、只读自有数据位、多余成员不过境;缺席 / 坏形 ⇒ 键不在(不是「没受理」)。只过境:`subtype` / `is_error` / `num_turns` 一字不动。
|
|
89
|
+
- **子代写结局四数:读口 `subagentEditOutcomesOf(toolStats)` 与句口 `subagentEditOutcomesSentence(o, lang?)` + 型 `SubagentEditOutcomes`(CC-1265;§143 RX-5;根入口运行期 +2;消息目录 +3 键 `session.subagent.editOutcomes.*`,en / zh)**:吃完成着陆卡透传的 `toolStats`(`readCompletedAgentCard(...).toolStats`),只读引擎两位(尝试数 `editFileCount` 与 7.67.0 起的结局三格 `editFileOutcomes`),交 `{ attempted, succeeded, refused, failed }`;老引擎(没有结局位)/ 没有写类尝试 / 任一位坏形 / 三格之和超过尝试数 ⇒ `undefined`,句口不出句 —— 不渲成 0、不从别处数。句:全部应用 ⇒「Applied N file edit(s).」,否则四个数一句(「not run」不说是谁拒的);数的是调用次数,不是去重后的文件数。
|
|
90
|
+
- **三只引擎通告读得出、说得清(CC-1267 / CC-1351 / CC-1297;§143 NT-1 – NT-3;型面加性:根入口运行期 +6,型 +3 `RewindBoundaryUnrecordedFactsView` / `InheritEnvDeclaredLateFactsView` / `ModsStopEndedFactsView`;按码派发表 +3 行;消息目录 +11 键,en / zh)**:`rewind.boundary_unrecorded`(受众 user)· `config.inherit_env_declared_late`(受众 operator)· `mods.stop_ended`(受众 user)各得一只事实读口(在按码派发表上:`readRewindBoundaryUnrecorded` / `readInheritEnvDeclaredLate` / `readModsStopEnded`)与一只两语句口(`rewindBoundaryUnrecordedSentence` / `inheritEnvDeclaredLateSentence` / `modsStopEndedSentence`);必填位缺 / 空串 / 错型 ⇒ 整只读不出,可选位坏形只省那一键;句子不回显成因词、id 与外来串原文(外来串过展示出口)。
|
|
91
|
+
- **终局拒绝详情带服务商原句 `providerMessage`(CC-1352;§143 NT-4;型面加性:`RunTerminalProviderRejectedDetail` +可选成员)**:`readRunTerminal(...).detail` 的 `provider_rejected` 一臂带服务商自己的那句话,与重试座走同一条展示出口(干净的句子逐字不变、不再二次截断);缺席 = 服务商没说可信的话,从不铸空串。
|
|
92
|
+
- **守卫事件判官 `isGuardHookEvent(event)` 与计划行的 `guard` 位(CC-1283;接入文档 §143 HW-4 / HW-5;型面加性:根入口 +1 运行期名)**:守卫事件(今天 `PreToolUse` / `PermissionRequest`)的闭集由本包随带的设置契约分类器派生(那几只「坏一件即整份拒」的事件),本包不写字面;计划 `settingsDropped` 的每一行恒带 `guard: boolean`(投影拿掉、壳属主事件 `no_executor`、整腿关逐条行、层降级逐条行四处同判)。守卫事件上被拿掉的 hook 本包仍照发这一回合,缺省安全态由宿主自判、推荐拒发:按 `guard && notRun` 筛,不按原因词筛(一行只记第一个适用的原因)。
|
|
93
|
+
- **计划读数 `HooksWireEngineFacts.hookEntryFields`(CC-1225;§143 HW-2 / HW-3)**:`'reported'` / `'not_reported'` / `'unreadable'` / `null` —— 这一轮条目键按服务端读者字段闭集还是按服务端版本判。读者字段闭集报了而读不出、且有 hook 因此哪都不跑时,`hooksNotRunNotice` 多一句披露(en / zh 消息目录)。
|
|
94
|
+
- **首次接入的步骤计划 `onboardStepPlanOf` 与三张词表(CC-1471 / CC-1472;§143 OB-1;型面加性:根入口 +4 运行期名 `onboardStepPlanOf` / `ONBOARD_STEPS` / `ONBOARD_STEP_STATES` / `ONBOARD_STEP_REASONS`,型 +6 `OnboardStep` / `OnboardStepState` / `OnboardStepReason` / `OnboardStepRow` / `OnboardStepPlan` / `OnboardStepPlanInput`)**:模型面四个单元 `model` / `tiers` / `optional` / `ready` 的状态由一只纯口答 —— `model` 只在「新会话缺省是本机引擎 ∧ 本机确知没有任何模型(目录确知为空,且引擎环境读数读到了、里面也确知没有)」时必经;目标读不出 / 环境没报 / 环境读不出 / 视图读不出(含目录读不出)⇒ 可过且无因(不跳);云端缺省 ⇒ 可过(`target_not_local`);有启用条目或环境供模型 ⇒ 可过(`already_configured`,只说「有配置」,不是「配好了 / 能用」)。`tiers` 只在目录确知完整且确知零启用时跳(`pool_empty`)。答案定长 4、定序、冻结,永不抛。
|
|
95
|
+
- **模型池视图的两个读数位与环境归一读口 · 探活预算一张表(CC-1472 / CC-1576;§143 OB-2 / OB-4 / OB-5;型面加性:根入口 +2 运行期名 `modelPoolEnvReadingOf` / `ONBOARD_PROBE_BUDGETS`,型 +1 `ModelPoolEnvReading`,`ModelPoolView` +2 可选位)**:视图加 `effectiveEnv?` 与 `userSettings?`(同一张三词表 `'read' | 'absent' | 'unreadable'`:引擎环境视图 / 用户设置文件读到没有;本包生产口两位恒写)+ 环境读数的归一读口 `modelPoolEnvReadingOf(view)`(多一个词 `not_reported` = 视图上没有这一位,老宿主没报)。探活 / 发现三只缺省预算收成一张冻结表 `ONBOARD_PROBE_BUDGETS`(首 token 15000 · 列表按车道 8000 / 10000 · 发现 10000 毫秒;数字不变,零行为变;`timeoutMs` / `firstTokenMs` 覆盖位语义不变)。
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
|
|
99
|
+
- 起本机引擎的子进程环境注入表 `BIND_HOST` 行改为只经绑址门覆写(CC-1459;行为变,见接入文档 §143 BG-4 – BG-6):值种 `literal` → 新臂 `gated`、不再可被继承环境覆盖 —— 子进程拿到的绑址只能是门 `pass` 交下来的 `handed`,缺省 `127.0.0.1`;新增行 `BIND_HOST_INSECURE_SELF_SPAWN`(恒删:宿主配置键,不带给子进程)。`localEngineSeedEnv` 入参新增可选 `bindAcknowledged`、结果新增必选 `bind`(门结局,原样交给 `localEngineSpawnEnv` 的新可选入参 `bind`)、`env` / `from` 恒不带 `BIND_HOST`(拒、放行、缺省三种结局一律如此;含托管层读不出而拒的那一形 —— 修前拒时环境里仍带着继承来的非缺省绑址),`refuse` 值域加 `bind-not-acknowledged`(托管层读不出的 `policy-unreadable` 优先)。未接 `bind` 的宿主:子进程恒只绑 `127.0.0.1`(闭合向)。
|
|
100
|
+
- **`prepareRefusalNoteOf` 的事实袋加 `namedSupply`**(CC-1390;**§143 PA-6**;型面加性):附件被拒、拒体点名了一件(`index`)且那一件发出去的是 path 形时,句子改说「它点名的是这一跑工作区里的文件,而这一跑没有工作区可读,或不收这个路径 / 行段」;其余供给类、缺 `index`、非法值与访问器 / 原型链上的位逐字节同今。
|
|
101
|
+
- **派发前重筛按子集认领锁存补名形(CC-1476;§143 HE-1;🔴 行为变)**:`refilterHostSettings` 对 HTTP hook 条目,除 `allowedEnvVars` 外各键都相等、且请求条目的 `allowedEnvVars` 是此刻条目名单的子集时保留 —— 请求留自己的条目原样,`settings.env` 补上该条目列出的名(值取此刻产物)。修前:早先被准入名单收窄、此后名单又放宽的条目按「条目已变」删掉,它列出的名进不了 `settings.env`,引擎把 `$NAME` 头填成空串。条目列了此刻没有的名、其他任一键不同、或一侧名单缺席 / 不是串数组 ⇒ 照删;各事件上整条目等值的认领先于任何子集认领。签名与导出不变。交入的此刻产物须是这一拍由 `hostTurnSettings` 铸的(或其结构化克隆):本口判它的形与自洽,不判准入名单、信任与新旧。
|
|
102
|
+
- **被占会话的拒绝句按占用分句(CC-1501;§143 OC-1 / OC-2;🔴 行为变 + 文案变;根入口 +1 型名 `SessionOccupant`)**:409 在跑拒收信号多一位 `occupancy`(`running` 在跑 / `parked` 停驻 / `unreadable` 读不出 / `released` 已放开;包铸恒写,手铸旧形缺席按读不出),流上拒绝行与 `activeRunBusyHeadlessRow` 读同一张五行句表(`print` / `utility` 车道的流上句与零参无人值守句逐字节同);已放开(`activeTaskId: null`)改说「刚放开、请重发」。成文改口:无人值守的「从未释放 / 这里没有东西会自清」两句与停驻决断句的「决定它会话就解锁」退役(契约:`pendingGate` 可能属于同会话另一条待决行)。
|
|
103
|
+
- **环境供模型时加模型 / 导入被拒的四句出路改口(CC-1515;§143 EC-1;🔴 文案变)**:环境供模型 ∧ 目录无启用条目时,加模型(座位接入 `applyOnboardEntry` 与模型池 `add` 意图)与 `importEnvModels` 意图仍照旧拒 `env_catalog_present`、不写 —— 拒因词、动词行为、回执形不动;改的是四句话。修前加模型句叫用户「先放进目录 / 先导入」、导入句叫用户「先手动加」,而手动加走的就是被拒的口,两句互指;修后四句给同一条今天走得通的出路:先从引擎的环境设置里去掉模型项再添加,或保持现状继续用环境里的模型;「还不能搬进模型列表」只在导入句。按旧句文字做文本匹配的宿主需改按拒因词匹配。
|
|
104
|
+
- **手动压缩在短回合上也生效:绑定即发、404 有界重试、409 续一次(CC-1516;§143 CP-1 – CP-4;🔴 行为变 + 文案变)**:手动压缩在 run 绑定那一拍就发出(不再固定等 1.5 s);404 用同一份冻结的请求按有界短梯重试(100 / 200 / 400 / 800 / 1600 ms,合计 3.1 s);409 `compact.not_running` 把每只请求续到同一会话槽的下一条 run 一次,第二次才落定为 `refused`(run 在跑时立即发出的请求同此;别的拒绝、501、传输错误与 60 s 截止不续)。上屏告警改为同一 key 下的两句 ——「Compaction did not take effect on this turn; it will be requested again with your next message.」/「Compaction did not take effect on this turn either, so nothing was compacted. If you still need it, request compaction again.」(取代「engine run finished before compaction was applied; nothing was compacted」);两句都住消息目录(英 / 中)。`onSettled` 按最终结局每请求回调一次;续上的那次 409 不回调。
|
|
105
|
+
- **计划审阅卡发布核对与代号的行为变(§143 PB-1 / PB-3)**:B1 重开铸卡段 / 首呈账本等待支在宿主声明对话已离开或答不清时不发卡(此前照发)。B2 `PlanReviewCurrentGate.generation` 数值不再从 1 起(注册表级单调),只能做相等比较。B3 自愈腿在宿主交了 `stillHere` 而触发者与门身份都缺时,`reopenPlanReview` 由单参调用变为带 `{ stillHere }` 的两参调用(宿主若逐键挑拣第二参会丢它,展开转交即可)。其余全为加性。
|
|
106
|
+
- **审批成因句 `safety_tighten` 不再把来源写成三项闭举(CC-1517;§143 ST-1;🔴 行为变:一句改口,成因词与分支不变)**:`approval.origin.safetyTighten`(en / zh;`askOriginDetail('safety_tighten')`、`askOriginNoteOf`、审批卡原因行的出身一行同读)修前括注写「网络外联、不可逆性,或受保护的写入」三项并说分不出是哪一项,而引擎这个词的来源不止这三项,遇到其余几类卡句子会让人去找不存在的一项。现在括注是举例并明说还有别的情形(en `(for example network egress, irreversibility or a protected write, among other cases; this client cannot tell which from the origin alone)` / zh `(例如网络外联、不可逆性或受保护的写入,还有别的情形;光凭出身,这个客户端分不出是哪一种)`),句首不动、仍承认分不出;旧句作废。
|
|
107
|
+
- **`clearAllRetainedFleetRows[For]` 同时作废已记的全部结束事实(CC-1480;§143 IDLE-4;行为变)**:换会话或引擎重启之后,同一代的可续结束再次到达(重投的通知、回放的事件日志、快照)只按终态行列出、绝不作 idle;只有更新一代的结束才解除作废。账本自己的换会话重置走同一步。
|
|
108
|
+
- **`ledger.project()` 的全部读者都会看到 idle 行(CC-1480;§143 IDLE-1;行为变)**:idle 父行在,其子行的树深度与父行的 `(+N)` 后代计数一直保持到它不再 idle。
|
|
109
|
+
- **completed 通知不再覆盖同一代已知的非成功结束(CC-1480;§143 IDLE-5;行为变)**:该代被迟到的 running 帧重开之后、本轮通知已报失败之后、或换会话之后,同一代的 completed 通知都不能再把已知的非成功结束改写成成功。
|
|
110
|
+
- **坏行出路句改口(§143 PR-7;🔴 文案变;目录键 `approval.planReview.decision.gateUntrusted`,en / zh)**:不再承诺拒绝 / 要求重新出计划走得通 —— 取消这项任务一定可行;拒绝 / 重新出计划不带门编号提交,可能被同样拒掉,被受理时才作用在那时在等的那份上。起因:服务端文件账本形实测,门编号坏值是非串 / 空串时不带门编号的决断被引擎行判官拒(409 `checkpoint.invalid_outcome`,出路只有取消),串形坏值时它会生效;本包分不出是哪一种。旧句「Rejecting it or asking for a new plan is sent without the gate id: that does not approve anything … Cancelling the task also works.」作废。
|
|
111
|
+
- **409 `approval_stale` 判官换读与回拉空结果(§143 PR-5;🔴 行为变)**:拒体袋的当前门只经三态读口(与 `readPlanReviewCurrentGate` 同一只;`absent` 才往坏行走,`{}` / 无袋仍按门换了)。回拉到的 run 行仍停在计划审阅(`needs_review`)却说不出门身份(服务端那一拒之后 `result` 整体读空)⇒ 读不出:`cause` 不落、正文不说「卡上的计划已不是在等批的那份」、不进拒认集(修前判 `gate_moved`)。已离开计划审阅的行 / 别的门照旧 `gate_moved`。
|
|
112
|
+
- **通用拒收臂按引擎出路词给出路(§143 PR-4;🔴 行为变)**:拒绝 / 重呈腿撞 409 且拒体带出路词(读点 = 决断拒收读数唯一铸点 `readDecisionRefusalReading(…).wayOut`)⇒ 结局正文接「— it cannot be decided here — cancel the run.」(`newer_worker` ⇒ 更新版本引擎那一句),机读位 `wayOut`。修前只有「The plan_review decision failed: HTTP 409 …」通用一句。
|
|
113
|
+
- **决断 2xx 受理体只读一份冻结快照(§143 PR-1;🔴 行为变)**:受理日志行、受理回调、结局判官(状态词 / 重新停驻 / 码)与投递方式同读;200 体各位改读自有数据位(访问器 / 原型链上的位不再被读)。修前日志行对活体 `JSON.stringify`:client 交回 `undefined` 或带会抛 `toJSON` 的体时,一次已受理的决断落进「could not reach the engine」那一臂(且不接「没带门编号」一句)。
|
|
114
|
+
- **开发依赖引擎 7.67.0(CC-1510;§143 UP-1;mods 内核契约 9 → 10)**:`@sema-agent/core` ^7.67.0、`@sema-agent/mods-kernel` 7.67.0;`@sema-agent/sdk` 仍 ^38.1.0(sdk 40.0.0 不与本代引擎锁步)。生成表随引擎重铸(读结局三词、卡型去 `file_unchanged`;老引擎交来的 `file_unchanged` 卡结构化判据同 0.112.1)。
|
|
115
|
+
- **通告码册 119 → 135 码(CC-1510;§143 UP-6)**:按引擎受众新入册 18 码;`protocol.revocation_probe_failed` 为改名后的码;`config.read_deny_floor_unkept` / `model.role_defaulted` 改为对用户说;仍在发 `instructions.source_changed` 的服务端,其帧照旧认得、按用户受众渲原句(上游清单写「删」,本包留在册,见 143-UP-6)。
|
|
116
|
+
- **会话规则写入恒声明规则文法、回执恒核戳(CC-1510;§143 UP-3;🔴 行为变)**:已存行带戳 ⇒ 声明原戳;文法戳之前存下的行(读回无戳且行已存在)⇒ 声明文法 0 —— 这一次写的判定按条目存下时的意思读、不被改读(只对这一次写成立:引擎之后若把这类行盖成当前文法,条目照当前文法读,见 §143 UPe);在这类行上新加一条文法 0 读法不同的条目(如括号形放行 `Bash(git:*)`)会被引擎拒,要整份重写那一行;没有存过规则的会话 ⇒ 引擎当前文法(生成常量 `CORE_SESSION_RULES_GRAMMAR`)。回执无戳读作「可能已写」。
|
|
117
|
+
- **失败 Agent 卡的码改读 `code`(CC-1510;§143 UP-4)**:`readCompletedAgentCard()` 自有键 `code` 在场只读它(坏形 ⇒ 缺席、不回落);不在场才读 7.66 及更早引擎的旧名 `errorCode`。
|
|
118
|
+
- **子代状态句读 `park`(CC-1510;§143 UP-5)**:`subagentStateDetail()` 读 `park`,`park` 缺席时才读旧位 `approval`。
|
|
119
|
+
- **设置契约换钉 25.1.0 → 26.1.0(CC-1519 / CC-1523;§143 SS-1 / SS-3)**:开发依赖 `@sema-agent/settings-schema` ^26.1.0;19 只 `settingsSchema*` 生成物重生 —— 17 只只动「源」版本行,引擎属主表与「按工具名匹配的事件」各多 `PermissionDenied` 一员,另多一张「引擎属主各员的起始契约版本」表(`PermissionDenied` 26.0.0、其余九员 1.0.0)。
|
|
120
|
+
- **钩子事件交不交引擎改按对端判(CC-1523;§143 SS-2 / SS-4;🔴 行为变 + 型面 BREAKING)**:**交引擎 ⟺ 属主表说引擎 ∧ 对端契约版本 ≥ 该员起始版本**。对端契约版本读自 `GET /v1/capabilities` 的 `settingsContract.version`,每轮出计划时读一次、记在计划上(`plan.engine.settingsContract = { version, basis: 'reported' | 'absent' | 'unreadable' }`),下游全读它;缺席 / 读不出时按支持底线声明新增的第四项 `settingsContract`(15.1.0)判。行为变四条:① 对端报 ≥ 26.0.0(服务端 7.152.0 起)时 `PermissionDenied` 的设置 / 插件钩子上请求体、本端跳过口跳过它、名册记引擎属主、matcher 判它 —— 没有本端执行器的宿主从「不跑 + 一句提示」变成「引擎跑、零提示」② 它的 http 条目 `allowedEnvVars` 名进 `settings.env` ③ 缺席 / 坏形读数交到判官 ⇒ 按底线那一代判,并留一行 debug `hooks-settings-contract-unreadable` ④ 7.139 – 7.151 与读不出的对端:与 0.112.1 相同。**型面破坏三条**:① `isEngineFiredHookEvent(event, contract)` 第二参必填 ② `hookMatcherVerdict(event, matcher, contract)` 第三参必填 ③ 常量 `ENGINE_FIRED_HOOK_EVENTS` 退出根入口(§2z;退役登记 RL-1519)。
|
|
121
|
+
- **云控制面腿:头袋不是对象的模型条目剔出影子目录(CC-1519;§143 SS-6;行为变)**:注入设置契约 26.0.0 的 `ModelEntry` 判定口时,数组头袋的条目剔出影子目录,记一行 `{ key: 'models', reason: 'rejected', outcome: 'dropped' }` 并出一句 warn;修前照写、零账。
|
|
122
|
+
- **本地配置写入的车道判,写集改为「每步的写文档 ∪ 每步另锁的文档」(CC-1485;§143 WS-1;🔴 行为变)**:另锁的文档,宿主共享秩名单(`sharedRanks`)里也要有它的秩。清理孤儿钥匙槽那一步(`editModelPool({ kind: 'sweepOrphanKeySlots' })`)另锁模型目录 ⇒ 在共享秩名单有 `userSettings`、没有 `models` 的宿主上,由修前放行并写入改为 `unavailable{domain_not_hosted}`(缺 `shared_rank`):零端口调用、两份文档逐字节不变。其余写入(MCP 六种操作、模型池各意图、技能、设置写)写集与修前逐操作相等。
|
|
123
|
+
- **本地配置内部件收口(CC-1492;§143 WS-2;无行为变)**:JSON 形深比较、列表预算、技能覆盖层序各只剩一处(四份逐步同义的私有深比收成一份,门里叶值 33 格 + 环逐位对拍修前读数)。
|
|
124
|
+
- **委派提示读不到正文时的缺席结局:同步读口、锚变作废、句取界面语言(CC-1504;§143 DL-1 – DL-5;🔴 型面 BREAKING:缺席因闭集 `not_owned_after_restart` → `anchor_unreported`,旧词删、无别名;行为变 + 文案变)**:新读口 `standingDelegatedPromptAbsence(taskId, lang?)` 答「这条缺席结局现在仍成立吗」——返回仍成立的 `{ cause, text }`,或 `undefined`(没有定论);不发请求、不抛;结局带着当时的转录锚,锚变即撤。`fetchDelegatedPrompt(taskId, opts?, lang?)` 的在飞 / 命中 / 定论 / 最近一次读失败都按转录锚记:锚 A 上的结局不回答锚 B 的问(换锚后重读,读到 B 的正文就给正文),在飞的一发落定时若锚已变,结果作废(`skipped`,不交正文)。缺席因 `not_owned_after_restart` 换名 `anchor_unreported` 且旧词删去,句子不再断言重启(包分不出「重启」与「行刚建、锚还在路上」「行上没有锚的形」);`absence.text` 与读口的句取调用方给的 `lang`(缺省英文)。另:读到的转录条目读不出时不再让取件腿抛并永久占着在飞记号,改按「读不到」交 `unreadable` + `unknown`(同锚可重试)。
|
|
125
|
+
- **目录旁签校验不再依赖平台哈希(CC-1487;§143 CL-1;🔴 行为变:无平台哈希的宿主收紧)**:`catalog.sha256` 旁签的摘要改走本包唯一一份字节 SHA-256(同步纯 JS)。没有 WebCrypto(或 TextEncoder)的宿主:旁签对不上 ⇒ 拒该源(`attempts` 记 `sha-mismatch`;此前照收并记一句披露 `no WebCrypto SHA-256 in this host — …`,该句不再出现);对得上 ⇒ 收且 `shaChecked: true`。有平台哈希的宿主逐字节同。
|
|
126
|
+
- **技能投影口在身份读不全时不发(CC-1490;§143 SK-1 / SK-2;🔴 型面 BREAKING + 行为变,只对交了 `skillOverrides` 的调用形)**:`skillCommandsToSpecs` 交了 `skillOverrides` 的调用形,命令型改 `SkillCmdWithSubject`(`skillOverrideSubject` 必填,交给 `skillsViewOf` 的那同一份身份),选项以宽型 `SkillSpecsOptions` 交入的调用点同落这一形;不交覆盖表的调用形型与行为一字不变。运行期兜底(型上绕过时):命令没带主语且托管层 / 命令行层有收紧向值 ⇒ 不发;命令名带冒号或 `source` 是 `mcp` / `plugin` / `commands`、且启用的开关层有收紧向值 ⇒ 不发(此前照发,而视图标 overridden);其余没带主语的命令按名 + 来路判,逐字节同修前。
|
|
127
|
+
- **🔴 BREAKING (required for servers 7.152.0+): approval decisions follow the server's door (CC-1464; §143 AD-1 – AD-3)**: on a server that reports version 7.152.0 or later, approvals that have an ask row are answered only on the task ask decision door (`POST /v1/tasks/:taskId/asks/:askId/decision`); "allow for this session" travels on that door as `remember: "session"`. Below 7.152.0, or when the version is missing or unreadable, decisions go exactly as before. The door is judged once per decision, at the moment of the decision, from the server's `GET /v1/capabilities` `version` as cached for that address (new reading `approvalDecisionDoorSource(baseUrl, verbs)` — the address plus the host's verb holder, no version snapshot; one judge `approvalDecisionDoorOf`). There is exactly one door switch: when the answer door's attempt is answered with status 404 together with the code `not_found.route` (not a safety stop of this package, and with no earlier resend that may have landed), the same decision goes once to the ask decision door and the capability cache for that address is refreshed; the switch happens only once and never switches back, and the switched send follows the ask decision door's own retry rules (same idempotency key). Any other failure never switches doors. Hosts pass the reading as `approvalDecisionDoor` to `sendHitlDecision` and to the live-card lane options; the live-card lane also needs the decision verb (`approvalDecisionDoorSource(baseUrl, client.toolApprovals)`) to answer on the ask decision door or to switch to it, otherwise such a card is not shown and the outcome is `not_sent` with the new cause `no_verb`. Hosts must pass that reading to both places: without it, every approval decision against a 7.152.0+ server fails (§143 ADy ①).
|
|
128
|
+
- **A missing route is not a missing approval**: a `404 not_found.route` that is not followed by a door switch (it came from the ask decision door, or the request has no ask decision door identity or no decision verb) now ends with the new cause `route_missing` — `not_applied` / `route_missing` (with `errorCode` and `status`) in `sendHitlDecision` instead of `gone`, with the same sentence from `hitlDecisionOutcomeContent(outcome, lang)`, and `unsettled` / `route_missing` on the live-card entry and the pending-ask row path instead of `engine_refused`, with its own sentence from `approvalResolutionDetail(resolution, lang)` (now takes an optional language; English and Chinese wording live in the message catalog). The setup hint for whoever wires the host goes to the host log only, and only when the last attempt was the answer door and no switch was possible. The request is still pending on the server; hosts read the cause word, not the code string.
|
|
129
|
+
- **Parking on the decision door**: `425 parking.ask_retry` on the live-card lane is handled like the older `202` parking answer (one invited resend, then `unsettled` / `parking_in_progress` and the parking notice).
|
|
130
|
+
- **Old approval frames on new servers**: on 7.152.0+ the old `tool_approval` / `tool_approval_complete` frames (only replays of older ledger rows can still arrive) are ignored and never shown as cards; a debug log line records each one.
|
|
131
|
+
- **Parked-question redemption on the decision door**: a `200` with `accepted: "parked_redeemed"` (servers 7.151.0+ accept a decision on a question that has already parked) settles the decision without a receipt view, the same way the older door's first redemption answer was read.
|
|
132
|
+
- **"Don't ask again" on servers 7.152.0+**: the rule suggestions on an approval card can be chosen on the new door, as on older servers: a single suggestion is sent as its exact text (byte for byte), a batch suggestion by its position in the card's full suggestion list (only when the batch capability is confirmed, as before), and an edited rule as before. A rule is never sent with a denial. A choice that does not match the card's suggestions, or a batch choice without the confirmed capability, is not sent; the decision still goes through and the user is told. When the server answers that the rule was not saved (`rulePersisted: false`), it is read as not saved. For a card that had already moved to the background queue when it was answered, whether the rule was saved is reported as unknown.
|
|
133
|
+
- **Which door was missing**: a `not_sent` outcome with cause `no_verb` now also says which door had no verb — `door: "respond"` (the server is below 7.152.0, or its version is unreadable, and the client has no `toolApprovals.respond`, as with a type package 41 client) or `door: "ask_decision"` (no `toolApprovals.decideAsk`). The key is present only with cause `no_verb`; prompt (elicitation) decisions never carry it. On the live-card entry a respond port that is not a function is now caught before the card is shown (previously the card was shown and the answer failed with the raw error text on screen). The sentence follows the door: `approvalResolutionDetail(resolution, lang)` says for `respond` that the app could not confirm the server is at 7.152.0 or later (reconnecting may fix it, otherwise the server needs upgrading), and keeps the existing "newer version of this app" sentence for `ask_decision`; `hitlDecisionOutcomeContent(outcome, lang)` gives the matching two sentences for approval decisions. Both are in the message catalog in English and Chinese.
|
|
134
|
+
- **Fewer wrong conclusions on the decision door**: a decision answer that names another request is reported as not settled (and not re-sent); one that names this request but records the other decision is reported as that earlier decision, never as the one just sent — also when the answer carries the answer door's own fields (`accepted` / `idempotent` / `delivery`), which are read only after these two checks. A host-raised safety stop that wraps a `425` parking answer is no longer re-sent. A `404 not_found.route` that arrives only after a retry is reported as uncertain (`unsettled` / `engine_error` on the live-card entry, `unconfirmed` / `gone_after_retry` in `sendHitlDecision`), because the earlier attempt may have landed; only a `404 not_found.route` with no earlier resend that may have landed is `route_missing` (or switches doors, see above). The idempotency key of a very long request id keeps its decision suffix, so approving and denying never share a key.
|
|
135
|
+
- **Sentences that do not claim an unknown cause**: the `route_missing` sentence now says the server did not recognise the address the answer was sent to and suggests reconnecting (it does not suggest updating the app or checking the server address: the same answer also comes from a relay whose worker is gone); the sentences for a missing answer function on servers that are older or whose version could not be read now say the app could not confirm the server is new enough, and suggest reconnecting before upgrading the server.
|
|
136
|
+
- **A suspended card this client cannot read, on servers 7.152.0+ (§143 AD-15; types: `APPROVAL_NOT_SENT_CAUSES` +`card_unreadable`, exhaustive handling of the cause compiles red once)**: a suspended ask row whose card frame this client cannot read (an unrecognised version, or a card word newer than the host's type package) carries no ask decision door identity, so on a server that only takes the ask decision door it is neither shown nor sent: `not_sent` with the new cause `card_unreadable` and its own sentence from `approvalResolutionDetail(resolution, lang)` (English and Chinese in the message catalog: the app could not read this approval request, nothing was sent, the request is still waiting, a newer version of the app may be able to answer it). The question stays pending on the server until it expires; the same frame arriving on the live stream is still answered.
|
|
137
|
+
- **Delegated pending asks**: the pending-ask row reader reads the child session id from `sourceSessionId` (servers 7.152.0+) and from `originTaskId` on older servers.
|
|
138
|
+
- **🔴 BREAKING (types; CC-1464; §143 AD-8)**: `LivePendingAskView.originTaskId` is renamed `sourceSessionId`, with no alias. The value is the same as before on every server version: the session id of the delegated child that raised the request (it was never a task id; servers from 7.152.0 use the same name on the row).
|
|
139
|
+
- Type package development pin `^38.1.0` → `^40.0.0`; peer floor unchanged (`>=25.0.0`).
|
|
140
|
+
- **🔴 BREAKING (types; CC-1464; §143 AD-13)**: the root entry no longer re-exports the type package's `ToolApprovalFrame` and `ToolApprovalRespondAck`; use `LegacyToolApprovalFrame` and `LegacyToolApprovalRespondAck` instead (same shapes, now declared by this package; the frame no longer declares the long-retired `ruleStoreUnreadable` and `classifierUnavailable` keys). Type package 41.0.0 removed the old names; this package's published declarations no longer refer to any name removed there, so a host on type package 41 type-checks this package without `skipLibCheck`, and no public type silently becomes `any` when it is on. These two types describe the old approval frame and the old answer receipt of servers before 7.152.0; a host that only connects to 7.152.0 or later does not need them. Also declared by this package now, with unchanged shapes: the three answer words `ToolApprovalRespondDecision` (from `RESPOND_DECISIONS`) and the answer verb in `HitlDecisionSendClient.toolApprovals` (a type package 40 client still fits).
|
|
141
|
+
- **路径形只剩一处读法(CC-1486;§143 PS-1 – PS-3;🔴 行为变:收紧,零新导出)**:点段(`.` / `..`)、分隔符与根的种类(POSIX / 盘符 / UNC / 相对)改由包内一处读出。MCP 项目链与围栏判(`mcpProjectChainOf` / `mcpPathWithinFence`)、接线回执的包含判,对带 `.` / `..` 段(首中尾、围栏自己带也算,反斜杠隔开的也算)或含 NUL 的路径答否(`[]` / `false`),此前按写出来的前缀比较;交已解析物理路径的宿主不受影响。技能根表不再收主机名 / 共享名是 `.` / `..` 的 UNC 根;`skillBaseDirOf` 对非字符串入参答 `undefined`(此前抛 `TypeError`)。
|
|
142
|
+
- **无人值守车道权限模式的第四级:设置文件层(CC-1450;接入文档 §143 HP-1 – HP-4;🔴 型面拓宽:来源词闭集三词 → 四词)**:`resolveHeadlessPermissionMode(flags, env?, permissionModes?, settings?)` 加可选第四参 `HeadlessPermissionSettingsLayer`(`defaultMode` 宿主已合并好的设置层模式词 / `autoEligible` 设置给 `auto` 时这一跑有没有资格 / `sessionMode` 会话此刻的权限态),成文序由「旗 > 环境旋钮 > 缺省」改为「旗 > 环境旋钮 > 设置 > 缺省」。设置层只在旗与旋钮都没给出可用的词时才看(含旋钮值不认识那一支,告警照旧一次);`auto` 只在 `autoEligible === true` 时成立,否则按 `default` 计;设置给的词只按会话态收紧、不放宽(比较器与档序都取设置契约那一份);`sessionMode` 在场却读不成档序里的词(访问器 / 只在原型链上 / 读就抛 / 非串 / 表外词 / 大小写变体 / 空串)时按「会话态 = `default`」来钳 —— 结果既不比设置词松,也不比 `default` 松(真会话态比这更严时本包无从知道,保证只到这里);第四参只认朴素对象(数组、类实例、`Date` 一类的载体整份当没给);旗与旋钮是这一次启动的显式表态,不受会话态钳;设置层交来 `bypassPermissions` 当作没表态(`bypassPermissions` 只许来自启动旗);落定后 `source: 'settings'`,资格被拒且最终仍是 `default` 时来源仍记 `default`。旋钮值不认识时,两句告警里的旋钮值都过包内的展示出口(控制字符与终端序列画成可见形、封长 64、引号对唯一可解;干净的值与上一版逐字节同);告警按结局分句:设置层定下模式 ⇒ `… — ignoring it, this run uses "<模式>" from settings`(模式 = 请求体上的那个词);设置层没表态 ⇒ 与上一版同一句。第四参缺席 ⇒ 与上一版逐字节同。`HeadlessPermissionResolution['source']` 多一词 `'settings'`:对来源词做穷尽 `switch` 的消费方编译红一次。
|
|
143
|
+
- 🔴 **hooks 条目键「服务端读不读」改读服务端能力位(安全轴;CC-1225;§143 HW-1)**:服务端 7.147.0 起在 `/v1/capabilities` 上自报 `settingsContract.hookEntryFields`(每型条目一列字段名);读得出 ⇒ 条目键只按那一型的列判(判别位 `type` 恒读),服务端版本表与本包分类器的投影都不再参与。修前 7.147.0 起按未登记代际取最保守行:command / http 条目上的 `onFailure` 当不读,写了 `onFailure: "block"` 的守卫整条不上请求体 —— 失败即拦形同虚设、守卫在服务端根本不跑,只有开机清单一句披露。修后那一条原样上请求体、服务端受理并读到 `block`;prompt / agent 条目上的 `onFailure` 按列照拿掉;列里的 `rewakeMessage` / `rewakeSummary` / `cloud` / `continueOnBlock` 照投;command 条目的 `args` 同按列判(它是契约字段;修前不问读者、列明说不读也照投)。能力还没读到(首轮早于探测落定)/ 没报(7.146.x 及更早)/ 报了而读不出(不是对象 / 列不是串数组 / 列的条目型与契约五型不逐员相等 / 访问器)三形同答:按服务端版本表(版本也读不出 ⇒ 最保守行,只剔今天那五键),不把未证实的键交出去;读不出那一形另披露一句。服务端版本表的退役条件改为「支持底线越过 7.146.x」(退役登记 RL-9590)。守卫条目 `onFailure` 写了坏值:本包照投,7.147.0 起服务端整轮拒(修前那一条被拿掉)。
|
|
144
|
+
- 🔴 **设置层读不全而只投托管层时,被收窄掉的 hook 有行可读(安全轴;CC-1283;§143 HW-8)**:非托管设置层这一拍读不全(读取预算超限、读数坏形、载体读不出或还没装载)时,本包照旧收窄成只投托管层;修前这一拍 `settingsDropped` / `settingsWithheld` / 开机清单都空,守卫 hook 无声消失。修后读不全的层逐层一行进 `settingsWithheld`(`cause: 'layer_degraded'` + 一句告知),读得出的非托管层上被收窄掉的 hook 逐条进 `settingsDropped`(新依据词 `layer_degraded`,`SETTINGS_HOOK_DROP_REASONS` 末员、九词;带 `guard`、`type`、`notRun: true`);会话 hooks 名册把这一层列成 `layer_degraded`(`SessionHooksRosterLayer` 多一臂)。显式收窄(托管只跑托管 / 合并关停写明 true / 启动模式)不记这一词。
|
|
145
|
+
- 🔴 **设置来源 hooks 去重只合内容逐键同的条目(安全轴;CC-1283;§143 HW-6)**:修前按 CC 类型键合并、字段取合并序最高那份 —— 同命令的同步守卫与 `async: true` 孪生合成一条,请求体上只剩不能阻断的那条,计划里零拿掉行。修后条目身份 = 全部内容(键序不计,值为 `undefined` 的键与缺席同读):内容任一处不同两条都上请求体;内容逐键同的副本照合一条,不记拿掉行(合掉的只会是逐字同的副本)。本端跳过口 `settingsHooksKeptLocally` 同一身份配对:修前同步守卫被配进照投的异步孪生、本端也跳,两头都不跑;修后按条目全文配,允许的跨变换差是闭集两处:`plugin` 被剥(设置里手写的那一只在请求体一侧剥掉)· `allowedEnvVars` 被收窄(http 名单收成交集,按「请求体 ⊆ 本端」认;子集放宽只落在这一位,`async` / `onFailure` / `timeout` / `headers` 任一不同都不配,反向不配);配不上的本端照跑。JSON 里的 `__proto__` 自有键是内容的一部分。
|
|
146
|
+
- **🔴 BREAKING(包内件):`PluginHookDecisionInput.readerNotRead` 改为 `reader`(CC-1225;§143 HW-1)**:插件 hooks 判定件 `decidePluginHooks` 的入参由「读者不读的键」改为读者本身(`hooksEntryKeyReaderOf` 的产物,一个连接一只答)。该判定件不上根入口;经 `hooksWirePlan` 取计划的宿主零改动,直接调用该判定件的包内调用方随改。
|
|
147
|
+
- **引擎拒启读口认出路表四条形(CC-1583;§143 EU-9 – EU-12;🔴 型面 BREAKING:`EngineBootWayOut` +`start_migration_release`、`EngineDataRootVariant` +`skipped_migration`,对这两个闭集做穷尽 `switch` / `Record<…>` 的消费方编译红一次;行为变)**:`engineBootRefusalOf` 对服务端 7.148.0 起的本机数据根拒句(出路表四条)同样认成数据根形:读数 `waysOut` 在四条形下多一词 `start_migration_release`,`EngineDataRootVariant` 加 `skipped_migration`,读数加可选位 `migrationRelease`(跳过迁移段点名的最低启动版本)与 `waysOutUnrecognized`(出路表段首不在已知两形内);拒启句 / 行口在四条形下多给第 4 条出路(en / zh)。三条形(服务端 7.144 – 7.147.x)的读数、出路、句子与上一版逐字节相同。带库列册对账错误类名的拒句不再被当成数据根问题(走通用拒启出口,引擎原话照上)。
|
|
148
|
+
- **Configured addresses: six more written forms are shown without their credentials (CC-1477; §143 CF-1).** `displayConfiguredUrl` now handles: a password containing an unescaped `/` (the whole address is withheld — it cannot be told apart from a mistyped port followed by a path with `@`; when everything between the colon and the `/` is digits the address is a valid host, port and path and is shown as such — write `/` in a password as `%2F`); `https:///` with extra slashes before the userinfo; a scheme-less address whose userinfo has an empty password or no colon (`user:@host`, `name@host` — the part before `@` is shown as `«redacted:userinfo»`); the fragment, path parameters and query values after a scheme-less userinfo; the query, fragment and path parameters after a scheme-less `host[:port]`; and a scheme-less userinfo with no host. Values that are not known to be addresses (settings values read by `settingsCredentialKeyPaths`) keep their previous answers for `name@host`-shaped values such as e-mail addresses.
|
|
149
|
+
- **🔴 Engine-target addresses: an empty `?` or `#` now counts as a query or fragment (CC-1488; §143 EA-1; behaviour change, stricter).** The seat contract's address rule (engine URL, organisation engine URL, registry URL, device verification URL, and the three cloud-login request addresses) and the session engine identity key for a direct address now refuse `https://h/x?`, `https://h/x#` and `https://h/x?#`, the same as the engine-address normaliser already did.
|
|
150
|
+
- **模型池视图口对引擎环境视图做一次忠实采样(CC-1472;§143 OB-3;🔴 行为变)**:环境视图是 `ownKeys` / 描述符陷阱抛的代理或已撤销代理时,`modelPoolViewOf` 不再抛,答 `effectiveEnv: 'unreadable'`(环境按空用);环境里有自有访问器键、非串值(含函数 / 符号值)、不可枚举位,或交来的环境不是普通记录 ⇒ 同样 `unreadable`、整份环境按空用(修前:这些位被跳过、其余键照用;不是记录时按空且不标);读数对象上 `effectiveEnv` 位本身是访问器 ⇒ `unreadable`(修前当没交)。值显式为 `undefined` 的可枚举位照旧按没有那一键读。
|
|
151
|
+
- 🔴 **用户设置文件读不出时,缺省模型遮蔽那一位答「说不清」(CC-1576;§143 OB-6 / OB-7;🔴 型面:`LocalConfigDisclosureKind` 三词 → 四词,对它做穷尽 `switch` / `Record<…>` 的消费方编译红一次;`EffectiveDefaultModelInput` +可选位 `userSettingsReading`;消息目录 +1 键,en / zh;行为变:收紧)**:披露种类 `LOCAL_CONFIG_DISCLOSURE_KINDS` 追加第四词 `shadow_unknown`(`layer: 'userSettings'`、`detail: 'model'`;**不是**「被盖住」也**不是**「没有盖住」),`localConfigDisclosureSentence` 两语各一句。修前用户设置读数的一切非「读到」状态(读不出 / 读就抛 / 形不对)都当空设置,遮蔽披露随之为空 —— 设置里可能有的顶层 `model` 覆盖被说成「确知没有」。修后视图 `userSettings: 'unreadable'` 且 `defaultModel.disclosures` = `[shadow_unknown]`;状态词是权威:状态 `loaded` 且文档过本包的文档形检才算 `read`(此后一切读点只读那一份快照),状态 `absent` 或读数没交 ⇒ `absent`(与修前同答),其余(状态 `unreadable` / 表外词 / 缺席 / 访问器 / 读就抛 / 文档形检不过)⇒ `unreadable`。`setDefault` 在设置读不出时照写,回执与预演带同一条 `shadow_unknown` 披露(修前干净回执);`effectiveDefaultModelOf` 交 `userSettingsReading: 'unreadable'` ⇒ 不看设置文档、答 `shadow_unknown`。设置「读到」「不在」两形的答案不变。
|
|
152
|
+
|
|
153
|
+
### Fixed
|
|
154
|
+
|
|
155
|
+
- **审批卡的子代徽章不再把子代会话 id 串当名字(CC-1499;§143 BD;行为变)**:卡上没有代理名时,徽章名改为:卡上 `agentId` 对在飞后台行的行名;账上找不到该行(或行没有名字)⇒ `background agent`。此前缺代理名时徽章名取子代会话 id,并拿它去后台行里找 —— 后台行 id 是登记行句柄、不等于会话 id,恒找不中,会话 id 串直接上屏。出处会话 id 不再进徽章,仍是卡的持有身份(`ApprovalCardRequest.taskId` 不变)。`agentId` 只认自有数据位上的非空串,坏形(数字 / 空串 / 取值器 / 原型链)当缺席;账读口不可用当没命中;徽章名截 32 字符的处置不变。
|
|
156
|
+
- **`mcp.authorization_required` 事实读口在通知不带 `reason` 时不再整只缺席(CC-1525;§143 MA-1;🔴 型面 BREAKING:`McpAuthorizationRequiredFactsView.reason` 必填 → 可选)**:视图照出、只是不带 `reason` 位,`McpAuthorizationRequiredFactsView.reason` 改为可选 —— 把 `facts.reason` 当必填 `string` 直用(赋给 `string` 型的位、直接调串方法)的消费方编译红一次;迁移:按 `reason === undefined` 分支,缺席时句子不拼「原因」半句(§143 MAy ①)。`reason` 缺席、空串、非串或读不出只省这一位(同 `authorizeUrl`);`server`、`sessionId`、`runId` 仍必填。
|
|
157
|
+
- **「在等人决定」计数不再多数一张已答完的卡(CC-1526;§143 AW-1;行为变)**:`countApprovalsAwaitingDecision` 的 `live` / `suspendedSubagent` 两格在快照行之外读本进程已结表 —— 快照里本范围的行,减去其中这一问在本进程里已有结局(决断送到并拿到语义答复 · 中断拒绝被收下 · 宿主持有放手报了结算 · 引擎收口帧到达;转停驻的不算)的行。修前用户答完一张卡、引擎还没结算(或下一张快照还没到)时状态行仍多算一张(实测约 1 s)。只减在场的行 ⇒ 永不为负;`null` 的格与 `durable` 格不变;签名与类型不变。受理那一刻拿手上最近一张发布物再调一次即可看到。局限:已结表容量 4096,淘汰最早一条后该行若仍在快照里会重新计入。
|
|
158
|
+
- **自动续写之后轮尾不再误报「正文分岔」(CC-1555;§143 CH-1 – CH-2;🔴 行为变 + 超集键 +1)**:断线或输出上限之后引擎自动续写、终帧正文是两段无分隔拼接时,只要引擎点名恰两条、且本跑屏上最近两条有正文的助手消息按序拼接(各去首尾空白)等于终帧正文,就按同一段话处置,不再发 `result_text_diverged`;其余照旧比较。结果帧成功臂新铸 `_sema_result_entry_ids`(引擎 `resultEntryIds` 逐字抄件:序不变、不去重、`[]` 照抄;缺席 / 坏形 / 非成功臂不铸)。仍会报的形见已知局限(续写链三条及以上 · 两段之间夹着别的有正文消息 · 本跑里有过权威改写 · 同消息改写那一形)。
|
|
159
|
+
- **被占会话的流上占锁行与无人值守句不再把引擎原文里的终端控制序列原样上屏(§143 RV-1;行为变)**:停驻决断那一行(流上拒绝行与 `activeRunBusyHeadlessRow` 同读的句表)里嵌进句子的三段引擎原文 —— 停驻状态词、门种、决断路径 —— 先过包内展示出口(与计划审阅卡头里门身份同一只):控制符 / 终端序列 / 双向字符画成可见转义、凭据记号遮盖、折成一行;干净文本逐字节不变。状态词与门种封长 120 码元,决断路径不封长;宿主手铸的非串状态词 ⇒ 不带括注,非串门种 ⇒ 泛称「a decision」。
|
|
160
|
+
- **引擎在相位闭集之外冒出的新相不再被渲成空的错误行(§143 RV-2;🔴 行为变)**:`mapBrainStatusToRetry` 对认不得的相(含直调时 `phase` 缺席 / 非串)答 `null`(不渲染,与 `recovered` 同答);修前落兜底臂,答 `kind: 'error'` + `formatted: ''` 的空错误行。消费端对 `null` 的既有处置照用 —— 交互车道摘覆盖层、print 车道清本轮重试记录、句口清行 —— 所以重试中途冒出新相会摘掉已有的重试行。臂读口 `retryStatusFromArm` 对 `phase` 缺席 / 非串仍答 `undefined`;认得的七相逐字面量不变。
|
|
161
|
+
- **附件回执的拒因位在场却读不出时整发答「确认不了」(§143 RV-3;行为变:收紧)**:`attachmentOutcomesOf` 的 `report.refusal` 是自有访问器或读描述符就抛 ⇒ 这一发全部行 `unknown`(取值器不执行),最终句说确认不了;修前读成「没有拒」,与成功行同在时那一发答 `attached`。缺席 / `null` / 只在原型链上 / `report` 不是对象 ⇒ 照旧是「不是拒」。
|
|
162
|
+
- **拒启读口的变体判定读全部发现与整行(§143 RV-4;行为变)**:`engineBootRefusalOf` 判数据根变体(更新根 / 读不出 / 跳过迁移)、高水位与本引擎版本、marker 路径与最低启动版本时,读逐文件段的整行、至多 4096 行;`findings` 展示数组至多 8 段、每句展示封顶,两个上限都只管展示。修前上限卡在读取循环上、判类读的是截过长度的行:八条读不出 + 第九条更新根判成读不出(应为更新根),超长路径行上的高水位证据被截掉;`markerPath` 现取整行路径,不再在展示上限处截断。
|
|
163
|
+
- **宿主口 `stillHere` 在场却不是函数,各读点统一读作「说不清」(§143 RV-5;🔴 行为变:公开读口读数变)**:`conversationLeftOf` 对「`stillHere` 字段在场(含 `null`、布尔、串、对象)却不是函数」的读数由 `here` 改为 `unconfirmed` —— 自愈出口扣发、留批等待收口 `unconfirmed`,与计划卡发布核对(§143 PB-1)同答;修前同一份宿主入参在自愈句族读成 `here`、在发布核对读成 `unconfirmed`。缺席 / 值为 `undefined` / 入参不是对象 ⇒ 仍是 `here`;严格 `true` / `false` 与答不清的读法不变。
|
|
164
|
+
- **「不再询问」缺席词 `lane_cannot_speak` 的卡面句不再说反(CC-1604;§143 RU-1;🔴 文案变)**:`ruleOffersAbsenceDetail('lane_cannot_speak')` 此前两语都说「这条审批通道存不了规则」,与引擎的意思相反 —— 规则通道能存规则,说不成规则的是这一条具体命令(复合 / 重定向 / 替换等)。现在改说:这张卡对这条命令给不出规则、可逐次批准;换一种规则能覆盖的写法仍能得到规则(经为那种写法出的卡,或在设置里写)。词、目录键 `approval.ruleOffer.absence.laneCannotSpeak`、判定口读法不变,只改值;端侧若有断言旧英文句的格,换读新句。
|
|
165
|
+
|
|
166
|
+
### Docs
|
|
167
|
+
|
|
168
|
+
- **接入文档对已发段(§135 HD-7 · §141 · §142)的九处成文改口(CC-1556;**§143 143-ERR-1 – 143-ERR-9**;文书订正,无行为变、无新导出)**:① 终端 MCP 四个旧导入换读 `applyMcpServerEdit` 是可选换读(本包不导出那四个名字,无退役行)② `checkpoint.unsupported_version` + 出路词 `newer_worker` 一形的先后次序:读数带出路词 ⇒ 族出句口 `refusedParkContent` 并交 `wayOut`,缺席 ⇒ 版本对专句 `checkpointUnsupportedVersionContent`;判据 G-S7149-2b 的中文引文按目录逐字句判 ③ 决断卡出路口 `decisionRefusalWayOutContent` 的落点、调用读数,以及「同一次拒绝只出一处出路」的规则(展示了停驻收场句就不再调它;收场句句尾出路固定英文,今天的局限) ④ `cause` 由一词扩为五词指的是 `PlanReviewOutcomeMeta.cause`(另两处同名位未动)⑤ `modelConfigGapNotice` 分不出「没配」与「配了但被策略拿掉」⑥ 结局「没带门编号」一句的机读位与句口指向 143-PR-3 / 143-PR-6 ⑦ 结局第一行的长度上界与「不截出路句」⑧ `gate_moved` 在回拉读失败一形上只表示没能确认门还在 ⑨ 决断口发送前不判「卡已被同一 run 的新卡取代」。行为缺口各指收口票 CC-1560 · CC-1561 · CC-1562 · CC-1551。
|
|
169
|
+
|
|
170
|
+
### Gates
|
|
171
|
+
|
|
172
|
+
- **scripts/run-pkg-policy-registration-test.mjs**(CC-1103;包侧登记门;无行为面):版本位读法收成一条 —— 登记行 pinnedVersion 是消费方当前装载的版本,只要求是合法 semver 串且不领先于 CHANGELOG 最高已发段(等于或落后都合法),package.json version 不再参与;发包阶段一不再同批跟这一格。新增一枚负控(篡改 CHANGELOG 使已发段落后于登记行)。
|
|
173
|
+
- `run-gate-vocabulary-test.mjs` / `run-multicause-wording-test.mjs`(CC-1517):扩 gate-vocabulary B6d 组(不闭举判据 + 两语逐字锚 + 上游定义段指纹)与 multicause-wording W17b / C4 行;金样 `changed` +3。
|
|
174
|
+
- 新 `scripts/run-plan-review-accept-projection-test.mjs`(§143 PR-1 – PR-7):PA 受理回调 · DD 落定行 / 投递方式 24 格 · GO · CG 判官七形 · ER 空结果 · IO invalid_outcome 出路 · QR 队列口三位 · NT 告知句全表 4704 格 × 两语(独立神谕)· AC 改口句 · SP 源码钉。改钉 `run-plan-review-decide-card-projection`(D18 改口句新原文)· `run-plan-review-decide-verify`(⑪e′ / ⑪h3 结局键 +delivery)· `run-plan-review-outcome-verdict`(POV12)· `run-plan-review-injected-wire`(W7a 九键)· `run-client-core-failloud`(宿主回调站点 +1)· `run-catalog-routing`(CR11 出句口登记 +1)。
|
|
175
|
+
- 新 `scripts/run-core-7670-pick-projection-test.mjs`(CC-1510 / CC-1419;§143 UP):P 引擎代自证 · A 读结局三词与卡型 · O 出身词 `integrity_guard` 与待决行理由 · G 写体必带文法(驱已装引擎真店)· C Agent 卡 `code` · S 子代 `park` · N 通告码册 · D 配置拒码两张差集绊线 · K 内核契约 10 · Z 零读点结构钉。`isConfigRefusalCode()` 仍按 `config.` 前缀判(上游集合只作覆盖门)。
|
|
176
|
+
- `run-hooks-engine-owned-wire-projection-test.mjs`(EO7 / EO8 按对端分流终局表 21 行逐行)· `run-upstream-tables-test.mjs`(G11 起始版本表)· `run-plugin-hooks-projection-test.mjs` · `run-hook-matcher-verdict-test.mjs` · `run-hooks-shell-owned-no-executor-projection-test.mjs` · `run-hook-env-seat-projection-test.mjs` · `run-session-hooks-roster-test.mjs` · `run-support-floor-projection-test.mjs` · 云腿 S5h 等随设置契约 26.1.0 改钉(CC-1519 / CC-1523):手写员数 / 员集改为从契约派生。
|
|
177
|
+
- `run-delegated-prompt-absence-test.mjs` 扩 DA5 – DA9(CC-1504;按锚记号 / 同步读口 / 迟到作废 / 三维反证);`catalog-routing` 新语料 `cc1504`(两新出句口),`cc554` 首条随词换名。
|
|
178
|
+
- **scripts/run-request-uplift-test.mjs · scripts/run-upstream-tables-test.mjs**(CC-1450;§143 HP):`run-request-uplift-test.mjs` G-RQ8(设置层等价矩阵 / 三参对照 / 坏形 / 资格三态 / 会话态收紧 / 告警闩与两句整串 / 告警里旋钮值的展示 / 设置层不收 `bypassPermissions` 及其依据 / 会话态在场而读不出 / 载体只认朴素对象 / 比较器单源)+ G-RQ2h 来源词四词;`run-upstream-tables-test.mjs` 两只新闭包组(稳定序列化、收紧比较器)、G27-9b 读者改口(含纯数据形判的新读者)与 G27-9d 工厂形参型逐字钉。
|
|
179
|
+
- **scripts/run-hooks-reader-capability-test.mjs**(CC-1225 / CC-1283;§143 HW;新门):条目键读不读只由连上的服务端读者答 —— HC0 公面 · HC1 守卫判官(派生闭集与抄本两向等、产品源码零字面、四处铸点 `guard` 同判)· RF 红先四格 · HC2 能力位读法(在场 / 缺席 / 没落地 / 坏形十四形与访问器零执行)· HC3 – HC5 去重与本端跳过口的内容身份、层降级行与名册层臂 · HT 时序 / 并发 / 失败分类三维反证;`hooks-unread-keys-projection` U12g 改钉读者铸点;`hooks-merged-disable-projection` 去重格改钉内容身份并加同步守卫 + 异步孪生诸形;`server-7147-pick-projection` / `sdk-37-pick-projection` 能力位登记改 consumed;依据词闭集改锚 8 → 9(plugin-hooks / authored-source / shell-owned)。
|
|
180
|
+
- 新 `scripts/run-onboard-steps-test.mjs`(CC-1471 / CC-1472;§143 OB-1):S0 供给面 · S1 – S11 目标 × 视图 × 环境读数逐形(含失真 / 矛盾 / 稀疏 / 词表外 / 目录读不出)。`run-local-config-models-test.mjs` 扩 MP20(B 预算一张表 / E 环境读数与视图口不抛 / G 座位出站门可选位与旧规格失败形 / N 归一读口)与 U1 – U14 · MP13i(CC-1576:用户设置读数位、`shadow_unknown` 两语整串、设缺省回执与预演、旧规格门拒带新位的视图);`run-model-pool-migrate-sweep-test.mjs` MX0c 披露词表改四词。
|
|
181
|
+
|
|
182
|
+
## 0.112.1(2026-11-10)
|
|
183
|
+
|
|
184
|
+
> 主题:计划审阅的批准恒带卡上的门身份、结局成因五词与一张配对表、坏行出路句改口、桥上原始动词的批准 / 改写必带门身份(CC-1496;接入文档 **§142 PA-1 – PA-5**;🔴 行为变,fail-closed;`cause` 值域由一词拓宽为五词 —— 对把它当单值或做穷尽判断的消费者是型面变化(编译红一次),其余为加性)
|
|
185
|
+
|
|
186
|
+
### Changed
|
|
187
|
+
|
|
188
|
+
- **计划审阅的批准恒带卡上的门身份(CC-1496;§142 PA-1;🔴 行为变,fail-closed)**:决断口 `decidePlanReview` 与包卡 / 重开卡的作答腿上,批准的请求体恒带卡事实上的 `checkpointId`。修前:同一道门的编号被引擎拒认过(409 `approval_stale`、拒体没有 `currentPending`、回拉 run 行仍是那道门)之后,再批准就不带门编号发出 —— 那时引擎若已停在另一道门上,这次批准会落到那一道门上。现在:「引擎拒认的门身份」集只对拒绝 / 要模型重新呈上计划放宽(那两种回答仍不带门编号,是契约给坏行留的出路);坏行上的批准由服务端再拒一次 ⇒ `not_applied` + `cause: 'gate_untrusted'`,门已换 ⇒ `gate_moved`,运维修好那一行之后带门编号的批准照常生效(不必等进程重启)。`permissionModeAfter: "default"` 被拒后的去档重发与主发同一个门编号:两发都从决断腿冻结的同一份请求体快照各铸一只新对象,注入 client 改写自己收到的那只不影响重发。带门身份的批准只落在那一道门上;门身份不复用、门内计划不变,是服务端的保证。
|
|
189
|
+
- **决断口的决断词入口闭集判(§142 PA-1)**:`decidePlanReview` 与包卡 / 重开卡的作答腿在进决断腿之前把决断词读一次,要求是 `approve` / `reject` / `ask_again` 三词之一的原始串;不是(装箱串 `new String('approve')`、表外词)⇒ 一个字节都不发、不投结局、`onOutcome` 不回调(与在飞闩拒同一形;宿主日志一行 error)。修前装箱的 `approve` 不附卡也会作为不带门编号的批准发出。
|
|
190
|
+
- **拒绝 / 要模型重新呈上计划因门编号被拒认过而不带门编号发出时,结局正文末尾多一句(§142 PA-5)**:只在这一发确实发出去了时追加(本地没发、可证没送出都不追加);句子是条件式 —— 这次回答发出时没带门编号,若它生效,作用的是它到达时引擎正在等的那份审阅,不一定是卡上那份计划;生效与否只由正文前半句说(目录键 `approval.planReview.decision.sentWithoutGateId`,en / zh)。只改正文,机读位不加键。这样的回答不授予退出计划模式的权,但计划若已被别处换过,会让模型重做一轮规划(可能丢掉一份还没人看过的计划,理由也会挂到那一份上)。
|
|
191
|
+
- **坏行出路句改口(§142 PA-3;目录键 `approval.planReview.decision.gateUntrusted`,en / zh)**:修好之前在这里批准会被同样拒掉、什么都不改;拒绝或要求重新出计划将不带门编号提交 —— 不批准任何东西,但计划若在此期间已换,就作用在那时在等的那份上(可能还没人看过);也可以取消任务。旧句「再答一次将不带门编号提交」作废。
|
|
192
|
+
- **桥上原始动词 `HitlBridge.reviewPlan`(§142 PA-4;🔴 行为变 + 型面加性)**:`PlanReviewOutcome` 多一位可选 `checkpointId`(审阅卡事实上的门身份,逐字);批准 / 改写不带它(或不是非空串)⇒ 本地安全停 `HitlSafetyError`,码 `wrong_gate`(本动词既有的门守卫码),说明句 = 目录键 `approval.planReview.bridge.gateIdMissing`(en / zh;安全停的 `message` 是英文那一句),一个字节都不发;带了原样上体;拒绝照旧(带了也原样上体)。决断词在入口只读一次、之后全程用这一读:读到的不是 `approve` / `edit` / `reject` 三词之一的原始串(装箱串、表外词)⇒ 本地安全停 `HitlSafetyError`,码 `bad_plan_edit`(本动词既有的坏入参码),一个字节都不发。安全停说明句不说计划还在等(一个请求都没发,证不了)。
|
|
193
|
+
|
|
194
|
+
### Added
|
|
195
|
+
|
|
196
|
+
- **结局成因五词 `PlanReviewOutcomeCause`(§142 PA-2;根入口 +1 型名;`cause` 值域由一词拓宽为五词 —— 对把它当单值或做穷尽判断的消费者是型面变化(编译红一次),其余为加性)**:`stored_form_unsupported` · `card_missing` · `card_withholds` · `gate_moved` · `gate_untrusted`。`PlanReviewOutcomeMeta.cause`(队列项 `_sema_planReviewOutcome` 与 `onOutcome` 载荷同值)由一词扩为五词,与 `effect` 成对,合法对恰五对:`still_parked` + `stored_form_unsupported` · `not_sent` + `card_missing` / `card_withholds` · `not_applied` + `gate_moved` / `gate_untrusted`;其余一律不落键(表外词与非法对不折成别的词)。缺席不是「生效了」,也不是「没有原因」:是本包没给成因。队列项、回调与队列口的重冻同读一张配对表;队列口对外来结局对象的 `effect` / `cause` 各读一次。`planReviewOutcomeTail` 第四参同型放宽(只有 `still_parked` + `stored_form_unsupported` 这一对改尾句)。
|
|
197
|
+
- **升级须知(值域由一词扩为五词,§142 PA-2)**:① 对 `cause` 写穷尽 `switch`(`default` 用 `never` 检查)或 `Record<…, …>` 的代码会编译红一次 ② 按旧一词做枚举校验的回读会拒新四词 ③ 把 `cause` 当布尔用(`if (meta.cause)`)的旧判断会把新四词误读成「服务端读不了这份停驻存下的样子」—— 改按值比较 ④ 新旧两版混跑时,旧版的队列口重冻只留 `stored_form_unsupported`,新四词被丢(键缺席,不会变成别的词)。
|
|
198
|
+
- 消息目录 +2 键(`approval.planReview.decision.sentWithoutGateId` / `approval.planReview.bridge.gateIdMissing`,en / zh),改 1 键(`approval.planReview.decision.gateUntrusted`,en / zh)。
|
|
199
|
+
|
|
200
|
+
### Gates
|
|
201
|
+
|
|
202
|
+
- 扩 **`scripts/run-plan-review-decide-card-projection-test.mjs`**(CC-1496;§142 PA-1 – PA-5):假引擎升成服务端模型(run 行回显的门编号与当前门的可信身份分开建模,只读生效记账与收到的体字节);新格 D13(拒认后同卡再批准两发都带门身份、再拒 ⇒ `gate_untrusted`)· D14(拒认后门推进到另一道,在旧卡上批准 ⇒ 零生效、`gate_moved`)· D14b(判成「门换了」的门不进拒认集:拒体带 `currentPending` / 回拉是别的门两形,随后同卡拒绝的请求体仍带门身份)· D15 / D15b / D15m(去档重发同一门身份;重发被拒不报生效;修好的坏行 [400, 200];会改写入参体的 client)· D16 / D16n(拒绝 / 重新呈上不带门身份、作用门与结局、「没带门编号」一句恰一次)· D17(成因六形 × 两通道;配对表 36 对全矩阵;访问器两读两答的外来结局对象)· D18(改口句英文正文、中文目录与中文渲染、两语键集)· D19(已装目标形 × 拒认集,线上原始字节)· D20(修好坏行后自愈)· D21(桥上原始动词)· D22(拒认后拒绝八形:条件式「没带门编号」一句只在确实发出时出现)· D23 / D24(决断口与桥上原始动词的决断词入口闭集判:装箱串 / 表外词 / 每读一答的取值器)· D25(队列口重冻对外来结局的 `cause` 只读一次)· D26(桥上非串门身份)· D27(出站体键序逐字节)· D21s / D18s(两句的英 / 中新句);改钉 D9(一只成因槽,语法树计数)· D9b(结局键 = 配对表)· D10(第二发批准照带门身份)· D11 / D12 / D12b(拒认集探针由批准改成拒绝)。
|
|
203
|
+
- 改钉 `scripts/run-client-core-pure-test.mjs` B7 与 `scripts/run-hitl-words-readout-test.mjs` G-HW5:桥上原始动词的批准 / 改写探针带门身份(§142 PA-4)。
|
|
204
|
+
|
|
52
205
|
## 0.112.0(2026-11-10)
|
|
53
206
|
|
|
54
207
|
> 主题:本地配置共用内核与其上三个配置域(MCP 服务器 / 技能 / 模型池)归包,连同服务端 7.149.0 · 类型包 38.1.0 · 设置契约 25.1.0 提货 ‖ 设置契约换钉 18.0.0 → 25.1.0:hook 条目判官多承运六键、服务端读者代际表一行不读键 1 → 5,其余各项零读点(接入文档 **§141 SS25-1 – SS25-9**;行为变:设置文件 hooks 这些键的坏值改判坏块)‖ 本地配置共用内核骨架:文档名表 + 全局状态文件唯一定位口 · 文件读数四态 · 写律一只编排口 · 回执四臂 + 预演 · 拒因闭集与两语句 · 车道判与写位前置 · 写意图表 + 设置写计划(CC-1452;接入文档 **§141 LC-1 – LC-9**;加性)‖ MCP 服务器配置归包:读侧一只 `mcpServersReport` · 写侧一只 `applyMcpServerEdit` · 两只视图投影器 · 座位能力位 `mcpServers` / `mcpServerEdit`(CC-1443 / CC-972;接入文档 **§141 MC2**;🔴 型面 BREAKING 窄)‖ 技能归本地配置内核:根表 `skillRootsOf` · 有效值读口 · 可编辑判 · 视图 · 写计划 · 座位能力位 `skills` / `skillsEdit`(CC-1445;接入文档 **§141 SK2-1 – SK2-10**;🔴 型面 BREAKING 窄)‖ 模型池与档位:纯计划口 `poolWritePlan` + 内核意图 · 视图与有效缺省读口 · 座位能力位 `modelPool` / `modelPoolEdit` 与三动词 · 存不存只问写不写律、验证状态三态 · 在线目录丢行数随目录走(CC-828;接入文档 **§141 MP-1 – MP-13**;🔴 型面 BREAKING 窄 + 行为变:缺省只走唯一律 `defaultModelChoiceOf`)‖ 模型配置缺席项 → 归因句:一只判词口 `modelConfigGapNotice`,五处读者同一铸点(CC-1465;接入文档 **§141 MG-1 – MG-5**;加性)‖ 服务端 7.149.0 / 类型包 38.1.0 提货:决断拒收出路词 `wayOut` 与出路句口 · 模型行视图窗口来源 · 读拒地板披露读口 `readDenyFloorOf` · 「原样重发改不了判」码表读类型包快照(CC-1458 / CC-1457;接入文档 **§141 S7149-0 – S7149-7**;🔴 行为变) ‖ 模型池余项:迁移合并律 · 孤儿钥匙槽清扫 · 缺省模型唯一律(CC-1460;接入文档 **§141 MX-1 – MX-9**;🔴 行为变) ‖ 本机引擎凭据只走归属证明之后的连接:判官 `engineCredentialReleaseVerdictOf` · 工厂 `makeLocalEngineWireClient`(CC-1466;接入文档 **§141 AO-1 – AO-5**;加性) ‖ 控制台 CA 钉的判定与规范化:地址判官 `readCenterAddress` · 信任 origin · 指纹三口 · 证书集判官 · 取证书重试计划 · 拒因句(CC-1241;接入文档 **§141 CA-1 – CA-9**;加性) ‖ 一事实一读口:店持久性只读能力面 · 引擎不可用行的应答位收探活判决、第九臂 · 被挡句第三方话封长走共享截断规则(CC-1461 / CC-1462 / CC-1463;接入文档 **§141 OR-1 – OR-6**;🔴 型面 BREAKING 窄 + 文案变) ‖ 安全停判官 `isHitlSafetyErrorLike` 的名字读法并入单一读口(CC-1397;接入文档 **§141 IH-1**;行为窄化) ‖ 本地写 allow 规则与卡上整工具一行改问兑付判官(CC-1420;接入文档 **§141 LA2-1 – LA2-4**;🔴 行为变 + 型面加性)
|