@sema-agent/sdk 8.8.0 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/errors.d.ts +34 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +52 -13
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +48 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/approvals.d.ts +24 -1
- package/dist/resources/approvals.d.ts.map +1 -1
- package/dist/resources/approvals.js +24 -1
- package/dist/resources/approvals.js.map +1 -1
- package/dist/resources/runs.d.ts +35 -1
- package/dist/resources/runs.d.ts.map +1 -1
- package/dist/resources/runs.js +39 -0
- package/dist/resources/runs.js.map +1 -1
- package/dist/resources/tool-approvals.d.ts +24 -2
- package/dist/resources/tool-approvals.d.ts.map +1 -1
- package/dist/resources/tool-approvals.js +4 -0
- package/dist/resources/tool-approvals.js.map +1 -1
- package/dist/resources/workflows.d.ts +10 -0
- package/dist/resources/workflows.d.ts.map +1 -1
- package/dist/resources/workflows.js.map +1 -1
- package/dist/types.d.ts +279 -20
- package/dist/types.d.ts.map +1 -1
- package/openapi.yaml +682 -39
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
* null" may be correct — check for a normalizer at the boundary before widening it to `| null`.
|
|
58
58
|
*/
|
|
59
59
|
import type { SemaSettings } from "./settings.js";
|
|
60
|
-
import type { AskOrigin, RuleOffer } from "./resources/tool-approvals.js";
|
|
60
|
+
import type { AskOrigin, ClassifierUnavailable, DenialLimitFallback, RuleOffer } from "./resources/tool-approvals.js";
|
|
61
61
|
/** Authenticated end-user identity. Opaque to the service (used as memory scope + session owner). The SDK
|
|
62
62
|
* normalizes; the service does NOT validate the format. Convention: `user:` / `org:` / `ai:` / `anon:`. */
|
|
63
63
|
export type Principal = string;
|
|
@@ -277,6 +277,31 @@ export interface TaskRequest {
|
|
|
277
277
|
* the fleet gets MCP via center config refs. Merge: deployment/center baseline wins on name collision (caller
|
|
278
278
|
* can ADD, never SHADOW), like `skills`. Gate whether to project via `capabilities.mcpInjection`. */
|
|
279
279
|
mcpServers?: McpServerSpec[];
|
|
280
|
+
/** 🔴 Per-request **A2A peers**(远端 agent;server `src/http/wire-types.ts:361` 铸点,逐条判形在
|
|
281
|
+
* `src/task-a2a.ts:110-150`)。形 = {@link A2aServerSpec}。
|
|
282
|
+
*
|
|
283
|
+
* 🔒 只在**单用户**部署上兑现,且该部署既没锁 `a2a` 键、也没被合规姿态拒 `a2a_peers`(三票否决,
|
|
284
|
+
* 与 `capabilities.a2aInjection` 广告的是同一个谓词);多租户腿整只忽略(租户不能把共享 worker
|
|
285
|
+
* 指向自选 agent)。**锁住的部署整条请求拒**:400 `config.locked_key`。
|
|
286
|
+
* 🔴 声明一个 peer = 声明一条**出站写通道**:它广告的每条技能都以 `egress:true` + `effect:"write"`
|
|
287
|
+
* 挂载(core 裁定),`toolAxes` 是调用方作为信任根的**显式**下调面。
|
|
288
|
+
* 🔴 **坏形 ⇒ 整条 peer 丢弃**(不是丢那个键留这条 peer):`allowSkills` 是收窄字段而缺席被读成
|
|
289
|
+
* 「不限制」,半应用会把收窄意图变成放行。被丢的 peer 具名进 warn,请求本身不 400。
|
|
290
|
+
* 基线冲突时 center/config **赢**(peer 名就是工具命名空间段)。**上限 32 条,超出的条目同样被丢弃并
|
|
291
|
+
* 具名**(不是 400 —— 与坏形同一条处置)。 */
|
|
292
|
+
a2aPeers?: A2aServerSpec[];
|
|
293
|
+
/** `code-review` 场景的**贵档**(server `src/http/wire-types.ts:86-87` 铸点):`council:true` 把评审
|
|
294
|
+
* 扇出成 N 个并行镜头 + 一个仲裁者(`run_council`),而不是 lead 就地评。
|
|
295
|
+
* 🔴 在**两条缝**上被读,两条都算数:①场景装配器据它挂 `run_council`
|
|
296
|
+
* (`src/capabilities/scenarios.ts:683`);②`src/boot/resolve-spec.ts:940/1555` 把它读成**显式组队声明**
|
|
297
|
+
* —— 放宽本任务的墙钟租期预算,并**抑制**价值路由的自动升档。只有字面 `true` 算数(两条缝同判)。
|
|
298
|
+
* 非 `code-review` 场景上第①条空转,第②条照旧生效。 */
|
|
299
|
+
council?: boolean;
|
|
300
|
+
/** 在 council 之上再跑 L2 **同侪辩论**轮。🔴 两条缝**不对称**,别把它当独立开关:
|
|
301
|
+
* ①场景装配器只在 `council === true` 的分支里读它(`src/capabilities/scenarios.ts:690`)⇒
|
|
302
|
+
* **单独送 `debate:true` 不会有辩论轮**;②`resolve-spec` 的显式组队判据是 `council || debate`
|
|
303
|
+
* (`:940/1555`)⇒ 单独送它**仍然**会放宽租期预算并抑制自动升档。同样只有字面 `true` 算数。 */
|
|
304
|
+
debate?: boolean;
|
|
280
305
|
images?: Array<{
|
|
281
306
|
data: string;
|
|
282
307
|
mimeType: string;
|
|
@@ -331,6 +356,21 @@ export interface TaskRequest {
|
|
|
331
356
|
* `memoryWrite:false` → 本 run 对 memory **只读**(`writeScope:null`:无 remember 工具、无 consolidation 写;recall 仍可)。
|
|
332
357
|
* 缺省 = 写开启。引擎 main.ts:1183 / security.ts:194 读它。pause 是 per-RUN(非 per-session stored-flag)。 */
|
|
333
358
|
memoryWrite?: boolean;
|
|
359
|
+
/** 🔴 **会话级记忆采集 opt-out 声明**(server ≥7.70.0;server `src/http/wire-types.ts:273` 铸点)——
|
|
360
|
+
* `"off"` = 「本会话不进长期记忆」。**单成员闭集,没有 `"on"`**:缺席就是「照常采集」的唯一写法。
|
|
361
|
+
*
|
|
362
|
+
* 🔴 与 {@link memoryWrite} **不是一个轴**,别混用:`memoryWrite:false` 说的是「**这一次** run 别写」
|
|
363
|
+
* (per-run,可逐 run 切回);本键说的是「**这个会话**永远别记」—— 一条**一次性、单向**的控制面记录,
|
|
364
|
+
* 后续 resume 恒不采集(record wins),同会话重复声明幂等;要回到采集只能开新会话。
|
|
365
|
+
*
|
|
366
|
+
* 🔴 **拼写门两腿同判、响亮拒**(不做 resume 降级):`"OFF"` / 布尔 / 其它任何值 ⇒ 400
|
|
367
|
+
* `request.field_invalid`(server `src/http/server.ts:1906-1909` fresh 腿、`src/boot/resolve-spec.ts:197-200`
|
|
368
|
+
* 两腿共用的解析路径)。把一条隐私请求按打字错误静默丢掉恰是被禁的方向。
|
|
369
|
+
* 部署策略拒这次 opt-out ⇒ **403 `memory.capture_optout_denied`**(per-principal entitlement,终局码)。
|
|
370
|
+
* ⚠️ 老 worker(< 7.70.0)**静默忽略**本键、不 400 —— 它不是能力探测位,想确认生效去读回执/账面。
|
|
371
|
+
* 与持久 body 一起骑到 resume 腿上(与 `memoryWrite` 同姿势)。
|
|
372
|
+
* 中途才想关?用 {@link RunsResource.memoryCaptureOptOut}(同一条记录的另一个 ingress)。 */
|
|
373
|
+
memoryCapture?: "off";
|
|
334
374
|
/** 🔴 TOB-fleet 透传(core/search AI 2026-06-27,research/toc-settings-adapter/01-design.md §5②)—— fleet/远端模式
|
|
335
375
|
* 把用户 `settings.json`(CC-parity {@link SemaSettings})带给 service;**service** 把它 wire 进引擎同款 seam
|
|
336
376
|
* (SessionPolicyStore / NodeExecutionEnv / RunnerDeps.hooks),同它做 MF-* 数据契约那层。TOC-local 模式**不走这**
|
|
@@ -890,6 +930,54 @@ export interface RunReceipt {
|
|
|
890
930
|
}
|
|
891
931
|
/** §sandbox-image catalog(service IMAGE-API §7)— `GET /v1/images` 的目录行(visibility 按 principal scoped)。
|
|
892
932
|
* 门B「选沙箱模板」UI 据此渲染(profile 卡 + 能力徽章 + toolchain)。开集容多余字段;字段源自 worker → 渲染前 sanitize。 */
|
|
933
|
+
/** 六档思考梯(core `ThinkingLevel`)—— `compat.reasoningEffortLevels` 的成员词表。
|
|
934
|
+
* **闭集**:server 铸 `Model` 那一刻已逐词判成员(`src/model-compat.ts` 的 `THINKING_LEVEL_TABLE`),
|
|
935
|
+
* 出集词让**整只** `compat` 声明被丢掉 ⇒ wire 上不可能出现第七个词。 */
|
|
936
|
+
export type ModelThinkingLevel = "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
937
|
+
/** `compat.thinkingFormat` 七词闭集(core `OpenAICompletionsCompat["thinkingFormat"]`)—— 这台网关按哪种
|
|
938
|
+
* 拼法收「开/关思考」。缺省开思考的 vLLM / Qwen 类网关只有 `"qwen-chat-template"`
|
|
939
|
+
* (`chat_template_kwargs.enable_thinking`)关得掉。**闭集**,理由同 {@link ModelThinkingLevel}。 */
|
|
940
|
+
export type ModelThinkingFormat = "openai" | "openrouter" | "deepseek" | "together" | "zai" | "qwen" | "qwen-chat-template";
|
|
941
|
+
/**
|
|
942
|
+
* 一行模型对 **openai-completions 线路**的兼容声明(server ≥7.69.0 / S-188;core
|
|
943
|
+
* `OpenAICompletionsCompat` 的逐字镜像)。
|
|
944
|
+
*
|
|
945
|
+
* 🔴 **缺席 ≠ 默认值,而且缺席有两种成因**:①这只模型确实没有声明(引擎按 baseUrl / 模型 id 自行推断);
|
|
946
|
+
* ②运维**写坏了**(形不合 / 词出闭集 / 带未知键),服务端把**整只**声明丢掉并打一条点名 warn。两者在
|
|
947
|
+
* wire 上不可分 ⇒ 面板**不要**把「这一行没有 compat」渲成「运维没写」。
|
|
948
|
+
*
|
|
949
|
+
* 🔴 **整只判形**:server 侧任一键不合即整只不收(不留下好的那几键),所以本对象在 wire 上要么完整
|
|
950
|
+
* 合法、要么整个不在 —— 消费方不必自己再验一遍词表,但也拿不到「半张脸」的中间态。
|
|
951
|
+
*
|
|
952
|
+
* 🔴 **空对象不上 wire**:server 的唯一铸点把「全空」折成不铸键(`reasoningEffortLevels: []` 与
|
|
953
|
+
* 「没写这一键」同义),所以 `compat: {}` 是一条**判不出形**的字节,不是「声明了但什么都没说」。
|
|
954
|
+
*/
|
|
955
|
+
export interface ModelCompat {
|
|
956
|
+
/** 这个端点认不认 `reasoning_effort`。缺席 ⇒ 引擎按 URL 自行推断。 */
|
|
957
|
+
supportsReasoningEffort?: boolean;
|
|
958
|
+
/** 这个端点**真收**的思考档集(六档的子集)。缺席 ⇒ 引擎的保守梯 minimal|low|medium|high,更高档
|
|
959
|
+
* clamp 下来而不是 422。在场时**非空**(空表在服务端与缺席同义,不铸键)。 */
|
|
960
|
+
reasoningEffortLevels?: ModelThinkingLevel[];
|
|
961
|
+
/** max tokens 这个参数在这条线路上叫什么名。缺席 ⇒ 引擎按模型 id 推断。 */
|
|
962
|
+
maxTokensField?: "max_tokens" | "max_completion_tokens";
|
|
963
|
+
/** 开思考时,回放的每条 assistant 消息是否必须带一个空的 `reasoning_content`。 */
|
|
964
|
+
requiresReasoningContentOnAssistantMessages?: boolean;
|
|
965
|
+
/** 思考参数的拼法(见 {@link ModelThinkingFormat})。 */
|
|
966
|
+
thinkingFormat?: ModelThinkingFormat;
|
|
967
|
+
}
|
|
968
|
+
/** 一行模型的 **key↔URL 配对姿态**(#345,core `RoutePairingStatus`;server ≥7.45 —— 亲核:该键在
|
|
969
|
+
* 已发布的 7.63.0 字节里就已无条件铸,契约段自称的版本也是 7.45,**不是** 7.66)。
|
|
970
|
+
* 🔴 **恒在场**——判不了时值是 `"unknown"`,而不是键消失(「这台不判」与「这行判不了」在 wire 上必须
|
|
971
|
+
* 可分)。非密:值不含 URL、不含凭据。
|
|
972
|
+
* · `ok:*` 四词 = 这行的凭据路说得通(`per-model` 自带凭据 / `paired` 用部署凭据且 URL 在声明的根上 /
|
|
973
|
+
* `unpinned` 部署没声明根 ⇒ 配对不可验证 / `keyless` 哪儿都没凭据的本地无鉴权网关);
|
|
974
|
+
* · `broken:*` 两词 = 真请求会被引擎拒(标红,给这只模型配 per-model 凭据或挪到部署根上);
|
|
975
|
+
* · `unknown` = 判不了。**不要**渲成「好」或「坏」,渲「未知」。
|
|
976
|
+
* 🔴 **真开集**(`(string & {})` 逃生口不是装饰):core 把 `verdict.posture` 直接内插进 `ok:${…}`,
|
|
977
|
+
* server 的铸点与 core 的那只函数**全路径没有一处运行期成员判定** —— 一只自带 `adjudicateRoute` 的 brain
|
|
978
|
+
* 供什么词就上什么词。开/闭按**产方是否真判成员**定(8.4.0 拆假开集的同一条判据),所以这里给字面量
|
|
979
|
+
* 补全但**不执法**:switch 认上面七词,再留一条 default 臂当「未知」。 */
|
|
980
|
+
export type RoutePairingStatus = "ok:per-model" | "ok:paired" | "ok:unpinned" | "ok:keyless" | "broken:credential_mismatch" | "broken:credential_missing" | "unknown" | (string & {});
|
|
893
981
|
/** `GET /v1/models` 的非密钥模型目录条目(core 1.116 `@model` mention 线;service src/http/routes/capabilities.ts)。
|
|
894
982
|
* `name` = `@handle`(用户在正文打 `@<name>` per-task 选它)。🔴 **只名/能力,无 baseUrl/apiKey/headers**(service 已剥)。 */
|
|
895
983
|
export interface ModelInfo {
|
|
@@ -916,6 +1004,13 @@ export interface ModelInfo {
|
|
|
916
1004
|
* 🔴 **名单在场才发**:部署未配 at-mention 名单 ⇒ 整键缺席——缺席 = 「无名单裁决」≠「不可 mention」,
|
|
917
1005
|
* 渲染端别把缺席当 false 收窄(与 msSinceLastActivity 同一条「缺席=无法证明」纪律)。 */
|
|
918
1006
|
atMentionable?: boolean;
|
|
1007
|
+
/** S-188(server ≥7.69.0)—— 这一行对 **openai-completions 线路**的兼容声明。缺席的两种成因与
|
|
1008
|
+
* 「整只判形」纪律见 {@link ModelCompat};anthropic 腿刻意不铸这个键(那条 brain 读的是另一张表)。 */
|
|
1009
|
+
compat?: ModelCompat;
|
|
1010
|
+
/** #345(server ≥7.45)—— 这一行的 key↔URL 配对姿态。🔴 在 **≥7.45 的 worker 上恒在场**(判不了时是
|
|
1011
|
+
* `"unknown"`,而不是键消失);类型上仍标可选,因为 SDK 的 `SUPPORTED_SERVER_FLOOR` 是 **3.0.0** ——
|
|
1012
|
+
* 判别位是**对端版本**,不是这个键的在场性。值域与读法见 {@link RoutePairingStatus}。 */
|
|
1013
|
+
routePairing?: RoutePairingStatus;
|
|
919
1014
|
[k: string]: unknown;
|
|
920
1015
|
}
|
|
921
1016
|
/** §cost/usage 面板(service `GET /v1/usage`,实测形态已按源审计)—— per-principal 成本配额 + 单任务上限。
|
|
@@ -972,8 +1067,22 @@ export interface PolicyInfo {
|
|
|
972
1067
|
}
|
|
973
1068
|
/** §workflows 可观测(core 1.116 design/97;service `GET /v1/workflows*`)。
|
|
974
1069
|
* 生命周期状态;开放联合容未来新态。源=core `WorkflowRunStatus`(running/completed/failed,workflow-run-store.ts)。 */
|
|
975
|
-
/** [2400] X-20(5.0.0):删幻影值 `queued`——core 闭集=running|completed|failed(workflow-types.d.ts:2 亲核),从未产 queued;开臂保留前向。
|
|
1070
|
+
/** [2400] X-20(5.0.0):删幻影值 `queued`——core 闭集=running|completed|failed(workflow-types.d.ts:2 亲核),从未产 queued;开臂保留前向。
|
|
1071
|
+
* 🔴 **只管 run 这一席**(`WorkflowRun.status` / `WorkflowRunSummary.status` / `run_end` 帧)。**phase / group /
|
|
1072
|
+
* agent 三个 item 席用的是另一张词表** {@link WorkflowItemStatus} —— 8.9.0 以前 SDK 一张表骑四席,于是
|
|
1073
|
+
* core 7.10.0 给 item 席加的 `"parked"` 在 SDK 上既没有字面量补全、也没有任何文档说它只能出现在 agent 行。 */
|
|
976
1074
|
export type WorkflowRunStatus = "running" | "completed" | "failed" | (string & {});
|
|
1075
|
+
/** 一个 **item**(phase / group / agent-run)的状态 —— core `WorkflowItemStatus`
|
|
1076
|
+
* (`dist/orchestration/workflow-types.d.ts:6`,7.10.0 起四词)。开放联合容未来新态。
|
|
1077
|
+
*
|
|
1078
|
+
* 🔴 `"parked"` 是 **agent 行专用词**(core 顶注逐字:a phase or group never parks —— 一个 agent park 会让
|
|
1079
|
+
* 整条 run 结束):这一序数在耐久审批门上停住了、等一次决定,行上同时记着它的赎回键。**赎回键
|
|
1080
|
+
* (`parkedCheckpointToken`)永不上 wire** —— 它是 resume 能力凭据,读面上一个字节都没有,所以本 SDK 的
|
|
1081
|
+
* 型面与随包 spec 里都不存在这个名字(负控有机器格看守)。
|
|
1082
|
+
* 判 park 的两条读法:`GET /v1/workflows/:id` 的 `agents[].status === "parked"`,或
|
|
1083
|
+
* `GET /v1/workflows/:id/journal` **非存根行**的 `parked === true`。
|
|
1084
|
+
* ⚠️ run 席**不会**是 `"parked"`(见 {@link WorkflowRunStatus});别拿这张表去读 `run_end`。 */
|
|
1085
|
+
export type WorkflowItemStatus = "running" | "completed" | "failed" | "parked" | (string & {});
|
|
977
1086
|
/** `GET /v1/workflows` 列表行 = core `summarizeWorkflowRun` 投影(workflow-run-store.ts:34,跨 InMem/File/PG byte-identical)。
|
|
978
1087
|
* owner-scoped(service 只返调用方 principal 自己的 run,scope=创建者 principal)。时间均 epoch ms。 */
|
|
979
1088
|
export interface WorkflowRunSummary {
|
|
@@ -1030,17 +1139,22 @@ export interface WorkflowActivityBeat {
|
|
|
1030
1139
|
* shape is PERMISSIVE (index sig) — read the known render fields, tolerate the rest as the projection evolves.
|
|
1031
1140
|
* The typed fields are the ones the monitor keys on; `activity[].arg` is the load-bearing addition (round-3 ③). */
|
|
1032
1141
|
export interface WorkflowAgentRow {
|
|
1033
|
-
/** Display label ("port:/mcp").
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
status
|
|
1037
|
-
|
|
1038
|
-
*
|
|
1039
|
-
|
|
1142
|
+
/** Display label ("port:/mcp")。**恒在场**(core `WorkflowAgentRun.label` 是必填位:调用方给的 `opts.label`,
|
|
1143
|
+
* 没给则引擎自铸 `agent-N`;server 只过一道 `redactSecrets`)。 */
|
|
1144
|
+
label: string;
|
|
1145
|
+
/** Lifecycle status (the input vocab the display derivation reads) —— core `WorkflowItemStatus` 逐字透传
|
|
1146
|
+
* (server `summarizeWorkflowDetail` 的 `status: a.status`)。`"parked"`(server ≥7.69.0 / core 7.10.0 #642)
|
|
1147
|
+
* = 这一序数停在耐久审批门上等一次决定;判别与两条读法见 {@link WorkflowItemStatus}。 */
|
|
1148
|
+
status: WorkflowItemStatus;
|
|
1149
|
+
/** core `deriveAgentDisplayStatus` 的判词 —— 与壳共用的**同一只纯函数**,所以 agent 状态字形不会在两个壳之间
|
|
1150
|
+
* 漂。**恒在场**(server 对每一行都算)。🔴 `parked` 是**第六臂**(core 7.10.0 #642,server ≥7.69.0):
|
|
1151
|
+
* 一道耐久审批门正扣着这只 agent;这一臂出现之前 park 住的 agent 会落到别的词上 —— 一张等着人的卡被渲成
|
|
1152
|
+
* 一个「不需要动作」的字形。开集读(词表属主在 core),但那只函数**没有 default 臂**,集外词 = core 加了词。 */
|
|
1153
|
+
displayStatus: "running" | "queued" | "done" | "failed" | "interrupted" | "parked" | (string & {});
|
|
1040
1154
|
/** The underlying task's terminal TaskStatus (open vocabulary). census 批2 四段回填. */
|
|
1041
1155
|
taskStatus?: string;
|
|
1042
|
-
/**
|
|
1043
|
-
callKey
|
|
1156
|
+
/** 这次 `ctx.agent` 调用的**稳定确定性身份**(resume journal 的键)。**恒在场**(core 必填位)。 */
|
|
1157
|
+
callKey: string;
|
|
1044
1158
|
/** The nesting ctx.workflow sub-group this agent ran under; absent = top-level. census 批2 四段回填. */
|
|
1045
1159
|
groupId?: string;
|
|
1046
1160
|
/** The phase title this agent ran under (groups it into a phase bucket). */
|
|
@@ -1058,8 +1172,9 @@ export interface WorkflowAgentRow {
|
|
|
1058
1172
|
lastActivityAt?: number;
|
|
1059
1173
|
/** endedAt − startedAt; absent while queued/running or if either end is unset. census 批2 四段回填. */
|
|
1060
1174
|
durationMs?: number;
|
|
1061
|
-
/**
|
|
1062
|
-
|
|
1175
|
+
/** agent **入队**的时刻(在等并发槽之前)。**恒在场**(core `WorkflowAgentRun.queuedAt` 是必填位)——
|
|
1176
|
+
* 一只排队中的 agent 有 `queuedAt` 而没有 `startedAt`,这一对正是「排着 / 在跑」的判别位。 */
|
|
1177
|
+
queuedAt: number;
|
|
1063
1178
|
/** When the agent actually started running (post-queue). Absent while queued / aborted-before-run. census 批2 四段回填. */
|
|
1064
1179
|
startedAt?: number;
|
|
1065
1180
|
endedAt?: number;
|
|
@@ -1103,8 +1218,8 @@ export interface WorkflowGroupNode {
|
|
|
1103
1218
|
groupId: string;
|
|
1104
1219
|
/** 自报的父 id;缺席 = 顶层。**不是**结构真源(见类型头注的环员条款)。 */
|
|
1105
1220
|
parentGroupId?: string;
|
|
1106
|
-
/**
|
|
1107
|
-
status:
|
|
1221
|
+
/** core `WorkflowItemStatus`;group 席**不会**是 `"parked"`(core:只有 agent 行 park)。 */
|
|
1222
|
+
status: WorkflowItemStatus;
|
|
1108
1223
|
startedAt: number;
|
|
1109
1224
|
endedAt?: number;
|
|
1110
1225
|
/** `endedAt − startedAt`;两端缺一即缺席(server 的 `durationOf`)。 */
|
|
@@ -2122,7 +2237,7 @@ export type WorkflowStreamEvent =
|
|
|
2122
2237
|
type: "phase_end";
|
|
2123
2238
|
runId: string;
|
|
2124
2239
|
title: string;
|
|
2125
|
-
status:
|
|
2240
|
+
status: WorkflowItemStatus;
|
|
2126
2241
|
agentFailures?: number;
|
|
2127
2242
|
ts: number;
|
|
2128
2243
|
};
|
|
@@ -2151,7 +2266,7 @@ export type WorkflowStreamEvent =
|
|
|
2151
2266
|
label: string;
|
|
2152
2267
|
phase?: string;
|
|
2153
2268
|
groupId?: string;
|
|
2154
|
-
status:
|
|
2269
|
+
status: WorkflowItemStatus;
|
|
2155
2270
|
output?: string;
|
|
2156
2271
|
errorCode?: string;
|
|
2157
2272
|
toolCalls?: number;
|
|
@@ -2194,7 +2309,7 @@ export type WorkflowStreamEvent =
|
|
|
2194
2309
|
type: "subgroup_end";
|
|
2195
2310
|
runId: string;
|
|
2196
2311
|
groupId: string;
|
|
2197
|
-
status:
|
|
2312
|
+
status: WorkflowItemStatus;
|
|
2198
2313
|
ts: number;
|
|
2199
2314
|
};
|
|
2200
2315
|
} | {
|
|
@@ -2285,6 +2400,33 @@ export interface McpServerSpec {
|
|
|
2285
2400
|
* config-center / 本地 config.d)同一条规则。 */
|
|
2286
2401
|
toolFaces?: Record<string, McpToolFace>;
|
|
2287
2402
|
}
|
|
2403
|
+
/**
|
|
2404
|
+
* 一条 **A2A peer**(`TaskRequest.a2aPeers[]` 的一行)—— 本 SDK 镜像的是 server **真受理**的那一面:
|
|
2405
|
+
* 六键逐字取自 `src/task-a2a.ts:110-150` 的 `normalizeA2aPeer`(它只搬这六个键,别的键连同它们的值一起
|
|
2406
|
+
* 不进 core)。`name` / `url` 必填,其余可选;**任一在场键坏形 ⇒ 整条 peer 被丢弃并具名**。
|
|
2407
|
+
*
|
|
2408
|
+
* · `name` —— 本地稳定名,同时是工具命名空间段(`a2a__<peer>__<skill>`);≤128 字符、非空。
|
|
2409
|
+
* · `url` —— peer 的服务 URL,兼作 well-known agent-card 的 origin;**必须 http(s)**(`file://`/裸主机拒)。
|
|
2410
|
+
* · `cardUrl` —— 显式 agent-card 位置。设了就**只用它**(不再背着运维探 well-known),所以它坏形同样整条拒。
|
|
2411
|
+
* · `headers` —— 每次请求的静态头(值必须全是串)。
|
|
2412
|
+
* · `principalHeader` —— 把本 run 的**已认证 principal** 注进哪个头名(模型读不到也设不了);principal 缺席 ⇒ 不发该头。
|
|
2413
|
+
* · `allowSkills` —— 只挂这些远端技能 id。⚠️ **缺席 = 不限制**(core 语义),所以它是收窄键,别靠它的缺席表达收窄。
|
|
2414
|
+
* · `toolAxes` —— 按远端技能 id 的**安全轴**覆写;调用方是信任根,所以这里既能抬也能降默认的
|
|
2415
|
+
* `egress:true` + `effect:"write"`。⚠️ 降 `effect` 却不清 `egress` 是 core 明文判为矛盾的组合。
|
|
2416
|
+
*/
|
|
2417
|
+
export interface A2aServerSpec {
|
|
2418
|
+
name: string;
|
|
2419
|
+
url: string;
|
|
2420
|
+
cardUrl?: string;
|
|
2421
|
+
headers?: Record<string, string>;
|
|
2422
|
+
principalHeader?: string;
|
|
2423
|
+
allowSkills?: string[];
|
|
2424
|
+
toolAxes?: Record<string, {
|
|
2425
|
+
effect?: "read" | "write" | "idempotent";
|
|
2426
|
+
egress?: boolean;
|
|
2427
|
+
irreversibility?: "always" | "never";
|
|
2428
|
+
}>;
|
|
2429
|
+
}
|
|
2288
2430
|
/** 一只 MCP 工具的**面**(core `McpServerSpec.toolFaces[name]` 逐键镜像;server ≥7.66.0)。闭词取自 core 的三张
|
|
2289
2431
|
* 闭集表(`TOOL_FAMILIES` / `TOOL_PATH_ACCESSES` / `TOOL_APPROVAL_CARDS`),型面留 `(string & {})` 逃生口与
|
|
2290
2432
|
* `Capabilities` 同 idiom;spec 用 enum 镜像,严格消费端以 spec 为准。每只面**整只**判形(applied whole or not at all)。 */
|
|
@@ -3565,6 +3707,25 @@ export interface InboxRow {
|
|
|
3565
3707
|
* `/v1/approvals` 行不完全相等,但**缺席的读法逐字相同**:没检出 ≠ 已确认干净)。`true` 或缺席,恒不写 false。
|
|
3566
3708
|
* 同 {@link PendingCheckpoint.hasBidiControls}。 */
|
|
3567
3709
|
hasBidiControls?: true;
|
|
3710
|
+
/** server ≥7.57.0(core 7.4.0 #557)—— 这只 park 住的 ask **要真人裁决**(inbox 不必解码 gate kind 就能说
|
|
3711
|
+
* 「这条只有人能清」)。🔴 **只在 `=== true` 时铸,恒不写 false**(与 {@link InboxRow.hasBidiControls} 同一条
|
|
3712
|
+
* OMIT 契约):缺席 = 「没打这个标」,**不是**「不用人也能清」。值完全由 core 供(`summarizeCheckpoint` 投
|
|
3713
|
+
* park 行自己那一位),server 不重算、不脱敏。 */
|
|
3714
|
+
requiresRealApproval?: true;
|
|
3715
|
+
/** server ≥7.57.0(core 7.4.0 #557)—— 这只 park 住的 ask 就是 auto 分类器的**限额回落卡**,带着触限时的计数。
|
|
3716
|
+
* 🔴 **park 行上 `autoDenyAfterMs` 恒 `0`,消费端禁据它起倒计时**:那个窗是 ask **路由**的事实,只在交给
|
|
3717
|
+
* **活**审批人那一刻武装,耐久车道上什么都不倒数(park 的到期是行自己的 `deadline`/ttl)。渲计数与哪一道界,
|
|
3718
|
+
* 这里没有倒计时可渲。core 写行前已筛过四成员 ⇒ 半张形读作**缺席**,不会以坏卡的样子到消费端。 */
|
|
3719
|
+
denialLimitFallback?: DenialLimitFallback;
|
|
3720
|
+
/** server ≥7.57.0(core 7.5.0)—— **哪一类权威**提的这一问(与同步卡渲染用的是同一个词;引擎在门上盖章,
|
|
3721
|
+
* 不是策略自报)。core 只在**是集合成员**时才写进行里,所以这一面上不预期出现集外词 —— 但词表属主仍在 core
|
|
3722
|
+
* 且长过,读法与别处逐字相同:认已知词 + 一条 default 臂,未知词读「未知出身」而**不是**「没有出身」。
|
|
3723
|
+
* 这一位出现之前铸的老行读作缺席(未上报),不是「没有权威」。 */
|
|
3724
|
+
origin?: AskOrigin;
|
|
3725
|
+
/** server ≥7.69.0(core 7.10.0 #616)—— **为什么这一问会到我手上**:分类器被咨询过但答不了。inbox 是
|
|
3726
|
+
* **分诊**面,`breaker_open` 在这里价值最大 —— 它预告的是一场审批风暴,而不是一次偶发询问。
|
|
3727
|
+
* 形与三条硬读法(开集 `cause` / 缺席不是断言 / switch 带 default)逐字见 {@link ClassifierUnavailable}。 */
|
|
3728
|
+
classifierUnavailable?: ClassifierUnavailable;
|
|
3568
3729
|
/** 任务目标(从 task ctx 富化;契约明确 "`null` if unavailable" —— 真回 null 的字段,非 OMIT)。 */
|
|
3569
3730
|
objective: string | null;
|
|
3570
3731
|
/** 挂起工具调用 args 的**脱敏预览**(server 侧 redactDeep+限长;仅 tool_approval 门有,其余 `null`)。 */
|
|
@@ -3745,6 +3906,54 @@ export interface WiringManifest {
|
|
|
3745
3906
|
* 按名字分组。只在 **effective 半场**(live 帧)铸;静态半场恒无。`tool_roster_delta` 帧(server ≥7.66.0 有臂,
|
|
3746
3907
|
* core ≥7.9.0 才真推)描述运行期变更。 */
|
|
3747
3908
|
tools?: ToolRoster;
|
|
3909
|
+
/** core ≥5.18.0(design/179)/ ≥5.23.0(design/182 §7/§9),server ≥7.6.0 —— **持久权限规则**这条腿装了没有:
|
|
3910
|
+
* 一个「本会话不再问」的答案到底能不能被记住?**租户可见**(引擎刻意把它放在 operator-only 的
|
|
3911
|
+
* `governance` 段**之外**,server 两面都投)。要给「不再询问」这个交互之前先读它:`storeWired:false` 时
|
|
3912
|
+
* 那个承诺无处兑现。🔴 **引擎恒发这一段**,所以 `false` 是**真读数**(「这台 worker 没有规则车道」),
|
|
3913
|
+
* 不是「引擎太老」;只有**整键缺席**才是「没发过」(本 SDK 的 server 地板 3.0.0 早于它)。
|
|
3914
|
+
* `syncWired` = 这台 worker 把持久规则并进与跨设备 / 传输 / 服务端同侪**同一个**同意信任域(与 `storeWired`
|
|
3915
|
+
* 合读回答「这一下点击到底传多远」);`orgGoverned` = 规则车道之上武装了组织治理层,而那一层是
|
|
3916
|
+
* **fail-closed**(读不到组织快照时每一条 allow 都升级成真人审批)。 */
|
|
3917
|
+
permissionRules?: {
|
|
3918
|
+
storeWired?: boolean;
|
|
3919
|
+
syncWired?: boolean;
|
|
3920
|
+
orgGoverned?: boolean;
|
|
3921
|
+
};
|
|
3922
|
+
/** core ≥7.5.0(#562)/ ≥7.6.0(S6-B),server ≥7.60 —— **租户可见**:这条腿声明的每一台 MCP server 一行
|
|
3923
|
+
* (连上了没有 / 没连上是哪一类 / 挂了几只工具)。🔴 **空数组不是缺席**:`[]` = 「这条腿一台都没声明」,
|
|
3924
|
+
* 整键缺席 = 老铸点或外部派生 —— 两者禁互折。`errorCode` 是 core 的 `McpFailureKind` 词(**不枚举**:
|
|
3925
|
+
* 词表属主在引擎,抄一份会把新词吞成违约 ⇒ switch 必须带 default 臂);`delivered` 与它**合读**;
|
|
3926
|
+
* `httpStatus` 只在 `errorCode === "http_status"` 时在场(**缺席**而不是 0)。引擎的 `error` 自由文本
|
|
3927
|
+
* **刻意不投**(远端作者文本,脱敏单点在 core)。 */
|
|
3928
|
+
mcp?: Array<{
|
|
3929
|
+
name: string;
|
|
3930
|
+
status: string;
|
|
3931
|
+
source?: string;
|
|
3932
|
+
toolCount?: number;
|
|
3933
|
+
errorCode?: string;
|
|
3934
|
+
delivered?: McpDelivered;
|
|
3935
|
+
httpStatus?: number;
|
|
3936
|
+
}>;
|
|
3937
|
+
/** core ≥7.3.x(design/385 片2b),server ≥7.58 —— **租户可见**:工具**模型**门从本会话拿掉了哪些工具、
|
|
3938
|
+
* 怎么拿回来。三键全部由引擎派生、server 逐字透传。🔴 **全有或全无**:三键齐备且合形才铸这一段
|
|
3939
|
+
* (半段会被读成「被拿掉的就这些」);**缺席 = 这一跑没有任何工具被门掉**(server 从不铸空段,也不铸
|
|
3940
|
+
* `removed: []`)。 */
|
|
3941
|
+
modelGate?: {
|
|
3942
|
+
class: string;
|
|
3943
|
+
removed: string[];
|
|
3944
|
+
restore: string;
|
|
3945
|
+
};
|
|
3946
|
+
/** core ≥7.3.1(#529),server ≥7.59 —— **租户可见**:AUTO 模式在**这条腿上**到底武装了没有,没有的话
|
|
3947
|
+
* 停在哪一臂。它是 `GET /v1/capabilities.permissionModeAuto` 的孪生:那一位答**事前**(「现在提交会不会
|
|
3948
|
+
* 武装」),这一段答**事后**(「真跑的那条腿武装了没有」)。🔴 `reason` 是 core 的闭词表**逐字透传**,
|
|
3949
|
+
* 刻意**不**归一到 server 自己那张六词表(两张表答的是不同粒度的问题:core 的单个 `denied` 覆盖 server 的
|
|
3950
|
+
* `org_denied` + `local_denied`,而 settings 级的总开关折进 core 的 `no_intent` 而不是 `denied`)——
|
|
3951
|
+
* 要分辨去读 `/v1/capabilities`。🔴 **缺席不是「不适用」**(引擎原话:那意味着老铸点或外部派生),
|
|
3952
|
+
* **禁**折成 `armed:false`。 */
|
|
3953
|
+
autoMode?: {
|
|
3954
|
+
armed: boolean;
|
|
3955
|
+
reason: string;
|
|
3956
|
+
};
|
|
3748
3957
|
}
|
|
3749
3958
|
/** core `ToolRoster`(design/388 B-4)—— 一条腿的工具名册。**顶层四键逐键镜像**;`entries[]` 的行只镜像身份 /
|
|
3750
3959
|
* 出身 / 轴 / 面几组消费端会读的键,其余按开集读(core 给行加键不该把消费端编译炸掉;属主是 core 的 typebox
|
|
@@ -3777,7 +3986,9 @@ export interface ToolRosterEntry {
|
|
|
3777
3986
|
capabilityId?: string;
|
|
3778
3987
|
effect?: "read" | "write" | "idempotent" | (string & {});
|
|
3779
3988
|
egress?: boolean;
|
|
3780
|
-
|
|
3989
|
+
/** core 的**三**词(`never` / `maybe` / `always`)—— `maybe` 是真会发出来的值(例:分类门下的 shell 工具)。
|
|
3990
|
+
* 漏它 = 一条**产方判过形**的名册整只被严格消费端判违约,消费端停在旧状态上。 */
|
|
3991
|
+
irreversibility?: "always" | "maybe" | "never" | (string & {});
|
|
3781
3992
|
contentOrigin?: "local" | "execution" | "external" | (string & {});
|
|
3782
3993
|
family?: McpToolFace["family"];
|
|
3783
3994
|
pathTarget?: McpToolFace["pathTarget"];
|
|
@@ -3785,6 +3996,41 @@ export interface ToolRosterEntry {
|
|
|
3785
3996
|
renderHints?: McpToolFace["renderHints"];
|
|
3786
3997
|
[k: string]: unknown;
|
|
3787
3998
|
}
|
|
3999
|
+
/**
|
|
4000
|
+
* core `ToolRosterDelta`(core 7.8.0)—— **运行期**名册变更的载荷,`tool_roster_delta` 帧的 `delta`
|
|
4001
|
+
* (server ≥7.70.0;铸点 `src/trace/project.ts:736`,判形属主是 core 的 typebox schema:判不出形 ⇒
|
|
4002
|
+
* **整帧不发**,消费端永远不会收到半张名册)。
|
|
4003
|
+
*
|
|
4004
|
+
* 🔴 **失败方向是契约里唯一的硬话**:`fromDigest` 与你手上那份名册对不上**不是拒绝** —— 携带的
|
|
4005
|
+
* {@link roster} 无论如何都是新状态,消费端记一次 skew 后**按整只名册重同步**,只是 {@link summary}
|
|
4006
|
+
* 对你不可用(它描述的是从 `fromDigest` 那一份到现在的差)。别把 digest 不符当错误处理。
|
|
4007
|
+
*
|
|
4008
|
+
* 🔴 **只在 live 腿**(`POST /v1/tasks/stream` 的 SSE):durable 账本与 resume 腿都不落它,所以
|
|
4009
|
+
* `GET /v1/runs/:id/events` 的回放里没有这条帧。断线重连后按 `wiring_manifest.tools` 的**快照**
|
|
4010
|
+
* 重新同步名册,而不是等一条补发的 delta。
|
|
4011
|
+
*/
|
|
4012
|
+
export interface ToolRosterDelta {
|
|
4013
|
+
/** 这一帧假定消费端手上那份名册的 digest。不符 ⇒ 记 skew + 整只替换,**不是**拒绝。 */
|
|
4014
|
+
fromDigest: string;
|
|
4015
|
+
/** 变更**之后**的整只名册 —— 位置信息一律从它读,永远不从 {@link summary} 读。
|
|
4016
|
+
* 与 `wiring_manifest.tools` 是**同一个** {@link ToolRoster} 类型(单源,行表不抄第二份)。 */
|
|
4017
|
+
roster: ToolRoster;
|
|
4018
|
+
/** 三个**两两不相交**的名字列表;`changed` 里那个名字的新行在 {@link roster} 里。 */
|
|
4019
|
+
summary: {
|
|
4020
|
+
added: string[];
|
|
4021
|
+
removed: string[];
|
|
4022
|
+
changed: string[];
|
|
4023
|
+
};
|
|
4024
|
+
}
|
|
4025
|
+
/**
|
|
4026
|
+
* `POST /v1/runs/:id/memory/capture-optout` 的 200 体(server `src/http/routes/run-memory-capture.ts:77`)。
|
|
4027
|
+
* `outcome` 二词:`"created"` = 这次真写下了那条单向记录;`"existed"` = 本会话早已 opt-out(幂等重放)。
|
|
4028
|
+
*/
|
|
4029
|
+
export interface MemoryCaptureOptOutResult {
|
|
4030
|
+
taskId: string;
|
|
4031
|
+
sessionId: string;
|
|
4032
|
+
outcome: "created" | "existed";
|
|
4033
|
+
}
|
|
3788
4034
|
/** `POST /v1/approvals/{sessionId}/decide` 的 200 体(spec `ApprovalDecisionResult` 的型面镜像;此前 SDK 只给 `unknown`)。
|
|
3789
4035
|
* 三种真实形共用这只信封(spec 长注有全文):**受理形**(server ≥7.37 durable 部署默认)`{taskId, sessionId,
|
|
3790
4036
|
* status:"resuming", bindingEnforced:true}` —— `errorCode`/`errorMessage`/`retriable` **从不**上这形,失败落 run 行与
|
|
@@ -3792,10 +4038,23 @@ export interface ToolRosterEntry {
|
|
|
3792
4038
|
* 的同步长调用)`{taskId?, sessionId, status, errorCode?, errorMessage?, retriable?}`;**parked 回执**
|
|
3793
4039
|
* `{taskId, status:"resuming", decision}`;**幂等回放形**(#368)`{sessionId, idempotent:true, decision, bindingEnforced:true,
|
|
3794
4040
|
* executionOutcome?}`。**没有任何键四形都保证**(回放形无 `status`/`taskId`);判别:`idempotent` → 回放,`decision` 且无 `sessionId` → parked,
|
|
3795
|
-
* `sessionId`+`bindingEnforced` → 受理/终局。
|
|
4041
|
+
* `sessionId`+`bindingEnforced` → 受理/终局。
|
|
4042
|
+
*
|
|
4043
|
+
* 🔴 **200 的语义在 7.69.0 起分叉,消费端必须分开读**(server 7.69.0 / S-185,workflow 子代 park 车道):
|
|
4044
|
+
* bg 赎回腿与任务级腿的 200 = **引擎已提交这次决定**;而当这条 pending 属于一个 **workflow 子代**时,
|
|
4045
|
+
* 同一个受理形只表示「决定已投递给宿主会话的下一跑」—— **不是**门已解决。子代的 checkpoint 在 200 之后
|
|
4046
|
+
* **仍可能 pending**,`/v1/approvals` 上那张卡可能还在 ⇒ **禁**据 200 立刻把卡从 UI 抹掉;看进度去 poll
|
|
4047
|
+
* `taskId`(那是**宿主**新铸的 run),不要盯那张卡。投递还可能**丢**(宿主被打断 ⇒ 决定随那次调用消失,
|
|
4048
|
+
* 重发得到 409 `decide.workflow_host_not_parked`),但因为卡全程 pending,什么都没有被伪造,宿主再 park
|
|
4049
|
+
* 之后可以重决。 */
|
|
3796
4050
|
export interface ApprovalDecisionResult {
|
|
3797
4051
|
/** 受理 / 终局 / parked 三形恒有;**回放形没有**(这次没有受理任何续跑,铸一个 status 是假话)。 */
|
|
3798
4052
|
status?: string;
|
|
4053
|
+
/** 🔴 **谁的 run id 取决于这次 decide 落在哪条车道上**(server ≥7.69.0 起三条):
|
|
4054
|
+
* · 任务级腿 —— 本会话被续跑的那条 run;
|
|
4055
|
+
* · bg 赎回腿 —— 后台子代句柄(`a*`);
|
|
4056
|
+
* · **workflow 子代 park 腿(7.69.0 新)—— 宿主会话新铸的 run id**(这条腿投的是宿主的一次 wake,
|
|
4057
|
+
* 不是子代自己的续跑)。poll 它看进度:`GET /v1/runs/:id`。 */
|
|
3799
4058
|
taskId?: string;
|
|
3800
4059
|
sessionId?: string;
|
|
3801
4060
|
bindingEnforced?: boolean;
|