@sema-agent/client-core 0.74.5 → 0.75.1

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.
@@ -24,13 +24,100 @@ export function notePanelRowRunning(taskId) {
24
24
  export function retirePanelRowRunning(taskId) {
25
25
  ids.delete(taskId);
26
26
  }
27
- /** 首见即终态且**确知**没发布过 running(表没溢出且不在表里)⇒ 历史行。 */
28
- export function panelRowNeverPublishedRunning(taskId) {
29
- return !overflowed && !ids.has(taskId);
27
+ /**
28
+ * 0.75.0 W2(test 0.74.5 复验读数):「没发布过 running」不等于「消费端没有这一行」—— 短命子代在两拍之间起步并结束时,通知车道的 end
29
+ * 已经递达(消费端建了行、状态 ended),终态 fleet-row 再被零事件吞掉 = 那一行的最终用量丢了(它是唯一带全 usage 的一帧)。
30
+ * ⇒ 第二本账:本进程**递达过 end** 的行 id(任何 lane;只记当代 —— 与销 running 历史同一个陈旧判据)。有界 FIFO 4096;被挤掉的 id 之后
31
+ * 若再来终态行会被当历史行(用量丢),这是有界的代价,不是压制永久关掉。
32
+ */
33
+ const MAX_ENDED = 4096;
34
+ const endedIds = new Map();
35
+ /**
36
+ * 单调写(异源复审 R3 [high]:旧 end 后到不许把已结周期倒写回前代):`older(cycle, existing)` 由调用方(漏斗)用陈旧判据算 ——
37
+ * 可证更旧 ⇒ 不写;同代 / 判不出 ⇒ 与已有记录合并(保留已知的另一半身份);可证更新 ⇒ 调用方传 older=false,本函数整只替换已知键。
38
+ */
39
+ export function notePanelRowEnded(taskId, cycle, older) {
40
+ const existing = endedIds.get(taskId);
41
+ if (existing !== undefined && older)
42
+ return;
43
+ endedIds.delete(taskId);
44
+ endedIds.set(taskId, { ...(existing ?? {}), ...(cycle.cycleSeq !== undefined ? { cycleSeq: cycle.cycleSeq } : {}), ...(cycle.startedAt !== undefined ? { startedAt: cycle.startedAt } : {}) });
45
+ if (endedIds.size > MAX_ENDED) {
46
+ const oldest = endedIds.keys().next().value;
47
+ if (oldest !== undefined)
48
+ endedIds.delete(oldest);
49
+ }
50
+ }
51
+ /** 本进程递达过这一行的 end ⇒ 那条 end 的周期身份;没有 ⇒ undefined。 */
52
+ export function panelRowEndedIdentity(taskId) {
53
+ return endedIds.get(taskId);
54
+ }
55
+ /** 首见即终态且**确知**消费端没有这一行(running 表没溢出、不在 running 表、也没递达过 end)⇒ 历史行。 */
56
+ export function panelRowUnknownToConsumer(taskId) {
57
+ return !overflowed && !ids.has(taskId) && !endedIds.has(taskId);
58
+ }
59
+ /**
60
+ * 反序(终态 fleet-row 先到、通知 end 后到):终态行先缓住(投影把它当历史行零事件),end 到漏斗时先放行再放 end —— 用量不丢、也不为真历史行建行。
61
+ * 有界 FIFO 4096(与两本 id 账同量级;挤掉 = 那一行的用量丢,触发条件 = 同一进程里 4096 条首见终态行都还没等到 end);任何后到的行帧把缓着的作废。
62
+ */
63
+ const MAX_HELD = 4096;
64
+ const heldNewborn = new Map();
65
+ export function holdNewbornTerminalRow(taskId, ev) {
66
+ heldNewborn.delete(taskId);
67
+ heldNewborn.set(taskId, ev);
68
+ if (heldNewborn.size > MAX_HELD) {
69
+ const oldest = heldNewborn.keys().next().value;
70
+ if (oldest !== undefined)
71
+ heldNewborn.delete(oldest);
72
+ }
73
+ }
74
+ export function peekHeldNewbornTerminalRow(taskId) {
75
+ return heldNewborn.get(taskId);
76
+ }
77
+ export function takeHeldNewbornTerminalRow(taskId) {
78
+ const ev = heldNewborn.get(taskId);
79
+ if (ev === undefined)
80
+ return undefined;
81
+ heldNewborn.delete(taskId);
82
+ return ev;
83
+ }
84
+ export function dropHeldNewbornTerminalRow(taskId) {
85
+ heldNewborn.delete(taskId);
86
+ }
87
+ /**
88
+ * 0.75.1(实测反例):`end` 归一的三把可能的键里,**后两把只在行帧真发布过时才登记**
89
+ * (`transcriptId → 尾段` 钥匙表与 `尾段 → UUID` 反向所有权都由 `publishEngineAgentPanelEvent`
90
+ * 的 fleet-row 臂写),而缓行的定义就是「还没发布」⇒ `tick{UUID}` 先上屏、终态行 `{尾段,
91
+ * transcriptId: UUID}` 被缓住、`end{UUID}` 到达时三把键全查不到,缓行永远放不出、短命子代的
92
+ * 最终用量丢。所以漏斗还需要第四条腿:按缓行**自己带着的** wire 侧键反查。
93
+ *
94
+ * 🔴 **为什么是遍历、不是第六本索引**:面板这一族已经有五本账(running 历史 / ended 账 / 缓行 /
95
+ * 所有权 / 周期水位),再加一张 `transcriptId → 缓行键` 的索引就要在 hold / take / drop / 容量淘汰
96
+ * 四个写口上各维护一次同步 —— 那是本族出过真回归的形(一本账写了另一本没写 ⇒ 缓行放两次或永不放)。
97
+ * 缓行表有界 4096 且只在 **`end` 递达**时被扫(不是每拍;一条子代一生至多几次),所以遍历的成本
98
+ * 上限是一条 end 读 4096 个小对象,换来的是「缓行表自己就是唯一真源」。
99
+ */
100
+ export function heldNewbornTerminalRefs() {
101
+ const out = [];
102
+ for (const [taskId, ev] of heldNewborn) {
103
+ const row = ev;
104
+ out.push({
105
+ taskId,
106
+ ...(typeof row.transcriptId === 'string' && row.transcriptId.length > 0 ? { transcriptId: row.transcriptId } : {}),
107
+ ...(typeof row.parentToolCallId === 'string' && row.parentToolCallId.length > 0 ? { parentToolCallId: row.parentToolCallId } : {}),
108
+ });
109
+ }
110
+ return out;
30
111
  }
112
+ /**
113
+ * 测试钩。清四样:① 「发布过 running 且还没结」的行 id 集合 ② 溢出标(溢出后读口一律答保守)③ 「递达过 end」的行 id 集合 ④ 缓着的首见终态行。
114
+ * 🔴 连续场景中途别调:清掉之后,「首见即终态」的判定会把此前见过 running / 结过的行当成从没见过。
115
+ */
31
116
  export function __resetPanelRunningHistoryForTests() {
32
117
  ids.clear();
33
118
  overflowed = false;
119
+ endedIds.clear();
120
+ heldNewborn.clear();
34
121
  }
35
122
  /** 测试 / 诊断读面。 */
36
123
  export function __panelRunningHistorySize() {
package/dist/seam.d.ts CHANGED
@@ -250,6 +250,17 @@ export type ChromeEvent = {
250
250
  laneProof: LaneProof;
251
251
  phase: 'start' | 'stop';
252
252
  taskId: string;
253
+ /**
254
+ * 子代的**类型**(CC `SubagentStart.agent_type` 那一位)。0.75.1 起按**诚实来源**取,三态:
255
+ * ① wire `task_progress` 上的结构读类型键 —— 亲核 sdk 9.8.1 `events.d.ts` 的 `task_progress` 臂:
256
+ * **没有** `agentType` / `spawnAgentType` 这一位(也不在 `FleetTaskRow` 之外的任何 tick 面上),
257
+ * 所以本档今天恒不命中;上游哪天铸了这一位,本档先于 ② 生效;
258
+ * ② fleet 行帧的 `agentType`(sdk `FleetTaskRow.agentType`,§K-7 的短类型 label,如 `Explore`);
259
+ * ③ 两者都没有 ⇒ **键缺席**。
260
+ * 🔴 缺席 = 不知道这只子代是什么类型,**不是**「无类型」—— 宿主的 hook 侧要有 absent 兜底(别渲空串、别编
261
+ * `subagent`)。0.75.1 之前本键取的是 tick 的**展示名** `name`(上游由委派卡 description 派生)= 一个
262
+ * 看起来合理的错答案:子代启动 hook 收到的于是是那段描述文本。
263
+ */
253
264
  agentType?: string;
254
265
  guard?: 'if-started';
255
266
  }
@@ -534,7 +545,7 @@ export type ChromeEvent = {
534
545
  * ⚠️ **只有 live 腿有本帧**(server 7.69.0 亲读:durable/bg 腿把它喂给 rewind 锚而不入账本)
535
546
  * ⇒ replay/resume 上映射表是空的;那时正解是**不画分割线**,不是回退成「画在最后一条」。
536
547
  */
537
- | MessageCommittedChromeEvent | EngineNoticeChromeEvent | TextSegmentEndChromeEvent | ThinkingSegmentEndChromeEvent | ToolDisclosureChromeEvent | ToolProgressChromeEvent | ToolRosterDeltaChromeEvent | ContextUsageChromeEvent | WiringManifestChromeEvent | ResultTextDivergedChromeEvent
548
+ | MessageCommittedChromeEvent | EngineNoticeChromeEvent | TextSegmentEndChromeEvent | ThinkingSegmentEndChromeEvent | ToolDisclosureChromeEvent | ToolProgressChromeEvent | ToolRosterDeltaChromeEvent | ContextUsageChromeEvent | CompactionOutcomeChromeEvent | WiringManifestChromeEvent | ResultTextDivergedChromeEvent
538
549
  /**
539
550
  * B-078 / L-208(0.65.0):design/172 流内审批协议的**两条帧**。修前它们在标准管线上落
540
551
  * `dropped('unsupported_arm')`,壳自己另接一份 ⇒ 只走包管线的宿主(desktop/web)拿不到
@@ -794,6 +805,21 @@ export interface ContextUsageChromeEvent {
794
805
  sections?: readonly ContextUsageSectionView[];
795
806
  eventId?: string;
796
807
  }
808
+ /**
809
+ * CC-89(0.75.0;sdk `compaction_outcome`):一次压缩的**非 compacted 结局**(例:被任务终态抢先而作废、熔断开着而失败)。
810
+ * 成功压缩不走本臂 —— 那条的权威仍是转录里的 `compact_boundary`。
811
+ * 🔴 `outcome` / `trigger` 是引擎**开集**原词(已知 `trigger`:`auto` / `manual` / `forced`),按成员渲染时必须带 default 臂,认不得的词照原词显示,别丢帧;
812
+ * 🔴 本臂**不是终态**:任务还在跑,别据它收 spinner / 判 run 结束;`reason` 是引擎说明文本(上游已脱敏),渲前仍按宿主自己的不可信文本纪律处理。
813
+ * `laneProof.lane === 'subagent'` = 这是某只子代的压缩结局,别渲成主会话的。缺席键 = 引擎没说,不是空值。
814
+ */
815
+ export interface CompactionOutcomeChromeEvent {
816
+ kind: 'compaction_outcome';
817
+ laneProof: LaneProof;
818
+ outcome: string;
819
+ trigger?: string;
820
+ reason?: string;
821
+ eventId?: string;
822
+ }
797
823
  export interface ToolDisclosureChromeEvent {
798
824
  kind: 'tool_disclosure';
799
825
  laneProof: LaneProof;
package/dist/seam.js CHANGED
@@ -88,6 +88,11 @@ const CHROME_ARM_TABLE = {
88
88
  duty: 'CC-08(0.71.0):每个压缩边界一条,按**最后一条**取当前值;`usedTokens > compactAtTokens` 是引擎的 shouldCompact 谓词,别重算;`windowTokens` 是 autocompact 窗,' +
89
89
  '别渲成模型上下文大小;🔴 `sections[].tokens` 与 `usedTokens` 不同坐标系,**禁相减**、禁拿一段比 `compactAtTokens`;`sections` 整键缺席 = 没装配出段 IR,不是各段为零。',
90
90
  },
91
+ compaction_outcome: {
92
+ required: false,
93
+ duty: 'CC-89(0.75.0):一次压缩的非 compacted 结局(作废 / 失败等),给用户一条可见提示。`outcome` / `trigger` 是引擎开集原词,按成员渲染必带 default 臂、认不得照原词显示;' +
94
+ '🔴 不是终态 —— 任务还在跑,别据它收 spinner;`laneProof.lane` 为 subagent = 子代的压缩结局,别渲成主会话的;成功压缩不走本臂(权威是转录的 compact_boundary)。不接 = 压缩失败对用户不可见。',
95
+ },
91
96
  tool_disclosure: {
92
97
  required: false,
93
98
  duty: 'CC-08(0.71.0):这条腿的工具名字占位普查。`deferred` / `activated` 都是**全量快照,整只替换**(不做增量合并);' +
@@ -19,8 +19,8 @@
19
19
 
20
20
  | 项 | 值 | 真源 |
21
21
  |---|---|---|
22
- | 本包 | `@sema-agent/client-core` **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` **>=9.7.1**(value-level,非 type-only;**0.74.0 抬版**: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.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` **>=9.8.1**(value-level,非 type-only;**0.75.0 抬版**: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
26
  | 公开导出面 | **1065** 个运行期符号(+ 51 个测试钩;= 0.74.5 的值:相对 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` —— **别手抄进别处,以该文件为准** |
@@ -246,7 +246,7 @@ type EventProjection =
246
246
  `meta`(流首帧身份信号,SDK/传输层自消费)· `file_link` / `prompt_assembled` / `model_usage` /
247
247
  `config_assembled`(引擎可观测/审计面,CC transcript 无对位物;context_usage 自 0.71.0 CC-08 ③ 起**进切片**为 chrome 臂,不再在本表,见 §42)·
248
248
  `needs_review`(壳消费的是 `done{status:'needs_review'}` 终帧,事件形重复且更早)·
249
- `compaction_outcome`(压缩**非 compacted 结局**报告;CC transcript 无对位物,见 §7 缺口 **P-6**)·
249
+ (compaction_outcome 自 0.75.0 CC-89 起**进切片**为 chrome 臂,不再在本表,见 §74)·
250
250
  `tool_approval` / `tool_approval_complete`(**不是丢帧**:它们走
251
251
  `hitl/toolApprovalWire.isToolApprovalFrame` + `hitl/frameRouter` 那条审批卡链;在这里投一条 transcript 行
252
252
  只会让同一只 ask 出现两次)· **`error`**(见下,单列)。
@@ -1487,7 +1487,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
1487
1487
  | **P-3** | med | `approval_request`(design/172 流内审批开卡帧)在本包**零消费口** ⇒ `dropped('unsupported_arm')`(有痕、没人接) | `src/adapter/downstream/eventToSdkMessage.ts` 的 `case 'approval_request'` | 存量路径今天仍能决断(legacy `tool_approval` 腿在,同一只 ask 出两帧,顺序钉死「先 legacy、后 `approval_request`」)。🔴 **但降级路径不保证**(逐字):legacy respond 是 **live-only + same-replica**(错副本 404),重连时 pending 卡靠 `approval_request` preamble 对账 —— 「收到 legacy 帧后断线、按 `Last-Event-ID` 重连只再看到 `approval_request`」以及**非粘性多副本部署**这两条路上,今天只能等窗口到期 → park/deny。**多副本 worker 上这是已知缺口不是环境问题** |
1488
1488
  | **P-4** | med | **`approval_revoke` 在 SDK union 里连成员都没有**(SDK 顶注:known asymmetry,`Registering it is an open item for the next batch`)⇒ 本包不可能有 case ⇒ 运行期落 `dropped('unknown_arm')`;审批链也看不见它(`isToolApprovalFrame` 只认两帧)。全仓 `grep -rn "revoke"` = **0** | `src/adapter/downstream/eventToSdkMessage.ts` 的 `default` 臂;`src/hitl/toolApprovalWire.ts` 的 `isToolApprovalFrame` | 🔴 **引擎撤卡时本包不会替你撤那张卡** —— 被撤的 ask 会一直留在屏上,直到它自己的 5 分钟 TTL / deny 路径触发。要 revoke 语义的端只能自己接 raw named-SSE 腿并撤自己的卡(`unknown_arm` 的 drop 至少留了一行痕) |
1489
1489
  | **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` 帧能弹出覆盖层 |
1490
- | **P-6** | low | `compaction_outcome`(压缩**非成功结局**:mooted/failed)在本切片 `not_in_slice`;「压缩失败让用户看见」是 chrome/HUD 面的活,**今天两端都还没接**(adapt 臂表同样无此臂) | `src/adapter/downstream/eventToSdkMessage.ts` 的 `case 'compaction_outcome'` | 压缩失败对用户**不可见**。🔴 **不许**由投影切片顺手编一个假 transcript 形来假装接上了 |
1490
+ | **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 臂后压缩失败可见;不接 = 同旧 |
1491
1491
  | **P-32** | 在册局限(0.36.0 两 wire 键过境后的**辖域**,非缺陷) @cli @web @desktop | **两键各只有一条腿,别按「两面能对上」写码**。① **`requiresRealApproval`**(#283)与 🆕 **`inputHasBidi`**(#341,0.43.0)**同族**:两位都只在**活卡帧**腿(`ToolApprovalFrame` → `ApprovalCardRequest`);**耐久腿零 stamp** —— 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` ⑨ 段(四种最像的载体名摆在行上,卡入参一个都不许长出来)· `run-selfheal-reopen-test.mjs` G1/G1b | ① **`requiresRealApproval` 在场 ⇒ 一切自动放行让位**(记住的规则 / `allow_session` / bypass 姿态),**缺席绝不读成 `false`**(缺席 = 不是安全类 ask **或** 老 server,两者同形不猜);durable 卡上今天**恒缺席**,别据此认为「durable 门都不是安全类」。② **`checkpointId` 只做两件事**:落日志/排障关联,以及经 `pendingGateIsProvablyDifferent(prev, next)` 做**单向**判断「id 变了 ⇒ 不是刚才那一行」。🔴 **`false` 是「证不出」不是「同一道门」**,🔴 **绝不**当跨调用去重键(server 选行是**无序 `LIMIT 1`**、同 session 可并存多条 pending 行 ⇒ 同一情形连续两次 409 可能报不同 id;也可能 id 不变而 `activeTaskId` 已换),🔴 **绝不**拿它去 join durable 队列行(必然落空,且落空与 legacy 行同形)。缺席是**三成因合流**(legacy 行 / 值没过 server 信任边界校验 / 整只材料读取失败),读作「不知道这道门叫什么」 |
1492
1492
 
1493
1493
  ### 7b. 决断链缺口
@@ -9254,3 +9254,103 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
9254
9254
  3. peer 不动;core <7.24.0 ⇒ `_sema_freed_tokens` 缺席。
9255
9255
 
9256
9256
  **包侧缺口:** ① CC-74 mcpProbe 候 server S-481;② CC-81 sdk 9.8.0 换钉 + K-04 `FleetWorkflowRow.errorCode?`(sdk 9.9.0,窗 10-03)随下一 minor;③ RH-2 第二步候排序;④ CC-36 候 core #874;其余同 §72。
9257
+
9258
+ ## §74 🆕 0.75.0 压缩的非 compacted 结局上 chrome 面(CC-89)+ peer sdk 地板 >=9.8.1(CC-81);minor
9259
+
9260
+ > **minor**:① 新内部臂 `compaction_outcome` 进 `INTERNAL_SDK_ARM_TYPES`(自建 print / stream-json 出口的端必须先表态);② peer `@sema-agent/sdk` 地板 `>=9.7.1` → `>=9.8.1`。型面 additive(`ChromeEvent` +1 臂;值导出零增,公面计数不动);零 wire 新键(帧由引擎铸,sdk ≥4.0.1 已有型)。
9261
+
9262
+ ### 74a. 处置表
9263
+
9264
+ | # | 面 | 本包做了什么 | 端要做什么 |
9265
+ |---|---|---|---|
9266
+ | S-0 🔴 **peer** | `@sema-agent/sdk` 地板 `>=9.7.1` → `>=9.8.1` | 四处同批抬齐 | 换钉 `^0.75.0` 的端把自己的 sdk 钉抬到 ≥9.8.1;<9.8.1 装本版只收 peer 警告,不改行为 |
9267
+ | S-1 🔴 | 内部臂 `compaction_outcome`(转录流里的新 `type`) | **added** 进 `INTERNAL_SDK_ARM_TYPES` | 🔴 自建 print / stream-json 出口的端:换钉**之前**给它加处置(吞,或转成自己面上的合法帧)。出口若是「逐型手列 + 末尾兜底原样透传」的形,不加 = 越界帧落到 stdout。建议把兜底前那一步改成按 `INTERNAL_SDK_ARM_TYPES.has(type)` 默认吞 —— 以后包每加一条内部臂都不再漏 |
9268
+ | S-2 | chrome 臂 `compaction_outcome` | **added**(`required:false`;`ChromeEvent` 联合 +1 成员) | 🔴 **编译迁移**:chrome 消费者若是穷举 switch(`default` 里 `never` 断言)或 `Record<ChromeArmKind, …>` 完整映射,换钉即编译红 —— 必须新增 `compaction_outcome` 分支(显式忽略或渲染都行);`required:false` 只说消费义务可选,不解除 TypeScript 穷举。运行期开集容忍的消费者(`default` 放行)零改。渲的话:一条可见提示(HUD / 通知行),`outcome` 原词带 default 臂;不渲 = 压缩失败继续对用户不可见 |
9269
+ | S-3 | `Capabilities.deviceExecutor.management` | 读器零行为变化;门钉 sdk 声明形 | 零改 |
9270
+ | S-4 🔴 | 面板:短命子代的最终用量(0.74.5 首见即终态零事件的代价面) | **fixed**:结过的行再来终态帧 ⇒ 恰一条 `fleet-row` 交用量、不再第二次 `end`;反序先缓后放 | 零改;消费端对已 ended 的行收到 `fleet-row` 要**更新用量、不改状态、不重开行**(cli 现行即如此) |
9271
+
9272
+ ### 74b. 缺席语义(逐键)
9273
+
9274
+ - `outcome`:必在,引擎**开集**原词(见过的:`mooted` / `failed`);按成员渲染必须带 default 臂,认不得的词照原词显示,别丢帧、别折成「失败」。
9275
+ - `trigger` 缺席 = 引擎没说(不是 `auto`);已知 `auto` / `manual` / `forced`,同为开集。
9276
+ - `reason` 缺席 = 没有说明文本(不编句);在场时是引擎说明文本(上游已脱敏),渲前仍按宿主自己的不可信文本纪律处理。
9277
+ - `eventId` 缺席 = 这条腿没带幂等键;重放去重只能在带键时做。
9278
+ - `laneProof.lane === 'subagent'` = 某只子代的压缩结局,别渲成主会话的。只能靠 `sourceTaskId` / `bgAgentId` 归因的帧**本包不发**(KL-22)。
9279
+ - 🔴 本臂**不是终态**:任务还在跑,别据它收 spinner / 判 run 结束。成功压缩不走本臂(权威 = 转录的 `compact_boundary`)。
9280
+ - 面板行结过之后再收到的 `fleet-row`:用量到了(同代)或新一代(随后必跟 `end`);缺席 `end` = 同代,不是行重开。判不出代际(帧与结过的记录都不带周期键)按同代处理 —— 真字节里子代行恒带周期键、通知 `end` 带 seq,判不出只在 root 形行上发生(KL-25)。
9281
+ - 补注(§73 的 `_sema_freed_tokens` 同理):判缺席一律 `=== undefined`。wire 帧上缺席是整键省略,进程内对象上可能是键在、值 `undefined` —— `in` / `hasOwnProperty` 在两面读数相反;`0` 是真值不是缺席。
9282
+
9283
+ ### 74c. 黑盒判据骨架
9284
+
9285
+ - **G1(CC-89 交互面)**:手动压缩撞任务收尾(引擎出 `compaction_outcome{outcome:"mooted"}`)⇒ 宿主收到恰一条 chrome `compaction_outcome`,`outcome` 逐字;转录面零新增行。
9286
+ - **G2(CC-89 print 面)**:同一场景在 stream-json 出口 ⇒ stdout 零条 `type:"compaction_outcome"` 行(端已表态);0.74.5 基线:帧在投影口即 `not_in_slice`,两面都零。
9287
+ - **G3(CC-89 lane)**:子代内压缩失败(帧带**非空串** `parentToolCallId`)⇒ chrome 的 `laneProof.lane === "subagent"`,主会话 HUD 不出「主会话压缩失败」;父键空串 ⇒ 判子流但构不成 lane ⇒ 不发。
9288
+ - **G4(CC-81)**:端装 sdk 9.8.1 + 本版 ⇒ 零 peer 警告;`deviceManagementVerbsAvailable` 四态读数与 0.74.5 逐位同。
9289
+ - **G5(W2)**:子代在两拍之间起步并结束(从没投影过 running)⇒ 面板那一行 `state:ended` 且 `totalTokens` / `toolUses` 在场(0.74.5 红基线:两位空);`end` 恰一次。
9290
+
9291
+ ### 74z. 逐键处置表
9292
+
9293
+ | # | 键 / 面 | 处置 | 坐标 / 理由 |
9294
+ |---|---|---|---|
9295
+ | 1 | `compaction_outcome.outcome` | **consumed**(原词) | `src/adapter/downstream/eventToSdkMessage.ts` `compactionOutcomeProjection` → `src/adapt/arms.ts` `compactionOutcomeArm` |
9296
+ | 2 | `compaction_outcome.trigger` / `.reason` | **consumed**(非空串才在场) | 同上 |
9297
+ | 3 | `compaction_outcome.eventId` / `.parentToolCallId` | **consumed**(幂等键 / lane 证明) | 同上 |
9298
+ | 4 | 只带 `sourceTaskId` / `bgAgentId` 的帧 | **declined**(不发 chrome) | `LaneProof` 没有后台子代的诚实形;KL-22 |
9299
+ | 6 | 面板短命子代最终用量 | **fixed** | `src/panelRunningHistory.ts`(ended 账 + 缓行)/ `src/fleetAgentPanelProjection.ts` 终态分支 / `src/engineAgentPanelStore.ts` 漏斗 end 四路径 |
9300
+ | 5 | `Capabilities.deviceExecutor.management` | **consumed**(0.74.2 起;读器仍按不可信结构读,本版由门 T1–T7 钉 sdk 声明形,读器与声明的关联只在门) | `src/deviceExecutorManagementCapability.ts` |
9301
+
9302
+ ### 74y. 🔴 三端升级必读(固定段式,[C295])
9303
+
9304
+ 1. 换钉 `^0.75.0` **之前**:自建 print / stream-json 出口给内部臂 `compaction_outcome` 加处置(S-1);同时把 sdk 钉抬到 ≥9.8.1。
9305
+ 2. 交互面:穷举型 chrome 消费者(`never` 断言 / 完整映射)换钉后**必须**补 `compaction_outcome` 分支才能编译(显式忽略即可);要渲就带 default 臂渲 `outcome` 原词、subagent lane 不渲进主会话。不渲 = 与 0.74.5 同(压缩失败不可见),不属行为丢失。
9306
+ 3. 面板:结过的行再收到 `fleet-row` = 用量到了,更新用量、不改状态、不重开行(cli 现行即如此);其余零变化:转录面零新增行;device 读器四态读数不变。
9307
+
9308
+ **包侧缺口:** ① CC-74 mcpProbe 候 server S-481;② K-04 `FleetWorkflowRow.errorCode?` 候 sdk 9.9.0(窗 10-03);③ RH-2 第二步候排序;④ CC-36 候 core #874;⑤ 后台子代的压缩结局无 lane 可挂(KL-22);其余同 §73。
9309
+
9310
+ ## §75 🆕 0.75.1 面板反序缓行残洞(外部复验 D1)+ 缓行遇同代 running 三向定形(B4)+ #969 提货 spawnName / agentType(CC-95);patch
9311
+
9312
+ > **patch**:型面 additive(`panel_task` tick 臂 +1 可选位 `spawnName?`),公面**值导出零增**;行为面三笔(下表 S-1 / S-2 / S-4)。票来源:外部验收方对 0.75.0 的复验读数(D1 / B4)+ cli 直讯 #969 提货两件(CC-95;core 09-20 确认消费面不变)。
9313
+
9314
+ ### 75a. 处置表
9315
+
9316
+ | # | 面 | 本包做了什么 | 端要做什么 |
9317
+ |---|---|---|---|
9318
+ | S-1 🔴 | 面板:反序缓行在一种到达序下**永远**放不出(短命子代最终用量丢) | **fixed**:`end` 归一加**第四条腿** —— 按缓行**自带的** wire 侧键(`transcriptId` 主 / 委派卡 id 退路)反查;放行走「代际三向判 → 同键核 → 经原漏斗归一」,整条腿永不 `return`(原 wire 键那一行自己的 `end` 不被吞) | 零改;消费端对已 `ended` 的行收到 `fleet-row` 仍是「更新用量、不改状态、不重开行」 |
9319
+ | S-2 🔴 | 面板:缓着终态行时后到的 `running` 帧被**无条件**当复活 ⇒ 最终用量被陈旧快照顶掉 | **fixed**:三向 —— 可证同代 = 陈旧快照(零事件、缓行留着)/ 可证更新 = 复活(作废缓行)/ 判不出 = 维持 0.75.0(KL-26) | 零改 |
9320
+ | S-3 | `panel_task` tick 臂 **+`spawnName?`**(additive) | **added**:结构读 wire `task_progress.spawnName`,非空串才带 | 想渲 spawn 名的端读这一位;**缺席 = 旧形的产生者**,渲占位归端,别拿 `name` 顶 |
9321
+ | S-4 🔴 | `subagent_lifecycle.agentType` 改**诚实来源**(此前取 tick 展示名 `name` = 上游由委派卡 `description` 派生 ⇒ 宿主 hook 收到的是任务描述) | **fixed**:三档 —— tick 结构读类型键(sdk 9.8.1 亲核:`task_progress` 上**没有**这一位,今天恒不命中)→ fleet 行帧 `agentType`(在被折进 `name` 之前留一份)→ 都没有 ⇒ **键缺席** | 🔴 **hook 侧加 absent 兜底**:`agentType` 从此可能不在场(以前恒在,但值是错的);缺席别渲空串、别编占位类型词 |
9322
+
9323
+ ### 75b. 缺席语义(逐键)
9324
+
9325
+ - tick `.spawnName` **缺席** = 产生者还没有这一位(旧 core / 旧 server),**不是**「没有名字」;在场时非空串,空串 / 非串按缺席。与 `name` 是两位(展示名 vs 声明名),两位都缺席 ⇒ 消费端只有 `taskId`。
9326
+ - `subagent_lifecycle.agentType` **缺席** = 不知道这只子代是什么**类型**,不是「无类型」。判缺席一律 `=== undefined`(本包对缺席是**整键省略**)。
9327
+ - fleet 行帧 `agentType` 空串 / 非串 ⇒ 不入账;同一行后续帧**缺席**这一位 ⇒ 账上已知值**不擦**(「这帧没说」≠「类型没了」)。
9328
+ - 缓行反查的两把键都要求**非空串**才算数;委派卡那把还要求那把 wire 键**未退役**(与「先发布的键为准」的退路键同律)。
9329
+ - 🔴 **多候选不放**:缓行反查命中多于一条可放行候选、或候选放行后会与那条 `end` 分流到两把键时,本包**一条都不放**(宁可晚交用量,不让一只子代分成两行)—— 那几条行的用量缺席,与 0.75.0 同。
9330
+
9331
+ ### 75c. 黑盒判据骨架
9332
+
9333
+ - **G1(D1 主判据)**:子代在两拍之间起止、tick 先按 wire id 上过屏、行帧车道随后给终态行(带最终用量)、通知车道 `end` 最后到 ⇒ 那一行 `state:ended` 且**两位用量在场**,`end` **恰一次**,全部事件**同一把 taskId**。0.75.0 红基线:一条空的 ended 行。
9334
+ - **G2(退路键腿)**:同上但终态行只带与 tick 同一张委派卡的父调用 id(不带 `transcriptId`)⇒ 读数与 G1 逐位同。
9335
+ - **G3(不张冠李戴)**:另一只子代的 `end` 到达 ⇒ 前一只的终态行**不**被放出(面板不多一行)。
9336
+ - **G4(B4 三向)**:缓着终态行(42/3,`cycleSeq:1`)后来同代 `running`(5/1)⇒ 最终显示 **42/3**;换 `cycleSeq:2` ⇒ 按复活走(5/1,前代终态不回来);两侧都不带周期键 ⇒ 与 0.75.0 逐位同(KL-26)。
9337
+ - **G5(CC-95 a)**:引擎发带 `spawnName` 的 `task_progress` ⇒ tick 事件带同值;旧引擎 ⇒ `'spawnName' in ev === false`。
9338
+ - **G6(CC-95 b)**:后台子代 fleet 行帧报 `agentType:"Explore"` ⇒ hook 收到的类型是 `Explore`;行帧不报(或同步委派子代根本没有 fleet 行)⇒ hook 收到的**类型缺席**。0.75.0 红基线:两种情形都收到 `description`。
9339
+
9340
+ ### 75z. 逐键处置表
9341
+
9342
+ | # | 键 / 面 | 处置 | 坐标 / 理由 |
9343
+ |---|---|---|---|
9344
+ | 1 | 缓行反查(`transcriptId` / 委派卡 id) | **fixed** | `src/panelRunningHistory.ts` 的缓行引用读口(遍历缓行表读它自带的键,**刻意不建第六本索引**)+ `src/engineAgentPanelStore.ts` `case 'end'` 反查段 |
9345
+ | 2 | 同代 running 帧 | **fixed** | `src/fleetAgentPanelProjection.ts` 陈旧快照判据;族扫同批改齐 `src/fleet/fleetProjection.ts` / `src/agentSession/backgroundView.ts` 的 `startedAt` 形核 |
9346
+ | 3 | `task_progress.spawnName` | **consumed**(结构读) | tick 投影臂 + tick 事件臂 additive 键 |
9347
+ | 4 | fleet 行 `agentType` | **consumed**(折进展示名之前留一份) | 新包内叶 `src/fleet/fleetRowAgentType.ts` |
9348
+ | 5 | tick 上的类型键 | **declined**(无出处) | sdk 9.8.1 `task_progress` 臂无此位 ⇒ 不读无出处的键;上游铸位后再提 |
9349
+
9350
+ ### 75y. 🔴 三端升级必读(固定段式,[C295])
9351
+
9352
+ 1. **hook 侧加 absent 兜底**:`subagent_lifecycle.agentType` 从本版起**可能缺席**(以前恒在,但值是委派卡的 `description`)。缺席时别渲空串、别编占位类型词,按各端契约省略该字段或填 `null`。**这是本版唯一需要端配合的一笔。**
9353
+ 2. **面板零改**:两件面板修复对消费端零接口变化。可观测差别只有两个:短命子代那一行的用量**不再为空**;也不再被陈旧的 running 快照顶成小数字。
9354
+ 3. **`spawnName` 想渲才接**(`required:false`):不接 = 与 0.75.0 逐字同;接的话按「缺席 = 旧形」渲占位,**绝不**用展示名顶替。
9355
+
9356
+ **包侧缺口:** ① 判不出代际的那一向仍丢用量(KL-26);①b 多候选 / 分流两把键时一条都不放 ⇒ 那几条行用量仍缺席;② tick lane 上**没有**类型键 —— 同步委派子代(无 fleet 行)的 `agentType` 今天恒缺席,补它要上游在 `task_progress` 铸一位(提货单待发);③ 其余同 §74(CC-74 候 server S-481 / K-04 候 sdk 9.9.0 / RH-2 第二步 / CC-36 候 core #874 @ 7.24.3 / KL-22)。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/client-core",
3
- "version": "0.74.5",
3
+ "version": "0.75.1",
4
4
  "description": "Client-side session runtime shared by every sema human client (TUI / web / desktop): sema wire frames (AgentEvent) -> CC session vocabulary (SDKMessage) with dual-plane output (transcript/chrome), deterministic transcript ids, lane discipline as a type, and the notification/dedup ledgers. Every CC-skin shape is collected here so the wire itself stays neutral. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -31,12 +31,12 @@
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@sema-agent/agent-types": ">=0.3.0",
34
- "@sema-agent/sdk": ">=9.7.1"
34
+ "@sema-agent/sdk": ">=9.8.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@sema-agent/agent-types": "^0.3.0",
38
38
  "@sema-agent/core": "~7.23.0",
39
- "@sema-agent/sdk": "^9.7.1",
39
+ "@sema-agent/sdk": "^9.8.1",
40
40
  "@sema-agent/settings-schema": "^2.0.0",
41
41
  "esbuild": "^0.27.4",
42
42
  "typescript": "^6.0.2"