@sema-agent/client-core 0.67.2 → 0.68.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 +310 -0
- package/README.md +65 -1
- package/dist/adapt/arms.js +67 -9
- package/dist/adapt/textStream.d.ts +102 -1
- package/dist/adapt/textStream.js +169 -6
- package/dist/adapt/turnFlags.d.ts +14 -0
- package/dist/adapt/turnFlags.js +4 -1
- package/dist/adapt.js +4 -1
- package/dist/adapter/activeRunSelfHeal.d.ts +53 -6
- package/dist/adapter/activeRunSelfHeal.js +79 -8
- package/dist/adapter/downstream/eventToSdkMessage.d.ts +18 -1
- package/dist/adapter/downstream/eventToSdkMessage.js +50 -9
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +29 -0
- package/dist/adapter/downstream/terminalToSdkResult.js +46 -15
- package/dist/adapter/runStream.d.ts +22 -2
- package/dist/adapter/runStream.js +139 -38
- package/dist/adapter/types.d.ts +4 -1
- package/dist/autoModeUnavailable.d.ts +17 -9
- package/dist/autoModeUnavailable.js +26 -8
- package/dist/classifierStatus.d.ts +32 -4
- package/dist/classifierStatus.js +5 -3
- package/dist/controlRouter.d.ts +16 -0
- package/dist/controlRouter.js +6 -0
- package/dist/engineErrorCodes.d.ts +52 -0
- package/dist/engineErrorCodes.js +117 -0
- package/dist/engineNoticeCodes.d.ts +95 -1
- package/dist/engineNoticeCodes.js +124 -1
- package/dist/gateVocabulary.d.ts +18 -7
- package/dist/gateVocabulary.js +21 -8
- package/dist/hitl/parkResolver.d.ts +0 -14
- package/dist/hitl/parkResolver.js +22 -9
- package/dist/hitl/toolApprovalWire.d.ts +2 -1
- package/dist/hitl/toolApprovalWire.js +1 -0
- package/dist/ownKey.d.ts +34 -0
- package/dist/ownKey.js +36 -0
- package/dist/request/taskRequest.d.ts +6 -6
- package/dist/request/taskRequest.js +45 -0
- package/dist/retryStatus.d.ts +13 -2
- package/dist/retryStatus.js +4 -1
- package/dist/runTerminal.d.ts +87 -14
- package/dist/runTerminal.js +89 -15
- package/dist/seam.d.ts +78 -8
- package/dist/seam.js +16 -2
- package/dist/toolResult.js +8 -0
- package/dist/toolRoster.d.ts +34 -2
- package/dist/toolRoster.js +16 -2
- package/dist/workflowClient.d.ts +22 -0
- package/dist/workflowClient.js +37 -0
- package/docs/INTEGRATION-CLIENTS.md +633 -9
- package/package.json +2 -2
package/dist/toolResult.js
CHANGED
|
@@ -125,6 +125,14 @@ export const STRUCTURED_DETAIL_TYPES = new Set([
|
|
|
125
125
|
// 并已登记在 `dist/core/runner/tool-output-projection.js:67` 的 `CC_DETAIL_TYPES` 里)。
|
|
126
126
|
// 病根与 5.20 / 5.43 两次逐字同族:词漏了不会响,只会让那一类卡**永远退回正则解模型面文本**。
|
|
127
127
|
'list-agents',
|
|
128
|
+
// ── core 7.17.0 跟车一词(0.68.0 提货批;engine-vocab ⑤ 段对 7.17.1 实装物直证,红文逐字:
|
|
129
|
+
// 「core 7.17.1:44 项 / 本包 43 项;漏:artifact」)────────────────────────────────────────
|
|
130
|
+
// `artifact` = Artifact 工具的结构化卡(core `dist/tools/artifact/artifact-tool.js` 的
|
|
131
|
+
// `details: { type: "artifact", action: … }` 铸点,七种 action 各一形 + 三条错误形)。
|
|
132
|
+
// 🔴 **可达性有前提**:只有宿主真接了 artifact 席(`RunnerDeps.artifactHost`)那只工具才挂载 ⇒
|
|
133
|
+
// 没接的部署上零帧差异。补它的理由与历史五次逐字同族:词漏了不会响,只会让那一类卡**永远
|
|
134
|
+
// 退回正则解模型面文本**,而任何一层都不会说话。
|
|
135
|
+
'artifact',
|
|
128
136
|
]);
|
|
129
137
|
// 🔴 同批**删三词**(core 5.10.0 BREAKING「幽灵卡」清仓):`multiedit` / `memory-saved` /
|
|
130
138
|
// `memory-recall` —— 全树零铸点(MultiEdit/批量重放铸的是 `type:"edit"` 带 `edits[]`;core
|
package/dist/toolRoster.d.ts
CHANGED
|
@@ -28,8 +28,16 @@
|
|
|
28
28
|
* 而且它把「位置从名册来、永远不从 summary 来」这条契约反过来用了。
|
|
29
29
|
*
|
|
30
30
|
* -- 开集读 -----------------------------------------------------------------------------------
|
|
31
|
-
* `source`(七词)/ `effect` / `family` / `access`
|
|
32
|
-
*
|
|
31
|
+
* `source`(七词)/ `effect` / `family` / `access` / 三个 `*Provenance` 等词表的属主都是引擎,一律
|
|
32
|
+
* **原样透传**,不窄读成枚举 —— 那会在引擎加词当天把一份真名册判没。
|
|
33
|
+
*
|
|
34
|
+
* -- 🔴 逐键窄读器 vs 上游的逐字透传(L-290 的病形,0.68.1)-----------------------------------
|
|
35
|
+
* server(`src/trace/project.ts` 的 `tools` 段)对名册的姿势是**整只判形 + 逐字透传**,理由逐字:
|
|
36
|
+
* 成员表由 core 以 typebox schema 单点持有,手抄一张挑键表 = 立刻多一份会漂的镜像。本读器**确实**
|
|
37
|
+
* 是那份镜像(本包要给三端一个窄化过的视图,不能把 30 余键的开集原样甩出去)—— 所以镜像必须有账:
|
|
38
|
+
* `scripts/run-tool-roster-projection-test.mjs` **G 段**拿**实装 core 的 schema 成员表**与本读器
|
|
39
|
+
* 真挑出来的键集逐键对账,core 的每一个成员要么被挑、要么在账上写明「为什么不挑」;上游加一个
|
|
40
|
+
* 成员而账上没有 ⇒ 当天红。没有这本账,「挑漏一个键 = 那个键在包边界上不存在」就会一直无声发生。
|
|
33
41
|
*/
|
|
34
42
|
/** 一只工具的**路径目标**(引擎的 `pathTarget`;`base`/`absent`/`patternParam` 是 core 7.9.1 #635 加的)。 */
|
|
35
43
|
export interface ToolRosterPathTargetView {
|
|
@@ -78,10 +86,34 @@ export interface ToolRosterEntryView {
|
|
|
78
86
|
capabilityId?: string;
|
|
79
87
|
/** `read` / `write` / `idempotent`;开集读。 */
|
|
80
88
|
effect?: string;
|
|
89
|
+
/**
|
|
90
|
+
* `effect` 这根轴**是谁说的**(`declared` 定义自报 / `caller` 调用方声明 / `synthetic` 引擎合成 /
|
|
91
|
+
* `default` 谁都没说,落默认);**开集读**。见下面 {@link ToolRosterEntryView.contentOriginProvenance}
|
|
92
|
+
* 的头注 —— 三个出身键同生同灭。
|
|
93
|
+
*/
|
|
94
|
+
effectProvenance?: string;
|
|
81
95
|
egress?: boolean;
|
|
96
|
+
/** `egress` 这根轴的出身(`declared` / `caller` / `default`);**开集读**,读法同上。 */
|
|
97
|
+
egressProvenance?: string;
|
|
82
98
|
/** `never` / `maybe` / `always`;开集读。 */
|
|
83
99
|
irreversibility?: string;
|
|
84
100
|
contentOrigin?: string;
|
|
101
|
+
/**
|
|
102
|
+
* `contentOrigin` 这根轴的出身(`declared` 定义自报 / `server` mcp·a2a 行由服务端定 /
|
|
103
|
+
* `exempted` 在受信工具豁免名单里 / `default` 谁都没说);**开集读**(L-290,0.68.1)。
|
|
104
|
+
*
|
|
105
|
+
* 🔴 **为什么要有这一位**:轴的**值**说的是「这只工具的产出算不算外来内容」,而一个
|
|
106
|
+
* `contentOrigin: "local"` 到底是**工具自己声明**的、还是**因为它在豁免名单里**才这样 ——
|
|
107
|
+
* 在信任面上是两件事。诊断行(壳 `/doctor` 的「Tools (engine leg)」)读的正是后者。
|
|
108
|
+
* 🔴 **族扫(同形存量清剿)**:server `src/trace/project.ts` 的 `tools` 段是**整只判形 + 逐字
|
|
109
|
+
* 透传**,而本读器是**逐键挑** —— 挑漏的键在包边界上等于不存在。三根轴各有一个出身键,漏的形
|
|
110
|
+
* 一模一样,所以三个一起挑,不是只补被点名的那一个;核过之后 core `ToolRosterEntry` 的**每一个**
|
|
111
|
+
* 成员在 `scripts/run-tool-roster-projection-test.mjs` G 段都有一行处置(挑 / 不挑 + 理由),
|
|
112
|
+
* 上游再加成员当天红。
|
|
113
|
+
* ⚠️ 出身键是**诊断面**,刻意**不进** {@link ToolShim}(那是渲染面:人话名 / 卡型 / 三根轴的
|
|
114
|
+
* **值**)—— 端渲一只工具时要的是「它是什么」,不是「这句话是谁说的」。
|
|
115
|
+
*/
|
|
116
|
+
contentOriginProvenance?: string;
|
|
85
117
|
family?: string;
|
|
86
118
|
pathTarget?: ToolRosterPathTargetView;
|
|
87
119
|
renderHints?: ToolRosterRenderHintsView;
|
package/dist/toolRoster.js
CHANGED
|
@@ -28,8 +28,16 @@
|
|
|
28
28
|
* 而且它把「位置从名册来、永远不从 summary 来」这条契约反过来用了。
|
|
29
29
|
*
|
|
30
30
|
* -- 开集读 -----------------------------------------------------------------------------------
|
|
31
|
-
* `source`(七词)/ `effect` / `family` / `access`
|
|
32
|
-
*
|
|
31
|
+
* `source`(七词)/ `effect` / `family` / `access` / 三个 `*Provenance` 等词表的属主都是引擎,一律
|
|
32
|
+
* **原样透传**,不窄读成枚举 —— 那会在引擎加词当天把一份真名册判没。
|
|
33
|
+
*
|
|
34
|
+
* -- 🔴 逐键窄读器 vs 上游的逐字透传(L-290 的病形,0.68.1)-----------------------------------
|
|
35
|
+
* server(`src/trace/project.ts` 的 `tools` 段)对名册的姿势是**整只判形 + 逐字透传**,理由逐字:
|
|
36
|
+
* 成员表由 core 以 typebox schema 单点持有,手抄一张挑键表 = 立刻多一份会漂的镜像。本读器**确实**
|
|
37
|
+
* 是那份镜像(本包要给三端一个窄化过的视图,不能把 30 余键的开集原样甩出去)—— 所以镜像必须有账:
|
|
38
|
+
* `scripts/run-tool-roster-projection-test.mjs` **G 段**拿**实装 core 的 schema 成员表**与本读器
|
|
39
|
+
* 真挑出来的键集逐键对账,core 的每一个成员要么被挑、要么在账上写明「为什么不挑」;上游加一个
|
|
40
|
+
* 成员而账上没有 ⇒ 当天红。没有这本账,「挑漏一个键 = 那个键在包边界上不存在」就会一直无声发生。
|
|
33
41
|
*/
|
|
34
42
|
const str = (v) => typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
35
43
|
const strArr = (v) => Array.isArray(v) ? v.filter((x) => typeof x === 'string') : undefined;
|
|
@@ -91,9 +99,15 @@ function readEntry(raw) {
|
|
|
91
99
|
...(str(o.cardId) !== undefined ? { cardId: str(o.cardId) } : {}),
|
|
92
100
|
...(str(o.capabilityId) !== undefined ? { capabilityId: str(o.capabilityId) } : {}),
|
|
93
101
|
...(str(o.effect) !== undefined ? { effect: str(o.effect) } : {}),
|
|
102
|
+
// L-290 族扫:三根轴各自的**出身**键(开集读,`str()` 同律;坏形只丢这一格,行还在 —— 出身不是身份)。
|
|
103
|
+
...(str(o.effectProvenance) !== undefined ? { effectProvenance: str(o.effectProvenance) } : {}),
|
|
94
104
|
...(typeof o.egress === 'boolean' ? { egress: o.egress } : {}),
|
|
105
|
+
...(str(o.egressProvenance) !== undefined ? { egressProvenance: str(o.egressProvenance) } : {}),
|
|
95
106
|
...(str(o.irreversibility) !== undefined ? { irreversibility: str(o.irreversibility) } : {}),
|
|
96
107
|
...(str(o.contentOrigin) !== undefined ? { contentOrigin: str(o.contentOrigin) } : {}),
|
|
108
|
+
...(str(o.contentOriginProvenance) !== undefined
|
|
109
|
+
? { contentOriginProvenance: str(o.contentOriginProvenance) }
|
|
110
|
+
: {}),
|
|
97
111
|
...(str(o.family) !== undefined ? { family: str(o.family) } : {}),
|
|
98
112
|
...(readPathTarget(o.pathTarget) !== undefined
|
|
99
113
|
? { pathTarget: readPathTarget(o.pathTarget) }
|
package/dist/workflowClient.d.ts
CHANGED
|
@@ -63,6 +63,28 @@ export interface LiveWorkflowConfig {
|
|
|
63
63
|
* tolerates absent/permissive fields and never throws (the graceful-degrade contract lives above, in the
|
|
64
64
|
* source loop; this just maps a well-formed run). Exported for the mock-parity unit cross-check. */
|
|
65
65
|
export declare function projectWorkflowRun(run: WorkflowRun): WorkflowRunState;
|
|
66
|
+
/** `parks[]` 的一行 —— **恰好三键**,凭据席位在本型上不存在(见上段 ①)。 */
|
|
67
|
+
export interface WorkflowParkRowView {
|
|
68
|
+
/** 这只 park 属于哪一次调用(与 `agents[].callKey` join 得上)。 */
|
|
69
|
+
callKey: string;
|
|
70
|
+
/** 停着的那只审批属于哪个会话(宿主按它路由)。 */
|
|
71
|
+
sessionId: string;
|
|
72
|
+
/** 最初跑出这只 park 的那条 run。 */
|
|
73
|
+
originRunId: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* `GET /v1/workflows/:id` 的 `parks[]` → 三键行;**整键缺席 ⇒ `undefined`**(与空数组逐字可分)。
|
|
77
|
+
*
|
|
78
|
+
* 🔴 **`undefined` 与 `[]` 不是一回事**,这是本读器最承重的一格:
|
|
79
|
+
* · `undefined` —— 这条记录上没有 `parks` 这一键(旧引擎写的)⇒ **证不出**有没有 park;
|
|
80
|
+
* · `[]` —— 这条记录有这一键且是空的 ⇒ 一句正面事实:这条 run 上没有 park。
|
|
81
|
+
* 🔴 **坏行只丢自己**(与本包 `wiring_manifest.mcp[]` 的处置同尺):三键缺一 / 非串 / 空串 的行
|
|
82
|
+
* 整条丢弃,其余行保序留下;**非空输入而全部坏行 ⇒ 返回 `[]`**?—— **不**:那会把「读不出」
|
|
83
|
+
* 伪装成「零 park」。全坏 ⇒ `undefined`(诚实缺席)。
|
|
84
|
+
* 🔴 `parks` 不是数组(对象 / 串 / null)⇒ 当整键缺席(非投影口喂进来的形)。
|
|
85
|
+
* 🔴 纯函数、零副作用、**绝不抛**。
|
|
86
|
+
*/
|
|
87
|
+
export declare function readWorkflowParks(run: unknown): readonly WorkflowParkRowView[] | undefined;
|
|
66
88
|
/** 台账里的一个 agent(读口产物,只读快照;缺席 = 不知道,绝不渲成 0/空)。 */
|
|
67
89
|
export interface WorkflowActivityAgentView {
|
|
68
90
|
/** `ctx.agent` 调用的稳定身份(SSE 主键);老引擎/无 callKey 的帧上缺席。 */
|
package/dist/workflowClient.js
CHANGED
|
@@ -381,6 +381,43 @@ export function projectWorkflowRun(run) {
|
|
|
381
381
|
state.description = run.description;
|
|
382
382
|
return state;
|
|
383
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* `GET /v1/workflows/:id` 的 `parks[]` → 三键行;**整键缺席 ⇒ `undefined`**(与空数组逐字可分)。
|
|
386
|
+
*
|
|
387
|
+
* 🔴 **`undefined` 与 `[]` 不是一回事**,这是本读器最承重的一格:
|
|
388
|
+
* · `undefined` —— 这条记录上没有 `parks` 这一键(旧引擎写的)⇒ **证不出**有没有 park;
|
|
389
|
+
* · `[]` —— 这条记录有这一键且是空的 ⇒ 一句正面事实:这条 run 上没有 park。
|
|
390
|
+
* 🔴 **坏行只丢自己**(与本包 `wiring_manifest.mcp[]` 的处置同尺):三键缺一 / 非串 / 空串 的行
|
|
391
|
+
* 整条丢弃,其余行保序留下;**非空输入而全部坏行 ⇒ 返回 `[]`**?—— **不**:那会把「读不出」
|
|
392
|
+
* 伪装成「零 park」。全坏 ⇒ `undefined`(诚实缺席)。
|
|
393
|
+
* 🔴 `parks` 不是数组(对象 / 串 / null)⇒ 当整键缺席(非投影口喂进来的形)。
|
|
394
|
+
* 🔴 纯函数、零副作用、**绝不抛**。
|
|
395
|
+
*/
|
|
396
|
+
export function readWorkflowParks(run) {
|
|
397
|
+
if (typeof run !== 'object' || run === null || Array.isArray(run))
|
|
398
|
+
return undefined;
|
|
399
|
+
const raw = run.parks;
|
|
400
|
+
if (!Array.isArray(raw))
|
|
401
|
+
return undefined;
|
|
402
|
+
const rows = [];
|
|
403
|
+
for (const r of raw) {
|
|
404
|
+
if (typeof r !== 'object' || r === null || Array.isArray(r))
|
|
405
|
+
continue;
|
|
406
|
+
const o = r;
|
|
407
|
+
const callKey = typeof o.callKey === 'string' && o.callKey.length > 0 ? o.callKey : undefined;
|
|
408
|
+
const sessionId = typeof o.sessionId === 'string' && o.sessionId.length > 0 ? o.sessionId : undefined;
|
|
409
|
+
const originRunId = typeof o.originRunId === 'string' && o.originRunId.length > 0 ? o.originRunId : undefined;
|
|
410
|
+
if (callKey === undefined || sessionId === undefined || originRunId === undefined)
|
|
411
|
+
continue;
|
|
412
|
+
// 🔴 **逐键铸**,不 spread:上游在这张行上多放一个键(尤其是凭据形)时,它在结构上到不了
|
|
413
|
+
// 本包的产物。这不是风格选择 —— 它是本段 ① 那条红线的实现。
|
|
414
|
+
rows.push({ callKey, sessionId, originRunId });
|
|
415
|
+
}
|
|
416
|
+
// 非空输入而一行都没活下来 ⇒ 读不出,不是「零 park」(绝不铸 `[]` 冒充一句正面事实)。
|
|
417
|
+
if (raw.length > 0 && rows.length === 0)
|
|
418
|
+
return undefined;
|
|
419
|
+
return rows;
|
|
420
|
+
}
|
|
384
421
|
// ── 轮询/退避节拍(REF-CC-131,域词表-15):三个 3000ms 常量语义各不相同,拆开命名——合并成一个
|
|
385
422
|
// 会把三条独立的退避策略绑死在一起(其中任一策略调优都会误伤另外两条)。──────────────────────
|
|
386
423
|
/** owner 名下暂无任何 run(`resolveRunId` 回 null)时的重试间隔:不是错误,只是「还没有可监的
|