@sema-agent/client-core 0.77.0 → 0.77.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.
package/CHANGELOG.md CHANGED
@@ -49,6 +49,16 @@
49
49
  > 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
50
50
  > commit 漏转在发布前就红,不再靠人记。
51
51
 
52
+ ## 0.77.1(2026-09-20)
53
+
54
+ > 主题:**读器族边界残留一只 + 外部验收本批发现**(patch;型面零变)。
55
+
56
+ ### Fixed
57
+
58
+ - **`rewind` 四子键恰读一次**(CC-108,外部验收 [7810]):此前值级谓词的 `.some` 与按名投影各读一次(短路 ⇒ 只第一个在场子键被读两次),子键是非幂等访问器时两向静默丢且回执不报。改为子键先快照一次,谓词与 stamp 都只看快照。**读序纪律射程成文**:「每个已知键恰读一次」= 顶层键 + `rewind` 四子键 + `settings` 子键。门 +F9b / F9c(子键 getter 计数 = 1;首读给值次读 undefined ⇒ 请求体带首读值)。
59
+ - **子代输出合并:机读位缺席时按回体 `output` 定处置**(CC-109,server ≥7.92.0 判据换源 core `details.replay`;wire 变更 [7811] ③):`cursorSemantics` 在 `type: background_agent / workflow` 的 poll 面缺席(此前恒 `full`),`retrieval_status: not_ready` 的应答不是输出体。此前缺席一律走文案臂 ⇒ 无标记正文 `prev + fresh` 追加 = 终局结果面重渲两遍、状态句被当输出。改为:在场照抄;缺席 ⇒ `output.retrieval_status` 在场且 ≠ `success` ⇒ **不合并**(保持已持有输出);`output.type ∈ {background_agent, workflow}` ⇒ **整段替换**;其余才走旧文案臂(老 server 行为不变)。`mergeTaskOutput` 第四形参 `output?: TaskOutputMergeHint | null`(`{ type?, retrieval_status? }`,sdk `SubagentOutputResult.output` 的子集;运行期仍按自有键结构读)additive;不抬 sdk 型面。stop 应答不过合并口,无事。门 pure B6a–B6e。
60
+ - **`projectMcpReconnectCapability` 只认自有键**(CC-107,外部验收 [7807]):此前用 `in` 判在场 ⇒ 原型链上的同名键当在场(凭空造一格);改 `Object.hasOwn`,与读器工厂族同律。**族边界成文**:0.77.0 所说「读器族整族改齐(11 只)」的族 = 经 `createEngineCapReader` 产出、返回 `{ kind }` 对象的读器(0.77.0 起 12 只,工厂门 F12 名单等值钉);本读口先于工厂(0.72.9)、返回裸三态字符串,不在那一族内,但病形同一 —— 0.77.0 的同形普查按文件名 `src/*Capability.ts` 扫,本函数住在 `mcpReconnect.ts`,漏扫。同形普查从此按公面导出名 `project*Capability` 扫(12 + 1 只)。门 `run-mcp-reconnect-test.mjs` +S4b2–S4b4(原型链键 ⇒ `not_reported` / 数组 caps ⇒ `undefined` / 自有键正控)。只对非 JSON 输入可见;三端存量零。
61
+
52
62
  ## 0.77.0(2026-09-20)
53
63
 
54
64
  > 主题:**请求装配逐键去向 + 两条写面归包 + 读器族口径整族改齐**(🔴 **minor**:四条**行为面 BREAKING**(型面零变)+ 三处闭集读数改口;公面值导出 1122 → **1143**;peer 地板不动 `>=9.8.1`)—— 请求装配 print 车道补座 + 逐键去向回执 + 表外键响亮拒(CC-101)· 会话策略写端口(CC-105)· 持久规则单步写面(CC-103)· workflow 子代面板行代际三向恢复真三向(CC-104,零改码)· 能力位读器族对非对象 caps 与原型链键的口径整族改齐 · 两处订正(F-A / F-B)。**成文改口段见 §79 79y,按表态制点名三端。**
