@yolk-sdk/agent 0.1.0-canary.37 → 0.1.0-canary.38

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 (61) hide show
  1. package/README.md +13 -6
  2. package/dist/client/attachments.d.mts.map +1 -1
  3. package/dist/client/attachments.mjs +42 -18
  4. package/dist/client/attachments.mjs.map +1 -1
  5. package/dist/client/transport.d.mts +1 -1
  6. package/dist/client/transport.d.mts.map +1 -1
  7. package/dist/client/transport.mjs +36 -26
  8. package/dist/client/transport.mjs.map +1 -1
  9. package/dist/compaction/transformer.d.mts +1 -1
  10. package/dist/loop/run.d.mts +1 -1
  11. package/dist/loop/run.mjs +1 -1
  12. package/dist/loop/services/context-transformer.d.mts +1 -1
  13. package/dist/loop/services/llm-provider.d.mts +1 -1
  14. package/dist/loop/services/tool-executor.d.mts +1 -1
  15. package/dist/loop/testing/faux-provider.mjs +1 -1
  16. package/dist/loop/testing/test-tool-executor.mjs +1 -1
  17. package/dist/providers/anthropic/claude-provider.mjs +5 -8
  18. package/dist/providers/anthropic/claude-provider.mjs.map +1 -1
  19. package/dist/providers/anthropic/claude.d.mts.map +1 -1
  20. package/dist/providers/anthropic/claude.mjs +5 -6
  21. package/dist/providers/anthropic/claude.mjs.map +1 -1
  22. package/dist/providers/openai/codex-provider.d.mts +1 -1
  23. package/dist/providers/openai/codex-provider.mjs +1 -1
  24. package/dist/providers/openai/provider.mjs +1 -1
  25. package/dist/providers/openai/realtime/client-codec.mjs +1 -1
  26. package/dist/providers/transcript.d.mts +1 -1
  27. package/dist/providers/transcript.mjs +1 -1
  28. package/dist/react/chat-items.d.mts +1 -1
  29. package/dist/react/chat-items.mjs +1 -1
  30. package/dist/react/chat-messages.mjs +1 -1
  31. package/dist/react/use-agent-chat.mjs +1 -1
  32. package/dist/runtime/run-runtime.d.mts +1 -1
  33. package/dist/runtime/session-event-store.d.mts +1 -1
  34. package/dist/runtime/session-event-store.mjs +1 -1
  35. package/dist/tools/question.d.mts +1 -1
  36. package/dist/tools/question.mjs +1 -1
  37. package/dist/tools/registry.d.mts +1 -1
  38. package/dist/tools/registry.mjs +1 -1
  39. package/dist/tools/task.d.mts +1 -1
  40. package/dist/tools/task.mjs +1 -1
  41. package/dist/voice/browser/webrtc.mjs +27 -22
  42. package/dist/voice/browser/webrtc.mjs.map +1 -1
  43. package/dist/voice/controller.d.mts +1 -1
  44. package/dist/voice/projection.mjs +1 -1
  45. package/dist/voice/react.d.mts +1 -1
  46. package/dist/voice/react.mjs +1 -1
  47. package/dist/voice/speech.d.mts +1 -1
  48. package/dist/voice/speech.mjs +1 -1
  49. package/dist/voice/tool-bridge.mjs +1 -1
  50. package/dist/voice/tool-server.d.mts +1 -1
  51. package/dist/voice/tool-server.mjs +1 -1
  52. package/dist/voice/websocket.d.mts.map +1 -1
  53. package/dist/voice/websocket.mjs +20 -17
  54. package/dist/voice/websocket.mjs.map +1 -1
  55. package/package.json +1 -1
  56. package/src/client/attachments.ts +68 -25
  57. package/src/client/transport.ts +54 -28
  58. package/src/providers/anthropic/claude-provider.ts +8 -8
  59. package/src/providers/anthropic/claude.ts +17 -15
  60. package/src/voice/browser/webrtc.ts +29 -26
  61. package/src/voice/websocket.ts +25 -19
package/README.md CHANGED
@@ -282,21 +282,28 @@ continuation chunks by `x-workflow-run-id` and `x-workflow-stream-tail-index` he
282
282
  fail with `AgentTransportError` if no terminal event is reached before the continuation limit.
283
283
  Empty non-terminal continuation chunks are polling gaps: the client waits briefly, retries from the
284
284
  same `startIndex`, and respects the request `signal` while waiting.
285
+ Outbound `startIndex` values must be non-negative safe integers; invalid values fail before the
286
+ HTTP request is sent.
285
287
  For HITL resume responses, `x-workflow-stream-tail-index` means the stream tail before the returned
286
288
  body. The returned body starts at `tail + 1`; the next continuation starts after all returned
287
289
  events. `continuationLimit: 0` disables follow-up chunks, so any non-terminal response fails
288
290
  immediately.
289
291
 
