akribes 0.21.17

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 (100) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +160 -0
  4. package/dist/client.d.ts +240 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +272 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/errors.d.ts +196 -0
  9. package/dist/errors.d.ts.map +1 -0
  10. package/dist/errors.js +274 -0
  11. package/dist/errors.js.map +1 -0
  12. package/dist/execution/index.d.ts +3 -0
  13. package/dist/execution/index.d.ts.map +1 -0
  14. package/dist/execution/index.js +3 -0
  15. package/dist/execution/index.js.map +1 -0
  16. package/dist/execution/replay.d.ts +37 -0
  17. package/dist/execution/replay.d.ts.map +1 -0
  18. package/dist/execution/replay.js +59 -0
  19. package/dist/execution/replay.js.map +1 -0
  20. package/dist/execution/steps.d.ts +327 -0
  21. package/dist/execution/steps.d.ts.map +1 -0
  22. package/dist/execution/steps.js +1068 -0
  23. package/dist/execution/steps.js.map +1 -0
  24. package/dist/http.d.ts +53 -0
  25. package/dist/http.d.ts.map +1 -0
  26. package/dist/http.js +141 -0
  27. package/dist/http.js.map +1 -0
  28. package/dist/index.d.ts +36 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +38 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/runStream.d.ts +176 -0
  33. package/dist/runStream.d.ts.map +1 -0
  34. package/dist/runStream.js +408 -0
  35. package/dist/runStream.js.map +1 -0
  36. package/dist/sse.d.ts +46 -0
  37. package/dist/sse.d.ts.map +1 -0
  38. package/dist/sse.js +218 -0
  39. package/dist/sse.js.map +1 -0
  40. package/dist/sub/bench.d.ts +182 -0
  41. package/dist/sub/bench.d.ts.map +1 -0
  42. package/dist/sub/bench.js +420 -0
  43. package/dist/sub/bench.js.map +1 -0
  44. package/dist/sub/channels.d.ts +22 -0
  45. package/dist/sub/channels.d.ts.map +1 -0
  46. package/dist/sub/channels.js +32 -0
  47. package/dist/sub/channels.js.map +1 -0
  48. package/dist/sub/clients.d.ts +79 -0
  49. package/dist/sub/clients.d.ts.map +1 -0
  50. package/dist/sub/clients.js +190 -0
  51. package/dist/sub/clients.js.map +1 -0
  52. package/dist/sub/documents.d.ts +113 -0
  53. package/dist/sub/documents.d.ts.map +1 -0
  54. package/dist/sub/documents.js +329 -0
  55. package/dist/sub/documents.js.map +1 -0
  56. package/dist/sub/evals.d.ts +71 -0
  57. package/dist/sub/evals.d.ts.map +1 -0
  58. package/dist/sub/evals.js +86 -0
  59. package/dist/sub/evals.js.map +1 -0
  60. package/dist/sub/events.d.ts +65 -0
  61. package/dist/sub/events.d.ts.map +1 -0
  62. package/dist/sub/events.js +154 -0
  63. package/dist/sub/events.js.map +1 -0
  64. package/dist/sub/executions.d.ts +255 -0
  65. package/dist/sub/executions.d.ts.map +1 -0
  66. package/dist/sub/executions.js +322 -0
  67. package/dist/sub/executions.js.map +1 -0
  68. package/dist/sub/mcp.d.ts +51 -0
  69. package/dist/sub/mcp.d.ts.map +1 -0
  70. package/dist/sub/mcp.js +42 -0
  71. package/dist/sub/mcp.js.map +1 -0
  72. package/dist/sub/projects.d.ts +73 -0
  73. package/dist/sub/projects.d.ts.map +1 -0
  74. package/dist/sub/projects.js +101 -0
  75. package/dist/sub/projects.js.map +1 -0
  76. package/dist/sub/scripts.d.ts +58 -0
  77. package/dist/sub/scripts.d.ts.map +1 -0
  78. package/dist/sub/scripts.js +82 -0
  79. package/dist/sub/scripts.js.map +1 -0
  80. package/dist/sub/tokens.d.ts +126 -0
  81. package/dist/sub/tokens.d.ts.map +1 -0
  82. package/dist/sub/tokens.js +105 -0
  83. package/dist/sub/tokens.js.map +1 -0
  84. package/dist/sub/versions.d.ts +29 -0
  85. package/dist/sub/versions.d.ts.map +1 -0
  86. package/dist/sub/versions.js +52 -0
  87. package/dist/sub/versions.js.map +1 -0
  88. package/dist/tokenSafety.d.ts +15 -0
  89. package/dist/tokenSafety.d.ts.map +1 -0
  90. package/dist/tokenSafety.js +24 -0
  91. package/dist/tokenSafety.js.map +1 -0
  92. package/dist/types.d.ts +1147 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +132 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/workflowEvents.d.ts +297 -0
  97. package/dist/workflowEvents.d.ts.map +1 -0
  98. package/dist/workflowEvents.js +612 -0
  99. package/dist/workflowEvents.js.map +1 -0
  100. package/package.json +57 -0
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Lifecycle handle for a running workflow.
3
+ *
4
+ * Layer 3 on top of the raw {@link EngineEvent} stream. A `RunStream` is
5
+ * async-iterable AND exposes:
6
+ *
7
+ * - `.executionId` — resolves when the run POST returns.
8
+ * - `.output` — resolves with the final `WorkflowEnd.output`, or rejects
9
+ * on `Error`.
10
+ * - `.on.<cat>()` — category-based callback registration (sugar over
11
+ * iteration); each returns an unsubscribe function.
12
+ * - `.cancel()` — stop iterating and tear down the underlying SSE.
13
+ *
14
+ * Internally the handle subscribes to `onScriptExecution` BEFORE calling
15
+ * `run()` so no events are missed.
16
+ *
17
+ * Concurrent iteration is supported: every `for await` creates its own cursor
18
+ * into an append-only event log, so multiple consumers observe the same
19
+ * sequence independently.
20
+ */
21
+ import { toWorkflowEvent } from './workflowEvents';
22
+ function deferred() {
23
+ let resolve;
24
+ let reject;
25
+ const promise = new Promise((res, rej) => { resolve = res; reject = rej; });
26
+ return { promise, resolve, reject };
27
+ }
28
+ class RunStreamImpl {
29
+ executionId;
30
+ output;
31
+ on;
32
+ execIdDef = deferred();
33
+ outputDef = deferred();
34
+ unsubscribe = null;
35
+ /** Resolved once the run POST returns. Until then, events that carry
36
+ * an executionId can't be matched, so we hold them here and replay
37
+ * after the id is known. */
38
+ knownExecutionId = null;
39
+ pending = [];
40
+ /** Append-only log of every event delivered. Each iterator walks this via
41
+ * its own cursor, so concurrent iteration is safe. */
42
+ log = [];
43
+ /** Live iterator cursors — notified when a new event is appended. */
44
+ iterators = new Set();
45
+ /** Set after terminal event (`end`/`error`) or `cancel()`. */
46
+ finished = false;
47
+ // Callback registries (keyed by identity so the returned unsubscribe works).
48
+ anyCbs = new Set();
49
+ outputCbs = new Set();
50
+ taskEndCbs = new Set();
51
+ suspendCbs = new Set();
52
+ errorCbs = new Set();
53
+ runtimeCbs = new Set();
54
+ /**
55
+ * Per-taskName running snapshots of in-flight `runtime` block invocations.
56
+ * Mutated on each `kind: 'runtimeStep'` workflow event before invoking
57
+ * `.on.runtime` callbacks, so the callback receives the cumulative state
58
+ * (stdout/stderr include all chunks seen so far) rather than the delta
59
+ * from a single chunk event. Entries are kept after the terminal
60
+ * End/Error so a late `.on.runtime` subscriber that registers between
61
+ * the terminal event and the workflow end still observes the final
62
+ * state — but since callbacks only fire on subsequent transitions,
63
+ * "late" really means "in the next runtime call".
64
+ */
65
+ runtimeAccumulators = new Map();
66
+ constructor(scriptName, opts, events, starter) {
67
+ this.executionId = this.execIdDef.promise;
68
+ this.output = this.outputDef.promise;
69
+ this.on = this.buildCallbacks();
70
+ // Swallow rejections on the promises in case no one awaits them — prevents
71
+ // an unhandled-rejection crash when the caller only iterates.
72
+ this.output.catch(() => { });
73
+ this.executionId.catch(() => { });
74
+ // Step 1: subscribe BEFORE issuing the run POST so we don't miss early events.
75
+ this.unsubscribe = events.onScriptExecution(scriptName, (raw, eid) => this.routeRaw(raw, eid));
76
+ // Step 2: kick off the run. If it fails, reject executionId + output and
77
+ // tear down iteration.
78
+ starter(scriptName, opts).then((res) => {
79
+ this.knownExecutionId = res.execution_id;
80
+ this.execIdDef.resolve(res.execution_id);
81
+ // Drain pre-resolution buffer: deliver only events that match our
82
+ // execution_id (or have no execution_id at all, e.g. legacy emitters).
83
+ const buffered = this.pending;
84
+ this.pending = [];
85
+ for (const { raw, eid } of buffered) {
86
+ if (eid && eid !== res.execution_id)
87
+ continue;
88
+ this.handleRaw(raw);
89
+ }
90
+ }, (err) => {
91
+ this.execIdDef.reject(err);
92
+ this.outputDef.reject(err);
93
+ this.pending = [];
94
+ this.finish();
95
+ });
96
+ }
97
+ /** Filter events by execution_id (when known) before forwarding to the
98
+ * reducer + callbacks. Buffers events that arrive before the run POST
99
+ * resolves — without this, a concurrent run of the same script started
100
+ * by another caller could deliver its WorkflowEnd into our handle and
101
+ * resolve `.output` with the wrong value. */
102
+ routeRaw(raw, eid) {
103
+ if (this.finished)
104
+ return;
105
+ if (this.knownExecutionId == null) {
106
+ this.pending.push({ raw, eid });
107
+ return;
108
+ }
109
+ if (eid && eid !== this.knownExecutionId)
110
+ return;
111
+ this.handleRaw(raw);
112
+ }
113
+ buildCallbacks() {
114
+ return {
115
+ output: (cb) => { this.outputCbs.add(cb); return () => { this.outputCbs.delete(cb); }; },
116
+ taskEnd: (cb) => { this.taskEndCbs.add(cb); return () => { this.taskEndCbs.delete(cb); }; },
117
+ suspend: (cb) => { this.suspendCbs.add(cb); return () => { this.suspendCbs.delete(cb); }; },
118
+ error: (cb) => { this.errorCbs.add(cb); return () => { this.errorCbs.delete(cb); }; },
119
+ runtime: (cb) => { this.runtimeCbs.add(cb); return () => { this.runtimeCbs.delete(cb); }; },
120
+ any: (cb) => { this.anyCbs.add(cb); return () => { this.anyCbs.delete(cb); }; },
121
+ };
122
+ }
123
+ /**
124
+ * Fold a per-event runtime-step delta into the per-taskName accumulator
125
+ * and return the resulting cumulative snapshot. Called from
126
+ * `dispatchCallbacks` before invoking `.on.runtime` subscribers.
127
+ *
128
+ * Stickiness rules (the delta doesn't carry runtimeName/language on
129
+ * non-Start events, so we preserve them from the prior snapshot):
130
+ * * `runtimeName`/`language` are taken from the delta when non-empty
131
+ * (i.e. only on RuntimeStart), otherwise from the prior snapshot.
132
+ * * `stdout`/`stderr` append the delta to the prior cumulative text.
133
+ * * `status` always tracks the delta (each transition reports its
134
+ * own status).
135
+ * * `exitCode`/`durationMs` are non-null only on RuntimeEnd; we copy
136
+ * them through verbatim — they overwrite any prior nulls and are
137
+ * not "stuck" to past values because End is terminal.
138
+ * * `errorKind`/`errorMessage` are non-null only on RuntimeError;
139
+ * same overwrite semantics.
140
+ */
141
+ foldRuntimeDelta(delta) {
142
+ const prior = this.runtimeAccumulators.get(delta.taskName);
143
+ const next = {
144
+ taskName: delta.taskName,
145
+ runtimeName: delta.runtimeName !== '' ? delta.runtimeName : (prior?.runtimeName ?? ''),
146
+ language: delta.language !== '' ? delta.language : (prior?.language ?? ''),
147
+ status: delta.status,
148
+ stdout: (prior?.stdout ?? '') + delta.stdout,
149
+ stderr: (prior?.stderr ?? '') + delta.stderr,
150
+ exitCode: delta.exitCode,
151
+ durationMs: delta.durationMs,
152
+ errorKind: delta.errorKind,
153
+ errorMessage: delta.errorMessage,
154
+ };
155
+ this.runtimeAccumulators.set(delta.taskName, next);
156
+ return next;
157
+ }
158
+ handleRaw(raw) {
159
+ if (this.finished)
160
+ return;
161
+ const evt = toWorkflowEvent(raw);
162
+ this.dispatchCallbacks(evt);
163
+ this.pushEvent(evt);
164
+ // Terminal detection.
165
+ if (evt.kind === 'end') {
166
+ // NB: `evt.durationMs` comes from `WorkflowEnd.duration_secs` — on some
167
+ // transports (notably streamed events with no aggregate) it may be 0.
168
+ this.outputDef.resolve(evt.output);
169
+ this.finish();
170
+ }
171
+ else if (evt.kind === 'error') {
172
+ const err = new Error(evt.message);
173
+ err.errorKind = evt.errorKind;
174
+ this.outputDef.reject(err);
175
+ this.finish();
176
+ }
177
+ }
178
+ dispatchCallbacks(evt) {
179
+ for (const cb of this.anyCbs) {
180
+ try {
181
+ cb(evt);
182
+ }
183
+ catch { /* swallow listener errors */ }
184
+ }
185
+ switch (evt.kind) {
186
+ case 'agentChunk':
187
+ for (const cb of this.outputCbs) {
188
+ try {
189
+ cb(evt.chunk, evt);
190
+ }
191
+ catch { /* swallow */ }
192
+ }
193
+ break;
194
+ case 'taskEnd':
195
+ for (const cb of this.taskEndCbs) {
196
+ try {
197
+ cb(evt);
198
+ }
199
+ catch { /* swallow */ }
200
+ }
201
+ break;
202
+ case 'checkpoint':
203
+ case 'toolApproval':
204
+ case 'breakpoint':
205
+ for (const cb of this.suspendCbs) {
206
+ try {
207
+ cb(evt);
208
+ }
209
+ catch { /* swallow */ }
210
+ }
211
+ break;
212
+ case 'error':
213
+ for (const cb of this.errorCbs) {
214
+ try {
215
+ cb(evt);
216
+ }
217
+ catch { /* swallow */ }
218
+ }
219
+ break;
220
+ case 'runtimeStep': {
221
+ // Fold the per-event delta into the per-task accumulator first so the
222
+ // callback receives the cumulative snapshot rather than the
223
+ // single-event delta. We always fold (even when no callbacks are
224
+ // registered) so a late `.on.runtime` subscriber that registers on
225
+ // the next runtime call doesn't reset its accumulator's prior
226
+ // state mid-stream.
227
+ const snapshot = this.foldRuntimeDelta(evt);
228
+ for (const cb of this.runtimeCbs) {
229
+ try {
230
+ cb(snapshot);
231
+ }
232
+ catch { /* swallow */ }
233
+ }
234
+ break;
235
+ }
236
+ default:
237
+ break;
238
+ }
239
+ }
240
+ pushEvent(evt) {
241
+ this.log.push(evt);
242
+ // Wake any iterators that have caught up and are parked.
243
+ for (const it of this.iterators) {
244
+ if (it.waiting && it.cursor < this.log.length) {
245
+ const w = it.waiting;
246
+ it.waiting = null;
247
+ const value = this.log[it.cursor++];
248
+ w.resolve({ value, done: false });
249
+ }
250
+ }
251
+ }
252
+ /** Mark the stream finished and tear down the SSE subscription. Any
253
+ * iterators parked past the end of the log get `{ done: true }`. */
254
+ finish() {
255
+ if (this.finished)
256
+ return;
257
+ this.finished = true;
258
+ if (this.unsubscribe) {
259
+ try {
260
+ this.unsubscribe();
261
+ }
262
+ catch { /* ignore */ }
263
+ this.unsubscribe = null;
264
+ }
265
+ for (const it of this.iterators) {
266
+ if (it.waiting) {
267
+ const w = it.waiting;
268
+ it.waiting = null;
269
+ w.resolve({ value: undefined, done: true });
270
+ }
271
+ }
272
+ }
273
+ cancel() {
274
+ if (this.finished)
275
+ return;
276
+ // Reject output so awaiters don't hang. Leave executionId alone — if the
277
+ // POST already resolved, the id is still valid for the caller (e.g. to
278
+ // issue a server-side cancel). If it hasn't, the pending promise gets
279
+ // rejected only when the POST itself fails (normal flow).
280
+ this.outputDef.reject(new Error('RunStream cancelled'));
281
+ this.finish();
282
+ }
283
+ errorsOnly() {
284
+ return this.filter((e) => e.kind === 'error');
285
+ }
286
+ agentChunksOnly() {
287
+ return this.filter((e) => e.kind === 'agentChunk');
288
+ }
289
+ /** Build an async-iterable that yields only events matching `pred`. Each
290
+ * call gets its own cursor into the shared log, so filtered iteration
291
+ * composes safely with the main `for await (const e of rs)` loop. */
292
+ filter(pred) {
293
+ const self = this;
294
+ return {
295
+ [Symbol.asyncIterator]() {
296
+ const inner = self[Symbol.asyncIterator]();
297
+ return {
298
+ async next() {
299
+ while (true) {
300
+ const r = await inner.next();
301
+ if (r.done)
302
+ return { value: undefined, done: true };
303
+ if (pred(r.value))
304
+ return { value: r.value, done: false };
305
+ }
306
+ },
307
+ return() {
308
+ return inner.return
309
+ ? inner.return().then(() => ({ value: undefined, done: true }))
310
+ : Promise.resolve({ value: undefined, done: true });
311
+ },
312
+ };
313
+ },
314
+ };
315
+ }
316
+ async summary() {
317
+ // Drain to terminal, then aggregate. Re-uses the shared log via a fresh
318
+ // iterator cursor so callers can also `for await` the same stream.
319
+ const output = await this.output;
320
+ const executionId = await this.executionId;
321
+ let totalMs = 0;
322
+ const perTaskMs = {};
323
+ const tasksByName = {};
324
+ const byModelTokens = {};
325
+ let usageObserved = false;
326
+ let mockObserved = false;
327
+ for (const evt of this.log) {
328
+ switch (evt.kind) {
329
+ case 'end':
330
+ totalMs = evt.durationMs;
331
+ break;
332
+ case 'taskEnd': {
333
+ perTaskMs[evt.task] = (perTaskMs[evt.task] ?? 0) + evt.durationMs;
334
+ // Latest variant wins — `unable` overrides a prior success on retry.
335
+ tasksByName[evt.task] = evt.variant === 'success' ? 'passed' : 'failed';
336
+ if (evt.usage) {
337
+ usageObserved = true;
338
+ if (evt.usage.provider === 'mock')
339
+ mockObserved = true;
340
+ const tokens = evt.usage.inputTokens + evt.usage.outputTokens;
341
+ const model = evt.usage.model || 'unknown';
342
+ byModelTokens[model] = (byModelTokens[model] ?? 0) + tokens;
343
+ }
344
+ break;
345
+ }
346
+ default:
347
+ break;
348
+ }
349
+ }
350
+ const taskNames = Object.keys(tasksByName);
351
+ const passed = taskNames.filter((t) => tasksByName[t] === 'passed').length;
352
+ const failed = taskNames.length - passed;
353
+ // The SDK doesn't bundle a pricing table — we report null when we have no
354
+ // real usage signal (mock or no taskEnd usage block). When usage is real,
355
+ // `byModel` carries the total (input + output) token count per model so
356
+ // callers can compute their own USD cost; `totalUsd` stays 0 until the
357
+ // server-side pricing-aware variant lands (Phase 4).
358
+ const cost = (!usageObserved || mockObserved)
359
+ ? null
360
+ : { totalUsd: 0, byModel: byModelTokens };
361
+ return {
362
+ executionId,
363
+ output,
364
+ cost,
365
+ duration: { totalMs, perTaskMs },
366
+ tasks: { passed, failed, total: taskNames.length },
367
+ };
368
+ }
369
+ [Symbol.asyncIterator]() {
370
+ const it = { cursor: 0, waiting: null };
371
+ this.iterators.add(it);
372
+ const self = this;
373
+ return {
374
+ next: () => {
375
+ if (it.cursor < self.log.length) {
376
+ const value = self.log[it.cursor++];
377
+ return Promise.resolve({ value, done: false });
378
+ }
379
+ if (self.finished) {
380
+ self.iterators.delete(it);
381
+ return Promise.resolve({ value: undefined, done: true });
382
+ }
383
+ return new Promise((resolve, reject) => {
384
+ it.waiting = { resolve, reject };
385
+ });
386
+ },
387
+ return: () => {
388
+ // Detach this iterator only — do NOT cancel the whole stream, since
389
+ // other iterators / callback-consumers may still want events.
390
+ if (it.waiting) {
391
+ const w = it.waiting;
392
+ it.waiting = null;
393
+ w.resolve({ value: undefined, done: true });
394
+ }
395
+ self.iterators.delete(it);
396
+ return Promise.resolve({ value: undefined, done: true });
397
+ },
398
+ };
399
+ }
400
+ }
401
+ /**
402
+ * Construct a {@link RunStream}. Exported so tests and advanced callers can
403
+ * build one without going through `ExecutionsClient`.
404
+ */
405
+ export function createRunStream(scriptName, opts, events, starter) {
406
+ return new RunStreamImpl(scriptName, opts, events, starter);
407
+ }
408
+ //# sourceMappingURL=runStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runStream.js","sourceRoot":"","sources":["../src/runStream.ts"],"names":[],"mappings":"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"}
package/dist/sse.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ export type SseMessage = {
2
+ event: string;
3
+ data: string;
4
+ /** SSE `id:` field (server's monotonic per-execution `seq`). Tracked by
5
+ * callers so a reconnect can send `Last-Event-ID: <id>` per the SSE spec
6
+ * and avoid silently dropping events emitted during the gap. */
7
+ id?: string;
8
+ };
9
+ /** Parse a complete SSE message block (lines between blank-line delimiters). */
10
+ export declare function parseSseMessage(block: string): SseMessage | null;
11
+ export type EventStreamOptions = {
12
+ /** Either a static URL, or a function that returns a fresh URL on each
13
+ * (re)connect — useful when the URL carries a token that may have been
14
+ * refreshed since the last connection. */
15
+ url: string | (() => Promise<string> | string);
16
+ headers?: Record<string, string>;
17
+ signal?: AbortSignal;
18
+ onMessage: (msg: SseMessage) => void;
19
+ onError?: (error: Error) => void;
20
+ /** Fires immediately after the SSE response is open — i.e. EventSource
21
+ * emits `onopen`, or the fetch-fallback receives a 2xx response with a
22
+ * body. May fire on each successful reconnect. Use this from callers
23
+ * that need to know the server-side broadcast subscriber is attached
24
+ * before issuing a dependent POST (subscribe-before-POST race-avoidance). */
25
+ onOpen?: () => void;
26
+ reconnect?: boolean;
27
+ /** Initial reconnect delay in ms. Backoff is exponential with jitter,
28
+ * capped at `reconnectMaxDelayMs`. Mirrors the heartbeat backoff curve
29
+ * so SDK behaviour is consistent across Rust/TS/Python (#1182). */
30
+ reconnectDelayMs?: number;
31
+ /** Maximum reconnect delay in ms (default 30000). */
32
+ reconnectMaxDelayMs?: number;
33
+ };
34
+ /**
35
+ * Open an SSE connection with proper message parsing and auto-reconnection.
36
+ * Uses EventSource when available, fetch-based ReadableStream otherwise.
37
+ *
38
+ * On reconnect the connector sends `Last-Event-ID: <lastSeenId>` per the
39
+ * SSE spec — the server-side replay layer can use it to resume from the
40
+ * gap. EventSource handles this natively; the fetch fallback wires it
41
+ * through the request headers.
42
+ *
43
+ * Returns a dispose function.
44
+ */
45
+ export declare function connectSse(options: EventStreamOptions): () => void;
46
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;qEAEiE;IACjE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAwBhE;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;8CAE0C;IAC1C,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;;iFAI6E;IAC7E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;wEAEoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAwJlE"}