@alexkroman1/aai 0.8.2 → 0.8.4

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 (166) hide show
  1. package/dist/cli/tsconfig.tsbuildinfo +1 -0
  2. package/dist/cli.js +1368 -1904
  3. package/dist/sdk/_mock_ws.js +2 -2
  4. package/dist/sdk/_mock_ws.js.map +1 -1
  5. package/dist/sdk/_render_check.d.ts.map +1 -1
  6. package/dist/sdk/_render_check.js +30 -0
  7. package/dist/sdk/_render_check.js.map +1 -1
  8. package/dist/sdk/_utils.d.ts +4 -0
  9. package/dist/sdk/_utils.d.ts.map +1 -0
  10. package/dist/sdk/_utils.js +7 -0
  11. package/dist/sdk/_utils.js.map +1 -0
  12. package/dist/sdk/builtin_tools.d.ts +35 -11
  13. package/dist/sdk/builtin_tools.d.ts.map +1 -1
  14. package/dist/sdk/builtin_tools.js +118 -76
  15. package/dist/sdk/builtin_tools.js.map +1 -1
  16. package/dist/sdk/capnweb.d.ts +76 -47
  17. package/dist/sdk/capnweb.d.ts.map +1 -1
  18. package/dist/sdk/capnweb.js +99 -242
  19. package/dist/sdk/capnweb.js.map +1 -1
  20. package/dist/sdk/direct_executor.d.ts.map +1 -1
  21. package/dist/sdk/direct_executor.js +0 -2
  22. package/dist/sdk/direct_executor.js.map +1 -1
  23. package/dist/sdk/host.d.ts +59 -0
  24. package/dist/sdk/host.d.ts.map +1 -0
  25. package/dist/sdk/host.js +131 -0
  26. package/dist/sdk/host.js.map +1 -0
  27. package/dist/sdk/mod.d.ts +2 -4
  28. package/dist/sdk/mod.d.ts.map +1 -1
  29. package/dist/sdk/mod.js +2 -3
  30. package/dist/sdk/mod.js.map +1 -1
  31. package/dist/sdk/protocol.d.ts +33 -135
  32. package/dist/sdk/protocol.d.ts.map +1 -1
  33. package/dist/sdk/protocol.js +49 -51
  34. package/dist/sdk/protocol.js.map +1 -1
  35. package/dist/sdk/runtime.d.ts +0 -1
  36. package/dist/sdk/runtime.d.ts.map +1 -1
  37. package/dist/sdk/runtime.js +5 -24
  38. package/dist/sdk/runtime.js.map +1 -1
  39. package/dist/sdk/s2s.d.ts +14 -3
  40. package/dist/sdk/s2s.d.ts.map +1 -1
  41. package/dist/sdk/s2s.js +72 -113
  42. package/dist/sdk/s2s.js.map +1 -1
  43. package/dist/sdk/server.d.ts +1 -1
  44. package/dist/sdk/server.d.ts.map +1 -1
  45. package/dist/sdk/server.js +51 -92
  46. package/dist/sdk/server.js.map +1 -1
  47. package/dist/sdk/session.d.ts +5 -1
  48. package/dist/sdk/session.d.ts.map +1 -1
  49. package/dist/sdk/session.js +131 -137
  50. package/dist/sdk/session.js.map +1 -1
  51. package/dist/sdk/tsconfig.tsbuildinfo +1 -0
  52. package/dist/sdk/types.d.ts +30 -3
  53. package/dist/sdk/types.d.ts.map +1 -1
  54. package/dist/sdk/types.js +37 -0
  55. package/dist/sdk/types.js.map +1 -1
  56. package/dist/sdk/winterc_server.d.ts.map +1 -1
  57. package/dist/sdk/winterc_server.js +10 -15
  58. package/dist/sdk/winterc_server.js.map +1 -1
  59. package/dist/sdk/worker_entry.d.ts +3 -11
  60. package/dist/sdk/worker_entry.d.ts.map +1 -1
  61. package/dist/sdk/worker_entry.js +8 -18
  62. package/dist/sdk/worker_entry.js.map +1 -1
  63. package/dist/sdk/worker_shim.d.ts +5 -6
  64. package/dist/sdk/worker_shim.d.ts.map +1 -1
  65. package/dist/sdk/worker_shim.js +93 -136
  66. package/dist/sdk/worker_shim.js.map +1 -1
  67. package/dist/sdk/ws_handler.d.ts +1 -1
  68. package/dist/sdk/ws_handler.d.ts.map +1 -1
  69. package/dist/sdk/ws_handler.js +13 -22
  70. package/dist/sdk/ws_handler.js.map +1 -1
  71. package/dist/ui/_cn.d.ts +5 -0
  72. package/dist/ui/_cn.d.ts.map +1 -0
  73. package/dist/ui/_cn.js +22 -0
  74. package/dist/ui/_cn.js.map +1 -0
  75. package/dist/ui/_components/app.d.ts +3 -1
  76. package/dist/ui/_components/app.d.ts.map +1 -1
  77. package/dist/ui/_components/app.js +2 -2
  78. package/dist/ui/_components/app.js.map +1 -1
  79. package/dist/ui/_components/button.d.ts +11 -0
  80. package/dist/ui/_components/button.d.ts.map +1 -0
  81. package/dist/ui/_components/button.js +17 -0
  82. package/dist/ui/_components/button.js.map +1 -0
  83. package/dist/ui/_components/chat_view.d.ts +3 -1
  84. package/dist/ui/_components/chat_view.d.ts.map +1 -1
  85. package/dist/ui/_components/chat_view.js +4 -2
  86. package/dist/ui/_components/chat_view.js.map +1 -1
  87. package/dist/ui/_components/controls.d.ts +3 -1
  88. package/dist/ui/_components/controls.d.ts.map +1 -1
  89. package/dist/ui/_components/controls.js +4 -5
  90. package/dist/ui/_components/controls.js.map +1 -1
  91. package/dist/ui/_components/error_banner.d.ts +2 -1
  92. package/dist/ui/_components/error_banner.d.ts.map +1 -1
  93. package/dist/ui/_components/error_banner.js +3 -2
  94. package/dist/ui/_components/error_banner.js.map +1 -1
  95. package/dist/ui/_components/message_bubble.d.ts +2 -1
  96. package/dist/ui/_components/message_bubble.d.ts.map +1 -1
  97. package/dist/ui/_components/message_bubble.js +5 -3
  98. package/dist/ui/_components/message_bubble.js.map +1 -1
  99. package/dist/ui/_components/message_list.d.ts +3 -1
  100. package/dist/ui/_components/message_list.d.ts.map +1 -1
  101. package/dist/ui/_components/message_list.js +7 -15
  102. package/dist/ui/_components/message_list.js.map +1 -1
  103. package/dist/ui/_components/sidebar_layout.d.ts +2 -1
  104. package/dist/ui/_components/sidebar_layout.d.ts.map +1 -1
  105. package/dist/ui/_components/sidebar_layout.js +5 -7
  106. package/dist/ui/_components/sidebar_layout.js.map +1 -1
  107. package/dist/ui/_components/start_screen.d.ts +2 -1
  108. package/dist/ui/_components/start_screen.d.ts.map +1 -1
  109. package/dist/ui/_components/start_screen.js +5 -2
  110. package/dist/ui/_components/start_screen.js.map +1 -1
  111. package/dist/ui/_components/state_indicator.d.ts +2 -1
  112. package/dist/ui/_components/state_indicator.d.ts.map +1 -1
  113. package/dist/ui/_components/state_indicator.js +3 -2
  114. package/dist/ui/_components/state_indicator.js.map +1 -1
  115. package/dist/ui/_components/thinking_indicator.d.ts +3 -1
  116. package/dist/ui/_components/thinking_indicator.d.ts.map +1 -1
  117. package/dist/ui/_components/thinking_indicator.js +4 -2
  118. package/dist/ui/_components/thinking_indicator.js.map +1 -1
  119. package/dist/ui/_components/tool_call_block.d.ts +2 -1
  120. package/dist/ui/_components/tool_call_block.d.ts.map +1 -1
  121. package/dist/ui/_components/tool_call_block.js +13 -25
  122. package/dist/ui/_components/tool_call_block.js.map +1 -1
  123. package/dist/ui/_components/transcript.d.ts +2 -1
  124. package/dist/ui/_components/transcript.d.ts.map +1 -1
  125. package/dist/ui/_components/transcript.js +3 -2
  126. package/dist/ui/_components/transcript.js.map +1 -1
  127. package/dist/ui/_jsdom_setup.d.ts +1 -0
  128. package/dist/ui/_jsdom_setup.d.ts.map +1 -0
  129. package/dist/ui/_jsdom_setup.js +6 -0
  130. package/dist/ui/_jsdom_setup.js.map +1 -0
  131. package/dist/ui/audio.d.ts.map +1 -1
  132. package/dist/ui/audio.js +4 -4
  133. package/dist/ui/audio.js.map +1 -1
  134. package/dist/ui/components.d.ts +13 -55
  135. package/dist/ui/components.d.ts.map +1 -1
  136. package/dist/ui/components.js +13 -42
  137. package/dist/ui/components.js.map +1 -1
  138. package/dist/ui/components_mod.d.ts +14 -3
  139. package/dist/ui/components_mod.d.ts.map +1 -1
  140. package/dist/ui/components_mod.js +14 -3
  141. package/dist/ui/components_mod.js.map +1 -1
  142. package/dist/ui/mod.d.ts +1 -8
  143. package/dist/ui/mod.d.ts.map +1 -1
  144. package/dist/ui/mod.js +1 -5
  145. package/dist/ui/mod.js.map +1 -1
  146. package/dist/ui/mount.d.ts +1 -1
  147. package/dist/ui/mount.d.ts.map +1 -1
  148. package/dist/ui/mount.js +1 -0
  149. package/dist/ui/mount.js.map +1 -1
  150. package/dist/ui/session.d.ts +0 -2
  151. package/dist/ui/session.d.ts.map +1 -1
  152. package/dist/ui/session.js +9 -6
  153. package/dist/ui/session.js.map +1 -1
  154. package/dist/ui/signals.d.ts +8 -3
  155. package/dist/ui/signals.d.ts.map +1 -1
  156. package/dist/ui/signals.js +22 -11
  157. package/dist/ui/signals.js.map +1 -1
  158. package/dist/ui/tsconfig.tsbuildinfo +1 -0
  159. package/dist/ui/worklets/playback-processor.js +3 -3
  160. package/package.json +39 -16
  161. package/templates/_shared/CLAUDE.md +50 -30
  162. package/templates/_shared/global.d.ts +1 -0
  163. package/templates/_shared/package.json +2 -1
  164. package/templates/dispatch-center/agent.ts +85 -397
  165. package/templates/solo-rpg/agent.ts +1240 -0
  166. package/templates/solo-rpg/client.tsx +698 -0