290
292
  ```ts
293
+ import { Stream } from 'effect'
291
294
  import { streamAgentEventStreamUntilTerminal } from '@yolk-sdk/agent/client'
292
295
  import { UserMessage } from '@yolk-sdk/agent/protocol'
293
296
 
294
- for await (const event of streamAgentEventStreamUntilTerminal({
295
- endpoint: '/api/agent/workflow',
296
- sessionId: 'session_1',
297
- messages: [UserMessage.make({ content: 'Hello' })],
298
- runEndpoint: runId => `/api/agent/workflow/${encodeURIComponent(runId)}`
299
- })) {
297
+ const events = Stream.toAsyncIterable(
298
+ streamAgentEventStreamUntilTerminal({
299
+ endpoint: '/api/agent/workflow',
300
+ sessionId: 'session_1',
301
+ messages: [UserMessage.make({ content: 'Hello' })],
302
+ runEndpoint: runId => `/api/agent/workflow/${encodeURIComponent(runId)}`
303
+ })
304
+ )
305
+
306
+ for await (const event of events) {
300
307
  // Apply AgentEvent to app state.
301
308
  }
302
309
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.d.mts","names":[],"sources":["../../src/client/attachments.ts"],"mappings":";cAEa,YAAA,GAAgB,IAAA,EAAM,IAAA,KAAI,OAAA;AAAA,cAqB1B,wBAAA,GACX,IAAA,EAAM,IAAA,EACN,OAAA;EAAA,SACW,KAAA;AAAA,MACV,OAAA,oCAAA,YAAA"}
1
+ {"version":3,"file":"attachments.d.mts","names":[],"sources":["../../src/client/attachments.ts"],"mappings":";cAwDa,YAAA,GAAgB,IAAA,EAAM,IAAA,KAAI,OAAA;AAAA,cA0B1B,wBAAA,GACX,IAAA,EAAM,IAAA,EACN,OAAA;EAAA,SACW,KAAA;AAAA,MACV,OAAA,oCAAA,YAAA"}
@@ -1,35 +1,59 @@
1
+ import { Effect, Result } from "effect";
1
2
  import { documentPartFromText, inferTextDocumentMimeType } from "@yolk-sdk/agent/protocol";
2
3
  //#region src/client/attachments.ts
3
- const textFromBlob = (blob) => {
4
- if (typeof blob.text === "function") return blob.text();
5
- if (typeof FileReader === "undefined") return Promise.reject(/* @__PURE__ */ new Error("Could not read text"));
6
- return new Promise((resolve, reject) => {
7
- const reader = new FileReader();
8
- reader.addEventListener("load", () => {
9
- if (typeof reader.result === "string") {
10
- resolve(reader.result);
11
- return;
12
- }
13
- reject(/* @__PURE__ */ new Error("Could not read text"));
14
- });
15
- reader.addEventListener("error", () => reject(/* @__PURE__ */ new Error("Could not read text")));
16
- reader.addEventListener("abort", () => reject(/* @__PURE__ */ new Error("Could not read text")));
17
- reader.readAsText(blob);
4
+ const couldNotReadTextError = () => /* @__PURE__ */ new Error("Could not read text");
5
+ const textFromFileReaderEffect = (blob) => Effect.callback((resume) => {
6
+ if (typeof FileReader === "undefined") {
7
+ resume(Effect.fail(couldNotReadTextError()));
8
+ return Effect.void;
9
+ }
10
+ const reader = new FileReader();
11
+ const removeListeners = () => {
12
+ reader.removeEventListener("load", handleLoad);
13
+ reader.removeEventListener("error", handleError);
14
+ reader.removeEventListener("abort", handleError);
15
+ };
16
+ const fail = () => {
17
+ removeListeners();
18
+ resume(Effect.fail(couldNotReadTextError()));
19
+ };
20
+ const handleLoad = () => {
21
+ removeListeners();
22
+ if (typeof reader.result === "string") {
23
+ resume(Effect.succeed(reader.result));
24
+ return;
25
+ }
26
+ resume(Effect.fail(couldNotReadTextError()));
27
+ };
28
+ const handleError = () => fail();
29
+ reader.addEventListener("load", handleLoad);
30
+ reader.addEventListener("error", handleError);
31
+ reader.addEventListener("abort", handleError);
32
+ if (Result.isFailure(Result.try(() => reader.readAsText(blob)))) fail();
33
+ return Effect.sync(removeListeners);
34
+ });
35
+ const textFromBlobEffect = (blob) => {
36
+ if (typeof blob.text === "function") return Effect.tryPromise({
37
+ try: () => blob.text(),
38
+ catch: couldNotReadTextError
18
39
  });
40
+ return textFromFileReaderEffect(blob);
19
41
  };
20
- const documentPartFromTextFile = async (file, options) => {
42
+ const textFromBlob = (blob) => Effect.runPromise(textFromBlobEffect(blob));
43
+ const documentPartFromTextFileEffect = (file, options) => Effect.gen(function* () {
21
44
  const mimeType = inferTextDocumentMimeType({
22
45
  filename: file.name,
23
46
  mimeType: file.type
24
47
  });
25
48
  if (mimeType === void 0) return void 0;
26
49
  return documentPartFromText({
27
- text: await textFromBlob(file),
50
+ text: yield* textFromBlobEffect(file),
28
51
  filename: file.name,
29
52
  mimeType,
30
53
  title: options?.title
31
54
  });
32
- };
55
+ });
56
+ const documentPartFromTextFile = (file, options) => Effect.runPromise(documentPartFromTextFileEffect(file, options));
33
57
  //#endregion
34
58
  export { documentPartFromTextFile, textFromBlob };
35
59
 
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.mjs","names":[],"sources":["../../src/client/attachments.ts"],"sourcesContent":["import { documentPartFromText, inferTextDocumentMimeType } from '@yolk-sdk/agent/protocol'\n\nexport const textFromBlob = (blob: Blob) => {\n if (typeof blob.text === 'function') return blob.text()\n if (typeof FileReader === 'undefined') return Promise.reject(new Error('Could not read text'))\n\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader()\n\n reader.addEventListener('load', () => {\n if (typeof reader.result === 'string') {\n resolve(reader.result)\n return\n }\n\n reject(new Error('Could not read text'))\n })\n reader.addEventListener('error', () => reject(new Error('Could not read text')))\n reader.addEventListener('abort', () => reject(new Error('Could not read text')))\n reader.readAsText(blob)\n })\n}\n\nexport const documentPartFromTextFile = async (\n file: File,\n options?: {\n readonly title?: string\n }\n) => {\n const mimeType = inferTextDocumentMimeType({\n filename: file.name,\n mimeType: file.type\n })\n\n if (mimeType === undefined) return undefined\n\n const text = await textFromBlob(file)\n\n return documentPartFromText({\n text,\n filename: file.name,\n mimeType,\n title: options?.title\n })\n}\n"],"mappings":";;AAEA,MAAa,gBAAgB,SAAe;CAC1C,IAAI,OAAO,KAAK,SAAS,YAAY,OAAO,KAAK,KAAK;CACtD,IAAI,OAAO,eAAe,aAAa,OAAO,QAAQ,uBAAO,IAAI,MAAM,qBAAqB,CAAC;CAE7F,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,WAAW;EAE9B,OAAO,iBAAiB,cAAc;GACpC,IAAI,OAAO,OAAO,WAAW,UAAU;IACrC,QAAQ,OAAO,MAAM;IACrB;GACF;GAEA,uBAAO,IAAI,MAAM,qBAAqB,CAAC;EACzC,CAAC;EACD,OAAO,iBAAiB,eAAe,uBAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;EAC/E,OAAO,iBAAiB,eAAe,uBAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;EAC/E,OAAO,WAAW,IAAI;CACxB,CAAC;AACH;AAEA,MAAa,2BAA2B,OACtC,MACA,YAGG;CACH,MAAM,WAAW,0BAA0B;EACzC,UAAU,KAAK;EACf,UAAU,KAAK;CACjB,CAAC;CAED,IAAI,aAAa,KAAA,GAAW,OAAO,KAAA;CAInC,OAAO,qBAAqB;EAC1B,MAAA,MAHiB,aAAa,IAAI;EAIlC,UAAU,KAAK;EACf;EACA,OAAO,SAAS;CAClB,CAAC;AACH"}
1
+ {"version":3,"file":"attachments.mjs","names":[],"sources":["../../src/client/attachments.ts"],"sourcesContent":["import { Effect, Result } from 'effect'\nimport { documentPartFromText, inferTextDocumentMimeType } from '@yolk-sdk/agent/protocol'\n\nconst couldNotReadTextError = () => new Error('Could not read text')\n\nconst textFromFileReaderEffect = (blob: Blob) =>\n Effect.callback<string, Error>(resume => {\n if (typeof FileReader === 'undefined') {\n resume(Effect.fail(couldNotReadTextError()))\n return Effect.void\n }\n\n const reader = new FileReader()\n const removeListeners = () => {\n reader.removeEventListener('load', handleLoad)\n reader.removeEventListener('error', handleError)\n reader.removeEventListener('abort', handleError)\n }\n const fail = () => {\n removeListeners()\n resume(Effect.fail(couldNotReadTextError()))\n }\n const handleLoad = () => {\n removeListeners()\n\n if (typeof reader.result === 'string') {\n resume(Effect.succeed(reader.result))\n return\n }\n\n resume(Effect.fail(couldNotReadTextError()))\n }\n const handleError = () => fail()\n\n reader.addEventListener('load', handleLoad)\n reader.addEventListener('error', handleError)\n reader.addEventListener('abort', handleError)\n\n if (Result.isFailure(Result.try(() => reader.readAsText(blob)))) {\n fail()\n }\n\n return Effect.sync(removeListeners)\n })\n\nconst textFromBlobEffect = (blob: Blob) => {\n if (typeof blob.text === 'function') {\n return Effect.tryPromise({\n try: () => blob.text(),\n catch: couldNotReadTextError\n })\n }\n\n return textFromFileReaderEffect(blob)\n}\n\nexport const textFromBlob = (blob: Blob) => Effect.runPromise(textFromBlobEffect(blob))\n\nconst documentPartFromTextFileEffect = (\n file: File,\n options?: {\n readonly title?: string\n }\n) =>\n Effect.gen(function* () {\n const mimeType = inferTextDocumentMimeType({\n filename: file.name,\n mimeType: file.type\n })\n\n if (mimeType === undefined) return undefined\n\n const text = yield* textFromBlobEffect(file)\n\n return documentPartFromText({\n text,\n filename: file.name,\n mimeType,\n title: options?.title\n })\n })\n\nexport const documentPartFromTextFile = (\n file: File,\n options?: {\n readonly title?: string\n }\n) => Effect.runPromise(documentPartFromTextFileEffect(file, options))\n"],"mappings":";;;AAGA,MAAM,8CAA8B,IAAI,MAAM,qBAAqB;AAEnE,MAAM,4BAA4B,SAChC,OAAO,UAAwB,WAAU;CACvC,IAAI,OAAO,eAAe,aAAa;EACrC,OAAO,OAAO,KAAK,sBAAsB,CAAC,CAAC;EAC3C,OAAO,OAAO;CAChB;CAEA,MAAM,SAAS,IAAI,WAAW;CAC9B,MAAM,wBAAwB;EAC5B,OAAO,oBAAoB,QAAQ,UAAU;EAC7C,OAAO,oBAAoB,SAAS,WAAW;EAC/C,OAAO,oBAAoB,SAAS,WAAW;CACjD;CACA,MAAM,aAAa;EACjB,gBAAgB;EAChB,OAAO,OAAO,KAAK,sBAAsB,CAAC,CAAC;CAC7C;CACA,MAAM,mBAAmB;EACvB,gBAAgB;EAEhB,IAAI,OAAO,OAAO,WAAW,UAAU;GACrC,OAAO,OAAO,QAAQ,OAAO,MAAM,CAAC;GACpC;EACF;EAEA,OAAO,OAAO,KAAK,sBAAsB,CAAC,CAAC;CAC7C;CACA,MAAM,oBAAoB,KAAK;CAE/B,OAAO,iBAAiB,QAAQ,UAAU;CAC1C,OAAO,iBAAiB,SAAS,WAAW;CAC5C,OAAO,iBAAiB,SAAS,WAAW;CAE5C,IAAI,OAAO,UAAU,OAAO,UAAU,OAAO,WAAW,IAAI,CAAC,CAAC,GAC5D,KAAK;CAGP,OAAO,OAAO,KAAK,eAAe;AACpC,CAAC;AAEH,MAAM,sBAAsB,SAAe;CACzC,IAAI,OAAO,KAAK,SAAS,YACvB,OAAO,OAAO,WAAW;EACvB,WAAW,KAAK,KAAK;EACrB,OAAO;CACT,CAAC;CAGH,OAAO,yBAAyB,IAAI;AACtC;AAEA,MAAa,gBAAgB,SAAe,OAAO,WAAW,mBAAmB,IAAI,CAAC;AAEtF,MAAM,kCACJ,MACA,YAIA,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,0BAA0B;EACzC,UAAU,KAAK;EACf,UAAU,KAAK;CACjB,CAAC;CAED,IAAI,aAAa,KAAA,GAAW,OAAO,KAAA;CAInC,OAAO,qBAAqB;EAC1B,MAAA,OAHkB,mBAAmB,IAAI;EAIzC,UAAU,KAAK;EACf;EACA,OAAO,SAAS;CAClB,CAAC;AACH,CAAC;AAEH,MAAa,4BACX,MACA,YAGG,OAAO,WAAW,+BAA+B,MAAM,OAAO,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { AgentTranscript } from "./state.mjs";
2
- import { AgentEvent, AgentReasoningEffort, HitlResponse, QuestionResponse, ToolApprovalResponse } from "@yolk-sdk/agent/protocol";
3
2
  import { Cause, Effect, Layer, Stream } from "effect";
3
+ import { AgentEvent, AgentReasoningEffort, HitlResponse, QuestionResponse, ToolApprovalResponse } from "@yolk-sdk/agent/protocol";
4
4
  import { HttpClient } from "effect/unstable/http";
5
5
  import * as Schema from "effect/Schema";
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.mts","names":[],"sources":["../../src/client/transport.ts"],"mappings":"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"}
1
+ {"version":3,"file":"transport.d.mts","names":[],"sources":["../../src/client/transport.ts"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
+ import { Cause, Channel, Effect, Exit, Pull, Queue, Ref, Result, Scope, Stream } from "effect";
1
2
  import { AgentEvent, AgentWebSocketServerMessage, QuestionResponseInput, ToolApprovalResponseInput, UserInput, isTerminalAgentEvent } from "@yolk-sdk/agent/protocol";
2
- import { Cause, Channel, Effect, Exit, Pull, Queue, Ref, Scope, Stream } from "effect";
3
3
  import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http";
4
4
  import * as Schema from "effect/Schema";
5
5
  //#region src/client/transport.ts
@@ -47,24 +47,26 @@ const agentRunEndpointWithStartIndex = (endpoint, startIndex) => {
47
47
  return serializeEndpoint(parsed);
48
48
  };
49
49
  const absoluteUrlPattern = /^[A-Za-z][A-Za-z\d+.-]*:/;
50
- const parseEndpoint = (endpoint) => {
51
- try {
52
- return {
53
- url: new URL(endpoint, relativeEndpointBase),
54
- absolute: absoluteUrlPattern.test(endpoint),
55
- leadingSlash: endpoint.startsWith("/")
56
- };
57
- } catch {
58
- return;
59
- }
60
- };
50
+ const invalidAgentRunEndpointError = (endpoint) => new AgentTransportError({
51
+ message: "Invalid agent run endpoint",
52
+ cause: endpoint
53
+ });
54
+ const parseEndpoint = (endpoint) => Result.try(() => ({
55
+ url: new URL(endpoint, relativeEndpointBase),
56
+ absolute: absoluteUrlPattern.test(endpoint),
57
+ leadingSlash: endpoint.startsWith("/")
58
+ })).pipe(Result.match({
59
+ onFailure: () => void 0,
60
+ onSuccess: (parsed) => parsed
61
+ }));
61
62
  const parseEndpointOrThrow = (endpoint) => {
62
63
  const parsed = parseEndpoint(endpoint);
63
64
  if (parsed !== void 0) return parsed;
64
- throw new AgentTransportError({
65
- message: "Invalid agent run endpoint",
66
- cause: endpoint
67
- });
65
+ throw invalidAgentRunEndpointError(endpoint);
66
+ };
67
+ const parseEndpointEffect = (endpoint) => {
68
+ const parsed = parseEndpoint(endpoint);
69
+ return parsed === void 0 ? Effect.fail(invalidAgentRunEndpointError(endpoint)) : Effect.succeed(parsed);
68
70
  };
69
71
  const serializeEndpoint = (endpoint) => {
70
72
  if (endpoint.absolute) return endpoint.url.toString();
@@ -111,6 +113,13 @@ const invalidAgentRunStartIndexError = (startIndex) => new AgentTransportError({
111
113
  cause: startIndex
112
114
  });
113
115
  const validateAgentRunStartIndexEffect = (startIndex) => startIndex === void 0 || Number.isSafeInteger(startIndex) && startIndex >= 0 ? Effect.void : Effect.fail(invalidAgentRunStartIndexError(startIndex));
116
+ const agentRunEndpointWithStartIndexEffect = (endpoint, startIndex) => Effect.gen(function* () {
117
+ if (startIndex === void 0) return endpoint;
118
+ yield* validateAgentRunStartIndexEffect(startIndex);
119
+ const parsed = yield* parseEndpointEffect(endpoint);
120
+ parsed.url.searchParams.set("startIndex", String(startIndex));
121
+ return serializeEndpoint(parsed);
122
+ });
114
123
  const nextAgentRunStartIndex = (startIndex, count) => (startIndex ?? 0) + count;
115
124
  const unknownToMessage = (error) => error instanceof Error ? error.message : String(error);
116
125
  const toTransportError = (message, cause) => new AgentTransportError({
@@ -209,8 +218,8 @@ const requestAgentResponse = (request) => Effect.gen(function* () {
209
218
  }));
210
219
  });
211
220
  const requestAgentRunResponse = (request) => Effect.gen(function* () {
212
- validateAgentRunStartIndex(request.startIndex);
213
- const response = yield* (yield* HttpClient.HttpClient).execute(HttpClientRequest.get(agentRunEndpointWithStartIndex(request.endpoint, request.startIndex)).pipe(HttpClientRequest.setHeaders({ accept: "application/x-ndjson" }))).pipe(Effect.mapError(toHttpClientTransportError("Agent run request failed")));
221
+ const endpoint = yield* agentRunEndpointWithStartIndexEffect(request.endpoint, request.startIndex);
222
+ const response = yield* (yield* HttpClient.HttpClient).execute(HttpClientRequest.get(endpoint).pipe(HttpClientRequest.setHeaders({ accept: "application/x-ndjson" }))).pipe(Effect.mapError(toHttpClientTransportError("Agent run request failed")));
214
223
  if (response.status >= 200 && response.status < 300) {
215
224
  yield* Effect.sync(() => request.onResponse?.({
216
225
  status: response.status,
@@ -581,8 +590,7 @@ const streamCloudflareAgentEventStream = (request) => applyAbortSignal(Stream.ca
581
590
  const closeSocket = Effect.sync(() => {
582
591
  if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) socket.close(1e3, "done");
583
592
  });
584
- const failQueue = (error) => Queue.failCauseUnsafe(queue, Cause.fail(error));
585
- const endQueue = () => Queue.endUnsafe(queue);
593
+ const failQueue = (error) => Effect.runFork(Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid));
586
594
  const handleMessage = (event) => {
587
595
  if (typeof event.data !== "string") {
588
596
  failQueue(toTransportError("Agent WebSocket returned binary data", event.data));
@@ -593,12 +601,14 @@ const streamCloudflareAgentEventStream = (request) => applyAbortSignal(Stream.ca
593
601
  sentInput = true;
594
602
  })));
595
603
  if (!isAgentEvent(message)) return Effect.void;
596
- return Effect.sync(() => {
597
- Queue.offerUnsafe(queue, message);
604
+ return Effect.gen(function* () {
605
+ yield* Queue.offer(queue, message);
598
606
  if (isTerminalAgentEvent(message)) {
599
- settled = true;
600
- endQueue();
601
- socket.close(1e3, "done");
607
+ yield* Effect.sync(() => {
608
+ settled = true;
609
+ socket.close(1e3, "done");
610
+ });
611
+ yield* Queue.end(queue).pipe(Effect.asVoid);
602
612
  }
603
613
  });
604
614
  }), Effect.catch((error) => Effect.sync(() => failQueue(error)))));
@@ -621,7 +631,7 @@ const streamCloudflareAgentEventStream = (request) => applyAbortSignal(Stream.ca
621
631
  })), request.signal);
622
632
  const cancelAgentRun = (request) => Effect.runPromise(cancelAgentRunEffect(request));
623
633
  const collectAgentEventsEffect = (request) => streamAgentEventStream(request).pipe(Stream.runCollect);
624
- const collectAgentEvents = async (request) => Array.from(await Effect.runPromise(collectAgentEventsEffect(request)));
634
+ const collectAgentEvents = (request) => Effect.runPromise(collectAgentEventsEffect(request)).then((events) => Array.from(events));
625
635
  //#endregion
626
636
  export { AgentTransportError, agentRunEndpointWithStartIndex, agentRunIdFromHeaders, agentRunStreamStartIndexFromHeaders, agentRunStreamTailIndexFromHeaders, cancelAgentRun, collectAgentEvents, collectAgentEventsEffect, streamAgentEventStream, streamAgentEventStreamUntilTerminal, streamAgentRunEventStream, streamAgentRunEventStreamUntilTerminal, streamAgentRunHitlResponseEventStream, streamAgentRunHitlResponseEventStreamUntilTerminal, streamCloudflareAgentEventStream, streamQuestionResponseEventStream, streamToolApprovalResponseEventStream };
627
637
 
@@ -1 +1 @@
1
- {"version":3,"file":"transport.mjs","names":[],"sources":["../../src/client/transport.ts"],"sourcesContent":["import {\n Cause,\n Channel,\n Effect,\n Exit,\n Pull,\n Queue,\n Ref,\n Scope,\n Stream,\n type Layer\n} from 'effect'\nimport {\n FetchHttpClient,\n HttpClient,\n HttpClientRequest,\n type HttpClientError,\n type HttpClientResponse\n} from 'effect/unstable/http'\nimport * as Schema from 'effect/Schema'\nimport {\n AgentEvent,\n AgentWebSocketServerMessage,\n QuestionResponseInput,\n ToolApprovalResponseInput,\n UserInput,\n isTerminalAgentEvent\n} from '@yolk-sdk/agent/protocol'\nimport type {\n AgentEvent as AgentEventType,\n AgentMessage,\n AgentReasoningEffort,\n AgentWebSocketServerMessage as AgentWebSocketServerMessageType,\n HitlResponse,\n QuestionResponse,\n ToolApprovalResponse,\n UserMessage\n} from '@yolk-sdk/agent/protocol'\nimport type { AgentTranscript } from './state.ts'\n\nexport class AgentTransportError extends Schema.TaggedErrorClass<AgentTransportError>()(\n 'AgentTransportError',\n {\n message: Schema.String,\n cause: Schema.Unknown\n }\n) {}\n\nexport type StreamAgentEventsRequest = {\n readonly endpoint?: string\n readonly sessionId: string\n readonly messages: AgentTranscript\n readonly hitlResponses?: ReadonlyArray<HitlResponse>\n readonly model?: string\n readonly reasoningEffort?: AgentReasoningEffort\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nexport type StreamAgentRunEventsRequest = {\n readonly endpoint: string\n readonly startIndex?: number\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nexport type StreamAgentRunHitlResponseEventsRequest = {\n readonly endpoint: string\n readonly hitlResponses: ReadonlyArray<HitlResponse>\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nexport type StreamAgentEventHandler = (event: AgentEventType, count: number) => void\n\nexport type AgentRunIdleReconnectOptions = {\n readonly idleTimeoutMs: number\n readonly maxAttempts?: number\n}\n\nexport type AgentRunContinuationOptions = {\n readonly continuationLimit?: number\n readonly idleReconnect?: AgentRunIdleReconnectOptions\n readonly onEvent?: StreamAgentEventHandler\n}\n\nexport type StreamAgentEventsUntilTerminalRequest = StreamAgentEventsRequest &\n AgentRunContinuationOptions & {\n readonly runEndpoint?: (runId: string) => string\n readonly onRunId?: (runId: string) => void\n }\n\nexport type StreamAgentRunEventsUntilTerminalRequest = StreamAgentRunEventsRequest &\n AgentRunContinuationOptions\n\nexport type StreamAgentRunHitlResponseEventsUntilTerminalRequest =\n StreamAgentRunHitlResponseEventsRequest & AgentRunContinuationOptions\n\nexport type CancelAgentRunRequest = {\n readonly endpoint: string\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n}\n\nexport type SubmitToolApprovalResponseRequest = StreamAgentEventsRequest & {\n readonly response: ToolApprovalResponse\n}\n\nexport type SubmitQuestionResponseRequest = StreamAgentEventsRequest & {\n readonly response: QuestionResponse\n}\n\nexport type AgentHttpResponseInfo = {\n readonly status: number\n readonly headers: Readonly<Record<string, string | undefined>>\n}\n\nexport type StreamCloudflareAgentEventsRequest = {\n readonly webSocketUrl: string\n readonly messages: AgentTranscript\n readonly hitlResponses?: ReadonlyArray<HitlResponse>\n readonly model?: string\n readonly reasoningEffort?: AgentReasoningEffort\n readonly signal?: AbortSignal\n}\n\nconst defaultEndpoint = '/api/agent'\nconst defaultRunContinuationLimit = 120\nconst defaultIdleReconnectMaxAttempts = 12\nconst relativeEndpointBase = 'http://yolk.local'\n\nconst headerValue = (headers: Readonly<Record<string, string | undefined>>, name: string) => {\n const direct = headers[name]\n\n if (direct !== undefined) {\n return direct\n }\n\n const normalizedName = name.toLowerCase()\n\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === normalizedName) {\n return value\n }\n }\n\n return undefined\n}\n\nconst nonEmptyHeaderValue = (\n headers: Readonly<Record<string, string | undefined>>,\n name: string\n) => {\n const value = headerValue(headers, name)?.trim()\n\n return value === undefined || value.length === 0 ? undefined : value\n}\n\nconst safeIntegerPattern = /^-?(0|[1-9]\\d*)$/\n\nconst parseSafeInteger = (raw: string) => {\n const value = raw.trim()\n\n if (!safeIntegerPattern.test(value)) {\n return undefined\n }\n\n const parsed = Number.parseInt(value, 10)\n\n return Number.isSafeInteger(parsed) ? parsed : undefined\n}\n\nexport const agentRunIdFromHeaders = (headers: Readonly<Record<string, string | undefined>>) =>\n nonEmptyHeaderValue(headers, 'x-workflow-run-id')\n\nexport const agentRunStreamTailIndexFromHeaders = (\n headers: Readonly<Record<string, string | undefined>>\n) => {\n const raw = nonEmptyHeaderValue(headers, 'x-workflow-stream-tail-index')\n if (raw === undefined) return undefined\n\n const parsed = parseSafeInteger(raw)\n\n return parsed !== undefined && parsed >= -1 ? parsed : undefined\n}\n\nexport const agentRunStreamStartIndexFromHeaders = (\n headers: Readonly<Record<string, string | undefined>>\n) => {\n const tailIndex = agentRunStreamTailIndexFromHeaders(headers)\n\n return tailIndex === undefined ? undefined : tailIndex + 1\n}\n\nexport const agentRunEndpointWithStartIndex = (endpoint: string, startIndex?: number) => {\n if (startIndex === undefined) return endpoint\n\n validateAgentRunStartIndex(startIndex)\n\n const parsed = parseEndpointOrThrow(endpoint)\n parsed.url.searchParams.set('startIndex', String(startIndex))\n\n return serializeEndpoint(parsed)\n}\n\ntype ParsedEndpoint = {\n readonly url: URL\n readonly absolute: boolean\n readonly leadingSlash: boolean\n}\n\nconst absoluteUrlPattern = /^[A-Za-z][A-Za-z\\d+.-]*:/\n\nconst parseEndpoint = (endpoint: string): ParsedEndpoint | undefined => {\n try {\n return {\n url: new URL(endpoint, relativeEndpointBase),\n absolute: absoluteUrlPattern.test(endpoint),\n leadingSlash: endpoint.startsWith('/')\n }\n } catch {\n return undefined\n }\n}\n\nconst parseEndpointOrThrow = (endpoint: string) => {\n const parsed = parseEndpoint(endpoint)\n\n if (parsed !== undefined) {\n return parsed\n }\n\n throw new AgentTransportError({\n message: 'Invalid agent run endpoint',\n cause: endpoint\n })\n}\n\nconst serializeEndpoint = (endpoint: ParsedEndpoint) => {\n if (endpoint.absolute) {\n return endpoint.url.toString()\n }\n\n const serialized = `${endpoint.url.pathname}${endpoint.url.search}${endpoint.url.hash}`\n\n return endpoint.leadingSlash ? serialized : serialized.slice(1)\n}\n\nconst appendEncodedPathSegment = (endpoint: string, segment: string) => {\n const parsed = parseEndpointOrThrow(endpoint)\n\n const basePath = parsed.url.pathname.endsWith('/')\n ? parsed.url.pathname.slice(0, -1)\n : parsed.url.pathname\n\n parsed.url.pathname = `${basePath}/${encodeURIComponent(segment)}`\n\n return serializeEndpoint(parsed)\n}\n\nconst defaultAgentRunEndpoint = (endpoint: string | undefined, runId: string) =>\n appendEncodedPathSegment(endpoint ?? defaultEndpoint, runId)\n\nconst invalidAgentRunContinuationLimitError = (limit: number | undefined) =>\n new AgentTransportError({\n message: 'Invalid agent run continuation limit',\n cause: limit\n })\n\nconst agentRunContinuationLimitEffect = (limit: number | undefined) => {\n if (limit === undefined) return Effect.succeed(defaultRunContinuationLimit)\n\n return Number.isSafeInteger(limit) && limit >= 0\n ? Effect.succeed(limit)\n : Effect.fail(invalidAgentRunContinuationLimitError(limit))\n}\n\nconst invalidIdleReconnectMaxAttemptsError = (limit: number | undefined) =>\n new AgentTransportError({\n message: 'Invalid agent run idle reconnect max attempts',\n cause: limit\n })\n\nconst idleReconnectMaxAttemptsEffect = (limit: number | undefined) => {\n if (limit === undefined) return Effect.succeed(defaultIdleReconnectMaxAttempts)\n\n return Number.isSafeInteger(limit) && limit >= 0\n ? Effect.succeed(limit)\n : Effect.fail(invalidIdleReconnectMaxAttemptsError(limit))\n}\n\nconst validateAgentRunIdleReconnectEffect = (\n options: AgentRunIdleReconnectOptions | undefined\n) => {\n if (options === undefined) return Effect.void\n\n if (!Number.isSafeInteger(options.idleTimeoutMs) || options.idleTimeoutMs <= 0) {\n return Effect.fail(\n new AgentTransportError({\n message: 'Invalid agent run idle reconnect timeout',\n cause: options.idleTimeoutMs\n })\n )\n }\n\n return idleReconnectMaxAttemptsEffect(options.maxAttempts).pipe(Effect.asVoid)\n}\n\nconst validateAgentRunStartIndex = (startIndex: number | undefined) => {\n if (startIndex === undefined || (Number.isSafeInteger(startIndex) && startIndex >= 0)) {\n return\n }\n\n throw invalidAgentRunStartIndexError(startIndex)\n}\n\nconst invalidAgentRunStartIndexError = (startIndex: number | undefined) =>\n new AgentTransportError({\n message: 'Invalid agent run stream start index',\n cause: startIndex\n })\n\nconst validateAgentRunStartIndexEffect = (startIndex: number | undefined) =>\n startIndex === undefined || (Number.isSafeInteger(startIndex) && startIndex >= 0)\n ? Effect.void\n : Effect.fail(invalidAgentRunStartIndexError(startIndex))\n\nconst nextAgentRunStartIndex = (startIndex: number | undefined, count: number) =>\n (startIndex ?? 0) + count\n\nconst unknownToMessage = (error: unknown) =>\n error instanceof Error ? error.message : String(error)\n\nconst toTransportError = (message: string, cause: unknown) =>\n new AgentTransportError({\n message,\n cause\n })\n\nconst toHttpClientTransportError = (message: string) => (error: HttpClientError.HttpClientError) =>\n toTransportError(`${message}: ${error.message}`, error)\n\nconst decodeAgentEvent = (value: unknown) =>\n Schema.decodeUnknownEffect(AgentEvent)(value).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `Invalid agent event: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst decodeWebSocketServerMessage = (value: unknown) =>\n Schema.decodeUnknownEffect(AgentWebSocketServerMessage)(value).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `Invalid agent WebSocket message: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst encodeJsonString = (value: unknown, message: string) =>\n Schema.encodeUnknownEffect(Schema.UnknownFromJsonString)(value).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `${message}: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst decodeJsonString = (raw: string, message: string) =>\n Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(raw).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `${message}: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst parseAgentEventLine = (line: string) =>\n Effect.gen(function* () {\n const parsed = yield* decodeJsonString(line, 'Invalid NDJSON line')\n\n return yield* decodeAgentEvent(parsed)\n })\n\nconst parseWebSocketServerMessage = (\n raw: string\n): Effect.Effect<AgentWebSocketServerMessageType, AgentTransportError> =>\n Effect.gen(function* () {\n const parsed = yield* decodeJsonString(raw, 'Invalid WebSocket message')\n\n return yield* decodeWebSocketServerMessage(parsed)\n })\n\nconst isUserMessage = (message: AgentMessage): message is UserMessage => message._tag === 'User'\n\nconst lastUserMessage = (\n messages: AgentTranscript\n): Effect.Effect<UserMessage, AgentTransportError> => {\n const reversed = messages.slice().reverse()\n const message = reversed.find(isUserMessage)\n\n if (message === undefined) {\n return Effect.fail(\n new AgentTransportError({\n message: 'Cloudflare WebSocket transport requires a user message',\n cause: messages\n })\n )\n }\n\n return Effect.succeed(message)\n}\n\nconst makeClientInputJson = (\n request: StreamCloudflareAgentEventsRequest,\n expectedRevision: number\n): Effect.Effect<string, AgentTransportError> =>\n Effect.gen(function* () {\n const hitlResponse = request.hitlResponses?.[0]\n\n if (request.hitlResponses !== undefined && request.hitlResponses.length > 1) {\n return yield* Effect.fail(\n new AgentTransportError({\n message: 'Cloudflare WebSocket transport supports one HITL response at a time',\n cause: request.hitlResponses\n })\n )\n }\n\n if (hitlResponse === undefined) {\n const message = yield* lastUserMessage(request.messages)\n\n return yield* encodeJsonString(\n UserInput.make({\n message,\n expectedRevision,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n }),\n 'Could not serialize WebSocket user input'\n )\n }\n\n return yield* encodeJsonString(\n hitlResponse._tag === 'ToolApprovalResponse'\n ? ToolApprovalResponseInput.make({\n response: hitlResponse,\n expectedRevision,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n })\n : QuestionResponseInput.make({\n response: hitlResponse,\n expectedRevision,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n }),\n 'Could not serialize WebSocket HITL response'\n )\n })\n\nconst responseErrorMessage = (response: HttpClientResponse.HttpClientResponse) =>\n response.text.pipe(\n Effect.mapError(toHttpClientTransportError('Could not read agent error body')),\n Effect.map(text => (text.length > 0 ? text : `Request failed with ${response.status}`))\n )\n\nconst makeHttpRequest = (request: StreamAgentEventsRequest) =>\n encodeJsonString(\n {\n sessionId: request.sessionId,\n messages: request.messages,\n hitlResponses: request.hitlResponses,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n },\n 'Could not serialize agent request'\n ).pipe(\n Effect.map(body =>\n HttpClientRequest.post(request.endpoint ?? defaultEndpoint).pipe(\n HttpClientRequest.setHeaders({\n accept: 'application/x-ndjson',\n 'content-type': 'application/json'\n }),\n HttpClientRequest.bodyText(body, 'application/json')\n )\n )\n )\n\nconst makeHttpRunHitlResponseRequest = (request: StreamAgentRunHitlResponseEventsRequest) =>\n encodeJsonString(\n { hitlResponses: request.hitlResponses },\n 'Could not serialize agent run HITL response'\n ).pipe(\n Effect.map(body =>\n HttpClientRequest.post(request.endpoint).pipe(\n HttpClientRequest.setHeaders({\n accept: 'application/x-ndjson',\n 'content-type': 'application/json'\n }),\n HttpClientRequest.bodyText(body, 'application/json')\n )\n )\n )\n\nconst requestAgentResponse = (request: StreamAgentEventsRequest) =>\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const httpRequest = yield* makeHttpRequest(request)\n const response = yield* client\n .execute(httpRequest)\n .pipe(Effect.mapError(toHttpClientTransportError('Agent request failed')))\n\n if (response.status >= 200 && response.status < 300) {\n yield* Effect.sync(() =>\n request.onResponse?.({ status: response.status, headers: response.headers })\n )\n return response\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent request failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n })\n\nconst requestAgentRunResponse = (request: StreamAgentRunEventsRequest) =>\n Effect.gen(function* () {\n validateAgentRunStartIndex(request.startIndex)\n\n const client = yield* HttpClient.HttpClient\n const response = yield* client\n .execute(\n HttpClientRequest.get(\n agentRunEndpointWithStartIndex(request.endpoint, request.startIndex)\n ).pipe(HttpClientRequest.setHeaders({ accept: 'application/x-ndjson' }))\n )\n .pipe(Effect.mapError(toHttpClientTransportError('Agent run request failed')))\n\n if (response.status >= 200 && response.status < 300) {\n yield* Effect.sync(() =>\n request.onResponse?.({ status: response.status, headers: response.headers })\n )\n return response\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent run request failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n })\n\nconst requestAgentRunHitlResponse = (request: StreamAgentRunHitlResponseEventsRequest) =>\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const httpRequest = yield* makeHttpRunHitlResponseRequest(request)\n const response = yield* client\n .execute(httpRequest)\n .pipe(Effect.mapError(toHttpClientTransportError('Agent run HITL request failed')))\n\n if (response.status >= 200 && response.status < 300) {\n yield* Effect.sync(() =>\n request.onResponse?.({ status: response.status, headers: response.headers })\n )\n return response\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent run HITL request failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n })\n\nconst cancelAgentRunEffect = (request: CancelAgentRunRequest) =>\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const response = yield* client\n .execute(HttpClientRequest.delete(request.endpoint))\n .pipe(Effect.mapError(toHttpClientTransportError('Agent run cancel failed')))\n\n if (response.status >= 200 && response.status < 300) {\n return\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent run cancel failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n }).pipe(Effect.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nconst responseToLineStream = (response: HttpClientResponse.HttpClientResponse) =>\n response.stream.pipe(\n Stream.mapError(toHttpClientTransportError('Could not read agent response body')),\n Stream.decodeText,\n Stream.splitLines,\n Stream.map(line => line.trim()),\n Stream.filter(line => line.length > 0)\n )\n\nconst closeScope = (scope: Scope.Scope) => Scope.close(scope, Exit.succeed(undefined))\n\n// Protocol-terminal events finish the consumer stream, but HTTP bodies must still\n// drain to EOF so server runtimes do not observe client-side response aborts.\nconst responseToEventStream = (response: HttpClientResponse.HttpClientResponse) =>\n Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n const callbackScope = yield* Scope.Scope\n // Own the response stream in a scope that can outlive the consumer after a\n // terminal event; before terminal, consumer cancellation closes it.\n const responseScope = yield* Scope.make()\n const responseScopeClosed = yield* Ref.make(false)\n const terminalReached = yield* Ref.make(false)\n const pull = yield* Channel.toPullScoped(\n Stream.toChannel(responseToLineStream(response)),\n responseScope\n )\n const closeResponseScope = Effect.gen(function* () {\n const closed = yield* Ref.get(responseScopeClosed)\n\n if (!closed) {\n yield* Ref.set(responseScopeClosed, true)\n yield* closeScope(responseScope)\n }\n })\n const endQueue = Queue.end(queue).pipe(Effect.asVoid)\n const failQueue = (cause: Cause.Cause<AgentTransportError>) =>\n Queue.failCause(queue, cause).pipe(Effect.andThen(closeResponseScope), Effect.asVoid)\n const drainResponse = (): Effect.Effect<void, AgentTransportError> =>\n Pull.matchEffect(pull, {\n onSuccess: () => drainResponse(),\n onFailure: cause => Effect.failCause(cause),\n onDone: () => Effect.void\n })\n const startTerminalDrain = Effect.gen(function* () {\n yield* Ref.set(terminalReached, true)\n yield* endQueue\n yield* drainResponse().pipe(\n Effect.catch(() => Effect.void),\n Effect.ensuring(closeResponseScope),\n Effect.forkDetach({ startImmediately: true }),\n Effect.asVoid\n )\n })\n const emitLines = (lines: ReadonlyArray<string>): Effect.Effect<void, AgentTransportError> =>\n Effect.gen(function* () {\n for (const line of lines) {\n const event = yield* parseAgentEventLine(line)\n\n yield* Queue.offer(queue, event)\n\n if (isTerminalAgentEvent(event)) {\n yield* startTerminalDrain\n return\n }\n }\n\n yield* run()\n })\n const run = (): Effect.Effect<void, AgentTransportError> =>\n Pull.matchEffect(pull, {\n onSuccess: emitLines,\n onFailure: failQueue,\n onDone: () => endQueue.pipe(Effect.andThen(closeResponseScope))\n })\n\n yield* Scope.addFinalizer(\n callbackScope,\n Effect.gen(function* () {\n const terminal = yield* Ref.get(terminalReached)\n\n if (!terminal) {\n yield* closeResponseScope\n }\n })\n )\n\n yield* run().pipe(\n Effect.catch(error => Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid))\n )\n })\n )\n\nconst abortSignalError = (signal: AbortSignal) =>\n new AgentTransportError({\n message: 'Agent request aborted',\n cause: signal.reason\n })\n\nconst abortSignalEffect = (signal: AbortSignal) =>\n Effect.callback<never, AgentTransportError>(resume => {\n if (signal.aborted) {\n resume(Effect.fail(abortSignalError(signal)))\n return Effect.void\n }\n\n const listener = () => resume(Effect.fail(abortSignalError(signal)))\n signal.addEventListener('abort', listener, { once: true })\n\n return Effect.sync(() => signal.removeEventListener('abort', listener))\n })\n\nconst applyAbortSignal = <A, E, R>(\n stream: Stream.Stream<A, E, R>,\n signal: AbortSignal | undefined\n) => (signal === undefined ? stream : stream.pipe(Stream.interruptWhen(abortSignalEffect(signal))))\n\nexport const streamAgentEventStream = (request: StreamAgentEventsRequest) =>\n applyAbortSignal(\n Stream.fromEffect(requestAgentResponse(request)).pipe(Stream.flatMap(responseToEventStream)),\n request.signal\n ).pipe(Stream.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nexport const streamAgentRunEventStream = (request: StreamAgentRunEventsRequest) =>\n applyAbortSignal(\n Stream.fromEffect(requestAgentRunResponse(request)).pipe(Stream.flatMap(responseToEventStream)),\n request.signal\n ).pipe(Stream.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nexport const streamAgentRunHitlResponseEventStream = (\n request: StreamAgentRunHitlResponseEventsRequest\n) =>\n applyAbortSignal(\n Stream.fromEffect(requestAgentRunHitlResponse(request)).pipe(\n Stream.flatMap(responseToEventStream)\n ),\n request.signal\n ).pipe(Stream.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nexport const streamToolApprovalResponseEventStream = (request: SubmitToolApprovalResponseRequest) =>\n streamAgentEventStream({ ...request, hitlResponses: [request.response] })\n\nexport const streamQuestionResponseEventStream = (request: SubmitQuestionResponseRequest) =>\n streamAgentEventStream({ ...request, hitlResponses: [request.response] })\n\ntype AgentEventChunkResult = {\n readonly count: number\n readonly terminal: boolean\n readonly idle: boolean\n}\n\ntype AgentEventPullResult =\n | { readonly _tag: 'Events'; readonly events: Iterable<AgentEventType> }\n | { readonly _tag: 'Done' }\n | { readonly _tag: 'Idle' }\n\ntype AgentRunContinuationInput = AgentRunContinuationOptions & {\n readonly endpoint: string | undefined\n readonly startIndex: number | undefined\n readonly countOffset: number\n readonly terminal: boolean\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nconst missingAgentRunContinuationEndpointError = () =>\n new AgentTransportError({\n message: 'Agent run continuation failed: missing x-workflow-run-id',\n cause: 'missing_run_id'\n })\n\nconst exhaustedAgentRunContinuationLimitError = (limit: number) =>\n new AgentTransportError({\n message: 'Agent run continuation limit reached before a terminal event',\n cause: { limit }\n })\n\nconst noProgressAgentRunContinuationError = (endpoint: string, startIndex: number | undefined) =>\n new AgentTransportError({\n message: 'Agent run continuation made no progress before a terminal event',\n cause: { endpoint, startIndex }\n })\n\nconst noProgressAgentRunContinuationDelayMs = 250\n\nconst idleReconnectLimitReachedError = (limit: number) =>\n new AgentTransportError({\n message: 'Agent run idle reconnect limit reached before a terminal event',\n cause: { limit }\n })\n\nconst missingIdleReconnectRunEndpointError = () =>\n new AgentTransportError({\n message: 'Agent run idle reconnect failed: missing x-workflow-run-id',\n cause: 'missing_run_id'\n })\n\nconst waitForAgentRunContinuationProgress = (signal: AbortSignal | undefined) => {\n const sleep = Effect.sleep(`${noProgressAgentRunContinuationDelayMs} millis`)\n\n return signal === undefined ? sleep : sleep.pipe(Effect.raceFirst(abortSignalEffect(signal)))\n}\n\nconst missingAgentRunTailIndexError = () =>\n new AgentTransportError({\n message: 'Agent run HITL response missing x-workflow-stream-tail-index',\n cause: 'missing_tail_index'\n })\n\nconst pullAgentEventChunk = <A extends Iterable<AgentEventType>>(\n pull: Pull.Pull<A, AgentTransportError, void, never>,\n idleReconnect: AgentRunIdleReconnectOptions | undefined\n) => {\n const pullEvents: Effect.Effect<AgentEventPullResult, AgentTransportError, never> =\n Pull.matchEffect(pull, {\n onSuccess: events => Effect.succeed({ _tag: 'Events', events }),\n onFailure: cause => Effect.failCause(cause),\n onDone: () => Effect.succeed({ _tag: 'Done' })\n })\n\n if (idleReconnect === undefined) return pullEvents\n\n return pullEvents.pipe(\n Effect.raceFirst(\n Effect.sleep(`${idleReconnect.idleTimeoutMs} millis`).pipe(\n Effect.map((): AgentEventPullResult => ({ _tag: 'Idle' }))\n )\n )\n )\n}\n\nconst drainAgentEventStream = (input: {\n readonly queue: Queue.Enqueue<AgentEventType>\n readonly stream: Stream.Stream<AgentEventType, AgentTransportError, never>\n readonly countOffset: number\n readonly idleReconnect?: AgentRunIdleReconnectOptions\n readonly onEvent?: StreamAgentEventHandler\n}): Effect.Effect<AgentEventChunkResult, AgentTransportError, Scope.Scope> =>\n Effect.gen(function* () {\n const scope = yield* Scope.make()\n const pull = yield* Channel.toPullScoped(Stream.toChannel(input.stream), scope)\n const run = (state: {\n readonly count: number\n readonly terminal: boolean\n }): Effect.Effect<AgentEventChunkResult, AgentTransportError, never> =>\n Effect.gen(function* () {\n const pulled = yield* pullAgentEventChunk(pull, input.idleReconnect)\n\n switch (pulled._tag) {\n case 'Idle':\n return { count: state.count, terminal: state.terminal, idle: true }\n case 'Done':\n return { count: state.count, terminal: state.terminal, idle: false }\n case 'Events': {\n let count = state.count\n let terminal = state.terminal\n\n for (const event of pulled.events) {\n count += 1\n terminal = terminal || isTerminalAgentEvent(event)\n yield* Effect.sync(() => input.onEvent?.(event, input.countOffset + count))\n yield* Queue.offer(input.queue, event)\n\n if (terminal) return { count, terminal, idle: false }\n }\n\n return yield* run({ count, terminal })\n }\n }\n })\n\n return yield* run({ count: 0, terminal: false }).pipe(Effect.ensuring(closeScope(scope)))\n })\n\nconst streamAgentRunContinuationChunk = (input: {\n readonly queue: Queue.Enqueue<AgentEventType>\n readonly endpoint: string\n readonly startIndex: number | undefined\n readonly countOffset: number\n readonly signal: AbortSignal | undefined\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n readonly onEvent?: StreamAgentEventHandler\n readonly idleReconnect?: AgentRunIdleReconnectOptions\n}): Effect.Effect<AgentEventChunkResult, AgentTransportError, Scope.Scope> =>\n drainAgentEventStream({\n queue: input.queue,\n stream: streamAgentRunEventStream({\n endpoint: input.endpoint,\n startIndex: input.startIndex,\n signal: input.signal,\n httpClientLayer: input.httpClientLayer,\n onResponse: input.onResponse\n }),\n countOffset: input.countOffset,\n idleReconnect: input.idleReconnect,\n onEvent: input.onEvent\n })\n\nconst streamAgentRunContinuations = (\n input: AgentRunContinuationInput,\n queue: Queue.Enqueue<AgentEventType>\n): Effect.Effect<void, AgentTransportError, Scope.Scope> =>\n Effect.gen(function* () {\n let totalCount = input.countOffset\n let terminal = input.terminal\n let startIndex = input.startIndex\n const limit = yield* agentRunContinuationLimitEffect(input.continuationLimit)\n const idleReconnectLimit =\n input.idleReconnect === undefined\n ? undefined\n : yield* idleReconnectMaxAttemptsEffect(input.idleReconnect.maxAttempts)\n let idleReconnects = 0\n\n if (terminal) {\n return\n }\n\n if (input.endpoint === undefined) {\n return yield* Effect.fail(missingAgentRunContinuationEndpointError())\n }\n\n let continuation = 0\n while (continuation < limit) {\n const endpoint = input.endpoint\n const chunkStartIndex = startIndex\n\n const chunk = yield* streamAgentRunContinuationChunk({\n queue,\n endpoint,\n startIndex: chunkStartIndex,\n countOffset: totalCount,\n signal: input.signal,\n httpClientLayer: input.httpClientLayer,\n onResponse: input.onResponse,\n idleReconnect: input.idleReconnect,\n onEvent: input.onEvent\n })\n\n if (chunk.idle) {\n if (idleReconnectLimit !== undefined && idleReconnects >= idleReconnectLimit) {\n return yield* Effect.fail(idleReconnectLimitReachedError(idleReconnectLimit))\n }\n\n startIndex = nextAgentRunStartIndex(chunkStartIndex, chunk.count)\n totalCount += chunk.count\n idleReconnects += 1\n continue\n }\n\n continuation += 1\n\n if (chunk.count === 0 && !chunk.terminal) {\n if (continuation >= limit) {\n return yield* Effect.fail(noProgressAgentRunContinuationError(endpoint, startIndex))\n }\n\n yield* waitForAgentRunContinuationProgress(input.signal)\n continue\n }\n\n terminal = chunk.terminal\n startIndex = nextAgentRunStartIndex(chunkStartIndex, chunk.count)\n totalCount += chunk.count\n\n if (terminal) {\n return\n }\n }\n\n return yield* Effect.fail(exhaustedAgentRunContinuationLimitError(limit))\n })\n\nexport const streamAgentEventStreamUntilTerminal = (\n request: StreamAgentEventsUntilTerminalRequest\n) => {\n return Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n yield* agentRunContinuationLimitEffect(request.continuationLimit).pipe(Effect.asVoid)\n yield* validateAgentRunIdleReconnectEffect(request.idleReconnect)\n let runEndpoint: string | undefined\n let startIndex: number | undefined\n const firstChunk = yield* drainAgentEventStream({\n queue,\n stream: streamAgentEventStream({\n ...request,\n onResponse: response => {\n startIndex = agentRunStreamStartIndexFromHeaders(response.headers)\n const runId = agentRunIdFromHeaders(response.headers)\n if (runId !== undefined) {\n runEndpoint =\n request.runEndpoint?.(runId) ?? defaultAgentRunEndpoint(request.endpoint, runId)\n request.onRunId?.(runId)\n }\n\n request.onResponse?.(response)\n }\n }),\n countOffset: 0,\n idleReconnect: request.idleReconnect,\n onEvent: request.onEvent\n })\n\n if (firstChunk.idle && runEndpoint === undefined) {\n return yield* Effect.fail(missingIdleReconnectRunEndpointError())\n }\n\n yield* streamAgentRunContinuations(\n {\n endpoint: runEndpoint,\n startIndex: nextAgentRunStartIndex(startIndex, firstChunk.count),\n countOffset: firstChunk.count,\n terminal: firstChunk.terminal,\n continuationLimit: request.continuationLimit,\n idleReconnect: request.idleReconnect,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n onEvent: request.onEvent\n },\n queue\n )\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }).pipe(\n Effect.catch((error: AgentTransportError) =>\n Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid)\n )\n )\n )\n}\n\nexport const streamAgentRunEventStreamUntilTerminal = (\n request: StreamAgentRunEventsUntilTerminalRequest\n) => {\n return Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n yield* agentRunContinuationLimitEffect(request.continuationLimit).pipe(Effect.asVoid)\n yield* validateAgentRunIdleReconnectEffect(request.idleReconnect)\n yield* validateAgentRunStartIndexEffect(request.startIndex)\n const firstChunk = yield* streamAgentRunContinuationChunk({\n queue,\n endpoint: request.endpoint,\n startIndex: request.startIndex,\n countOffset: 0,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n idleReconnect: request.idleReconnect,\n onEvent: request.onEvent\n })\n\n yield* streamAgentRunContinuations(\n {\n endpoint: request.endpoint,\n startIndex: nextAgentRunStartIndex(request.startIndex, firstChunk.count),\n countOffset: firstChunk.count,\n terminal: firstChunk.terminal,\n continuationLimit: request.continuationLimit,\n idleReconnect: request.idleReconnect,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n onEvent: request.onEvent\n },\n queue\n )\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }).pipe(\n Effect.catch((error: AgentTransportError) =>\n Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid)\n )\n )\n )\n}\n\nconst streamAgentRunHitlResponseInitialChunk = (\n request: StreamAgentRunHitlResponseEventsUntilTerminalRequest,\n queue: Queue.Enqueue<AgentEventType>,\n setStartIndex: (startIndex: number | undefined) => void\n): Effect.Effect<AgentEventChunkResult, AgentTransportError, Scope.Scope> =>\n drainAgentEventStream({\n queue,\n stream: streamAgentRunHitlResponseEventStream({\n ...request,\n onResponse: response => {\n setStartIndex(agentRunStreamStartIndexFromHeaders(response.headers))\n request.onResponse?.(response)\n }\n }),\n countOffset: 0,\n idleReconnect: request.idleReconnect,\n onEvent: request.onEvent\n })\n\nexport const streamAgentRunHitlResponseEventStreamUntilTerminal = (\n request: StreamAgentRunHitlResponseEventsUntilTerminalRequest\n) => {\n return Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n yield* agentRunContinuationLimitEffect(request.continuationLimit).pipe(Effect.asVoid)\n yield* validateAgentRunIdleReconnectEffect(request.idleReconnect)\n let startIndex: number | undefined\n const firstChunk = yield* streamAgentRunHitlResponseInitialChunk(\n request,\n queue,\n nextStartIndex => {\n startIndex = nextStartIndex\n }\n )\n\n if (!firstChunk.terminal && startIndex === undefined) {\n return yield* Effect.fail(missingAgentRunTailIndexError())\n }\n\n yield* streamAgentRunContinuations(\n {\n endpoint: request.endpoint,\n startIndex: nextAgentRunStartIndex(startIndex, firstChunk.count),\n countOffset: firstChunk.count,\n terminal: firstChunk.terminal,\n continuationLimit: request.continuationLimit,\n idleReconnect: request.idleReconnect,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n onEvent: request.onEvent\n },\n queue\n )\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }).pipe(\n Effect.catch((error: AgentTransportError) =>\n Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid)\n )\n )\n )\n}\n\nconst isAgentEvent = (message: AgentWebSocketServerMessageType): message is AgentEventType =>\n message._tag !== 'SessionSnapshot'\n\nexport const streamCloudflareAgentEventStream = (request: StreamCloudflareAgentEventsRequest) =>\n applyAbortSignal(\n Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n const socket = new WebSocket(request.webSocketUrl)\n let sentInput = false\n let settled = false\n const closeSocket = Effect.sync(() => {\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close(1000, 'done')\n }\n })\n const failQueue = (error: AgentTransportError) =>\n Queue.failCauseUnsafe(queue, Cause.fail(error))\n const endQueue = () => Queue.endUnsafe(queue)\n const handleMessage = (event: MessageEvent) => {\n if (typeof event.data !== 'string') {\n failQueue(toTransportError('Agent WebSocket returned binary data', event.data))\n return\n }\n\n Effect.runFork(\n parseWebSocketServerMessage(event.data).pipe(\n Effect.flatMap(message => {\n if (message._tag === 'SessionSnapshot') {\n return sentInput\n ? Effect.void\n : makeClientInputJson(request, message.revision).pipe(\n Effect.flatMap(body => Effect.sync(() => socket.send(body))),\n Effect.tap(() =>\n Effect.sync(() => {\n sentInput = true\n })\n )\n )\n }\n\n if (!isAgentEvent(message)) {\n return Effect.void\n }\n\n return Effect.sync(() => {\n Queue.offerUnsafe(queue, message)\n if (isTerminalAgentEvent(message)) {\n settled = true\n endQueue()\n socket.close(1000, 'done')\n }\n })\n }),\n Effect.catch(error => Effect.sync(() => failQueue(error)))\n )\n )\n }\n const handleError = () => {\n failQueue(toTransportError('Agent WebSocket failed', request.webSocketUrl))\n }\n const handleClose = () => {\n if (!settled) {\n failQueue(toTransportError('Agent WebSocket closed', request.webSocketUrl))\n }\n }\n\n yield* Effect.acquireRelease(\n Effect.sync(() => {\n socket.addEventListener('message', handleMessage)\n socket.addEventListener('error', handleError)\n socket.addEventListener('close', handleClose)\n }),\n () =>\n Effect.sync(() => {\n socket.removeEventListener('message', handleMessage)\n socket.removeEventListener('error', handleError)\n socket.removeEventListener('close', handleClose)\n }).pipe(Effect.andThen(closeSocket))\n )\n })\n ),\n request.signal\n )\n\nexport const cancelAgentRun = (request: CancelAgentRunRequest) =>\n Effect.runPromise(cancelAgentRunEffect(request))\n\nexport const collectAgentEventsEffect = (request: StreamAgentEventsRequest) =>\n streamAgentEventStream(request).pipe(Stream.runCollect)\n\nexport const collectAgentEvents = async (request: StreamAgentEventsRequest) =>\n Array.from(await Effect.runPromise(collectAgentEventsEffect(request)))\n"],"mappings":"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"}
1
+ {"version":3,"file":"transport.mjs","names":[],"sources":["../../src/client/transport.ts"],"sourcesContent":["import {\n Cause,\n Channel,\n Effect,\n Exit,\n Pull,\n Queue,\n Ref,\n Result,\n Scope,\n Stream,\n type Layer\n} from 'effect'\nimport {\n FetchHttpClient,\n HttpClient,\n HttpClientRequest,\n type HttpClientError,\n type HttpClientResponse\n} from 'effect/unstable/http'\nimport * as Schema from 'effect/Schema'\nimport {\n AgentEvent,\n AgentWebSocketServerMessage,\n QuestionResponseInput,\n ToolApprovalResponseInput,\n UserInput,\n isTerminalAgentEvent\n} from '@yolk-sdk/agent/protocol'\nimport type {\n AgentEvent as AgentEventType,\n AgentMessage,\n AgentReasoningEffort,\n AgentWebSocketServerMessage as AgentWebSocketServerMessageType,\n HitlResponse,\n QuestionResponse,\n ToolApprovalResponse,\n UserMessage\n} from '@yolk-sdk/agent/protocol'\nimport type { AgentTranscript } from './state.ts'\n\nexport class AgentTransportError extends Schema.TaggedErrorClass<AgentTransportError>()(\n 'AgentTransportError',\n {\n message: Schema.String,\n cause: Schema.Unknown\n }\n) {}\n\nexport type StreamAgentEventsRequest = {\n readonly endpoint?: string\n readonly sessionId: string\n readonly messages: AgentTranscript\n readonly hitlResponses?: ReadonlyArray<HitlResponse>\n readonly model?: string\n readonly reasoningEffort?: AgentReasoningEffort\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nexport type StreamAgentRunEventsRequest = {\n readonly endpoint: string\n readonly startIndex?: number\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nexport type StreamAgentRunHitlResponseEventsRequest = {\n readonly endpoint: string\n readonly hitlResponses: ReadonlyArray<HitlResponse>\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nexport type StreamAgentEventHandler = (event: AgentEventType, count: number) => void\n\nexport type AgentRunIdleReconnectOptions = {\n readonly idleTimeoutMs: number\n readonly maxAttempts?: number\n}\n\nexport type AgentRunContinuationOptions = {\n readonly continuationLimit?: number\n readonly idleReconnect?: AgentRunIdleReconnectOptions\n readonly onEvent?: StreamAgentEventHandler\n}\n\nexport type StreamAgentEventsUntilTerminalRequest = StreamAgentEventsRequest &\n AgentRunContinuationOptions & {\n readonly runEndpoint?: (runId: string) => string\n readonly onRunId?: (runId: string) => void\n }\n\nexport type StreamAgentRunEventsUntilTerminalRequest = StreamAgentRunEventsRequest &\n AgentRunContinuationOptions\n\nexport type StreamAgentRunHitlResponseEventsUntilTerminalRequest =\n StreamAgentRunHitlResponseEventsRequest & AgentRunContinuationOptions\n\nexport type CancelAgentRunRequest = {\n readonly endpoint: string\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n}\n\nexport type SubmitToolApprovalResponseRequest = StreamAgentEventsRequest & {\n readonly response: ToolApprovalResponse\n}\n\nexport type SubmitQuestionResponseRequest = StreamAgentEventsRequest & {\n readonly response: QuestionResponse\n}\n\nexport type AgentHttpResponseInfo = {\n readonly status: number\n readonly headers: Readonly<Record<string, string | undefined>>\n}\n\nexport type StreamCloudflareAgentEventsRequest = {\n readonly webSocketUrl: string\n readonly messages: AgentTranscript\n readonly hitlResponses?: ReadonlyArray<HitlResponse>\n readonly model?: string\n readonly reasoningEffort?: AgentReasoningEffort\n readonly signal?: AbortSignal\n}\n\nconst defaultEndpoint = '/api/agent'\nconst defaultRunContinuationLimit = 120\nconst defaultIdleReconnectMaxAttempts = 12\nconst relativeEndpointBase = 'http://yolk.local'\n\nconst headerValue = (headers: Readonly<Record<string, string | undefined>>, name: string) => {\n const direct = headers[name]\n\n if (direct !== undefined) {\n return direct\n }\n\n const normalizedName = name.toLowerCase()\n\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === normalizedName) {\n return value\n }\n }\n\n return undefined\n}\n\nconst nonEmptyHeaderValue = (\n headers: Readonly<Record<string, string | undefined>>,\n name: string\n) => {\n const value = headerValue(headers, name)?.trim()\n\n return value === undefined || value.length === 0 ? undefined : value\n}\n\nconst safeIntegerPattern = /^-?(0|[1-9]\\d*)$/\n\nconst parseSafeInteger = (raw: string) => {\n const value = raw.trim()\n\n if (!safeIntegerPattern.test(value)) {\n return undefined\n }\n\n const parsed = Number.parseInt(value, 10)\n\n return Number.isSafeInteger(parsed) ? parsed : undefined\n}\n\nexport const agentRunIdFromHeaders = (headers: Readonly<Record<string, string | undefined>>) =>\n nonEmptyHeaderValue(headers, 'x-workflow-run-id')\n\nexport const agentRunStreamTailIndexFromHeaders = (\n headers: Readonly<Record<string, string | undefined>>\n) => {\n const raw = nonEmptyHeaderValue(headers, 'x-workflow-stream-tail-index')\n if (raw === undefined) return undefined\n\n const parsed = parseSafeInteger(raw)\n\n return parsed !== undefined && parsed >= -1 ? parsed : undefined\n}\n\nexport const agentRunStreamStartIndexFromHeaders = (\n headers: Readonly<Record<string, string | undefined>>\n) => {\n const tailIndex = agentRunStreamTailIndexFromHeaders(headers)\n\n return tailIndex === undefined ? undefined : tailIndex + 1\n}\n\nexport const agentRunEndpointWithStartIndex = (endpoint: string, startIndex?: number) => {\n if (startIndex === undefined) return endpoint\n\n validateAgentRunStartIndex(startIndex)\n\n const parsed = parseEndpointOrThrow(endpoint)\n parsed.url.searchParams.set('startIndex', String(startIndex))\n\n return serializeEndpoint(parsed)\n}\n\ntype ParsedEndpoint = {\n readonly url: URL\n readonly absolute: boolean\n readonly leadingSlash: boolean\n}\n\nconst absoluteUrlPattern = /^[A-Za-z][A-Za-z\\d+.-]*:/\n\nconst invalidAgentRunEndpointError = (endpoint: string) =>\n new AgentTransportError({\n message: 'Invalid agent run endpoint',\n cause: endpoint\n })\n\nconst parseEndpoint = (endpoint: string): ParsedEndpoint | undefined =>\n Result.try(() => ({\n url: new URL(endpoint, relativeEndpointBase),\n absolute: absoluteUrlPattern.test(endpoint),\n leadingSlash: endpoint.startsWith('/')\n })).pipe(\n Result.match({\n onFailure: () => undefined,\n onSuccess: parsed => parsed\n })\n )\n\nconst parseEndpointOrThrow = (endpoint: string) => {\n const parsed = parseEndpoint(endpoint)\n\n if (parsed !== undefined) {\n return parsed\n }\n\n throw invalidAgentRunEndpointError(endpoint)\n}\n\nconst parseEndpointEffect = (endpoint: string) => {\n const parsed = parseEndpoint(endpoint)\n\n return parsed === undefined\n ? Effect.fail(invalidAgentRunEndpointError(endpoint))\n : Effect.succeed(parsed)\n}\n\nconst serializeEndpoint = (endpoint: ParsedEndpoint) => {\n if (endpoint.absolute) {\n return endpoint.url.toString()\n }\n\n const serialized = `${endpoint.url.pathname}${endpoint.url.search}${endpoint.url.hash}`\n\n return endpoint.leadingSlash ? serialized : serialized.slice(1)\n}\n\nconst appendEncodedPathSegment = (endpoint: string, segment: string) => {\n const parsed = parseEndpointOrThrow(endpoint)\n\n const basePath = parsed.url.pathname.endsWith('/')\n ? parsed.url.pathname.slice(0, -1)\n : parsed.url.pathname\n\n parsed.url.pathname = `${basePath}/${encodeURIComponent(segment)}`\n\n return serializeEndpoint(parsed)\n}\n\nconst defaultAgentRunEndpoint = (endpoint: string | undefined, runId: string) =>\n appendEncodedPathSegment(endpoint ?? defaultEndpoint, runId)\n\nconst invalidAgentRunContinuationLimitError = (limit: number | undefined) =>\n new AgentTransportError({\n message: 'Invalid agent run continuation limit',\n cause: limit\n })\n\nconst agentRunContinuationLimitEffect = (limit: number | undefined) => {\n if (limit === undefined) return Effect.succeed(defaultRunContinuationLimit)\n\n return Number.isSafeInteger(limit) && limit >= 0\n ? Effect.succeed(limit)\n : Effect.fail(invalidAgentRunContinuationLimitError(limit))\n}\n\nconst invalidIdleReconnectMaxAttemptsError = (limit: number | undefined) =>\n new AgentTransportError({\n message: 'Invalid agent run idle reconnect max attempts',\n cause: limit\n })\n\nconst idleReconnectMaxAttemptsEffect = (limit: number | undefined) => {\n if (limit === undefined) return Effect.succeed(defaultIdleReconnectMaxAttempts)\n\n return Number.isSafeInteger(limit) && limit >= 0\n ? Effect.succeed(limit)\n : Effect.fail(invalidIdleReconnectMaxAttemptsError(limit))\n}\n\nconst validateAgentRunIdleReconnectEffect = (\n options: AgentRunIdleReconnectOptions | undefined\n) => {\n if (options === undefined) return Effect.void\n\n if (!Number.isSafeInteger(options.idleTimeoutMs) || options.idleTimeoutMs <= 0) {\n return Effect.fail(\n new AgentTransportError({\n message: 'Invalid agent run idle reconnect timeout',\n cause: options.idleTimeoutMs\n })\n )\n }\n\n return idleReconnectMaxAttemptsEffect(options.maxAttempts).pipe(Effect.asVoid)\n}\n\nconst validateAgentRunStartIndex = (startIndex: number | undefined) => {\n if (startIndex === undefined || (Number.isSafeInteger(startIndex) && startIndex >= 0)) {\n return\n }\n\n throw invalidAgentRunStartIndexError(startIndex)\n}\n\nconst invalidAgentRunStartIndexError = (startIndex: number | undefined) =>\n new AgentTransportError({\n message: 'Invalid agent run stream start index',\n cause: startIndex\n })\n\nconst validateAgentRunStartIndexEffect = (startIndex: number | undefined) =>\n startIndex === undefined || (Number.isSafeInteger(startIndex) && startIndex >= 0)\n ? Effect.void\n : Effect.fail(invalidAgentRunStartIndexError(startIndex))\n\nconst agentRunEndpointWithStartIndexEffect = (endpoint: string, startIndex: number | undefined) =>\n Effect.gen(function* () {\n if (startIndex === undefined) return endpoint\n\n yield* validateAgentRunStartIndexEffect(startIndex)\n\n const parsed = yield* parseEndpointEffect(endpoint)\n parsed.url.searchParams.set('startIndex', String(startIndex))\n\n return serializeEndpoint(parsed)\n })\n\nconst nextAgentRunStartIndex = (startIndex: number | undefined, count: number) =>\n (startIndex ?? 0) + count\n\nconst unknownToMessage = (error: unknown) =>\n error instanceof Error ? error.message : String(error)\n\nconst toTransportError = (message: string, cause: unknown) =>\n new AgentTransportError({\n message,\n cause\n })\n\nconst toHttpClientTransportError = (message: string) => (error: HttpClientError.HttpClientError) =>\n toTransportError(`${message}: ${error.message}`, error)\n\nconst decodeAgentEvent = (value: unknown) =>\n Schema.decodeUnknownEffect(AgentEvent)(value).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `Invalid agent event: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst decodeWebSocketServerMessage = (value: unknown) =>\n Schema.decodeUnknownEffect(AgentWebSocketServerMessage)(value).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `Invalid agent WebSocket message: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst encodeJsonString = (value: unknown, message: string) =>\n Schema.encodeUnknownEffect(Schema.UnknownFromJsonString)(value).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `${message}: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst decodeJsonString = (raw: string, message: string) =>\n Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(raw).pipe(\n Effect.mapError(\n error =>\n new AgentTransportError({\n message: `${message}: ${unknownToMessage(error)}`,\n cause: error\n })\n )\n )\n\nconst parseAgentEventLine = (line: string) =>\n Effect.gen(function* () {\n const parsed = yield* decodeJsonString(line, 'Invalid NDJSON line')\n\n return yield* decodeAgentEvent(parsed)\n })\n\nconst parseWebSocketServerMessage = (\n raw: string\n): Effect.Effect<AgentWebSocketServerMessageType, AgentTransportError> =>\n Effect.gen(function* () {\n const parsed = yield* decodeJsonString(raw, 'Invalid WebSocket message')\n\n return yield* decodeWebSocketServerMessage(parsed)\n })\n\nconst isUserMessage = (message: AgentMessage): message is UserMessage => message._tag === 'User'\n\nconst lastUserMessage = (\n messages: AgentTranscript\n): Effect.Effect<UserMessage, AgentTransportError> => {\n const reversed = messages.slice().reverse()\n const message = reversed.find(isUserMessage)\n\n if (message === undefined) {\n return Effect.fail(\n new AgentTransportError({\n message: 'Cloudflare WebSocket transport requires a user message',\n cause: messages\n })\n )\n }\n\n return Effect.succeed(message)\n}\n\nconst makeClientInputJson = (\n request: StreamCloudflareAgentEventsRequest,\n expectedRevision: number\n): Effect.Effect<string, AgentTransportError> =>\n Effect.gen(function* () {\n const hitlResponse = request.hitlResponses?.[0]\n\n if (request.hitlResponses !== undefined && request.hitlResponses.length > 1) {\n return yield* Effect.fail(\n new AgentTransportError({\n message: 'Cloudflare WebSocket transport supports one HITL response at a time',\n cause: request.hitlResponses\n })\n )\n }\n\n if (hitlResponse === undefined) {\n const message = yield* lastUserMessage(request.messages)\n\n return yield* encodeJsonString(\n UserInput.make({\n message,\n expectedRevision,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n }),\n 'Could not serialize WebSocket user input'\n )\n }\n\n return yield* encodeJsonString(\n hitlResponse._tag === 'ToolApprovalResponse'\n ? ToolApprovalResponseInput.make({\n response: hitlResponse,\n expectedRevision,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n })\n : QuestionResponseInput.make({\n response: hitlResponse,\n expectedRevision,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n }),\n 'Could not serialize WebSocket HITL response'\n )\n })\n\nconst responseErrorMessage = (response: HttpClientResponse.HttpClientResponse) =>\n response.text.pipe(\n Effect.mapError(toHttpClientTransportError('Could not read agent error body')),\n Effect.map(text => (text.length > 0 ? text : `Request failed with ${response.status}`))\n )\n\nconst makeHttpRequest = (request: StreamAgentEventsRequest) =>\n encodeJsonString(\n {\n sessionId: request.sessionId,\n messages: request.messages,\n hitlResponses: request.hitlResponses,\n model: request.model,\n reasoningEffort: request.reasoningEffort\n },\n 'Could not serialize agent request'\n ).pipe(\n Effect.map(body =>\n HttpClientRequest.post(request.endpoint ?? defaultEndpoint).pipe(\n HttpClientRequest.setHeaders({\n accept: 'application/x-ndjson',\n 'content-type': 'application/json'\n }),\n HttpClientRequest.bodyText(body, 'application/json')\n )\n )\n )\n\nconst makeHttpRunHitlResponseRequest = (request: StreamAgentRunHitlResponseEventsRequest) =>\n encodeJsonString(\n { hitlResponses: request.hitlResponses },\n 'Could not serialize agent run HITL response'\n ).pipe(\n Effect.map(body =>\n HttpClientRequest.post(request.endpoint).pipe(\n HttpClientRequest.setHeaders({\n accept: 'application/x-ndjson',\n 'content-type': 'application/json'\n }),\n HttpClientRequest.bodyText(body, 'application/json')\n )\n )\n )\n\nconst requestAgentResponse = (request: StreamAgentEventsRequest) =>\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const httpRequest = yield* makeHttpRequest(request)\n const response = yield* client\n .execute(httpRequest)\n .pipe(Effect.mapError(toHttpClientTransportError('Agent request failed')))\n\n if (response.status >= 200 && response.status < 300) {\n yield* Effect.sync(() =>\n request.onResponse?.({ status: response.status, headers: response.headers })\n )\n return response\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent request failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n })\n\nconst requestAgentRunResponse = (request: StreamAgentRunEventsRequest) =>\n Effect.gen(function* () {\n const endpoint = yield* agentRunEndpointWithStartIndexEffect(request.endpoint, request.startIndex)\n\n const client = yield* HttpClient.HttpClient\n const response = yield* client\n .execute(\n HttpClientRequest.get(endpoint).pipe(\n HttpClientRequest.setHeaders({ accept: 'application/x-ndjson' })\n )\n )\n .pipe(Effect.mapError(toHttpClientTransportError('Agent run request failed')))\n\n if (response.status >= 200 && response.status < 300) {\n yield* Effect.sync(() =>\n request.onResponse?.({ status: response.status, headers: response.headers })\n )\n return response\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent run request failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n })\n\nconst requestAgentRunHitlResponse = (request: StreamAgentRunHitlResponseEventsRequest) =>\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const httpRequest = yield* makeHttpRunHitlResponseRequest(request)\n const response = yield* client\n .execute(httpRequest)\n .pipe(Effect.mapError(toHttpClientTransportError('Agent run HITL request failed')))\n\n if (response.status >= 200 && response.status < 300) {\n yield* Effect.sync(() =>\n request.onResponse?.({ status: response.status, headers: response.headers })\n )\n return response\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent run HITL request failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n })\n\nconst cancelAgentRunEffect = (request: CancelAgentRunRequest) =>\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const response = yield* client\n .execute(HttpClientRequest.delete(request.endpoint))\n .pipe(Effect.mapError(toHttpClientTransportError('Agent run cancel failed')))\n\n if (response.status >= 200 && response.status < 300) {\n return\n }\n\n const message = yield* responseErrorMessage(response)\n\n return yield* Effect.fail(\n new AgentTransportError({\n message: `Agent run cancel failed (${response.status}): ${message}`,\n cause: response.status\n })\n )\n }).pipe(Effect.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nconst responseToLineStream = (response: HttpClientResponse.HttpClientResponse) =>\n response.stream.pipe(\n Stream.mapError(toHttpClientTransportError('Could not read agent response body')),\n Stream.decodeText,\n Stream.splitLines,\n Stream.map(line => line.trim()),\n Stream.filter(line => line.length > 0)\n )\n\nconst closeScope = (scope: Scope.Scope) => Scope.close(scope, Exit.succeed(undefined))\n\n// Protocol-terminal events finish the consumer stream, but HTTP bodies must still\n// drain to EOF so server runtimes do not observe client-side response aborts.\nconst responseToEventStream = (response: HttpClientResponse.HttpClientResponse) =>\n Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n const callbackScope = yield* Scope.Scope\n // Own the response stream in a scope that can outlive the consumer after a\n // terminal event; before terminal, consumer cancellation closes it.\n const responseScope = yield* Scope.make()\n const responseScopeClosed = yield* Ref.make(false)\n const terminalReached = yield* Ref.make(false)\n const pull = yield* Channel.toPullScoped(\n Stream.toChannel(responseToLineStream(response)),\n responseScope\n )\n const closeResponseScope = Effect.gen(function* () {\n const closed = yield* Ref.get(responseScopeClosed)\n\n if (!closed) {\n yield* Ref.set(responseScopeClosed, true)\n yield* closeScope(responseScope)\n }\n })\n const endQueue = Queue.end(queue).pipe(Effect.asVoid)\n const failQueue = (cause: Cause.Cause<AgentTransportError>) =>\n Queue.failCause(queue, cause).pipe(Effect.andThen(closeResponseScope), Effect.asVoid)\n const drainResponse = (): Effect.Effect<void, AgentTransportError> =>\n Pull.matchEffect(pull, {\n onSuccess: () => drainResponse(),\n onFailure: cause => Effect.failCause(cause),\n onDone: () => Effect.void\n })\n const startTerminalDrain = Effect.gen(function* () {\n yield* Ref.set(terminalReached, true)\n yield* endQueue\n yield* drainResponse().pipe(\n Effect.catch(() => Effect.void),\n Effect.ensuring(closeResponseScope),\n Effect.forkDetach({ startImmediately: true }),\n Effect.asVoid\n )\n })\n const emitLines = (lines: ReadonlyArray<string>): Effect.Effect<void, AgentTransportError> =>\n Effect.gen(function* () {\n for (const line of lines) {\n const event = yield* parseAgentEventLine(line)\n\n yield* Queue.offer(queue, event)\n\n if (isTerminalAgentEvent(event)) {\n yield* startTerminalDrain\n return\n }\n }\n\n yield* run()\n })\n const run = (): Effect.Effect<void, AgentTransportError> =>\n Pull.matchEffect(pull, {\n onSuccess: emitLines,\n onFailure: failQueue,\n onDone: () => endQueue.pipe(Effect.andThen(closeResponseScope))\n })\n\n yield* Scope.addFinalizer(\n callbackScope,\n Effect.gen(function* () {\n const terminal = yield* Ref.get(terminalReached)\n\n if (!terminal) {\n yield* closeResponseScope\n }\n })\n )\n\n yield* run().pipe(\n Effect.catch(error => Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid))\n )\n })\n )\n\nconst abortSignalError = (signal: AbortSignal) =>\n new AgentTransportError({\n message: 'Agent request aborted',\n cause: signal.reason\n })\n\nconst abortSignalEffect = (signal: AbortSignal) =>\n Effect.callback<never, AgentTransportError>(resume => {\n if (signal.aborted) {\n resume(Effect.fail(abortSignalError(signal)))\n return Effect.void\n }\n\n const listener = () => resume(Effect.fail(abortSignalError(signal)))\n signal.addEventListener('abort', listener, { once: true })\n\n return Effect.sync(() => signal.removeEventListener('abort', listener))\n })\n\nconst applyAbortSignal = <A, E, R>(\n stream: Stream.Stream<A, E, R>,\n signal: AbortSignal | undefined\n) => (signal === undefined ? stream : stream.pipe(Stream.interruptWhen(abortSignalEffect(signal))))\n\nexport const streamAgentEventStream = (request: StreamAgentEventsRequest) =>\n applyAbortSignal(\n Stream.fromEffect(requestAgentResponse(request)).pipe(Stream.flatMap(responseToEventStream)),\n request.signal\n ).pipe(Stream.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nexport const streamAgentRunEventStream = (request: StreamAgentRunEventsRequest) =>\n applyAbortSignal(\n Stream.fromEffect(requestAgentRunResponse(request)).pipe(Stream.flatMap(responseToEventStream)),\n request.signal\n ).pipe(Stream.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nexport const streamAgentRunHitlResponseEventStream = (\n request: StreamAgentRunHitlResponseEventsRequest\n) =>\n applyAbortSignal(\n Stream.fromEffect(requestAgentRunHitlResponse(request)).pipe(\n Stream.flatMap(responseToEventStream)\n ),\n request.signal\n ).pipe(Stream.provide(request.httpClientLayer ?? FetchHttpClient.layer))\n\nexport const streamToolApprovalResponseEventStream = (request: SubmitToolApprovalResponseRequest) =>\n streamAgentEventStream({ ...request, hitlResponses: [request.response] })\n\nexport const streamQuestionResponseEventStream = (request: SubmitQuestionResponseRequest) =>\n streamAgentEventStream({ ...request, hitlResponses: [request.response] })\n\ntype AgentEventChunkResult = {\n readonly count: number\n readonly terminal: boolean\n readonly idle: boolean\n}\n\ntype AgentEventPullResult =\n | { readonly _tag: 'Events'; readonly events: Iterable<AgentEventType> }\n | { readonly _tag: 'Done' }\n | { readonly _tag: 'Idle' }\n\ntype AgentRunContinuationInput = AgentRunContinuationOptions & {\n readonly endpoint: string | undefined\n readonly startIndex: number | undefined\n readonly countOffset: number\n readonly terminal: boolean\n readonly signal?: AbortSignal\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n}\n\nconst missingAgentRunContinuationEndpointError = () =>\n new AgentTransportError({\n message: 'Agent run continuation failed: missing x-workflow-run-id',\n cause: 'missing_run_id'\n })\n\nconst exhaustedAgentRunContinuationLimitError = (limit: number) =>\n new AgentTransportError({\n message: 'Agent run continuation limit reached before a terminal event',\n cause: { limit }\n })\n\nconst noProgressAgentRunContinuationError = (endpoint: string, startIndex: number | undefined) =>\n new AgentTransportError({\n message: 'Agent run continuation made no progress before a terminal event',\n cause: { endpoint, startIndex }\n })\n\nconst noProgressAgentRunContinuationDelayMs = 250\n\nconst idleReconnectLimitReachedError = (limit: number) =>\n new AgentTransportError({\n message: 'Agent run idle reconnect limit reached before a terminal event',\n cause: { limit }\n })\n\nconst missingIdleReconnectRunEndpointError = () =>\n new AgentTransportError({\n message: 'Agent run idle reconnect failed: missing x-workflow-run-id',\n cause: 'missing_run_id'\n })\n\nconst waitForAgentRunContinuationProgress = (signal: AbortSignal | undefined) => {\n const sleep = Effect.sleep(`${noProgressAgentRunContinuationDelayMs} millis`)\n\n return signal === undefined ? sleep : sleep.pipe(Effect.raceFirst(abortSignalEffect(signal)))\n}\n\nconst missingAgentRunTailIndexError = () =>\n new AgentTransportError({\n message: 'Agent run HITL response missing x-workflow-stream-tail-index',\n cause: 'missing_tail_index'\n })\n\nconst pullAgentEventChunk = <A extends Iterable<AgentEventType>>(\n pull: Pull.Pull<A, AgentTransportError, void, never>,\n idleReconnect: AgentRunIdleReconnectOptions | undefined\n) => {\n const pullEvents: Effect.Effect<AgentEventPullResult, AgentTransportError, never> =\n Pull.matchEffect(pull, {\n onSuccess: events => Effect.succeed({ _tag: 'Events', events }),\n onFailure: cause => Effect.failCause(cause),\n onDone: () => Effect.succeed({ _tag: 'Done' })\n })\n\n if (idleReconnect === undefined) return pullEvents\n\n return pullEvents.pipe(\n Effect.raceFirst(\n Effect.sleep(`${idleReconnect.idleTimeoutMs} millis`).pipe(\n Effect.map((): AgentEventPullResult => ({ _tag: 'Idle' }))\n )\n )\n )\n}\n\nconst drainAgentEventStream = (input: {\n readonly queue: Queue.Enqueue<AgentEventType>\n readonly stream: Stream.Stream<AgentEventType, AgentTransportError, never>\n readonly countOffset: number\n readonly idleReconnect?: AgentRunIdleReconnectOptions\n readonly onEvent?: StreamAgentEventHandler\n}): Effect.Effect<AgentEventChunkResult, AgentTransportError, Scope.Scope> =>\n Effect.gen(function* () {\n const scope = yield* Scope.make()\n const pull = yield* Channel.toPullScoped(Stream.toChannel(input.stream), scope)\n const run = (state: {\n readonly count: number\n readonly terminal: boolean\n }): Effect.Effect<AgentEventChunkResult, AgentTransportError, never> =>\n Effect.gen(function* () {\n const pulled = yield* pullAgentEventChunk(pull, input.idleReconnect)\n\n switch (pulled._tag) {\n case 'Idle':\n return { count: state.count, terminal: state.terminal, idle: true }\n case 'Done':\n return { count: state.count, terminal: state.terminal, idle: false }\n case 'Events': {\n let count = state.count\n let terminal = state.terminal\n\n for (const event of pulled.events) {\n count += 1\n terminal = terminal || isTerminalAgentEvent(event)\n yield* Effect.sync(() => input.onEvent?.(event, input.countOffset + count))\n yield* Queue.offer(input.queue, event)\n\n if (terminal) return { count, terminal, idle: false }\n }\n\n return yield* run({ count, terminal })\n }\n }\n })\n\n return yield* run({ count: 0, terminal: false }).pipe(Effect.ensuring(closeScope(scope)))\n })\n\nconst streamAgentRunContinuationChunk = (input: {\n readonly queue: Queue.Enqueue<AgentEventType>\n readonly endpoint: string\n readonly startIndex: number | undefined\n readonly countOffset: number\n readonly signal: AbortSignal | undefined\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>\n readonly onResponse?: (response: AgentHttpResponseInfo) => void\n readonly onEvent?: StreamAgentEventHandler\n readonly idleReconnect?: AgentRunIdleReconnectOptions\n}): Effect.Effect<AgentEventChunkResult, AgentTransportError, Scope.Scope> =>\n drainAgentEventStream({\n queue: input.queue,\n stream: streamAgentRunEventStream({\n endpoint: input.endpoint,\n startIndex: input.startIndex,\n signal: input.signal,\n httpClientLayer: input.httpClientLayer,\n onResponse: input.onResponse\n }),\n countOffset: input.countOffset,\n idleReconnect: input.idleReconnect,\n onEvent: input.onEvent\n })\n\nconst streamAgentRunContinuations = (\n input: AgentRunContinuationInput,\n queue: Queue.Enqueue<AgentEventType>\n): Effect.Effect<void, AgentTransportError, Scope.Scope> =>\n Effect.gen(function* () {\n let totalCount = input.countOffset\n let terminal = input.terminal\n let startIndex = input.startIndex\n const limit = yield* agentRunContinuationLimitEffect(input.continuationLimit)\n const idleReconnectLimit =\n input.idleReconnect === undefined\n ? undefined\n : yield* idleReconnectMaxAttemptsEffect(input.idleReconnect.maxAttempts)\n let idleReconnects = 0\n\n if (terminal) {\n return\n }\n\n if (input.endpoint === undefined) {\n return yield* Effect.fail(missingAgentRunContinuationEndpointError())\n }\n\n let continuation = 0\n while (continuation < limit) {\n const endpoint = input.endpoint\n const chunkStartIndex = startIndex\n\n const chunk = yield* streamAgentRunContinuationChunk({\n queue,\n endpoint,\n startIndex: chunkStartIndex,\n countOffset: totalCount,\n signal: input.signal,\n httpClientLayer: input.httpClientLayer,\n onResponse: input.onResponse,\n idleReconnect: input.idleReconnect,\n onEvent: input.onEvent\n })\n\n if (chunk.idle) {\n if (idleReconnectLimit !== undefined && idleReconnects >= idleReconnectLimit) {\n return yield* Effect.fail(idleReconnectLimitReachedError(idleReconnectLimit))\n }\n\n startIndex = nextAgentRunStartIndex(chunkStartIndex, chunk.count)\n totalCount += chunk.count\n idleReconnects += 1\n continue\n }\n\n continuation += 1\n\n if (chunk.count === 0 && !chunk.terminal) {\n if (continuation >= limit) {\n return yield* Effect.fail(noProgressAgentRunContinuationError(endpoint, startIndex))\n }\n\n yield* waitForAgentRunContinuationProgress(input.signal)\n continue\n }\n\n terminal = chunk.terminal\n startIndex = nextAgentRunStartIndex(chunkStartIndex, chunk.count)\n totalCount += chunk.count\n\n if (terminal) {\n return\n }\n }\n\n return yield* Effect.fail(exhaustedAgentRunContinuationLimitError(limit))\n })\n\nexport const streamAgentEventStreamUntilTerminal = (\n request: StreamAgentEventsUntilTerminalRequest\n) => {\n return Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n yield* agentRunContinuationLimitEffect(request.continuationLimit).pipe(Effect.asVoid)\n yield* validateAgentRunIdleReconnectEffect(request.idleReconnect)\n let runEndpoint: string | undefined\n let startIndex: number | undefined\n const firstChunk = yield* drainAgentEventStream({\n queue,\n stream: streamAgentEventStream({\n ...request,\n onResponse: response => {\n startIndex = agentRunStreamStartIndexFromHeaders(response.headers)\n const runId = agentRunIdFromHeaders(response.headers)\n if (runId !== undefined) {\n runEndpoint =\n request.runEndpoint?.(runId) ?? defaultAgentRunEndpoint(request.endpoint, runId)\n request.onRunId?.(runId)\n }\n\n request.onResponse?.(response)\n }\n }),\n countOffset: 0,\n idleReconnect: request.idleReconnect,\n onEvent: request.onEvent\n })\n\n if (firstChunk.idle && runEndpoint === undefined) {\n return yield* Effect.fail(missingIdleReconnectRunEndpointError())\n }\n\n yield* streamAgentRunContinuations(\n {\n endpoint: runEndpoint,\n startIndex: nextAgentRunStartIndex(startIndex, firstChunk.count),\n countOffset: firstChunk.count,\n terminal: firstChunk.terminal,\n continuationLimit: request.continuationLimit,\n idleReconnect: request.idleReconnect,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n onEvent: request.onEvent\n },\n queue\n )\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }).pipe(\n Effect.catch((error: AgentTransportError) =>\n Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid)\n )\n )\n )\n}\n\nexport const streamAgentRunEventStreamUntilTerminal = (\n request: StreamAgentRunEventsUntilTerminalRequest\n) => {\n return Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n yield* agentRunContinuationLimitEffect(request.continuationLimit).pipe(Effect.asVoid)\n yield* validateAgentRunIdleReconnectEffect(request.idleReconnect)\n yield* validateAgentRunStartIndexEffect(request.startIndex)\n const firstChunk = yield* streamAgentRunContinuationChunk({\n queue,\n endpoint: request.endpoint,\n startIndex: request.startIndex,\n countOffset: 0,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n idleReconnect: request.idleReconnect,\n onEvent: request.onEvent\n })\n\n yield* streamAgentRunContinuations(\n {\n endpoint: request.endpoint,\n startIndex: nextAgentRunStartIndex(request.startIndex, firstChunk.count),\n countOffset: firstChunk.count,\n terminal: firstChunk.terminal,\n continuationLimit: request.continuationLimit,\n idleReconnect: request.idleReconnect,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n onEvent: request.onEvent\n },\n queue\n )\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }).pipe(\n Effect.catch((error: AgentTransportError) =>\n Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid)\n )\n )\n )\n}\n\nconst streamAgentRunHitlResponseInitialChunk = (\n request: StreamAgentRunHitlResponseEventsUntilTerminalRequest,\n queue: Queue.Enqueue<AgentEventType>,\n setStartIndex: (startIndex: number | undefined) => void\n): Effect.Effect<AgentEventChunkResult, AgentTransportError, Scope.Scope> =>\n drainAgentEventStream({\n queue,\n stream: streamAgentRunHitlResponseEventStream({\n ...request,\n onResponse: response => {\n setStartIndex(agentRunStreamStartIndexFromHeaders(response.headers))\n request.onResponse?.(response)\n }\n }),\n countOffset: 0,\n idleReconnect: request.idleReconnect,\n onEvent: request.onEvent\n })\n\nexport const streamAgentRunHitlResponseEventStreamUntilTerminal = (\n request: StreamAgentRunHitlResponseEventsUntilTerminalRequest\n) => {\n return Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n yield* agentRunContinuationLimitEffect(request.continuationLimit).pipe(Effect.asVoid)\n yield* validateAgentRunIdleReconnectEffect(request.idleReconnect)\n let startIndex: number | undefined\n const firstChunk = yield* streamAgentRunHitlResponseInitialChunk(\n request,\n queue,\n nextStartIndex => {\n startIndex = nextStartIndex\n }\n )\n\n if (!firstChunk.terminal && startIndex === undefined) {\n return yield* Effect.fail(missingAgentRunTailIndexError())\n }\n\n yield* streamAgentRunContinuations(\n {\n endpoint: request.endpoint,\n startIndex: nextAgentRunStartIndex(startIndex, firstChunk.count),\n countOffset: firstChunk.count,\n terminal: firstChunk.terminal,\n continuationLimit: request.continuationLimit,\n idleReconnect: request.idleReconnect,\n signal: request.signal,\n httpClientLayer: request.httpClientLayer,\n onResponse: request.onResponse,\n onEvent: request.onEvent\n },\n queue\n )\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }).pipe(\n Effect.catch((error: AgentTransportError) =>\n Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid)\n )\n )\n )\n}\n\nconst isAgentEvent = (message: AgentWebSocketServerMessageType): message is AgentEventType =>\n message._tag !== 'SessionSnapshot'\n\nexport const streamCloudflareAgentEventStream = (request: StreamCloudflareAgentEventsRequest) =>\n applyAbortSignal(\n Stream.callback<AgentEventType, AgentTransportError>(queue =>\n Effect.gen(function* () {\n const socket = new WebSocket(request.webSocketUrl)\n let sentInput = false\n let settled = false\n const closeSocket = Effect.sync(() => {\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close(1000, 'done')\n }\n })\n const failQueue = (error: AgentTransportError) =>\n Effect.runFork(Queue.failCause(queue, Cause.fail(error)).pipe(Effect.asVoid))\n const handleMessage = (event: MessageEvent) => {\n if (typeof event.data !== 'string') {\n failQueue(toTransportError('Agent WebSocket returned binary data', event.data))\n return\n }\n\n Effect.runFork(\n parseWebSocketServerMessage(event.data).pipe(\n Effect.flatMap(message => {\n if (message._tag === 'SessionSnapshot') {\n return sentInput\n ? Effect.void\n : makeClientInputJson(request, message.revision).pipe(\n Effect.flatMap(body => Effect.sync(() => socket.send(body))),\n Effect.tap(() =>\n Effect.sync(() => {\n sentInput = true\n })\n )\n )\n }\n\n if (!isAgentEvent(message)) {\n return Effect.void\n }\n\n return Effect.gen(function* () {\n yield* Queue.offer(queue, message)\n\n if (isTerminalAgentEvent(message)) {\n yield* Effect.sync(() => {\n settled = true\n socket.close(1000, 'done')\n })\n yield* Queue.end(queue).pipe(Effect.asVoid)\n }\n })\n }),\n Effect.catch(error => Effect.sync(() => failQueue(error)))\n )\n )\n }\n const handleError = () => {\n failQueue(toTransportError('Agent WebSocket failed', request.webSocketUrl))\n }\n const handleClose = () => {\n if (!settled) {\n failQueue(toTransportError('Agent WebSocket closed', request.webSocketUrl))\n }\n }\n\n yield* Effect.acquireRelease(\n Effect.sync(() => {\n socket.addEventListener('message', handleMessage)\n socket.addEventListener('error', handleError)\n socket.addEventListener('close', handleClose)\n }),\n () =>\n Effect.sync(() => {\n socket.removeEventListener('message', handleMessage)\n socket.removeEventListener('error', handleError)\n socket.removeEventListener('close', handleClose)\n }).pipe(Effect.andThen(closeSocket))\n )\n })\n ),\n request.signal\n )\n\nexport const cancelAgentRun = (request: CancelAgentRunRequest) =>\n Effect.runPromise(cancelAgentRunEffect(request))\n\nexport const collectAgentEventsEffect = (request: StreamAgentEventsRequest) =>\n streamAgentEventStream(request).pipe(Stream.runCollect)\n\nexport const collectAgentEvents = (request: StreamAgentEventsRequest) =>\n Effect.runPromise(collectAgentEventsEffect(request)).then(events => Array.from(events))\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { TranscriptTokenEstimator } from "./estimator.mjs";
2
2
  import { CompactionResult } from "./window.mjs";
3
- import { AgentMessage } from "@yolk-sdk/agent/protocol";
4
3
  import { Layer } from "effect";
4
+ import { AgentMessage } from "@yolk-sdk/agent/protocol";
5
5
  import { ContextTransformer } from "@yolk-sdk/agent/loop";
6
6
 
7
7
  //#region src/compaction/transformer.d.ts
@@ -3,8 +3,8 @@ import { ContextTransformer } from "./services/context-transformer.mjs";
3
3
  import { LLMProvider } from "./services/llm-provider.mjs";
4
4
  import { LoopConfig } from "./services/loop-config.mjs";
5
5
  import { ToolExecutor } from "./services/tool-executor.mjs";
6
- import { AgentEvent, AgentMessage, AgentModelCapabilities, AgentReasoningEffort, AgentUsage, HitlResponse, ToolCall, ToolDef } from "@yolk-sdk/agent/protocol";
7
6
  import { Stream } from "effect";
7
+ import { AgentEvent, AgentMessage, AgentModelCapabilities, AgentReasoningEffort, AgentUsage, HitlResponse, ToolCall, ToolDef } from "@yolk-sdk/agent/protocol";
8
8
 
9
9
  //#region src/loop/run.d.ts
10
10
  type AgentLoopRunId = string;