@sema-agent/sdk 26.1.0 → 27.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.
Files changed (78) hide show
  1. package/README.md +81 -1
  2. package/dist/abort.d.ts +25 -0
  3. package/dist/abort.d.ts.map +1 -0
  4. package/dist/abort.js +42 -0
  5. package/dist/abort.js.map +1 -0
  6. package/dist/client.d.ts +8 -3
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +5 -4
  9. package/dist/client.js.map +1 -1
  10. package/dist/control-client.d.ts +4 -2
  11. package/dist/control-client.d.ts.map +1 -1
  12. package/dist/control-client.js +3 -3
  13. package/dist/control-client.js.map +1 -1
  14. package/dist/errors.d.ts +32 -10
  15. package/dist/errors.d.ts.map +1 -1
  16. package/dist/errors.js +15 -6
  17. package/dist/errors.js.map +1 -1
  18. package/dist/events.d.ts +3 -0
  19. package/dist/events.d.ts.map +1 -1
  20. package/dist/events.js.map +1 -1
  21. package/dist/model-route-env/index.d.ts +11 -4
  22. package/dist/model-route-env/index.d.ts.map +1 -1
  23. package/dist/model-route-env/index.js +52 -3
  24. package/dist/model-route-env/index.js.map +1 -1
  25. package/dist/registry/auth.d.ts.map +1 -1
  26. package/dist/registry/auth.js +23 -13
  27. package/dist/registry/auth.js.map +1 -1
  28. package/dist/registry/client.d.ts +9 -1
  29. package/dist/registry/client.d.ts.map +1 -1
  30. package/dist/registry/client.js +17 -2
  31. package/dist/registry/client.js.map +1 -1
  32. package/dist/registry/read-body.d.ts +2 -0
  33. package/dist/registry/read-body.d.ts.map +1 -0
  34. package/dist/registry/read-body.js +24 -0
  35. package/dist/registry/read-body.js.map +1 -0
  36. package/dist/registry/scopes-effective.d.ts.map +1 -1
  37. package/dist/registry/scopes-effective.js +4 -2
  38. package/dist/registry/scopes-effective.js.map +1 -1
  39. package/dist/resources/approvals.d.ts +23 -8
  40. package/dist/resources/approvals.d.ts.map +1 -1
  41. package/dist/resources/approvals.js +4 -3
  42. package/dist/resources/approvals.js.map +1 -1
  43. package/dist/resources/attachments.d.ts +2 -1
  44. package/dist/resources/attachments.d.ts.map +1 -1
  45. package/dist/resources/attachments.js +3 -9
  46. package/dist/resources/attachments.js.map +1 -1
  47. package/dist/resources/fleet.d.ts +0 -36
  48. package/dist/resources/fleet.d.ts.map +1 -1
  49. package/dist/resources/fleet.js +40 -1
  50. package/dist/resources/fleet.js.map +1 -1
  51. package/dist/resources/ops.d.ts +2 -1
  52. package/dist/resources/ops.d.ts.map +1 -1
  53. package/dist/resources/ops.js +4 -6
  54. package/dist/resources/ops.js.map +1 -1
  55. package/dist/resources/session-sync.d.ts +11 -3
  56. package/dist/resources/session-sync.d.ts.map +1 -1
  57. package/dist/resources/session-sync.js +7 -8
  58. package/dist/resources/session-sync.js.map +1 -1
  59. package/dist/resources/sessions.d.ts +9 -3
  60. package/dist/resources/sessions.d.ts.map +1 -1
  61. package/dist/resources/sessions.js +10 -12
  62. package/dist/resources/sessions.js.map +1 -1
  63. package/dist/resources/tool-approvals.d.ts +14 -5
  64. package/dist/resources/tool-approvals.d.ts.map +1 -1
  65. package/dist/resources/tool-approvals.js +14 -6
  66. package/dist/resources/tool-approvals.js.map +1 -1
  67. package/dist/sse.d.ts.map +1 -1
  68. package/dist/sse.js +4 -4
  69. package/dist/sse.js.map +1 -1
  70. package/dist/transport.d.ts +61 -21
  71. package/dist/transport.d.ts.map +1 -1
  72. package/dist/transport.js +123 -25
  73. package/dist/transport.js.map +1 -1
  74. package/dist/types.d.ts +30 -8
  75. package/dist/types.d.ts.map +1 -1
  76. package/dist/types.js.map +1 -1
  77. package/openapi.yaml +88 -26
  78. package/package.json +2 -2
package/dist/transport.js CHANGED
@@ -3,24 +3,36 @@
3
3
  * Retry-After; default 2), Idempotency-Key, error mapping. principal + authToken injected per request.
4
4
  *
5
5
  * 🔴 retry red line (idempotency.ts): a submit (POST tasks/runs) retries ONLY with an idempotency key.
6
- * A non-submit POST (e.g. approvals.decide) is NOT retried (could double-act). GETs always retry —
7
- * except a response whose code the server declares DETERMINISTIC ({@link NON_RETRYABLE_CODES}, K-24).
6
+ * A non-submit POST (e.g. approvals.decide) is NOT retried (could double-act). A GET retries a status in {@link RETRYABLE_STATUS} —
7
+ * except a response the server declares DETERMINISTIC: its code is in {@link NON_RETRYABLE_CODES} OR its body says
8
+ * `permanence: "terminal"` (K-24; one judge: {@link isDeterministicFailure}).
9
+ * 🔴 success = 2xx, or a 304 answering a CONDITIONAL request (one that carried `if-none-match`, read off the headers actually sent —
10
+ * `isConditionalRequest`); a 304 to an unconditional request is a non-2xx like any other ⇒ typed error.
11
+ * 🔴 cancellation: the caller's `signal` always reaches `fetch` (`openStream` / `openRaw` hand it over as is — a native `fetch` refuses an aborted
12
+ * signal without sending). The retrier adds what only a loop needs: it checks before every attempt, its backoff wakes on abort, and once the
13
+ * caller has aborted a FAILED attempt rejects with `signal.reason`; a success response is handed back as is (the retrier never discards an
14
+ * answer on abort; its body is then read under the same signal).
8
15
  * 🔴 streaming retry is "establish connection" only; an established stream that drops resumes via Last-Event-ID
