@sema-agent/sdk 23.1.0 → 24.0.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 +61 -1
- package/dist/device/index.d.ts +1 -1
- package/dist/device/index.d.ts.map +1 -1
- package/dist/device/index.js +2 -0
- package/dist/device/index.js.map +1 -1
- package/dist/errors.d.ts +215 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +87 -7
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +129 -16
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +18 -0
- package/dist/events.js.map +1 -1
- package/dist/health.d.ts +4 -1
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/registry/errors.d.ts +3 -0
- package/dist/registry/errors.d.ts.map +1 -1
- package/dist/registry/errors.js +3 -2
- package/dist/registry/errors.js.map +1 -1
- package/dist/registry/me-config.d.ts +1 -0
- package/dist/registry/me-config.d.ts.map +1 -1
- package/dist/registry/me-config.js +1 -1
- package/dist/registry/me-config.js.map +1 -1
- package/dist/registry/scope-config-feedback.d.ts +1 -0
- package/dist/registry/scope-config-feedback.d.ts.map +1 -1
- package/dist/registry/scope-config-feedback.js +1 -1
- package/dist/registry/scope-config-feedback.js.map +1 -1
- package/dist/resources/elicitations.d.ts +2 -1
- package/dist/resources/elicitations.d.ts.map +1 -1
- package/dist/resources/elicitations.js.map +1 -1
- package/dist/resources/questions.d.ts +2 -1
- package/dist/resources/questions.d.ts.map +1 -1
- package/dist/resources/questions.js.map +1 -1
- package/dist/resources/session-sync.d.ts +4 -2
- package/dist/resources/session-sync.d.ts.map +1 -1
- package/dist/resources/session-sync.js +4 -2
- package/dist/resources/session-sync.js.map +1 -1
- package/dist/resources/tool-approvals.d.ts +10 -6
- package/dist/resources/tool-approvals.d.ts.map +1 -1
- package/dist/resources/tool-approvals.js.map +1 -1
- package/dist/settings.d.ts +3 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/sse.d.ts +3 -0
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +3 -3
- package/dist/sse.js.map +1 -1
- package/dist/types.d.ts +307 -98
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -2
- package/dist/types.js.map +1 -1
- package/openapi.yaml +518 -112
- package/package.json +2 -2
package/dist/types.d.ts
CHANGED
|
@@ -323,13 +323,18 @@ export interface TaskRequest {
|
|
|
323
323
|
* jobId across its sub-runs so they group into one Task. SDK auto-generates if absent. */
|
|
324
324
|
jobId?: string;
|
|
325
325
|
/** Business/UX system prompt the CLIENT owns (decoupling seam) — STABLE per integrator version (cacheable
|
|
326
|
-
* prefix); put per-request context in `objective`. Server cap: >16384 chars → 400.
|
|
326
|
+
* prefix); put per-request context in `objective`. Server cap: >16384 chars → 400.
|
|
327
|
+
* 🔴 **只给角色层(server ≥7.132.0 / core 7.52.0,行为变)**:本键(以及 {@link appendSystemPrompt} 与折进追加段的 `settings.outputStyle`)**逐字**含引擎提示里的
|
|
328
|
+
* 一段锁定文本(宪法 / 安全 / 运行环境等段;哪怕只是锁定文本里的一行标题如 `# Harness`)—— 即一份「已组装」的提示 ⇒ 开跑前拒 **`prompt.assembled_role_refused`**
|
|
329
|
+
* (同步腿 **400**,一个 token 没烧、不占幂等键;异步 / 活流腿 2xx、同码落终态;存下的续跑体带它 ⇒ 续跑同码失败)。出路:删掉抄进来的引擎段,只发角色文本 —— 引擎的段由引擎组;
|
|
330
|
+
* 判官只有引擎一只。≤7.131.x 这种提示被原样透传。 */
|
|
327
331
|
systemPrompt?: string;
|
|
328
332
|
/** Append-only system prompt rider (server ≥1.243, ≈ CC `--append-system-prompt`): a STABLE block composed
|
|
329
333
|
* after the scenario base + `systemPrompt`, before the volatile tail. First-class lane for the shell's
|
|
330
334
|
* product-knowledge block — `settings.outputStyle` composes AFTER it (byte-stable order), so a style block
|
|
331
335
|
* and this rider coexist. Probe `capabilities.appendSystemPrompt`; on false/absent fall back to the
|
|
332
|
-
* `settings.outputStyle` ride-along. Same cap as `systemPrompt`: >16384 chars → 400.
|
|
336
|
+
* `settings.outputStyle` ride-along. Same cap as `systemPrompt`: >16384 chars → 400.
|
|
337
|
+
* 🔴 server ≥7.132.0:带引擎提示段原文 ⇒ 开跑前拒 `prompt.assembled_role_refused`(同 {@link systemPrompt} 那一条律;句子说的是 `the task's appendSystemPrompt …`)。 */
|
|
333
338
|
appendSystemPrompt?: string;
|
|
334
339
|
/** server ≥7.121.0 —— 输出风格的**每轮一句**:原样投给引擎的同名座位(`TaskSpec.outputStyle`),引擎在每个附件周期用自己的标记帧陈述
|
|
335
340
|
* 「`<name>` output style is active. `<turnReminder>`」(`turnReminder` 缺席 ⇒ 引擎的缺省句),流上回声 `steering_injected` `source:"output_style"`。
|
|
@@ -458,7 +463,14 @@ export interface TaskRequest {
|
|
|
458
463
|
/** §sandbox-image-select(P0.5):送**镜像 profile 意图**(≤128 chars),service 内部按 trusted
|
|
459
464
|
* principal 用 `latestPublished(profile, viewer)` **fail-closed** 解析 digest + 再准入 → per-pod 起像(复用 select 同 visibility)。
|
|
460
465
|
* 🔴 caller **永远只送 profile,绝不送 digest/ref**(信 caller digest = fail-OPEN,对抗审逮 4 越权);解析/准入 100% 在 service 信任边界。
|
|
461
|
-
* v1 约束(违反 → 400):仅 k8s 后端;**不与 `verify`/`cascade` 同用**(镜像绑定按 sessionId,子运行换 session 会静默回退默认像,宁可 fail-loud)。
|
|
466
|
+
* v1 约束(违反 → 400):仅 k8s 后端;**不与 `verify`/`cascade` 同用**(镜像绑定按 sessionId,子运行换 session 会静默回退默认像,宁可 fail-loud)。
|
|
467
|
+
* 🔴 **server ≥7.132.0 沙箱车道的受理拒各带机读码**(一个事实一个码,一码一状态;此前无码、按状态给粗码):
|
|
468
|
+
* · 执行车道不是 k8s ⇒ **501 `capability.k8s_lane_required`**(新码;≤7.131.x 是无码 400,句子不变)—— 这台部署接不了每任务镜像,换部署形态;
|
|
469
|
+
* `capabilities.executionLane.provider !== "k8s"` 即可预判;落 `CapabilityUnavailableError`(`capability.` 前缀族);
|
|
470
|
+
* · k8s 车道而本部署没有镜像索引 ⇒ **501 `capability.image_index_required`**(此前 400;与 `/v1/images*` 同一事实同一码;句子说真因:需要 SQL store 后端);
|
|
471
|
+
* · 这次请求没有解析出会话 ⇒ 400 `request.precondition_unmet`;档案没有本主体可见的已发布镜像 / 可见的那份不具备 {@link capabilitiesNeeded} 要的能力 ⇒ 404 `not_found.image`;
|
|
472
|
+
* `capabilitiesNeeded` 里有不认识的能力词 ⇒ 400 `request.field_invalid`。
|
|
473
|
+
* 会话上 `SelectEnvironment` 选过的档案在下一个任务边界生效时同判。续跑腿上这几类照例折成 409 `resume_blocked_by_policy`,`blockedBy` 即上面的码。按码分支,别锚句子。 */
|
|
462
474
|
sandboxImageProfile?: string;
|
|
463
475
|
/** 约束选中像须具备的 bool 能力(`browser`/`db`/`nestedBuild`);**单独给(无 `sandboxImageProfile`)→ 400**。 */
|
|
464
476
|
capabilitiesNeeded?: string[];
|
|
@@ -818,16 +830,18 @@ export interface TaskRequest {
|
|
|
818
830
|
* Malformed (non-array / empty-string items) → 400 fail-loud at submit.
|
|
819
831
|
* 🔴 **server ≥7.126.0(core 7.49.0 #1623;契约 G.9e)—— 与 {@link allowTools} 读同一文法**:条目 = wire 名或别名、`Tool(content)`(整只工具)、`mcp__srv` / `mcp__srv__*` / 工具段通配;
|
|
820
832
|
* 名单里有一个这一 run **没有任何工具答应**的名字:**server 7.126.0–7.128.x** 引擎开跑前拒 `config.tool_face_control`(同步腿 400,一个 token 没烧;流式 / 后台腿是 `failed` 终局带同码);
|
|
821
|
-
*
|
|
822
|
-
*
|
|
833
|
+
* **server ≥7.129.0 照跑**:条目原样保留(现在什么都不拒,之后挂上同名工具即生效),运维行 `runner_config_advisory` 每条告知一次并带该写的拼法。`config.tool_face_control` 只剩任何工具名都不可能有的拼法。
|
|
834
|
+
* 🔴 **server ≥7.131.0 写错的名字受理口前置拒**:大小写孪生(`BASH`)、退役拼法(`bash` · `Task`)、文法读不出的拼法与 `*`(放行方向的静默:以为禁了、其实没禁)⇒ 400 `config.tool_face_control`,句子点名现名。
|
|
823
835
|
* `"*"` 在这张名单上也被拒(此前它是一只叫 `*` 的工具;「卸全部」的拼法仍只有 {@link excludeAllTools})。deny 赢:可用工具 = 这一 run 挂的一切 ∩ {@link allowTools} − 本名单。 */
|
|
824
836
|
excludeTools?: string[];
|
|
825
837
|
/** server ≥7.126.0(core 7.49.0 #1623;契约 G.9e):这一 run 的**可用性选择器**,原样进引擎的 `TaskSpec.allowTools` —— server 零读法:不算补集、不过滤条目、`[]` 不折成缺席、不与 `settings.permissions.allow`
|
|
826
838
|
* (allow 层,免问)混词。可用工具 = 这一 run 挂的一切(调用方工具、手、引擎自己的工具、MCP / A2A、场景与腿工具)∩ 本名单 − {@link excludeTools}(deny 赢),由引擎在开跑前一次算出。
|
|
827
839
|
* 🔴 **读法**:`["*"]` = 本层不设名单(缺席同义);`[]` = 什么都不给;条目 = wire 名或别名、`Tool(content)`(整只工具)、`mcp__srv` / `mcp__srv__*` / 工具段通配(`mcp__*` 在这张名单上被拒)。
|
|
828
840
|
* 腿的协议工具(委派子代的 `ReportBlocked` 等)不需要点名。子代定义的 {@link TaskAgentDefinition.allowTools} / `denyTools` 与本键是**同一只选择器**(三来源同判)。
|
|
829
|
-
* 🔴 **没人答应的名字**:**server 7.126.0–7.128.x** 名单里有一个没有任何工具答应的名字 ⇒ `config.tool_face_control`(同步腿 **400**,一个 token 没烧;流式 / 后台腿是 `failed`
|
|
830
|
-
* **server ≥7.129.0 照跑**:条目原样保留(今天什么都不准,之后挂上同名工具即生效),运维行 `runner_config_advisory`
|
|
841
|
+
* 🔴 **没人答应的名字**:**server 7.126.0–7.128.x** 名单里有一个没有任何工具答应的名字 ⇒ `config.tool_face_control`(同步腿 **400**,一个 token 没烧;流式 / 后台腿是 `failed` 终局带同码);
|
|
842
|
+
* **server ≥7.129.0 照跑**:条目原样保留(今天什么都不准,之后挂上同名工具即生效),运维行 `runner_config_advisory` 每条告知一次并带该写的拼法。
|
|
843
|
+
* 🔴 **server ≥7.132.0(引擎 7.52.0)写错的名字开跑前拒**:近似名与**有后继的退役名**(`Task` ⇒ `Agent`、`bash` ⇒ `Bash`)⇒ 根 `allowTools` 答 **400 `config.tool_face_control`**、子代 `allowTools` 答
|
|
844
|
+
* **400 `config.agent.unknown_tool`**(同步腿;子代那一形此前是 200 + failed;异步 / 活流腿 2xx、同码落终态),句子点名该条与现名。内容形与没有后继的退役名(`MultiEdit`)照跑。
|
|
831
845
|
* 坏形(非字符串数组)⇒ 400 `request.field_invalid`,与 `excludeTools` / `deferTools` 同一只门。引擎不认该座(装着的引擎 < 7.49.0)⇒ 响亮拒 400 `request.field_invalid` 点名 `allowTools`(不静默丢:丢一只收窄键就是放宽)。
|
|
832
846
|
* 🔴 **探测靠键闭集,没有能力位**:≤7.125.x 对它答 `400 request.body_shape` 并在 `unknownKeys` 里列名。⚠️ 辖域:A2A 入站面(`message/send`)不承载本键。 */
|
|
833
847
|
allowTools?: string[];
|
|
@@ -998,9 +1012,16 @@ export interface TaskAgentDefinition {
|
|
|
998
1012
|
whenToUseLean?: string;
|
|
999
1013
|
/** Allowlist of tool names the agent may use. Omit ⇒ inherit all tools.
|
|
1000
1014
|
* server ≥7.126.0(core 7.49.0 #1623):名字归引擎一只判 —— 与根 run 的 {@link TaskRequest.allowTools} / {@link TaskRequest.excludeTools} 是同一只选择器(开跑前,三来源同判);
|
|
1001
|
-
* 没有任何工具答应的名字:server 7.126.0–7.128.x ⇒ 整 run 拒终局码 `config.agent.unknown_tool`(
|
|
1015
|
+
* 没有任何工具答应的名字:server 7.126.0–7.128.x ⇒ 整 run 拒终局码 `config.agent.unknown_tool`(那一代不是 HTTP 码;server 受理口只判形与条数);**server ≥7.129.0 照跑**(条目原样保留,运维行 `runner_config_advisory` 告知一次)。
|
|
1016
|
+
* 🔴 **写错的名字(server ≥7.131.0 / 7.132.0)**:本清单里的**近似名**(`BASH`)受理口前置拒(7.131.0);**有后继的退役名**(`Task` ⇒ `Agent`、`bash` ⇒ `Bash`)与文法不可能的拼法
|
|
1017
|
+
* 7.132.0 起由引擎开跑前拒 —— 码都是 **`config.agent.unknown_tool`**,同步腿 **400**(7.132.0 起;此前引擎那一形答 HTTP 200 + `failed` 终局体),一个 token 没烧、不占幂等键;
|
|
1018
|
+
* 异步 / 活流腿 HTTP 2xx、同码落在终态 run 行。句子点名子代、条目与现名(原因词在句子里,机读位 `terminal.detail.detail.reason` 不再上 wire)。只在整次提交零 turn 零 token 时答 400
|
|
1019
|
+
* (verify / cascade 前一轮已跑 ⇒ 仍 200 + failed)。内容形(`Agent(Explore)`)与没有后继的退役名(`MultiEdit`)照受理、交引擎通告;真未知名照跑、告运维。 */
|
|
1002
1020
|
allowTools?: string[];
|
|
1003
|
-
/** Denylist of tool names (subtractive; applied after `allowTools`). 同上:server ≥7.126.0 起读同一只选择器(`Tool(content)` ⇒ 整只工具;`denyTools:["Monitor"]` ⇒ 子代没有 `Monitor`)。
|
|
1021
|
+
/** Denylist of tool names (subtractive; applied after `allowTools`). 同上:server ≥7.126.0 起读同一只选择器(`Tool(content)` ⇒ 整只工具;`denyTools:["Monitor"]` ⇒ 子代没有 `Monitor`)。
|
|
1022
|
+
* 🔴 **server ≥7.131.0 引擎读成空的条目受理口前置拒**(限制侧读成空 = 放行,以为禁了的工具照用):近似名(`BASH`)、退役名(`bash` · `Task`)、任何工具名都不可能有的拼法、`*` ⇒
|
|
1023
|
+
* **400 `config.agent.unknown_tool`**(同步 / 流式 / 后台三条腿都是提交时 400),`error` = `agents[<i>].denyTools entry "<条目>" reads as nothing (<原因词>): <怎么写> — …`;清单超 1000 条 ⇒
|
|
1024
|
+
* `request.field_invalid`(撞帽机读位见 {@link import("./errors.js").RequestFieldRefusalExtra})。续跑重放存量体带这类条目 ⇒ 认领之前 409 `resume_blocked_by_policy`(`blockedBy: "config.agent.unknown_tool"`)。 */
|
|
1004
1025
|
denyTools?: string[];
|
|
1005
1026
|
/** Skills preloaded into the agent: `{ name, description, content }` (+ optional allowedTools / disallowedTools / files).
|
|
1006
1027
|
* server ≥7.116.0:子代技能受理两只清单(`allowedTools` / `disallowedTools`,读法见 {@link SkillSpec.allowedTools};≤7.115.x 是未知键整条拒)。
|
|
@@ -1584,13 +1605,16 @@ export interface ModelCompat {
|
|
|
1584
1605
|
* `keyless` 哪儿都没凭据的本地无鉴权网关);
|
|
1585
1606
|
* · 🔴 **23.0.0 BREAKING(server ≥7.129.0 / 引擎 7.51.0)**:`ok:unpinned`(部署凭据、部署没声明根 ⇒ 配对不可验证)**退役、零别名** —— 没声明根的部署上,
|
|
1586
1607
|
* 部署凭据现在由引擎判 `broken:credential_mismatch`。server ≤7.128.x 仍会发 `ok:unpinned`:它落在下面的开集尾,**按通用「配对未验证」渲,别当成好**;
|
|
1587
|
-
* · `broken:*`
|
|
1608
|
+
* · `broken:*` 四词 = 真请求会被引擎拒(标红):`credential_mismatch` / `credential_missing`(给这只模型配 per-model 凭据或挪到部署根上);
|
|
1609
|
+
* **server ≥7.132.0 / 引擎 7.52.0 +两词** —— `credential_origin_mismatch`(这只模型自己的凭据绑在它第一次发往的主机上,这一行现在指向另一台主机:给新主机配一份凭据,
|
|
1610
|
+
* 或把它指回原主机;同一条拒在流上是 `engine_notice` `route.credential_origin_mismatch`)· `credential_answer_conflict`(per-model 凭据钩子的答复把同一把钥匙交了两遍 ——
|
|
1611
|
+
* `apiKey` 与该车道自己写钥匙的那个头同时在场:只答其一);
|
|
1588
1612
|
* · `unknown` = 判不了。**不要**渲成「好」或「坏」,渲「未知」。
|
|
1589
1613
|
* 🔴 **真开集**(`(string & {})` 逃生口不是装饰):core 把 `verdict.posture` 直接内插进 `ok:${…}`,
|
|
1590
1614
|
* server 的铸点与 core 的那只函数**全路径没有一处运行期成员判定** —— 一只自带 `adjudicateRoute` 的 brain
|
|
1591
1615
|
* 供什么词就上什么词。开/闭按**产方是否真判成员**定(8.4.0 拆假开集的同一条判据),所以这里给字面量
|
|
1592
|
-
* 补全但**不执法**:switch
|
|
1593
|
-
export type RoutePairingStatus = "ok:per-model" | "ok:paired" | "ok:keyless" | "broken:credential_mismatch" | "broken:credential_missing" | "unknown" | (string & {});
|
|
1616
|
+
* 补全但**不执法**:switch 认上面八词(core `RoutePairingStatus` 今天的全集),再留一条 default 臂当「未知」。 */
|
|
1617
|
+
export type RoutePairingStatus = "ok:per-model" | "ok:paired" | "ok:keyless" | "broken:credential_mismatch" | "broken:credential_missing" | "broken:credential_origin_mismatch" | "broken:credential_answer_conflict" | "unknown" | (string & {});
|
|
1594
1618
|
/** `GET /v1/models` 的非密钥模型目录条目(core 1.116 `@model` mention 线;service src/http/routes/capabilities.ts)。
|
|
1595
1619
|
* `name` = `@handle`(用户在正文打 `@<name>` per-task 选它)。🔴 **只名/能力,无 baseUrl/apiKey/headers**(service 已剥)。 */
|
|
1596
1620
|
export interface ModelInfo {
|
|
@@ -2621,32 +2645,55 @@ export interface CheckpointGate {
|
|
|
2621
2645
|
toolName?: string;
|
|
2622
2646
|
[k: string]: unknown;
|
|
2623
2647
|
}
|
|
2624
|
-
/**
|
|
2625
|
-
*
|
|
2626
|
-
*
|
|
2627
|
-
*
|
|
2628
|
-
*
|
|
2629
|
-
*
|
|
2630
|
-
*
|
|
2648
|
+
/**
|
|
2649
|
+
* **提示清单 v3**(server ≥7.132.0 = 引擎 7.52.0 清单 v3;**BREAKING**)—— 这条腿的提示**是哪一份**(`identity` + 它的选择器值 `selectors`)、由哪些块与段组成、
|
|
2650
|
+
* 每一段的文本从哪里来(`chain`,被取代的 overlay 另在 `superseded`)。只有 id / 尺寸 / 摘要,**没有提示正文**(隐私边界)。每次 prepare 一行(cascade / verify 在同一
|
|
2651
|
+
* taskId 下重新 prepare,逐行按序)。三个出口同一行、原样:账本回放 `GET /v1/runs/:id/events` 的 `prompt_assembled`、`GET /v1/tasks/:id/turns` 的 `prompt-assembled` 块、
|
|
2652
|
+
* trace SSE 的 `prompt-assembled` 帧。成员 = 引擎帧(`prompt.assembled`)减信封(`kind` / `version` / `taskId` / `ts`)与 `snapshot` / `lowering`(server `promptManifestRecordOf`)。
|
|
2653
|
+
*
|
|
2654
|
+
* 🔴 **读法**(server 契约 §G.10 逐句):**每个成员都可能缺席** —— 可选成员缺席 = 「没有」,不折成空值;在场却读不出的成员 server 不上行(`identity` / `selectors` 整句、
|
|
2655
|
+
* 段 / 块 / `superseded` / 工具一行一判),所以「v3 行上缺 `identity`」= 引擎交出的身份读不出(已丢弃并计数),**不是**旧行。空列表是一句陈述(`tools: []` = 零工具)。
|
|
2656
|
+
* 词(档名、激活方式、来源类、渲染器 id、host 的 role / form)**按开集读**,server 原样过境(词表属主 = 引擎)。
|
|
2657
|
+
* 🔴 **这条腿运行的是哪一份提示只有一种读法:`identity`**(`identity.artifact` = 身份摘要;`identity.layers.binding` 自 7.132.0 起恒有场景名的摘要)。
|
|
2658
|
+
* 🔴 **BREAKING(server 7.132.0,零别名)**:v2 的顶层 `constitution` 删(宪法档锁定、只由引擎组;逐字含锁定段的提示在开跑前被拒 `prompt.assembled_role_refused`);
|
|
2659
|
+
* `sections[]` 去 `slot` / `carrier` / `cadence` / `cacheClass`、`hash` → `contentHash`(`sha256:` 未加盐 = 已发布文本 / `salted:` = 带本任务或本 run 自己的输入),
|
|
2660
|
+
* 加 `band`(恒在)/ `variant?` / `renderer?` / `locale` / `chain`;顶层加 `identity` / `selectors` / `superseded?`。运维指标 `prompt_constitution_total` 退役无替代。
|
|
2661
|
+
* ⚠️ **旧行**:7.131.x 及更早写下的账本行保留 v2 形,server 不回读、不改写 —— 一条升级前停驻、升级后续跑的 run,账本里两形并存。判别只有一只、属主是 server:
|
|
2662
|
+
* **带 `constitution` 的是旧行**(旧行恒带它,v3 行永不带),型见 {@link PromptManifestRetiredRow};三个出口的型 = {@link PromptManifestRow}。
|
|
2663
|
+
* ⚠️ 块的 `hash` 是**进程加盐**的短摘要(跨 worker 重启不可比,UI 别跨进程 diff)。
|
|
2664
|
+
*/
|
|
2631
2665
|
export interface PromptManifest {
|
|
2632
|
-
/**
|
|
2633
|
-
|
|
2634
|
-
|
|
2666
|
+
/** 这条腿的提示身份(core `PromptManifestIdentity`):`artifact` = 身份摘要(四个输入层的唯一摘要),`layers` = 它的输入层(只有 `center` 被钉、续跑按摘要还原),
|
|
2667
|
+
* `epoch` / `activatedBy` = 点名它的那条会话 epoch 记录(计数与成因,见 {@link PromptEpochDescriptor})。整句读不出 ⇒ 缺席。 */
|
|
2668
|
+
identity?: PromptManifestIdentity;
|
|
2669
|
+
/** 这条腿的选择器值(core `PromptManifestSelectors`)—— `identity.layers.binding` 的明文形:`binding?` = 场景名(server ≥7.132.0 恒由 `TaskSpec.promptBinding` 写入)、
|
|
2670
|
+
* `traits`、`host { role, form }`(引擎词:role `general` / `code` / `coordinator` / `cowork`,form `standard` / `minimal`;开集读)、`facts`(名 → 布尔)。整句读不出 ⇒ 缺席。 */
|
|
2671
|
+
selectors?: {
|
|
2672
|
+
binding?: string;
|
|
2673
|
+
traits: string[];
|
|
2674
|
+
host: {
|
|
2675
|
+
role: string;
|
|
2676
|
+
form: string;
|
|
2677
|
+
};
|
|
2678
|
+
facts: Record<string, boolean>;
|
|
2679
|
+
};
|
|
2680
|
+
/** 有序块:稳定 id(`role.base` / `harness.context` / `memory.safety` / `env.context` / `memory.tail` …)、字符数、进程加盐的短摘要。读不出的块逐个丢。 */
|
|
2681
|
+
blocks?: Array<{
|
|
2635
2682
|
id: string;
|
|
2636
2683
|
chars: number;
|
|
2637
2684
|
hash: string;
|
|
2638
|
-
[k: string]: unknown;
|
|
2639
2685
|
}>;
|
|
2640
|
-
|
|
2686
|
+
/** 渲染出来的段,一段一行(读不出的段逐个丢),形见 {@link PromptManifestSection}。 */
|
|
2687
|
+
sections?: PromptManifestSection[];
|
|
2688
|
+
/** 这次组合**取代**了的 overlay(同一目标上后来的胜了,或它这一 run 什么都没改):`supersededBy` = 胜者 overlay 的 id,或字面 `(absent this run)`。缺席 = 没有被取代的。 */
|
|
2689
|
+
superseded?: Array<{
|
|
2641
2690
|
id: string;
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
chars: number;
|
|
2647
|
-
hash: string;
|
|
2648
|
-
[k: string]: unknown;
|
|
2691
|
+
source: string;
|
|
2692
|
+
by: string;
|
|
2693
|
+
target: string;
|
|
2694
|
+
supersededBy: string;
|
|
2649
2695
|
}>;
|
|
2696
|
+
/** 挂载的工具面(初始挂载;延迟激活经 `tools_delta` 宣告):每只工具的契约身份、重放别名、形状摘要与整份 wire schema 摘要(内容寻址)。 */
|
|
2650
2697
|
tools?: Array<{
|
|
2651
2698
|
wireName: string;
|
|
2652
2699
|
aliases: string[];
|
|
@@ -2655,24 +2702,105 @@ export interface PromptManifest {
|
|
|
2655
2702
|
cardId: string;
|
|
2656
2703
|
shapeDigest: string;
|
|
2657
2704
|
wireSchemaDigest: string;
|
|
2658
|
-
[k: string]: unknown;
|
|
2659
2705
|
}>;
|
|
2660
|
-
|
|
2661
|
-
|
|
2706
|
+
/** 延迟工具的披露策略(core `ToolDisclosureManifest`):`deferredTools` 条数、生效的 `strategy`(`swap` / `static`)与选它的那一席 `source`(`spec` / `env` / `default` /
|
|
2707
|
+
* `degraded_no_direct_lane`);这条腿什么都没延迟 ⇒ 缺席。 */
|
|
2708
|
+
toolDisclosure?: {
|
|
2709
|
+
deferredTools: number;
|
|
2710
|
+
strategy: string;
|
|
2711
|
+
source: string;
|
|
2712
|
+
};
|
|
2713
|
+
/** 提示总字符数。 */
|
|
2714
|
+
totalChars?: number;
|
|
2662
2715
|
}
|
|
2663
|
-
/**
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2716
|
+
/** {@link PromptManifest.identity} 的形(core `PromptManifestIdentity`)。 */
|
|
2717
|
+
export interface PromptManifestIdentity {
|
|
2718
|
+
artifact: string;
|
|
2719
|
+
/** 身份的输入层(core `PromptIdentityLayers`;会话 epoch 记录 {@link PromptEpochDescriptor.layers} 是同一个形)。 */
|
|
2720
|
+
layers: PromptIdentityLayers;
|
|
2668
2721
|
epoch: number;
|
|
2669
|
-
/**
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2722
|
+
/** 点名它的 epoch 记录是怎么来的(core `PROMPT_EPOCH_ACTIVATIONS`:`session_start` / `compaction` / `code_change` / `selection_change`;开集读)。 */
|
|
2723
|
+
activatedBy: string;
|
|
2724
|
+
}
|
|
2725
|
+
/** 一段渲染出来的提示段(core `PromptManifestSection`):在哪(`band` 档 / `rank`)、哪个变体与渲染器做的、谁的文本(`locale`:`canonical` 目录原文 / `overlay` overlay 作者写的)、
|
|
2726
|
+
* 内容摘要(`contentHash`:`sha256:` 未加盐 = 已发布文本,`salted:` = 带本任务或本 run 自己的输入的文本)与它的历史 `chain`(`source` = `bundled` 或 overlay 来源类,
|
|
2727
|
+
* `overlay` / `op` = 改它的那只 overlay 与操作,`superseded: true` = 这一环被后来的取代)。`band` 恒在;`variant` / `renderer` 只在有时在场。 */
|
|
2728
|
+
export interface PromptManifestSection {
|
|
2729
|
+
id: string;
|
|
2730
|
+
band: string;
|
|
2731
|
+
rank: number;
|
|
2732
|
+
variant?: string;
|
|
2733
|
+
/** 渲染器(core `RENDERER_IDS`:`role-base` / `model-guidance` / `mcp-instructions` / `reminder-mark` / `environment` / `memory`;开集读)与它的版本。 */
|
|
2734
|
+
renderer?: {
|
|
2735
|
+
id: string;
|
|
2736
|
+
version: number;
|
|
2737
|
+
};
|
|
2738
|
+
chars: number;
|
|
2739
|
+
locale: string;
|
|
2740
|
+
contentHash: string;
|
|
2741
|
+
chain: Array<{
|
|
2742
|
+
source: string;
|
|
2743
|
+
overlay?: string;
|
|
2744
|
+
op?: string;
|
|
2745
|
+
superseded?: true;
|
|
2746
|
+
}>;
|
|
2675
2747
|
}
|
|
2748
|
+
/**
|
|
2749
|
+
* **旧行**:7.131.x 及更早写下的 `prompt_assembled` 账本行(v2 形:顶层 `constitution` + 槽键段)。server 不回读、不改写,原样交出 ⇒ 一条升级前停驻、升级后续跑的
|
|
2750
|
+
* run 的账本里它与 v3 行并存。判别只有一只、属主是 server 契约:**`constitution` 在场 ⇔ 旧行**。本包**不再为旧形的成员具型**(v2 读法已退役):`"constitution" in row`
|
|
2751
|
+
* 收窄到本型后只剩不透明的成员,要么跳过、要么只读 `totalChars` 一类与 v3 同名同义的数。
|
|
2752
|
+
*/
|
|
2753
|
+
export type PromptManifestRetiredRow = {
|
|
2754
|
+
constitution: string;
|
|
2755
|
+
readonly [member: string]: unknown;
|
|
2756
|
+
};
|
|
2757
|
+
/** 三个出口(账本 `prompt_assembled`、turns `prompt-assembled` 块、trace `prompt-assembled` 帧)上一行的型:v3 行或旧行,按 `"constitution" in row` 判。 */
|
|
2758
|
+
export type PromptManifestRow = PromptManifest | PromptManifestRetiredRow;
|
|
2759
|
+
/** 会话提示 epoch 记录的输入层(core `PromptIdentityLayers`;清单 {@link PromptManifestIdentity.layers} 同形)。只有 `center` 被钉(续跑按摘要还原),其余是那一跑算出来的、
|
|
2760
|
+
* 留着让后来的跑说清改了什么。`center` / `deploy` / `task` 缺席 = 那一层什么都没贡献;`binding` = 选择器值的摘要;`renderers` = 渲染器 id → 版本。 */
|
|
2761
|
+
export interface PromptIdentityLayers {
|
|
2762
|
+
catalog: string;
|
|
2763
|
+
renderers: Record<string, number>;
|
|
2764
|
+
/** 采纳的中心 artifact 的摘要。 */
|
|
2765
|
+
center?: string;
|
|
2766
|
+
deploy?: string;
|
|
2767
|
+
task?: string;
|
|
2768
|
+
binding: string;
|
|
2769
|
+
}
|
|
2770
|
+
/** 一条 v3 epoch 记录(core `PromptEpochDescriptor`)。 */
|
|
2771
|
+
export interface PromptEpochDescriptor {
|
|
2772
|
+
/** 每会话单调的记录计数。 */
|
|
2773
|
+
epoch: number;
|
|
2774
|
+
/** 这一跑的提示身份(= 清单的 `identity.artifact`)。 */
|
|
2775
|
+
identity: string;
|
|
2776
|
+
layers: PromptIdentityLayers;
|
|
2777
|
+
/** 记录怎么来的(core `PROMPT_EPOCH_ACTIVATIONS`:`session_start` / `compaction` 是合法边界;`code_change` = 代码或输入层动了;`selection_change` = 只有选择器值动了)。
|
|
2778
|
+
* 🔴 **闭集**:引擎的判官 `normalizePromptEpoch` 按这张表判成员,集外词的记录读不成 `pin` ⇒ 到不了 wire(产方真判成员 ⇒ 型闭,带编译期穷尽性)。 */
|
|
2779
|
+
activatedBy: PromptEpochActivation;
|
|
2780
|
+
/** 只在 `code_change` 且改了哪几层已知时在场(见 {@link PromptEpochChange};同样闭集)。 */
|
|
2781
|
+
changed?: PromptEpochChange[];
|
|
2782
|
+
/** 钉住的中心层的发布出处(不透明;只与 `layers.center` 同在,不进摘要)。 */
|
|
2783
|
+
sourceRevision?: string;
|
|
2784
|
+
}
|
|
2785
|
+
/** {@link PromptEpochDescriptor.activatedBy} 的闭集 = 引擎 `PROMPT_EPOCH_ACTIVATIONS`(逐词,钉在 `server-7132-wire` E1)。 */
|
|
2786
|
+
export type PromptEpochActivation = "session_start" | "compaction" | "code_change" | "selection_change";
|
|
2787
|
+
/** {@link PromptEpochDescriptor.changed} 的闭集 = 引擎 `PROMPT_EPOCH_CHANGES`:`catalog` / `renderers` / `deploy` / `task` / `published_schema`(退役形的中心钉被当前中心层替换的那一次)。 */
|
|
2788
|
+
export type PromptEpochChange = "catalog" | "renderers" | "deploy" | "task" | "published_schema";
|
|
2789
|
+
/**
|
|
2790
|
+
* 会话的提示 epoch(`GET /v1/sessions/:id` 的 `promptEpoch`;server ≥7.132.0 = 引擎 `StoredPromptEpoch` **读数原样**,server 不读不投、逐字附上;**BREAKING**)。
|
|
2791
|
+
* · `{ kind: "pin", descriptor }` —— 一条 v3 记录({@link PromptEpochDescriptor});
|
|
2792
|
+
* · `{ kind: "legacy", centerPinned }` —— 一条已退役形的记录(按字段名认出;引擎只读它钉没钉中心 artifact):下一跑会把它换成 v3 记录(`code_change`)。
|
|
2793
|
+
* 键缺席 = 没有 epoch 的会话(从不是 `null`)。
|
|
2794
|
+
* 🔴 **BREAKING(server 7.132.0,零别名)**:≤7.131.x 的形 `{ epoch, artifactDigest, packId, assemblyApi, activatedBy }` 退役 —— 引擎 7.52.0 起只交上面两臂。
|
|
2795
|
+
* 旧形的 `epoch` / `activatedBy` 在 `descriptor` 里,`artifactDigest` 由 `descriptor.identity` 承担(身份摘要的输入不同,两者不可比),`packId` / `assemblyApi` 无继任。
|
|
2796
|
+
*/
|
|
2797
|
+
export type PromptEpoch = {
|
|
2798
|
+
kind: "pin";
|
|
2799
|
+
descriptor: PromptEpochDescriptor;
|
|
2800
|
+
} | {
|
|
2801
|
+
kind: "legacy";
|
|
2802
|
+
centerPinned: boolean;
|
|
2803
|
+
};
|
|
2676
2804
|
/** A trace turn (GET /v1/tasks/:id/turns items — true shape). role currently only
|
|
2677
2805
|
* "assistant" (user/system/tool reserved). */
|
|
2678
2806
|
export interface TraceTurn {
|
|
@@ -3205,33 +3333,53 @@ export interface McpServerLiveness {
|
|
|
3205
3333
|
*/
|
|
3206
3334
|
export type McpLivenessState = "reachable" | "unreachable" | "unknown";
|
|
3207
3335
|
/**
|
|
3208
|
-
*
|
|
3209
|
-
*
|
|
3210
|
-
*
|
|
3211
|
-
*
|
|
3212
|
-
* 🔴
|
|
3213
|
-
*
|
|
3214
|
-
*
|
|
3215
|
-
*
|
|
3216
|
-
*
|
|
3217
|
-
*
|
|
3218
|
-
*
|
|
3219
|
-
*
|
|
3220
|
-
* ⚠️ 与 {@link WiringManifestMcpEntry} 同一条裁定:**必须是 `type` 而不是 `interface`**(隐式索引签名,
|
|
3221
|
-
* 理由与回归钉见那一型的顶注)。
|
|
3336
|
+
* 一条腿的 **mods 准入记录**里的**一行**(core 7.52.0 `ModAdmissionRecord`,server ≥7.132.0;**租户可见**)—— 两种注册席(`deployment` / `task`)上的每一张注册一行,
|
|
3337
|
+
* 按引擎的跑序(档 → 部署先于任务 → 座内顺序):**挂上的**({@link WiringManifestModMounted})或**被拒的**({@link WiringManifestModRefused})。
|
|
3338
|
+
* 判别读在场:挂上的行带 `events`,被拒的行带 `refusedBy` + `reason`(二者恒不同在)—— `"refusedBy" in row`。
|
|
3339
|
+
*
|
|
3340
|
+
* 🔴 **BREAKING(server 7.132.0)**:取代钩子席位名册 `hooks[]`(`{ family, owner, observational? }`;引擎 7.52.0 退役、零别名)。旧键与旧行形在本包整删:
|
|
3341
|
+
* 读 `manifest.hooks` 的消费端改读 `manifest.mods`;一只 `settings.hooks` 请求钩子在新形里是任务座注册 `settings.hooks`(一行)。
|
|
3342
|
+
* 🔴 **在场 iff 这条腿有注册**:本服务每条腿恒挂拒绝计量注册(`server.permission-denied-meter`;`TOOL_TRACE=true` 另有 `server.tool-trace`,品牌部署另有 `server.brand-identity`)
|
|
3343
|
+
* ⇒ 本服务的腿上这一段恒在场且至少一行。**缺席 ≠「没有扩展判这条腿的调用」**(core 逐字):委派子代仍可能经祖先链的约束被判。
|
|
3344
|
+
* 🔴 **串的出口纪律只有一种**:注册名与判官写的话(`name` / `refusedBy` / `reason` / `skipped[]` 三键)是注册方定的串,过 server 唯一的 wire 文本出口(凭据形换记号 + 截长),
|
|
3345
|
+
* 与通告 `mods.registration_refused` 的 `detail` 同一只 ⇒ 同一件事在两个出口逐字节相等;`seat` / `tier` / `events` / `observe` 是引擎词,逐字透传(词表属主 core,按开集读)。
|
|
3346
|
+
* 🔴 两形都读不成的行由 server **逐条**丢弃(全丢光 ⇒ 整键缺席);本段**不进** {@link WiringManifest.configFingerprint}(任务座是 per-task 座)。
|
|
3222
3347
|
*/
|
|
3223
|
-
export type
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
|
|
3229
|
-
|
|
3230
|
-
/**
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3348
|
+
export type WiringManifestModEntry = WiringManifestModMounted | WiringManifestModRefused;
|
|
3349
|
+
/** 注册来自哪一席:core `MOD_SEATS`(`deployment` / `task`)。引擎词,server 逐字透传(echo-only);闭集声明、开集读。mods 行与通告 detail 共用这**一处**。 */
|
|
3350
|
+
export type ModSeat = "deployment" | "task" | (string & {});
|
|
3351
|
+
/** 注册的档:core `MOD_TIERS`(`prepend` / `user` / `append` / `builtin` / `core`)。引擎词,server 逐字透传;闭集声明、开集读。mods 行与通告 detail 共用这**一处**。 */
|
|
3352
|
+
export type ModTier = "prepend" | "user" | "append" | "builtin" | "core" | (string & {});
|
|
3353
|
+
/** {@link WiringManifestModEntry} 的**挂上**形。⚠️ `type` 而不是 `interface`:与 {@link WiringManifestMcpEntry} 同一条裁定(隐式索引签名,理由与回归钉见那一型的顶注)。 */
|
|
3354
|
+
export type WiringManifestModMounted = {
|
|
3355
|
+
/** 注册名(注册方的串,UNTRUSTED-for-display)。 */
|
|
3356
|
+
name: string;
|
|
3357
|
+
/** 来自哪一席(见 {@link ModSeat})。 */
|
|
3358
|
+
seat: ModSeat;
|
|
3359
|
+
/** 档(见 {@link ModTier})。 */
|
|
3360
|
+
tier: ModTier;
|
|
3361
|
+
/** 它**真挂上**的事件模式(引擎词,逐字)。 */
|
|
3362
|
+
events: string[];
|
|
3363
|
+
/** 其中声明为只观察的那些模式;缺席 = 没有观察 handler(正面事实)。 */
|
|
3364
|
+
observe?: string[];
|
|
3365
|
+
/** 准入它时被跳过的判官(core `ModSkip`):`cause` = core `MOD_FAILURE_CAUSES`(今天 `threw` / `timeout` / `violation` / `reentry`;开集读),
|
|
3366
|
+
* `registration` / `reason` = 注册方的串。**在场 iff 非空**(缺席 = 每个判官都答了);缺成员的元素由 server 逐个丢弃。 */
|
|
3367
|
+
skipped?: Array<{
|
|
3368
|
+
registration: string;
|
|
3369
|
+
cause: string;
|
|
3370
|
+
reason: string;
|
|
3371
|
+
}>;
|
|
3372
|
+
};
|
|
3373
|
+
/** {@link WiringManifestModEntry} 的**被拒**形:准入时被另一张注册的 `plugin.register` 判官拒了,这条腿照跑、少了它。同一只拒也作 `engine_notice`
|
|
3374
|
+
* `mods.registration_refused` 上流(`detail` 的串与本行逐字节相等,见 {@link import("./events.js").ModsRegistrationRefusedDetail})。本服务今天没有任何 `plugin.register` 判官 ⇒ 到达不了。 */
|
|
3375
|
+
export type WiringManifestModRefused = {
|
|
3376
|
+
name: string;
|
|
3377
|
+
seat: ModSeat;
|
|
3378
|
+
tier: ModTier;
|
|
3379
|
+
/** 拒它的那张注册(注册方的串)。 */
|
|
3380
|
+
refusedBy: string;
|
|
3381
|
+
/** 判拒的那张注册写的话(注册方的串,UNTRUSTED-for-display)。 */
|
|
3382
|
+
reason: string;
|
|
3235
3383
|
};
|
|
3236
3384
|
/**
|
|
3237
3385
|
* 一条腿的 **LSP 代码智能接缝**(core 7.18.0 #789,server ≥7.78.0;**租户可见**)。
|
|
@@ -3455,10 +3603,11 @@ export type TraceBlock = {
|
|
|
3455
3603
|
parentToolCallId?: string;
|
|
3456
3604
|
}
|
|
3457
3605
|
/** server ≥1.219 ([998]②/[1005]①b): the assembly manifest rendered at the TOP of the turn it prepared
|
|
3458
|
-
* (web's "Prompt 组成" card source; service project.ts projectEvents `prompt_assembled` 实拆).
|
|
3606
|
+
* (web's "Prompt 组成" card source; service project.ts projectEvents `prompt_assembled` 实拆). server ≥7.132.0 = 清单 v3 行或 ≤7.131.x 写下的旧行
|
|
3607
|
+
* (按 `"constitution" in block` 判,见 {@link PromptManifestRow})。 */
|
|
3459
3608
|
| ({
|
|
3460
3609
|
type: "prompt-assembled";
|
|
3461
|
-
} &
|
|
3610
|
+
} & PromptManifestRow) | {
|
|
3462
3611
|
type: string;
|
|
3463
3612
|
[k: string]: unknown;
|
|
3464
3613
|
};
|
|
@@ -3476,9 +3625,9 @@ export type TraceBlock = {
|
|
|
3476
3625
|
* - `tool-result` — `{ seq, callId, isError, output?, truncated?, eventId?, parentToolCallId? }` an action closed.
|
|
3477
3626
|
* §E1 (SHIPPED, mapTraceEvent project.ts:248-250): `output`/`truncated` = the model-facing
|
|
3478
3627
|
* BODY (redacted+bounded at append; absent ⇒ no body). The old "output absent" gap is CLOSED.
|
|
3479
|
-
* - `prompt-assembled` — `{ seq, ...
|
|
3480
|
-
* (
|
|
3481
|
-
*
|
|
3628
|
+
* - `prompt-assembled` — `{ seq, ...PromptManifestRow }` (server ≥1.219): the prepare's assembly manifest — the stored
|
|
3629
|
+
* ledger row verbatim (server ≥7.132.0: the v3 row `identity`/`selectors`/`blocks`/`sections`/…, or a
|
|
3630
|
+
* row written by ≤7.131.x carrying `constitution`; see {@link PromptManifestRow}). MULTIPLE per task on cascade/verify runs.
|
|
3482
3631
|
* - `turn` — `{ seq, tokens? }` a turn boundary (+ usage if present).
|
|
3483
3632
|
* - `done` — `{ seq, suspended? }` terminal (suspended:true = paused on HITL, NOT completed).
|
|
3484
3633
|
* - `error` — `{ errorCode, message }` terminal failure / `WORKER_DOWN` (stalled) / `STREAM_MAX_DURATION` /
|
|
@@ -3563,7 +3712,7 @@ export type TraceStreamEvent = {
|
|
|
3563
3712
|
data: {
|
|
3564
3713
|
type?: "prompt-assembled";
|
|
3565
3714
|
seq: number;
|
|
3566
|
-
} &
|
|
3715
|
+
} & PromptManifestRow;
|
|
3567
3716
|
} | {
|
|
3568
3717
|
event: "turn";
|
|
3569
3718
|
id?: string;
|
|
@@ -3819,7 +3968,14 @@ export interface McpServerSpec {
|
|
|
3819
3968
|
* but does not send an assertion yet (engine seat pending; operator line `mcp_assertion_header_not_sent`). */
|
|
3820
3969
|
assertionHeader?: string;
|
|
3821
3970
|
};
|
|
3822
|
-
/**
|
|
3971
|
+
/** 这台服务器上**挂哪些工具**的名单(工具**裸名**,即服务器自己列出的名)。三句语义(server ≥7.132.0 契约成文;读自引擎 `intakeListedTools`,server 原样过境、不对照活名单):
|
|
3972
|
+
* · **缺席** = 该台列出的工具**全挂**;
|
|
3973
|
+
* · **`[]`** = **一只不挂**(台仍连、仍探测、仍进 `GET /v1/capabilities/mcp` 状态面);🔴 `[]` **不得折成缺席** —— 两者在 wire 上是两个事实(「写了就在场」律),
|
|
3974
|
+
* 序列化时别把空数组省掉;
|
|
3975
|
+
* · **名单里服务器没列出的名** = **静默不匹配**(不 400、不告警 —— 收窄方向的失配只会少挂不会多挂)。要「写错即响」,用 {@link toolFaces} 点名同一只工具(未知名有
|
|
3976
|
+
* `config.tool_face_undeclared` 通告);{@link toolAxes} 只判形、对未知名不告警。
|
|
3977
|
+
* 引擎唯一会响的一处:该台没声明 `tools` 能力而本名单非空 ⇒ 运维告警 `mcp.tools_capability_absent`。本名单同时管这台的 **MCP 资源**:缺席 ⇒ 资源列 / 读照开;给了名单 ⇒
|
|
3978
|
+
* 只有名单含保留名 `list_resources` / `read_resource` 时才开(所以 `[]` 也把资源一并关掉)。坏形(非字符串数组)⇒ 400 `request.field_invalid` 点名 `mcpServers[i].allowTools`。 */
|
|
3823
3979
|
allowTools?: string[];
|
|
3824
3980
|
/** Opt in to INBOUND elicitation for this server (server may ask the END USER mid-tool-call). Default OFF. */
|
|
3825
3981
|
elicitation?: boolean;
|
|
@@ -3840,6 +3996,11 @@ export interface McpServerSpec {
|
|
|
3840
3996
|
* 物化后的 schema 上)由引擎拒**那一只**工具并出 `config.tool_face_invalid` 通告(operator 面)。三条腿(请求 /
|
|
3841
3997
|
* config-center / 本地 config.d)同一条规则。 */
|
|
3842
3998
|
toolFaces?: Record<string, McpToolFace>;
|
|
3999
|
+
/** server ≥7.132.0(受理键;core `McpServerSpec.startupTimeoutMs`):**这台**服务器的启动上限(整毫秒)—— 握手(连接 + initialize)与初次工具列举各带它。
|
|
4000
|
+
* 读序一只函数:本键 › 进程级 `MCP_TIMEOUT` › MCP SDK 自己的 60 000 ms ⇒ 启动卡住的一台按自己的钟被切,兄弟照用部署的钟;只界启动阶段(调用自己的超时不动)。
|
|
4001
|
+
* 合法范围 1 000 – 2 147 483 647;🔴 **值形判官只在引擎**:server 两扇门(新提交 / 探测口)都不在入口判它,坏值(串 / 小数 / 0 / 负数 / NaN / `null` / 越界)由引擎在拨号时
|
|
4002
|
+
* **只拒这一台**(`config.mcp_startup_timeout_invalid`,兄弟照挂),不钳、不读成缺省。老 server(≤7.131.x)对它答 `400 request.body_shape`(`unknownKeys` 点名)。 */
|
|
4003
|
+
startupTimeoutMs?: number;
|
|
3843
4004
|
}
|
|
3844
4005
|
/**
|
|
3845
4006
|
* 一条 **A2A peer**(`TaskRequest.a2aPeers[]` 的一行)—— 本 SDK 镜像的是 server **真受理**的那一面:
|
|
@@ -3968,11 +4129,15 @@ export type PermissionModeAutoCapability =
|
|
|
3968
4129
|
* **引擎能力词**(core `ENGINE_CAPABILITIES`,core 7.51.1 起;**逐词同序**)—— 「这台引擎做不做 X」的唯一住处:壳按**词**判断,不按版本号。
|
|
3969
4130
|
* server ≥7.129.0 把它也接线了的词原样投到 `GET /v1/capabilities` 的**顶层**,**键就是词本身**(带点号,值恒 `true`;没接的词不投 ⇒ 缺席)。
|
|
3970
4131
|
* · `inherit_env.own_credentials_withheld` —— 这台部署上起的子进程**从不继承**部署声明为自家凭据的名字(`inheritEnv` 的每种策略,含 `"all"`,都先减去那张名单;
|
|
3971
|
-
* 点名其中一个名字的白名单被拒)
|
|
4132
|
+
* 点名其中一个名字的白名单被拒)。只说**继承**:引擎进程自己的环境对同机同用户进程仍可读,所以「凭据根本不进环境」仍是根治。值恒 `true`(没接的部署不投)。
|
|
4133
|
+
* · `inherit_env.own_credential_values_withheld`(core 7.52.0 起第二词;server ≥7.132.0 投)—— 宿主上起的子进程**不继承值等于本部署凭据值的变量**(值整串相等,不论变量叫什么名):
|
|
4134
|
+
* 部署把同一把钥匙抄进别的变量名,`inheritEnv: "all"` 下也扣得下。🔴 **这一位是事实不是能力声明,可以是 `false`**:位真 ⇔ 当前生效配置的每一个凭据变量(只要 env 里有值)都进了引擎的值臂;
|
|
4135
|
+
* 引擎判某个值「不是凭据」(空白 / 占位词 / 一个字符重复 / 不足 8 字符)或「是每个子进程都会拿到的变量的值」时不收它 ⇒ `false`(名臂照扣)。一次请求才解析出来的凭据不在值臂里。
|
|
4136
|
+
* 缺席 = 老 server(≤7.131.x:只按名扣,同值换名的副本在 `"all"` 下照进子进程)。壳要「连副本也扣」时按 `=== true` 闸。同样只说**继承**。
|
|
3972
4137
|
* 一处派生:{@link EngineCapabilityBits} 与 {@link Capabilities} 的能力词键都由本数组生成 —— 引擎加词时这里加一项、其余零手写;
|
|
3973
4138
|
* 缺席 = 老 server(≤7.128.x)或这一词没接线 ⇒ **读作「不保证」**,不是「不具备」。
|
|
3974
4139
|
*/
|
|
3975
|
-
export declare const ENGINE_CAPABILITY_WORDS: readonly ["inherit_env.own_credentials_withheld"];
|
|
4140
|
+
export declare const ENGINE_CAPABILITY_WORDS: readonly ["inherit_env.own_credentials_withheld", "inherit_env.own_credential_values_withheld"];
|
|
3976
4141
|
export type EngineCapabilityWord = (typeof ENGINE_CAPABILITY_WORDS)[number];
|
|
3977
4142
|
/** 能力词 ⇒ 可选布尔(键名原样带点号);{@link Capabilities} 继承它。 */
|
|
3978
4143
|
export type EngineCapabilityBits = {
|
|
@@ -5047,7 +5212,7 @@ export interface ScenarioDetail {
|
|
|
5047
5212
|
* decide-ready operator queue),**不是** (a) inbox/tasks 的标量 `CheckpointSummary`(见下文 CheckpointSummary)。
|
|
5048
5213
|
* 与标量形状的精确差(§7b/§4a):
|
|
5049
5214
|
* - severity 嵌在 **`riskDescriptor.severity`** 内 —— 富行**无顶层 severity 标量**;
|
|
5050
|
-
* -
|
|
5215
|
+
* - 富行的门类是**顶层 `gateKind`**(server 3.0.0 起两只 checkpoint store 的富行投影都发;server ≥7.132.0 **恒在场**,见 {@link PendingCheckpoint.gateKind})—— 不从 `toolName` 反推;
|
|
5051
5216
|
* - 富行**无 `token`**(§1:resume capability token 是永不上线的 secret,server 自按 sessionId 解析);
|
|
5052
5217
|
* - **无 `checkpointToken`**(§4a:server-INTERNAL,NOT surfaced 在 /v1/approvals 记录上;合规 client 只回传
|
|
5053
5218
|
* boundCallId+boundInputHash 两件套 —— `ApprovalDecision` 上那个可选 checkpointToken 字段已于 SDK 1.0.0 删除)。
|
|
@@ -5190,7 +5355,13 @@ export interface PendingCheckpoint {
|
|
|
5190
5355
|
* 🔴 类型是 `string` 而**不是**联合枚举:门类是**开集**(实测产物里至少有 `human` /
|
|
5191
5356
|
* `irreversible_ask` / `plan_review` / `needs_review` / `resource_limit`,core 还会加)。写死枚举会让
|
|
5192
5357
|
* 一个新门类在类型上"不存在",消费端要么编译不过要么被迫 `as`,那正是这条声明想消除的东西。
|
|
5193
|
-
*
|
|
5358
|
+
*
|
|
5359
|
+
* 🔴 **server ≥7.132.0 恒在场**(wire 收窄,契约 §7(b)):每次停驻都在行上盖门类;起服一次性迁移 M21 给缺它的存量行补上(门型读不出登记词的行置 expired);
|
|
5360
|
+
* SQL 店里仍读不出登记门类的行**不列**(计数 `server.approvals.queue-row-gate-kind-missing`;也没有决断口绑得住它),而不是缺着这个键送出。
|
|
5361
|
+
* ⇒ 对着 ≥7.132.0 的 server,缺席**到达不了**;对着 7.131.x 及更早的 server,缺席 = pre-`gate_kind` 的历史 SQL 行(`gate_kind` 列为 NULL)。
|
|
5362
|
+
* 消费端对缺席的读法一句(server 契约原话):**按「读不出」fail closed**(不当 `"human"`、不编类别、不路由到任何决断口)。
|
|
5363
|
+
* ⚠️ 本位**刻意仍是可选**(与 {@link import("./errors.js").ResumeBlockedByPolicyError.blockedBy} 同一条律,K-24 复审 r1 M1):支持地板 3.0.0 之内的老 server 真的会缺它 ——
|
|
5364
|
+
* 型上写必有 = 让老 server 上的缺席变成一个型说「不可能」的值。支持地板抬过 7.132.0 的那一版改必有(那时缺席不再可达)。 */
|
|
5194
5365
|
gateKind?: string;
|
|
5195
5366
|
/** server 7.16.0([3684]②):同步卡早有的「别再问我这个」持久规则候选,durable 队列行补齐供给——
|
|
5196
5367
|
* 数组序=展示序,EXACT 形若在场恒在首位;core 契约 basis ≤ 2,server 执法上限 4 ⇒ 消费端按 ≤4 布局
|
|
@@ -5343,9 +5514,9 @@ export interface SessionRecord {
|
|
|
5343
5514
|
messages: unknown[];
|
|
5344
5515
|
/** Present ONLY on a windowed read (`tail`/`before`) against server ≥1.162. */
|
|
5345
5516
|
window?: SessionWindow;
|
|
5346
|
-
/** server ≥1.220 ([1023]①): the session's prompt-epoch
|
|
5347
|
-
*
|
|
5348
|
-
*
|
|
5517
|
+
/** server ≥1.220 ([1023]①): the session's prompt-epoch record (absent = pre-epoch session OR an older engine — never null). The typed entry is
|
|
5518
|
+
* NOT an LLM message, so it never appears in `messages`. 🔴 **server ≥7.132.0 BREAKING**:值 = 引擎 `StoredPromptEpoch` 读数原样(`{ kind: "pin", descriptor }` /
|
|
5519
|
+
* `{ kind: "legacy", centerPinned }`),形见 {@link PromptEpoch}。 */
|
|
5349
5520
|
promptEpoch?: PromptEpoch;
|
|
5350
5521
|
/** server ≥7.110.0(S-928 用户输入受理账本):这个会话里**崩溃丢掉**的用户输入 —— server 回了 200 `applied`(interrupt{text}:202)、
|
|
5351
5522
|
* 承载它的 server 进程却在那条 run 收场前死了(**引擎在进程死前没来得及确认消费**;server ≥7.113.0 / core 7.39.0 #1273 起引擎确认消费过的受理结清成 `consumed`、
|
|
@@ -5516,7 +5687,7 @@ export interface McpServerStatus {
|
|
|
5516
5687
|
* 超时台、没拨到的台都**占住自己的位置**。拿自己的申报列表按 **index** 配,**别按 `name` 配** —— 名字不
|
|
5517
5688
|
* 保证唯一,而重名申报上按名字配就是把 A 的读数贴到 B 上。
|
|
5518
5689
|
*
|
|
5519
|
-
* 🔴 **本面没有 `degraded` 臂,这是刻意的**(与 {@link
|
|
5690
|
+
* 🔴 **本面没有 `degraded` 臂,这是刻意的**(与 {@link McpStatusPanelServed.degraded} 刻意不同):一次答不出来的
|
|
5520
5691
|
* 探测如果回一份看着正常的空名单,那正是这条面要根除的假答案。答不出来是**响亮**的 —— 整次走查超界 ⇒
|
|
5521
5692
|
* 503 `state.mcp_probe_incomplete` + `Retry-After`。⚠️ 零申报的 `servers: []` 与它**是两件事**:那是一份
|
|
5522
5693
|
* 诚实的空面(这台部署什么都没申报),不是「取不到」。
|
|
@@ -5529,17 +5700,39 @@ export interface McpProbeFace {
|
|
|
5529
5700
|
/** 逐台一行,**行形单源** = {@link WiringManifestMcpEntry};与申报表同序同长(见本型顶注)。 */
|
|
5530
5701
|
servers: WiringManifestMcpEntry[];
|
|
5531
5702
|
}
|
|
5532
|
-
/**
|
|
5533
|
-
*
|
|
5534
|
-
|
|
5535
|
-
|
|
5703
|
+
/**
|
|
5704
|
+
* `GET /v1/sessions/:id/mcp` 的体 —— **两臂恰一**(server 7.132.0 `http/routes/sessions.js` 的三只铸造臂)。`asOf` = 这次 materialize 的时刻(ISO)。
|
|
5705
|
+
* 两半分答(server ≥7.131.0):账本半(`lastLegMcp`)与场景无关、两臂都可带;场景半问场景门 ——
|
|
5706
|
+
* · {@link McpStatusPanelServed} —— 门放行:`servers`(没配 MCP ⇒ `[]`;materialize 超时 / 失败 ⇒ `[]` + `degraded: true`,壳显「状态暂不可得」,不是「无 MCP」);
|
|
5707
|
+
* · {@link McpStatusPanelRefused} —— 门拒(**仍是 200**):`scenarioRefusal` 在场,`servers` / `degraded` 缺席(场景这一半没答 ≠ `servers: []`)。
|
|
5708
|
+
* 判别读一句:`panel.scenarioRefusal === undefined ? 渲 panel.servers : 渲拒因`(两臂互把对方的键声明成 `?: undefined`,所以 `panel.servers ?? []` 也照样可写)。
|
|
5709
|
+
* 体封闭(随包 spec `additionalProperties: false` + 两臂 `oneOf`),型上不留索引签名。老 server(<7.131.0)恒是 served 臂。
|
|
5710
|
+
*/
|
|
5711
|
+
export type McpStatusPanel = McpStatusPanelServed | McpStatusPanelRefused;
|
|
5712
|
+
/** 场景门放行的面板(见 {@link McpStatusPanel})。 */
|
|
5713
|
+
export type McpStatusPanelServed = McpStatusPanelCommon & {
|
|
5714
|
+
/** 场景半:这位主体**现在**的场景会挂什么。`[]` = 门放行、该场景没配 MCP(与拒臂的缺席是两件事)。 */
|
|
5536
5715
|
servers: McpServerStatus[];
|
|
5537
5716
|
/** materialize 超时/失败的降级标记(servers 空且 degraded 时 = 取不到,非「没有」)。 */
|
|
5538
5717
|
degraded?: boolean;
|
|
5718
|
+
scenarioRefusal?: undefined;
|
|
5719
|
+
};
|
|
5720
|
+
/** 场景门拒的面板(server ≥7.131.0;见 {@link McpStatusPanel})。 */
|
|
5721
|
+
export type McpStatusPanelRefused = McpStatusPanelCommon & {
|
|
5722
|
+
/** **场景门拒的拒因**(server ≥7.131.0)—— 今天的拒形:中心把这位主体指派到本部署不在册的场景
|
|
5723
|
+
* ⇒ `errorCode: "state.scenario_assignment_unknown"`。成员 = 同一构造下整面拒(`GET /v1/capabilities/mcp` / `GET /v1/sessions/:id/a2a` 的 503)的体**逐字**
|
|
5724
|
+
* (server 同一只组句器),形见 {@link McpPanelScenarioRefusal}。门抛的不是 typed 错仍是 500,不被改写成本键。 */
|
|
5725
|
+
scenarioRefusal: McpPanelScenarioRefusal;
|
|
5726
|
+
servers?: undefined;
|
|
5727
|
+
degraded?: undefined;
|
|
5728
|
+
};
|
|
5729
|
+
/** 两臂共有的成员(不导出:读者按 {@link McpStatusPanel} 的两臂读)。 */
|
|
5730
|
+
interface McpStatusPanelCommon {
|
|
5731
|
+
asOf: string;
|
|
5539
5732
|
/**
|
|
5540
5733
|
* **这个会话上一次真挂上了什么**(server ≥7.77.0,**可选**顶层键)。
|
|
5541
5734
|
*
|
|
5542
|
-
*
|
|
5735
|
+
* `servers` 答的是「这台 worker 的**部署缺省场景**会给你什么」;本键答的是「这个会话**最近一条
|
|
5543
5736
|
* run** 真挂上去的名册」——后者的真源是那条腿账本里**从尾向前**第一条 `wiring_manifest` 的 `mcp` 段。
|
|
5544
5737
|
* 两面**合法可不同**(请求级 MCP 注入 / 该 run 的场景不是部署缺省 / 某台当时没连上),此前只能靠翻账本
|
|
5545
5738
|
* 才看得到第二面。
|
|
@@ -5569,8 +5762,24 @@ export interface McpStatusPanel {
|
|
|
5569
5762
|
* ({@link WiringManifestMcpEntry},一字不差;零新形,同一份载荷换一条 wire 出来)。 */
|
|
5570
5763
|
mcp: WiringManifestMcpEntry[];
|
|
5571
5764
|
};
|
|
5572
|
-
[k: string]: unknown;
|
|
5573
5765
|
}
|
|
5766
|
+
/**
|
|
5767
|
+
* {@link McpStatusPanelRefused.scenarioRefusal} 的形(server ≥7.131.0)= 一只拒的体 `{ error, errorCode, ...facts }`(server `refusalBody`,整面拒与面板数据同一只组句器)。
|
|
5768
|
+
* · `errorCode` —— 今天只有 `state.scenario_assignment_unknown`(开集读:场景门日后多一种 typed 拒,同样落这里);
|
|
5769
|
+
* · `error` —— 给人读的句子(点名那个场景名与本部署的在册词表);
|
|
5770
|
+
* · `detail` —— 门拒的机读事实 `{ scenario, source }`:`source` 闭二词 `"ruling"`(中心按这位主体指派的场景本部署没有:花名册漂移)/ `"deployment"`(部署缺省 `DEFAULT_SCENARIO` 悬空,
|
|
5771
|
+
* sema-server 起服即拒这一形 —— 只有自己装配 `resolveSpec` 的嵌入方到得了)。
|
|
5772
|
+
* 调用方没有错:修法在中心(改指派)或部署(把那个场景加回册),修好后原样重试。
|
|
5773
|
+
*/
|
|
5774
|
+
export type McpPanelScenarioRefusal = {
|
|
5775
|
+
errorCode: string;
|
|
5776
|
+
error: string;
|
|
5777
|
+
detail?: {
|
|
5778
|
+
scenario: string;
|
|
5779
|
+
source: "ruling" | "deployment" | (string & {});
|
|
5780
|
+
};
|
|
5781
|
+
[k: string]: unknown;
|
|
5782
|
+
};
|
|
5574
5783
|
/**
|
|
5575
5784
|
* `POST /v1/sessions/:id/mcp/reconnect` 的 `status` 段(server ≥7.85.0 / S-381;铸点
|
|
5576
5785
|
* `src/http/routes/mcp-reconnect.ts` 的 `projectStatus`)—— core `McpServerStatus` 的**本面投影**。
|
|
@@ -6435,7 +6644,7 @@ export interface AssistantTaskStatus {
|
|
|
6435
6644
|
* 🔴 **一条规则管所有「effective 半场 only」的键**(9.7.0 立,codex 对抗复审 [high] 验真后收成这一句,
|
|
6436
6645
|
* 而不是给新加的三段各写一条特例):本型**今天唯一的消费点**是 `GET /v1/diagnostics/wiring` 的 `static`
|
|
6437
6646
|
* 半场,而标了「只在 effective 半场铸」的键(`leg` / `ask.effective` / `configFingerprint` / `tools` /
|
|
6438
|
-
* `
|
|
6647
|
+
* `mods` / `lsp` / `modelGate` / `autoMode` / `writeProtection` / `readDeny` / `autoConsolidation` / `fileHistory`)
|
|
6439
6648
|
* 在这条 wire 上**恒缺席** ⇒ **它们在本面上的缺席不携带任何信息**。
|
|
6440
6649
|
* 每一段顶注里写的那些「缺席 = 未武装 / 缺席 = 第三态」的读法**只对 live 帧成立**(`AgentEvent` 的
|
|
6441
6650
|
* `wiring_manifest` 臂),**不许**搬到这条端点的响应上来读 —— 在这里把缺席读成「未武装」,恰恰会把一台
|
|
@@ -6524,11 +6733,9 @@ export interface WiringManifest {
|
|
|
6524
6733
|
* `httpStatus` 只在 `errorCode === "http_status"` 时在场(**缺席**而不是 0)。引擎的 `error` 自由文本
|
|
6525
6734
|
* **刻意不投**(远端作者文本,脱敏单点在 core)。 */
|
|
6526
6735
|
mcp?: WiringManifestMcpEntry[];
|
|
6527
|
-
/** core 7.
|
|
6528
|
-
* 🔴 **只在 effective 半场**(live 帧)铸;静态半场恒无(core:effective half only)。
|
|
6529
|
-
|
|
6530
|
-
* {@link WiringManifestHookEntry} 顶注(行形单源,live 帧与本面同一个名字)。 */
|
|
6531
|
-
hooks?: WiringManifestHookEntry[];
|
|
6736
|
+
/** core 7.52.0,server ≥7.132.0 —— **租户可见**:这条腿的 mods 准入记录,一张注册一行(挂上 / 被拒两形)。**取代 `hooks[]`(BREAKING,零别名)**。
|
|
6737
|
+
* 🔴 **只在 effective 半场**(live 帧)铸;静态半场恒无(core:effective half only)。逐条读法见 {@link WiringManifestModEntry} 顶注(行形单源,live 帧与本面同一个名字)。 */
|
|
6738
|
+
mods?: WiringManifestModEntry[];
|
|
6532
6739
|
/** core 7.18.0(#789),server ≥7.78.0 —— **租户可见**:LSP 代码智能接缝。
|
|
6533
6740
|
* 🔴 **只在 effective 半场**铸;静态半场恒无。**在场 iff 解析出了 manager 席**,两位互相独立、禁合读
|
|
6534
6741
|
* —— 见 {@link WiringManifestLspSeam} 顶注(段形单源)。 */
|
|
@@ -7160,6 +7367,8 @@ export interface WiringDiagnostics {
|
|
|
7160
7367
|
memoryPosture?: Record<string, unknown> | null;
|
|
7161
7368
|
/** 本部署的 SQL 引擎姿态(server ≥7.60 / S-131):引擎 / 版本 / 会话隔离级 / TiDB 事务模式,读的是驱动在
|
|
7162
7369
|
* 真连接上 `SET` 完之后**回读**的值,不是 env 里写了什么。`null` = 无 SQL 后端。
|
|
7370
|
+
* server ≥7.132.0 段内多三键(加性):`maxRowBytes` / `maxPacketBytes`(库的单行墙 / 包墙,`null` = 这堵墙不存在)与 `wallSources`(两堵墙各自的出处,`reported` / `assumed`,
|
|
7371
|
+
* 见 {@link import("./errors.js").SqlWallSource})—— 413 拒体的 `wallSource` 读的就是这一处。
|
|
7163
7372
|
* 🔴 **本代 SDK 尚未逐键镜像** —— 按不透明读。 */
|
|
7164
7373
|
sqlEngine?: Record<string, unknown> | null;
|
|
7165
7374
|
/** 配置世代账的 operator 面(server ≥7.5x / #322):按组的 appliedVersion / deferredKeys+铸因 /
|