package/README.md CHANGED
@@ -35,7 +35,7 @@ Renamed from **`@sema-agent/wire-cc-adapter`** (0.1.x, deprecated — see *Migra
35
35
 
36
36
  ## Scope
37
37
 
38
- **Version:** 0.77.0
38
+ **Version:** 0.77.1
39
39
 
40
40
  - **Today** — the adapter seam, the whole `adapt()` pipeline (all 14 A-layer arms plus the
41
41
  B/D/E tool-card layers), the notification/caps/model families, the adapter kernel (stream driver
@@ -198,7 +198,8 @@ export async function reconnectMcpServer(client, sessionId, server, opts) {
198
198
  export function projectMcpReconnectCapability(caps) {
199
199
  if (!isRecord(caps))
200
200
  return undefined;
201
- if (!('mcpReconnect' in caps) || caps.mcpReconnect === undefined)
201
+ // 🔴 只认自有键(0.77.1 CC-107,外部验收 [7807]):原型链上的同名键永远不会被序列化上 wire,读成在场 = 凭空造一格;与读器工厂族同律。
202
+ if (!Object.hasOwn(caps, 'mcpReconnect') || caps.mcpReconnect === undefined)
202
203
  return 'not_reported';
203
204
  if (caps.mcpReconnect === true)
204
205
  return 'available';
@@ -849,12 +849,18 @@ export function assembleTaskRequest(input, lane) {
849
849
  '它是四个具名请求键(resumeAt / resumeAtMode / rewindFiles / rewindFilesTo)的合写位,不是任意展开口。错误文本只报形状,不回显值。');
850
850
  }
851
851
  const rewindObj = present(rewindIn) ? rewindIn : {};
852
+ // 🔴 四子键**在这里恰读一次**(0.77.1 CC-108,外部验收 [7810]):快照之后,值级谓词与 stamp 都只看 `rewindWire`
853
+ // 这份普通数据 —— 此前谓词的 `.some` 与投影循环各读一次,非幂等子键访问器两向静默丢且回执不报。
852
854
  const rewindWire = {};
853
855
  for (const k of REWIND_KEYS) {
856
+ if (!hasOwn(rewindObj, k))
857
+ continue;
854
858
  const v = rewindObj[k];
855
859
  if (present(v))
856
860
  rewindWire[k] = v;
857
861
  }
862
+ /** 喂给 stamp 门的 `rewind` 值:缺席原样(undefined / null),在场则是已快照的四子键副本(不再碰入参访问器)。 */
863
+ const rewindForGate = present(rewindIn) ? rewindWire : rewindIn;
858
864
  // ── (乙) 不认识的键:响亮拒(理由见本节头注;只看**在场**的自有可枚举键)──────────────────────────
859
865
  const omitted = [];
860
866
  const omit = (key, cause) => {
@@ -929,7 +935,7 @@ export function assembleTaskRequest(input, lane) {
929
935
  gate[`settings.${sub}`] = carries(SETTINGS_KEY_ROUTES[sub], s[sub], `settings.${sub}`);
930
936
  continue;
931
937
  }
932
- gate[key] = carries(route, i[key], key);
938
+ gate[key] = carries(route, key === 'rewind' ? rewindForGate : i[key], key);
933
939
  }
934
940
  const on = (key) => gate[key] === true;
935
941
  const onSetting = (sub) => gate[`settings.${sub}`] === true;
@@ -25,7 +25,14 @@ export declare function fetchEngineTaskOutput(handle: string, opts?: {
25
25
  */
26
26
  /** 0.73.3(CC-60 A-D3):`cursorSemantics` 机读位(server ≥7.77.0 `taskOutput` 面):"cursor" = 读了就消费 ⇒ append;"full" = 全量重读安全 ⇒ 替换。
27
27
  * **缺席 / 认不出 ⇒ 现行文案标记臂兜底**(老 server 不发这个键;sdk 头注逐字「别把缺席当 full」)。 */
28
- export declare function mergeTaskOutput(prev: string, fresh: string, cursorSemantics?: string): string;
28
+ /**
29
+ * 回体 `output` 里参与合并判据的两枚提示位(sdk `SubagentOutputResult.output` 的子集;运行期仍按自有键结构读,不信任声明形)。
30
+ */
31
+ export interface TaskOutputMergeHint {
32
+ readonly type?: string;
33
+ readonly retrieval_status?: string;
34
+ }
35
+ export declare function mergeTaskOutput(prev: string, fresh: string, cursorSemantics?: string, output?: TaskOutputMergeHint | null): string;
29
36
  export type EngineTaskStopOutcome =
30
37
  /** 200:停止动作完成(status = wire 终态照实;重复 stop 幂等)。 */
31
38
  {
@@ -123,8 +123,11 @@ export async function fetchEngineTaskOutput(handle, opts) {
123
123
  const prev = accumulated.get(handle) ?? '';
124
124
  // A-D3:机读位优先 —— sdk 9.7.1 `SubagentOutputResult.cursorSemantics` 是**回体顶层**键(与 `output` 并列;generic taskOutput 面才铸,
125
125
  // 窄面 subagentOutput 不带 ⇒ 缺席走文案臂)。异源对抗复审:首版读成 `output.cursorSemantics`,正常回体恒回落文案臂。
126
+ // 0.77.1 CC-109(server ≥7.92.0):机读位缺席时把回体 `output` 的 `type` / `retrieval_status` 交给合并判据(见 mergeTaskOutput 头注);
127
+ // 声明形只到 `TaskOutputMergeHint`(sdk 回体 `output` 的子集),运行期在 `terminalOutputHint` 里再按自有键结构读一遍(不信任声明形)。
126
128
  const cursorSemantics = r?.cursorSemantics;
127
- const merged = mergeTaskOutput(prev, fresh, typeof cursorSemantics === 'string' ? cursorSemantics : undefined);
129
+ const output = r?.output;
130
+ const merged = mergeTaskOutput(prev, fresh, typeof cursorSemantics === 'string' ? cursorSemantics : undefined, output);
128
131
  accumulated.set(handle, merged);
129
132
  const out = r?.output ?? {};
130
133
  if (engineWireDebugEnabled()) {
@@ -143,23 +146,22 @@ export async function fetchEngineTaskOutput(handle, opts) {
143
146
  return null;
144
147
  }
145
148
  }
146
- /**
147
- * [1505] 契约标记判别(头注):spool 全量 → 替换;cursor 增量 → append;无标记 → 保守
148
- * append-if-changed(与上次逐字节相同视为幂等重读,不重复)。空 content 不动累积。
149
- * 🔴 B6 提出成具名纯函数 —— 它是这条读面唯一会「把输出显示成两遍」的地方,值得被直接断言。
150
- * 🔴 REF-CC-域词表-06:标记判读本身**提单源**到 `toolResult.ts` 的 `spoolMarkerOf`(它与本文件
151
- * 曾经各写一份 `.includes()` 判读,同一个协议标记有两处互不知情的判读点——现在两处判读结果
152
- * 对同一输入恒一致,因为已经是同一个函数)。
153
- */
154
- /** 0.73.3(CC-60 A-D3):`cursorSemantics` 机读位(server ≥7.77.0 `taskOutput` 面):"cursor" = 读了就消费 ⇒ append;"full" = 全量重读安全 ⇒ 替换。
155
- * **缺席 / 认不出 ⇒ 现行文案标记臂兜底**(老 server 不发这个键;sdk 头注逐字「别把缺席当 full」)。 */
156
- export function mergeTaskOutput(prev, fresh, cursorSemantics) {
149
+ export function mergeTaskOutput(prev, fresh, cursorSemantics, output) {
157
150
  if (fresh.length === 0)
158
151
  return prev;
159
152
  if (cursorSemantics === 'full')
160
153
  return fresh;
161
154
  if (cursorSemantics === 'cursor')
162
155
  return prev + fresh;
156
+ // 🔴 机读位缺席(0.77.1 CC-109,server ≥7.92.0 判据换源 core `details.replay`):
157
+ // · `type: background_agent / workflow` 的 poll 面**不铸**这一位(终局结果面,再 poll 答同一段文本)⇒ 整段替换,绝不追加;
158
+ // · `retrieval_status` 在场且不是 `success`(not_ready / error 无已消费正文)⇒ 那段 `content` 是一句状态说明不是输出体 ⇒ 不合并;
159
+ // · 其余(老 server / background_bash 无机读位)才走下面的文案臂。判据只在缺席时看 `output`,在场的机读位永远优先。
160
+ const hint = terminalOutputHint(output);
161
+ if (hint === 'not_output')
162
+ return prev;
163
+ if (hint === 'snapshot')
164
+ return fresh;
163
165
  const marker = spoolMarkerOf(fresh);
164
166
  if (marker === 'full')
165
167
  return fresh;
@@ -167,6 +169,19 @@ export function mergeTaskOutput(prev, fresh, cursorSemantics) {
167
169
  return prev + fresh;
168
170
  return fresh === prev ? prev : prev + fresh;
169
171
  }
172
+ /** 回体 `output` 的两枚提示位(只读自有键,坏形一律 `undefined` = 没提示)。 */
173
+ function terminalOutputHint(output) {
174
+ if (output === null || typeof output !== 'object' || Array.isArray(output))
175
+ return undefined;
176
+ const o = output;
177
+ const rs = Object.hasOwn(o, 'retrieval_status') ? o.retrieval_status : undefined;
178
+ if (typeof rs === 'string' && rs !== 'success')
179
+ return 'not_output';
180
+ const type = Object.hasOwn(o, 'type') ? o.type : undefined;
181
+ if (type === 'background_agent' || type === 'workflow')
182
+ return 'snapshot';
183
+ return undefined;
184
+ }
170
185
  /**
171
186
  * 🔴 **G13 删债(先红后绿)**:taskStop 的 409 冲突分类 —— 手抄 code 判 → typed
172
187
  * `TaskStopConflictError`(SDK 把**任何** `stop.*` 前缀码映到该类,errors.js:277-278;
@@ -19,7 +19,7 @@
19
19
 
20
20
  | 项 | 值 | 真源 |
21
21
  |---|---|---|
22
- | 本包 | `@sema-agent/client-core` **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 八条)|
22
+ | 本包 | `@sema-agent/client-core` **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
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` |
@@ -9565,3 +9565,35 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
9565
9565
  4. **成文改口(旧判据眼作废 → 新判据眼)**:① print 车道「不带 systemPrompt / reasoningEffort / excludeTools」作废 → 带(live 门后者仍受 live 门);② 「表外键静默丢」作废 → `TypeError` 点名;③ 能力位读器「`[]` ⇒ `not_reported` / 原型链键 ⇒ `present`」作废 → `unobserved` / `not_reported`;④ `classifyRulesFailure` 的 `body-shape` / `method-refused` 从 `error` 桶挪出;⑤ `scopeExternalOriginVerdict` 缺第二形参从「只在干净路上裸 TypeError」→ 入口具名错误;⑥ `TaskRequestInput.agents` 从型面删;⑦ 0.76.1 曾说「新两只读器答畸形」作废 → 这一族没有畸形臂(§77 ⑫ 二次订正);⑧ `classifyRulesFailure` 旧判据「501 无码仍 lane-unavailable(status 也是判据)」作废 → 只认机器码,无码 501 ⇒ `error`;⑨ 会话策略写面(本版新面,面世前改口):无码 4xx 从 `write_refused` → `write_indeterminate`,`written` 前多一道回执对账(`write_receipt_mismatch`),坏 `add` 入口抛。
9566
9566
 
9567
9567
  **包侧缺口:** ① `outputSchema` 的下行半场(结构化产出不落 CC 形 result 帧)· ② `--thinking enabled|adaptive|disabled` → 档位词映射不铸(`enabled` / `adaptive` 无 wire 词,铸映射 = 替用户编档位)· ③ `maxTokens` / `outputRetries` 同座孪生零来源未加座 · ④ 第三条闭集请求腿(控制面路由器内部的私有构造器)零回执 · ⑤ 持久规则写面:sdk 地板还没带 `rules.write` ⇒ `RulesFacade.write` 可选、两只型自铸,抬地板那版同批做三件(取 sdk 型 / `write` 转必填 / `client_too_old` 退役);拒体 `reason` / `detail` 读不到;405 出处无证据;本包不做自动重试与对账 · ⑥ 会话策略:放松方向(运维身份)没有编排;「每道工具门重读」这条 wire 上没有位,措辞只说「下一道工具门」;能力位缺席按「藏入口」处置与契约表那一列「按 501 探」字面相反(路由与能力位同一提交首入,键缺席的 worker 必无此路由;读口不受 gate)· ⑦ 能力位读器族原型链那一轴整族改 hasOwn 后,若某端曾靠原型链默认值(三端存量为零)要改按自有键 · ⑧ `wa*` 行:真会丢用量的只剩「这个订阅者连 spawn 帧都没见过」那一档(KL-26)。
9568
+
9569
+ ## §80 🆕 0.77.1 外部验收三件回填:读器族边界残留 / rewind 子键恰读一次 / 子代输出合并缺席面(patch;型面 additive 一处)
9570
+
9571
+ > **patch**:公面值导出不变(1143);`mergeTaskOutput` 第四形参 `output?: TaskOutputMergeHint | null`(`{ type?, retrieval_status? }`)**additive**;peer 地板不动 `>=9.8.1`;零 wire 新键。三件都是 0.77.0 外部验收([7807] / [7810])与 server 7.92.0 发车帖([7811] ③)当天回填,全部红先绿后 + 门格。按 C-R69 全速模式:patch 不走表态制,板上一帖即通知。
9572
+
9573
+ ### 80a. 处置表
9574
+
9575
+ | # | 面 | 本包做了什么 | 端要做什么 |
9576
+ |---|---|---|---|
9577
+ | S-1 | `projectMcpReconnectCapability`(CC-107) | **changed(闭集读数)**:只认自有键,原型链上的 `mcpReconnect` ⇒ `not_reported`(此前当在场);数组 caps ⇒ `undefined` 不变 | 零改(只对非 JSON 输入可见) |
9578
+ | S-2 | `rewind` 四子键读序(CC-108) | **fixed**:子键先快照一次,值级谓词与 stamp 都只看快照;此前第一个在场子键被读两次 | 子键用普通数据的端零改;用访问器的端从此得到首读值(与顶层键同律) |
9579
+ | S-3 | 子代输出合并 `mergeTaskOutput`(CC-109;server ≥7.92.0) | **fixed + additive**:`cursorSemantics` 在场照抄;缺席 ⇒ `output.retrieval_status` 在场且 ≠ `success` ⇒ **不合并**;`output.type ∈ {background_agent, workflow}` ⇒ **整段替换**;其余才走旧文案臂 | 经本包 `engineTaskHandleWire` 读子代输出的端零改(自动生效);自己直调 `mergeTaskOutput` 的端把回体 `output` 作第四实参传入,否则在 7.92.0 上终局结果面会重渲两遍 |
9580
+
9581
+ ### 80b. 缺席语义(逐键)
9582
+
9583
+ - `projectMcpReconnectCapability`:键缺席 / 原型链键 ⇒ `not_reported`(老 server 判不了,不折 `unavailable`);非对象 / 数组 / 非布尔 ⇒ `undefined`。**读器族边界成文**:「读器族」= `src/*Capability.ts` 经 `createEngineCapReader` 产出、返回 `{ kind }` 对象的读器(0.77.0 起 12 只,工厂门 F12 名单等值钉);本读口在族外(裸三态字符串,先于工厂),但在场判据从此同律;同形普查按公面导出名 `project*Capability`(12 + 1 只)扫,不按文件名。
9584
+ - `rewind`:缺席(undefined / null)不进回执;非对象 / 表外子键 ⇒ `TypeError`(0.77.0 不变);四子键**恰读一次**(0.77.1 起);「每个已知键恰读一次」的射程 = 顶层键 + `rewind` 四子键 + `settings` 子键。
9585
+ - `mergeTaskOutput`:`cursorSemantics` 在场 = core 说了就照抄(`full` 替换 / `cursor` 追加);缺席时 `output` 非对象 / 无 `type` / 无 `retrieval_status` ⇒ 旧文案臂(spool 标记 / 幂等重读);`retrieval_status` 是字符串且 ≠ `success` ⇒ 返回已持有输出(状态句不是输出体);`type` 是 `background_agent` / `workflow` ⇒ 返回 `fresh`。**stop 应答不过合并口**。7.92.0 之前的 server 在这两种 type 上恒铸 `full`,行为逐字节同。
9586
+
9587
+ ### 80c. 黑盒判据骨架
9588
+
9589
+ - **G1**:`projectMcpReconnectCapability(Object.create({ mcpReconnect: true }))` ⇒ `'not_reported'`;`([true])` ⇒ `undefined`;`({ mcpReconnect: true })` ⇒ `'available'`(0.77.0 上第一格答 `'available'`)。
9590
+ - **G2**:四子键各挂 getter 计数,`assembleTaskRequest({ …, rewind }, 'interactive')` ⇒ 每子键计数 === 1 且四键上请求体;`'print'` ⇒ 计数仍各 1、不上请求体、回执一行 `rewind/off_lane`;`resumeAt` 首读给 `'first'` 次读 undefined ⇒ 请求体 `resumeAt === 'first'`(0.77.0 上第一个在场子键计数 2)。
9591
+ - **G3**:`mergeTaskOutput('OLD','FINAL',undefined,{type:'background_agent'})` ⇒ `'FINAL'`;`('OLD','not ready…',undefined,{type:'background_agent',retrieval_status:'not_ready'})` ⇒ `'OLD'`;`('OLD','NEW','cursor',{type:'background_agent'})` ⇒ `'OLDNEW'`(在场优先);`('old','--- new stdout ---z',undefined,{type:'background_bash'})` ⇒ 追加(旧臂不变);`('OLD','FINAL',undefined,{type:'workflow',retrieval_status:'success'})` ⇒ `'FINAL'`(0.77.0 上第一格答 `'OLDFINAL'`、第二格答 `'OLDnot ready…'`)。
9592
+
9593
+ ### 80y. 🔴 三端升级必读(固定段式,[C295])
9594
+
9595
+ 1. **换钉 `^0.77.1` 之前**:零动作;自己直调 `mergeTaskOutput` 的端补传第四实参(回体 `output`)。
9596
+ 2. **零改的面**:0.77.0 §79 全部内容原样适用;四条行为面 BREAKING 不变;公面 1143 不变。
9597
+ 3. **成文改口**:① 「每个已知键恰读一次」射程从「顶层键」改为「顶层键 + `rewind` 四子键 + `settings` 子键」;② 「读器族 11 只整族改齐」补族边界定义(经工厂、返回 `{ kind }`),族外裸字符串读口 `projectMcpReconnectCapability` 本版同律;③ 「型面零变」(0.77.0)指 wire 键 / ChromeEvent 臂零变,不是 `.d.ts` 零变(0.77.0 的 `.d.ts` 差异 = `taskRequest.d.ts` −`agents` +两函数两常量、`persistedRulesWire.d.ts` +写面、`sessionPolicy*` 两只新文件);④ 采外部验收红基线读数:0.76.2 上 `rewind:{model:'HIJACKED'}` 真能覆盖顶层 `model`、`rewind:{maxCostUsd:'5'}` 真能绕过坏值门、`rewind:'abc'` 摊下标键;`settings` 表外子键也抛(0.77.0 §79c G1 有,发车帖正文漏)。
9598
+
9599
+ **包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(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)。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/client-core",
3
- "version": "0.77.0",
3
+ "version": "0.77.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",