@sema-agent/client-core 0.71.4 → 0.72.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 +13 -0
- package/README.md +3 -3
- package/dist/adapter/activeRunSelfHeal.d.ts +0 -2
- package/dist/adapter/activeRunSelfHeal.js +1 -1
- package/dist/engineErrorCodes.d.ts +0 -20
- package/dist/engineErrorCodes.js +6 -6
- package/dist/finalVerifyWire.d.ts +0 -6
- package/dist/finalVerifyWire.js +1 -1
- package/dist/fleet/fleetProjection.d.ts +0 -44
- package/dist/fleet/fleetProjection.js +9 -9
- package/dist/hitl/armedGateRegistry.d.ts +0 -6
- package/dist/hitl/armedGateRegistry.js +3 -3
- package/dist/hitl/gateIdentity.d.ts +0 -4
- package/dist/hitl/gateIdentity.js +2 -2
- package/dist/hitl/hitlBridge.d.ts +0 -2
- package/dist/hitl/hitlBridge.js +1 -1
- package/dist/hitl/planReviewWire.d.ts +0 -2
- package/dist/hitl/planReviewWire.js +1 -1
- package/dist/model/catalogLoader.d.ts +0 -6
- package/dist/model/catalogLoader.js +3 -3
- package/dist/model/providerAuth.d.ts +0 -8
- package/dist/model/providerAuth.js +4 -4
- package/dist/model/providerCatalog.d.ts +0 -2
- package/dist/model/providerCatalog.js +1 -1
- package/dist/modelCapabilityProbe.d.ts +0 -4
- package/dist/modelCapabilityProbe.js +2 -2
- package/dist/oneShotWireCaps.d.ts +0 -2
- package/dist/oneShotWireCaps.js +1 -1
- package/dist/peerFrames.d.ts +0 -11
- package/dist/peerFrames.js +1 -1
- package/dist/promptProfileWireCaps.d.ts +0 -1
- package/dist/promptProfileWireCaps.js +1 -1
- package/dist/toolResult.d.ts +0 -17
- package/dist/toolResult.js +1 -1
- package/dist/ultracodeWireCaps.d.ts +0 -3
- package/dist/ultracodeWireCaps.js +1 -1
- package/docs/INTEGRATION-CLIENTS.md +49 -23
- package/package.json +1 -1
|
@@ -28,13 +28,13 @@ export function providerAuthMethods(preset) {
|
|
|
28
28
|
return out;
|
|
29
29
|
}
|
|
30
30
|
/** 轮询间隔下限(RFC 8628 建议 5s;服务端给更大的值时听服务端的)。 */
|
|
31
|
-
|
|
31
|
+
const DEVICE_CODE_MIN_INTERVAL_MS = 5000;
|
|
32
32
|
/** 会话墙钟上限(design/166 §5:15min)。服务端 `expires_in` 更短时听服务端的。 */
|
|
33
|
-
|
|
33
|
+
const DEVICE_CODE_MAX_LIFETIME_MS = 15 * 60 * 1000;
|
|
34
34
|
/** 429 / slow_down 的退避增量(RFC 8628 §3.5 就是「加 5 秒」)。 */
|
|
35
|
-
|
|
35
|
+
const DEVICE_CODE_BACKOFF_STEP_MS = 5000;
|
|
36
36
|
/** 单次 HTTP 预算。 */
|
|
37
|
-
|
|
37
|
+
const DEVICE_CODE_HTTP_TIMEOUT_MS = 10_000;
|
|
38
38
|
/** 异常 → 短 detail(绝不带栈、绝不带响应体)。 */
|
|
39
39
|
function shortError(e) {
|
|
40
40
|
return (e instanceof Error ? e.message : String(e)).slice(0, 160);
|
|
@@ -47,8 +47,6 @@ export interface ProviderCatalogRow {
|
|
|
47
47
|
/** 没账号时的注册入口;缺席 = 用 consoleUrl 那条 */
|
|
48
48
|
signupUrl?: string;
|
|
49
49
|
}
|
|
50
|
-
/** api 家族的行内短名(目录行/芯片行两端同一个词,不各自缩写)。 */
|
|
51
|
-
export declare const providerApiShortName: (api: ProviderPreset["api"]) => string;
|
|
52
50
|
/**
|
|
53
51
|
* 全表 → 目录行。**顺序 = 表序**(约束②):这里没有 filter,也没有 sort。
|
|
54
52
|
* `presets` 入参只给测试用(注入一张小表),产品路径恒走 `PROVIDER_PRESETS`。
|
|
@@ -34,7 +34,7 @@ const hostOf = (u) => {
|
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
36
|
/** api 家族的行内短名(目录行/芯片行两端同一个词,不各自缩写)。 */
|
|
37
|
-
|
|
37
|
+
const providerApiShortName = (api) => api === 'anthropic-messages' ? 'anthropic' : 'openai';
|
|
38
38
|
/**
|
|
39
39
|
* 全表 → 目录行。**顺序 = 表序**(约束②):这里没有 filter,也没有 sort。
|
|
40
40
|
* `presets` 入参只给测试用(注入一张小表),产品路径恒走 `PROVIDER_PRESETS`。
|
|
@@ -186,10 +186,6 @@ export interface ModelProbeResult {
|
|
|
186
186
|
verdict: string;
|
|
187
187
|
evidence: ModelProbeEvidence;
|
|
188
188
|
}
|
|
189
|
-
/** 固定题面 —— 短、无歧义、任何模型都答得出,且答案长度可判。 */
|
|
190
|
-
export declare const PROBE_PROMPT = "Reply with exactly OK";
|
|
191
|
-
/** 输出上限:够答一句 `OK`,又不至于让一台在思考的网关烧掉一整个预算。 */
|
|
192
|
-
export declare const PROBE_MAX_TOKENS = 64;
|
|
193
189
|
/**
|
|
194
190
|
* 铸一只探测请求体。
|
|
195
191
|
* @param entry 被探测的条目(只取 `id`)
|
|
@@ -95,9 +95,9 @@ export const MODEL_PROBE_VERDICTS = Object.freeze([
|
|
|
95
95
|
'inconclusive',
|
|
96
96
|
]);
|
|
97
97
|
/** 固定题面 —— 短、无歧义、任何模型都答得出,且答案长度可判。 */
|
|
98
|
-
|
|
98
|
+
const PROBE_PROMPT = 'Reply with exactly OK';
|
|
99
99
|
/** 输出上限:够答一句 `OK`,又不至于让一台在思考的网关烧掉一整个预算。 */
|
|
100
|
-
|
|
100
|
+
const PROBE_MAX_TOKENS = 64;
|
|
101
101
|
/**
|
|
102
102
|
* 铸一只探测请求体。
|
|
103
103
|
* @param entry 被探测的条目(只取 `id`)
|
|
@@ -29,8 +29,6 @@
|
|
|
29
29
|
* 那个)。PURE — callers pass `env`;caller gates to LIVE mode(mock request shape 不变)。
|
|
30
30
|
*/
|
|
31
31
|
import { type EnvLike } from './hostEnv.js';
|
|
32
|
-
/** The env key the shell reads(SEMA_ 命名空间;`-p` 车道 per-request 意图面,非引擎部署面)。 */
|
|
33
|
-
export declare const ONE_SHOT_ENV: "SEMA_HEADLESS_ONE_SHOT";
|
|
34
32
|
/**
|
|
35
33
|
* ENV source → `true`(缺省 ON = `-p` 提交的一次性本性),只有显式 falsy 逃生口
|
|
36
34
|
* ({@link envFlagOff} 拼写集)⇒ `undefined`(不 stamp ⇒ 引擎缺省交互态指引)。
|
package/dist/oneShotWireCaps.js
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
import { hostEnv } from './hostEnv.js';
|
|
32
32
|
import { envFlagOff } from './envFlag.js';
|
|
33
33
|
/** The env key the shell reads(SEMA_ 命名空间;`-p` 车道 per-request 意图面,非引擎部署面)。 */
|
|
34
|
-
|
|
34
|
+
const ONE_SHOT_ENV = 'SEMA_HEADLESS_ONE_SHOT';
|
|
35
35
|
/**
|
|
36
36
|
* ENV source → `true`(缺省 ON = `-p` 提交的一次性本性),只有显式 falsy 逃生口
|
|
37
37
|
* ({@link envFlagOff} 拼写集)⇒ `undefined`(不 stamp ⇒ 引擎缺省交互态指引)。
|
package/dist/peerFrames.d.ts
CHANGED
|
@@ -89,17 +89,6 @@ export type PeerFrameProjection = AgentMessageFrame | CrossSessionMessageFrame |
|
|
|
89
89
|
* 后者是一张 15 键白名单,这三条载体一个都不在里面。
|
|
90
90
|
*/
|
|
91
91
|
export declare function classifyPeerNotification(n: Record<string, unknown>): PeerFrameProjection | null;
|
|
92
|
-
/**
|
|
93
|
-
* core `ENGINE_AUTHORITY_ENVELOPE_TAGS` 的镜像(`core/untrusted-text.ts::ENGINE_ENVELOPES` 里 kind="authority" 的标签):
|
|
94
|
-
* 这些信封在模型面/转录面代表**引擎权威**,一段同事正文里出现它们就是伪造。core 的 `neutralizePeerBody`
|
|
95
|
-
* (= `sanitizeUntrustedText(body, PEER_BODY_ENVELOPE_TAGS)`)在渲染信封**之前**先把它们拆火(`<` 后插 ZWSP),
|
|
96
|
-
* 本模块首版只抄了后一步(同名信封拆火)——异源发包扫描 [high] 实证:子代正文里一段
|
|
97
|
-
* `<task-notification><task-id>victim</task-id><status>completed</status>…` 会原样进转录 block,
|
|
98
|
-
* 宿主 resume 时 `parseTranscriptNotificationSeeds` 把它读成真完成通知 ⇒ 去重台账被毒化,受害 run 的
|
|
99
|
-
* 真完成通知随后被跨通道臂整条吞掉。这里补上那一步,并与 core 同形(`<\s*\/?\s*(tag)(\s[^>]*)?>` 全大小写)。
|
|
100
|
-
* 🔴 单向(与 core 一致):端的解析腿**不**还原 ZWSP —— 拆掉的权威标签就该永远是拆掉的。
|
|
101
|
-
*/
|
|
102
|
-
export declare const AUTHORITY_ENVELOPE_TAGS: readonly ["system-reminder", "task-notification", "new-diagnostics", "user_memory", "scope", "skills", "total_tokens", "instruction-files"];
|
|
103
92
|
/**
|
|
104
93
|
* 投影 → 转录行文本(端的消息面按标签分派的那一份)。
|
|
105
94
|
*
|
package/dist/peerFrames.js
CHANGED
|
@@ -225,7 +225,7 @@ export function classifyPeerNotification(n) {
|
|
|
225
225
|
* 真完成通知随后被跨通道臂整条吞掉。这里补上那一步,并与 core 同形(`<\s*\/?\s*(tag)(\s[^>]*)?>` 全大小写)。
|
|
226
226
|
* 🔴 单向(与 core 一致):端的解析腿**不**还原 ZWSP —— 拆掉的权威标签就该永远是拆掉的。
|
|
227
227
|
*/
|
|
228
|
-
|
|
228
|
+
const AUTHORITY_ENVELOPE_TAGS = Object.freeze([
|
|
229
229
|
'system-reminder',
|
|
230
230
|
'task-notification',
|
|
231
231
|
'new-diagnostics',
|
|
@@ -12,6 +12,5 @@
|
|
|
12
12
|
* 同款)。CALLER 前置 live 门(mock 形不变)。
|
|
13
13
|
*/
|
|
14
14
|
import { type EnvLike } from './hostEnv.js';
|
|
15
|
-
export declare const PROMPT_PROFILE_ENV: "SEMA_PROMPT_PROFILE";
|
|
16
15
|
export type PromptProfile = 'simple' | 'classic';
|
|
17
16
|
export declare function promptProfileFromEnv(env?: EnvLike): PromptProfile | undefined;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* 同款)。CALLER 前置 live 门(mock 形不变)。
|
|
13
13
|
*/
|
|
14
14
|
import { hostEnv } from './hostEnv.js';
|
|
15
|
-
|
|
15
|
+
const PROMPT_PROFILE_ENV = 'SEMA_PROMPT_PROFILE';
|
|
16
16
|
export function promptProfileFromEnv(env = hostEnv()) {
|
|
17
17
|
const raw = env[PROMPT_PROFILE_ENV];
|
|
18
18
|
const s = typeof raw === 'string' ? raw.trim().toLowerCase() : '';
|
package/dist/toolResult.d.ts
CHANGED
|
@@ -107,23 +107,6 @@ export type ModelFacingTaskOutput = {
|
|
|
107
107
|
export declare function parseModelFacingTaskOutput(text: string): ModelFacingTaskOutput;
|
|
108
108
|
export declare function backgroundReceiptParseCalls(): number;
|
|
109
109
|
export declare function _resetBackgroundReceiptParseCountForTest(): void;
|
|
110
|
-
/**
|
|
111
|
-
* T14 回落 —— 后台回执**三代文案**正则(#117a:core ≥1.283 的 `Command running in background` 是
|
|
112
|
-
* 第三代)。structured bash 在场时由 `background`/`task_id` 位取代(见 `wireOutputToBody`)——
|
|
113
|
-
* **该函数在 structured 权威时必须零调用**(`wireOutputToBody` 的 T14 分支已经这样接线;
|
|
114
|
-
* `backgroundReceiptParseCalls()` 是这条不变量的仪器)。
|
|
115
|
-
* 🔴 legacy 回落登记(REF-CC-域词表-04):三代并列是本函数唯一存在的理由 —— 旧分支不能删,
|
|
116
|
-
* 是因为不知道哪个仍在跑的引擎版本还只发这三代文案里的某一代。**何时可删**:当
|
|
117
|
-
* `run-engine-vocab-floor-test.mjs`(engine-vocab 门)确认全部受支持的引擎地板版本都已发
|
|
118
|
-
* `structured.type === 'bash'` 的 `task_id`/`background.task_id` 位(即 structured 白名单成为
|
|
119
|
-
* **唯一**判据,不再有 tolerate-absent 的老引擎在保修窗内)时,本函数随之退役;
|
|
120
|
-
* `detectEngineBgShellReceipt`(#117a 面板探测器,复用同一份 `THREE_GEN_BG_RECEIPT_RE`)另行
|
|
121
|
-
* 评估——它的存在理由不是「structured 回落」而是「引擎侧秒关该卡、只能靠回执文案桥」,
|
|
122
|
-
* 不随本函数退役自动失效。
|
|
123
|
-
*/
|
|
124
|
-
export declare function parseBackgroundReceipt(text: string): {
|
|
125
|
-
taskId: string;
|
|
126
|
-
} | null;
|
|
127
110
|
/**
|
|
128
111
|
* T8 —— 压平非均匀 §E1 `output`(`string` | `(Text|Image)[]`)。
|
|
129
112
|
* ⚠️ 真源在 adapt.ts(A 层 settle 报告也用同一份),本文件只 import,别再写第二份。
|
package/dist/toolResult.js
CHANGED
|
@@ -327,7 +327,7 @@ export function _resetBackgroundReceiptParseCountForTest() {
|
|
|
327
327
|
* 评估——它的存在理由不是「structured 回落」而是「引擎侧秒关该卡、只能靠回执文案桥」,
|
|
328
328
|
* 不随本函数退役自动失效。
|
|
329
329
|
*/
|
|
330
|
-
|
|
330
|
+
function parseBackgroundReceipt(text) {
|
|
331
331
|
backgroundReceiptParseCount++;
|
|
332
332
|
const bg = THREE_GEN_BG_RECEIPT_RE.exec(text);
|
|
333
333
|
return bg?.[1] !== undefined ? { taskId: bg[1] } : null;
|
|
@@ -56,9 +56,6 @@ export declare function ultracodeFromInput(humanInput: string | undefined): true
|
|
|
56
56
|
*/
|
|
57
57
|
export declare function ultracodeForRequest(humanInput: string | undefined): true | undefined;
|
|
58
58
|
export declare function workflowFromInput(humanInput: string | undefined): true | undefined;
|
|
59
|
-
/** Env escape hatch for the deferred-Workflow factory default: `SEMA_WORKFLOW_DEFER=0/false/no/off` restores the
|
|
60
|
-
* pre-[1052] always-exposed shape (schema bytes back in the prefix). Anything else (incl. unset) = defer ON. */
|
|
61
|
-
export declare const WORKFLOW_DEFER_ENV: "SEMA_WORKFLOW_DEFER";
|
|
62
59
|
/**
|
|
63
60
|
* [1052]① 收官形(clay 裁 B 的 core deferred 机制件,cli 接线半场):Workflow「全局默认开但不暴露」——
|
|
64
61
|
* 未命中激活源的 TaskRequest 带 `deferTools:["Workflow"]`(core 1.314 对已挂载工具做 design/36 延迟披露:
|
|
@@ -87,7 +87,7 @@ export function workflowFromInput(humanInput) {
|
|
|
87
87
|
}
|
|
88
88
|
/** Env escape hatch for the deferred-Workflow factory default: `SEMA_WORKFLOW_DEFER=0/false/no/off` restores the
|
|
89
89
|
* pre-[1052] always-exposed shape (schema bytes back in the prefix). Anything else (incl. unset) = defer ON. */
|
|
90
|
-
|
|
90
|
+
const WORKFLOW_DEFER_ENV = 'SEMA_WORKFLOW_DEFER';
|
|
91
91
|
/** 拼写集 = {@link envFlagOff}(REF-CC-141 dup-02 单源)。 */
|
|
92
92
|
function deferOptedOut(env) {
|
|
93
93
|
return envFlagOff(env[WORKFLOW_DEFER_ENV]);
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
| 项 | 值 | 真源 |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| 本包 | `@sema-agent/client-core` **0.
|
|
22
|
+
| 本包 | `@sema-agent/client-core` **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.6.0**(value-level,非 type-only;**0.71.0 抬版**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
|
|
24
24
|
| peer:会话词汇表 | `@sema-agent/agent-types` **>=0.3.0**(type-only,零运行时;0.71.0 抬版:devDep 与 peer 同步,type-superset 门 ④ 撞名预警对着 0.3.0 的 .d.ts 求值) | 同上 |
|
|
25
25
|
| runtime dep | `diff` ^9.0.0(**唯一**一条;portability 门按**等值**钉死) | `package.json` `dependencies` |
|
|
26
|
-
| 公开导出面 | **
|
|
26
|
+
| 公开导出面 | **956** 个运行期符号(+ 44 个测试钩;= 0.72.0 的值:相对 0.71.4 −39 —— CC-32 退役批删 export-liveness 登记 retire 的 39 个零消费导出(23 常量 + 16 函数,名单见 §47);995 = 0.71.3 的值:相对 0.71.2 +9 —— CC-06 `readEffectiveReasoning` / `readEffectiveMemoryScopes` / `resumeReopenFromError` / `resumeReopenContent` / `routePairingVerdict` 五函数 + `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` 四常量;986 = 0.71.0 的值:相对 0.70.2 −`MAX_AGENT_SKILLS` −`DECIDE_WORKFLOW_HOST_NOT_PARKED` +`projectToolRosterDelta` +`mcpEngineLegPresence`;986 = 0.70.0 的值:相对 0.69.2 **一件 additive(`readSkillsListingTruncated`,§39)、零删除**;985 = 0.69.2 的值:相对 0.69.1 **三件 additive、零删除**(CC-13 `isSubFlowSegmentEnd` / `SEGMENT_END_IDENTITY_KEYS` / `droppedWhySentence`,§38);982 = 0.69.0 未发布版的值(原排 0.68.3,因 peer 地板抬升改 minor)= 相对 0.68.2 **十七件 additive、零删除**:`fetchMcpPanel`(CC-03 补件,§36e)+ `readWorkflowResumeAdmissionIncomplete`(CC-05 core 7.18.0 #755)+ `installCoreValuePorts`/`hasCoreValuePorts`/`hasCoreValuePort`/`coreValuePortMisses`/`CORE_VALUE_PORT_NAMES` + 十读口(CC-07 core 值级端口,§36d);0.68.2 相对 0.68.1 十三件 additive:`SEMA_SEGMENT_ID_KEY`(CC-01 段身份键,§35f)/ `projectMcpPanel`+`mcpPanelLastLegDetail`+`projectMcpSection`(CC-03 `/mcp` 面板读视图,§35g)/ `resolveTextSegmentAuthority`/`createTextSegmentLedger`(L-318 `text_end` 权威段替换的判决单源 + print 形段账,详见 §35b/§35c)/ `memoryCaptureDeclarationField`/`MEMORY_CAPTURE_OFF`(L-316 会话级隐私声明的字面唯一铸点,§35d)/ `engineUrl`/`probeHealth`(L-61 件④ SDK 纯工具面原样转口,§35d)/ `AgentClient`/`isApprovalRequestFrameV1`/`isApprovalRevokeFrameV1`(L-61 存量清零:SDK **wire 面**原样转口,§35e)。`0.68.1`/`0.68.0` 是 **952**,那批是相对 0.67.2 **二十件 additive、🔴 两件删除(BREAKING)**:additive = `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`/`RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`RUN_TERMINAL_STATUSES`(L-247 终态词两表分源,详见 §33b)/ `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(L-244 子代下界位自有名,§33g)/ `ASK_UNRESOLVABLE_CAUSES`/`readAskUnresolvable`/`DURABLE_MANDATE_SOURCES`/`readDurableGateUnavailable`(core 7.17.0 #709 ①② 两只通告事实窄读器,§33c)/ `WORKFLOW_PARK_TRUTH_UNREADABLE`/`WORKFLOW_PARK_NOT_PENDING`/`WORKFLOW_PARK_BINDING_BROKEN`/`WORKFLOW_PARK_REQUIRES_RUN_STORE`(四个单码常量 🔧 0.72.0 退役)/`WORKFLOW_PARK_REFUSAL_CODES`/`isWorkflowParkRefusalCode`/`readWorkflowParks`(core 7.17.0 #652 park 真相四码 + parks 三键读器,§33d)/ `ENGINE_STOP_REASONS`/`engineStopReasonToCc`(L-246 A13 停止原词映射下沉,§33g)/ `readCancelRequested`(L-230 读面,§33f);🔴 **删除两件** `TERMINAL_NOT_SUCCESS_STATUSES`/`TERMINAL_STATUSES`(随 L-247 两表分源更名成 `RUN_TERMINAL_*`,clean-cut **不留别名** —— 留一个别名等于让端可以继续按合起来的那张表读,分源就白做了,详见 §33b)。`0.67.0` 是 **934**,那批是相对 0.66.0 **七件 additive、🔴 两件删除**:additive = `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`(core 7.14.0 退役 `classifierUnavailable` 之后的**拒绝面**继任读器与措辞,详见 §32b)/ `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`(core 7.14.0 #688 C3 的规则店机制位三件,详见 §32d);🔴 **删除两件** `classifierUnavailableOf`/`classifierUnavailableDetail`(随 core 7.14.0 的 Retired keys 表整族退役,clean-cut 不留别名,详见 §32b;同批删的还有**型** `ClassifierUnavailableView`、卡位与帧位 `classifierUnavailable`、以及一条恒真的型面钉 `_askOriginWordsPin`)。`0.66.0` 是 **929**,那批是一件 additive、零删除:`readRunCostFacts`(终局成本事实的唯一读器:`costBreakdown` / `nested` 窄读 + 对账三段与两个判别位,终帧超集键与 chrome 对账臂共用它;详见 §31c);已发的 **0.65.x 十一件 additive、两件删除**:additive = `DECIDE_WORKFLOW_HOST_UNKNOWN`/`DECIDE_WORKFLOW_HOST_NOT_PARKED`/`DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED`/`DECIDE_WORKFLOW_LANE_CODES`/`readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070 `/decide` 回执读面与三码人话,详见 §30h)/ `TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇单铸谓词,详见 §30j);🔴 **删除两件** `AUTO_MODE_BREAKER_CAUSES`/`classifierBreakerOf`(熔断族随 core 7.12.0 的 Removed(BREAKING) 整只退役,clean-cut 不留别名,详见 §30k②;同批删的还有**型** `ClassifierBreakerView` 与 `ClassifierStatusView.breaker` 一位)。`0.64.2` 是 **919**,那批是一件 additive、零删除:`readDenialLimitFallback`(限额回落卡的窄读器上公面,壳侧同判据副本退役,详见 §29③);`0.64.0` 是 **918**,那批是件①+件② 十三件 additive、零删除:`CLASSIFIER_STATUS_STATES`/`classifierBreakerOf`/`classifierStatusOf`/`classifierStatusDetail`(分类器状态面,详见 §28②)/ `THINKING_FORMATS`/`THINKING_FORMAT_WIRE_TWINS`/`THINKING_DISABLE_PROBE_ORDER`/`MODEL_PROBE_VERDICTS`/`PROBE_PROMPT`/`PROBE_MAX_TOKENS`(两个探针常量 🔧 0.72.0 退役)/`probeRequestBody`/`probeModelCapability`/`applyProbeToEntry`(模型思考能力探测,详见 §28①);`0.63.0` 是 **905**,那批是八件 additive、零删除:`projectServerGateKnobs`/`postureKnobSourceOf`/`postureSourceIsOperatorPinned`/`postureKnobDetail`/`POSTURE_SOURCE_WORDS`(S-178 三根 posture 旋钮读数,详见 §27b)/ `PERSISTED_RULE_BEHAVIORS`/`PERSISTED_RULE_BEHAVIOR_UNKNOWN`/`persistedRuleBehaviorOf`/`persistedRuleBehaviorLabel`/`revokeTargetFromPersistedRule`(三态规则身份,§27c)/ `engineIdentityOf`/`engineIdentityVerdict`/`engineIdentityChanged`/`engineIdentityChangedBy`/`ENGINE_IDENTITY_ANCHORS`(S-179 代际锚,§27d)/ `GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail`(门词汇 +2,§27e)/ `PERMISSION_RULE_ISSUE_CODES`/`RETIRED_PERMISSION_RULE_ISSUE_CODES`/`permissionRuleIssueDetail`(规则 lint 码表,§27f)/ `projectToolRoster`/`toolRosterNames`/`toolShimFromRoster`/`applyToolRosterDelta`(L-161 工具名册,§27g)/ `ENGINE_NOTICE_CODES`/`ENGINE_NOTICE_AUDIENCE`/`noticeAudienceOf`/`engineNoticeInCatalog`/`MCP_INJECTION_DROP_REASONS`/`readMcpInjectionDrop`(L-167 通告码册,§27h)/ `AUTO_MODE_UNAVAILABLE_CAUSES`/`AUTO_MODE_BREAKER_CAUSES`/`classifierUnavailableOf`/`classifierUnavailableDetail`(件⑧ 分类器不可用事实,§27h2);`0.62.0` 是 **869**,那批是五件 additive、**零删除**:`capForDisplay`(呈前消毒 + 封长的共用铸点,详见 §26⑦)/ `SEAT_SEND_MESSAGE_KEY_ORIGINS`(座位载荷逐键出身表,详见 §26③)/ `configureSubagentContentStore`+`subagentContentStoreConfig`+`SUBAGENT_CONTENT_STORE_DEFAULTS`(子代内容账本字节预算,测试钩 `__resetSubagentContentStoreConfigForTests` +1,详见 §26②);`0.61.0` 是 **864**,那批是三件 additive、**零删除**:`projectReadFacePosture`/`readFacePostureDetail`/`readFaceDisagreement`(S-167 READ 容纳面 operator 读器,详见 §25);`0.60.0` 是 **861**,那批是二十五件 additive、**零删除**:`readRunTerminal`/`runTerminalCode`/`runTerminalGateKind`/`runTerminalGateToolName`/`isReviewPark`/`REVIEW_PARK_GATE_KINDS` 六件终局因由读器 + `gateOutcomeOf`/`isDeniedGate`/`gateDeniedBy`/`gateApprover`/`isApprovalWindowExpiredGate`/`isDenialLimitAutoDeniedGate`/`isParkSlaExpiredGate`/`isHumanSettledGate` 八件门记录读器 + `projectWriteProtectionCapability`/`noteEngineCapsForWriteProtection`/`observedWriteProtection`/`forgetWriteProtectionReading`/`writeProtectionDoctorDetail`/`projectWriteProtectionPosture`/`writeProtectionPostureDetail` 七件写保护读面(测试钩 `__resetWriteProtectionReadingsForTests` +1)+ `readWireErrorCode` + 真机边界①的两件 `isGateParkedToolEnd`/`GATE_PARKED_ERROR_CODE` + 异源复审逼出的 `engineCapsGeneration`;`0.59.0` 是 **836**,那批是八件 additive:`RULE_OFFERS_ABSENCE_REASONS`/`DENIAL_LIMIT_KINDS` 两张闭词表再导出 + `engineCapValue` 能力位四态通用读口 + `projectSqlEngineCapability`/`observedSqlEngine`/`noteEngineCapsForSqlEngine`/`forgetSqlEngineReading`/`sqlEngineDoctorDetail` 五件 SQL 姿态读面(测试钩 `__resetSqlEngineReadingsForTests` +1);`0.58.0` 是 **828**,那批是三件 additive:`RULE_OFFER_MATCHES`/`RULE_OFFER_BATCH_MEMBER_KINDS`/`RULE_OFFER_UNCOVERED_REASONS` 三张闭词表再导出 + `RESUME_REFUSAL_CODES`/`RESUME_PLACEMENT_MISMATCH`/`resumeRefusalFromError`/`resumeRefusalContent` 四件文案铸点;`0.57.0` 是 **821**;`0.56.0`/`0.55.0` 是 **815**;已发 `0.54.0`(design/385 十件 additive 含 `AUTHORITY_ENVELOPE_TAGS` 🔧 0.72.0 退役);`0.52.0` 是 **805**(L-69⑨ 两件);`0.51.0` 是 **803**;`0.50.0` 是 **800**(S-81 五件);`0.49.0` 是 **795**;`0.48.0` 是 **794**;npm `0.47.0` 是 **790**,`0.46.0` 是 **787**,`0.44.0` 是 **783**,`0.43.1`/`0.43.0` 是 **776**,`0.42.0` 是 **771**,`0.41.0` 是 **767**,`0.39.0` 是 **766**,`0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
|
|
27
27
|
| 常驻门 | 以 `scripts/gates-manifest.json` 的 `suites` 长度为准(**本档不抄这个数**) | `scripts/gates-manifest.json`;`npm test` 的名单等值门与它逐名对账 |
|
|
28
28
|
| 沿革档 | 0.29.0 起建 `CHANGELOG.md`;更早批次记账在 `src/index.ts` 文件头 + `docs/REFACTOR-LEDGER.md` | — |
|
|
29
29
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
additive 导出成立(`engineCapState` + `EngineCapState`、`resolveEntryVision` /
|
|
43
43
|
`computeDeleteBlockers` / `computeDeleteWarnings`、`CONFIG_DELEGATION_ENTRY_CAPS` /
|
|
44
44
|
`DELEGATION_CONCURRENCY_CAP` / `DELEGATION_SESSION_CAP` / `DELEGATION_CAP_CODES` /
|
|
45
|
-
`isDelegationCapCode`、`wireCycleSeq`
|
|
45
|
+
`isDelegationCapCode`、`wireCycleSeq`)。旧版对表以 `CHANGELOG.md` 对应版本段为准。
|
|
46
46
|
|
|
47
47
|
🔴 **本表里仍然手抄的数字都有门看着**(#252,2026-08-14):`scripts/run-integration-doc-freshness-test.mjs`
|
|
48
48
|
① 段把 638 / 32 / §2b 十六域名数之和 / 191 / 4 / 33 逐个对 `public-export-baseline.json` 算出来的值,
|
|
@@ -121,7 +121,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
121
121
|
|
|
122
122
|
## §2 公共导出面地图(按域)
|
|
123
123
|
|
|
124
|
-
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**
|
|
124
|
+
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**956** 项)。
|
|
125
125
|
> 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
|
|
126
126
|
> **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
|
|
127
127
|
> 单一入口:`import { … } from '@sema-agent/client-core'`(`exports` 只有 `.` 一个;
|
|
@@ -145,10 +145,10 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
145
145
|
`WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
|
|
146
146
|
**4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
|
|
147
147
|
|
|
148
|
-
|
|
148
|
+
956 项的内部构成(帮助端估读表大小;0.72.0 −23 常量 −16 函数(CC-32 退役批);0.71.3 +4 常量 +5 函数(CC-06);0.71.0 −2 常量 `MAX_AGENT_SKILLS` / `DECIDE_WORKFLOW_HOST_NOT_PARKED` +2 函数 `projectToolRosterDelta` / `mcpEngineLegPresence`;0.70.0 起 +1 函数;0.69.2 起 +3:常量 1 / 函数 2):**278** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
|
|
149
149
|
(矩阵、键集、env 名、锚串)而非可调用物;**6** 项是 PascalCase 运行期值
|
|
150
150
|
(`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError`);
|
|
151
|
-
**
|
|
151
|
+
**37** 项是 `*For(sessionKey, …)` 的 per-session 变体(0.72.0 −4:`clearArmedGateFor` / `onGateArmedFor` / `registerArmedGateFromQuestionIdFor` / `notePlanReviewAnsweredIfDecisiveFor` 退出公面)(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
|
|
152
152
|
|
|
153
153
|
### 2b. 域图(16 域,逐域计数之和 = 982)
|
|
154
154
|
|
|
@@ -156,20 +156,20 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
156
156
|
|---|---|---|---|---|---|
|
|
157
157
|
| 1 | **适配内核(下行主链)** | 57 | `readEffectiveReasoning` · `readEffectiveMemoryScopes`(0.71.3 CC-06:终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` 的窄读器,§45)· `isSubFlowSegmentEnd` · `SEGMENT_END_IDENTITY_KEYS` · `droppedWhySentence`(0.69.2 CC-13:三件出公面,§38)· `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `SEMA_SEGMENT_ID_KEY`(0.68.2 CC-01:committed assistant 文本行顶层段身份键的唯一字面量出处,壳只读)· `projectMcpSection`(0.68.2 CC-03:`wiring_manifest.mcp[]` 与 `/mcp` 面板 `lastLegMcp.mcp[]` 共用的同一只条目读器)· `readRunCostFacts`(0.66.0:终局成本事实的**唯一读器** —— `TaskStats.costBreakdown` / `nested` 逐键窄读 + 对账三段(own/nested/compaction)与两个「没定价」判别位;终帧的两个超集键与 chrome 臂 `run_cost_reconciled` **共用它**,两面不会各算各的,详见 §31c)· `TERMINAL_CAUSE_KINDS`/`isTerminalCauseKind`(0.68.0 / L-247:**core 终局因由**闭集,四词 `completed|failed|blocked|paused`)· `RUN_TERMINAL_NOT_SUCCESS_STATUSES`/`isTerminalNotSuccess`/`RUN_TERMINAL_STATUSES`/`isTerminalStatus`(L-215② 终局词汇的**单铸谓词**,0.68.0 随 L-247 **两表分源**更名 —— `killed` 属 server run 行状态面、`paused` 属 core 因由面,合成一张会让两边加词时都读不出该改哪儿;`blocked` 是 agent 自报终态,`suspended`/`needs_review` 刻意不在表里,详见 §33b / §30j)· `SEMA_SUBAGENT_USAGE_PARTIAL_KEY`/`subagentUsageIsPartial`(0.68.0 / L-244:子代用量下界位的**自有名**与唯一判据,与终帧 `_sema_usage_lower_bound` 分名,详见 §33g) · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
|
|
158
158
|
| 2 | **seam 公共契约** | 2(其余为 type-only) | `CHROME_ARMS` · `deriveTranscriptId` | 公共词汇 + **id 确定性不变量**(同一条流重放 ⇒ 同一串 id)。`CHROME_ARMS` = 端「我要消费哪些 chrome 臂」的对照清单 | `src/seam.ts` |
|
|
159
|
-
| 3 | **HITL 决断卡链**(§4/§5 主战场) |
|
|
160
|
-
| 4 | **子代 wire + 面板侧信道台账** |
|
|
161
|
-
| 5 | **fleet 投影** |
|
|
159
|
+
| 3 | **HITL 决断卡链**(§4/§5 主战场) | 160 | `makeHitlCanUseTool` · `HitlBridge` · `findPendingForTask` · `readDecideReceipt`/`decideAcceptedNotResolved`/`decideRefusalFromError`(B-070:`/decide` 200 = **投递受理**不是「门已解决」;`executionOutcome` 缺席 = 未知,详见 §30h) · `HitlSafetyError` · `bridgeAskUserQuestionGates` · `surfaceToolApprovalFrameAndRespond` / `surfaceFsApprovalAndDecide` · `readToolApprovalRespondAck` · `installApprovalCardPort(For)` · `installHitlHostSurface(For)` · `armPlanReviewApproval` · `reopenPlanReviewCard` · `decidePlanReview` · `startApprovalsFeed` · `pendingRowIsOwnedByThisSession` · `approvalCallKey`/`liveFrameCallKey`/`planReviewQuestionId` · `registerArmedGateFor`/`wasGateArmedFor` · `waitForGateArmed(For)`/`onGateArmed`/`gateArmedWaitMs`(#244 F1 呈现回执事件源) · `planReviewArmedKey(For)`/`notePlanReviewAnswered(For)`/`notePlanReviewAnsweredIfDecisive`(A-024.4 plan 呈现分代) · `toolEndOutputText` · `isAskTool` · `waitForParkRowBirth` · `classifyAskParkRows` / `askParkRowArm` / `classifyAskParkChainFailure` · `readDecisionNoteAudit` / `decisionNoteAuditLine` · `resumeRunningOptions` / `resumeChoiceFromLabels` · `persistedRulesLaneAvailable`/`persistedRulesGovernanceAvailable` · `classifyRulesFailure` · `listAllPersistedRules` · `classifySkippedReason` · `readRulePersistOutcome`(#244 F2:persist-ack 读口与 `readToolApprovalRespondAck` 合成一处) · `parseLocalAllowRule`(durable 腿本地落规则窄化骨架,谓词经 `LocalAllowRuleDeps` 注入) · `readToolApprovalRespondRefusal`(#225 件5,0.42.0:respond 抛错的结构化原文读口 —— 三位各自防御读、各自缺席不铸、**三位皆缺席时整只返 `undefined`**;原样交还零加工,UNTRUSTED-for-display)· `installEditedRuleTextPrechecker` / `hasEditedRuleTextPrechecker` / `precheckEditedRuleText`([5076] 转出口,0.42.0:core 5.57.0 `precheckEditedRuleText` 的**端口注入形** —— 类型面 + 注入口 + 诚实缺席读口。🔴 **不是** value 级 re-export,理由见 §7 缺口 **P-34**;未装 ⇒ 返 `undefined`,绝不编一个 `{ok:true}`)· `surfaceRuleArmNotSent` / `RULE_NOT_SENT_WARN_TEXT` + `surfaceRuleArmRejected` / `RULE_NOT_SENT_REJECTED_WARN_TEXT`(#334,0.43.0:人在卡上按下的「不再询问」被整条丢弃时的诚实告知——**两条刻意分开**:前者=**引擎能力位未确认**(换台引擎/等探测就好),后者=**这次选择没过包内表核/互斥核**(表外文本/坏下标/两臂同场,换引擎也不会变) —— 编辑臂 `respondFreeFormRules` 与批臂 `respondBatchRuleOffers` 两条同形存量共用一条,与 `surfaceRememberNotApplied` 同族纪律:决断照送、只是规则没存,静默丢掉用户明确意图 = 让人以为功能坏了)· `projectCrashConverged`(L-38,0.49.0:`/v1/approvals` additive 键 `crashConverged` 的分桶投影 —— 崩溃收敛的孤儿审批读面,**缺席 ≠ 空数组**、分桶恰一个合取、坏行丢弃并计数,详见 §12;同批把 `ApprovalsResourceLike.list()` 的返回位 additive 放宽成 `ApprovalsListEnvelope`,老形 `{pending}` 仍可赋值)· `readRuleOffers` / `readRuleOfferSupply`(L-103/[C228],0.57.0 additive 导出:「不再询问」候选两代 wire 键的窄读器**公面化** —— 此前只经卡端口出包,不走卡端口架构的宿主只能自己重铸一把,而它承载的是兑付安全判据(原始下标不前移/逐条丢坏/闭集 kind/两代取舍序),详见 §20)· `RULE_OFFERS_ABSENCE_REASONS` / `DENIAL_LIMIT_KINDS`(0.59.0 / sdk 8.3.0 提货:`ruleOffersAbsence` 三词与 `denialLimitFallback.limit` 二词的**运行期**闭词表再导出 —— 与 0.58.0 那三张同一条纪律:端拿它做判定别再手抄字面量。⚠️ **本包自己不拿这两张表做窄读判定**(两处都按开集透传,词表属主是 core、server 已按闭集拒过),再导出只是给端的 `switch` 一份可数的表,端仍必须带 `default` 臂,详见 §23a)· `DecideTransportRetryExhaustedError`(Inkglow-1085 P0a:decide 出站瞬断重试耗尽的 typed 判别 —— HitlBridge 内建单次退避重试,耗尽走重呈臂不判死 turn;端一般只消费行为,不需要 instanceof) · `gateOutcomeOf` / `isDeniedGate` / `gateDeniedBy` / `gateApprover` / `isApprovalWindowExpiredGate` / `isDenialLimitAutoDeniedGate` / `isParkSlaExpiredGate` / `isHumanSettledGate`(0.60.0 / engine ≥7.64.0:`tool_end.gate` 整条门记录的窄读器 + 判定谓词 —— 取代退役的四个正交词 `settledBy`/`resolution`/`autoDenied`/`approver`。🔴 **判定归包**:「是不是审批窗自己走完的拒绝」旧形上是端各自拼的两键合取,而三条窗词现在分得开、合并读回去等于把刚修好的判别力扔掉;⚠️ 公面型一律带 `View` 后缀 —— 本文件的 `GateOutcome`(决断腿结局)与 sdk 的 `GateOutcome`(引擎门记录)**同名不同义**,详见 §24c)· `isGateParkedToolEnd`(「这次调用没在这里结算」的**第二形**谓词:gate 缺席 + `errorCode:"gate.parked"`;端判这件事必须与 `isApprovalWindowExpiredGate` **两形合读**) · `readWireErrorCode`(B-037 候包件②:decide/取件失败上引擎 wire 机器码的单源读口,结构视图读不 `instanceof`;与本包铸的 `code` 是两个命名空间,详见 §24g)| suspended→decide→resume 环。🔴 **D-1 两元组 verbatim 回显**是字节级断言的安全不变量,端**不许重实现它的任何一段**。🔴 键空间边界(web [C1] d3 拦截):`gateIdentity` 四常量两函数只覆盖 HITL questionId/callKey 空间;seat 的 `TOOL_PERMISSION_REQUEST_ID_DOMAINS`(`plan:` 等)是另一键空间,**两者绝不合并**(合并=座位校验器静默拒全部 plan-review 卡) | `src/hitl/hitlBridge.ts`、`toolApprovalWire.ts`、`askGateWire.ts`、`planReviewWire.ts`、`hitlHostSurface.ts`、`gateIdentity.ts`、`armedGateRegistry.ts`、`parkOwnership.ts`、`parkResolver.ts`、`approvalsFeed.ts`、`frameRouter.ts`(**只挑名导出** `toolEndOutputText`/`ENGINE_ABORT_TOOL_RESULT`/`isAskTool`/`HITL_REJECT_MESSAGE`/`HITL_INTERRUPT_MESSAGE_FOR_TOOL_USE`)、`parkRowBirthWait.ts`、`approvalDecisionNoteAudit.ts`、`askParkRowRouting.ts`、`resumeRunningCard.ts`(#265 上收的判定层)、`persistedRulesWire.ts`、`localAllowRule.ts`(#244 F2 规则侧)、`crashConverged.ts`(L-38 崩溃收敛读面)、`src/gateOutcome.ts` |
|
|
160
|
+
| 4 | **子代 wire + 面板侧信道台账** | 86 | `tailEngineSubagent` · `installSubagentActivitySink` · `installSubagentTailMetaSink`(#280 件2:tail meta 帧发布口,`contentFrames` 判别位载体)· `stopEngineTask` + `classifyTaskStopConflict` · `fetchEngineSubagentReport` · `steerEngineSubagent`(0.32.0 未发布 #280 件A:additive 第三参 `childTaskId` —— 端有行上下文时**应当**传,传了就走「台账优先 / 缺席即诚实缺席 + `noteBgOwnerAbsence` 留痕」的 Q3 口径,与 tail·taskOutput·subagentOutput 三腿同姿势、与孪生 resume 腿共用同一个 `resolveOwnerRunId` 判据;**不传**则逐字维持旧行为=回落在飞 run)· `resumeSettledSubagent` + `resolveSubagentResumeContext` + `resolveOwnerRunId` + `classifySubagentResumeFailure` + `subagentResumeAvailable`(#242 批 2 A-028.7:resume 判定半场上收,与 steer 孪生同居;取址三态 = 台账有行用行值 / 指名了行但台账缺席则**诚实缺席绝不回落在飞 run** / 没指名行才回落。出路文案归端)· `recordSubagentOwnerFromProgress` + `getBgParentRunOwner`(A-028.6:「子代 → 宿主 run」**单表**,宿主 run 必须由持 stream-local 值的调用方显式传入,包内绝不从 `activeEngineRunId()` 推断)· `noteBgOwnerAbsence`(#242 批 3 [4000] Q3=B:tail/taskOutput·taskStop/subagentOutput 三腿台账缺席即诚实缺席**绝不回落在飞 run**,缺席 warn 留痕每 (腿,taskId) 一条)· `clearBgTerminalFacts`(#242 批 3 扫码修:复活=新周期,旧周期终态事实作废——fleetLedger 复活两腿按尾段清账,factsAccepted 方向核不再拿上周期终态当先例)· `auditRetainWithoutWake`([4000] Q5:引擎宣示 `subagentResume` + 本端在付 `retainSubagentSessions` + 端未实现 `wakeSubagent` ⇒ 响亮一条;`CLIENT_VERBS.wakeSubagent` 维持 fail-soft)· `subscribeSubagentContent` · `subscribeEngineAgentPanel` · `publishQuestionFrame` / `respondToQuestion` · `configureSubagentContentStore` / `subagentContentStoreConfig` / `SUBAGENT_CONTENT_STORE_DEFAULTS`(0.62.0:子代内容账本的**字节预算** —— 此前只有条数帽而单条无上限,一条 base64 工具结果就能让一个子代槽吃到十几 MB;越限从最早的内容开始丢并留一条可渲染的 `truncated` 记录,总帽淘汰整条最久未用的账本。配置面 fail-loud,详见 §26②)| 驱动与观测委派子代;经 module 级台账喂活体 agent/task 面板。全部**能力位 gate**(§5b) | `src/subagent/*.ts`、`src/subagentContentStore.ts`、`src/engineAgentPanelStore.ts`、`src/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
|
|
161
|
+
| 5 | **fleet 投影** | 38 | `createFleetLedger` · `projectTasks` · `projectWorkflows` · `projectFleetAgentRows` · `readEngineActiveBgTasks` · `FLEET_TASK_VIEW_KEYS` · `escapeDisplayControlChars`(不可见字符可见化,行标签/描述消毒的共享底座)· `capForDisplay`(0.62.0:呈前**消毒 + 封长**的共用铸点 —— 先转义、后按转义结果封长,截点避开半截转义 token 与合法代理对;本包该族四处此前各写一份、其中三份顺序是反的,详见 §26⑦)· `wireCycleSeq`(0.38.0 提货补投的 #261 §2 两位之一,另一位 `wireRetiredBy` 🔧 0.72.0 退出公面:代际号 = SendMessage 复活即 +1,**缺席 ≠ 第一代**;`retiredBy` 在场 = 这条终态是对账腿从 durable run 行投影出来的、**不是**发布方亲报 —— 幽灵行与正常收尾唯一的 wire 判据。两位都只在场才落键) | 老 `fleetClient` 那一刀的成品:**帧体归库、连接归端** —— 端持 SSE 连接,库做行投影 + 保留台账 | `src/fleet/fleetProjection.ts`、`src/fleet/fleetLedger.ts`、`src/fleetAgentPanelProjection.ts`、`src/fleetTaskDesc.ts` |
|
|
162
162
|
| 6 | **请求装配(上行唯一构造口)** | 10 | `buildTaskRequest` · `REQUEST_FIELD_MATRIX` · `unregisteredRequestKeys` · `applyLiveRequestDefaults` · `taskNotificationToPrintFrame` | 两条车道(`interactive`/`print`)出站请求的**唯一**构造器;`unregisteredRequestKeys` 是可执行门 —— 端偷带一个未登记键上 wire 就红 | `src/request/taskRequest.ts`、`src/request/printNotification.ts` |
|
|
163
163
|
| 7 | **通知与 outstanding 台账** | 51 | `installNotificationQueuePort` · `normalizeTaskNotification` · `taskNotificationDedupKeyFromWire` · `registerOutstandingBgTask` / `registerOutstandingWorkflowRun` · `notificationQueuePortMisses` · `subscribeOutstandingWorkflows` · `outstandingDeliverableWorkflowCount` | `task_notification` 归一 + 去重 + 投递进宿主命令队列的**一把闸**;`outstandingDeliverableWorkflowCount()` 是 headless `-p` 的**退出门** · `classifyPeerNotification` / `renderPeerFrameTranscriptText` / `parsePeerFrameText` / `peerFrameDisplayName` + 三张闭集表(design/385,0.54.0:同一条 `task_notification` 车道上三条**引擎注入帧**的类型化投影 —— 判别位=载体在场而非 summary 文本,详见 §17) | `src/notifications.ts`(11 个 module 台账) |
|
|
164
|
-
| 8 | **工具结果卡** |
|
|
165
|
-
| 9 | **能力/旋钮 wire 门族** |
|
|
166
|
-
| 10 | **headless / 部署旋钮 wire** |
|
|
167
|
-
| 11 | **模型目录与预算** |
|
|
164
|
+
| 8 | **工具结果卡** | 24 | `structuredToToolUseResult` · `readAsyncLaunchedAgentReceipt` · `wireOutputToBody` · `parseModelFacingBash` · `getPatchFromContents` · `toolEndResultToUserFrame` · `flattenToolOutput` | 铸端要渲的 `tool_result` 卡体,含客户端 diff hunk(唯一 runtime dep 的用处) | `src/toolResult.ts`、`src/printToolResultFrame.ts`、`src/diff/patch.ts` |
|
|
165
|
+
| 9 | **能力/旋钮 wire 门族** | 95 | `projectAgentsForWire` / `awaitTaskAgentsWire` · `hooksForWire` · `mcpConfigsToSpecs` · `ultracodeForRequest` · `resolveWebSearch` + `buildWebSearchEnv` · `attachmentsForRequest` · `projectEffectiveBody` · `classifySelfOrchestrationRefusal` / `stripSelfOrchestrationIntent` / `projectWorkflowsGate` / `SELF_ORCHESTRATION_RETRY_WITHOUT`(S-81,server 7.57.0:上面两条 stamp 腿的**背面** —— 半配置多租户形态下 server 把带 `selfOrchestration` / `settings.ultracode` 的提交 501 拒掉,判型/去键/caps 闸三处都是判定不是文案,详见 §13) · `engineCapsGeneration`(0.60.0,异源对抗复审 [medium] 逼出:caps 探测的**当代号**读口 —— 代际闸在 probe **返回之后**才跑,而宿主的读面 tee 是在 probe **内部**落地的 ⇒ 一次慢的旧探测能把上一台引擎的读数写回来。宿主在**起探测那一刻**抓号、tee 时交回 `{generation}`,陈旧那一发整只丢掉;不传 = 逐字节同行为,详见 §24e)| 逐功能的「引擎有没有这个能力 + 这个字段怎么上 wire」投影器,由 `buildTaskRequest` 组装。🔴 `hooksForWire()` 是 **fail-closed**:无 `SettingsPort` ⇒ 返回 `undefined`(信任门,不是取值) | 17 个 `src/*WireCaps.ts` + `src/scratchpadWireCaps.ts`、`src/hooksWireCaps.ts`、`src/goalStopHook.ts`、`src/websearch/searchProviderPresets.ts`、`src/selfOrchestrationDenial.ts`(S-81 拒绝判定层) |
|
|
166
|
+
| 10 | **headless / 部署旋钮 wire** | 58 | `parseSandboxArgv` / `sandboxRequestFields` · `parseLimitsArgv` / `limitsForPrint` · `resolveHeadlessFinalVerify` · `resolveHeadlessPermissionMode` · `resolveHeadlessInteractiveTools` · `armDetachCancel` + `detachCancelArm` + `isDetachArmed` · `withHeadlessR1Reconnect` | `-p`/headless 车道的 env+argv 旋钮。🔴 `detachWire` 是**拆**的补偿:判定与 cancel-arm 台账在库,信号路径的裸 fetch 留宿主(`detachCancelArm()` 是取件口) | `src/sandboxWire.ts`、`scenarioWire.ts`、`finalVerifyWire.ts`、`limitsWire.ts`、`interactiveToolsWire.ts`、`headlessPermissionModeWire.ts`、`headlessReconnectWire.ts`、`detachWire.ts` |
|
|
167
|
+
| 11 | **模型目录与预算** | 67 | `routePairingVerdict`(0.71.3 CC-06:`ModelInfo.routePairing` ok / broken / unknown 三态读口,§45)· `resolveModelCatalog` · `loadCatalogWithSources` · `PROVIDER_PRESETS` / `MODEL_FAMILIES` · `defaultMaxTokensFor` · `getLiveModelCatalog` / `setLiveModelCatalogRefresher` · `providerAuthMethods` / `beginDeviceCodeAuth` · `providerCatalogRows` / `providerCatalogRowDetail` / `providerPresetById`(#244 F4 族D A-028.17:46 家表的规范折表层 —— 全表不重排、诚实缺席「model id typed in」,cli 目录/web 向导同一份折表)· `TIER_ORDER` / `CC_TIER_ALIASES` / `isTier` / `resolveTierBinding`(A-028.18:档位词表+校验+fail-open 降档派生单源;settings 存储归宿主)· `resolveEntryVision` / `computeDeleteBlockers` / `computeDeleteWarnings`(0.38.0 #318 件③ 上收:Model Hub 供给面的三端公共判定 —— vision 生效值+来源三态、删除断链核(拒删+指路)、删除降级后果(照删但必说)。**零 IO**,读盘那半场留各端;`doc === null` 的两义在调用方分流) | 三层 provider 目录解析(线上 URL → 包内预设 → 用户覆盖)+ per-model `maxTokens` 封顶。线上腿需注入 `CatalogFetchJson`,缺席 ⇒ 整条不启用(`online.reason='no-fetch-port'`);缓存落盘经 `CatalogCachePort` | `src/model/{catalog,catalogLoader,providerAuth,providerPresets,providerCatalog,tierVocabulary}.ts`、`src/liveModelCatalog.ts`、`src/modelBudgetRule.ts`、`src/sessionModelLatch.ts`、`src/effortWire.ts` |
|
|
168
168
|
| 12 | **workflow 与后台工作视图** | 21 | `projectWorkflowRun` · `readWorkflowResumeAdmissionIncomplete`(0.68.3 CC-05:core 7.18.0 `resumeAdmissionIncomplete` 在场 = 不是 resume 基,与 `readWorkflowParks` 同一条投影义务)· `createLiveWorkflowSource` · `ensureWorkflowActivityLedger` · `readWorkflowActivityLedger` · `stopWorkflowActivityLedger` · `resetWorkflowActivityLedgers` · `createBackgroundView` · `projectBackgroundView` · `recordWorkflowAgentTaskId` · `agentDisplayStatus` | 活过一个 turn 的长任务读面:workflow run + 跨 session 后台任务归一表(`assistant.tasks` 与 fleet SSE **两源独立降级**) | `src/workflow.ts`、`src/workflowClient.ts`、`src/workflowMonitor.ts`、`src/agentSession/backgroundView.ts`(+ 纯类型 `src/agentSession/contract.ts`) |
|
|
169
169
|
| 13 | **座位 IPC 契约** | 34 | `LOCAL_SESSIONS_SPEC` · `SEAT_METHOD_NAMES` · `SEAT_EVENT_TYPES` · `isLocalSessionEvent` · `isToolPermissionRequest` · `toolPermissionRequestId` · `SEAT_VALIDATOR_KEY_COVERAGE` · `SEAT_SEND_MESSAGE_KEY_ORIGINS`(0.62.0:座位载荷**逐键出身**登记 —— 每个位要么写明转投哪个引擎请求位、要么写明为什么不上 wire;常驻门对**装在盘上的** sdk 型面逐名核,详见 §26③)| desktop↔web 座位 IPC 契约的**单一真源**(此前两边各一份、名字零重合 ⇒ 编译器永远不会告诉你它们漂了)。🔴 加 verb 忘了加 `LOCAL_SESSIONS_SPEC` **不报错**:preload 不注册 channel、渲染端读到 `undefined` | `src/seatContract.ts`(**零 import**,纯类型 + 常量 + 纯谓词)。🔴 **证据等级标注(0.42.0,test [5087] 的「语料**种类**缺口」/ cli [5088] 认领件)**:该文件里所有以「CC 如何如何」为形的断言(`212 methods` / `854-channel census` / 方法名逐字保留 / `fQe` 逐字段对照 / 一切 `.vite/build/index.chunk-*.js` 坐标)**证据等级 = 桌面 unpack,本地语料库不可复验** —— 本仓手边可复验的参照语料**只覆盖终端 CLI 形态**的静态产物,拿它去 grep 桌面壳里的符号只会零命中,而零命中在这里**既不证真也不证伪**。复核这些断言**不得**拿本仓语料当反证 |
|
|
170
170
|
| 14 | **宿主端口与会话槽** | 41 | `installHost` · `installHostFor` · `installCoreValuePorts` + 十读口 + 三存在性口(0.69.0 CC-07:core 值级面端口注入,Node 宿主装配根装、浏览器 lane 恒缺席)· `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` |
|
|
171
|
-
| 15 | **控制面与传输** |
|
|
172
|
-
| 16 | **引擎词汇表与包自检** |
|
|
171
|
+
| 15 | **控制面与传输** | 122 | `mcpEngineLegPresence`(0.71.0 CC-19:引擎侧 MCP 在场三值,只从面板视图求;§42)· `ControlRouter`(+ `ControlSafetyError`)· `fetchMcpPanel`(0.69.0:经 sdk `sessions.mcp` 取体 + 投视图,不裸 fetch)· `projectMcpPanel` + `mcpPanelLastLegDetail`(0.68.2 CC-03:`GET /v1/sessions/:id/mcp` 面板体防御读视图 + `lastLegMcp` 一行措辞铸点;缺席 = 键不铸、读不懂 = `lastLegMcpUnreadable`、禁与 `servers[]` 对账)· `makeEngineWireClient` + `resolveWireAuth` · `installEngineWireTarget` · `diagnoseSseIdleTear` / `isSseIdleError` · `attemptActiveRunSelfHeal` + `activeRunBusySignal` + `activeRunSelfHealRow` / `activeRunBusyHeadlessRow` · `kickEngineCapsProbe` / `engineCapTrue` / `invalidateEngineCaps(baseUrl, probe?)`(#307 S25:引擎温切后的 caps 生产失效口 —— kick 自带幂等闸,同 baseUrl 重启后不显式失效就永远读到旧引擎那一版能力位;调用方 = 壳的 respawn/restartEngine。🔴 **推荐两参形**:第二参给替代探测则「推进代际 + 注册新探测」在同一同步块内完成,失效与下一次 kick 之间那个「等待者读到未判」的窗按构造不存在;单参形保留给「只丢缓存、这一刻没有替代探测」的调用方,那种情形下读到未判是诚实结局) · `engineCapValue`(S-131,0.59.0:能力位的**四态**通用读口 `unobserved`/`not_reported`/`null`/`value` —— 既有三口把四种「读不出」全折成 fail-closed 一档,对**放行**问题是对的、对**读面/诊断**问题是错的:`null`(引擎明确说没有,正面事实)会与「老引擎不报」「还没探到」在屏上同形。`value` 位刻意不做形校验,形归各能力位自己的窄读器,详见 §23b)· `projectSqlEngineCapability` / `observedSqlEngine` / `noteEngineCapsForSqlEngine` / `forgetSqlEngineReading` / `sqlEngineDoctorDetail`(S-131,0.59.0:`Capabilities.sql`(server ≥7.60.0)的四态读面**从壳侧上收** —— 归层债,0.58.0 时它长在壳里正是因为包侧没有嵌套对象读口。🔴 **导出名与壳侧那份逐字同名 = drift-lock**;`txnMode: null` 是铸点域内的合法值不是畸形;换代失效口清成未观测而不是留旧值,详见 §23b)· `mapBrainStatusToRetry` · `waitForClaimRelease` + `CLAIM_RELEASED_STATES` / `CLAIM_HELD_STATES` · `atMostOnceFailureClass` / `readSteerDelivery` · `clearRunningChoiceOffer`(Inkglow-1085 P0b①:「Do nothing」登记的清口 —— 端的「重新打开操作菜单」入口;登记在场时 attemptActiveRunSelfHeal 不整卡重弹,not-parked 结局带 `alreadyOffered: true` 判别位,端据此降级渲一行)· `INTERACTIVE_WAY_OUT`(默认出路串单源)· `engineSessionParamFor`(design/285 批 0:`?session=` 派生的 **per-key** 形 —— `hostSessionFor(sessionKey)?.currentSessionId()` + [1501] 空串归一;零参 `engineSessionParam()` = 默认槽兼容层,取值链逐字等价)· `normalizeWirePrincipal`(A-028.10:principal 在场性 trim 原语 —— 全空白=缺席不发头,engineWireTarget 两臂/makeEngineWireClient/壳 livePrincipal 同尺)· `readSessionMemoryStatus` / `classifyMemoryStatusFailure` / `readCaptureOptOut` / `readLastCapture`(S-53 会话记忆姿态读面,0.48.0:失败分诊**码优先**——两个 404 分道 `not_found.session` / `not_found.route`,无码 404 不猜落 failed;五键逐键缺席语义两个合读器,`lastCapture` 三态的判别材料是 `committedCount` 不是本键;IO 归宿主注入 `MemoryStatusClientLike`,详见 §11) · `classifyTurnWireError` / `isWireTransportError` / `isPreStreamDrainingReject` / `isResumeAtRejection` / `drainingRetryDelayMs` / `scenarioDenyFromError` + `WIRE_NETWORK_ERROR_PATTERN`(A-028.11/.13:turn 错误分型判定半场,人话文案与渲染归端)· `resumeRetryLaterFromError`(L-102,0.57.0:resume 族**时间性拒绝**二码的判型半场 —— 这一族里唯一**带得出「等多久」**(`retryAfterSec`)的两个码。🔴 闭集**不是**「哪些码可以等」的名单:同族 `resume.row_recycling` 同样可等(窗口自清)只是没有秒数 ⇒ 本读口返回 `null` 只意味着没命中这两码,详见 §21) · `projectWriteProtectionCapability` / `observedWriteProtection` / `noteEngineCapsForWriteProtection` / `forgetWriteProtectionReading` / `writeProtectionDoctorDetail` / `projectWriteProtectionPosture` / `writeProtectionPostureDetail`(S-138,0.60.0:`Capabilities.writeProtection` (engine ≥7.63.0)的**四态**读面 + operator 面行表 —— 与上面 S-131 那一格**同构同纪律**。🔴 三位刻意不合成一个布尔;`not_reported` **不是**「这台部署没有写保护表」(座位缺席恰是缺省表在岗);逐行 name/kind 走**最小披露**只上 operator 面,详见 §24e)· `projectReadFacePosture` / `readFacePostureDetail` / `readFaceDisagreement`(S-167,0.61.0:operator 面 `diagnostics.wiring.readFace`(engine ≥7.65.0)的窄读器 —— 与上面S-138 那一格**同构同纪律**。🔴 三句「答不出来」逐字互异且没有一句等于「没有 READ 档」;`source` 按开集读;与租户面 `capabilities.readFace` 刻意不合流,只带一个纯比较函数,详见 §25)| 上行通道的**监管**半场(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`、`src/sessionMemoryStatus.ts`、`src/writeProtectionCapability.ts`、`src/readFacePosture.ts` |
|
|
172
|
+
| 16 | **引擎词汇表与包自检** | 90 | `RESUME_REOPEN_CODES` / `RESUME_ENV_FAILED` / `RESUME_TOOL_UNAVAILABLE` / `RESUME_TOOL_CONTRACT_MISMATCH` · `resumeReopenFromError` / `resumeReopenContent`(0.71.3 CC-06:resume reopen 族三码闭集 + 读口 + 三句,§45)· `readSkillsListingTruncated`(0.70.0 CC-04:`skills.listing_truncated` 事实读器,§39)· `CONFIG_REFUSAL_CODES` / `isConfigRefusalCode` · `DECIDE_WORKFLOW_LANE_CODES`(+ 三个具名码;`/decide` workflow 车道,三条出路刻意不合并,详见 §30h)· `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 铸点)· `CAPABILITY_SELF_ORCHESTRATION_REQUIRED`(S-81,server 7.57.0:提交面的 selfOrchestration 准入拒绝码。🔴 **复用码** —— 与其它 `capability.*` 501 同体形而处置不同,消费点必须按**恰等**判、绝不放宽成前缀判;判型与「去键重发一次」归 `src/selfOrchestrationDenial.ts`,详见 §13) · `GATE_PARKED_ERROR_CODE`(0.60.0:「门把这次调用 park 了」的机读码单源 —— `frameRouter` 的连坐/中断判据与 `gateOutcome.isGateParkedToolEnd` 读同一个常量;真机黑盒直证 park 短路帧上**没有 `gate`**,这个码是那一形唯一的信号,详见 §24c)| 三端分臂共用的**去字面化** `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 补三新码消费件三位);S-81 补 `capability.self_orchestration_required` 一位;L-102 补 `resume.*` 时间性拒绝二码 + 闭集 `RESUME_RETRY_LATER_CODES` 三位)、`src/classifierVerdictWire.ts`、`src/compensations.ts`、`src/clientSlice.ts`;**0.67.0 补锚**(这三件的导出一直计在本域,而本表此前没有它们的锚行 —— 如实补上,不是搬家):`src/gateVocabulary.ts`(`GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail` + 🆕 `RULE_STORE_UNREADABLE_KINDS`/`isRuleStoreUnreadableKind`/`ruleStoreUnreadableDetail`,详见 §32d)、`src/autoModeUnavailable.ts`(`AUTO_MODE_UNAVAILABLE_CAUSES` + 🆕 `CLASSIFIER_DENY_CAUSES`/`isClassifierDenyCause`/`classifierDenyCauseOf`/`classifierDenyCauseDetail`;🔴 同批**删**`classifierUnavailableOf`/`classifierUnavailableDetail`,详见 §32b)、`src/classifierStatus.ts`(`CLASSIFIER_STATUS_STATES`/`classifierStatusOf`/`classifierStatusDetail`)|
|
|
173
173
|
|
|
174
174
|
🔴 **`engineErrorCodes` 的开集纪律**(该文件头注逐字):这些 `ReadonlySet` / 前缀谓词一律是**识别表**,
|
|
175
175
|
回答的是「我认不认得这个码」,**绝不是**「合法码只有这些」。消费点 `switch` **必须留 `default`**,
|
|
@@ -923,7 +923,7 @@ durable park 腿走 `HitlBridge.decideTool(outcome, toolUseID, opts, preResolved
|
|
|
923
923
|
| 事实 | 契约 |
|
|
924
924
|
|---|---|
|
|
925
925
|
| **D-1 两元组 verbatim 回显** | `boundCallId` + `boundInputHash` 逐字回显进 `decide`,**绝不本地重算 hash**(`bindingOf`)。409 ⇒ `HitlSafetyError('binding_mismatch')`,调用方**重新呈现,绝不自动重试**(一次 decide 绝不双act)。pure 门 B7 段对这两段做**字节级**断言,改一个字符就红 |
|
|
926
|
-
| `reason` 上限 |
|
|
926
|
+
| `reason` 上限 | 4096 字(包内常量,🔧 0.72.0 起不再导出);超限 server **413 `reason_too_large`**,丢的不是归因而是**整次决断**(413 ⇒ 决断没送达 ⇒ run 留 suspended)。包内 `denyReasonForWire(reason, tag)` 截断 + 留痕 |
|
|
927
927
|
| 缺省拒因 | `DEFAULT_DENY_REASON = 'The user rejected this tool use'`(不带归因时逐字不变) |
|
|
928
928
|
| **cancel vs deny(两动词,按意图选)** | 🔴 **按「你要停的是哪一样」选,不是按 run 的状态选**。`deny`(本节两条决断腿)= 否掉**这一道门**:决断送达后 run **继续**,模型拿到一条拒绝继续跑 —— 这是「不许它做这件事」。`runs.cancel` = 终结**整条 run**:server [868] 起对 `suspended` / `needs_review` 的 run **就地取消**(把待决 checkpoint 结清 + 行终态化,ack 带 `errorCode:"cancelled"`),这是「别跑了」。⚠️ **本行 0.36.0 前的原文是失真的**(SDK 7.1.0 已标 stale):它写的是「取消 suspended run 必须用 deny,绝不 `runs.cancel`(对 suspended run 会 409)」—— 照那句做会把「停」实现成「放它接着跑」(deny 只关掉一道门,run 照跑)。`cancel` 的 409 **今天只剩 lost CAS race**(待决门被并发决掉/过期 ⇒ 重读再试),**不再**是「suspended 一律 409」。判据锚 = 装机 SDK `dist/resources/runs.d.ts` 的 `cancel` JSDoc(常驻门 ⑦ 段对账,上游改说法当天红) |
|
|
929
929
|
| 空作答 fail-loud | `answerQuestion` 三形一律抛 `HitlSafetyError('empty_answer')`、**一次 decide 都不发**:空 `answers[]` / 任一条 `selected[]` 为空 / 任一条 `header` 为空串。理由:`{answers:[]}` 在 wire 上另有确切含义(question 域 deny 的 NO_HUMAN 形),当 approve 发出去 = **拿 deny 的载荷冒充 approve** |
|
|
@@ -1300,7 +1300,7 @@ HITL 面有 `hitlHostSurfaceFor` —— 见 §5a 的 (a) 表;队列口没有,登
|
|
|
1300
1300
|
| 审批卡口 | `installApprovalCardPortFor` · `approvalCardPortFor` · `hasApprovalCardPortFor` · `approvalCardPortMissesFor` | `src/hitl/toolApprovalWire.ts` |
|
|
1301
1301
|
| HITL 宿主面 | `installHitlHostSurfaceFor` · `hitlHostSurfaceFor` · `hitlHostSurfaceMissesFor` | `src/hitl/hitlHostSurface.ts` |
|
|
1302
1302
|
| 问答 overlay | `publishQuestionFrameFor` · `hasQuestionOverlayFor` · `onQuestionFrameFor` | `src/liveQuestionStore.ts` |
|
|
1303
|
-
| 呈现台账(决断卡首见/复见) | `registerArmedGateFor` · `wasGateArmedFor`
|
|
1303
|
+
| 呈现台账(决断卡首见/复见) | `registerArmedGateFor` · `wasGateArmedFor`(`clearArmedGateFor` / `registerArmedGateFromQuestionIdFor` 🔧 0.72.0 退出公面,包内私有) | `src/hitl/armedGateRegistry.ts` |
|
|
1304
1304
|
| wire 目标 | `installEngineWireTargetFor` · `engineWireTargetFor` | `src/engineWireTarget.ts` |
|
|
1305
1305
|
| fleet 台账 | `isFleetSessionScopedFor` · `readEngineActiveBgTasksFor` · `clearAllRetainedFleetRowsFor` · 🆕 `ledger.issueStream()` / `ledger.issueSnapshot()`(**keyed 开流参数 + 帧入口的唯一正身**,§6d) | `src/fleet/fleetLedger.ts` |
|
|
1306
1306
|
| fleet 面板投影 | `projectFleetAgentRowsFor` · `resetFleetAgentPanelProjectionFor` · `fleetAgentProjectionSizeFor` | `src/fleetAgentPanelProjection.ts` |
|
|
@@ -1502,7 +1502,7 @@ CHANGELOG 0.29.0「已知局限」段与相应 JSDoc 都有成文。**别在读
|
|
|
1502
1502
|
| **P-39** | ✅ **已解**(server 7.48.0 到货,client-core 本批消费) @cli @web @desktop | **上游已补 additive 归属锚 `persistedRuleAnchors`** —— 兑付回执(respond 200 体,**非帧**)上每条落地规则带 `{offerIndex, memberIndex, rule}`(直证:engine 7.48.0 fixture `@sema-agent/server/dist/tool-approval.js:1360` park 迟到腿 / `:1461` live 腿两处铸点)。本包据它把批臂相关性从**基数**升级到**身份**:锚的 `offerIndex` 必须等于这一次真发出去的 `persistRuleBatchOfferIndex`、`memberIndex` 必须落在所选 offer 的成员范围内 ⇒ 原登记里「条数对但内容是另一批规则」那一形**从此抓得到**。🔴 **三态不是两态**(本批对抗复审 [high] 采纳):「键真缺席」(≤7.47 老引擎)才让位基数门;**「键在场但坏形」绝不让位** —— 否则一份「另一只 offer + 条数恰好相同 + 故意发坏锚」的回执可精确绕过身份门。判据取 **wire 上键在不在**,不取窄化产物在不在 | `src/hitl/toolApprovalWire.ts`(`ToolApprovalRespondAckView.persistedRuleAnchors` + `readPersistedRuleAnchors` 整只判形 + `surfaceToolApprovalFrameAndRespond` 臂相关性门的 absent/valid/invalid 三态)· 行为钉:`run-hitl-gate-honesty-test.mjs` F14 件1(正控/另一只 offer 负控/memberIndex 越界负控/老引擎兼容/**坏形绕过反测**)、`run-rules-side-test.mjs` G8(读口整只判形十格) | 端**可以**渲「你选的那批里的 N 条」了 —— 但**只在锚到位且核得住时**;锚缺席(老引擎)仍须回落原口径「**引擎报告**落盘的规则」,绝不声称「就是你选的那批」。cli 半场参照实现 = `persistedRulesWire.ts` `persistedNoticeText`(三合取:注入面交了 `batchOfferIndex` ∧ 锚过判形 ∧ `offerIndex` 对得上,任一不满足即退回保守句) |
|
|
1503
1503
|
| **P-38** | med(集成面;**存量、非本批引入** —— 0.42.0 基线 `4c364c1` 上逐字相同) @cli @web @desktop | 🆕 **标准帧路由丢弃 `ToolApprovalFrameOutcome` 的诊断/回显面**:`routeToolApprovalFrame`(`src/hitl/frameRouter.ts`)对 `surfaceToolApprovalFrameAndRespond` 的产物**只解构 `decision`**,`ack` 与 `respondRefusal` 整段丢掉;`AskGateWireDeps` 上也没有 outcome sink。⇒ 走**标准集成面**(`runStream` → frameRouter)的端读不到:① 0.42.0 #225 件5 的 `respondRefusal`(server 响亮 400 / `edit-rejected` 拒句)② 0.43.0 #334 的 `persistedRule` / `persistedRules` 规范文本回显。⚠️ 两个**更重**的安全位不在此列 —— `rememberApplied:false` / `updatedInputForwarded:false` 由 `toolApprovalWire` 就地经 `HitlHostSurface` 投递(`surfaceRememberNotApplied` / `surfaceEditNotForwarded`),**不经**本路由,所以那两条告知照常到达。⚠️ 端若**自己直调** `surfaceToolApprovalFrameAndRespond`(cli 的 `approvalStreamWire` 卡腿即是)则拿得到完整 outcome,本条只约束走 frameRouter 那条路 | `src/hitl/frameRouter.ts`(`const { decision } = await surfaceToolApprovalFrameAndRespond(...)`)· `src/hitl/toolApprovalWire.ts`(`ToolApprovalFrameOutcome` 的三位产物) | 端**不要**假定「包返回了这一位 ⇒ 标准路由上就能读到」:走 frameRouter 的端今天拿不到规则回显与拒句,渲「你的规则已存为 X」/「引擎说:…」必须先确认自己走的是哪条调用点。🔴 正位解在包侧(给 frameRouter / `AskGateWireDeps` 补一个 outcome 回执端口,或把规则回显与拒句经 `HitlHostSurface` 就地投递,与 `rememberApplied` 同姿势),属**行为面 + 三端接线**的独立设计件,按 [C162] 令④ 回 C 板提 |
|
|
1504
1504
|
| **P-37** | low(镜像面) @cli @web @desktop | 🆕 **`tool_approval_complete.parked` 已进键镜像,但本包零消费**(0.43.0 同形族扫的产物,#329 server 7.44.0 及更早就在场)。它是 `outcome:"expired"` 一词三义(park / 当场 deny / 无设施 deny)里 **park 那一义的显式判别位**:在场 ⇔ 这条 ask 按 park 路由收尾且墓碑已落(同一把 `approvalId` 仍可走迟到受理)。本包今天只把它镜像进 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` + 类型,**没有**任何消费面 —— 因为它只长在 `tool_approval_complete` 上,而那种帧根本不进卡口(`surfaceToolApprovalFrameAndRespond` 消费的是 `tool_approval`) | `src/hitl/toolApprovalWire.ts`(`ToolApprovalFrame.parked` 声明 + 镜像项,两处 JSDoc 写明理由)· `scripts/run-approval-frame-keys-test.mjs` 的 `AHEAD_OF_ANCHOR` 登记 | 端今天**不要**指望包把「卡失效」改渲成「已转后台候批」——那条投影还没有。🔴 **缺席禁读作「真 deny」**:无店部署 / deny 政策 / 被连坐 VOID 的兄弟都发不出这个键,缺席只是「无 park 证据」。要把它变成一条真投影是**行为面**改动(消费者 = 端的完成帧处理面),按 [C162] 令④ 回 C 板提 |
|
|
1505
|
-
| **P-36** | low | **中断文案归一只覆盖 `Operation aborted` 这一串**(#323 症状②,0.43.0;clay 裁定的**明确边界**,不是漏做):同一次用户中断里,**执行前被连坐**的旁观者拿的是 core 的另一串 `operation aborted before execution`,`interrupted_never_started` 族又是第三种;这两族**刻意不并入**中断改写臂 —— core 显式拒绝合并两串向([4973]),两串各承真语义(`Operation aborted` = 执行中被中止 / 该串 = 从未执行),而且它们**各有自己的文案与折叠腿**(端侧的 interrupted-batch 折叠 +
|
|
1505
|
+
| **P-36** | low | **中断文案归一只覆盖 `Operation aborted` 这一串**(#323 症状②,0.43.0;clay 裁定的**明确边界**,不是漏做):同一次用户中断里,**执行前被连坐**的旁观者拿的是 core 的另一串 `operation aborted before execution`,`interrupted_never_started` 族又是第三种;这两族**刻意不并入**中断改写臂 —— core 显式拒绝合并两串向([4973]),两串各承真语义(`Operation aborted` = 执行中被中止 / 该串 = 从未执行),而且它们**各有自己的文案与折叠腿**(端侧的 interrupted-batch 折叠 + 包内 tool_end 中止码词表,🔧 0.72.0 起该词表不再导出)。⇒ 纯取消批里,那两族的 tool_end 今天仍按各自原文呈现 | `src/hitl/frameRouter.ts`(`isUserInterruptRewritable` 的判据①头注 + `isEngineAbortToolEnd` 的两串族说明)· 负控 = `scripts/run-hitl-gate-honesty-test.mjs` F13-d | 端**不要**假定「用户中断 ⇒ 这一批 tool_end 文案全是 CC 中断串」;两族按各自既有腿归因(机读码优先,文案兜底)。要不要并成一形是**语义裁定**不是实现细节,需 clay 先裁 |
|
|
1506
1506
|
| **P-34** | low | **编辑臂预检判官在浏览器 lane 结构上装不了**(#225 / [5076],0.42.0):`precheckEditedRuleText` 的唯一合法实参是 core 5.57.0 那只纯函数,而 `@sema-agent/core` 的 barrel 值级拉 `node:crypto`/`node:fs`/`node:path` —— 本包**不能**做 value 级 re-export(portability 门 `EXPECTED_PACKAGES_INDEX` 等值门 + esbuild 浏览器腿双重否决,施工时实打验证) | `src/hitl/editedRuleTextPrecheck.ts`(模块头注的「为什么是端口注入」段) | Node 宿主(TUI / desktop 主进程)装上即得内联即时校验;**浏览器 lane 留缺席走「提交后才知道」的往返形**,这是设计不是漏装。🔴 缺席**不可**据以判断部署形态 |
|
|
1507
1507
|
|
|
1508
1508
|
| **P-41** | low | 🆕 **decide 的 `currentPending` 指路键今天在标准 SDK 路径上恒缺席**(0.47.0 件②,如实登记的射程边界不是缺陷):server 的 409 `approval_stale` 臂**只在调用方回显 `checkpointToken` 时触发**(engine 7.52.1 `http/server.js` 的 `resumeCheckpoint`,`if (binding?.checkpointToken && …)` 真字节),而 sdk 的 `ApprovalDecision` 自 1.0.0 起**刻意删掉**了那一位 ⇒ 经 SDK client 的 decide 拿不到这枚 409。另:ask 腿(`GateOutcome.currentPending`)**包内无消费方** —— `GateOutcome` 是包内型、决断结局不出包;它在场的理由是**同形存量清剿**(两条 decide 失败腿一次改齐) | `src/hitl/hitlBridge.ts`(`readDecideCurrentPending`)、`src/hitl/toolApprovalWire.ts`、`src/hitl/parkResolver.ts` | 按 §4f 接:读得到就一跳重定位,**缺席时退回重拉 `GET /v1/approvals`**,绝不把缺席读成「没有别的 pending 了」。自己注入传输层(非 SDK client)的宿主今天就拿得到 |
|
|
@@ -4900,8 +4900,7 @@ THINKING_FORMATS: readonly string[] // 7 词,引擎闭集的镜像,
|
|
|
4900
4900
|
THINKING_DISABLE_PROBE_ORDER: readonly string[] // 4 词,试关序(公面承诺)
|
|
4901
4901
|
MODEL_PROBE_VERDICTS: readonly string[] // 4 词
|
|
4902
4902
|
THINKING_FORMAT_WIRE_TWINS: Readonly<Record<string, string>>
|
|
4903
|
-
|
|
4904
|
-
PROBE_MAX_TOKENS: number
|
|
4903
|
+
// 题面与 max_tokens 两个探针常量 🔧 0.72.0 退出公面(包内固定,端不需要)
|
|
4905
4904
|
|
|
4906
4905
|
probeRequestBody(entry: ModelProbeEntry, format?: string, opts?: { reasoningEffort?: string })
|
|
4907
4906
|
: OpenAICompletionsProbeBody
|
|
@@ -4925,7 +4924,7 @@ type ProbeSend = (body: OpenAICompletionsProbeBody) => Promise<{
|
|
|
4925
4924
|
|
|
4926
4925
|
**步骤与判词**
|
|
4927
4926
|
|
|
4928
|
-
1. baseline:最小请求(
|
|
4927
|
+
1. baseline:最小请求(题面与 `max_tokens` 由包内常量固定,🔧 0.72.0 起不再导出),不带任何方言位。
|
|
4929
4928
|
· **没有证据力** —— 被拒(抛错 / 状态码 ≥400),**或**一条「零思考 + 正文也空」的合法回执
|
|
4930
4929
|
(`{content:'', finishReason:'length', status:200}`,被截断 / 网关吞了正文)⇒ `inconclusive`,
|
|
4931
4930
|
**结果里压根没有 `reasoning` 这一格**;
|
|
@@ -8250,7 +8249,7 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
|
|
|
8250
8249
|
| # | 面 | 本包做了什么 | 端要做什么 |
|
|
8251
8250
|
|---|---|---|---|
|
|
8252
8251
|
| S-1 | **`config.write_protection_target_view_absent`**(operator) | `ENGINE_NOTICE_CODES` index 13 镜像 + audience operator;`engineNoticeInCatalog` / `noticeAudienceOf` 照常 | 运维通知面按 operator 渲一条(每 run 一条):写保护判官只判拼写、受保护写工具已挂 —— 别名写不会被拦;用户面零动作 |
|
|
8253
|
-
| S-2 | **`wiring_manifest.writeProtection?: { targetView }`** | 切片 `_sema_writeProtection` + chrome `wiring_manifest.writeProtection?`;present-iff 编译出判官;`targetView` ∈ {spelling-only, target} 否则段缺席 |
|
|
8252
|
+
| S-2 | **`wiring_manifest.writeProtection?: { targetView }`** | 切片 `_sema_writeProtection` + chrome `wiring_manifest.writeProtection?`;present-iff 编译出判官;`targetView` ∈ {spelling-only, target} 否则段缺席 | 🔧 **0.71.4 发后订正(server [7426])**:该段只在 `wiring_manifest` **帧**(effective 半场,operator 帧)上铸,`GET /v1/diagnostics/wiring` 下发的是静态半场、结构上没有它 —— 端**只从本包 chrome `wiring_manifest.writeProtection` 切片读**,别去诊断端点找;渲一格原样回显 `targetView`;🔴 缺席渲「未编译判官」(第三态),**不渲成 spelling-only** |
|
|
8254
8253
|
|
|
8255
8254
|
### 46z. 逐键处置表
|
|
8256
8255
|
|
|
@@ -8262,8 +8261,35 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
|
|
|
8262
8261
|
|
|
8263
8262
|
### 46y. 🔴 三端升级必读(固定段式,[C295])
|
|
8264
8263
|
|
|
8265
|
-
1.
|
|
8264
|
+
1. 从 chrome `wiring_manifest.writeProtection?.targetView` 读(🔧 只在 operator 帧 / effective 半场;`GET /v1/diagnostics/wiring` 没有这一段 —— server [7426] 勘误):缺席 = 第三态「未编译判官」,不渲成 `spelling-only`。
|
|
8266
8265
|
2. operator 通知面多一码(`config.write_protection_target_view_absent`),按 `noticeAudienceOf` 走 operator 臂。
|
|
8267
8266
|
3. 零 BREAKING:型面 / 公面 / peer 不动。
|
|
8268
8267
|
|
|
8269
8268
|
**包侧缺口:** ① CC-30 MCP 会话内重连消费口(候 core / server 座位,[7418] ①);② CC-31 WebSearch 后端名读口(候 server 并进非 operator 面,[7418] ②);③ `agents.listing_truncated` detail 读器候消费场景(by-design);④ `ClassifierSeat.defaulted?` 候 sdk 出键(by-design);⑤ §NNz「declined 键真零命中」机读第二刀(候形式化)。
|
|
8269
|
+
|
|
8270
|
+
## §47 🆕 0.72.0 退役批(CC-32:39 个零消费导出退出公面;型面 BREAKING,minor)
|
|
8271
|
+
|
|
8272
|
+
> **minor,型面 BREAKING**:公面 995 → 956;运行期零 BREAKING(被删的名字四端 origin/main 快照 AST 零 import —— cli f5bd354c / web-client 9cccce4 / desktop 5c99611 / web-admin 9ab7c32,`src`/`ui`/`bff` 全扫);peer 不动。[7419] §45 预告、cli [7422] 同意、web-client / desktop 过节拍沉默 = 同意;真在用的名字回帖即单名回退(patch)。
|
|
8273
|
+
|
|
8274
|
+
### 47a. 处置表
|
|
8275
|
+
|
|
8276
|
+
| # | 面 | 本包做了什么 | 端要做什么 |
|
|
8277
|
+
|---|---|---|---|
|
|
8278
|
+
| S-1 🔴 **退役批(型面 BREAKING)** | 39 个导出退出公面(声明保留为模块私有,行为零改):`AUTHORITY_ENVELOPE_TAGS` `CANCEL_RELEASE_WAIT_MS` `CATALOG_CACHE_RELATIVE_PATH` `CATALOG_CACHE_STALE_MS` `DEFAULT_CATALOG_TIMEOUT_MS` `DEVICE_CODE_BACKOFF_STEP_MS` `DEVICE_CODE_HTTP_TIMEOUT_MS` `DEVICE_CODE_MAX_LIFETIME_MS` `DEVICE_CODE_MIN_INTERVAL_MS` `HITL_ASK_QUESTION_ID_PREFIX` `HITL_FRAME_CALL_KEY_PREFIX` `LIMITS_ERROR_CODE_PREFIX` `MAX_DENY_REASON_CHARS` `ONE_SHOT_ENV` `PROBE_MAX_TOKENS` `PROBE_PROMPT` `PROMPT_PROFILE_ENV` `TOOL_END_INTERRUPTED_CODES` `WORKFLOW_DEFER_ENV` `WORKFLOW_PARK_BINDING_BROKEN` `WORKFLOW_PARK_NOT_PENDING` `WORKFLOW_PARK_REQUIRES_RUN_STORE` `WORKFLOW_PARK_TRUTH_UNREADABLE` `clearArmedGateFor` `deriveAgentLabel` `notePlanReviewAnsweredIfDecisiveFor` `onGateArmedFor` `parseBackgroundReceipt` `parseFinalVerifyArgv` `providerApiShortName` `registerArmedGateFromQuestionIdFor` `wireCurrentTool` `wireEditedFiles` `wireParentToolCallId` `wireRetiredBy` `wireStartedCount` `wireStoppedBy` `wireToolUses` `wireTranscriptId` | `export` 去掉、基线 −39、export-liveness `retire` 行随删(登记 117 → 78)、typeshape unknown 出境 345 → 343、§2 计数与十六域名数随减 | 仍 import 其中任一名的端换钉后编译当场红 ⇒ 回帖点名,本包单名回退随 patch;四端 AST 零命中,预期零动作 |
|
|
8279
|
+
| S-2 | `internal` 34 个 `export *` 放大件 | **保留导出**(包内在用),候模块拆分再收回;登记不动 | 零动作 |
|
|
8280
|
+
|
|
8281
|
+
### 47z. 逐键处置表
|
|
8282
|
+
|
|
8283
|
+
| # | 键 / 面 | 处置 | 坐标 / 理由 |
|
|
8284
|
+
|---|---|---|---|
|
|
8285
|
+
| 1 | 39 个 retire 导出 | **removed** | `scripts/public-export-baseline.json` −39;`scripts/export-liveness.json` retire 行删;门 export-liveness D 棘轮 78 |
|
|
8286
|
+
| 2 | 34 个 internal 放大件 | **kept(internal)** | 同上 `internal` 行 |
|
|
8287
|
+
| 3 | 已退役名账(本档不再推荐) | **added(门)** | `scripts/export-liveness.json` `removed.0.72.0`(39 名);export-liveness 门 G 段(已退役名不许回基线 / 登记);冻结账门 ⑧c(已退役名按标识符边界扫全档,含代码块,先剥不可见文字;注记必须紧跟在名字之后同一片段内、不跨独立名借,或表格行首格本身是退役标签 —— 本版订正 §0a / §2b 行 3·5 / §6b / P-36 / 探针段 / §2 计数行 / 决断 `reason` 上限行 / §28 签名块共十一处裸推荐) |
|
|
8288
|
+
|
|
8289
|
+
### 47y. 🔴 三端升级必读(固定段式,[C295])
|
|
8290
|
+
|
|
8291
|
+
1. 换钉 `^0.72.0` 后若编译红在 §47a S-1 名单内 ⇒ 回帖点名,本包单名回退随 patch;别在端侧自铸同名。
|
|
8292
|
+
2. 运行期零 BREAKING:留下的 956 个导出行为字节不变。
|
|
8293
|
+
3. peer sdk >=9.6.0 / agent-types >=0.3.0 不动。
|
|
8294
|
+
|
|
8295
|
+
**包侧缺口:** ① CC-30 MCP 会话内重连消费口(候 core re-dial → server S-381);② CC-31 WebSearch 后端名读口(候 server S-382 `capabilities.webSearch.backend`);③ `agents.listing_truncated` detail 读器候消费场景(by-design);④ `ClassifierSeat.defaulted?` 候 sdk 出键(by-design);⑤ §NNz「declined 键真零命中」机读第二刀(候形式化);⑥ internal 34 放大件收回候模块拆分(by-design)。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/client-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.72.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. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|