@sema-agent/sdk 4.1.0 → 4.3.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 (111) hide show
  1. package/README.md +34 -1
  2. package/dist/client.d.ts +10 -1
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +7 -2
  5. package/dist/client.js.map +1 -1
  6. package/dist/control-types.d.ts +22 -4
  7. package/dist/control-types.d.ts.map +1 -1
  8. package/dist/control-types.js +3 -1
  9. package/dist/control-types.js.map +1 -1
  10. package/dist/errors.d.ts +42 -5
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +81 -7
  13. package/dist/errors.js.map +1 -1
  14. package/dist/events.d.ts +63 -1
  15. package/dist/events.d.ts.map +1 -1
  16. package/dist/events.js.map +1 -1
  17. package/dist/health.d.ts +76 -7
  18. package/dist/health.d.ts.map +1 -1
  19. package/dist/health.js +40 -2
  20. package/dist/health.js.map +1 -1
  21. package/dist/idempotency.d.ts +11 -1
  22. package/dist/idempotency.d.ts.map +1 -1
  23. package/dist/idempotency.js +11 -1
  24. package/dist/idempotency.js.map +1 -1
  25. package/dist/index.d.ts +18 -4
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +11 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/registry/health.d.ts +6 -1
  30. package/dist/registry/health.d.ts.map +1 -1
  31. package/dist/registry/health.js +6 -4
  32. package/dist/registry/health.js.map +1 -1
  33. package/dist/registry/index.d.ts +7 -1
  34. package/dist/registry/index.d.ts.map +1 -1
  35. package/dist/registry/index.js +7 -1
  36. package/dist/registry/index.js.map +1 -1
  37. package/dist/resources/approvals.d.ts +43 -13
  38. package/dist/resources/approvals.d.ts.map +1 -1
  39. package/dist/resources/approvals.js +35 -12
  40. package/dist/resources/approvals.js.map +1 -1
  41. package/dist/resources/assistant.d.ts +21 -4
  42. package/dist/resources/assistant.d.ts.map +1 -1
  43. package/dist/resources/assistant.js +10 -3
  44. package/dist/resources/assistant.js.map +1 -1
  45. package/dist/resources/attachments.d.ts +9 -2
  46. package/dist/resources/attachments.d.ts.map +1 -1
  47. package/dist/resources/attachments.js.map +1 -1
  48. package/dist/resources/control/secrets.d.ts +10 -1
  49. package/dist/resources/control/secrets.d.ts.map +1 -1
  50. package/dist/resources/control/secrets.js +10 -1
  51. package/dist/resources/control/secrets.js.map +1 -1
  52. package/dist/resources/fleet.d.ts +11 -5
  53. package/dist/resources/fleet.d.ts.map +1 -1
  54. package/dist/resources/fleet.js +2 -1
  55. package/dist/resources/fleet.js.map +1 -1
  56. package/dist/resources/images.d.ts +10 -1
  57. package/dist/resources/images.d.ts.map +1 -1
  58. package/dist/resources/images.js +20 -5
  59. package/dist/resources/images.js.map +1 -1
  60. package/dist/resources/leader.d.ts +7 -3
  61. package/dist/resources/leader.d.ts.map +1 -1
  62. package/dist/resources/leader.js +7 -3
  63. package/dist/resources/leader.js.map +1 -1
  64. package/dist/resources/ops.d.ts +29 -2
  65. package/dist/resources/ops.d.ts.map +1 -1
  66. package/dist/resources/ops.js +6 -1
  67. package/dist/resources/ops.js.map +1 -1
  68. package/dist/resources/runs.d.ts +89 -18
  69. package/dist/resources/runs.d.ts.map +1 -1
  70. package/dist/resources/runs.js +53 -17
  71. package/dist/resources/runs.js.map +1 -1
  72. package/dist/resources/session-sync.d.ts +77 -17
  73. package/dist/resources/session-sync.d.ts.map +1 -1
  74. package/dist/resources/session-sync.js +81 -20
  75. package/dist/resources/session-sync.js.map +1 -1
  76. package/dist/resources/sessions.d.ts +82 -13
  77. package/dist/resources/sessions.d.ts.map +1 -1
  78. package/dist/resources/sessions.js +39 -7
  79. package/dist/resources/sessions.js.map +1 -1
  80. package/dist/resources/tool-approvals.d.ts +8 -5
  81. package/dist/resources/tool-approvals.d.ts.map +1 -1
  82. package/dist/resources/tool-approvals.js +2 -1
  83. package/dist/resources/tool-approvals.js.map +1 -1
  84. package/dist/resources/trace.d.ts +17 -3
  85. package/dist/resources/trace.d.ts.map +1 -1
  86. package/dist/resources/trace.js +25 -5
  87. package/dist/resources/trace.js.map +1 -1
  88. package/dist/resources/workflows.d.ts +42 -10
  89. package/dist/resources/workflows.d.ts.map +1 -1
  90. package/dist/resources/workflows.js +46 -9
  91. package/dist/resources/workflows.js.map +1 -1
  92. package/dist/resources/workspace.d.ts +36 -11
  93. package/dist/resources/workspace.d.ts.map +1 -1
  94. package/dist/resources/workspace.js.map +1 -1
  95. package/dist/sse.d.ts +58 -14
  96. package/dist/sse.d.ts.map +1 -1
  97. package/dist/sse.js +88 -15
  98. package/dist/sse.js.map +1 -1
  99. package/dist/sync.d.ts +37 -8
  100. package/dist/sync.d.ts.map +1 -1
  101. package/dist/sync.js +24 -8
  102. package/dist/sync.js.map +1 -1
  103. package/dist/transport.d.ts +31 -4
  104. package/dist/transport.d.ts.map +1 -1
  105. package/dist/transport.js +38 -6
  106. package/dist/transport.js.map +1 -1
  107. package/dist/types.d.ts +156 -51
  108. package/dist/types.d.ts.map +1 -1
  109. package/openapi.yaml +377 -59
  110. package/package.json +2 -2
  111. package/registry-openapi.yaml +34 -3
