@sema-agent/client-core 0.80.0 → 0.80.2

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,18 @@
49
49
  > 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
50
50
  > commit 漏转在发布前就红,不再靠人记。
51
51
 
52
+ ## 0.80.2(2026-09-22)
53
+
54
+ ### Fixed
55
+ - **`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到**(CC-137):sdk 11.1.0 起把错误体上的非具名键收进 `APIError.extra`,这一码映射成的 `ConflictError` 没有具名位 ⇒ 顶层没有,而读口只读顶层 ⇒ 真调用链上文案第三句永远不带保留秒数与 runId,只有壳自造的普通对象才读得到。现在体源结构位统一 **顶层有效值优先、`extra` 兜底**(单铸读口;`resumeRetryLaterFromError` 的 `retryAfterSec`、`scenarioDenyFromError` 的 `allowlist`、429 用量窗的 `retryAfterSec` 因 sdk 子类本有具名位,行为不变、只多了 extra 兜底);头源 `retryAfterMs`(sdk 从 `Retry-After` 算)只读具名位,体里的同名字段不当窗。窄读域不变。射程:只影响经 sdk `APIError` 抛出的错误;直接喂普通对象的端行为不变。
56
+
57
+ ## 0.80.1(2026-09-22)
58
+
59
+ ### Changed
60
+ - **去键重发判据的措辞按「铸」计**(CC-143):0.80.0 接入文档 §87 把去键重发写成「带键的体恰一次」,而每次投递内部的瞬态传输重试会把**同一只已铸的体**再投一次 —— 首发(带键)投递上断网时按字面会判红。权威读法自本版成文:**带键的体被铸恰一次(POST 几次随传输层)/ 去键的体被铸恰一次 / 绝无第三种体**;实现一个字节未改,只改判据句。§87 已发段不回改,读法以本段与 §88 为准。
61
+ - **模型预设表 `deepseek` 项改上游闭集真名**(CC-144):`deepseek-v4-flash` 是别名(打它回包 `model: deepseek-flash`),预设项 id 改为 `deepseek-flash`,其余字段不变;端若钉了别名字面请换真名。
62
+ - **接入文档段落自带射程限定词**(CC-143):自 §88 起,每条可验判据句旁边写明它在什么条件下不成立(时间射程:按哪一版的读法;车道射程:只覆盖哪条腿),形式为「(本节按 x.y.z 的读法;若与发车帖不一致以发车帖为准)」或「(某某部署形;另一条腿另有值)」;已发段不回改。
63
+
52
64
  ## 0.80.0(2026-09-22)
53
65
 
54
66
  > 主题:**策略拒的归因上 wire + 删除规则后果句归包 + `/mcp` 详情卡两腿分说归包**(🔴 **minor**:peer sdk 地板 `>=11.2.1` → **`>=11.3.0`**;根公面运行期导出 1184 → **1195**;型面 additive)。一次策略自动拒从此在 wire 上说得出自己是机器拒的,读回时归进 CC 的规则桶;三端各自铸过的两处壳侧措辞与判据(删除规则确认卡的后果句、`/mcp` 详情卡的两腿分说)收进本包,并同批改掉壳侧带过来的八处说满的话。
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.80.0
38
+ **Version:** 0.80.2
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
@@ -119,7 +119,7 @@
119
119
  "maxTokens": 384000
120
120
  },
121
121
  {
122
- "id": "deepseek-v4-flash",
122
+ "id": "deepseek-flash",
123
123
  "contextWindow": 1000000,
124
124
  "maxTokens": 384000,
125
125
  "cheapHint": true
@@ -1,3 +1,4 @@
1
+ import { readErrorNumber, readErrorString } from './wireFailureShape.js';
1
2
  import { RESUME_CONTEXT_UNAVAILABLE, RESUME_PLACEMENT_MISMATCH, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_ENV_FAILED, RESUME_TOOL_UNAVAILABLE, } from './engineErrorCodes.js';
2
3
  import { resumeRetryLaterFromError } from './wireErrorTriage.js';
3
4
  export const RESUME_REFUSAL_CODES = Object.freeze([
@@ -67,9 +68,10 @@ export function resumeContextUnavailableFromError(err) {
67
68
  const e = err;
68
69
  if (e.errorCode !== RESUME_CONTEXT_UNAVAILABLE)
69
70
  return null;
70
- const sec = e.staleAfterSec;
71
- const staleSec = typeof sec === 'number' && Number.isInteger(sec) && sec >= 1 ? sec : undefined;
72
- const runId = typeof e.runId === 'string' && e.runId.length > 0 ? e.runId : undefined;
71
+ const sec = readErrorNumber(err, 'staleAfterSec');
72
+ const staleSec = sec !== undefined && Number.isInteger(sec) && sec >= 1 ? sec : undefined;
73
+ const rid = readErrorString(err, 'runId');
74
+ const runId = rid !== undefined && rid.length > 0 ? rid : undefined;
73
75
  return {
74
76
  code: RESUME_CONTEXT_UNAVAILABLE,
75
77
  ...(staleSec !== undefined ? { staleAfterSec: staleSec } : {}),
@@ -1,3 +1,4 @@
1
+ import { readErrorNumber, readErrorStringList } from './wireFailureShape.js';
1
2
  import { DRAINING_ERROR_CODE, RESUME_AT_ERROR_CODE_PREFIX, RESUME_RETRY_LATER_CODES, RESUME_USAGE_WINDOW_EXHAUSTED, SCENARIO_NOT_ALLOWED_ERROR_CODE, } from './engineErrorCodes.js';
2
3
  export const WIRE_NETWORK_ERROR_PATTERN = /fetch failed|ECONNREFUSED|ECONNRESET|ETIMEDOUT|EAI_AGAIN|ENOTFOUND|EHOSTUNREACH|ENETUNREACH|EPIPE|socket hang up|UND_ERR|terminated|other side closed/i;
3
4
  function wireErrorDetail(err) {
@@ -63,9 +64,7 @@ export function scenarioDenyFromError(err) {
63
64
  const e = err;
64
65
  if (e.status !== 400 || e.errorCode !== SCENARIO_NOT_ALLOWED_ERROR_CODE)
65
66
  return null;
66
- const allowlist = Array.isArray(e.allowlist)
67
- ? e.allowlist.filter((x) => typeof x === 'string' && x.length > 0)
68
- : [];
67
+ const allowlist = (readErrorStringList(err, 'allowlist') ?? []).filter((x) => x.length > 0);
69
68
  return { allowlist };
70
69
  }
71
70
  export function resumeRetryLaterFromError(err) {
@@ -75,7 +74,7 @@ export function resumeRetryLaterFromError(err) {
75
74
  const code = e.errorCode;
76
75
  if (typeof code !== 'string' || !RESUME_RETRY_LATER_CODES.includes(code))
77
76
  return null;
78
- const sec = e.retryAfterSec;
77
+ const sec = readErrorNumber(err, 'retryAfterSec');
79
78
  const windowSec = typeof sec === 'number' && Number.isInteger(sec) && sec >= 1 ? sec : undefined;
80
79
  return {
81
80
  code,
@@ -5,4 +5,7 @@ export interface WireFailureShape {
5
5
  committed?: 'no' | 'unknown' | 'unreadable';
6
6
  message: string;
7
7
  }
8
+ export declare function readErrorNumber(o: object, key: string): number | undefined;
9
+ export declare function readErrorString(o: object, key: string): string | undefined;
10
+ export declare function readErrorStringList(o: object, key: string): readonly string[] | undefined;
8
11
  export declare function wireFailureShapeOf(e: unknown): WireFailureShape;
@@ -6,6 +6,47 @@ function readGuarded(o, key) {
6
6
  return undefined;
7
7
  }
8
8
  }
9
+ function readErrorSlot(obj, key, accept) {
10
+ const o = obj;
11
+ let top;
12
+ try {
13
+ top = o[key];
14
+ }
15
+ catch {
16
+ top = undefined;
17
+ }
18
+ if (accept(top))
19
+ return top;
20
+ let extra;
21
+ try {
22
+ extra = o['extra'];
23
+ }
24
+ catch {
25
+ extra = undefined;
26
+ }
27
+ if (typeof extra !== 'object' || extra === null || Array.isArray(extra))
28
+ return undefined;
29
+ let fromExtra;
30
+ try {
31
+ fromExtra = Object.hasOwn(extra, key) ? extra[key] : undefined;
32
+ }
33
+ catch {
34
+ fromExtra = undefined;
35
+ }
36
+ return accept(fromExtra) ? fromExtra : undefined;
37
+ }
38
+ export function readErrorNumber(o, key) {
39
+ const v = readErrorSlot(o, key, (x) => typeof x === 'number');
40
+ return typeof v === 'number' ? v : undefined;
41
+ }
42
+ export function readErrorString(o, key) {
43
+ const v = readErrorSlot(o, key, (x) => typeof x === 'string');
44
+ return typeof v === 'string' ? v : undefined;
45
+ }
46
+ export function readErrorStringList(o, key) {
47
+ const v = readErrorSlot(o, key, (x) => Array.isArray(x));
48
+ return Array.isArray(v) ? v.filter((x) => typeof x === 'string') : undefined;
49
+ }
9
50
  export function wireFailureShapeOf(e) {
10
51
  const o = e ?? {};
11
52
  const status = readGuarded(o, 'status');
@@ -1,3 +1,4 @@
1
+ import { readErrorNumber } from './wireFailureShape.js';
1
2
  import { USAGE_WINDOW_EXHAUSTED } from './engineErrorCodes.js';
2
3
  export const CONFLICT_APPROVAL_SETTLED = 'conflict.approval_settled';
3
4
  export const CONFLICT_RUN_NOT_RUNNING = 'conflict.run_not_running';
@@ -52,11 +53,13 @@ export function usageWindowExhaustedFromError(err) {
52
53
  const is429 = rawStatus === 429 || (rawStatus === undefined && (o.name === 'UsageWindowExhaustedError' || o.name === 'RateLimitedError'));
53
54
  if (!is429)
54
55
  return null;
55
- const sec = nonNegativeFinite(o.retryAfterSec)
56
- ? Math.ceil(o.retryAfterSec)
57
- : nonNegativeFinite(o.retryAfterMs)
58
- ? Math.ceil(o.retryAfterMs / 1000)
59
- : undefined;
56
+ const rawSec = readErrorNumber(o, 'retryAfterSec');
57
+ const sec = nonNegativeFinite(rawSec)
58
+ ? Math.ceil(rawSec)
59
+ : (() => {
60
+ const rawMs = o.retryAfterMs;
61
+ return nonNegativeFinite(rawMs) ? Math.ceil(rawMs / 1000) : undefined;
62
+ })();
60
63
  return { code: USAGE_WINDOW_EXHAUSTED, ...(sec !== undefined ? { retryAfterSec: sec } : {}) };
61
64
  }
62
65
  catch {
@@ -19,7 +19,7 @@
19
19
 
20
20
  | 项 | 值 | 真源 |
21
21
  |---|---|---|
22
- | 本包 | `@sema-agent/client-core` **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 八条)|
22
+ | 本包 | `@sema-agent/client-core` **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
23
  | peer:wire 契约 | `@sema-agent/sdk` **>=11.2.1**(value-level,非 type-only;**0.79.0 抬版**: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` |
