@sema-agent/sdk 23.1.0 → 24.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +61 -1
  2. package/dist/device/index.d.ts +1 -1
  3. package/dist/device/index.d.ts.map +1 -1
  4. package/dist/device/index.js +2 -0
  5. package/dist/device/index.js.map +1 -1
  6. package/dist/errors.d.ts +215 -3
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +87 -7
  9. package/dist/errors.js.map +1 -1
  10. package/dist/events.d.ts +129 -16
  11. package/dist/events.d.ts.map +1 -1
  12. package/dist/events.js +18 -0
  13. package/dist/events.js.map +1 -1
  14. package/dist/health.d.ts +4 -1
  15. package/dist/health.d.ts.map +1 -1
  16. package/dist/health.js.map +1 -1
  17. package/dist/index.d.ts +11 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +9 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/registry/errors.d.ts +3 -0
  22. package/dist/registry/errors.d.ts.map +1 -1
  23. package/dist/registry/errors.js +3 -2
  24. package/dist/registry/errors.js.map +1 -1
  25. package/dist/registry/me-config.d.ts +1 -0
  26. package/dist/registry/me-config.d.ts.map +1 -1
  27. package/dist/registry/me-config.js +1 -1
  28. package/dist/registry/me-config.js.map +1 -1
  29. package/dist/registry/scope-config-feedback.d.ts +1 -0
  30. package/dist/registry/scope-config-feedback.d.ts.map +1 -1
  31. package/dist/registry/scope-config-feedback.js +1 -1
  32. package/dist/registry/scope-config-feedback.js.map +1 -1
  33. package/dist/resources/elicitations.d.ts +2 -1
  34. package/dist/resources/elicitations.d.ts.map +1 -1
  35. package/dist/resources/elicitations.js.map +1 -1
  36. package/dist/resources/questions.d.ts +2 -1
  37. package/dist/resources/questions.d.ts.map +1 -1
  38. package/dist/resources/questions.js.map +1 -1
  39. package/dist/resources/session-sync.d.ts +4 -2
  40. package/dist/resources/session-sync.d.ts.map +1 -1
  41. package/dist/resources/session-sync.js +4 -2
  42. package/dist/resources/session-sync.js.map +1 -1
  43. package/dist/resources/tool-approvals.d.ts +10 -6
  44. package/dist/resources/tool-approvals.d.ts.map +1 -1
  45. package/dist/resources/tool-approvals.js.map +1 -1
  46. package/dist/settings.d.ts +3 -0
  47. package/dist/settings.d.ts.map +1 -1
  48. package/dist/sse.d.ts +3 -0
  49. package/dist/sse.d.ts.map +1 -1
  50. package/dist/sse.js +3 -3
  51. package/dist/sse.js.map +1 -1
  52. package/dist/types.d.ts +307 -98
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js +6 -2
  55. package/dist/types.js.map +1 -1
  56. package/openapi.yaml +518 -112
  57. package/package.json +2 -2
