@alexkroman1/aai 0.5.0 → 0.6.1

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 (247) hide show
  1. package/dist/cli.js +193 -214
  2. package/dist/sdk/_internal_types.d.ts +73 -0
  3. package/dist/sdk/_internal_types.d.ts.map +1 -0
  4. package/dist/sdk/_internal_types.js +24 -0
  5. package/dist/sdk/_internal_types.js.map +1 -0
  6. package/dist/sdk/_mock_ws.d.ts +105 -0
  7. package/dist/sdk/_mock_ws.d.ts.map +1 -0
  8. package/dist/sdk/_mock_ws.js +154 -0
  9. package/dist/sdk/_mock_ws.js.map +1 -0
  10. package/dist/sdk/_timeout.d.ts +14 -0
  11. package/dist/sdk/_timeout.d.ts.map +1 -0
  12. package/{sdk/_timeout.ts → dist/sdk/_timeout.js} +9 -9
  13. package/dist/sdk/_timeout.js.map +1 -0
  14. package/dist/sdk/builtin_tools.d.ts +33 -0
  15. package/dist/sdk/builtin_tools.d.ts.map +1 -0
  16. package/dist/sdk/builtin_tools.js +263 -0
  17. package/dist/sdk/builtin_tools.js.map +1 -0
  18. package/dist/sdk/capnweb.d.ts +69 -0
  19. package/dist/sdk/capnweb.d.ts.map +1 -0
  20. package/dist/sdk/capnweb.js +291 -0
  21. package/dist/sdk/capnweb.js.map +1 -0
  22. package/dist/sdk/define_agent.d.ts +36 -0
  23. package/dist/sdk/define_agent.d.ts.map +1 -0
  24. package/dist/sdk/define_agent.js +63 -0
  25. package/dist/sdk/define_agent.js.map +1 -0
  26. package/dist/sdk/direct_executor.d.ts +42 -0
  27. package/dist/sdk/direct_executor.d.ts.map +1 -0
  28. package/dist/sdk/direct_executor.js +143 -0
  29. package/dist/sdk/direct_executor.js.map +1 -0
  30. package/dist/sdk/kv.d.ts +123 -0
  31. package/dist/sdk/kv.d.ts.map +1 -0
  32. package/dist/sdk/kv.js +91 -0
  33. package/dist/sdk/kv.js.map +1 -0
  34. package/{sdk/mod.ts → dist/sdk/mod.d.ts} +2 -11
  35. package/dist/sdk/mod.d.ts.map +1 -0
  36. package/dist/sdk/mod.js +26 -0
  37. package/dist/sdk/mod.js.map +1 -0
  38. package/dist/sdk/protocol.d.ts +218 -0
  39. package/dist/sdk/protocol.d.ts.map +1 -0
  40. package/dist/sdk/protocol.js +140 -0
  41. package/dist/sdk/protocol.js.map +1 -0
  42. package/dist/sdk/runtime.d.ts +35 -0
  43. package/dist/sdk/runtime.d.ts.map +1 -0
  44. package/dist/sdk/runtime.js +46 -0
  45. package/dist/sdk/runtime.js.map +1 -0
  46. package/dist/sdk/s2s.d.ts +60 -0
  47. package/dist/sdk/s2s.d.ts.map +1 -0
  48. package/dist/sdk/s2s.js +171 -0
  49. package/dist/sdk/s2s.js.map +1 -0
  50. package/dist/sdk/server.d.ts +51 -0
  51. package/dist/sdk/server.d.ts.map +1 -0
  52. package/dist/sdk/server.js +145 -0
  53. package/dist/sdk/server.js.map +1 -0
  54. package/dist/sdk/session.d.ts +66 -0
  55. package/dist/sdk/session.d.ts.map +1 -0
  56. package/dist/sdk/session.js +324 -0
  57. package/dist/sdk/session.js.map +1 -0
  58. package/dist/sdk/system_prompt.d.ts +6 -0
  59. package/dist/sdk/system_prompt.d.ts.map +1 -0
  60. package/dist/sdk/system_prompt.js +35 -0
  61. package/dist/sdk/system_prompt.js.map +1 -0
  62. package/dist/sdk/types.d.ts +326 -0
  63. package/dist/sdk/types.d.ts.map +1 -0
  64. package/dist/sdk/types.js +38 -0
  65. package/dist/sdk/types.js.map +1 -0
  66. package/dist/sdk/vector.d.ts +90 -0
  67. package/dist/sdk/vector.d.ts.map +1 -0
  68. package/dist/sdk/vector.js +61 -0
  69. package/dist/sdk/vector.js.map +1 -0
  70. package/dist/sdk/winterc_server.d.ts +53 -0
  71. package/dist/sdk/winterc_server.d.ts.map +1 -0
  72. package/dist/sdk/winterc_server.js +82 -0
  73. package/dist/sdk/winterc_server.js.map +1 -0
  74. package/dist/sdk/worker_entry.d.ts +48 -0
  75. package/dist/sdk/worker_entry.d.ts.map +1 -0
  76. package/dist/sdk/worker_entry.js +67 -0
  77. package/dist/sdk/worker_entry.js.map +1 -0
  78. package/dist/sdk/worker_shim.d.ts +20 -0
  79. package/dist/sdk/worker_shim.d.ts.map +1 -0
  80. package/dist/sdk/worker_shim.js +132 -0
  81. package/dist/sdk/worker_shim.js.map +1 -0
  82. package/dist/sdk/ws_handler.d.ts +50 -0
  83. package/dist/sdk/ws_handler.d.ts.map +1 -0
  84. package/dist/sdk/ws_handler.js +156 -0
  85. package/dist/sdk/ws_handler.js.map +1 -0
  86. package/dist/ui/_components/app.d.ts +3 -0
  87. package/dist/ui/_components/app.d.ts.map +1 -0
  88. package/dist/ui/_components/app.js +14 -0
  89. package/dist/ui/_components/app.js.map +1 -0
  90. package/dist/ui/_components/chat_view.d.ts +3 -0
  91. package/dist/ui/_components/chat_view.d.ts.map +1 -0
  92. package/dist/ui/_components/chat_view.js +14 -0
  93. package/dist/ui/_components/chat_view.js.map +1 -0
  94. package/dist/ui/_components/controls.d.ts +2 -0
  95. package/dist/ui/_components/controls.d.ts.map +1 -0
  96. package/dist/ui/_components/controls.js +11 -0
  97. package/dist/ui/_components/controls.js.map +1 -0
  98. package/dist/ui/_components/error_banner.d.ts +7 -0
  99. package/dist/ui/_components/error_banner.d.ts.map +1 -0
  100. package/dist/ui/_components/error_banner.js +7 -0
  101. package/dist/ui/_components/error_banner.js.map +1 -0
  102. package/dist/ui/_components/message_bubble.d.ts +6 -0
  103. package/dist/ui/_components/message_bubble.d.ts.map +1 -0
  104. package/dist/ui/_components/message_bubble.js +9 -0
  105. package/dist/ui/_components/message_bubble.js.map +1 -0
  106. package/dist/ui/_components/message_list.d.ts +2 -0
  107. package/dist/ui/_components/message_list.d.ts.map +1 -0
  108. package/dist/ui/_components/message_list.js +48 -0
  109. package/dist/ui/_components/message_list.js.map +1 -0
  110. package/dist/ui/_components/state_indicator.d.ts +7 -0
  111. package/dist/ui/_components/state_indicator.d.ts.map +1 -0
  112. package/dist/ui/_components/state_indicator.js +5 -0
  113. package/dist/ui/_components/state_indicator.js.map +1 -0
  114. package/dist/ui/_components/thinking_indicator.d.ts +3 -0
  115. package/dist/ui/_components/thinking_indicator.d.ts.map +1 -0
  116. package/dist/ui/_components/thinking_indicator.js +8 -0
  117. package/dist/ui/_components/thinking_indicator.js.map +1 -0
  118. package/dist/ui/_components/tool_call_block.d.ts +6 -0
  119. package/dist/ui/_components/tool_call_block.d.ts.map +1 -0
  120. package/dist/ui/_components/tool_call_block.js +58 -0
  121. package/dist/ui/_components/tool_call_block.js.map +1 -0
  122. package/dist/ui/_components/tool_icons.d.ts +18 -0
  123. package/dist/ui/_components/tool_icons.d.ts.map +1 -0
  124. package/dist/ui/_components/tool_icons.js +26 -0
  125. package/dist/ui/_components/tool_icons.js.map +1 -0
  126. package/dist/ui/_components/transcript.d.ts +6 -0
  127. package/dist/ui/_components/transcript.d.ts.map +1 -0
  128. package/dist/ui/_components/transcript.js +8 -0
  129. package/dist/ui/_components/transcript.js.map +1 -0
  130. package/dist/ui/_dom_shim.d.ts +7 -0
  131. package/dist/ui/_dom_shim.d.ts.map +1 -0
  132. package/dist/ui/_dom_shim.js +21 -0
  133. package/dist/ui/_dom_shim.js.map +1 -0
  134. package/dist/ui/_test_utils.js +272 -0
  135. package/dist/ui/_test_utils.js.map +1 -0
  136. package/dist/ui/audio.d.ts +46 -0
  137. package/dist/ui/audio.d.ts.map +1 -0
  138. package/dist/ui/audio.js +130 -0
  139. package/dist/ui/audio.js.map +1 -0
  140. package/dist/ui/components.d.ts +36 -0
  141. package/dist/ui/components.d.ts.map +1 -0
  142. package/dist/ui/components.js +32 -0
  143. package/dist/ui/components.js.map +1 -0
  144. package/{ui/components_mod.ts → dist/ui/components_mod.d.ts} +3 -18
  145. package/dist/ui/components_mod.d.ts.map +1 -0
  146. package/dist/ui/components_mod.js +20 -0
  147. package/dist/ui/components_mod.js.map +1 -0
  148. package/dist/ui/mod.d.ts +21 -0
  149. package/dist/ui/mod.d.ts.map +1 -0
  150. package/{ui/mod.ts → dist/ui/mod.js} +3 -29
  151. package/dist/ui/mod.js.map +1 -0
  152. package/dist/ui/mount.d.ts +56 -0
  153. package/dist/ui/mount.d.ts.map +1 -0
  154. package/dist/ui/mount.js +60 -0
  155. package/dist/ui/mount.js.map +1 -0
  156. package/dist/ui/mount_context.d.ts +10 -0
  157. package/dist/ui/mount_context.d.ts.map +1 -0
  158. package/dist/ui/mount_context.js +10 -0
  159. package/dist/ui/mount_context.js.map +1 -0
  160. package/dist/ui/session.d.ts +91 -0
  161. package/dist/ui/session.d.ts.map +1 -0
  162. package/dist/ui/session.js +366 -0
  163. package/dist/ui/session.js.map +1 -0
  164. package/{ui/session_mod.ts → dist/ui/session_mod.d.ts} +2 -10
  165. package/dist/ui/session_mod.d.ts.map +1 -0
  166. package/dist/ui/session_mod.js +18 -0
  167. package/dist/ui/session_mod.js.map +1 -0
  168. package/dist/ui/signals.d.ts +61 -0
  169. package/dist/ui/signals.d.ts.map +1 -0
  170. package/dist/ui/signals.js +74 -0
  171. package/dist/ui/signals.js.map +1 -0
  172. package/dist/ui/types.d.ts +36 -0
  173. package/dist/ui/types.d.ts.map +1 -0
  174. package/dist/ui/types.js +4 -0
  175. package/dist/ui/types.js.map +1 -0
  176. package/package.json +124 -48
  177. package/sdk/_internal_types.ts +0 -89
  178. package/sdk/_mock_ws.ts +0 -172
  179. package/sdk/builtin_tools.ts +0 -309
  180. package/sdk/capnweb.ts +0 -341
  181. package/sdk/define_agent.ts +0 -70
  182. package/sdk/direct_executor.ts +0 -195
  183. package/sdk/kv.ts +0 -183
  184. package/sdk/protocol.ts +0 -313
  185. package/sdk/runtime.ts +0 -65
  186. package/sdk/s2s.ts +0 -271
  187. package/sdk/server.ts +0 -198
  188. package/sdk/session.ts +0 -431
  189. package/sdk/system_prompt.ts +0 -47
  190. package/sdk/types.ts +0 -406
  191. package/sdk/vector.ts +0 -133
  192. package/sdk/winterc_server.ts +0 -141
  193. package/sdk/worker_entry.ts +0 -99
  194. package/sdk/worker_shim.ts +0 -170
  195. package/sdk/ws_handler.ts +0 -197
  196. package/templates/_shared/.env.example +0 -5
  197. package/templates/_shared/package.json +0 -17
  198. package/templates/code-interpreter/agent.ts +0 -27
  199. package/templates/code-interpreter/client.tsx +0 -2
  200. package/templates/dispatch-center/agent.ts +0 -1536
  201. package/templates/dispatch-center/client.tsx +0 -504
  202. package/templates/embedded-assets/agent.ts +0 -49
  203. package/templates/embedded-assets/client.tsx +0 -2
  204. package/templates/embedded-assets/knowledge.json +0 -20
  205. package/templates/health-assistant/agent.ts +0 -160
  206. package/templates/health-assistant/client.tsx +0 -2
  207. package/templates/infocom-adventure/agent.ts +0 -164
  208. package/templates/infocom-adventure/client.tsx +0 -299
  209. package/templates/math-buddy/agent.ts +0 -21
  210. package/templates/math-buddy/client.tsx +0 -2
  211. package/templates/memory-agent/agent.ts +0 -74
  212. package/templates/memory-agent/client.tsx +0 -2
  213. package/templates/night-owl/agent.ts +0 -98
  214. package/templates/night-owl/client.tsx +0 -28
  215. package/templates/personal-finance/agent.ts +0 -26
  216. package/templates/personal-finance/client.tsx +0 -2
  217. package/templates/simple/agent.ts +0 -6
  218. package/templates/simple/client.tsx +0 -2
  219. package/templates/smart-research/agent.ts +0 -164
  220. package/templates/smart-research/client.tsx +0 -2
  221. package/templates/support/README.md +0 -62
  222. package/templates/support/agent.ts +0 -19
  223. package/templates/support/client.tsx +0 -2
  224. package/templates/travel-concierge/agent.ts +0 -29
  225. package/templates/travel-concierge/client.tsx +0 -2
  226. package/templates/web-researcher/agent.ts +0 -17
  227. package/templates/web-researcher/client.tsx +0 -2
  228. package/ui/_components/app.tsx +0 -37
  229. package/ui/_components/chat_view.tsx +0 -36
  230. package/ui/_components/controls.tsx +0 -32
  231. package/ui/_components/error_banner.tsx +0 -18
  232. package/ui/_components/message_bubble.tsx +0 -21
  233. package/ui/_components/message_list.tsx +0 -61
  234. package/ui/_components/state_indicator.tsx +0 -17
  235. package/ui/_components/thinking_indicator.tsx +0 -19
  236. package/ui/_components/tool_call_block.tsx +0 -110
  237. package/ui/_components/tool_icons.tsx +0 -101
  238. package/ui/_components/transcript.tsx +0 -20
  239. package/ui/audio.ts +0 -170
  240. package/ui/components.ts +0 -49
  241. package/ui/mount.tsx +0 -112
  242. package/ui/mount_context.ts +0 -19
  243. package/ui/session.ts +0 -456
  244. package/ui/signals.ts +0 -111
  245. package/ui/types.ts +0 -50
  246. package/ui/worklets/capture-processor.js +0 -62
  247. package/ui/worklets/playback-processor.js +0 -110