@@ -8,6 +8,7 @@
8
8
  *
9
9
  * @module
10
10
  */
11
+ import { Hono } from "hono";
11
12
  import { createDirectExecutor } from "./direct_executor.js";
12
13
  import { createMemoryKv } from "./kv.js";
13
14
  import { AUDIO_FORMAT } from "./protocol.js";
@@ -40,23 +41,17 @@ export function createWintercServer(options) {
40
41
  sampleRate: s2sConfig.inputSampleRate,
41
42
  ttsSampleRate: s2sConfig.outputSampleRate,
42
43
  };
44
+ const app = new Hono();
45
+ app.get("/health", (c) => c.json({ status: "ok", name: agent.name }));
46
+ app.get("/", (c) => {
47
+ if (clientHtml) {
48
+ return c.html(clientHtml);
49
+ }
50
+ return c.html(`<!DOCTYPE html><html><body><h1>${agent.name}</h1><p>Agent server running.</p></body></html>`);
51
+ });
43
52
  return {
44
53
  async fetch(request) {
45
- const url = new URL(request.url);
46
- if (url.pathname === "/health") {
47
- return new Response(JSON.stringify({ status: "ok", name: agent.name }), {
48
- headers: { "Content-Type": "application/json" },
49
- });
50
- }
51
- if (url.pathname === "/" && clientHtml) {
52
- return new Response(clientHtml, {
53
- headers: { "Content-Type": "text/html" },
54
- });
55
- }
56
- if (url.pathname === "/") {
57
- return new Response(`<!DOCTYPE html><html><body><h1>${agent.name}</h1><p>Agent server running.</p></body></html>`, { headers: { "Content-Type": "text/html" } });
58
- }
59
- return new Response("Not Found", { status: 404 });
54
+ return app.fetch(request);
60
55
  },
61
56
  handleWebSocket(ws, wsOpts) {
62
57
  wireSessionSocket(ws, {
@@ -1 +1 @@
1
- {"version":3,"file":"winterc_server.js","sourceRoot":"","sources":["../../sdk/winterc_server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"winterc_server.js","sourceRoot":"","sources":["../../sdk/winterc_server.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAyB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAkC3E;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,EACJ,KAAK,EACL,GAAG,EACH,EAAE,GAAG,cAAc,EAAE,EACrB,MAAM,GAAG,uBAAuB,EAAE,EAClC,YAAY,EACZ,UAAU,EACV,MAAM,GAAG,aAAa,EACtB,OAAO,GAAG,WAAW,EACrB,SAAS,GAAG,kBAAkB,GAC/B,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QACpC,KAAK;QACL,GAAG;QACH,EAAE;QACF,MAAM;QACN,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,MAAM;QACN,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE5C,MAAM,WAAW,GAAG;QAClB,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE,SAAS,CAAC,eAAe;QACrC,aAAa,EAAE,SAAS,CAAC,gBAAgB;KAC1C,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CACX,kCAAkC,KAAK,CAAC,IAAI,iDAAiD,CAC9F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,OAAgB;YAC1B,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,eAAe,CAAC,EAAoB,EAAE,MAAmC;YACvE,iBAAiB,CAAC,EAAE,EAAE;gBACpB,QAAQ;gBACR,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC7B,QAAQ,CAAC,aAAa,CAAC;oBACrB,EAAE,EAAE,GAAG;oBACP,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,MAAM;oBACN,YAAY,EAAE,MAAM,EAAE,YAAY,IAAI,KAAK;iBAC5C,CAAC;gBACJ,WAAW;gBACX,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,KAAK;YACT,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -6,13 +6,6 @@
6
6
  import type { Kv } from "./kv.ts";
7
7
  import type { Message, ToolDef } from "./types.ts";
8
8
  import type { VectorStore } from "./vector.ts";
9
- /**
10
- * Maximum time in milliseconds a tool handler may run before being aborted.
11
- *
12
- * If a tool's `execute` function exceeds this duration, it is cancelled via
13
- * `AbortSignal.timeout` and an error message is returned to the LLM.
14
- */
15
- export declare const TOOL_HANDLER_TIMEOUT = 30000;
16
9
  /**
17
10
  * Function signature for executing a tool by name.
18
11
  *
@@ -27,19 +20,18 @@ export type ExecuteTool = (name: string, args: Readonly<Record<string, unknown>>
27
20
  export type ExecuteToolCallOptions = {
28
21
  tool: ToolDef;
29
22
  env: Readonly<Record<string, string>>;
30
- sessionId?: string | undefined;
31
23
  state?: Record<string, unknown>;
32
24
  kv?: Kv | undefined;
33
25
  vector?: VectorStore | undefined;
34
26
  messages?: readonly Message[] | undefined;
35
27
  };
36
28
  /**
37
- * Execute a tool call with argument validation, timeout, and error handling.
29
+ * Execute a tool call with argument validation and error handling.
38
30
  *
39
31
  * Validates the provided arguments against the tool's Zod parameter schema,
40
32
  * constructs a {@linkcode ToolContext}, invokes the tool's `execute` function,
41
- * and serializes the result to a string. Errors and timeouts are caught and
42
- * returned as `"Error: ..."` strings rather than thrown.
33
+ * and serializes the result to a string. Errors are caught and returned as
34
+ * `"Error: ..."` strings rather than thrown.
43
35
  *
44
36
  * @param name - The name of the tool being invoked.
45
37
  * @param args - Raw arguments from the LLM to validate and pass to the tool.
@@ -1 +1 @@
1
- {"version":3,"file":"worker_entry.d.ts","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,OAAO,EAAe,OAAO,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,KAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;AAqBrB,+CAA+C;AAC/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
1
+ {"version":3,"file":"worker_entry.d.ts","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,OAAO,EAAe,OAAO,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,KAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;AAoBrB,+CAA+C;AAC/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
@@ -5,21 +5,15 @@
5
5
  * @module
6
6
  */
7
7
  import { EMPTY_PARAMS } from "./_internal_types.js";
8
+ import { errorMessage } from "./_utils.js";
9
+ import { TOOL_EXECUTION_TIMEOUT_MS } from "./protocol.js";
8
10
  /** Yield to the event loop so pending I/O (e.g. WebSocket frames) can be processed. */
9
11
  const yieldTick = () => new Promise((r) => setTimeout(r, 0));
10
- /**
11
- * Maximum time in milliseconds a tool handler may run before being aborted.
12
- *
13
- * If a tool's `execute` function exceeds this duration, it is cancelled via
14
- * `AbortSignal.timeout` and an error message is returned to the LLM.
15
- */
16
- export const TOOL_HANDLER_TIMEOUT = 30_000;
17
12
  function buildToolContext(opts) {
18
- const { env, sessionId, state, kv, vector, messages } = opts;
13
+ const { env, state, kv, vector, messages } = opts;
19
14
  return {
20
- sessionId: sessionId ?? "",
21
15
  env: { ...env },
22
- abortSignal: AbortSignal.timeout(TOOL_HANDLER_TIMEOUT),
16
+ abortSignal: AbortSignal.timeout(TOOL_EXECUTION_TIMEOUT_MS),
23
17
  state: state ?? {},
24
18
  get kv() {
25
19
  if (!kv)
@@ -35,12 +29,12 @@ function buildToolContext(opts) {
35
29
  };
36
30
  }
37
31
  /**
38
- * Execute a tool call with argument validation, timeout, and error handling.
32
+ * Execute a tool call with argument validation and error handling.
39
33
  *
40
34
  * Validates the provided arguments against the tool's Zod parameter schema,
41
35
  * constructs a {@linkcode ToolContext}, invokes the tool's `execute` function,
42
- * and serializes the result to a string. Errors and timeouts are caught and
43
- * returned as `"Error: ..."` strings rather than thrown.
36
+ * and serializes the result to a string. Errors are caught and returned as
37
+ * `"Error: ..."` strings rather than thrown.
44
38
  *
45
39
  * @param name - The name of the tool being invoked.
46
40
  * @param args - Raw arguments from the LLM to validate and pass to the tool.
@@ -67,12 +61,8 @@ export async function executeToolCall(name, args, options) {
67
61
  return typeof result === "string" ? result : JSON.stringify(result);
68
62
  }
69
63
  catch (err) {
70
- if (err instanceof DOMException && err.name === "TimeoutError") {
71
- console.warn(`[tool-executor] Tool execution timed out: ${name}`);
72
- return `Error: Tool "${name}" timed out after ${TOOL_HANDLER_TIMEOUT}ms`;
73
- }
74
64
  console.warn(`[tool-executor] Tool execution failed: ${name}`, err);
75
- return `Error: ${err instanceof Error ? err.message : String(err)}`;
65
+ return `Error: ${errorMessage(err)}`;
76
66
  }
77
67
  }
78
68
  //# sourceMappingURL=worker_entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker_entry.js","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker_entry.js","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAI1D,uFAAuF;AACvF,MAAM,SAAS,GAAG,GAAkB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAkB5E,SAAS,gBAAgB,CAAC,IAA4B;IACpD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAClD,OAAO;QACL,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE;QACf,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC3D,KAAK,EAAE,KAAK,IAAI,EAAE;QAClB,IAAI,EAAE;YACJ,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,MAAM;YACR,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,QAAQ,EAAE,QAAQ,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC;AAYD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,IAAuC,EACvC,OAA+B;IAE/B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACvE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,sCAAsC,IAAI,MAAM,MAAM,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,EAAE,CAAC;QAClB,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;QAClC,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,0CAA0C,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QACpE,OAAO,UAAU,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -2,9 +2,9 @@
2
2
  * Sandboxed worker entry point for platform mode.
3
3
  *
4
4
  * Called from the bundled `worker.js` inside a Deno Worker with all
5
- * permissions false. Monkeypatches `globalThis.fetch` to proxy through
6
- * capnweb RPC, creates capnweb-backed KV/vector/WebSocket, and delegates
7
- * to a {@linkcode WintercServer} for session management.
5
+ * permissions false. Sets up capnweb RPC to proxy capabilities through
6
+ * the host, and delegates to a {@linkcode WintercServer} for session
7
+ * management.
8
8
  *
9
9
  * @module
10
10
  */
@@ -12,9 +12,8 @@ import type { AgentDef } from "./types.ts";
12
12
  /**
13
13
  * Initialize a sandboxed worker with the given agent definition.
14
14
  *
15
- * Sets up capnweb RPC, monkeypatches fetch, creates capability stubs,
16
- * and waits for the host to send initialization data before creating
17
- * the WinterTC server.
15
+ * Sets up capnweb RPC, creates capability stubs backed by the host,
16
+ * and waits for initialization before creating the WinterTC server.
18
17
  */
19
18
  export declare function initWorker(agent: AgentDef): void;
20
19
  //# sourceMappingURL=worker_shim.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker_shim.d.ts","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAWH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwC3C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CA4JhD"}
1
+ {"version":3,"file":"worker_shim.d.ts","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAuE3C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAsFhD"}
@@ -3,125 +3,100 @@
3
3
  * Sandboxed worker entry point for platform mode.
4
4
  *
5
5
  * Called from the bundled `worker.js` inside a Deno Worker with all
6
- * permissions false. Monkeypatches `globalThis.fetch` to proxy through
7
- * capnweb RPC, creates capnweb-backed KV/vector/WebSocket, and delegates
8
- * to a {@linkcode WintercServer} for session management.
6
+ * permissions false. Sets up capnweb RPC to proxy capabilities through
7
+ * the host, and delegates to a {@linkcode WintercServer} for session
8
+ * management.
9
9
  *
10
10
  * @module
11
11
  */
12
- import { z } from "zod";
13
- import { BridgedWebSocket, CapnwebEndpoint, createBridgedS2sWebSocket, } from "./capnweb.js";
12
+ import { BridgedWebSocket, createRpcSession, isTransferMessage, RpcTarget, sendTransfer, } from "./capnweb.js";
14
13
  import { createWintercServer } from "./winterc_server.js";
15
- // ─── Zod schemas for RPC results ────────────────────────────────────────────
16
- const FetchResultSchema = z.object({
17
- status: z.number(),
18
- headers: z.record(z.string(), z.string()),
19
- body: z.string(),
20
- });
21
- const KvEntrySchema = z.object({
22
- key: z.string(),
23
- value: z.unknown(),
24
- });
25
- const VectorEntrySchema = z.object({
26
- id: z.string(),
27
- score: z.number(),
28
- data: z.string().optional(),
29
- metadata: z.record(z.string(), z.unknown()).optional(),
30
- });
31
- const WorkerInitArgsSchema = z.tuple([z.record(z.string(), z.string())]);
32
- const WorkerFetchArgsSchema = z.tuple([
33
- z.string(),
34
- z.string(),
35
- z.record(z.string(), z.string()),
36
- z.string().optional(),
37
- ]);
38
- const WorkerWsArgsSchema = z.tuple([z.boolean().optional()]);
14
+ /**
15
+ * RPC service exposed by the worker to the host.
16
+ * Methods are callable via capnweb RPC stubs.
17
+ */
18
+ class WorkerService extends RpcTarget {
19
+ #agent;
20
+ #kv;
21
+ #vector;
22
+ #vectorSearch;
23
+ #createWebSocket;
24
+ #wintercServer = null;
25
+ constructor(agent, kv, vector, vectorSearch, createWebSocket) {
26
+ super();
27
+ this.#agent = agent;
28
+ this.#kv = kv;
29
+ this.#vector = vector;
30
+ this.#vectorSearch = vectorSearch;
31
+ this.#createWebSocket = createWebSocket;
32
+ }
33
+ /** Initialize the worker with environment variables. Creates the WinterTC server. */
34
+ init(env) {
35
+ this.#wintercServer = createWintercServer({
36
+ agent: this.#agent,
37
+ env,
38
+ kv: this.#kv,
39
+ vector: this.#vector,
40
+ vectorSearch: this.#vectorSearch,
41
+ createWebSocket: this.#createWebSocket,
42
+ });
43
+ return "ok";
44
+ }
45
+ /** Handle an HTTP request forwarded from the host. */
46
+ async workerFetch(url, method, headers, body) {
47
+ if (!this.#wintercServer)
48
+ throw new Error("Worker not initialized");
49
+ const request = new Request(url, { method, headers, ...(body ? { body } : {}) });
50
+ const response = await this.#wintercServer.fetch(request);
51
+ return {
52
+ status: response.status,
53
+ headers: Object.fromEntries(response.headers),
54
+ body: await response.text(),
55
+ };
56
+ }
57
+ /** Handle a new WebSocket client connection (called via port transfer, not RPC). */
58
+ handleWebSocket(port, skipGreeting) {
59
+ if (!this.#wintercServer)
60
+ throw new Error("Worker not initialized");
61
+ const ws = new BridgedWebSocket(port);
62
+ this.#wintercServer.handleWebSocket(ws, { skipGreeting });
63
+ }
64
+ }
39
65
  /**
40
66
  * Initialize a sandboxed worker with the given agent definition.
41
67
  *
42
- * Sets up capnweb RPC, monkeypatches fetch, creates capability stubs,
43
- * and waits for the host to send initialization data before creating
44
- * the WinterTC server.
68
+ * Sets up capnweb RPC, creates capability stubs backed by the host,
69
+ * and waits for initialization before creating the WinterTC server.
45
70
  */
46
71
  export function initWorker(agent) {
47
- const endpoint = new CapnwebEndpoint(self);
48
- // ─── Monkeypatch fetch to proxy through host ────────────────────────────
49
- globalThis.fetch = async (input, init) => {
50
- let url;
51
- let method = "GET";
52
- let headers = {};
53
- let body;
54
- if (typeof input === "string") {
55
- url = input;
56
- }
57
- else if (input instanceof URL) {
58
- url = input.toString();
59
- }
60
- else {
61
- url = input.url;
62
- method = input.method;
63
- headers = Object.fromEntries(input.headers);
64
- if (input.body) {
65
- body = await new Response(input.body).text();
66
- }
67
- }
68
- if (init?.method)
69
- method = init.method;
70
- if (init?.headers) {
71
- headers = Object.fromEntries(new Headers(init.headers));
72
- }
73
- if (init?.body !== undefined) {
74
- body = typeof init.body === "string" ? init.body : String(init.body);
75
- }
76
- const raw = await endpoint.call("host.fetch", [url, method, headers, body]);
77
- const result = FetchResultSchema.parse(raw);
78
- return new Response(result.body, {
79
- status: result.status,
80
- headers: result.headers,
81
- });
82
- };
72
+ // biome-ignore lint/suspicious/noExplicitAny: capnweb stubs are dynamically typed proxies
73
+ let hostStub;
83
74
  // ─── Capnweb-backed KV ─────────────────────────────────────────────────
84
75
  const kv = {
85
76
  async get(key) {
86
- const raw = await endpoint.call("host.kv", ["get", key]);
87
- if (raw === null || raw === undefined)
88
- return null;
89
- return raw;
77
+ const raw = await hostStub.kvGet(key);
78
+ return raw == null ? null : raw;
90
79
  },
91
80
  async set(key, value, options) {
92
- await endpoint.call("host.kv", ["set", key, value, options?.expireIn]);
81
+ await hostStub.kvSet(key, value, options);
93
82
  },
94
83
  async delete(key) {
95
- await endpoint.call("host.kv", ["del", key]);
84
+ await hostStub.kvDel(key);
96
85
  },
97
86
  async list(prefix, options) {
98
- const raw = await endpoint.call("host.kv", [
99
- "list",
100
- prefix,
101
- options?.limit,
102
- options?.reverse,
103
- ]);
104
- const entries = z.array(KvEntrySchema).parse(raw);
105
- return entries;
87
+ return (await hostStub.kvList(prefix, options));
106
88
  },
107
89
  };
108
90
  // ─── Capnweb-backed vector store ───────────────────────────────────────
109
91
  const vector = {
110
92
  async upsert(id, data, metadata) {
111
- await endpoint.call("host.vector", ["upsert", id, data, metadata]);
93
+ await hostStub.vecUpsert(id, data, metadata);
112
94
  },
113
95
  async query(text, options) {
114
- const raw = await endpoint.call("host.vector", [
115
- "query",
116
- text,
117
- options?.topK,
118
- options?.filter,
119
- ]);
120
- return z.array(VectorEntrySchema).parse(raw);
96
+ return (await hostStub.vecQuery(text, options));
121
97
  },
122
98
  async remove(ids) {
123
- const idArray = Array.isArray(ids) ? ids : [ids];
124
- await endpoint.call("host.vector", ["remove", idArray]);
99
+ await hostStub.vecRemove(Array.isArray(ids) ? ids : [ids]);
125
100
  },
126
101
  };
127
102
  const vectorSearch = async (query, topK) => {
@@ -133,52 +108,34 @@ export function initWorker(agent) {
133
108
  // ─── Capnweb-backed S2S WebSocket factory ──────────────────────────────
134
109
  const createWebSocket = (url, opts) => {
135
110
  const { port1, port2 } = new MessageChannel();
136
- endpoint.notify("host.createWebSocket", [url, JSON.stringify(opts.headers)], [port2]);
137
- return createBridgedS2sWebSocket(port1);
111
+ sendTransfer(self, { _t: "createWs", url, headers: JSON.stringify(opts.headers) }, [port2]);
112
+ return new BridgedWebSocket(port1);
138
113
  };
139
- // ─── RPC handlers ──────────────────────────────────────────────────────
140
- let wintercServer = null;
141
- // Handle init from host — creates the WinterTC server
142
- endpoint.handle("worker.init", (args) => {
143
- const [env] = WorkerInitArgsSchema.parse(args);
144
- wintercServer = createWintercServer({
145
- agent,
146
- env,
147
- kv,
148
- vector,
149
- vectorSearch,
150
- createWebSocket,
151
- });
152
- return "ok";
153
- });
154
- // Handle HTTP request forwarding
155
- endpoint.handle("worker.fetch", async (args) => {
156
- if (!wintercServer)
157
- throw new Error("Worker not initialized");
158
- const [url, method, headers, body] = WorkerFetchArgsSchema.parse(args);
159
- const request = new Request(url, {
160
- method,
161
- headers,
162
- ...(body ? { body } : {}),
114
+ // ─── Monkeypatch fetch to proxy through host ──────────────────────────
115
+ globalThis.fetch = async (input, init) => {
116
+ const request = new Request(input, init);
117
+ const body = request.body ? await request.text() : undefined;
118
+ const result = await hostStub.hostFetch(request.url, request.method, Object.fromEntries(request.headers), body);
119
+ return new Response(result.body, {
120
+ status: result.status,
121
+ headers: result.headers,
163
122
  });
164
- const response = await wintercServer.fetch(request);
165
- return {
166
- status: response.status,
167
- headers: Object.fromEntries(response.headers),
168
- body: await response.text(),
169
- };
170
- });
171
- // Handle new WebSocket client connection — port transferred from host
172
- endpoint.handle("worker.handleWebSocket", (_args, ports) => {
173
- if (!wintercServer)
174
- throw new Error("Worker not initialized");
175
- const [skipGreeting] = WorkerWsArgsSchema.parse(_args);
176
- const port = ports[0];
177
- if (!port)
178
- throw new Error("No port transferred");
179
- const ws = new BridgedWebSocket(port);
180
- wintercServer.handleWebSocket(ws, { skipGreeting: skipGreeting ?? false });
181
- return "ok";
123
+ };
124
+ // ─── Create worker service and RPC session ────────────────────────────
125
+ const workerService = new WorkerService(agent, kv, vector, vectorSearch, createWebSocket);
126
+ hostStub = createRpcSession({
127
+ port: self,
128
+ localMain: workerService,
129
+ onTransfer(data, ports) {
130
+ if (!isTransferMessage(data))
131
+ return;
132
+ if (data._t === "handleWs") {
133
+ const transferPort = ports[0];
134
+ if (!transferPort)
135
+ throw new Error("No port transferred for WebSocket");
136
+ workerService.handleWebSocket(transferPort, data.skipGreeting);
137
+ }
138
+ },
182
139
  });
183
140
  }
184
141
  //# sourceMappingURL=worker_shim.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker_shim.js","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker_shim.js","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * WebSocket session lifecycle handler.
3
3
  *
4
4
  * Cross-runtime: accepts a Logger parameter instead of importing `@std/log`.
5
- * Audio validation is inlined (no dependency on server-side schemas).
5
+ * Audio validation is handled at the host transport layer (see host.ts).
6
6
  *
7
7
  * @module
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ws_handler.d.ts","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;IACpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAAkC,GAAG,IAAI,CAAC;CACpF,CAAC;AAYF,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IAClE,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IACzB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAiHF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAoDpF"}
1
+ {"version":3,"file":"ws_handler.d.ts","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAiB,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;IACpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAAkC,GAAG,IAAI,CAAC;CACpF,CAAC;AAEF,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IAClE,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IACzB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAiGF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA0DpF"}
@@ -3,18 +3,13 @@
3
3
  * WebSocket session lifecycle handler.
4
4
  *
5
5
  * Cross-runtime: accepts a Logger parameter instead of importing `@std/log`.
6
- * Audio validation is inlined (no dependency on server-side schemas).
6
+ * Audio validation is handled at the host transport layer (see host.ts).
7
7
  *
8
8
  * @module
9
9
  */
10
+ import { errorMessage } from "./_utils.js";
10
11
  import { ClientMessageSchema } from "./protocol.js";
11
12
  import { consoleLogger } from "./runtime.js";
12
- /** Max size for a single audio chunk from the browser (1 MB). */
13
- const MAX_AUDIO_CHUNK_BYTES = 1_048_576;
14
- /** Validate a PCM16 audio chunk: non-empty, within size bounds, even byte length. */
15
- function isValidAudioChunk(data) {
16
- return (data.byteLength > 0 && data.byteLength <= MAX_AUDIO_CHUNK_BYTES && data.byteLength % 2 === 0);
17
- }
18
13
  /**
19
14
  * Creates a {@linkcode ClientSink} backed by a plain WebSocket.
20
15
  *
@@ -61,20 +56,10 @@ function toUint8Array(data) {
61
56
  const buf = data;
62
57
  return new Uint8Array(buf.buffer ?? data, buf.byteOffset ?? 0, buf.byteLength);
63
58
  }
64
- function handleBinaryAudio(data, session, log, ctx, sid) {
59
+ function handleBinaryAudio(data, session) {
65
60
  if (!isBinaryData(data))
66
61
  return false;
67
- const chunk = toUint8Array(data);
68
- if (!isValidAudioChunk(chunk)) {
69
- log.warn("Invalid audio chunk, dropping", {
70
- ...ctx,
71
- sid,
72
- bytes: chunk.byteLength,
73
- aligned: chunk.byteLength % 2 === 0,
74
- });
75
- return true;
76
- }
77
- session.onAudio(chunk);
62
+ session.onAudio(toUint8Array(data));
78
63
  return true;
79
64
  }
80
65
  function handleTextMessage(data, session, log, ctx, sid) {
@@ -132,8 +117,14 @@ export function wireSessionSocket(ws, opts) {
132
117
  sessions.set(sessionId, session);
133
118
  // Send config immediately — zero RTT
134
119
  ws.send(JSON.stringify({ type: "config", ...opts.readyConfig }));
135
- void session.start();
136
- log.info("Session ready", { ...ctx, sid });
120
+ session
121
+ .start()
122
+ .then(() => {
123
+ log.info("Session ready", { ...ctx, sid });
124
+ })
125
+ .catch((err) => {
126
+ log.error("Session start failed", { ...ctx, sid, error: errorMessage(err) });
127
+ });
137
128
  }
138
129
  // readyState 1 = OPEN — socket already open (e.g. from ws handleUpgrade)
139
130
  if (ws.readyState === 1) {
@@ -146,7 +137,7 @@ export function wireSessionSocket(ws, opts) {
146
137
  if (!session)
147
138
  return;
148
139
  const { data } = event;
149
- if (handleBinaryAudio(data, session, log, ctx, sid))
140
+ if (handleBinaryAudio(data, session))
150
141
  return;
151
142
  handleTextMessage(data, session, log, ctx, sid);
152
143
  });