9
16
  * (sse.ts) and does NOT consume a retry count.
17
+ * 🔴 ONE retrier (`fetchWithRetry`): `request()` and `openRawGet()` share it. **GET read doors obey one law** — every GET whose answer is a bounded
18
+ * body goes through it (JSON GETs via `request()`; the raw-body GETs — session-sync pull legs, attachment download, session head probe, Prometheus text —
19
+ * via `openRawGet()`, retried only BEFORE the first byte). `openRaw()` / `openStream()` stay single-shot by construction: a long-lived SSE stream is not a
20
+ * read door (it resumes from a cursor in the caller's loop).
10
21
  *
11
- * STATUS: request() / openStream() / openRaw() are all implemented + consumer contract tests
22
+ * STATUS: request() / openStream() / openRaw() / openRawGet() are all implemented + consumer contract tests
12
23
  * (the old "openStream() is TODO(M2)" note predated :118 and was stale).
13
24
  */
25
+ import { sleep, throwIfAborted } from "./abort.js";
14
26
  import { APIError, toApiError } from "./errors.js";
15
27
  import { resolveIdempotencyKey } from "./idempotency.js";
16
28
  /** Statuses the SDK retries (with backoff). 409 is NOT here — it's a semantic conflict, surfaced typed.
17
29
  *
18
- * 🔴 [2400] X-16 —— **request() 这一条腿的闭集重试矩阵**,六个码,没有第七个。
30
+ * 🔴 [2400] X-16 —— **唯一重试器 `fetchWithRetry`(`request()` 与 `openRawGet()` 共用)的闭集重试矩阵**,六个码,没有第七个。
19
31
  * - 语义:只重试「同一个请求再发一次是安全的、且服务端明确表示了这次不算数」的码。
20
32
  * 408 请求超时 / 429 限流 / 500 / 502 / 503 / 504 —— 全是「重来可能成功」且**不会**产生第二份副作用的形。
21
33
  * - **不在集内的一律不重试**,尤其是 409(冲突:CAS 基线错了,重发只会再错一次)、400 / 422(形错)、
22
34
  * 401 / 403(凭证/权限)、404、413 —— 这些码重试是纯浪费,且会把一个确定性的失败拖成一串超时。
23
- * - **只有 {@link Transport.request} 消费它**。{@link Transport.openStream} 与 {@link Transport.openRaw}
35
+ * - **只有那一只重试器 `Transport.fetchWithRetry` 消费它**(它的两个调用方:{@link Transport.request} 与 {@link Transport.openRawGet} —— 后者是所有「有界体的原始 GET」读口的开请求〔会话同步拉取腿 / 附件下载 / 会话轻探针 / Prometheus 文本〕,**只在首字节之前**重试)。{@link Transport.openStream} 与 {@link Transport.openRaw}
24
36
  * 是 SINGLE-SHOT by construction:它们各自只发一次 fetch、把 Response 原样交出去,**从不查这张表**。
25
37
  * 流的「重试」在语义上是「从 Last-Event-ID 重开」,只有调用方的游标知道从哪继续 —— 所以那件事归
26
38
  * `parseSse` / `parseFrameStream` / `approvals.stream` 的循环,不归 transport。别把这张表读成全局策略。
@@ -28,8 +40,8 @@ import { resolveIdempotencyKey } from "./idempotency.js";
28
40
  export const RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);
29
41
  /**
30
42
  * 🔴 K-24(server 7.104.0)—— **确定性失败码**:状态落在 {@link RETRYABLE_STATUS} 里,但 server 契约写明「原样重试改不了判」的码。
31
- * `request()` 的重试臂**按码豁免**它们 —— 状态说「重来可能成功」,码说「不会」,码是更细的那一格(附录 A 判据一:`errorCode` 是
32
- * 唯一可判别的机器面)。一条规则:**重试 ⟺ 状态 ∈ RETRYABLE_STATUS ∧ 码 ∉ 本表**;两张表各自闭集,本表不看状态、不看路径、不看方法。
43
+ * 唯一重试器(`fetchWithRetry`)**按码豁免**它们 —— 状态说「重来可能成功」,码说「不会」,码是更细的那一格(附录 A 判据一:`errorCode` 是
44
+ * 唯一可判别的机器面)。**同一只判官另读 server 的第二个信号 `permanence: "terminal"`**(见 {@link isDeterministicFailure}):店判「修店之前重试没用」的应答不重试,不论它的码在不在本表。一条规则:**重试 ⟺ 状态 ∈ RETRYABLE_STATUS ∧ 不是「重试改不了判」**(码 ∈ 本表 ∨ `permanence: "terminal"` 即「改不了判」;`permanence` 缺席 = 店没判,按状态矩阵照旧);两张表各自闭集,本表不看状态、不看路径、不看方法。
33
45
  *
34
46
  * 成员 = server 契约(int-7104 `docs/ASSISTANT-WIRE-CONTRACT.md` 附录 A.1 / A.1b)对它说「重试改不了判」的 5xx 码:
35
47
  * · `corrupt_session`(500,S-612 / server ≥7.104.0)—— 这只会话的存档读不出、唤不醒(文件店没有会话头 / SQL 店一行事件读不出);
@@ -48,7 +60,7 @@ export const RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);
48
60
  * 此刻读不出,店暂时不可用)**不在本表**:瞬时,按状态重试;在它读成功之前,这一答复**不表示没有待批**。
49
61
  * · `workflow.journal_incompatible`(500,server ≥7.135.0)—— `GET /v1/workflows/:id/journal` 的 journal 里有一行引擎判官判坏(判整份 journal,三后端同答,体带 `ordinal`);契约明写出路是「从留存的副本修那一行」,
50
62
  * 重发改不了判 —— 同一条规则的又一员。
51
- * 表外的 5xx 码照旧按状态重试(`internal.error` / 其余 `state.*`(本表现有 `state.scenario_assignment_unknown` 一员)/ `memory.admission_required` / 🔴 `fleet.lease_unavailable`(503,server ≥7.106.0 /
63
+ * 表外的 5xx 码照旧按状态重试(**除非体带 `permanence: "terminal"`**;`internal.error` / 其余 `state.*`(本表现有 `state.scenario_assignment_unknown` 一员)/ `memory.admission_required` / 🔴 `fleet.lease_unavailable`(503,server ≥7.106.0 /
52
64
  * S-866 ③:租约连接级失败而部署 fail-closed —— 零计费、「下一次提交就是下一次谈判」,契约明写瞬时可重试)/ 无码 503 …)。本表只管**本包自己的**
53
65
  * 退避臂:抛出去的 typed 错误不变(`corrupt_session` 仍是带码 `APIError`,名册三码仍落 503 状态尾的 `ServiceStateError`),调用方要不要
54
66
  * 事后再试(例如运维修好存档之后)是调用方的决定。
@@ -69,9 +81,20 @@ export const NON_RETRYABLE_CODES = new Set([
69
81
  "approvals.read_corrupt",
70
82
  "workflow.journal_incompatible",
71
83
  ]);
72
- /** 一只已映射的错误是否带着**确定性失败码**(见 {@link NON_RETRYABLE_CODES})。控制面错误(`ControlError`)没有码 ⇒ 恒 false。 */
84
+ /**
85
+ * 一只已映射的错误是否带着 server 的**「重试改不了判」信号**(唯一重试器的唯一判官,读 server 放这件事的**两处**):
86
+ * · **码** ∈ {@link NON_RETRYABLE_CODES}(K-24 码表);
87
+ * · **`permanence: "terminal"`**(server ≥7.135.0,文件历史店对故障的判断:修店之前重试没用)—— `state.file_history_unreadable` 这类码 transient / terminal **共用**,进不了码表,
88
+ * 所以读体上的这个键:`terminal` ⇒ 不重试;`transient` ⇒ 重试(受状态矩阵与 `maxRetries` 约束);**键缺席**(店没判 / 别的码根本不带它)⇒ 状态矩阵照旧(缺席不是 terminal,
89
+ * 把缺席读成不重试会关掉 `429` / 无码 `503` / 其余 `state.*` 的整张矩阵)。
90
+ * 控制面错误(`ControlError`)没有码、没有 `extra` ⇒ 恒 false。
91
+ */
73
92
  function isDeterministicFailure(err) {
74
- return err instanceof APIError && err.errorCode !== undefined && NON_RETRYABLE_CODES.has(err.errorCode);
93
+ if (!(err instanceof APIError))
94
+ return false;
95
+ if (err.errorCode !== undefined && NON_RETRYABLE_CODES.has(err.errorCode))
96
+ return true;
97
+ return err.extra["permanence"] === "terminal";
75
98
  }
76
99
  /**
77
100
  * 🔴 **非 2xx `Response` → typed Error 的唯一拼装口**(S2 收编,SDK 1.1.0)。
@@ -101,6 +124,31 @@ export async function errorFromResponse(res, mapError = toApiError) {
101
124
  * principal header: [2400] CB-4 made its NAME configurable, so the effective set is computed per Transport
102
125
  * instance ({@link Transport.reserved}) rather than read off this constant. */
103
126
  const RESERVED_HEADERS = new Set(["authorization", "x-agent-principal", "content-type", "idempotency-key", "accept", "last-event-id"]);
127
+ /**
128
+ * `principalHeader`(身份头的**名字**,可配)不许落在的头名 —— 闭集、小写,构造时判,撞上即抛(fail-closed):
129
+ * · 传输层自己装的头(上面 {@link RESERVED_HEADERS} 里除缺省身份头名之外的几只)—— 身份值会顶掉凭据 / 内容类型 / 去重键;
130
+ * · 条件请求头(RFC 9110 §13.1 的五只前置条件头)—— 身份头一旦是它,每个请求都成了条件请求,`isConditionalRequest` 的 304 判据与身份一起失真;
131
+ * · 连接层的头(`host` / `content-length` / `connection` / `transfer-encoding`)—— 由 `fetch` 与连接自己定。
132
+ */
133
+ export const PRINCIPAL_HEADER_FORBIDDEN = new Set([
134
+ ...[...RESERVED_HEADERS].filter((h) => h !== "x-agent-principal"),
135
+ "if-none-match",
136
+ "if-modified-since",
137
+ "if-match",
138
+ "if-unmodified-since",
139
+ "if-range",
140
+ "host",
141
+ "content-length",
142
+ "connection",
143
+ "transfer-encoding",
144
+ ]);
145
+ /**
146
+ * 这次请求是不是**条件请求**:真带了校验头 `if-none-match`(本包发出的唯一一种能换回 304 的校验头;`if-modified-since` 从不发)。
147
+ * 304 只对条件请求是答案(RFC 9110:「条件为假,否则本该 200」);对没带校验头的请求,304 与其它非 2xx 一样是类型错。
148
+ */
149
+ function isConditionalRequest(headers) {
150
+ return Object.keys(headers).some((k) => k.toLowerCase() === "if-none-match");
151
+ }
104
152
  const BACKOFF_BASE_MS = 250;
105
153
  const BACKOFF_CAP_MS = 10_000;
106
154
  const RETRY_AFTER_CAP_MS = 60_000;
@@ -140,6 +188,17 @@ export class Transport {
140
188
  reserved;
141
189
  constructor(o) {
142
190
  this.o = o;
191
+ // 🔴 构造期 fail-closed(与下面 `principalHeader` 的保留头守卫同族、同一处):`AgentClient` 与 `ControlClient` 都经这里,一条规则。
192
+ // `maxAttempts = maxRetries + 1`,`≤ -1` 的负数与 `NaN` 让会重试的调用一发不发(拒成 `undefined`),小数 / 无穷被当整数用,数字串被拼进算术(`"2" + 1` 是 `"21"`)—— 都不是配置者的本意,构造时响亮拒。
193
+ if (!Number.isInteger(o.maxRetries) || o.maxRetries < 0) {
194
+ // 句子里「收到的值」:串带引号(`"2"` 不会被读成数字 2 而与「must be a non-negative integer」自相矛盾),数字照 `String`(`JSON.stringify` 把 `NaN` / `Infinity` 写成 `null`)。
195
+ const got = o.maxRetries;
196
+ throw new Error(`maxRetries must be a non-negative integer (got ${typeof got === "string" ? JSON.stringify(got) : String(got)}); 0 sends every request once.`);
197
+ }
198
+ if (o.principalHeader !== undefined && PRINCIPAL_HEADER_FORBIDDEN.has(o.principalHeader.toLowerCase())) {
199
+ throw new Error(`principalHeader ${JSON.stringify(o.principalHeader)} names a header the transport, the HTTP conditional-request rules or the connection already own ` +
200
+ `(${[...PRINCIPAL_HEADER_FORBIDDEN].join(", ")}); the principal must travel in a header of its own — configure the name your server reads it from.`);
201
+ }
143
202
  this.reserved = o.principalHeader ? new Set([...RESERVED_HEADERS, o.principalHeader.toLowerCase()]) : RESERVED_HEADERS;
144
203
  }
145
204
  headers(idempotencyKey) {
@@ -159,11 +218,9 @@ export class Transport {
159
218
  const key = opts.submit ? resolveIdempotencyKey(opts.idempotencyKey) : (opts.idempotencyKey ?? null);
160
219
  assertSendableIdempotencyKey(key);
161
220
  const canRetry = opts.method === "GET" || (opts.submit === true && key !== null);
162
- const maxAttempts = canRetry ? this.o.maxRetries + 1 : 1;
163
221
  const url = this.o.baseUrl.replace(/\/+$/, "") + opts.path;
164
222
  const payload = opts.body === undefined ? undefined : JSON.stringify(opts.body);
165
- let lastErr;
166
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
223
+ const res = await this.fetchWithRetry(canRetry, opts.signal, () => {
167
224
  const init = {
168
225
  method: opts.method,
169
226
  headers: this.headers(key),
@@ -171,36 +228,74 @@ export class Transport {
171
228
  };
172
229
  if (payload !== undefined)
173
230
  init.body = payload;
231
+ return { url, init };
232
+ });
233
+ return await parseJson(res);
234
+ }
235
+ /**
236
+ * **本包唯一的重试器**(`request()` 与 {@link Transport.openRawGet} 共用,各腿不各写一份):每次尝试取一份 `next()` 装好的请求、发一次,
237
+ * 重试 ⟺ (连接 / 超时 / 网络错)∨(状态 ∈ {@link RETRYABLE_STATUS} ∧ 不是「重试改不了判」〔{@link isDeterministicFailure}:码 ∈ {@link NON_RETRYABLE_CODES},或体上 `permanence: "terminal"`〕)∧ 还有次数(`maxRetries + 1` 次封顶,`canRetry` 为假只发一次);
238
+ * **取消律**:调用方 abort 之后既不再睡、也不再发;**以失败告终的尝试一律以 `signal.reason` 拒**,已经到手的成功应答照样交回 —— 每次尝试**前**先查 `callerSignal.aborted`(abort ⇒ 以 `signal.reason` 拒、**不发请求**);
239
+ * `fetch` 拒了而调用方已 abort ⇒ 以 `signal.reason` 拒(不论 `fetch` 拿什么拒);读完错误体**之后**再查一次(abort 落在读错误体期间 ⇒ 以 `signal.reason` 拒,**不论第几次尝试**,已取消的调用不报成服务端错);
240
+ * 退避等待**可被 `callerSignal` 中止**(abort ⇒ 立即拒,不睡满 `Retry-After`)。请求装配(`next()`)在 `try` 之外:装配阶段抛的错原样立即抛,不当连接错重试;
241
+ * 退避按 `Retry-After`(封顶 {@link RETRY_AFTER_CAP_MS})否则指数退避 + 抖动。成功 ⇒ 把 `Response` 原样交回(体未读);终局失败 ⇒ 抛已映射的类型错。
242
+ * **成功 = 2xx,或条件请求的 304**:304 是条件请求的答案(「没变」),条件与否从这次真发出去的头读(`isConditionalRequest`);没带校验头的请求收到 304 ⇒ 与其它非 2xx 同,抛类型错。
243
+ */
244
+ async fetchWithRetry(canRetry, callerSignal, next) {
245
+ const maxAttempts = canRetry ? this.o.maxRetries + 1 : 1;
246
+ let lastErr;
247
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
248
+ throwIfAborted(callerSignal); // 取消律:每次尝试前先查 —— 已 abort ⇒ 拒、不发请求
249
+ const req = next(); // 装配在 try 之外:装配抛的错不是连接错(与 26.1.0 同)
174
250
  let res;
175
251
  try {
176
- res = await this.o.fetchImpl(url, init);
252
+ res = await this.o.fetchImpl(req.url, req.init);
177
253
  }
178
254
  catch (e) {
179
- if (opts.signal?.aborted)
180
- throw e; // caller cancelled → never retry
255
+ throwIfAborted(callerSignal); // 取消律:调用方已 abort ⇒ 以 signal.reason 拒、不重试(不论 fetch 拿什么拒)
181
256
  lastErr = e; // request timeout or connect/network error → retryable (if allowed)
182
257
  if (attempt < maxAttempts - 1) {
183
- await sleep(backoff(attempt));
258
+ await sleep(backoff(attempt), callerSignal);
184
259
  continue;
185
260
  }
186
261
  throw e;
187
262
  }
188
- if (res.ok)
189
- return await parseJson(res);
263
+ if (res.ok || (res.status === 304 && isConditionalRequest(req.init.headers)))
264
+ return res;
190
265
  // 🔴 与 openRaw/openStream 各腿**同一个**拼装口(errorFromResponse)—— 这条腿本来就是完整的那一条,
191
266
  // 收编时反过来让它也走同一个函数,「唯一拼装口」才是字面为真的,而不是一句注释。
192
267
  // `retryAfterMs` 这里还要单独用一次(退避睡多久),所以头解析在本地再取一次(纯函数,幂等)。
193
268
  const retryAfterMs = parseRetryAfter(res.headers.get("retry-after"));
194
269
  const err = await this.errorFrom(res);
270
+ throwIfAborted(callerSignal); // 取消律:读错误体期间 abort ⇒ 以 signal.reason 拒,不论第几次尝试
195
271
  if (RETRYABLE_STATUS.has(res.status) && !isDeterministicFailure(err) && attempt < maxAttempts - 1) {
196
272
  lastErr = err;
197
- await sleep(Math.min(retryAfterMs ?? backoff(attempt), RETRY_AFTER_CAP_MS)); // cap: never park a caller for minutes
273
+ await sleep(Math.min(retryAfterMs ?? backoff(attempt), RETRY_AFTER_CAP_MS), callerSignal); // cap: never park a caller for minutes; 取消律:abort ⇒ 立即拒
198
274
  continue;
199
275
  }
200
276
  throw err; // 409 conflict (typed, with activeTaskId) lands here — surfaced, NOT auto-resolved (pinned wire contract)
201
277
  }
202
278
  throw lastErr; // exhausted retries
203
279
  }
280
+ /**
281
+ * **GET 读口同律 —— 有界体的原始 GET,重试只在首字节之前**:会话同步拉取腿 `entries()`(NDJSON 流)与 `getHistoryBlob()`(octet-stream)、附件下载 `attachments.get`、
282
+ * 会话轻探针 `sessions.head`(条件 GET,可带 `if-none-match`)、Prometheus 文本 `metrics.prometheus` 的开请求 —— 与 {@link Transport.request} 的 GET 腿**同一只重试器、同一个 `maxRetries`**
283
+ * (见 {@link Transport.fetchWithRetry}):可重试状态 ∧ 不是确定性失败(码在确定性失败码表、或体带 `permanence:"terminal"` 都不重试;`503 state.file_history_unreadable` + `permanence:"transient"` 就是该重试的一形)才重试,
284
+ * 调用方 abort 立即停;终局失败抛类型错;成功(2xx;调用方头里带了 `if-none-match` 的条件请求另认 304)⇒ 交回 `Response`(体未读)。**没有逐次超时**(与 {@link Transport.openRaw} 同:体可以活很久;
285
+ * `request()` 的逐次超时是交给 `fetch` 的 `AbortSignal.timeout(timeoutMs)`,那只 signal 同时管响应体、到点不可撤 —— 套在这里会把 `entries()` 这类长体在 `timeoutMs` 处截断;
286
+ * 只包「开」要在传输层另起一只可清计时器,给这几个从来不超时的口加一个新的失败形(长首字节的 `entries()` 会开始超时)—— 是新能力,不在本版。要限时,调用方传 `signal`,如 `AbortSignal.timeout(ms)`)—— 重试的是「开」,不是「读体」:体读到一半断了
287
+ * 不重试(`SyncTruncatedError`,续读是调用方带游标重开的事)。非 GET 与长连接 SSE 不走这里(那些仍是 {@link Transport.openRaw} / {@link Transport.openStream} 的单发)。
288
+ * 新增一个有界体的 GET 读口 = 用这里,不是 `openRaw`(`transport-read-doors.test.ts` 的结构钉扫 `src/` 里 `openRaw({ method: "GET" })` 的调用点)。
289
+ */
290
+ async openRawGet(opts) {
291
+ return this.fetchWithRetry(true, opts.signal, () => this.rawOutgoing({
292
+ method: "GET",
293
+ path: opts.path,
294
+ ...(opts.accept !== undefined ? { accept: opts.accept } : {}),
295
+ ...(opts.headers !== undefined ? { headers: opts.headers } : {}),
296
+ signal: opts.signal,
297
+ }));
298
+ }
204
299
  /** Raw streaming fetch (returns the Response for sse.ts to parse). NO per-attempt timeout (a stream lives
205
300
  * long); heartbeat watchdog lives in sse.ts.
206
301
  * 🔴 [2400] X-16 — SINGLE-SHOT by construction: this method issues **exactly one** `fetch` and returns whatever
@@ -236,8 +331,14 @@ export class Transport {
236
331
  * a blob GET returns octet-stream, and the entry stream is a long-lived NDJSON body (not a single JSON parse).
237
332
  * Returns the Response untouched so the caller drives the body (arrayBuffer / NDJSON line reader) and the
238
333
  * status handling. `accept`/`content-type` come from `opts` (default = the buildHeaders content-type). NO retry
239
- * (a stream lives long; a blob PUT is content-addressed-idempotent but unbounded → the caller decides). */
334
+ * (a stream lives long; a blob PUT is content-addressed-idempotent but unbounded → the caller decides).
335
+ * 🔴 **GET 只留给 SSE 流**:有界体的 GET 读口(下载字节 / 读一个小对象)一律用 {@link Transport.openRawGet}(同一只重试器);这里的 GET 是长连接 SSE,断了由调用方的环按游标重开。 */
240
336
  async openRaw(opts) {
337
+ const req = this.rawOutgoing(opts);
338
+ return this.o.fetchImpl(req.url, req.init);
339
+ }
340
+ /** `openRaw` / `openRawGet` 共用的请求装配(头的保留位守卫 + 合并序、`accept` / `content-type`、原始体、`duplex`)—— 一处装,单发与重试器发的是同一形。 */
341
+ rawOutgoing(opts) {
241
342
  const extras = {};
242
343
  for (const [k, v] of Object.entries(opts.headers ?? {})) {
243
344
  const key = k.toLowerCase();
@@ -265,7 +366,7 @@ export class Transport {
265
366
  }
266
367
  if (opts.signal)
267
368
  init.signal = opts.signal;
268
- return this.o.fetchImpl(this.o.baseUrl.replace(/\/+$/, "") + opts.path, init);
369
+ return { url: this.o.baseUrl.replace(/\/+$/, "") + opts.path, init };
269
370
  }
270
371
  /** 非 2xx `Response` → typed Error(`openRaw` / `openStream` 的所有消费点都走这里)。
271
372
  * 与 {@link Transport.request} 的错误腿**同一套装配**:body 容错读 + `Retry-After` 解析 + 本 client
@@ -304,9 +405,6 @@ function backoff(attempt) {
304
405
  const exp = Math.min(BACKOFF_BASE_MS * 2 ** attempt, BACKOFF_CAP_MS);
305
406
  return exp + Math.random() * BACKOFF_BASE_MS; // jitter
306
407
  }
307
- function sleep(ms) {
308
- return new Promise((r) => setTimeout(r, ms));
309
- }
310
408
  /** `Retry-After` is delta-seconds or an HTTP-date. Returns ms, or undefined if absent/unparseable. */
311
409
  function parseRetryAfter(h) {
312
410
  if (!h)
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -413,16 +413,23 @@ export interface TaskRequest {
413
413
  * 🔴 声明一个 peer = 声明一条**出站写通道**:它广告的每条技能都以 `egress:true` + `effect:"write"`
414
414
  * 挂载(core 裁定),`toolAxes` 是调用方作为信任根的**显式**下调面。
415
415
  * 🔴 **坏形 ⇒ 整条 peer 丢弃**(不是丢那个键留这条 peer):`allowSkills` 是收窄字段而缺席被读成
416
- * 「不限制」,半应用会把收窄意图变成放行。被丢的 peer 具名进 warn,请求本身不 400。
417
- * 基线冲突时 center/config **赢**(peer 名就是工具命名空间段)。**上限 32 条,超出的条目同样被丢弃并
418
- * 具名**(不是 400 —— 与坏形同一条处置)。 */
416
+ * 「不限制」,半应用会把收窄意图变成放行。
417
+ * 🔴 **server ≥7.136.0:新提交(fresh)上写坏的声明 ⇒ `400`,不再换回一个「生效了」的 200**。读发布字节的真拒体(逐形):
418
+ * · 列表不是数组 / 条目不是对象 / 键值判不出形(`url` 不是 http(s) 串、`headers` 值不是串、`allowSkills` 不是串数组 …)⇒ `400 request.field_invalid`,**只有句子**(`a2aPeers[i].<键路径> (peer "<名>") is not a usable declaration — …`),**不带 `field` / `reason`**;
419
+ * · 词表外的键(拼错的 `allowSkill` 等)⇒ `400 request.body_shape` + `unknownKeys`(全坐标,如 `a2aPeers[0].allowSkill`);
420
+ * · `url` / `cardUrl` 带凭据 ⇒ `400 request.field_invalid` **带** `field` / `reason`(`url_userinfo` / `url_credential_param`);**超 32 条 ⇒ 同码带 `field: "a2aPeers"` + `reason: "over_cap"` + `count` / `cap`**。
421
+ * 按 `errorCode` / `unknownKeys` / `field` 分支,不按句子。**续跑重放腿(耐久 resume 重放存量体)不拒**:仍走读器的降级 —— 坏条目不挂、具名进运维 warn、请求本身不 400;≤7.135.x 的 fresh 腿也是这一读法
422
+ * (坏形整条丢并具名、超 32 条的条目同样被丢并具名,请求 200 —— 7.135.0 起超 32 条已是 400,见 {@link import("./errors.js").RequestFieldRefusalExtra})。
423
+ * 基线冲突时 center/config **赢**(peer 名就是工具命名空间段)。 */
419
424
  a2aPeers?: A2aServerSpec[];
420
425
  /** 图文输入:`{ data, mimeType }`(内联 base64)或 `{ url }`。
421
426
  * 🔴 **内联臂的准入(server ≥7.117.0 / core 7.42.0)**:`mimeType` 必须是 `image/png` / `image/jpeg` / `image/gif` / `image/webp` 之一(发 API 自己的类型词,不发扩展名),解码后的字节必须带**声明类型**的文件签名,
422
427
  * 解码后不得超 5 MiB —— 过不了 ⇒ 引擎在**第一次模型调用之前**拒(UserPromptSubmit hook 之后,一个模型 token 没烧),**400 `config.image_invalid`**,`error` 以 `TaskSpec.images: ` 起
423
428
  * (`config.` 不是前缀族 ⇒ 带码的 `APIError`,按 `errorCode` 分支;400 不自动重试)。≤7.116.x 没有这道门:这种图原样送到模型供应方,整只首请求在供应方那边失败(没有本包可依的码)。
424
429
  * **「base64 太长」不走本码**:一张内联图的 base64 串超过 5 242 880 字符(模型 API 的 5 MB 图片界;server 读引擎导出的同一只常量)⇒ 受理口先拒 **413 `request.payload_too_large`**(零模型调用、不跑提交钩子、不建 run 行)。
425
- * 出路:发文件的原样字节与 API 的类型词;超 5 MB 的图先缩。URL 臂(`{ url }`)不变(server 早已按签名认类型)。模型要支持图片输入(见 {@link ModelInfo.vision};缺席 ⇒ 照发)。 */
430
+ * 出路:发文件的原样字节与 API 的类型词;超 5 MB 的图先缩。
431
+ * 🔴 **URL 臂(`{ url }`)server ≥7.136.0**:带凭据的 URL(`user:pass@host`,或 query / fragment 里有凭据名参数)在**新提交**上 ⇒ `400 request.field_invalid` + `field: "images[i].url"` + `reason` `url_userinfo` / `url_credential_param`
432
+ * (「URL 里的凭据」判官的第六座;句子不回显 url 值;出路 = 图片字节改走内联 `{ data, mimeType }`,内联图有自己的字节帽、不落 URL);耐久 resume 重放存量体不判。其余不变(server 早已按签名认类型)。模型要支持图片输入(见 {@link ModelInfo.vision};缺席 ⇒ 照发)。 */
426
433
  images?: Array<{
427
434
  data: string;
428
435
  mimeType: string;
@@ -5586,8 +5593,17 @@ export interface PendingCheckpoint {
5586
5593
  ruleOffersAbsence?: RuleOffersAbsence;
5587
5594
  /** server ≥7.129.0(core 7.51.0 #1688;park 行事实第八位)—— 这张停驻卡**为什么没有**授予绑定摘要(park 行孪生座 `PendingAction.tool_approval.boundGrantAbsence`,
5588
5595
  * 与活卡帧 / inbox 行同一只窄读、同名同值)。读法见 {@link import("./resources/tool-approvals.js").BoundGrantAbsence}。
5589
- * 🔴 本面缺席 = 技能卡(带摘要;摘要不上本面)/ 7.51.0 之前停驻的行(两者都不说 —— inbox 面对同一张行投 `unreadable`)/ 集外词 / 老 server —— **不是** `not_bindable`。 */
5596
+ * 🔴 本面缺席 = 技能卡(带摘要)/ 7.51.0 之前停驻的行(两者都不说 —— inbox 面对同一张行投 `unreadable`)/ 集外词 / 老 server —— **不是** `not_bindable`。 */
5590
5597
  boundGrantAbsence?: BoundGrantAbsence;
5598
+ /** server ≥7.136.0 —— 引擎 `Skill` 工具的停驻卡上的授予绑定摘要,与 inbox 行 / 活卡帧同名位同值({@link InboxRow.boundGrantDigest}):运维从队列决这张卡时看得到批准它放行了什么。
5599
+ * 三位({@link boundGrantDigest} / {@link boundGrants} / {@link classifierNoRuling})由**一只投影**投队列行、`/v1/approvals/stream` 的 `pending` 帧与 inbox 行 —— 同一张停驻行三面逐字相等;值是引擎对这一行投的检查点摘要,server 不重算哈希。
5600
+ * 在场才带(普通卡三位三面都缺席;缺席不是断言);`card_json` 仍不带。≤7.135.x 的队列行与流帧没有这三位。 */
5601
+ boundGrantDigest?: string;
5602
+ /** server ≥7.136.0 —— 上一位哈希的那一份值(技能名 + `allowedTools` / `disallowedTools`);**只在它确实哈希成 {@link boundGrantDigest} 时**出现(对不上 ⇒ 只有摘要、没有清单;没有摘要 ⇒ 清单也不发)。
5603
+ * 🔴 部署文本(技能名、清单条目由部署者写):server 不脱敏不转义,渲染按上下文转义。 */
5604
+ boundGrants?: BoundSkillGrants;
5605
+ /** server ≥7.136.0 —— 只在类 `classifier_no_ruling` 的停驻卡上:分类器为什么没判({@link AutoModeFallbackCause};值闭集成员才回显)。想知道为什么分类器的卡交给了人的壳读它。 */
5606
+ classifierNoRuling?: AutoModeFallbackCause;
5591
5607
  /** K-37 扩项(server ≥7.109.0 / S-934 ② / core 7.37.0 #1214)—— 这一问的**类**(park 行孪生座 `PendingAction.tool_approval.askClass`,经 server
5592
5608
  * `readAskClassPair` —— 与活卡帧 / 卡面**同一只**窄读)。与 {@link classes} 同在同缺,`classes[0] === askClass`;durable 审批席按类答的依据。
5593
5609
  * 缺席 = 老行(core 7.37.0 之前 park 的,续跑不补)/ 读不出(server 计 S-249 tag),**不是**「无类」。语义全文见
@@ -6677,7 +6693,9 @@ export interface InboxRow {
6677
6693
  * 🔴 **为什么本面还留着这一位**:本行的随包 spec 是**闭形**(`additionalProperties: false`)—— 支持面内 [7.72.0, 7.106.0) 的 server 仍会发它,
6678
6694
  * 删了就让那些 server 的合法行对 spec 违约。 */
6679
6695
  ruleStoreUnreadable?: "store" | "call";
6680
- /** 任务目标(从 task ctx 富化;契约明确 "`null` if unavailable" —— 真回 null 的字段,非 OMIT)。 */
6696
+ /** 任务目标(契约明确 "`null` if unavailable" —— 真回 null 的字段,非 OMIT)。
6697
+ * 🔴 **值在 server 7.136.0 起变**(键名与可空性不变):此前是停驻上下文里存着的任务目标**原文**(不截断、不脱敏);**≥7.136.0 起是门所属 run 行的 `objectivePreview`**
6698
+ * (写入时已脱敏、约 120 字符,与 `GET /v1/assistant/tasks` 行同一列;查找规则 = server `gateObjectivePreview`:门所属会话的活跃 run → 最近一条 run;**委派子代的会话没有自己的 run 时,经停驻子代行的 `parentTaskId` 回退读派生它的那条 run**(逐跳,至多 8 跳));**`null` = 读不到预览**(没有 run 账本是原因之一;读那一行失败、委派链断了或超 8 跳、run 行没有预览也回 `null` —— 本键不分辨是哪一种,别读出单一原因)。把本键当完整目标用的消费方(全文展示、按全文匹配)要知道:**7.136.0 服务端没有全量目标读口**(`GET /v1/runs/:id` 不带 `objective` / `objectivePreview`)—— 本键就是预览;全量读口随 server 后续版本,届时本包锁步,本包不编造替代路径。 */
6681
6699
  objective: string | null;
6682
6700
  /** 挂起工具调用 args 的**脱敏预览**(server 侧 redactDeep+限长;仅 tool_approval 门有,其余 `null`)。 */
6683
6701
  input: unknown;
@@ -7508,11 +7526,15 @@ export interface MemoryOriginClearReceipt {
7508
7526
  [k: string]: unknown;
7509
7527
  }
7510
7528
  /** `POST /v1/approvals/{sessionId}/decide` 的 200 体(spec `ApprovalDecisionResult` 的型面镜像;此前 SDK 只给 `unknown`)。
7529
+ * 🔴 **server ≥7.136.0:parked 回执有两臂,看 `status`**(类型 {@link import("./resources/approvals.js").ParkedDecideAccepted} 是它们的联合):`"resuming"` = 受理回执(复活在飞);
7530
+ * **`"failed"` = 作废回执** `{ taskId, status: "failed", decision: "deny" }` —— 复活不了的停驻行(后台子代省略 `name` 的无名行 / 行上没有根会话锚)上 deny = 作废这张卡
7531
+ * (卡离开待决队列与 `/v1/approvals/stream` 快照;子代由引擎的对账翻成终局 `failed`;复活腿一步都不走,被门的工具零执行;拒绝理由无处可送,不落)—— **没有续跑在飞**,别读成「续跑开始了」。
7532
+ * 这两形的 **approve 仍是 `409 decide.row_unrevivable`**(子代复活不了,放行做不到)。
7511
7533
  * 三种真实形共用这只信封(spec 长注有全文):**受理形**(server ≥7.37 durable 部署默认)`{taskId, sessionId,
7512
7534
  * status:"resuming", bindingEnforced:true}` —— `errorCode`/`errorMessage`/`retriable` **从不**上这形,失败落 run 行与
7513
7535
  * `GET /v1/runs/:id/events` 的 `suspended` 事件(`reopened: <errorCode>`);**终局形**(无 durable run 行 / `verify:true`
7514
- * 的同步长调用)`{taskId?, sessionId, status, errorCode?, errorMessage?, retriable?}`;**parked 回执**
7515
- * `{taskId, status:"resuming", decision}`;**幂等回放形**(#368)`{sessionId, idempotent:true, decision, bindingEnforced:true,
7536
+ * 的同步长调用)`{taskId?, sessionId, status, errorCode?, errorMessage?, retriable?}`;**parked 回执**(server ≥7.136.0 两臂)
7537
+ * `{taskId, status:"resuming", decision}` 或作废臂 `{taskId, status:"failed", decision:"deny"}`;**幂等回放形**(#368)`{sessionId, idempotent:true, decision, bindingEnforced:true,
7516
7538
  * executionOutcome?}`。**没有任何键四形都保证**(回放形无 `status`/`taskId`);判别:`idempotent` → 回放,`decision` 且无 `sessionId` → parked,
7517
7539
  * `sessionId`+`bindingEnforced` → 受理/终局。
7518
7540
  *