@sema-agent/client-core 0.38.1 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +1 -1
- package/dist/engineErrorCodes.d.ts +33 -3
- package/dist/engineErrorCodes.js +51 -17
- package/dist/hitl/toolApprovalWire.d.ts +42 -1
- package/dist/hitl/toolApprovalWire.js +34 -0
- package/dist/printToolResultFrame.d.ts +9 -0
- package/docs/INTEGRATION-CLIENTS.md +5 -5
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -28,6 +28,71 @@
|
|
|
28
28
|
> 不许悄悄漂:豁免登记的 `releasedAt` 与 `FROZEN` 账上 0.36.0 那一行逐字相等;本段(点名版本号
|
|
29
29
|
> `0.36.0` + 关键字「勘误」)必须还在这份头注里 —— 删掉本段而不同批把门侧豁免一起处理,门当场红。
|
|
30
30
|
|
|
31
|
+
## 0.39.0(2026-08-21)
|
|
32
|
+
|
|
33
|
+
**minor:tool_approval 帧窗三键过境 + 三新错误码消费件(0.38.0 已知局限「delegation.* 无机器可读载体」自本版解除)。**
|
|
34
|
+
|
|
35
|
+
- **🆕 tool_approval 帧窗三键过境([4851] cli 请托;[4845] 假死案的包层半场)**:`ToolApprovalFrame`
|
|
36
|
+
声明 + 键镜像表 + `ApprovalCardRequest` 三处补 `expiresInMs` / `expiresAtMs` / `serverNowMs`
|
|
37
|
+
(server ≥7.34 在 durable `tool_approval` 帧上 stamp;0.38.1 及更早的白名单投影把三键**丢在包
|
|
38
|
+
边界外** —— 正是「审批卡 TTL 到点转 park 后屏幕零反应像活的」的直接成因之一)。铸卡点按
|
|
39
|
+
**有限数才 stamp** 收(坏形降缺席,三键独立判不互相湮灭);对账门 `run-approval-frame-keys`
|
|
40
|
+
以 AHEAD_OF_ANCHOR 登记三条领先(sdk 7.2.0 锚尚无三键,SDK 追平当天登记自红逼删)。
|
|
41
|
+
- **🆕 三新错误码消费件(0.38.0 件④ 的下半场,载体已核实到货)**:core 5.50.0 兑现上游诉求 ——
|
|
42
|
+
`capRefusal` 铸 `{ error: code, code }` **孪生拼法**(`dist/agents/subagent.js`,node 直读实证),
|
|
43
|
+
抬升腿 `toolEndBodyFrom` 读 `details.code` 后 stamp 帧顶层 ⇒ `delegation.concurrency_cap` /
|
|
44
|
+
`delegation.session_cap` 自 core ≥5.50.0 起**真出现在 `tool_end.errorCode`**。本版接上判定半场:
|
|
45
|
+
① `delegationCapDispositionOf`:两码处置不对称的机器可读形(`wait-for-slot` /
|
|
46
|
+
`reuse-existing-or-await-reap`),未知 `delegation.*` 码 ⇒ `undefined`(开集纪律:不认得就不给
|
|
47
|
+
处置,不替引擎指路);文案归端。🔴 **勘误(异源对抗复审命中)**:0.38.0 段曾把累计帽写成
|
|
48
|
+
「等也没用,这条会话这辈子的配额用完了」——**错**。core 实现在计数前先把不在 stored/active 的
|
|
49
|
+
handle 从 ledger 剪掉,计数是 **retained-window 帐**,行被 retention 回收后配额**会回来**,core
|
|
50
|
+
文案的推荐出路即 "Continue an existing agent (SendMessage)"。以本版语义为准(0.38.0 段已冻结
|
|
51
|
+
不回改)。
|
|
52
|
+
② `MCP_SERVER_REVOKED`(`mcp.server_revoked`,core 5.50.0 `dist/core/mcp.js` 三铸点同码):
|
|
53
|
+
操作员 mid-session 吊销 MCP server 后的**工具面本地闸**(请求没发出去;不是故障;同 server
|
|
54
|
+
重试无意义直到重新批准)。🔴 **哪个 server 被吊销今天 wire 上拿不到**(异源复审命中):core
|
|
55
|
+
detail 的 `server` 键是进程内位,抬升腿只 lift `code`、该 detail 无 `type` 进不了 `structured`
|
|
56
|
+
⇒ 端只有码没有名;归因渲染候 core 补 typed detail / tool_end 字段(发布帖点名,表态制)。
|
|
57
|
+
③ print 车道读形 `ToolEndResultArmLike` 补 `errorCode?: unknown`(与 `settledBy`/`approver`
|
|
58
|
+
同款「臂带、卡不带」姿势;typeshape unknown 出境棘轮 252→253 同批登记)。
|
|
59
|
+
④ **载体门**:`run-engine-vocab-floor-test` 新增 G3 腿(+7 checks,门 73→80)锚 core dist 铸点
|
|
60
|
+
与抬升腿口径,devDep core ^5.43.0→^5.50.0(实装 5.52.0),CORE_FLOOR 5.43→5.50 —— 5.45.0 实装物
|
|
61
|
+
上 G3-a 实测红(红先绿后留证),孪生拼法哪天被 core 重构删掉本门当场红。
|
|
62
|
+
⑤ `engineErrorCodes.ts` 0.38.0 那条「载体如实登记」注按现势改写(旧注描述的是 5.50 修孪生前
|
|
63
|
+
的 core;旧引擎 5.48/5.49 上两码仍只在模型面文案里,消费点拿不到码就什么都别渲)。
|
|
64
|
+
- **跟修**:pure 套 B7 两处 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 计数钉 18→21(三键过境批漏跑 pure
|
|
65
|
+
套的存量红,本批认领);public-export 基线 764→766。
|
|
66
|
+
|
|
67
|
+
- **🔴 收敛式扫码+异源复审收编(两 P1 三 P2 修复,发包前置)**:
|
|
68
|
+
① **重放腿假倒计时(P1)**:durable 账本 tail 会把旧 `tool_approval` 行连冻结三键逐字重放,
|
|
69
|
+
此前铸卡点无条件 stamp ⇒ 早已过期的 ask 在屏上拿到精确但完全错误的倒计时(比 [4845]「卡挂着
|
|
70
|
+
像活的」更坏)。修 = `ToolApprovalFrameLaneOpts` 新增 `windowIsCurrent` 席位,三键**只在
|
|
71
|
+
`=== true`(live 流)时过境**;缺席 fail-closed 不 stamp(老宿主行为 = 0.38.1,零回归),
|
|
72
|
+
各端 live 腿随自家提货批接线 `true`。
|
|
73
|
+
② **stamp 零门看守(P1)**:变异实证删掉三行 stamp 全门照绿。修 = pure 套新增端到端卡口断言
|
|
74
|
+
七条(live 逐值过境 / 重放三形缺席 / 负数坏形闸 / 0 合法)。
|
|
75
|
+
③ **负数放行(P2)**:铸卡注承诺「负数=坏形降缺席」而实现是裸 `Number.isFinite`。修 =
|
|
76
|
+
`isNonNegativeFinite`(0 合法 = 窗恰好到点,SDK 契约 `max(0,…)` 可产 0)。
|
|
77
|
+
④ **缺本地收帧锚(P2)**:卡口串行阻塞下排队靠后的卡按「呈现那一刻」起算 = 窗被整段还回去。
|
|
78
|
+
修 = live 腿 stamp 任一窗键时同拍盖 `ApprovalCardRequest.receivedAtMs`(壳读器明文优先它)。
|
|
79
|
+
⑤ **G3 载体门判据收紧(P2)**:铸点判据改「每个含 `mcp.server_revoked` 的 details 对象都带
|
|
80
|
+
`code` 键」全称断言(顺序无关 —— 装饰性 key 重排不再误红,单铸点退化单键不再被计数下限漏过);
|
|
81
|
+
capRefusal 体内判据同步放宽到 shorthand 等价形;判别器全员合成样本正控。
|
|
82
|
+
|
|
83
|
+
### 已知局限(本版新增)
|
|
84
|
+
|
|
85
|
+
- **三新码的渲染半场在端**:本包只出判定(处置轴/常量),cli 壳的指路文案腿(Task 卡拒因 +
|
|
86
|
+
mcp 吊销卡)随壳 0.39.0 提货批做;web/desktop 同理。旧引擎(core <5.50.0)上 `tool_end.errorCode`
|
|
87
|
+
不带这三码 —— 缺席 ≠ 没拒过,端别按缺席反推。
|
|
88
|
+
- **窗三键的 live 腿要各端接线才点亮**:`windowIsCurrent` 缺席 = 三键不 stamp(fail-closed)——
|
|
89
|
+
cli 壳 live 腿随 1.0.88 提货补 `true`;web/desktop 接线前行为 = 0.38.1(卡无倒计时,无假窗)。
|
|
90
|
+
- **seatContract 的 `ToolPermissionRequest` 未跟窗三键**:desktop/web 座位 IPC 面上窗仍停在包内
|
|
91
|
+
这一格 —— 座位面倒计时随两端提货批与 IPC 契约(B18 单源)同窗补,不在本批贸然扩 IPC 键。
|
|
92
|
+
- **park(durable)腿仍无窗投影**:富行 `PendingCheckpoint.deadline` 是重放面读数,与
|
|
93
|
+
`windowIsCurrent` 同一条闸;投影候 7.40 park 转态帧带当下余量([4846] server 已认领),
|
|
94
|
+
未投影登记(`run-durable-card-display-keys-test.mjs`)理由已按本批换代。
|
|
95
|
+
|
|
31
96
|
## 0.38.1(2026-08-21)
|
|
32
97
|
|
|
33
98
|
**patch:纯出包卫生版,零 API/行为变化。**
|
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.
|
|
38
|
+
**Version:** 0.39.0
|
|
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
|
|
@@ -76,14 +76,44 @@ export declare const CONFIG_REFUSAL_CODES: ReadonlySet<string>;
|
|
|
76
76
|
/** 并发帽:这棵树此刻活着的委派席位已达 `delegationEntryCaps.maxConcurrent`(CC 对齐缺省 20)。
|
|
77
77
|
* 🔴 处置 = **可等**(兄弟结束即有位),别渲成「配置要改」。 */
|
|
78
78
|
export declare const DELEGATION_CONCURRENCY_CAP = "delegation.concurrency_cap";
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
79
|
+
/** 累计帽:这棵树在 **retained window** 内创建的委派席位已达 `maxCumulativePerSession`
|
|
80
|
+
* (CC 对齐缺省 200)。🔴 处置 = **复用既有 agent(SendMessage)或候 retention 回收**(行被
|
|
81
|
+
* reap 后配额恢复 —— core 计数前先剪 ledger,见族注),别渲成「换会话」或「改配置」。 */
|
|
81
82
|
export declare const DELEGATION_SESSION_CAP = "delegation.session_cap";
|
|
82
83
|
/** 委派席位到限码识别表(**开集**:core 可能再加第三根轴)。两员处置不对称,消费点禁合并分支。 */
|
|
83
84
|
export declare const DELEGATION_CAP_CODES: ReadonlySet<string>;
|
|
84
85
|
/** `delegation.` 前缀谓词 —— **开集**判别(与 {@link isConfigRefusalCode} 同款)。缺席/空串 ⇒ false。
|
|
85
|
-
* 🔴
|
|
86
|
+
* 🔴 它只回答「这是不是一条委派席位拒绝」;**该等新槽还是该复用既有 agent**必须按成员分
|
|
87
|
+
* ({@link delegationCapDispositionOf}),见两码各自的注释。 */
|
|
86
88
|
export declare function isDelegationCapCode(code: string | undefined): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* 委派席位到限的**处置轴**(0.39.0 消费件:两员处置不对称的机器可读形)。单源在本包 ——
|
|
91
|
+
* 「哪个码该等、哪个码等也没用」是判定不是文案,端各自再抄一份就回到本文件要根除的散抄病。
|
|
92
|
+
*/
|
|
93
|
+
export type DelegationCapDisposition =
|
|
94
|
+
/** 可等:活着的兄弟结束就有位,同一条命令过一会儿照样成(别渲成「配置要改」)。 */
|
|
95
|
+
'wait-for-slot'
|
|
96
|
+
/** 复用而不是新开:retained-window 计数满了 —— 用 SendMessage 续既有 agent(core 文案的
|
|
97
|
+
* 推荐出路),或候 retention 回收行后配额恢复(别渲成「换会话」/「永久耗尽」)。 */
|
|
98
|
+
| 'reuse-existing-or-await-reap';
|
|
99
|
+
/** 两成员各归各格;未知 `delegation.*` 码(core 的第三根轴)⇒ `undefined` —— 开集纪律:不认得
|
|
100
|
+
* 就不给处置,消费点必须留「只报码不指路」的 default 臂,绝不塌进任何一格替引擎指路。 */
|
|
101
|
+
export declare function delegationCapDispositionOf(code: string | undefined): DelegationCapDisposition | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* 已吊销 MCP server 上的调用被拒。core `dist/core/mcp.js` **三个铸点同码**(远端工具调用 /
|
|
104
|
+
* 资源读取 / 目录列举)。载体与 `delegation.*` 两码同批:`{ error, code }` 双键同值 ⇒
|
|
105
|
+
* `tool_end.errorCode`(core ≥5.50.0;载体门 = engine-vocab G3 腿)。
|
|
106
|
+
* 🔴 **哪个 server 被吊销,今天 wire 上拿不到**(异源对抗复审命中,如实登记):core 的
|
|
107
|
+
* detail 确有 `server` 键,但它是**进程内** result 体 —— 抬升腿只 lift `code`,且该 detail 无
|
|
108
|
+
* `type` 进不了 `structured` ⇒ 端只有码没有名。**别按 output 文案抠 server 名当机器判据**
|
|
109
|
+
* (文案是模型面散文,不是契约);归因渲染候上游补 typed detail / tool_end 字段(诉求已
|
|
110
|
+
* 随 0.39.0 发布帖点名 core,表态制)。
|
|
111
|
+
* 🔴 语义三条,一条都别渲错:
|
|
112
|
+
* · **请求没发出去**(core 文案原话 "The request was NOT sent")—— 是本地闸,不是远端失败;
|
|
113
|
+
* · 这不是故障也不是配置坏了,是**操作员的治理动作** —— 别渲成「服务器错误,稍后重试」;
|
|
114
|
+
* · 同 server 重试**无意义**,直到它被重新批准;工具表在下一 turn 更新(core 文案原话)。
|
|
115
|
+
*/
|
|
116
|
+
export declare const MCP_SERVER_REVOKED = "mcp.server_revoked";
|
|
87
117
|
/** `config.` 前缀谓词 —— **开集**判别:5.10.0 之后每一波「不许静默折叠」都会往这一族加词,
|
|
88
118
|
* 按前缀判的消费点不必跟车,按成员判的必须跟车。缺席/空串 ⇒ false。 */
|
|
89
119
|
export declare function isConfigRefusalCode(code: string | undefined): boolean;
|
package/dist/engineErrorCodes.js
CHANGED
|
@@ -89,27 +89,35 @@ export const CONFIG_REFUSAL_CODES = new Set([
|
|
|
89
89
|
]);
|
|
90
90
|
// ── 委派席位到限族(core 5.48.0 design/323,[4743] @cli 点名的「两新 coded 拒绝」)──────────────
|
|
91
91
|
//
|
|
92
|
-
//
|
|
93
|
-
// `config.delegation_entry_caps`)
|
|
92
|
+
// 语义:一次**新开委派**(Task 铸新席位)因为**席位帽**被拒 —— 不是配置坏了(那是上面的
|
|
93
|
+
// `config.delegation_entry_caps`),也不是失败了,而是「现在不行」。SendMessage **复活**走
|
|
94
|
+
// revive 短路:core 只对它查并发帽、**跳过**累计帽(dist/agents/subagent.js:累计检查包在
|
|
95
|
+
// `reviveRow === undefined` 里)—— 这正是累计帽处置指向「复用」的机器面依据。两码**处置不同,
|
|
96
|
+
// 禁合并**:
|
|
94
97
|
// · 并发帽 ⇒ **等**:活着的兄弟结束就有位,同一条命令过一会儿照样成;
|
|
95
|
-
// ·
|
|
96
|
-
//
|
|
98
|
+
// · 累计帽 ⇒ **复用而不是新开**:计数是 **retained-window 帐**(core 计数前先把不在
|
|
99
|
+
// stored/active 里的 handle 从 ledger 剪掉 —— 行被 retention 回收后配额**会回来**),core
|
|
100
|
+
// 文案原话即 "in its retained window … Continue an existing agent (SendMessage) instead of
|
|
101
|
+
// launching new ones"。渲成「这条会话这辈子的配额用完了」是**错的**(0.38.0 段曾这么写,
|
|
102
|
+
// 0.39.0 勘误;异源对抗复审命中):会把一个「换 SendMessage 姿势就能继续」的用户赶去换会话。
|
|
103
|
+
// 把两者渲成同一句「委派失败」会让第一种情形的用户去改配置,第二种情形的用户去白等新槽。
|
|
97
104
|
//
|
|
98
|
-
// 🔴
|
|
99
|
-
// Task 工具结果体的 `details.error
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
105
|
+
// 🔴 **载体现势(2026-08-21 二次亲验,core 5.50.0 dist node 直读)**:0.38.0 曾如实登记「这两码
|
|
106
|
+
// 只铸进 Task 工具结果体的 `details.error`,而 core 的 `errorCode` 抬升腿只读 `details.code` →
|
|
107
|
+
// `details.errorKind` 两个拼法 ⇒ wire 上拿不到」,故先立词、消费分支候载体(上游诉求随
|
|
108
|
+
// 0.38.0 发布登记)。core 5.50.0 已兑现:`capRefusal` 铸 `{ error: code, code }` **孪生拼法**
|
|
109
|
+
// (`dist/agents/subagent.js`),抬升腿(`dist/core/runner/runtask.js` `toolEndBodyFrom`)读
|
|
110
|
+
// `details.code` 后 stamp 帧顶层 ⇒ **两码自 core ≥5.50.0 起真出现在 `tool_end.errorCode`**。
|
|
111
|
+
// 消费分支 0.39.0 同批接上:**判定归本包**({@link delegationCapDispositionOf}),文案归端。
|
|
112
|
+
// 载体门 = `run-engine-vocab-floor-test.mjs` G3 腿(锚 dist 铸点与抬升腿口径,孪生消失当场红,
|
|
113
|
+
// 不许安静绿回去)。旧引擎(5.48/5.49)上两码仍只在模型面文案里 —— 消费点拿不到码就什么都
|
|
114
|
+
// 别渲,**绝不按文案反解**([cross-repo-fix-at-source-constitution] 依旧适用)。
|
|
108
115
|
/** 并发帽:这棵树此刻活着的委派席位已达 `delegationEntryCaps.maxConcurrent`(CC 对齐缺省 20)。
|
|
109
116
|
* 🔴 处置 = **可等**(兄弟结束即有位),别渲成「配置要改」。 */
|
|
110
117
|
export const DELEGATION_CONCURRENCY_CAP = 'delegation.concurrency_cap';
|
|
111
|
-
/**
|
|
112
|
-
*
|
|
118
|
+
/** 累计帽:这棵树在 **retained window** 内创建的委派席位已达 `maxCumulativePerSession`
|
|
119
|
+
* (CC 对齐缺省 200)。🔴 处置 = **复用既有 agent(SendMessage)或候 retention 回收**(行被
|
|
120
|
+
* reap 后配额恢复 —— core 计数前先剪 ledger,见族注),别渲成「换会话」或「改配置」。 */
|
|
113
121
|
export const DELEGATION_SESSION_CAP = 'delegation.session_cap';
|
|
114
122
|
/** 委派席位到限码识别表(**开集**:core 可能再加第三根轴)。两员处置不对称,消费点禁合并分支。 */
|
|
115
123
|
export const DELEGATION_CAP_CODES = new Set([
|
|
@@ -117,10 +125,36 @@ export const DELEGATION_CAP_CODES = new Set([
|
|
|
117
125
|
DELEGATION_SESSION_CAP,
|
|
118
126
|
]);
|
|
119
127
|
/** `delegation.` 前缀谓词 —— **开集**判别(与 {@link isConfigRefusalCode} 同款)。缺席/空串 ⇒ false。
|
|
120
|
-
* 🔴
|
|
128
|
+
* 🔴 它只回答「这是不是一条委派席位拒绝」;**该等新槽还是该复用既有 agent**必须按成员分
|
|
129
|
+
* ({@link delegationCapDispositionOf}),见两码各自的注释。 */
|
|
121
130
|
export function isDelegationCapCode(code) {
|
|
122
131
|
return typeof code === 'string' && code.startsWith('delegation.');
|
|
123
132
|
}
|
|
133
|
+
/** 两成员各归各格;未知 `delegation.*` 码(core 的第三根轴)⇒ `undefined` —— 开集纪律:不认得
|
|
134
|
+
* 就不给处置,消费点必须留「只报码不指路」的 default 臂,绝不塌进任何一格替引擎指路。 */
|
|
135
|
+
export function delegationCapDispositionOf(code) {
|
|
136
|
+
if (code === DELEGATION_CONCURRENCY_CAP)
|
|
137
|
+
return 'wait-for-slot';
|
|
138
|
+
if (code === DELEGATION_SESSION_CAP)
|
|
139
|
+
return 'reuse-existing-or-await-reap';
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
// ── MCP 吊销族(core 5.50.0;操作员 mid-session 吊销 server 后的工具面拒绝)────────────────────
|
|
143
|
+
/**
|
|
144
|
+
* 已吊销 MCP server 上的调用被拒。core `dist/core/mcp.js` **三个铸点同码**(远端工具调用 /
|
|
145
|
+
* 资源读取 / 目录列举)。载体与 `delegation.*` 两码同批:`{ error, code }` 双键同值 ⇒
|
|
146
|
+
* `tool_end.errorCode`(core ≥5.50.0;载体门 = engine-vocab G3 腿)。
|
|
147
|
+
* 🔴 **哪个 server 被吊销,今天 wire 上拿不到**(异源对抗复审命中,如实登记):core 的
|
|
148
|
+
* detail 确有 `server` 键,但它是**进程内** result 体 —— 抬升腿只 lift `code`,且该 detail 无
|
|
149
|
+
* `type` 进不了 `structured` ⇒ 端只有码没有名。**别按 output 文案抠 server 名当机器判据**
|
|
150
|
+
* (文案是模型面散文,不是契约);归因渲染候上游补 typed detail / tool_end 字段(诉求已
|
|
151
|
+
* 随 0.39.0 发布帖点名 core,表态制)。
|
|
152
|
+
* 🔴 语义三条,一条都别渲错:
|
|
153
|
+
* · **请求没发出去**(core 文案原话 "The request was NOT sent")—— 是本地闸,不是远端失败;
|
|
154
|
+
* · 这不是故障也不是配置坏了,是**操作员的治理动作** —— 别渲成「服务器错误,稍后重试」;
|
|
155
|
+
* · 同 server 重试**无意义**,直到它被重新批准;工具表在下一 turn 更新(core 文案原话)。
|
|
156
|
+
*/
|
|
157
|
+
export const MCP_SERVER_REVOKED = 'mcp.server_revoked';
|
|
124
158
|
/** `config.` 前缀谓词 —— **开集**判别:5.10.0 之后每一波「不许静默折叠」都会往这一族加词,
|
|
125
159
|
* 按前缀判的消费点不必跟车,按成员判的必须跟车。缺席/空串 ⇒ false。 */
|
|
126
160
|
export function isConfigRefusalCode(code) {
|
|
@@ -296,6 +296,17 @@ export interface ApprovalCardRequest {
|
|
|
296
296
|
* **行为面**改动(会改到人已按下的决断的字节),按宪法三问单独立项,不在本过境批内。
|
|
297
297
|
*/
|
|
298
298
|
requiresRealApproval?: true;
|
|
299
|
+
/** [4851]:窗三键透传(server ≥7.34;壳 readAskDeadlineMs 消费渲倒计时)。只在
|
|
300
|
+
* `windowIsCurrent === true` 的 live 腿上过境(重放腿=旧余量,续窗即假倒计时);**全部**缺席
|
|
301
|
+
* =该帧无窗不渲,半套在场读器按「expiresAtMs 优先、expiresInMs 兜底」回落。 */
|
|
302
|
+
expiresInMs?: number;
|
|
303
|
+
/** 同门:窗绝对到点(server 时钟 epoch ms)。 */
|
|
304
|
+
expiresAtMs?: number;
|
|
305
|
+
/** 同门:server 出帧时刻(壳时钟校偏用)。 */
|
|
306
|
+
serverNowMs?: number;
|
|
307
|
+
/** 本地**收帧**时刻(`Date.now()`,与窗任一键同拍盖下)。壳读器明文优先这枚锚:卡口串行
|
|
308
|
+
* 阻塞下,排队靠后的卡若按「呈现那一刻」起算余量,等待的时间会被整段还给窗。 */
|
|
309
|
+
receivedAtMs?: number;
|
|
299
310
|
}
|
|
300
311
|
/**
|
|
301
312
|
* 🔴 **拆缝口** —— 弹「三选卡」并等人的决断。壳 = vendored CC `PermissionRequest`;
|
|
@@ -494,6 +505,26 @@ export interface ToolApprovalFrame {
|
|
|
494
505
|
* run-durable-card-display-keys-test.mjs ⑨ 段;上游补位后按 {@link probeCause} 的双源合流形跟批。
|
|
495
506
|
*/
|
|
496
507
|
requiresRealApproval?: true;
|
|
508
|
+
/**
|
|
509
|
+
* server ≥7.34.0(#288/[4429]② —— cli 自己请托的窗三键,**ADDITIVE**,`"tool_approval"` only;
|
|
510
|
+
* 来源锚 = sema-server src/tool-approval.ts 的三键声明+emit 前赋值,字段注逐字「新壳借此给旧族帧
|
|
511
|
+
* 补倒计时」)。这只 ask 的**决策窗**:到点后引擎按 `UNATTENDED_APPROVAL_POLICY`(缺省 park)
|
|
512
|
+
* 处置,卡上的按键此后 404 `tool_approval.not_pending`([4845] Postgres 直读实证)。
|
|
513
|
+
*
|
|
514
|
+
* 🔴 三键**信封级**(不进 card 语义):壳的倒计时读器(`readAskDeadlineMs`)以
|
|
515
|
+
* `expiresAtMs`(+`serverNowMs` 时钟校偏)优先、`expiresInMs` 兜底 —— **半套在场时按此
|
|
516
|
+
* 优先序回落消化**(异源对抗复审纠偏:早注「任一缺席整段不渲」与真实读器不符);**全部**
|
|
517
|
+
* 缺席 = 旧 server / 该帧无窗,才是不渲。0.38.1 及更早的白名单投影把三键丢在包边界外
|
|
518
|
+
* ([4851] 头号请托的实体)——帧到了、壳读器预埋了、中间这一格空转,[4845]「卡挂着像活的」
|
|
519
|
+
* 的直接成因。缺席 ≠ 「永不过期」。
|
|
520
|
+
* 🔴 过境有闸:三键只在 `ToolApprovalFrameLaneOpts.windowIsCurrent === true`(live 流)时上卡
|
|
521
|
+
* —— durable 账本重放的历史帧带的是铸帧时刻的旧余量,续窗 = 假倒计时(见 stamp 段注)。
|
|
522
|
+
*/
|
|
523
|
+
expiresInMs?: number;
|
|
524
|
+
/** 窗绝对到点时刻(server 时钟,epoch ms)。与 {@link expiresInMs} 同门在场。 */
|
|
525
|
+
expiresAtMs?: number;
|
|
526
|
+
/** server 出帧时刻(epoch ms)——壳用它对本地时钟校偏后再消费 expiresAtMs。 */
|
|
527
|
+
serverNowMs?: number;
|
|
497
528
|
}
|
|
498
529
|
/** {@link ToolApprovalFrame.delegation} 的形(命名形,不用内联匿名 —— typeshape 门 B4 棘轮口径)。 */
|
|
499
530
|
export interface ToolApprovalDelegation {
|
|
@@ -509,7 +540,7 @@ export interface ToolApprovalDelegation {
|
|
|
509
540
|
* `TOOL_APPROVAL_FRAME_KEYS` 比对——SDK additive 增键时对账当天红,不再人肉追平。
|
|
510
541
|
* 下面两个类型钉保证镜像与 interface 本身不可能漂移(少键/多键都是编译错)。
|
|
511
542
|
*/
|
|
512
|
-
export declare const TOOL_APPROVAL_FRAME_KEYS_MIRROR: readonly ["type", "approvalId", "toolCallId", "toolName", "sourceTaskId", "fromSubagent", "sourceAgentName", "message", "args", "argsOmitted", "governanceForced", "ruleSuggestions", "persistedRuleShadowed", "probeCause", "ruleEvidence", "requiresRealApproval", "delegation", "outcome"];
|
|
543
|
+
export declare const TOOL_APPROVAL_FRAME_KEYS_MIRROR: readonly ["type", "approvalId", "toolCallId", "toolName", "sourceTaskId", "fromSubagent", "sourceAgentName", "message", "args", "argsOmitted", "governanceForced", "ruleSuggestions", "persistedRuleShadowed", "probeCause", "ruleEvidence", "requiresRealApproval", "expiresInMs", "expiresAtMs", "serverNowMs", "delegation", "outcome"];
|
|
513
544
|
/**
|
|
514
545
|
* 子代帧判别:显式键 fromSubagent(core 1.378 RB-39②)优先;缺席退 sourceTaskId 在场性权宜式
|
|
515
546
|
* (server 1.258 [1549]①3,旧代际兼容)。
|
|
@@ -599,5 +630,15 @@ export interface ToolApprovalFrameLaneOpts {
|
|
|
599
630
|
* 缺席/false ⇒ 不发(fail-closed 到「不发」侧;决断本身照常送达,现状字节不变)。
|
|
600
631
|
*/
|
|
601
632
|
approvalDecisionNoteCapable?: boolean;
|
|
633
|
+
/**
|
|
634
|
+
* 这条帧是不是**当下**从 live 流上收到的(异源对抗复审 P1 采纳;壳孪生帧族同名闸的
|
|
635
|
+
* 本包席位 —— 壳 `approvalStreamWire` 头注逐字:「账本重放的历史帧带的是铸帧时刻的旧余量,
|
|
636
|
+
* 拿它算『本地 now + 余量』等于给一只早就过期的 ask 续一个新窗」)。
|
|
637
|
+
* 🔴 窗三键**只在本位 === true 时**过境到卡:durable 账本 tail 会把旧 `tool_approval` 行连
|
|
638
|
+
* 冻结三键逐字重放,重放腿不设防 = 过期 ask 在屏上拿到一个精确但完全错误的倒计时,比
|
|
639
|
+
* 「卡挂着没倒计时」更坏。缺席 = 不知道来路 ⇒ **不 stamp**(fail-closed:退回无窗渲染,
|
|
640
|
+
* 老宿主不传本位时行为 = 0.38.1,零回归)。live 腿的宿主接线随各端提货批补 `true`。
|
|
641
|
+
*/
|
|
642
|
+
windowIsCurrent?: boolean;
|
|
602
643
|
}
|
|
603
644
|
export declare function surfaceToolApprovalFrameAndRespond(frame: ToolApprovalFrame, respond: RespondToolApprovalFn, streamArgs: unknown | undefined, signal?: AbortSignal, lane?: ToolApprovalFrameLaneOpts): Promise<ToolApprovalFrameOutcome>;
|
|
@@ -389,6 +389,14 @@ export const TOOL_APPROVAL_FRAME_KEYS_MIRROR = [
|
|
|
389
389
|
// sdk 7.1.0 的运行期锚**尚无**本键(node 直读实证:锚 17 项)⇒ 这是一次**领先**,进对账门的
|
|
390
390
|
// AHEAD_OF_ANCHOR 带退出条件登记(SDK 追平当天那条登记自红逼删,回到逐元素相等)。
|
|
391
391
|
'requiresRealApproval',
|
|
392
|
+
// [4851] 头号请托(client-core 0.38.2):server 7.34.0 起真发窗三键(#288/[4429]② cli 自己请托,
|
|
393
|
+
// server src/tool-approval.ts 三键声明+条件 stamp)。⚠️ 与 requiresRealApproval 同形=**领先** SDK
|
|
394
|
+
// 运行期锚(sdk 7.2.0 锚 17 项,node 直读实证无三键)⇒ 进对账门 AHEAD_OF_ANCHOR 带退出条件登记
|
|
395
|
+
// (SDK 追平当天登记自红逼删)。0.38.1 把三键丢在包边界外 = [4845]「卡到期屏幕零反应」的直接成因
|
|
396
|
+
// (壳读器 readAskDeadlineMs 早已预埋,缺的一直是包边界这一格——#283 逐字同形第四例)。
|
|
397
|
+
'expiresInMs',
|
|
398
|
+
'expiresAtMs',
|
|
399
|
+
'serverNowMs',
|
|
392
400
|
'delegation',
|
|
393
401
|
'outcome',
|
|
394
402
|
];
|
|
@@ -532,6 +540,12 @@ function pathFromGateMessage(message) {
|
|
|
532
540
|
* 🔴 **一把判词服务多键**是设计而非省事:两条决断腿(活帧 / durable 行)× 多个开集记录键共用同一个
|
|
533
541
|
* 载体判据,判词绝不各写各的(各写一份 = 同一个问题有了两个属主,分叉那天没人发现)。
|
|
534
542
|
*/
|
|
543
|
+
/** 窗三键的坏形闸:三键定义域按 SDK 契约本就非负(`expiresInMs = max(0, …)`,0 合法=窗恰好
|
|
544
|
+
* 到点)。裸 `Number.isFinite` 会放行负数 —— 与铸卡注承诺的「负数=坏形降缺席」相反(同文件
|
|
545
|
+
* `delegation.depth` 曾同款教训,异源对抗复审第二次命中同形)。 */
|
|
546
|
+
function isNonNegativeFinite(v) {
|
|
547
|
+
return typeof v === 'number' && Number.isFinite(v) && v >= 0;
|
|
548
|
+
}
|
|
535
549
|
function isWireRecordCarrier(v) {
|
|
536
550
|
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
537
551
|
}
|
|
@@ -630,6 +644,26 @@ export async function surfaceToolApprovalFrameAndRespond(frame, respond, streamA
|
|
|
630
644
|
...(isFromSubagent(frame) ? { workerBadge: subagentBadgeFor(frame) } : {}),
|
|
631
645
|
...(wireNote !== undefined ? { wireNote } : {}),
|
|
632
646
|
...(frame.governanceForced === true ? { governanceForced: true } : {}),
|
|
647
|
+
// [4851]:窗三键透传,三闸合取(异源对抗复审 P1/P2 收编):
|
|
648
|
+
// ① `lane.windowIsCurrent === true` —— durable 账本重放的历史帧带的是铸帧时刻的旧余量,
|
|
649
|
+
// 给它续窗 = 过期 ask 渲出精确假倒计时(壳孪生族同名闸的本包席位,见 LaneOpts 注);
|
|
650
|
+
// ② **非负有限数**才 stamp —— `Number.isFinite` 单独放行负数,而三键定义域按 SDK 契约
|
|
651
|
+
// 本就非负(`expiresInMs = max(0, …)`;0 合法 = 窗恰好到点)。负数/NaN/Infinity =
|
|
652
|
+
// 坏形降缺席,绝不折 0 或猜(同文件 delegation.depth 曾同款教训);
|
|
653
|
+
// ③ 三键各自独立 stamp:server 承诺同门在场,但包边界不替上游把「半套在场」湮灭成全缺席
|
|
654
|
+
// —— 读器自己按「expiresAtMs 优先、expiresInMs 兜底」消化半套。
|
|
655
|
+
// 任一键 stamp 时同步盖 `receivedAtMs`(本地收帧锚):卡口串行阻塞下,排队靠后的卡若按
|
|
656
|
+
// 「呈现那一刻」起算余量,窗被整段还回去 —— 壳读器明文优先这枚锚。
|
|
657
|
+
...(lane?.windowIsCurrent === true
|
|
658
|
+
? {
|
|
659
|
+
...(isNonNegativeFinite(frame.expiresInMs) ? { expiresInMs: frame.expiresInMs } : {}),
|
|
660
|
+
...(isNonNegativeFinite(frame.expiresAtMs) ? { expiresAtMs: frame.expiresAtMs } : {}),
|
|
661
|
+
...(isNonNegativeFinite(frame.serverNowMs) ? { serverNowMs: frame.serverNowMs } : {}),
|
|
662
|
+
...(isNonNegativeFinite(frame.expiresInMs) || isNonNegativeFinite(frame.expiresAtMs)
|
|
663
|
+
? { receivedAtMs: Date.now() }
|
|
664
|
+
: {}),
|
|
665
|
+
}
|
|
666
|
+
: {}),
|
|
633
667
|
// 🔴 跨字段不变量(对抗复审命中):`delegation` 只在**子代 ask** 的门上在场(SDK 头注:
|
|
634
668
|
// "Present on the same door as fromSubagent (child asks only)")。只校对象形不校这一条 ⇒
|
|
635
669
|
// 一个**宿主自己**的破坏性工具审批也能带着 delegation 到卡口,被呈成「某层子代发起的」——
|
|
@@ -58,6 +58,15 @@ export interface ToolEndResultArmLike {
|
|
|
58
58
|
/** 引擎 CC-shaped details(core 1.199+ AgentToolResult.details;Bash 时带 exitCode)。 */
|
|
59
59
|
structured?: unknown;
|
|
60
60
|
truncated?: unknown;
|
|
61
|
+
/**
|
|
62
|
+
* 这次调用失败的**机器码**(开集;`eventToSdkMessage` 的 `case 'tool_end'` 臂原样上臂,宿主从
|
|
63
|
+
* 臂上直读 —— 与 {@link settledBy}/{@link approver} 同款「臂带、卡不带」姿势)。已知族:中断
|
|
64
|
+
* 合成收口两码(`interrupted_never_started` / `interrupted_outcome_unknown`,core 5.10.0)、
|
|
65
|
+
* 委派席位到限两码(`delegation.*`)与 `mcp.server_revoked`(两族 core ≥5.50.0 孪生拼法起才
|
|
66
|
+
* 真到达 —— 更旧引擎恒缺席,缺席≠没拒过)。词表与判定单源 `engineErrorCodes.ts`
|
|
67
|
+
* (`delegationCapDispositionOf` 等);宿主只渲已知码的指路文案,未知码原样报码**不编因**。
|
|
68
|
+
*/
|
|
69
|
+
errorCode?: unknown;
|
|
61
70
|
/**
|
|
62
71
|
* 这次调用**是怎么结算的**(core ≥5.18.1 #187;`human`/`timeout`/`aborted` + 开集读)与
|
|
63
72
|
* **是谁结算的**(core ≥5.35.0 design/252 G-7 / server ≥7.23.0 #263;审批通道自报的身份串,
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
| peer:wire 契约 | `@sema-agent/sdk` **>=7.2.0**(value-level,非 type-only) | `package.json` `peerDependencies` |
|
|
24
24
|
| peer:会话词汇表 | `@sema-agent/agent-types` **>=0.2.0**(type-only,零运行时) | 同上 |
|
|
25
25
|
| runtime dep | `diff` ^9.0.0(**唯一**一条;portability 门按**等值**钉死) | `package.json` `dependencies` |
|
|
26
|
-
| 公开导出面 | **
|
|
26
|
+
| 公开导出面 | **766** 个运行期符号(+ 39 个测试钩;= 未发 `0.39.0` 的值,npm `0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
|
|
27
27
|
| 常驻门 | 以 `scripts/gates-manifest.json` 的 `suites` 长度为准(**本档不抄这个数**) | `scripts/gates-manifest.json`;`npm test` 的名单等值门与它逐名对账 |
|
|
28
28
|
| 沿革档 | 0.29.0 起建 `CHANGELOG.md`;更早批次记账在 `src/index.ts` 文件头 + `docs/REFACTOR-LEDGER.md` | — |
|
|
29
29
|
|
|
@@ -101,7 +101,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
101
101
|
|
|
102
102
|
## §2 公共导出面地图(按域)
|
|
103
103
|
|
|
104
|
-
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**
|
|
104
|
+
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**766** 项)。
|
|
105
105
|
> 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
|
|
106
106
|
> **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
|
|
107
107
|
> 单一入口:`import { … } from '@sema-agent/client-core'`(`exports` 只有 `.` 一个;
|
|
@@ -111,7 +111,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
111
111
|
|
|
112
112
|
`public-export-baseline.json` 由 **`dist/index.js` 的运行期导出**生成(生成口径自述见
|
|
113
113
|
`scripts/run-client-core-typeshape-test.mjs`,双向精确集合门在 `scripts/run-public-surface-test.mjs`)。
|
|
114
|
-
实测:
|
|
114
|
+
实测:766 项 **100% 是运行期导出,零 type-only**。
|
|
115
115
|
|
|
116
116
|
**推论(端必须知道)**:
|
|
117
117
|
- barrel 导出的**类型**面比 707 大得多,且**不被这道门看守** —— `AdapterContext` / `SeamEvent` /
|
|
@@ -120,7 +120,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
120
120
|
端依赖这些类型是合法的,但**不要**拿基线 diff 当"类型面没变"的证据。
|
|
121
121
|
- `src/agentSession/contract.ts` 对基线贡献 **0** 项(纯类型模块,`export *` 在 dist 里是空转发)。
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
766 项的内部构成(帮助端估读表大小):**226** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
|
|
124
124
|
(矩阵、键集、env 名、锚串)而非可调用物;**5** 项是 PascalCase 运行期值
|
|
125
125
|
(`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError`);
|
|
126
126
|
**39** 项是 `*For(sessionKey, …)` 的 per-session 变体(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
|
|
@@ -144,7 +144,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
144
144
|
| 13 | **座位 IPC 契约** | 33 | `LOCAL_SESSIONS_SPEC` · `SEAT_METHOD_NAMES` · `SEAT_EVENT_TYPES` · `isLocalSessionEvent` · `isToolPermissionRequest` · `toolPermissionRequestId` · `SEAT_VALIDATOR_KEY_COVERAGE` | desktop↔web 座位 IPC 契约的**单一真源**(此前两边各一份、名字零重合 ⇒ 编译器永远不会告诉你它们漂了)。🔴 加 verb 忘了加 `LOCAL_SESSIONS_SPEC` **不报错**:preload 不注册 channel、渲染端读到 `undefined` | `src/seatContract.ts`(**零 import**,纯类型 + 常量 + 纯谓词) |
|
|
145
145
|
| 14 | **宿主端口与会话槽** | 26 | `installHost` · `installHostFor` · `hostPortMisses(For)` · `DEFAULT_SESSION_KEY` · `hostEnv` · `unrefTimer` · `parseLocaleTag` / `pickUiLanguage`(#244 F4 族D A-028.20:locale tag 手术单源 + UI 语言判定;与 `resolveRegionHint` 双出口成文 —— 语言偏好域 en/zh ≠ 地址可达域 cn/intl/unknown,`zh-Hant` 前者 zh 后者 intl 是设计)· `engineNamespaceKeyFor` / `mergeSessionMapRecord` / `mergeEngineEntry`(A-028.12:会话 id 映射单一键形 + merge 判定;存储经 `SessionMapStorePort` 归端 —— cli 文件锁/原子写,web localStorage)| 进程/端级装配层(settings/fs/queue/timers/session/log/probe),与 per-turn 的 `AdapterContext` **分层**。头注的判定规则:**这个能力每 turn 都会变吗?** 会 ⇒ `ctx`;不会 ⇒ `installHost` | `src/host.ts`、`src/hostEnv.ts`、`src/sessionSlot.ts`、`src/unrefTimer.ts`、`src/env/{localeGeo,localeTag,uiLanguage}.ts`、`src/sessionMap.ts` |
|
|
146
146
|
| 15 | **控制面与传输** | 73 | `ControlRouter`(+ `ControlSafetyError`)· `makeEngineWireClient` + `resolveWireAuth` · `installEngineWireTarget` · `diagnoseSseIdleTear` / `isSseIdleError` · `attemptActiveRunSelfHeal` + `activeRunBusySignal` + `activeRunSelfHealRow` / `activeRunBusyHeadlessRow` · `kickEngineCapsProbe` / `engineCapTrue` / `invalidateEngineCaps(baseUrl, probe?)`(#307 S25:引擎温切后的 caps 生产失效口 —— kick 自带幂等闸,同 baseUrl 重启后不显式失效就永远读到旧引擎那一版能力位;调用方 = 壳的 respawn/restartEngine。🔴 **推荐两参形**:第二参给替代探测则「推进代际 + 注册新探测」在同一同步块内完成,失效与下一次 kick 之间那个「等待者读到未判」的窗按构造不存在;单参形保留给「只丢缓存、这一刻没有替代探测」的调用方,那种情形下读到未判是诚实结局) · `mapBrainStatusToRetry` · `waitForClaimRelease` + `CLAIM_RELEASED_STATES` / `CLAIM_HELD_STATES` · `atMostOnceFailureClass` / `readSteerDelivery` · `clearRunningChoiceOffer`(Inkglow-1085 P0b①:「Do nothing」登记的清口 —— 端的「重新打开操作菜单」入口;登记在场时 attemptActiveRunSelfHeal 不整卡重弹,not-parked 结局带 `alreadyOffered: true` 判别位,端据此降级渲一行)· `INTERACTIVE_WAY_OUT`(默认出路串单源)· `normalizeWirePrincipal`(A-028.10:principal 在场性 trim 原语 —— 全空白=缺席不发头,engineWireTarget 两臂/makeEngineWireClient/壳 livePrincipal 同尺)· `classifyTurnWireError` / `isWireTransportError` / `isPreStreamDrainingReject` / `isResumeAtRejection` / `drainingRetryDelayMs` / `scenarioDenyFromError` + `WIRE_NETWORK_ERROR_PATTERN`(A-028.11/.13:turn 错误分型判定半场,人话文案与渲染归端) | 上行通道的**监管**半场(submit / steer / kill / 队列命令定序)+ 传输构造、caps 探测、SSE 断流分诊、**409 active-run 自愈** | `src/controlRouter.ts`、`steering.ts`、`sseIdleTriage.ts`、`retryStatus.ts`、`diagnostics.ts`、`engineWireSdk.ts`、`engineWireTarget.ts`、`src/principalWire.ts`、`src/wireErrorTriage.ts`、`engineSessionParam.ts`、`engineCapsCache.ts`、`liveInitToolFace.ts`、`adapter/activeRunSelfHeal.ts` |
|
|
147
|
-
| 16 | **引擎词汇表与包自检** |
|
|
147
|
+
| 16 | **引擎词汇表与包自检** | 48 | `CONFIG_REFUSAL_CODES` / `isConfigRefusalCode` · `STOP_CONFLICT_CODES` · `isInterruptedToolEndCode` · `isRewindFamilyCode` · `CLIENT_VERBS` · `compensationSplitViolations` · `DELEGATION_CAP_CODES` / `isDelegationCapCode` / `DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP`(0.38.0 #318 件④:core 5.48.0 design/323 委派席位到限**两码,处置不对称禁合并** —— 并发帽=**可等**(兄弟结束即有位)/ 会话累计帽=**等也没用**(这条会话的配额用尽))· `CONFIG_DELEGATION_ENTRY_CAPS`(同批入 `CONFIG_REFUSAL_CODES` 识别表)· `delegationCapDispositionOf` / `MCP_SERVER_REVOKED`(0.39.0 载体到货消费件:core 5.50.0 补 `{ error: code, code }` 孪生拼法后两码真上 `tool_end.errorCode`,0.38.0「先立词不落消费分支」的已知局限自此解除;处置轴 `wait-for-slot` / `reuse-existing-or-await-reap` 机器可读(累计帽=retained-window 帐,行回收配额即回,处置=SendMessage 复用,**非**「换会话/永久耗尽」——0.38.0 段该句系勘误),未知 `delegation.*` 码 ⇒ `undefined`;`mcp.server_revoked` = 操作员 mid-session 吊销 server 后的工具面本地闸(被吊销的 server **名**今天不过 wire 境:detail.server 是进程内位,抬升腿只 lift code——归因渲染候 core 补 typed detail,已点名);载体门 = engine-vocab G3 腿锚 core dist 铸点) | 三端分臂共用的**去字面化** `errorCode` 词表(病根正是三端各抄一份字面);编译期 verb 闭合门;搬迁补偿登记表 | `src/engineErrorCodes.ts`(计数以 `scripts/public-export-baseline.json` 为准,别手抄;A-028.11/.13 补 `DRAINING_ERROR_CODE`/`SCENARIO_NOT_ALLOWED_ERROR_CODE`/`RESUME_AT_ERROR_CODE_PREFIX`;#318 件④ 补 `delegation.*` 族四位 + `config.delegation_entry_caps`;0.39.0 补三新码消费件三位)、`src/classifierVerdictWire.ts`、`src/compensations.ts`、`src/clientSlice.ts` |
|
|
148
148
|
|
|
149
149
|
🔴 **`engineErrorCodes` 的开集纪律**(该文件头注逐字):这些 `ReadonlySet` / 前缀谓词一律是**识别表**,
|
|
150
150
|
回答的是「我认不认得这个码」,**绝不是**「合法码只有这些」。消费点 `switch` **必须留 `default`**,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/client-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.39.0",
|
|
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. Blackboard [1832] design axioms; [1651]/[1652]/[1653] signed seam design. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@sema-agent/agent-types": "^0.2.0",
|
|
38
|
-
"@sema-agent/core": "^5.
|
|
38
|
+
"@sema-agent/core": "^5.50.0",
|
|
39
39
|
"@sema-agent/sdk": "^7.2.0",
|
|
40
40
|
"esbuild": "^0.27.4",
|
|
41
41
|
"typescript": "^6.0.2"
|