@@ -0,0 +1,171 @@
1
+ import { consoleLogger } from "./runtime.js";
2
+ // ─── Cross-runtime base64 helpers ───────────────────────────────────────────
3
+ function uint8ToBase64(bytes) {
4
+ const CHUNK = 0x8000; // 32KB chunks to avoid call stack limits
5
+ const parts = [];
6
+ for (let i = 0; i < bytes.length; i += CHUNK) {
7
+ parts.push(String.fromCharCode(...bytes.subarray(i, i + CHUNK)));
8
+ }
9
+ return btoa(parts.join(""));
10
+ }
11
+ function base64ToUint8(base64) {
12
+ const binary = atob(base64);
13
+ const bytes = new Uint8Array(binary.length);
14
+ for (let i = 0; i < binary.length; i++) {
15
+ bytes[i] = binary.charCodeAt(i);
16
+ }
17
+ return bytes;
18
+ }
19
+ /** WebSocket readyState constant for OPEN. */
20
+ const WS_OPEN = 1;
21
+ /**
22
+ * Connect to AssemblyAI's Speech-to-Speech WebSocket API.
23
+ *
24
+ * Returns an {@linkcode S2sHandle} that extends EventTarget. Consumers
25
+ * listen for events: `ready`, `speech_started`, `speech_stopped`,
26
+ * `user_transcript_delta`, `user_transcript`, `reply_started`,
27
+ * `reply_done`, `audio`, `agent_transcript`, `tool_call`,
28
+ * `session_expired`, `error`, `close`.
29
+ */
30
+ export function connectS2s(opts) {
31
+ const { apiKey, config, createWebSocket, logger: log = consoleLogger } = opts;
32
+ return new Promise((resolve, reject) => {
33
+ log.debug("S2S connecting", { url: config.wssUrl });
34
+ const ws = createWebSocket(config.wssUrl, {
35
+ headers: { Authorization: `Bearer ${apiKey}` },
36
+ });
37
+ const target = new EventTarget();
38
+ let opened = false;
39
+ function send(msg) {
40
+ if (ws.readyState !== WS_OPEN)
41
+ return;
42
+ const type = msg.type;
43
+ if (type !== "input.audio") {
44
+ log.info(`S2S >> ${JSON.stringify(msg)}`);
45
+ }
46
+ ws.send(JSON.stringify(msg));
47
+ }
48
+ const handle = Object.assign(target, {
49
+ sendAudio(audio) {
50
+ send({ type: "input.audio", audio: uint8ToBase64(audio) });
51
+ },
52
+ sendToolResult(callId, result) {
53
+ send({ type: "tool.result", call_id: callId, result });
54
+ },
55
+ updateSession(sessionConfig) {
56
+ send({ type: "session.update", session: sessionConfig });
57
+ },
58
+ resumeSession(sessionId) {
59
+ send({ type: "session.resume", session_id: sessionId });
60
+ },
61
+ close() {
62
+ log.debug("S2S closing");
63
+ ws.close();
64
+ },
65
+ });
66
+ ws.on("open", () => {
67
+ opened = true;
68
+ log.info("S2S WebSocket open");
69
+ resolve(handle);
70
+ });
71
+ ws.on("message", (data) => {
72
+ let msg;
73
+ try {
74
+ msg = JSON.parse(String(data));
75
+ }
76
+ catch {
77
+ return;
78
+ }
79
+ const type = msg.type;
80
+ if (type !== "reply.audio") {
81
+ log.info(`S2S << ${JSON.stringify(msg)}`);
82
+ }
83
+ switch (type) {
84
+ case "session.ready":
85
+ target.dispatchEvent(new CustomEvent("ready", {
86
+ detail: { session_id: msg.session_id },
87
+ }));
88
+ break;
89
+ case "session.updated":
90
+ target.dispatchEvent(new CustomEvent("session_updated", { detail: msg }));
91
+ break;
92
+ case "input.speech.started":
93
+ target.dispatchEvent(new CustomEvent("speech_started"));
94
+ break;
95
+ case "input.speech.stopped":
96
+ target.dispatchEvent(new CustomEvent("speech_stopped"));
97
+ break;
98
+ case "transcript.user.delta":
99
+ target.dispatchEvent(new CustomEvent("user_transcript_delta", {
100
+ detail: { text: msg.text },
101
+ }));
102
+ break;
103
+ case "transcript.user":
104
+ target.dispatchEvent(new CustomEvent("user_transcript", {
105
+ detail: {
106
+ item_id: msg.item_id,
107
+ text: msg.text,
108
+ },
109
+ }));
110
+ break;
111
+ case "reply.started":
112
+ target.dispatchEvent(new CustomEvent("reply_started", {
113
+ detail: { reply_id: msg.reply_id },
114
+ }));
115
+ break;
116
+ case "reply.audio": {
117
+ const audioBytes = base64ToUint8(msg.data);
118
+ target.dispatchEvent(new CustomEvent("audio", { detail: { audio: audioBytes } }));
119
+ break;
120
+ }
121
+ case "transcript.agent":
122
+ target.dispatchEvent(new CustomEvent("agent_transcript", {
123
+ detail: { text: msg.text },
124
+ }));
125
+ break;
126
+ case "tool.call":
127
+ target.dispatchEvent(new CustomEvent("tool_call", {
128
+ detail: {
129
+ call_id: msg.call_id,
130
+ name: msg.name,
131
+ args: (msg.args ?? {}),
132
+ },
133
+ }));
134
+ break;
135
+ case "reply.done":
136
+ target.dispatchEvent(new CustomEvent("reply_done", {
137
+ detail: { status: msg.status ?? undefined },
138
+ }));
139
+ break;
140
+ case "session.error": {
141
+ const code = msg.code;
142
+ const isExpired = code === "session_not_found" || code === "session_forbidden";
143
+ target.dispatchEvent(new CustomEvent(isExpired ? "session_expired" : "error", {
144
+ detail: { code, message: msg.message },
145
+ }));
146
+ break;
147
+ }
148
+ }
149
+ });
150
+ ws.on("close", (code, reason) => {
151
+ log.info("S2S WebSocket closed", {
152
+ code: code,
153
+ reason: reason instanceof Uint8Array ? new TextDecoder().decode(reason) : String(reason ?? ""),
154
+ });
155
+ target.dispatchEvent(new CustomEvent("close"));
156
+ });
157
+ ws.on("error", (err) => {
158
+ const errObj = err instanceof Error ? err : new Error(String(err));
159
+ log.error("S2S WebSocket error", { error: errObj.message });
160
+ if (!opened) {
161
+ reject(errObj);
162
+ }
163
+ else {
164
+ target.dispatchEvent(new CustomEvent("error", {
165
+ detail: { code: "ws_error", message: errObj.message },
166
+ }));
167
+ }
168
+ });
169
+ });
170
+ }
171
+ //# sourceMappingURL=s2s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s2s.js","sourceRoot":"","sources":["../../sdk/s2s.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Self-hostable agent server.
3
+ *
4
+ * `createServer()` returns a server with a standard `fetch(Request): Response`
5
+ * handler and a Node.js `listen()` method for HTTP + WebSocket.
6
+ *
7
+ * @module
8
+ */
9
+ import type { Kv } from "./kv.ts";
10
+ import type { Logger, S2SConfig } from "./runtime.ts";
11
+ import type { CreateS2sWebSocket } from "./s2s.ts";
12
+ import type { AgentDef } from "./types.ts";
13
+ export type ServerOptions = {
14
+ /** The agent definition returned by `defineAgent()`. */
15
+ agent: AgentDef;
16
+ /** Environment variables. Defaults to `process.env`. */
17
+ env?: Record<string, string>;
18
+ /** KV store. Defaults to in-memory. */
19
+ kv?: Kv;
20
+ /** HTML to serve at `GET /`. */
21
+ clientHtml?: string;
22
+ /** Logger. Defaults to console. */
23
+ logger?: Logger;
24
+ /** S2S configuration. Defaults to AssemblyAI production. */
25
+ s2sConfig?: S2SConfig;
26
+ /** WebSocket factory for S2S connections. Auto-detected if not provided. */
27
+ createWebSocket?: CreateS2sWebSocket;
28
+ };
29
+ export type AgentServer = {
30
+ /** Standard fetch handler using web `Request`/`Response` types. */
31
+ fetch(request: Request): Promise<Response>;
32
+ /** Start listening on the given port. */
33
+ listen(port?: number): Promise<void>;
34
+ /** Stop the server. */
35
+ close(): Promise<void>;
36
+ };
37
+ /**
38
+ * Create a self-hostable agent server.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * import { defineAgent } from "aai";
43
+ * import { createServer } from "aai/server";
44
+ *
45
+ * const agent = defineAgent({ name: "my-agent" });
46
+ * const server = createServer({ agent });
47
+ * await server.listen(3000);
48
+ * ```
49
+ */
50
+ export declare function createServer(options: ServerOptions): AgentServer;
51
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../sdk/server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,MAAM,aAAa,GAAG;IAC1B,wDAAwD;IACxD,KAAK,EAAE,QAAQ,CAAC;IAChB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uCAAuC;IACvC,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,mEAAmE;IACnE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AA0BF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAuHhE"}
@@ -0,0 +1,145 @@
1
+ // Copyright 2025 the AAI authors. MIT license.
2
+ /**
3
+ * Self-hostable agent server.
4
+ *
5
+ * `createServer()` returns a server with a standard `fetch(Request): Response`
6
+ * handler and a Node.js `listen()` method for HTTP + WebSocket.
7
+ *
8
+ * @module
9
+ */
10
+ import { consoleLogger, DEFAULT_S2S_CONFIG } from "./runtime.js";
11
+ import { createWintercServer } from "./winterc_server.js";
12
+ /** Try to load the `ws` package for WebSocket connections. */
13
+ async function loadWsFactory() {
14
+ try {
15
+ const mod = await import("ws");
16
+ const WS = mod.default ?? mod;
17
+ return (url, opts) => new WS(url, { headers: opts.headers });
18
+ }
19
+ catch {
20
+ throw new Error("WebSocket factory not provided and `ws` package not found. " +
21
+ "Install `ws` (`npm install ws`) or pass `createWebSocket` option.");
22
+ }
23
+ }
24
+ /** Filter env to only defined string values. */
25
+ function resolveEnv(env) {
26
+ const resolved = {};
27
+ for (const [key, value] of Object.entries(env)) {
28
+ if (value !== undefined)
29
+ resolved[key] = value;
30
+ }
31
+ return resolved;
32
+ }
33
+ /**
34
+ * Create a self-hostable agent server.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * import { defineAgent } from "aai";
39
+ * import { createServer } from "aai/server";
40
+ *
41
+ * const agent = defineAgent({ name: "my-agent" });
42
+ * const server = createServer({ agent });
43
+ * await server.listen(3000);
44
+ * ```
45
+ */
46
+ export function createServer(options) {
47
+ const { agent, kv, clientHtml, logger = consoleLogger, s2sConfig = DEFAULT_S2S_CONFIG } = options;
48
+ const env = resolveEnv(options.env ?? (typeof process !== "undefined" ? process.env : {}));
49
+ let wsFactory = options.createWebSocket ?? null;
50
+ async function getWsFactory() {
51
+ if (!wsFactory) {
52
+ wsFactory = await loadWsFactory();
53
+ }
54
+ return wsFactory;
55
+ }
56
+ // WintercServer is created lazily after wsFactory is resolved
57
+ let winterc = null;
58
+ function getWinterc() {
59
+ if (!winterc) {
60
+ winterc = createWintercServer({
61
+ agent,
62
+ env,
63
+ ...(kv ? { kv } : {}),
64
+ createWebSocket: wsFactory,
65
+ ...(clientHtml !== undefined ? { clientHtml } : {}),
66
+ logger,
67
+ s2sConfig,
68
+ });
69
+ }
70
+ return winterc;
71
+ }
72
+ let serverHandle = null;
73
+ return {
74
+ fetch(request) {
75
+ return getWinterc().fetch(request);
76
+ },
77
+ async listen(port = 3000) {
78
+ // Ensure WS factory is loaded before starting
79
+ await getWsFactory();
80
+ const http = await import("node:http");
81
+ const nodeServer = http.createServer(async (req, res) => {
82
+ try {
83
+ const protocol = req.socket.encrypted ? "https" : "http";
84
+ const host = req.headers.host ?? `localhost:${port}`;
85
+ const url = new URL(req.url ?? "/", `${protocol}://${host}`);
86
+ const headers = new Headers();
87
+ for (const [key, val] of Object.entries(req.headers)) {
88
+ if (val)
89
+ headers.set(key, Array.isArray(val) ? val[0] : val);
90
+ }
91
+ const request = new Request(url, {
92
+ method: req.method ?? "GET",
93
+ headers,
94
+ });
95
+ const response = await getWinterc().fetch(request);
96
+ res.writeHead(response.status, Object.fromEntries(response.headers));
97
+ const body = await response.text();
98
+ res.end(body);
99
+ }
100
+ catch (err) {
101
+ res.writeHead(500);
102
+ res.end(err instanceof Error ? err.message : "Internal Server Error");
103
+ }
104
+ });
105
+ // WebSocket upgrade via ws package
106
+ try {
107
+ const wsMod = await import("ws");
108
+ const WSServer = wsMod.WebSocketServer;
109
+ if (WSServer) {
110
+ const wss = new WSServer({ noServer: true });
111
+ nodeServer.on("upgrade", (req, socket, head) => {
112
+ wss.handleUpgrade(req, socket, head, (ws) => {
113
+ const reqUrl = new URL(req.url ?? "/", `http://localhost:${port}`);
114
+ const resume = reqUrl.searchParams.has("resume");
115
+ getWinterc().handleWebSocket(ws, {
116
+ skipGreeting: resume,
117
+ });
118
+ });
119
+ });
120
+ }
121
+ }
122
+ catch {
123
+ logger.warn("ws package not available for Node.js WebSocket upgrade");
124
+ }
125
+ await new Promise((resolve) => {
126
+ nodeServer.listen(port, () => {
127
+ logger.info(`Agent "${agent.name}" listening on http://localhost:${port}`);
128
+ resolve();
129
+ });
130
+ });
131
+ serverHandle = {
132
+ async shutdown() {
133
+ await new Promise((resolve, reject) => {
134
+ nodeServer.close((err) => (err ? reject(err) : resolve()));
135
+ });
136
+ },
137
+ };
138
+ },
139
+ async close() {
140
+ await winterc?.close();
141
+ await serverHandle?.shutdown();
142
+ },
143
+ };
144
+ }
145
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../sdk/server.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;GAOG;AAIH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,qBAAqB,CAAC;AA6B9E,8DAA8D;AAC9D,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;QAC9B,OAAO,CAAC,GAAW,EAAE,IAAyC,EAAE,EAAE,CAChE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAA4B,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC3D,mEAAmE,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,SAAS,UAAU,CAAC,GAAuC;IACzD,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE,SAAS,GAAG,kBAAkB,EAAE,GAAG,OAAO,CAAC;IAElG,MAAM,GAAG,GAAG,UAAU,CACpB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAE,OAAO,CAAC,GAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/F,CAAC;IAEF,IAAI,SAAS,GAA8B,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;IAE3E,KAAK,UAAU,YAAY;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8DAA8D;IAC9D,IAAI,OAAO,GAAyB,IAAI,CAAC;IAEzC,SAAS,UAAU;QACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,mBAAmB,CAAC;gBAC5B,KAAK;gBACL,GAAG;gBACH,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,eAAe,EAAE,SAAU;gBAC3B,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,MAAM;gBACN,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,YAAY,GAAyC,IAAI,CAAC;IAE9D,OAAO;QACL,KAAK,CAAC,OAAgB;YACpB,OAAO,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI;YACtB,8CAA8C;YAC9C,MAAM,YAAY,EAAE,CAAC;YAErB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBACtD,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAI,GAAG,CAAC,MAAkC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;oBACtF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,IAAI,EAAE,CAAC;oBACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBACrD,IAAI,GAAG;4BAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChE,CAAC;oBACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;wBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;wBAC3B,OAAO;qBACR,CAAC,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACnD,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,mCAAmC;YACnC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC;gBACvC,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC7C,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,MAAe,EAAE,IAAa,EAAE,EAAE;wBACxE,GAAG,CAAC,aAAa,CACf,GAA8C,EAC9C,MAAiD,EACjD,IAA+C,EAC/C,CAAC,EAAE,EAAE,EAAE;4BACL,MAAM,MAAM,GAAG,IAAI,GAAG,CACnB,GAAwB,CAAC,GAAG,IAAI,GAAG,EACpC,oBAAoB,IAAI,EAAE,CAC3B,CAAC;4BACF,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACjD,UAAU,EAAE,CAAC,eAAe,CAAC,EAAiC,EAAE;gCAC9D,YAAY,EAAE,MAAM;6BACrB,CAAC,CAAC;wBACL,CAAC,CACF,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;oBAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,mCAAmC,IAAI,EAAE,CAAC,CAAC;oBAC3E,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,YAAY,GAAG;gBACb,KAAK,CAAC,QAAQ;oBACZ,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAC1C,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC7D,CAAC,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC;YACvB,MAAM,YAAY,EAAE,QAAQ,EAAE,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * S2S session — relays audio between the client and AssemblyAI's
3
+ * Speech-to-Speech API, intercepting only tool calls for local execution.
4
+ *
5
+ * Cross-runtime: accepts Logger, Metrics, and a WebSocket factory via
6
+ * dependency injection.
7
+ *
8
+ * @module
9
+ */
10
+ import type { AgentConfig, ToolSchema } from "./_internal_types.ts";
11
+ import type { ClientSink } from "./protocol.ts";
12
+ import type { Logger, Metrics, S2SConfig } from "./runtime.ts";
13
+ import { type CreateS2sWebSocket, connectS2s } from "./s2s.ts";
14
+ import type { StepInfo } from "./types.ts";
15
+ import type { ExecuteTool } from "./worker_entry.ts";
16
+ /** A voice session managing the S2S connection for one client. */
17
+ export type Session = {
18
+ start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ onAudio(data: Uint8Array): void;
21
+ onAudioReady(): void;
22
+ onCancel(): void;
23
+ onReset(): void;
24
+ onHistory(incoming: readonly {
25
+ role: "user" | "assistant";
26
+ text: string;
27
+ }[]): void;
28
+ waitForTurn(): Promise<void>;
29
+ };
30
+ /** Generic interface for invoking agent lifecycle hooks. */
31
+ export type HookInvoker = {
32
+ onConnect(sessionId: string, timeoutMs?: number): Promise<void>;
33
+ onDisconnect(sessionId: string, timeoutMs?: number): Promise<void>;
34
+ onTurn(sessionId: string, text: string, timeoutMs?: number): Promise<void>;
35
+ onError(sessionId: string, error: {
36
+ message: string;
37
+ }, timeoutMs?: number): Promise<void>;
38
+ onStep(sessionId: string, step: StepInfo, timeoutMs?: number): Promise<void>;
39
+ resolveTurnConfig(sessionId: string, timeoutMs?: number): Promise<{
40
+ maxSteps?: number;
41
+ activeTools?: string[];
42
+ } | null>;
43
+ };
44
+ /** Configuration options for creating a new session. */
45
+ export type SessionOptions = {
46
+ id: string;
47
+ agent: string;
48
+ client: ClientSink;
49
+ agentConfig: AgentConfig;
50
+ toolSchemas: readonly ToolSchema[];
51
+ apiKey: string;
52
+ s2sConfig: S2SConfig;
53
+ executeTool: ExecuteTool;
54
+ createWebSocket: CreateS2sWebSocket;
55
+ env?: Record<string, string | undefined>;
56
+ hookInvoker?: HookInvoker;
57
+ skipGreeting?: boolean;
58
+ logger?: Logger;
59
+ metrics?: Metrics;
60
+ };
61
+ export declare const _internals: {
62
+ connectS2s: typeof connectS2s;
63
+ };
64
+ /** Create an S2S-backed session with the same interface as the STT+LLM+TTS session. */
65
+ export declare function createS2sSession(opts: SessionOptions): Session;
66
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../sdk/session.ts"],"names":[],"mappings":"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"}