package/dist/errors.d.ts CHANGED
@@ -12,6 +12,7 @@ import type { ApprovalStaleCurrentPending, PendingGateMaterial } from "./types.j
12
12
  export declare class APIError extends Error {
13
13
  readonly status: number;
14
14
  readonly errorCode: string | undefined;
15
+ name: string;
15
16
  /**
16
17
  * 🔴 **错误体上 `error` / `errorCode` 之外的全部键,原样**(K-09 销账,SDK 11.1.0)。`{}` = 这条体上
17
18
  * 没有附加键(**不是** `undefined`:「没有附加材料」只该有一种读法)。
@@ -27,7 +28,7 @@ export declare class APIError extends Error {
27
28
  *
28
29
  * ⚠️ 既有的具名位({@link retriable}、`retryAfterMs`、各子类的结构化字段)是**先于本格存在**的镜像,
29
30
  * 值来自同一张体 —— 它们不因本格而改变,新键也不再因此长出第 N 个属性。例外只由票面裁定开出,开了也仍同在本格:
30
- * 现有一例 = K-19 `ParkedResumeStartupError.startupCause`(wire 键 `cause`;跨仓请托 [8537] / 认领 [8539] 点名要一个具型的读位;23.0.0 起是引擎五词闭集
31
+ * 现有一例 = K-19 `ParkedResumeStartupError.startupCause`(wire 键 `cause`;跨仓请托 [8537] / 认领 [8539] 点名要一个具型的读位;23.0.0 起是引擎的成因闭集(core 7.52.0 起六词)
31
32
  * `ResumeStartupCause`;值仍原样在 `extra.cause`)。
32
33
  * ⚠️ **未清洗**:`message` 是给人看/进日志的那一半,过 `scrub()`;本格是给机器分支的那一半,原样透传
33
34
  * (是 server 契约里的机读键,不是自由文本)。要把它打进日志的调用方自己负责清洗。
@@ -56,6 +57,11 @@ export declare class APIError extends Error {
56
57
  * 🔴 **server ≥7.124.0:这一码的体多两只版本键** `writerVersion` / `readerVersion`(每个铸点同律 —— core 原码镜像与 server 自铸的两只读法记号拒都带;形见
57
58
  * {@link CheckpointUnsupportedVersionExtra},值经 {@link extra} 到达)。「停驻行的格式比本引擎新」只有这一个来源:`writerVersion` 比 `readerVersion` 新 ⇒ 回到那一版(或更新的一版)去决,不是在本引擎上重试。
58
59
  *
60
+ * 🔴 **server ≥7.132.0 一只写点、一条律**:三类续跑拒(server 重放存量体前的拒、准入策略折叠 `resume_blocked_by_policy`、引擎拒的续跑)上 `retriable: true` 在场 ⇔ **有一张待批卡仍在等、
61
+ * run 行留 `suspended`**(server `resumeRefusalWithCard` 一处追加,排在体尾)。由此两处订正:① `resume_blocked_by_policy` 自 7.132.0 起**同带** `retriable: true`(卡同样仍 pending;此前不带);
62
+ * ② **终态 run 的 `POST /v1/runs/:id/steer` 在铸唤醒卡之前拒的路径不带它**(没有卡)—— `checkpoint.unsupported_version` 的 allow 读法 / 模式词读法两臂在那条路径上此前自述 `true`,是错的。
63
+ * 同批:引擎拒的续跑体多三只判别位 `blockedBy` / `field` / `reason`(加性,见 {@link ResumeRefusalExtra});体键序变(`taskId` 移到 `errorCode` 之后、`retriable` 在体尾,键集不变)。
64
+ *
59
65
  * 🔴 `undefined` means "the server did not say", NOT "not retriable" — it is a CONDITIONAL field server-side
60
66
  * (absent ⇒ key omitted), so reading its absence as an explicit `false` over-reads the wire.
61
67
  *
@@ -76,6 +82,7 @@ export declare class APIError extends Error {
76
82
  * 🔴 [2400] CB-3(SDK 4.2.0):状态兜底**只剩 401**。无码 503 已改归 {@link ServiceStateError} —— 那条臂
77
83
  * 上真正可达的是中间层的无码 503(「上游暂时不可用」),把它铸成本类等于把「稍后重试」说成「你没权限」。 */
78
84
  export declare class AuthError extends APIError {
85
+ name: string;
79
86
  }
80
87
  /** `request.*` 前缀族 —— **请求本身有问题,改请求即可**(400 为主,另有 413 / 422 / 4xx 兜底粗码)。
81
88
  * 一律 NOT retryable verbatim:同一个 body 重发永远同一个结果。子类 {@link PayloadTooLargeError} 专指
@@ -141,12 +148,14 @@ export declare class AuthError extends APIError {
141
148
  * (体里同时还有别的毛病而先撞上的是那一个时,`message` 说那个毛病、`field` 照带)。要「去掉这只键重发」的调用方按**码 + `err.extra.field`** 判,**别解析句子**
142
149
  * (三口的句子在 7.119.0 收成逐字同一句,≤7.118.x 各说各的)。体里没有这只键的坏体**没有** `field`。本类不为它开具名属性(同上:开形一格)。 */
143
150
  export declare class BadRequestError extends APIError {
151
+ name: string;
144
152
  }
145
153
  /** [2420] `attachment.*` 族(上传面拒收):`attachment.too_large`(413)携 {@link maxBytes},
146
154
  * `attachment.mime_not_allowed`(415)携 {@link allowed}——两键是用户能改正的唯一量(压到多大/换什么类型)。 */
147
155
  export declare class AttachmentRejectedError extends APIError {
148
156
  readonly maxBytes?: number | undefined;
149
157
  readonly allowed?: string[] | undefined;
158
+ name: string;
150
159
  constructor(status: number, errorCode: string | undefined, message: string, maxBytes?: number | undefined, allowed?: string[] | undefined);
151
160
  }
152
161
  /** `not_found.*` 前缀族 —— 资源不存在。⚠️ 也包含**属主门**:server 对非属主一律回 404 同码同文
@@ -170,12 +179,14 @@ export declare class AttachmentRejectedError extends APIError {
170
179
  * 反枚举不变式),永远走不到这两个码 —— 所以它们泄漏的全部信息是「**你自己**这条 run 的状态」,
171
180
  * 而那本来就是 `runs.get(taskId)` 直答的东西。 */
172
181
  export declare class NotFoundError extends APIError {
182
+ name: string;
173
183
  }
174
184
  /** `limit.*` 前缀族 —— 配额 / 限流 / 保留窗(429 限流与成本配额、416 续读点过保留窗)。
175
185
  * `retryAfterMs` 来自 `Retry-After` 头(由 transport 喂入)。
176
186
  * ⚠️ 429 那两个成员码({@link RateLimitedError} 起)走更具体的子类,见下。 */
177
187
  export declare class LimitExceededError extends APIError {
178
188
  readonly retryAfterMs?: number | undefined;
189
+ name: string;
179
190
  constructor(status: number, errorCode: string | undefined, message: string, retryAfterMs?: number | undefined);
180
191
  }
181
192
  /** `capability.*` 前缀族 —— **本部署没接这个面**(501)。重试无意义、开开关也没用:要么换部署形态
@@ -191,6 +202,7 @@ export declare class LimitExceededError extends APIError {
191
202
  * `capability.snapshot_store_required`(history blob GET)· `capability.policy_purge_required`(同步整族,嵌入方形)。**唯一登记例外**:`a2aServe` 的两条路由不可用时答 404(反指纹)。
192
203
  * ⚠️ **按状态码判「没权限 / 不存在 / 不可用」的分支要改按 `errorCode`**:403 可能是「不在名单」也可能(≤7.115.x)是名单空;404 可能是「真不存在」也可能(≤7.115.x)是「这台没挂这一族」。 */
193
204
  export declare class CapabilityUnavailableError extends APIError {
205
+ name: string;
194
206
  }
195
207
  /** `feature.*` 前缀族 —— **面存在,但开关是关的**(501;`feature.metrics_disabled` 是 404)。
196
208
  * 处置:提示管理员打开对应开关(`RESOURCE_SUSPEND` / 三个 LIVE HITL 开关 / `STREAM_APPROVAL_ENABLED` /
@@ -201,6 +213,7 @@ export declare class CapabilityUnavailableError extends APIError {
201
213
  * server ≥7.116.0 新增两员(都是 501,开旋钮即可):`feature.memory_consolidation_disabled`(记忆整理两口,`MEMORY_CONSOLIDATION_DRIVER` 关或出厂缺省派生关 ——
202
214
  * 没配便宜模型;此前 404)· `feature.config_catalog_disabled`(`CONFIG_CATALOG_ENABLED=false` 时 `GET /v1/config/catalog`;此前 404)。 */
203
215
  export declare class FeatureDisabledError extends APIError {
216
+ name: string;
204
217
  }
205
218
  /** `internal.*` 前缀族 —— 服务端自己出错(500 / 502)。细节不上 wire。
206
219
  * 部分成员**明确可重试**(`internal.cancel_not_terminalized` = 重试 cancel;
@@ -210,6 +223,7 @@ export declare class FeatureDisabledError extends APIError {
210
223
  * (会话规则店读不出)**不在本族**(不以 `internal.` 开头)⇒ 落带码的 {@link APIError},同样不自动重试;按 `.errorCode` 分支,
211
224
  * `error` 是引擎 / 店的原句(给运维看,不含盘上路径)。 */
212
225
  export declare class InternalServerError extends APIError {
226
+ name: string;
213
227
  }
214
228
  /** `state.*` 前缀族 —— 服务端**当前状态**不接受这个请求(503)。开集,下面是本包逐码注过的成员(附录 A 为准;server ≥7.119.0 新增 `state.scenario_assignment_unknown`):
215
229
  * · `state.model_roster_pending`(roster 还没拉到)/ `state.no_sandbox_base`(没有可用的 sandbox-base)
@@ -254,6 +268,7 @@ export declare class InternalServerError extends APIError {
254
268
  * {@link import("./types.js").CenterWiringCapability.failMode} / `leaseHealth`。 */
255
269
  export declare class ServiceStateError extends APIError {
256
270
  readonly retryAfterMs?: number | undefined;
271
+ name: string;
257
272
  /**
258
273
  * 等待提示(**毫秒**,单位与 {@link LimitExceededError.retryAfterMs} 同口径)。缺席 = server 这一支
259
274
  * **没给**窗(如 `state.sse_connection_cap` 那些「换通道」成员),不是「可以立刻重打」。
@@ -282,6 +297,7 @@ export declare class ServiceStateError extends APIError {
282
297
  export declare class WorkspaceFileTooLargeError extends APIError {
283
298
  readonly sizeBytes: number;
284
299
  readonly limit: number;
300
+ name: string;
285
301
  constructor(status: number, errorCode: string | undefined, message: string, sizeBytes: number, limit: number);
286
302
  }
287
303
  /** 429 — per-principal rate limit. `retryAfterMs` from `Retry-After` (the SDK honors it on retry). */
@@ -301,6 +317,7 @@ export declare class WorkspaceFileTooLargeError extends APIError {
301
317
  * codeless 503 arm to {@link ServiceStateError}; the status tariff now falls back to AuthError for 401 ONLY.) */
302
318
  export declare class DrainingError extends APIError {
303
319
  readonly retryAfterMs?: number | undefined;
320
+ name: string;
304
321
  constructor(status: number, errorCode: string | undefined, message: string, retryAfterMs?: number | undefined);
305
322
  }
306
323
  /** 429 —— per-principal 限流。`retryAfterMs` 来自 `Retry-After`(SDK 重试时遵守它)。
@@ -323,6 +340,7 @@ export declare class RateLimitedError extends LimitExceededError {
323
340
  readonly usedMicroUsd?: number | undefined;
324
341
  /** `limit.cost_quota_exceeded` only —— 本窗口的上限(micro-USD)。缺席同上。 */
325
342
  readonly limitMicroUsd?: number | undefined;
343
+ name: string;
326
344
  constructor(status: number, errorCode: string | undefined, message: string, retryAfterMs?: number,
327
345
  /** `limit.cost_quota_exceeded` only —— 本窗口已花费(micro-USD)。缺席 = 服务端没给/给了坏值。 */
328
346
  usedMicroUsd?: number | undefined,
@@ -353,6 +371,7 @@ export interface QuotaExhaustedDetail {
353
371
  * usage window=引擎部署级 token 治理窗(design/166,`USAGE_WINDOWS`)。两类同为 429 但处置来源不同。 */
354
372
  export declare class QuotaExhaustedError extends RateLimitedError {
355
373
  readonly detail: QuotaExhaustedDetail;
374
+ name: string;
356
375
  constructor(status: number, errorCode: string | undefined, message: string, retryAfterMs: number | undefined, detail: QuotaExhaustedDetail);
357
376
  }
358
377
  /** 429 `errorCode:"usage.window_exhausted"` — 部署级 token 治理窗耗尽(server ≥6.1.0 提交面
@@ -364,6 +383,7 @@ export declare class QuotaExhaustedError extends RateLimitedError {
364
383
  export declare class UsageWindowExhaustedError extends RateLimitedError {
365
384
  /** 响应体的 retryAfterSec(秒,上取整;与 Retry-After 头同源)。缺席=服务端没给。 */
366
385
  readonly retryAfterSec?: number | undefined;
386
+ name: string;
367
387
  constructor(status: number, errorCode: string | undefined, message: string, retryAfterMs: number | undefined,
368
388
  /** 响应体的 retryAfterSec(秒,上取整;与 Retry-After 头同源)。缺席=服务端没给。 */
369
389
  retryAfterSec?: number | undefined);
@@ -380,6 +400,7 @@ export declare class UsageWindowExhaustedError extends RateLimitedError {
380
400
  export declare class MemoryAdmissionError extends APIError {
381
401
  /** 仅 transient 形(admission_required)可能在场;terminal 形恒缺席(等待提示在终局拒上是方向性谎言)。 */
382
402
  readonly retryAfterSec?: number | undefined;
403
+ name: string;
383
404
  constructor(status: number, errorCode: string | undefined, message: string,
384
405
  /** 仅 transient 形(admission_required)可能在场;terminal 形恒缺席(等待提示在终局拒上是方向性谎言)。 */
385
406
  retryAfterSec?: number | undefined);
@@ -392,12 +413,14 @@ export declare class MemoryAdmissionError extends APIError {
392
413
  export declare class ScenarioNotAllowedError extends APIError {
393
414
  /** The principal's allowed scenario names (may be empty on an older service / defensive drop). */
394
415
  readonly allowlist: string[];
416
+ name: string;
395
417
  constructor(status: number, errorCode: string | undefined, message: string,
396
418
  /** The principal's allowed scenario names (may be empty on an older service / defensive drop). */
397
419
  allowlist: string[]);
398
420
  }
399
421
  /** errorCode `budget.precall` / `budget.exceeded` — per-task or per-principal cost ceiling. NOT retryable. */
400
422
  export declare class BudgetExceededError extends APIError {
423
+ name: string;
401
424
  }
402
425
  /** 409 — session already has an active run, or an idempotency conflict / session CAS conflict.
403
426
  *
@@ -436,6 +459,7 @@ export declare class ConflictError extends APIError {
436
459
  * resume 入口(gateKind 分路),cancel 是保底。自愈臂判别:只对 409 重试,2xx 已接受的提交绝不 cancel([2265]/[2267])。 */
437
460
  readonly activeTaskStatus?: string | undefined;
438
461
  readonly pendingGate?: PendingGateMaterial | undefined;
462
+ name: string;
439
463
  constructor(status: number, errorCode: string | undefined, message: string, activeTaskId?: string | undefined,
440
464
  /** [2255]① server ≥3.21:conflict.session_active_run 携带的真出路材料(ADDITIVE / tolerate-absent)。
441
465
  * running ⇒ steer/cancel 两条路;suspended/needs_review ⇒ pendingGate.decidePath 是那一个正确的
@@ -488,6 +512,7 @@ export declare class DeviceError extends ConflictError {
488
512
  /** `device.rebind_rev_conflict` 的当前 rev(顶层键)—— 壳一跳重定位:直接拿它重发换绑。
489
513
  * 其余码上缺席(**守卫式**:非有限数丢弃 ⇒ 缺席,绝不把垃圾当前态)。 */
490
514
  readonly currentRev?: number | undefined;
515
+ name: string;
491
516
  constructor(status: number, errorCode: string | undefined, message: string,
492
517
  /** `device.rebind_rev_conflict` 的当前 rev(顶层键)—— 壳一跳重定位:直接拿它重发换绑。
493
518
  * 其余码上缺席(**守卫式**:非有限数丢弃 ⇒ 缺席,绝不把垃圾当前态)。 */
@@ -508,6 +533,7 @@ export declare class SyncConflictError extends ConflictError {
508
533
  relation: "fork" | "stale";
509
534
  [k: string]: unknown;
510
535
  };
536
+ name: string;
511
537
  constructor(status: number, errorCode: string | undefined, message: string,
512
538
  /** The §7 `fork`/`stale` relation with the exclusive entry sets (untyped at the JSON boundary). */
513
539
  relation: {
@@ -530,6 +556,7 @@ export declare class ApprovalStaleError extends APIError {
530
556
  * (S-57 前它穿透成 `approval_binding_mismatch`+`field:"boundCallId"`,无指路;那条臂现只剩
531
557
  * server 比对与 core CAS 之间的竞态窗)。 */
532
558
  readonly currentPending?: ApprovalStaleCurrentPending | undefined;
559
+ name: string;
533
560
  constructor(status: number, errorCode: string | undefined, message: string, terminal?: "resolved" | "expired_abort" | "expired_sla" | undefined,
534
561
  /** S-02(server ≥7.52)—— 本会话**当前** pending 的三件 D-1 坐标(additive 指路键):壳拿它一跳
535
562
  * 重定位再 decide,免整队重拉。缺席=无 pending/非工具门/行读失败(server F 类留痕臂)或老 server。
@@ -553,6 +580,7 @@ export declare class ApprovalStaleError extends APIError {
553
580
  * 对着 ≤7.123.x 的 server,那一席仍借本码到达:{@link field} 按闭集读,不认识的词读作缺席,原值在 `err.extra.field`。`retriable: true` 形不变(卡仍 pending、run 行重新 park)。 */
554
581
  export declare class ApprovalBindingMismatchError extends APIError {
555
582
  readonly field?: ApprovalBindingField | undefined;
583
+ name: string;
556
584
  constructor(status: number, errorCode: string | undefined, message: string, field?: ApprovalBindingField | undefined);
557
585
  }
558
586
  /** design/80 D-1 (core 1.101.0) — a concurrent resolve/reopen advanced the checkpoint's revision inside the
@@ -560,6 +588,7 @@ export declare class ApprovalBindingMismatchError extends APIError {
560
588
  * do NOT treat as ApprovalStaleError. Client action: REFETCH the PendingCheckpoint + re-present, then decide
561
589
  * again (retryable). */
562
590
  export declare class ApprovalConcurrentlyReopenedError extends APIError {
591
+ name: string;
563
592
  }
564
593
  /** `steering.*` 族的基类(SDK 1.1.0 —— 从**逐码枚举**改成**前缀分派**,与 `stop.*` / `decide.*` 同形)。
565
594
  *
@@ -572,16 +601,19 @@ export declare class ApprovalConcurrentlyReopenedError extends APIError {
572
601
  * 这是有意的 —— 「409」是传输层的巧合,「steer 目标有歧义」才是消费端要分支的东西;按 [clean-cut] 硬切,
573
602
  * 不留双继承之类的兼容层。整族一把接:`catch (e instanceof SteeringError)`。 */
574
603
  export declare class SteeringError extends APIError {
604
+ name: string;
575
605
  }
576
606
  /** design/80 D-A — you steered a run that is NOT running (it is durable-`suspended`, terminal, or unknown).
577
607
  * Steer is at-most-once and NOT queued. Client action: surface "task isn't running"; if suspended, the path
578
608
  * forward is the approval decide, not a steer. */
579
609
  export declare class SteeringNotRunningError extends SteeringError {
610
+ name: string;
580
611
  }
581
612
  /** design/80 D-A — the steer text carried a control-plane escape (e.g. `</system-reminder>`) and core rejected
582
613
  * it (runtask.ts:489). Client action: it's an injection attempt or a malformed steer — surface it; don't retry
583
614
  * verbatim. (The BFF also fences steer text defensively; this is core's authoritative reject.) */
584
615
  export declare class SteeringInvalidContentError extends SteeringError {
616
+ name: string;
585
617
  }
586
618
  /** `steering.ambiguous_target`(子代 steer/resume 面,server `http/routes/runs.ts`)/
587
619
  * `steering.ambiguous_label`(workflow agent steer 面,`http/routes/workflows.ts`)—— **这一个 run 里有
@@ -589,12 +621,14 @@ export declare class SteeringInvalidContentError extends SteeringError {
589
621
  * Client action:两个码同一个处置 —— **换一个唯一的定位方式**(子代面用 `parentToolCallId`;workflow 面
590
622
  * 用更具体的 label/句柄),原样重试永远同一个结果。`.errorCode` 区分是哪条轴上歧义。 */
591
623
  export declare class SteeringAmbiguousTargetError extends SteeringError {
624
+ name: string;
592
625
  }
593
626
  /** `steering.still_running` —— 你对一个**还在飞**的子代调了 `resume`(revive 只在 settle 之后合法;
594
627
  * 也可能是上一次 resume 还没落地)。409。
595
628
  * Client action:要么改调 steer(给在跑的它递话),要么等它 settle 再 resume。**与
596
629
  * {@link SteeringNotRunningError} 正好互为反面**,两个码塌在一起会让 UI 说反话。 */
597
630
  export declare class SteeringStillRunningError extends SteeringError {
631
+ name: string;
598
632
  }
599
633
  /** `steering.queue_full`(server ≥7.3.0 / core 5.14.0 #147)—— 这条 run **确实**挂着,但它 checkpoint 上
600
634
  * 已 park 的转向队列**满了**。队列是有界且 **fail-loud** 的:引擎绝不驱逐一条已被接受的指令来腾位子
@@ -603,6 +637,7 @@ export declare class SteeringStillRunningError extends SteeringError {
603
637
  * 只是现在放不下。让它 resume 把已 park 的投递掉(或减少并发转向)之后再发。两个码塌在一起会让 UI
604
638
  * 说反话(同 `still_running` 的先例),所以它有自己的类而不是落基类。 */
605
639
  export declare class SteeringQueueFullError extends SteeringError {
640
+ name: string;
606
641
  }
607
642
  /** `steering.ledger_unavailable`(server ≥7.110.0,S-928;子代 steer 路由自 server ≥7.111.0 / S-966 起同样可达)—— server 在回 `200 applied`
608
643
  * (interrupt{text}:`202 queued-immediate`;子代 steer:`200 applied`)**之前**
@@ -612,6 +647,7 @@ export declare class SteeringQueueFullError extends SteeringError {
612
647
  * 照用,server 侧零受理、零注入 ⇒ 不会重复)。不是改内容(invalid_content / blocked_by_hook)、不是换 key(duplicate_input_id)、
613
648
  * 不是等 resume(queue_full)。处置分岔 ⇒ 自己的类(判据二),`.errorCode` 保留。 */
614
649
  export declare class SteeringLedgerUnavailableError extends SteeringError {
650
+ name: string;
615
651
  }
616
652
  /** `steering.duplicate_input_id`(parked 腿 server ≥7.3.0 / core 5.14.0 #147;live 腿 server ≥7.23.0 /
617
653
  * core 5.35.0 #257 起同样可达)—— 你带的 `Idempotency-Key` 已经
@@ -629,6 +665,7 @@ export declare class SteeringDuplicateInputIdError extends SteeringError {
629
665
  /** 体 `detail.differs`:{@link STEER_REPLAY_FACETS} 的非空子集(引擎的序)。整体成形或整体缺席 —— 不是数组 / 空 / 含集外词 ⇒ undefined
630
666
  * (原值仍在 {@link APIError.extra};与 server 自己的读口同判:读不出就不铸)。 */
631
667
  readonly differs?: readonly SteerReplayFacet[] | undefined;
668
+ name: string;
632
669
  constructor(status: number, errorCode: string | undefined, message: string,
633
670
  /** 体 `detail.differs`:{@link STEER_REPLAY_FACETS} 的非空子集(引擎的序)。整体成形或整体缺席 —— 不是数组 / 空 / 含集外词 ⇒ undefined
634
671
  * (原值仍在 {@link APIError.extra};与 server 自己的读口同判:读不出就不铸)。 */
@@ -650,7 +687,11 @@ export type SteerReplayFacet = (typeof STEER_REPLAY_FACETS)[number];
650
687
  * ⚠️ 这一条**必须**是拒:`reason` 自 1.284.0 起在直连门的 HMAC 签名载荷里(ASSISTANT-WIRE-CONTRACT §6.2),
651
688
  * 服务端截过的字节与签名方签的字节必然不同 ⇒ MAC 恒不匹配,截断只会把可诊断的 413 变成费解的 401。
652
689
  * Client action:缩短该字段后重发(重试原文没有意义);两个上限都是 server 侧常量,别在客户端猜。 */
690
+ /** ⚠️ 同一类也接 `413 request.payload_too_large`(`request.*` 族里唯一的分岔,处置同样是「缩短后重发」)—— server ≥7.132.0:TiDB / MySQL 协议部署上**提交体**超库的单行墙 / 包墙
691
+ * (`min(8 MiB, 库的单行上限 − 64 KiB)`,按体的 JSON 字节判)也落这一码,体带 `wallSource`(墙从哪来,见 {@link PayloadWallRefusalExtra});写续跑输入那一笔被库以「一行装不下」拒的答复同码
692
+ * (活流腿是终帧 `done`,`result.errorCode` 同码)。此前受理、写库那一刻 500。出路:缩小内联图 / 附件,或运维抬库的单行上限。 */
653
693
  export declare class PayloadTooLargeError extends APIError {
694
+ name: string;
654
695
  }
655
696
  /** [1833] G13 — `runs.taskStop` 的 409 冲突家族(server `src/http/routes/runs.ts` 的 stop 路由,`errorCode`
656
697
  * 判别;design/158 A9 域拆分后已不在 `src/http/server.ts`):
@@ -659,6 +700,7 @@ export declare class PayloadTooLargeError extends APIError {
659
700
  * 恢复赢了)/ `stop.park_arbiter_unreachable`(仲裁店不可达,真相未知——core 1.397 三分)。
660
701
  * 开集:未来新 `stop.*` 码同样落到本类(`errorCode` 原样携带),消费方 switch 要留 default。 */
661
702
  export declare class TaskStopConflictError extends ConflictError {
703
+ name: string;
662
704
  }
663
705
  /** 409 `interrupt.*` 族(core #504 / server ≥7.52 `POST /v1/runs/:id/interrupt`)—— 前缀开集,与 `stop.*`
664
706
  * 同形。两个现役码,处置相反所以**都别盲重试**,按 `.errorCode` 分支:
@@ -668,27 +710,32 @@ export declare class TaskStopConflictError extends ConflictError {
668
710
  * 那两条腿返回结果不返回流)⇒ 要 run 级停用 `POST /v1/runs/:id/cancel`;证得出他副本时文案会指路重发。
669
711
  * 终态/刚落定臂复用 `steering.not_running`(→ {@link SteeringNotRunningError}),不在本族。 */
670
712
  export declare class InterruptConflictError extends ConflictError {
713
+ name: string;
671
714
  }
672
715
  /** design/80 D-G (direct-connect door, service [84]) — the signed principal JWT (`X-Approval-Principal-Token`)
673
716
  * failed to verify against the worker's projected pubkey anchor (bad sig / exp / iss / aud / alg-not-pinned).
674
717
  * 401. Client action: re-sign a fresh short-TTL JWT; persistent ⇒ BFF signing key/anchor misaligned. FORWARD-
675
718
  * DRAFT: wire codes are service-locked; the BFF signer + live path land at M2. */
676
719
  export declare class PrincipalUnverifiedError extends APIError {
720
+ name: string;
677
721
  }
678
722
  /** design/80 D-G — the JWT verified but its `cnf.bnd` ≠ SHA256(checkpointToken): the identity assertion was
679
723
  * minted for a DIFFERENT decision and lifted onto this one (token-lift). A SAFETY signal. 401. Client action:
680
724
  * NEVER retry verbatim; re-mint the JWT bound to THIS checkpointToken. */
681
725
  export declare class PrincipalUnboundError extends APIError {
726
+ name: string;
682
727
  }
683
728
  /** ASSISTANT-WIRE-CONTRACT §4b(service main 6cd0164)— 你对一个 human/policy_ask 门调了 resume(CONTINUE)。
684
729
  * 409 errorCode `gate_not_resumable`。一个 "continue" 绝不能绕过人审。SEMANTIC(错门), NOT session-CAS ConflictError。
685
730
  * Client action: 这条路是 /decide(approve/deny), 不是 resume —— 改走人审 UI。 */
686
731
  export declare class GateNotResumableError extends APIError {
732
+ name: string;
687
733
  }
688
734
  /** ASSISTANT-WIRE-CONTRACT §4c(service main 6cd0164)— 你对一个非 plan_review 门调了 plan_review。
689
735
  * 409 errorCode `gate_not_plan_review`。一个 plan 决策绝不能解 tool 审批 / resource_limit。SEMANTIC(错门), NOT ConflictError。
690
736
  * Client action: 按 gateKind 选对的决策端点(/decide 或 /resume), 重取 inbox。 */
691
737
  export declare class GateNotPlanReviewError extends APIError {
738
+ name: string;
692
739
  }
693
740
  /** [2400] CB-2(SDK 4.2.0)—— 语义错门守卫的**第三个**成员(与上面两兄弟同形):你对一个**不是工具审批门**
694
741
  * 的挂起调了 `/v1/approvals/:sessionId/decide`。409 errorCode `gate_not_tool_approval`
@@ -699,6 +746,7 @@ export declare class GateNotPlanReviewError extends APIError {
699
746
  * 🔴 与 session-CAS `ConflictError` 刻意不同类:两者都是 409,但这一条说的是「你敲错门了」,处置是**换端点**,
700
747
  * 不是「重读再试」。 */
701
748
  export declare class GateNotToolApprovalError extends APIError {
749
+ name: string;
702
750
  }
703
751
  /** 409 `conflict.ask_decided` —— 这张卡**已经被结算过**,而你送的是**不同**的决议(同 `idempotencyKey`
704
752
  * 的重试走的是 200 回放,不到这里)。body 携带**首决回显**:谁、什么决议、什么时刻。
@@ -712,6 +760,7 @@ export declare class AskDecidedError extends ConflictError {
712
760
  readonly decidedAtMs?: number | undefined;
713
761
  /** 首决者身份断言(server 自铸;actor 永不参与权限判定,仅审计/呈现)。 */
714
762
  readonly actor?: ActorAssertion | undefined;
763
+ name: string;
715
764
  constructor(status: number, errorCode: string | undefined, message: string,
716
765
  /** 首决:被接受的那个决议。 */
717
766
  firstDecision?: "approve" | "deny" | undefined,
@@ -725,6 +774,7 @@ export declare class AskDecidedError extends ConflictError {
725
774
  * 条款排除了它(一次同意不得被复用到另一次未经确认的征询)。
726
775
  * Client action:换一个 key 重发(**不是**换 askId)。 */
727
776
  export declare class AskIdempotencyConflictError extends ConflictError {
777
+ name: string;
728
778
  }
729
779
  /** 410 `gone.ask_parked` / `gone.ask` —— 窗已关闭,这张卡的结局**已经铸定**,流内回决面对它已不存在。
730
780
  *
@@ -768,6 +818,7 @@ export declare class AskGoneError extends APIError {
768
818
  * `orphan_ttl_exceeded` / `crashed_before_park` / `shutdown_before_park`)。组外的词、词表外的词在 mapper 里就被丢弃(原值仍在 `err.extra.cause`),不会到这里。
769
819
  * 缺席 = 行上没写成因(升级前落的存量行)或 ≤7.123.x 的 server(那一代的键叫 `deniedReason`)。 */
770
820
  readonly endingCause?: AskRowEndingCause | undefined;
821
+ name: string;
771
822
  constructor(status: number, errorCode: string | undefined, message: string,
772
823
  /** `PARKED` | `DENIED` | `VOID`(`gone.ask` 腿携带;`gone.ask_parked` 腿恒 PARKED,可缺席)。具名闭集型 {@link AskGoneState}
773
824
  * ({@link toApiError} 只会产出三词之一,越界值在 mapper 里就被丢弃)。 */
@@ -820,6 +871,140 @@ export interface CheckpointUnsupportedVersionExtra {
820
871
  writerVersion?: string;
821
872
  readerVersion?: string;
822
873
  }
874
+ /**
875
+ * **续跑 409 体的三只判别位**(server ≥7.132.0 / core 7.52.0;值经 `err.extra`〔{@link APIError.extra}〕到达)—— 引擎拒一次续跑时 `CheckpointError.detail` 的三个机读位**原样过境**,
876
+ * 键名与 server 自己在重放存量体之前拒的 409 `resume_blocked_by_policy` 同义 ⇒ 两种「谁发现的」读同一组键(有则在,无则缺席,不造键):
877
+ * · `blockedBy` —— 挡住它的准入码 = 同一份坏配置在一次新跑上报的 `errorCode`(引擎拒那一侧今天只有 `checkpoint.config_refused` 带它,闭集属主 core `CHECKPOINT_CONFIG_REFUSAL_CODES`,
878
+ * core 7.53.0 起 40 词 —— 本包不枚举,按「新跑上的 errorCode」读;`resume_blocked_by_policy` 上它恒在,读位另有具名的 {@link ResumeBlockedByPolicyError.blockedBy});
879
+ * · `field` —— 哪一侧 / 哪一格(`checkpoint.config_refused` 上:`taskConfig` 改配置后同一张卡再决 / `deps`〔core 7.53.0 起〕部署自己的座位坏了,修部署后同一张卡再决 /
880
+ * `inheritedGate` 行自己记下的模式种子坏了,只能取消这条 run);
881
+ * · `reason` —— 同码多臂时哪一臂(闭集属主 core `CheckpointErrorReason`;**每一个**引擎码都过境 —— `checkpoint.unsupported_version` 的 `version_newer` 等自 7.132.0 起也上 wire)。
882
+ * 「改一格再决」与「只能在停它的那一版 worker 上跑完、或取消」靠 `field` + `blockedBy` + `reason` 分;`retriable: true` 在场 ⇔ 卡仍 pending(见 {@link APIError.retriable})。
883
+ * 一处如实例外:后台停驻子代腿被同类认领前拒时答 422 `parked_resume.startup_failed`,体只带 `cause`(到引擎的回执带上这几键为止)。
884
+ * 读法:`if (e instanceof ConflictError && e.errorCode?.startsWith("checkpoint.")) { const f = e.extra as ResumeRefusalExtra; … }`。
885
+ */
886
+ export interface ResumeRefusalExtra {
887
+ blockedBy?: string;
888
+ field?: string;
889
+ reason?: string;
890
+ }
891
+ /**
892
+ * `400 request.field_invalid` 的**撞帽与坏条目机读位**(一组键,各面同名;值经 `err.extra` 到达,本类不为它们开具名属性)。
893
+ * · `field` —— 撞帽 / 坏条目那一处的**体内坐标**(`skills[1].allowedTools`、`agents[0].denyTools[3]`、`agents`、`allowTools`、`settings.permissions.allow`、`additionalDirectories` …);
894
+ * · `reason` —— 闭集三词,穷举读:`over_cap`(条数:数组的条目数)/ `too_long`(字符数:一段文字的长度;server ≥7.132.0)/ `bad_entry`(坏条目);
895
+ * · `count` + `cap` —— 撞帽形(`over_cap` / `too_long`):送来的量与帽;`index` —— `bad_entry` 形的首个坏条目下标(数组本身不是数组时缺席)。
896
+ * 射程:server ≥7.106.0 起 `settings.permissions.{allow,deny,ask}` 三桶(`over_cap` / `bad_entry`);**server ≥7.132.0 扩到**提交体上全部工具名清单(技能 `allowedTools` / `disallowedTools`
897
+ * 顶层与子代两层、根 `allowTools` / `excludeTools`、子代 `allowTools` / `denyTools`)、子代定义(条数 32、`name` 64 字、`whenToUse` / `whenToUseLean` / `observer` / `observerMessage` 4096 字、
898
+ * `systemPrompt` 65536 字、`allowTools` / `denyTools` 64 条与单条 128 字)、`additionalDirectories` / `additionalReadDirectories`(64 条;坏条目同 `bad_entry`)。
899
+ * 撞帽句的头一句恒为 `<field> has <count> entries|characters — at most <cap> are accepted`(句子给人看,机器读本组键)。请求体上其余的帽(`systemPrompt` / `appendSystemPrompt`、
900
+ * `settings.outputStyle` / `settings.env`、`jobId`、`clientContext`、`sandboxImageProfile`、`outputSchema`、`resumeAt`、技能 `content`、`images` 的 413)仍只有句子;形错(不是串 / 空串 / 不是数组)只有句子、不铸 `reason`。
901
+ * ⚠️ 同一个码上另有两种机读版式,按 `field` 区分(不按键猜):`field === "settings.hooks"` ⇒ 嵌套 `detail`({@link SettingsHooksRefusalDetail});领养 principals 两句的 `detail` 是**串**。
902
+ * 续跑腿同判:折成 409 `resume_blocked_by_policy`(`blockedBy: "request.field_invalid"`),本组键随体原样带上。
903
+ */
904
+ export interface RequestFieldRefusalExtra {
905
+ field?: string;
906
+ reason?: RequestFieldRefusalReason;
907
+ count?: number;
908
+ cap?: number;
909
+ index?: number;
910
+ }
911
+ /** {@link RequestFieldRefusalExtra.reason} 的闭集(server 契约附录 A `request.field_invalid` 行)。 */
912
+ export type RequestFieldRefusalReason = "over_cap" | "too_long" | "bad_entry";
913
+ /** `settings.hooks` 拒判决的坐标:契约分类器的段形数组,相对请求体的 `settings` 对象(如 `["hooks","PreToolUse",0,"hooks",1]`);用户文本段经契约包的出门读法,凭据形不原样回显,
914
+ * 每个串段过拒句回显口径(剥控制与双向字符、截到 64 字、超出加 `…`)。 */
915
+ export type SettingsHooksConfigPath = Array<string | number>;
916
+ /**
917
+ * `400 request.field_invalid` 上 `field === "settings.hooks"` 那一族的 `detail`(对象形;server ≥7.115.0 起 matcher 拒带它,**server ≥7.132.0 起 `settings.hooks` 的每一只拒都带**,
918
+ * 且**恒带 `path`** —— 判决所在的坐标,见 {@link SettingsHooksConfigPath})。按 `reason` 分形,穷举读(多一形 = server 侧编译红,本包同批加)。
919
+ * 支持地板之内的老 server 交的老形照收(一条律:老 server 缺的键在型上可选):server 7.126.0–7.131.x 的 matcher 三形(`dead_alias` / `over_budget` / `invalid_regex`)**无 `path`**;
920
+ * server 7.115.0–7.125.x 只有死别名一形且**无 `reason`**(`{ event, alias, canonical }`,末一臂 —— `reason === undefined` 判它)。7.132.0 才有的形 `path` 必有。
921
+ * · matcher 四形(fresh 提交面的 matcher 判据):`dead_alias`(选中别名而选不中正名;`alias` / `canonical` 取自引擎静态目录)· `over_budget`(单次求值超每次额度 `budgetMs`)·
922
+ * `budget_exceeded`(server ≥7.132.0:一次受理里所有已完成正则形求值的耗时之和超过受理总额度 `totalMs`〔5 000 ms〕)· `invalid_regex`(正则编不过;7.132.0 起写在任一契约事件上都判);
923
+ * 四形都带 `event`,后三形带 `groupIndex`(从 0 起);
924
+ * · 配置读者的拒:契约分类器的码原样(`HOOKS_REJECTION_CODES` 六词 / `HOOKS_DROPPED_PIECE_CODES` 五词,连字符拼法)+ 可选 `key`(那一块上让它坏的键);
925
+ * · `unsupported_entry_type` + `type`(本服务不执行的条目类型,`path` 指那一条的 `type`);
926
+ * · `over_cap` / `too_long` + `count` / `cap`(服务侧上限:组数 16、一个事件的条目总数 32〔`path` 指第一条超出的条目〕、命令 / URL 8192 字、header 32 个 / 合计 8192 字、`allowedEnvVars` 32 个);
927
+ * · `unnamed_refusal`(分类器说拒却一块都没点名 —— 契约漂移,fail-closed)。
928
+ * 读法:`if (e.extra.field === "settings.hooks") { const d = e.extra.detail as SettingsHooksRefusalDetail; switch (d.reason) { … } }` —— 分流后提示用户改那一处,**不要解析句子**。
929
+ */
930
+ export type SettingsHooksRefusalDetail = {
931
+ reason: "dead_alias";
932
+ event: string;
933
+ alias: string;
934
+ canonical: string;
935
+ path?: SettingsHooksConfigPath;
936
+ } | {
937
+ reason: "over_budget";
938
+ event: string;
939
+ groupIndex: number;
940
+ budgetMs: number;
941
+ path?: SettingsHooksConfigPath;
942
+ } | {
943
+ reason: "budget_exceeded";
944
+ event: string;
945
+ groupIndex: number;
946
+ totalMs: number;
947
+ path: SettingsHooksConfigPath;
948
+ } | {
949
+ reason: "invalid_regex";
950
+ event: string;
951
+ groupIndex: number;
952
+ path?: SettingsHooksConfigPath;
953
+ } | {
954
+ reason: SettingsHooksPieceCode;
955
+ path: SettingsHooksConfigPath;
956
+ key?: string;
957
+ } | {
958
+ reason: "unsupported_entry_type";
959
+ path: SettingsHooksConfigPath;
960
+ type: string;
961
+ } | {
962
+ reason: "over_cap" | "too_long";
963
+ path: SettingsHooksConfigPath;
964
+ count: number;
965
+ cap: number;
966
+ } | {
967
+ reason: "unnamed_refusal";
968
+ path: SettingsHooksConfigPath;
969
+ } | {
970
+ reason?: undefined;
971
+ event: string;
972
+ alias: string;
973
+ canonical: string;
974
+ path?: undefined;
975
+ };
976
+ /** 契约包(`@sema-agent/settings-schema/hooks`)分类器的码:`HOOKS_REJECTION_CODES` 六词 ∪ `HOOKS_DROPPED_PIECE_CODES` 五词(镜像;门钉对钉版 server 依赖的契约包运行期常量)。 */
977
+ export declare const SETTINGS_HOOKS_PIECE_CODES: readonly ["guard-outside-hooks", "hooks-is-matcher", "guard-under-unknown-event", "guard-event-not-array", "guard-matcher-invalid", "guard-entry-invalid", "hooks-not-object", "unknown-event", "event-not-array", "matcher-invalid", "entry-invalid"];
978
+ /** {@link SETTINGS_HOOKS_PIECE_CODES} 的成员型。 */
979
+ export type SettingsHooksPieceCode = (typeof SETTINGS_HOOKS_PIECE_CODES)[number];
980
+ /** `400 config.user_attachment_invalid` 体上的 `detail`(server ≥7.132.0 / core 7.53.0;体 = `{ error, errorCode, detail? }`,值经 `err.extra.detail` 到达):引擎在句首点名的字段 ——
981
+ * `path` = 句子开头那一段(`TaskSpec.userAttachments[2].text`),`index` = 0 起的附件位置,**只在句子点名一只附件时在场**(整只席位的拒 —— 不是数组 / 超条数 —— 只有 `path`)。
982
+ * 与流式 `done.result` / run 记录上 `terminal.detail.detail` 同一份(那两面上的同一只码同形)。本码今天是附录 A 里唯一随码带 `detail` 的 400。 */
983
+ export interface UserAttachmentRefusalExtra {
984
+ detail?: {
985
+ path: string;
986
+ index?: number;
987
+ };
988
+ }
989
+ /**
990
+ * 413 拒体上「拒它的那堵墙的数字是不是库自己报的」(server ≥7.132.0;server `SqlWallSource`):`reported` = 库报的墙(引擎在连接初始化时读到的);`assumed` = 不是库报的,
991
+ * 按受支持引擎里最保守的缺省墙拒 —— 引擎事实还没建立(连接初始化被拒 / 还没读到),或事实在场但这一堵墙读失败退了文档缺省(TiDB < 7.6 又无 `CONFIG` 权限读不到
992
+ * `txn-entry-size-limit`;`max_allowed_packet` 读不出)。事实没建立的窗口里稍后重试按库报的墙重判;读失败退缺省的墙不会自己变真 —— 持续则要运维让服务读得到那个上限。
993
+ */
994
+ export type SqlWallSource = "reported" | "assumed";
995
+ /** `413 request.payload_too_large` 在**提交口**(`POST /v1/tasks` / `/v1/tasks/stream` / `/v1/runs`)因库的单行墙 / 包墙拒时体上的机读位(server ≥7.132.0;值经 `err.extra` 到达,
996
+ * 本码落 {@link PayloadTooLargeError})。同码的其余 413(体超 8 MiB、附件、内联图片)不带它 ⇒ 缺席。 */
997
+ export interface PayloadWallRefusalExtra {
998
+ wallSource?: SqlWallSource;
999
+ }
1000
+ /** SQL 快照 blob 的帽**从哪来**(server ≥7.132.0;server `SqlBlobCapReading.source`):`operator` = 运维设的 `SNAPSHOT_BLOB_SQL_MAX_BYTES`;`reported` / `assumed` = 由库的墙
1001
+ * 推出时那一条腿的墙数字出处(同 {@link SqlWallSource})。 */
1002
+ export type BlobSqlCapSource = "operator" | SqlWallSource;
1003
+ /** `PUT /v1/sessions/:id/sync/blobs/:hash` 的 `413 blob_too_large_for_sql` 体上的机读位(server ≥7.132.0;体 = `{ error, errorCode, wallSource }`,值经 `err.extra` 到达)。
1004
+ * 句子按三形分,不把旋钮或假定说成库的上限。`reported` / `operator` 形重试同一份 blob 不会自己变好(出路:配对象存储);`assumed` 形可稍后重试 / 让服务读得到库的上限 / 设旋钮。 */
1005
+ export interface BlobTooLargeForSqlExtra {
1006
+ wallSource?: BlobSqlCapSource;
1007
+ }
823
1008
  /** `DENIED` 态的唯一合法结局成因(server 全仓 `DENIED` 只有一个写点)—— {@link ASK_ROW_ENDING_CAUSES} 的首员。导出是因为消费端要拿它做
824
1009
  * 「路由失败 vs 人拒」的判别与文案分支 —— 手抄一份字符串正是这条界线被抹掉的常见方式。server ≥7.124.0 起它住在 410 体的 `cause` 键上(此前 `deniedReason`)。 */
825
1010
  export declare const DENY_REASON_ROUTING_FAILURE = "routing_failure_fail_closed";
@@ -840,6 +1025,7 @@ export declare class AskParkingError extends APIError {
840
1025
  readonly retryAfterMs?: number | undefined;
841
1026
  /** body 里的秒制成对键(与头同源;守卫式提取,非有限数丢弃)。 */
842
1027
  readonly retryAfterSec?: number | undefined;
1028
+ name: string;
843
1029
  constructor(status: number, errorCode: string | undefined, message: string,
844
1030
  /** `Retry-After` 头解析出的毫秒(transport 统一喂入)。 */
845
1031
  retryAfterMs?: number | undefined,
@@ -848,6 +1034,7 @@ export declare class AskParkingError extends APIError {
848
1034
  }
849
1035
  /** design/80 D-G — the direct-connect door requires the HMAC envelope (`X-Approval-Mac`) and it was absent. */
850
1036
  export declare class ApprovalMacRequiredError extends APIError {
1037
+ name: string;
851
1038
  }
852
1039
  /** design/80 D-G — the HMAC envelope failed verification (wrong key/kid, or a tampered [token,callId,hash,
853
1040
  * decision] tuple). 401. Client action: re-sign with the active HMAC kid; persistent ⇒ key rotation skew.
@@ -858,6 +1045,7 @@ export declare class ApprovalMacRequiredError extends APIError {
858
1045
  * 删除、零双读、混版两向皆 401)对**本包的调用方**零动作 —— 除非它自己就是那个签名器,那时它按 server 的
859
1046
  * 契约 §6 改形。**没有直连门的部署完全不受影响**。 */
860
1047
  export declare class ApprovalMacInvalidError extends APIError {
1048
+ name: string;
861
1049
  }
862
1050
  /** `resume_outcome_invalid` — a plan_review / dry-run-review outcome was REJECTED BY CONTENT SANITIZE
863
1051
  * (`editedPlan`/`reason` carried a forbidden tag), or — on the tool-approval gate — one cell of the decision body is not valid:
@@ -871,6 +1059,7 @@ export declare class ApprovalMacInvalidError extends APIError {
871
1059
  * precisely so a UI routes to the right recovery (fix the text and re-submit) instead of the action-binding
872
1060
  * flow. Collapsing the two back into one type in the SDK would undo that split. Usually `retriable`. */
873
1061
  export declare class ResumeOutcomeInvalidError extends APIError {
1062
+ name: string;
874
1063
  }
875
1064
  /** `resume_blocked_by_policy` — an admission policy CHANGED between suspend and resume, and the resume is no
876
1065
  * longer admissible. Not a race: retrying as-is stays blocked until the policy or the request changes.
@@ -894,6 +1083,7 @@ export declare class ResumeBlockedByPolicyError extends APIError {
894
1083
  * 「The check that refused it: resume_blocked_by_policy」—— 编一个值比缺席更坏。支持地板抬过 7.104.0 的那一版可改必有(那时缺席不再可达)。
895
1084
  */
896
1085
  readonly blockedBy?: string | undefined;
1086
+ name: string;
897
1087
  constructor(status: number, errorCode: string | undefined, message: string,
898
1088
  /**
899
1089
  * **哪一道检查拒的**:被折叠的那只拒绝**直接**出去时会带的 `errorCode`。server ≥7.104.0(S-607)起 wire 上**恒在**:带码的原拒绝 ⇒
@@ -913,6 +1103,7 @@ export declare class ResumeBlockedByPolicyError extends APIError {
913
1103
  * session_not_found。前缀开集:core 未来新码至少落到本类(`.errorCode` 判别),不塌匿名 409。
914
1104
  * ⚠️ 与下划线形的 resume_outcome_invalid / resume_blocked_by_policy 是**两族**(那两个在上面,先判)。 */
915
1105
  export declare class SubagentResumeConflictError extends ConflictError {
1106
+ name: string;
916
1107
  }
917
1108
  /** A-075.10 —— resume 族的**时间性拒绝**二码(前码 server ≥7.47.0、后码 ≥7.51.0;亲读 `http/server.ts` 拒绝体铸点):
918
1109
  * `resume.usage_window_exhausted`(#449 G1,core 5.60.1:该行账本键上的部署治理窗满了;「什么都没消费、
@@ -928,6 +1119,7 @@ export declare class ResumeRetryLaterError extends SubagentResumeConflictError {
928
1119
  readonly retryAfterMs?: number | undefined;
929
1120
  /** 响应体的 `retryAfterSec`(秒;守卫式提取,非有限数当缺席)。缺席=服务端没给窗。 */
930
1121
  readonly retryAfterSec?: number | undefined;
1122
+ name: string;
931
1123
  constructor(status: number, errorCode: string | undefined, message: string,
932
1124
  /** `Retry-After` 头解析出的毫秒(transport 喂入;该腿 server 今天不发头 ⇒ 通常缺席)。 */
933
1125
  retryAfterMs?: number | undefined,
@@ -939,10 +1131,12 @@ export declare class ResumeRetryLaterError extends SubagentResumeConflictError {
939
1131
  * ⚠️ [2400] CB-2 起 `wake.` 是**前缀开集**:未来的 `wake.*` 新码至少落到 {@link ConflictError}
940
1132
  * (`.errorCode` 原样携带),不再塌成匿名 409。 */
941
1133
  export declare class WakeGatePendingError extends ConflictError {
1134
+ name: string;
942
1135
  }
943
1136
  /** 409 `compact.not_running` / `detach.not_running` —— replica-local live-verb 族:run 已终态,或活在
944
1137
  * 另一副本(手动 compact/detach 只对本副本的活流有效)。`.errorCode` 判别是哪个 verb。 */
945
1138
  export declare class RunNotLiveError extends ConflictError {
1139
+ name: string;
946
1140
  }
947
1141
  /** Base of the `decide.*` family — catch this to handle the whole decide door in one place.
948
1142
  * Codes that fall on THIS class rather than a subclass need a human: `row_unrevivable` (damaged row),
@@ -967,6 +1161,7 @@ export declare class DecideError extends APIError {
967
1161
  * AND by which server sent it — 7.72.0 changed the "host not parked" answer without renaming the code,
968
1162
  * see that class's doc). */
969
1163
  readonly runId?: string | undefined;
1164
+ name: string;
970
1165
  constructor(status: number, errorCode: string | undefined, message: string, taskId?: string | undefined,
971
1166
  /** revive legs only — the claim-rollback disposition the server reported. */
972
1167
  rollback?: string | undefined,
@@ -986,6 +1181,7 @@ export declare class DecideError extends APIError {
986
1181
  * different occupant. The re-fetch then usually shows the card GONE (a 7.104.0 session delete retires its parked children's cards) —
987
1182
  * nothing is left to decide; this form mostly meets cards left behind by a session deleted before 7.104.0. */
988
1183
  export declare class DecideParkMovedError extends DecideError {
1184
+ name: string;
989
1185
  }
990
1186
  /** `decide.parked_answer_required` / `decide.parked_remember_unsupported` — this park shape does not accept
991
1187
  * the decide you sent (an AskUserQuestion approve without `body.answer` — server 5.12.0/core 5.7.0 RB-459;
@@ -994,18 +1190,22 @@ export declare class DecideParkMovedError extends DecideError {
994
1190
  * `decide.parked_answer_unsupported` / `..._question_unsupported` are retired: the answer HAS a hookpoint
995
1191
  * now and a parked question CAN be approved (with an answer). */
996
1192
  export declare class DecideUnsupportedError extends DecideError {
1193
+ name: string;
997
1194
  }
998
1195
  /**
999
- * Why a parked resume could not start its approved action — the engine's closed set `RESUME_STARTUP_CAUSES` (core 7.51.0), word for word and in
1196
+ * Why a parked resume could not start its approved action — the engine's closed set `RESUME_STARTUP_CAUSES` (core 7.51.0; six words since core 7.52.0), word for word and in
1000
1197
  * order. Server ≥ 7.129.0 relays it as the 422 `parked_resume.startup_failed` body's `cause`, screened against this set (a word the engine did
1001
1198
  * not say, or one outside the set ⇒ the key is absent). What each word tells the caller to do:
1002
1199
  * · `environment` — the leg's infrastructure failed (workspace restore, an abort); the decision is untouched — retrying replays it;
1003
1200
  * · `session_gone` — the resumed agent's transcript session is missing;
1201
+ * · `transcript_corrupt` — (core 7.52.0 #1796, server ≥ 7.132.0) the resumed agent's transcript is there but damaged: no header its store wrote, a leaf
1202
+ * or parent entry missing from the log, or a lost tail the checkpoint was cut inside. The row reopens as for `session_gone` (a system retry, the
1203
+ * decision is untouched); only the receipt now says which. Servers ≤ 7.131.x answered `session_gone` / no cause for these;
1004
1204
  * · `tool_unavailable` — the approved tool is not available to the resumed leg (gone, or replaced by a different contract) — this approval cannot run, decide afresh;
1005
1205
  * · `configuration` — the deployment's configuration refuses the resumed leg; a retry under the same configuration fails the same way;
1006
1206
  * · `decision_rejected` — the decision does not fit the checkpoint (another gate's answer, an input the constraints refuse) — correct it and resubmit.
1007
1207
  */
1008
- export declare const RESUME_STARTUP_CAUSES: readonly ["environment", "session_gone", "tool_unavailable", "configuration", "decision_rejected"];
1208
+ export declare const RESUME_STARTUP_CAUSES: readonly ["environment", "session_gone", "transcript_corrupt", "tool_unavailable", "configuration", "decision_rejected"];
1009
1209
  export type ResumeStartupCause = (typeof RESUME_STARTUP_CAUSES)[number];
1010
1210
  /** `parked_resume.startup_failed` (422 — core code PASSTHROUGH, server 5.12.0/RB-459): the decide was
1011
1211
  * accepted and the revive attempted, but the resume failed during startup — the child's session is gone,
@@ -1042,6 +1242,7 @@ export declare class ParkedResumeStartupError extends DecideError {
1042
1242
  * raw value is still at `err.extra.cause`.
1043
1243
  */
1044
1244
  readonly startupCause?: ResumeStartupCause | undefined;
1245
+ name: string;
1045
1246
  constructor(status: number, errorCode: string | undefined, message: string, taskId?: string, rollback?: string, runId?: string,
1046
1247
  /**
1047
1248
  * K-19 — the machine-readable CAUSE WORD of this startup failure (client-core [8537] CC-225; server S-818 relays it
@@ -1064,6 +1265,7 @@ export declare class ParkedResumeStartupError extends DecideError {
1064
1265
  }
1065
1266
  /** `decide.store_unreachable` — the durable agent store is unreachable. Transient: retry the same decide. */
1066
1267
  export declare class DecideStoreUnreachableError extends DecideError {
1268
+ name: string;
1067
1269
  }
1068
1270
  /** `decide.workflow_host_unknown` / `decide.workflow_host_not_parked` (409, server >=7.69.0 / S-185) — the
1069
1271
  * pending belongs to a **workflow child** that parked on an approval gate, and the deployment could not hand
@@ -1089,6 +1291,7 @@ export declare class DecideStoreUnreachableError extends DecideError {
1089
1291
  * (Grouped by what the caller must do — the same axis as {@link DecideParkMovedError} — rather than by status;
1090
1292
  * both are 409 but neither is the "the park moved, refetch the list" doctrine.) */
1091
1293
  export declare class DecideWorkflowHostError extends DecideError {
1294
+ name: string;
1092
1295
  }
1093
1296
  /** `decide.workflow_parks_unreadable` (409, server >=7.75.0 / S-252) — the pending belongs to a **workflow
1094
1297
  * child**, and (the 7.75.0–7.117.x reading; a server ≥7.118.0 narrows the triggers — see the 7.118.0 paragraph at the end)
@@ -1159,6 +1362,7 @@ export declare class DecideWorkflowParksUnreadableError extends DecideError {
1159
1362
  * (the body's top-level `readableHolderRunId`; absent when there is none or a tie — never `null`). Where the work can be carried
1160
1363
  * on; it does NOT clear this refusal (the damaged record `.runId` names still blocks delivery until it is repaired). */
1161
1364
  readonly readableHolderRunId?: string | undefined;
1365
+ name: string;
1162
1366
  constructor(status: number, errorCode: string | undefined, message: string, taskId?: string, rollback?: string, runId?: string,
1163
1367
  /** server ≥7.118.0, the "record cannot be read" cause only: the readable record that holds this card at the highest generation
1164
1368
  * (the body's top-level `readableHolderRunId`; absent when there is none or a tie — never `null`). Where the work can be carried
@@ -1178,6 +1382,7 @@ export declare class DecideWorkflowParkForkedError extends DecideError {
1178
1382
  /** The resumed runs that all hold this card (the body's `runIds`, ≥2 on the wire). Whole-or-nothing: absent when the body does
1179
1383
  * not carry an array of non-empty strings (the raw value stays on {@link APIError.extra}). */
1180
1384
  readonly runIds?: readonly string[] | undefined;
1385
+ name: string;
1181
1386
  constructor(status: number, errorCode: string | undefined, message: string, taskId?: string, rollback?: string, runId?: string,
1182
1387
  /** The resumed runs that all hold this card (the body's `runIds`, ≥2 on the wire). Whole-or-nothing: absent when the body does
1183
1388
  * not carry an array of non-empty strings (the raw value stays on {@link APIError.extra}). */
@@ -1208,17 +1413,21 @@ export declare function toApiError(status: number, body: unknown, retryAfterMs?:
1208
1413
  * failed. `message` is secret-scrubbed (a registry/proxy may echo an Authorization header into an error body). */
1209
1414
  export declare class ControlError extends Error {
1210
1415
  readonly status: number;
1416
+ name: string;
1211
1417
  constructor(status: number, message: string);
1212
1418
  }
1213
1419
  /** 401 — missing/invalid registry Bearer (SEMA_REGISTRY_TOKEN). Fail-closed. */
1214
1420
  export declare class ControlAuthError extends ControlError {
1421
+ name: string;
1215
1422
  }
1216
1423
  /** 403 — authenticated but the token's role is below what the write needs (editor / publisher per domain).
1217
1424
  * Client action: surface "needs a higher role"; do NOT retry with the same token. */
1218
1425
  export declare class ControlForbiddenError extends ControlError {
1426
+ name: string;
1219
1427
  }
1220
1428
  /** 404 — unknown domain / unknown change id / unknown worker. */
1221
1429
  export declare class ControlNotFoundError extends ControlError {
1430
+ name: string;
1222
1431
  }
1223
1432
  /** 400 — zod validation failed. `issues` carries the flat `{ path, message }[]` (batch prefixes path with
1224
1433
  * `[changeIndex, domain, …]`). Client action: fix the offending field; this is deterministic, do NOT retry. */
@@ -1228,6 +1437,7 @@ export declare class ControlValidationError extends ControlError {
1228
1437
  message: string;
1229
1438
  code?: string;
1230
1439
  }[];
1440
+ name: string;
1231
1441
  constructor(status: number, message: string, issues: {
1232
1442
  path: (string | number)[];
1233
1443
  message: string;
@@ -1240,6 +1450,7 @@ export declare class ControlValidationError extends ControlError {
1240
1450
  * K-17: every 409 EXCEPT the scope-gone one — that is {@link ControlScopeGoneError}, deliberately not this class. */
1241
1451
  export declare class ControlConflictError extends ControlError {
1242
1452
  readonly currentVersion?: number | undefined;
1453
+ name: string;
1243
1454
  constructor(status: number, message: string, currentVersion?: number | undefined);
1244
1455
  }
1245
1456
  /** 409 scope-gone (K-17; web-admin wave41 W41F): the rollback's TARGET scope was deleted — or deleted and re-created under
@@ -1251,6 +1462,7 @@ export declare class ControlConflictError extends ControlError {
1251
1462
  * reviewed. Client action: stop, keep the intent, have a person confirm the scope is still the one to write. Still a
1252
1463
  * {@link ControlError} (`status` 409, scrubbed `message`), so a family-wide catch keeps matching. */
1253
1464
  export declare class ControlScopeGoneError extends ControlError {
1465
+ name: string;
1254
1466
  }
1255
1467
  /** Map a control-plane HTTP status + parsed body to the right typed error. Body envelope is `{ error, issues?,
1256
1468
  * message?, currentVersion?, errorCode? }`. 🔴 message is scrubbed (Bearer / presigned) before surfacing.