@sema-agent/sdk 6.7.0 → 6.9.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/dist/index.js CHANGED
@@ -5,7 +5,7 @@ export { AgentClient } from "./client.js";
5
5
  export { ControlClient } from "./control-client.js";
6
6
  export { assertNever } from "./events.js";
7
7
  // SDK 全覆盖批(2026-07-17,clay 令:server API 保证=server AI 直责):运维观测/烧制/用量分析面。
8
- export { MetricsResource, OutcomesResource, SendfileLinksResource } from "./resources/ops.js";
8
+ export { MetricsResource, OutcomesResource, SendfileLinksResource, WiringDiagnosticsResource } from "./resources/ops.js";
9
9
  export { BakesResource } from "./resources/images.js";
10
10
  export { APIError, AuthError, RateLimitedError, QuotaExhaustedError, UsageWindowExhaustedError, MemoryAdmissionError, ScenarioNotAllowedError, BudgetExceededError, ConflictError, SyncConflictError, ApprovalStaleError, ApprovalBindingMismatchError, ApprovalConcurrentlyReopenedError, SteeringNotRunningError, SteeringInvalidContentError, PayloadTooLargeError, TaskStopConflictError, PrincipalUnverifiedError, PrincipalUnboundError, ApprovalMacRequiredError, ApprovalMacInvalidError, GateNotResumableError, GateNotPlanReviewError, WorkspaceFileTooLargeError, SubagentResumeConflictError, WakeGatePendingError, RunNotLiveError,
11
11
  // 503 drain(server ≥1.309):此前**漏了这一个** —— 类在、classifyApiError 也真铸它,但包入口没再导出,
@@ -14,14 +14,14 @@ export { APIError, AuthError, RateLimitedError, QuotaExhaustedError, UsageWindow
14
14
  DrainingError,
15
15
  // resume/decide 面(2026-07-25):见 errors.ts 各类注释。`DecideError` 是家族基类 —— 一把 catch 住 decide 门。
16
16
  ResumeOutcomeInvalidError, ResumeBlockedByPolicyError, DecideError, DecideParkMovedError, DecideUnsupportedError, DecideStoreUnreachableError, ParkedResumeStartupError,
17
- // 附录 A 判据三的 9 个稳定前缀族兜底(SDK 1.1.0 × server 3.x):`auth.` / `conflict.` 复用上面的
18
- // AuthError / ConflictError,其余七族各一个类。整族一把 catch,未知新码有信息地降级(见 errors.ts 顶注)。
17
+ // 附录 A 判据三的 11 个稳定前缀族兜底(SDK 1.1.0 × server 3.x;`gone.` / `parking.` 两族随 server 7.3.0
18
+ // 上 wire,见 errors.ts 顶注):`auth.` / `conflict.` 复用上面的 AuthError / ConflictError,其余各一个类。整族一把 catch,未知新码有信息地降级(见 errors.ts 顶注)。
19
19
  BadRequestError, AttachmentRejectedError, NotFoundError, LimitExceededError, CapabilityUnavailableError, FeatureDisabledError, InternalServerError, ServiceStateError,
20
20
  // `steering.*` 从逐码枚举改前缀分派(与 stop.*/decide.* 同形):基类 + 两个新 typed 码。
21
21
  SteeringError, SteeringAmbiguousTargetError, SteeringStillRunningError, SteeringQueueFullError, SteeringDuplicateInputIdError,
22
22
  // [2400] CB-2(4.2.0):语义错门守卫的第三个成员(/decide 撞非 tool-approval 门)。
23
23
  GateNotToolApprovalError,
24
- // design/172 流内审批回决四则(#151 车4,UNRELEASED / 候 server 7.3.0):200 / 409 首决回显 /
24
+ // design/172 流内审批回决四则(#151 车4;已随 server 7.3.0 / SDK 6.7.0 发布):200 / 409 首决回显 /
25
25
  // 409 幂等键撞 ask / 410 窗已关(带 gate 坐标三件)/ 425 转投递面中(取终局路由信息,非重试受理)。
26
26
  AskDecidedError, AskIdempotencyConflictError, AskGoneError, AskParkingError,
27
27
  /** `DENIED` 态的唯一合法归因值(消费端做「路由失败 vs 人拒」判别用,别手抄字符串)。 */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  * server 的整条 `/v1/assistant/*` 车道与 `/v1/approvals` 共用同一个挂载条件,分支头逐字是
12
12
  * `if (deps.checkpointStore && (url.startsWith("/v1/approvals") || url.startsWith("/v1/assistant")))`
13
13
  * (`src/http/routes/approvals-assistant.ts`),而 `capabilities.approvals = Boolean(deps.checkpointStore)`
14
- * (`routes/capabilities.ts:65`)—— 所以那一位就是本 resource 全部 5 个 verb 的挂载位,尽管名字只提 approvals。
14
+ * (`routes/capabilities.ts` 的 `approvals` 位)—— 所以那一位就是本 resource 全部 5 个 verb 的挂载位,尽管名字只提 approvals。
15
15
  * ⚠️ 名字窄、谓词宽:**别用 `capabilities.scheduler` 判本 resource**(那位说的是 host 腿的自唤醒 cron 工具,
16
16
  * 与调度视图无关;web 曾按名字猜,在 local 部署形上永久渲「不可达」)。
17
17
  * ⚠️ 没接 checkpointStore 的部署上,这条车道**根本不匹配**,请求落到域尾的 404 `not_found.route` —— 那是
@@ -9,10 +9,16 @@
9
9
  * nothing → 404. There is NO durable suspend — a crash loses an in-flight elicitation (acceptable for an
10
10
  * interactive shell; the durable variant waits on the deferred E22 seam).
11
11
  *
12
- * 🔴 The `elicitation`/`elicitation_complete` FRAMES are NOT delivered as `AgentEvent` arms — they are a DISTINCT
13
- * vocabulary that interleaves on the live token stream. Tail them off `tasks.streamRaw` and dispatch on the SSE
14
- * `event:` name (the payload also carries `type`, so a name-stripping proxy still works); parse the `data:` with
15
- * this resource's {@link ElicitationFrame} type. Then resolve via {@link ElicitationsResource.respond}.
12
+ * 🔴 TWO LEGS, and this differs per leg (corrected — the line here used to say flatly "NOT delivered as
13
+ * `AgentEvent` arms", which the SDK's own union has contradicted since TR-7):
14
+ * · LIVE (`tasks.stream` / `tasks.streamRaw`): a DISTINCT out-of-band vocabulary that interleaves on the token
15
+ * stream. Tail them off `tasks.streamRaw` and dispatch on the SSE `event:` name (the payload also carries
16
+ * `type`, so a name-stripping proxy still works); parse the `data:` with this resource's
17
+ * {@link ElicitationFrame} type.
18
+ * · DURABLE (`runs.events()`): the server persists the frame, so it replays — and for THAT leg the SDK does
19
+ * declare `elicitation` / `elicitation_complete` {@link import("../events.js").AgentEvent} arms (same key set
20
+ * as {@link ElicitationFrame}; keep the two in sync).
21
+ * Either way you resolve it via {@link ElicitationsResource.respond}.
16
22
  *
17
23
  * 🔴 UNTRUSTED: `message` is service-FENCED (`delimitUntrusted`) + secret-redacted; `requestedSchema` is an
18
24
  * OPAQUE passthrough (redacted+size-bounded, never interpreted) — the shell MUST still fence it on display.
@@ -36,6 +42,10 @@ export interface ElicitationFrame {
36
42
  mode?: "form";
37
43
  /** "elicitation_complete" only: how it resolved (the dialog dismiss reason). */
38
44
  action?: "accept" | "decline" | "cancel";
45
+ /** Server-signed emit timestamp for this frame (server ≥7.3.0, ADDITIVE, [2805]§五→[2806]). A server-minted
46
+ * side-frame has no core-stream `eventId` to carry, so this is its own time coordinate. Absent on older
47
+ * servers (tolerate-absent). */
48
+ serverNowMs?: number;
39
49
  [k: string]: unknown;
40
50
  }
41
51
  /** The shell's answer to an {@link ElicitationFrame} (= core's `McpElicitResponse`, types.ts:314-318). On
@@ -1 +1 @@
1
- {"version":3,"file":"elicitations.d.ts","sourceRoot":"","sources":["../../src/resources/elicitations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;kFAkBkF;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;uFAEuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAAC;IAC7C,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,aAAa,EAAE,MAAM,CAAC;IACtB,kHAAkH;IAClH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;oFACgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC;6GACyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;CAChE;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CACzC;AAED,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;;;;;wGAOoG;IAC9F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAQhH"}
1
+ {"version":3,"file":"elicitations.d.ts","sourceRoot":"","sources":["../../src/resources/elicitations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;kFAwBkF;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;uFAEuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAAC;IAC7C,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,aAAa,EAAE,MAAM,CAAC;IACtB,kHAAkH;IAClH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;oFACgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC;;qCAEiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC;6GACyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;CAChE;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CACzC;AAED,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;;;;;wGAOoG;IAC9F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAQhH"}
@@ -1 +1 @@
1
- {"version":3,"file":"elicitations.js","sourceRoot":"","sources":["../../src/resources/elicitations.ts"],"names":[],"mappings":"AA2DA,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;;;;;;wGAOoG;IACpG,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,QAAwB,EAAE,IAA+B;QACjF,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAmB;YACtC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,UAAU;YAC1D,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"elicitations.js","sourceRoot":"","sources":["../../src/resources/elicitations.ts"],"names":[],"mappings":"AAqEA,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;;;;;;wGAOoG;IACpG,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,QAAwB,EAAE,IAA+B;QACjF,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAmB;YACtC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,UAAU;YAC1D,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -7,6 +7,7 @@
7
7
  * sendfileLinks — `GET /v1/sendfile-links`(src/http/routes/sessions-list.ts):SendUserFile 分发链接台账;principal 调用方
8
8
  * 钉死本人 scope(?scope= 被忽略),fleet 凭证可选 scope(缺省单用户哨兵 "_")。 */
9
9
  import type { Transport } from "../transport.js";
10
+ import type { WiringDiagnostics } from "../types.js";
10
11
  export declare class MetricsResource {
11
12
  private readonly t;
12
13
  constructor(t: Transport);
@@ -93,4 +94,22 @@ export declare class SendfileLinksResource {
93
94
  [k: string]: unknown;
94
95
  }>;
95
96
  }
97
+ /**
98
+ * `GET /v1/diagnostics/wiring`(server ≥7.4.0,#154)—— 装配自证只读面:一屏回答「这台 worker 到底接了
99
+ * 什么线」。core 的**静态半场** wiring manifest(含 `governance` 段 —— 本面就是那个段的 operator 受众)
100
+ * + server 自己三个装配谓词的读数(含流内审批协议**为什么**没上场的原因词)。
101
+ *
102
+ * 🔴 **operator-only**,门的真形是 **`OPERATOR_PRINCIPALS` 非空 ∨ `REQUIRE_PRINCIPAL`**:满足任一即必须
103
+ * 是名单里的 principal,否则 403 `auth.operator_only`(空名单 ⇒ **谁都不是** operator,不是「全员」)。
104
+ * 注意「没开 REQUIRE_PRINCIPAL」**不等于**开放:只要部署列了 operator 名单,匿名/非名单调用一样 403。
105
+ * 唯一开放的姿势 = 空名单 ∧ 非多租户(单租户 turnkey,唯一的用户就是 operator)。
106
+ * 老 server(<7.4.0)整条路由不存在 ⇒ 404,按「面不在」处置。
107
+ */
108
+ export declare class WiringDiagnosticsResource {
109
+ private readonly t;
110
+ constructor(t: Transport);
111
+ get(opts?: {
112
+ signal?: AbortSignal;
113
+ }): Promise<WiringDiagnostics>;
114
+ }
96
115
  //# sourceMappingURL=ops.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/resources/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;yEAOyE;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,kFAAkF;IAC5E,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlE,8EAA8E;IACxE,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAIhG,kFAAkF;IAC5E,SAAS,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAG/F;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,6EAA6E;IACvE,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAO/H;AAED;;;;;;;gFAOgF;AAChF,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;;;;qEAMiE;IAC3D,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAQ/K"}
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/resources/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;yEAOyE;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,kFAAkF;IAC5E,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlE,8EAA8E;IACxE,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAIhG,kFAAkF;IAC5E,SAAS,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAG/F;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,6EAA6E;IACvE,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAO/H;AAED;;;;;;;gFAOgF;AAChF,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;;;;qEAMiE;IAC3D,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAQ/K;AAED;;;;;;;;;;GAUG;AACH,qBAAa,yBAAyB;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEnC,GAAG,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGvE"}
@@ -61,4 +61,24 @@ export class SendfileLinksResource {
61
61
  return this.t.request({ method: "GET", path: `/v1/sendfile-links${qs ? `?${qs}` : ""}`, signal: opts?.signal });
62
62
  }
63
63
  }
64
+ /**
65
+ * `GET /v1/diagnostics/wiring`(server ≥7.4.0,#154)—— 装配自证只读面:一屏回答「这台 worker 到底接了
66
+ * 什么线」。core 的**静态半场** wiring manifest(含 `governance` 段 —— 本面就是那个段的 operator 受众)
67
+ * + server 自己三个装配谓词的读数(含流内审批协议**为什么**没上场的原因词)。
68
+ *
69
+ * 🔴 **operator-only**,门的真形是 **`OPERATOR_PRINCIPALS` 非空 ∨ `REQUIRE_PRINCIPAL`**:满足任一即必须
70
+ * 是名单里的 principal,否则 403 `auth.operator_only`(空名单 ⇒ **谁都不是** operator,不是「全员」)。
71
+ * 注意「没开 REQUIRE_PRINCIPAL」**不等于**开放:只要部署列了 operator 名单,匿名/非名单调用一样 403。
72
+ * 唯一开放的姿势 = 空名单 ∧ 非多租户(单租户 turnkey,唯一的用户就是 operator)。
73
+ * 老 server(<7.4.0)整条路由不存在 ⇒ 404,按「面不在」处置。
74
+ */
75
+ export class WiringDiagnosticsResource {
76
+ t;
77
+ constructor(t) {
78
+ this.t = t;
79
+ }
80
+ async get(opts) {
81
+ return this.t.request({ method: "GET", path: "/v1/diagnostics/wiring", signal: opts?.signal });
82
+ }
83
+ }
64
84
  //# sourceMappingURL=ops.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/resources/ops.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C,kFAAkF;IAClF,KAAK,CAAC,UAAU,CAAC,IAA+B;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9I,uDAAuD;QACvD,0EAA0E;QAC1E,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,OAAO,CAAC,IAA+B;QAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,SAAS,CAAC,IAA+B;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;CACF;AAQD,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C,6EAA6E;IAC7E,KAAK,CAAC,IAAI,CAAC,IAA6E;QACtF,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,IAAI,EAAE,SAAS;YAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,IAAI,EAAE,cAAc;YAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5G,CAAC;CACF;AA8BD,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;;;;;qEAMiE;IACjE,KAAK,CAAC,IAAI,CAAC,IAAgF;QACzF,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,IAAI,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClH,CAAC;CACF"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/resources/ops.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,30 @@
9
9
  * promise is in-memory, so a respond that lands on another replica / after answer / after the TTL (5 min) finds
10
10
  * nothing → 404. The durable-disconnected-human variant is wired SEPARATELY upstream (`QUESTION_AWAITS_RESUME` — the
11
11
  * ask suspends and a resume carries the answer); a crash loses an in-flight LIVE question (acceptable for an
12
- * interactive shell — core then proceeds with the headless "no answer" default so the run never hangs).
12
+ * interactive shell).
13
13
  *
14
- * 🔴 The `question`/`question_complete` FRAMES are NOT delivered as `AgentEvent` arms — they are a DISTINCT
15
- * vocabulary that interleaves on the live token stream (exactly like elicitation). Tail them off `tasks.streamRaw`
16
- * and dispatch on the SSE `event:` name (the payload also carries `type`, so a name-stripping proxy still works);
17
- * parse the `data:` with this resource's {@link QuestionFrame} type. Then resolve via {@link QuestionsResource.respond}.
14
+ * 🔴 WHAT AN UNANSWERED QUESTION DOES (corrected — server 7.4.0 / #166 裁1 changed this; the line here used to
15
+ * say "core proceeds with the headless no-answer default"). The deployment is only the HONEST REPORTER of one
16
+ * fact: "no human answered". Every arm with no real human answer — no run context, the run aborted, the
17
+ * throttle window is spent, the question cannot be presented, the TTL expired — reports core's
18
+ * `{kind:"unavailable"}`. It NEVER synthesizes an empty answer set (an empty `{answers:[]}` reads to core as
19
+ * "a human WAS here and picked nothing"). CORE then chooses the landing, and the landing depends on the leg:
20
+ * · durable leg ⇒ the question **PARKS a checkpoint** — an operator answers later via the decide face;
21
+ * · non-durable leg ⇒ the run continues on the `declined_unavailable` synthetic-continuation card (the model
22
+ * is told nobody is reachable and proceeds on its own judgment).
23
+ * Either way a run with no human never hangs — but on a durable deployment "unanswered" is NOT "the model got
24
+ * a default", it is "the run is waiting for an operator".
25
+ *
26
+ * 🔴 TWO LEGS, and this differs per leg (corrected — the line here used to say flatly "NOT delivered as
27
+ * `AgentEvent` arms", which the SDK's own union has contradicted since TR-7):
28
+ * · LIVE (`tasks.stream` / `tasks.streamRaw`): a DISTINCT out-of-band vocabulary that interleaves on the token
29
+ * stream (exactly like elicitation / tool_approval). Tail them off `tasks.streamRaw` and dispatch on the SSE
30
+ * `event:` name (the payload also carries `type`, so a name-stripping proxy still works); parse the `data:`
31
+ * with this resource's {@link QuestionFrame} type.
32
+ * · DURABLE (`runs.events()` / `GET /v1/runs/:id/events`): the server persists the frame with `append(type, rest)`,
33
+ * so it replays — and for THAT leg the SDK does declare `question` / `question_complete`
34
+ * {@link import("../events.js").AgentEvent} arms (same key set as {@link QuestionFrame}; keep the two in sync).
35
+ * Either way you resolve it via {@link QuestionsResource.respond}.
18
36
  *
19
37
  * 🔴 UNTRUSTED: the model-authored `questions` are service secret-redacted before streaming, but remain UNTRUSTED
20
38
  * for display (the shell renders them; NEVER re-feed to a model). The ANSWER fence is CORE's — core echoes a
@@ -39,19 +57,26 @@ export interface AskQuestion {
39
57
  /** Allow selecting more than one option. */
40
58
  multiSelect?: boolean;
41
59
  }
42
- /** A live question frame interleaved on the run's `tasks.streamRaw` connection (service `QuestionFrame`
43
- * question.ts:37-46). `type` IS the SSE `event:` name AND is echoed in the payload. The shell renders the
60
+ /** A live question frame interleaved on the run's `tasks.streamRaw` connection (service `QuestionFrame` in
61
+ * `src/question.ts`). `type` IS the SSE `event:` name AND is echoed in the payload. The shell renders the
44
62
  * `question` frame as a multiple-choice dialog and dismisses it on `question_complete`. */
45
63
  export interface QuestionFrame {
46
64
  type: "question" | "question_complete";
47
65
  /** The id to echo back to {@link QuestionsResource.respond}. */
48
66
  questionId: string;
49
67
  /** "question" only: the model's structured questions, secret-redacted. UNTRUSTED — never re-feed to a model.
50
- * Absent on an over-cap payload (the ask then headless-defaults; the shell never sees it to render). */
68
+ * Absent on an over-cap payload — and then NO frame is emitted at all: the ask reports `unavailable`
69
+ * (durable leg parks, non-durable leg continues on `declined_unavailable`; see the module header). */
51
70
  questions?: AskQuestion[];
52
71
  /** "question_complete" only: how it resolved (dialog dismiss reason). `answered` = a human responded;
53
- * `unanswered` = ttl / abort / throttle released it (the model got the headless default). Cosmetic. */
72
+ * `unanswered` = ttl / abort / throttle released it — core was told NOBODY WAS REACHABLE (`unavailable`),
73
+ * which on a durable deployment PARKS rather than handing the model a default. Cosmetic dismiss reason only:
74
+ * never derive the run's fate from it. */
54
75
  outcome?: "answered" | "unanswered";
76
+ /** Server-signed emit timestamp for this frame (server ≥7.3.0, ADDITIVE, [2805]§五→[2806]). A server-minted
77
+ * side-frame has no core-stream `eventId` to carry, so this is its own time coordinate. Absent on older
78
+ * servers (tolerate-absent). */
79
+ serverNowMs?: number;
55
80
  [k: string]: unknown;
56
81
  }
57
82
  /** One question's answer (core `QuestionAnswerItem`, ask-question.ts:63). `selected` is the option label(s) the
@@ -1 +1 @@
1
- {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/resources/questions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;6GAqB6G;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,qHAAqH;IACrH,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;4FAE4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAC;IACvC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB;6GACyG;IACzG,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B;4GACwG;IACxG,OAAO,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACpC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;wFAEwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf;8FAC0F;IAC1F,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oGAAoG;IACpG,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;sDAEsD;AACtD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;;;;;;wGAQoG;IAC9F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQhH"}
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/resources/questions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6GAuC6G;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,qHAAqH;IACrH,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;4FAE4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAC;IACvC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB;;2GAEuG;IACvG,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B;;;+CAG2C;IAC3C,OAAO,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACpC;;qCAEiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;wFAEwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf;8FAC0F;IAC1F,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oGAAoG;IACpG,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;sDAEsD;AACtD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;;;;;;wGAQoG;IAC9F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQhH"}
@@ -1 +1 @@
1
- {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/resources/questions.ts"],"names":[],"mappings":"AAqFA,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;;;;;;;wGAQoG;IACpG,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,MAAsB,EAAE,IAA+B;QAC/E,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAqB;YACxC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,UAAU;YACvD,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/resources/questions.ts"],"names":[],"mappings":"AA8GA,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;;;;;;;wGAQoG;IACpG,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,MAAsB,EAAE,IAA+B;QAC/E,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAqB;YACxC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,UAAU;YACvD,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,24 +1,57 @@
1
1
  /** tool-approvals — [830]① live-stream TOOL-APPROVAL HITL (server 1.191+ `ToolApprovalCoordinator`, gated on
2
- * `TOOL_APPROVAL_ENABLED`; server `src/tool-approval.ts:490` `ToolApprovalCoordinator.respond`). The THIRD sibling of
2
+ * `TOOL_APPROVAL_ENABLED`; server `src/tool-approval.ts`, `ToolApprovalCoordinator.respond`). The THIRD sibling of
3
3
  * {@link import("./questions.js").QuestionsResource} / {@link import("./elicitations.js").ElicitationsResource}:
4
4
  * elicitation = an inbound-MCP-server ask, question = the agent's own AskUserQuestion, THIS = the ENGINE's
5
5
  * permission gate ("may I run this tool?") surfaced to a live human — the suspended↔overlay bridge's decide面.
6
6
  *
7
+ * 🔴 SCOPE OF THIS HEADER: everything below describes the LEGACY `respond` leg only. Since 6.7.0 this module
8
+ * ALSO carries {@link ToolApprovalsResource.decideAsk} (design/172, POST /v1/tasks/:taskId/asks/:askId/decision),
9
+ * which is the opposite shape — a persistent-store CAS keyed on the DURABLE `askId`, accepted by ANY replica.
10
+ * Do not read the live-only/same-replica statements as module-wide.
11
+ *
7
12
  * 🔴 LIVE-ONLY + SAME-REPLICA (the `steer()`-class of HITL, NOT the durable approvals/checkpoint class —
8
13
  * that is {@link import("./approvals.js").ApprovalsResource}): the parked ask is an in-memory promise with a
9
14
  * 5-min TTL (server DEFAULT_APPROVAL_TTL_MS), so a respond that lands after settle / after the TTL / on
10
- * another replica finds nothing → 404. An unanswered ask fail-closes to DENY engine-side (the run proceeds;
11
- * it never hangs).
15
+ * another replica finds nothing → 404.
16
+ *
17
+ * 🔴 WHAT AN UNANSWERED ASK DOES (corrected — the old "fail-closes to DENY, the run proceeds" is now only the
18
+ * MINORITY case). Since [879] G1 / core 1.295 the coordinator reports a THIRD value, `"unavailable"` ("no
19
+ * reachable human"), instead of translating it to `false`, and CORE picks the landing:
20
+ * · deployment WITH a checkpoint store ⇒ the run **durable-PARKS** — an operator can still decide later
21
+ * through {@link import("./approvals.js").ApprovalsResource}. It does NOT proceed on a synthetic deny.
22
+ * · deployment WITHOUT one ⇒ the historical fail-closed DENY, and the run proceeds.
23
+ * With the design/172 protocol on the wire (server ≥7.3.0; default ON from server 7.5.0, see
24
+ * {@link ApprovalRequestFrame}) the window expiry itself is re-adjudicated to `"unavailable"` by the server's
25
+ * `expireAsk` CAS ⇒ the park route, not a deny. Either way the run never hangs.
12
26
  *
13
- * 🔴 The `tool_approval` / `tool_approval_complete` FRAMES are NOT `AgentEvent` arms — they interleave on the
14
- * live token stream exactly like `question`/`elicitation` frames. Tail them off `tasks.streamRaw`, dispatch on
15
- * the SSE `event:` name (the payload echoes `type`), parse with {@link ToolApprovalFrame}, then decide via
16
- * {@link ToolApprovalsResource.respond}.
27
+ * 🔴 On the LIVE leg the `tool_approval` / `tool_approval_complete` FRAMES are out-of-band NAMED frames,
28
+ * interleaved on the live token stream exactly like `question`/`elicitation`. The RECOMMENDED route there is
29
+ * `tasks.streamRaw` + dispatch on the SSE `event:` name (the payload echoes `type`), parse with
30
+ * {@link ToolApprovalFrame}, then decide via {@link ToolApprovalsResource.respond}.
31
+ * ⚠️ "Named frame" does NOT mean "no arm": since #185a both are {@link import("../events.js").AgentEvent}
32
+ * arms, and `tasks.stream()` (which yields every non-heartbeat frame as an `AgentEvent`, without filtering by
33
+ * event name) hands them to you typed. Use `streamRaw` when you want name-based dispatch, `stream()` when
34
+ * payload-`type` dispatch is enough — both work; only the OLD claim "not an arm on the live leg" was wrong.
35
+ * ⚠️ On the BACKGROUND/durable leg this pair — and the new protocol's `approval_request` — IS appended to the
36
+ * events tail by the server's durable-append emit, so it DOES come back through `runs.events()` /
37
+ * `GET /v1/runs/:id/events`, and as of **#185a** all three ARE arms of the
38
+ * {@link import("../events.js").AgentEvent} union. **How to catch it there** (the naive answer does not work,
39
+ * so it is spelled out): `runs.events()` yields PARSED PAYLOADS and drops the SSE `event:` line, so you cannot
40
+ * dispatch by event name through it. The durable read boundary re-injects the frame name INTO the payload
41
+ * (`{ type, ...data }`, same normalized name as the `event:` line), so the discriminator is **`ev.type`** —
42
+ * and since the union now declares the arms, `switch (ev.type)` narrows straight to {@link ToolApprovalFrame} /
43
+ * {@link ApprovalRequestFrame} with NO widening cast. (Before #185a this was a recorded TYPE-SURFACE GAP and a
44
+ * durable consumer switching only on the declared arms silently dropped approval frames until they expired or
45
+ * parked; that hole is closed on the type surface — the RUNTIME condition is unchanged, the frames still only
46
+ * arrive where the corresponding gate is on.)
47
+ * (`approval_revoke` is the ONE exception to the replay: deliberately live-only, never appended, and therefore
48
+ * deliberately NOT an `AgentEvent` arm — the structural compensation is the reconnect preamble's full
49
+ * reconciliation baseline.)
17
50
  *
18
51
  * 🔴 UNTRUSTED for display: `message`/`args` are service secret-redacted (+ args size-bounded, >16 KiB →
19
52
  * `argsOmitted:true`) but remain model/tool-authored — render only, never re-feed to a model. */
20
53
  import type { Transport } from "../transport.js";
21
- /** The human's decision (server `parseToolApprovalResponse`, `src/tool-approval.ts:131` — closed 3-word set;
54
+ /** The human's decision (server `parseToolApprovalResponse` in `src/tool-approval.ts` — closed 3-word set;
22
55
  * anything else is a 400. [2400] HITL-10: the function name was written `parseToolApprovalDecision`, which does
23
56
  * not exist in the server — grepping for it finds nothing. `allow_session` = allow AND remember for this session's category (fs-write tools share ONE
24
57
  * category: approving Write covers Edit/NotebookEdit; other tools are per-tool) — the CC "don't ask again this
@@ -28,14 +61,14 @@ export type ToolApprovalDecision = "allow" | "allow_session" | "deny";
28
61
  * tool-approval.d.ts). `type` IS the SSE `event:` name AND is echoed in the payload. The shell renders the
29
62
  * `tool_approval` frame as an allow/deny dialog and dismisses it on `tool_approval_complete`.
30
63
  *
31
- * ⚠️ 与 {@link ApprovalRequestFrame}(design/172 流内审批协议,UNRELEASED)的关系:server 侧开关打开时
64
+ * ⚠️ 与 {@link ApprovalRequestFrame}(design/172 流内审批协议,server ≥7.3.0 已上线)的关系:server 侧开关打开时
32
65
  * **同一只 ask 出两帧**,顺序钉死为「先本帧(逐字不变)、后 `approval_request`」,两帧同带 `approvalId`。
33
66
  * ⇒ 只认本帧的存量壳行为与今天字节一致;新壳按 `approvalId` 去重、优先渲染新帧。开关关闭 ⇒ 只有本帧。 */
34
67
  /** 同源锚对账面(2026-07-28,cli 接法核查条 5):`ToolApprovalFrame` 的**字段名清单**,给下游值拷贝
35
68
  * (client-core 自持同名闭集 copy)做机器对账用——照 registry-core 值拷贝+同源锚先例。下游测试断言
36
69
  * 自己的 copy 键集 ⊇/== 本清单,SDK 每次 additive 增键(如 1.307 的 `toolCallId`)对方当天红,
37
70
  * 不再靠人肉追平。**新增帧字段必须同步进本清单**(有测试钉)。 */
38
- export declare const TOOL_APPROVAL_FRAME_KEYS: readonly ["type", "approvalId", "toolCallId", "toolName", "sourceTaskId", "fromSubagent", "sourceAgentName", "message", "args", "argsOmitted", "outcome"];
71
+ export declare const TOOL_APPROVAL_FRAME_KEYS: readonly ["type", "approvalId", "toolCallId", "toolName", "sourceTaskId", "fromSubagent", "sourceAgentName", "message", "args", "argsOmitted", "governanceForced", "delegation", "outcome"];
39
72
  export interface ToolApprovalFrame {
40
73
  type: "tool_approval" | "tool_approval_complete";
41
74
  /** The id to echo back to {@link ToolApprovalsResource.respond}. */
@@ -74,8 +107,36 @@ export interface ToolApprovalFrame {
74
107
  args?: unknown;
75
108
  /** "tool_approval" only: args exceeded the 16 KiB bound (or failed to serialize) → omitted, render a stub. */
76
109
  argsOmitted?: boolean;
110
+ /**
111
+ * "tool_approval" only, ADDITIVE — 两段式在场性:**≤ server 7.4.0 恒缺席;≥ 7.5.0 起**在治理来源的 ask 上
112
+ * 带 `true`([2942]/[2943])。唯一权威 = 实测帧,不是 server 版本号字符串。
113
+ *
114
+ * 语义:`true` ⇔ 这只 ask 的门来自**运维治理层**(部署侧的 `AUTONOMY` / `commandPolicy` /
115
+ * `MANUAL_MODE_SHELL_GATE` / `SENSITIVE_WRITE_PATTERNS`),而不是模型默认门或本次请求的客户端表态。
116
+ * 用途:呈「治理强制」徽标,回答「我都开了 `bypassPermissions` 为什么还在问」—— 这类门**客户端表态
117
+ * 掀不掉**,壳应把它呈成不可绕过,而不是引导用户去改 `permissionMode`。
118
+ *
119
+ * 🔴 **缺席 ≠ `false`**(与 `risk` 两轴同族纪律):本键**只在为真时在场**。缺席的含义是「没有治理来源的
120
+ * 证据」,它既覆盖真正的非治理 ask(例:部署把某工具写进 `APPROVAL_REQUIRE` 名单),也覆盖 server 侧
121
+ * 判据够不着的形(例:治理层的 shell 门停在 `classify` 档时,一次 shell ask 出自分类器还是别的门无从
122
+ * 分辨 —— server 选择让键缺席而不是猜)。所以缺席**不得**渲染成「这门可以用表态绕开」。
123
+ */
124
+ governanceForced?: true;
125
+ /** "tool_approval" only (server ≥ core 5.9.0 W1, [2535]): the ask's DELEGATION provenance chain —
126
+ * `{parentToolCallId, depth, agentName?}` (the innermost grandchild frame wins). Present on the same door as
127
+ * {@link fromSubagent} (child asks only). Read-only display enrichment (the approval card can show where the
128
+ * ask floated up from); `agentName` is UNTRUSTED-for-display like {@link sourceAgentName}. ADDITIVE. */
129
+ delegation?: {
130
+ parentToolCallId: string;
131
+ depth: number;
132
+ agentName?: string;
133
+ };
77
134
  /** "tool_approval_complete" only: how it settled (dialog dismiss reason). `expired` = TTL / abort / emit
78
- * failure — the engine got the fail-closed deny. Cosmetic. */
135
+ * failure. ⚠️ What the ENGINE got for an `expired` ask depends on whether the design/172 ask ledger is on
136
+ * this deployment: with it (server ≥7.3.0 under `STREAM_APPROVAL_ENABLED`) the server's `expireAsk` CAS
137
+ * re-adjudicates the outcome to `"unavailable"` ⇒ the run **PARKS**; without it the historical
138
+ * `settle(false,"expired")` fail-closed DENY stands. The frame itself is cosmetic either way — never derive
139
+ * the run's fate from it; read the run row / checkpoint face. */
79
140
  outcome?: "allowed" | "denied" | "expired";
80
141
  [k: string]: unknown;
81
142
  }
@@ -131,6 +192,11 @@ export interface ApprovalCard {
131
192
  toolCallId?: string;
132
193
  /** 风险两轴 + 安全类标记(见 {@link ApprovalRiskAxes} 的三态说明)。 */
133
194
  risk: ApprovalRiskAxes;
195
+ /** ADDITIVE,两段式在场性(**≤ server 7.4.0 恒缺席;≥ 7.5.0 起**在治理来源的 ask 上带 `true`):
196
+ * `true` ⇔ 这只 ask 的门来自运维治理层,客户端表态掀不掉。语义、**「缺席 ≠ false」** 的硬条款与
197
+ * 判据边界逐字见 {@link ToolApprovalFrame.governanceForced}。放在卡的顶层而不是 {@link risk} 里:
198
+ * `risk` 讲引擎对这次操作的风险判定,本键讲**门是谁下的**,两件事。 */
199
+ governanceForced?: true;
134
200
  /** 在场 ⇔ 本 ask 来自**委派子代**(显式判别位,worker 不可伪造)。恒 `true` 或缺席。 */
135
201
  fromSubagent?: true;
136
202
  /** 子代的 core session id —— 行 join 值 + 对早于 `fromSubagent` 的 server 的回落判别位。 */
@@ -145,9 +211,12 @@ export interface ApprovalCard {
145
211
  * **新增帧字段必须同步进本清单**(有测试钉)。 */
146
212
  export declare const APPROVAL_REQUEST_FRAME_KEYS: readonly ["type", "schemaVersion", "askId", "taskId", "kind", "card", "expiresInMs", "expiresAtMs", "serverNowMs", "approvalId"];
147
213
  /** {@link ApprovalCard} 的字段名清单(同上,卡是嵌套结构,单独一份)。 */
148
- export declare const APPROVAL_CARD_KEYS: readonly ["toolName", "message", "args", "argsOmitted", "toolCallId", "risk", "fromSubagent", "sourceTaskId", "sourceAgentName", "delegation"];
149
- /** 流内审批呈卡帧(SSE,`type` 即事件名;design/172 §3.1 + 车3 §4.1)。**NOT an `AgentEvent` arm** ——
150
- * 它与 `tool_approval`/`question`/`elicitation` 同一条 out-of-band 通道,在 live token 流上交织。
214
+ export declare const APPROVAL_CARD_KEYS: readonly ["toolName", "message", "args", "argsOmitted", "toolCallId", "risk", "governanceForced", "fromSubagent", "sourceTaskId", "sourceAgentName", "delegation"];
215
+ /** 流内审批呈卡帧(SSE,`type` 即事件名;design/172 §3.1 + 车3 §4.1)。**两腿两形**:live 腿上它与
216
+ * `tool_approval`/`question`/`elicitation` 同一条 out-of-band 通道、在 token 流上交织,**不是**
217
+ * `AgentEvent` 臂(按 SSE `event:` 名分派);durable 腿上 server 会 append 它,于是同一帧在
218
+ * `runs.events()` 的重放里出现,**并且是**
219
+ * {@link import("../events.js").AgentEvent} 的 `approval_request` 臂(#185a,载荷逐字即本类型)。
151
220
  *
152
221
  * ── 窗与重放(车3 §4.4/§5;design/172 §3.1)──────────────────────────────────────────────────────
153
222
  * - `expiresAtMs` = server 时钟绝对 deadline,**一次铸定、永不重算**;`expiresInMs` =
@@ -304,8 +373,8 @@ export interface AskDecisionAck {
304
373
  * **幂等回放的响应不承诺本字段字节等同**——它是本副本活体状态的函数,不落行。 */
305
374
  updatedInputForwarded?: true;
306
375
  }
307
- /** The 200 ack from a successful respond (server `src/tool-approval.ts:520` 起的 ack 组装 — exact shape,
308
- * `decision` echoed). */
376
+ /** The 200 ack from a successful respond (server `src/tool-approval.ts`, the ack assembly inside
377
+ * `ToolApprovalCoordinator.respond` — exact shape, `decision` echoed). */
309
378
  export interface ToolApprovalRespondAck {
310
379
  approvalId: string;
311
380
  delivery: "applied";
@@ -325,7 +394,7 @@ export declare class ToolApprovalsResource {
325
394
  /** POST /v1/tool-approvals/:id/respond — settle a parked LIVE tool-approval gate with the human's decision.
326
395
  * The engine's suspended tool call resumes (allow) or is refused (deny) on the still-open task connection.
327
396
  *
328
- * 🔴 OWNER-GATED with a 404 (NO existence oracle, server `src/tool-approval.ts:496` — errorCode
397
+ * 🔴 OWNER-GATED with a 404 (NO existence oracle, server `src/tool-approval.ts` — errorCode
329
398
  * `tool_approval.not_pending`): a non-owner AND an
330
399
  * unknown/settled/expired/wrong-replica id both get the same 404 — never branch existence off the status.
331
400
  * A malformed body (`decision` outside the 3-word set) is a 400 (existence-independent). A worker without
@@ -345,7 +414,13 @@ export declare class ToolApprovalsResource {
345
414
  /** POST /v1/tasks/:taskId/asks/:askId/decision — 结算一张**流内审批卡**(design/172 §3.2,车4)。
346
415
  * `askId` 取自 {@link ApprovalRequestFrame.askId};`taskId` 取自同帧的 `taskId`(wire run id)。
347
416
  *
348
- * 🔴 **UNRELEASED** —— 候 server 7.3.0 同窗,且部署侧 `STREAM_APPROVAL_ENABLED` 默认 OFF。
417
+ * 🔴 **已发布** —— 端点随 server 7.3.0 上线,本 verb 随 SDK 6.7.0 发出。部署默认位**分两段读**:
418
+ * server **≤7.4.0 默认 OFF**(`STREAM_APPROVAL_ENABLED` 默认 false ⇒ 这些版本上绝大多数部署走
419
+ * 501,能用的只有 legacy 活卡腿 {@link ToolApprovalsResource.respond});server **≥7.5.0 默认 ON**
420
+ * (2026-08-07 上 npm;server CHANGELOG 以 BREAKING 披露,`STREAM_APPROVAL_ENABLED=false` 是干净还原键)。
421
+ * 两段都要读——第一段描述今天仍在跑的全部 7.3.x/7.4.x 装机。
422
+ * ⚠️ 别按版本号猜:唯一权威是实测能力位 `capabilities.streamApproval`(它是五合取的结果,
423
+ * 开关只是其中一项)。
349
424
  * 未挂 ask 持久层 / 未开开关的 worker ⇒ 501 `feature.approval_ask_disabled`
350
425
  * ({@link import("../errors.js").FeatureDisabledError});探能力面而不是 trial-by-501。
351
426
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tool-approvals.d.ts","sourceRoot":"","sources":["../../src/resources/tool-approvals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-approvals.d.ts","sourceRoot":"","sources":["../../src/resources/tool-approvals.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * tool-approval.d.ts). `type` IS the SSE `event:` name AND is echoed in the payload. The shell renders the
3
3
  * `tool_approval` frame as an allow/deny dialog and dismisses it on `tool_approval_complete`.
4
4
  *
5
- * ⚠️ 与 {@link ApprovalRequestFrame}(design/172 流内审批协议,UNRELEASED)的关系:server 侧开关打开时
5
+ * ⚠️ 与 {@link ApprovalRequestFrame}(design/172 流内审批协议,server ≥7.3.0 已上线)的关系:server 侧开关打开时
6
6
  * **同一只 ask 出两帧**,顺序钉死为「先本帧(逐字不变)、后 `approval_request`」,两帧同带 `approvalId`。
7
7
  * ⇒ 只认本帧的存量壳行为与今天字节一致;新壳按 `approvalId` 去重、优先渲染新帧。开关关闭 ⇒ 只有本帧。 */
8
8
  /** 同源锚对账面(2026-07-28,cli 接法核查条 5):`ToolApprovalFrame` 的**字段名清单**,给下游值拷贝
@@ -20,6 +20,8 @@ export const TOOL_APPROVAL_FRAME_KEYS = [
20
20
  "message",
21
21
  "args",
22
22
  "argsOmitted",
23
+ "governanceForced",
24
+ "delegation",
23
25
  "outcome",
24
26
  ];
25
27
  /** 同源锚对账面(照 {@link TOOL_APPROVAL_FRAME_KEYS} 先例):`ApprovalRequestFrame` 的**字段名清单**,
@@ -45,6 +47,7 @@ export const APPROVAL_CARD_KEYS = [
45
47
  "argsOmitted",
46
48
  "toolCallId",
47
49
  "risk",
50
+ "governanceForced",
48
51
  "fromSubagent",
49
52
  "sourceTaskId",
50
53
  "sourceAgentName",
@@ -127,7 +130,7 @@ export class ToolApprovalsResource {
127
130
  /** POST /v1/tool-approvals/:id/respond — settle a parked LIVE tool-approval gate with the human's decision.
128
131
  * The engine's suspended tool call resumes (allow) or is refused (deny) on the still-open task connection.
129
132
  *
130
- * 🔴 OWNER-GATED with a 404 (NO existence oracle, server `src/tool-approval.ts:496` — errorCode
133
+ * 🔴 OWNER-GATED with a 404 (NO existence oracle, server `src/tool-approval.ts` — errorCode
131
134
  * `tool_approval.not_pending`): a non-owner AND an
132
135
  * unknown/settled/expired/wrong-replica id both get the same 404 — never branch existence off the status.
133
136
  * A malformed body (`decision` outside the 3-word set) is a 400 (existence-independent). A worker without
@@ -146,7 +149,13 @@ export class ToolApprovalsResource {
146
149
  /** POST /v1/tasks/:taskId/asks/:askId/decision — 结算一张**流内审批卡**(design/172 §3.2,车4)。
147
150
  * `askId` 取自 {@link ApprovalRequestFrame.askId};`taskId` 取自同帧的 `taskId`(wire run id)。
148
151
  *
149
- * 🔴 **UNRELEASED** —— 候 server 7.3.0 同窗,且部署侧 `STREAM_APPROVAL_ENABLED` 默认 OFF。
152
+ * 🔴 **已发布** —— 端点随 server 7.3.0 上线,本 verb 随 SDK 6.7.0 发出。部署默认位**分两段读**:
153
+ * server **≤7.4.0 默认 OFF**(`STREAM_APPROVAL_ENABLED` 默认 false ⇒ 这些版本上绝大多数部署走
154
+ * 501,能用的只有 legacy 活卡腿 {@link ToolApprovalsResource.respond});server **≥7.5.0 默认 ON**
155
+ * (2026-08-07 上 npm;server CHANGELOG 以 BREAKING 披露,`STREAM_APPROVAL_ENABLED=false` 是干净还原键)。
156
+ * 两段都要读——第一段描述今天仍在跑的全部 7.3.x/7.4.x 装机。
157
+ * ⚠️ 别按版本号猜:唯一权威是实测能力位 `capabilities.streamApproval`(它是五合取的结果,
158
+ * 开关只是其中一项)。
150
159
  * 未挂 ask 持久层 / 未开开关的 worker ⇒ 501 `feature.approval_ask_disabled`
151
160
  * ({@link import("../errors.js").FeatureDisabledError});探能力面而不是 trial-by-501。
152
161
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tool-approvals.js","sourceRoot":"","sources":["../../src/resources/tool-approvals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-approvals.js","sourceRoot":"","sources":["../../src/resources/tool-approvals.ts"],"names":[],"mappings":"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"}
@@ -121,7 +121,7 @@ export declare class WorkflowsResource {
121
121
  * 🔴 **501 的门是 `capabilities.workflowsList`,不是 `capabilities.workflows`**(4.3.0 更正,FW-5):
122
122
  * 501 的真判据是 `!deps.workflowRunStore`(`routes/workflows.ts:197-200`),而
123
123
  * `workflows: deps.workflowsCapable ?? Boolean(deps.workflowRunStore)` 与
124
- * `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts:276-289` 的注
124
+ * `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts` 中这两位旁的注
125
125
  * 逐字区分:`workflows` = ENGINE-CAN「引擎能不能自编排」,`workflowsList` = 能不能 durable 列 run)。
126
126
  * 同一判据也管着 `list`/`get`/`journal`/`stream` 四条读面。查错了键的后果双向都有:
127
127
  * `workflows:true, workflowsList:false` ⇒ 入口被点亮、每次点都吃 501;反过来则把一个能用的面藏起来。
@@ -78,7 +78,7 @@ export class WorkflowsResource {
78
78
  * 🔴 **501 的门是 `capabilities.workflowsList`,不是 `capabilities.workflows`**(4.3.0 更正,FW-5):
79
79
  * 501 的真判据是 `!deps.workflowRunStore`(`routes/workflows.ts:197-200`),而
80
80
  * `workflows: deps.workflowsCapable ?? Boolean(deps.workflowRunStore)` 与
81
- * `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts:276-289` 的注
81
+ * `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts` 中这两位旁的注
82
82
  * 逐字区分:`workflows` = ENGINE-CAN「引擎能不能自编排」,`workflowsList` = 能不能 durable 列 run)。
83
83
  * 同一判据也管着 `list`/`get`/`journal`/`stream` 四条读面。查错了键的后果双向都有:
84
84
  * `workflows:true, workflowsList:false` ⇒ 入口被点亮、每次点都吃 501;反过来则把一个能用的面藏起来。