@@ -24,9 +24,22 @@ export class WorkflowsResource {
24
24
  * 批次①-5:此前单一必填-status 形状不诚实,截断行现网真的没有 status)。`nextOffset` = the pagination
25
25
  * cursor, present only when the page came back exactly `limit`-sized (more may exist) — 🔴 此前类型上
26
26
  * 完全没有这个字段,消费方读不到分页续读钩子。
27
+ *
28
+ * 🔴 **分页入参(4.3.0,FW-2)**:`limit` 缺省 20、**上限 50**;`offset` >= 0(server `routes/workflows.ts:123-124`)。
29
+ * 在此之前 SDK 补了 `nextOffset` 字段却没补能用它的入口 —— 一个 21 个 agent 的 workflow 拿回 20 条 +
30
+ * `nextOffset: 20`,消费方握着游标却发现没有任何参数能把它送回去,第 21 条 agent 的失败诊断在 SDK 通路上
31
+ * **不可达**,只能绕过 SDK 裸拼 URL(而绕过 SDK 正是这个包存在的理由被否定的那一刻)。
27
32
  * 404 = run 不存在/非 owner(无存在性 oracle);501 = journal store 未接(self-orchestration off)。 */
28
33
  async journal(runId, opts) {
29
- return this.t.request({ method: "GET", path: `/v1/workflows/${encodeURIComponent(runId)}/journal${this.sessionQs(opts?.session)}`, signal: opts?.signal });
34
+ const q = new URLSearchParams();
35
+ if (opts?.session !== undefined)
36
+ q.set("session", opts.session);
37
+ if (opts?.limit !== undefined)
38
+ q.set("limit", String(opts.limit));
39
+ if (opts?.offset !== undefined)
40
+ q.set("offset", String(opts.offset));
41
+ const qs = q.toString();
42
+ return this.t.request({ method: "GET", path: `/v1/workflows/${encodeURIComponent(runId)}/journal${qs ? `?${qs}` : ""}`, signal: opts?.signal });
30
43
  }
