@sema-agent/client-core 0.68.2 → 0.69.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +91 -0
- package/README.md +7 -6
- package/dist/adapt/arms.js +31 -1
- package/dist/adapt/textStream.d.ts +25 -0
- package/dist/adapt/textStream.js +50 -0
- package/dist/adapter/downstream/eventToSdkMessage.js +50 -14
- package/dist/adapter/runStream.js +9 -1
- package/dist/coreValuePorts.d.ts +161 -0
- package/dist/coreValuePorts.js +98 -0
- package/dist/engineNoticeCodes.d.ts +1 -1
- package/dist/engineNoticeCodes.js +12 -1
- package/dist/gateOutcome.d.ts +27 -13
- package/dist/gateOutcome.js +29 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/mcpPanel.d.ts +45 -1
- package/dist/mcpPanel.js +25 -1
- package/dist/sdkWireTransit.d.ts +1 -1
- package/dist/seam.d.ts +47 -1
- package/dist/seam.js +8 -0
- package/dist/workflowClient.d.ts +20 -0
- package/dist/workflowClient.js +23 -1
- package/dist/workflowMonitor.d.ts +10 -0
- package/dist/workflowMonitor.js +0 -16
- package/docs/INTEGRATION-CLIENTS.md +147 -9
- package/package.json +5 -5
package/dist/seam.js
CHANGED
|
@@ -78,6 +78,14 @@ const CHROME_ARM_TABLE = {
|
|
|
78
78
|
required: false,
|
|
79
79
|
duty: '可选:渲引擎通告(按 code+detail,message 仅 fallback;未知 code 也必须渲不许丢;durable 重放按 eventId 幂等;harvest 的 moved/escalated 并列呈现绝不相减)',
|
|
80
80
|
},
|
|
81
|
+
thinking_segment_end: {
|
|
82
|
+
// CC-02(0.68.3):与 text_segment_end 同一类目的后果 —— server 7.77.0 起不接 = 未脱敏的推理字节留在
|
|
83
|
+
// 本地转录里(b2 形上那条明文思考行已经渲过 = 已发生的行为)⇒ `required: true`,理由同上臂。
|
|
84
|
+
required: true,
|
|
85
|
+
duty: '整段替换:①`diverged`(never false)在场 ⇒ 自己拼 thinking stream_delta 上屏的端按 content 重渲该块;' +
|
|
86
|
+
'②`committedPrefixDiverged`(never false)在场 ⇒ 所有端把 `committedUuids` 里的**全部**已 committed 思考行删掉、在首行位置放一条 content(整段换,不切片;`committedUuid` = 末条兼容位;`committedPrefixLen` = 全部行全文长度之和,单位 UTF-16 代码单元);' +
|
|
87
|
+
'本包在这一形上一个字节都不再交;③三键全缺席 ⇒ 照旧只当对账/定界;④缺席 ≠ 段没结束,按整条流判。',
|
|
88
|
+
},
|
|
81
89
|
wiring_manifest: {
|
|
82
90
|
required: false,
|
|
83
91
|
duty: '可选:渲引擎接线自述里的三段用户面事实(modelGate = 本 run 被模型门卸掉的工具 + 逐字恢复办法;' +
|
package/dist/workflowClient.d.ts
CHANGED
|
@@ -71,6 +71,13 @@ export interface WorkflowParkRowView {
|
|
|
71
71
|
sessionId: string;
|
|
72
72
|
/** 最初跑出这只 park 的那条 run。 */
|
|
73
73
|
originRunId: string;
|
|
74
|
+
/**
|
|
75
|
+
* core 7.18.0 #755(0.68.3 CC-05):这一行**在记录上**,但还没有任何 journal 确认它属于谁 ——
|
|
76
|
+
* `originRunId` 此时说的是「材料**属于**哪条 run」,不是「在哪条 run 上见过」,消费端**禁**当已确认读。
|
|
77
|
+
* never-false:确认那一刻上游**删键**(绝不写 `false`)⇒ 缺席 = 已确认(与 7.18.0 之前写的行同读)。
|
|
78
|
+
* 本包逐字投影(core 顶注:same projection obligation as `parks` —— 丢了就把一条未确认行读成已确认)。
|
|
79
|
+
*/
|
|
80
|
+
originUnconfirmed?: true;
|
|
74
81
|
}
|
|
75
82
|
/**
|
|
76
83
|
* `GET /v1/workflows/:id` 的 `parks[]` → 三键行;**整键缺席 ⇒ `undefined`**(与空数组逐字可分)。
|
|
@@ -85,6 +92,19 @@ export interface WorkflowParkRowView {
|
|
|
85
92
|
* 🔴 纯函数、零副作用、**绝不抛**。
|
|
86
93
|
*/
|
|
87
94
|
export declare function readWorkflowParks(run: unknown): readonly WorkflowParkRowView[] | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* `GET /v1/workflows/:id` 的 `resumeAdmissionIncomplete`(core 7.18.0 #755,0.68.3 CC-05)——
|
|
97
|
+
* 「这条 resume run 的准入**没有完成**」:记录从创建起带 `true`,准入完成那一刻**删键**。
|
|
98
|
+
*
|
|
99
|
+
* 🔴 **在场 = 不是 resume 基**(引擎自己会拒 `workflow.park_truth_unreadable` / `admission_incomplete`,
|
|
100
|
+
* 且不从它派生候选);缺席 = 每条非 resume run 与每次完成了的准入的常态。⇒ 读者只认在场,
|
|
101
|
+
* 缺席不是断言。never-false:严格 `true` 才算在场,其余一律缺席。
|
|
102
|
+
* 🔴 与 {@link readWorkflowParks} **同一条投影义务**(core 顶注逐字:dropping it turns a refused record
|
|
103
|
+
* back into an admissible one)—— 端渲 resume 候选 / 面板行时**必须**带上这一位;本包不把它折进
|
|
104
|
+
* `parks` 的缺席(那一形有自己的两义,见 `readWorkflowParks` 顶注)。
|
|
105
|
+
* 🔴 纯函数、零副作用、绝不抛;坏载体 ⇒ `false`(不是「读不出」:这一位没有第三态)。
|
|
106
|
+
*/
|
|
107
|
+
export declare function readWorkflowResumeAdmissionIncomplete(run: unknown): boolean;
|
|
88
108
|
/** 台账里的一个 agent(读口产物,只读快照;缺席 = 不知道,绝不渲成 0/空)。 */
|
|
89
109
|
export interface WorkflowActivityAgentView {
|
|
90
110
|
/** `ctx.agent` 调用的稳定身份(SSE 主键);老引擎/无 callKey 的帧上缺席。 */
|
package/dist/workflowClient.js
CHANGED
|
@@ -357,6 +357,7 @@ function synthPhaseStatus(runStatus, agents) {
|
|
|
357
357
|
* tolerates absent/permissive fields and never throws (the graceful-degrade contract lives above, in the
|
|
358
358
|
* source loop; this just maps a well-formed run). Exported for the mock-parity unit cross-check. */
|
|
359
359
|
export function projectWorkflowRun(run) {
|
|
360
|
+
const parks = readWorkflowParks(run);
|
|
360
361
|
const agents = (run.agents ?? []).map((r, i) => projectAgent(r, i));
|
|
361
362
|
const phases = projectPhases(run, agents);
|
|
362
363
|
const ownTokens = run.stats?.tokens ?? 0;
|
|
@@ -367,6 +368,9 @@ export function projectWorkflowRun(run) {
|
|
|
367
368
|
const state = {
|
|
368
369
|
workflowRunId: run.id,
|
|
369
370
|
status: coerceRunStatus(run.status),
|
|
371
|
+
// CC-12(0.69.1):park 两新键**进视图**(修前只出读器,端拿不到裸体 ⇒ 渲染面结构性造不出);铸法与缺席律逐字同两读器。
|
|
372
|
+
...(parks !== undefined ? { parks } : {}),
|
|
373
|
+
...(readWorkflowResumeAdmissionIncomplete(run) ? { resumeAdmissionIncomplete: true } : {}),
|
|
370
374
|
// The authored script TEXT is not projected to the wire (types.ts:375 — service does not emit it), so leave
|
|
371
375
|
// it empty: the monitor's "save script" affordance stays off (canSave = script.length > 0). Never fabricate
|
|
372
376
|
// a script we do not have. scriptPath is likewise absent until the service projects it.
|
|
@@ -411,13 +415,31 @@ export function readWorkflowParks(run) {
|
|
|
411
415
|
continue;
|
|
412
416
|
// 🔴 **逐键铸**,不 spread:上游在这张行上多放一个键(尤其是凭据形)时,它在结构上到不了
|
|
413
417
|
// 本包的产物。这不是风格选择 —— 它是本段 ① 那条红线的实现。
|
|
414
|
-
|
|
418
|
+
// 7.18.0:第四键 never-false,严格 `true` 才铸(`false`/`"true"`/`1` 都是坏值 = 缺席 = 已确认)。
|
|
419
|
+
rows.push({ callKey, sessionId, originRunId, ...(o.originUnconfirmed === true ? { originUnconfirmed: true } : {}) });
|
|
415
420
|
}
|
|
416
421
|
// 非空输入而一行都没活下来 ⇒ 读不出,不是「零 park」(绝不铸 `[]` 冒充一句正面事实)。
|
|
417
422
|
if (raw.length > 0 && rows.length === 0)
|
|
418
423
|
return undefined;
|
|
419
424
|
return rows;
|
|
420
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* `GET /v1/workflows/:id` 的 `resumeAdmissionIncomplete`(core 7.18.0 #755,0.68.3 CC-05)——
|
|
428
|
+
* 「这条 resume run 的准入**没有完成**」:记录从创建起带 `true`,准入完成那一刻**删键**。
|
|
429
|
+
*
|
|
430
|
+
* 🔴 **在场 = 不是 resume 基**(引擎自己会拒 `workflow.park_truth_unreadable` / `admission_incomplete`,
|
|
431
|
+
* 且不从它派生候选);缺席 = 每条非 resume run 与每次完成了的准入的常态。⇒ 读者只认在场,
|
|
432
|
+
* 缺席不是断言。never-false:严格 `true` 才算在场,其余一律缺席。
|
|
433
|
+
* 🔴 与 {@link readWorkflowParks} **同一条投影义务**(core 顶注逐字:dropping it turns a refused record
|
|
434
|
+
* back into an admissible one)—— 端渲 resume 候选 / 面板行时**必须**带上这一位;本包不把它折进
|
|
435
|
+
* `parks` 的缺席(那一形有自己的两义,见 `readWorkflowParks` 顶注)。
|
|
436
|
+
* 🔴 纯函数、零副作用、绝不抛;坏载体 ⇒ `false`(不是「读不出」:这一位没有第三态)。
|
|
437
|
+
*/
|
|
438
|
+
export function readWorkflowResumeAdmissionIncomplete(run) {
|
|
439
|
+
if (typeof run !== 'object' || run === null || Array.isArray(run))
|
|
440
|
+
return false;
|
|
441
|
+
return run.resumeAdmissionIncomplete === true;
|
|
442
|
+
}
|
|
421
443
|
// ── 轮询/退避节拍(REF-CC-131,域词表-15):三个 3000ms 常量语义各不相同,拆开命名——合并成一个
|
|
422
444
|
// 会把三条独立的退避策略绑死在一起(其中任一策略调优都会误伤另外两条)。──────────────────────
|
|
423
445
|
/** owner 名下暂无任何 run(`resolveRunId` 回 null)时的重试间隔:不是错误,只是「还没有可监的
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* 留在 TUI 的:`computeVisibleWindow`(滚动窗口数学 = 视口概念,端专属)、glyph/color 映射、
|
|
15
15
|
* 以及整棵 JSX。壳侧 shim = 那个 tsx 改成从本包 re-export 这两样,自己不再定义。
|
|
16
16
|
*/
|
|
17
|
+
import type { WorkflowParkRowView } from './workflowClient.js';
|
|
17
18
|
export type AgentState = 'start' | 'progress' | 'queued' | 'done' | 'error' | 'inactive'
|
|
18
19
|
/** sema 超集:这条腿耐久挂在一张审批卡上(engine core 7.10.0 #642)。见上方头注。 */
|
|
19
20
|
| 'parked';
|
|
@@ -91,6 +92,15 @@ export interface WorkflowRunState {
|
|
|
91
92
|
totalTokens: number;
|
|
92
93
|
/** phases as authored; the component derives the active/clamped windows itself. */
|
|
93
94
|
phases: WorkflowPhase[];
|
|
95
|
+
/**
|
|
96
|
+
* CC-12(0.69.1;core 7.18.0 #755 / server ≥7.78.0):这条 run **负责**的 park 行(自己的 + 从被 resume 的 run 继承的),
|
|
97
|
+
* 由 `readWorkflowParks` 铸(三键行 + never-false 第四键 `originUnconfirmed`)。🔴 缺席两义(与读器同):整键缺席 =
|
|
98
|
+
* 旧引擎记录 / 读不出(证不出有没有 park);`[]` = 本引擎记录且一个 park 都没有。端渲 resume 候选时按这一位,
|
|
99
|
+
* 不再各自 `run.parks.map(...)`(修前本视图丢了它,端结构性造不出 —— cli 接入回执 ④)。
|
|
100
|
+
*/
|
|
101
|
+
parks?: readonly WorkflowParkRowView[];
|
|
102
|
+
/** CC-12:在场 = 这条 resume run 的准入没完成 = **不是 resume 基**(core 逐字);缺席 = 常态。never false。 */
|
|
103
|
+
resumeAdmissionIncomplete?: true;
|
|
94
104
|
/** the 187 reads e.workflowProgress to recompute phases; the mock pre-builds them. */
|
|
95
105
|
workflowProgress?: unknown;
|
|
96
106
|
}
|
package/dist/workflowMonitor.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B6 批搬迁(2026-07-27,设计稿 §3 B6):workflow 监视器的**状态契约**(MF-W ·
|
|
3
|
-
* contract/MF-W-workflow-monitor.md)从 cli `src/sema/overrides/workflow-detail-dialog.tsx:118-200`
|
|
4
|
-
* 搬入 —— 逐字,一个字段都没动。
|
|
5
|
-
*
|
|
6
|
-
* 🔴 **为什么类型必须先过来**:`workflowClient.projectWorkflowRun()`(同批搬入)的**产物**就是这套
|
|
7
|
-
* 形状。类型留在一个 `.tsx` 渲染文件里,等于「库产出的东西,它的契约住在 TUI 里」——
|
|
8
|
-
* web/桌面要消费同一份投影就得手抄一遍 shape,而手抄的那份**没有任何东西**会在它漂移时报红。
|
|
9
|
-
* 定位公理([1832])说的「CC 皮肤形状全收本包」,指的正是这种东西。
|
|
10
|
-
*
|
|
11
|
-
* 🔴 **拆缝**:`workflow-detail-dialog.tsx` 本身是 Ink 渲染件(设计稿 §2 分类表「Ink 渲染」),
|
|
12
|
-
* **留 TUI**;搬过来的只有 ① 六个契约类型 ② `agentDisplayStatus`(WPe —— 从 wire 输入词表
|
|
13
|
-
* 派生显示态的那条**纯**规则,是本契约的消费侧半场,端端都要用)。
|
|
14
|
-
* 留在 TUI 的:`computeVisibleWindow`(滚动窗口数学 = 视口概念,端专属)、glyph/color 映射、
|
|
15
|
-
* 以及整棵 JSX。壳侧 shim = 那个 tsx 改成从本包 re-export 这两样,自己不再定义。
|
|
16
|
-
*/
|
|
17
1
|
/**
|
|
18
2
|
* WPe — agentDisplayStatus: agent.state (+ workflowActive) → display status.
|
|
19
3
|
*
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
| 项 | 值 | 真源 |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| 本包 | `@sema-agent/client-core` **0.
|
|
22
|
+
| 本包 | `@sema-agent/client-core` **0.69.1**(本批发布版 = patch,additive 零 BREAKING:安全面收尾 —— CC-10 段末帧子流断闸改按三键(`text_end`/`reasoning_end` 内部臂新带 `sourceTaskId?`/`bgAgentId?`)/ CC-11 `thinking_segment_end` 新带 `committedUuids[]`(宿主义务改口:删全部行、首行位置放 content)/ CC-12 `WorkflowRunState.parks?`+`resumeAdmissionIncomplete?` / CC-09 runStream 去重丢帧留痕 `duplicate_seq`;文档批 ③⑤⑥;§37 / 37y 三条;CC-04 改随 server 7.78.1 进 0.69.2)|
|
|
23
23
|
| peer:wire 契约 | `@sema-agent/sdk` **>=8.4.0**(value-level,非 type-only;**0.60.0 抬版**,四条硬理由见 §24a 与 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 注;上一次是 0.59.0 的 `>=8.3.0`)。🔴 支持窗同批收到 **engine ≥7.64.0**:sdk 8.4.0 与 7.63.0 及以前的 wire **不同窗** | `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
|
+
| 公开导出面 | **982** 个运行期符号(+ 44 个测试钩;= 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`/`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`/`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.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
|
|
|
@@ -111,7 +111,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
111
111
|
|
|
112
112
|
## §2 公共导出面地图(按域)
|
|
113
113
|
|
|
114
|
-
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**
|
|
114
|
+
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**982** 项)。
|
|
115
115
|
> 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
|
|
116
116
|
> **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
|
|
117
117
|
> 单一入口:`import { … } from '@sema-agent/client-core'`(`exports` 只有 `.` 一个;
|
|
@@ -135,12 +135,12 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
135
135
|
`WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
|
|
136
136
|
**4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
982 项的内部构成(帮助端估读表大小):**298** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
|
|
139
139
|
(矩阵、键集、env 名、锚串)而非可调用物;**6** 项是 PascalCase 运行期值
|
|
140
140
|
(`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError`);
|
|
141
141
|
**41** 项是 `*For(sessionKey, …)` 的 per-session 变体(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
|
|
142
142
|
|
|
143
|
-
### 2b. 域图(16 域,逐域计数之和 =
|
|
143
|
+
### 2b. 域图(16 域,逐域计数之和 = 982)
|
|
144
144
|
|
|
145
145
|
| # | 域 | 名数 | 承重导出 | 用途 | 实现锚 |
|
|
146
146
|
|---|---|---|---|---|---|
|
|
@@ -155,10 +155,10 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
155
155
|
| 9 | **能力/旋钮 wire 门族** | 96 | `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 拒绝判定层) |
|
|
156
156
|
| 10 | **headless / 部署旋钮 wire** | 61 | `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` |
|
|
157
157
|
| 11 | **模型目录与预算** | 76 | `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` |
|
|
158
|
-
| 12 | **workflow 与后台工作视图** |
|
|
158
|
+
| 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`) |
|
|
159
159
|
| 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 桌面壳里的符号只会零命中,而零命中在这里**既不证真也不证伪**。复核这些断言**不得**拿本仓语料当反证 |
|
|
160
|
-
| 14 | **宿主端口与会话槽** |
|
|
161
|
-
| 15 | **控制面与传输** |
|
|
160
|
+
| 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` |
|
|
161
|
+
| 15 | **控制面与传输** | 122 | `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` |
|
|
162
162
|
| 16 | **引擎词汇表与包自检** | 90 | `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`)|
|
|
163
163
|
|
|
164
164
|
🔴 **`engineErrorCodes` 的开集纪律**(该文件头注逐字):这些 `ReadonlySet` / 前缀谓词一律是**识别表**,
|
|
@@ -4621,7 +4621,7 @@ an argument」。audience 答另一问:这条事实**说给谁听**。
|
|
|
4621
4621
|
**签名**
|
|
4622
4622
|
|
|
4623
4623
|
```ts
|
|
4624
|
-
ENGINE_NOTICE_CODES: readonly string[] //
|
|
4624
|
+
ENGINE_NOTICE_CODES: readonly string[] // 56 码,顺序同源
|
|
4625
4625
|
ENGINE_NOTICE_AUDIENCE: Readonly<Record<string, 'user' | 'operator'>>
|
|
4626
4626
|
noticeAudienceOf(code: unknown): 'user' | 'operator'
|
|
4627
4627
|
engineNoticeInCatalog(code: unknown): boolean
|
|
@@ -7814,3 +7814,141 @@ const line = mcpPanelLastLegDetail(view, { reachable }) // 一行措辞唯一
|
|
|
7814
7814
|
4. **`memoryCaptureDeclarationField` 的求值在提交那一拍(S-3)**:它是时效键(会话级、单向、不可逆),端在 `buildTaskRequest` 调用那一拍取意图位,不在会话构造时冻结;转口两模块(`engineHttpTools` / `sdkWireTransit`)是 sdk **原样再导出**(同一函数引用),端别在外面包一层。
|
|
7815
7815
|
|
|
7816
7816
|
**包侧缺口:** ① 面板体 HTTP 传输口候 sdk 9.5(35z #15);② `reasoning_end` 包侧半场 CC-02(0.68.3,35z #16);③ 中途翻转 verb 的七种 typed 结局处置表(35z #5,L-286②);④ 跨消息那几形的分段根治(§34z 留白不变)。
|
|
7817
|
+
|
|
7818
|
+
---
|
|
7819
|
+
|
|
7820
|
+
## §36 🆕 0.69.0 提货批(sdk 9.4.0 / core 7.18.0 / settings-schema 2.0.0 换钉;CC-02 推理面权威替换 / CC-05 core 7.18.0 三件)
|
|
7821
|
+
|
|
7822
|
+
> 原排 0.68.3;因 peer `@sema-agent/sdk` 地板 `>=8.8.0` → `>=9.4.0` 改 **minor**。运行期零 BREAKING(老 server 不发
|
|
7823
|
+
> `reasoning_end`,本包照跑);型面 BREAKING 只有 peer 一处。§35 里写「0.68.3」的引用一律读作 0.69.0(已发段不回改)。
|
|
7824
|
+
|
|
7825
|
+
### 36a. 本节速览
|
|
7826
|
+
|
|
7827
|
+
| 件 | 一句话 | 端要做什么 |
|
|
7828
|
+
|---|---|---|
|
|
7829
|
+
| S-1 🔴 **安全面** | **推理面权威替换**(CC-02;server ≥7.77.0 `reasoning_end`,与 `text_end` 同脱敏器):新 chrome 臂 `thinking_segment_end`,三键与 `text_segment_end` 同名同律 + `committedUuid` | 自己拼 thinking `stream_delta` 上屏的端:`diverged` ⇒ 重渲该块;**所有端**:`committedPrefixDiverged` ⇒ 把 `uuid === committedUuid` 的那条思考行**整块**换成 `content`;print 车道把内部臂 `reasoning_end` 按 `text_end` 同律吞/转(§36b) |
|
|
7830
|
+
| S-6 | **`fetchMcpPanel(client, sessionId, { signal? })`**(CC-03 补件):经 sdk `sessions.mcp`(自 0.0.75 在场)取面板体 + `projectMcpPanel` 投视图;传输失败 / 体坏 / 空 sessionId 三形同返 `undefined` | 渲 `/mcp` 面板的端:`const view = await fetchMcpPanel(client, sessionId)` → `mcpPanelLastLegDetail(view, { reachable: view !== undefined })`;§35z #15 改记「sdk 早已有调用口」(我 [7277] 那句「无调用口」是漏核) |
|
|
7831
|
+
| S-2 | **peer 地板 `>=9.4.0`**(型面:`reasoning_end` 帧 / `McpStatusPanel.lastLegMcp?` / `WiringManifestMcpEntry` 别名) | 装 sdk ≥9.4.0;`WiringManifestMcpEntry` 同名影子:两边都 import 时显式取本包的(§36z #7) |
|
|
7832
|
+
| S-3 | core 7.18.0 三件(CC-05):`ENGINE_NOTICE_CODES` +4 / park 两新键(`originUnconfirmed` / `readWorkflowResumeAdmissionIncomplete`)/ `gate.disposition.classifier?` 视图 | 渲 resume 候选 / park 行的端**必须**带两新键(丢了 = 已拒记录变回可 resume);渲门记录的端可读 `classifier`(缺席 = 未知 ≠ 席自答);通告码消费 `switch` 带 `default` 照旧 |
|
|
7833
|
+
| S-5 🔴 **归层** | **core 值级面端口注入**(CC-07;cli L-249 到期桶 core-value 清零):`installCoreValuePorts({…十件…})` + 十个诚实缺席读口(`resolveAutonomousLoopPrompt` / `loosenReasons` / `combinePolicies` / `createAllowDenyPolicy` / `mcpNamespace()` / `retiredToolNames()` / `protocolOf` / `ruleToolGrammarOf` / `validatePermissionRules` / `discussionWorkflowName()`) | **Node 宿主**(cli / desktop 主进程):装配根一处装 core 的十件真实现(原样,不许包一层);壳里对这十件的 `@sema-agent/core` 值级 import 全部改经包;**web / desktop 渲染层**:结构上装不了 ⇒ 恒缺席,消费点按 `undefined` 走降级(§36d) |
|
|
7834
|
+
| S-4 | 投影口:`text_end` 进 switch(行为不变)/ `tool_roster_delta` 有痕 dropped / `tool_progress`·`tool_disclosure` 有痕 dropped | 零动作(dropped 有痕在 run driver 上报面) |
|
|
7835
|
+
|
|
7836
|
+
### 36b. S-1 `thinking_segment_end`(`reasoning_end` 的包侧半场)
|
|
7837
|
+
|
|
7838
|
+
**与 `text_segment_end` 的唯一结构差**:思考块**没有 idle-flush** —— 本包只在三处正常边界(思考→回答边界 / 工具卡前 / turn 收口)**整块**提交它。⇒ 「已提交前缀」在思考面上全有或全无:
|
|
7839
|
+
|
|
7840
|
+
| 形 | 时序 | 包做什么 | 事件键 | 端做什么 |
|
|
7841
|
+
|---|---|---|---|---|
|
|
7842
|
+
| (a) 押着 | `reasoning_end` 先于任何提交边界到达 | 缓冲整块换成 `content`;活体尾巴按已泄前缀重算(已泄不是前缀 ⇒ 不补) | `diverged?`(never false) | 自拼活体的端按 `content` 重渲;只渲 transcript 的端零改动(下一次提交交的就是权威全文) |
|
|
7843
|
+
| (b) 已整块提交 | **常态**:`text_delta` 先到 ⇒ MOD-1 边界把思考整块提交;server 的 `reasoning_end` 随后到 | 撤不回 ⇒ **一个字节都不再交**;对照物用过即清 | `diverged` + `committedPrefixDiverged` + `committedPrefixLen`(= 该行全文长度)+ **`committedUuid`** | **所有端**:找 `uuid === committedUuid` 的那条思考行,**整块**换成 `content`(不切片) |
|
|
7844
|
+
| (f) 零经手 | durable 整块思考臂已铸行 / 宿主只喂 end 不喂 delta | 什么都不做 | 三键 + uuid 全缺席 | 只当对账/定界;拿 `content` 再渲一行 = 同一段上屏两遍 |
|
|
7845
|
+
| 子流 | 帧带 `parentToolCallId` | 不产 leader 事件、不动 leader 缓冲 | — | — |
|
|
7846
|
+
|
|
7847
|
+
**缺席语义逐键**:`diverged` / `committedPrefixDiverged` 缺席 = 否定(never false);`committedPrefixLen` 缺席 = 0;`committedUuid` 只随 `committedPrefixDiverged` 在场;`eventId` 缺席 = wire 没带。整条流零本臂 ≠ 段没结束(只有会报块结束的引擎才发)。**段身份不轮换**(`_sema_segment_id` 是文本行的,CC-01)。
|
|
7848
|
+
|
|
7849
|
+
**print 车道(cli `-p`)**:内部臂 `reasoning_end` 与 `text_end` 同在 `INTERNAL_SDK_ARM_TYPES`;CC stdout 帧全集零同位帧 ⇒ 壳按 `text_end` 同律「吞帧不吞事实」——把权威全文交给壳侧 thinking 累积器整块替换(cli L-319 半场),裸透传 = 越界帧。
|
|
7850
|
+
|
|
7851
|
+
```ts
|
|
7852
|
+
// 交互车道(bridgeAdapter)—— 端只接 chrome 臂:
|
|
7853
|
+
case 'thinking_segment_end':
|
|
7854
|
+
if (ev.committedPrefixDiverged) replaceThinkingRow(ev.committedUuid!, ev.content) // 整块换
|
|
7855
|
+
else if (ev.diverged) rerenderLiveThinking(ev.content) // 自拼活体的端
|
|
7856
|
+
```
|
|
7857
|
+
|
|
7858
|
+
### 36c. S-3 core 7.18.0 三件(CC-05)
|
|
7859
|
+
|
|
7860
|
+
- **通告码 +4**(均 operator):`config.write_face_swapped` / `config.write_face_deployment_clamped` / `classifier.fallback` / `route.classifier_unroutable`;`noticeAudienceOf` 照旧,消费 `switch` 必带 `default`。签名块 §27h 表长 52 → 56。
|
|
7861
|
+
- **park 两新键**(`readWorkflowParks` / `readWorkflowResumeAdmissionIncomplete`):`parks[].originUnconfirmed: true` = 行在记录上但 journal 未确认归属(**禁**当已确认读;缺席 = 已确认);`resumeAdmissionIncomplete: true` = 该 resume run 准入未完成(**在场 = 不是 resume 基**;缺席 = 常态)。两者与 `parks` 同一条投影义务;互不折叠(`resumeAdmissionIncomplete` 在场时 `parks` 整键缺席仍读 `undefined`)。
|
|
7862
|
+
- **`gate.disposition.classifier?`**(`GateClassifierRoundView`):`modelRequested` / `modelUsed` 两必在位缺一 ⇒ 整只缺席;`fallback{from,to,cause}` 三键缺一只丢 fallback;`cause` 开集(core `AUTO_MODE_FALLBACK_CAUSES` 三词 `error`/`timeout`/`parse_error`,本包不持表);⚠️ core 顶注:prompt 组不出来那一形也记成 `{cause:'error'}`,端别据它渲「分类器席坏了」。
|
|
7863
|
+
- **八闭集**(`PARK_TRUTH_UNREADABLE_REASONS` 7 / `AUTO_MODE_FALLBACK_CAUSES` 3 / `AUTO_MODE_CLASSIFIER_FALLBACKS` 2 / `TOOL_SEARCH_POLICIES` 3 / `HOOK_FAMILIES` 10 / `LSP_LANES` 3 / `PROGRAM_POSITION_REFUSAL_KINDS` 2 / `ARTIFACT_COMMIT_CERTAINTIES` 2)+ 闭集补全 7 集:本包**零穷举表**,全部按开集读 ⇒ 零加行。
|
|
7864
|
+
|
|
7865
|
+
### 36d. S-5 core 值级面端口 `coreValuePorts`(CC-07)
|
|
7866
|
+
|
|
7867
|
+
十件签名与 core 7.18.0 `dist/**.d.ts` 逐字同,只把 core 私有型换成**结构等价的镜像**(`CoreToolPolicyHandle` 是不透明句柄:本包不调 `check`,只把策略原样交回;`PermissionRuleIssueView.code` **开集串**;`CoreProtocolNamespaceView.parse` 只钉「解出了一个对象」)。
|
|
7868
|
+
|
|
7869
|
+
| 读口 | 没装 | 装了 | 端注意 |
|
|
7870
|
+
|---|---|---|---|
|
|
7871
|
+
| `resolveAutonomousLoopPrompt(prompt, opts?)` | `undefined` | `string \| null`(core 判「不组」= `null`) | 两态不折:`undefined` 是缺席,`null` 是引擎的答案 |
|
|
7872
|
+
| `loosenReasons(prior, next)` | `undefined` | `string[]`(`[]` = 没放宽) | 不许拿 `?? []` 把缺席读成「没放宽」 |
|
|
7873
|
+
| `combinePolicies(...)` / `createAllowDenyPolicy(opts)` | `undefined` | `CoreToolPolicyHandle` | core 的 `config.invalid_tool_name_set` 响亮抛**原样上抛**;要 skip 用 `onInvalidName: 'skip'` |
|
|
7874
|
+
| `mcpNamespace()` / `retiredToolNames()` / `discussionWorkflowName()` | `undefined` | 同一引用 / `ReadonlyMap` / `string` | 不铸 `'mcp__'` / 空 Map / `'discussion'` 字面量 |
|
|
7875
|
+
| `protocolOf(name)` / `ruleToolGrammarOf(tool)` | `undefined` | `undefined` 也是合法答案(不属任何协议 / 无语法族) | 🔴 两态同形 —— 要分先问 `hasCoreValuePort(name)` |
|
|
7876
|
+
| `validatePermissionRules(rules, opts?)` | `undefined` | `PermissionRuleIssueView[]`(`[]` = 全过) | 缺席 ≠ 全过 |
|
|
7877
|
+
|
|
7878
|
+
```ts
|
|
7879
|
+
// Node 宿主装配根(逐字,别加工):
|
|
7880
|
+
import { resolveAutonomousLoopPrompt, loosenReasons, combinePolicies, createAllowDenyPolicy, MCP_NAMESPACE, RETIRED_TOOL_NAMES,
|
|
7881
|
+
protocolOf, ruleToolGrammarOf, validatePermissionRules, DISCUSSION_WORKFLOW_NAME } from '@sema-agent/core'
|
|
7882
|
+
installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolicies, createAllowDenyPolicy, MCP_NAMESPACE, RETIRED_TOOL_NAMES,
|
|
7883
|
+
protocolOf, ruleToolGrammarOf, validatePermissionRules, DISCUSSION_WORKFLOW_NAME })
|
|
7884
|
+
```
|
|
7885
|
+
`coreValuePortMisses()` 给 `/doctor` 一行(全装 ⇒ `[]`);`hasCoreValuePorts()` 只答「装没装」,**不判部署形态**。🔴 **部分装载时两口分歧是刻意的**:`hasCoreValuePorts()` 答「整袋在不在」(装了任意一件即 `true`),`coreValuePortMisses()` 答「哪几件缺」(逐件);要判某一件用 `hasCoreValuePort(name)`,别拿整袋位推断单件。**签名口径**:十件签名按 core **7.18.0** `dist/**.d.ts` 写,7.17.x 上同形(这十件在 7.17→7.18 零签名变更);装配根装的是端自己那一版 core 的实现。
|
|
7886
|
+
|
|
7887
|
+
**判据**:`run-core-value-ports-test.mjs`(52 格;源码剥注释零 core import 直证)。
|
|
7888
|
+
|
|
7889
|
+
### 36z. 逐键处置表(0.69.0)
|
|
7890
|
+
|
|
7891
|
+
| # | 键 / 面 | 处置 | 坐标 / 理由 |
|
|
7892
|
+
|---|---|---|---|
|
|
7893
|
+
| 1 | `reasoning_end{content,eventId,parentToolCallId?,sourceTaskId?,bgAgentId?}`(server 7.77.0 S-310 / sdk 9.4.0 `SegmentEndFields`) | **consumed** | `src/adapter/downstream/eventToSdkMessage.ts` 的 `#segmentEndProjection`(`reasoning_end` 字面量铸点);`src/adapt/arms.ts` 的 `#thinkingSegmentEndArm`;`src/adapt/textStream.ts` 的 `#replaceThinkingSegment`;`src/seam.ts` 的 `#ThinkingSegmentEndChromeEvent`;门 `run-text-segment-authority-test.mjs` T 段 |
|
|
7894
|
+
| 2 | `sourceTaskId` / `bgAgentId`(身份四键的后两键) | **declined**(本臂) | 本包按 `parentToolCallId` 断闸即足够分 leader / 子流;后两键属子代内容账本(`subagentContentStore`)的身份域,由 `reasoning_delta` 那条腿已有的 `EventIdentity` 读法承接,本臂不重读 |
|
|
7895
|
+
| 3 | `text_end` 进 union | **consumed(行为不变)** | `#textEndProjection` 改为薄包装调 `#segmentEndProjection`;预分派删;pure 门 #323 段照绿 |
|
|
7896
|
+
| 4 | `tool_roster_delta` | **declined(有痕 dropped,L-315 候)** | `dropped('unsupported_arm')`;`wiring_manifest.tools` 不进切片前没有可挂的基线 |
|
|
7897
|
+
| 5 | `ENGINE_NOTICE_CODES` +4 | **consumed** | `src/engineNoticeCodes.ts` 的 `ENGINE_NOTICE_CODES` / `#ENGINE_NOTICE_AUDIENCE`;门 `run-engine-notice-catalog-test.mjs` A1/B2 |
|
|
7898
|
+
| 6 | `parks[].originUnconfirmed` / `WorkflowRun.resumeAdmissionIncomplete` | **consumed** | `src/workflowClient.ts` 的 `#readWorkflowParks` / `#readWorkflowResumeAdmissionIncomplete`;门 `run-workflow-park-truth-projection-test.mjs` G 段 |
|
|
7899
|
+
| 7 | `GateDisposition.classifier?` | **consumed** | `src/gateOutcome.ts` 的 `#readClassifierRound` / `#GateClassifierRoundView`;门 `run-decide-receipt-test.mjs` H 段 |
|
|
7900
|
+
| 8 | `tool_progress` 帧 / `ProgressMessage<BashProgress>` | **pending**(候 clay DV-741) | 帧形是非 CC 锚定,本包不先给一个可能要改的 chrome 形;今有痕 dropped(`unknown_arm` 或 switch 内 dropped,随 sdk 型面到位) |
|
|
7901
|
+
| 9 | `tool_disclosure` 帧 / `context_usage.sections?` / `WiringManifest.hooks?`·`lsp?` | **pending**(与 L-315 同批,0.70) | wiring 超集今只投三段;`context_usage` 臂今在投影口同组 `not_in_slice`;设计件 = 超集键或 chrome 位 |
|
|
7902
|
+
| 10 | `McpStatusPanel.lastLegMcp?`(sdk 9.4.0 型面) | **consumed(编译期钉)** | `src/mcpPanel.ts` 的 `#_mcpPanelShapePin`(sdk 形 ⇒ 视图必填半场可赋);读法 §35g 不变 |
|
|
7903
|
+
| 11 | sdk 9.4.0 类型别名 `WiringManifestMcpEntry`(同名影子) | **declined(本版)** | 本包同名 interface `errorCode` **开集**(词的属主在 core,抄闭集会吞新词);改名对 cli 是导出 BREAKING;收敛排 0.70,消费端两边都 import 时显式取本包的 |
|
|
7904
|
+
| 12 | `ReadFace` 族 → `ContainmentFace` 族(core BREAKING) | **n/a** | 本包零值级直连 core;`readFacePosture.ts` 读 sdk 型 |
|
|
7905
|
+
| 13 | settings-schema 2.0.0(`siblingResolver` 改名 / 逐条容错) | **n/a** | 本包零 src import;两只门(additive-key-passthrough G7 / model-capability-probe I)按真字节读,换钉后照绿 |
|
|
7906
|
+
| 14 | `SKILL_CAPS.items` 退役(C-R41 / C-R43 ①) | **pending**(CC-04,随 server 7.78.1 + core 7.18.1 进 0.69.1) | 与撤帽同窗;`agents[].skills` 轴照旧零删键 |
|
|
7907
|
+
| 15 | core 值级十件(cli L-249 core-value 桶:`resolveAutonomousLoopPrompt` / `loosenReasons` / `combinePolicies`+`createAllowDenyPolicy` / `MCP_NAMESPACE`+`RETIRED_TOOL_NAMES`+`protocolOf`+`ruleToolGrammarOf`+`validatePermissionRules` / `DISCUSSION_WORKFLOW_NAME`) | **consumed(端口注入形)** | `src/coreValuePorts.ts` 的 `#installCoreValuePorts` + 十读口;§35z #9 的 blocked 改口(cli 采端口形);门 `run-core-value-ports-test.mjs` |
|
|
7908
|
+
| 16 | sdk 9.4.0 运行期锚重含退役键 `classifierUnavailable`(`TOOL_APPROVAL_FRAME_KEYS` / `APPROVAL_CARD_KEYS`) | **declined(退役登记)** | 本包 0.67.0 已整族退役、普查门禁码内出现 ⇒ `run-approval-frame-keys-test.mjs` 的 `RETIRED_NOT_MIRRORED` 登记(带两条退出条件);sdk 删锚同批删 |
|
|
7909
|
+
| 18 | 面板体传输口(§35z #15 pending 的收口) | **consumed** | `src/mcpPanel.ts` 的 `#fetchMcpPanel`(sdk `sessions.mcp` ≥0.0.75,`dist/resources/sessions.d.ts:289`;不裸 fetch);门 `run-mcp-panel-projection-test.mjs` J 段 |
|
|
7910
|
+
| 17 | sdk 9.4.0 `AskOrigin` 联合追平 core(`ancestor_marked` 在 / `unresolvable` 不在) | **consumed(登记删)** | `run-gate-vocabulary-test.mjs` B-lag 滞后登记按退出条件删 → B-sync 三侧逐词等值 |
|
|
7911
|
+
|
|
7912
|
+
### 36y. 🔴 三端升级必读(固定段式,[C295];本批**四条**)
|
|
7913
|
+
|
|
7914
|
+
1. 🔴 **安全面:`thinking_segment_end` 新臂,`required: true`**(server ≥7.77.0 才发;老 server 上整条流零本臂,零改动)。`committedPrefixDiverged` 在场 ⇒ **所有端**把 `uuid === committedUuid` 的那条已 committed 思考行整块换成 `content`(不做 = 未脱敏的推理字节留在那个宿主的转录里);`diverged` 在场 ⇒ 自拼 thinking `stream_delta` 的端按 `content` 重渲。print 车道把内部臂 `reasoning_end` 按 `text_end` 同律吞/转,裸透传 = 越界帧。
|
|
7915
|
+
2. **peer sdk `>=9.4.0`**:装 9.4.0+;`WiringManifestMcpEntry` 两边同名不同形,显式 `import type { … } from '@sema-agent/client-core'`。
|
|
7916
|
+
3. **Node 宿主装 core 值级十件端口**(cli / desktop 主进程):`installCoreValuePorts({...})` 一处装、壳里十件 `@sema-agent/core` 值级 import 改经包;web / desktop 渲染层零动作(恒缺席,消费点按 `undefined` 降级)。
|
|
7917
|
+
4. **park 两新键必须逐字带**(渲 resume 候选 / park 行的端):`originUnconfirmed` 在场禁当已确认读;`resumeAdmissionIncomplete` 在场 = 不是 resume 基 —— 丢任一 = 已拒记录变回可 resume。
|
|
7918
|
+
|
|
7919
|
+
**包侧缺口:** ① `tool_progress` 投影候 DV-741(36z #8);② `tool_disclosure` / `sections` / `hooks`·`lsp` 与 L-315 同批(36z #9);③ `WiringManifestMcpEntry` 同名影子收敛(36z #11,0.70);④ CC-04 技能帽退役随 server 7.78.1 进 0.69.1(36z #14);⑤ 中途翻转 verb 处置表 / 跨消息分段根治(§35 包侧缺口 ③④ 不变;① 面板体传输口已由 36z #18 收口)。
|
|
7920
|
+
|
|
7921
|
+
---
|
|
7922
|
+
|
|
7923
|
+
## §37 🆕 0.69.1 收尾批(CC-09 runStream 去重留痕 / CC-04 技能帽退役候 server 7.78.1)
|
|
7924
|
+
|
|
7925
|
+
### 37a. 本节速览
|
|
7926
|
+
|
|
7927
|
+
| 件 | 一句话 | 端要做什么 |
|
|
7928
|
+
|---|---|---|
|
|
7929
|
+
| S-1 🔴 **已知边界** | **`-p` / runStream 链在 server <7.78.1 上收不到 `reasoning_end`**:server 7.77.0 给它的 SSE `id:` 复用该段首枚 `reasoning_delta` 的 id,`runStream` 的 durable seq 去重把它当重放丢;0.69.1 起**丢了必留痕**(`ctx.onDroppedFrame({ type:'reasoning_end', why:'duplicate_seq' })`)。**交互车道 `adapt()` 不经这只去重**,`thinking_segment_end` 照到 | 装 `onDroppedFrame` 的端把 `duplicate_seq` 当运维面留痕渲(不是用户面);`-p` 端在 server <7.78.1 上**如实披露**「推理面权威段不到」,不许壳侧绕过去重(去重律是契约) |
|
|
7930
|
+
| S-2 🔴 **安全面** | **段末帧子流断闸改按身份三键**(CC-10):`text_end` / `reasoning_end` 内部臂新带 `sourceTaskId?` / `bgAgentId?`(与 `parentToolCallId` 同律原样透传),两臂任一在场即断;只带 `sourceTaskId` 的子代段末帧不再被当 leader 投上来 | 自建管线的端(print 车道 / 座位层)断子流按**三键**判,别只看 `parentToolCallId` |
|
|
7931
|
+
| S-3 🔴 **安全面** | **跨工具卡的推理段归属交全**(CC-11):`thinking_segment_end` 新带 `committedUuids[]`(段内全部已提交思考行,按序;`committedUuid` = 末条兼容位);`committedPrefixLen` = 全部之和;新增 (b1) 形(前缀对得上 ⇒ 只换还押着的后段) | **宿主义务改口**:`committedPrefixDiverged` ⇒ 删 `committedUuids` 全部行、在首行位置放 `content`(不再只换 `committedUuid` 那一条);缺席 ⇒ 行照旧 |
|
|
7932
|
+
| S-4 | **park 两新键进 `WorkflowRunState`**(CC-12):`parks?` / `resumeAdmissionIncomplete?`(additive,由两读器铸) | 渲 resume 候选 / park 行的端改读视图上这两位;cli 的「到货锚」可翻 consumed |
|
|
7933
|
+
| S-5 | 文档批(回执 ③⑤⑥):`mcpPanelLastLegDetail` 是**五句**(源码 jsdoc 已订正);`SessionPermissionRules` 进 `sdkWireTransit` 型面转口;§36d 两口分歧句 + 签名口径句已补;§35z #15「候 sdk 9.5」**作废** —— 已由 §36z #18(`fetchMcpPanel`)收口 | 零动作 |
|
|
7934
|
+
| S-6 | CC-04 `SKILL_CAPS.items` 退役改预算式 | **不在本版**:改随 server 7.78.1 + core 7.18.1 进 **0.69.2**(§38) |
|
|
7935
|
+
|
|
7936
|
+
### 37z. 逐键处置表(0.69.1)
|
|
7937
|
+
|
|
7938
|
+
| # | 键 / 面 | 处置 | 坐标 / 理由 |
|
|
7939
|
+
|---|---|---|---|
|
|
7940
|
+
| 1 | runStream 对 re-seen durable seq 的裸 `continue` | **consumed(留痕)** | `src/adapter/runStream.ts` 的 `#reportDroppedFrame('duplicate_seq', …)` + `#DROPPED_WHY_SENTENCE` 加行;门 TSA U 段 |
|
|
7941
|
+
| 2 | server 7.77.0 `reasoning_end` id 复用 | **declined(归口 server 7.78.1)** | 本层不猜「真重放 vs id 复用」,去重律不变 |
|
|
7942
|
+
| 3 | 段末帧身份键 `sourceTaskId` / `bgAgentId`(sdk `EventIdentity`) | **consumed** | `src/adapter/downstream/eventToSdkMessage.ts` 的 `#segmentEndProjection`(三键透传 + 非串 malformed);`src/adapt/arms.ts` 的 `#isSubFlowSegmentEnd`;门 TSA V1–V3 |
|
|
7943
|
+
| 4 | `thinking_segment_end.committedUuids[]` + (b1) 形 | **consumed** | `src/adapt/textStream.ts` 的 `#replaceThinkingSegment`(段内行按序累积);`src/seam.ts` 义务文案改口;门 TSA V4–V10 |
|
|
7944
|
+
| 5 | `WorkflowRunState.parks?` / `resumeAdmissionIncomplete?` | **consumed** | `src/workflowClient.ts` 的 `#projectWorkflowRun`;`src/workflowMonitor.ts` 的 `#WorkflowRunState`;门 park H 段 |
|
|
7945
|
+
| 6 | `SessionPermissionRules` 型名 | **consumed(型面转口)** | `src/sdkWireTransit.ts` |
|
|
7946
|
+
| 7 | §35z #15「候 sdk 9.5」 | **作废** | 已由 §36z #18 `fetchMcpPanel` 收口(sdk `sessions.mcp` 自 0.0.75 在场) |
|
|
7947
|
+
|
|
7948
|
+
### 37y. 🔴 三端升级必读(固定段式,[C295];本批**三条**)
|
|
7949
|
+
|
|
7950
|
+
1. 🔴 **`thinking_segment_end` 宿主义务改口**:`committedPrefixDiverged` 在场 ⇒ 删 `committedUuids` **全部**行、在首行位置放一条 `content`(0.69.0 写的「换 `committedUuid` 那一条」在跨工具卡的段上会漏掉前面几条未脱敏行);`committedUuid` 仍在(末条),只作兼容。
|
|
7951
|
+
2. 🔴 **自建管线的端断子流按三键**:`text_end` / `reasoning_end` 内部臂现带 `sourceTaskId?` / `bgAgentId?`,任一在场 = 子代帧;只看 `parentToolCallId` 会把只带 `sourceTaskId` 的子代段末帧当 leader(0.69.0 包侧同病已修)。
|
|
7952
|
+
3. `onDroppedFrame` 新 why 词 `duplicate_seq`(开集,宿主不必改型):渲进运维面;`-p` 端在 server <7.78.1 上如实披露推理面权威段不到,不绕过去重。`WorkflowRunState` 新带 `parks?` / `resumeAdmissionIncomplete?`,渲 park/resume 面的端改读视图。
|
|
7953
|
+
|
|
7954
|
+
**包侧缺口:** ① CC-04 技能帽退役随 7.78.1 进 0.69.2;② server <7.78.1 上 `-p` 链收不到 `reasoning_end`(归口 server,本版只留痕);③ 其余同 §36 包侧缺口。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/client-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.69.1",
|
|
4
4
|
"description": "Client-side session runtime shared by every sema human client (TUI / web / desktop): sema wire frames (AgentEvent) -> CC session vocabulary (SDKMessage) with dual-plane output (transcript/chrome), deterministic transcript ids, lane discipline as a type, and the notification/dedup ledgers. Every CC-skin shape is collected here so the wire itself stays neutral. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@sema-agent/agent-types": ">=0.2.0",
|
|
34
|
-
"@sema-agent/sdk": ">=
|
|
34
|
+
"@sema-agent/sdk": ">=9.4.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@sema-agent/agent-types": "^0.2.0",
|
|
38
|
-
"@sema-agent/core": "~7.
|
|
39
|
-
"@sema-agent/sdk": "^
|
|
40
|
-
"@sema-agent/settings-schema": "^
|
|
38
|
+
"@sema-agent/core": "~7.18.0",
|
|
39
|
+
"@sema-agent/sdk": "^9.4.0",
|
|
40
|
+
"@sema-agent/settings-schema": "^2.0.0",
|
|
41
41
|
"esbuild": "^0.27.4",
|
|
42
42
|
"typescript": "^6.0.2"
|
|
43
43
|
}
|