@sema-agent/client-core 0.72.1 → 0.72.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +1 -1
- package/dist/adapt/arms.js +5 -1
- package/dist/notifications.d.ts +7 -0
- package/dist/notifications.js +11 -0
- package/dist/workflowClient.d.ts +34 -0
- package/dist/workflowClient.js +23 -0
- package/docs/INTEGRATION-CLIENTS.md +32 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -49,6 +49,15 @@
|
|
|
49
49
|
> 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
|
|
50
50
|
> commit 漏转在发布前就红,不再靠人记。
|
|
51
51
|
|
|
52
|
+
## 0.72.2(2026-09-17)
|
|
53
|
+
|
|
54
|
+
> 主题:**workflow 视图两票**(cli [7468] ②③ 点名;本包 CC-38 / CC-37)。**patch**:型面纯 additive(公面 960 → 961;`LiveWorkflowController` +1 方法;零 wire 键;peer 不动)。接入面 §49。
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- **`LiveWorkflowController.resolution(): WorkflowResolution`**(CC-38):把 `snapshot()` 的 `null` 三义拆成六态 —— `pending{lastError}`(首发 get 未答,含纯连接错误退避中)/ `degraded{code: 501|404}`(引擎明说不可用 / run 不存在)/ `empty`(未配 workflowId 且 owner 零 run)/ `unavailable`(client 造不出来,永不会答)/ `live{state}` / `stale{state, code}`(曾 live 后引擎又说 501/404)。纯读、`snapshot()` / `status()` 契约不变;壳侧「问了 3 s 还是 null」的宽限窗可撤。`empty` 只对刚刚那次空表成立:之后任何失败退回 `pending{lastError}`、名单从空变非空也先回 `pending`(发车前复审实抓:此前空表后的连接故障会一直被报成「零 run」)。pure 门 CC-38 段 13 格(含同一 source 的两条相位转换),变异「empty 折成 pending」红。
|
|
59
|
+
- **`noteOwnWorkflowRun(runId)`** + adapter workflow lane 门同拍登记(CC-37):`task_progress` 帧带 `workflowRunId` ∧ 父是本会话见过的 Workflow 工具卡(own-run 正向证明)时,铸行那一拍即登 own 台账,不再等 run_workflow 回执(此前 fleet 行已渲 13 s 而 `listOwnWorkflowRuns()` 仍空);只有 `workflowRunId` 无父卡或父是别的卡 ⇒ 不登。回执登记点保留。pure 门 CC-37 段 5 格,变异「去掉同拍登记」红。
|
|
60
|
+
|
|
52
61
|
## 0.72.1(2026-09-17)
|
|
53
62
|
|
|
54
63
|
> 主题:**server 7.80.1 提货**(发车帖 [7430] @client-core 三条;本包 CC-33)。**patch**:型面纯 additive(公面 956 → 960;零 `_sema_` 键;peer 不动)。接入面 §48。
|
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Renamed from **`@sema-agent/wire-cc-adapter`** (0.1.x, deprecated — see *Migra
|
|
|
35
35
|
|
|
36
36
|
## Scope
|
|
37
37
|
|
|
38
|
-
**Version:** 0.72.
|
|
38
|
+
**Version:** 0.72.2
|
|
39
39
|
|
|
40
40
|
- **Today** — the adapter seam, the whole `adapt()` pipeline (all 14 A-layer arms plus the
|
|
41
41
|
B/D/E tool-card layers), the notification/caps/model families, the adapter kernel (stream driver
|
package/dist/adapt/arms.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isSubFlowSegmentEnd } from '../adapter/types.js';
|
|
2
2
|
import { classifyPeerNotification, renderPeerFrameTranscriptText } from '../peerFrames.js';
|
|
3
|
-
import { dropQueuedNotificationsForRun, isEngineWorkflowNotified, isWorkflowCompletionCardEnqueued, markEngineWorkflowNotified, normalizeTaskNotification, noteWorkflowCompletionCardEnqueued, renderTaskNotificationXml, taskNotificationDedupKey } from '../notifications.js';
|
|
3
|
+
import { dropQueuedNotificationsForRun, isEngineWorkflowNotified, isWorkflowCompletionCardEnqueued, markEngineWorkflowNotified, noteOwnWorkflowRun, normalizeTaskNotification, noteWorkflowCompletionCardEnqueued, renderTaskNotificationXml, taskNotificationDedupKey } from '../notifications.js';
|
|
4
4
|
import { mapBrainStatusToRetry } from '../retryStatus.js';
|
|
5
5
|
import { steeringInjectedToAttachments } from '../steering.js';
|
|
6
6
|
import { projectDiagnosticsFrame } from '../diagnostics.js';
|
|
@@ -748,6 +748,10 @@ const taskProgressArm = function* (m, { ctx, cards, panel, inst }) {
|
|
|
748
748
|
// footer task 树。🔴 写者在本包、读者(isKnownWorkflowAgentTaskId)也在本包 = R4 纪律,
|
|
749
749
|
// 做成 chrome 臂反而会让「宿主没接线 ⇒ Set 恒空 ⇒ 判据④ 静默失效」复活。
|
|
750
750
|
recordWorkflowAgentTaskId(taskId);
|
|
751
|
+
// CC-37(0.72.2):own 台账同拍登记 —— 只在「帧带 workflowRunId ∧ 父是本会话见过的 Workflow 卡」这一形
|
|
752
|
+
// (own-run 正向证明);光有 workflowRunId 不够(老引擎对 fleet 行帧广播,别的会话的 run 也会带它)。
|
|
753
|
+
if (workflowRunId !== undefined && explicitParent !== undefined && inst.isWorkflowCard(explicitParent))
|
|
754
|
+
noteOwnWorkflowRun(workflowRunId);
|
|
751
755
|
ctx.probe?.('tick', JSON.stringify({
|
|
752
756
|
t: ctx.now(),
|
|
753
757
|
taskId,
|
package/dist/notifications.d.ts
CHANGED
|
@@ -240,6 +240,13 @@ export declare function isOwnWorkflowRun(runId: string): boolean;
|
|
|
240
240
|
/** 本壳亲手启动过的 workflow run 列表(Set 插入序 = 启动序;/workflows 命令的目标 run 选择用,
|
|
241
241
|
* cmd-workflows.tsx——fleet source 无行可选时的兜底 id 源)。 */
|
|
242
242
|
export declare function listOwnWorkflowRuns(): string[];
|
|
243
|
+
/**
|
|
244
|
+
* CC-37(0.72.2,cli [7468] ②):只登 own 台账、不动 outstanding —— 给 adapter 的 workflow lane 门用:带 `workflowRunId`
|
|
245
|
+
* 的 `task_progress` 帧**且**其父指向本会话见过的 Workflow 工具卡(own-run 正向证明)时,在为其铸行的那一拍就登记,
|
|
246
|
+
* 不再等 run_workflow 回执;此前 fleet 行已渲 13 s 而 `listOwnWorkflowRuns()` 仍空。幂等;别的会话的 workflow 帧
|
|
247
|
+
* (无本会话卡为父)**不登**。
|
|
248
|
+
*/
|
|
249
|
+
export declare function noteOwnWorkflowRun(runId: string): void;
|
|
243
250
|
/** bridge 在 run_workflow 回执(structured type:'workflow-run')经过时登记。幂等;已通知的不再登记。 */
|
|
244
251
|
export declare function registerOutstandingWorkflowRun(runId: string): void;
|
|
245
252
|
export interface EngineWorkflowCompletion {
|
package/dist/notifications.js
CHANGED
|
@@ -572,6 +572,17 @@ export function isOwnWorkflowRun(runId) {
|
|
|
572
572
|
export function listOwnWorkflowRuns() {
|
|
573
573
|
return [...ownWorkflowRuns];
|
|
574
574
|
}
|
|
575
|
+
/**
|
|
576
|
+
* CC-37(0.72.2,cli [7468] ②):只登 own 台账、不动 outstanding —— 给 adapter 的 workflow lane 门用:带 `workflowRunId`
|
|
577
|
+
* 的 `task_progress` 帧**且**其父指向本会话见过的 Workflow 工具卡(own-run 正向证明)时,在为其铸行的那一拍就登记,
|
|
578
|
+
* 不再等 run_workflow 回执;此前 fleet 行已渲 13 s 而 `listOwnWorkflowRuns()` 仍空。幂等;别的会话的 workflow 帧
|
|
579
|
+
* (无本会话卡为父)**不登**。
|
|
580
|
+
*/
|
|
581
|
+
export function noteOwnWorkflowRun(runId) {
|
|
582
|
+
if (!runId)
|
|
583
|
+
return;
|
|
584
|
+
ownWorkflowRuns.add(runId);
|
|
585
|
+
}
|
|
575
586
|
/** bridge 在 run_workflow 回执(structured type:'workflow-run')经过时登记。幂等;已通知的不再登记。 */
|
|
576
587
|
export function registerOutstandingWorkflowRun(runId) {
|
|
577
588
|
if (!runId)
|
package/dist/workflowClient.d.ts
CHANGED
|
@@ -37,7 +37,41 @@ export interface LiveWorkflowController {
|
|
|
37
37
|
subscribe(onChange: () => void): () => void;
|
|
38
38
|
/** abort the underlying SSE stream + stop the background loop (host unmount). */
|
|
39
39
|
dispose(): void;
|
|
40
|
+
/**
|
|
41
|
+
* CC-38(0.72.2):把 `snapshot()` 的 `null` 三义**拆开**的读口 —— 宿主此前只能按「问了 N 秒还是 null」猜
|
|
42
|
+
* (cli 曾以 3 s 宽限窗权宜),现在按 `kind` 分派:
|
|
43
|
+
* · `pending`:循环在跑、首发 `get()` 还没答上来(含纯连接错误退避中 —— `lastError` 带原因);**不是**引擎说不可用;
|
|
44
|
+
* · `degraded`:引擎**明说** —— 501 端点不可用 / 404 run 不存在或非 owner;`code` 就是那个数字;
|
|
45
|
+
* · `empty`:没配 `workflowId` 且 owner 名下零 run(list 空)—— 不是错误,下一轮会再问;
|
|
46
|
+
* · `unavailable`:client 根本造不出来(baseUrl / 凭证非法)—— 永远不会答上来,别等;
|
|
47
|
+
* · `live`:有快照,`state` 与 `snapshot()` 同一份;
|
|
48
|
+
* · `stale`:曾经 live、之后引擎又说 501/404(run 被清)—— `state` 是最后一份快照,`code` 说明为什么不再新鲜。
|
|
49
|
+
* 纯读、不改内部状态;`snapshot()` 契约不变(live / stale 时非 null,其余 null)。
|
|
50
|
+
*/
|
|
51
|
+
resolution(): WorkflowResolution;
|
|
40
52
|
}
|
|
53
|
+
/** {@link LiveWorkflowController.resolution} 的六态。 */
|
|
54
|
+
export type WorkflowResolution = {
|
|
55
|
+
kind: 'pending';
|
|
56
|
+
lastError: string | null;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'degraded';
|
|
59
|
+
code: 501 | 404;
|
|
60
|
+
lastError: string | null;
|
|
61
|
+
} | {
|
|
62
|
+
kind: 'empty';
|
|
63
|
+
} | {
|
|
64
|
+
kind: 'unavailable';
|
|
65
|
+
lastError: string | null;
|
|
66
|
+
} | {
|
|
67
|
+
kind: 'live';
|
|
68
|
+
state: WorkflowRunState;
|
|
69
|
+
} | {
|
|
70
|
+
kind: 'stale';
|
|
71
|
+
state: WorkflowRunState;
|
|
72
|
+
code: 501 | 404;
|
|
73
|
+
lastError: string | null;
|
|
74
|
+
};
|
|
41
75
|
export interface LiveWorkflowConfig {
|
|
42
76
|
baseUrl: string;
|
|
43
77
|
/** Bearer 串,或 `{ mode: 'same-origin-relay' }`([C175],0.29.0)—— 浏览器同源宿主形:凭证由
|
package/dist/workflowClient.js
CHANGED
|
@@ -992,6 +992,8 @@ export function createLiveWorkflowSource(config) {
|
|
|
992
992
|
let lastGetAt = 0;
|
|
993
993
|
/** 入场打点用:只有第一发 get 是「入场」,后续都是 ticker 触发的 re-GET。 */
|
|
994
994
|
let first = true;
|
|
995
|
+
/** CC-38:list 空(owner 零 run)与 client 造不出来 在 status() 上同形(degraded=true, code=null),用相位分开。 */
|
|
996
|
+
let phase = 'loop';
|
|
995
997
|
/** 台账槽位被别的连线身份顶掉过 ⇒ 本源放弃 activity 腿(防两个 scope 互相换账)。 */
|
|
996
998
|
let activityDisabled = false;
|
|
997
999
|
const listeners = new Set();
|
|
@@ -1028,6 +1030,10 @@ export function createLiveWorkflowSource(config) {
|
|
|
1028
1030
|
* error would misreport an unrelated failure as "still a 404 (run gone)".
|
|
1029
1031
|
*/
|
|
1030
1032
|
function noteDegrade(err) {
|
|
1033
|
+
// CC-38(复审实抓):empty 相位只对「刚刚那次 list 为空」成立,之后任何失败都要退回 loop —— 否则一次空表之后的连接故障
|
|
1034
|
+
// 会被 resolution() 一直报成「零 run」,而 status() 早已换成新的 lastError。
|
|
1035
|
+
if (phase === 'empty')
|
|
1036
|
+
phase = 'loop';
|
|
1031
1037
|
connected = false;
|
|
1032
1038
|
if (err instanceof APIError) {
|
|
1033
1039
|
code = err.status;
|
|
@@ -1076,6 +1082,7 @@ export function createLiveWorkflowSource(config) {
|
|
|
1076
1082
|
const run = await client.workflows.get(id, { signal, ...engineSessionParamSpread() });
|
|
1077
1083
|
lastGetAt = Date.now();
|
|
1078
1084
|
current = projectWorkflowRun(run);
|
|
1085
|
+
phase = 'loop';
|
|
1079
1086
|
runId = run.id;
|
|
1080
1087
|
connected = true;
|
|
1081
1088
|
degraded = false;
|
|
@@ -1100,10 +1107,13 @@ export function createLiveWorkflowSource(config) {
|
|
|
1100
1107
|
while (!disposed && !abort.signal.aborted) {
|
|
1101
1108
|
try {
|
|
1102
1109
|
const id = runId ?? (await resolveRunId(abort.signal));
|
|
1110
|
+
if (id !== null && phase === 'empty')
|
|
1111
|
+
phase = 'loop'; // 名单从空变非空:还没 get 成功之前先回 pending,不再报 empty
|
|
1103
1112
|
if (!id) {
|
|
1104
1113
|
// owner has no runs → empty/degraded (not an error). Back off and re-poll (a run may appear).
|
|
1105
1114
|
degraded = true;
|
|
1106
1115
|
code = null;
|
|
1116
|
+
phase = 'empty';
|
|
1107
1117
|
connected = false;
|
|
1108
1118
|
await abortableSleep(NO_RUN_BACKOFF_MS, abort.signal);
|
|
1109
1119
|
continue;
|
|
@@ -1202,6 +1212,7 @@ export function createLiveWorkflowSource(config) {
|
|
|
1202
1212
|
// `snapshot()` 恒 null ⇒ 宿主走它既有的 mock/空态回落。**绝不抛进宿主**(与 501/404/空列表同路)。
|
|
1203
1213
|
if (client === null) {
|
|
1204
1214
|
degraded = true;
|
|
1215
|
+
phase = 'unavailable';
|
|
1205
1216
|
lastError = 'client construction failed (invalid baseUrl/credentials)';
|
|
1206
1217
|
}
|
|
1207
1218
|
else {
|
|
@@ -1236,5 +1247,17 @@ export function createLiveWorkflowSource(config) {
|
|
|
1236
1247
|
abort.abort();
|
|
1237
1248
|
listeners.clear();
|
|
1238
1249
|
},
|
|
1250
|
+
resolution() {
|
|
1251
|
+
if (phase === 'unavailable')
|
|
1252
|
+
return { kind: 'unavailable', lastError };
|
|
1253
|
+
const hardCode = degraded && (code === 501 || code === 404) ? code : null;
|
|
1254
|
+
if (current !== null)
|
|
1255
|
+
return hardCode !== null ? { kind: 'stale', state: current, code: hardCode, lastError } : { kind: 'live', state: current };
|
|
1256
|
+
if (hardCode !== null)
|
|
1257
|
+
return { kind: 'degraded', code: hardCode, lastError };
|
|
1258
|
+
if (phase === 'empty')
|
|
1259
|
+
return { kind: 'empty' };
|
|
1260
|
+
return { kind: 'pending', lastError };
|
|
1261
|
+
},
|
|
1239
1262
|
};
|
|
1240
1263
|
}
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
| 项 | 值 | 真源 |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| 本包 | `@sema-agent/client-core` **0.72.
|
|
22
|
+
| 本包 | `@sema-agent/client-core` **0.72.2**(本批发布版 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
|
|
23
23
|
| peer:wire 契约 | `@sema-agent/sdk` **>=9.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
|
+
| 公开导出面 | **961** 个运行期符号(+ 44 个测试钩;= 0.72.2 的值:相对 0.72.1 +1 —— CC-37 `noteOwnWorkflowRun`;0.72.1 相对 0.72.0 +4 —— CC-33 server 7.80.1 提货:`RESUME_CONTEXT_UNAVAILABLE` / `resumeContextUnavailableFromError` / `resumeContextUnavailableContent` / `skillBaseDirOf`;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
|
|
|
@@ -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`(**961** 项)。
|
|
125
125
|
> 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
|
|
126
126
|
> **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
|
|
127
127
|
> 单一入口:`import { … } from '@sema-agent/client-core'`(`exports` 只有 `.` 一个;
|
|
@@ -145,7 +145,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
145
145
|
`WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
|
|
146
146
|
**4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
|
|
147
147
|
|
|
148
|
-
|
|
148
|
+
961 项的内部构成(帮助端估读表大小;0.72.2 +1 函数(CC-37);0.72.1 +1 常量 +3 函数(CC-33);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):**279** 项是 `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)。
|
|
@@ -160,7 +160,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
160
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
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
|
-
| 7 | **通知与 outstanding 台账** |
|
|
163
|
+
| 7 | **通知与 outstanding 台账** | 52 | `noteOwnWorkflowRun`(0.72.2 CC-37:own 台账显式登记口,adapter workflow lane 门在 own-run 正向证明下同拍调;§49)· `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
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
165
|
| 9 | **能力/旋钮 wire 门族** | 96 | `skillBaseDirOf`(0.72.1 CC-33:`SkillSpec.baseDir` 窄读 = server 顶层门同一只结构判据;`skillCommandsToSpecs` 第三参 `{ toolsRunHere }` 只在本机车道带;§48)· `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
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` |
|
|
@@ -8323,3 +8323,30 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
|
|
|
8323
8323
|
3. peer sdk >=9.6.0 / agent-types >=0.3.0 不动;`SkillSpecOnWire` 是 `SkillSpec` 的交叉型,赋给 sdk 的 `skills: SkillSpec[]` 无需断言。
|
|
8324
8324
|
|
|
8325
8325
|
**包侧缺口:** ① CC-30 MCP 会话内重连消费口(候 core #857 设计车 + server S-381);② CC-31 WebSearch 后端名读口(候 server S-382);③ CC-34 `permission_denials` 自动升级验证(候 server S-394 出 `toolCallId`);④ CC-35 core 7.21.0 三件(候 server 装载 7.21.0 发车帖);⑤ `staleAfterSec` / `runId` 经 sdk 到端(候 sdk 把体键带上 `ConflictError`,[7430] ③);⑥ `agents.listing_truncated` detail 读器候消费场景(by-design);⑦ `ClassifierSeat.defaulted?` 候 sdk 出键(by-design);⑧ §NNz「declined 键真零命中」机读第二刀(候形式化)。
|
|
8326
|
+
|
|
8327
|
+
## §49 🆕 0.72.2 workflow 视图两票(CC-38 `snapshot()` 的 `null` 三义拆开 + CC-37 own 台账同拍登记;patch)
|
|
8328
|
+
|
|
8329
|
+
> **patch**:型面纯 additive(公面 961:+1 函数;`LiveWorkflowController` +1 方法 `resolution()`;零 wire 键;peer 不动)。cli [7468] ②③ 点名、[7469] ⑧ 认领。
|
|
8330
|
+
|
|
8331
|
+
### 49a. 处置表
|
|
8332
|
+
|
|
8333
|
+
| # | 面 | 本包做了什么 | 端要做什么 |
|
|
8334
|
+
|---|---|---|---|
|
|
8335
|
+
| S-1 | `LiveWorkflowController.snapshot()` 返 `null` 有三义(还没答上来 / 引擎说不可用 / 列表为空),壳只能按「问了 N 秒还是 null」猜(cli 3 s 宽限窗) | **consumed**:新方法 `resolution(): WorkflowResolution` 六态 —— `pending{lastError}`(循环在跑、首发 get 未答,含纯连接错误退避)/ `degraded{code: 501\|404, lastError}`(引擎明说)/ `empty`(未配 workflowId 且**刚刚那次** list 为空;之后任何失败退回 `pending`)/ `unavailable{lastError}`(client 造不出来,永不会答)/ `live{state}`(= `snapshot()`)/ `stale{state, code, lastError}`(曾 live 后引擎又说 501/404,`state` 是最后一份)。纯读;`snapshot()` / `status()` 契约不变 | `/workflows` 详情按 `resolution().kind` 分派:`pending` 渲加载(可附 lastError)、`degraded` / `unavailable` 渲不可用(带 code)、`empty` 渲「本会话无 run」、`live` / `stale` 渲快照(`stale` 加一句已过期);**撤掉 3 s 宽限窗** |
|
|
8336
|
+
| S-2 | `ownWorkflowRuns` 只在 run_workflow 回执登记 ⇒ fleet 行已渲 13 s 而 `listOwnWorkflowRuns()` 仍空 | **consumed**:adapter workflow lane 门在「`task_progress` 帧带 `workflowRunId` ∧ 父 `parentToolCallId` 是本会话见过的 Workflow 工具卡」(own-run 正向证明)时,为其铸行那一拍同拍 `noteOwnWorkflowRun(runId)`;只有 `workflowRunId` 无父卡 / 父是别的卡 ⇒ 不登(老引擎广播别的会话的 run 也带 `workflowRunId`);回执登记点保留(两个数据源对齐,不是替换) | 零动作(`isOwnWorkflowRun` / `listOwnWorkflowRuns` 读口不变,只是更早为真);壳若曾按拍重取 target 兜底可保留 |
|
|
8337
|
+
|
|
8338
|
+
### 49z. 逐键处置表
|
|
8339
|
+
|
|
8340
|
+
| # | 键 / 面 | 处置 | 坐标 / 理由 |
|
|
8341
|
+
|---|---|---|---|
|
|
8342
|
+
| 1 | `LiveWorkflowController.resolution()` | **consumed(新方法)** | `src/workflowClient.ts` 的 `#createLiveWorkflowSource`(内部相位 `loop / empty / unavailable` + `current` / `degraded` / `code` 合成六态);门 `run-client-core-pure-test.mjs` CC-38 段 13 格(pending / 连接错误仍 pending / 404 / 501 / empty / live / unavailable / 纯读 / empty→连接失败退回 pending / empty→名单非空且 get 挂住即回 pending→get 失败仍 pending 且 lastError 与 status() 同源),变异「empty 折成 pending」红 |
|
|
8343
|
+
| 2 | `noteOwnWorkflowRun(runId)` | **consumed(新导出)** | `src/notifications.ts` 的 `#noteOwnWorkflowRun`(只登 own 台账、不动 outstanding);调用点 `src/adapt/arms.ts` workflow lane 门;门 pure CC-37 段 5 格(正向登 / 无父不登 / Task 卡父不登 / belt 不变 / 幂等拒空串),变异「去掉同拍登记」红 |
|
|
8344
|
+
| 3 | `task_progress.workflowRunId` / `parentToolCallId` | **consumed(既有键,新用途)** | 同上;两键都在 sdk `events.d.ts` 已声明 |
|
|
8345
|
+
|
|
8346
|
+
### 49y. 🔴 三端升级必读(固定段式,[C295])
|
|
8347
|
+
|
|
8348
|
+
1. 换钉 `^0.72.2`:workflow 详情按 `resolution().kind` 六态分派,撤掉按时间猜的宽限窗;`snapshot()` 老读法仍可用但分不出三义。
|
|
8349
|
+
2. `isOwnWorkflowRun` / `listOwnWorkflowRuns` 语义不变,只是 own-run 正向证明成立时更早为真;别在壳侧再自铸一份「fleet 帧带 workflowRunId 即亲启」的判据(那会把别的会话的 run 记成亲启)。
|
|
8350
|
+
3. peer sdk >=9.6.0 / agent-types >=0.3.0 不动;零 wire 键。
|
|
8351
|
+
|
|
8352
|
+
**包侧缺口:** ① CC-30 MCP 会话内重连消费口(候 core #857 设计车 + server S-381);② CC-31 WebSearch 后端名读口(候 server S-382);③ CC-34 `permission_denials` 自动升级验证(候 server S-394);④ CC-35 core 7.21.x 三件(候 server 装载发车帖);⑤ CC-36 托管 MCP 活性三态读口(候 core #874 + server 转发半场;到货前缺席 = indeterminate 不折 off);⑥ `staleAfterSec` / `runId` 经 sdk 到端(候 sdk 出键);⑦ `agents.listing_truncated` detail 读器候消费场景(by-design);⑧ `ClassifierSeat.defaulted?` 候 sdk 出键(by-design);⑨ §NNz「declined 键真零命中」机读第二刀(候形式化)。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/client-core",
|
|
3
|
-
"version": "0.72.
|
|
3
|
+
"version": "0.72.2",
|
|
4
4
|
"description": "Client-side session runtime shared by every sema human client (TUI / web / desktop): sema wire frames (AgentEvent) -> CC session vocabulary (SDKMessage) with dual-plane output (transcript/chrome), deterministic transcript ids, lane discipline as a type, and the notification/dedup ledgers. Every CC-skin shape is collected here so the wire itself stays neutral. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|