31
44
  /** `session` filter semantics(distinct from the per-id accept-phase): present = strict-equality filter
32
45
  * on the run's `originatingSessionId` (fieldless pre-core-1.210 rows are dropped); absent = full list.
@@ -47,15 +60,29 @@ export class WorkflowsResource {
47
60
  async get(runId, opts) {
48
61
  return this.t.request({ method: "GET", path: `/v1/workflows/${encodeURIComponent(runId)}${this.sessionQs(opts?.session)}`, signal: opts?.signal });
49
62
  }
50
- /** server 1.214 (server.js:1706 WORKFLOW_AGENT_STEER_RE region) — STEER a RUNNING AGENT of a WORKFLOW run
63
+ /** server 5.3.0 (`src/http/routes/workflows.ts:25` 的 `WORKFLOW_AGENT_STEER_RE` 常量 / `:194` 的处理段)
64
+ * — STEER a RUNNING AGENT of a WORKFLOW run
51
65
  * (the S8 self-orchestration sibling of `runs.steerSubagent`): inject `content` into the labelled live agent;
52
66
  * it drains at the agent's next tool round. `label` = the workflow-graph agent label (NOT a toolCallId);
53
67
  * a label shared by >1 live agents → 409 `steering.ambiguous_label`. Body `{ content }` (non-empty, else 400).
54
68
  * 200 {@link WorkflowAgentSteerReceipt} (`marker`, no `note`).
55
69
  *
56
70
  * 🔴 REPLICA-LOCAL live handle: 409 `steering.not_running` = agent settled / workflow not running / live on
57
- * another replica (cross-replica live-steer unsupported). 501 = worker without SELF_ORCHESTRATION_ENABLED
58
- * (gate on `capabilities.workflows`). Owner-scoped 404 (operator principals bypass). AT-MOST-ONCE (no retry). */
71
+ * another replica (cross-replica live-steer unsupported).
72
+ *
73
+ * 🔴 **413 `steer.content_too_large`**(4.3.0 补,FW-12):`content` 超过 `STEER_IN_MAX_REQUEST_CHARS` 时
74
+ * server **拒收**(`routes/workflows.ts:232-240`),而不是先截断再投递 —— `:229-231` 写明了为什么必须是拒:
75
+ * 先截会让引擎的 `[+N chars]` 披露低报,且脱敏门要同步、还烧事件循环。消费方应当分出这条臂并提示
76
+ * 「内容太长,请缩短」,而不是落进「未知错误 / 服务异常」兜底(用户根本不知道该怎么办)。
77
+ *
78
+ * 🔴 **501 的门是 `capabilities.workflowsList`,不是 `capabilities.workflows`**(4.3.0 更正,FW-5):
79
+ * 501 的真判据是 `!deps.workflowRunStore`(`routes/workflows.ts:197-200`),而
80
+ * `workflows: deps.workflowsCapable ?? Boolean(deps.workflowRunStore)` 与
81
+ * `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts:276-289` 的注
82
+ * 逐字区分:`workflows` = ENGINE-CAN「引擎能不能自编排」,`workflowsList` = 能不能 durable 列 run)。
83
+ * 同一判据也管着 `list`/`get`/`journal`/`stream` 四条读面。查错了键的后果双向都有:
84
+ * `workflows:true, workflowsList:false` ⇒ 入口被点亮、每次点都吃 501;反过来则把一个能用的面藏起来。
85
+ * Owner-scoped 404 (operator principals bypass). AT-MOST-ONCE (no retry). */
59
86
  async steerAgent(runId, label, message, opts) {
60
87
  return this.t.request({
61
88
  method: "POST",
@@ -64,9 +91,10 @@ export class WorkflowsResource {
64
91
  signal: opts?.signal,
65
92
  });
66
93
  }
67
- /** GET /v1/workflows/:id/stream — LIVE S8 self-orchestration progress (`streamWorkflowRun` +
68
- * core `subscribeWorkflow`, server.ts). SSE; FIRST frame is `meta` `{version, runId}`, then each subsequent
69
- * frame carries a core `WorkflowEvent` (its `type` becomes the SSE `event` name; see `WorkflowStreamEvent`).
94
+ /** GET /v1/workflows/:id/stream — LIVE S8 self-orchestration progress (`streamWorkflowRun`,
95
+ * server 5.3.0 `src/http/routes/workflows.ts:483` + core `subscribeWorkflow`). SSE; FIRST frame is `meta`
96
+ * `{type:"meta", version, runId}`, then each subsequent frame carries a core `WorkflowEvent` (its `type`
97
+ * becomes the SSE `event` name; see `WorkflowStreamEvent`).
70
98
  *
71
99
  * 🔴 NOT RESUMABLE (unlike `runs.events`/`trace.stream`): the source is REPLICA-LOCAL + in-process — there is
72
100
  * NO durable seq / Last-Event-ID, so a drop is a FULL restart (re-`get()` for the snapshot), not a resume.
@@ -74,8 +102,17 @@ export class WorkflowsResource {
74
102
  * would silently lose/duplicate frames here). TRANSIENT: a disconnect just ends the iterator. S8 flag-gated
75
103
  * off → the route returns 501 (typed error) before any frame; owner-gated (non-owner → 404).
76
104
  *
77
- * No explicit terminal frame is guaranteed (the core subscription simply ends) — the generator returns when the
78
- * server closes the stream; `get()` for the authoritative terminal `status`. */
105
+ * 🔴 **There IS one terminal frame, and it means FAILURE** (4.3.0 更正,FW-3): if the core subscription
106
+ * throws mid-stream the server emits `event: error` with
107
+ * `data: {type:"error", errorCode:"workflow.stream_error", message:"workflow stream error"}`
108
+ * (`routes/workflows.ts:517`; `:515-516` 写明了加 `errorCode` 的理由 —— 此前只发人话 message,消费端要么
109
+ * 锚文案、要么把「流断了」和「流正常结束」混为一谈)。这条注释此前写的是「没有终态帧保证」,照它写的消费方
110
+ * 会把一个**失败的** workflow 报成跑完了。正确姿势:分支
111
+ * `if (f.event === "error" && f.data.errorCode === "workflow.stream_error")`,别锚 `message`。
112
+ * 除这条之外没有正常终态帧 —— 迭代器自然结束 ⇒ 用 `get()` 取权威终态 `status`。
113
+ *
114
+ * 保活是**真帧** `event: heartbeat\ndata: {}` @15s(`routes/workflows.ts:496`,旁注写明**故意不用 SSE 注释**:
115
+ * 逐帧解析的 BFF 会把注释丢掉,下游于是看到一个零帧窗口)。别按「跳过以 `:` 开头的行」实现读端。 */
79
116
  async *stream(runId, opts) {
80
117
  const o = {
81
118
  method: "GET",
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,40 @@ export interface WorkspaceFile {
24
24
  /** [1894]③ 二进制判别(server 首 8KiB NUL 嗅探,git 同判据)——web 预览器分流用。 */
25
25
  binary: boolean;
26
26
  }
27
+ /** `GET …/workspace` 的 200 信封(server `routes/sessions.ts:624-629`)。
28
+ *
29
+ * 🔴 4.3.0 提成 **exported type**(此前是 `list()` 返回位上的**内联闭合字面量**):两道 spec 门谁都扫不到
30
+ * 方法返回位置的内联形 —— `spec-field-drift-gate` 只扫 `src/types.ts` 的 exported interface,
31
+ * `spec-resource-schema-gate` 只扫 `src/resources/*.ts` 的 exported type。于是这个信封漏了 `sessionId`
32
+ * (server 与 spec 都把它列为 required)整整一个 major 版本而 CI 全绿。提出来 = 让第二道门罩住它。 */
33
+ export interface WorkspaceSnapshotPage {
34
+ /** 恒发 —— 回声校验(拿它与请求的 id 对一遍防串会话)在 TS 下此前根本写不出来,只能强制断言绕过。 */
35
+ sessionId: string;
36
+ snapshots: WorkspaceSnapshotRow[];
37
+ /** 最新快照键;无快照时缺席。与展示行**同源**(server 防 ghost key:latest 绝不指向已被 reap 的快照)。 */
38
+ latest?: string;
39
+ /** ⚠️ **本页行数,不是快照总数** —— `total = snapshots.length`(server `:628`)。而且这条腿**没有任何
40
+ * 分页游标**:超过 `limit`(上限 100)的老快照取不到。渲「共 N 个快照」会在快照多于 limit 时永远显示
41
+ * limit,用户以为老快照被清了。
42
+ * 🔴 同族的 {@link WorkspaceTreePage} 用**同一个键名**表示 `all.length` 的**全量** —— 同名键在同一族的
43
+ * 两条腿上语义相反,这是 server 侧的既成事实,别把两处的 `total` 当同一个量读。 */
44
+ total: number;
45
+ [k: string]: unknown;
46
+ }
47
+ /** `GET …/workspace/:key/tree` 的 200 信封(server `routes/sessions.ts:651-657`)。提成 exported type 的
48
+ * 理由同 {@link WorkspaceSnapshotPage}。 */
49
+ export interface WorkspaceTreePage {
50
+ /** 恒发(server 与 spec 均列为 required)。 */
51
+ sessionId: string;
52
+ /** 解析后的**真实**快照键 —— 请求里传 `"latest"` 别名时,这里回的是它解析到的那个 uuidv7 键。 */
53
+ key: string;
54
+ entries: WorkspaceTreeEntry[];
55
+ /** ⚠️ 这条腿的 `total` 是**真·全量**(`all.length`),与 {@link WorkspaceSnapshotPage.total} 语义相反。 */
56
+ total: number;
57
+ /** 在场 = 还有下一页;把它当 `offset` 送回来。 */
58
+ nextOffset?: number;
59
+ [k: string]: unknown;
60
+ }
27
61
  export declare class WorkspaceResource {
28
62
  private readonly t;
29
63
  constructor(t: Transport);
@@ -31,23 +65,14 @@ export declare class WorkspaceResource {
31
65
  list(sessionId: string, opts?: {
32
66
  limit?: number;
33
67
  signal?: AbortSignal;
34
- }): Promise<{
35
- snapshots: WorkspaceSnapshotRow[];
36
- latest?: string;
37
- total: number;
38
- }>;
68
+ }): Promise<WorkspaceSnapshotPage>;
39
69
  /** `GET …/workspace/:key/tree` — 文件树(path 序稳定;limit 1..2000 默认 500 + offset 分页;
40
70
  * `key="latest"` 别名可用)。`nextOffset` 在场=还有下一页。 */
41
71
  tree(sessionId: string, key: string, opts?: {
42
72
  limit?: number;
43
73
  offset?: number;
44
74
  signal?: AbortSignal;
45
- }): Promise<{
46
- key: string;
47
- entries: WorkspaceTreeEntry[];
48
- total: number;
49
- nextOffset?: number;
50
- }>;
75
+ }): Promise<WorkspaceTreePage>;
51
76
  /** `GET …/workspace/:key/file?path=` — 单文件字节(≤ capabilities.workspace.maxFileBytes,默认 8MiB)。
52
77
  * 超限=413 结构化信封([1894]①)⇒ typed {@link WorkspaceFileTooLargeError}(带 sizeBytes/limit)——
53
78
  * web 渲「文件过大,下载查看」卡,archive 口是退路。 */
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"AAAA;;;;;sEAKsE;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,8EAA8E;IACxE,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAKjF;sDACkD;IAC5C,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC/D,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ9F;;0CAEsC;IAChC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBjH;;mEAE+D;IACzD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAUlG"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"AAAA;;;;;sEAKsE;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;yEAKyE;AACzE,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;0DAIsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;yCACyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,8EAA8E;IACxE,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC9C,OAAO,CAAC,qBAAqB,CAAC;IAKjC;sDACkD;IAC5C,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC/D,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;0CAEsC;IAChC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBjH;;mEAE+D;IACzD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAUlG"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"AAiEA,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C,8EAA8E;IAC9E,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,IAA+C;QAE/C,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvI,CAAC;IAED;sDACkD;IAClD,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,GAAW,EACX,IAAgE;QAEhE,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,KAAK,SAAS;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,cAAc,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvK,CAAC;IAED;;0CAEsC;IACtC,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,GAAW,EAAE,IAAY,EAAE,IAA+B;QACtF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,cAAc,kBAAkB,CAAC,GAAG,CAAC,cAAc,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAChI,MAAM,EAAE,0BAA0B;YAClC,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,kFAAkF;QAClF,iEAAiE;QACjE,wDAAwD;QACxD,2EAA2E;QAC3E,4BAA4B;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YAC9C,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B;YAC1E,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,MAAM;SAC5D,CAAC;IACJ,CAAC;IAED;;mEAE+D;IAC/D,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,GAAW,EAAE,IAA+B;QAC3E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,cAAc,kBAAkB,CAAC,GAAG,CAAC,UAAU;YAClG,MAAM,EAAE,mBAAmB;YAC3B,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
package/dist/sse.d.ts CHANGED
@@ -1,15 +1,27 @@
1
1
  /**
2
2
  * SSE parser (fetch ReadableStream, Node/browser同源) + Last-Event-ID resume loop, normalizing both stream
3
3
  * sources into the AgentEvent union (events.ts). On a server-window eviction the server returns 416 with
4
- * `{ error, retainedFrom }` (match the STATUS — there is NO RESUME_EVICTED code field) → full-sync via the
5
- * trace turns API (GET /v1/tasks/:id/turns) then resume events from `retainedFrom` (no event lost, only
6
- * possibly re-seen; consumer is event-id idempotent). See the pinned SSE re-delivery contract.
7
- * Heartbeat-timeout (service heartbeat = 30s; SDK threshold ≥ ~45s) → treat as a drop, enter the resume loop.
4
+ * `{ error, errorCode: "limit.retention_evicted", retainedFrom }` ([2400] CB-7 — the code IS on the wire, server
5
+ * `src/http/sse-log.ts:41`; this loop still keys on the STATUS because what it needs is `retainedFrom`, but a
6
+ * consumer may branch on the code and the SDK maps it via the `limit.` family) → full-sync via the trace turns
7
+ * API (GET /v1/tasks/:id/turns) then resume events from `retainedFrom` (no event lost, only possibly re-seen;
8
+ * consumer is event-id idempotent). See the pinned SSE re-delivery contract.
9
+ * Heartbeat-timeout (service keep-alive = 15s on the task/run/trace/workflow/fleet writers; SDK grace 45s =
10
+ * three missed beats) → treat as a drop, enter the resume loop.
8
11
  *
9
12
  * STATUS: M2 — implemented. `open(lastEventId?)` is the connection factory (the caller binds path/transport);
10
13
  * the resume loop feeds back the last seen event id. Terminal events (done/failed) end the generator.
11
14
  */
12
15
  import type { AgentEvent } from "./events.js";
16
+ /** Idle watchdog: declare a drop after this much silence. Sized off the service's own keep-alive cadence —
17
+ * **15s** on every task/run/trace/workflow/fleet SSE writer (`setInterval(…, 15_000)` at
18
+ * `routes/tasks.ts:67` & `:173`, `routes/runs.ts:1006`, `routes/workflows.ts:496`, `routes/fleet.ts:223`,
19
+ * and the `Date.now() - lastBeat > 15_000` tails in `routes/trace-usage.ts:294` / `sse-log.ts:92`) —
20
+ * so 45s = **three** missed beats before we call it dead, not one.
21
+ * ⚠️ ONE writer beats slower: `GET /v1/sessions/:id/events` uses `deps.sessionEventsHeartbeatMs ?? 25_000`
22
+ * (server `routes/sessions.ts:359`, operator-tunable) AND writes BARE COMMENT lines (`: hb`), not named frames —
23
+ * `sessions.watch` therefore passes its own 60s grace rather than this constant. ([2400] CB-9: the previous
24
+ * note said "service heartbeat is 30s", a number no writer in the server emits.) */
13
25
  export declare const HEARTBEAT_GRACE_MS = 45000;
14
26
  /** Heartbeat-silence watchdog fired: no bytes arrived within the grace window. Typed so a caller (shell
15
27
  * liveClient tear-verdict) can DIAGNOSE "engine alive but stream idle" apart from other stream errors.
@@ -19,8 +31,29 @@ export declare class SseIdleError extends Error {
19
31
  readonly elapsedMs: number;
20
32
  constructor(elapsedMs: number);
21
33
  }
34
+ /** [2400] X-2 — the durable event stream ended WITHOUT a terminal (`done`/`failed`) and re-opening it produced
35
+ * nothing, repeatedly. The overwhelmingly common cause is a **parked run**: when a run is `suspended` /
36
+ * `needs_review`, the server's tail sees a non-`running` row and closes the leg immediately — connection fine,
37
+ * zero frames, forever. It is NOT a transport failure and NOT a terminal.
38
+ *
39
+ * 🔴 Consumer action: `await client.runs.get(taskId)` and branch on the row — a `suspended` / `needs_review`
40
+ * status means a human decision is owed (`approvals.decide` / `assistant.planReview` / `assistant.resume`);
41
+ * a terminal status means the tail simply outlived the run; anything else = a genuine transport problem.
42
+ * `lastEventId` is the resume cursor to hand back to `runs.events({ lastEventId })` once the park is resolved.
43
+ *
44
+ * ⚠️ The SDK deliberately does NOT call `runs.get()` for you here: `sse.ts` is the byte-level parser and holds
45
+ * no `AgentClient` / no auth closure. Giving it one to auto-diagnose would invert the layering (the parser would
46
+ * start issuing authenticated requests of its own) — the typed error is the seam instead. */
47
+ export declare class StreamEndedWithoutTerminalError extends Error {
48
+ /** Last durable `id:` seen on this stream (= `task_event.seq`), or undefined if none arrived. Resume cursor. */
49
+ readonly lastEventId?: string | undefined;
50
+ constructor(
51
+ /** Last durable `id:` seen on this stream (= `task_event.seq`), or undefined if none arrived. Resume cursor. */
52
+ lastEventId?: string | undefined);
53
+ }
22
54
  /** Resumable stream: (re)opens via `open(lastEventId)`, parses SSE frames into AgentEvents, resumes on drops
23
- * and heartbeat silences, handles 416 eviction by resuming from `retainedFrom`. Ends on done/failed. */
55
+ * and heartbeat silences, handles 416 eviction by resuming from `retainedFrom`. Ends on done/failed.
56
+ * A run that PARKS (the tail keeps re-opening empty) surfaces as {@link StreamEndedWithoutTerminalError}. */
24
57
  export declare function parseSse(open: (lastEventId?: string) => Promise<Response>, opts?: {
25
58
  heartbeatGraceMs?: number;
26
59
  signal?: AbortSignal;
@@ -63,15 +96,26 @@ export declare class SyncTruncatedError extends Error {
63
96
  * contract breach. The caller owns the Response (already status-checked: a non-200 is a JSON error body, handled
64
97
  * before this is called). `T` defaults to `unknown` — the cloud re-validates the tree, so the SDK keeps entries opaque. */
65
98
  export declare function parseNdjsonEntries<T = unknown>(res: Response, signal?: AbortSignal): AsyncGenerator<T>;
66
- /** Serialize a `StampedAgentEvent` generator into a live `text/event-stream` `Response` (id:/data: verbatim
67
- * passthrough — a frame with no `id` is written with no `id:` line, matching wire's own bare-frame shape for
68
- * non-resumable legs). Emits a real named `event: heartbeat\ndata: {}\n\n` frame every `heartbeatMs` (default
69
- * 15000, matching the service's own SSE keep-alive cadence — verified against every `res.write(\`event:
70
- * heartbeat...\`)` site in @sema-agent/server's src/http/server.ts, all 15s; a bare `:`-comment is deliberately
71
- * NOT used anywhere in that wire — a per-frame-parsing BFF drops comment lines, leaving a silent gap
72
- * downstream). `signal` abort closes the stream and calls the source generator's `return()` so it can release
73
- * whatever it's holding (e.g. `parseSse`'s open connection) — mirrors `tasks.stream`'s disconnect-cancels
74
- * contract, just on the write side. */
99
+ /** Serialize a `StampedAgentEvent` generator into a live `text/event-stream` `Response`.
100
+ *
101
+ * Frame shape = the server's own, byte-for-byte in ordering: `id: <seq>\n` (omitted when the event carries no
102
+ * `id` — the bare-frame shape of a non-resumable leg) then `event: <type>\n` then `data: <json>\n\n`.
103
+ * 🔴 [2400] X-22 fixed two losses here: the `event:` line was MISSING entirely (a downstream dispatching on the
104
+ * SSE event name — a browser `addEventListener("tool_end", …)`, a name-routing relay — saw only unnamed frames
105
+ * after passing through this helper), and `id` was written to the `id:` line yet ALSO left inside the JSON
106
+ * payload (it is the SDK's transport cursor stamped by `parseSse`, not a wire field of the event body).
107
+ *
108
+ * Emits a real named `event: heartbeat\ndata: {}\n\n` frame every `heartbeatMs` (default 15000 — the cadence of
109
+ * every task/run/trace/workflow/fleet SSE writer in @sema-agent/server: `routes/tasks.ts:67` & `:173`,
110
+ * `routes/runs.ts:1006`, `routes/workflows.ts:496`, `routes/fleet.ts:223`, and the `lastBeat > 15_000` tails in
111
+ * `routes/trace-usage.ts:294` / `sse-log.ts:92`, all 15s). ⚠️ Not universal: `GET /v1/sessions/:id/events` beats
112
+ * at `sessionEventsHeartbeatMs ?? 25_000` and writes BARE `: hb` comment lines instead — that one leg is the
113
+ * exception to "the server never uses `:`-comments"; on the frame legs a comment is deliberately avoided because
114
+ * a per-frame-parsing BFF drops comment lines, leaving a silent gap downstream.
115
+ *
116
+ * `signal` abort closes the stream and calls the source generator's `return()` so it can release whatever it's
117
+ * holding (e.g. `parseSse`'s open connection) — mirrors `tasks.stream`'s disconnect-cancels contract, just on
118
+ * the write side. */
75
119
  export declare function toSseResponse(gen: AsyncGenerator<StampedAgentEvent>, opts?: {
76
120
  heartbeatMs?: number;
77
121
  signal?: AbortSignal;
package/dist/sse.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAGzC;;;wGAGwG;AACxG,qBAAa,YAAa,SAAQ,KAAK;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAIvC;AAED;yGACyG;AACzG,wBAAuB,QAAQ,CAC7B,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,EACjD,IAAI,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACzD,cAAc,CAAC,UAAU,CAAC,CA2D5B;AAED;yFACyF;AACzF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;;;4GAM4G;AAC5G,wBAAuB,gBAAgB,CACrC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,EACjD,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACxC,IAAI,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACzD,cAAc,CAAC,QAAQ,CAAC,CA4C1B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;0GAC0G;AAC1G,wBAAuB,aAAa,CAClC,GAAG,EAAE,QAAQ,EACb,gBAAgB,SAAqB,EACrC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,QAAQ,CAAC,CA4C1B;AAcD;;+GAE+G;AAC/G,qBAAa,kBAAmB,SAAQ,KAAK;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM;gBAAtE,OAAO,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM,EAAW,QAAQ,CAAC,EAAE,MAAM,YAAA;CAInF;AAED;;;;4HAI4H;AAC5H,wBAAuB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EACnD,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,CAAC,CAAC,CAuDnB;AAUD;;;;;;;;wCAQwC;AACxC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,cAAc,CAAC,iBAAiB,CAAC,EACtC,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACpD,QAAQ,CAkDV"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C;;;;;;;;qFAQqF;AACrF,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAOzC;;;wGAGwG;AACxG,qBAAa,YAAa,SAAQ,KAAK;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAIvC;AAED;;;;;;;;;;;;8FAY8F;AAC9F,qBAAa,+BAAgC,SAAQ,KAAK;IAEtD,gHAAgH;IAChH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;;IAD7B,gHAAgH;IACvG,WAAW,CAAC,EAAE,MAAM,YAAA;CAKhC;AAED;;8GAE8G;AAC9G,wBAAuB,QAAQ,CAC7B,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,EACjD,IAAI,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACzD,cAAc,CAAC,UAAU,CAAC,CAwE5B;AAED;yFACyF;AACzF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;;;4GAM4G;AAC5G,wBAAuB,gBAAgB,CACrC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,EACjD,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACxC,IAAI,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACzD,cAAc,CAAC,QAAQ,CAAC,CA4C1B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;0GAC0G;AAC1G,wBAAuB,aAAa,CAClC,GAAG,EAAE,QAAQ,EACb,gBAAgB,SAAqB,EACrC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,QAAQ,CAAC,CA4C1B;AAcD;;+GAE+G;AAC/G,qBAAa,kBAAmB,SAAQ,KAAK;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM;gBAAtE,OAAO,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM,EAAW,QAAQ,CAAC,EAAE,MAAM,YAAA;CAInF;AAED;;;;4HAI4H;AAC5H,wBAAuB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EACnD,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,CAAC,CAAC,CAuDnB;AAUD;;;;;;;;;;;;;;;;;;;sBAmBsB;AACtB,wBAAgB,aAAa,CAC3B,GAAG,EAAE,cAAc,CAAC,iBAAiB,CAAC,EACtC,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACpD,QAAQ,CA4DV"}
package/dist/sse.js CHANGED
@@ -1,7 +1,20 @@
1
1
  import { toApiError } from "./errors.js";
2
2
  import { errorFromResponse } from "./transport.js";
3
- export const HEARTBEAT_GRACE_MS = 45_000; // service heartbeat is 30s; allow one beat of slack before declaring a drop
3
+ /** Idle watchdog: declare a drop after this much silence. Sized off the service's own keep-alive cadence —
4
+ * **15s** on every task/run/trace/workflow/fleet SSE writer (`setInterval(…, 15_000)` at
5
+ * `routes/tasks.ts:67` & `:173`, `routes/runs.ts:1006`, `routes/workflows.ts:496`, `routes/fleet.ts:223`,
6
+ * and the `Date.now() - lastBeat > 15_000` tails in `routes/trace-usage.ts:294` / `sse-log.ts:92`) —
7
+ * so 45s = **three** missed beats before we call it dead, not one.
8
+ * ⚠️ ONE writer beats slower: `GET /v1/sessions/:id/events` uses `deps.sessionEventsHeartbeatMs ?? 25_000`
9
+ * (server `routes/sessions.ts:359`, operator-tunable) AND writes BARE COMMENT lines (`: hb`), not named frames —
10
+ * `sessions.watch` therefore passes its own 60s grace rather than this constant. ([2400] CB-9: the previous
11
+ * note said "service heartbeat is 30s", a number no writer in the server emits.) */
12
+ export const HEARTBEAT_GRACE_MS = 45_000;
4
13
  const MAX_CONSECUTIVE_FAILURES = 5;
14
+ /** [2400] X-2 — how many CONSECUTIVE "connected fine, zero frames, ended" legs mean "this run is parked".
15
+ * Two, not five: a park is a STEADY state (the server closes the tail because the run is not `running`), so the
16
+ * extra three round-trips only delay the moment the consumer can go ask `runs.get()`. */
17
+ const EMPTY_LEGS_BEFORE_PARK_VERDICT = 2;
5
18
  /** Heartbeat-silence watchdog fired: no bytes arrived within the grace window. Typed so a caller (shell
6
19
  * liveClient tear-verdict) can DIAGNOSE "engine alive but stream idle" apart from other stream errors.
7
20
  * 🔴 The message is a FROZEN literal (`SSE: no data for ${ms}ms (heartbeat silence)`) — downstream scripts
@@ -14,12 +27,37 @@ export class SseIdleError extends Error {
14
27
  this.name = "SseIdleError";
15
28
  }
16
29
  }
30
+ /** [2400] X-2 — the durable event stream ended WITHOUT a terminal (`done`/`failed`) and re-opening it produced
31
+ * nothing, repeatedly. The overwhelmingly common cause is a **parked run**: when a run is `suspended` /
32
+ * `needs_review`, the server's tail sees a non-`running` row and closes the leg immediately — connection fine,
33
+ * zero frames, forever. It is NOT a transport failure and NOT a terminal.
34
+ *
35
+ * 🔴 Consumer action: `await client.runs.get(taskId)` and branch on the row — a `suspended` / `needs_review`
36
+ * status means a human decision is owed (`approvals.decide` / `assistant.planReview` / `assistant.resume`);
37
+ * a terminal status means the tail simply outlived the run; anything else = a genuine transport problem.
38
+ * `lastEventId` is the resume cursor to hand back to `runs.events({ lastEventId })` once the park is resolved.
39
+ *
40
+ * ⚠️ The SDK deliberately does NOT call `runs.get()` for you here: `sse.ts` is the byte-level parser and holds
41
+ * no `AgentClient` / no auth closure. Giving it one to auto-diagnose would invert the layering (the parser would
42
+ * start issuing authenticated requests of its own) — the typed error is the seam instead. */
43
+ export class StreamEndedWithoutTerminalError extends Error {
44
+ lastEventId;
45
+ constructor(
46
+ /** Last durable `id:` seen on this stream (= `task_event.seq`), or undefined if none arrived. Resume cursor. */
47
+ lastEventId) {
48
+ super("SSE: stream keeps ending without progress or a terminal event");
49
+ this.lastEventId = lastEventId;
50
+ this.name = "StreamEndedWithoutTerminalError";
51
+ }
52
+ }
17
53
  /** Resumable stream: (re)opens via `open(lastEventId)`, parses SSE frames into AgentEvents, resumes on drops
18
- * and heartbeat silences, handles 416 eviction by resuming from `retainedFrom`. Ends on done/failed. */
54
+ * and heartbeat silences, handles 416 eviction by resuming from `retainedFrom`. Ends on done/failed.
55
+ * A run that PARKS (the tail keeps re-opening empty) surfaces as {@link StreamEndedWithoutTerminalError}. */
19
56
  export async function* parseSse(open, opts) {
20
57
  const grace = opts?.heartbeatGraceMs ?? HEARTBEAT_GRACE_MS;
21
58
  let lastId;
22
59
  let failures = 0;
60
+ let emptyLegs = 0; // [2400] X-2: consecutive "opened fine, zero frames" legs — the park signature.
23
61
  for (;;) {
24
62
  if (opts?.signal?.aborted)
25
63
  return;
@@ -34,8 +72,13 @@ export async function* parseSse(open, opts) {
34
72
  continue;
35
73
  }
36
74
  if (res.status === 416) {
37
- // evicted past retention: match the STATUS (no code field), read retainedFrom, resume from there.
75
+ // evicted past retention: 416 + `retainedFrom` in the body; read retainedFrom and resume from there.
38
76
  // The consumer full-syncs missed ground truth via trace.turns (pinned SSE contract).
77
+ // ⚠️ [2400] CB-7: the body DOES carry a machine code — `errorCode: "limit.retention_evicted"`
78
+ // (server `src/http/sse-log.ts:41` / `routes/trace-usage.ts:251`). The old note here said "match the
79
+ // STATUS — there is NO code field", which was simply false; matching the status is still what this loop
80
+ // does (it needs `retainedFrom`, not the code), but a consumer MAY branch on the code, and the SDK's
81
+ // `limit.` prefix family maps it to LimitExceededError.
39
82
  const body = (await res.json().catch(() => ({})));
40
83
  // Last-Event-ID = "replay AFTER this seq" → ask from retainedFrom-1 so retainedFrom itself is replayed
41
84
  // (and the server's `retainedFrom > from+1` eviction check is false → no 416 loop).
@@ -49,9 +92,11 @@ export async function* parseSse(open, opts) {
49
92
  if (!res.ok)
50
93
  throw await errorFromResponse(res);
51
94
  let sawTerminal = false;
95
+ let sawFrame = false;
52
96
  try {
53
97
  for await (const frame of readSseFrames(res, grace, opts?.signal)) {
54
98
  failures = 0; // progress = a frame arrived (NOT just a connection accepted) — prevents an accept/drop loop
99
+ sawFrame = true;
55
100
  if (frame.id)
56
101
  lastId = frame.id;
57
102
  // 🔴 facade 审计(2026-07-24,批次①-3):server 的 keep-alive 是一个真命名帧
@@ -80,8 +125,15 @@ export async function* parseSse(open, opts) {
80
125
  if (!sawTerminal)
81
126
  res.body?.cancel().catch(() => { });
82
127
  }
128
+ // [2400] X-2 — park 感知,排在空转熔断之前:一条「开得成、零帧、就结束」的腿连续出现 2 次,
129
+ // 压倒性可能是 run 已 park(server 的 tail 见到非 `running` 的行就收流)。抛 typed 类而不是裸 Error,
130
+ // 消费方才有一个可分支的东西去 `runs.get()` 判 park(见 StreamEndedWithoutTerminalError 顶注)。
131
+ if (sawFrame)
132
+ emptyLegs = 0;
133
+ else if (++emptyLegs >= EMPTY_LEGS_BEFORE_PARK_VERDICT)
134
+ throw new StreamEndedWithoutTerminalError(lastId);
83
135
  if (++failures >= MAX_CONSECUTIVE_FAILURES)
84
- throw new Error("SSE: stream keeps ending without progress or a terminal event");
136
+ throw new StreamEndedWithoutTerminalError(lastId);
85
137
  if (opts?.signal?.aborted)
86
138
  return;
87
139
  // stream ended without a terminal event → reconnect and tail on
@@ -302,15 +354,26 @@ export async function* parseNdjsonEntries(res, signal) {
302
354
  // what the native `EventSource` already understands (including its own built-in Last-Event-ID reconnect),
303
355
  // so shipping a symmetric browser-side parser here would be a redundant second implementation of what the
304
356
  // platform gives for free.
305
- /** Serialize a `StampedAgentEvent` generator into a live `text/event-stream` `Response` (id:/data: verbatim
306
- * passthrough — a frame with no `id` is written with no `id:` line, matching wire's own bare-frame shape for
307
- * non-resumable legs). Emits a real named `event: heartbeat\ndata: {}\n\n` frame every `heartbeatMs` (default
308
- * 15000, matching the service's own SSE keep-alive cadence — verified against every `res.write(\`event:
309
- * heartbeat...\`)` site in @sema-agent/server's src/http/server.ts, all 15s; a bare `:`-comment is deliberately
310
- * NOT used anywhere in that wire — a per-frame-parsing BFF drops comment lines, leaving a silent gap
311
- * downstream). `signal` abort closes the stream and calls the source generator's `return()` so it can release
312
- * whatever it's holding (e.g. `parseSse`'s open connection) — mirrors `tasks.stream`'s disconnect-cancels
313
- * contract, just on the write side. */
357
+ /** Serialize a `StampedAgentEvent` generator into a live `text/event-stream` `Response`.
358
+ *
359
+ * Frame shape = the server's own, byte-for-byte in ordering: `id: <seq>\n` (omitted when the event carries no
360
+ * `id` — the bare-frame shape of a non-resumable leg) then `event: <type>\n` then `data: <json>\n\n`.
361
+ * 🔴 [2400] X-22 fixed two losses here: the `event:` line was MISSING entirely (a downstream dispatching on the
362
+ * SSE event name — a browser `addEventListener("tool_end", …)`, a name-routing relay — saw only unnamed frames
363
+ * after passing through this helper), and `id` was written to the `id:` line yet ALSO left inside the JSON
364
+ * payload (it is the SDK's transport cursor stamped by `parseSse`, not a wire field of the event body).
365
+ *
366
+ * Emits a real named `event: heartbeat\ndata: {}\n\n` frame every `heartbeatMs` (default 15000 — the cadence of
367
+ * every task/run/trace/workflow/fleet SSE writer in @sema-agent/server: `routes/tasks.ts:67` & `:173`,
368
+ * `routes/runs.ts:1006`, `routes/workflows.ts:496`, `routes/fleet.ts:223`, and the `lastBeat > 15_000` tails in
369
+ * `routes/trace-usage.ts:294` / `sse-log.ts:92`, all 15s). ⚠️ Not universal: `GET /v1/sessions/:id/events` beats
370
+ * at `sessionEventsHeartbeatMs ?? 25_000` and writes BARE `: hb` comment lines instead — that one leg is the
371
+ * exception to "the server never uses `:`-comments"; on the frame legs a comment is deliberately avoided because
372
+ * a per-frame-parsing BFF drops comment lines, leaving a silent gap downstream.
373
+ *
374
+ * `signal` abort closes the stream and calls the source generator's `return()` so it can release whatever it's
375
+ * holding (e.g. `parseSse`'s open connection) — mirrors `tasks.stream`'s disconnect-cancels contract, just on
376
+ * the write side. */
314
377
  export function toSseResponse(gen, opts) {
315
378
  const heartbeatMs = opts?.heartbeatMs ?? 15_000;
316
379
  const encoder = new TextEncoder();
@@ -352,8 +415,18 @@ export function toSseResponse(gen, opts) {
352
415
  for await (const ev of gen) {
353
416
  if (closed)
354
417
  break;
355
- const idLine = ev.id !== undefined ? `id: ${ev.id}\n` : "";
356
- controller.enqueue(encoder.encode(`${idLine}data: ${JSON.stringify(ev)}\n\n`));
418
+ // 🔴 [2400] X-22:`id` 是 SDK 贴在 StampedAgentEvent 上的**传输层游标**(parseSse 的
419
+ // `ev.id = frame.id`),不是 wire 上事件体的字段 —— 写成 `id:` 行之后必须从序列化对象里剥离,
420
+ // 否则下游解出的事件多一个 wire 上不存在的键(还会与它自己的 `eventId` 撞脸)。
421
+ const { id, ...payload } = ev;
422
+ const idLine = id !== undefined ? `id: ${id}\n` : "";
423
+ // 🔴 [2400] X-22:补 `event:` 行。server 的每个 SSE 写点都写命名帧(`routes/tasks.ts:677` /
424
+ // `routes/workflows.ts:512` / `sse-log.ts:56`,顺序 id → event → data),而这里此前只写 `data:` ⇒
425
+ // 一个按 `event:` 名分派的下游(浏览器 `addEventListener("tool_end", …)`)过一遍中继就再也收不到
426
+ // 命名帧。判别位在载荷里也有(`type`),但那不是「保真转发」——中继不该让下游少一条分派路。
427
+ const name = typeof payload.type === "string" ? payload.type : undefined;
428
+ const eventLine = name !== undefined ? `event: ${name}\n` : "";
429
+ controller.enqueue(encoder.encode(`${idLine}${eventLine}data: ${JSON.stringify(payload)}\n\n`));
357
430
  }
358
431
  }
359
432
  finally {
package/dist/sse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"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"}