@@ -9599,6 +9599,68 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
9599
9599
 
9600
9600
  **包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(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
9601
 
9602
+ ## §89 🆕 0.80.2(未发布)四处错误读口改「extra 优先、顶层兜底」(patch;零 wire 键、零投影臂;根公面不动)
9603
+
9604
+ > **patch**:零 wire 键、零投影臂、根公面运行期导出 **1195 → 1195**。一件行为修复(CC-137,DS-23 ① 同形):`conflict.resume_context_unavailable` 映射成的 `ConflictError` 没有具名位,`staleAfterSec` / `runId` 只在 `APIError.extra`(sdk 11.1.0 起体上非具名键都收进那里),而读口只读顶层 ⇒ 真调用链上恒缺席。现在体源结构位**顶层有效值优先、`extra` 兜底**,单铸读口;有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底;头源 `retryAfterMs` 只读具名位。窄读域与缺席语义一字不变。
9605
+ > 🔴 **射程限定词(本节按 0.80.2 的读法;若与发车帖不一致以发车帖为准)**:本段每条判据句旁的括号写明它在什么条件下不成立。
9606
+
9607
+ ### 89a. 处置表
9608
+
9609
+ | # | 面 | 本包做了什么 | 端要做什么 |
9610
+ |---|---|---|---|
9611
+ | S-1 | `resumeContextUnavailableFromError(err).staleAfterSec` / `.runId`(CC-137) | **fixed**:真 SDK 形(`ConflictError`,结构位只在 `err.extra`)读得出;顶层是那个类型的有效值时取顶层,否则落 `extra`;`extra` 取值器抛 / 非普通对象 ⇒ 当缺席 | 零改;此前靠自造对象绕过的端可以删掉那层搬运 |
9612
+ | S-2 | `resumeRetryLaterFromError(err).retryAfterSec` / `waitable`(CC-137) | **unchanged + 兜底**:`ResumeRetryLaterError` 本有具名 `retryAfterSec`(sdk 从体算好),0.80.1 就读得到;本版只加 `extra` 兜底(未映射到子类时) | 零改 |
9613
+ | S-3 | `scenarioDenyFromError(err).allowlist`(CC-137) | **unchanged + 兜底**:`ScenarioNotAllowedError` 本有具名 `allowlist`;本版只加 `extra` 兜底 | 零改 |
9614
+ | S-4 | 429 用量窗读口 `retryAfterSec` / `retryAfterMs`(CC-137) | **unchanged + 兜底**:`retryAfterSec` 具名位本有(只加 extra 兜底);`retryAfterMs` 是头源具名位,只读具名位、体字段不当窗;体秒有效时**不碰**头毫秒(惰性短路与 0.80.1 一致:一个抛出的 `retryAfterMs` 取值器不会把整只拒绝吞成 null) | 零改 |
9615
+
9616
+ ### 89b. 缺席语义(逐键)
9617
+
9618
+ - 四处窄读域不变(整数 ∧ ≥1 / 非空串 / 字符串数组 / 非负有限);顶层是那个类型的值即取顶层(哪怕是 0,窄读再判),不是那个类型(缺席 / `null` / 串)才落 `extra`;`extra` 里的坏值同样降**缺席**不降 0(车道射程:仅 sdk `APIError` 形;普通对象照旧只读顶层,顶层缺席才看 `extra`)。
9619
+
9620
+ ### 89c. 黑盒判据骨架
9621
+
9622
+ - **O-G10**(本版证明;时间射程:0.80.1 及以前前半 FAIL):sdk 映射器 `toApiError(409, { errorCode:'conflict.resume_context_unavailable', staleAfterSec:120, runId:'run-1' })` 的产物(`ConflictError`,顶层无位)⇒ 读数带 `staleAfterSec:120` 与 `runId:'run-1'`;同形自造 `{ …, get extra(){…} }` 亦同。`resumeRetryLaterFromError` / `scenarioDenyFromError` / 429 读口在结构位**只在** `extra` 的自造形上同样读得出(未映射到子类的兜底路)。
9623
+ - **O-G11**(回归约束):顶层与 `extra` 都有时取顶层(`staleAfterSec` 顶层 5 / extra 120 ⇒ 5;顶层 `null` ⇒ 120);头源:`toApiError(503, { errorCode:'draining', retryAfterMs:0 }, 15000)` ⇒ 退避 15000(体字段不盖头部窗),无头 + 体 0 ⇒ 走默认梯;同内容放顶层(普通对象)四处读数与 0.80.1 逐字相同。
9624
+
9625
+ ### 89y. 🔴 三端升级必读(固定段式,[C295])+ 成文改口
9626
+
9627
+ 1. **换钉 `^0.80.2` 之前**:零前置;peer sdk 地板 `>=11.3.0` 不动。
9628
+ 2. **逐面**:四处读口的消费端零改;若端曾为绕过此病自己从 `err.extra` 搬运过这些位,可退役那层搬运。
9629
+ 3. **成文改口(旧判据眼作废 → 新判据眼)**:⑲ §84 那句「`staleAfterSec` / `runId` sdk 今天没搬上来 ⇒ 缺席,出键当天自动填满」作废(11.1.0 起搬在 `extra` 里、这一码映射成 `ConflictError` 无具名位,读口今起会读);⑳ 本段第一稿的「四处读口在真 SDK 上恒缺席 / extra 优先」作废(发前订正):三处有具名子类位本就读得到,规则是顶层有效值优先、extra 兜底。
9630
+
9631
+ **包侧缺口:** ① 读抛出物结构位的口约 12 处,本版改四处(逐口对 sdk 具名位:基类 `status` / `errorCode` / `retriable` / `message` + 子类 `retryAfterMs` / `retryAfterSec` / `allowlist` / `runId`),其余读的是具名位或非错误对象,未动;② 429 读口 `retryAfterSec`(体,秒)优先于 `retryAfterMs`(头)是 0.73.1 起的既有序,头 15s + 体 0 ⇒ 0 秒提示,本版未动(同一个量两源相左时该信谁候上游一句话)。
9632
+
9633
+ ## §88 🆕 0.80.1(未发布)判据措辞按「铸」计 + 段落自带射程限定词 + 预设表闭集真名(patch;根公面不动;零 wire 键、零投影臂)
9634
+
9635
+ > **patch**:零 wire 键、零投影臂、根公面运行期导出 **1195 → 1195**;本段是三件**文档 / 数据表**改动 —— ① 去键重发判据句改按「铸」计(CC-143);② 段落自带**射程限定词**的形式定下并自本段起向前执法(CC-143);③ 模型预设表 `deepseek` 项改上游闭集真名(CC-144,候本批落地)。
9636
+ > 🔴 **射程限定词(本节按 0.80.1 的读法;若与发车帖不一致以发车帖为准)**:本段每条判据句旁的括号写明它在什么条件下不成立 —— **时间射程**(按哪一版的读法)或**车道射程**(只覆盖哪条腿)。读者据此知道一句话「只对一半」的那一半在哪,不必去别处找权威读法。
9637
+
9638
+ ### 88a. 处置表
9639
+
9640
+ | # | 面 | 本包做了什么 | 端要做什么 |
9641
+ |---|---|---|---|
9642
+ | S-1 | §87 S-5 / G-C4 判据句(CC-143) | **reworded**:「带键的体恰一次」→「带键的体**被铸**恰一次(POST 几次随传输层)/ 去键的体被铸恰一次 / 绝无第三种体」;实现零改动(0.80.0 dist 与本版逐字节同一路径) | 按新句写复验;首发(带键)投递上断网 ⇒ 带键体 POST 两次逐字节相同 ⇒ **绿**(旧句判红 = 判据病不是实现病) |
9643
+ | S-2 | 段落射程限定词(CC-143) | **added(文档形式)**:自 §88 起每条判据句旁标射程;已发段不回改 | 读到无限定词的老段(§81–§87)时,以发车帖与后续段的改口为准 |
9644
+ | S-3 | `providerPresets.json` `deepseek` 项(CC-144,C-R82 ①) | **consumed**:模型项 `deepseek-v4-flash` 改为上游闭集真名 `deepseek-flash`(`cheapHint` / 上下文窗 / maxTokens 不变;两名同模型,历史读数可比);`deepseek-chat` / `deepseek-reasoner` 是上游目录的旧 id,不在 C-R82 射程,原样保留 | 端若自己钉了 `deepseek-v4-flash` 字面(onboarding 默认项 / 快照夹具),换 `deepseek-flash`;只读预设表的端零改 |
9645
+
9646
+ ### 88b. 缺席语义(逐键)
9647
+
9648
+ - 本段零新键、零新臂;缺席语义与 §87 逐字相同。(本节按 0.80.1 的读法;S-3 落地前预设表字节与 0.80.0 相同。)
9649
+
9650
+ ### 88c. 黑盒判据骨架
9651
+
9652
+ - **O-G8**(本版证明;时间射程:0.80.0 起同样成立,只是 §87 没写):首发(带键)投递上断网 → 重投同一带键体 → `400 settled_by_not_in_proof` → 去键 200 ⇒ 三条 POST、带键两条逐字节相同、去键一条只少那一键、结局 `decided` + `denyAttributionDropped === true`(terminal-cause 门 S14b 同形)。
9653
+ - **O-G9**(回归约束):G-C4 / G-C5 / O-G7 / L-G / G-D / G-R 全组在本版 dist 上读数与 0.80.0 逐字相同(patch 零行为面)。
9654
+ - **P-G1**(本版证明;时间射程:0.80.0 及以前预设表列的是别名):`providerPresetById('deepseek').models.map(m => m.id)` 含 `deepseek-flash`、不含 `deepseek-v4-flash`;`deepseek-flash` 项 `cheapHint === true`、`contextWindow === 1000000`、`maxTokens === 384000`(与 0.80.0 的别名项逐字节同值)。0.80.0 上前半 FAIL。
9655
+
9656
+ ### 88y. 🔴 三端升级必读(固定段式,[C295])+ 成文改口
9657
+
9658
+ 1. **换钉 `^0.80.1` 之前**:零前置;peer sdk 地板 `>=11.3.0` 不动;server / core 钉不动。
9659
+ 2. **逐面**:判据句改口只影响验收方写的格;预设表 S-3 落地后按 88a 行动。
9660
+ 3. **成文改口(旧判据眼作废 → 新判据眼)**:⑱ §87「带键的体恰一次」作废 → 「带键的体被铸恰一次(POST 几次随传输层)」;旧眼在首发断网时把合法重投判红。
9661
+
9662
+ **包侧缺口:** ① 预设表里 `deepseek-chat` / `deepseek-reasoner` 两个旧 id 是否仍在上游 models 闭集本包未核(C-R82 只裁 live 钉名);② 射程限定词只向前执法,§81–§87 老段不补(回改已发段比问题本身贵)。
9663
+
9602
9664
  ## §87 🆕 0.80.0 策略拒的归因上 wire + 删除规则后果句归包 + `/mcp` 详情卡两腿分说归包(🔴 minor:peer sdk 地板 `>=11.2.1` → `>=11.3.0`;根公面 1184 → 1195;型面 additive)
9603
9665
 
9604
9666
  > **minor**:peer `@sema-agent/sdk` 地板 `>=11.2.1` → **`>=11.3.0`**(四处同批;11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码);根公面运行期导出 1184 → **1195**(+11:CC-133 六名 / CC-134 三名 / CC-132 两名);型面 additive,无 BREAKING 删改。三件:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/client-core",
3
- "version": "0.80.0",
3
+ "version": "0.80.2",
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",