@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/README.md
CHANGED
|
@@ -12,6 +12,8 @@ npm install @sema-agent/sdk
|
|
|
12
12
|
|
|
13
13
|
Requires Node >= 20.
|
|
14
14
|
|
|
15
|
+
Supported floor: `@sema-agent/server` >= 7.52.0 — one floor, no second number. (Raised from 3.0.0 in **26.0.0**: servers below 7.52.0 — the whole-tree snapshot epoch — are outside the supported range, and this package no longer declares what only they send. The per-release sections below keep the floor each release shipped with.)
|
|
16
|
+
|
|
15
17
|
## Quick start
|
|
16
18
|
|
|
17
19
|
```ts
|
|
@@ -43,6 +45,9 @@ for await (const ev of client.runs.events(task.taskId)) {
|
|
|
43
45
|
by a deadline (contract body `DrainRequest` → receipt `DrainReceipt`; four-part identity compared field by field, 409
|
|
44
46
|
`conflict.fleet_identity` on a mismatch; idempotent by `actionId`, never auto-retried).
|
|
45
47
|
- `client.approvals` — HITL: pending checkpoints, `decide` (approve/deny/answer), live `stream()`, per-session exemptions (`listExemptions` / `revokeExemption`).
|
|
48
|
+
`decide` 的 409 `approval_stale`(`ApprovalStaleError`)是**一码两因**,看体分:**有 `terminal`** = 终局(别人决了 / 过期被收 / SLA 触发了拒),这张卡没了,重拉收件箱、别重试;
|
|
49
|
+
**无 `terminal` 且有 `currentPending`** = 你回显的绑定旧了(`boundCallId` 与现在 pending 的那一行对不上,读与决之间卡被换了),卡还活着 —— 拿 `currentPending` 一跳重定位、再决一次,不必整队重拉;
|
|
50
|
+
只有 `boundInputHash` 写错(`boundCallId` 对)才落 core 的裸 409 `approval_binding_mismatch`(`ApprovalBindingMismatchError`),不是本类。型面不变(`terminal` / `currentPending` 一直是可选)。
|
|
46
51
|
- `client.questions` — answer a live `AskUserQuestion` (`questions.respond`).
|
|
47
52
|
- `client.toolApprovals` — the engine's permission gate on a live stream: `respond` (legacy `tool_approval`
|
|
48
53
|
frame) and `decideAsk` (design/172 in-stream approval protocol — **released**: the endpoint shipped in
|
|
@@ -65,6 +70,12 @@ for await (const ev of client.runs.events(task.taskId)) {
|
|
|
65
70
|
`NotFoundError` with `errorCode: "not_found.route"`, distinguishable from every other 404 on this family and
|
|
66
71
|
from the 501 `capability.rule_store_required`).
|
|
67
72
|
- `client.elicitations` — answer an inbound MCP elicitation form.
|
|
73
|
+
- `client.principalInbox` (server >= 7.133.0) — `send({ to, content, urgent? })` drops one cross-principal letter into a same-organization recipient's inbox
|
|
74
|
+
(`POST /v1/principal-inbox/messages`). Gate on `capabilities.principalInboxDelivery` (off by default ⇒ the route answers 501 `capability.unavailable`);
|
|
75
|
+
the four refusals (`org_delivery.not_member` / `.rate_limited` / `.inbox_full` / `.recipient_tombstoned`) are a closed set (`ORG_DELIVERY_REFUSAL_CODES`) — branch on the code, never on the sentence.
|
|
76
|
+
Delivery half only: this release has no read-back verb. The SDK never retries it (each attempt, even a mistyped recipient, spends the sender's hourly attempt quota).
|
|
77
|
+
- `client.configCatalog` — `get()` reads the deployment config catalog (`GET /v1/config/catalog`, operator-only; probe `capabilities.configCatalog` first). A row whose value the caller may not see carries `effectiveValueWithheld` instead of a value.
|
|
78
|
+
- `client.toolApprovals.get(approvalId)` (server >= 7.133.0) — read ONE approval by id (`GET /v1/tool-approvals/:id`; the id is the 64-hex ask id the approval card carries): `state` is `pending` / `decided` / `parked` / `void`. Gate on `capabilities.toolApproval` (same gate as `respond`; off ⇒ 501 `feature.tool_approval_disabled`). `capabilities.approvalReadRootGrant` is a different bit — it says whether the respond body's `readRootGrant` is accepted.
|
|
68
79
|
- `client.devices` — the **device lane admin face** (server >= 7.88.0, wire contract §14): `list` /
|
|
69
80
|
`sessionBinding` / `rebind` / `issueEnrollToken` / `enroll` / `revoke`. Gate on
|
|
70
81
|
`capabilities.deviceExecutor` — `false` means all six answer 501 `capability.device_lane_required`, so hide
|
|
@@ -86,17 +97,29 @@ for await (const ev of client.runs.events(task.taskId)) {
|
|
|
86
97
|
(`"none"` means a resend is a second real delete), and do not put an automatic retry policy on it.
|
|
87
98
|
- `client.workflows`, `client.fleet`, `client.models`, `client.usage`, `client.trace`, … — see the typed exports in `dist/index.d.ts` and the bundled `openapi.yaml`.
|
|
88
99
|
|
|
100
|
+
### `@sema-agent/sdk/model-route-env` — the model-route environment transit
|
|
101
|
+
|
|
102
|
+
A separate subpath (**types + pure functions, zero runtime dependency**) mirroring `@sema-agent/server/model-route-env`: `MODEL_ROUTE_ENV_KEYS` (the closed set of
|
|
103
|
+
env names that steer model routing), `readModelRouteEnv(env)` (a pure reader: env record in, a typed `ModelRouteEnvReading` out — it never touches `process.env`),
|
|
104
|
+
`envLaneTable(mainId, main, cheap)` (the env leg's entry table: the main slot under `default` and its own id, plus the minted cheap slot) and `laneAndEndpointFor(env, model, routes)`
|
|
105
|
+
(which brain lane a model takes on a route table, and which env key *names* carry that lane's endpoint and credential — names, never values). A shell or an embedder that needs the same routing facts as the server depends on **this**, never on the
|
|
106
|
+
server package, and never re-types the key names; the mirror is watched by a same-source gate (exports, constants, a differential run of the reader over several hundred env
|
|
107
|
+
cases, the lane matrix, and the `.d.ts` type bodies) against the server's *published bytes*.
|
|
108
|
+
|
|
89
109
|
### `@sema-agent/sdk/device` — the executor-side protocol face
|
|
90
110
|
|
|
91
111
|
A separate subpath (**Node-only** — it returns `Buffer`) mirroring `@sema-agent/server/device-protocol`: the
|
|
92
112
|
closed-set vocabularies, both directions' frame types, and the two pure functions that build the bytes a device
|
|
93
113
|
signs during the handshake. An executor depends on **this**, never on the server package (layering), and the
|
|
94
|
-
mirror is watched by a
|
|
114
|
+
mirror is watched by a same-source anchor gate against the server's *published bytes*.
|
|
95
115
|
|
|
96
116
|
```ts
|
|
97
|
-
import { buildHelloSignaturePayload, DEVICE_WS_PATH } from "@sema-agent/sdk/device";
|
|
117
|
+
import { buildHelloSignaturePayload, DEVICE_PROTOCOL_VERSION, DEVICE_WS_PATH } from "@sema-agent/sdk/device";
|
|
98
118
|
import { sign } from "node:crypto";
|
|
99
|
-
|
|
119
|
+
// Declare the lower of "the highest revision you implement" and the revision the challenge frame carries
|
|
120
|
+
// (declaring 2 to a server <= 7.132.x is refused with `protocol_version_unsupported`):
|
|
121
|
+
const protocolVersion = Math.min(DEVICE_PROTOCOL_VERSION, challenge.protocolVersion);
|
|
122
|
+
const signatureB64 = sign(null, buildHelloSignaturePayload({ nonce, deviceId, epoch, protocolVersion }), privateKey).toString("base64");
|
|
100
123
|
```
|
|
101
124
|
|
|
102
125
|
The byte layout is frozen across repos: getting one byte wrong makes **every** legal executor fail with
|
|
@@ -112,6 +135,220 @@ The registry's 409 carries two opposite meanings, split by one reader (`classify
|
|
|
112
135
|
`ScopeGoneError` on the registry subpath — the target scope was deleted or re-created under the same name, nothing was
|
|
113
136
|
written, **never** retry it as a conflict).
|
|
114
137
|
|
|
138
|
+
## 26.0.0 — BREAKING changes(待发包;对表 server **7.134.0** 发布字节〔tag v7.134.0 = 0c9995a6,shasum a2a632c5965fff5a0fe467cf6bbdc595dc7311e5〕与它自己解析到的引擎 core **7.54.1**)—— 唯一 server 支持底线 **`7.52.0`**(由 `3.0.0` 抬)
|
|
139
|
+
|
|
140
|
+
**一句话**:支持底线从 server `3.0.0` 抬到 **`7.52.0`**;只为底线之下的 server 留着的面(工作区浏览四动词、整树快照纪元、≤7.51 才发的错误类)、审批帧 / 卡上退役的 `persistedRuleShadowed` 与底线之下的 `ruleSuggestions`、任何 server 都不发的幻影键同版删;以「老底线」为由标可选而支持面内恒发的键改必有;同版对表 server 7.134.0 的新面(审批帧族声明、按问读口四态、跨边界污染事件 / 帧、checkpoint 续跑上下文开封拒、`approvals.read_corrupt`、放行附言 `feedback` 等)。消费方 `tsc` 红即通知。
|
|
141
|
+
|
|
142
|
+
**消费方**:@client-core · @cli · @web-admin(各自读法见下「升级须知」)。
|
|
143
|
+
|
|
144
|
+
**对表物**:根 devDep `@sema-agent/server` 精确钉 **7.134.0**(装树字节 = registry tarball;随装 core 7.54.1、契约包 `@sema-agent/settings-schema` 14.2.0);live 围栏 `CALIBRATED_SERVER_HEAD` 7.133.0 → **7.134.0**,`SUPPORTED_SERVER_FLOOR` 3.0.0 → **7.52.0**(本节与「Install」段的 Supported floor 句是同一个数)。
|
|
145
|
+
|
|
146
|
+
**律(一条)**:本包只声明支持面 `[7.52.0, ∞)` 内的 server 真发 / 真收的东西 ——
|
|
147
|
+
① 只为底线之下的 server 留着的臂(动词、路由、键、填充、映射分支、错误类、能力对象臂)整删;
|
|
148
|
+
② 任何 server 都不发的幻影键整删;
|
|
149
|
+
③ 开形面上的退役键**以钉版 server 的那张面为准**同版删(零别名):审批帧 / 卡上的 `persistedRuleShadowed`(继任 `allowRuleShadowed`)与底线之下的 `ruleSuggestions`;它为回放旧存行仍声明的照声明(审批卡上的 `classifierUnavailable`、请求键 `rewindFiles` 因此留着)。帧上的 `classifierUnavailable`(7.69–7.71)/ `ruleStoreUnreadable`(7.72–7.105)在支持面内仍有 server 发、闭形 inbox 行同两键具型 ⇒ 帧上同留(帧与行同读),底线 ≥ 7.106.0 时随下一个 major 一并删。**闭形**面(随包 spec `additionalProperties: false`,如 inbox 行)上的键与闭集里的词留到底线抬过停铸那一版 —— 删了会让支持面内老 server 的合法答复对随包 spec 违约;
|
|
150
|
+
④ 以「底线是 3.0.0」为由标可选、而 ≥7.52 的 server 恒发(且不经老账本行回放)的键改必有。
|
|
151
|
+
|
|
152
|
+
### 删 / 收紧(BREAKING)
|
|
153
|
+
|
|
154
|
+
| # | 面 | 25.0.x | 本版 |
|
|
155
|
+
|---|---|---|---|
|
|
156
|
+
| 1 | 支持底线 | server ≥ `3.0.0` | server ≥ **`7.52.0`**(7.51.x 及以下判 unsupported;本包不再为它们保留任何读法) |
|
|
157
|
+
| 2 | 工作区浏览面(server 1.299–7.51;7.52 起四条路由恒答 501 `capability.workspace_retired`) | `client.workspace`(`WorkspaceResource`:`list` / `tree` / `file` / `archive`)· 型 `WorkspaceSnapshotRow` / `WorkspaceTreeEntry` / `WorkspaceFile` / `WorkspaceSnapshotPage` / `WorkspaceTreePage` · 错误类 `WorkspaceFileTooLargeError` 与它的 413 映射分支 · `Capabilities.workspace` 的对象臂 `{ browse, archive, maxFileBytes }` | 全删;`Capabilities.workspace?: false`;spec 四条路由只剩墓碑(401 / 501),四只行形 schema 删;同一个 413 体现在落带码的通用 `APIError` |
|
|
158
|
+
| 3 | 整树快照纪元(≤7.51) | `SessionManifest.snapshots?` / `SessionBundle.snapshots?` · 型 `SyncSnapshot` · `sessions.sync.getBlob(sessionId, key, hash)`(`GET …/sync/snapshots/:key/blobs/:hash`)· `sessions.sync.import` 体的 `snapshots` · 编排 verb 给 Phase A 体补的 `snapshots: []` | 全删(spec 同删);`SessionManifest.fileHistory` / `SessionBundle.fileHistory` **必有**(`FileHistoryExport \| null`:`null` = 没有可导出的文件历史,不是缺席);文件历史的 blob 走 `getHistoryBlob` |
|
|
159
|
+
| 4 | 审批帧 / 卡 / 待批行上的退役键(钉版 server 不再声明) | 帧:`ruleSuggestions`(≤7.45)· `persistedRuleShadowed`(≤7.116);卡:`ruleSuggestions` · `persistedRuleShadowed`;`PendingCheckpoint.ruleSuggestions`;型 `RuleSuggestion` | 全删(`TOOL_APPROVAL_FRAME_KEYS` / `APPROVAL_CARD_KEYS` 同减,spec 同删)。继任:`ruleOffers`(规则候选)· `allowRuleShadowed`(命中却清不掉这只问的允许规则成员)。**留着的**:卡上的 `classifierUnavailable`(钉版卡 schema 仍收,旧存行回放)、帧上的 `classifierUnavailable` / `ruleStoreUnreadable`(支持面内 7.69–7.105 的 server 仍发;与闭形 `InboxRow` 同两键同读,继任分别是 `tool_end.gate` / `permissionDenied.gate` 的 `disposition.cause` 与会话流 `engine_notice` `permission.rule_store_unavailable`;底线 ≥ 7.106.0 时随下一个 major 删) |
|
|
160
|
+
| 5 | 幻影键 | `FleetTaskRow.queuedCount?` | 删(没有一台 server 发它) |
|
|
161
|
+
| 6 | legacy 行读口 `GET /v1/approvals/{approvalId}`(server 5.0.0 退役) | spec 墓碑 + `ApprovalRow` schema | spec 删(支持面内没有一台 server 路由它;本包本来就没有对应 verb) |
|
|
162
|
+
| 7 | 以老底线为由标可选的恒发键 | `ModelInfo.routePairing?` · trace 帧(`trace.stream()` 的 `TraceStreamEvent` 具名臂)`data.type?` · workflow 流 `error` 臂 `data.type?` / `errorCode?` | **必有**:`routePairing: RoutePairingStatus`(server ≥7.45 恒铸,判不了是 `"unknown"`)· 具名臂 `data.type` 必有(server ≥5.0.0 恒双发 = 事件名)· workflow 流 `error` 臂 `{ type: "error"; errorCode: string; message: string }`;spec `ModelInfo.required` 同加 |
|
|
163
|
+
| 8 | `GET /v1/approvals` 的 500 重试 | 按状态码重试 | `approvals.read_corrupt`(500)不再重试(重试以同一方式失败;见「加」4)—— 行为变化,型不变 |
|
|
164
|
+
|
|
165
|
+
### 🔴 迁移表(25.0.x 的写法 → 本版 → 怎么改)
|
|
166
|
+
|
|
167
|
+
| # | 25.0.x 的写法 | 本版 | 怎么改 |
|
|
168
|
+
|---|---|---|---|
|
|
169
|
+
| 1 | `client.workspace.list / tree / file / archive(…)` | 编译红(`client.workspace` 不存在) | 删调用;支持面内这四条恒答 501。会话改过的文件走文件历史:`const { manifest } = await client.sessions.sync.manifest(sid)` 后读 `manifest.fileHistory`(`null` = 没有),blob 用 `sessions.sync.getHistoryBlob(sid, hash)`;回退走 `TaskRequest.restoreFiles`(先探 `capabilities.restoreFiles`) |
|
|
170
|
+
| 2 | `err instanceof WorkspaceFileTooLargeError` / `err.sizeBytes` / `err.limit` | 编译红 | 删分支(支持面内不可达);要兜底就按 `err.errorCode === "workspace_file_too_large"` 读通用 `APIError` |
|
|
171
|
+
| 3 | `caps.workspace && caps.workspace.browse` 之类读对象臂 | 编译红(型只剩 `false`) | 删;不再有工作区浏览入口 |
|
|
172
|
+
| 4 | `manifest.snapshots` / `bundle.snapshots` / `SyncSnapshot` / `sessions.sync.getBlob(sid, key, hash)` | 编译红 | 文件历史走 `manifest.fileHistory`(`null` = 没有)+ `getHistoryBlob(sid, hash)`;编排 verb(`pushSessionBundle` / `pullSessionBundle` / `importSessionBundle`)已按此搬运,结果面 `fileHistory: "carried" \| "none" \| "skipped"` |
|
|
173
|
+
| 5 | 手拼 `SessionManifest` / `SessionBundle` 字面量而不写 `fileHistory` | 编译红(必有) | 写 `fileHistory: null`(或真信封) |
|
|
174
|
+
| 6 | `sessions.sync.import(sid, { entryIds, snapshots: [], policy, anchors })` | 编译红(体里没有 `snapshots`) | 去掉 `snapshots` |
|
|
175
|
+
| 7 | 读帧 / 卡 / 待批行上的 `ruleSuggestions` · 帧 / 卡上的 `persistedRuleShadowed` · 型 `RuleSuggestion` | 卡上的键与 `RuleSuggestion`:编译红(卡型闭合,无此成员);帧 / 待批行上的键:**读出来是 `unknown`**(开放索引签名),赋给具型位时才编译红 —— 等值比较 / `typeof` 读法照编 | 候选读 `ruleOffers`(`RuleOffer` 判别联合);遮蔽读 `allowRuleShadowed`;**全文搜这几个键名**,别只靠编译器 |
|
|
176
|
+
| 8 | `row.queuedCount` | 编译红 | 删(从来没有值) |
|
|
177
|
+
| 9 | `model.routePairing ?? "unknown"` 之类的缺席兜底 | 照编(兜底多余);手拼 `ModelInfo` 不写 `routePairing` ⇒ 编译红 | 去掉兜底;手拼时写 `routePairing` |
|
|
178
|
+
| 10 | 手拼 trace 帧 / workflow 流 `error` 帧不写 `data.type`(或 workflow `error` 不写 `errorCode`) | 编译红(必有) | 写 `type`(= 事件名)与 `errorCode`;从流里读出的帧本来就带 |
|
|
179
|
+
|
|
180
|
+
反向钉:`test/breaking-26.0.0-removals.test.ts`(`@ts-expect-error` 证旧写法不再编译;运行期证 SDK 没留兼容兜底:Phase A 体零 `snapshots`、拉取的 bundle 原样带 `fileHistory: null`、413 落通用错误)。
|
|
181
|
+
|
|
182
|
+
### 🔴 升级须知(三问;行为面)
|
|
183
|
+
|
|
184
|
+
1. **server 7.134.0 起审批卡只发给声明了帧族的任务(server 侧 BREAKING,本包给的是声明键)**。① *谁受影响*:靠流内审批卡答问的壳与自写审批循环(@cli 的审批卡、@client-core 的审批队列、`streamApproval` 的调用方)。② *不改会怎样*:对 server ≥ 7.134.0 不声明 `settings.approvalFrameFamilies` 的任务**收不到任何活卡** —— 耐久店在场时按无人值守政策当场停驻(`park`,卡在停驻行上,`approvals.decide` 作答)或当场拒(`deny`);没有耐久店的 worker 上受门工具当场拒。③ *怎么改*:见位 `capabilities.taskSettings.approvalFrameFamilies === true` 才在提交体 `settings` 里写 `approvalFrameFamilies: [...]`(你渲染得了的族,词表 `APPROVAL_FRAME_FAMILIES`;写 server 呈卡用的那一族 = 顶层 `capabilities.approvalFrameFamilies` 的词)。**别无条件发**:7.133.x 对这个键答 400 `request.body_shape`。坏声明(非数组 / 集外词 / 重复)答 400 `request.field_invalid`,机读 `field` / `reason: "bad_entry"` / `index` 在 `err.extra`。
|
|
185
|
+
2. **支持底线 7.52.0**。① *谁受影响*:还连 server ≤ 7.51.x 的部署。② *不改会怎样*:本包不再声明它们才发的形(工作区浏览、整树快照、≤7.51 的 413 信封);对这类 server 的这些面读到的是通用错误或缺席。③ *怎么改*:先把 server 升到 ≥ 7.52.0;做不到就停在 25.0.x。
|
|
186
|
+
3. **`GET /v1/approvals` 的 500 `approvals.read_corrupt` 不重试**。① *谁受影响*:`approvals.list()` 的调用方。② *不改会怎样*:此前本包按 500 重试(缺省再试两次,共三次)再抛;现在第一次就抛(同码重试以同一方式失败,server 契约写明别原样重试)。③ *怎么改*:按 `err.errorCode === "approvals.read_corrupt"` 渲「队列里有一行读不出,找运维」,别循环重拉。
|
|
187
|
+
4. **停驻卡的按问读 `decided` 可以回到 `parked`**(`client.toolApprovals.get(id)`)。① *谁受影响*:按问轮询停驻卡结局的壳。② *不改会怎样*:把 `decided` 当终局的壳会漏掉「动作开跑前续跑失败、卡重开」这一跳;重开那一瞬读到的 `void` 也不是终局。③ *怎么改*:`decided` 之后照旧盯会话流 / 再读一次;`void` 以重读为准。
|
|
188
|
+
5. **`persistedRuleShadowed` 在支持面内的老 server(至 7.116.x)上仍会到达**。① *谁受影响*:还连 7.52–7.116 server 的壳(审批卡上渲「为什么这条允许规则没清掉这只问」的那一行)。② *不改会怎样*:本版把它从型上删了,继任键 `allowRuleShadowed`(≥7.117)在更老的 server 上不存在 —— 那一行在老 server 上渲不出来。值本身照旧随帧到达:帧型有开放索引签名,`frame["persistedRuleShadowed"]` 读出 `unknown`;卡型闭合,读不到型。③ *怎么改*:把 server 升到 ≥ 7.117;做不到就对 `unknown` 自己窄化(串)后再渲,或停在 25.0.x。帧上的 `classifierUnavailable` / `ruleStoreUnreadable` 不在此列 —— 它们留着(具型,与 inbox 行同读),底线 ≥ 7.106.0 时随下一个 major 删。
|
|
189
|
+
6. **读侧开集照旧**:新词 `cross_boundary`(`AskClass`)/ `cross_boundary_taint`(`PERSISTED_RULE_MANDATES`)对穷举 `switch` 的消费端是一条新 `case`(见下);不认识的词按「原因未知」渲,别丢卡。
|
|
190
|
+
|
|
191
|
+
### 加(对表 server 7.134.0)
|
|
192
|
+
|
|
193
|
+
| # | 面 | 本包 | 要点 |
|
|
194
|
+
|---|---|---|---|
|
|
195
|
+
| 1 | 请求键 `settings.approvalFrameFamilies` | `SemaSettings.approvalFrameFamilies?: ApprovalFrameFamily[]` · `APPROVAL_FRAME_FAMILIES`(`["tool_approval", "approval_request"]`,与 server 同名常量同序)· `ApprovalFrameFamily`(能力位顶层 `approvalFrameFamilies` 的元素型读同一只)· 能力位 `taskSettings.approvalFrameFamilies` | 见「升级须知」1;空数组合法(与缺席同读) |
|
|
196
|
+
| 2 | 按问读口 `GET /v1/tool-approvals/:id` 的停驻读法 | `TOOL_APPROVAL_READ_STATES` 注更新 | `decided` 臂带 `decision` / `decidedAtMs` / `decisionNote?`(无 `decidePath`);门作废 ⇒ `void`;门读不全 ⇒ 404 `tool_approval.not_pending`;门仍开 ⇒ `parked` |
|
|
197
|
+
| 3 | 跨边界污染 | `AgentEvent` 臂 `cross_boundary_taint`(`CrossBoundaryTaintRow`:`runId` / `phase` / `taint` / `governed` / `toolName?` / `toolCallId?`)· `TraceStreamEvent` 臂 `cross-boundary-taint` · `CROSS_BOUNDARY_TAINT_BITS` · `CrossBoundaryTaintPhase` · `BOUNDARY_LEGS` / `ToolRosterEntry.boundaryLegs` · `AskClass` +`cross_boundary` · `PERSISTED_RULE_MANDATES` +`cross_boundary_taint`(七词) | 事件只在 `GET /v1/runs/:id/events` 的账本回放上(不在活流、不在 `GET /v1/runs/:id` 轮询对象上);按事件名分派;词表与引擎同名常量逐词同序 |
|
|
198
|
+
| 4 | `500 approvals.read_corrupt`(`GET /v1/approvals` 也答) | 重试豁免表加这一码 | 见「升级须知」3 |
|
|
199
|
+
| 5 | `409 conflict.checkpoint_ctx_unsealable` | `CHECKPOINT_CTX_UNSEALABLE_CODE` · `CHECKPOINT_CTX_UNSEALABLE_REASONS`(`no_key_store` / `key_not_held` / `unopenable` / `plaintext` / `unrecognized_seal`)· `CheckpointCtxUnsealableExtra { field, reason }` · `isCheckpointCtxUnsealable(err)` | 请求自带的凭据封不了或开不了(哪些门会发哪些词见 `CHECKPOINT_CTX_UNSEALABLE_REASONS` 的注);落 `ConflictError`,机读位在 `err.extra` |
|
|
200
|
+
| 6 | 导入第二阶段「属主在流式导入期间变了」 | `sessions.sync.importEntries` 注 | 409 `conflict` 不带 `relation` ⇒ `ConflictError`(不是 `SyncConflictError`):从第一阶段重来 |
|
|
201
|
+
| 7 | 放行附言 `feedback` | `ApprovalDecision.feedback?: string` · `FIELD_CONFLICT_KINDS` +`approval_feedback` | 人放行时带给模型的话;拒决或 policy 决带它 ⇒ 400 `request.field_conflict`(kind `approval_feedback`) |
|
|
202
|
+
| 8 | fleet workflow 行 | `FleetWorkflowRow.errorCode?` | 开集机器词,与 `GET /v1/workflows/:id` 同名位同一套;缺席 = 无码 |
|
|
203
|
+
| 9 | `422 parked_resume.startup_failed` | `ParkedResumeStartupError` 注 | 体多三只机读位,与同步续跑拒同一组键(引擎没给就不铸) |
|
|
204
|
+
| 10 | 续跑腿上被否决的批过调用 | `AgentEvent.tool_end.errorCode` 注点名 `resume.target_moved` | 引擎铸:批时的工具面或目标此刻变了 ⇒ 调用被否决、这次批准作废、模型重发;不是重开码 |
|
|
205
|
+
|
|
206
|
+
### 会让消费端穷举 `switch` 编译变红的加员(按先例记加性;每条补一条 case)
|
|
207
|
+
|
|
208
|
+
- **`AgentEvent` +1 臂**(`cross_boundary_taint`)· **`TraceStreamEvent` +1 具名臂**(`cross-boundary-taint`)。
|
|
209
|
+
- **`AskClass` +`cross_boundary`**(二十六词)· **`PERSISTED_RULE_MANDATES` +`cross_boundary_taint`**(七词)。
|
|
210
|
+
- **`FieldConflictKind` +`approval_feedback`**。
|
|
211
|
+
|
|
212
|
+
### 门 6 两红(server 7.134.0 发布字节上的 sdk 契约门,本版转绿)
|
|
213
|
+
|
|
214
|
+
| # | 文件 / 格 | 红 | 本版 |
|
|
215
|
+
|---|---|---|---|
|
|
216
|
+
| 1 | `live/error-tariff-artifact`「resume.* 新码必须有去向」 | 引擎 core 7.54.1 能铸 `resume.target_moved`,本包没登记 | 登记到本族前缀分派的落点(断言不删);消费端读它的地方是 `tool_end.errorCode` |
|
|
217
|
+
| 2 | `live/fence-calibration`「fixture 不得高于已核账 head」 | 校准 head 7.133.0 落后 | 7.133.0 → 7.134.0 |
|
|
218
|
+
|
|
219
|
+
### 钉
|
|
220
|
+
|
|
221
|
+
`test/breaking-26.0.0-removals.test.ts`(反向钉)· `test/server-7134-wire.test.ts`(发布字节一族读 server 7.134.0 / 引擎 7.54.1 的真铸点:`approvalFrameFamiliesIssue` / `handleCapabilities` / `resumeCtxUnsealableAnswer` / `crossBoundaryTaintEventData` / `mapTraceEvent` / `buildFleetWorkflowRow` / 真 `ToolApprovalCoordinator` 的停驻读 / `resumeRefusalFacts` / `sessionErrorHttp`;引擎闭集逐词同序)· live `error-tariff-artifact` / `error-tariff-bare` / `s2-openraw-error-paths` / `fence-calibration`(对 7.134.0 发布字节重新校准)。被抬动的历史钉按真相翻面(`🔁 26.0.0` 标注)。
|
|
222
|
+
|
|
223
|
+
### 复审轮一修复
|
|
224
|
+
|
|
225
|
+
合并复审后的三处收口(版本仍是 26.0.0,尚未发):
|
|
226
|
+
|
|
227
|
+
1. **帧上的 `classifierUnavailable` / `ruleStoreUnreadable` 复原**(具型可选键)。两者的停铸版本(7.72 / 7.106)都在支持面内,7.69–7.105 的 server 仍发;闭形 inbox 行同两键本来就具型,帧上删掉就成了「同一个事实帧上读 `unknown`、行上读具型」。本版实际删的退役键因此收窄为 `persistedRuleShadowed` 一只(帧 + 卡,继任 `allowRuleShadowed`)与底线之下的 `ruleSuggestions`;律 ③、删表第 4 行、迁移表第 7 行、升级须知 5 同改。帧上这两键在底线 ≥ 7.106.0 时随下一个 major 删。
|
|
228
|
+
2. **`409 conflict.checkpoint_ctx_unsealable` 的出路按「门 × reason」读**(哪些门会发哪些词见 `CHECKPOINT_CTX_UNSEALABLE_REASONS` 的注 —— 权威句只写在那里):提交口的 `no_key_store`,同体原样重提仍是同一只 409 —— 要么给服务端配一个可写的保管目录,要么不带那些凭据再提交;续跑口的 `no_key_store` 与 `key_not_held` 同路:补回当初封它的那个保管目录、重启后原样重发(配一个新的空目录救不回旧密文,下一次读到的就是 `key_not_held`);`unopenable` / `plaintext` / `unrecognized_seal` 才是作为新任务重提(先取消仍停驻的那只)。`CheckpointCtxUnsealableExtra` 的读法句与随包 spec 的 `reason` 描述同句改。
|
|
229
|
+
3. **文字**:迁移表第 7 行写明帧 / 待批行读已删键读出 `unknown`、赋给具型位才红(卡型闭合则直接红)· `Capabilities.streamApproval` / `TaskRequest.approvalReach` 的注补「server ≥7.134.0 起提交体要声明 `settings.approvalFrameFamilies`」· `PersistedRuleMandate` 的计数注改成不带计数 · `sessions.sync.manifest()` 的注改信封形。
|
|
230
|
+
|
|
231
|
+
### 未闭环(显式列出)
|
|
232
|
+
|
|
233
|
+
- 支持面内恒发、但当年不是以「老底线」为由标可选的键,本版没有逐一收必有 —— 只收了上表 7 那几只;其余按下一版的逐键普查收。
|
|
234
|
+
- 守卫 `isApprovalCardV1` 对卡上 `askClass` / `classes` 仍只判串(既有盲区五位之二):本版这两位多了新词,守卫既不因新词拒卡、也不校验它。
|
|
235
|
+
|
|
236
|
+
## 25.0.0 — BREAKING changes(待发包;对表 server **7.133.0** 发布字节〔tag v7.133.0 = 41b72695,shasum 9f597e10c2639804d78a5ed91bea0ee8b9d1e9a7〕与它自己解析到的引擎 core **7.53.0**)—— 唯一 server 支持底线 **`3.0.0`**(不抬)
|
|
237
|
+
|
|
238
|
+
**BREAKING 五件**(消费方 `tsc` 红即通知;前两件是输出型做宽,后三件是 `./device` 子路径的两常量改形与设置请求体的具名化收窄):① `LivePendingRow.frame` 由 `ToolApprovalFrame` 做宽成 `ToolApprovalFrame | ApprovalRequestFrame`;② `ToolApprovalRespondAck` 由「已应用 | 已回放」两臂做宽成三臂(+ `ToolApprovalRespondParkedRedeemed`);③ `DEVICE_PROTOCOL_VERSION` 型由字面量 `1` 变 `DeviceProtocolRevision`(`1 | 2`)、值 1 → 2;④ `DEVICE_OUTCOME_ERROR_CODES` 由字面量元组变 `readonly DeviceOutcomeErrorCode[]`;⑤ 设置请求体上此前经索引签名可赋 `unknown` 的六个位具名化(`SettingsHookCommand.args` / `.plugin` · `SettingsPermissions.neverAuto` · `SemaSettings` 的 `readDenyPatterns` / `writeProtectedExtra` / `complianceAdditionalDenies`),`unknown` 值不再可直接赋。其余全部加性。
|
|
239
|
+
|
|
240
|
+
**消费方**:@client-core · @cli · @web-admin(三者读这一版的新位、新帧、新口与两处改形;各自的"我读了没有"见下「升级须知」)。
|
|
241
|
+
|
|
242
|
+
**对表物**:根 devDep `@sema-agent/server` 精确钉 **7.133.0**(装树字节 = registry tarball,shasum 同上;随装 core 7.53.0、契约包 `@sema-agent/settings-schema` 14.2.0 —— 本包 devDep 同批 `^14.2.0`,装树一份);live 围栏 `CALIBRATED_SERVER_HEAD` 7.132.0 → **7.133.0**。
|
|
243
|
+
|
|
244
|
+
**律(一条)**:每个 wire 面在本包只有一处形 —— 型、随包 `openapi.yaml`、对拍钉三处读同一份 server 7.133.0 发布字节;声明型与线上形不符的格子不带进发布(前两件做宽即由此而来);老 server 的读法 = 「键缺席」,不加版本分叉臂;server 恒在场而支持地板之内的老 server 会缺的键仍是可选;闭集词座(型是闭集、随包 `openapi.yaml` 是闭枚举)的守卫读同一张导出词表判成员,集外词判否 —— 呈卡帧走通用卡、消卡帧按 `askId` 清卡;只有声明为读侧开集的词表(型带开集尾),写法才开、新词零形变。
|
|
245
|
+
|
|
246
|
+
### 改形(BREAKING)
|
|
247
|
+
|
|
248
|
+
| # | 面 | 24.0.x | 本版 |
|
|
249
|
+
|---|---|---|---|
|
|
250
|
+
| 1 | `LivePendingRow.frame`(`GET /v1/approvals` 的 `livePending[]`、`/v1/approvals/stream` 的 `live_pending` 帧、`GET /v1/tool-approvals/:id` 的 `pending` 臂 —— 同一格同一张形) | `frame?: ToolApprovalFrame` | `frame?: ToolApprovalFrame \| ApprovalRequestFrame`,判别位 `frame.type`(`"tool_approval"` / `"approval_request"`);spec `LivePendingRow.frame` 同改成 `oneOf` 两臂 |
|
|
251
|
+
| 2 | `ToolApprovalRespondAck`(`client.toolApprovals.respond()` 的返回型,`POST /v1/tool-approvals/{id}/respond` 的 200) | `ToolApprovalRespondApplied \| ToolApprovalRespondReplayed`(判别位 `delivery` / `idempotent`) | 加第三臂 `ToolApprovalRespondParkedRedeemed`(判别位 `accepted: "parked_redeemed"`:卡的窗到期后转了后台候批,迟到答复**赎回**停驻卡的 200 回执,此前是 404);新守卫 `isToolApprovalParkedRedeemed`;`isToolApprovalReplayed` 不再认走「重放的赎回回执」(它同带 `accepted` 与 `idempotent: true`);spec `ToolApprovalRespondAck` 的 `oneOf` 多 `ToolApprovalRespondParkedRedeemed`(封闭,census 对这个 op 的闭合不动) |
|
|
252
|
+
| 3 | `@sema-agent/sdk/device` 的 `DEVICE_PROTOCOL_VERSION` | `DEVICE_PROTOCOL_VERSION = 1`(字面量型 `1`) | 型 `DeviceProtocolRevision`(`1 \| 2`),值 **2**(server ≥ 7.133.0 的修订号,受理窗 `[1, 2]`;≤ 7.132.x 的窗只有 1)。标注成字面量 `1` 编译红;无条件把它写进 hello 的 executor 对 ≤ 7.132.x 的 server 被 `protocol_version_unsupported` 拒 —— 见升级须知 4 |
|
|
253
|
+
| 4 | `@sema-agent/sdk/device` 的 `DEVICE_OUTCOME_ERROR_CODES` | 字面量元组(20 词:下标读出单词,`length` 是字面量 `20`) | `readonly DeviceOutcomeErrorCode[]`(= `deviceOutcomeErrorCodesAt(DEVICE_PROTOCOL_VERSION)`,当前修订号的那一份):下标读出带 `undefined` 的联合,`length` 是 `number`;按修订号取表用 `deviceOutcomeErrorCodesAt(revision)` / `DEVICE_OUTCOME_ERROR_CODES_BY_REVISION` |
|
|
254
|
+
| 5 | 设置请求体的六个位:`SettingsHookCommand.args` / `.plugin` · `SettingsPermissions.neverAuto` · `SemaSettings.readDenyPatterns` / `.writeProtectedExtra` / `.complianceAdditionalDenies` | 这三只接口带开放索引签名(`[k: string]: unknown`),六个键当时只能经它赋 —— 任何值(含 `unknown`)可赋 | 六个键各有具名型(`string[]` · `SettingsHookPluginContext` · `Array<string \| { pattern; caseSensitive? }>` · `Array<string \| { name; kind }>` · 合规禁项四词数组),`unknown` / 宽型的值不可直接赋,先校验再赋。**边界**:响应体 / 帧这类**消费方只读**的位上,同样的「索引签名 → 具名键」读出来是更窄的型,旧读法照编,仍按先例记加性;只有**消费方写**的位(请求体)上的收窄记 BREAKING |
|
|
255
|
+
|
|
256
|
+
### 加
|
|
257
|
+
|
|
258
|
+
| # | 面 | 本包 | 要点 |
|
|
259
|
+
|---|---|---|---|
|
|
260
|
+
| 1 | 流内帧 `session_titled`(server ≥ 7.133.0) | `AgentEvent` 臂 `{ type, sessionId, title }`;spec `Event_session_titled` | **只活不存**:无 `eventId` ⇒ 无 `id:` 行,只在提交这条 run 的 `POST /v1/tasks/stream` 连接上;同步 JSON 与 durable 回放里没有 |
|
|
261
|
+
| 2 | 呈卡族消卡帧 `approval_complete` + 开卡帧十位活面事实 | `ApprovalCompleteFrame` · `APPROVAL_COMPLETE_FRAME_KEYS` · `isApprovalCompleteFrameV1` · `HITL_FRAME_TYPES` +`approval_complete` · `ApprovalRequestLiveFacts` · `APPROVAL_REQUEST_LIVE_FACT_KEYS`;`AgentEvent` 臂载荷 `ApprovalFrameEnvelope`(SSE 解析腿不跑谓词) | 一条腿一个帧族:能力位 `approvalFrameFamilies` 说这条腿的开卡 / 消卡 / 撤卡属哪一族;`approval_request` 把旧族卡外的十位事实平铺在顶层(只在活铸的帧上,重放形恒缺席) |
|
|
262
|
+
| 3 | 按问读口 `GET /v1/tool-approvals/:id` | `client.toolApprovals.get(approvalId)` → `ToolApprovalReadBody`(按 `state` 四臂:`pending` / `decided` / `parked` / `void`)· `TOOL_APPROVAL_READ_STATES` | 纯读、零结算;`pending` 臂 = 列表行原样 + `state`,`frame` 与 `LivePendingRow.frame` 同一张形(单源,见「改形」1);属主不过与未知 id 同形 404 `tool_approval.not_pending` |
|
|
263
|
+
| 4 | `livePending[].consumerState` · 三处 durable 读面的 `checkpointId` · `noteRecorded` | `LivePendingRow.consumerState?: "absent"` · `PendingCheckpoint.checkpointId?` / `InboxRow.checkpointId?` · durable 决断口回执 `noteRecorded?` | 都只记真 / 读不出的老行键缺席;`consumerState: "absent"` = 本副本没有在等这只问的引擎腿 |
|
|
264
|
+
| 5 | 审批流读失败帧 | `APPROVALS_STREAM_READ_ERROR_CODES`(`approvals.read_unavailable` · `approvals.read_corrupt`)· `isTerminalFrame` | `read_unavailable` 是**建议帧**(流留着,**别据它重连**);`read_corrupt` 之后流结束 |
|
|
265
|
+
| 6 | 能力位 | `approvalFrameFamilies` · `approvalReadRootGrant` · `mcpAssertionHeaderSent` · `principalInboxDelivery` · `taskSettings.tightenOnlySeats` / `managedHookGroups` / `pluginHooks` · `settings.permissions.callerTrust`(`global` / `project`,开集读)· `deviceExecutor.protocolVersion` 值 2 | 全部见位才用;`callerTrust` 是**按调用方读的档**,不是版本位 |
|
|
266
|
+
| 7 | 场景与读面 | `KNOWN_SCENARIOS` +`cowork` · `ScenarioDetail.attachmentSupplies` · `PostureSource` +`lane` | 老 server 对 `cowork` 答 400 `scenario_unknown` —— 按 `capabilities.scenarios`(活词表)门控,别按 `KNOWN_SCENARIOS` |
|
|
267
|
+
| 8 | `wiring_manifest.permissionMode` | `WiringManifestPermissionMode { requested?, effective, foldedBy? }` · `PermissionModeFoldReason`(开集)· spec `Event_wiring_manifest` 加可选键 | 段缺席 = 老引擎 / 老 server;**按旧封闭 schema 严格校验帧的消费方,升级本包后才收得下这一键** |
|
|
268
|
+
| 9 | `hook_notice` 第三 / 四族与新词 | `FleetHookManagedUnrun`(十三词 `reason`)· `FleetHookVerdictUntrusted`(`input_truncated` / `matcher_over_budget`)· `FleetHookNonBlockingFailure.reason` +`matcher_over_budget` | 读侧开集;`FleetHookNotice` 联合从两族长到四族 |
|
|
269
|
+
| 10 | 请求 `settings.hooks[]` 新键与只收紧座位 | `SettingsHookGroupSource` · `SettingsHookPluginContext` · `SemaSettings` 的 `readDenyPatterns` / `writeProtectedExtra` / `complianceAdditionalDenies` / `permissions.neverAuto` | 见位才发(`taskSettings.*` 三位);位缺席 = 老 server 静默剥掉 / 对只收紧四键答 400 |
|
|
270
|
+
| 11 | `/health.centerIdentityNotice` | `CenterIdentityNotice`(`code` · `message` · `at` · `retained?`)· `CenterIdentityNoticeCode`(开集)· `CenterIdentityRetainedGroup` | 最近一条,不是事件日志;按 `at` 判"这条转述过没有";从未换过人 ⇒ 键缺席 |
|
|
271
|
+
| 12 | 配置目录面 | `client.configCatalog.get()` → `ConfigCatalog`(`rows` · `retired` · `centerDomains` …)· `ConfigCatalogRow.effectiveValueWithheld?: true` | operator-only;url 型行带凭据形被判 fail-closed 时值已是脱敏文,该位为真(只在真时出现) |
|
|
272
|
+
| 13 | `/v1/models` 的 `modelPlane` | `ModelPlane { servedTable, catalog, refusalCode?, gap? }`;`ModelsResponse.modelPlane?` | 服务哪张表 / 目录采纳态 / 路由缺口;恒在场(老 server 缺) |
|
|
273
|
+
| 14 | MCP 状态面逐台工具名 | `McpProbeFaceRow`(= 清单行 + `toolNames?` + `toolNamesTruncated?: true`)· `McpProbeFace.servers: McpProbeFaceRow[]` | 至多 200 个,恰 200 不截;缺席 = 老 server 或该台读数里没有名单,**不编 `[]`** |
|
|
274
|
+
| 15 | 会话视图 `agent` | `SessionAgent { id?, parentSessionId?, rootSessionId? }` · `SessionRecord.agent?` | 只投存下的 placement 元组;**缺席 ≠ 不是子代**(老 server 同缺) |
|
|
275
|
+
| 16 | 跨主体投递 | `client.principalInbox.send({ to, content, urgent? })` · `ORG_DELIVERY_REFUSAL_CODES`(四码)· `ORG_DELIVERY_REFUSAL_STATUS` · `isOrgDeliveryRefusal` | 默认关(501 `capability.unavailable`),先探 `principalInboxDelivery`;**本版只有投递半场,没有读走的 verb**;SDK 不自动重试 |
|
|
276
|
+
| 17 | 拒体机读位 | `INVALID_JSON_REASONS` / `InvalidJsonRefusalExtra`(`request.invalid_json`)· `RequestFieldRefusalReason` +`too_large`(413)· `FIELD_CONFLICT_KINDS` / `FieldConflictRefusalExtra`(`request.field_conflict`)· `EntryProblem` / `EntryProblemsRefusalExtra` / `SERVER_ENTRY_PROBLEM_REASONS` · `BelowTrustFloorExtra` · `conflict.session_placed`(409,`detail.placement_kind`) | 值都经 `APIError.extra` 原样到达;句子不锚,只锚码与键 |
|
|
277
|
+
| 18 | 受理告知 `warnings[]` | `RunReceipt.warnings?` · `TaskResult.warnings?` · `meta` 帧 `warnings?` | 放行侧选择器清单的受理告知;键缺席 = 没有告知 |
|
|
278
|
+
| 19 | 收编回执 | `AdoptionNotMigratedFace` +`org-delivery-quota` | `legs[].store` 的 `workflow_journal#scope` **换名** `workflow_journal_owner#scope`:按旧名对账的消费端要改 |
|
|
279
|
+
| 20 | device 协议修订号 2 | `DEVICE_PROTOCOL_VERSION` = 2(型 `DeviceProtocolRevision` = 1 \| 2;**值 1 → 2,`DEVICE_OUTCOME_ERROR_CODES` 由字面量元组变 `readonly DeviceOutcomeErrorCode[]` —— 都是 server 自己的形,见「升级须知」4**)· `deviceOutcomeErrorCodesAt(revision)` · `DEVICE_OUTCOME_ERROR_CODES_BY_REVISION` · `DEVICE_HELLO_ACK_BOUNDS` · `deviceHelloAckNumberFlaw` | server 受理窗 `[1, 2]`,修订号 2 起结局码含 `liveness_no_output`;握手照文档取 `Math.min(DEVICE_PROTOCOL_VERSION, challenge.protocolVersion)` |
|
|
280
|
+
| 21 | 子路径 `@sema-agent/sdk/model-route-env` | `MODEL_ROUTE_ENV_KEYS` · `readModelRouteEnv` · `envLaneTable` · `laneAndEndpointFor` + 七个型 | 对 `@sema-agent/server/model-route-env` 的镜像,**零运行时依赖**,同源锚门读 server 发布字节 |
|
|
281
|
+
| 22 | 回执 / 拒体 / 流事件上新声明的可选键 | `ToolApprovalRespondReplayed.noteRecorded` / `rulePersisted` / `ruleRefusal`(晚答回放体)· `AskDecisionAck.consumerState` 与 `ToolApprovalRespondApplied.consumerState`(应答回执同带「本副本没有引擎腿在等」位,不只列表行)· `PayloadWallRefusalExtra.field` / `reason` / `count` / `cap`(413 的统一撞帽机读位)· `ApprovalStreamEvent.errorCode` / `message`(审批流 `error` 帧此前只能经索引签名读成 `unknown`) | 都是 server ≥ 7.133.0 才发的可选键,老 server 缺席;全部随包 spec 同改 |
|
|
282
|
+
| 23 | 读根候选的 `covers` · 非人结局成因词表 · 按问读口的路径键 | `ToolApprovalFrame["readRootCandidate"]` 的 `covers?: "exact"`(型与随包 spec 同改,呈卡帧读同一处定义;7.133.0 发布字节的铸点把它逐键带出)· `APPROVAL_SETTLE_CAUSES`(导出常量,十四词;`ApprovalSettleCause` 由它派生,`isApprovalCompleteFrameV1` 读它)· spec 路径键 `GET /v1/tool-approvals/{id}`(随答复口与 server 路由标签,同一个 id 一个名字) | `covers` 缺席 = 目录(或老 server),`"exact"` = 命令点名的那一条路径本身 —— **加的是这个串本身**,别渲成「加目录」;`ToolApprovalRespondParkedRedeemed` 是封闭 interface,与两兄弟臂同形(本臂本版才有,不是收窄) |
|
|
283
|
+
|
|
284
|
+
### 🔴 迁移表(24.0.x 的写法 → 本版 → 怎么改)
|
|
285
|
+
|
|
286
|
+
| # | 24.0.x 的写法 | 本版 | 怎么改 |
|
|
287
|
+
|---|---|---|---|
|
|
288
|
+
| 1 | 读 `LivePendingRow.frame`:`row.frame?.toolName` / `.args` / `.askClass` 等当旧族帧成员读 | 联合上读出 `unknown`(呈卡形走索引签名),标注旧型(`const n: string \| undefined = row.frame?.toolName`)编译红 | 先 `SDK.isApprovalRequestFrameV1(row.frame)`(或判 `frame.type === "approval_request"`):是 ⇒ 卡内事实读 `frame.card.toolName` / `frame.card.args`,卡外十位活面事实在顶层;否则按旧族帧读(再判 `frame.type === "tool_approval"`) |
|
|
289
|
+
| 2 | `const f: ToolApprovalFrame \| undefined = row.frame` / 返回型写 `ToolApprovalFrame \| undefined` | 编译红(联合不可赋给旧单型) | 标注成 `ToolApprovalFrame \| ApprovalRequestFrame \| undefined`,或先窄化 |
|
|
290
|
+
| 3 | `const ack = await respond(…); if (isToolApprovalReplayed(ack)) … else ack.delivery`(「不是回放就是已应用」两步法) | `else` 支是 `Applied \| ParkedRedeemed`,`ack.delivery` 不再是 `"applied"`(赎回回执没有 `delivery`)—— 运行期会把赎回回执误读成已应用 | 新顺序:`isToolApprovalParkedRedeemed(ack)` → `isToolApprovalReplayed(ack)` → 其余才是已应用(`ack.delivery === "applied"` 确认);赎回回执读 `status` / `taskId` / `sessionId`(赎回腿的回执原样)与 `rulePersisted` 一族。**注**:行在 `PARKING`(正在转后台候批)时 server 答 **202** `{ reason: "parking_in_progress", retryAfterMs, decidePath? }`——这是 7.122.0 起就有、本包**至今没声明**的未应用回执(两个守卫都不认它),按 `reason` 读、稍后重试或走 `decidePath`;已登记为既有缺口,不在本版 |
|
|
291
|
+
| 4 | 把 `respond()` 的返回值标注 / 包装成 `ToolApprovalRespondApplied \| ToolApprovalRespondReplayed` | 编译红 | 标注 `ToolApprovalRespondAck` 或先窄化 |
|
|
292
|
+
| 5 | `const v: 1 = DEVICE_PROTOCOL_VERSION`;`buildHelloSignaturePayload({ …, protocolVersion: DEVICE_PROTOCOL_VERSION })` 无条件把本常量写进 hello(24.0.x 里它就是 1) | 型 `1 \| 2`、值 2:标注字面量 `1` 编译红;无条件声明 2 的 hello 对 ≤ 7.132.x 的 server 被 `protocol_version_unsupported` 拒 | 握手取 `Math.min(DEVICE_PROTOCOL_VERSION, challenge.protocolVersion)`(server 的 challenge 回它自己的号);要钉死老行为就发 `DEVICE_MIN_PROTOCOL_VERSION`;按修订号取结局码表用 `deviceOutcomeErrorCodesAt(revision)` |
|
|
293
|
+
| 6 | `DEVICE_OUTCOME_ERROR_CODES[0]` 当单词用(`const c: "aborted" = …`)· `DEVICE_OUTCOME_ERROR_CODES.length` 当字面量 `20` 用 | 数组型:下标读出 `DeviceOutcomeErrorCode \| undefined`,`length` 是 `number` —— 标注字面量编译红 | 判成员用 `DEVICE_OUTCOME_ERROR_CODES.includes(code)`;要固定一份用 `deviceOutcomeErrorCodesAt(revision)`;不要对下标 / 长度做字面量断言 |
|
|
294
|
+
| 7 | `const cmd: SettingsHookCommand = { type: "command", command, args }`(`args: unknown`)· `{ plugin }` · `SettingsPermissions` 的 `neverAuto` · `SemaSettings` 的三键,手上的值是 `unknown` / 宽型 | 编译红(具名型:`string[]` · `SettingsHookPluginContext` · `Array<…>`) | 先校验再赋:`Array.isArray(v) && v.every((x) => typeof x === "string")` 之类窄化成具名型后再放进去;值本来就是字面量的代码不用改 |
|
|
295
|
+
|
|
296
|
+
反向钉:`test/breaking-25.0.0-widening.test.ts`(`@ts-expect-error` 证旧写法不再编译;运行期证 SDK 没留兼容兜底:呈卡帧原样递出、赎回回执不合成 `delivery`)。
|
|
297
|
+
|
|
298
|
+
### 🔴 升级须知(三问;行为面)
|
|
299
|
+
|
|
300
|
+
1. **`LivePendingRow.frame` 在呈卡腿上不再是旧族帧(server ≥ 7.133.0)**。① *谁受影响*:读 `livePending[].frame` 的壳(@client-core 的审批队列、@cli 的审批卡、@web-admin 的待办列表)。② *不改会怎样*:server 的呈卡腿(`capabilities.approvalFrameFamilies` 含 `"approval_request"`)上这一格是 `approval_request` 帧,直接读旧键(`toolName` / `args`)得到 `undefined`、tsc 在标注处红。③ *怎么改*:见迁移表 1 / 2;补偿旋钮 = server 的 `STREAM_APPROVAL_ENABLED=false` 回到旧族腿。
|
|
301
|
+
2. **`respond()` 的 200 多一臂(迟到答复赎回停驻卡)**。① *谁受影响*:`client.toolApprovals.respond()` 的调用方(审批卡的 Yes / No 按钮处理)。② *不改会怎样*:卡的窗到期、行转了后台候批之后的迟到答复,server ≥ 7.133.0 不再答 404 而是 200 `accepted: "parked_redeemed"`;「不是回放就是已应用」的两步法会把它读成已应用(没有 `delivery`)。③ *怎么改*:见迁移表 3。
|
|
302
|
+
3. **审批流读失败帧**。① *谁受影响*:`approvals.stream()` 的读循环。② *不改会怎样*:server ≥ 7.133.0 在读失败时发 `event: error` + `approvals.read_unavailable` 而**流留着** —— 把"任何 `error` 帧都是终帧"的循环会在这里断流重连。③ *怎么改*:本包的 `isTerminalFrame` 已把这一码排除在终帧之外(`read_corrupt` 与其余 `error` 仍是终帧);自写循环的,按 `errorCode` 判,别按事件名。
|
|
303
|
+
4. **device 协议修订号 1 → 2,`DEVICE_OUTCOME_ERROR_CODES` 变 `readonly DeviceOutcomeErrorCode[]`**。① *谁受影响*:拿 `DEVICE_PROTOCOL_VERSION` 当 hello 声明号的 executor;对该常量做元组下标 / 长度字面量类型的代码。② *不改会怎样*:对 server ≤ 7.132.x(受理窗只有 1)发修订号 2 ⇒ 握手被 `protocol_version_unsupported` 拒;元组下标类型读出的是联合而不是单词。③ *怎么改*:握手取 `Math.min(DEVICE_PROTOCOL_VERSION, challenge.protocolVersion)`(server 的 challenge 回它自己的号);要钉死老行为就发 `DEVICE_MIN_PROTOCOL_VERSION`。两处都是 server 发布字节的原形(同源锚门逐常量 / 逐型声明体强制)。
|
|
304
|
+
5. **`wiring_manifest.permissionMode`(新可选键)**:按 sdk ≤ 24.0.x 的封闭 spec 严格校验 `wiring_manifest` 帧的消费方,对 server ≥ 7.133.0 的整帧失败 —— 升到本包(25.0.0)或对这一段放宽未知键。
|
|
305
|
+
6. **读侧开集**。新增的 `reason` / `code` 词表(hook 第三四族、`centerIdentityNotice.code`、`callerTrust`、`PermissionModeFoldReason`)读侧都是开集:不认识的词按"有变动 / 原因未知"渲,别丢记录、别抛。
|
|
306
|
+
7. **设置请求体的六个位不再接 `unknown`**(`SettingsHookCommand.args` / `.plugin` · `SettingsPermissions.neverAuto` · `SemaSettings.readDenyPatterns` / `.writeProtectedExtra` / `.complianceAdditionalDenies`)。① *谁受影响*:把外来配置(磁盘 JSON、前端表单、`unknown` 值的适配层)往这三只接口里装的代码。② *不改会怎样*:`tsc` 红(此前这些键只能经索引签名赋,任何值都过;现在是具名型)。③ *怎么改*:见迁移表 7 —— 先校验再赋;值本来就是字面量的代码不用动。运行期零变化(server 的受理门照旧,形错照旧 400)。
|
|
307
|
+
|
|
308
|
+
### 会让消费端穷举 `switch` 编译变红的加员(按先例记加性;逐项列出,每条一句「消费端补一条 case」)
|
|
309
|
+
|
|
310
|
+
- **`AgentEvent` +2 臂**(`approval_complete` · `session_titled`;`StampedAgentEvent["type"]` 同长,`HitlFrameType` / `HITL_FRAME_TYPES` +`approval_complete`):对 `AgentEvent` 做 `assertNever` 穷举的流分派,补两条 `case`(`session_titled` 渲标题;`approval_complete` 按 `askId` 清卡),或让未知帧走通用臂;按 `HitlFrameType` 穷举的帧分派表补一条 `approval_complete`。
|
|
311
|
+
- **`FleetHookNotice` +2 族**(`hook_managed_unrun` · `hook_verdict_untrusted`):对 `kind` 穷举的 hook 观测帧渲染,补两条 `case`。
|
|
312
|
+
- **`RequestFieldRefusalReason` +`too_large`**(闭集 3 → 4 词,字节量纲,只在 413 上):对 `reason` 穷举的拒体渲染,补一条 `case`。
|
|
313
|
+
- **`SettingsHooksRefusalDetail` +`wire_key_invalid`**(请求 `settings.hooks[]` 的 `source` / `plugin` / `args` 键形错):对 `detail.reason` 穷举的 `settings.hooks` 拒渲染,补一条 `case`。
|
|
314
|
+
- **`AdoptionNotMigratedFace` +`org-delivery-quota` · `permission-rule-approval-history` · `permission-rule-import-ticket`**(后两个是 server 早已在发、本包此前漏声明的词,本版一并补齐):对收编回执 `face` 穷举的渲染(`AdoptionNotMigrated.face` 同),补三条 `case`;`legs[].store` 的 `workflow_journal#scope` 换名 `workflow_journal_owner#scope`,按旧名对账的消费端要改。
|
|
315
|
+
- **`KNOWN_SCENARIOS` +`cowork`**(四名 → 五名):对该元组做穷举 / 生成表的消费端,补一条;老 server 对 `cowork` 答 400 `scenario_unknown`,按 `capabilities.scenarios`(活词表)门控。
|
|
316
|
+
|
|
317
|
+
### 七红项(门 6 在 server 7.133.0 发布字节上的七格,本版转绿)
|
|
318
|
+
|
|
319
|
+
| # | 文件 / 格 | 红 | 本版 |
|
|
320
|
+
|---|---|---|---|
|
|
321
|
+
| 1–3 | `live/device-protocol-mirror` 格①②⑤ | server 多四名(`DEVICE_OUTCOME_ERROR_CODES_BY_REVISION` / `deviceOutcomeErrorCodesAt` / `DEVICE_HELLO_ACK_BOUNDS` / `deviceHelloAckNumberFlaw`),`DEVICE_PROTOCOL_VERSION` 1 → 2、结局码按修订号分行 | `./device` 子路径镜像照 server 同形(见升级须知 4) |
|
|
322
|
+
| 4 | `live/error-tariff-bare` | 坏 JSON 体 `request.rejected → 400` 变 `request.invalid_json` | 表行换码 + 读 `err.extra.reason` |
|
|
323
|
+
| 5 | `live/fence-calibration` | 校准 head 落后 | 7.132.0 → 7.133.0 |
|
|
324
|
+
| 6–7 | `live/server-7117-faces`(`settings.permissions` 的单用户 / 多租两形) | `settings.permissions` 多 `callerTrust`(按调用方读) | 钉按 `permissionsAt("global")` 读 |
|
|
325
|
+
|
|
326
|
+
### 其他随版项
|
|
327
|
+
|
|
328
|
+
- 新子路径 `@sema-agent/sdk/model-route-env`(对 `@sema-agent/server/model-route-env` 的镜像,零运行时依赖;同源锚门读 server 发布字节,含导出名 / 常量 / 差分 / 型声明体 / 函数签名)。
|
|
329
|
+
- 会话视图 `agent { id?, parentSessionId?, rootSessionId? }`:**缺席 ≠ 不是子代**(老 server 同缺)。
|
|
330
|
+
- `isApprovalRequestFrameV1` 现在校验**在场的**十位活面事实(`mandated` / `mandate` / `origin` / `boundGrantDigest` / `boundGrants` / `classifierNoRuling` / `boundGrantAbsence` / `approvalCard` / `readRootCandidate` / `probeReason`):形错 ⇒ 判否(走通用卡),缺席仍合法;**键在场而值是显式 `undefined` 也算形错**(它是在场的一个非法值,不是缺席 —— 与 `exactOptionalPropertyTypes` 下可选位不收 `undefined` 的型同向)。其中**闭集词座**(`mandate` / `classifierNoRuling` / `boundGrantAbsence` / `approvalCard`)按各自词表数组判成员(`PERSISTED_RULE_MANDATES` / `AUTO_MODE_FALLBACK_CAUSES` / `BOUND_GRANT_ABSENCES` / `TOOL_APPROVAL_CARD_WORDS`;型是闭集、随包 spec 是闭枚举,守卫不比它们宽),`readRootCandidate.covers` 在场必须是新导出词表 `READ_ROOT_COVERS`(今天一词 `"exact"`;server 铸点与引擎类型里的词变了,同源锚当场红)的成员;`origin` 是开集,只判串。`isApprovalCompleteFrameV1` 的 `cause` 同理按新导出的 `APPROVAL_SETTLE_CAUSES`(十四词,词与序逐位同 server 与 spec 枚举)判成员。*谁受影响*:自己拼帧喂守卫的代码,与比本包新的 server(引擎加了词、本包还没跟)—— 集外词判否:呈卡帧走通用卡,消卡帧按 `askId` 清卡、别猜结局。*补偿*:升到跟上那一版的本包(同源锚逼着词表与 spec 同批加员);server 铸出的合规帧不受影响。**守卫收紧**:三只窄化谓词(`isApprovalRequestFrameV1` / `isApprovalCompleteFrameV1` / `isApprovalRevokeFrameV1`)对**它们判得了形的**可选位同读「缺席合法、在场必须成形」—— 整张卡(风险两轴 / 委派 / 规则候选与 offer / 规则证据 / 探测成因 / 拒次兜底 / `argsOmitted` 等真值位)、十位活面事实、消卡帧的 `cause` / `parked`、撤卡帧的 `taskId` —— 一只内部判成函数,所以显式 `undefined` 在这些位上一律判否(此前当缺席放行)。**例外(既有盲区,本版不动)**:卡上的 `governanceForced` / `rememberRefused` / `askClass` / `classes` / `classifierUnavailable` 五位本来就不进谓词,在场时任何值(含 `undefined`)都过。*谁受影响*:自己拼帧、把「没有」写成 `key: undefined` 的代码(`JSON.parse` 出来的帧没有 `undefined` 值,server 帧不受影响);*补偿*:把「没有」写成键缺席(不写该键,或 `delete`)。
|
|
331
|
+
- `ApprovalRequestFrame` 现在 `extends ApprovalRequestLiveFacts`(与 server 自己的形一致):十位活面事实只在座型上声明一次;在 `exactOptionalPropertyTypes` 下这十位不收显式 `undefined`(从 JSON 解出来的帧本来就没有这种值;自己拼帧的代码把「没有」写成缺席而不是 `undefined`)。**型收紧还有一处**:`ApprovalCard.ruleEvidence` 改用 `NonNullable<ToolApprovalFrame["ruleEvidence"]>` 取型(此前的索引取型把 `undefined` 带进了这个可选位),所以 `exactOptionalPropertyTypes` 下写显式 `undefined` 的卡字面量(例如 `{ …, ruleEvidence: frame.ruleEvidence }`,而源位可缺)现在是 TS2375,v24 编得过。*谁受影响*:开该旗、自己拼卡或拷卡的代码(`JSON.parse` 出来的卡没有这种值,不受影响);*补偿*:省略该键(源位缺席时不写 `ruleEvidence`)。
|
|
332
|
+
- 计划门(`plan_review`)停住帧的注更正:第一次停住就落 `needs_review` 臂(无 `toolCallId`),与 `suspended` 不相交(型不动)。
|
|
333
|
+
- `ApprovalStaleError` 的类注改成「一码两因」:有 `terminal` = 终局,重拉;无 `terminal` 且有 `currentPending` = 绑定旧了,用 `currentPending` 一跳重决;只有 `boundInputHash` 错才落 core 的裸 409 `approval_binding_mismatch`(型不动)。
|
|
334
|
+
|
|
335
|
+
### 没有型面动作的 7.133.0 变化(只写进注)
|
|
336
|
+
|
|
337
|
+
- `approvalId` 对有行的 ask 恒等于行键 `askId`(64 位十六进制串)—— 当不透明串用,不要解析。
|
|
338
|
+
- 读口行为(黑盒可见,型不变):坏 JSON 体恒答 400 `request.invalid_json`(原 `request.rejected`)、读体超 8 MiB 恒答 413 `request.payload_too_large`(`reason: "too_large"`);匿名任务列表对不带主体的调用方列属主为空的 run。
|
|
339
|
+
|
|
340
|
+
### 钉
|
|
341
|
+
|
|
342
|
+
`test/breaking-25.0.0-widening.test.ts`(反向钉)· `test/server-7133-wire.test.ts`(发布字节一族读 server 7.133.0 的真铸点:`buildSessionTitledFrame` / `buildApprovalCompleteFrame` / `buildApprovalRequestFrame` / `hookNoticeWire` / `wiringManifestEventData` / `buildConfigCatalog` / `buildBoundedToolNames` / `sessionAgentOf` / `handlePrincipalInbox` / `sessionErrorHttp` / `fieldConflictFacts` / `handleCapabilities` / **真 `ToolApprovalCoordinator` 的赎回回执**;server 自铸词表 `SELF_MINTED_WIRE` 里"带 7.133.0 成员的表名清单"本身也钉住 —— server 再多一张表,这里先红)·
|
|
343
|
+
`test/stream-approval-protocol.test.ts`(十位活面事实座:键清单 ≡ `keyof` 座型 ≡ 两个 interface 与 spec 的具名成员、逐位型一致)·
|
|
344
|
+
`test/server-7133-wire.test.ts` 里读根候选 `covers` 的真铸点格、闭集词座「守卫 ≡ spec」格、`respond()` 三臂同形(封闭)格、BREAKING 件数与迁移表 / 反向钉对账格、文字对表格;
|
|
345
|
+
live `test/live/model-route-env-mirror.test.ts` · `device-protocol-mirror` / `error-tariff-bare` / `server-7117-faces` / `fence-calibration`(对 7.133.0 发布字节重新校准)。
|
|
346
|
+
被抬动的历史钉按真相翻面(`🔁 25.0.0` 标注):`server-7106` J3 / J4 · `server-7109` A6(`live.frame` 先按 `frame.type` 窄化)· `server-7113` S3 · `server-7114` H3b · `server-7115` A5 / C3 / M4 · `server-7116` O1 / O2 · `server-7117` S2 / C1 / C2 / M1 · `server-7118` M2 · `server-7124` T8 · `server-7126` X2 / B12 · `server-7132` T4 · `tool-approvals` #154 + `applied()` 辅助 · `s185` G7b。
|
|
347
|
+
|
|
348
|
+
### 未闭环(显式列出)
|
|
349
|
+
|
|
350
|
+
- `McpServerSpec.source`(请求体 `mcpServers[i].source`)今天在 server 上是自由展示标签,不是契约附录里的闭集 —— 型面等闭集随 server 后续版本到货时同拍加(`test/server-7133-wire.test.ts` S5 的缺席钉到时翻正向)。
|
|
351
|
+
|
|
115
352
|
## 24.0.0 — BREAKING changes(对表 server **7.132.0** 发布字节〔tag v7.132.0 = 5df75153,shasum 7f951ca5784ec3e3172e4338f5a98085384a116a,4252855 字节〕与它自己解析到的引擎 core **7.53.0**)—— 唯一 server 支持底线 **`3.0.0`**(不抬)
|
|
116
353
|
|
|
117
354
|
**对表物**:根 devDep `@sema-agent/server` 精确钉 **7.132.0**(装树字节 = registry tarball,shasum 同上;随装 core 7.53.0、契约包 `@sema-agent/settings-schema` 14.0.0 —— 本包 devDep 同批 `^14.0.0`,装树一份);live 围栏 `CALIBRATED_SERVER_HEAD` 7.131.0 → **7.132.0**。
|
|
@@ -3163,9 +3400,9 @@ The bundled spec is importable:
|
|
|
3163
3400
|
import specPath from "@sema-agent/sdk/openapi.yaml";
|
|
3164
3401
|
```
|
|
3165
3402
|
|
|
3166
|
-
The supported-floor sentence
|
|
3167
|
-
number back out of this file and refuses to run against a server below it
|
|
3168
|
-
gated by `packages/sdk/test/fence-version-policy.test.ts`). Reword the sentence and the gate goes red by
|
|
3403
|
+
The supported-floor sentence under **Install** is load-bearing, not prose: the consumer contract suite reads that
|
|
3404
|
+
number back out of this file (the FIRST `Supported floor:` sentence) and refuses to run against a server below it
|
|
3405
|
+
(`packages/sdk/test/live/_fence.ts`, gated by `packages/sdk/test/fence-version-policy.test.ts`). Reword the sentence and the gate goes red by
|
|
3169
3406
|
design — keep the `Supported floor: \`@sema-agent/server\` >= X.Y.Z` form, or change the constant with it.
|
|
3170
3407
|
|
|
3171
3408
|
## License
|
package/dist/client.d.ts
CHANGED
|
@@ -11,13 +11,13 @@ import { TraceResource } from "./resources/trace.js";
|
|
|
11
11
|
import { LeaderResource } from "./resources/leader.js";
|
|
12
12
|
import { MemoryResource } from "./resources/memory.js";
|
|
13
13
|
import { ImagesResource, BakesResource } from "./resources/images.js";
|
|
14
|
-
import {
|
|
14
|
+
import { PrincipalInboxResource } from "./resources/principal-inbox.js";
|
|
15
|
+
import { ConfigCatalogResource, MetricsResource, OutcomesResource, SendfileLinksResource, WiringDiagnosticsResource } from "./resources/ops.js";
|
|
15
16
|
import { ModelsResource } from "./resources/models.js";
|
|
16
17
|
import { UsageResource } from "./resources/usage.js";
|
|
17
18
|
import { PolicyResource } from "./resources/policy.js";
|
|
18
19
|
import { WorkflowsResource } from "./resources/workflows.js";
|
|
19
20
|
import { FleetResource } from "./resources/fleet.js";
|
|
20
|
-
import { WorkspaceResource } from "./resources/workspace.js";
|
|
21
21
|
import { AttachmentsResource } from "./resources/attachments.js";
|
|
22
22
|
import { RulesResource } from "./resources/rules.js";
|
|
23
23
|
import { AdoptionResource } from "./resources/adoption.js";
|
|
@@ -128,9 +128,6 @@ export declare class AgentClient {
|
|
|
128
128
|
* task/workflow upsert/remove 帧(FULL row,update-in-place)。owner-scoped、scope 已 wire 剥、不 resumable。
|
|
129
129
|
* 🔴 与 control-plane 的 `ControlClient.fleet`(config-center 控制面)是不同类、不同 backend,勿混。 */
|
|
130
130
|
readonly fleet: FleetResource;
|
|
131
|
-
/** workspace 浏览面(#3,server ≥1.299)——E19 快照店只读投影(任务产出浏览/预览/tar 下载)。
|
|
132
|
-
* 探测 `capabilities().workspace`(对象/false),DON'T trial-by-501。 */
|
|
133
|
-
readonly workspace: WorkspaceResource;
|
|
134
131
|
/** D-1 通用文件上传(server ≥1.289):upload → TaskRequest.attachmentIds 引用 → 执行环境 attachments/ 物化。 */
|
|
135
132
|
readonly attachments: AttachmentsResource;
|
|
136
133
|
/** 运维观测面(SDK 全覆盖批 2026-07-17):/metrics 三读面。 */
|
|
@@ -141,6 +138,10 @@ export declare class AgentClient {
|
|
|
141
138
|
readonly sendfileLinks: SendfileLinksResource;
|
|
142
139
|
/** GET /v1/diagnostics/wiring — 装配自证(operator-only;老 server 404)。 */
|
|
143
140
|
readonly wiringDiagnostics: WiringDiagnosticsResource;
|
|
141
|
+
/** GET /v1/config/catalog — 部署配置目录(operator-only;`capabilities.configCatalog` 先探;老 server 404)。 */
|
|
142
|
+
readonly configCatalog: ConfigCatalogResource;
|
|
143
|
+
/** POST /v1/principal-inbox/messages — 跨主体投递(server ≥7.133.0;默认关 ⇒ 501;`capabilities.principalInboxDelivery` 先探)。 */
|
|
144
|
+
readonly principalInbox: PrincipalInboxResource;
|
|
144
145
|
/** sandbox 镜像烧制控制面(client.images 的 bake 半场;operator/runner 两主体)。 */
|
|
145
146
|
readonly bakes: BakesResource;
|
|
146
147
|
/** #154 车二 —— **持久权限规则**的 CC settings 导入两口(prepare 预览+票 → redeem 兑付)。
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -21,13 +21,13 @@ import { TraceResource } from "./resources/trace.js";
|
|
|
21
21
|
import { LeaderResource } from "./resources/leader.js";
|
|
22
22
|
import { MemoryResource } from "./resources/memory.js";
|
|
23
23
|
import { ImagesResource, BakesResource } from "./resources/images.js";
|
|
24
|
-
import {
|
|
24
|
+
import { PrincipalInboxResource } from "./resources/principal-inbox.js";
|
|
25
|
+
import { ConfigCatalogResource, MetricsResource, OutcomesResource, SendfileLinksResource, WiringDiagnosticsResource } from "./resources/ops.js";
|
|
25
26
|
import { ModelsResource } from "./resources/models.js";
|
|
26
27
|
import { UsageResource } from "./resources/usage.js";
|
|
27
28
|
import { PolicyResource } from "./resources/policy.js";
|
|
28
29
|
import { WorkflowsResource } from "./resources/workflows.js";
|
|
29
30
|
import { FleetResource } from "./resources/fleet.js";
|
|
30
|
-
import { WorkspaceResource } from "./resources/workspace.js";
|
|
31
31
|
import { AttachmentsResource } from "./resources/attachments.js";
|
|
32
32
|
import { RulesResource } from "./resources/rules.js";
|
|
33
33
|
import { AdoptionResource } from "./resources/adoption.js";
|
|
@@ -92,9 +92,6 @@ export class AgentClient {
|
|
|
92
92
|
* task/workflow upsert/remove 帧(FULL row,update-in-place)。owner-scoped、scope 已 wire 剥、不 resumable。
|
|
93
93
|
* 🔴 与 control-plane 的 `ControlClient.fleet`(config-center 控制面)是不同类、不同 backend,勿混。 */
|
|
94
94
|
fleet;
|
|
95
|
-
/** workspace 浏览面(#3,server ≥1.299)——E19 快照店只读投影(任务产出浏览/预览/tar 下载)。
|
|
96
|
-
* 探测 `capabilities().workspace`(对象/false),DON'T trial-by-501。 */
|
|
97
|
-
workspace;
|
|
98
95
|
/** D-1 通用文件上传(server ≥1.289):upload → TaskRequest.attachmentIds 引用 → 执行环境 attachments/ 物化。 */
|
|
99
96
|
attachments;
|
|
100
97
|
/** 运维观测面(SDK 全覆盖批 2026-07-17):/metrics 三读面。 */
|
|
@@ -105,6 +102,10 @@ export class AgentClient {
|
|
|
105
102
|
sendfileLinks;
|
|
106
103
|
/** GET /v1/diagnostics/wiring — 装配自证(operator-only;老 server 404)。 */
|
|
107
104
|
wiringDiagnostics;
|
|
105
|
+
/** GET /v1/config/catalog — 部署配置目录(operator-only;`capabilities.configCatalog` 先探;老 server 404)。 */
|
|
106
|
+
configCatalog;
|
|
107
|
+
/** POST /v1/principal-inbox/messages — 跨主体投递(server ≥7.133.0;默认关 ⇒ 501;`capabilities.principalInboxDelivery` 先探)。 */
|
|
108
|
+
principalInbox;
|
|
108
109
|
/** sandbox 镜像烧制控制面(client.images 的 bake 半场;operator/runner 两主体)。 */
|
|
109
110
|
bakes;
|
|
110
111
|
/** #154 车二 —— **持久权限规则**的 CC settings 导入两口(prepare 预览+票 → redeem 兑付)。
|
|
@@ -285,6 +286,8 @@ export class AgentClient {
|
|
|
285
286
|
this.outcomes = new OutcomesResource(t);
|
|
286
287
|
this.sendfileLinks = new SendfileLinksResource(t);
|
|
287
288
|
this.wiringDiagnostics = new WiringDiagnosticsResource(t);
|
|
289
|
+
this.configCatalog = new ConfigCatalogResource(t);
|
|
290
|
+
this.principalInbox = new PrincipalInboxResource(t);
|
|
288
291
|
this.bakes = new BakesResource(t);
|
|
289
292
|
this.memory = new MemoryResource(t);
|
|
290
293
|
this.images = new ImagesResource(t);
|
|
@@ -293,7 +296,6 @@ export class AgentClient {
|
|
|
293
296
|
this.policy = new PolicyResource(t);
|
|
294
297
|
this.workflows = new WorkflowsResource(t);
|
|
295
298
|
this.fleet = new FleetResource(t);
|
|
296
|
-
this.workspace = new WorkspaceResource(t);
|
|
297
299
|
this.attachments = new AttachmentsResource(t);
|
|
298
300
|
this.rules = new RulesResource(t);
|
|
299
301
|
this.adoption = new AdoptionResource(t);
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAChJ,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkBrD,qFAAqF;AACrF,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,6DAA6D;IAC7E,CAAC;IACD,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAuBD,kEAAkE;AAClE,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAsBrD,MAAM,OAAO,WAAW;IACb,KAAK,CAAgB;IACrB,IAAI,CAAe;IACnB,QAAQ,CAAmB;IAC3B,SAAS,CAAoB;IACtC;2HACuH;IAC9G,YAAY,CAAuB;IAC5C;;;4CAGwC;IAC/B,SAAS,CAAoB;IACtC;;;;sFAIkF;IACzE,aAAa,CAAwB;IAC9C;oEACgE;IACvD,SAAS,CAAoB;IACtC,sHAAsH;IAC7G,SAAS,CAAoB;IAC7B,KAAK,CAAgB;IACrB,MAAM,CAAiB;IAChC;;;yFAGqF;IAC5E,MAAM,CAAiB;IAChC,4EAA4E;IACnE,MAAM,CAAiB;IAChC,8GAA8G;IACrG,MAAM,CAAiB;IAChC,yFAAyF;IAChF,KAAK,CAAgB;IAC9B,uFAAuF;IAC9E,MAAM,CAAiB;IAChC,4GAA4G;IACnG,SAAS,CAAoB;IACtC;;2FAEuF;IAC9E,KAAK,CAAgB;IAC9B,8FAA8F;IACrF,WAAW,CAAsB;IAC1C,+CAA+C;IACtC,OAAO,CAAkB;IAClC,oDAAoD;IAC3C,QAAQ,CAAmB;IACpC,oDAAoD;IAC3C,aAAa,CAAwB;IAC9C,qEAAqE;IAC5D,iBAAiB,CAA4B;IACtD,mGAAmG;IAC1F,aAAa,CAAwB;IAC9C,qHAAqH;IAC5G,cAAc,CAAyB;IAChD,oEAAoE;IAC3D,KAAK,CAAgB;IAC9B;;iGAE6F;IACpF,KAAK,CAAgB;IAC9B;+DAC2D;IAClD,QAAQ,CAAmB;IACpC;;;;;kEAK8D;IACrD,OAAO,CAAkB;IAClC,+GAA+G;IACtG,KAAK,CAAgB;IAEb,MAAM,CAAoB;IAC1B,SAAS,CAAY;IAEtC;qGACiG;IACjG,YAAY,CAAC,IAA+B;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjH,CAAC;IAED;;;;;;+FAM2F;IAC3F,oBAAoB,CAAC,IAAY,EAAE,IAA+B;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAiB;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,8BAA8B,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAC9D,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,CAAC,IAA+B;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACrH,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,UAA2B,EAAE,IAA+B;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAe;YAC1C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,4BAA4B;YAClC,IAAI,EAAE,EAAE,UAAU,EAAE;YACpB,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;6GAEyG;IACzG,aAAa,CAAC,SAAoB;QAChC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;QAClI,OAAO,IAAI,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,mEAAmE;QAChG,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAE,MAAM,CAAC,SAAgC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3I,0EAA0E;QAC1E,sEAAsE;QACtE,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;QAC3C,2DAA2D;QAC3D,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mJAAmJ,CAAC,CAAC;QAC5M,mGAAmG;QACnG,4FAA4F;QAC5F,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACtE,IAAI,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,kJAAkJ,CAAC,CAAC;YACtK,CAAC;YACD,IAAI,IAAI,KAAK,mBAAmB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,+JAA+J,CAAC,CAAC;YACnL,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,uGAAuG;QACvG,6FAA6F;QAC7F,0CAA0C;QAC1C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAQ,UAAmC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACzG,MAAM,IAAI,KAAK,CAAC,wKAAwK,CAAC,CAAC;QAC5L,CAAC;QACD,yGAAyG;QACzG,0GAA0G;QAC1G,0GAA0G;QAC1G,sFAAsF;QACtF,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,8EAA8E;QAC9E,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,wBAAwB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3F,MAAM,IAAI,GAAqB;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;YACrC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,SAAS,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;YAChC,eAAe;YACf,YAAY,EAAE,CAAC,cAAc,EAAE,EAAE;gBAC/B,MAAM,CAAC,GAA2B,EAAE,CAAC;gBACrC,IAAI,SAAS,KAAK,SAAS;oBAAE,CAAC,CAAC,aAAa,GAAG,UAAU,SAAS,EAAE,CAAC;gBACrE,yDAAyD;gBACzD,qCAAqC;gBACrC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;oBAAE,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;gBAChF,CAAC,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;gBACvC,IAAI,cAAc;oBAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC;gBAC1D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,yDAAyD;YACzD,yDAAyD;YACzD,GAAG,CAAC,KAAK;gBACP,CAAC,CAAC;oBACE,QAAQ,EAAE,CAAC,MAAc,EAAE,IAAa,EAAE,YAAqB,EAAE,EAAE;wBACjE,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;wBACjD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;4BAAE,CAAC,CAAC,OAAO,IAAI,kGAAkG,CAAC;wBACtJ,OAAO,CAAC,CAAC;oBACX,CAAC;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;CACF"}
|