@sema-agent/sdk 24.0.0 → 26.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 +243 -6
- package/dist/client.d.ts +6 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -6
- package/dist/client.js.map +1 -1
- package/dist/device/index.d.ts +76 -12
- package/dist/device/index.d.ts.map +1 -1
- package/dist/device/index.js +90 -33
- package/dist/device/index.js.map +1 -1
- package/dist/errors.d.ts +162 -30
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +71 -35
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +53 -13
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +3 -2
- package/dist/events.js.map +1 -1
- package/dist/health.d.ts +25 -0
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js.map +1 -1
- package/dist/index.d.ts +44 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -6
- package/dist/index.js.map +1 -1
- package/dist/model-route-env/index.d.ts +129 -0
- package/dist/model-route-env/index.d.ts.map +1 -0
- package/dist/model-route-env/index.js +131 -0
- package/dist/model-route-env/index.js.map +1 -0
- package/dist/resources/adoption.d.ts +8 -2
- package/dist/resources/adoption.d.ts.map +1 -1
- package/dist/resources/adoption.js.map +1 -1
- package/dist/resources/approvals.d.ts +38 -4
- package/dist/resources/approvals.d.ts.map +1 -1
- package/dist/resources/approvals.js +19 -4
- package/dist/resources/approvals.js.map +1 -1
- package/dist/resources/fleet.d.ts +73 -18
- package/dist/resources/fleet.d.ts.map +1 -1
- package/dist/resources/fleet.js.map +1 -1
- package/dist/resources/ops.d.ts +113 -0
- package/dist/resources/ops.d.ts.map +1 -1
- package/dist/resources/ops.js +10 -0
- package/dist/resources/ops.js.map +1 -1
- package/dist/resources/principal-inbox.d.ts +62 -0
- package/dist/resources/principal-inbox.d.ts.map +1 -0
- package/dist/resources/principal-inbox.js +51 -0
- package/dist/resources/principal-inbox.js.map +1 -0
- package/dist/resources/rules.d.ts +2 -5
- package/dist/resources/rules.d.ts.map +1 -1
- package/dist/resources/rules.js.map +1 -1
- package/dist/resources/session-sync.d.ts +27 -32
- package/dist/resources/session-sync.d.ts.map +1 -1
- package/dist/resources/session-sync.js +25 -39
- package/dist/resources/session-sync.js.map +1 -1
- package/dist/resources/tool-approvals.d.ts +251 -115
- package/dist/resources/tool-approvals.d.ts.map +1 -1
- package/dist/resources/tool-approvals.js +222 -69
- package/dist/resources/tool-approvals.js.map +1 -1
- package/dist/settings.d.ts +83 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +0 -24
- package/dist/settings.js.map +1 -1
- package/dist/sse.d.ts +5 -1
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +6 -2
- package/dist/sse.js.map +1 -1
- package/dist/sync.d.ts +5 -5
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +13 -55
- package/dist/sync.js.map +1 -1
- package/dist/transport.d.ts +2 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +3 -0
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +298 -123
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -3
- package/dist/types.js.map +1 -1
- package/openapi.yaml +1014 -572
- package/package.json +6 -2
- package/dist/resources/workspace.d.ts +0 -95
- package/dist/resources/workspace.d.ts.map +0 -1
- package/dist/resources/workspace.js +0 -60
- package/dist/resources/workspace.js.map +0 -1
package/dist/types.d.ts
CHANGED
|
@@ -58,13 +58,15 @@
|
|
|
58
58
|
*/
|
|
59
59
|
import type { SemaSettings } from "./settings.js";
|
|
60
60
|
import type { ApprovalDecidedBy } from "./resources/approvals.js";
|
|
61
|
-
import type { ASK_ORIGINS, AllowRuleShadow, AskOrigin, AutoModeFallbackCause, BoundGrantAbsence, BoundSkillGrants, ClassifierUnavailable, DenialLimitFallback, PersistedRuleMandate, RuleOffer, RuleOffersAbsence, ToolApprovalCardWord, ToolApprovalFrame } from "./resources/tool-approvals.js";
|
|
61
|
+
import type { ASK_ORIGINS, AllowRuleShadow, ApprovalFrameFamily, ApprovalRequestFrame, AskOrigin, AutoModeFallbackCause, BoundGrantAbsence, BoundSkillGrants, ClassifierUnavailable, DenialLimitFallback, PersistedRuleMandate, RuleOffer, RuleOffersAbsence, ToolApprovalCardWord, ToolApprovalFrame } from "./resources/tool-approvals.js";
|
|
62
62
|
/** Authenticated end-user identity. Opaque to the service (used as memory scope + session owner). The SDK
|
|
63
63
|
* normalizes; the service does NOT validate the format. Convention: `user:` / `org:` / `ai:` / `anon:`. */
|
|
64
64
|
export type Principal = string;
|
|
65
|
-
/** Builtin scenarios of a stock `@sema-agent/server` that this SDK offers as known names — **
|
|
65
|
+
/** Builtin scenarios of a stock `@sema-agent/server` that this SDK offers as known names — **five**, all in the table its
|
|
66
66
|
* `buildScenarios()` returns (`src/capabilities/scenarios.ts`). `code` is the factory default ([891]); `default` is the
|
|
67
|
-
* domain-neutral assistant face; `scan` is the neutral read-only repo lane; `code-review` is the multi-lens review lane
|
|
67
|
+
* domain-neutral assistant face; `scan` is the neutral read-only repo lane; `code-review` is the multi-lens review lane;
|
|
68
|
+
* `cowork` (server ≥7.133.0) is the office-oriented face (`default`'s tool surface without the coding tools — file read / browsing / connector mounts — on the engine's Cowork role base;
|
|
69
|
+
* its detail card reads `toolset: "office"`). A server ≤7.132.x answers `cowork` 400 `scenario_unknown` — gate on `capabilities.scenarios` (the live vocabulary), not on this list.
|
|
68
70
|
* ⚠️ Servers ≤7.125.x list ONE more name, `discuss` (the multi-agent discussion round-table); **server 7.126.0 retired it with the whole team-orchestration
|
|
69
71
|
* surface (no alias)** — a 7.126.0+ server answers it 400 `scenario_unknown`. It was never listed here. (`Scenario` is open, so `scenario: "discuss"` still compiles; the 400 is the notice.)
|
|
70
72
|
* 🔴 CHECKED AGAINST THE SERVER, not hand-kept (K-20): `test/scenario-capabilities.test.ts` ① reads the builtin table out of
|
|
@@ -80,7 +82,7 @@ export type Principal = string;
|
|
|
80
82
|
* answers it 400 today. Removed here in K-20.
|
|
81
83
|
* Sending a retired name to a ≥5.1.0 server is a LOUD typed 400 `scenario_unknown` (the response carries the
|
|
82
84
|
* deployment's live vocabulary), not a silent fold to `default`. */
|
|
83
|
-
export declare const KNOWN_SCENARIOS: readonly ["code", "default", "code-review", "scan"];
|
|
85
|
+
export declare const KNOWN_SCENARIOS: readonly ["code", "default", "code-review", "scan", "cowork"];
|
|
84
86
|
/** One of {@link KNOWN_SCENARIOS} — derived from the value (one list, no second hand-written union). */
|
|
85
87
|
export type KnownScenario = (typeof KNOWN_SCENARIOS)[number];
|
|
86
88
|
/** Service scenario = the primary routing axis (one image serves many).
|
|
@@ -595,8 +597,8 @@ export interface TaskRequest {
|
|
|
595
597
|
/** ⚰️ **退役拼法**(整树快照纪元;S-15 / design/381,server ≥7.52 起;sdk 11.4.0 注改真,与 {@link rewindFilesTo} 同一类陈旧注 [8437] U3)。
|
|
596
598
|
* server `src/http/wire-types.ts` 逐字:仍收在 wire 上 —— 「捕获」义(`true`、不配 `resumeAt`)是被容忍的 no-op + 弃用披露;
|
|
597
599
|
* 「恢复」义(`true` + `resumeAt`)是 core 的 **typed 迁移拒**,点名 {@link restoreFiles}(恢复语义真的变了:整树 ⇒ 跟踪集,
|
|
598
|
-
* server 从不静默改写)。⇒ 新代码发 `restoreFiles`(先探 `capabilities.restoreFiles`)
|
|
599
|
-
* (
|
|
600
|
+
* server 从不静默改写)。⇒ 新代码发 `restoreFiles`(先探 `capabilities.restoreFiles`)。本键照**钉版 server 的请求面**声明:
|
|
601
|
+
* 它仍收这个拼法(上面两种答法都是它的真行为),sdk 26.0.0 的律「开形面上的退役键以钉版 server 的面为准」⇒ 留到 server 那边删的那一版同版删。 */
|
|
600
602
|
rewindFiles?: boolean;
|
|
601
603
|
/** 🔴 E18 code-only rewind(core 1.166.0 `TaskSpec.rewindFilesTo`;server「R8」)—— 把本会话编辑过的**跟踪集**文件收敛到
|
|
602
604
|
* 某一条 **user message** 那一刻的历史边界、**不** fork 对话(会话 leaf 不动,只动文件)。= CC Rewind "code"-only 模式
|
|
@@ -760,7 +762,7 @@ export interface TaskRequest {
|
|
|
760
762
|
/**
|
|
761
763
|
* server ≥7.118.0(core 7.43.0 #1354)—— **声明这条 run 上没有人能答审批**。唯一一词 `"none"`({@link APPROVAL_REACH});原样投引擎 `TaskSpec.approvalReach`。
|
|
762
764
|
*
|
|
763
|
-
* 给 `-p`
|
|
765
|
+
* 给 `-p` 这类握着流、却没有人能答审批的壳:不声明时部署的审批席照发活卡(server ≥7.134.0 起前提是提交体声明了 `settings.approvalFrameFamilies`,没声明的任务本来就收不到活卡)、wiring 清单报 `ask.effective:"human_reachable"`。声明之后活的回调不再是
|
|
764
766
|
* 这条 run 的审批人(wiring 清单 `ask.form:"declared_none"`);**有停驻设施的部署上第一次门控调用就停驻**(run `paused`)—— 要「拒了接着跑」用
|
|
765
767
|
* `permissionMode:"dontAsk"`。它**不**放行、**不**释放任何东西。引擎不把它写进检查点,续跑腿由 server 从持久化体重供。
|
|
766
768
|
* 读不出的值(集外词 / 非串)⇒ `400 request.field_invalid`。先探 {@link Capabilities.approvalReach}(缺席 = 老 server)。不发 = 零变化。
|
|
@@ -1318,7 +1320,7 @@ export interface SyncParkReceipt {
|
|
|
1318
1320
|
* 终局体不带它(不给终局造 `terminal.kind` 之外的第二真源)。同一次 park 在 `/v1/tasks/stream` 的 `done.result` 上除身份键外逐字相同;
|
|
1319
1321
|
* 恢复凭据从不在体上(`paused.token` 摘掉)。
|
|
1320
1322
|
*
|
|
1321
|
-
* ⚠️ **三代同一个型,如实登记**(本包支持地板
|
|
1323
|
+
* ⚠️ **三代同一个型,如实登记**(本包支持地板 7.52.0 ⇒ 下面三代都还在支持面内或经账本回放可达;与 {@link TaskResult.terminal} 同款:型面按现行代声明,老代的差别写在这里,
|
|
1322
1324
|
* 不把 `terminal` 做成可选去逼每个现行读点处理一个不存在的缺席分支):
|
|
1323
1325
|
* · **server ≤7.63**:平面形(见 {@link LegacyPlaneTaskResult})—— `status` 是**终局词**(`completed` / `failed` / `blocked` /
|
|
1324
1326
|
* park 两词),**没有** `terminal`,码在退役平面键(`r["errorCode"]` 经开集索引读);
|
|
@@ -1428,7 +1430,7 @@ export interface TaskResult {
|
|
|
1428
1430
|
* 两种拼法 = 一个语义面两个写者)。要五词 `status` 的消费方自己调引擎的 `terminalProjection(terminal)`。
|
|
1429
1431
|
*
|
|
1430
1432
|
* ⚠️ **跨代偏斜,如实登记**(与 8.0.0 的 `CcImportResult` 换形同款处置):本 SDK 的 server 支持地板是
|
|
1431
|
-
* **
|
|
1433
|
+
* **7.52.0**,而 `terminal` 只有 **≥7.64.0** 的 server 才发。对着 7.52–7.63 的 server(或回放那一代写下的账本行),这一座在运行期
|
|
1432
1434
|
* **缺席**(而型面上它是必填)—— 旧的平面键则仍在 wire 上,经开集索引读得到但**无类型**。
|
|
1433
1435
|
* 🔴 要同时吃两代 server 的消费方:先用 `"terminal" in result` 判形,别把型面的必填当成运行期保证。
|
|
1434
1436
|
* ⚠️ 本座**不**做成可选来「表达这件事」:可选会让 7.64.0 之后的每一个读点都被迫处理一个**不存在**的
|
|
@@ -1513,6 +1515,9 @@ export interface TaskResult {
|
|
|
1513
1515
|
* operator-only 段;显式 operator 形全量),形状归 server 契约 §G.1b,本 SDK 开形透传。**不是当前状态**:运行中名册变更走
|
|
1514
1516
|
* `tool_roster_delta` 帧;引擎没产该帧的部署形 ⇒ 键缺席。壳判零工具面读 `wiringManifest.tools.count === 0`。 */
|
|
1515
1517
|
wiringManifest?: Record<string, unknown>;
|
|
1518
|
+
/** server ≥7.133.0 · **受理告知**(同 {@link RunReceipt.warnings}):放行侧选择器清单里引擎读不出 / 名册里没有的条目,每条 {@link import("./errors.js").EntryProblem}。**有才发**;缺席 = 没有告知(含老 server)。
|
|
1519
|
+
* 同步 `POST /v1/tasks` 200 体顶层(与 `notice` 并列);异步腿在 202 回执、流式腿在首帧 `meta` 上带同一份。 */
|
|
1520
|
+
warnings?: import("./errors.js").EntryProblem[];
|
|
1516
1521
|
}
|
|
1517
1522
|
/** 🔴 **`done` 帧 result 的第二形**(契约调和车1 E,2026-08-02;server `src/http/active-run-conflict.ts:64`
|
|
1518
1523
|
* `toDoneFrameResult`,server ≥ 3.21)—— SSE 提交腿在「session 已有活跃 run」时把 409 拒绝**编码成流的终帧**,
|
|
@@ -1559,6 +1564,10 @@ export interface RunReceipt {
|
|
|
1559
1564
|
taskId: string;
|
|
1560
1565
|
sessionId: string;
|
|
1561
1566
|
status: RunStatus;
|
|
1567
|
+
/** server ≥7.133.0 · **受理告知**:提交体里放行侧选择器清单(根 `allowTools` / 子代 `allowTools`)中**引擎读不出 / 名册里没有**的条目 —— 受理照旧(引擎照常收,之后只告运维),这里让调用方当场看见「这个名字不会生效」。
|
|
1568
|
+
* 每条 {@link import("./errors.js").EntryProblem}(`reason`:引擎的词原样,或 server 自铸的 `not_in_roster`〔不在名册、也不是协议命名空间名〕)。**有才发,缺席 = 没有告知**(老 server 同缺席,不是「全部有效」的断言)。
|
|
1569
|
+
* 同一份也在同步 `POST /v1/tasks` 的 200 体顶层 `warnings`({@link TaskResult.warnings})与流式腿首帧 `meta` 的 `warnings` 上。 */
|
|
1570
|
+
warnings?: import("./errors.js").EntryProblem[];
|
|
1562
1571
|
}
|
|
1563
1572
|
/** §sandbox-image catalog(service IMAGE-API §7)— `GET /v1/images` 的目录行(visibility 按 principal scoped)。
|
|
1564
1573
|
* 门B「选沙箱模板」UI 据此渲染(profile 卡 + 能力徽章 + toolchain)。开集容多余字段;字段源自 worker → 渲染前 sanitize。 */
|
|
@@ -1647,10 +1656,9 @@ export interface ModelInfo {
|
|
|
1647
1656
|
/** S-188(server ≥7.69.0)—— 这一行对 **openai-completions 线路**的兼容声明。缺席的两种成因与
|
|
1648
1657
|
* 「整只判形」纪律见 {@link ModelCompat};anthropic 腿刻意不铸这个键(那条 brain 读的是另一张表)。 */
|
|
1649
1658
|
compat?: ModelCompat;
|
|
1650
|
-
/** #345(server ≥7.45)—— 这一行的 key↔URL 配对姿态。🔴
|
|
1651
|
-
*
|
|
1652
|
-
|
|
1653
|
-
routePairing?: RoutePairingStatus;
|
|
1659
|
+
/** #345(server ≥7.45)—— 这一行的 key↔URL 配对姿态。🔴 **恒在场**(判不了时是 `"unknown"`,而不是键消失;server 的目录投影无条件铸它)——
|
|
1660
|
+
* sdk 26.0.0 随支持底线 7.52.0 改**必有**(25.x 及以前标可选)。值域与读法见 {@link RoutePairingStatus}。 */
|
|
1661
|
+
routePairing: RoutePairingStatus;
|
|
1654
1662
|
[k: string]: unknown;
|
|
1655
1663
|
}
|
|
1656
1664
|
/**
|
|
@@ -1687,7 +1695,7 @@ export interface DroppedEntry {
|
|
|
1687
1695
|
* `GET /v1/models` 的 200 体(信封;{@link ModelsResource.list} 的返回型)。`models` / `default` / `defaultModel` 先前就有,本版起有了具名型(此前是 `list()` 上的内联形),新键挂在上面。
|
|
1688
1696
|
* · `droppedEntries` —— server ≥7.123.0 恒在场的数组:**本代目录里被读腿逐条丢掉的条目**(条目不合 settings-schema 的 `ModelEntry` 形,目录其余条目照常服务)。壳 / 管理面据此知道「我写下的哪一条引擎没收、为什么」,
|
|
1689
1697
|
* 不必自己再判一遍 schema。**键缺席 = 更早的 server**(≤7.122.x);零条被丢 = `[]`(在场的空数组),没有目录在管(env 腿)同样是 `[]` —— 消费端据此分「引擎说没丢」(`[]`)与「引擎说不了」(缺席 ⇒ 用自己的判官)。
|
|
1690
|
-
* 所以本型把它写成可选:本包的 server 支持底线是 `
|
|
1698
|
+
* 所以本型把它写成可选:本包的 server 支持底线是 `7.52.0`(7.52–7.122 的 server 不发它)。
|
|
1691
1699
|
* · **与 `models` 同一代**:两者是同一代目录的两面。候选的模型面这一组被拒时(例如默认模型不在目录里),或候选目录**一条启用条目也没有**时(幸存条目与被丢条目都按条目自己写的 `enabled` 算,
|
|
1692
1700
|
* 被丢行读不出启用与否按启用算),`models` 与 `droppedEntries` 一起停在上一代 —— 本键**不报**那份没落地候选的条目(那份候选为什么落不了地,读 `/health.modelRefusals`);
|
|
1693
1701
|
* 所以停用的被丢条目只在「有启用条目、模型面落了地」的目录里上本键。
|
|
@@ -1706,6 +1714,27 @@ export interface ModelsResponse {
|
|
|
1706
1714
|
droppedEntries?: DroppedEntry[];
|
|
1707
1715
|
/** server ≥7.126.0 · **present-iff**:当前生效的配置是因候选判官整拒了最近一份候选而回落的那一份时在场(见 {@link CandidateRejected});缺席不下「无拒」的结论(也可能是更早的 server)。 */
|
|
1708
1716
|
candidateRejected?: CandidateRejected;
|
|
1717
|
+
/** server ≥7.133.0 · **恒在场,追加在应答最末**:**这台引擎服务的是哪张模型表 / 目录采纳了没有 / 起服路由判官怎么说** —— 壳读这一格,不自己预测(判官的输入是服务进程的事实,壳拼不出,镜像两道判会随时间与真判官漂开)。
|
|
1718
|
+
* 键缺席 = 更早的 server(≤7.132.x)。读法与四个字段见 {@link ModelPlane}。 */
|
|
1719
|
+
modelPlane?: ModelPlane;
|
|
1720
|
+
}
|
|
1721
|
+
/**
|
|
1722
|
+
* `GET /v1/models.modelPlane`(server ≥7.133.0;**恒在场**,纯数据,条件键缺席、不铸 `null` / 空串)—— 「这台引擎服务的是哪张模型表」的**唯一读口**。引擎起来之后以它为准,**不再自己预测 / 自判**
|
|
1723
|
+
* (这也是 server 包根删掉 `judgeModelRouteGap`〔嵌入方 BREAKING〕的出路:读本格,或自建装配调 `judgeServedModelRoute`)。四个字段,两根轴:
|
|
1724
|
+
* · `servedTable` —— **谁在服**:`env`(env 表:`MODEL_ID` / `MODEL_CHEAP_ID` 铸的 `{default, [id]}`,**没有目录在管** —— 没配目录 / 配置源不可达且无上一份 / 候选被整拒 / 候选没有一条启用条目)/ `catalog`(目录表:一份目录的模型面落地之后
|
|
1725
|
+
* 整张换掉 env 表,引擎从不再读 env `MODEL_ID`);
|
|
1726
|
+
* · `catalog` —— **最近一份目录候选的结局**:`refused`(候选被整拒:候选判官整拒,或模型面组拒;没有上一份时服务的是 env 表,有上一份时仍服目录表 —— 谁在服归 `servedTable` 答,**不在这一格里合并**;逐条被拒的条目不是整拒)/
|
|
1727
|
+
* `adopted`(没有整拒、且服务的是目录表)/ `absent`(没有整拒、且服务的是 env 表:没配目录源 / 配了但没有启用条目 / 纯 env 部署)。⚠️ `adopted` 说的是「没有被判官整拒」,**不是**「最新候选已落地」(那一问归 `/health` 的世代账);
|
|
1728
|
+
* · `refusalCode` / `gap` —— **起服路由判官对当前配置的判决**(通过 ⇒ 两键**缺席**;进程既然起来了,正常是缺席,测试夹具 / 自建装配 / 不拒启的入口可能在场 —— 如实投)。`refusalCode`:`config.model_route_endpoint_missing` /
|
|
1729
|
+
* `config.gateway_fallback_without_primary`(路由端点族两码);`gap` 是同一次判决的**出路轴**:`endpoint_missing`(缺网关端点:设 `MODEL_GATEWAY_BASEURL` 或给条目自己的 `baseUrl`)/ `lane_credential_missing`(用户选的是 anthropic 车道,
|
|
1730
|
+
* 却因两把钥匙都没有而没装上路由、落进了没有端点的 openai 腿;补 `ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` 之一)。**不带句子**(拒因句只走日志与起服错误)。
|
|
1731
|
+
* 全部词表属主在 server,**开集读**(`switch` 带 default 臂;未知词按「未知」处置,别当通过)。
|
|
1732
|
+
*/
|
|
1733
|
+
export interface ModelPlane {
|
|
1734
|
+
servedTable: "env" | "catalog" | (string & {});
|
|
1735
|
+
catalog: "absent" | "adopted" | "refused" | (string & {});
|
|
1736
|
+
refusalCode?: "config.model_route_endpoint_missing" | "config.gateway_fallback_without_primary" | (string & {});
|
|
1737
|
+
gap?: "endpoint_missing" | "lane_credential_missing" | (string & {});
|
|
1709
1738
|
}
|
|
1710
1739
|
/**
|
|
1711
1740
|
* `GET /v1/models` 顶层 `candidateRejected`(server ≥7.126.0;**additive,present-iff**):**最近一次配置候选被候选判官整拒的结论**。
|
|
@@ -2897,7 +2926,7 @@ export type DeniedBy = "policy" | "hook" | "org" | "persisted_rule" | "classifie
|
|
|
2897
2926
|
*/
|
|
2898
2927
|
export type PermissionMode = "default" | "acceptEdits" | "plan" | "auto" | "bypassPermissions" | "dontAsk";
|
|
2899
2928
|
/**
|
|
2900
|
-
* 一只问**属于哪一类**(core `ASK_CLASSES`:7.34.0 铸二十词,core 7.39.0 起 `shell_floor` 入册 ⇒ 二十一词,core 7.40.0 起 `unstated` 入册 ⇒ 二十二词,core 7.41.0 起 `requires_user_interaction` 入册 ⇒ 二十三词,core 7.43.0 起 `classifier_no_ruling` 入册 ⇒ 二十四词,core 7.45.0 起 `dangerous_delete` 入册 ⇒ 二十五词,core 7.49.0 起 `unverifiable_shell_text` 入册 ⇒ 二十六词(同版写目标落点读不出那一类改拼 `target_unresolved`,旧拼法见 README 22.0.0 迁移表),**core 7.51.0 / server ≥7.129.0 起 `governance_unavailable` 并入 `rule_unreadable` ⇒ 二十五词**(23.0.0 BREAKING,零别名;7.128.x 停驻的卡 / 行由 server 起服一次性改写)
|
|
2929
|
+
* 一只问**属于哪一类**(core `ASK_CLASSES`:7.34.0 铸二十词,core 7.39.0 起 `shell_floor` 入册 ⇒ 二十一词,core 7.40.0 起 `unstated` 入册 ⇒ 二十二词,core 7.41.0 起 `requires_user_interaction` 入册 ⇒ 二十三词,core 7.43.0 起 `classifier_no_ruling` 入册 ⇒ 二十四词,core 7.45.0 起 `dangerous_delete` 入册 ⇒ 二十五词,core 7.49.0 起 `unverifiable_shell_text` 入册 ⇒ 二十六词(同版写目标落点读不出那一类改拼 `target_unresolved`,旧拼法见 README 22.0.0 迁移表),**core 7.51.0 / server ≥7.129.0 起 `governance_unavailable` 并入 `rule_unreadable` ⇒ 二十五词**(23.0.0 BREAKING,零别名;7.128.x 停驻的卡 / 行由 server 起服一次性改写),**core 7.54.0 / server ≥7.134.0 起 `cross_boundary` 入册 ⇒ 二十六词**;模式 × 类仲裁表的列)。K-32 扩项 / server ≥7.106.0 起出现在
|
|
2901
2930
|
* {@link ModeRelease.askClass} / `.classes` 与 deny 臂的 `askClass` / `classes` 上,以及通告 `permission.ask_released_by_mode` 的 detail 里;
|
|
2902
2931
|
* K-37 扩项 / server ≥7.109.0(S-934 ②)起也在审批面:活卡帧 / 卡面 / 运维队列行 / `/stream` `pending` 帧的 `askClass` / `classes`
|
|
2903
2932
|
* (同样经 core `isAskClass` 筛,读不出整对不投;见 {@link import("./resources/tool-approvals.js").ToolApprovalFrame.askClass})。
|
|
@@ -2940,7 +2969,11 @@ export type AskClass = "content_question" | "hook" | "ancestor"
|
|
|
2940
2969
|
* denial-limit 回落那一行(只有人的答清得掉;**免疫 bypass**,allow 规则清不掉,分类器不再被问)。活卡帧 / 收件箱行另带成因 {@link import("./resources/tool-approvals.js").ToolApprovalFrame.classifierNoRuling}。 */
|
|
2941
2970
|
| "classifier_no_ruling"
|
|
2942
2971
|
/** core 7.41.0 / server ≥7.116.0:服务器工具申报声明「每次调用都要用户在场」(见本型顶注)—— **不在** `bypassPermissions` 可放的类里,只有人的答清得掉。 */
|
|
2943
|
-
| "requires_user_interaction"
|
|
2972
|
+
| "requires_user_interaction"
|
|
2973
|
+
/** core 7.54.0 / server ≥7.134.0:**跨边界确认**(设备车道的发射闸)—— 这条 run 执行在部署信任边界之外的设备上、部署是多租形(`REQUIRE_PRINCIPAL=true`),
|
|
2974
|
+
* 一次落到组织侧的写 —— 或在一次离目标读之后、发回设备的调用 —— 由部署的审批人逐次确认:常驻 allow 规则与任何自动车道都答不了它,配置给的放行被拒。
|
|
2975
|
+
* 卡上同带 `mandate: "cross_boundary_taint"`({@link import("./resources/tool-approvals.js").PersistedRuleMandate})。只在执行于目标设备的树上出现,宿主车道永不出现;**免疫 bypass**。 */
|
|
2976
|
+
| "cross_boundary" | "operator_forced"
|
|
2944
2977
|
/** core 7.39.0(#1260;server ≥7.113.0 提货):运维旋钮 `shellGate: "always"` 在**跑 shell 的席位**上的地板 —— `operator_always` 授权词所披露的那一问,
|
|
2945
2978
|
* 自己成一类,免得持有另一种强制问的类集把它藏掉。与 `operator_forced` 同样**免疫 bypass**(不在 `bypassPermissions` 可放的类里)。 */
|
|
2946
2979
|
| "shell_floor"
|
|
@@ -3006,7 +3039,7 @@ export type GateRecordAskClass = AskClass | GateRecordRetiredWord<"askClass">;
|
|
|
3006
3039
|
export type GateRecordDeniedBy = DeniedBy | GateRecordRetiredWord<"deniedBy">;
|
|
3007
3040
|
/** 门记录上的模式放行理由 = 今天的一员 `target_unresolved`(core `MODE_RELEASE_REASONS`)∪ 档案词(7.122.0–7.125.x 的旧拼法 / 7.126.x 及以前的 `rule_unreadable`)。 */
|
|
3008
3041
|
export type GateRecordModeReleaseReason = "target_unresolved" | GateRecordRetiredWord<"modeReleaseReason">;
|
|
3009
|
-
/** 门记录上的强制词 = {@link PersistedRuleMandate}(
|
|
3042
|
+
/** 门记录上的强制词 = {@link PersistedRuleMandate}(今天的全集)∪ 档案词(7.49.0 前的旧拼法)。 */
|
|
3010
3043
|
export type GateRecordPersistedRuleMandate = PersistedRuleMandate | GateRecordRetiredWord<"persistedRuleMandate">;
|
|
3011
3044
|
/** 门记录上的出身词 = core `ASK_ORIGINS`(今天的十二词)∪ 档案词(`unresolvable`,core 7.14.0 改名 `ancestor_marked`)。🔴 门记录这一面引擎判成员,所以是**闭集**
|
|
3012
3045
|
* —— 与卡面上开集读的 {@link AskOrigin} 不同面(卡面 server 只判非空串)。 */
|
|
@@ -3026,7 +3059,7 @@ export interface ModeRelease {
|
|
|
3026
3059
|
classes: GateRecordAskClass[];
|
|
3027
3060
|
/** 卡上本会显示的 origin(与 {@link GateOutcome.origin} 同一张表;本面按引擎档案闭集筛)。 */
|
|
3028
3061
|
origin?: GateRecordAskOrigin;
|
|
3029
|
-
/** 卡上本会显示的强制词(
|
|
3062
|
+
/** 卡上本会显示的强制词(今天的全集 ∪ 档案词,见 {@link GateRecordPersistedRuleMandate})。 */
|
|
3030
3063
|
mandate?: GateRecordPersistedRuleMandate;
|
|
3031
3064
|
/**
|
|
3032
3065
|
* 🔴 放行**越过了什么**:一个词,取 core `MODE_RELEASE_REASONS` 数组序里这只 ask 的类集持有的**第一位**;类集不持有任何成员 ⇒ 缺席。
|
|
@@ -3628,6 +3661,8 @@ export type TraceBlock = {
|
|
|
3628
3661
|
* - `prompt-assembled` — `{ seq, ...PromptManifestRow }` (server ≥1.219): the prepare's assembly manifest — the stored
|
|
3629
3662
|
* ledger row verbatim (server ≥7.132.0: the v3 row `identity`/`selectors`/`blocks`/`sections`/…, or a
|
|
3630
3663
|
* row written by ≤7.131.x carrying `constitution`; see {@link PromptManifestRow}). MULTIPLE per task on cascade/verify runs.
|
|
3664
|
+
* - `cross-boundary-taint` — `{ seq, ...CrossBoundaryTaintRow }` (server ≥7.134.0): the device lane's cross-boundary taint row, only on a tree that
|
|
3665
|
+
* executes on a target device (never on the host lane). See {@link CrossBoundaryTaintRow}.
|
|
3631
3666
|
* - `turn` — `{ seq, tokens? }` a turn boundary (+ usage if present).
|
|
3632
3667
|
* - `done` — `{ seq, suspended? }` terminal (suspended:true = paused on HITL, NOT completed).
|
|
3633
3668
|
* - `error` — `{ errorCode, message }` terminal failure / `WORKER_DOWN` (stalled) / `STREAM_MAX_DURATION` /
|
|
@@ -3642,17 +3677,17 @@ export type TraceBlock = {
|
|
|
3642
3677
|
* precisely typed. The union stays OPEN — an `event` value this SDK doesn't yet know about still narrows to the
|
|
3643
3678
|
* trailing catch-all member (bare `Record<string, unknown>` data, exactly the old behavior), so a new server-side
|
|
3644
3679
|
* frame type never breaks compilation; it only arrives less precisely typed until the SDK catches up. */
|
|
3645
|
-
/** 🔴 契约调和车1 G(2026-08-02):每个臂的 `data`
|
|
3646
|
-
* (server [2373]C-12 起双发:`src/trace/project.ts
|
|
3647
|
-
* meta 帧同批 `routes/trace-usage.ts
|
|
3648
|
-
*
|
|
3680
|
+
/** 🔴 契约调和车1 G(2026-08-02):每个臂的 `data` 都携一个 `type` = **该臂的 `event` 名**
|
|
3681
|
+
* (server [2373]C-12 起双发:`src/trace/project.ts` 的 `mapTraceEvent` 恒铸 `data: { type: mapped.event, ...mapped.data }`,
|
|
3682
|
+
* meta 帧同批 `routes/trace-usage.ts`)。**server ≥ 5.0.0 恒发** ⇒ sdk 26.0.0 随支持底线 7.52.0 在每只具名臂上改**必有**(25.x 及以前标可选);
|
|
3683
|
+
* 兜底开集臂不变(未知事件的 `data` 照旧按 `Record<string, unknown>` 读)。
|
|
3649
3684
|
* 为什么它不是冗余装饰:一层**剥掉 SSE `event:` 行**的代理/中继(只把 `data:` JSON 往下游转的 BFF)之后,
|
|
3650
3685
|
* `type` 是消费方唯一还能分派的键 —— 那种场景按它分派;`event` 行在场时仍以 `event` 为准(两者恒相等)。 */
|
|
3651
3686
|
export type TraceStreamEvent = {
|
|
3652
3687
|
event: "meta";
|
|
3653
3688
|
id?: string;
|
|
3654
3689
|
data: {
|
|
3655
|
-
type
|
|
3690
|
+
type: "meta";
|
|
3656
3691
|
version: number;
|
|
3657
3692
|
mode: string;
|
|
3658
3693
|
resumeFrom?: number;
|
|
@@ -3661,7 +3696,7 @@ export type TraceStreamEvent = {
|
|
|
3661
3696
|
event: "block-thinking-delta";
|
|
3662
3697
|
id?: string;
|
|
3663
3698
|
data: {
|
|
3664
|
-
type
|
|
3699
|
+
type: "block-thinking-delta";
|
|
3665
3700
|
seq: number;
|
|
3666
3701
|
text: string;
|
|
3667
3702
|
};
|
|
@@ -3669,7 +3704,7 @@ export type TraceStreamEvent = {
|
|
|
3669
3704
|
event: "block-content-delta";
|
|
3670
3705
|
id?: string;
|
|
3671
3706
|
data: {
|
|
3672
|
-
type
|
|
3707
|
+
type: "block-content-delta";
|
|
3673
3708
|
seq: number;
|
|
3674
3709
|
text: string;
|
|
3675
3710
|
};
|
|
@@ -3677,7 +3712,7 @@ export type TraceStreamEvent = {
|
|
|
3677
3712
|
event: "tool-call";
|
|
3678
3713
|
id?: string;
|
|
3679
3714
|
data: {
|
|
3680
|
-
type
|
|
3715
|
+
type: "tool-call";
|
|
3681
3716
|
seq: number;
|
|
3682
3717
|
id: string;
|
|
3683
3718
|
name: string;
|
|
@@ -3690,7 +3725,7 @@ export type TraceStreamEvent = {
|
|
|
3690
3725
|
event: "tool-result";
|
|
3691
3726
|
id?: string;
|
|
3692
3727
|
data: {
|
|
3693
|
-
type
|
|
3728
|
+
type: "tool-result";
|
|
3694
3729
|
seq: number;
|
|
3695
3730
|
callId: string;
|
|
3696
3731
|
label?: string;
|
|
@@ -3710,14 +3745,21 @@ export type TraceStreamEvent = {
|
|
|
3710
3745
|
event: "prompt-assembled";
|
|
3711
3746
|
id?: string;
|
|
3712
3747
|
data: {
|
|
3713
|
-
type
|
|
3748
|
+
type: "prompt-assembled";
|
|
3714
3749
|
seq: number;
|
|
3715
3750
|
} & PromptManifestRow;
|
|
3751
|
+
} | {
|
|
3752
|
+
event: "cross-boundary-taint";
|
|
3753
|
+
id?: string;
|
|
3754
|
+
data: {
|
|
3755
|
+
type: "cross-boundary-taint";
|
|
3756
|
+
seq: number;
|
|
3757
|
+
} & CrossBoundaryTaintRow;
|
|
3716
3758
|
} | {
|
|
3717
3759
|
event: "turn";
|
|
3718
3760
|
id?: string;
|
|
3719
3761
|
data: {
|
|
3720
|
-
type
|
|
3762
|
+
type: "turn";
|
|
3721
3763
|
seq: number;
|
|
3722
3764
|
tokens?: unknown;
|
|
3723
3765
|
};
|
|
@@ -3725,7 +3767,7 @@ export type TraceStreamEvent = {
|
|
|
3725
3767
|
event: "done";
|
|
3726
3768
|
id?: string;
|
|
3727
3769
|
data: {
|
|
3728
|
-
type
|
|
3770
|
+
type: "done";
|
|
3729
3771
|
seq: number;
|
|
3730
3772
|
suspended?: boolean;
|
|
3731
3773
|
};
|
|
@@ -3733,7 +3775,7 @@ export type TraceStreamEvent = {
|
|
|
3733
3775
|
event: "error";
|
|
3734
3776
|
id?: string;
|
|
3735
3777
|
data: {
|
|
3736
|
-
type
|
|
3778
|
+
type: "error";
|
|
3737
3779
|
errorCode: string;
|
|
3738
3780
|
message: string;
|
|
3739
3781
|
};
|
|
@@ -3893,13 +3935,13 @@ export type WorkflowStreamEvent =
|
|
|
3893
3935
|
* 和『流正常结束』混为一谈」。此前 SDK 只声明了 `message` ⇒ 想按机器码分支的人 TS 直接报 `errorCode`
|
|
3894
3936
|
* 不存在,只能退回锚文案(server 明确想消灭的那个姿势)。
|
|
3895
3937
|
* 同一份 `types.ts` 里 runs/trace 那条流的 error 臂声明的就是 `{errorCode, message}` —— SDK 内部此前
|
|
3896
|
-
*
|
|
3938
|
+
* 自己就不一致。sdk 26.0.0 起 `type` 与 `errorCode` 都**必有**(支持底线 7.52.0 的 server 已恒铸这两键;此前因地板早于该键落地标可选)。 */
|
|
3897
3939
|
| {
|
|
3898
3940
|
event: "error";
|
|
3899
3941
|
id?: string;
|
|
3900
3942
|
data: {
|
|
3901
|
-
type
|
|
3902
|
-
errorCode
|
|
3943
|
+
type: "error";
|
|
3944
|
+
errorCode: string;
|
|
3903
3945
|
message: string;
|
|
3904
3946
|
};
|
|
3905
3947
|
}
|
|
@@ -3982,7 +4024,9 @@ export interface McpServerSpec {
|
|
|
3982
4024
|
/** Caller-side per-tool safety-axis overrides, keyed by the server's remote (un-namespaced) tool name.
|
|
3983
4025
|
* #272:`effect` 是 core 的**三词**枚举(`read`/`write`/`idempotent`——core ToolAxes 同名字段),此前
|
|
3984
4026
|
* 这里只列两词,漏 `idempotent`(server `task-mcp.ts` 的形状校验一直按三词收,发 `idempotent` 一直
|
|
3985
|
-
* 合法生效,只是本类型把它标红)。
|
|
4027
|
+
* 合法生效,只是本类型把它标红)。
|
|
4028
|
+
* 🔴 引擎的 `boundaryFlow` 成员(core 7.54.0:声明一只**引擎专用**工具)**只在部署腿上受理**:请求体 `mcpServers[i].toolAxes.<tool>.boundaryFlow` ⇒ server ≥7.134.0
|
|
4029
|
+
* 新提交 `400 request.field_invalid` 点名(A2A 对端同键 ⇒ 那条对端不挂、运维 warn 点名);本型刻意不声明它。 */
|
|
3986
4030
|
toolAxes?: Record<string, {
|
|
3987
4031
|
effect?: "read" | "write" | "idempotent";
|
|
3988
4032
|
egress?: boolean;
|
|
@@ -3994,12 +4038,16 @@ export interface McpServerSpec {
|
|
|
3994
4038
|
* 出现读器不认的键(`pathTraget` 笔误)都算——覆盖层是**收窄**声明,丢它 = 那只工具无面挂载、运维声明的保护
|
|
3995
4039
|
* 静默失效。请求腿进 `mcp_injection_dropped{dropped:[name]}` 点名;形合但语义坏(`pathTarget.param` 不在工具
|
|
3996
4040
|
* 物化后的 schema 上)由引擎拒**那一只**工具并出 `config.tool_face_invalid` 通告(operator 面)。三条腿(请求 /
|
|
3997
|
-
* config-center / 本地 config.d)同一条规则。
|
|
4041
|
+
* config-center / 本地 config.d)同一条规则。
|
|
4042
|
+
* 🔴 **server ≥7.134.0:判官换成引擎包根的 `readToolFaces`,在受理口判** —— 坏形的新提交整条 `400 request.field_invalid`(点名成员;续跑重放:整条 server 不进):
|
|
4043
|
+
* 空工具名、保留审批卡、`pathTarget.access` 不在闭集 `read` / `create` / `edit`(写成 `"write"` 拒)、`pathTarget.base: "root"` 而 `access` 不是 `read`、单独的 `patternParam`、
|
|
4044
|
+
* 未知成员、安全轴写成面成员、非布尔旗;部署腿(中心 / `config.d`)的坏声明 ⇒ 整任务 `config.tool_face_invalid`。拒句里的工具名由引擎读器回显(控制符折空格、有界)。 */
|
|
3998
4045
|
toolFaces?: Record<string, McpToolFace>;
|
|
3999
4046
|
/** server ≥7.132.0(受理键;core `McpServerSpec.startupTimeoutMs`):**这台**服务器的启动上限(整毫秒)—— 握手(连接 + initialize)与初次工具列举各带它。
|
|
4000
4047
|
* 读序一只函数:本键 › 进程级 `MCP_TIMEOUT` › MCP SDK 自己的 60 000 ms ⇒ 启动卡住的一台按自己的钟被切,兄弟照用部署的钟;只界启动阶段(调用自己的超时不动)。
|
|
4001
|
-
* 合法范围 1 000 – 2 147 483 647
|
|
4002
|
-
*
|
|
4048
|
+
* 合法范围 1 000 – 2 147 483 647。🔴 **server ≥7.134.0:值形判官是引擎包根的 `mcpStartupTimeoutMs`,在受理口判** —— 坏值(数字串 / 小数 / 越界 / `null`)的新提交
|
|
4049
|
+
* `400 request.field_invalid`(原因句是引擎的);server 7.132.0–7.133.x 照常受理、引擎在拨号时**只拒这一台**(`config.mcp_startup_timeout_invalid`,兄弟照挂)。
|
|
4050
|
+
* 老 server(≤7.131.x)对它答 `400 request.body_shape`(`unknownKeys` 点名)。 */
|
|
4003
4051
|
startupTimeoutMs?: number;
|
|
4004
4052
|
}
|
|
4005
4053
|
/**
|
|
@@ -4086,7 +4134,7 @@ interface PermissionModeAutoBase {
|
|
|
4086
4134
|
* `capabilities.permissionModeAuto` 的**两代形**(判别位 = `armed` 的**三态**)。
|
|
4087
4135
|
*
|
|
4088
4136
|
* 🔴 **武装两键(`armed` / `reason`)是 server ≥7.57.0(S-80)才有的**,而本包声明的
|
|
4089
|
-
* 支持地板是 **
|
|
4137
|
+
* 支持地板是 **7.52.0** ⇒ 每一台 7.52.0–7.56.0 的 server 都在承诺面内,它们**只发** {@link PermissionModeAutoBase}
|
|
4090
4138
|
* 那三位(亲核 server tag `v7.50.0` / `v7.56.0` 的 `routes/capabilities.ts` 逐字确认)。
|
|
4091
4139
|
* 🔴 **K-35(server 7.107.0 / S-899,wire-changes R2,BREAKING)**:7.57.0–7.106.0 还随武装两键发一只极性位 `intentArming`(7.106.0 起单极恒真),
|
|
4092
4140
|
* 7.107.0 起**恒缺席**,本包**删声明**(零别名、零双读)。老 server 发来的那只旧键落进 {@link PermissionModeAutoBase} 的透传索引签名
|
|
@@ -4179,19 +4227,10 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4179
4227
|
generationEcho?: boolean;
|
|
4180
4228
|
[k: string]: unknown;
|
|
4181
4229
|
};
|
|
4182
|
-
/**
|
|
4183
|
-
*
|
|
4184
|
-
* `
|
|
4185
|
-
|
|
4186
|
-
* `/v1/sessions/:id/workspace*` 路由形保留但恒答 501 `capability.workspace_retired`(拒因点名纪元退役,
|
|
4187
|
-
* 不让消费端拿 404 猜拼写)。per-edited-file rewind 历史没有「整个工作区」的 manifest 可投影 ——
|
|
4188
|
-
* 将来若需「rewind 覆盖面」浏览是一个 NEW 面,不是把这个名字接回去。消费姿势不变:探本位,false 即不渲。 */
|
|
4189
|
-
workspace?: false | {
|
|
4190
|
-
browse?: boolean;
|
|
4191
|
-
archive?: boolean;
|
|
4192
|
-
maxFileBytes?: number;
|
|
4193
|
-
[k: string]: unknown;
|
|
4194
|
-
};
|
|
4230
|
+
/** 工作区浏览面的能力位 —— **支持面内恒 `false`**(server ≥7.52,S-15 / design/381:整树快照纪元退役;四条 `/v1/sessions/:id/workspace*` 路由形保留但恒答
|
|
4231
|
+
* 501 `capability.workspace_retired`)。per-edited-file rewind 历史没有「整个工作区」的 manifest 可投影 —— 将来若有「rewind 覆盖面」浏览,那是一个新面,不是把这个名字接回去。
|
|
4232
|
+
* ⚰️ sdk 26.0.0 删了这一位的对象臂(`{ browse, archive, maxFileBytes }`,server 1.299–7.51)与 `client.workspace` 四动词(底线 7.52.0 之下才有)。 */
|
|
4233
|
+
workspace?: false;
|
|
4195
4234
|
/** `POST /v1/leader` 车道位。**server ≥7.122.0 读两个条件的合取**:leader 面在场(`LEADER_ENABLED` 等挂着)**且**运维入口地板收 leader 提交 ——
|
|
4196
4235
|
* 后者与受理口 422 `request.autonomy_lane_refused` 读**同一对判据**(入口词是 `plan` 的 leader run 没有计划审阅通道)。所以运维 `AUTONOMY=plan` 的部署上本位读 **false**
|
|
4197
4236
|
* (直接提交仍答 422 `request.autonomy_lane_refused`);`AUTONOMY=read-only` / `ask` / 缺席时本位随面在场。面缺席的 false 在提交时答 501 `capability.leader_endpoint_required`
|
|
@@ -4256,6 +4295,12 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4256
4295
|
* **逐字相同**(SQL 供给面在场 ∧ principal→org 成员折叠面在场),true ⟺ 面真能打通——只有 store 没有
|
|
4257
4296
|
* 成员性判据的部署刻意报 false(且不挂载路由)。probe before use,勿 trial-by-501。 */
|
|
4258
4297
|
sharedMemory?: boolean;
|
|
4298
|
+
/**
|
|
4299
|
+
* server ≥7.133.0(`routes/capabilities.ts` 的 `principalInboxDelivery`,布尔,**会变**)—— 跨主体投递门 `POST /v1/principal-inbox/messages`({@link import("./resources/principal-inbox.js").PrincipalInboxResource.send})在不在:
|
|
4300
|
+
* 为真 ⟺ 那一口可用(投递门在座:env `PRINCIPAL_INBOX_ASSISTANT` 打开且门的依赖齐备);门缺席 ⇒ 那一口答 **501 `capability.unavailable`**。**位缺席 = 老 server**(没有那一口,路由级 404)。
|
|
4301
|
+
* 按位 gate,别 trial-by-501。
|
|
4302
|
+
*/
|
|
4303
|
+
principalInboxDelivery?: boolean;
|
|
4259
4304
|
/** design/183 form b 收编面(`POST /v1/adoption` + `GET /v1/adoption/:id`,operator lane)已挂供给。
|
|
4260
4305
|
* server 谓词与 handleAdoption 的 501 同源(SQL backend 的 adoptionLog 工厂在场;local 后端诚实缺席)。
|
|
4261
4306
|
* probe before use,勿 trial-by-501。 */
|
|
@@ -4429,6 +4474,19 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4429
4474
|
outputStyle?: boolean;
|
|
4430
4475
|
env?: boolean;
|
|
4431
4476
|
hooks?: boolean;
|
|
4477
|
+
/** server ≥7.133.0:请求 `settings.hooks[]` 的**插件上下文**键(命令条目的 `plugin { name, root, dataDir?, options? }` 与 exec 形 `args`)这台部署受不受理——与 {@link hooks} **同一谓词**(单用户真、多租假)。
|
|
4478
|
+
* **见位才发**:位缺席 = 老 server,静默剥掉这些键(不报错);位为 `false` 同——发了也是剥。 */
|
|
4479
|
+
pluginHooks?: boolean;
|
|
4480
|
+
/** server ≥7.133.0:请求 `settings.hooks[]` 的**组来源**键 `source`(托管 / 非托管车道:`managedPolicy` / `managedPlugin:<name>` 跑在独立托管车道)这台部署受不受理——与 {@link hooks} 同一谓词。
|
|
4481
|
+
* 见位才给组标 `source`;位缺席 / `false` = 静默剥掉(托管车道语义不生效,不是拒)。 */
|
|
4482
|
+
managedHookGroups?: boolean;
|
|
4483
|
+
/** server ≥7.133.0:**只收紧座位表**恒受理——请求 `settings.readDenyPatterns` / `settings.writeProtectedExtra` / `settings.complianceAdditionalDenies` / `settings.permissions.neverAuto` 四键
|
|
4484
|
+
* (见 {@link SemaSettings} 对应成员):每座 = 部署表 ∪ 请求列表,**只增不减**,空数组 ≡ 没送。恒 `true`;**位缺席 = 老 server —— 对这四键答 400 `request.body_shape`,见位才发**。 */
|
|
4485
|
+
tightenOnlySeats?: boolean;
|
|
4486
|
+
/** server ≥7.134.0:请求键 {@link import("./settings.js").SemaSettings.approvalFrameFamilies}(这条 run 的客户端渲染得了哪些审批开卡帧族)的**受理位**,恒 `true`(不随部署形变)。
|
|
4487
|
+
* 🔴 **触发位就是它,不是顶层 {@link Capabilities.approvalFrameFamilies}**:≤7.133.x 已有顶层位,却对这只键答 `400 request.body_shape`
|
|
4488
|
+
* (`unknownKeys: ["settings.approvalFrameFamilies"]`)—— 位缺席 ⇒ 别发这只键。 */
|
|
4489
|
+
approvalFrameFamilies?: boolean;
|
|
4432
4490
|
[k: string]: unknown;
|
|
4433
4491
|
};
|
|
4434
4492
|
/** 🔴 **server ≥7.115.0 起恒在**:`{ permissions: { allowGrant: true } }`;**≥7.117.0 起 `permissions` 多一位 `allowLayer: true`** —— 「请求体 `settings.permissions.allow` 按**哪一种读法**收」的**版本位**(wire additive;两位都是恒真、
|
|
@@ -4447,6 +4505,12 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4447
4505
|
permissions?: {
|
|
4448
4506
|
allowGrant?: boolean;
|
|
4449
4507
|
allowLayer?: boolean;
|
|
4508
|
+
/** server ≥7.133.0:**这位调用方**的信任档(按调用方、按凭据读,**不是**版本位)—— 请求里「不经人答就生效」的规则表(`settings.permissions` 各桶、被按名点用的自带技能的 `allowedTools` / `disallowedTools`)按它准入:
|
|
4509
|
+
* `allow` 放宽免问面,要 `global`;`deny` / `ask` 只收紧,任何档都收。取值:`global`(单用户 turnkey;多租户持部署 service 凭据;多租户登录令牌的 scope 角色 ≥ 治理域写角色)/ `project`
|
|
4510
|
+
* (其余:低角色 / 无角色令牌 / 直连门 principal 令牌 / 没验过的凭据)。**开集读**:词表属主在契约包(`MinTrust`),不认识的词按 `project` 处置(fail-closed)。
|
|
4511
|
+
* 低于门槛的放宽不静默丢,而是整请求 400 `request.field_invalid`(`detail.problems[].reason: "below_trust_floor"` + `detail.callerTrust`,见 {@link import("./errors.js").BelowTrustFloorExtra});
|
|
4512
|
+
* 壳在提交前读本位,低于 `global` 时把 `allow` 留给本地同意出口(答卡)。位缺席 = 老 server:不按档受理,整份 `allow` 照收。 */
|
|
4513
|
+
callerTrust?: "global" | "project" | (string & {});
|
|
4450
4514
|
[k: string]: unknown;
|
|
4451
4515
|
};
|
|
4452
4516
|
[k: string]: unknown;
|
|
@@ -4470,6 +4534,13 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4470
4534
|
/** server ≥7.118.0(`routes/capabilities.ts` 的能力对象**硬编码 true**,与请求键同一个词)—— 请求键 {@link TaskRequest.approvalReach} 认词的**版本探测位**。
|
|
4471
4535
|
* 缺席 = 老 server:别发那只键(严格体会拒)。 */
|
|
4472
4536
|
approvalReach?: boolean;
|
|
4537
|
+
/**
|
|
4538
|
+
* server ≥7.133.0(`routes/capabilities.ts` 的 `approvalReadRootGrant`,**恒在场**的布尔事实,**会变**)—— 这台部署**受理不受理**回决体里的 `readRootGrant`(「Yes, and add directory」:随这一次放行把卡上 `readRootCandidate.dir` 登进读根)。
|
|
4539
|
+
* 为真 ⇔ 单用户 host 车道姿态(与 {@link projectContext} 位同一判据——读根登记要落在这台机器的 cwd 语义上);其余恒 `false`。
|
|
4540
|
+
* 消费方的选项可见条件 = 卡上 {@link import("./resources/tool-approvals.js").ToolApprovalFrame.readRootCandidate} 在场 **∧ 本位为真**;
|
|
4541
|
+
* 非受理姿态下带 `readRootGrant` 的应答 **400 `request.body_shape`**(这只 ask 未结算,可不带该键重答)。**位缺席 = 老 server = 不受理**,别发那只键。
|
|
4542
|
+
*/
|
|
4543
|
+
approvalReadRootGrant?: boolean;
|
|
4473
4544
|
/** TaskRequest.cwd honored(`routes/capabilities.ts` 的能力对象 `cwdHonored`:local 单用户 host-adapter 才 true;多租户 fail-closed)。
|
|
4474
4545
|
* 🔴 K-32 扩项(server ≥7.106.0 / S-895):本位也是请求键 {@link TaskRequest.inheritEnv} `"all"` 的**精确兑现读数** —— 谓词(host 车道 ∧
|
|
4475
4546
|
* 非托管)与那个键的车道门 + 射程门逐组合相等(契约附录 B.1 该行 / §18)。`false` ⇒ 发 `"all"` 会拿 400(非 host 车道)或 422(托管)。 */
|
|
@@ -4504,6 +4575,12 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4504
4575
|
* `mcpProbe: true` 与 `mcpInjection: false` 是**正常**组合,不是矛盾。
|
|
4505
4576
|
*/
|
|
4506
4577
|
mcpProbe?: boolean;
|
|
4578
|
+
/**
|
|
4579
|
+
* server ≥7.133.0(`routes/capabilities.ts` 的 `mcpAssertionHeaderSent`,布尔,**今天恒 `false`**)—— **发送座自述位**:请求体 / 部署声明的 `mcpServers[].transport.assertionHeader`(server ≥7.128.0 受理的键,与 `principalHeader` 互斥)
|
|
4580
|
+
* 是否真的被**发送**到 MCP 对端。`false` ⇒ 声明被承载但**不发送**(与剥键 / 运维 info / 探测口的那一拒读同一只开关;位为真时这些披露句一并退出)。
|
|
4581
|
+
* **位缺席 ≈ `false`**(老 server 同样不发送),与 `false` 同处置 —— 别靠这个键里的头去做对端鉴权。
|
|
4582
|
+
*/
|
|
4583
|
+
mcpAssertionHeaderSent?: boolean;
|
|
4507
4584
|
/** §E23 inbound-MCP elicitation HITL(`routes/capabilities.ts` 的能力对象 `Boolean(elicitation)` = MCP_ELICITATION_ENABLED)。 */
|
|
4508
4585
|
mcpElicitation?: boolean;
|
|
4509
4586
|
/** §4④ live AskUserQuestion HITL(`routes/capabilities.ts` 的能力对象 `Boolean(question)` = ASK_QUESTION_ENABLED)。 */
|
|
@@ -4523,18 +4600,29 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4523
4600
|
* (ask 账必须**持久** —— 内存形重启即丢已接受的决议)∧ park 设施在场(checkpoint 店 + DURABLE_APPROVAL,
|
|
4524
4601
|
* = 窗口到期时的降级目的地;缺它的结局是 core fail-closed deny,比现行活卡更差,所以协议诚实地不上场)。
|
|
4525
4602
|
*
|
|
4526
|
-
* ⚠️
|
|
4527
|
-
*
|
|
4528
|
-
* `
|
|
4529
|
-
*
|
|
4530
|
-
*
|
|
4531
|
-
* `STREAM_APPROVAL_ENABLED=false` 是唯一干净还原键。7.5.0 已于 2026-08-07 上 npm,本仓的 live
|
|
4532
|
-
* 契约门(`test/live/_fence.ts` 的校准头)也已抬到 7.5.0。
|
|
4533
|
-
* ⚠️ 两段都还要读:第一段不是历史注脚,它描述**今天仍在跑的**全部 7.3.x/7.4.x 装机。
|
|
4603
|
+
* ⚠️ 部署默认位(`STREAM_APPROVAL_ENABLED` 是五合取里唯一会随版本改过默认值的一项):支持面内(server ≥7.52.0)**默认 ON** ——
|
|
4604
|
+
* 满足其余四合取的部署**默认**就在直播流上发两帧、回决端点真结算;`STREAM_APPROVAL_ENABLED=false` 是唯一干净还原键。
|
|
4605
|
+
* 🔴 **server ≥7.134.0 起,这条 run 收不收得到活卡还要看提交体**:任务 `settings.approvalFrameFamilies` 没声明的,零活卡(耐久店在场时按无人值守政策当场停驻,否则当场拒);
|
|
4606
|
+
* 本位为真只说「这台 worker 上协议上场」,不替提交体声明(见 {@link SemaSettings.approvalFrameFamilies} 与见位 `taskSettings.approvalFrameFamilies`)。
|
|
4607
|
+
* (默认 OFF 的是 server ≤7.4.0,已在支持底线之下;7.5.0 起默认 ON,server CHANGELOG 以 BREAKING 披露。)
|
|
4534
4608
|
* 🔴 别按版本号猜、也别按这段散文猜:**唯一权威是本位的实测值**(它是五合取的结果,开关只是其中一项)。
|
|
4535
4609
|
* 与 {@link Capabilities.toolApproval}(活卡腿)、{@link Capabilities.approvals}(durable checkpoint 腿)
|
|
4536
4610
|
* 三位**正交**,可以各不相同 —— 别用其中一位推断另一位。 */
|
|
4537
4611
|
streamApproval?: boolean;
|
|
4612
|
+
/**
|
|
4613
|
+
* server ≥7.133.0(`routes/capabilities.ts` 的 `approvalFrameFamilies`,**恒在场**;与 {@link streamApproval} 同一份判据结果的投影)—— 这台 worker 上**审批开卡帧属于哪个帧族**:
|
|
4614
|
+
* 闭集词数组(**至多一员**,顺序无义),消费方的分派表按它读,**不再拿 {@link streamApproval} 反推帧族**:
|
|
4615
|
+
* · `["approval_request"]` —— 呈卡协议上场:一只 ask 只走 `approval_request` → `approval_complete` / `approval_revoke` 一族,旧族 `tool_approval` / `tool_approval_complete` **一帧都不发**
|
|
4616
|
+
* (BREAKING:此前同一只 ask 两族并发、按 `approvalId` 去重;补偿 = 该 worker `STREAM_APPROVAL_ENABLED=false`);
|
|
4617
|
+
* · `["tool_approval"]` —— 呈卡协议没上场(`STREAM_APPROVAL_ENABLED=false` / 没有 store backend / 没有 checkpoint 店)但活卡腿在:只发旧族;
|
|
4618
|
+
* · `[]` —— 逐调用审批整面没开(`TOOL_APPROVAL_ENABLED=false`):**不呈卡**(这一位的 `[]` 不是「缺席」)。
|
|
4619
|
+
* 🔴 **键缺席 ≠ 空数组**:缺席 = server ≤7.132.x —— 那里 `streamApproval: true` 的腿**两族并发**(同一只 ask 先 `tool_approval`、后 `approval_request`,同带 `approvalId`),按 `approvalId` 去重。
|
|
4620
|
+
* 帧型:{@link import("./resources/tool-approvals.js").ApprovalCompleteFrame}、{@link import("./resources/tool-approvals.js").ApprovalRequestFrame}。
|
|
4621
|
+
* 🔴 **server ≥7.134.0:这一位只说「本 worker 呈卡用哪一族」,不再说「你会收到卡」** —— 一条 run 只在它的提交体声明了本位里的那个族时才有活审批通道
|
|
4622
|
+
* (请求键 {@link import("./settings.js").SemaSettings.approvalFrameFamilies},见位才发:受理位 {@link Capabilities.taskSettings}`.approvalFrameFamilies`);值本身不因声明而变。
|
|
4623
|
+
* 元素词表 = {@link import("./resources/tool-approvals.js").APPROVAL_FRAME_FAMILIES}(与请求键同一只)。
|
|
4624
|
+
*/
|
|
4625
|
+
approvalFrameFamilies?: ApprovalFrameFamily[];
|
|
4538
4626
|
/**
|
|
4539
4627
|
* #229(server ≥7.15.0,`routes/capabilities.ts` 的能力对象**硬编码 true**)—— 回决**理由**位在这台
|
|
4540
4628
|
* worker 上存在的**版本探测位**:live `POST /v1/tool-approvals/:id/respond` 收 `note` + 回执带
|
|
@@ -4624,7 +4712,9 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4624
4712
|
* 在场,而那正是 `GET /v1/device/ws` 的 upgrade 处理器挂没挂的**同一个**判据(`server.ts` 的
|
|
4625
4713
|
* `deps.deviceHub?.attach(server)`)⇒「说 yes ⟺ 设备连得上」是结构性的,executor 不必
|
|
4626
4714
|
* trial-by-upgrade-404。三个字段各答一件 executor 在**首连之前**就必须知道的事:
|
|
4627
|
-
* · `protocolVersion` —— 本 server
|
|
4715
|
+
* · `protocolVersion` —— 本 server 说的协议**修订号**(§5.6:不满足最低版 = 响亮 helloReject,**不静默降级**)。**server ≥7.133.0 起读 `2`**(≤7.132.x 读 `1`;`challenge` 帧带同值;受理窗 `[1, 2]`,
|
|
4716
|
+
* 窗内的老 executor 照连)。executor 声明的号 = 「自己实现的最高修订号」与「本位 / challenge 所带号」的**较小者**,并按声明的号取结局码集
|
|
4717
|
+
* (`@sema-agent/sdk/device` 的 `deviceOutcomeErrorCodesAt`;修订号 2 起结局码含 `liveness_no_output`);
|
|
4628
4718
|
* · `maxInflightPerDevice` —— per-device 在途上限(§5.5 背压;超额在云侧排队,到期 `device.busy`);
|
|
4629
4719
|
* · `wsPath` —— upgrade 路径。**刻意上 wire** 而不让客户端硬编码:路径是 server 铸的 wire 契约的
|
|
4630
4720
|
* 一部分,硬编码在别的仓里 = 把「改路径」变成一次跨仓破坏性变更。
|
|
@@ -4945,7 +5035,7 @@ export interface Capabilities extends EngineCapabilityBits {
|
|
|
4945
5035
|
* (关 = 这条会话的每个提交都带它;续跑腿重放同一个体,照带);
|
|
4946
5036
|
* · ⚰️ `"on-always"` —— **退役词**(server 7.104.0 起不再发出:请求词接线后「捕获中且关不掉」结构上不可达),7.97.0–7.103.x 的 worker
|
|
4947
5037
|
* 仍发它 = 捕获中且**无法按会话关闭** ⇒ 只渲一句只读真话「本部署恒捕获,无法按会话关闭」(契约附录 B.1 逐臂),别渲关不掉的开关。
|
|
4948
|
-
* 本包支持地板(
|
|
5038
|
+
* 本包支持地板(7.52.0)之内的 server 真会发它,所以它留在联合里(K-24 复审 r1 M2,偏离任务书的「硬删」,理由如实:删了 ⇒ 随包 spec
|
|
4949
5039
|
* 判一份合法的 7.103 能力面违约、消费端写不出契约要的那一臂);登记 `_keyset-divergence.ts` `CAPABILITY_RETIRED_WORDS`,
|
|
4950
5040
|
* 删除条件 = 支持地板抬过 7.104.0。
|
|
4951
5041
|
* 词表外的词按未知处理(不按前缀猜,不渲开关)。⚠️ 关掉 ≠ 删掉:部署翻成 `"off"` 不做任何批量删除。
|
|
@@ -5133,10 +5223,11 @@ export interface WriteProtectionPosture {
|
|
|
5133
5223
|
[k: string]: unknown;
|
|
5134
5224
|
}
|
|
5135
5225
|
/**
|
|
5136
|
-
* **一个部署级旋钮的值是谁定的** ——
|
|
5226
|
+
* **一个部署级旋钮的值是谁定的** —— 五词闭集,顺序即优先序(server `posture-source.ts` 的
|
|
5137
5227
|
* `POSTURE_SOURCE_WORDS`,那里是穷举 switch,加词编译红):
|
|
5138
5228
|
* · `env` —— 这台机器的 env 变量钉的(**部署主权,恒赢**任何下发值);
|
|
5139
5229
|
* · `center` —— config-center 发布的(重启生效;在本机写同名 env 即把这个键收回);
|
|
5230
|
+
* · `lane` —— 从**执行车道**派生的(server ≥7.133.0:e2b / k8s / local-docker 这类隔离型车道缺省值的来路;`READ_FACE` 缺席时读面缺省 `open` 即这一词,显式 env / center 恒赢);
|
|
5140
5231
|
* · `posture` —— 从**部署形**派生的(单用户 turnkey = `REQUIRE_PRINCIPAL` 未设);
|
|
5141
5232
|
* · `engine-default` —— 没人钉过,内建缺省在岗。
|
|
5142
5233
|
*
|
|
@@ -5144,7 +5235,7 @@ export interface WriteProtectionPosture {
|
|
|
5144
5235
|
* enum**,严格消费端读 spec。判「运维显式表态过吗」只有 `env`/`center` 两词算数 —— `posture` 派生出来的
|
|
5145
5236
|
* `true` **不是**「有人要求过」(server 自己在 S-178 踩过这一形)。
|
|
5146
5237
|
*/
|
|
5147
|
-
export type PostureSource = "env" | "center" | "posture" | "engine-default" | (string & {});
|
|
5238
|
+
export type PostureSource = "env" | "center" | "lane" | "posture" | "engine-default" | (string & {});
|
|
5148
5239
|
/**
|
|
5149
5240
|
* operator 诊断面的**一行旋钮读数**:值 + 来源 + 一句运维指路(server `posture-source.ts` 的
|
|
5150
5241
|
* `PostureKnobReading<V>`,`buildPostureKnobReading` 铸)。
|
|
@@ -5165,8 +5256,8 @@ export interface PostureKnobReading<V> {
|
|
|
5165
5256
|
}
|
|
5166
5257
|
/** READ 容纳面档位 **+ 它是谁定的**(`GET /v1/diagnostics/wiring` 的 `readFace`;server ≥7.65.0 / S-167)。
|
|
5167
5258
|
* `face` 与租户面 `capabilities.readFace` **同一份 boot 产物**(`null` = 本部署没钉档,引擎默认接管);
|
|
5168
|
-
* `source`
|
|
5169
|
-
* config-center readFace 域(重启生效)/ `posture` 单用户 turnkey 派生(REQUIRE_PRINCIPAL 未设 ⇒ `open`,
|
|
5259
|
+
* `source` 是那张五词表(见 {@link PostureSource}):`env` 本机 READ_FACE(恒赢)/ `center`
|
|
5260
|
+
* config-center readFace 域(重启生效)/ `lane` 隔离型执行车道缺省(server ≥7.133.0:`READ_FACE` 缺席时 e2b / k8s / local-docker 铸 `open`)/ `posture` 单用户 turnkey 派生(REQUIRE_PRINCIPAL 未设 ⇒ `open`,
|
|
5170
5261
|
* 7.65.0 行为变更)/ `engine-default` 没钉。`note` 是给运维的指路句。deny 表**不上**本面。 */
|
|
5171
5262
|
export interface ReadFacePosture {
|
|
5172
5263
|
face: "open" | "roots" | null;
|
|
@@ -5199,6 +5290,10 @@ export interface ScenarioDetail {
|
|
|
5199
5290
|
* =声明面(center 条目可以声明着但停用),`available`=运行面(声明着、启用着,但缺依赖跑不动)。
|
|
5200
5291
|
* 列举即可预判,不必试探。 */
|
|
5201
5292
|
available: boolean;
|
|
5293
|
+
/** server ≥7.133.0:**这个场景此刻实际承载的附件供给词** —— 席位 `capabilities.userAttachments.supplies` 的子集(同一张表的过滤读法):有手场景(工作区在某台机器上)带 `path`,
|
|
5294
|
+
* 无手场景(`toolset: "none"` / 纯对话面)去掉 `path`(带 `path` 条目的提交被引擎以 `config.user_attachment_invalid` 拒)。恒在场;**缺席 = 老 server(≤7.132.x)**,按
|
|
5295
|
+
* `Capabilities.userAttachments.supplies` + 既有 400 处置(发送前预判用本位,别试探)。 */
|
|
5296
|
+
attachmentSupplies?: Array<"path" | "content_text" | "content_image">;
|
|
5202
5297
|
/** 机读原因;仅 `available:false` 时在场(缺席=没有理由)。闭集(当前唯一成员
|
|
5203
5298
|
* `git_client_unconfigured` = scan/code-review 这类 repoTools 场景缺 GIT_API_* 配置);按键分支,
|
|
5204
5299
|
* 禁匹配英文文案。server 若扩词表=additive,未知词按「不可用但原因未知」处置。 */
|
|
@@ -5221,8 +5316,8 @@ export interface ScenarioDetail {
|
|
|
5221
5316
|
* `GET /v1/approvals` 的**信封**(`client.approvals.list()` 的返回,wire 体原样)—— server `src/http/routes/approvals-assistant.ts` 的 `approvals-list` 臂一次 `sendJson` 铸四键:
|
|
5222
5317
|
* · `pending` —— 耐久停驻行(决议走 `POST /v1/approvals/:sessionId/decide`);恒在场;
|
|
5223
5318
|
* · `serverNowMs` —— **本响应铸造时刻**的服务器钟(server ≥7.57.0;同版本恒在场)。壳渲倒计时用 `deadline − serverNowMs`,别减本机钟(钟差会让「还剩 4 分钟」的卡其实早过期);
|
|
5224
|
-
*
|
|
5225
|
-
* · `livePending?` —— 流内窗里的活 ask(server ≥7.43;决议走 `POST /v1/tool-approvals/:
|
|
5319
|
+
* 7.52–7.56.x 的 server 不带它(本包支持地板 7.52.0 之内,所以型上可选);
|
|
5320
|
+
* · `livePending?` —— 流内窗里的活 ask(server ≥7.43;决议走 `POST /v1/tool-approvals/:id/respond`)。**缺席 = 本部署没有活审批面**,`[]` = 有面、此刻无待批;
|
|
5226
5321
|
* · `crashConverged?` —— 启动时收敛掉的**审计行**(server ≥7.55.0;只在 local 车道审计店在场时在场,`[]` = 有面且无崩溃残账)。行不是队列行:无决议路由、不复活 run。
|
|
5227
5322
|
* 三族行形与决议路由各不相同,**分数组不混编**(数组名即路由判据)。
|
|
5228
5323
|
*/
|
|
@@ -5258,7 +5353,7 @@ export interface CrashConvergedRow {
|
|
|
5258
5353
|
resumeSafe: boolean;
|
|
5259
5354
|
}
|
|
5260
5355
|
/** #315(server ≥7.43)—— `GET /v1/approvals` 信封第二顶层键 `livePending` 的行:streamApproval 窗内的
|
|
5261
|
-
* **流内 ask**(此前对轮询消费端结构性不可见)。🔴 决议口=`POST /v1/tool-approvals/{
|
|
5356
|
+
* **流内 ask**(此前对轮询消费端结构性不可见)。🔴 决议口=`POST /v1/tool-approvals/{id}/respond`,
|
|
5262
5357
|
* **不是** /decide(那是 durable 行的门)——数组名即路由判据,两数组不混编。可选旗标 only-if-true
|
|
5263
5358
|
* (缺席绝不编码成 false)。
|
|
5264
5359
|
*
|
|
@@ -5268,7 +5363,7 @@ export interface CrashConvergedRow {
|
|
|
5268
5363
|
* 卡体,否则「列得到但渲不出」。⇒ 新增 {@link frame},**一视同仁给全部 live 行**(规则集不因 `suspended`
|
|
5269
5364
|
* 分叉:有活流的 ask 多带一份它自己那张卡的副本无害)。 */
|
|
5270
5365
|
export interface LivePendingRow {
|
|
5271
|
-
/** 与 respond 端点收的同一个 id(wire uuidv7
|
|
5366
|
+
/** 与 respond 端点收的同一个 id。**server ≥7.133.0:有问账行的 ask 恒等于行的键 `askId`**(64 位十六进制串)—— 当**不透明串**用,别按 uuid 解析;≤7.132.x 是 wire uuidv7。 */
|
|
5272
5367
|
approvalId: string;
|
|
5273
5368
|
toolName: string;
|
|
5274
5369
|
/** 登记时刻(epoch ms)。 */
|
|
@@ -5286,7 +5381,7 @@ export interface LivePendingRow {
|
|
|
5286
5381
|
* 上同名键同源)。此前只在 `frame` 里。 */
|
|
5287
5382
|
mandated?: true;
|
|
5288
5383
|
/** server ≥7.102.0(S-721 / core 7.32.0 #1092)—— 强制位站在哪一个词上,与 `mandated` 同层同形(在场逐字,缺席不编词);
|
|
5289
|
-
* 值 = 条目上那一个词(与 {@link frame} 上同名键同源)
|
|
5384
|
+
* 值 = 条目上那一个词(与 {@link frame} 上同名键同源)。闭集与「缺席 ≠ 不强制」见
|
|
5290
5385
|
* {@link import("./resources/tool-approvals.js").PersistedRuleMandate}。 */
|
|
5291
5386
|
mandate?: PersistedRuleMandate;
|
|
5292
5387
|
/** server ≥7.102.0(S-755 / cli L-695 / C-R111)—— ask 的**出身词**(谁提的这一问),与 `mandate` 同层同形;值 = 条目上那
|
|
@@ -5314,8 +5409,19 @@ export interface LivePendingRow {
|
|
|
5314
5409
|
* 🔴 **缺席 = 老 server(≤7.86.0)**;7.87.0 起**恒在场**(条目上是必填格),恒不铸 `null`。
|
|
5315
5410
|
* ⚠️ 帧里带 **tool input/args**(这正是本键存在的理由);它与 SSE 上那一帧**同源同字节**,消费端拿它出卡
|
|
5316
5411
|
* 即可,别再去重算一份摘要。
|
|
5412
|
+
* 🔴 **两形(25.0.0 起声明型是联合;判别位 `frame.type`)**:这一格与 SSE 上的开卡帧同源同字节,所以形随腿走 —— 在说呈卡协议的腿上(`capabilities.approvalFrameFamilies` 含 `"approval_request"`,server ≥7.133.0)
|
|
5413
|
+
* 它是 {@link import("./resources/tool-approvals.js").ApprovalRequestFrame}(`type: "approval_request"`,卡内事实在 `frame.card`,卡外十位活面事实平铺在顶层);在旧族腿上(`approvalFrameFamilies` 缺席或含 `"tool_approval"`)
|
|
5414
|
+
* 仍是 {@link ToolApprovalFrame}(`type: "tool_approval"`)。**读之前先判 `frame.type`**(或 `isApprovalRequestFrameV1(frame)`);直接读 `frame.toolName` / `frame.args` 在联合上编译不过 —— 这是 25.0.0 的迁移点。
|
|
5415
|
+
* 两形的 `approvalId` 都 === 本行的 `approvalId`(决断永远用行的 id)。
|
|
5416
|
+
*/
|
|
5417
|
+
frame?: ToolApprovalFrame | ApprovalRequestFrame;
|
|
5418
|
+
/**
|
|
5419
|
+
* server ≥7.133.0 —— **本副本上没有引擎腿在等这只问**(`"absent"`;**只记真**,缺席 = 本副本有引擎腿在等它,或老 server)。在场 ⇔ 这一行是审批机起服时从问账**接管**的问
|
|
5420
|
+
* (前一个进程 / 别的副本铸下、行仍待决 —— 「僵尸卡」):它照常列得出、照常应答得了(行落已决,应答回执同带 {@link import("./resources/tool-approvals.js").ToolApprovalRespondApplied.consumerState}),
|
|
5421
|
+
* 但这一决**不会让本副本上任何在跑的东西续跑**。壳据它渲「没有在跑的任务接着做」,别把这类行读成「这台有任务在等」;续没续跑读 run 面。
|
|
5422
|
+
* `live_pending` 帧、`GET /v1/tool-approvals/:id` 的 `pending` 臂同带这一位。重启后问账里仍待决的卡**回到** `livePending[]`(此前重启后卡不在列表、应答 404)。
|
|
5317
5423
|
*/
|
|
5318
|
-
|
|
5424
|
+
consumerState?: "absent";
|
|
5319
5425
|
}
|
|
5320
5426
|
/** S-02(server ≥7.52)—— decide 409 `approval_stale` 拒体的 additive 指路键 `currentPending`:本会话
|
|
5321
5427
|
* **当前** pending 的三件 D-1 坐标(与 §7b 队列行同名同形),壳一跳重定位免整队重拉。🔴 恒不含
|
|
@@ -5333,6 +5439,11 @@ export interface PendingCheckpoint {
|
|
|
5333
5439
|
sessionId: string;
|
|
5334
5440
|
/** Principal / 多租户 owner scope; "_" = submitted without one. */
|
|
5335
5441
|
scope: string;
|
|
5442
|
+
/** server ≥7.133.0:这一行停驻的**非密稳定身份** —— 「同一次暂停」在 token 不能去的地方(日志 / 另一读面 / 关联键)的 join 键,与 `PausedCause.checkpointId`(终帧上那一位)是**同一个值**。
|
|
5443
|
+
* 出现在三处 durable 读面:`GET /v1/approvals` 的 `pending[]` 行 · `/v1/approvals/stream` 的 `pending` 帧 · `GET /v1/assistant/inbox` 行。🔴 **读不出可信值的行照列、键缺席**
|
|
5444
|
+
* (老行 / 没过信任边界〔非串 / 空串 / 超长 / 含 token〕/ 老 server;server 计一次 `server.approvals.durable-row-checkpoint-id-missing`):**缺席读作「这一行没有可 join 的身份」**,
|
|
5445
|
+
* 别把它当必在键拿去写 join 码。 */
|
|
5446
|
+
checkpointId?: string;
|
|
5336
5447
|
/** The suspended run holding the session claim — the JOIN KEY to the task's trace
|
|
5337
5448
|
* tool-call block (block.id == toolCallId → input = full args/question payload) and the context link. */
|
|
5338
5449
|
taskId?: string | null;
|
|
@@ -5360,23 +5471,11 @@ export interface PendingCheckpoint {
|
|
|
5360
5471
|
* SQL 店里仍读不出登记门类的行**不列**(计数 `server.approvals.queue-row-gate-kind-missing`;也没有决断口绑得住它),而不是缺着这个键送出。
|
|
5361
5472
|
* ⇒ 对着 ≥7.132.0 的 server,缺席**到达不了**;对着 7.131.x 及更早的 server,缺席 = pre-`gate_kind` 的历史 SQL 行(`gate_kind` 列为 NULL)。
|
|
5362
5473
|
* 消费端对缺席的读法一句(server 契约原话):**按「读不出」fail closed**(不当 `"human"`、不编类别、不路由到任何决断口)。
|
|
5363
|
-
* ⚠️ 本位**刻意仍是可选**(与 {@link import("./errors.js").ResumeBlockedByPolicyError.blockedBy} 同一条律,K-24 复审 r1 M1):支持地板
|
|
5474
|
+
* ⚠️ 本位**刻意仍是可选**(与 {@link import("./errors.js").ResumeBlockedByPolicyError.blockedBy} 同一条律,K-24 复审 r1 M1):支持地板 7.52.0 之内的老 server(≤7.131.x)真的会缺它 ——
|
|
5364
5475
|
* 型上写必有 = 让老 server 上的缺席变成一个型说「不可能」的值。支持地板抬过 7.132.0 的那一版改必有(那时缺席不再可达)。 */
|
|
5365
5476
|
gateKind?: string;
|
|
5366
|
-
/** server 7.16.0([3684]②):同步卡早有的「别再问我这个」持久规则候选,durable 队列行补齐供给——
|
|
5367
|
-
* 数组序=展示序,EXACT 形若在场恒在首位;core 契约 basis ≤ 2,server 执法上限 4 ⇒ 消费端按 ≤4 布局
|
|
5368
|
-
* (与同步 AskRequest.ruleSuggestions 同契约)。
|
|
5369
|
-
* 🔴 **display/triage-only,耐久腿无兑付口**:`POST /v1/approvals/:sessionId/decide` 的体不带规则位,
|
|
5370
|
-
* 唯一能兑付的是**同副本活卡腿** `POST /v1/tool-approvals/:id/respond` 的 `persistRule`(且要
|
|
5371
|
-
* `capabilities.permissionRules`)——渲这一格按只读渲(WIRE-CONTRACT §7b 射程句同源)。
|
|
5372
|
-
* ⚠️ 缺席 = 老行(列诞生前 park)或该 ask 无候选——两者都按「无候选」渲染,别当错误。 */
|
|
5373
|
-
ruleSuggestions?: Array<{
|
|
5374
|
-
rule: string;
|
|
5375
|
-
match: "exact" | "prefix";
|
|
5376
|
-
command: string;
|
|
5377
|
-
}>;
|
|
5378
5477
|
/**
|
|
5379
|
-
* S-134(server ≥7.46.0;core 5.58.0 design/375)——
|
|
5478
|
+
* S-134(server ≥7.46.0;core 5.58.0 design/375)—— ≤7.45 的三元组键 `ruleSuggestions` 的**换形继任**(旧键 sdk 26.0.0 随底线 7.52.0 删):同一条 core 契约
|
|
5380
5479
|
* (`PendingAction.ruleOffers` ≡ 同步腿 `AskRequest.ruleOffers`),形是判别联合 `single | batch`,
|
|
5381
5480
|
* 逐字见 {@link import("./resources/tool-approvals.js").RuleOffer}。
|
|
5382
5481
|
* server ≥7.46.0 的行上**只铸新键**;pre-5.58 的老行按新窄读逐条不合 ⇒ 整格「无供给」(不做兼容读)。
|
|
@@ -5388,7 +5487,8 @@ export interface PendingCheckpoint {
|
|
|
5388
5487
|
* 活卡帧腿相反({@link import("./resources/tool-approvals.js").ToolApprovalFrame.ruleOffers}):
|
|
5389
5488
|
* 那侧 server 是纯前缀截、零逐条丢弃,下标恒等于 core 的 offer index,兑付真发生在那条腿上。
|
|
5390
5489
|
*
|
|
5391
|
-
* 🔴 **display/triage-only
|
|
5490
|
+
* 🔴 **display/triage-only,耐久腿无兑付口**:`POST /v1/approvals/:sessionId/decide` 的体不带规则位,唯一能兑付的是**同副本活卡腿**
|
|
5491
|
+
* `POST /v1/tool-approvals/:id/respond` 的 `persistRule`(且要 `capabilities.permissionRules`)—— 渲这一格按只读渲;**缺席 = 真的没有供给**(规则车道没武装 /
|
|
5392
5492
|
* 命令说不出规则 / 规则清不掉这只 ask / 老行),不是「投影层漏了」—— 后者正是 server 把这一格搬上
|
|
5393
5493
|
* 耐久腿要修的病。恒不铸 `null`、不铸 `[]`。
|
|
5394
5494
|
*/
|
|
@@ -5410,7 +5510,7 @@ export interface PendingCheckpoint {
|
|
|
5410
5510
|
* core d.ts:与 `requiresRealApproval`(只有人能清 —— 蕴含本位)、`ruleOffersAbsence` 三位彼此独立,投影逐位照投、不互推。 */
|
|
5411
5511
|
mandated?: true;
|
|
5412
5512
|
/** server ≥7.102.0(S-721)—— 强制位站在哪一个词上(park 行孪生座经 `readClosedWordSeat(…, "mandate")` = core
|
|
5413
|
-
* `isPersistedRuleMandate` 筛;集外词读作缺席)。与 inbox
|
|
5513
|
+
* `isPersistedRuleMandate` 筛;集外词读作缺席)。与 inbox 行对同一张行逐字同答。词表与读法见
|
|
5414
5514
|
* {@link import("./resources/tool-approvals.js").PersistedRuleMandate}。 */
|
|
5415
5515
|
mandate?: PersistedRuleMandate;
|
|
5416
5516
|
/** server ≥7.102.0(S-755 / cli L-695 / C-R111)—— 谁提的这一问(park 行孪生座 `PendingAction.tool_approval.origin`,
|
|
@@ -5539,8 +5639,22 @@ export interface SessionRecord {
|
|
|
5539
5639
|
taskId: string;
|
|
5540
5640
|
};
|
|
5541
5641
|
}>;
|
|
5642
|
+
/** server ≥7.133.0 · **会话视图体顶层 additive 键 `agent`** —— **这只会话是哪只委派子代的转录**(读法:终端侧链投影方按 fleet 帧的 `transcriptId` 读这一会话,拿 `agent` 回答「这是谁的转录、挂在哪个宿主下」)。
|
|
5643
|
+
* 只投引擎在建会话时存下的 **placement 元组**(由引擎在**后台**委派子代、带耐久 agent 行、店声明了 placements 时铸;同步委派的子代转录不落宿主店,没有元组),三个成员**各自可缺席**,形见 {@link SessionAgent}。
|
|
5644
|
+
* 🔴 **读作「有没有存」,绝不读作「是不是子代」**:**键在场 = 这是一只委派子代的转录**(哪怕元组只存了 `kind`,那时 `agent` 是 `{}`);**键缺席有三因**:老 server(≤7.132.x)/ 普通会话 /
|
|
5645
|
+
* 这台部署的店不存 placement 元组(local 后端:子代转录停驻前住私有短 TTL 店、停驻时拷进来的那一份是普通会话行 —— 事实没存就不报)。
|
|
5646
|
+
* 所以**缺席 ≠「不是子代」**:消费方回落到 fleet 行(`id`)/ `GET /v1/agents/roster`(`handle`)上本就有的身份。只投给**已验身份的读者**(视图读);只要归属的调用方(memory-status / 自助抹除)不付这一读。 */
|
|
5647
|
+
agent?: SessionAgent;
|
|
5542
5648
|
[k: string]: unknown;
|
|
5543
5649
|
}
|
|
5650
|
+
/** `SessionRecord.agent`(server ≥7.133.0)—— 一只委派子代转录的 placement 元组投影,三成员**各自可缺席**(只投存下的):
|
|
5651
|
+
* `id` = 元组里的 `handle`(耐久 agent 行的 `a…` 键;与 fleet 行的 `id`、`GET /v1/agents/roster` 的 `handle` 是**同一个串**);`parentSessionId` = 发起它的宿主会话;`rootSessionId` = 委派树的根宿主会话
|
|
5652
|
+
* (嵌套孙代恒锚根)。三个都缺席的 `{}` 也是合法值(元组只存了 `kind`)。 */
|
|
5653
|
+
export interface SessionAgent {
|
|
5654
|
+
id?: string;
|
|
5655
|
+
parentSessionId?: string;
|
|
5656
|
+
rootSessionId?: string;
|
|
5657
|
+
}
|
|
5544
5658
|
/** 🔴 **server ≥7.125.0**(契约 §20)—— `SessionRecord.messages` 里 `role: "user"` 一行的**服务铸键**(这是服务端在引擎消息形之上添的**唯一一键**;`messages` 其余形状属引擎、本包不替它声明)。
|
|
5545
5659
|
* 用法:`session.messages` 的元素是 `unknown`;读用户行的回退手柄时先按 `role === "user"` 窄到本型(本包不替引擎的消息联合起名)。
|
|
5546
5660
|
* `taskId`(串)= 回退时交给 {@link TaskRequest.resumeAt} 的那个手柄(该条提示词所在 run 的 `taskId`)。端侧回退 = 既有 `POST /v1/runs`(或 `/v1/tasks`)
|
|
@@ -5697,9 +5811,21 @@ export interface McpProbeFace {
|
|
|
5697
5811
|
probedAt: string;
|
|
5698
5812
|
/** 这份读数还能复用多久(秒;server 侧同 principal 同申报 30s 窗)。窗内重问**不计限速**。 */
|
|
5699
5813
|
ttlSec: number;
|
|
5700
|
-
/** 逐台一行,**行形单源** = {@link WiringManifestMcpEntry};与申报表同序同长(见本型顶注)。 */
|
|
5701
|
-
servers:
|
|
5814
|
+
/** 逐台一行,**行形单源** = {@link WiringManifestMcpEntry}(server ≥7.133.0 另带本面独有的两个可选键,见 {@link McpProbeFaceRow});与申报表同序同长(见本型顶注)。 */
|
|
5815
|
+
servers: McpProbeFaceRow[];
|
|
5702
5816
|
}
|
|
5817
|
+
/**
|
|
5818
|
+
* 无 run MCP 状态面(`GET /v1/capabilities/mcp` 与 `POST /v1/capabilities/mcp/probe` 同一只)的**一行** = {@link WiringManifestMcpEntry} 的行投影 **外加本面独有的两个可选键**
|
|
5819
|
+
* (server ≥7.133.0;`wiring_manifest.mcp[]` 上**没有**它们 —— 同一只行投影、本面多发两键):
|
|
5820
|
+
* · `toolNames` —— 这台服务器**会挂上**的工具名(同一次探测的读数 `servers[i].tools`,引擎的命名空间形 `mcp__<server>__<tool>`,过了 schema 闸与逐台白名单之后的名册;server 不拼、不改名、不加前缀)。
|
|
5821
|
+
* 逐台**最多 200 条**,按读数序取前缀(见 `toolNamesTruncated`);🔴 **键缺席 = 老 server 或该台的读数里没有 tools —— 不要编 `[]`**(编出来的空名单会被读成「这台没有工具」);在场的 `[]` 是真的(拨号失败的台 `toolCount` 同行为 0)。
|
|
5822
|
+
* · `toolNamesTruncated` —— **只记真**:名单被截了(>200 条被截表、**恰 200 条不截**,旗键缺席、不编 `false`)。`true` 时 **`toolCount` 才是真数**,别用 `toolNames.length` 当它。
|
|
5823
|
+
* 读数错位(读数不是数组 / 条数与行数不等)时两口同答 500 `internal.error`(而不是发一份会配错的名单)。
|
|
5824
|
+
*/
|
|
5825
|
+
export type McpProbeFaceRow = WiringManifestMcpEntry & {
|
|
5826
|
+
toolNames?: string[];
|
|
5827
|
+
toolNamesTruncated?: true;
|
|
5828
|
+
};
|
|
5703
5829
|
/**
|
|
5704
5830
|
* `GET /v1/sessions/:id/mcp` 的体 —— **两臂恰一**(server 7.132.0 `http/routes/sessions.js` 的三只铸造臂)。`asOf` = 这次 materialize 的时刻(ISO)。
|
|
5705
5831
|
* 两半分答(server ≥7.131.0):账本半(`lastLegMcp`)与场景无关、两臂都可带;场景半问场景门 ——
|
|
@@ -5996,15 +6122,8 @@ export interface SessionRulesRecord {
|
|
|
5996
6122
|
principal?: string;
|
|
5997
6123
|
rules: StoredSessionRules;
|
|
5998
6124
|
}
|
|
5999
|
-
/** One E19 file snapshot keyed by a `SessionTreeEntry.id` — `manifest` = `[relPath, blobHash]` tuples. The blob
|
|
6000
|
-
* BYTES are NOT inlined (a turn's working tree can be tens of MiB → OOM/413); they ride the content-addressed
|
|
6001
|
-
* blob routes (GET …/snapshots/:key/blobs/:hash to pull, PUT …/blobs/:hash to push). */
|
|
6002
|
-
export interface SyncSnapshot {
|
|
6003
|
-
key: string;
|
|
6004
|
-
manifest: Array<[string, string]>;
|
|
6005
|
-
}
|
|
6006
6125
|
/** core `FileHistoryExport`(`formatVersion: "file-history/1"`)的**镜像** —— server ≥7.52(S-15 / design/381)起会话同步搬运文件历史的信封,**取代**已退役的 E19 整树快照
|
|
6007
|
-
*
|
|
6126
|
+
* (≤7.51 的 `snapshots` 一代;sdk 26.0.0 随底线 7.52.0 删了它的型 `SyncSnapshot`):per-edited-file 的版本链(tracked)+ 边界(boundaries);**blob 字节不在信封里**(按 hash 寻址,经 history blob 两口搬运,见
|
|
6008
6127
|
* {@link import("./resources/session-sync.js").SessionSyncResource.getHistoryBlob} / `putBlob`)。SDK 只读 `tracked[].versions[].blobHash`(决定要搬哪些 blob),其余**逐字透传**
|
|
6009
6128
|
* (server 的 import 门按 `formatVersion` refuse-not-coerce、复核 `keyKind` / `keyFamily` 闭集 —— SDK 不替它判,也不复制那两张闭集词表:二者按 `string` 读)。
|
|
6010
6129
|
* 键集对拍 core `dist/core/file-history-store.d.ts` 的 `FileHistoryExport`。 */
|
|
@@ -6044,7 +6163,7 @@ export interface SyncAnchor {
|
|
|
6044
6163
|
owner: string | null;
|
|
6045
6164
|
}
|
|
6046
6165
|
/** `GET …/sync/manifest` → `{ manifest: SessionManifest }`. The THIN cross-backend snapshot: entry IDS (oldest-first,
|
|
6047
|
-
* NOT payloads — those stream via `/sync/entries`) +
|
|
6166
|
+
* NOT payloads — those stream via `/sync/entries`) + the file-history envelope + policy + anchors + leaf. The
|
|
6048
6167
|
* local peer feeds `entryIds` to {@link classifySyncRelationshipByIds} to decide fast-forward/fork BEFORE pulling
|
|
6049
6168
|
* the entry stream + only the blob hashes it lacks. Mirrors session-sync.ts SessionManifest:213. */
|
|
6050
6169
|
export interface SessionManifest {
|
|
@@ -6055,13 +6174,9 @@ export interface SessionManifest {
|
|
|
6055
6174
|
entryCount: number;
|
|
6056
6175
|
/** The session's current leaf entry id, or null. */
|
|
6057
6176
|
leafId: string | null;
|
|
6058
|
-
/**
|
|
6059
|
-
* 7.
|
|
6060
|
-
|
|
6061
|
-
snapshots?: SyncSnapshot[];
|
|
6062
|
-
/** server ≥7.52:per-edited-file 文件历史信封({@link FileHistoryExport});`null` = 没有历史 / 源店导不出;**键缺席 = ≤7.51 老 server**(那一代走 {@link snapshots})。
|
|
6063
|
-
* 搬 blob 前先读两端的 {@link Capabilities.sessionSyncFileHistory}(server ≥7.116.0)。 */
|
|
6064
|
-
fileHistory?: FileHistoryExport | null;
|
|
6177
|
+
/** per-edited-file 文件历史信封({@link FileHistoryExport});`null` = 没有历史 / 源店导不出。**支持面内恒在场**(server ≥7.52 恒铸这个键;sdk 26.0.0 起必有 ——
|
|
6178
|
+
* ≤7.51 那一代的整树快照 `snapshots` 随底线 7.52.0 退出支持面,型删)。搬 blob 前先读两端的 {@link Capabilities.sessionSyncFileHistory}(server ≥7.116.0)。 */
|
|
6179
|
+
fileHistory: FileHistoryExport | null;
|
|
6065
6180
|
policy: SessionRulesRecord[];
|
|
6066
6181
|
anchors: SyncAnchor[];
|
|
6067
6182
|
/** 🔴 **server ≥7.125.0**(契约 §20)—— 会话行的标题,经**列表行同一只投影**读(与 {@link SessionSummary.title} 同一个值:用户写的串,否则自动标题器的)。
|
|
@@ -6073,17 +6188,15 @@ export interface SessionManifest {
|
|
|
6073
6188
|
/** 🔴 **server ≥7.125.0**(契约 §20)—— 会话行的置顶位(同 {@link SessionSummary.pinned};present-iff 与 {@link title} 同一条)。 */
|
|
6074
6189
|
pinned?: boolean;
|
|
6075
6190
|
}
|
|
6076
|
-
/** The portable state of ONE session, ready to replay into another backend (mirrors session-sync.ts SessionBundle
|
|
6077
|
-
* Blobs are deliberately NOT inlined —
|
|
6191
|
+
/** The portable state of ONE session, ready to replay into another backend (mirrors session-sync.ts SessionBundle).
|
|
6192
|
+
* Blobs are deliberately NOT inlined — the file-history envelope carries only blob hashes; the bytes stream through the
|
|
6078
6193
|
* content-addressed blob routes. The SDK assembles this from a manifest + the streamed entries for a PUSH. */
|
|
6079
6194
|
export interface SessionBundle {
|
|
6080
6195
|
sessionId: string;
|
|
6081
6196
|
/** The FULL durable conversation log, verbatim ids/parents/payload (oldest-first). */
|
|
6082
6197
|
entries: SyncEntry[];
|
|
6083
|
-
/** 同 {@link SessionManifest.
|
|
6084
|
-
|
|
6085
|
-
/** 同 {@link SessionManifest.fileHistory}(server ≥7.52 的文件历史信封;键缺席 = 源是 ≤7.51 老 server)。 */
|
|
6086
|
-
fileHistory?: FileHistoryExport | null;
|
|
6198
|
+
/** 同 {@link SessionManifest.fileHistory}(必有;`null` = 没有历史 / 源店导不出 / 拉取时源端没有 blob 面而不搬)。 */
|
|
6199
|
+
fileHistory: FileHistoryExport | null;
|
|
6087
6200
|
policy: SessionRulesRecord[];
|
|
6088
6201
|
anchors: SyncAnchor[];
|
|
6089
6202
|
}
|
|
@@ -6421,6 +6534,11 @@ export interface InboxRow {
|
|
|
6421
6534
|
sessionId: string;
|
|
6422
6535
|
/** 多租户 owner scope。 */
|
|
6423
6536
|
scope: string;
|
|
6537
|
+
/** server ≥7.133.0:这一行停驻的**非密稳定身份** —— 「同一次暂停」在 token 不能去的地方(日志 / 另一读面 / 关联键)的 join 键,与 `PausedCause.checkpointId`(终帧上那一位)是**同一个值**。
|
|
6538
|
+
* 出现在三处 durable 读面:`GET /v1/approvals` 的 `pending[]` 行 · `/v1/approvals/stream` 的 `pending` 帧 · `GET /v1/assistant/inbox` 行。🔴 **读不出可信值的行照列、键缺席**
|
|
6539
|
+
* (老行 / 没过信任边界〔非串 / 空串 / 超长 / 含 token〕/ 老 server;server 计一次 `server.approvals.durable-row-checkpoint-id-missing`):**缺席读作「这一行没有可 join 的身份」**,
|
|
6540
|
+
* 别把它当必在键拿去写 join 码。 */
|
|
6541
|
+
checkpointId?: string;
|
|
6424
6542
|
/** ask 创建时间(epoch ms;core 投影恒带,类型留可选容极老行)。 */
|
|
6425
6543
|
createdAt?: number;
|
|
6426
6544
|
/** 哪种暂停 —— 直接引用 §1 单一真源的开集(不复制字面枚举:两份枚举必然各自漂,且 live fence 的
|
|
@@ -6473,16 +6591,15 @@ export interface InboxRow {
|
|
|
6473
6591
|
/** server ≥7.69.0(core 7.10.0 #616)—— **为什么这一问会到我手上**:分类器被咨询过但答不了。inbox 是
|
|
6474
6592
|
* **分诊**面,`breaker_open` 在这里价值最大 —— 它预告的是一场审批风暴,而不是一次偶发询问。
|
|
6475
6593
|
* 形与三条硬读法(开集 `cause` / 缺席不是断言 / switch 带 default)逐字见 {@link ClassifierUnavailable}。
|
|
6476
|
-
* ⚰️
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6594
|
+
* ⚰️ **退役(server 7.72.0 / core 7.14.0,BREAKING 无别名)**:server 三腿自 7.72.0 起**恒不再铸它**;继任是 `tool_end.gate` / `permissionDenied.gate` 上的
|
|
6595
|
+
* `disposition.cause`(闭二词 `unavailable` / `parse_error`,答的是「这次 deny 是什么形」而非「为什么不可用」,旧 switch 搬不过去)。
|
|
6596
|
+
* 🔴 **为什么本面还留着这一位**:本行的随包 spec 是**闭形**(`additionalProperties: false`)—— 支持面内
|
|
6597
|
+
* [7.69.0, 7.72.0) 的 server 仍会发它,删了就让那些 server 的合法行对 spec 违约。何时删、帧上同名键为何还留:权威说明在帧注 {@link ToolApprovalFrame.classifierUnavailable},本行只指向(卡上的同名键另按钉版卡 schema 仍收而留,见 {@link ApprovalCard.classifierUnavailable})。 */
|
|
6480
6598
|
classifierUnavailable?: ClassifierUnavailable;
|
|
6481
|
-
/** server ≥7.72.0(core 7.14.0 #688 C3,additive)——
|
|
6482
|
-
*
|
|
6483
|
-
*
|
|
6484
|
-
*
|
|
6485
|
-
* 保留声明只为读 [7.72.0, 7.106.0) 的旧 server。 */
|
|
6599
|
+
/** server ≥7.72.0(core 7.14.0 #688 C3,additive)—— **规则车道读不通的是哪一半**(`"store"` / `"call"`)。
|
|
6600
|
+
* 形、在场条件、两词语义、⚰️ 退场句与退役条件的**权威说明在帧注**:{@link ToolApprovalFrame.ruleStoreUnreadable},本行只指向 —— 本行与帧上的同名键同读、同留。
|
|
6601
|
+
* 🔴 **为什么本面还留着这一位**:本行的随包 spec 是**闭形**(`additionalProperties: false`)—— 支持面内 [7.72.0, 7.106.0) 的 server 仍会发它,
|
|
6602
|
+
* 删了就让那些 server 的合法行对 spec 违约。 */
|
|
6486
6603
|
ruleStoreUnreadable?: "store" | "call";
|
|
6487
6604
|
/** 任务目标(从 task ctx 富化;契约明确 "`null` if unavailable" —— 真回 null 的字段,非 OMIT)。 */
|
|
6488
6605
|
objective: string | null;
|
|
@@ -6717,7 +6834,7 @@ export interface WiringManifest {
|
|
|
6717
6834
|
* 一个「本会话不再问」的答案到底能不能被记住?**租户可见**(引擎刻意把它放在 operator-only 的
|
|
6718
6835
|
* `governance` 段**之外**,server 两面都投)。要给「不再询问」这个交互之前先读它:`storeWired:false` 时
|
|
6719
6836
|
* 那个承诺无处兑现。🔴 **引擎恒发这一段**,所以 `false` 是**真读数**(「这台 worker 没有规则车道」),
|
|
6720
|
-
*
|
|
6837
|
+
* 不是「引擎太老」;只有**整键缺席**才是「没发过」—— 投影只在引擎给了非空的段时才铸这一段,另外一条 server 7.6.0 之前写下的账本行回放时也没有它(故型上可选)。
|
|
6721
6838
|
* `syncWired` = 这台 worker 把持久规则并进与跨设备 / 传输 / 服务端同侪**同一个**同意信任域(与 `storeWired`
|
|
6722
6839
|
* 合读回答「这一下点击到底传多远」);`orgGoverned` = 规则车道之上武装了组织治理层,而那一层是
|
|
6723
6840
|
* **fail-closed**(读不到组织快照时每一条 allow 都升级成真人审批)。 */
|
|
@@ -6782,6 +6899,30 @@ export interface WiringManifest {
|
|
|
6782
6899
|
* 🔴 **effective 半场 only ⇒ 本面恒缺席**(见块头那一条规则):**禁**把本面的缺席读成「没有指令文件」(它在这条端点上不携带任何信息);
|
|
6783
6900
|
* 读法只对 live `wiring_manifest` 帧成立(缺席 = 无陈述,`[]` = 走了链没选中)。 */
|
|
6784
6901
|
instructions?: WiringManifestInstructions;
|
|
6902
|
+
/** core 7.53.0,server ≥7.133.0 —— 这条腿的**权限模式回执**,段形单源 {@link WiringManifestPermissionMode}(**租户帧与 operator 帧同投**;同一段也在 `POST /v1/tasks` 200 体的 `wiringManifest` 与 `/events` 账本行上)。
|
|
6903
|
+
* 🔴 **effective 半场 only ⇒ 本面恒缺席**(见块头那一条规则):读法只对 live `wiring_manifest` 帧成立;壳的模式指示读 `effective`,不读它发出去的词。 */
|
|
6904
|
+
permissionMode?: WiringManifestPermissionMode;
|
|
6905
|
+
}
|
|
6906
|
+
/**
|
|
6907
|
+
* `wiring_manifest.permissionMode.foldedBy` 的词 —— 一条腿的模式被折回去的**原因**(core 7.53.0 `PERMISSION_MODE_FOLD_REASONS`;server ≥7.133.0 只判形、不枚举):
|
|
6908
|
+
* `operator_deny` = 部署 / 组织的天花板不许这个模式(center `allowBypassPermissions: false` / `allowAutoMode: false` 或部署本地的禁用旋钮);`face_absent` = `auto` 模式要的分类器面这条腿没有;
|
|
6909
|
+
* `inherited_ceiling` = 委派子代的模式被夹在父腿的天花板下。🔴 **开集读**:词表属主在引擎,第四个词原样过境 ⇒ 按「被折了、原因未知」处置,别当没折。
|
|
6910
|
+
*/
|
|
6911
|
+
export type PermissionModeFoldReason = "operator_deny" | "face_absent" | "inherited_ceiling" | (string & {});
|
|
6912
|
+
/**
|
|
6913
|
+
* `wiring_manifest.permissionMode` 段(core 7.53.0 `PermissionModeReceipt`,**server ≥7.133.0** 起投 —— 此前引擎有、两个出口〔租户帧 / operator 帧〕都剥;**租户帧与 operator 帧同投**,
|
|
6914
|
+
* 同一段也在 `POST /v1/tasks` 200 体的 `wiringManifest` 与 `GET /v1/runs/:id/events` 账本行上,四处同形;server 只判形:`effective` 非空串、`requested` / `foldedBy` 缺席或非空串,判不过 ⇒ 整段不投)。
|
|
6915
|
+
* 引擎在**每一次**模式问答上给同一份三成员回执(动没动都给),让壳渲的是引擎解出来的,不是自己发出去的:
|
|
6916
|
+
* · `requested` —— 调用方声明的模式词;**缺席 = 调用方什么都没声明**(根腿继承 `default`、子代继承父);
|
|
6917
|
+
* · `effective` —— 这条腿**真跑**在哪个模式下(请求先夹在父腿天花板下,再在部署不许 / 分类器面缺席时折回 `default`);**恒在**。壳的模式指示读它;
|
|
6918
|
+
* · `foldedBy` —— **在场 ⇔ `requested` 与 `effective` 不同**:折因见 {@link PermissionModeFoldReason}(开集读)。
|
|
6919
|
+
* 🔴 **缺席 = 老引擎 / 老 server(≤7.132.x)**,不是「默认模式」的断言;**别用 `requested`** 渲指示(那是它发出去的词,可能已被折)。
|
|
6920
|
+
* ⚠️ 这是**封闭 schema 的一次加键**:按 sdk ≤24.0.0 的 spec 严格校验 `wiring_manifest` 的消费方,对 7.133.0 起的整帧失败 —— 升到本包(25.0.0)或对这一段放宽未知键。
|
|
6921
|
+
*/
|
|
6922
|
+
export interface WiringManifestPermissionMode {
|
|
6923
|
+
requested?: PermissionMode | (string & {});
|
|
6924
|
+
effective: PermissionMode | (string & {});
|
|
6925
|
+
foldedBy?: PermissionModeFoldReason;
|
|
6785
6926
|
}
|
|
6786
6927
|
/**
|
|
6787
6928
|
* `wiring_manifest.fileHistory` 的词(K-24;server ≥7.104.0 / S-724;core 7.31.0 `WiringManifest.fileHistory` = `"on" | "disabled"`,
|
|
@@ -6848,8 +6989,42 @@ export interface ToolRosterEntry {
|
|
|
6848
6989
|
pathTarget?: McpToolFace["pathTarget"];
|
|
6849
6990
|
ruleFace?: McpToolFace["ruleFace"];
|
|
6850
6991
|
renderHints?: McpToolFace["renderHints"];
|
|
6992
|
+
/** core 7.54.0 / server ≥7.134.0(引擎**必填**成员,`wiring_manifest.tools.entries[]` 与 `tool_roster_delta` 帧 `delta.roster.entries[]` 每一行都带):
|
|
6993
|
+
* 这只工具的一次调用**走哪几条腿**({@link BoundaryLeg} 数组,按 {@link BOUNDARY_LEGS} 序),或 `"per_call"` —— 它的分派按每次调用给腿(引擎自己的定义与协议工具声明它,
|
|
6994
|
+
* 其余行跟随 `effect`)。设备车道的发射闸读它判一次调用要不要跨边界确认。**键缺席 = 老 server**(≤7.133.x);按封闭 schema 严格校验名册行的消费方升到本包后才收得下这一位。 */
|
|
6995
|
+
boundaryLegs?: "per_call" | BoundaryLeg[];
|
|
6851
6996
|
[k: string]: unknown;
|
|
6852
6997
|
}
|
|
6998
|
+
/** 一次调用可能走的**腿**(core `BOUNDARY_LEGS` 逐词同序;core 7.54.0):`env` —— 执行环境里(设备上)· `outside_read` —— 读到执行环境之外 · `outside_write` —— 写到执行环境之外。 */
|
|
6999
|
+
export declare const BOUNDARY_LEGS: readonly ["env", "outside_read", "outside_write"];
|
|
7000
|
+
/** {@link BOUNDARY_LEGS} 的成员型。 */
|
|
7001
|
+
export type BoundaryLeg = (typeof BOUNDARY_LEGS)[number];
|
|
7002
|
+
/** 一棵执行于目标设备的树的**跨边界污染位**(core `CROSS_BOUNDARY_TAINT_BITS` 逐词同序;core 7.54.0):`targetExecutionArmed` —— 树已武装为在目标上执行 ·
|
|
7003
|
+
* `offTargetReadObserved` —— 树里已经放进过一次离目标读的内容。 */
|
|
7004
|
+
export declare const CROSS_BOUNDARY_TAINT_BITS: readonly ["targetExecutionArmed", "offTargetReadObserved"];
|
|
7005
|
+
/** {@link CROSS_BOUNDARY_TAINT_BITS} 的成员型。 */
|
|
7006
|
+
export type CrossBoundaryTaintBit = (typeof CROSS_BOUNDARY_TAINT_BITS)[number];
|
|
7007
|
+
/** 跨边界污染行的**阶段**(core `permission.cross_boundary_taint` 帧的 `phase`):`prepare` —— 武装的树上准备一条腿 · `resume` —— 耐久续跑腿 ·
|
|
7008
|
+
* `observed` —— 这条腿第一次把离目标读放进树(带那一只调用)。 */
|
|
7009
|
+
export type CrossBoundaryTaintPhase = "prepare" | "resume" | "observed";
|
|
7010
|
+
/**
|
|
7011
|
+
* **跨边界污染行**(core 7.54.0 设备车道发射闸的 `permission.cross_boundary_taint` 帧去掉信封 —— server ≥7.134.0 的耐久行;**纯元数据**):
|
|
7012
|
+
* 一棵执行于目标设备的树,武装腿准备时(`prepare`)/ 耐久续跑腿(`resume`)各一行,第一次放进离目标读时一行(`observed`,带那一只调用)。宿主车道永不出现。
|
|
7013
|
+
* 两个出口同一行:`GET /v1/runs/:id/events` 的账本事件 `cross_boundary_taint`({@link import("./events.js").AgentEvent} 同名臂)与 trace SSE `GET /v1/tasks/:id/stream` 的
|
|
7014
|
+
* `cross-boundary-taint` 帧({@link TraceStreamEvent} 同名臂,行 + `seq`)。**`GET /v1/runs/:id` 的轮询对象上没有它**。
|
|
7015
|
+
*/
|
|
7016
|
+
export interface CrossBoundaryTaintRow {
|
|
7017
|
+
/** 这条腿的 run id。 */
|
|
7018
|
+
runId: string;
|
|
7019
|
+
phase: CrossBoundaryTaintPhase;
|
|
7020
|
+
/** 事件之后树的污染位(core 位的子集)。 */
|
|
7021
|
+
taint: CrossBoundaryTaintBit[];
|
|
7022
|
+
/** 树自武装起一直在 `multi_tenant` 姿态下跑(由 `REQUIRE_PRINCIPAL` 派生)。 */
|
|
7023
|
+
governed: boolean;
|
|
7024
|
+
/** 只在 `observed`:放进离目标读的那一只调用。 */
|
|
7025
|
+
toolName?: string;
|
|
7026
|
+
toolCallId?: string;
|
|
7027
|
+
}
|
|
6853
7028
|
/**
|
|
6854
7029
|
* core `ToolRosterDelta`(core 7.8.0)—— **运行期**名册变更的载荷,`tool_roster_delta` 帧的 `delta`
|
|
6855
7030
|
* (server ≥7.70.0;铸点 `src/trace/project.ts:736`,判形属主是 core 的 typebox schema:判不出形 ⇒
|
|
@@ -7264,7 +7439,7 @@ export interface MemoryOriginClearReceipt {
|
|
|
7264
7439
|
* 但因为卡全程 pending,什么都没有被伪造,重发同一条 decide 即可 —— **一台 ≥7.72.0 的 server** 起这条腿有
|
|
7265
7440
|
* 两条腿:宿主停在可唤醒的 park 上就续那一跑,不在就在同一个宿主会话上铸一条新跑承载决定,两条腿的受理体
|
|
7266
7441
|
* 逐字同形;宿主会话此刻被别的 run 占用时改答既有的 409 `conflict.session_active_run`。⚠️ 这两条腿是
|
|
7267
|
-
* 7.72.0 才有的:本包支持地板是
|
|
7442
|
+
* 7.72.0 才有的:本包支持地板是 7.52.0,对 [7.69.0, 7.72.0) 窗口内仍受支持的老 server,重发拿到的仍是
|
|
7268
7443
|
* 409 `decide.workflow_host_not_parked`(该码已于 7.72.0 退役、无别名,但仅对**更新的** server 生效 ——
|
|
7269
7444
|
* 见 {@link import("./errors.js").DecideWorkflowHostError})。
|
|
7270
7445
|
*
|