@sema-agent/client-core 0.83.3 → 0.83.5
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 +141 -0
- package/README.md +19 -17
- package/dist/adapter/activeRunSelfHeal.d.ts +9 -1
- package/dist/adapter/activeRunSelfHeal.js +75 -16
- package/dist/compensations.js +1 -1
- package/dist/displayUntrusted.d.ts +13 -0
- package/dist/displayUntrusted.js +751 -125
- package/dist/hitl/armedGateRegistry.js +3 -5
- package/dist/hitl/gateIdentity.d.ts +1 -0
- package/dist/hitl/gateIdentity.js +8 -0
- package/dist/hitl/planReviewWire.d.ts +7 -0
- package/dist/hitl/planReviewWire.js +345 -76
- package/dist/hitl/toolApprovalWire.d.ts +2 -0
- package/dist/hitl/toolApprovalWire.js +23 -4
- package/dist/hooksWireCaps.js +78 -8
- package/dist/host.d.ts +2 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +3 -2
- package/dist/pluginHooksWire.d.ts +9 -0
- package/dist/pluginHooksWire.js +119 -0
- package/dist/request/taskRequest.js +1 -1
- package/dist/seatContract.d.ts +18 -1
- package/dist/seatContract.js +20 -0
- package/dist/systemReminderTag.js +25 -4
- package/docs/INTEGRATION-CLIENTS.md +413 -68
- package/package.json +2 -2
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
| 项 | 值 | 真源 |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| 本包 | `@sema-agent/client-core` **0.83.3**(本批发布版 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`,三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf` 上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
|
|
23
|
-
| peer:wire 契约 | `@sema-agent/sdk` **>=11.3.0**(value-level,非 type-only;**0.80.0 抬版**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码;0.83.0 / 0.83.1 / 0.83.2 / 0.83.3 不动。此前 **0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
|
|
22
|
+
| 本包 | `@sema-agent/client-core` **0.83.5**(本批发布版 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`,三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf` 上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
|
|
23
|
+
| peer:wire 契约 | `@sema-agent/sdk` **>=11.3.0**(value-level,非 type-only;**0.80.0 抬版**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码;0.83.0 / 0.83.1 / 0.83.2 / 0.83.3 / 0.83.4 / 0.83.5 不动。此前 **0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
|
|
24
24
|
| peer:会话词汇表 | `@sema-agent/agent-types` **>=0.3.0**(type-only,零运行时;0.71.0 抬版:devDep 与 peer 同步,type-superset 门 ④ 撞名预警对着 0.3.0 的 .d.ts 求值) | 同上 |
|
|
25
25
|
| runtime dep | `diff` ^9.0.0(**唯一**一条;portability 门按**等值**钉死) | `package.json` `dependencies` |
|
|
26
|
-
| 公开导出面 | **1273** 个运行期符号(+ **59 个测试钩,两种拼法**:35 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1273 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1273 + 59 = **1332**;只剔双下划线那 35 个会多数出 24 个来,那不是棘轮盲区;最简单的剔法是去掉所有以 `_` 开头的名字(公面运行期名没有一个以 `_` 开头);= 下一版(未发布)的值:相对 0.75.1 **+16**,两票合计 —— **CC-77 ①** 审批决断结局单源判别联合 6 件:`approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` + 两张 cause 词表 `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(域 3);**CC-96** 记忆 spec 读面 10 件:`readAgentMemorySpec` / `unknownMemorySpecKeys` / `unknownMemorySpecKeysNote` / `memoryConfigRefusalNoteOf` / `KNOWN_AGENT_MEMORY_SPEC_KEYS` / `PENDING_MEMORY_SPEC_KEYS` / `MAX_UNKNOWN_MEMORY_SPEC_KEYS` / `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH` + 判别形型(域 6 / 16)。CC-89 / CC-91 / CC-92 / CC-98 四票**零值导出增减**(新臂走 `ChromeEvent` 联合与内部臂表,`tasks_expand` 退役删的是联合成员不是导出名);1065 = 0.74.5 / 0.75.0 / 0.75.1 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1065 = 0.74.5 / 0.75.0 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1061 = 0.74.3 / 0.74.4 的值:相对 0.74.2 +9 —— CC-70 / CC-71 / CC-72 / CC-73 八件 + CC-80 `lastFlagValue`,见 §2b 域 3 / 4 / 10 / 15;1052 = 0.74.2 的值:相对 0.74.1 +6 —— CC-69 六件,见 §2b 域 9;1046 = 0.74.1 的值:相对 0.74.0 +1 —— `RETRACTED_CARD_DECISION_KIND`,见 §2b 域 3;1045 = 0.74.0 的值:相对 0.73.5 +1 —— `isStaleEngineAgentPanelEnd`,见 §2b 域 4;1044 = 0.73.5 的值:相对 0.73.4 +11 —— CC-58 规模告警十一件,名单见 §2b 域 12;1033 = 0.73.4 的值:相对 0.73.3 +1 —— `TOOL_INPUT_JOIN_MAX_CALLS`,见 §2b 域 1;1032 = 0.73.3 的值:相对 0.73.2 +6 —— CC-61 六件,名单见 §2b 域 9;1026 = 0.73.2 的值(导出名零增减);= 0.73.1 的值:相对 0.73.0 +7 —— CC-56 六件 / CC-57 一件,名单见 §2b 域 3 / 15;1019 = 0.73.0 的值(导出名零增减,BREAKING 在类型面);= 0.72.14 的值:相对 0.72.13 +8 —— CC-55 八件,名单见 §2b 域 3;1011 = 0.72.13 的值:相对 0.72.12 +18 —— CC-46 八件 / CC-54 六件 / CC-53 两件 / CC-50 缺席口两件,名单见 §2b 域 3 / 4 / 9 / 10;993 = 0.72.12 的值(测试钩 45):相对 0.72.11 +4 —— CC-50 `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText` / `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`;989 = 0.72.10 的值:相对 0.72.9 +4 —— CC-41 `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX` / `projectLeaderConflict` / `leaderConflictDetail`;985 = 0.72.9 的值:相对 0.72.8 +8 —— CC-30 `MCP_RECONNECT_OUTCOMES` / `MCP_RECONNECT_TRANSACTION_NOTICE` / `projectMcpReconnectResult` / `classifyMcpReconnectFailure` / `reconnectMcpServer` / `projectMcpReconnectCapability` / `mcpReconnectOutcomeDetail`、CC-39② `readAutoConsolidationArmed`;977 = 0.72.8 的值:相对 0.72.7 +6 —— CC-39③ `MEMORY_OFF` / `memoryOffDeclarationField` / `memoryOffDeclared`、CC-43 `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`;971 = 0.72.7 的值:相对 0.72.6 +2 —— CC-42 core 7.22.0 提货 `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`;969 = 0.72.6 的值:相对 0.72.5 +1 —— CC-40 `steerFollowIntent`;968 = 0.72.5 的值:相对 0.72.4 +6 —— CC-31 server 7.82.1 提货 `capabilities.webSearch.backend` 四态读面:`WEB_SEARCH_BACKEND_NONE` / `projectWebSearchBackendCapability` / `observedWebSearchBackend` / `noteEngineCapsForWebSearchBackend` / `forgetWebSearchBackendReading` / `webSearchBackendDoctorDetail`;962 = 0.72.3 的值:相对 0.72.2 +1 —— CC-39① `AGENT_MEMORY_WORDS`;0.72.2 相对 0.72.1 +1 —— CC-37 `noteOwnWorkflowRun`;0.72.1 相对 0.72.0 +4 —— CC-33 server 7.80.1 提货:`RESUME_CONTEXT_UNAVAILABLE` / `resumeContextUnavailableFromError` / `resumeContextUnavailableContent` / `skillBaseDirOf`;0.72.0 相对 0.71.4 −39 —— CC-32 退役批删 export-liveness 登记 retire 的 39 个零消费导出(23 常量 + 16 函数,名单见 §47);995 = 0.71.3 的值:相对 0.71.2 +9 —— CC-06 `readEffectiveReasoning` / `readEffectiveMemoryScopes` / `resumeReopenFromError` / `resumeReopenContent` / `routePairingVerdict` 五函数 + `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` 四常量;986 = 0.71.0 的值:相对 0.70.2 −`MAX_AGENT_SKILLS` −`DECIDE_WORKFLOW_HOST_NOT_PARKED` +`projectToolRosterDelta` +`mcpEngineLegPresence`;986 = 0.70.0 的值:相对 0.69.2 **一件 additive(`readSkillsListingTruncated`,§39)、零删除**;985 = 0.69.2 的值:相对 0.69.1 **三件 additive、零删除**(CC-13 `isSubFlowSegmentEnd` / `SEGMENT_END_IDENTITY_KEYS` / `droppedWhySentence`,§38);982 = 0.69.0 未发布版的值(原排 0.68.3,因 peer 地板抬升改 minor)= 相对 0.68.2 **十七件 additive、零删除**:`fetchMcpPanel`(CC-03 补件,§36e)+ `readWorkflowResumeAdmissionIncomplete`(CC-05 core 7.18.0 #755)+ `installCoreValuePorts`/`hasCoreValuePorts`/`hasCoreValuePort`/`coreValuePortMisses`/`CORE_VALUE_PORT_NAMES` + 十读口(CC-07 core 值级端口,§36d);0.68.2 相对 0.68.1 十三件 additive:`SEMA_SEGMENT_ID_KEY`(CC-01 段身份键,§35f)/ `projectMcpPanel`+`mcpPanelLastLegDetail`+`projectMcpSection`(CC-03 `/mcp` 面板读视图,§35g)/ `resolveTextSegmentAuthority`/`createTextSegmentLedger`(L-318 `text_end` 权威段替换的判决单源 + print 形段账,详见 §35b/§35c)/ `memoryCaptureDeclarationField`/`MEMORY_CAPTURE_OFF`(L-316 会话级隐私声明的字面唯一铸点,§35d)/ `engineUrl`/`probeHealth`(L-61 件④ SDK 纯工具面原样转口,§35d)/ `AgentClient`/`isApprovalRequestFrameV1`/`isApprovalRevokeFrameV1`(L-61 存量清零:SDK **wire 面**原样转口,§35e)。`0.68.1`/`0.68.0` 是 **952**,那批是相对 0.67.2 **二十件 additive、🔴 两件删除(BREAKING)**:additive = `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`/`RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`RUN_TERMINAL_STATUSES`(L-247 终态词两表分源,详见 §33b)/ `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(L-244 子代下界位自有名,§33g)/ `ASK_UNRESOLVABLE_CAUSES`/`readAskUnresolvable`/`DURABLE_MANDATE_SOURCES`/`readDurableGateUnavailable`(core 7.17.0 #709 ①② 两只通告事实窄读器,§33c)/ `WORKFLOW_PARK_TRUTH_UNREADABLE`/`WORKFLOW_PARK_NOT_PENDING`/`WORKFLOW_PARK_BINDING_BROKEN`/`WORKFLOW_PARK_REQUIRES_RUN_STORE`(四个单码常量 🔧 0.72.0 退役)/`WORKFLOW_PARK_REFUSAL_CODES`/`isWorkflowParkRefusalCode`/`readWorkflowParks`(core 7.17.0 #652 park 真相四码 + parks 三键读器,§33d)/ `ENGINE_STOP_REASONS`/`engineStopReasonToCc`(L-246 A13 停止原词映射下沉,§33g)/ `readCancelRequested`(L-230 读面,§33f);🔴 **删除两件** `TERMINAL_NOT_SUCCESS_STATUSES`/`TERMINAL_STATUSES`(随 L-247 两表分源更名成 `RUN_TERMINAL_*`,clean-cut **不留别名** —— 留一个别名等于让端可以继续按合起来的那张表读,分源就白做了,详见 §33b)。`0.67.0` 是 **934**,那批是相对 0.66.0 **七件 additive、🔴 两件删除**:additive = `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`(core 7.14.0 退役 `classifierUnavailable` 之后的**拒绝面**继任读器与措辞,详见 §32b)/ `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`(core 7.14.0 #688 C3 的规则店机制位三件,详见 §32d);🔴 **删除两件** `classifierUnavailableOf`/`classifierUnavailableDetail`(随 core 7.14.0 的 Retired keys 表整族退役,clean-cut 不留别名,详见 §32b;同批删的还有**型** `ClassifierUnavailableView`、卡位与帧位 `classifierUnavailable`、以及一条恒真的型面钉 `_askOriginWordsPin`)。`0.66.0` 是 **929**,那批是一件 additive、零删除:`readRunCostFacts`(终局成本事实的唯一读器:`costBreakdown` / `nested` 窄读 + 对账三段与两个判别位,终帧超集键与 chrome 对账臂共用它;详见 §31c);已发的 **0.65.x 十一件 additive、两件删除**:additive = `DECIDE_WORKFLOW_HOST_UNKNOWN`/`DECIDE_WORKFLOW_HOST_NOT_PARKED`/`DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED`/`DECIDE_WORKFLOW_LANE_CODES`/`readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070 `/decide` 回执读面与三码人话,详见 §30h)/ `TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇单铸谓词,详见 §30j);🔴 **删除两件** `AUTO_MODE_BREAKER_CAUSES`/`classifierBreakerOf`(熔断族随 core 7.12.0 的 Removed(BREAKING) 整只退役,clean-cut 不留别名,详见 §30k②;同批删的还有**型** `ClassifierBreakerView` 与 `ClassifierStatusView.breaker` 一位)。`0.64.2` 是 **919**,那批是一件 additive、零删除:`readDenialLimitFallback`(限额回落卡的窄读器上公面,壳侧同判据副本退役,详见 §29③);`0.64.0` 是 **918**,那批是件①+件② 十三件 additive、零删除:`CLASSIFIER_STATUS_STATES`/`classifierBreakerOf`/`classifierStatusOf`/`classifierStatusDetail`(分类器状态面,详见 §28②)/ `THINKING_FORMATS`/`THINKING_FORMAT_WIRE_TWINS`/`THINKING_DISABLE_PROBE_ORDER`/`MODEL_PROBE_VERDICTS`/`PROBE_PROMPT`/`PROBE_MAX_TOKENS`(两个探针常量 🔧 0.72.0 退役)/`probeRequestBody`/`probeModelCapability`/`applyProbeToEntry`(模型思考能力探测,详见 §28①);`0.63.0` 是 **905**,那批是八件 additive、零删除:`projectServerGateKnobs`/`postureKnobSourceOf`/`postureSourceIsOperatorPinned`/`postureKnobDetail`/`POSTURE_SOURCE_WORDS`(S-178 三根 posture 旋钮读数,详见 §27b)/ `PERSISTED_RULE_BEHAVIORS`/`PERSISTED_RULE_BEHAVIOR_UNKNOWN`/`persistedRuleBehaviorOf`/`persistedRuleBehaviorLabel`/`revokeTargetFromPersistedRule`(三态规则身份,§27c)/ `engineIdentityOf`/`engineIdentityVerdict`/`engineIdentityChanged`/`engineIdentityChangedBy`/`ENGINE_IDENTITY_ANCHORS`(S-179 代际锚,§27d)/ `GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail`(门词汇 +2,§27e)/ `PERMISSION_RULE_ISSUE_CODES`/`RETIRED_PERMISSION_RULE_ISSUE_CODES`/`permissionRuleIssueDetail`(规则 lint 码表,§27f)/ `projectToolRoster`/`toolRosterNames`/`toolShimFromRoster`/`applyToolRosterDelta`(L-161 工具名册,§27g)/ `ENGINE_NOTICE_CODES`/`ENGINE_NOTICE_AUDIENCE`/`noticeAudienceOf`/`engineNoticeInCatalog`/`MCP_INJECTION_DROP_REASONS`/`readMcpInjectionDrop`(L-167 通告码册,§27h)/ `AUTO_MODE_UNAVAILABLE_CAUSES`/`AUTO_MODE_BREAKER_CAUSES`/`classifierUnavailableOf`/`classifierUnavailableDetail`(件⑧ 分类器不可用事实,§27h2);`0.62.0` 是 **869**,那批是五件 additive、**零删除**:`capForDisplay`(呈前消毒 + 封长的共用铸点,详见 §26⑦)/ `SEAT_SEND_MESSAGE_KEY_ORIGINS`(座位载荷逐键出身表,详见 §26③)/ `configureSubagentContentStore`+`subagentContentStoreConfig`+`SUBAGENT_CONTENT_STORE_DEFAULTS`(子代内容账本字节预算,测试钩 `__resetSubagentContentStoreConfigForTests` +1,详见 §26②);`0.61.0` 是 **864**,那批是三件 additive、**零删除**:`projectReadFacePosture`/`readFacePostureDetail`/`readFaceDisagreement`(S-167 READ 容纳面 operator 读器,详见 §25);`0.60.0` 是 **861**,那批是二十五件 additive、**零删除**:`readRunTerminal`/`runTerminalCode`/`runTerminalGateKind`/`runTerminalGateToolName`/`isReviewPark`/`REVIEW_PARK_GATE_KINDS` 六件终局因由读器 + `gateOutcomeOf`/`isDeniedGate`/`gateDeniedBy`/`gateApprover`/`isApprovalWindowExpiredGate`/`isDenialLimitAutoDeniedGate`/`isParkSlaExpiredGate`/`isHumanSettledGate` 八件门记录读器 + `projectWriteProtectionCapability`/`noteEngineCapsForWriteProtection`/`observedWriteProtection`/`forgetWriteProtectionReading`/`writeProtectionDoctorDetail`/`projectWriteProtectionPosture`/`writeProtectionPostureDetail` 七件写保护读面(测试钩 `__resetWriteProtectionReadingsForTests` +1)+ `readWireErrorCode` + 真机边界①的两件 `isGateParkedToolEnd`/`GATE_PARKED_ERROR_CODE` + 异源复审逼出的 `engineCapsGeneration`;`0.59.0` 是 **836**,那批是八件 additive:`RULE_OFFERS_ABSENCE_REASONS`/`DENIAL_LIMIT_KINDS` 两张闭词表再导出 + `engineCapValue` 能力位四态通用读口 + `projectSqlEngineCapability`/`observedSqlEngine`/`noteEngineCapsForSqlEngine`/`forgetSqlEngineReading`/`sqlEngineDoctorDetail` 五件 SQL 姿态读面(测试钩 `__resetSqlEngineReadingsForTests` +1);`0.58.0` 是 **828**,那批是三件 additive:`RULE_OFFER_MATCHES`/`RULE_OFFER_BATCH_MEMBER_KINDS`/`RULE_OFFER_UNCOVERED_REASONS` 三张闭词表再导出 + `RESUME_REFUSAL_CODES`/`RESUME_PLACEMENT_MISMATCH`/`resumeRefusalFromError`/`resumeRefusalContent` 四件文案铸点;`0.57.0` 是 **821**;`0.56.0`/`0.55.0` 是 **815**;已发 `0.54.0`(design/385 十件 additive 含 `AUTHORITY_ENVELOPE_TAGS` 🔧 0.72.0 退役);`0.52.0` 是 **805**(L-69⑨ 两件);`0.51.0` 是 **803**;`0.50.0` 是 **800**(S-81 五件);`0.49.0` 是 **795**;`0.48.0` 是 **794**;npm `0.47.0` 是 **790**,`0.46.0` 是 **787**,`0.44.0` 是 **783**,`0.43.1`/`0.43.0` 是 **776**,`0.42.0` 是 **771**,`0.41.0` 是 **767**,`0.39.0` 是 **766**,`0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
|
|
26
|
+
| 公开导出面 | **1278** 个运行期符号(+ **59 个测试钩,两种拼法**:35 个 `__*ForTests` + 24 个单下划线开头(22 个 `_*ForTest` + `_resetLiveQuestionStore` / `_resetUltracodePreset`) —— 两种都在 `public-export-baseline.json` 的 `testHookNames` 里、各自受棘轮管,**不在** `names` 的 1278 里。运行期 `Object.keys(dist/index.js)` 的全量 = 1278 + 59 = **1337**;只剔双下划线那 35 个会多数出 24 个来,那不是棘轮盲区;最简单的剔法是去掉所有以 `_` 开头的名字(公面运行期名没有一个以 `_` 开头);= 下一版(未发布)的值:相对 0.75.1 **+16**,两票合计 —— **CC-77 ①** 审批决断结局单源判别联合 6 件:`approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` + 两张 cause 词表 `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(域 3);**CC-96** 记忆 spec 读面 10 件:`readAgentMemorySpec` / `unknownMemorySpecKeys` / `unknownMemorySpecKeysNote` / `memoryConfigRefusalNoteOf` / `KNOWN_AGENT_MEMORY_SPEC_KEYS` / `PENDING_MEMORY_SPEC_KEYS` / `MAX_UNKNOWN_MEMORY_SPEC_KEYS` / `CONFIG_MEMORY_PROJECT_KEY_SPELLING` / `CONFIG_MEMORY_WRITE_SCOPE_MISMATCH` + 判别形型(域 6 / 16)。CC-89 / CC-91 / CC-92 / CC-98 四票**零值导出增减**(新臂走 `ChromeEvent` 联合与内部臂表,`tasks_expand` 退役删的是联合成员不是导出名);1065 = 0.74.5 / 0.75.0 / 0.75.1 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1065 = 0.74.5 / 0.75.0 的值:相对 0.74.4 +4 —— `isNewEngineAgentPanelCycle`(CC-87,域 4)+ `approvalOutcomeNoteOf` 与两句固定文案常量(CC-88,域 3);1061 = 0.74.3 / 0.74.4 的值:相对 0.74.2 +9 —— CC-70 / CC-71 / CC-72 / CC-73 八件 + CC-80 `lastFlagValue`,见 §2b 域 3 / 4 / 10 / 15;1052 = 0.74.2 的值:相对 0.74.1 +6 —— CC-69 六件,见 §2b 域 9;1046 = 0.74.1 的值:相对 0.74.0 +1 —— `RETRACTED_CARD_DECISION_KIND`,见 §2b 域 3;1045 = 0.74.0 的值:相对 0.73.5 +1 —— `isStaleEngineAgentPanelEnd`,见 §2b 域 4;1044 = 0.73.5 的值:相对 0.73.4 +11 —— CC-58 规模告警十一件,名单见 §2b 域 12;1033 = 0.73.4 的值:相对 0.73.3 +1 —— `TOOL_INPUT_JOIN_MAX_CALLS`,见 §2b 域 1;1032 = 0.73.3 的值:相对 0.73.2 +6 —— CC-61 六件,名单见 §2b 域 9;1026 = 0.73.2 的值(导出名零增减);= 0.73.1 的值:相对 0.73.0 +7 —— CC-56 六件 / CC-57 一件,名单见 §2b 域 3 / 15;1019 = 0.73.0 的值(导出名零增减,BREAKING 在类型面);= 0.72.14 的值:相对 0.72.13 +8 —— CC-55 八件,名单见 §2b 域 3;1011 = 0.72.13 的值:相对 0.72.12 +18 —— CC-46 八件 / CC-54 六件 / CC-53 两件 / CC-50 缺席口两件,名单见 §2b 域 3 / 4 / 9 / 10;993 = 0.72.12 的值(测试钩 45):相对 0.72.11 +4 —— CC-50 `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText` / `TASK_NOTIFICATION_TERMINAL_STATUSES` / `isTaskNotificationTerminalStatus`;989 = 0.72.10 的值:相对 0.72.9 +4 —— CC-41 `LEADER_RUN_STATUSES` / `LEADER_REJ_HEAD_DISPLAY_MAX` / `projectLeaderConflict` / `leaderConflictDetail`;985 = 0.72.9 的值:相对 0.72.8 +8 —— CC-30 `MCP_RECONNECT_OUTCOMES` / `MCP_RECONNECT_TRANSACTION_NOTICE` / `projectMcpReconnectResult` / `classifyMcpReconnectFailure` / `reconnectMcpServer` / `projectMcpReconnectCapability` / `mcpReconnectOutcomeDetail`、CC-39② `readAutoConsolidationArmed`;977 = 0.72.8 的值:相对 0.72.7 +6 —— CC-39③ `MEMORY_OFF` / `memoryOffDeclarationField` / `memoryOffDeclared`、CC-43 `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`;971 = 0.72.7 的值:相对 0.72.6 +2 —— CC-42 core 7.22.0 提货 `MCP_REDIAL_OUTCOMES` / `readMcpServerRedialed`;969 = 0.72.6 的值:相对 0.72.5 +1 —— CC-40 `steerFollowIntent`;968 = 0.72.5 的值:相对 0.72.4 +6 —— CC-31 server 7.82.1 提货 `capabilities.webSearch.backend` 四态读面:`WEB_SEARCH_BACKEND_NONE` / `projectWebSearchBackendCapability` / `observedWebSearchBackend` / `noteEngineCapsForWebSearchBackend` / `forgetWebSearchBackendReading` / `webSearchBackendDoctorDetail`;962 = 0.72.3 的值:相对 0.72.2 +1 —— CC-39① `AGENT_MEMORY_WORDS`;0.72.2 相对 0.72.1 +1 —— CC-37 `noteOwnWorkflowRun`;0.72.1 相对 0.72.0 +4 —— CC-33 server 7.80.1 提货:`RESUME_CONTEXT_UNAVAILABLE` / `resumeContextUnavailableFromError` / `resumeContextUnavailableContent` / `skillBaseDirOf`;0.72.0 相对 0.71.4 −39 —— CC-32 退役批删 export-liveness 登记 retire 的 39 个零消费导出(23 常量 + 16 函数,名单见 §47);995 = 0.71.3 的值:相对 0.71.2 +9 —— CC-06 `readEffectiveReasoning` / `readEffectiveMemoryScopes` / `resumeReopenFromError` / `resumeReopenContent` / `routePairingVerdict` 五函数 + `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` 四常量;986 = 0.71.0 的值:相对 0.70.2 −`MAX_AGENT_SKILLS` −`DECIDE_WORKFLOW_HOST_NOT_PARKED` +`projectToolRosterDelta` +`mcpEngineLegPresence`;986 = 0.70.0 的值:相对 0.69.2 **一件 additive(`readSkillsListingTruncated`,§39)、零删除**;985 = 0.69.2 的值:相对 0.69.1 **三件 additive、零删除**(CC-13 `isSubFlowSegmentEnd` / `SEGMENT_END_IDENTITY_KEYS` / `droppedWhySentence`,§38);982 = 0.69.0 未发布版的值(原排 0.68.3,因 peer 地板抬升改 minor)= 相对 0.68.2 **十七件 additive、零删除**:`fetchMcpPanel`(CC-03 补件,§36e)+ `readWorkflowResumeAdmissionIncomplete`(CC-05 core 7.18.0 #755)+ `installCoreValuePorts`/`hasCoreValuePorts`/`hasCoreValuePort`/`coreValuePortMisses`/`CORE_VALUE_PORT_NAMES` + 十读口(CC-07 core 值级端口,§36d);0.68.2 相对 0.68.1 十三件 additive:`SEMA_SEGMENT_ID_KEY`(CC-01 段身份键,§35f)/ `projectMcpPanel`+`mcpPanelLastLegDetail`+`projectMcpSection`(CC-03 `/mcp` 面板读视图,§35g)/ `resolveTextSegmentAuthority`/`createTextSegmentLedger`(L-318 `text_end` 权威段替换的判决单源 + print 形段账,详见 §35b/§35c)/ `memoryCaptureDeclarationField`/`MEMORY_CAPTURE_OFF`(L-316 会话级隐私声明的字面唯一铸点,§35d)/ `engineUrl`/`probeHealth`(L-61 件④ SDK 纯工具面原样转口,§35d)/ `AgentClient`/`isApprovalRequestFrameV1`/`isApprovalRevokeFrameV1`(L-61 存量清零:SDK **wire 面**原样转口,§35e)。`0.68.1`/`0.68.0` 是 **952**,那批是相对 0.67.2 **二十件 additive、🔴 两件删除(BREAKING)**:additive = `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`/`RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`RUN_TERMINAL_STATUSES`(L-247 终态词两表分源,详见 §33b)/ `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(L-244 子代下界位自有名,§33g)/ `ASK_UNRESOLVABLE_CAUSES`/`readAskUnresolvable`/`DURABLE_MANDATE_SOURCES`/`readDurableGateUnavailable`(core 7.17.0 #709 ①② 两只通告事实窄读器,§33c)/ `WORKFLOW_PARK_TRUTH_UNREADABLE`/`WORKFLOW_PARK_NOT_PENDING`/`WORKFLOW_PARK_BINDING_BROKEN`/`WORKFLOW_PARK_REQUIRES_RUN_STORE`(四个单码常量 🔧 0.72.0 退役)/`WORKFLOW_PARK_REFUSAL_CODES`/`isWorkflowParkRefusalCode`/`readWorkflowParks`(core 7.17.0 #652 park 真相四码 + parks 三键读器,§33d)/ `ENGINE_STOP_REASONS`/`engineStopReasonToCc`(L-246 A13 停止原词映射下沉,§33g)/ `readCancelRequested`(L-230 读面,§33f);🔴 **删除两件** `TERMINAL_NOT_SUCCESS_STATUSES`/`TERMINAL_STATUSES`(随 L-247 两表分源更名成 `RUN_TERMINAL_*`,clean-cut **不留别名** —— 留一个别名等于让端可以继续按合起来的那张表读,分源就白做了,详见 §33b)。`0.67.0` 是 **934**,那批是相对 0.66.0 **七件 additive、🔴 两件删除**:additive = `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`(core 7.14.0 退役 `classifierUnavailable` 之后的**拒绝面**继任读器与措辞,详见 §32b)/ `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`(core 7.14.0 #688 C3 的规则店机制位三件,详见 §32d);🔴 **删除两件** `classifierUnavailableOf`/`classifierUnavailableDetail`(随 core 7.14.0 的 Retired keys 表整族退役,clean-cut 不留别名,详见 §32b;同批删的还有**型** `ClassifierUnavailableView`、卡位与帧位 `classifierUnavailable`、以及一条恒真的型面钉 `_askOriginWordsPin`)。`0.66.0` 是 **929**,那批是一件 additive、零删除:`readRunCostFacts`(终局成本事实的唯一读器:`costBreakdown` / `nested` 窄读 + 对账三段与两个判别位,终帧超集键与 chrome 对账臂共用它;详见 §31c);已发的 **0.65.x 十一件 additive、两件删除**:additive = `DECIDE_WORKFLOW_HOST_UNKNOWN`/`DECIDE_WORKFLOW_HOST_NOT_PARKED`/`DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED`/`DECIDE_WORKFLOW_LANE_CODES`/`readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070 `/decide` 回执读面与三码人话,详见 §30h)/ `TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇单铸谓词,详见 §30j);🔴 **删除两件** `AUTO_MODE_BREAKER_CAUSES`/`classifierBreakerOf`(熔断族随 core 7.12.0 的 Removed(BREAKING) 整只退役,clean-cut 不留别名,详见 §30k②;同批删的还有**型** `ClassifierBreakerView` 与 `ClassifierStatusView.breaker` 一位)。`0.64.2` 是 **919**,那批是一件 additive、零删除:`readDenialLimitFallback`(限额回落卡的窄读器上公面,壳侧同判据副本退役,详见 §29③);`0.64.0` 是 **918**,那批是件①+件② 十三件 additive、零删除:`CLASSIFIER_STATUS_STATES`/`classifierBreakerOf`/`classifierStatusOf`/`classifierStatusDetail`(分类器状态面,详见 §28②)/ `THINKING_FORMATS`/`THINKING_FORMAT_WIRE_TWINS`/`THINKING_DISABLE_PROBE_ORDER`/`MODEL_PROBE_VERDICTS`/`PROBE_PROMPT`/`PROBE_MAX_TOKENS`(两个探针常量 🔧 0.72.0 退役)/`probeRequestBody`/`probeModelCapability`/`applyProbeToEntry`(模型思考能力探测,详见 §28①);`0.63.0` 是 **905**,那批是八件 additive、零删除:`projectServerGateKnobs`/`postureKnobSourceOf`/`postureSourceIsOperatorPinned`/`postureKnobDetail`/`POSTURE_SOURCE_WORDS`(S-178 三根 posture 旋钮读数,详见 §27b)/ `PERSISTED_RULE_BEHAVIORS`/`PERSISTED_RULE_BEHAVIOR_UNKNOWN`/`persistedRuleBehaviorOf`/`persistedRuleBehaviorLabel`/`revokeTargetFromPersistedRule`(三态规则身份,§27c)/ `engineIdentityOf`/`engineIdentityVerdict`/`engineIdentityChanged`/`engineIdentityChangedBy`/`ENGINE_IDENTITY_ANCHORS`(S-179 代际锚,§27d)/ `GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail`(门词汇 +2,§27e)/ `PERMISSION_RULE_ISSUE_CODES`/`RETIRED_PERMISSION_RULE_ISSUE_CODES`/`permissionRuleIssueDetail`(规则 lint 码表,§27f)/ `projectToolRoster`/`toolRosterNames`/`toolShimFromRoster`/`applyToolRosterDelta`(L-161 工具名册,§27g)/ `ENGINE_NOTICE_CODES`/`ENGINE_NOTICE_AUDIENCE`/`noticeAudienceOf`/`engineNoticeInCatalog`/`MCP_INJECTION_DROP_REASONS`/`readMcpInjectionDrop`(L-167 通告码册,§27h)/ `AUTO_MODE_UNAVAILABLE_CAUSES`/`AUTO_MODE_BREAKER_CAUSES`/`classifierUnavailableOf`/`classifierUnavailableDetail`(件⑧ 分类器不可用事实,§27h2);`0.62.0` 是 **869**,那批是五件 additive、**零删除**:`capForDisplay`(呈前消毒 + 封长的共用铸点,详见 §26⑦)/ `SEAT_SEND_MESSAGE_KEY_ORIGINS`(座位载荷逐键出身表,详见 §26③)/ `configureSubagentContentStore`+`subagentContentStoreConfig`+`SUBAGENT_CONTENT_STORE_DEFAULTS`(子代内容账本字节预算,测试钩 `__resetSubagentContentStoreConfigForTests` +1,详见 §26②);`0.61.0` 是 **864**,那批是三件 additive、**零删除**:`projectReadFacePosture`/`readFacePostureDetail`/`readFaceDisagreement`(S-167 READ 容纳面 operator 读器,详见 §25);`0.60.0` 是 **861**,那批是二十五件 additive、**零删除**:`readRunTerminal`/`runTerminalCode`/`runTerminalGateKind`/`runTerminalGateToolName`/`isReviewPark`/`REVIEW_PARK_GATE_KINDS` 六件终局因由读器 + `gateOutcomeOf`/`isDeniedGate`/`gateDeniedBy`/`gateApprover`/`isApprovalWindowExpiredGate`/`isDenialLimitAutoDeniedGate`/`isParkSlaExpiredGate`/`isHumanSettledGate` 八件门记录读器 + `projectWriteProtectionCapability`/`noteEngineCapsForWriteProtection`/`observedWriteProtection`/`forgetWriteProtectionReading`/`writeProtectionDoctorDetail`/`projectWriteProtectionPosture`/`writeProtectionPostureDetail` 七件写保护读面(测试钩 `__resetWriteProtectionReadingsForTests` +1)+ `readWireErrorCode` + 真机边界①的两件 `isGateParkedToolEnd`/`GATE_PARKED_ERROR_CODE` + 异源复审逼出的 `engineCapsGeneration`;`0.59.0` 是 **836**,那批是八件 additive:`RULE_OFFERS_ABSENCE_REASONS`/`DENIAL_LIMIT_KINDS` 两张闭词表再导出 + `engineCapValue` 能力位四态通用读口 + `projectSqlEngineCapability`/`observedSqlEngine`/`noteEngineCapsForSqlEngine`/`forgetSqlEngineReading`/`sqlEngineDoctorDetail` 五件 SQL 姿态读面(测试钩 `__resetSqlEngineReadingsForTests` +1);`0.58.0` 是 **828**,那批是三件 additive:`RULE_OFFER_MATCHES`/`RULE_OFFER_BATCH_MEMBER_KINDS`/`RULE_OFFER_UNCOVERED_REASONS` 三张闭词表再导出 + `RESUME_REFUSAL_CODES`/`RESUME_PLACEMENT_MISMATCH`/`resumeRefusalFromError`/`resumeRefusalContent` 四件文案铸点;`0.57.0` 是 **821**;`0.56.0`/`0.55.0` 是 **815**;已发 `0.54.0`(design/385 十件 additive 含 `AUTHORITY_ENVELOPE_TAGS` 🔧 0.72.0 退役);`0.52.0` 是 **805**(L-69⑨ 两件);`0.51.0` 是 **803**;`0.50.0` 是 **800**(S-81 五件);`0.49.0` 是 **795**;`0.48.0` 是 **794**;npm `0.47.0` 是 **790**,`0.46.0` 是 **787**,`0.44.0` 是 **783**,`0.43.1`/`0.43.0` 是 **776**,`0.42.0` 是 **771**,`0.41.0` 是 **767**,`0.39.0` 是 **766**,`0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
|
|
27
27
|
| 常驻门 | 以 `scripts/gates-manifest.json` 的 `suites` 长度为准(**本档不抄这个数**) | `scripts/gates-manifest.json`;`npm test` 的名单等值门与它逐名对账 |
|
|
28
28
|
| 沿革档 | 0.29.0 起建 `CHANGELOG.md`;更早批次记账在 `src/index.ts` 文件头 + `docs/REFACTOR-LEDGER.md` | — |
|
|
29
29
|
|
|
@@ -125,7 +125,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
125
125
|
|
|
126
126
|
> 📦 **随包 / 不随包**:npm 包只带 `dist` / `README` / `CHANGELOG` / 本档 / `LICENSE`。本档各处提到的 `docs/type-superset.json`、`scripts/*.json`、`scripts/run-*-test.mjs` 都是**仓内登记物与门,不随包发出** —— 装包的消费者找不到它们是预期;`_sema_` 超集键的**随包契约**就是本档各 §NNz 逐键处置表(键名 / 值域 / 缺席语义逐条在表里)。
|
|
127
127
|
>
|
|
128
|
-
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**
|
|
128
|
+
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**1278** 项;该基线只覆盖**根**入口,子路径入口 `./registry` 的名单在 §86 与 `scripts/run-sdk-registry-transit-test.mjs` A / C 段)。
|
|
129
129
|
> 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
|
|
130
130
|
> **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
|
|
131
131
|
> 两个入口:根 `import { … } from '@sema-agent/client-core'`(会话运行时;`exports` 的 `.`)+ `import { … } from '@sema-agent/client-core/registry'`(云控制面原样转口,0.79.1 起;`exports` 的 `./registry`,§86);
|
|
@@ -149,23 +149,23 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
149
149
|
`WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
|
|
150
150
|
**4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
1278 项的内部构成(帮助端估读表大小;0.83.5 +1 函数(CC-204 字符面标记位置读口 `displayUntrustedMarks`);0.83.4 +4 函数(CC-205 `<system-reminder>` 剥离 / 解包两口;CC-203 座位过境口;CC-201 清「用户关卡」记号口);0.83.2 +15 函数 +4 常量(CC-193 姿态放行谓词 / CC-195 强制词闭集 + 成员判据 + 读口 + 措辞 / CC-194 缺席行判定 11 函数 + 3 常量);0.83.1 +10 函数 +6 常量(CC-112 展示层安全出口 `displayUntrusted` / CC-117 会话规则记录无损判定 + 措辞单源 + 五词成因闭集 / CC-174 插件 hook 每轮计划 + 查询口 + 事件判定口 + 四只措辞口 + 五张闭集);0.83.0 −3 函数(联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 🔧 0.83.0 退出公面)+1 函数(CC-175 `terminalReasonForResult`);0.82.7 +5 函数(CC-182 每请求联网搜索配置三态判决:段判决 / env 判决 / 两车道合成 / 措辞单源 / endpoint 显示形);0.82.5 +5 函数 +1 常量(CC-169 print 车道 init 帧工具面:流包装器 / 判定闸 / 名册信号分类口 / 判定口 / 留痕措辞单源 + 等待上界常量);0.82.2 +1 函数(CC-164 云控制面有效配置回体措辞单源 `cloudEffectiveNotices`);0.82.1 +15 函数(CC-154 续跑折叠码读口 + 措辞 / CC-163 文件历史捕获读口六口 / CC-151 模型身份可解析判据五口 / CC-161 自定义代理载荷作废重投口 / 决断失败码「门还在」判定;测试钩 +1);0.82.0 +17 函数 +1 常量(CC-146 `/rewind` 代码档与对话档可用性读口投影 + 三口读账 + 两只判据 + 三句措辞 / CC-150 额度投影三口 / CC-152 装配期无手两口 / CC-154 取码单源 + 折叠码常量 / CC-156 坏档行坐标读口 + 措辞);0.80.0 +1 常量 +10 函数(CC-133 结算词表镜像 `SETTLEMENT_KIND_WORDS` + 五函数 / CC-134 三函数 / CC-132 两函数);0.79.0 +8 常量 +21 函数 +1 类(CC-74 MCP 状态面两张词表 + 九函数 / CC-110 `approvalIsMandated` + `mandatedApprovalDetail` / CC-116 · 118 · 123 `APPROVER_POSTURE_BYPASS` + `REQUEST_LANES` + 三函数 / CC-125 拒因两面四常量 `HITL_POLICY_DENY_MESSAGE` `APPROVAL_DENY_SETTLED_BY_WORDS` `SEMA_DENIAL_KIND_KEY` `CC_TOOL_DENIAL_KINDS` + 四函数 / CC-128 会话 bundle 面转口 `pushSessionBundle` `pullSessionBundle` `importSessionBundle` + 错误类 `APIError`;测试钩 +1);0.78.1 +2 常量 +9 函数(CC-113 displayBody / CC-97 b 五动词 + 判官 + 覆盖面判词 / CC-121 readSubmitWiringManifest);0.77.0 +2 常量 +2 函数(CC-101)+ 5 常量 +12 函数(CC-105 / CC-103;测试钩 +1);0.76.1 +1 常量 +4 函数(CC-36)+ 13 函数(CC-102;测试钩 +2)+ 1 常量 +20 函数(CC-97a;测试钩 +2)+ 2 函数(身份快照助手上公面);0.76.0 +8 常量 +8 函数(CC-77 ① 2+4 / CC-96 6+4);0.74.5 +2 常量 +2 函数(CC-87 / CC-88);0.74.3 +2 常量 +7 函数(CC-70 / CC-71 / CC-72 / CC-73 / CC-80;测试钩 +1);0.74.2 +6 函数(CC-69;测试钩 +1);0.74.1 +1 常量(CC-67);0.74.0 +1 函数(CC-66);0.73.5 +8 常量 +3 函数(CC-58);0.73.4 +1 常量(CC-34);0.73.3 +6 函数(CC-61;测试钩 +1);0.73.1 +2 常量 +5 函数(CC-56 / CC-57;测试钩 +1);0.72.14 +1 常量 +7 函数(CC-55);0.72.13 +4 常量 +14 函数(CC-46 / CC-54 / CC-53 / CC-50 缺席口);0.72.12 +2 常量 +2 函数(CC-50);0.72.10 +2 常量 +2 函数(CC-41);0.72.9 +2 常量 +6 函数(CC-30 / CC-39②);0.72.8 +2 常量 +4 函数(CC-39③ / CC-43);0.72.7 +1 常量 +1 函数(CC-42);0.72.6 +1 函数(CC-40);0.72.5 +1 常量 +5 函数(CC-31);0.72.3 +1 常量(CC-39①);0.72.2 +1 函数(CC-37);0.72.1 +1 常量 +3 函数(CC-33);0.72.0 −23 常量 −16 函数(CC-32 退役批);0.71.3 +4 常量 +5 函数(CC-06);0.71.0 −2 常量 `MAX_AGENT_SKILLS` / `DECIDE_WORKFLOW_HOST_NOT_PARKED` +2 函数 `projectToolRosterDelta` / `mcpEngineLegPresence`;0.70.0 起 +1 函数;0.69.2 起 +3:常量 1 / 函数 2):**351** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
|
|
153
153
|
(矩阵、键集、env 名、锚串)而非可调用物;**7** 项是 PascalCase 运行期值
|
|
154
154
|
(`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError` / `APIError`);
|
|
155
155
|
**37** 项是 `*For(sessionKey, …)` 的 per-session 变体(0.72.0 −4:`clearArmedGateFor` / `onGateArmedFor` / `registerArmedGateFromQuestionIdFor` / `notePlanReviewAnsweredIfDecisiveFor` 退出公面)(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
|
|
156
156
|
|
|
157
|
-
### 2b. 域图(16 域,逐域计数之和 =
|
|
157
|
+
### 2b. 域图(16 域,逐域计数之和 = 1278)
|
|
158
158
|
|
|
159
159
|
| # | 域 | 名数 | 承重导出 | 用途 | 实现锚 |
|
|
160
160
|
|---|---|---|---|---|---|
|
|
161
161
|
| 1 | **适配内核(下行主链)** | 67 | `terminalReasonForResult`(0.83.0 CC-175:结果帧 CC 键 `terminal_reason` 的读口,与铸点同一只判据,给端自拼的结果帧与旧转录;§100)· `handsMountedFromManifest` / `handsMountedDetail`(0.82.0 CC-152:装配期「这一 run 有没有手」三态判据 + 措辞单源,读 `wiring_manifest` 名册的 `mountedBy`;§92)· `readSubmitWiringManifest`(0.78.1 CC-121:非流式提交 200 体 `TaskResult.wiringManifest` 的三态读口,view 与流式腿 chrome 臂同一张;§83)· `TOOL_INPUT_JOIN_MAX_CALLS`(0.73.4 CC-34:终帧拒绝清单第三键的本流快照上限;§66)· `OUTCOME_UNKNOWN_ROW_PREFIX` / `isOutcomeUnknownRowText`(0.72.12 CC-50:第三条中性终局行「结局不知道」,读结果帧 `_sema_outcome`;§59)· `MODEL_OUTPUT_ERROR_PREFIX` / `isModelOutputErrorText` / `isModelOutputErrorRowText`(0.72.8 CC-43:runStream 第二条中性臂 —— core malformed tool-call 一族的行身份;§55)· `readEffectiveReasoning` · `readEffectiveMemoryScopes`(0.71.3 CC-06:终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` 的窄读器,§45)· `isSubFlowSegmentEnd` · `SEGMENT_END_IDENTITY_KEYS` · `droppedWhySentence`(0.69.2 CC-13:三件出公面,§38)· `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `SEMA_SEGMENT_ID_KEY`(0.68.2 CC-01:committed assistant 文本行顶层段身份键的唯一字面量出处,壳只读)· `projectMcpSection`(0.68.2 CC-03:`wiring_manifest.mcp[]` 与 `/mcp` 面板 `lastLegMcp.mcp[]` 共用的同一只条目读器)· `readRunCostFacts`(0.66.0:终局成本事实的**唯一读器** —— `TaskStats.costBreakdown` / `nested` 逐键窄读 + 对账三段(own/nested/compaction)与两个「没定价」判别位;终帧的两个超集键与 chrome 臂 `run_cost_reconciled` **共用它**,两面不会各算各的,详见 §31c)· `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`(0.68.0 / L-247:**core 终局因由**闭集,四词 `completed|failed|blocked|paused`)· `RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`RUN_TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇的**单铸谓词**,0.68.0 随 L-247 **两表分源**更名 —— `killed` 属 server run 行状态面、`paused` 属 core 因由面,合成一张会让两边加词时都读不出该改哪儿;`blocked` 是 agent 自报终态,`suspended`/`needs_review` 刻意不在表里,详见 §33b / §30j)· `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(0.68.0 / L-244:子代用量下界位的**自有名**与唯一判据,与终帧 `_sema_usage_lower_bound` 分名,详见 §33g) · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
|
|
162
162
|
| 2 | **seam 公共契约** | 4(其余为 type-only) | `CHROME_ARMS` · `deriveTranscriptId` · `snapshotSegmentIdentity` / `snapshotIsSubFlow`(0.76.1:身份四键一次性快照助手,投影口与 adapt 侧全部臂的唯一身份读点;§77)| 公共词汇 + **id 确定性不变量**(同一条流重放 ⇒ 同一串 id)。`CHROME_ARMS` = 端「我要消费哪些 chrome 臂」的对照清单 | `src/seam.ts` |
|
|
163
|
-
| 3 | **HITL 决断卡链**(§4/§5 主战场) |
|
|
163
|
+
| 3 | **HITL 决断卡链**(§4/§5 主战场) | 219 | `toolPermissionRequestAskBits` / `clearPlanReviewUserDismissals`(0.83.4 CC-203 / CC-201:卡请求 → 座位请求的四位过境口,与卡请求同一把窄读;会话换代时清「用户关卡」记号;§104)· `askSurvivesPosture` / `readApprovalMandate`(0.83.2 CC-193 / CC-195:常驻姿态下「这一张卡能不能由姿态答掉」三态谓词;卡上强制词读口,缺席答缺席;§102)· `sessionPolicyDeliverable` / `sessionPolicyWithheldNotice` / `SESSION_POLICY_WITHHELD_WHY`(0.83.1 CC-117:一批规则串能不能无损写进会话规则记录 —— 整批可送才送、五词成因闭集、每词一句措辞单源;宿主侧那一份的继任;§101)· `isPolicyRefusedGate` / `denyAttributionRefusalFromError` / `denyAttributionRefusalContent` / `removalConsequenceLineForBehavior` / `ruleRemovalBehaviorOf`(0.80.0 CC-133 · CC-132:策略拒谓词 + 归因键三码读口与人话 + 删除规则后果句铸点与闭集读口;§87)· `HITL_POLICY_DENY_MESSAGE` / `APPROVAL_DENY_SETTLED_BY_WORDS` / `readApprovalDenySettledBy` / `SEMA_DENIAL_KIND_KEY`(0.79.0 CC-125:deny 收口帧按 `settledBy` 分两串的冻结句、决断对象归因位的两词可达子集与只认自有数据属性的读器、分类词信封键名;§85)· `approvalIsMandated`(0.79.0 CC-110:审批卡「清不掉」判据口,帧位 ∨ 寄存行缺席词两条腿一个真源;§85)· `readSessionPolicy` / `tightenSessionPolicy` / `tightenedSessionRules` / `classifySessionPolicyFailure` / `sessionPolicyTightenNotice` / `SESSION_POLICY_RULE_FIELDS` / `SESSION_POLICY_TIGHTEN_UNKNOWN_WHY`(0.77.0 CC-105:会话策略窄读 + 收紧编排五臂判别联合)· `writePersistedRule` / `PERSISTED_RULE_WRITE_BEHAVIORS` / `PERSISTED_RULE_WRITE_REFUSAL_CAUSES` / `PERSISTED_RULE_WRITE_UNKNOWN_REASONS`(0.77.0 CC-103:持久规则单步写面,词表派生不手抄;§79)· `persistedRulesWriteAvailable`(0.76.1 CC-102:单步写入口便利口,只派生自写键自己的四态,不与撤销面那只合取;§77)· `approvalResolutionOf` / `isApprovalDecided` / `approvalNotSentCause` / `approvalUnsettledCause` / `APPROVAL_NOT_SENT_CAUSES` / `APPROVAL_UNSETTLED_CAUSES`(CC-77 ①:「一次审批决断最后怎么了」的单源判别联合 `decided` / `not_sent` / `unsettled`,两条腿的结局对象一次判别;既有结局型面一字不动)· `approvalOutcomeNoteOf` / `APPROVAL_NOTE_RETRACTED_DETAIL` / `APPROVAL_NOTE_EDIT_REFUSED_DETAIL`(0.74.5 CC-88:审批结局便签单源;§73)· `decideReceiptReopen` / `suspendedReopenOf`(0.74.3 CC-73:reopen 族第二臂;§71)· `RETRACTED_CARD_DECISION_KIND`(0.74.1 CC-67:卡口无决断收口;§69)· `planReviewOutcomeTail`(0.73.1 CC-57:outcome 尾句六态单铸点;投递口闩;§63)· `readLivePendingRows` / `suspendedSubagentAsks` / `countApprovalsAwaitingDecision` / `createSuspendedAskTracker` / `livePendingRowToApprovalFrame` / `surfaceSuspendedAskAndRespond` / `surfaceEditRefusedOnBlindAsk` + `EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT`(0.72.14 CC-55:悬挂的流内 ask 读面 / 视图 / 去重账 / 决断口;§61)· `planReviewCardOptions` / `planReviewChoiceFromAnswer` / `versionSupportsPlanReviewModeAfter` / `isPlanReviewModeAfter` + `PLAN_REVIEW_APPROVE_AUTO_LABEL` / `PLAN_REVIEW_APPROVE_MANUAL_LABEL` / `PLAN_REVIEW_MODE_AFTER_WORDS` / `PLAN_REVIEW_MODE_AFTER_MIN_ENGINE`(0.72.13 CC-46:plan_review 批准后模式 `permissionModeAfter` 发口与三选卡双闸;§60)· `makeHitlCanUseTool` · `HitlBridge` · `findPendingForTask` · `readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070:`/decide` 200 = **投递受理**不是「门已解决」;`executionOutcome` 缺席 = 未知,详见 §30h) · `HitlSafetyError` · `bridgeAskUserQuestionGates` · `surfaceToolApprovalFrameAndRespond` / `surfaceFsApprovalAndDecide` · `readToolApprovalRespondAck` · `installApprovalCardPort(For)` · `installHitlHostSurface(For)` · `armPlanReviewApproval` · `reopenPlanReviewCard` · `decidePlanReview` · `startApprovalsFeed` · `pendingRowIsOwnedByThisSession` · `approvalCallKey`/`liveFrameCallKey`/`planReviewQuestionId` · `registerArmedGateFor`/`wasGateArmedFor` · `waitForGateArmed(For)`/`onGateArmed`/`gateArmedWaitMs`(#244 F1 呈现回执事件源) · `planReviewArmedKey(For)`/`notePlanReviewAnswered(For)`/`notePlanReviewAnsweredIfDecisive`(A-024.4 plan 呈现分代) · `toolEndOutputText` · `isAskTool` · `waitForParkRowBirth` · `classifyAskParkRows` / `askParkRowArm` / `classifyAskParkChainFailure` · `readDecisionNoteAudit` / `decisionNoteAuditLine` · `resumeRunningOptions` / `resumeChoiceFromLabels` · `persistedRulesLaneAvailable`/`persistedRulesGovernanceAvailable` · `classifyRulesFailure` · `listAllPersistedRules` · `classifySkippedReason` · `readRulePersistOutcome`(#244 F2:persist-ack 读口与 `readToolApprovalRespondAck` 合成一处) · `parseLocalAllowRule`(durable 腿本地落规则窄化骨架,谓词经 `LocalAllowRuleDeps` 注入) · `readToolApprovalRespondRefusal`(#225 件5,0.42.0:respond 抛错的结构化原文读口 —— 三位各自防御读、各自缺席不铸、**三位皆缺席时整只返 `undefined`**;原样交还零加工,UNTRUSTED-for-display)· `installEditedRuleTextPrechecker` / `hasEditedRuleTextPrechecker` / `precheckEditedRuleText`([5076] 转出口,0.42.0:core 5.57.0 `precheckEditedRuleText` 的**端口注入形** —— 类型面 + 注入口 + 诚实缺席读口。🔴 **不是** value 级 re-export,理由见 §7 缺口 **P-34**;未装 ⇒ 返 `undefined`,绝不编一个 `{ok:true}`)· `surfaceRuleArmNotSent` / `RULE_NOT_SENT_WARN_TEXT` + `surfaceRuleArmRejected` / `RULE_NOT_SENT_REJECTED_WARN_TEXT`(#334,0.43.0:人在卡上按下的「不再询问」被整条丢弃时的诚实告知——**两条刻意分开**:前者=**引擎能力位未确认**(换台引擎/等探测就好),后者=**这次选择没过包内表核/互斥核**(表外文本/坏下标/两臂同场,换引擎也不会变) —— 编辑臂 `respondFreeFormRules` 与批臂 `respondBatchRuleOffers` 两条同形存量共用一条,与 `surfaceRememberNotApplied` 同族纪律:决断照送、只是规则没存,静默丢掉用户明确意图 = 让人以为功能坏了)· `projectCrashConverged`(L-38,0.49.0:`/v1/approvals` additive 键 `crashConverged` 的分桶投影 —— 崩溃收敛的孤儿审批读面,**缺席 ≠ 空数组**、分桶恰一个合取、坏行丢弃并计数,详见 §12;同批把 `ApprovalsResourceLike.list()` 的返回位 additive 放宽成 `ApprovalsListEnvelope`,老形 `{pending}` 仍可赋值)· `readRuleOffers` / `readRuleOfferSupply`(L-103/[C228],0.57.0 additive 导出:「不再询问」候选两代 wire 键的窄读器**公面化** —— 此前只经卡端口出包,不走卡端口架构的宿主只能自己重铸一把,而它承载的是兑付安全判据(原始下标不前移/逐条丢坏/闭集 kind/两代取舍序),详见 §20)· `RULE_OFFERS_ABSENCE_REASONS` / `DENIAL_LIMIT_KINDS`(0.59.0 / sdk 8.3.0 提货:`ruleOffersAbsence` 三词与 `denialLimitFallback.limit` 二词的**运行期**闭词表再导出 —— 与 0.58.0 那三张同一条纪律:端拿它做判定别再手抄字面量。⚠️ **本包自己不拿这两张表做窄读判定**(两处都按开集透传,词表属主是 core、server 已按闭集拒过),再导出只是给端的 `switch` 一份可数的表,端仍必须带 `default` 臂,详见 §23a)· `DecideTransportRetryExhaustedError`(Inkglow-1085 P0a:decide 出站瞬断重试耗尽的 typed 判别 —— HitlBridge 内建单次退避重试,耗尽走重呈臂不判死 turn;端一般只消费行为,不需要 instanceof) · `gateOutcomeOf` / `isDeniedGate` / `gateDeniedBy` / `gateApprover` / `isApprovalWindowExpiredGate` / `isDenialLimitAutoDeniedGate` / `isParkSlaExpiredGate` / `isHumanSettledGate`(0.60.0 / engine ≥7.64.0:`tool_end.gate` 整条门记录的窄读器 + 判定谓词 —— 取代退役的四个正交词 `settledBy`/`resolution`/`autoDenied`/`approver`。🔴 **判定归包**:「是不是审批窗自己走完的拒绝」旧形上是端各自拼的两键合取,而三条窗词现在分得开、合并读回去等于把刚修好的判别力扔掉;⚠️ 公面型一律带 `View` 后缀 —— 本文件的 `GateOutcome`(决断腿结局)与 sdk 的 `GateOutcome`(引擎门记录)**同名不同义**,详见 §24c)· `isGateParkedToolEnd`(「这次调用没在这里结算」的**第二形**谓词:gate 缺席 + `errorCode:"gate.parked"`;端判这件事必须与 `isApprovalWindowExpiredGate` **两形合读**) · `readWireErrorCode`(B-037 候包件②:decide/取件失败上引擎 wire 机器码的单源读口,结构视图读不 `instanceof`;与本包铸的 `code` 是两个命名空间,详见 §24g)| suspended→decide→resume 环。🔴 **D-1 两元组 verbatim 回显**是字节级断言的安全不变量,端**不许重实现它的任何一段**。🔴 键空间边界(web [C1] d3 拦截):`gateIdentity` 四常量两函数只覆盖 HITL questionId/callKey 空间;seat 的 `TOOL_PERMISSION_REQUEST_ID_DOMAINS`(`plan:` 等)是另一键空间,**两者绝不合并**(合并=座位校验器静默拒全部 plan-review 卡) | `src/hitl/hitlBridge.ts`、`toolApprovalWire.ts`、`askGateWire.ts`、`planReviewWire.ts`、`hitlHostSurface.ts`、`gateIdentity.ts`、`armedGateRegistry.ts`、`parkOwnership.ts`、`parkResolver.ts`、`approvalsFeed.ts`、`frameRouter.ts`(**只挑名导出** `toolEndOutputText`/`ENGINE_ABORT_TOOL_RESULT`/`isAskTool`/`HITL_REJECT_MESSAGE`/`HITL_INTERRUPT_MESSAGE_FOR_TOOL_USE`)、`parkRowBirthWait.ts`、`approvalDecisionNoteAudit.ts`、`askParkRowRouting.ts`、`resumeRunningCard.ts`(#265 上收的判定层)、`persistedRulesWire.ts`、`localAllowRule.ts`(#244 F2 规则侧)、`crashConverged.ts`(L-38 崩溃收敛读面)、`sessionPolicyDeliverable.ts`(0.83.1 CC-117 会话规则无损判定)、`askSurvivesPosture.ts`(0.83.2 CC-193 姿态放行谓词)、`src/gateOutcome.ts` |
|
|
164
164
|
| 4 | **子代 wire + 面板侧信道台账** | 107 | `isEngineAgentAbsentRow` / `engineAgentAbsenceMarkOf` / `engineAgentAbsenceClockStopMs` / `engineAgentPanelEventClearsAbsence` / `engineAgentRowCountsAsRunning` / `tallyEngineAgentRows` / `engineAgentTurnSweepSettles` / `reapEngineAgentAbsentRows` / `engineAgentAbsenceTtlDueAtMs` / `engineAgentAbsenceDroppedLine` / `engineAgentTerminalAfterDropLine` + `ENGINE_AGENT_ABSENT_ROW_TEXT` / `ENGINE_AGENT_ABSENCE_TTL_MS` / `ENGINE_AGENT_REGISTRY_READINGS`(0.83.2 CC-194:后台子代缺席行的判定 / 计数 / sweep 豁免 / 回收 / 措辞单源,回收只在后台代理登记确认离场时;§102)· `isNewEngineAgentPanelCycle`(0.74.5 CC-87:新周期单源判据;§73)· `resolveEnginePanelTaskId` / `MAX_HELD_WIRE_TICK_BEATS` / `clearEnginePanelTaskResidentByWire`(0.74.3 CC-70:子代身份归一读口、缓一拍节拍上限、按 wire id 清常驻标(前代终态不清当代);§71)· `isStaleEngineAgentPanelEnd`(0.74.0 CC-66:面板 end 的周期身份判据;§68)· `subscribeEngineAgentPanelAbsence` / `publishEngineAgentPanelAbsence`(0.72.13:fleet 行缺席上报的**独立订阅口** —— 不上主通道,老消费者结构上收不到;§60 S-5)· `tailEngineSubagent` · `installSubagentActivitySink` · `installSubagentTailMetaSink`(#280 件2:tail meta 帧发布口,`contentFrames` 判别位载体)· `stopEngineTask` + `classifyTaskStopConflict` · `fetchEngineSubagentReport` · `steerEngineSubagent`(0.32.0 未发布 #280 件A:additive 第三参 `childTaskId` —— 端有行上下文时**应当**传,传了就走「台账优先 / 缺席即诚实缺席 + `noteBgOwnerAbsence` 留痕」的 Q3 口径,与 tail·taskOutput·subagentOutput 三腿同姿势、与孪生 resume 腿共用同一个 `resolveOwnerRunId` 判据;**不传**则逐字维持旧行为=回落在飞 run)· `resumeSettledSubagent` + `resolveSubagentResumeContext` + `resolveOwnerRunId` + `classifySubagentResumeFailure` + `subagentResumeAvailable`(#242 批 2 A-028.7:resume 判定半场上收,与 steer 孪生同居;取址三态 = 台账有行用行值 / 指名了行但台账缺席则**诚实缺席绝不回落在飞 run** / 没指名行才回落。出路文案归端)· `recordSubagentOwnerFromProgress` + `getBgParentRunOwner`(A-028.6:「子代 → 宿主 run」**单表**,宿主 run 必须由持 stream-local 值的调用方显式传入,包内绝不从 `activeEngineRunId()` 推断)· `noteBgOwnerAbsence`(#242 批 3 [4000] Q3=B:tail/taskOutput·taskStop/subagentOutput 三腿台账缺席即诚实缺席**绝不回落在飞 run**,缺席 warn 留痕每 (腿,taskId) 一条)· `clearBgTerminalFacts`(#242 批 3 扫码修:复活=新周期,旧周期终态事实作废——fleetLedger 复活两腿按尾段清账,factsAccepted 方向核不再拿上周期终态当先例)· `auditRetainWithoutWake`([4000] Q5:引擎宣示 `subagentResume` + 本端在付 `retainSubagentSessions` + 端未实现 `wakeSubagent` ⇒ 响亮一条;`CLIENT_VERBS.wakeSubagent` 维持 fail-soft)· `subscribeSubagentContent` · `subscribeEngineAgentPanel` · `publishQuestionFrame` / `respondToQuestion` · `configureSubagentContentStore` / `subagentContentStoreConfig` / `SUBAGENT_CONTENT_STORE_DEFAULTS`(0.62.0:子代内容账本的**字节预算** —— 此前只有条数帽而单条无上限,一条 base64 工具结果就能让一个子代槽吃到十几 MB;越限从最早的内容开始丢并留一条可渲染的 `truncated` 记录,总帽淘汰整条最久未用的账本。配置面 fail-loud,详见 §26②)| 驱动与观测委派子代;经 module 级台账喂活体 agent/task 面板。全部**能力位 gate**(§5b) | `src/subagent/*.ts`、`src/subagentContentStore.ts`、`src/engineAgentPanelStore.ts`、`src/engineAgentAbsence.ts`(0.83.2 CC-194 缺席行判定与措辞)、`src/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
|
|
165
|
-
| 5 | **fleet 投影** |
|
|
165
|
+
| 5 | **fleet 投影** | 40 | `displayUntrustedMarks`(0.83.5 CC-204:同一只出口另报每一枚字符面标记的 UTF-16 区间,`text` 与同选项的出口逐字节同;§105)· `displayUntrusted`(0.83.1 CC-112:wire 派生文本上屏前的合成出口三端单源 —— 凭据两网 ∘ 字符三网,选项按载体选;本域 `escapeDisplayControlChars` / `collapseLabel` / `capForDisplay` 三只旧口改由同一只字符面引擎实现、输出逐字节不变,字符集窄于新口默认;§101)· `createFleetLedger` · `projectTasks` · `projectWorkflows` · `projectFleetAgentRows` · `readEngineActiveBgTasks` · `FLEET_TASK_VIEW_KEYS` · `escapeDisplayControlChars`(不可见字符可见化,行标签/描述消毒的共享底座)· `capForDisplay`(0.62.0:呈前**消毒 + 封长**的共用铸点 —— 先转义、后按转义结果封长,截点避开半截转义 token 与合法代理对;本包该族四处此前各写一份、其中三份顺序是反的,详见 §26⑦)· `wireCycleSeq`(0.38.0 提货补投的 #261 §2 两位之一,另一位 `wireRetiredBy` 🔧 0.72.0 退出公面:代际号 = SendMessage 复活即 +1,**缺席 ≠ 第一代**;`retiredBy` 在场 = 这条终态是对账腿从 durable run 行投影出来的、**不是**发布方亲报 —— 幽灵行与正常收尾唯一的 wire 判据。两位都只在场才落键) | 老 `fleetClient` 那一刀的成品:**帧体归库、连接归端** —— 端持 SSE 连接,库做行投影 + 保留台账 | `src/fleet/fleetProjection.ts`、`src/fleet/fleetLedger.ts`、`src/fleetAgentPanelProjection.ts`、`src/fleetTaskDesc.ts`、`src/displayUntrusted.ts`(0.83.1 CC-112:展示层安全出口单源,本域三只旧口的字符面引擎) |
|
|
166
166
|
| 6 | **请求装配(上行唯一构造口)** | 30 | `REQUEST_LANES` / `APPROVER_POSTURE_BYPASS` / `approverPostureDeclarationField` / `taskRequestOmissionCauseDetail` / `parseMaxCostUsd`(0.79.0 CC-116 · 118 · 123:第三条车道清单、审批姿态声明的唯一铸点与意图位片段、回执成因人话、花费上限文本解析;§85)· `assembleTaskRequest` / `taskRequestSeatOf` / `TASK_REQUEST_OMISSION_CAUSES` / `UPSTREAM_ABSENT_REQUEST_INTENTS`(0.77.0 CC-101:逐键去向回执 + 座位读数 + 成因词表 + 上游无对位表;§79)· `readAgentMemorySpec` / `unknownMemorySpecKeys` / `unknownMemorySpecKeysNote` / `memoryConfigRefusalNoteOf` / `KNOWN_AGENT_MEMORY_SPEC_KEYS` / `PENDING_MEMORY_SPEC_KEYS` / `RETIRED_MEMORY_SPEC_SINGULAR_KEY` / `MAX_UNKNOWN_MEMORY_SPEC_KEYS`(CC-96:`agents[].memory` 记忆 spec 的三态读口与闭白名单判官 —— 未列键拒掉的是**整只 agent 定义**)· `MEMORY_OFF` / `memoryOffDeclarationField` / `memoryOffDeclared`(0.72.8 CC-39③:`memory:"off"` 请求级整面关的意图位片段;§55)· `buildTaskRequest` · `REQUEST_FIELD_MATRIX` · `unregisteredRequestKeys` · `applyLiveRequestDefaults` · `taskNotificationToPrintFrame` | 两条车道(`interactive`/`print`)出站请求的**唯一**构造器;`unregisteredRequestKeys` 是可执行门 —— 端偷带一个未登记键上 wire 就红 | `src/request/taskRequest.ts`、`src/request/printNotification.ts` |
|
|
167
167
|
| 7 | **通知与 outstanding 台账** | 52 | `noteOwnWorkflowRun`(0.72.2 CC-37:own 台账显式登记口,adapter workflow lane 门在 own-run 正向证明下同拍调;§49)· `installNotificationQueuePort` · `normalizeTaskNotification` · `taskNotificationDedupKeyFromWire` · `registerOutstandingBgTask` / `registerOutstandingWorkflowRun` · `notificationQueuePortMisses` · `subscribeOutstandingWorkflows` · `outstandingDeliverableWorkflowCount` | `task_notification` 归一 + 去重 + 投递进宿主命令队列的**一把闸**;`outstandingDeliverableWorkflowCount()` 是 headless `-p` 的**退出门** · `classifyPeerNotification` / `renderPeerFrameTranscriptText` / `parsePeerFrameText` / `peerFrameDisplayName` + 三张闭集表(design/385,0.54.0:同一条 `task_notification` 车道上三条**引擎注入帧**的类型化投影 —— 判别位=载体在场而非 summary 文本,详见 §17) | `src/notifications.ts`(11 个 module 台账) |
|
|
168
|
-
| 8 | **工具结果卡** |
|
|
168
|
+
| 8 | **工具结果卡** | 27 | `stripSystemReminderBlocks` / `unwrapSystemReminder`(0.83.4 CC-205:引擎 `<system-reminder>` 信封壳的剥离与整条解包,开标签只认引擎铸的两形,线性时间;§104)· `displayBody`(0.78.1 CC-113:工具结果正文的人类面读口,剥本包铸的不可信围栏,三形互不折叠;§83)· `structuredToToolUseResult` · `readAsyncLaunchedAgentReceipt` · `wireOutputToBody` · `parseModelFacingBash` · `getPatchFromContents` · `toolEndResultToUserFrame` · `flattenToolOutput` | 铸端要渲的 `tool_result` 卡体,含客户端 diff hunk(唯一 runtime dep 的用处) | `src/toolResult.ts`、`src/printToolResultFrame.ts`、`src/diff/patch.ts` |
|
|
169
169
|
| 9 | **能力/旋钮 wire 门族** | 179 | `hooksWirePlan` / `pluginHookVerdictOf` / `hooksNotRunNotice` / `pluginHookExecutorLabel` / `pluginHookReasonText` / `settingsHookDropText` / `isEngineFiredHookEvent` + `ENGINE_FIRED_HOOK_EVENTS` / `PLUGIN_HOOK_DISPOSITIONS` / `PLUGIN_HOOK_REASONS` / `PLUGIN_HOOK_EXCLUSION_REASONS` / `SETTINGS_HOOK_DROP_REASONS`(0.83.1 CC-174:插件 hook 每轮计划 —— 逐条判「投给引擎 / 本客户端执行 / 如实不跑」,请求体 hooks 与本地跳过用同一份,开机「不会执行」清单与 `/hooks` 标注措辞单源,五张闭集;读口是 `SettingsPort` 的可选成员 `enabledPluginHooks`(型面,不计名数);§101)· `invalidateTaskAgentsWire`(0.82.1 CC-161:自定义代理载荷作废并重投,就绪门等最新一代,§93 S-14)· `projectFileHistoryCaptureCapability` / `noteEngineCapsForFileHistoryCapture` / `observedFileHistoryCapture` / `forgetFileHistoryCaptureReading` / `fileHistoryCaptureMode` / `fileHistoryCaptureDoctorDetail`(0.82.1 CC-163:`capabilities.fileHistoryCapture` 四态读口 + 判据 + 措辞单源;§93)· `observedRewindArchive` / `rewindCodeArchiveAvailability` / `rewindConversationAvailability` / `rewindArchiveDoctorDetail` / `rewindConversationDoctorDetail`(0.82.0 CC-146:`/rewind` 代码档与对话档可用性四位窄读口 + 端判据三态 + 措辞单源,替掉壳侧「本地备份表非空」那条判据;§92)· `mcpEngineLegLivenessOf` / `mcpDetailLegNote` / `isMcpLivenessState`(0.80.0 CC-134:引擎腿活性六档读口 + 九句范围说明铸点 + 活性三词判据上公面;§87)· `projectMcpProbeCapability` / `noteEngineCapsForMcpProbe` / `observedMcpProbe` / `forgetMcpProbeReading` / `mcpProbeAvailable` / `mcpProbeDoctorDetail`(0.79.0 CC-74:`capabilities.mcpProbe` 四态读口 + 「这次调用要不要上 wire」三态 + doctor 句;§85)· `projectSessionPolicyCapability` / `observedSessionPolicy` / `sessionPolicyFaceAvailable`(0.77.0 CC-105:`capabilities.sessionPolicy` 四态读口 + 渲不渲写入口三态;§79)· `projectMemoryComplianceCapability` / `memoryComplianceVerbsAvailable` · `projectMemoryOriginCapability` / `memoryOriginVerbsAvailable`(0.76.1 CC-97a:`capabilities.memoryCompliance` / `memoryOrigin` 两只四态读口,同判据不同位、各持一张表;§77)· `projectPeerLaneCapability` / `observedPeerLane` / `peerLaneAvailable`(0.76.1 CC-102:`capabilities.peerLane` 四态读口 + 露不露跨会话入口的三态判据;非 HTTP 面)· `projectPermissionRulesWriteCapability` / `observedPermissionRulesWrite` / `permissionRulesWriteAvailable`(0.76.1 CC-102:`capabilities.permissionRulesWrite` 四态读口 —— 键缺席 = 二进制比单步写口老、藏入口;在场按本键的值判这次够不够得着;§77)· `projectDeviceExecutorManagementCapability` / `noteEngineCapsForDeviceExecutorManagement` / `observedDeviceExecutorManagement` / `forgetDeviceExecutorManagementReading` / `deviceExecutorManagementDoctorDetail` / `deviceManagementVerbsAvailable`(0.74.2 CC-69;§70)· `projectApprovalsStreamLiveCapability` / `noteEngineCapsForApprovalsStreamLive` / `observedApprovalsStreamLive` / `forgetApprovalsStreamLiveReading` / `approvalsStreamLiveDoctorDetail` / `livePendingNeedsReconcile`(0.73.3 CC-61;§65)· `projectExecutionLaneCapability` / `noteEngineCapsForExecutionLane` / `observedExecutionLane` / `forgetExecutionLaneReading` / `executionLaneDoctorDetail` / `toolsRunHereFromExecutionLane`(0.72.13 CC-54:`capabilities.executionLane` 四态读面,键缺席 ≠ 不是本机车道;§60)· `AGENT_MEMORY_WORDS`(0.72.3 CC-39①:`memory: user|project|local` 三词;`projectAgentsForWire` 把它们同映射为 `agents[].memory = { scopes:[agent:<type>], writeScope }`;§50)· `skillBaseDirOf`(0.72.1 CC-33:`SkillSpec.baseDir` 窄读 = server 顶层门同一只结构判据;`skillCommandsToSpecs` 第三参 `{ toolsRunHere }` 只在本机车道带;§48)· `projectAgentsForWire` / `awaitTaskAgentsWire` · `hooksForWire` · `mcpConfigsToSpecs` · `ultracodeForRequest` · `buildWebSearchEnv`(`resolveWebSearch` 🔧 0.83.0 退出公面,换读域 15 的 `resolveWebSearchVerdict`) · `attachmentsForRequest` · `projectEffectiveBody` · `classifySelfOrchestrationRefusal` / `stripSelfOrchestrationIntent` / `projectWorkflowsGate` / `SELF_ORCHESTRATION_RETRY_WITHOUT`(S-81,server 7.57.0:上面两条 stamp 腿的**背面** —— 半配置多租户形态下 server 把带 `selfOrchestration` / `settings.ultracode` 的提交 501 拒掉,判型/去键/caps 闸三处都是判定不是文案,详见 §13) · `engineCapsGeneration`(0.60.0,异源对抗复审 [medium] 逼出:caps 探测的**当代号**读口 —— 代际闸在 probe **返回之后**才跑,而宿主的读面 tee 是在 probe **内部**落地的 ⇒ 一次慢的旧探测能把上一台引擎的读数写回来。宿主在**起探测那一刻**抓号、tee 时交回 `{generation}`,陈旧那一发整只丢掉;不传 = 逐字节同行为,详见 §24e)| 逐功能的「引擎有没有这个能力 + 这个字段怎么上 wire」投影器,由 `buildTaskRequest` 组装。🔴 `hooksForWire()` 是 **fail-closed**:无 `SettingsPort` ⇒ 返回 `undefined`(信任门,不是取值) | 17 个 `src/*WireCaps.ts` + `src/scratchpadWireCaps.ts`、`src/hooksWireCaps.ts`、`src/goalStopHook.ts`、`src/websearch/searchProviderPresets.ts`、`src/selfOrchestrationDenial.ts`(S-81 拒绝判定层)、`src/pluginHooksWire.ts`(0.83.1 CC-174:插件 hook 判定 / 措辞 / 闭集,经 `src/hooksWireCaps.ts` 编排) |
|
|
170
170
|
| 10 | **headless / 部署旋钮 wire** | 61 | `lastFlagValue`(0.74.3 CC-80:argv 末次旗值扫描原语上公面;§71)· `probeEngineDetachSupport` / `detachSupportDisclosure`(0.72.13 CC-53:detach 版本闸三态读口 + 披露句;§60)· `parseSandboxArgv` / `sandboxRequestFields` · `parseLimitsArgv` / `limitsForPrint` · `resolveHeadlessFinalVerify` · `resolveHeadlessPermissionMode` · `resolveHeadlessInteractiveTools` · `armDetachCancel` + `detachCancelArm` + `isDetachArmed` · `withHeadlessR1Reconnect` | `-p`/headless 车道的 env+argv 旋钮。🔴 `detachWire` 是**拆**的补偿:判定与 cancel-arm 台账在库,信号路径的裸 fetch 留宿主(`detachCancelArm()` 是取件口) | `src/sandboxWire.ts`、`scenarioWire.ts`、`finalVerifyWire.ts`、`limitsWire.ts`、`interactiveToolsWire.ts`、`headlessPermissionModeWire.ts`、`headlessReconnectWire.ts`、`detachWire.ts` |
|
|
171
171
|
| 11 | **模型目录与预算** | 72 | `modelIdentityResolvability` / `modelIdentityDetail` / `modelSetupDecision` / `modelSetupNotice` / `observedEngineAnswer`(0.82.1 CC-151:「引擎启动时拿不拿得到模型名」三态判据 + 向导两位决策 + 措辞单源,§93 S-11)· `routePairingVerdict`(0.71.3 CC-06:`ModelInfo.routePairing` ok / broken / unknown 三态读口,§45)· `resolveModelCatalog` · `loadCatalogWithSources` · `PROVIDER_PRESETS` / `MODEL_FAMILIES` · `defaultMaxTokensFor` · `getLiveModelCatalog` / `setLiveModelCatalogRefresher` · `providerAuthMethods` / `beginDeviceCodeAuth` · `providerCatalogRows` / `providerCatalogRowDetail` / `providerPresetById`(#244 F4 族D A-028.17:46 家表的规范折表层 —— 全表不重排、诚实缺席「model id typed in」,cli 目录/web 向导同一份折表)· `TIER_ORDER` / `CC_TIER_ALIASES` / `isTier` / `resolveTierBinding`(A-028.18:档位词表+校验+fail-open 降档派生单源;settings 存储归宿主)· `resolveEntryVision` / `computeDeleteBlockers` / `computeDeleteWarnings`(0.38.0 #318 件③ 上收:Model Hub 供给面的三端公共判定 —— vision 生效值+来源三态、删除断链核(拒删+指路)、删除降级后果(照删但必说)。**零 IO**,读盘那半场留各端;`doc === null` 的两义在调用方分流) | 三层 provider 目录解析(线上 URL → 包内预设 → 用户覆盖)+ per-model `maxTokens` 封顶。线上腿需注入 `CatalogFetchJson`,缺席 ⇒ 整条不启用(`online.reason='no-fetch-port'`);缓存落盘经 `CatalogCachePort` | `src/model/{catalog,catalogLoader,providerAuth,providerPresets,providerCatalog,tierVocabulary}.ts`、`src/liveModelCatalog.ts`、`src/modelBudgetRule.ts`、`src/sessionModelLatch.ts`、`src/effortWire.ts` |
|
|
@@ -249,7 +249,7 @@ type EventProjection =
|
|
|
249
249
|
`config_assembled`(引擎可观测/审计面,CC transcript 无对位物;context_usage 自 0.71.0 CC-08 ③ 起**进切片**为 chrome 臂,不再在本表,见 §42)·
|
|
250
250
|
`needs_review`(壳消费的是 `done{status:'needs_review'}` 终帧,事件形重复且更早)·
|
|
251
251
|
(compaction_outcome 自 0.75.0 CC-89 起**进切片**为 chrome 臂,不再在本表,见 §74)·
|
|
252
|
-
(prompt_assembled 自 0.76.0 CC-91 起**进切片**为 chrome 臂,不再在本表,见 §
|
|
252
|
+
(prompt_assembled 自 0.76.0 CC-91 起**进切片**为 chrome 臂,不再在本表,见 §76)·
|
|
253
253
|
`tool_approval` / `tool_approval_complete`(**不是丢帧**:它们走
|
|
254
254
|
`hitl/toolApprovalWire.isToolApprovalFrame` + `hitl/frameRouter` 那条审批卡链;在这里投一条 transcript 行
|
|
255
255
|
只会让同一只 ask 出现两次)· **`error`**(见下,单列)。
|
|
@@ -262,11 +262,13 @@ type EventProjection =
|
|
|
262
262
|
所以只投那个锚而把本帧丢掉,等于交给端一个解析不出东西的锚。现在它投**中性内部臂 + 可选 chrome
|
|
263
263
|
记账**,仍然**绝不铸 transcript 行**(本帧不带正文)。
|
|
264
264
|
|
|
265
|
-
📌 **`wiring_manifest` 自 0.56.0
|
|
266
|
-
`modelGate`
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
265
|
+
📌 **`wiring_manifest` 自 0.56.0 起离开本表,今天投九段**(内部臂上的段键一律 `_sema_*`):
|
|
266
|
+
`modelGate` / `autoMode`(0.56.0 起,§19)· `mcp` · `tools` · `hooks` · `lsp` · `writeProtection` ·
|
|
267
|
+
`autoConsolidation` · `readDeny`。端读 chrome 臂 `wiring_manifest`;非流式提交回执走 `readSubmitWiringManifest`,
|
|
268
|
+
两条腿同一张 `WiringManifestView`(§83;九段的在场判据单源在 `src/adapter/downstream/wiringManifestView.ts`)。
|
|
269
|
+
其余十一段(leg / ask / question / interaction / elicit / parkLane / session / fleet / permissionRules /
|
|
270
|
+
governance / configFingerprint;按 sdk 11.3 `wiring_manifest` 臂声明逐段核过)**仍未投影**;九段都不成形的帧
|
|
271
|
+
照旧回 `none/not_in_slice`,**不铸空臂**。⇒ 别把「wiring_manifest 不在这张表里了」读成「整份 manifest 接上了」。
|
|
270
272
|
|
|
271
273
|
🔴 **`error` 单列点名**(端最容易据 §3a 的规则推错的一条):它的名字骗人 —— 那是流的 **15 分钟帽帧**
|
|
272
274
|
(server `sse-log.ts`,已知 `errorCode` = `STREAM_MAX_DURATION`),帧自己就说 **run 仍然活着**;
|
|
@@ -326,28 +328,33 @@ removal after the last running beat」。**按开集透传**(空串 / 非串 /
|
|
|
326
328
|
`case 'tool_end'` 曾是同一个病形的连续实例 —— 臂是**闭形白名单**,于是一条**已经在 wire 上**的
|
|
327
329
|
事实到不了宿主,而两边代码看着都对。逐例:`toolCallId`([1947])→ `governanceForced`([2942])→
|
|
328
330
|
`settledBy` / `approver`(#263,0.30.8)→ `_sema_collateral_abort`(#324,0.40.0)→
|
|
329
|
-
**`resolution`(A-D2,0.42.0
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
`
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
331
|
+
**`resolution`(A-D2,0.42.0)**。
|
|
332
|
+
|
|
333
|
+
🔴 **0.60.0 起(engine ≥7.64.0 / sdk 8.4.0,wire BREAKING)门结算的四个扁平词全删、无 alias**:
|
|
334
|
+
`settledBy` / `resolution` / `autoDenied` / `approver` 换成**一条门记录** `tool_end.gate`,本臂经包内
|
|
335
|
+
单源窄读器 `gateOutcomeOf` 铸出后原样上臂(读不成形就不铸键,绝不折成空壳)。门记录 =
|
|
336
|
+
`disposition`(放行 / 被哪一**层**拒)+ `settlement?`(这次消费掉的等待怎么结束的;`kind` 按开集读)
|
|
337
|
+
+ `origin?`(谁问的),后两位同在同缺。读器签名、形与逐形缺席语义见 §24c。
|
|
338
|
+
|
|
339
|
+
🔴 **端的读法 = 调包里的谓词,不再自拼**:旧形上端各自拼的两键合取
|
|
340
|
+
(`settledBy === 'timeout' && resolution === 'window_expired'`)作废 —— 那两个键在 wire 上已经不存在。
|
|
341
|
+
- 「审批窗自己走完了,拒了」⇒ `isApprovalWindowExpiredGate(gateOutcomeOf(f))`;
|
|
342
|
+
- 「这次调用没在这里结算」要**两形合读** ⇒ `isApprovalWindowExpiredGate(gateOutcomeOf(f)) || isGateParkedToolEnd(f)`
|
|
343
|
+
(后一形:帧上没有 `gate`、只有 `errorCode: "gate.parked"` —— park 了、还没人决;两形要说的话不同,不许互相顶替);
|
|
344
|
+
- 「引擎的限额回落窗自动拒的」(旧 `autoDenied === true`)⇒ `isDenialLimitAutoDeniedGate(g)`;耐久 park 的 SLA
|
|
345
|
+
到期 ⇒ `isParkSlaExpiredGate(g)`;人结算的 ⇒ `isHumanSettledGate(g)`;部署策略结算的 ⇒ `isPolicyRefusedGate(g)`;
|
|
346
|
+
拒没拒、哪一层拒 ⇒ `isDeniedGate(g)` / `gateDeniedBy(g)`;通道自报的身份串 ⇒ `gateApprover(g)`(只供展示,不作鉴权)。
|
|
347
|
+
- 三条窗词(`approval_window_expired` / `denial_limit_window_expired` / `park_sla_expired`)**刻意不合并读**:
|
|
348
|
+
旧形上它们共用一个 `settledBy: "timeout"`,分不出来正是当年补 `resolution` 这第二个键的原因。
|
|
349
|
+
|
|
350
|
+
🔴 **判据仍用正面匹配**:谓词内部都是「恰等于某一个词」;端自己分支 `settlement.kind` / `deniedBy` /
|
|
351
|
+
`origin` 时同样逐词正面匹配 + 永远带 `default`,**绝不**写不等式 —— 不等式对缺席与任何未来新词都为真,
|
|
352
|
+
「不知道是怎么结束的」会被折成某一种结局。三处词表属主都是引擎,表外词原样呈现。
|
|
353
|
+
🔴 **缺席不可反推**:`gate` 缺席不是关于这次调用的事实(上游列了四种在 wire 上不可分辨的成因)⇒ 一律
|
|
354
|
+
退回 `isError` + 文案;`settlement` 只在这次通过真的结算了一只 ask 时在场,缺席 ≠「不是拒绝」也 ≠「人拒的」。
|
|
355
|
+
|
|
356
|
+
**实现锚**:`src/adapter/downstream/eventToSdkMessage.ts` 的 `case 'tool_end'`;窄读器与谓词在
|
|
357
|
+
`src/gateOutcome.ts`;臂上的防御性读形 `ToolEndResultArmLike.gate` 在 `src/printToolResultFrame.ts`。
|
|
351
358
|
|
|
352
359
|
### 3e. 无臂帧(SDK union 里连成员都没有 ⇒ 穷举保护对它失效)
|
|
353
360
|
|
|
@@ -538,8 +545,8 @@ drain 那条拦的是「判完之后又来一批背后没有 park 的 abort 帧
|
|
|
538
545
|
「这是主角」**,更不能据此渲「这条才是你刚决断的那个」。要断言主角身份,端自己按 `toolCallId`
|
|
539
546
|
与手上的审批卡对账,别拿本键的缺席反推([honest-absence-not-fabricated-zero])。
|
|
540
547
|
|
|
541
|
-
🔴 **端怎么读(唯一正道)**:从 **`tool_end_result` 臂**上读(`errorCode` / `
|
|
542
|
-
`
|
|
548
|
+
🔴 **端怎么读(唯一正道)**:从 **`tool_end_result` 臂**上读(`errorCode` / `gate` /
|
|
549
|
+
`delivered` 同款位置),按 `toolCallId` 归集,自己决定呈现(建议:连坐簇按 repeated-error 族
|
|
543
550
|
软化折叠,头卡留 + 计数尾)。**判别取机读位,不猜文案** —— `Operation aborted` 这串是
|
|
544
551
|
引擎词汇,会随 core 版本变。键常量从本包取:`import { SEMA_COLLATERAL_ABORT_KEY }`
|
|
545
552
|
(单一真源,三端别各自手抄)。
|
|
@@ -611,8 +618,8 @@ pure 门 062⑥/⑦):
|
|
|
611
618
|
| `rulePersisted?: boolean`(sdk 6.14.0,#225) | **缺席 ≠ false**(未带 `persistRule` 的回决 / 旧 server 省略);非布尔降缺席 | 决定「规则存没存上」的诚实告知;透传坏形会说反话 |
|
|
612
619
|
| `ruleRefusal?: string`(sdk 6.14.0) | 非串/空串 ⇒ 降缺席 | 规则被拒的归因(如 `rule_not_offered`)原样呈现,不改写 |
|
|
613
620
|
| `noteRecorded?: boolean`(sdk 6.16.0,#229) | **缺席 ≠ false**(未带 `note` 的回决 / 老 server 省略);非布尔降缺席 | 发了 `note` 而 `!== true` ⇒ **debug 留痕即可,不惊动用户**:决断没丢,丢的只是理由的持久档(纯活卡无行可落 / 店抖但裁决照常生效 / 并发同决议先落行) |
|
|
614
|
-
| 🆕 `persistedRule?: string`(server ≥7.44
|
|
615
|
-
| 🆕 `persistedRules?: readonly string[]`(server ≥7.46.0
|
|
621
|
+
| 🆕 `persistedRule?: string`(server ≥7.44;sdk 8.2.0 起在 `ToolApprovalRespondAck` 上声明 —— `ToolApprovalRespondAckView` 自 0.58.0 起就是它的别名,不再是超集;0.43.0–0.57.0 那段是超集位) | 非串/空串 ⇒ 降缺席;候选臂/批臂/兑付失败/老 server ⇒ 字段省略。🔴 **三道包内相关性闸**(过不了就降缺席 + 响亮留痕):①与 `persistedRules` **同场**(互斥臂的产物)⇒ 两位一起丢;②`rulePersisted !== true` ⇒ 丢(「没存上」却报「存成了什么」自相矛盾);③**本次不是编辑臂**(`persistRuleEdited !== true`)⇒ 丢 —— server `editedArmEcho` 只在编辑臂铸,候选臂上的这一位是一次没发生过的授权 | **编辑臂**兑付成功时规则店里**真正落盘**的规范文本。🔴 **界面要回显的是这一份,不是输入框里那一份** —— core 会规范化拼写(`Bash(adb *)` → `Bash(adb:*)`),回显输入框那份等于告诉人「你存的是 X」而店里是 Y |
|
|
622
|
+
| 🆕 `persistedRules?: readonly string[]`(server ≥7.46.0;同上,sdk 8.2.0 起声明) | **整只判形**:非数组 / 空数组 / 含非串或空串成员 ⇒ 整只降缺席(半份清单比没有清单更坏);非批臂/失败/老 server ⇒ 省略。🔴 **同样过三道包内闸**:①与 `persistedRule` 同场 ⇒ 两位一起丢;②`rulePersisted !== true` ⇒ 丢;③**基数相关性** —— 条数必须等于本次所选 batch offer 的成员数(server 契约逐字「全体成员落地 + 展示序 = 成员序」),多报 = 声称存了用户在这只批里**没看见**的规则(授权范围被放大)、少报 = 这份清单不是它自称的「全体」;⚠️ **只核基数不复判文本**(规范化是引擎的活,在这里比对文本就是装第二个判官);⚠️ **在册残余 P-39**:基数抓不到「条数对但内容是另一批规则」—— 端渲成「**引擎报告**落盘的规则」而不是「你刚才选的那批」,正位解候上游补 additive 锚 | **批臂**兑付成功时落地的**全体**成员规范文本,**展示序**(= batch offer 的成员序)。「落地」含 persisted 与 deduped 两种(等价规则已在店 = 同意已生效)。🔴 **复数是契约**:合取批一次授权多条,折成一条或只报第一条会让人以为自己只批了一条 —— 端应逐条回显 |
|
|
616
623
|
|
|
617
624
|
**实现锚**:`src/hitl/toolApprovalWire.ts`(`readToolApprovalRespondAck` / `ToolApprovalFrameOutcome` /
|
|
618
625
|
`surfaceToolApprovalFrameAndRespond` 的相关性门与三处 ack 消费分支)、
|
|
@@ -878,12 +885,15 @@ persistRuleBatchOfferIndex !== undefined
|
|
|
878
885
|
**实现锚**:`src/hitl/toolApprovalWire.ts`(`RuleOffer` / `RuleOfferBatchMember` /
|
|
879
886
|
`ApprovalCardRequest.ruleOffers`·`ruleOffersReadOnly`·`inputHasBidi` /
|
|
880
887
|
`ApprovalCardAllowDecision.persistRuleBatchOfferIndex` / `RespondToolApprovalOpts.persistRuleBatchOfferIndex` /
|
|
881
|
-
`ToolApprovalRespondAckView` / `readRuleOffers`·`readLegacyRuleSuggestions`·`
|
|
888
|
+
`ToolApprovalRespondAckView` / `readRuleOffers`·`readLegacyRuleSuggestions`·`readRuleOfferSupply` /
|
|
882
889
|
`surfaceToolApprovalFrameAndRespond` 的兑付段 / `surfaceFsApprovalAndDecide` 的行→卡重铸段)。
|
|
883
890
|
**常驻门**:`scripts/run-client-core-pure-test.mjs`(B7 `ruleOffers` ①-⑩ 与 `inputHasBidi` ①-④)、
|
|
884
891
|
`scripts/run-durable-card-display-keys-test.mjs`(③/④/④b/⑤ 只读腿)、
|
|
885
|
-
`scripts/run-approval-frame-keys-test.mjs`(
|
|
886
|
-
|
|
892
|
+
`scripts/run-approval-frame-keys-test.mjs`(帧键镜像 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 与 SDK 运行期锚
|
|
893
|
+
`TOOL_APPROVAL_FRAME_KEYS` 逐元素对账,例外只走三张带退出条件的登记表 —— 领先登记 `AHEAD_OF_ANCHOR`
|
|
894
|
+
(server 已发、SDK 锚未跟;今天一条 `mandate`)、`RETIRED_NOT_MIRRORED`(锚有、本包已退役;今天一条
|
|
895
|
+
`classifierUnavailable`)、`RETIRED_BUT_STILL_READ`(锚与镜像都还有、server 已不发、本包只做归一读;今天一条
|
|
896
|
+
`ruleSuggestions`);SDK 卡键 `APPROVAL_CARD_KEYS` 逐键登记;项数以门的总结行为准 + 🆕 **server fixture 腿**)。
|
|
887
897
|
🔴 **fixture 腿要显式开**:`SEMA_CC_SERVER_FIXTURE=<装了 @sema-agent/server 的目录>`。它直接解析
|
|
888
898
|
engine fixture 的 `dist/tool-approval.d.ts`,把 server 真发的帧键集与本仓镜像做**机器对表** ——
|
|
889
899
|
SDK 运行期锚**按构造滞后于 server**,只对 SDK 锚比对的门对「server 已发、SDK 与本仓同时没有」的键
|
|
@@ -993,7 +1003,9 @@ decide 今天拿不到这枚 409**。本位是给「注入自有传输层 / 读
|
|
|
993
1003
|
`ApprovalStaleError.currentPending`,但本包 peer 地板是 **>=7.2.0**(那一版上两个名字都不存在),
|
|
994
1004
|
`import type` 会让装 7.2.0 的端**当场编不过**,而抬地板对所有消费方都是提要求、不是 additive。
|
|
995
1005
|
⇒ 与 `RuleOffer`(#334)同款处置:**自铸形 + 记账**,名字刻意**不同名**(`GateCurrentPending`)。
|
|
996
|
-
|
|
1006
|
+
✅ **已兑现**:peer 地板早已高于 7.3.0(今天的地板见 §0a),`GateCurrentPending` 现在就是上游形的别名
|
|
1007
|
+
(`src/hitl/hitlBridge.ts`:`GateCurrentPending` = 上游 `ApprovalStaleError['currentPending']` 的只读形);
|
|
1008
|
+
名字作为已发布公面保留。上面两句是当时(地板 >=7.2.0)的记账,留作沿革。
|
|
997
1009
|
|
|
998
1010
|
**实现锚**:`src/hitl/hitlBridge.ts`(`GateCurrentPending` / `readDecideCurrentPending`)、
|
|
999
1011
|
`src/hitl/toolApprovalWire.ts`(`FsApprovalOutcome.currentPending`,allow + deny 两条 decide 失败臂)、
|
|
@@ -1481,14 +1493,18 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
|
|
|
1481
1493
|
> ⚠️ **ID 说明**:`P-n` 是**本档自己的编号**,与 cli 侧 census 的 `G` 号**不是同一套**
|
|
1482
1494
|
> (本仓 `grep -rn "G5\b" src/ docs/` 零命中 —— 那个 id 住在 cli 的普查台账里)。
|
|
1483
1495
|
|
|
1496
|
+
> ⚠️ **P-43 / P-44 各有两行**(历史撞号,不改号):§7b 的 P-43 = accept-session 回退臂(0.47.0)、P-44 = 两选卡
|
|
1497
|
+
> cancel 查了再做(0.53.0);§7d 的 P-43 = hooks 第四条治理规则(0.83.0 已收)、P-44 = sdk 8.2.0 型面缺口
|
|
1498
|
+
> (0.58.0 已收)。已发段里的引用按所引内容对号;新登记从 P-46 起编。
|
|
1499
|
+
|
|
1484
1500
|
### 7a. 投影面缺口(上游铸了材料,本包没有接口交给端)
|
|
1485
1501
|
|
|
1486
1502
|
| ID | 级别 | 一句话现状 | 实现锚 | 端**今天**必须怎么办 |
|
|
1487
1503
|
|---|---|---|---|---|
|
|
1488
|
-
| **P-1** | med | `task_progress` 白名单**只 stamp
|
|
1489
|
-
| **P-2** | med |
|
|
1490
|
-
| **P-3** | med | `approval_request`(
|
|
1491
|
-
| **P-4** | med
|
|
1504
|
+
| **P-1** | med | `task_progress` 白名单**只 stamp 九键**(`taskId`/`name`/`usage`/`status`/`model`/`currentAction`/`workflowRunId`/`workflowAgentLabel`/`parentToolCallId`;`model` 是 0.47.0 补的,#363;`status` 0.65.0 起放行,见 §30d)。server 投影**发 13 键**,**仍被剥掉四键**:`taskType` / `parentTaskId`(本条原本三件里剩下的两件;~~`status`~~ ✅ 0.65.0 起进白名单)+ `seq`(core #258 stop-cycle 代际号,tick 这条腿今天无消费方;SDK 7.3.0 连声明都没有)+ `eventId`(EventIdentity 的另一半,至今无消费方)。✅ **0.47.0 销掉的那半**:原文说「`taskType` 与 `parentTaskId` 被剥掉,码里没有任何说法」—— 现在该臂头注有**逐条族扫账**(0.47.0 时放行 8 / 剥离 5;0.65.0 起放行 9 / 剥离 4;各带「谁没在读它」),且档与码由常驻门 `scripts/run-additive-key-passthrough-test.mjs` G1 段**双向对账** | `src/adapter/downstream/eventToSdkMessage.ts` 的 `case 'task_progress'`;lane 启发式在 `src/adapt/arms.ts`(`recordWorkflowAgentTaskId` 三级门) | 别指望从一条 progress tick 上拿到委派类别(`taskType`)或嵌套归属(`parentTaskId`)。嵌套要从 `bg_notification.parentTaskId` 经 `src/fleet/fleetLedger.ts` 的 `recordBgParentRun` 恢复;workflow lane 归属走 `src/adapt/arms.ts` 的三级门。🔴 **别在端侧自己从别处补进投影**(那是绕过唯一投影口);要透一位先走 §3d 的前置条件 |
|
|
1505
|
+
| **P-2** | ~~med~~ ✅ 0.65.0 已收 | ✅ **0.65.0 已收**(§30d):终态 tick 已透传 `status`,包内按 `completed` / `failed` 落终态(`src/adapt/arms.ts` 的终态二词表 `TERMINAL_TICK_STATUSES` → `settleFromTerminalTick`);四处防御 sweep 仍在,但只作终态 tick 缺席时(老服务端 / 丢帧 / 断流)的兜底。~~原文:包内注释断言「子代从不发终态 tick」,且 P-1 的白名单删掉了 `status`,终态 tick 在包内观测不到~~ | `src/adapt/arms.ts`(`TERMINAL_TICK_STATUSES` 分支)、`src/adapt/panelTasks.ts`(`settleFromTerminalTick`)、`src/compensations.ts`(T36) | 端**不要**自建「等子代终态 tick」的状态机 —— 包按终态 tick 落行,缺席时由防御 sweep 兜底,两条都走既有 chrome 臂(§30d:端零改) |
|
|
1506
|
+
| **P-3** | ~~med~~ ✅ 0.65.0 已收 | ✅ **0.65.0 已收**(§30i):`approval_request` 投内部臂 + chrome 臂 `approval_request`(载荷 = 帧信封原样窄读,`required: true`)。~~原文:本包零消费口 ⇒ `dropped('unsupported_arm')`~~ | `src/adapter/downstream/eventToSdkMessage.ts` 的 `case 'approval_request'`;`src/adapt/arms.ts`(`approvalFrameArm`) | 接 chrome 臂 `approval_request`:窄化(`isApprovalRequestFrameV1`)是端的动作,窄不下来 ⇒ 呈通用卡 + 人工决断,**永不 auto-deny**;`approvalId` 去重 / 按 `taskId` 归属 / 卡集对账(基准恒为开流 preamble)归端(§30i)。沿革:legacy `tool_approval` 腿的 respond 是 live-only + same-replica(错副本 404),同一只 ask 出两帧、顺序「先 legacy、后 `approval_request`」—— 这些是上游腿的语义,本包侧没有变 |
|
|
1507
|
+
| **P-4** | ~~med~~ ✅ 0.65.0 已收 | ✅ **0.65.0 已收**(§30i):sdk 已把 `approval_revoke` 收进事件 union(server ≥7.55.0),本包投内部臂 + chrome 臂 `approval_revoke`。~~原文:SDK union 连成员都没有 ⇒ `dropped('unknown_arm')`,全仓 grep revoke = 0~~ | `src/adapter/downstream/eventToSdkMessage.ts` 的 `case 'approval_revoke'`;`src/adapt/arms.ts`(`approvalFrameArm`) | 接 chrome 臂 `approval_revoke` 撤本地卡:窄化(`isApprovalRevokeFrameV1`)与按 `taskId` 归属是端的动作,窄不下来也照清该批本地卡;撤卡帧**可能整帧丢失**(帧是通知,行才是真源),卡集以开流 preamble 为准(§30i) |
|
|
1492
1508
|
| **P-5** | 真缺口(未定级) | **durable 重放腿上,一条被重放的 `question` 今天不会再打开覆盖层** —— 覆盖层的入口是 `liveQuestionStore` 的 **live demux 写口**,不是投影函数。交互 REPL 无损,「断线后按 `Last-Event-ID` 续读」场景下是真缺口。补它属**行为面**改动(先要答「重放一条已过 5min TTL 的问题该不该弹窗」),按宪法三问单独走 | `src/adapter/downstream/eventToSdkMessage.ts` 的 `question`/`question_complete`/`elicitation`/`elicitation_complete` 臂(缺口逐字记在该处);`src/liveQuestionStore.ts` 头注(`LIVE-ONLY + SAME-REPLICA … No durable resume anchor`) | `respondToQuestion` 当 best-effort 用(404 = 「已经放掉了」,dismiss,**绝不重试**);重连后的恢复走 **409 自愈树 + 自己的 `/v1/approvals` 列举**,**不要**指望重放的 `question` 帧能弹出覆盖层 |
|
|
1493
1509
|
| **P-6** | ~~low~~ ✅ 0.75.0 已闭 | ~~`compaction_outcome` 在本切片 `not_in_slice`,压缩失败对用户不可见~~ —— 0.75.0(CC-89)起投为内部臂 + chrome 臂 `compaction_outcome`,转录面仍零行(不编 transcript 形),见 §74 | `src/adapter/downstream/eventToSdkMessage.ts` `compactionOutcomeProjection` / `src/adapt/arms.ts` `compactionOutcomeArm` | 端接 chrome 臂后压缩失败可见;不接 = 同旧 |
|
|
1494
1510
|
| **P-32** | 在册局限(0.36.0 两 wire 键过境后的**辖域**,非缺陷) @cli @web @desktop | **两键各只有一条腿,别按「两面能对上」写码**。① **`requiresRealApproval`**(#283)与 🆕 **`inputHasBidi`**(#341,0.43.0)**同族**:两位最初都只在**活卡帧**腿(`ToolApprovalFrame` → `ApprovalCardRequest`);**耐久腿原先零 stamp**(🆕 0.82.4 订正:`requiresRealApproval` 改为待决行顶层带这一位时透传,见 §96 S-1;🆕 0.82.6 射程订正:server ≥7.100.0 的待决列表带出这一位,durable 卡上会出现,只有更早的 server 上才仍缺席,见 §98 S-2;另见 §96 S-2 的门类位;`inputHasBidi` 那一半不变)—— sdk 7.1.0 / **server 7.46.0 fixture 重验**的`PendingCheckpoint` / `riskDescriptor` 都没有这两位(server 那份在**卡内**:`risk.requiresRealApproval` 是**恒在布尔**、`inputHasBidi` 是卡上的在场位,都不是行上的键),包侧刻意不猜载体名。🔴 **「帧上没有」与「卡上是 false」是两条不同的陈述,别互相推导**(server `ApprovalCardSchema` 顶注逐字)。② **`checkpointId`**(#285 件2):只在 **409 `conflict.session_active_run` 体 + 其 SSE done 帧**的 `pendingGate`;另外三条 park 读面(`/v1/assistant/inbox`、`GET /v1/approvals`、`/v1/approvals/stream`)**都没有**这一格(后两条要给 checkpoint 表反范式一列 = SQL 面双库门,属另一批) | `src/hitl/toolApprovalWire.ts`(帧腿 stamp / durable 腿刻意零 stamp,两处 JSDoc 逐条写明理由)· `src/adapter/runStream.ts`(`ActiveRunPendingGate.checkpointId` + `pendingGateIsProvablyDifferent`)· 行为钉:`run-durable-card-display-keys-test.mjs` ⑨ 段(0.82.4 起:顶层同名键严格 `true` 带,其余最像的载体名不带)· `run-selfheal-reopen-test.mjs` G1/G1b | ① **`requiresRealApproval` 在场 ⇒ 一切自动放行让位**(记住的规则 / `allow_session` / bypass 姿态),**缺席绝不读成 `false`**(缺席 = 不是安全类 ask **或** 老 server,两者同形不猜);durable 卡上在早于 7.100.0 的 server 上**恒缺席**(0.82.6 射程订正:7.100.0 起待决列表带出这一位,见 §98 S-2),别据此认为「durable 门都不是安全类」。② **`checkpointId` 只做两件事**:落日志/排障关联,以及经 `pendingGateIsProvablyDifferent(prev, next)` 做**单向**判断「id 变了 ⇒ 不是刚才那一行」。🔴 **`false` 是「证不出」不是「同一道门」**,🔴 **绝不**当跨调用去重键(server 选行是**无序 `LIMIT 1`**、同 session 可并存多条 pending 行 ⇒ 同一情形连续两次 409 可能报不同 id;也可能 id 不变而 `activeTaskId` 已换),🔴 **绝不**拿它去 join durable 队列行(必然落空,且落空与 legacy 行同形)。缺席是**三成因合流**(legacy 行 / 值没过 server 信任边界校验 / 整只材料读取失败),读作「不知道这道门叫什么」 |
|
|
@@ -1497,8 +1513,8 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
|
|
|
1497
1513
|
|
|
1498
1514
|
| ID | 级别 | 一句话现状 | 实现锚 | 端**今天**必须怎么办 |
|
|
1499
1515
|
|---|---|---|---|---|
|
|
1500
|
-
| **P-7** | med | durable `/decide`
|
|
1501
|
-
| **P-8** | med | **plan review 没有 edit 态**:判决只有 `'approve' \| 'reject' \| 'dismissed'
|
|
1516
|
+
| **P-7** | med(返回型面;回执另有读口) | durable `/decide` 腿的**回执另有读口**:`readDecideReceipt` / `DecideReceiptView`(`src/decideReceipt.ts`,0.65.0 起,§30h;`rememberApplied` 那一位 0.82.6 起,射程见 §98)。`decideTool` / `answerQuestion` 的返回型仍是 `Promise<unknown>`、不被结构化读 —— 与 live 帧腿的 `readToolApprovalRespondAck` 五位诚实读仍**不对等** | `src/hitl/hitlBridge.ts`(`decideTool` / `answerQuestion` / `decideRaw` 的返回型)· `src/decideReceipt.ts` | 端要渲断言性告知,**读回执读口**,不读返回值;读口里在场的位按读口的缺席语义读,读口里没有的位(编辑转发了没有 / note 落行了没有)今天仍读不到,端**不得**据此渲任何断言性告知 |
|
|
1517
|
+
| **P-8** | med | **plan review 没有 edit 态**:判决只有 `'approve' \| 'reject' \| 'dismissed'`,缺省是两选卡(`Yes, approve and run the plan` / `No, reject it (keep planning)`);0.72.13 起两道闸都过时(宿主声明这条任务以 `permissionMode:"plan"` 提交 ∧ 引擎 ≥7.86.0)出三选卡,两个 Yes 为 `Yes, and auto-accept edits` / `Yes, and manually approve edits`(`src/hitl/planReviewWire.ts` 的 `PLAN_REVIEW_APPROVE_AUTO_LABEL` / `PLAN_REVIEW_APPROVE_MANUAL_LABEL`);`dismissed` **不是 wire 上的第三种判决** —— 命中它时 park 原样留着,`deliverDecision`/`decidePlanReview` 根本不可达。包内**任何一层都没有**「编辑 plan」的 affordance | `src/hitl/planReviewWire.ts`(`planReviewDecisionFromAnswer` / `PLAN_REVIEW_APPROVE_LABEL` / `PLAN_REVIEW_REJECT_LABEL` / `dismissed` 早退分支);durable 腿的 `editedPlan?` 位见 `src/hitl/hitlBridge.ts` 头注 | 把「编辑」建模成 **reject → 继续 planning → 新 turn**。🔴 内联 plan 编辑器**不许**经 `planReviewWire` 投递,也**不许自造第三个选项标签**(core 围栏 `selected ⊆ options`,表外标签会落 `dismissed`)。要 edit 态走 C 板提需求,由包补位([C163]-2④「plan edit 三态候包位**不开洞**」) |
|
|
1502
1518
|
| **P-9** | low | `wakeSubagent` 在 `CLIENT_VERBS` 里是 `required:false` 的**声明位**,包内无实现编排 | `src/clientSlice.ts`(`CLIENT_VERBS` 的 `wakeSubagent` 行) | 端要这条腿得自己接 `runs.resumeSubagent`;取址口径受 P-1 拖累(`parentToolCallId` 不一定在场,合法退路是 `agentName`,同名多员由 server 409 `steering.ambiguous_target` 兜) |
|
|
1503
1519
|
|
|
1504
1520
|
| **P-33** | low | **`CANCEL_DENY_BUDGET_MS` 的论证前提已作废,数值未动**(0.42.0 §2.4 撤稿件的如实残余):那 2s 预算的原理由是「DENY-abort 语义上引擎收到即终结 run」,而 server `ASSISTANT-WIRE-CONTRACT.md` §4a 逐字反对(**DENY 是 TOOL 级应答,永远不是 run kill**)。于是「decide 慢」与「deny 丢了」这两件事在 2s 这个刻度上**不可分**,晚到的成功也不会撤回那行 warn(只有 10s 自清) | `src/hitl/hitlHostSurface.ts`(`CANCEL_DENY_BUDGET_MS` 头注的重审段 + `observeCancelByDeny`) | 端**不要**把 `CANCEL_DENY_WARN_TEXT` 那行当成「会话一定锁死了」的判据——它今天只证明「2s 内没收到 settle」。根治要做成两档(软档只记 debug、硬档才上屏),那是**跨仓一批**(包侧改时序 + 壳侧同批换判据与用例),本批**刻意不做单边改动** |
|
|
@@ -1514,7 +1530,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
|
|
|
1514
1530
|
|
|
1515
1531
|
| **P-43** | med(**存量、非本批引入** —— 0.42.0 基线上逐字相同) @cli @web @desktop | 🆕 **accept-session 回退臂的错误分类比它自己的注释宽**(#363 异源复审 [high] 的**未收窄那一半**,如实登记):`allowSession` 腿先发 `approve + remember:'session'`,失败时回退一发纯 approve;那条 catch 的注释写的是「**只**兜『老 server 不识别 remember ⇒ 400 未知键』这一形」,而实际形是 **catch-all 减去三条具名再抛**(`HitlSafetyError` / `DecideTransportRetryExhaustedError` / 0.47.0 新加的『拒体带 `currentPending`』)。⇒ 一个 **404 / 5xx / 宿主自抛的无 status 错误**今天仍会被当成「老 server 不识别 remember」并**自动重发**一次纯 approve。收窄成「只认 400」是**行为改动**,不属于 0.47.0 这个 additive 批的射程 | `src/hitl/toolApprovalWire.ts`(`case 'allow'` 的内层 catch) | 端今天不需要做什么(两发都是 approve,不构成跨门的 double-act);**属主批**:下一个愿意改老引擎兼容腿宽度的批把它收窄成精确的 legacy-400,并同批给回退臂补正控/负控 |
|
|
1516
1532
|
| **P-44** | 已知缺口(0.53.0 登记;正位解在 **server 读写面**:cancel 两臂状态 CAS 契约明写 + 可选版本前置,S-122 车 7.73.0;core 无席 [7006]/[7007])@cli | 🆕 **L-93 两选卡的 cancel 是「查了再做」,不是原子条件取消**(异源对抗复审 R2 [high] 如实登记):卡后那一发 `runs.get` 状态复证 + 开枪前那一发 `listOwnedPendingApprovals` 待决行复证,把窗口从「人看卡的任意长时间」压到「两发复证到一发 cancel」的毫秒级,**但没有关死** —— 待决行若恰在这两步之间恢复(store 恢复 / 会话重新附着),那一枪仍会落在一条**其实还能被决断**的 run 上,而 `runs.cancel` 会把它终态化。**客户端关不死它**:真正的关法是引擎侧的**条件取消**(带审批快照版本 / checkpoint 标识,条件变了回 409 且不取消),那是 wire 能力,不是壳能自造的语义 | `src/adapter/activeRunSelfHeal.ts`(`staleParkArm` 开枪前那一段的头注);§16b 四道防线 | 端照旧只在用户显式选「停掉它」时才走这条路,**卡面必须说清这是放弃这条 run**;要彻底关死,按跨仓宪法向引擎提**条件取消**(`If-Match` 形)。在那之前这条路的剩余风险是**在册**的,不是未知的 |
|
|
1517
|
-
| **P-45** | 在册局限(**存量族**,非本批引入)@cli @web @desktop | 🆕 **「run 读到终态」不等于「claim 已经落地释放」**(同上 R2 [medium]):`waitForClaimRelease` 的判据是 `runs.get` 读回 {@link CLAIM_RELEASED_STATES}
|
|
1533
|
+
| **P-45** | 在册局限(**存量族**,非本批引入)@cli @web @desktop | 🆕 **「run 读到终态」不等于「claim 已经落地释放」**(同上 R2 [medium]):`waitForClaimRelease` 的判据是 `runs.get` 读回 {@link CLAIM_RELEASED_STATES} 里的终态词(0.68.0 起新引擎另有 `heldBy` 直证、优先于它,见最后一列;本条说的是只剩终态词推断的那一路),而本档 §12 与 `running-settled` 臂自己记着:409 报的 claim 与 poll 口径**可以短暂相左**。⇒ `running-cancelled`(0.37.0 起)与 🆕 `stale-park-cancelled`(0.53.0)两条 `resending` 结局,理论上都可能在 claim 尚未落地释放时重发一次,代价 = **再吃一个 409**(自愈树当拍再分诊)。**为什么不单修新那一条**:两条问的是同一个问题,给它们两把不同的尺 = 同一判据两份实现,必漂;正位解是一条 **session/claim 专用读面**(今天 `DurableRunVerbs` 里没有这个动词) | `src/adapter/activeRunSelfHeal.ts`(`CLAIM_RELEASED_STATES` 头注 / `waitForClaimRelease` / 两条 `resending` 结局) | 端**不要**把 `resending` 读成「会话一定空了」—— 0.83.5 起看结局上的 `releaseConfirmedByEngine`:在场 = 引擎直说会话已交出(`heldBy: null`);缺席 = 只凭终态词判的释放,成文含义仍是「引擎报那条 run 已终结」,重发撞回 409 是**已知可能**,自愈树会当拍再分诊(不是新 bug)。✅ **文案面同形存量 0.83.5 已收**:`running-cancelled` / `stale-park-cancelled` / `ask-decided-without-card` 三条 `resending` 结局的用户行与注入件行都按这一位分说 —— 位在场才说引擎确认不再占着这个会话 / 会话已空出来;缺席只说那条 run 已结束,并提示可能要再发一次(注入件行:可能再被挡一次)。位在结局对象的键上,宿主复制 / 序列化不丢。释放判据与重发腿不变(两条证据仍取并) | ✅ **0.68.0 已兑现**:server ≥7.73.0 的 `GET /v1/runs/:id` 带 `heldBy`(持有者实例名,`null` = 无持有)与 `cancelRequested`;`waitForClaimRelease` 两条释放证据取并 —— `heldBy: null` 直证优先,引擎不发这一位时回落终态词推断;`cancelRequested` 只说请求已受理,不作释放证据(门 `scripts/run-selfheal-reopen-test.mjs` G8④ 段)。0.83.5 起直证那一路在结局上带 `releaseConfirmedByEngine`。
|
|
1518
1534
|
|
|
1519
1535
|
### 7c. 多会话(sessionKey)面在册局限 —— 多会话端**接之前必读**
|
|
1520
1536
|
|
|
@@ -1531,7 +1547,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
|
|
|
1531
1547
|
|
|
1532
1548
|
| ID | 级别 | 一句话现状 | 实现锚 | 端**今天**必须怎么办 |
|
|
1533
1549
|
|---|---|---|---|---|
|
|
1534
|
-
| **P-15** | med(6 →
|
|
1550
|
+
| **P-15** | med(6 → 5 → **3**) | `REQUEST_FIELD_MATRIX` 有 **3 个字段登记为 `gap: true`**(表内 `gap:true` 的定义逐字 = 「这条差异**没有正当理由,是漏的**」),全部是 **print/headless 车道缺席**:`settings.ultracode` · `clientContext` · `scratchpadDir`(`reasoningEffort` 0.77.0 起、`model` 0.79.0 起无人值守车道都有座,已出本表)。表内点名的后果:`clientContext` 缺席 ⇒ **引擎误标 (UTC)**;`scratchpadDir` 缺席 ⇒ **`-p` 的工具写不进 exemptDir**。**已结清**:`settings.<resolved>`(0.34.0 / #292 P1 —— 版本号与 CHANGELOG 段**同一个**,对抗复审 [low] 抓的正是两处不一致)—— 它的缺席是**权限方向**的(`-p` 上用户 settings 的 `permissions.deny/ask` 整体不被引擎求值,cli [4208] 实测),现两车道都 stamp | `src/request/taskRequest.ts`(`REQUEST_FIELD_MATRIX` 的 `gap` 列) | headless 车道上这三项**确实不上 wire**。端不要在 print 车道假设它们在场;补齐是**行为改动**,要单独一条测试,不许端侧偷加。`settings.<resolved>` 反过来:print 车道现在**会**摊开 resolver 快照 ⇒ 端必须把值放进 `input.settings.resolved`(端不给值仍是零 stamp,不会凭空出现),且该车道 `settings` 子键走**开放集**口径:`unregisteredRequestKeys` 只放行**表外**动态子键(快照自己的 permissions/env/model/… 不可枚举),**表内但不属于本车道**的子键(今天 = print 的 `settings.ultracode`)仍会被点名 —— 端不许把它白名单化,那条红是真的;另:`settings` 子键值为**函数**(如自有 `toJSON`,能在序列化时整只改写字节)恒被点名且构造器不 stamp。🔴 **0.35.0 起快照通道对具名通道让位**:见 P-15c |
|
|
1535
1551
|
| **P-15b** | 🔴 权限方向 | `REQUEST_FIELD_MATRIX` 的 stamp 门对**未登记键静默丢弃** —— 表里点名的真实危险形逐字:**「用户显式排除的工具被静默放回」(权限方向回归,类型层不报)**。`excludeTools` 是真 wire 键、早在 seatContract 的 `START_SESSION_OPTION_KEYS` 里,却曾长期在矩阵外;**今天只有 desktop 在发它** | `src/request/taskRequest.ts`(`excludeTools` 行)、`src/seatContract.ts`(`START_SESSION_OPTION_KEYS`) | 端自拼 taskReq 的键**必须**先进矩阵;上 wire 前跑 `unregisteredRequestKeys(req, lane)` 并**当红对待**,别当 lint |
|
|
1536
1552
|
| **P-15c** | 🔴 治理方向(0.35.0 行为改动) | `settings.<resolved>` 快照是**开放集 spread**(子键即 wire 键)⇒ 它天生是一条**第二通道**。0.34.0 只剥「车道异名」子键,于是**两条车道都登记**的具名子键剥不到 —— 而它们各有治理门:`hooksForWire()` 是 fail-closed(无 `SettingsPort` / 工作区未受信 / 管理侧关停全部 hooks / 检查抛错 ⇒ 返 `undefined`),此时快照里那份**没过门**的 `hooks` 照样上 wire = 关停令等于没下。让位修前靠**合并序**(具名键覆盖快照),而合并序只在具名通道**有值**时管用,门否决时恰恰**没值**。0.35.0 改**结构剥离**:凡表里有 `settings.<sub>` 行的子键(`hooks`/`webSearch`/`ultracode`),快照一概不产;表外子键(`permissions`/`env`/`model`/…)原样摊开 | `src/request/taskRequest.ts`(`namedSettingsSubKeys` / `resolvedSnapshotForWire`) | ① 具名键**必须走具名位**:`input.settings.hooks` / `.webSearch` / `.ultracode` —— 只塞进 `input.settings.resolved` 的宿主从 0.35.0 起那两个键**不再上 wire**(两条车道对称,不是新差异面);② `input.settings.resolved` 只放**表外**的 resolver 产物;③ 该位为 `undefined`/`null` = 合法缺席(照旧降空照发),**合法载体只有对象字面量与 `null` 原型字典**;其余形(数组/原始值/boxed 包装对象/`Map`/**类实例**)抛 `TypeError`。判据锚 **prototype 层数(realm 无关 —— iframe/vm/另一渲染进程的字面量照过)不锚自报标签**:类实例与 `Symbol.toStringTag` 伪造都能自报 `[object Object]`,而摊开走 `Object.entries`(只取自有可枚举键)⇒ 权限面挂在原型 getter 上会摊出空快照、请求照发。这一位摊开的是已解析权限面,降空 = 带着被剥掉的 `deny/ask` 发出去,故 fail-closed;端别 catch 掉它当没事,那是上游产出坏了 —— 把快照**平摊成对象字面量**再传即可;④ `permissions` **子树**也递归校「序列化后还是同一份内容吗」:嵌套 `Map`/`Set`/类实例/boxed/环、**任何一层**上可 call 的 `toJSON`(自有/非枚举/原型链/数组子类)、**非有限数**(`NaN`/`±Infinity`)都 ⇒ `TypeError`,报路径如 `permissions.deny[0]`,不猜 schema;射程刻意只到 `permissions`(整体深净化 = 独立工单)。⚠️ 两条**成文边界**(各有判据钉住现状,不是漏):① 构造之后污染 `Array.prototype`(重建出来的数组必须是真数组);② `getPrototypeOf` 被 Proxy 陷阱撒谎的载体(同 realm 内无可移植的 Proxy 读法)——两者都**不新增丢失面**(发的字节 = 原生序列化那一份),要关得靠「受信 resolver 出口发烙印/已物化记录」那个结构 |
|
|
1537
1553
|
| **P-15d** | 已知缺口(权限方向;0.35.0 登记,**刻意未在本批闭合**) | 0.35.0 把「序列化后还是同一份内容吗」这条不变量**只**落到 `settings.resolved.permissions` 子树(校 + 就地重建)。**同一条论证对其它带权限含义的位一样成立,而它们今天没有等价强制**:`permissionMode`(字符串位;非串载体的 `toJSON` 能自己决定 wire 上那个词)· `excludeTools`(丢一个元素 = **用户显式排除的工具被放回**,与 P-15b 同一方向)· `additionalDirectories` / `additionalReadDirectories`(读写边界根)· `agents` / `hooks` / `attachments`(对象位,同款 `toJSON` 改写面)。**为什么不在本批一起做**:逐个挑两三个字段补,只会造出下一个同样任意的边界;正解是**一次**把「wire 载荷 JSON-safe 规范化」做成包级闸口(该工单自 0.34.0 起在册),覆盖所有位并同批建判据 | `src/request/taskRequest.ts`(`materializeJsonFaithful` 的射程 = `permissions`;边界本身有一条判据钉着:非权限位的同款畸形**不拦**) | 端**不要**推断「本包会替我把请求体洗干净」——今天只有 `permissions` 子树有这个保证。上 wire 的值请自己保证是 JSON 原生形(字面量 / 数组 / 字符串 / 有限数):别拿类实例、`Map`、带 `toJSON` 的包装对象、访问器对象当载体。尤其 `permissionMode` / `excludeTools`:前者决定整会话的审批姿态,后者丢一个元素就是权限变宽 |
|
|
@@ -1553,19 +1569,20 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
|
|
|
1553
1569
|
|
|
1554
1570
|
| **P-42** | low @cli @web @desktop | 🆕 **Esc halt 只上收了判定,发射面仍在各端**(0.47.0 件③,刻意的分工不是半成品):`planInteractiveHalt` 给判据与升级码闭集,`POST /v1/runs/:id/interrupt` 的**发射**(以及 `?session=` 供给、超时窗、台账、留痕)仍归端。cli 侧那条「裸 fetch 直拨 interrupt」的网络面豁免,**退役条件就是端接上这个口子**(壳换装不在 0.47.0 批内) | `src/interactiveHalt.ts`;§10 | 按 §10b 的分支表接:判定用本包,发射用端自己的传输腿;🔴 halt 必须排在撕 SSE **之前**(§10c 第 1 条) |
|
|
1555
1571
|
|
|
1556
|
-
| **P-43** | ✅ **已收(对实现了读口的宿主)**(0.83.0,CC-162) | 🔧 **`hooksForWire()` 第四条治理规则 0.83.0 已补**:非 managed 来源(user / project / local / flag)的 `disableAllHooks` 按**合并值**判 —— `SettingsPort.mergedDisableAllHooks?()` 为 `true` ⇒ 只发 managed 的 hooks(非 managed 设置关不掉组织下发的),会话目标的 Stop 钩子一并不发;宿主没实现这个可选读口 ⇒ 仍是旧行为(只认 managed 那一份),每个已装端口告警一次;读口抛错 ⇒ 按合并值为真处置(managed 的照发)。**合并顺序订正**:本行旧文「四源按 policy→user→project→local 后写覆盖前写」是错的 —— 真序 user → project → local → flag → policy,policy 最后写、优先级最高;policy → user → project → local → flag(0.83.3 起含 flag,排在 local 之后)是本包发往引擎的 hooks 数组的**拼接**顺序,不是合并标量的顺序 —— 托管在前的理由(引擎 hook 执行器三种资源先到先得,托管排后会被挤掉)与已知代价(`PreToolUse` 上排在托管之后的 hook 能在托管放行之后改写输入)见 §103a H-9 与 §103 包侧缺口 ⑧。不做逐源近似的理由不变(「任一来源为 true」在 user=`true` ∧ local=`false` 上判反)
|
|
1572
|
+
| **P-43** | ✅ **已收(对实现了读口的宿主)**(0.83.0,CC-162) | 🔧 **`hooksForWire()` 第四条治理规则 0.83.0 已补**:非 managed 来源(user / project / local / flag)的 `disableAllHooks` 按**合并值**判 —— `SettingsPort.mergedDisableAllHooks?()` 为 `true` ⇒ 只发 managed 的 hooks(非 managed 设置关不掉组织下发的),会话目标的 Stop 钩子一并不发;宿主没实现这个可选读口 ⇒ 仍是旧行为(只认 managed 那一份),每个已装端口告警一次;读口抛错 ⇒ 按合并值为真处置(managed 的照发)。**合并顺序订正**:本行旧文「四源按 policy→user→project→local 后写覆盖前写」是错的 —— 真序 user → project → local → flag → policy,policy 最后写、优先级最高;policy → user → project → local → flag(0.83.3 起含 flag,排在 local 之后)是本包发往引擎的 hooks 数组的**拼接**顺序,不是合并标量的顺序 —— 托管在前的理由(引擎 hook 执行器三种资源先到先得,托管排后会被挤掉)与已知代价(`PreToolUse` 上排在托管之后的 hook 能在托管放行之后改写输入)见 §103a H-9 与 §103 包侧缺口 ⑧。不做逐源近似的理由不变(「任一来源为 true」在 user=`true` ∧ local=`false` 上判反)。余项:上游云会话路径的逐来源语义本版不跟;宿主报启动模式时设置来源随模式收窄(0.83.5 起,§105 SM-1:安全模式与 bare 模式都只发 managed;读口 `SettingsPort.hooksStartupMode()`,或传了计划时插件读数上的 `suppressedByStartupMode`,后者按安全模式处置) | `src/hooksWireCaps.ts`(头注「第四条腿」段)· `src/host.ts` `SettingsPort.mergedDisableAllHooks`;§15b/§15d;§100a-5 | 装 `SettingsPort` 的宿主实现 `mergedDisableAllHooks()`,返回本机 hooks 执行器读的同一个合并值;**未实现**的宿主仍**不要**假定用户 settings 里的 `disableAllHooks` 会挡住引擎腿的 hooks |
|
|
1557
1573
|
|
|
1558
1574
|
| **P-44** | ✅ **已收**(0.58.0,sdk 8.2.0 提货)@cli @web @desktop | ✅ **上游已补齐,本条转已收** —— sdk **8.2.0**(S-134 五锚)把这一族型面缺口一次补完:①`respond` 体 `persistRule` 由单臂 `{rule}` 换成具名**两臂互斥**联合 `PersistRuleSelection`(`{rule, edited?}` ∣ `{batchOfferIndex}`,互斥用 `?: never` 钉在编译期 ⇒ server 那句 `PERSIST_RULE_BATCH_EXCLUSIVE_ERROR` 400 永远打不到线上);②`ToolApprovalFrame` / `ApprovalCard` / `PendingCheckpoint` 三腿同一个 `RuleOffer` 判别联合(含 `match` 四员闭词表、成员 `command`/`directoryRead` 两臂、additive `uncoveredDetail`);③`ToolApprovalRespondAck` 补 `persistedRule` / `persistedRules` / `persistedRuleAnchors` 三位。🔴 **本包侧本来就零 cast、也不需要 cast**(0.57.0 原文,逐字仍成立):本包**不铸 respond 的 wire 体** —— `RespondToolApprovalFn` 是**宿主注入**的函数型,包只把扁平兄弟位(`persistRule: string` / `persistRuleEdited?: true` / `persistRuleBatchOfferIndex?: number`)交给注入面。⇒ 吃这个缺口的一直是**三端的注入面**。本包 0.58.0 这一侧的动作是:归一形 `RuleOffer` 一族改由 sdk 派生、`ToolApprovalRespondAckView` 与 `PersistedRuleAnchor` 两个包内自铸形按各自写下的退役条款回收成 sdk 形的别名、`AHEAD_OF_ANCHOR` 里那条 `ruleOffers` 领先登记到期自红删除(详见 **§22a**)。🔴 **三端还要做的那一半(本条转已收之后的剩余动作)**:注入面那处宽 `cast`(或自铸的 respond 包装形)现在可以删掉,改直接用 sdk 8.2.0 的 `PersistRuleSelection` —— 两臂互斥由编译期钉,`{rule, batchOfferIndex}` 同场会**编译红**(这正是要的);`batchOfferIndex: 0` 逐字进 body(`0` 不被 falsy 吞)。同样别再在端侧自铸同名 `RuleOffer` 形:归一形与它的伴生类型自 0.57.0 起在本包公面上,三张闭词表自 0.58.0 起也在(§22b) | `src/hitl/toolApprovalWire.ts`(两处「候 sdk 补锚」头注已随本批锚到 8.2.0 / 回收)· `scripts/run-approval-frame-keys-test.mjs`(该条 `AHEAD_OF_ANCHOR` 登记已删)· `scripts/run-sdk-floor-test.mjs`(地板 8.2.0) | 端按上一栏「剩余动作」删自己的宽 cast;peer 地板随本包抬到 `>=8.2.0`,提货前先抬依赖 |
|
|
1575
|
+
| **P-46** | 包侧缺口(0.68.2 起成文;KL-156)@cli @web @desktop | 中途关闭记忆采集的动词 `POST /v1/runs/:id/memory/capture-optout`(sdk `runs.memoryCaptureOptOut`,能力位 `runMemoryCaptureOptOut`,server ≥7.70.0)的**结局处置表仍未归包**:200 `created` / `existed`;403 `memory.capture_optout_denied`(终局,别重试);409 `steering.not_running`(四种成因:三种的正解是本会话下一次提交带 `memoryCapture: "off"`,run 活在别的副本上那种是把调用重发到持流副本)/ `memory.capture_optout_sweep_failed`(🔴 **部分成功**:记录已立、残留清扫失败,重发即重试清扫)/ `memory.capture_optout_unavailable`(这条 run 没挂记忆会话,无事可做)/ `config.memory_capture_unsupported`(部署形状,提交时的声明形撞同一堵墙);503 `memory.capture_optout_unpersisted`(采集**仍开着**,可重试)。恢复动作按错误码分、不按状态码分,是三端公共判定;本包只收了提交时的声明形铸点 | `src/request/taskRequest.ts`(`memoryCapture` 行,声明形)· sdk `dist/resources/runs.d.ts` 的 `memoryCaptureOptOut` 头注(处置表原文) | 今天没有端调这个动词。要接的端先提需求(§8-H),由包补处置表与措辞单源;**不要**在端侧先写一份 —— 按状态码分支会把 `sweep_failed` 这条部分成功读成失败、把 `memory_capture_unsupported` 读成「下次提交带声明就好」 |
|
|
1559
1576
|
|
|
1560
1577
|
### 7e. 缺口的共同形状(值得单独说)
|
|
1561
1578
|
|
|
1562
1579
|
**P-1 / P-2 / P-3 / P-4 / P-5 / P-6 / P-7 是同一类**:上游(server / SDK)已经把材料铸到 wire 上了,
|
|
1563
|
-
|
|
1580
|
+
而**本包没有接口把它交给端**(其中 P-2 / P-3 / P-4 / P-6 已收,P-7 的回执另有读口;仍开着的是 P-1 剩下的四键与 P-5)。逐条摆出来的理由:**端在这些点上「读不到」不是端的 bug,
|
|
1564
1581
|
补救也不该在端侧做**(跨仓缺陷源头修复,禁下游侧路补救 —— env 覆盖 / 参数旁支 / wrapper / monkey-patch
|
|
1565
1582
|
一律违宪)。发现新的同形件请按 [C162] 令④ 回 C 板,带坐标。
|
|
1566
1583
|
|
|
1567
|
-
**P-1 与 P-2
|
|
1568
|
-
|
|
1584
|
+
**P-1 与 P-2 曾是一条链**(白名单剥掉 `status` ⇒ 终态 tick 不可观测 ⇒「子代从不发终态 tick」无法自证伪);
|
|
1585
|
+
0.65.0 两条同批闭合,本段留作沿革。
|
|
1569
1586
|
|
|
1570
1587
|
**P-10 ~ P-14 是同一类**:keyed API 建好了,而**消费路径还没带键透传**。
|
|
1571
1588
|
多会话端必须按「今天怎么办」那一列绕行,**不要**假设 `*For` 变体已经全链贯通。
|
|
@@ -1595,15 +1612,8 @@ clone(web/desktop/CI)去读都扑空。凡属这一类(扫描 journal / workflow
|
|
|
1595
1612
|
> 用法:web / desktop 按 [C162] 四令提货时**逐项打勾**;每一项后面括号里是验证方式,不是靠读代码相信。
|
|
1596
1613
|
|
|
1597
1614
|
**A. 依赖与门**
|
|
1598
|
-
- [ ] `@sema-agent/client-core` 版本对齐 §0a
|
|
1599
|
-
|
|
1600
|
-
**没有**新增任何值级 sdk import(值级面仍是 `AgentClient` / `SseIdleError` / `probeHealth` /
|
|
1601
|
-
`APIError` / `TaskStopConflictError` 五个符号,零增减);硬要求来自 durable 卡两展示键读的
|
|
1602
|
-
`PendingCheckpoint.ruleSuggestions` 与 `PendingCheckpoint.governanceForced` —— 这两位在 sdk
|
|
1603
|
-
**6.16.0 的 `.d.ts` 上根本不存在**(实拉 6.16.0 tarball 直证:`dist/types.d.ts` 全文
|
|
1604
|
-
`ruleSuggestions` 零命中,`governanceForced` 只长在 `PendingGateMaterial` 上),低于 6.17.2 的
|
|
1605
|
-
宿主**编译期**红。⚠️ 6.16.0 已经带 `same-origin-relay` 守卫、也已导出 `PendingCheckpoint` /
|
|
1606
|
-
`RuleSuggestion` 两个名字 —— 别把 floor 的理由记在它们头上
|
|
1615
|
+
- [ ] `@sema-agent/client-core` 版本对齐 §0a;**同批把 `@sema-agent/sdk` 抬到 §0a「peer:wire 契约」行写的地板**
|
|
1616
|
+
(本行不抄数字;每次抬地板的理由逐版记在 §0a 与对应版本段)。
|
|
1607
1617
|
- [ ] 跨大版本提货前先读 `CHANGELOG.md`(0.29.0 起建档)+ `docs/REFACTOR-LEDGER.md` 做 BREAKING 对表 —— 别猜。🔴 **互链**(web [C166]⑦):CHANGELOG 各版「已知局限」段只记**该版新增**,接入面局限的完整台账在本档 §6e/§7 —— **只读其一会漏**,两处都过
|
|
1608
1618
|
- [ ] 建「禁直连」物理门([C162] 令①):直连 `@sema-agent/sdk*`/`@sema-agent/core*`(web 另加直 `fetch('/v1/`)的存量面冻结成精确集合基线,**只减不增**;样板 = `sema-cli/scripts/run-sdk-isolation-test.mjs` + `sdk-isolation-baseline.json`。挂进常驻门链(**门读数 + 变异实证**才算立住)
|
|
1609
1619
|
- [ ] 浏览器/渲染进程宿主:确认自己的打包链下本包**不引入 Node 内建**(本包侧有 portability 门,端侧要确认自己没把它 externalize 掉)
|
|
@@ -1668,8 +1678,13 @@ reason 里写明「枚举器盲区形」。已知两形:
|
|
|
1668
1678
|
- [ ] 用三态判据消费 `eventToSdkMessage`:`if (p.kind === 'message')`,**不要** `if (msg)`(§3a)
|
|
1669
1679
|
- [ ] 在 per-turn `ctx` 上填 **`onDroppedFrame`**(`EmitContext` 的可选位,**唯一**注入位;`reportDroppedFrame` 是包内实现、不出公面),**不许吞**(§3b / §5a 表末行)
|
|
1670
1680
|
- [ ] 抬 SDK floor 后**重跑穷举**(`assertNeverArm` 编译期打红),不许 `as` 绕过
|
|
1671
|
-
- [ ]
|
|
1672
|
-
-
|
|
1681
|
+
- [ ] 知道自己**收不到**这几件:重放的 `question` 不会弹覆盖层(P-5)· `task_progress` 的 `taskType` / `parentTaskId` / `seq` / `eventId`(P-1)。
|
|
1682
|
+
沿革:`approval_revoke`(P-4,0.65.0 起,§30i)、`task_progress.status`(P-1 / P-2,0.65.0 起,§30d)、压缩失败(P-6,0.75.0 起,§74)
|
|
1683
|
+
现在都收得到 —— 接对应的 chrome 臂
|
|
1684
|
+
- [ ] 子代行 settle 由包按终态 tick 落(0.65.0 起;缺席时防御 sweep 兜底),端**别**自建「等终态 tick」的状态机(P-2)
|
|
1685
|
+
- [ ] 重试 / 等待覆盖层按 `RetryStatus.kind` 分臂(`mapBrainStatusToRetry`,§18b / §18c):`waiting` 是「模型已连上、在等第一个
|
|
1686
|
+
token」,**不是失败重试**;把非空 `retryStatus` 一律渲成错误重试行的宿主会把正常等待说成请求失败。`attempt` /
|
|
1687
|
+
`maxRetries` 缺席 = 不知道,**不补数**
|
|
1673
1688
|
|
|
1674
1689
|
**E. 上行与回执(§4,最容易漏)**
|
|
1675
1690
|
- [ ] 请求一律经 `buildTaskRequest(input, lane)`,**不自拼字面量**;上 wire 前过 `unregisteredRequestKeys(req, lane)`
|
|
@@ -9599,6 +9614,336 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
|
|
|
9599
9614
|
|
|
9600
9615
|
**包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(CC-100)—— 方案候拍板(dist 去注释 vs 手清),0.77.2 · ② `DeniedBy` 第十词 `read_boundary` / `teamName` / `stillLive` 三词随 sdk 10 型面在 0.78.0 吸收(CC-106)· ③ `capabilities.mcpProbe` 候 core 7.26.0 #951 → server 7.93.0(CC-74)。
|
|
9601
9616
|
|
|
9617
|
+
## §105 🆕 0.83.5(2026-09-27)展示层出口:连接符按语境判 + 字面反斜杠成对 / 名字位空白两只开关 + 标记位置读口(CC-204)+ 机读字节的凭据洗消认孤代理项(CC-207)+ 转义记号在凭据再扫里原子与四处凭据读法存量修复 + hooks 启动模式收窄(CC-200)与设置来源去重(CC-208)+ 自愈重发结局的释放证据位(CC-212)+ 活段接入指引订正(patch;根公面运行期导出 +1,1277 → 1278〔`displayUntrustedMarks`〕;公面类型 +3〔`DisplayMarkSpan` / `DisplayUntrustedMarked` / `HooksStartupMode`〕;`DisplayUntrustedOptions` +2 可选位〔`escapeBackslashes` / `blanks`〕;`SettingsPort` +1 可选成员〔`hooksStartupMode`〕;`SelfHealOutcome` 三条重发结局臂各 +1 可选位〔`releaseConfirmedByEngine`〕;🔴 默认形输出字节变:清单外文字旁的 ZWJ / ZWNJ 改为标出来,控制符转义记号紧跟另一枚记号时不再留「反斜杠 + 记号」形,四处凭据读法多遮;零投影臂;peer sdk 地板 `>=11.3.0` 不动)
|
|
9618
|
+
|
|
9619
|
+
> **patch**,四组同发 + 成文改口(本节按 0.83.5 的读法写;若与本版发布帖不一致,以发布帖为准):
|
|
9620
|
+
> ① **连接符按语境判**(CC-204):ZWJ / ZWNJ 只在 emoji 连字与连写 / 印度系文字里原样,其余按所选标记形标出来(105a-1)。本包内经出口的五处文本随之变(U-2)。
|
|
9621
|
+
> ② **`escapeBackslashes`**:转义形上字面反斜杠成对,解码唯一(105a-2);🔴 开着不幂等,只在最终呈现处调一次。**`blanks`**:名字位上「像空白」的非 ASCII 码位在折平之前标出来。**`displayUntrustedMarks`**:同一份文本另报每一枚字符面标记的位置(105a-3)。为什么单射不做成默认:默认形承诺幂等(三端有多层重复调用),一个函数同时单射又幂等只能是恒等 ⇒ 单射只能是开关。
|
|
9622
|
+
> ③ **CC-207**:凭据两网的判别视图把孤代理项与格式字符同处置 —— 标签与值之间夹一枚孤代理项时,机读字节(结果帧 `errors[]`、合成终局行)与字符面全关的呈前出口此前洗不到值(W-1)。
|
|
9623
|
+
> ④ **转义记号原子**(存量缺陷修复,0.83.3 起):控制符转义记号紧跟另一枚记号时,凭据再扫不再把后一枚吃掉半枚(V-1);随之改的序列读法(没收尾的前缀整段一个单元、终字留字读法认已知凭据字面形首字、`@` 不当终字 …)让本版相对 0.83.4 零新增外泄(V-1 第二段)。**三处存量凭据读法**:URL 片段后接非 ASCII 空白与标签 / 方案词时在空白处断(V-2);谚文填充 / 盲文空点在词级网里当空白(V-3);值开头是引号包着的里层标签时让里层去认(V-4)。
|
|
9624
|
+
> ⑤ **hooks 启动模式**(CC-200):安全模式 / bare 模式下,发往引擎的设置来源 hooks 随模式收窄 —— 两种模式都只剩 managed(bare 取保守侧:managed 照发,见 SM-1 与包侧缺口)。宿主多一只可选词读口报启动模式;插件读数上已有的那一位按安全模式算数。没报的宿主零变化。
|
|
9625
|
+
> ⑥ **设置来源去重**(CC-208):同事件、同 `matcher` 组、同身份键的设置来源条目只发一份,宿主零改动即得(DD-1)。
|
|
9626
|
+
> ⑦ **自愈重发结局的释放证据位**(CC-212):三条重发结局 +1 可选位 `releaseConfirmedByEngine?: true`,用户行与注入件行按它分说(CS-1 / CS-3);两处出包说明串改口(CS-2,零判定)。
|
|
9627
|
+
> ⑧ **活段订正与冻结段成文改口**:§3c / §3d-2 / §3z / §4a / §4b-3 / §4f / §7 / §8 按现状订正、README 守卫表订正(文档面,不在处置表);冻结段的改口见 105a′。
|
|
9628
|
+
> **表态现势**:patch,全速模式,不设表态窗;默认字节变化那一面按下面 105a′ 的成文改口换读,各端列写本版读点普查的结论(读的是各端本地克隆的远端主干:终端 `968b4742`〔09-25〕、网页端 `cb5874a`〔09-26〕、桌面端 `5c99611`〔08-13〕、管理台 `4d135e7`〔09-26〕)。
|
|
9629
|
+
|
|
9630
|
+
### 105a. 处置表
|
|
9631
|
+
|
|
9632
|
+
| # | 面 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
|
|
9633
|
+
|---|---|---|---|---|---|---|---|---|
|
|
9634
|
+
| U-1 | `displayUntrusted` 默认形与一切开着 `bidi` 的形里的 ZWJ / ZWNJ | 无条件原样 → 🔴 按语境判(语境取簇的基字:两侧各跨过组合符 / 变体选择符 / 肤色修饰):emoji 连字(左基字与紧后一码点都是按 emoji 呈现的象形字的 ZWJ:默认 emoji 呈现,或紧后是 U+FE0F / 肤色修饰;`©` / `™` 之间照标)、连接文字(两侧基字都是字母、Script_Extensions 都在 105a-1 清单内的 ZWJ / ZWNJ;文字属性通用 / 继承的修饰字母如 U+02BC、U+0640 不算)与旧编码 chillu / khanda-ta(紧跟 virama、virama 前的基字是清单文字字母的 ZWJ,右边不问)原样;其余按所选标记形标出来(`` / ``、`.`、空格)。RGI 地区旗照旧整串放行。`bidi: false` 时两枚照旧原样 | n/a(今天的呈现出口仍是自带叶子,不经本包;换装时见 105d) | n/a(今天无读点) | n/a(今天无读点) | pending(必改:五种载体都开着 `bidi`;按旧读数钉的测试当天红,见 105a′) | pending | 105a-1 · G-J1–G-J3 · G-J6–G-J8 |
|
|
9635
|
+
| U-2 | 本包内经出口的文本:`readDecisionNoteAudit(ack).note` 与 `decisionNoteAuditLine(...)`(空格形)、`resumeSettledSubagent(...)` 的 `receipt`(点形)、`hooksNotRunNotice(plan)` 的插件名 / 事件名、设置来源 hooks 不上请求体的一次性告警里的事件名、后台子代缺席行(`engineAgentAbsenceDroppedLine` 与迟到终报那一句)里的名字 / 状态 / 回收原因 | 连接符原样 → 同 U-1 | pending(换读:回决备注与续跑收据两处读点,见 105d) | n/a | n/a | n/a | pending | G-J4 |
|
|
9636
|
+
| U-3 | `escapeDisplayControlChars` / `collapseLabel` / `capForDisplay`、同伴署名规范化、hook 故障横幅 | **不变**(旧集不含格式类整类,连接符照旧原样;逐字节保持) | n/a | n/a | n/a | n/a | n/a | G-J5 |
|
|
9637
|
+
| E-1 | `DisplayUntrustedOptions.escapeBackslashes?: boolean` | 无 → 新增可选位(默认关;只在 `mark` 为 `escape` 时生效):字面反斜杠画成两枚,危险码位照旧画成标记 ⇒ 解码唯一(105a-2)。输入里没有反斜杠时与不开逐字节同。🔴 不幂等;封长量成对之后的长度 | n/a | n/a | n/a | pending(建议:名字 / 决断面载体开它;开了之后「真 U+2060 与字面六字符同形」那条钉当天翻面) | pending | 105a-2 · G-E1–G-E6 |
|
|
9638
|
+
| B-1 | `DisplayUntrustedOptions.blanks?: boolean` | 无 → 新增可选位(默认关):U+00A0 / U+1680 / U+2000–U+200A / U+202F / U+205F / U+3000 / U+115F / U+1160 / U+3164 / U+FFA0 / U+2800 在折平之前标出来,不并、不去首尾;开着时凭据两网对这类转义记号取字面与读回两种读法(不比开关关弱;「userinfo 中间夹一枚名字位空白」按 userinfo 遮;标签后、值开头那一枚在字面读法里判型透明 ⇒ 诊断词 / 点名 / 空值 / 里层标签与开关关同答,不凭空铸记号;行折平开着时另加折平读法,几种读法遮盖取并 ⇒ 开关开遮住的 ⊇ 开关关遮住的,例外 KL-150 / KL-151)。散文载体别开 | n/a | n/a | n/a | pending(建议:标识载体开它) | pending | G-B1–G-B5 |
|
|
9639
|
+
| W-1 | 凭据两网的判别视图:原字孤代理项(配不成对的 U+D800–U+DFFF)(CC-207) | 当普通字(标签 / 分隔符 / 值之间夹一枚就认不出键值对;默认形靠第二轮看见字符面铸的记号才洗到)→ 🔴 与格式字符同处置:两种视图里都是可剥单元,命中映回原文遮盖。机读口(结果帧 `errors[]`、合成终局行,两条车道)、呈前出口(一轮即洗到)、标记位置读口同批;凭据之外的孤代理项逐字节不动。同形变化:userinfo 左界停在孤代理项处、`scheme://` 形的值按地址豁免(与零宽空格在同一位置时逐字节同;此前孤代理项被粘进值,偶尔顺带遮掉邻近的非凭据文字)。**wire 可见**;凭据位上多数形更安全 —— 例外是含孤代理项的两形(userinfo 后无主机 / 方案词后的地址豁免;与零宽空格同位同答),0.83.4 顺带遮住的值本版露出(KL-143) | n/a(按 `errors[0]` 取失败详情的读点零改动即净) | n/a | n/a | n/a | pending(按原样断言凭据字节的判据改锚) | G-W1 / G-W2 |
|
|
9640
|
+
| V-1 | 凭据两网开着的一切形:控制符的转义记号紧跟另一枚转义记号(ESC 后接 U+2060 / U+200B / DEL / 又一枚 ESC …) | 判别视图把 `\u001B` 与下一枚的反斜杠读成 ESC-ST,下一枚的十六进制尾巴被当成值换成记号(`Basic\u001B\«redacted:secret»`;`max` 截在那里留串尾孤反斜杠;`escapeBackslashes` 留不成对反斜杠、丢一枚标记;0.83.3 起)→ 🔴 转义记号在判别视图里是整单元(序列终字 / ST 不取下一枚记号的反斜杠):`Basic` + ESC + U+2060 ⇒ `Basic\u001B`;凭据判定不变。原子只认本出口会写、视图会剥的那一类(小写 `\u`、码位在字符面里);同批的序列读法:没收尾的 CSI / nF 前缀整段一个单元、终字留字读法认已知凭据字面形首字与「反斜杠 + 引号」、`@` 不当终字、`blanks` 读回空白读法里名字位空白当中间字节、只剩占位的用户名算用户名 —— 相对 0.83.4 零新增外泄(差分随机语料计数 0);`ESC [` + `sk-…` 这类单个序列头紧贴字面形的输入 0.83.4 露,本版遮住 | n/a(今天的呈现出口不经本包) | n/a | n/a | pending(按 `\u001B\«…»` 形断言的格换读;今天检索未见) | pending | G-V1 / G-V1b / G-V1c |
|
|
9641
|
+
| V-2 | 凭据 URL 结构面:URL 片段后接非 ASCII 空白(`\s` 同集、名字位空白族),再接一枚标签 / 方案词 | 片段只在 ASCII 空白处断,方案词被吞进 query 记号、值原样上屏(`?a=1` + NBSP + `Bearer <值>` ⇒ `?a=«redacted:query» <值>`)→ 🔴 这一串空白后紧跟标签 / 方案词时片段在此断(`?a=«redacted:query» Bearer «redacted:secret»`);后面不是标签 / 方案词时照旧不断(query 值中间夹 NBSP 仍整只进记号) | n/a(今天的呈现出口不经本包;机读口经本包的零改动即得) | n/a | n/a | pending(按旧读数钉的格换读;今天检索未见) | pending | G-V2 |
|
|
9642
|
+
| V-3 | 凭据词级面:标签与分隔符之间、分隔符与值之间、方案词与值之间的谚文填充 U+115F / U+1160 / U+3164 / U+FFA0 与盲文空点 U+2800 | 不算空白,整形认不出、值原样上屏 → 🔴 与空白同判,值换记号 | n/a | n/a | n/a | n/a | pending | G-V3 |
|
|
9643
|
+
| V-4 | 凭据词级面:值的起点是一串反斜杠 / 一枚引号之后的里层标签或方案词(`token= "password":"<值>"`) | 外层把 `"password"` 当引号值换掉,里层的值原样上屏 → 🔴 外层不算,里层去认(`token= "password":"«redacted:secret»"`) | n/a | n/a | n/a | n/a | pending | G-V4 |
|
|
9644
|
+
| M-1 | `displayUntrustedMarks(text, opts?)`;型 `DisplayUntrustedMarked` / `DisplayMarkSpan` | 无 → 新增:`{ text, marks }`,`text` 与同选项出口逐字节同,`marks` = 每一枚字符面标记的 UTF-16 区间(105a-3) | n/a | n/a | n/a | pending(建议:按样式区分标记时用) | pending | 105a-3 · G-M1–G-M3 |
|
|
9645
|
+
| SM-1 | `hooksForWire()` / `hooksWirePlan()` 的设置来源,在宿主报了启动模式时(CC-200) | 照发五源 → **`'safe'` 与 `'bare'`:只发 managed**(bare 取保守侧:上游对 bare × managed 两向都有依据,本版不从请求体拿掉 managed;细化见包侧缺口)。所有事件同判。两种模式插件 hook 全筛(`startup_mode`);会话目标 `Stop` hook 照发(合并 `disableAllHooks` 一类治理下照旧不发)。被筛掉的来源不进 `settingsDropped` 与开机清单(两处只剩 managed 的行)。整条腿关掉的治理门(未受信工作区 / managed 关停 / managed 读取抛错)先判、恒赢,与本版前同 | pending(实现 SM-2 读口即得;不实现 ⇒ 与 0.83.4 同) | n/a(不调 `hooksForWire()`) | n/a(不调 `hooksForWire()`) | n/a | pending | 105b · G-SM1–G-SM9 |
|
|
9646
|
+
| SM-2 | `SettingsPort.hooksStartupMode?(): HooksStartupMode \| undefined`;导出型 `HooksStartupMode = 'safe' \| 'bare'` | 无 → 新增可选成员与型:宿主运行在哪种启动模式,两者都开报 `'bare'`。只认这两个词(本版两词同处置;宿主照实报,bare 的处置细化时不用改宿主)。独立于插件读口;两条路径(传不传计划)都读。一轮至多读一次;整条腿已关的路径不读 | pending(返回 `isBareMode() ? 'bare' : isSafeModeActive() ? 'safe' : undefined`,见 105d) | n/a(若将来有这两种模式再实现) | n/a(同左) | n/a | pending | 105b · G-SM1 / G-SM2 / G-SM5 |
|
|
9647
|
+
| SM-3 | `PluginHooksReading.suppressedByStartupMode`(插件读数上已有的位) | 只筛插件 → **也作用于设置来源,按安全模式处置**(只发 managed;只在传了计划、读到插件口的路径上看得见)。词读口报了合法词时以词为准(词 `'bare'` ∧ 本位真 ⇒ bare,本版与安全模式同处置)。取值时抛错 ⇒ 插件那一半 `failed`,设置来源按 SM-2 判 | consumed(今天未报这一位;按 SM-2 报即可) | n/a | n/a | n/a | pending | 105b · G-SM3 |
|
|
9648
|
+
| DD-1 | `hooksForWire()` / `hooksWirePlan()` 的设置来源条目(CC-208) | 按来源逐份拼接(同一条写两处发两份)→ **同事件 ∧ 组上除 `hooks` 外逐字节同 ∧ 条目身份键同 ⇒ 只发一份:位置在拼接序首次出现处、字段取合并顺序优先级最高那份**(managed > flag > local > project > user,同来源取后出现的;managed 位置与值都不变);次序不变、没有重复的组原样、整组去空不发。身份键:command = `shell` + `command` + `args` + `if`;prompt / agent = 类型 + `prompt` + `if`;http = `url` + `if`;mcp_tool = `server` + `tool` + `input` + `if`;script = `script` + `file` + `if`。形坏 / 算不出键的条目、插件组、会话目标 `Stop` hook 不参与;启动模式收窄之后再去重 | consumed(零改动即得) | n/a(不调 `hooksForWire()`) | n/a(不调 `hooksForWire()`) | n/a | pending | 105b · G-DD1–G-DD5(含 G-DD2b) |
|
|
9649
|
+
| CS-1 | `SelfHealOutcome` 的 `running-cancelled` / `stale-park-cancelled` / `ask-decided-without-card` 三臂(CC-212) | 无 → **+1 可选位 `releaseConfirmedByEngine?: true`**(型面 additive):引擎直说会话已交出(`heldBy: null`)⇒ 严格 `true` 在场;只凭终态词判的释放 ⇒ 缺席,从不为 `false`。在结局对象的键上,复制 / 序列化 / 跨进程不丢。处置(`resending`)不按它分 | consumed(零改动即得;按 `kind` 穷举不受影响) | consumed(同左) | consumed(同左) | consumed(同左) | pending | G-CS1–G-CS5 |
|
|
9650
|
+
| CS-2 | `MIGRATED_COMPENSATIONS` T36 `what`;`REQUEST_FIELD_MATRIX` `lenses` 行 `why` | 过时说明 → 现状说明(见 CHANGELOG Changed)。零判定 | n/a(说明串) | n/a | n/a | n/a | n/a | — |
|
|
9651
|
+
| CS-3 | `activeRunSelfHealRow(outcome)` 对上面三条结局(用户形与 `origin: 'injected'` 形) | 一句说满 → **按 CS-1 那一位分说**(逐句见 CHANGELOG Changed):位在场才说「engine confirmed it is no longer holding this session」/「the session is free again」;位缺席 ⇒ 只说那条 run 已结束 + 可能要再发一次 / 可能再被挡一次(三臂的用户行同一句出路半句);`stale-park-cancelled` 与 `ask-decided-without-card` 位在场时不再说「报它已结束」。只认严格 `true`。宿主 `rowFor` 覆盖口照旧优先 | consumed(零改动即得) | consumed(同左;今天未接三选卡则零读点) | consumed(同左) | consumed(同左) | pending | G-CS1–G-CS5 |
|
|
9652
|
+
|
|
9653
|
+
#### 105a-1 · 连接文字清单(U-1 语境 ②)
|
|
9654
|
+
|
|
9655
|
+
Script_Extensions 值,门里另有一份独立清单与源码双向等值,并逐族核「字母 + ZWJ / ZWNJ + 字母原样;字母 + ZWJ + 数字、字母 + ZWNJ 在串尾、拉丁字母 + ZWJ + 该族字母、该族字母 + ZWJ + 拉丁字母都标」:
|
|
9656
|
+
|
|
9657
|
+
- **连写文字**(字形随左右连接变形):阿拉伯 `Arab`、叙利亚 `Syrc`、曼达 `Mand`、摩尼 `Mani`、诗篇巴列维 `Phlp`、粟特 `Sogd`、古回鹘 `Ougr`、花剌子模 `Chrs`、蒙古 `Mong`、八思巴 `Phag`、N'Ko `Nkoo`、阿德拉姆 `Adlm`、哈乃斐罗兴亚 `Rohg`;
|
|
9658
|
+
- **印度系 Brahmic**(连接符控制半形、连体字与显式 virama):天城 `Deva`、孟加拉 `Beng`、古木基 `Guru`、古吉拉特 `Gujr`、奥里亚 `Orya`、泰米尔 `Taml`、泰卢固 `Telu`、卡纳达 `Knda`、马拉雅拉姆 `Mlym`、僧伽罗 `Sinh`、婆罗米 `Brah`、凯提 `Kthi`、夏拉达 `Shrd`、悉昙 `Sidd`、提尔胡塔 `Tirh`、格兰塔 `Gran`、尼瓦尔 `Newa`、塔克里 `Takr`、莫迪 `Modi`、马哈加尼 `Mahj`、霍吉奇 `Khoj`、库达瓦迪 `Sind`、多格拉 `Dogr`、南迪那格里 `Nand`、马萨拉姆贡德 `Gonm`、贡贾拉贡德 `Gong`、迪维斯阿库鲁 `Diak`、拜克舒基 `Bhks`、札那巴札尔方字 `Zanb`、索永布 `Soyo`、阿洪 `Ahom`、查克马 `Cakm`、锡尔赫特 `Sylo`、索拉什特拉 `Saur`、梅泰 `Mtei`、林布 `Limb`、雷布查 `Lepc`、卡维 `Kawi`;
|
|
9659
|
+
- **东南亚与藏**:缅甸 `Mymr`、高棉 `Khmr`、泰 `Thai`、老挝 `Laoo`、藏 `Tibt`、巴厘 `Bali`、爪哇 `Java`、巽他 `Sund`、兰纳 `Lana`、傣越 `Tavt`、新傣仂 `Talu`、德宏傣 `Tale`、占 `Cham`、巴塔克 `Batk`、布吉 `Bugi`、望加锡 `Maka`、勒姜 `Rjng`、克耶 `Kali`、他加禄 `Tglg`、哈努诺 `Hano`、布希德 `Buhd`、塔格巴努亚 `Tagb`。
|
|
9660
|
+
|
|
9661
|
+
语境按**簇的基字**判:连接符左侧跨过组合符(含变体选择符、virama、nukta、元音符号)与 emoji 肤色修饰回到基字,右侧同理取下一簇的基字;两个基字都要是**字母**、文字都在清单内。数字 / 标点(天城数字 U+0969、danda U+0964、阿拉伯逗号 U+060C)与没有基字的孤立组合符不提供文字语境。不看紧邻码点,是因为通用组合符的 Script_Extensions 会带上清单内的文字(U+0300 / U+0301 带 `Tale`,U+0308 带 `Syrc` / `Tale`):`a` + U+0301 + ZWJ + U+0301 + `b` 照标。文字属性是通用 / 继承的修饰字母(U+02BC、U+0640 …)不算字母语境。运行引擎不认的文字名在载入时滤掉(那一族旁的连接符改为标出来,KL-140)。
|
|
9662
|
+
|
|
9663
|
+
**旧编码的 chillu / khanda-ta**:ZWJ 紧跟在 virama 之后、virama 前的基字是清单文字的字母 ⇒ 原样,右边不问(词尾;马拉雅拉姆 U+0D28 U+0D4D + ZWJ、孟加拉 U+09A4 U+09CD + ZWJ)。virama 取 Canonical_Combining_Class = 9 且属清单内文字的 63 枚:天城、孟加拉、古木基、古吉拉特、奥里亚、泰米尔、泰卢固、卡纳达、马拉雅拉姆(三枚)、僧伽罗、泰、老挝、藏、缅甸(两枚)、他加禄(两枚)、哈努诺、高棉、兰纳、巴厘、巽他(两枚)、巴塔克(两枚)、锡尔赫特(两枚)、索拉什特拉、勒姜、爪哇、梅泰(两枚)、婆罗米(三枚)、凯提、查克马(两枚)、夏拉达、霍吉奇、库达瓦迪、格兰塔、尼瓦尔、提尔胡塔、悉昙、莫迪、塔克里、阿洪、多格拉、迪维斯阿库鲁(两枚)、南迪那格里、札那巴札尔方字(两枚)、索永布、拜克舒基、马萨拉姆贡德(两枚)、贡贾拉贡德、卡维(两枚)。ZWNJ 不在这一条里(virama + ZWNJ 在串尾照标)。门里另有一份独立的 virama 清单与源码双向等值,并逐枚核一正三负。
|
|
9664
|
+
|
|
9665
|
+
#### 105a-2 · `escapeBackslashes` 的解码文法(E-1)
|
|
9666
|
+
|
|
9667
|
+
输出从左往右读:`\\` ⇒ 一枚字面反斜杠;`\u` + 四位大写十六进制 ⇒ 那个 BMP 码位(含孤代理项);`\u{` + 一到六位大写十六进制 + `}` ⇒ 那个 astral 码位;其余字符原样。开关开着的输出里不会出现别的「反斜杠 + 字符」组合。凭据两网都关、`foldLines: false` 时,解码结果恰是原输入;凭据网开着时,凭据位是记号(不可逆,KL-142),记号之外的部分照样逐字解回(凭据记号不会吃掉半枚转义记号,V-1);折平开着时空白串是一个空格。
|
|
9668
|
+
|
|
9669
|
+
#### 105a-3 · 标记位置的语义(M-1)
|
|
9670
|
+
|
|
9671
|
+
- `marks` 升序、不重叠;每枚 `text.slice(start, end)` 是码位 `codePoint` 的标记形:转义形 `\uXXXX`(BMP)/ `\u{X}`(astral),点形 `.`,空格形一个空格。
|
|
9672
|
+
- 只报字符面标记。凭据记号(`«redacted…»` 闭形)、`escapeBackslashes` 成对的字面反斜杠、原样放行的 RGI 地区旗与连接符都不在内。
|
|
9673
|
+
- 空格形:一串空白里有被标的码位 ⇒ 行折平并成的那一个空格报一枚,`codePoint` 取串里第一枚被标的;同串其余被标的码位不再出现。被去首尾的不报。
|
|
9674
|
+
- 封长:截点不劈标记;截掉的标记不报,不会报半枚。
|
|
9675
|
+
- 标记被凭据记号吞掉(它夹在一只凭据值中间)⇒ 不报。
|
|
9676
|
+
- `text` 与同选项的 `displayUntrusted(text, opts)` 逐字节相同(门对表);`escapeBackslashes` 开着时两只口各自只调一次即同。
|
|
9677
|
+
|
|
9678
|
+
### 105a′. 成文改口(旧判据眼作废 → 新判据眼)
|
|
9679
|
+
|
|
9680
|
+
- **作废(U-1)**:§101a-1「双向与格式字符(`bidi`):格式类整类(…;ZWNJ / ZWJ 除外,emoji 序列与连字不受影响)」里「ZWNJ / ZWJ 除外」的判据眼 —— 本版起只在 105a-1 的两类语境里除外。按「任意位置的 ZWJ / ZWNJ 原样」断言的格(如 `displayUntrusted('a' + U+200C + 'b' + U+200D + 'c')` 原样)在 0.83.5 上判红是预期行为。
|
|
9681
|
+
- **作废(SM-1,CC-200)**:§103 包侧缺口 ③「宿主报的启动模式位只筛插件 hook,设置来源在这一位下不收窄、照发引擎」;§101 插件判定表「安全模式 / bare 模式」一行的后半句「设置来源的 hooks 不受这一位影响」;§101 成文改口第 6 条「对设置来源的 hooks 仍成立」半句;§100 射程句「宿主的『安全模式』本包没有读口,仍不在引擎腿上生效」。本版起:宿主报了启动模式 ⇒ 安全模式与 bare 模式都只发 managed。
|
|
9682
|
+
- **作废(DD-1,CC-208)**:§103 包侧缺口 ②「设置来源之间不去重,同一条 hook 写在两个来源里请求体上出现两次」—— 本版起同事件同 `matcher` 组同身份键的只发一份;剩余边界见本段包侧缺口(KL-153)。按「同一条 hook 写两处 ⇒ 请求体两份」断言的判据眼作废。
|
|
9683
|
+
- **作废(CS-3,用户形)**:「`running-cancelled` 行恒说 "The engine confirmed it is no longer holding this session"」的判据眼(含 §7b P-45 旧文「`running-cancelled` 行仍写着 …」那半句 —— 活段已同批改)。**改读**:结局带 `releaseConfirmedByEngine: true` 才出现 confirmed;位缺席(只凭终态词判释放,或宿主自拼不带位)⇒ 行里不出现 "confirmed"、带「you may have to send it once more」。按「cancel 成功 ⇒ 行里有 confirmed」断言的格改锚到「终态词那一路不出现 confirmed」;按「`stale-park-cancelled` / `ask-decided-without-card` 行恒说 reports it as finished / has since finished」断言的格改锚到「位缺席时这么说」;按「`ask-decided-without-card` 行逐字等于 … has since finished — sema is re-sending your message.(句号收尾)」断言的格改锚到带出路半句的新句。
|
|
9684
|
+
- **作废(CS-3,注入件形)**:「sema 自己发出的后续消息被挡后重发,那一行恒说 "the session is free again, so sema is sending the message now — nothing for you to do."」(0.83.0 起的注入件十二句事实表之一)。**改读**:位在场逐字仍是这一句;位缺席 ⇒「… that reply is now reported as finished, so sema is sending the message now — nothing for you to do (if the session has not quite freed up yet, it may be held back once more).」。注入件事实表十二句 → 十三句;「is sending the message now」「nothing for you to do」两个承诺短语只在重发档出现,不变。
|
|
9685
|
+
- **作废(0.56.0 已知局限)**:「`wiring_manifest` 两段的超集键名是临时形,SDK 声明该臂之后改名(BREAKING,另立一批)」的预告,本版成文撤回、不执行。**新律**:`wiring_manifest` 内部臂上的段键一律 `_sema_*`(今天九段:`modelGate` / `autoMode` / `mcp` / `tools` / `hooks` / `lsp` / `writeProtection` / `autoConsolidation` / `readDeny`),不随上游声明改名;端读的是 chrome 臂与 `WiringManifestView` 上的去前缀名,不受影响。
|
|
9686
|
+
- **作废(§101d 终端改调清单 P-1)**:「行为唯一的差:首尾带空白的名字从『写』变『不写』」一句。**改读**:`sessionPolicyDeliverable` 比终端旧判官更严的是**三类** —— 首尾带空白的名字、带 `*` 的通配名、按工具名整对端的非 MCP 命名空间名;三类都由包侧差分门逐例对数(与 0.83.1 CHANGELOG 的五词成因一致)。
|
|
9687
|
+
- **改读(管理台)**:`test/du-display-untrusted.test.ts:353-357`(⑥ 第二条:`displayField` / `displayDecisionLine` 对 `Bash` + {U+200D, U+200C, U+00A0, U+2003, U+3000, U+3164} + `x` 原样)—— 连接符两枚改为 `Bashx` / `Bashx`(当天红,正是预期路径);空白四枚在两只载体上仍原样(`blanks` 是开关,未开不变)。同文件 `:347-351`(⑥ 第一条:真 U+2060 与字面六字符同形)默认不变;载体开了 `escapeBackslashes` 后翻面为「两者不同」。`test/du-display-untrusted-r5.test.ts:43-61`(标识载体单射集)两版都绿,`:56-57` 的注释「ZWJ / ZWNJ 在上游那一份里原样通过」过时;`lib/web/display-untrusted.ts:24-25` 与 `displayIdentifier` 头注(`:160` 前后)同一句过时。
|
|
9688
|
+
- **改读(终端)**:本包铸的两处文本在屏上变 —— `components/tasks/SubagentContinueRow.tsx:52` 取的续跑收据(拉丁等字母旁的连接符 ⇒ `.`)、`sema/approvalStreamWire.ts:1567-1568` 取的回决备注(⇒ 空格)。自带的呈现叶子(`sema/displayUntrusted.ts:89` 经 `sema/untrustedDisplayText.ts:171` 的字符类,两枚连接符在白名单里)本版不受影响;换装本包出口时,`sema/bidiDisplaySanitize.test.ts:182`(H5:`nast` + ZWNJ + `a` + U+06A9 原样)在本包判据下是标出来(ZWNJ 夹在两枚拉丁字母之间),`:180`(H4 emoji 家族)仍原样,`sema/displayCapOrder.test.ts:39` 起用到 ZWJ 的格要按 105a-1 重读。
|
|
9689
|
+
- **改读(本包自己的门)**:`run-display-untrusted-projection-test.mjs` D13 只钉 emoji 那一半;R3 / R6 的旧实现对拍域移出格式类整类(含两枚连接符)。
|
|
9690
|
+
- **改读(V-1)**:「控制符转义记号紧跟另一枚记号,后面再跟凭据标签 / 方案词」的输入,0.83.3 / 0.83.4 画出的 `\u001B\«redacted:secret»` 形(反斜杠 + 记号)作废;本版是两枚完整标记加记号(`'token: '` + ESC + U+200B + 值 ⇒ `token: \u001B«redacted:secret»`),`'Basic'` + ESC + U+2060 这类后面没有值的,不再出现记号(`Basic\u001B`)。
|
|
9691
|
+
- **改读(W-1)**:「结果帧 `errors[]` / 合成终局行里,夹着孤代理项的键值对原样」的判据眼作废;孤代理项被当作值的一部分、连带遮掉邻近非凭据文字的读数(如 `<词>` + U+DC00 + `u:p@host` 整段成 `«redacted:userinfo»@host`)改为与零宽空格同位时同答(`<词>` + U+DC00 + `«redacted:userinfo»@host`)。
|
|
9692
|
+
- **改读(U-1 第二段)**:按「`©` / `™` 之间、U+02BC 修饰字母撇号之间、阿拉伯 tatweel 旁、emoji 与紧随的组合符之间的 ZWJ 原样」断言的格作废;本版这些位置标出来(`©©`)。按 emoji 呈现的序列(`❤` + U+FE0F + ZWJ + 🔥、肤色修饰后接 ZWJ)不变。
|
|
9693
|
+
- **改读(V-2 / V-3 / V-4)**:「URL 片段穿过 NBSP 把后面的方案词吞进 query 记号」(`?a=«redacted:query» <值>`)、「谚文填充 / 盲文空点旁的键值对原样」、「`token= "password":"<值>"` 外层遮 `password`」三种读数作废,改锚到值换记号的新形(105c G-V2–G-V4)。
|
|
9694
|
+
- **改读(SM-1)**:按「启动模式位真时请求体仍含 user / project / local / flag 的组」断言的判据眼作废,改为「两种模式都只含 managed 的组(与会话目标 `Stop` hook)」;「启动模式位真时计划的 `settingsDropped` / 开机清单列出非 managed 来源的行」作废。
|
|
9695
|
+
- **订正(活段 §3c / §3d-2 / §3z / §4a / §4b-3 / §4f / §7 / §8,本版同批改)**:§7a P-2 / P-3 / P-4 早在 0.65.0 已收(终态 tick 透传并落终态、`approval_request` / `approval_revoke` 两条 chrome 臂)、§7b P-7 的回执另有读口、P-45 的正位解(`heldBy` 读面)0.68.0 已兑现、§4f 的类型别名退役条件早已兑现、§8-A 的 sdk 地板旧数字、§7d P-43 的「余项」(启动模式收窄本版已收)—— 活段此前没跟,本版按现状改写;按那几行旧文写的判据眼(「端收不到 `approval_revoke`」「子代 settle 只靠防御 sweep」「`task_progress` 剥 `status`」)作废。§3d-2 旧文教的 `tool_end` 扁平读法(`settledBy === 'timeout' && resolution === 'window_expired'` 两键合取、臂上 `resolution` 读形)0.60.0 起已不成立(四个扁平词在 wire 上已删),改读门记录:`isApprovalWindowExpiredGate(gateOutcomeOf(f)) || isGateParkedToolEnd(f)` 一类包内谓词(§3d-2 / §24c);§4a 旧文「`ToolApprovalRespondAckView` 是 sdk 形的超集位」改读为「0.58.0 起就是 sdk `ToolApprovalRespondAck` 的别名」;§4b-3 实现锚里的 `readOfferSupply` 是 `readRuleOfferSupply`。
|
|
9696
|
+
- **新增**:G-J1–G-J8、G-E1–G-E6、G-B1–G-B5、G-M1–G-M3、G-W1–G-W2、G-V1 / G-V1b / G-V1c / G-V2–G-V4、G-X1;G-SM1–G-SM9;G-DD1–G-DD5(含 G-DD2b);G-CS1–G-CS5。
|
|
9697
|
+
- **不变**:旧四口与 hook 故障横幅的字符集;凭据两网的判定(`blanks` 关着时判别视图逐字节同);默认形幂等(含 `max`);不含连接符、不含孤代理项、且没有「转义序列(ESC / C1 序列头,可隔参数 / 中间字节)之后紧跟一枚转义记号」的输入上默认形输出逐字节同(凭据两网关时由门对冻结的上一版字符面逐字节钉;凭据两网开时另核:6 万条不含连接符 / 孤代理项的控制符 / 格式字符 / 凭据混排随机串 × 四种形 + 机读口共 30 万次调用对 0.83.4 发布产物,差异 4278 处全部落在这一射程里 —— 其中 20 处要在行折平把 NBSP 折成空格之后才成形 —— 射程外零差异);`bidi: false` 时连接符原样;RGI 地区旗整串放行。凭据位另核(判据:0.83.4 遮住的凭据字面,本版不许露;对 0.83.4 发布产物):转义记号 / 控制符人造池两组各 5 个种子 × 2 万条、ANSI 与不可见字符现实池 3 × 2.5 万、孤代理项 / 连接符池 3 × 2 万(各 × 五种形 + 机读口),序列头紧贴凭据字面形的定向池 3 × 4 万(× 两种形)、混排池两组 3 × 2 万(× 十二种形 + 机读口 + 旧四口)—— 「0.83.4 遮住、本版露出」计数 0。hooks:没报启动模式的宿主(词读口缺席 / 返回 `undefined` / 非法词 / 抛错,且插件读数没报真),在设置来源里没有同条目重复(跨来源或同组)时,请求体、计划、开机清单与 0.83.4 逐字节同(非法词与抛错多一行调试;有重复时按 DD-1 只发一份);插件在启动模式下全筛(`startup_mode`)与 0.83.1 起同;会话目标 `Stop` hook 的去留只随治理(与 0.83.0 起同);设置来源的拼接次序(managed 在前)。自愈:释放判据、重发腿与处置(`resending`)不变;引擎直说会话已交出时 `running-cancelled` 用户行与注入件行逐字不变。
|
|
9698
|
+
- 已发段(§100、§101、§103 与 0.56.0 的已知局限)不回改,以本段为准。
|
|
9699
|
+
|
|
9700
|
+
### 105b. 缺席语义(逐键)
|
|
9701
|
+
|
|
9702
|
+
- `escapeBackslashes` 缺席 / `false` / 非 `true` 的任何值(`'true'` / `1` / `null`)⇒ 关(只认严格的 `true`);`mark` 为 `dot` / `space` 时即使 `true` 也关。
|
|
9703
|
+
- `blanks` 缺席 / `false` / 非 `true` 的任何值 ⇒ 关(只认严格的 `true`)。
|
|
9704
|
+
- `displayUntrustedMarks` 的 `text` 非串 ⇒ 按 `String(v ?? '')` 归一(与 `displayUntrusted` 同;`null` / `undefined` ⇒ 空串),不抛;`opts` 缺席 / `null` ⇒ 按默认(与 `displayUntrusted` 同)。
|
|
9705
|
+
- `marks`:文本里没有字符面标记 ⇒ 空数组(不是缺席)。`DisplayMarkSpan.codePoint`:空格形一串被并成一个空格 ⇒ 串里第一枚被标的码位;同串其余不报。
|
|
9706
|
+
- `hooksStartupMode` 不实现 / 返回 `undefined` = 宿主不在安全 / bare 模式(与插件读数上那一位「缺席 = 都不是」同一句)⇒ 不收窄,**零日志、不告警**(没有这两种模式的宿主不实现它是正确答案;有这两种模式的宿主不实现 = 设置来源照发,见包侧缺口)。
|
|
9707
|
+
- `hooksStartupMode` 返回 `'safe'` / `'bare'` 之外的值(`true`、`false`、`'true'`、`'SAFE'`、空串、`null`、数、对象……)⇒ 不收窄(大小写敏感,不做归一),记一行调试。
|
|
9708
|
+
- 读口**写成属性**(`hooksStartupMode` 在场但不是函数)⇒ 不收窄,每轮记一行调试(点名它不是方法;与非法词同口径 —— 宿主显然想报一个词,静默当缺席会让「开了安全模式却照发」无迹可查)。
|
|
9709
|
+
- 读口**抛错** ⇒ 不收窄,记一行调试。方向与 `mergedDisableAllHooks()` 抛错「按真处置」相反:那个值每个宿主都真实存在、按真最严只到「只发 managed」;启动模式读坏了若按某种模式处置,一个普通会话会因为读口故障每轮丢掉用户的 hooks。插件读数上的位报真时照样按安全模式收窄。
|
|
9710
|
+
- 插件读数上的 `suppressedByStartupMode` 缺席 / `false` ⇒ 这一处不算;为真 ⇒ 词读口没报出合法词时按 `'safe'`;取值时抛错 ⇒ 这一处不算、插件那一半 `failed`。
|
|
9711
|
+
- 不传计划的 `hooksForWire()` 不读插件口 ⇒ 插件读数上的位在这条路径上看不见;只在那里报位、又不传计划的宿主不收窄(与 0.83.4 同)—— 报 SM-2 读口即两条路径都认。
|
|
9712
|
+
- 两种模式下 managed 也没配 hooks、也没设会话目标 ⇒ 整份 `settings.hooks` 缺席(与「没配任何 hooks」同形,不发空对象)。
|
|
9713
|
+
- (DD-1)条目身份键算不出(条目不是对象、没有串 `type`、类型不认得、该类型的必需字段不是串、script 型的 `script` / `file` 在场却不是串或两者都缺、`if` 在场却不是串、`args` / `input` 序列化抛错)⇒ 这一条不参与去重,原样发出(形坏条目由服务端报错,与本版前同)。组不是对象或没有 `hooks` 数组、组上的键序列化抛错 ⇒ 整组不参与。
|
|
9714
|
+
- (DD-1)`matcher` 缺席与值为 `undefined` 算同一组键;缺席与空串 `''` 算不同组键(不合)。`shell` 缺席与任何显式值算不同(不合)。`if` 缺席与空串算相同(与上游同)。`args` 缺席与 `null` 算相同。
|
|
9715
|
+
- `releaseConfirmedByEngine` 缺席 = 这次释放不是引擎直说的(只凭终态词判),或结局对象是宿主自拼、没带这一位 ⇒ 不知道会话是否已真正交出 ⇒ 落不说满的那句;**缺席不当直证,也从不铸 `false`**;非严格 `true` 的值(`false` / `'true'` / 其它)与缺席同读。`heldBy` 整键缺席(老引擎)⇒ 只剩终态词那一路,位恒缺席。
|
|
9716
|
+
|
|
9717
|
+
### 105c. 黑盒判据骨架
|
|
9718
|
+
|
|
9719
|
+
> 🔴 标「本版证明」的格在 **0.83.4** 产物上必须 FAIL、在 0.83.5 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读 / 升级之后的行为。请记下两次跑的产物标识(版本 + tarball shasum)。前缀:G-J = 连接符、G-E = 反斜杠成对、G-B = 名字位空白、G-M = 标记位置、G-W = 孤代理项、G-V = 凭据读法存量修复、G-X = 端侧(展示层)、G-SM = 启动模式收窄、G-DD = 设置来源去重、G-CS = 自愈重发行。下文 U+XXXX 指真码位,反斜杠都是字面一枚;「字符面全关的出口」= `displayUntrusted(x, { controls: false, bidi: false, foldLines: false })`(只剩凭据两网)。
|
|
9720
|
+
|
|
9721
|
+
- **G-J1**(本版证明,纯包层;U-1):`displayUntrusted('Bash' + U+200D)` ⇒ `Bash`;`displayUntrusted('a' + U+200C + 'b' + U+200D + 'c', { foldLines: false, mark: 'escape' })` ⇒ `abc`;`displayUntrusted('Ba' + U+200D + 'sh', { foldLines: false, mark: 'dot' })` ⇒ `Ba.sh`;`'x' + U+200D`、`U+200D + 'x'`、单独一枚 U+200D、`'1' + U+200D + '2'`、`'Ж' + U+200D + 'Ж'`、`'中' + U+200C + '文'`、U+1F468 + U+200D + `'a'`、U+1F468 + U+200C + U+1F469 在 `{ foldLines: false, mark: 'escape' }` 下连接符都成 `` / ``。判别点:0.83.4 上全部原样带着连接符。
|
|
9722
|
+
- **G-J2**(回归约束,纯包层;U-1):`ok ` + E + ` go` 在默认形 / `{ foldLines: false, mark: 'escape' }` / `{ foldLines: false, mark: 'dot' }` / `{ foldLines: false, keepLayout: true, mark: 'dot' }` / `{ mark: 'space' }` 下逐字节原样,E 取 U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466、U+1F469 U+1F3FD U+200D U+1F4BB、U+1F3F3 U+FE0F U+200D U+1F308、U+2764 U+FE0F U+200D U+1F525、U+1F3F4 U+200D U+2620 U+FE0F、U+1F468 U+200D U+1F9B0;英格兰旗(U+1F3F4 U+E0067 U+E0062 U+E0065 U+E006E U+E0067 U+E007F)原样。
|
|
9723
|
+
- **G-J3**(本版证明,纯包层;U-1 连接文字):U+0915 U+094D U+200D U+0937、U+0628 U+200C U+0628、U+0628 U+064E U+200C U+0628、U+1950 U+0301 U+200D U+1950 在 `{ foldLines: false, mark: 'escape' }` 下原样(回归一半,两版同);U+0628 U+200C `a` ⇒ U+0628 `a`;`a` U+0301 U+200D `b` ⇒ `a` U+0301 `b`;`a` U+0308 U+200C `b` 同判;`a` U+0301 U+200D U+0301 `b`、`a` U+0308 U+200D U+0628、`a` U+FE0F U+200D U+1F525 的连接符都标出来(语境按簇的基字判,不按紧邻码点;本版证明一半,0.83.4 上原样)。
|
|
9724
|
+
- **G-J4**(本版证明,纯包层;U-2):`readDecisionNoteAudit({ noteRecorded: true, decisionNote: 'deny' + U+200D + 'this' }).note === 'deny this'`;`resumeSettledSubagent` 的 facade 回 `{ note: 'agent' + U+200D + 'x' }` ⇒ `receipt === 'agent.x'`;`hooksNotRunNotice` 的插件名 `guard` + U+200D ⇒ 行内 `guard`。判别点:0.83.4 上三处原样带着 U+200D。
|
|
9725
|
+
- **G-J5**(回归约束,纯包层;U-3):`escapeDisplayControlChars('a' + U+200D + 'b')`、`collapseLabel(' a' + U+200C + 'b ')` 原样(后者只折首尾空白);`capForDisplay` 对含连接符的输入两版同答。
|
|
9726
|
+
- **G-J6**(回归约束 + 本版证明,纯包层;U-1 旧编码):U+0D28 U+0D4D U+200D(串尾)、U+0D23 U+0D4D U+200D + ` ` + U+0D15、U+09A4 U+09CD U+200D 在 `{ foldLines: false, mark: 'escape' }` 下原样(回归一半);对照:U+0D28 U+200D(串尾,没有 virama)⇒ U+0D28 ``,`a` U+0D4D U+200D ⇒ `a` U+0D4D ``,U+0D28 U+0D4D U+200C(串尾)⇒ U+0D28 U+0D4D ``(这三格本版证明:0.83.4 上原样)。
|
|
9727
|
+
- **G-J7**(本版证明,纯包层;U-1 非字母):U+0969 U+200D U+0915、U+0964 U+200D U+0915、U+060C U+200D U+0628、U+0301 U+200D U+0915(串首只有组合符)在 `{ foldLines: false, mark: 'escape' }` 下连接符都成 ``。判别点:0.83.4 上原样。
|
|
9728
|
+
- **G-J8**(本版证明,纯包层;U-1 第二段):`{ foldLines: false }` 下 `x` + U+02BC + ZWJ + U+02BC + `y` ⇒ `x` + U+02BC + `` + U+02BC + `y`;`©` + ZWJ + `©` ⇒ `©©`;`™` + ZWJ + `™` 同;U+0640 + ZWJ + U+0628 ⇒ U+0640 + `` + U+0628;U+1F525 + ZWJ + U+0301 + U+1F525 ⇒ U+1F525 + `` + U+0301 + U+1F525。回归一半:U+2764 U+FE0F ZWJ U+1F525、U+26F9 U+1F3FB ZWJ U+2642 U+FE0F 原样。判别点:0.83.4 上前五形原样。
|
|
9729
|
+
- **G-E1**(本版证明,纯包层;E-1):`displayUntrusted('report' + U+2060, { foldLines: false, mark: 'escape', escapeBackslashes: true })` ⇒ `report`;同参数下字面六字符 `report` ⇒ `report\\u2060`。判别点:0.83.4 忽略未知选项,两者都画成 `report`。
|
|
9730
|
+
- **G-E2**(本版证明,纯包层;E-1 往返):按 105a-2 写一只解码器;对任意输入 `s`(含字面反斜杠、字面 ``、真 U+2060、astral、孤代理项、连接符、名字位空白),`decode(displayUntrusted(s, { credentialUrls: false, credentialWords: false, foldLines: false, escapeBackslashes: true }))` === `s`;`controls` / `bidi` / `blanks` / `keepLayout` 任意组合同判。判别点:0.83.4 上含字面反斜杠的输入解不回。
|
|
9731
|
+
- **G-E3**(回归约束,纯包层;E-1):输入里没有反斜杠时,`displayUntrusted(s, { ...o, escapeBackslashes: true }) === displayUntrusted(s, o)`(`o` 取默认形、`{ foldLines: false, mark: 'escape' }`、带 `max` 的形);`mark` 为 `dot` / `space` 时开关不起作用。
|
|
9732
|
+
- **G-E4**(本版证明,纯包层;E-1 不幂等):输入 `a` + 一枚反斜杠 + `b`(三个字符),`{ escapeBackslashes: true }` ⇒ `a\\b`(四个字符);把它再喂一遍 ⇒ `a\\\\b`(六个字符)。
|
|
9733
|
+
- **G-E5**(本版证明,纯包层;E-1 封长):输入 `a` + 一枚反斜杠 + `b` + U+2060,`{ foldLines: false, mark: 'escape', escapeBackslashes: true, max: 4 }` ⇒ `a\\b`(四个字符;成对算两位、标记不劈);任取输入与 `max`,结果长度 ≤ `max`、按 105a-2 解得回、解出来是原输入的码位前缀,且再多一个码位的前缀编码后超过 `max`(凭据两网关、`foldLines: false`)。
|
|
9734
|
+
- **G-E6**(回归约束 + 本版证明,纯包层;E-1 凭据面):`displayUntrusted('token' + U+D800 + ': hunter2hunter2', { escapeBackslashes: true })` ⇒ `token\uD800: «redacted:secret»`(回归一半:两版同答);JSON 转义一层的键值对(键名与值两侧的每个引号前各一枚字面反斜杠:`{\"api_key\": \"hunter2hunter2\"}`)同参数下不含 `hunter2`(回归一半),输出里的字面反斜杠都成对(本版证明一半:0.83.4 忽略开关,反斜杠不成对)。开关开着与默认转义形的凭据位一致。
|
|
9735
|
+
- **G-B1**(本版证明,纯包层;B-1):`displayUntrusted('a' + U+00A0 + 'b', { blanks: true })` ⇒ `a b`;`displayUntrusted(U+3000 + 'x' + U+3000, { blanks: true })` ⇒ ` x `;`Bash`、`Bash` + U+00A0、`Bash` + U+3164、`Bash` + U+2800 在 `{ blanks: true }` 下画出来两两不同;`displayUntrusted('token=' + U+00A0 + 'hunter2hunter2', { blanks: true })` ⇒ `token= «redacted:secret»`。判别点:0.83.4 上第一格为 `a b`(并进折平),第二格去首尾。
|
|
9736
|
+
- **G-B2**(回归约束,纯包层):不开 `blanks` 时 `displayUntrusted('a' + U+00A0 + 'b')` ⇒ `a b`,`{ foldLines: false }` 下原样;开着时 ASCII 空格 / 制表 / 换行照常折平(`' a '` + U+0009 + `' b'` + U+000A ⇒ `a b`)。
|
|
9737
|
+
- **G-B3**(本版证明,纯包层;B-1 不削弱凭据网):字面写出的 `db user:pa ss@db.internal`(反斜杠是字面一枚)在 `{ blanks: true }` 下 ⇒ `db «redacted:userinfo»@db.internal`,与不开 `blanks` 同答;`https://?k= token=Bearer @<值>`(字面)开着时值照样换记号;`'token='` + U+00A0 + `'hunter2hunter2'` 开着时是 `token= «redacted:secret»`(标记留在记号外)。判别点:0.83.4 忽略这个开关 —— 前两格与不开同答(两版同),第三格画成 `token= «redacted:secret»`(NBSP 被折平)。
|
|
9738
|
+
- **G-B4**(回归约束,纯包层;B-1 字面读法 —— 判据 = 不凭空出记号、值照遮):`{ blanks: true }` 下 `'password:' + U+00A0 + 'missing'`、`'Legal keys:' + U+00A0 + 'maxTurns'`、`'tokens:' + U+00A0 + '250000'`、`'Authorization:' + U+00A0 + 'Bearer'`、`'key:' + U+3000 + 反引号 OPENAI_API_KEY 反引号`、`'token=' + U+00A0`、`'token=' + U+00A0 + 'token=' + U+00A0` 七形都不出记号、洗两遍同;`'token=' + U+00A0 + 'PLACEHOLDERVALUE'` 的值换记号。本版的逐字输出:`password: missing`、`Legal keys: maxTurns`、`tokens: 250000`、`Authorization: Bearer`、`key: ` + 原样、`token= `、`token= token= `、`token= «redacted:secret»`(0.83.4 忽略开关,空白被折平、同样不出记号)。
|
|
9739
|
+
- **G-B5**(回归约束,纯包层;B-1 取并 —— 判据 = 值不露):`displayUntrusted(ESC + '(' + U+3000 + 一枚字面反斜杠 + 'ghp_' + 二十位字母数字, { blanks: true })` 不含那二十位;本版输出逐字为 `\u001B( \«redacted:secret»`(0.83.4 忽略开关、与默认形同答 `\u001B( \«redacted:secret»`)。
|
|
9740
|
+
- **G-M1**(本版证明,纯包层;M-1):`displayUntrustedMarks('a' + U+202E + 'b')` ⇒ `{ text: 'ab', marks: [{ start: 1, end: 7, codePoint: 0x202E }] }`;`displayUntrustedMarks('token: ' + U+001B + 'SECRETVALUE', { foldLines: false, mark: 'escape' })` 的 `marks` 恰一枚、`codePoint === 0x1B`,`text` 含 `«redacted:secret»`;对任意输入与选项,`displayUntrustedMarks(s, o).text === displayUntrusted(s, o)`。判别点:0.83.4 上无此导出。
|
|
9741
|
+
- **G-M2**(本版证明,纯包层;M-1 空格形 / 封长):`displayUntrustedMarks('a' + U+0001 + U+0002 + 'b', { mark: 'space' })` ⇒ `{ text: 'a b', marks: [{ start: 1, end: 2, codePoint: 1 }] }`;`displayUntrustedMarks(U+0001 + 'a' + U+0002, { mark: 'space' }).marks` 为空;`displayUntrustedMarks('a' + U+202E + 'bcdefg', { foldLines: false, mark: 'escape', max: 4 })` ⇒ `{ text: 'a', marks: [] }`。
|
|
9742
|
+
- **G-M3**(本版证明,纯包层;M-1 × E-1):输入 `a` + 一枚反斜杠 + `b` + U+2060,`displayUntrustedMarks(s, { escapeBackslashes: true })` ⇒ `text` 为 `a\\b`(十个字符),`marks` 恰为 `[{ start: 4, end: 10, codePoint: 0x2060 }]`;`ok ` + 英格兰旗 + ` ` + U+1F468 U+200D U+1F469 + ` ` + U+0915 U+200D U+0937 的 `marks` 为空。
|
|
9743
|
+
- **G-W1**(本版证明,纯包层;W-1 —— 机读字节的凭据洗消在标签与值之间夹孤代理项时也洗到):`runStream` 喂 `[{ type: 'failed', errorCode: 'network', errorMessage: 'fetch failed: token' + U+D800 + ': hunter2hunter2' }]` ⇒ 合成终局行正文逐字等于 `API Error: fetch failed: token` + U+D800 + `: «redacted:secret»`(孤代理项原样,机读字节不做字符面),结果帧 `errors[0]` 等于该行去掉 `API Error: `;经 `createWireToCcAdapter().adapt(…)` 的交互车道同判。字符面全关的出口对 `'token' + U+D800 + ': hunter2hunter2'` ⇒ 同一串(一轮即洗到);`api_key` + U+DC00 + `=<值>`、`Bearer` + U+D800 + `<值>`、`to` + U+D800 + `ken: <值>`、`password:` + U+DC00 + ` <值>` 同判。判别点:0.83.4 上前述各处原样带出值(默认形那一格两版都洗到,靠第二轮)。
|
|
9744
|
+
- **G-W2**(回归约束,纯包层;W-1):`'ok ' + U+D800 + ' done'`、`'k' + U+D800 + '=v'`、`'see http://h' + U+DC00 + '/path'` 经机读口(或字符面全关的出口)逐字节不变;`'token=abc' + U+D800 + 'def'` ⇒ `token=«redacted:secret»`(值中间的孤代理项随值进记号,两版同答)。
|
|
9745
|
+
- **G-V1**(本版证明,纯包层;V-1):`displayUntrusted('Basic' + U+001B + U+2060)` ⇒ `Basic\u001B`;同输入 `{ max: 12 }` ⇒ `Basic\u001B`;`displayUntrusted('token: ' + U+001B + U+200B + 'hunter2hunter2')` ⇒ `token: \u001B«redacted:secret»`;`displayUntrustedMarks` 同输入 `{ escapeBackslashes: true }` 的 `marks` 恰两枚(`[7, 13)` 码位 0x1B、`[13, 19)` 码位 0x200B)。对这类输入,输出里不出现「一枚反斜杠后接 u 与反斜杠以外的字符」,也不以孤反斜杠结尾。判别点:0.83.4 上前两格为 `Basic\u001B\«redacted:secret»` / `Basic\u001B\`,第三格为 `token: \u001B\«redacted:secret»`。
|
|
9746
|
+
- **G-V1b**(本版证明,纯包层;V-1 第二段):`displayUntrusted(ESC + '[sk-' + 二十位字母数字)` ⇒ `\u001B[«redacted:secret»`;`displayUntrusted(ESC + 'AKIA' + 十六位大写字母数字)` ⇒ `\u001B«redacted:secret»`;`displayUntrusted(U+009B + 'ghp_' + 二十位字母数字)` ⇒ `\u009B«redacted:secret»`;字符面全关的出口对同三形的值同样换记号。判别点:0.83.4 上三形原样(序列吞掉首字,余下不再是字面形)。
|
|
9747
|
+
- **G-V1c**(回归约束,纯包层;V-1 第二段 —— 判据 = 两版都不露值,输出形不同):`'api_key: '` + ESC + `[` + ESC + `PLACEHOLDERVALUE` 本版 ⇒ `api_key: \u001B[\u001BP«redacted:secret»`(`P` 是 `ESC P` 的引导字,KL-149;0.83.4 为 `api_key: \u001B[\«redacted:secret»`);`'https://u:PLACEHOLDERVALUE'` + ESC + ESC + `'@host/'` 本版 ⇒ `https://«redacted:userinfo»\u001B\u001B@host/`(0.83.4 为 `https://«redacted:userinfo»@host/`);`'password=abc'` + 字面 `\u001b\` + `PLACEHOLDERVALUE` ⇒ `password=«redacted:secret»`;`'Bearer PLA'` + 字面 `\u001b(` + `CEHOLDERVALUE` ⇒ `Bearer «redacted:secret»`(后两形与 0.83.4 逐字同)。
|
|
9748
|
+
- **G-V2**(本版证明,纯包层;V-2):`displayUntrusted('GET https://api.example.com/v1?a=1' + U+00A0 + 'Bearer PLACEHOLDERVALUE')` ⇒ `GET https://api.example.com/v1?a=«redacted:query» Bearer «redacted:secret»`;字符面全关的出口对同输入 ⇒ `…?a=«redacted:query»` + U+00A0 + `Bearer «redacted:secret»`;`'https://h/?k='` + U+3000 + `'token=Bearer PLACEHOLDERVALUE'` 的值同样换记号。判别点:0.83.4 上为 `…?a=«redacted:query» PLACEHOLDERVALUE`。回归一半:字符面全关的出口对 `'https://h/?k=PLA' + U+00A0 + 'CEHOLDERVALUE'` ⇒ `https://h/?k=«redacted:query»`(两版同)。
|
|
9749
|
+
- **G-V3**(本版证明,纯包层;V-3):`displayUntrusted('api_key' + U+3164 + '=' + U+3164 + 'PLACEHOLDERVALUE')` ⇒ `api_key` + U+3164 + `=` + U+3164 + `«redacted:secret»`;`'Bearer' + U+2800 + 'PLACEHOLDERVALUE'` ⇒ `Bearer` + U+2800 + `«redacted:secret»`;`'token' + U+115F + ':' + U+FFA0 + 值` 同判。判别点:0.83.4 上值原样。
|
|
9750
|
+
- **G-V4**(本版证明,纯包层;V-4):`displayUntrusted('token= "password":"PLACEHOLDERVALUE"')` ⇒ `token= "password":"«redacted:secret»"`。判别点:0.83.4 上为 `token= "«redacted:secret»":"PLACEHOLDERVALUE"`。
|
|
9751
|
+
- **G-X1**(端侧验收;射程:管理台,升级到 0.83.5 后):两张审批卡的工具名分别为 `Bash` 与 `Bash` + U+200D ⇒ 不看单射后缀,名字本身画出来就不同(后者带可见 ``)。
|
|
9752
|
+
- **G-SM1**(本版证明,纯包层;SM-1 / SM-2 安全模式):五个来源各在 `PreToolUse` / `Stop` / `UserPromptSubmit` / `PostToolUse` 挂一组(命令依次 `p`(managed)/ `u` / `j` / `l` / `f`),设置口 `hooksStartupMode: () => 'safe'` ⇒ `hooksForWire()` 与 `hooksWirePlan({ engineOwnedByThisShell: true, shellHookEvents: [] }).wire` 四个事件上都只剩 `p`;宿主没实现插件读口、或插件读口抛错时同答。判别点:0.83.4 四个事件都是 `p u j l f`。
|
|
9753
|
+
- **G-SM2**(本版证明 + 回归约束,纯包层;SM-1 / SM-2 bare 模式):同 G-SM1 的五源,`hooksStartupMode: () => 'bare'` ⇒ `hooksForWire()` 与 `hooksWirePlan(…).wire` 四个事件上都只剩 `p`(本版证明);另加 managed `allowManagedHooksOnly: true`(或 `strictPluginOnlyCustomization: ['hooks']`,或合并读口答 `true`)⇒ 仍只剩 `p`,不是 `undefined`(回归约束:managed 不被拿掉)。判别点:0.83.4 前半格五源全发。
|
|
9754
|
+
- **G-SM3**(本版证明 + 回归约束,纯包层;SM-3):同 G-SM1 的五源,不实现词读口,插件读口返回 `{ plugins: [], suppressedByStartupMode: true }` ⇒ `hooksWirePlan(…).wire` 四个事件上只剩 `p`(managed 保留;本版证明);同一端口再加 `hooksStartupMode: () => 'bare'` ⇒ 仍只剩 `p`(词为准,两词同处置);加 `hooksStartupMode: () => true` / `'true'` / 抛错 ⇒ 仍只剩 `p`(旧位照算)。回归约束半格:只报旧位的端口调不传计划的 `hooksForWire()` ⇒ 仍是 `p u j l f`,插件读口零调用。
|
|
9755
|
+
- **G-SM4**(本版证明,纯包层;会话目标):`setWireSessionStopHook('DONE.txt exists', { ccSemantics: true })` 后 `'safe'` 与 `'bare'` 各一格 ⇒ `Stop` 上恰两组(managed 那组 + 会话目标那组,`type: 'prompt'`),其余事件只有 managed 那组;`'bare'` 再让 `mergedDisableAllHooks: () => true` ⇒ 只剩 managed 各组(会话目标随治理不发)。判别点:0.83.4 `Stop` 上是五源各一组 + 会话目标。
|
|
9756
|
+
- **G-SM5**(本版证明,纯包层;插件):`'safe'` 与 `'bare'` 各一格,插件读口交一只 managed 插件、一只非 managed 插件(各一条 `PreToolUse` command)⇒ `plan.excluded` 两只都是 `startup_mode`、`plan.verdicts` 为空、请求体零插件条目、`hooksNotRunNotice(plan)` 为空。判别点:0.83.4 两只照判。
|
|
9757
|
+
- **G-SM6**(本版证明,纯包层;下游):只有 user 来源有一条 `Stop` hook,`'safe'` ⇒ `resolveHeadlessFinalVerifyDetail(['--final-verify'], {}, hooksForWire())` 答 `on: true`;managed 与 user 各一条 `Stop` hook:`'safe'` 与 `'bare'` ⇒ `offReason: 'stop-hook'`(回归约束半格:managed 的照让位)。
|
|
9758
|
+
- **G-SM7**(回归约束,纯包层;反向):词读口缺席 / 返回 `undefined` / `true` / `false` / `'true'` / `'SAFE'` / `''` / `null` / `1` / `{}` / 抛错,插件读数上的位缺席或 `false` ⇒ `hooksForWire()`、`hooksWirePlan(…)`、`hooksNotRunNotice(plan)` 与 final-verify 判定和不实现词读口的端口逐字节同(五源全发)。另:设置口上 `hooksStartupMode: 'safe'`(属性,不是方法;另三格换 `'bare'` / `true` / `null`)⇒ `hooksForWire()` 五源全发,日志恰一行 debug、含 `not a method`,零 warn(调试行一半本版证明:0.83.4 上零日志)。
|
|
9759
|
+
- **G-SM8**(本版证明,包层 + 服务端发布版的 hook 执行入口):managed 一组 `touch <P>; exit 0`、user(另三格换 project / local / flag)一组 `touch <S>; echo deny >&2; exit 2`,`'safe'` ⇒ 请求体交给服务端 `parseHooksConfig` + `createTaskHooks`,`preToolUse('Bash', { command: 'ls' })` 答放行、`<P>` 出现、`<S>` 不出现;managed 一组 `touch <P>; echo deny >&2; exit 2`、user 一组 `touch <U>; exit 0`,`'bare'` ⇒ 答拒绝、`<P>` 出现、`<U>` 不出现(managed 的拒绝照生效);不报 ⇒ 答拒绝、标记都出现(回归约束半格)。判别点:0.83.4 两种模式下 user 那条同样执行。
|
|
9760
|
+
- **G-SM9**(端侧验收;射程:终端,本机引擎,接上 SM-2 读口之后):managed 设置与用户设置里各写一条 `PreToolUse` 的 command hook(各写一个标记文件)⇒ 让代理跑一次工具:`--safe-mode` 启动 ⇒ 用户那条的标记不出现、managed 那条的出现;`--bare` 启动(另一格配 `--settings <文件>`,文件里也写一条)⇒ 用户与 `--settings` 那两条的标记不出现、引擎侧 managed 那条照出现(本版保守侧;本机执行器在 bare 下另有自己的处置,不在此格);不带这两个参数启动 ⇒ 标记都出现。
|
|
9761
|
+
- **G-DD1**(本版证明,纯包层;DD-1):用户设置与 flag 来源各交 `{ PreToolUse: [{ matcher: 'Bash', hooks: [{ type: 'command', command: 'guard.sh' }] }] }` ⇒ `hooksForWire()` 与 `hooksWirePlan(…).wire` 的 `PreToolUse` 恰一组一条。判别点:0.83.4 两组。
|
|
9762
|
+
- **G-DD2**(本版证明,纯包层):managed 与用户设置各一组同条目(`timeout` 分别 5 / 60)⇒ 请求体恰一组,且就是 managed 交来的那个组对象(`timeout` 5)。五源同条目 ⇒ 一条,来自 managed。判别点:0.83.4 两组 / 五组。
|
|
9763
|
+
- **G-DD2b**(本版证明,纯包层;字段取值):用户设置一组 `[A(timeout 5)]`、项目设置一组 `[Z]`、flag 来源一组 `[A(timeout 99)]`(同 `matcher`)⇒ 请求体 `A | Z`,那一条排在 Z 之前(user 处),且就是 flag 交来的条目对象(`timeout` 99);user / project / local 三处同条目(`timeout` 1 / 2 / 3)⇒ 一条、`timeout` 3。判别点:0.83.4 两条 / 三条。
|
|
9764
|
+
- **G-DD3**(回归约束,纯包层):两来源各一条、只差一处 ——`matcher`(`Bash` 对 `Edit`)/ 事件(`PreToolUse` 对 `PostToolUse`)/ 命令末尾多一个空格 / `if` / `shell` 缺席对 `'bash'` / prompt 对 agent ⇒ 两条都在。两版同答。
|
|
9765
|
+
- **G-DD4**(本版证明,纯包层;次序):managed `Edit` 组 `[A]`、用户 `Bash` 组 `[A, B]`、flag `Bash` 组 `[C, A, D]` ⇒ 请求体 `A | A,B | C,D`;managed 组与用户组是原对象,flag 组是新对象,端交来的 flag 组不被改。判别点:0.83.4 为 `A | A,B | C,A,D`。
|
|
9766
|
+
- **G-DD5**(本版证明,包层 + 服务端发布版的 hook 执行入口):用户设置与 flag 来源各写同一条 `UserPromptSubmit` command(每次执行往计数文件追加一行,并回一段固定的 `additionalContext`)⇒ 请求体交给服务端 `parseHooksConfig` + `createTaskHooks`,`userPromptSubmit(…)` 之后计数文件一行、那段上下文出现一次;另一格 user 那份 `timeout: 1`、flag 那份 `timeout: 10`、命令先 `sleep 2` ⇒ 请求体那一条 `timeout` 为 10,执行一次、上下文到一次;命令差一个字节 ⇒ 两行、两次(回归约束半格)。判别点:0.83.4 两行、两次(`timeout` 那一格两条都发,user 那条超时、flag 那条跑完)。
|
|
9767
|
+
- **G-CS1**(本版证明,纯包层):running 三选卡选 cancel,`runs.get` 首发答 `{status:'running'}`(出卡前存活对账)、其后答 `{status:'completed'}`(不带 `heldBy`)⇒ 结局 `running-cancelled` 且不带 `releaseConfirmedByEngine`,`activeRunSelfHealRow(outcome)` 不含 `confirmed`、含 `reports that run as finished` 与 `send it once more`;同一结局以 `origin: 'injected'` 渲 ⇒ 不含 `the session is free again`、含 `is sending the message now` 与 `nothing for you to do`。判别点:0.83.4 两行分别含 `The engine confirmed it is no longer holding this session` / `the session is free again`。
|
|
9768
|
+
- **G-CS2**(本版证明 + 回归约束,纯包层):同 G-CS1 但其后答 `{status:'completed', heldBy:null}` ⇒ 结局 `releaseConfirmedByEngine === true`(本版证明:0.83.4 无此键);行含 `The engine confirmed it is no longer holding this session`、不含 `send it once more`(回归约束:两版同答);答 `{status:'suspended', heldBy:null}` 同,且不含 `reports that run as finished`。对这一结局做 `{...outcome}` 与 `JSON.parse(JSON.stringify(outcome))` 后再渲 ⇒ 与原结局的行逐字相同。
|
|
9769
|
+
- **G-CS3**(本版证明,纯包层;取并那一格):其后答 `{status:'completed', heldBy:'run-99'}` ⇒ 仍是 `running-cancelled`(判据不变)、不带位,行不含 `confirmed`。判别点:0.83.4 含。
|
|
9770
|
+
- **G-CS4**(本版证明,纯包层;两选卡):停泊行已不在引擎上的两选卡选 cancel,cancel 之后 `runs.get` 答 `{status:'suspended', heldBy:null}` ⇒ `stale-park-cancelled` 带位,行不含 `reports it as finished` / `will not resume`、含 `confirmed it is no longer holding this session` 与 `sending your message again now`;cancel 之后答 `{status:'failed'}` ⇒ 不带位、行逐字同 0.83.4。判别点:0.83.4 前一格含 `reports it as finished`。
|
|
9771
|
+
- **G-CS5**(本版证明,纯包层;无卡直决):规则直决(重开判决 `{reopened:false, decidedWithoutCard:true}`)后 `runs.get` 答 `{status:'suspended', heldBy:null}` ⇒ `ask-decided-without-card` 带位,行不含 `has since finished`、含 `confirmed it is no longer holding this session`;答 `{status:'completed'}` ⇒ 不带位、行含 `has since finished` 且以「you may have to send it once more.」收尾(与 0.83.4 只差这半句)。宿主自拼 `{kind:'running-cancelled', taskId:'t'}` / 带 `releaseConfirmedByEngine:false` / `'true'` ⇒ 都落弱句(回归约束)。判别点:0.83.4 前一格含 `has since finished`。
|
|
9772
|
+
- 包层行为钉在门 `run-display-untrusted-projection-test.mjs` X 段(X0–X27b;修复格 X8d–X8g、X12d–X12i、X13c / X13d、X16b–X16e)、X′ 段(X28–X33)与 X″ 段(X34–X40b;G-V1b–G-V4、G-J8、G-B4 / G-B5);`run-hooks-merged-disable-projection-test.mjs` SM 段与 DD 段(G-SM8 / G-DD5 在可选的引擎执行面 SM-E / DD-E,没装服务端包时如实标为未跑);`run-selfheal-reopen-test.mjs` G8⑤l / G8⑤m / G11④f 段与 `run-terminal-identity-copy-test.mjs` 注入件事实表(G-CS1–G-CS5)。
|
|
9773
|
+
|
|
9774
|
+
### 105d. 端上要动的读点
|
|
9775
|
+
|
|
9776
|
+
坐标是各端仓内路径,省去开头的 `src/`(测试文件保留 `test/`),以免与本包路径混读;来自 09-26 对各端本机克隆 `origin/main` 的只读检索(终端 `968b4742` 09-25、网页端 `cb5874a` 09-26、桌面端 `5c99611` 08-13 —— 本机克隆陈旧,只代表那一刻、管理台 `4d135e7` 09-26);行号会漂,以各端现状为准。105a′ 的坐标同此。
|
|
9777
|
+
|
|
9778
|
+
**终端**
|
|
9779
|
+
|
|
9780
|
+
- U-2:`components/tasks/SubagentContinueRow.tsx:52`(续跑收据)与 `sema/approvalStreamWire.ts:1567-1568`(回决备注)零改动即得新行为;按旧读数(连接符原样)钉的格换读。
|
|
9781
|
+
- 自带呈现叶子换装本包出口(同名影子豁免到期 0.85.0)时:字符面判据以本节为准,`sema/bidiDisplaySanitize.test.ts:182` 与 `sema/displayCapOrder.test.ts:39` 起用到连接符的格按 105a-1 重读;需要名字不同形的载体(工具名 / 模型名)可开 `blanks` 与 `escapeBackslashes`。
|
|
9782
|
+
- SM-2:在设置口上实现 `hooksStartupMode: () => isBareMode() ? 'bare' : isSafeModeActive() ? 'safe' : undefined`(bare 优先:两种模式同开时上游对 hooks 按 bare 判;本版两词同处置,照实报即可)。实现后 `--safe-mode` 与 `--bare` 下都只有 managed 设置里的 hooks 在引擎侧执行(`--settings` 交来的与用户 / 项目 / 本地设置的都不执行;G-SM9)。
|
|
9783
|
+
- SM-3:今天未实现插件读口;将来实现时,读数上的 `suppressedByStartupMode` 与 SM-2 报同一件事即可(词读口在场时以词为准)。
|
|
9784
|
+
- DD-1 / CS-1 / CS-3:零改动即得。
|
|
9785
|
+
|
|
9786
|
+
**网页端**
|
|
9787
|
+
|
|
9788
|
+
- 展示层今天无读点(远端主干上零处直接调用本出口,也不读 U-2 的五处文本)。接入 D-1 时按本节载体建议。
|
|
9789
|
+
- hooks 零读点(不调 `hooksForWire()`,与 §100a 同);若将来有安全 / bare 一类启动模式并接 `hooksForWire()`,实现 SM-2。
|
|
9790
|
+
- CS-1 / CS-3 零改动即得(复制 / 序列化结局对象不丢这一位)。重试 / 等待覆盖层按 `RetryStatus.kind` 分臂(接入指引,非本版新增行为;§18b / §18c,本版在 §8-D 补了一条)—— 不读 `kind`、把非空 `retryStatus` 一律渲成「请求失败 · 正在重试」的宿主,会把「模型已连上、在等第一个 token」说成失败重试;`attempt` / `maxRetries` 缺席 = 不知道,不补数。
|
|
9791
|
+
|
|
9792
|
+
**桌面端**
|
|
9793
|
+
|
|
9794
|
+
- 今天无读点(展示层、hooks 同网页端);CS-1 / CS-3 零改动即得。
|
|
9795
|
+
|
|
9796
|
+
**管理台**
|
|
9797
|
+
|
|
9798
|
+
- U-1:`lib/web/display-untrusted.ts:38-57` 的五种载体都开着 `bidi`,43 处呈前出口在文本含清单外连接符时字节变;`CUT_ONLY`(`:85-95`,五网全关)不变。按 105a′ 换读 `test/du-display-untrusted.test.ts:353-357`,更新 `:24-25` 与 `displayIdentifier` 头注。
|
|
9799
|
+
- E-1 / B-1(建议):标识载体(`decisionLine`,`displayIdentifierParts` 用它)开 `escapeBackslashes: true` 与 `blanks: true` 后,真格式字符与字面转义文本、名字位空白与 ASCII 空格在本包那一份里就已可分;单射后缀仍覆盖 KL-138 / KL-139 与标准等价两形,是否保留由本端定。🔴 `escapeBackslashes` 的输出不许再喂回出口(`wash()` 里「全文一份 + 带 `max` 再调一次」两次调用各自从原文起算,不受影响;`cutWashed` 把洗后文本喂给五网全关的出口只截不洗,也不受影响)。
|
|
9800
|
+
- M-1(建议):要按样式画标记时换读 `displayUntrustedMarks`,不必按 `\u` 前缀猜。
|
|
9801
|
+
- hooks 零读点;CS-1 / CS-3 零改动即得。
|
|
9802
|
+
|
|
9803
|
+
**验收方**
|
|
9804
|
+
|
|
9805
|
+
- 按 105c 各格:G-J / G-E / G-B / G-M / G-W / G-V 与 G-SM / G-DD / G-CS 的纯包层格在两版产物上对拍;G-SM8 / G-DD5 带服务端发布版跑;G-X1 在管理台真部署上跑,G-SM9 在终端接上 SM-2 读口之后跑。按 105a′ 各条改锚。
|
|
9806
|
+
- 要自渲「会话已交出」一类措辞的端,读 `releaseConfirmedByEngine === true`,别拿 `kind` 当直证;自己拼结局对象的壳不带这一位 ⇒ 拿到不说满的那句。
|
|
9807
|
+
|
|
9808
|
+
### 105y. 🔴 三端升级必读(固定段式)
|
|
9809
|
+
|
|
9810
|
+
1. **换钉 `^0.83.5` 之前**:无前置编译改动(纯 additive:一只新函数、三个新型、`DisplayUntrustedOptions` 两个可选位、`SettingsPort` 一只可选成员、`SelfHealOutcome` 三条臂各一个可选位)。🔴 例外:把 `DisplayUntrustedOptions` 用在 `satisfies Record<…, DisplayUntrustedOptions>` 之外的**精确对象型**比较(如 `keyof DisplayUntrustedOptions` 的穷尽表)要补两键(今天检索未见这类读点);对三条重发结局做穷尽键集断言的端要跟 `releaseConfirmedByEngine`(按 `kind` 穷举的读法不受影响)。
|
|
9811
|
+
2. **可观察变化**:🔴 默认形与一切开着 `bidi` 的形里,清单外文字旁 / 串首尾 / 孤立的 ZWJ / ZWNJ 从原样变为标出来(U-1);本包内五处文本随之变(U-2);emoji 连字、连接文字里的连接符与 RGI 地区旗不变;`©` / `™` / U+02BC / tatweel 旁的 ZWJ 标出来(U-1 第二段);转义序列之后紧跟一枚转义记号时不再留「反斜杠 + 记号」形(V-1);序列头紧贴已知凭据字面形、URL 片段后接非 ASCII 空白与方案词、谚文填充 / 盲文空点夹在键值对里、值开头是引号包着的里层标签这几形的值本版换成记号(V-1 第二段 / V-2 / V-3 / V-4);机读字节(结果帧 `errors[]`、合成终局行)上,夹着孤代理项的凭据值换成记号(W-1);旧四口与 hook 故障横幅不变;不含连接符、不含孤代理项、也没有「序列紧跟记号」的输入逐字节不变;两只开关不开就没有别的变化。hooks:宿主报了启动模式时安全模式与 bare 模式都只发 managed,计划的 `settingsDropped` 与开机清单里被筛来源的行不再出现,非 managed 来源写的 `Stop` hook 不再让显式 `--final-verify` 让位,会话目标 `Stop` hook 照发,收窄时多一行调试;没报的宿主零变化(词读口返回非法词或抛错时多一行调试);对所有宿主,同一事件同一 `matcher` 组里身份键相同的设置来源条目只发一份(留 managed / 首次出现那份的位置,字段取优先级最高那份),这类重复此前会在引擎上执行两次;传了计划、宿主没实现插件读口时,那条一次性告警现在排在设置来源「拿掉条目」的调试行之前。自愈:三条重发结局只凭终态词判释放时,用户行换成「引擎报它已结束 + 可能要再发一次」(`running-cancelled`;`ask-decided-without-card` 原句之后补同一句出路半句)、注入件行换成「那一轮报已结束 + 可能再被挡一次」;引擎直说会话已交出时 `running-cancelled` 用户行与注入件行逐字不变,`stale-park-cancelled` / `ask-decided-without-card` 用户行不再说「报它已结束」。
|
|
9812
|
+
3. **要做的事**:按 105a′ 换读钉着「连接符原样」「启动模式位下设置来源照发」「同一条 hook 两份」「cancel 成功即 confirmed」「`tool_end` 扁平两键合取」的格(管理台 ⑥ 第二条当天红);名字 / 标识载体按需开 `escapeBackslashes` 与 `blanks`,开 `escapeBackslashes` 的载体只在最终呈现处调一次、输出不再喂回出口;要按样式区分标记的读 `displayUntrustedMarks`;终端实现 SM-2 读口(bare 优先);要自渲「会话已交出」措辞的端读 `releaseConfirmedByEngine`。已发段(§100、§101、§103 与 0.56.0 的已知局限)不回改,以本段为准;活段 §3c / §3d-2 / §3z / §4a / §4b-3 / §4f / §7 / §8 随版改。
|
|
9813
|
+
|
|
9814
|
+
**包侧缺口:** 展示层 —— ① 连接文字语境里的连接符不保证单射(清单内同一文字的两个字母之间夹一枚、而该文字在这一对字母上不变形时同形;名字位的严格上下文规则本包没有按它判;KL-138)· ② 零宽组合符(U+034F、变体选择符、蒙古自由变体选择符、高棉 U+17B4 / U+17B5)与渲成空白的罕见符号(如 U+1D159)不在任何一网(KL-139)· ③ 运行引擎不认的文字名载入时滤掉,那一族旁的连接符改为标出来(过严;KL-140)· ④ 点形 / 空格形下 `blanks` 分不出是哪一枚空白,空格形合并的一串只报第一枚(KL-141)· ⑤ `escapeBackslashes` 只让字符面无歧义,凭据记号与字面同形文本、行折平仍有损(KL-142)。凭据读法 —— ⑥ 含孤代理项的两形(userinfo 后无主机 / 方案词后的地址豁免)与零宽空格同位同答,0.83.4 顺带遮住的值本版露出(KL-143)· ⑦ 软连字符拆开的字面形尾段、零宽字符切开的 Digest 参数名、整段落在已结尾控制串里的值、裸值里字面 `\uXXXX` 之后的半段(两版同,KL-144–KL-147)· ⑧ 没有 `@` 的 `scheme://<名>:<非数字>` 值按地址豁免(两版同,KL-148)· ⑨ 转义序列吞掉值首的一个字时那一个字留在可见转义形里(KL-149)· ⑩ `blanks` 开着时「遮住的 ⊇ 开关关」的两类例外:输入里字面写出的名字位空白转义形紧跟标签(KL-150)、与点形 / 空格形同开(KL-151)。hooks —— ⑪ 宿主有安全 / bare 模式却没报(不实现 SM-2 读口、插件读数也没报;或只在插件读数上报、不传计划调 `hooksForWire()`)⇒ 设置来源照发引擎,本包不告警(KL-152)· ⑫ 设置来源去重是上游执行期去重的子集:`matcher` 不同但都匹配到同一次调用的同一条命令照发两份;`shell` 缺席与显式 `bash` 不合;会话目标 `Stop` hook 与设置里同文本的 prompt hook 不合;`args` / `input` 对象键序不同不合(KL-153)· ⑬ bare 模式下本包仍发 managed 那一份(与安全模式同处置);上游在非 managed-only 的路径上 bare 不跑 managed hooks,本包在查实之前取保守侧(KL-154)。开机工具面 —— ⑭ 回落估计表无条件列 `ToolSearch`,引擎只在有延迟披露工具时才挂 ⇒ 回落路径上可能多报一只(KL-155)。记忆采集 —— ⑮ 中途关闭记忆采集的动词(capture-optout)的结局处置表仍未归包,本包只有提交时的声明形(KL-156;§7d P-46)。自愈 —— ⑯ 只凭终态词判的释放仍可能在会话真正交出之前重发一次(§7b P-45,存量):本版只让文案不说满,判据与重发腿不变。
|
|
9815
|
+
|
|
9816
|
+
## §104 🆕 0.83.4(2026-09-26)plan 审批卡「用户关掉的卡自动触发不放回」归包(含 409 自愈腿结局与行句)+ 座位审批请求补强制位 / 理由词 / 缺席因由 / 出身词 + `<system-reminder>` 剥离 / 解包口上公面(线性实现)+ 两条展示层指引订正(patch;根公面 +4 名,1273 → 1277〔`stripSystemReminderBlocks` / `unwrapSystemReminder` / `toolPermissionRequestAskBits` / `clearPlanReviewUserDismissals`〕;公面类型 +2〔`PlanReviewReopenTrigger` / `PlanReviewGateInstanceReader`〕;`ToolPermissionRequest` +4 可选位;`TOOL_PERMISSION_REQUEST_KEYS` 10 → 14;`ReopenPlanReviewOpts` +3 可选位;`armPlanReviewApproval` 选项 +1 可选位;`ReopenCardVerdict` 拒开臂 +1 可选位 `dismissedByUser`;`SelfHealOutcome` 的 `plan-review-reopen-failed` 臂 +1 可选位 `dismissedByUser`;`ActiveRunSelfHealDeps.reopenPlanReview` +1 可选第二参;开发依赖引擎 `~7.33.1`〔本包零运行期读点〕;零投影臂;peer sdk 地板 `>=11.3.0` 不动)
|
|
9817
|
+
|
|
9818
|
+
> **patch**,三件同发 + 成文改口(本节按 0.83.4 的读法写;若与本版发布帖不一致,以发布帖为准):
|
|
9819
|
+
> ① **plan 审批卡「用户关掉的卡自动触发不放回」**(CC-201):用户关掉的 plan 卡,自动触发(注入件撞 409 的自愈、补捞、卡离屏补一拍、对账)不在同一道门上放回屏上;用户自己的下一个动作照开。判定、记号账、门实例比较与竞态复核都在包里;409 自愈腿按提交出身替宿主传触发者、结局与整行由包出。端只交门实例读口与(可选)交出窗谓词。
|
|
9820
|
+
> ② **座位审批请求补四位**(CC-203):`mandated` / `mandate` / `ruleOffersAbsence` / `origin` 进座位请求,经过境口 `toolPermissionRequestAskBits` 与卡请求同形窄读。
|
|
9821
|
+
> ③ **`<system-reminder>` 剥离 / 解包口上公面**(CC-205):两只纯函数、线性时间,块语义与 0.83.3 包内行为逐字同(只改时间复杂度),见 104a-1。
|
|
9822
|
+
> ④ **成文改口**:见 104a′。
|
|
9823
|
+
> **表态现势**:patch,全速模式,不设表态窗。
|
|
9824
|
+
|
|
9825
|
+
### 104a. 处置表
|
|
9826
|
+
|
|
9827
|
+
| # | 面 | 旧 → 新 | 终端 | 网页端 | 桌面端 | 管理台 | 验收方 | 本节 |
|
|
9828
|
+
|---|---|---|---|---|---|---|---|---|
|
|
9829
|
+
| P-1 | `ReopenPlanReviewOpts.trigger?: PlanReviewReopenTrigger`(`'user' \| 'automatic'`) | 无 → 新增可选位。`'automatic'` 撞「用户关卡」记号 ⇒ 拒开;`'user'` 照开;缺席 = 与 0.83.3 同答;表外值按 `'automatic'` 判。异步判定期间条目换了一枚 ⇒ 不铸卡,判决按此刻条目分说(104b);同一任务上一次重开还在路上 ⇒ 并入(104b) | pending(经 P-8 由自愈腿透传;对账 / 补捞 / 卡离屏补一拍这些自己调重开口的腿传 `'automatic'`) | n/a(不调 `reopenPlanReviewCard`) | n/a | n/a | pending | 104b · G-P1–G-P5 · G-P11 · G-P16 |
|
|
9830
|
+
| P-2 | `ReopenPlanReviewOpts.readGateInstanceKeys?: PlanReviewGateInstanceReader`;`armPlanReviewApproval(result, sessionKey?, { submittedInPlanMode?, readGateInstanceKeys? })` | 无 → 新增可选位。读口答「这条任务此刻挂着的 plan 门实例键集」(键形由宿主定,本包只做集合比较),读不出 ⇒ `null`。本包在用户关卡那一刻读一次(按立这张卡时交的读口)、在异步形的自动判定时再读一次;读回即取快照 | pending(把自带的门实例读口交进来;两处调用点都交;可以直接交自己的活集合) | n/a | n/a | n/a | pending | 104b · G-P6–G-P8 · G-P13 |
|
|
9831
|
+
| P-3 | `ReopenCardVerdict` 拒开臂 `dismissedByUser?: true` | 无 → 新增可选位(严格 `true`)。在场 = 用户在本会话关掉了这道门的卡而这次是自动触发(陈旧评估只在此刻条目恰是一枚新的关卡记号时带);不置 `pendingRowGone`(陈旧停泊的取消臂不因它开),不置 `_sema_decisionInFlight` | pending(自带的「用户关卡」判决位换读本位) | n/a | n/a | n/a | pending | G-P1 / G-P2 / G-P11 |
|
|
9832
|
+
| P-4 | `clearPlanReviewUserDismissals(sessionKey?)` | 新增。清一个会话的「用户关卡」记号账(缺省 = 默认会话);别的会话不动 | pending(会话换代处调:清屏、换会话、恢复另一段会话) | n/a | n/a(多会话宿主接 plan 重开链时:关掉一个会话时按它的键调) | n/a | pending | G-P9 |
|
|
9833
|
+
| P-5 | 包内 plan 卡作答口的 dismissed 臂 | `return { ok: true }` → 同步记「用户关卡」(连同被关的是哪一张卡)再返回(作答结果不变,决断不投递,与 0.83.3 同) | 零改动即得 | n/a | n/a | n/a | pending | G-P0 |
|
|
9834
|
+
| P-6 | 包内 plan 卡作答口的决断臂 + `notePlanReviewAnsweredIfDecisive` | 决断性作答额外撤这条任务的「用户关卡」记号(投递与记账不变)。宿主记账口对包内作答口已判「非决断」的**同一张卡**不撤(那张卡上没有这个选项 ⇒ 决断没投递) | 零改动即得 | n/a | n/a | n/a | pending | G-P5 · G-P14 |
|
|
9835
|
+
| P-7 | `ReopenPlanReviewOpts.decisionHandedOver?: (taskId: string) => boolean` | 无 → 新增可选谓词:「这条任务的一次决断已由宿主交出、还没到达本包的作答口」。只在 `trigger: 'automatic'` 撞记号的异步判定**读回来之后、铸卡之前**问一次:严格 `true` ⇒ `{ reopened: false, _sema_decisionInFlight: true }`;抛错 ⇒ 保守拒开、回不带位的 `{ reopened: false }`;缺席 = 只看包内可见的交出 | pending(读后复核这一道由包问宿主谓词:保留自带的交出台账并把它实现成本谓词交进来;删掉自带的读后复核) | n/a | n/a | n/a | pending | 104b · G-P7 · G-P12 |
|
|
9836
|
+
| P-8 | `ActiveRunSelfHealDeps.reopenPlanReview(taskId, opts?: { trigger? })`;`SelfHealOutcome` 的 `plan-review-reopen-failed` 臂 `dismissedByUser?: true`;`activeRunSelfHealRow` 的四句 | 注入口多一个第二参,由本包按 `submissionOrigin` 映射(`'user'` ⇒ `'user'`、`'injected'` ⇒ `'automatic'`、缺席 ⇒ 不传);重开口回 `dismissedByUser` ⇒ 结局带同名位;整行由包出(用户形 / 注入形 / steer `queued` 两形),不给「保住对话」与引擎决断入口 | pending(注入口把第二参原样交给重开口 `reopenPlanReviewCard(taskId, { ...自己的回执窗 / 读口 / 投递口 / 谓词, ...opts })`,删自带的按出身映射;删自带的「卡是你关的」整行 —— 要保留自己的措辞走 `rowFor`) | n/a(不接 plan 重开链) | n/a | n/a | pending | 104b · G-P15 |
|
|
9837
|
+
| S-1 | `ToolPermissionRequest.mandated?: true` / `.mandate?: ApprovalMandateWord` / `.ruleOffersAbsence?: string` / `.origin?: string`;`TOOL_PERMISSION_REQUEST_KEYS` +4 | 无 → 四个可选位(语义同卡请求同名位;只在为真 / 读得出时在场) | n/a(无座位车道) | pending(座位半场:审批卡上渲强制语义 / 理由句 / 出身,读口用 `approvalIsMandated(req)` / `readApprovalMandate(req)` / `approvalMandateDetail(word)` / `askSurvivesPosture(req, facts)`;判「强制与否」一律 `approvalIsMandated`,别只读 `mandated`) | pending(座位铸点透传四位,见 S-2;解冻时配对) | n/a | pending | 104b · G-S1–G-S5 |
|
|
9838
|
+
| S-2 | `toolPermissionRequestAskBits(card)` | 新增过境口:卡请求(或已过审批帧门的活卡帧 / 待决行)→ 四位,同一把窄读;`governanceForced` / `delegation` 不经它(照既有纪律透传) | n/a | n/a(读侧;座位请求由桌面端铸) | pending(座位请求铸点 `...toolPermissionRequestAskBits(frame)`) | n/a | pending | G-S1–G-S3 · G-S5 |
|
|
9839
|
+
| S-3 | 两条卡腿盖 `mandated` | 按原型链读 → 按自有键上的严格 `true` 读(与过境口同一把) | 零改动即得(JSON 形零变化) | 同左 | 同左 | n/a | pending | G-S6 |
|
|
9840
|
+
| R-1 | `stripSystemReminderBlocks(text)` / `unwrapSystemReminder(text)` | 包内件 → 根入口具名导出;线性实现,块语义见 104a-1 | pending(建议:报错卡「整条被包裹才去标」一处换读 `unwrapSystemReminder`;自带开标签文法比本包宽,换读前按 104a-1 核负样本) | n/a | n/a | pending(建议:实时面的剥离换读 `stripSystemReminderBlocks`,同批删本地那份文法副本在这一处的用法;回放面按开标签切块仍需文法,见包侧缺口 ⑦) | pending | 104a-1 · G-R1–G-R5 |
|
|
9841
|
+
|
|
9842
|
+
#### 104a-1 · `<system-reminder>` 开标签文法与两只口
|
|
9843
|
+
|
|
9844
|
+
- 开标签只认两形(与引擎铸造口逐字同):`<system-reminder>` 与 `<system-reminder mark="X">`,其中 `X` 恰 22 个 `[A-Za-z0-9_-]` 字符(base64url 形)。`mark` 的**值**不比对 —— 本口只认「这是引擎的信封壳形」,信任判定不在这里。
|
|
9845
|
+
- 闭标签逐字 `</system-reminder>`(无属性)。
|
|
9846
|
+
- 不认的形(当正文、原样留):任意别的属性(`class="…"`)、`mark` 长度不对(短于 / 长于 22)、`mark` 后多一个属性、`<system-reminder` 与 `mark` 之间两个空格、单引号 `mark='…'`、大写标签名。
|
|
9847
|
+
- 块语义与 0.83.3 包内行为**逐字同**,本版只改时间复杂度(两只口都是线性实现;0.83.3 的实现在开标签后跟一长串空白 / 换行时解包回溯到秒级、在大量未闭合开标签上剥离平方)。引擎铸块时**不转义正文**(开标签 + 换行 + 正文 + 换行 + 闭标签),所以正文里出现字面开 / 闭标签是合法的单块形 —— 例如分类器或 hook 的拒绝理由里引用了 `<system-reminder>`。
|
|
9848
|
+
- `stripSystemReminderBlocks(text)`:从左往右删掉**所有**成对块,一个开标签配它之后**最近**的闭标签(不处理嵌套)。块外字节原样(不去首尾空白 —— 要去由端自己 `trim`);找不到闭标签的开标签原样留着(截断的信封宁可多渲,不吞正文);没有成对块 ⇒ 原文逐字节返回。两个边角(0.83.3 起的既有行为):① 用户正文里一个没闭合的字面开标签会与后面一个真块配对,两者之间的正文一起删掉(KL-137);② 嵌套时外层开标签配到第一个闭标签,外层闭标签与它后面的正文留着。
|
|
9849
|
+
- `unwrapSystemReminder(text)`:整条文本(两端可有空白)以开标签起头、以闭标签收尾时,返回**头一个开标签到末尾闭标签之间的全部**,两端空白全部去掉(首行缩进、尾部空行一并去;内部原样);中间出现的开 / 闭标签一律照当正文(= 引擎铸造口的逆:`unwrap(铸(正文)) === 正文`,正文含字面标签也成立)。边角:两块相接 / 两块夹正文也按一块解(返回的正文里夹着中间那对标签)。块外还有字、只有开标签的截断信封、非引擎形 ⇒ 原文返回。
|
|
9850
|
+
|
|
9851
|
+
### 104a′. 成文改口
|
|
9852
|
+
|
|
9853
|
+
- **改读(展示层,`errors[]` 与合成终局行正文)**:结果帧 `errors[]` 与本包合成的终局行正文自 0.83.1 起在铸点洗过凭据(§101 D-2 / D-3),它们是**展示文,不是语义判据**。判错误类型、选降级 / 回退臂一律读结构位(`_sema_error_code` / 终态原因位),文案只用于上屏。按 `errors[0]` 文本匹配签名(如「模型不被支持」「连接被重置」一类)分类的判据作废:凭据网会把签名里的片段换成记号(`Unknown key: …` 一类配置诊断、带 query 的地址),分类随之落空。分类吃原文、展示吃洗文,两轨分开。
|
|
9854
|
+
- **订正(§101 载体映射:审批入参)**:§101a-2 表「审批卡正文 / 入参 → 端(D-1)」与 §101d 的载体映射把审批入参归在凭据网射程内 —— 指引错误,以本条为准。审批入参是授权面:用户批的必须是他看得见的真参数,遮掉 query 值或词级凭据等于让他批一件看不见的事。审批入参的展示载体 = **字符面**:`displayUntrusted(x, { credentialUrls: false, credentialWords: false })`(只中和控制符、双向与格式字符、折行;凭据原样,泄露面是用户自己的屏幕);截断必须显式标出(省略号 / 「已截断」标注,且端侧如实披露「入参被截断」)。审批卡正文(引擎问句)仍按单行 / 多行句子载体走 D-1。
|
|
9855
|
+
- **不变(`<system-reminder>` 两只口相对 0.83.3 包内行为)**:无差异 —— 块语义逐字同,只改时间复杂度(线性);包内两处读点(委派子代的提示词剥壳、分类器裁决的解包)答案不变。按「与 0.83.3 包内同行为」写的判据照旧成立。
|
|
9856
|
+
- **新增**:G-P0–G-P17 / G-S1–G-S6 / G-R1–G-R6。
|
|
9857
|
+
- **不变**:`trigger` 缺席时重开口的判决与 0.83.3 逐字同(含 `firstSight`、同步 / 异步形的选择);自愈腿在提交出身缺席时对重开口的调用与 0.83.3 同(只传 `taskId`),不带 `dismissedByUser` 的四种行与 0.83.3 逐字同;决断投递、在飞闩、单活纪律、回执语义;座位校验器对既有十位的判决。
|
|
9858
|
+
- 已发段(§101、§102、§103)不回改,以本段为准。
|
|
9859
|
+
|
|
9860
|
+
### 104b. 缺席语义(逐键)
|
|
9861
|
+
|
|
9862
|
+
- `trigger` 缺席 = 与 0.83.3 同答:不判记号、不读门实例;成功重开照样撤这条任务的「用户关卡」记号(卡回到屏上)。表外值(`'auto'`、`null` 一类)按 `'automatic'` 判(保守侧)。
|
|
9863
|
+
- `readGateInstanceKeys` 缺席 = 本包证不出「这是新门」⇒ 自动触发撞记号一律拒开(直到用户的下一个动作、决断性作答或会话换代)。读口回 `null`、回非 `Set`、reject、同步抛(关卡那一刻或判定那一刻)、超过等待上限(1.5 秒)、用户关卡那一刻读回空集 —— 同样按证不出处置。
|
|
9864
|
+
- 同步形(不带 `presentationReceiptMs`)不读门实例:自动触发撞记号即拒。
|
|
9865
|
+
- 陈旧评估(异步判定读在路上时条目换了一枚)不铸卡,判决按此刻条目:新的关卡记号 ⇒ `{ reopened: false, dismissedByUser: true }`;卡已被放回屏上 ⇒ 在本次回执窗内等那一次放回落定,等回来**再读一次此刻条目**:仍是那一次且上屏了 ⇒ `{ reopened: true, firstSight }`,没上屏或窗内没落定 ⇒ `{ reopened: false }`,等的期间又换了一枚 ⇒ 按新条目重新分说(用户又关 ⇒ `dismissedByUser`;批准了 ⇒ `_sema_decisionInFlight`;没了 ⇒ `{ reopened: false }`);决断性作答的墓碑 ⇒ `{ reopened: false, _sema_decisionInFlight: true }`;条目没了(会话换代 / 超上限挤掉)⇒ `{ reopened: false }`。
|
|
9866
|
+
- 并入(每条任务至多一次在路上的重开):同一会话 × 任务上一次重开的卡已发布、还没落定(回执未到、窗未尽)时,后到的重开不铸第二张卡、不退役前一张的作答口,答案只看那一次:异步形在自己的回执窗内等它落定,上屏 ⇒ `{ reopened: true, firstSight: false }`,没上屏 / 窗内没落定 ⇒ `{ reopened: false }`;同步形当拍答 `{ reopened: true, firstSight: false }`。并入发生在判定之后、铸卡之前:撞「用户关卡」记号的自动触发照旧先按记号判。`trigger` 缺席的调用同样并入(判决形不变,只是不再铸第二张)。
|
|
9867
|
+
- `decisionHandedOver` 缺席 = 读后复核只看包内可见的交出(决断投递在飞、决断性作答的墓碑);只认严格 `true`;抛错 ⇒ 保守拒开,判决恰 `{ reopened: false }`(不带 `dismissedByUser` / `_sema_decisionInFlight`:谓词抛错时说不出卡是不是用户关的,也说不出答案在不在路上;自愈行按「没能重开」说)。
|
|
9868
|
+
- `dismissedByUser` 缺席 = 这次拒开 / 失败不是因为「用户关卡」(0.83.3 的各形原样);在场只认严格 `true`(判决与自愈结局两处同)。与 `_sema_decisionInFlight` 同在(宿主注入口的矛盾形)⇒ 结局两位都带,行按「决断在飞」那一句说。
|
|
9869
|
+
- `ActiveRunSelfHealDeps.reopenPlanReview` 的第二参:`submissionOrigin` 缺席或表外 ⇒ 不传(单参调用,与 0.83.3 同)。
|
|
9870
|
+
- `clearPlanReviewUserDismissals()` 不传键 = 默认会话;传别的会话键只清那一个。
|
|
9871
|
+
- 记号账每会话至多 32 条(关卡记号、决断墓碑与「已放回」条目同占位),超出按先后挤掉最早一条(被挤掉那条任务的自动触发回到 0.83.3 的行为)。
|
|
9872
|
+
- 座位请求四位缺席:`mandated` 缺席 ≠ 不强制(判「强制与否」一律 `approvalIsMandated(req)`,它连 `ruleOffersAbsence === "mandated"` 与闭集理由词一起判);`mandate` 缺席从不命名一个词;`ruleOffersAbsence` 缺席不是任何一个缺席词;`origin` 缺席 = 老引擎 / 非 ask 路径,不是 `"policy"`。过境口对缺席 / 坏形一律不铸占位(不铸 `false`、不铸空串)。座位校验器不校这四位:坏形值不会让整条审批请求被拒。
|
|
9873
|
+
- `stripSystemReminderBlocks` / `unwrapSystemReminder`:无成对块 / 非恰一个块 ⇒ 原文逐字节返回;空串 ⇒ 空串。
|
|
9874
|
+
|
|
9875
|
+
### 104c. 黑盒判据骨架
|
|
9876
|
+
|
|
9877
|
+
> 🔴 标「本版证明」的格在 **0.83.3** 产物上必须 FAIL、在 0.83.4 上必须 PASS;标「回归约束」的格两版都 PASS;标「端侧验收」的格验的是端换读 / 升级之后的行为。请记下两次跑的产物标识(版本 + tarball shasum)。前缀:G-P = plan 卡重开、G-S = 座位审批请求、G-R = 剥离口、G-U = 解析口。夹具:`onQuestionFrame` 挂一只收帧口(收到 `question` 帧即 `registerArmedGateFromQuestionId(questionId)`,模拟宿主真入队);`deliverDecision` 注入一只记录口;门实例读口是一只可挂起的假件。
|
|
9878
|
+
|
|
9879
|
+
- **G-P0**(本版证明,纯包层;P-5):`reopenPlanReviewCard('T', { trigger: 'user', deliverDecision, readGateInstanceKeys, presentationReceiptMs: 400 })` 上屏一张卡;对这张卡 `respondToQuestion(id, { answers: [] })`(**不** await)后**紧接着**同步调 `reopenPlanReviewCard('T', { trigger: 'automatic', deliverDecision })` ⇒ `{ reopened: false, dismissedByUser: true }`。判别点:0.83.3 答 `{ reopened: true, firstSight: false }`。
|
|
9880
|
+
- **G-P1**(本版证明;P-1 / P-3):同上关卡之后,异步形 `{ trigger: 'automatic', …, readGateInstanceKeys, presentationReceiptMs }`(读口两次都答 `{g1}`)⇒ 判决键集恰 `dismissedByUser` / `reopened`,收帧口零新 `question` 帧;连续自动触发(同步 ×3、异步 ×3)仍零新帧。判别点:0.83.3 每次都铸新卡。
|
|
9881
|
+
- **G-P2**(本版证明;P-1):关卡之后 `trigger: 'user'` ⇒ `reopened: true`、一张新卡;之后同步形自动触发 ⇒ `reopened: true`(卡回屏即撤记号);再关 ⇒ 自动触发又拒。
|
|
9882
|
+
- **G-P3**(本版证明;P-2):关卡那一刻读口答 `{g1}`;自动触发时读口答 `{g1}` ⇒ 拒;答 `{g2}` ⇒ `reopened: true` 且之后同步形自动触发照开(旧记号已撤);答 `{g1, g9}` ⇒ 照开。
|
|
9883
|
+
- **G-P4**(回归约束;P-1):无记号时 `trigger` 缺席 ⇒ `{ reopened: true, firstSight: true }`(键集恰两位);有记号时 `trigger` 缺席(同步形 / 异步形)⇒ 照旧重开,读口零调用。两版同答。
|
|
9884
|
+
- **G-P5**(本版证明;P-6):关卡之后 `notePlanReviewAnsweredIfDecisive('plan-review:T#reopen-x', 批准作答)` ⇒ 同步形自动触发照开;包内作答口上的批准同样撤记号(注入的投递口恰收到一次 `approve`)。
|
|
9885
|
+
- **G-P6**(本版证明;失败分类):关卡那一刻读口答 `null` / reject / 空集 / 同步抛,或判定那一刻读口同步抛 / 缺席 / 永不落定 ⇒ 自动触发都答 `dismissedByUser`(永不落定那一形在 5 秒内返回),重开口与作答口都不抛。
|
|
9886
|
+
- **G-P7**(本版证明;竞态一,射程:包内可见的交出 + 宿主谓词报的交出):关卡 `{g1}` 之后读口答 `{g2}` 但挂起;自动触发(异步形)起跑后,宿主报一次 `notePlanReviewAnsweredIfDecisive(…, 批准)`,再放开读口 ⇒ `{ reopened: false, _sema_decisionInFlight: true }`,零新卡。同形换成「挂起期间 `decidePlanReview('T', 'approve')` 在飞」(假引擎把决断 POST 挂住不答;不要用 fetch 拒收的保留端口造「在飞」—— 那种端口在微任务里就被拒,在飞闩当拍即放,格子随调度抖动)⇒ 同答。宿主谓词那一形见 G-P12。
|
|
9887
|
+
- **G-P8**(本版证明;竞态二):关卡 `{g1}` 之后读口答 `{g2}` 挂起;自动触发起跑后,`trigger: 'user'` 重开一张并在这张新卡上再 Esc,再放开读口 ⇒ 自动触发答 `dismissedByUser`、不铸卡;之后同步形自动触发仍拒(新记号保留)。回执窗一形:`trigger: 'user'` 铸卡后、回执到手前在新卡上 Esc,再补回执 ⇒ 这次 `reopened: true`,之后自动触发仍拒。
|
|
9888
|
+
- **G-P9**(本版证明;P-4):关卡之后 `clearPlanReviewUserDismissals('别的会话')` ⇒ 仍拒;`clearPlanReviewUserDismissals()` ⇒ 照开。同一任务在另一会话键(自带投递口与收帧口)下的自动触发不受默认会话记号牵连。
|
|
9889
|
+
- **G-P10**(端侧验收;射程:终端,升级并按 P-1 / P-2 / P-4 / P-7 / P-8 换读之后):plan 决断失败、屏上出现失败句 ⇒ 按 Esc 关卡 ⇒ 等压着的结局注入件出队 ⇒ 1.5 秒内打一条退出命令 + 回车 ⇒ 屏上**不**出现新的 plan 卡,退出命令正常执行,那一行说「卡是你关的、发条消息叫回来」;之后手打一条消息 ⇒ 卡回来。
|
|
9890
|
+
- **G-P11**(本版证明;陈旧评估分说):关卡 `{g1}` 之后,自动触发(异步形)的读挂起期间分四形,再放开读口:① 用户 `trigger: 'user'` 把卡叫回(不再 Esc)⇒ `{ reopened: true, firstSight: false }`、自动触发这一次不另铸;② 读口此刻答 `{g2}`,另一次自动触发先把新门的卡放上去 ⇒ 同 ①;③ `clearPlanReviewUserDismissals()` ⇒ 恰 `{ reopened: false }`;④ 用户叫回并在叫回的卡上批准 ⇒ `{ reopened: false, _sema_decisionInFlight: true }`。另:读口答 `{g2}` 时两次自动触发同拍起跑 ⇒ 恰一张新卡、两个判决都是 `reopened: true`;宿主入队(`registerArmedGateFromQuestionId`)延迟 60 ms 与 200 ms(回执窗 400 ms)时同答,② 那一形在另一次的回执晚到时同答(陈旧评估须在回执窗内等那一次落定);回执窗 60 ms 小于入队延迟 200 ms ⇒ 两个判决都恰 `{ reopened: false }`。判别点:0.83.3 四形都答 `dismissedByUser`(同拍那一形其中一次答 `dismissedByUser`)。
|
|
9891
|
+
- **G-P12**(本版证明;P-7):`armPlanReviewApproval` 立门 G1 的卡并 Esc(读口答 `{g1}`);门换成 G2、`armPlanReviewApproval` 立 G2 的卡;自动触发(异步形,带 `decisionHandedOver`)的读挂起期间谓词翻成 `true`(模拟用户在 G2 卡上批准、宿主已交出而 respond 还压着),再放开读口 ⇒ `{ reopened: false, _sema_decisionInFlight: true }`、零新卡、G2 卡的作答入口仍在(之后补上的 `respondToQuestion` 落在 G2 卡上)。谓词答 `false` ⇒ 照开;谓词抛 ⇒ 恰 `{ reopened: false }`、零新卡、不抛。判别点:0.83.3 / 不带谓词时铸新卡并退役 G2 卡的作答入口,补上的作答落空。
|
|
9892
|
+
- **G-P13**(本版证明;P-2 读口快照):读口回宿主自己的活 `Set` 并就地改(关卡时 `{g1}`,之后改成 `{g2}`)⇒ 自动触发照开。判别点:按引用比较时关卡那一刻的读数跟着变成此刻 ⇒ 永远认不出新门。
|
|
9893
|
+
- **G-P14**(本版证明;P-6 两判官):重开卡(两选)上作答一个它没展示的已知标签(`PLAN_REVIEW_APPROVE_AUTO_LABEL`)⇒ 包内作答口判非决断、零投递、记号成立;随后宿主对**同一张卡** `notePlanReviewAnsweredIfDecisive(同一 id, 同一作答)` ⇒ 记号仍在(自动触发拒);对别的卡 id 报一次批准 ⇒ 照撤。
|
|
9894
|
+
- **G-P15**(本版证明;P-8):`attemptActiveRunSelfHeal`(plan_review 门)注入口回 `{ reopened: false, dismissedByUser: true }` ⇒ 结局 `plan-review-reopen-failed` 带 `dismissedByUser: true`;`activeRunSelfHealRow` 用户形说「you closed its approval card … send it again to bring the card back」、不含 `could not reopen`、不含 `POST`、不调 `keepSessionWayOut`;注入形说「you closed that approval card … Send a message when you want the card back」;steer 落 `queued` 且判决带该位 ⇒ 两形都不说 `could not surface`。注入口记录实参:`submissionOrigin: 'user'` ⇒ 第二参 `{ trigger: 'user' }`,`'injected'` ⇒ `{ trigger: 'automatic' }`,缺席 ⇒ 只有一个实参。端到端:注入口接 `reopenPlanReviewCard`(补回执窗、读口、投递口)⇒ 用户关卡后注入件撞 409 零新卡、结局带位;用户下一条消息 ⇒ 卡回来。
|
|
9895
|
+
- **G-P16**(本版证明;单飞并入):关卡 `{g1}` 之后门换成 `{g2}`,收帧口把入队延迟 200 ms;自动触发 A(异步形)起跑,50 ms 后第二次调用 B 到达 ⇒ 全程恰一张新卡、A 那张的作答入口仍在(对它 `respondToQuestion` 批准 ⇒ 投递口恰收到一次 `approve`),A 答 `reopened: true`,B 答 `{ reopened: true, firstSight: false }`。B 分三形各跑一次:另一次自动触发 / `trigger: 'user'` / `trigger` 缺席的同步形(A 换成无记号的 `trigger: 'user'` 异步形;B 当拍返回、非 thenable)。判别点:0.83.3 与不带并入的实现铸两张卡,A 那张的作答入口被退役。 单飞按会话分桶:默认会话的一次重开在路上时,别的会话(自带投递口的 keyed 宿主)对同一 taskId 的重开照铸自己那张卡,不并入。
|
|
9896
|
+
- **G-P17**(本版证明;等后复核):关卡 `{g1}`、门换成 `{g2}`、入队延迟 200 ms;两次自动触发同拍起跑(A 铸卡、B 陈旧等 A 落定),50 ms 后分三形:① 用户叫回并在屏上那张卡上 Esc ⇒ B 答 `{ reopened: false, dismissedByUser: true }`;② 叫回并批准 ⇒ B 答 `{ reopened: false, _sema_decisionInFlight: true }`;③ `clearPlanReviewUserDismissals()` ⇒ B 答恰 `{ reopened: false }`。判别点:等回来不复核的实现三形都答 `reopened: true`。
|
|
9897
|
+
- **G-S1**(本版证明,纯包层;S-1 / S-2):`toolPermissionRequestAskBits({ mandated: true, mandate: APPROVAL_MANDATE_WORDS[0], origin: 'policy', governanceForced: true })` ⇒ 恰 `{ mandated: true, mandate: <该词>, origin: 'policy' }`;铺进 `{ requestId: 'live:a1', sessionId: 's1', … }` 后 `isToolPermissionRequest` 答 `true`,`approvalIsMandated` 答 `true`,`readApprovalMandate` 答该词。判别点:0.83.3 无此导出;`TOOL_PERMISSION_REQUEST_KEYS` 不含这几位。
|
|
9898
|
+
- **G-S2**(本版证明;窄读):表外词 / 大写变体 / 前后空白 / 非串的 `mandate`、空串 / 非串的 `origin` 与 `ruleOffersAbsence`、`'true'` / `1` / `false` 的 `mandated`、原型链上的各位、`null` / `undefined` / 串 / 数入参 ⇒ 过境口零键、不抛。
|
|
9899
|
+
- **G-S3**(本版证明;不互推):只有 `mandate` ⇒ 只过词(`approvalIsMandated` 仍答 `true`);只有 `mandated` ⇒ 只过位。
|
|
9900
|
+
- **G-S4**(回归约束):座位请求带坏形位(`mandated: 'yes'` / `mandate: 'zzz'` / `origin: 7` / `ruleOffersAbsence: 7`)⇒ `isToolPermissionRequest` 仍答 `true`(不拒整条)。两版同答(0.83.3 不认识这几位,同样放行)。
|
|
9901
|
+
- **G-S5**(本版证明;寄存行形):卡请求只有 `ruleOffersAbsence: 'mandated'`(无 `mandated` 位)⇒ 过境后座位请求带 `ruleOffersAbsence: 'mandated'`,座位上 `approvalIsMandated` 与卡上同答 `true`;表外串原文过。
|
|
9902
|
+
- **G-S6**(本版证明;S-3):活卡帧 / 待决行上的 `mandated: true` 只挂在原型链上 ⇒ 卡入参不带 `mandated`;自有键上的 `true` 照透传。判别点:0.83.3 两条腿都盖上这一位。
|
|
9903
|
+
- **G-R1**(本版证明,纯包层;R-1):根入口 `stripSystemReminderBlocks` / `unwrapSystemReminder` 为函数。判别点:0.83.3 为 `undefined`。
|
|
9904
|
+
- **G-R2**(本版证明;正负样本):`strip('<system-reminder mark="AbCdEfGhIjKlMnOpQrStUv">\na\n</system-reminder>\nhello') === '\nhello'`;裸形同;`strip('a <块1> b <块2> c') === 'a b c'`;104a-1 所列七种非引擎形整串原样;截断块原样;无块逐字节原样。
|
|
9905
|
+
- **G-R3**(本版证明;解包):整条带 mark 块 / 裸形块 ⇒ 正文;块后还有字 / 非引擎形 ⇒ 原样。
|
|
9906
|
+
- **G-R4**(回归约束,两版同答;块语义):`unwrap(铸('a') + 铸('b'))` ⇒ `'a\n</system-reminder><system-reminder>\nb'`;两块夹正文 ⇒ 按一块解(不原样);`unwrap(铸(' indented\n second\n\n'))` ⇒ `'indented\n second'`;正文含字面闭标签 ⇒ 照当正文;截断信封 ⇒ `unwrap` 原样;`strip('I typed <system-reminder> here. <真块> after') === 'I typed after'`;`strip('<system-reminder>a<system-reminder>b</system-reminder>c</system-reminder>d') === 'c</system-reminder>d'`;分类器拒绝理由里引用了裸开标签 / 带 mark 的开标签 ⇒ `classifierDenyFromToolEnd` 照认、`reason` 逐字;`unwrap(铸(含字面开标签的正文)) === 正文`(裸形 / 带 mark 两形);正文含字面开标签的真块 ⇒ `strip` 整块删净(不留真块开标签、mark 值不露出)。
|
|
9907
|
+
- **G-R6**(回归约束,两版同答;对拍):两只口与 0.83.3 的两条正则实现(解包 = `^\s*〈开标签〉\s*\n?([\s\S]*?)\n?\s*<\/system-reminder>\s*$` 取捕获组;剥离 = `〈开标签〉[\s\S]*?<\/system-reminder>` 全局替换为空;〈开标签〉即 104a-1 那两形)在定种子随机串上逐字节同(字母表含开标签两形、闭标签、截断开标签、JS 空白全族、换行、普通字;串长 ≤ 200;门里 3 万条,语料覆盖「解包正文含开标签」「剥离块内含开标签」两个边角各数千条)。
|
|
9908
|
+
- **G-R5**(本版证明;线性):`unwrap('<system-reminder>' + '\n'.repeat(n) + 'x')` 与 `strip('<system-reminder>'.repeat(n))` 在 n 与 4n 两个尺寸上各量三次取最快,4n 那次 250 ms 内直接算过,否则放大倍数 < 10(线性约 4×)。判别点:0.83.3 包内实现在这两形上分别三次方 / 平方。
|
|
9909
|
+
- 包层行为钉在门 `run-plan-review-dismissal-test.mjs`(G-P0–G-P14、G-P16、G-P17)、`run-selfheal-reopen-test.mjs`(G13 段,G-P15)、`run-seat-contract-keys-test.mjs`(K 段,G-S1–G-S5)、`run-durable-card-display-keys-test.mjs`(⑰ 段,G-S6)、`run-client-core-pure-test.mjs`(㊲b 段,G-R1–G-R6)。
|
|
9910
|
+
|
|
9911
|
+
### 104d. 端上要动的读点
|
|
9912
|
+
|
|
9913
|
+
**终端**
|
|
9914
|
+
|
|
9915
|
+
- P-1 / P-2 / P-4:对账 / 补捞 / 卡离屏补一拍这些自己调重开口的腿传 `trigger: 'automatic'`;把自带的门实例读口交给 `readGateInstanceKeys`(重开口与首呈口两处;交活集合即可,包读回即取快照);会话换代处调 `clearPlanReviewUserDismissals()`。
|
|
9916
|
+
- P-3:自带的「用户关卡」判决位换读 `dismissedByUser`;自带的记账(作答收口处)、判定、记号撤销与记号代次复核整段删 —— 这些在包里了。防误触窗口、补捞唤醒仍在端。
|
|
9917
|
+
- P-7:读后复核这一道由包问宿主谓词 —— 保留自带的「决断交出 → 结算」台账,把它实现成 `decisionHandedOver(taskId)` 交给重开口;删掉自带判定之后那一道铸卡前复核。调重开口**之前**自带的在飞守卫保留(包只在异步判定读后问谓词,见包侧缺口 ⑤)。
|
|
9918
|
+
- P-8:自愈腿的 `reopenPlanReview` 注入口把第二参 `{ trigger }` 原样交给重开口(删自带的按提交出身映射);删自带的「卡是你关的」整行(包出行句;要保留自己的措辞走 `rowFor`)。
|
|
9919
|
+
- R-1(建议):报错卡「整条被包裹才去标」一处换读 `unwrapSystemReminder`。🔴 端自带的开标签文法比本包宽(任意属性都认);换读后「带任意属性的开标签」不再被当成信封剥掉 —— 按 104a-1 核这是不是端要的行为。
|
|
9920
|
+
|
|
9921
|
+
**网页端**
|
|
9922
|
+
|
|
9923
|
+
- S-1:座位半场的审批卡读 `req.mandated` / `req.mandate` / `req.ruleOffersAbsence` / `req.origin`(用卡请求的读口,见 S-1 行;判强制一律 `approvalIsMandated(req)`);今天座位铸点还没铸这几位,缺席不渲。
|
|
9924
|
+
- 104a′ 两条展示层指引:分类读结构位、展示读洗文;审批入参按字符面载体呈现、截断显式标出。
|
|
9925
|
+
|
|
9926
|
+
**桌面端**
|
|
9927
|
+
|
|
9928
|
+
- S-2:座位请求铸点(活审批帧 / 待决行 → 座位请求)展开 `toolPermissionRequestAskBits(frame)`;冻结期内零改动,解冻配对时接。自铸不经过境口的,自己按同一把窄读。
|
|
9929
|
+
- P-4:接 plan 重开链时,关掉一个会话按它的键调 `clearPlanReviewUserDismissals(key)`。
|
|
9930
|
+
|
|
9931
|
+
**管理台**
|
|
9932
|
+
|
|
9933
|
+
- R-1(建议):实时面剥离换读 `stripSystemReminderBlocks`(开标签文法与本包同一份,两只口的正负样本在 104a-1);回放面按开标签切块的那一处仍需文法(见包侧缺口 ⑦)。同名影子对账门在换读后可删那份副本在这一处的登记。块语义与本包 0.83.3 起的内部实现逐字同(字面开标签会与后面的真块配对、嵌套时外层闭标签残留,见 104a-1)—— 换读前按 104a-1 与自持副本对表。
|
|
9934
|
+
|
|
9935
|
+
**验收方**
|
|
9936
|
+
|
|
9937
|
+
- 按 104c 各格;按「自动触发在用户关卡之后照样铸新卡」「按 `errors[0]` 文本分类」「审批入参按凭据网遮」断言的判据按 104a′ 改锚;「两只剥离口与 0.83.3 包内同行为」的判据照旧成立。
|
|
9938
|
+
|
|
9939
|
+
### 104y. 🔴 三端升级必读(固定段式)
|
|
9940
|
+
|
|
9941
|
+
1. **换钉 `^0.83.4` 之前**:无前置编译改动(纯增:四个运行期导出、两个具名型、若干可选位与一个可选第二参;`TOOL_PERMISSION_REQUEST_KEYS` 多四员 —— 按这张表做**穷尽**断言(元素逐一相等)的端要跟;`SelfHealOutcome` 的 `plan-review-reopen-failed` 臂多一个可选位 —— 对结局做穷尽键集断言的端要跟)。可观察变化:① 包内 plan 卡作答口在用户关卡时多记一枚记号 —— 不传 `trigger` 的调用方判决与 0.83.3 逐字同,传了 `'automatic'` 的调用方在用户关卡之后拿到拒开;② 自愈腿在提交出身在场时给重开注入口多传一个 `{ trigger }`(出身缺席时调用不变);③ 座位请求型多四个可选位;④ 两条卡腿对原型链上的 `mandated` 不再盖位(JSON 形零变化);⑤ 根入口多两只剥离口(块语义与 0.83.3 包内逐字同,只改时间复杂度);⑥ 同一任务上一次重开还在路上时,后到的重开并入、不铸第二张卡(`trigger` 缺席的调用也是)。
|
|
9942
|
+
2. **逐面**:终端 —— 重开链交门实例读口与交出窗谓词、自愈注入口透传 `trigger`、会话换代清记号、判决位换读 `dismissedByUser`,同批删自带的记账、判定、读后复核与「卡是你关的」整行(104d)。网页端 —— 座位半场可读四位;按 104a′ 改分类与审批入参载体。桌面端 —— 解冻配对时座位铸点接过境口。管理台 —— 实时面剥离可换读本包口(先按 104a-1 对表)。
|
|
9943
|
+
3. **成文改口**:见 104a′(改读 / 订正 / 新增 / 不变);已发段(§101、§102、§103)不回改,以本段为准。
|
|
9944
|
+
|
|
9945
|
+
**包侧缺口:** plan 重开 —— ① 包分不出空作答是谁送的:宿主 hook 以空作答拒掉 plan 卡时同样记成「用户关卡」,自动触发随之拒开(方向保守;KL-130)· ② 首呈口(停泊帧到达时的 `armPlanReviewApproval`)既不判也不撤记号:同一停泊帧重放时首呈卡照样再立一次,立回屏上后记号仍在(KL-131)· ③ 同步形读不了门实例,用户关过卡的任务上长出的新门在同步形宿主上要等用户的下一个动作(KL-132)· ④ 记号账每会话 32 条上限(关卡记号、决断墓碑、「已放回」条目同占位),挤掉的那条任务回到 0.83.3 行为(KL-133)· ⑤ 交出窗谓词只在异步判定的读后复核里问(KL-136)。座位 —— ⑥ 座位校验器不校四个新位,不经过境口自铸座位请求的宿主要自己窄读(KL-134)。剥离口 —— ⑦ 开标签文法本身不上公面,要按开标签切块的端仍自持文法(KL-135)· ⑧ 剥离从开标签配到最近的闭标签,用户正文里没闭合的字面开标签会与后面的真块配对、两者之间的正文一起删掉(既有行为,KL-137)。
|
|
9946
|
+
|
|
9602
9947
|
## §103 🆕 0.83.3(2026-09-26)flag 来源的 hooks 进请求体 + 规则列举口入参只要 `list` + 模型身份认目录缺省(patch;根公面运行期导出 1273 不变;公面类型 +1〔`RulesListFacade`〕;`HookSettingsSource` +1 员 `flagSettings`;`ModelIdentityLanes['modelCatalogFile']` 闭集 +`complete`;`LocalEngineModelIdentityReading` +1 可选位 `engineAcceptsCatalogDefault`;`listAllPersistedRules` 入参放宽〔`list` 必填、其余四口可选〕;零投影臂;peer sdk 地板 `>=11.3.0` 不动)
|
|
9603
9948
|
|
|
9604
9949
|
> **patch**,三件同发 + 一件「次序不变」的成文(本节按 0.83.3 的读法写;若与本版发布帖不一致,以发布帖为准):
|