@alexkroman1/aai 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/README.md +0 -6
  2. package/dist/aai.js +3 -0
  3. package/dist/cli.js +244 -245
  4. package/dist/sdk/_internal_types.d.ts +73 -0
  5. package/dist/sdk/_internal_types.d.ts.map +1 -0
  6. package/dist/sdk/_internal_types.js +24 -0
  7. package/dist/sdk/_internal_types.js.map +1 -0
  8. package/dist/sdk/_mock_ws.d.ts +105 -0
  9. package/dist/sdk/_mock_ws.d.ts.map +1 -0
  10. package/dist/sdk/_mock_ws.js +154 -0
  11. package/dist/sdk/_mock_ws.js.map +1 -0
  12. package/dist/sdk/_timeout.d.ts +14 -0
  13. package/dist/sdk/_timeout.d.ts.map +1 -0
  14. package/{sdk/_timeout.ts → dist/sdk/_timeout.js} +9 -9
  15. package/dist/sdk/_timeout.js.map +1 -0
  16. package/dist/sdk/builtin_tools.d.ts +33 -0
  17. package/dist/sdk/builtin_tools.d.ts.map +1 -0
  18. package/dist/sdk/builtin_tools.js +263 -0
  19. package/dist/sdk/builtin_tools.js.map +1 -0
  20. package/dist/sdk/capnweb.d.ts +69 -0
  21. package/dist/sdk/capnweb.d.ts.map +1 -0
  22. package/dist/sdk/capnweb.js +291 -0
  23. package/dist/sdk/capnweb.js.map +1 -0
  24. package/dist/sdk/define_agent.d.ts +36 -0
  25. package/dist/sdk/define_agent.d.ts.map +1 -0
  26. package/dist/sdk/define_agent.js +63 -0
  27. package/dist/sdk/define_agent.js.map +1 -0
  28. package/dist/sdk/direct_executor.d.ts +42 -0
  29. package/dist/sdk/direct_executor.d.ts.map +1 -0
  30. package/dist/sdk/direct_executor.js +143 -0
  31. package/dist/sdk/direct_executor.js.map +1 -0
  32. package/dist/sdk/kv.d.ts +123 -0
  33. package/dist/sdk/kv.d.ts.map +1 -0
  34. package/dist/sdk/kv.js +91 -0
  35. package/dist/sdk/kv.js.map +1 -0
  36. package/{sdk/mod.ts → dist/sdk/mod.d.ts} +2 -11
  37. package/dist/sdk/mod.d.ts.map +1 -0
  38. package/dist/sdk/mod.js +26 -0
  39. package/dist/sdk/mod.js.map +1 -0
  40. package/dist/sdk/protocol.d.ts +218 -0
  41. package/dist/sdk/protocol.d.ts.map +1 -0
  42. package/dist/sdk/protocol.js +140 -0
  43. package/dist/sdk/protocol.js.map +1 -0
  44. package/dist/sdk/runtime.d.ts +35 -0
  45. package/dist/sdk/runtime.d.ts.map +1 -0
  46. package/dist/sdk/runtime.js +46 -0
  47. package/dist/sdk/runtime.js.map +1 -0
  48. package/dist/sdk/s2s.d.ts +60 -0
  49. package/dist/sdk/s2s.d.ts.map +1 -0
  50. package/dist/sdk/s2s.js +171 -0
  51. package/dist/sdk/s2s.js.map +1 -0
  52. package/dist/sdk/server.d.ts +51 -0
  53. package/dist/sdk/server.d.ts.map +1 -0
  54. package/dist/sdk/server.js +145 -0
  55. package/dist/sdk/server.js.map +1 -0
  56. package/dist/sdk/session.d.ts +66 -0
  57. package/dist/sdk/session.d.ts.map +1 -0
  58. package/dist/sdk/session.js +324 -0
  59. package/dist/sdk/session.js.map +1 -0
  60. package/dist/sdk/system_prompt.d.ts +6 -0
  61. package/dist/sdk/system_prompt.d.ts.map +1 -0
  62. package/dist/sdk/system_prompt.js +35 -0
  63. package/dist/sdk/system_prompt.js.map +1 -0
  64. package/dist/sdk/types.d.ts +326 -0
  65. package/dist/sdk/types.d.ts.map +1 -0
  66. package/dist/sdk/types.js +38 -0
  67. package/dist/sdk/types.js.map +1 -0
  68. package/dist/sdk/vector.d.ts +90 -0
  69. package/dist/sdk/vector.d.ts.map +1 -0
  70. package/dist/sdk/vector.js +61 -0
  71. package/dist/sdk/vector.js.map +1 -0
  72. package/dist/sdk/winterc_server.d.ts +53 -0
  73. package/dist/sdk/winterc_server.d.ts.map +1 -0
  74. package/dist/sdk/winterc_server.js +82 -0
  75. package/dist/sdk/winterc_server.js.map +1 -0
  76. package/dist/sdk/worker_entry.d.ts +48 -0
  77. package/dist/sdk/worker_entry.d.ts.map +1 -0
  78. package/dist/sdk/worker_entry.js +67 -0
  79. package/dist/sdk/worker_entry.js.map +1 -0
  80. package/dist/sdk/worker_shim.d.ts +20 -0
  81. package/dist/sdk/worker_shim.d.ts.map +1 -0
  82. package/dist/sdk/worker_shim.js +132 -0
  83. package/dist/sdk/worker_shim.js.map +1 -0
  84. package/dist/sdk/ws_handler.d.ts +50 -0
  85. package/dist/sdk/ws_handler.d.ts.map +1 -0
  86. package/dist/sdk/ws_handler.js +156 -0
  87. package/dist/sdk/ws_handler.js.map +1 -0
  88. package/dist/ui/_components/app.d.ts +3 -0
  89. package/dist/ui/_components/app.d.ts.map +1 -0
  90. package/dist/ui/_components/app.js +14 -0
  91. package/dist/ui/_components/app.js.map +1 -0
  92. package/dist/ui/_components/chat_view.d.ts +3 -0
  93. package/dist/ui/_components/chat_view.d.ts.map +1 -0
  94. package/dist/ui/_components/chat_view.js +14 -0
  95. package/dist/ui/_components/chat_view.js.map +1 -0
  96. package/dist/ui/_components/controls.d.ts +2 -0
  97. package/dist/ui/_components/controls.d.ts.map +1 -0
  98. package/dist/ui/_components/controls.js +11 -0
  99. package/dist/ui/_components/controls.js.map +1 -0
  100. package/dist/ui/_components/error_banner.d.ts +7 -0
  101. package/dist/ui/_components/error_banner.d.ts.map +1 -0
  102. package/dist/ui/_components/error_banner.js +7 -0
  103. package/dist/ui/_components/error_banner.js.map +1 -0
  104. package/dist/ui/_components/message_bubble.d.ts +6 -0
  105. package/dist/ui/_components/message_bubble.d.ts.map +1 -0
  106. package/dist/ui/_components/message_bubble.js +9 -0
  107. package/dist/ui/_components/message_bubble.js.map +1 -0
  108. package/dist/ui/_components/message_list.d.ts +2 -0
  109. package/dist/ui/_components/message_list.d.ts.map +1 -0
  110. package/dist/ui/_components/message_list.js +48 -0
  111. package/dist/ui/_components/message_list.js.map +1 -0
  112. package/dist/ui/_components/state_indicator.d.ts +7 -0
  113. package/dist/ui/_components/state_indicator.d.ts.map +1 -0
  114. package/dist/ui/_components/state_indicator.js +5 -0
  115. package/dist/ui/_components/state_indicator.js.map +1 -0
  116. package/dist/ui/_components/thinking_indicator.d.ts +3 -0
  117. package/dist/ui/_components/thinking_indicator.d.ts.map +1 -0
  118. package/dist/ui/_components/thinking_indicator.js +8 -0
  119. package/dist/ui/_components/thinking_indicator.js.map +1 -0
  120. package/dist/ui/_components/tool_call_block.d.ts +6 -0
  121. package/dist/ui/_components/tool_call_block.d.ts.map +1 -0
  122. package/dist/ui/_components/tool_call_block.js +58 -0
  123. package/dist/ui/_components/tool_call_block.js.map +1 -0
  124. package/dist/ui/_components/tool_icons.d.ts +18 -0
  125. package/dist/ui/_components/tool_icons.d.ts.map +1 -0
  126. package/dist/ui/_components/tool_icons.js +26 -0
  127. package/dist/ui/_components/tool_icons.js.map +1 -0
  128. package/dist/ui/_components/transcript.d.ts +6 -0
  129. package/dist/ui/_components/transcript.d.ts.map +1 -0
  130. package/dist/ui/_components/transcript.js +8 -0
  131. package/dist/ui/_components/transcript.js.map +1 -0
  132. package/dist/ui/_dom_shim.d.ts +7 -0
  133. package/dist/ui/_dom_shim.d.ts.map +1 -0
  134. package/dist/ui/_dom_shim.js +21 -0
  135. package/dist/ui/_dom_shim.js.map +1 -0
  136. package/dist/ui/_test_utils.js +272 -0
  137. package/dist/ui/_test_utils.js.map +1 -0
  138. package/dist/ui/audio.d.ts +46 -0
  139. package/dist/ui/audio.d.ts.map +1 -0
  140. package/dist/ui/audio.js +130 -0
  141. package/dist/ui/audio.js.map +1 -0
  142. package/dist/ui/components.d.ts +36 -0
  143. package/dist/ui/components.d.ts.map +1 -0
  144. package/dist/ui/components.js +32 -0
  145. package/dist/ui/components.js.map +1 -0
  146. package/{ui/components_mod.ts → dist/ui/components_mod.d.ts} +3 -18
  147. package/dist/ui/components_mod.d.ts.map +1 -0
  148. package/dist/ui/components_mod.js +20 -0
  149. package/dist/ui/components_mod.js.map +1 -0
  150. package/dist/ui/mod.d.ts +21 -0
  151. package/dist/ui/mod.d.ts.map +1 -0
  152. package/{ui/mod.ts → dist/ui/mod.js} +3 -29
  153. package/dist/ui/mod.js.map +1 -0
  154. package/dist/ui/mount.d.ts +56 -0
  155. package/dist/ui/mount.d.ts.map +1 -0
  156. package/dist/ui/mount.js +60 -0
  157. package/dist/ui/mount.js.map +1 -0
  158. package/dist/ui/mount_context.d.ts +10 -0
  159. package/dist/ui/mount_context.d.ts.map +1 -0
  160. package/dist/ui/mount_context.js +10 -0
  161. package/dist/ui/mount_context.js.map +1 -0
  162. package/dist/ui/session.d.ts +91 -0
  163. package/dist/ui/session.d.ts.map +1 -0
  164. package/dist/ui/session.js +366 -0
  165. package/dist/ui/session.js.map +1 -0
  166. package/{ui/session_mod.ts → dist/ui/session_mod.d.ts} +2 -10
  167. package/dist/ui/session_mod.d.ts.map +1 -0
  168. package/dist/ui/session_mod.js +18 -0
  169. package/dist/ui/session_mod.js.map +1 -0
  170. package/dist/ui/signals.d.ts +61 -0
  171. package/dist/ui/signals.d.ts.map +1 -0
  172. package/dist/ui/signals.js +74 -0
  173. package/dist/ui/signals.js.map +1 -0
  174. package/dist/ui/types.d.ts +36 -0
  175. package/dist/ui/types.d.ts.map +1 -0
  176. package/dist/ui/types.js +4 -0
  177. package/dist/ui/types.js.map +1 -0
  178. package/package.json +103 -28
  179. package/sdk/_internal_types.ts +0 -89
  180. package/sdk/_mock_ws.ts +0 -172
  181. package/sdk/builtin_tools.ts +0 -309
  182. package/sdk/capnweb.ts +0 -341
  183. package/sdk/define_agent.ts +0 -70
  184. package/sdk/direct_executor.ts +0 -195
  185. package/sdk/kv.ts +0 -183
  186. package/sdk/protocol.ts +0 -313
  187. package/sdk/runtime.ts +0 -65
  188. package/sdk/s2s.ts +0 -271
  189. package/sdk/server.ts +0 -198
  190. package/sdk/session.ts +0 -438
  191. package/sdk/system_prompt.ts +0 -47
  192. package/sdk/types.ts +0 -406
  193. package/sdk/vector.ts +0 -133
  194. package/sdk/winterc_server.ts +0 -141
  195. package/sdk/worker_entry.ts +0 -99
  196. package/sdk/worker_shim.ts +0 -170
  197. package/sdk/ws_handler.ts +0 -190
  198. package/templates/_shared/.env.example +0 -5
  199. package/templates/_shared/package.json +0 -17
  200. package/templates/code-interpreter/agent.ts +0 -27
  201. package/templates/code-interpreter/client.tsx +0 -2
  202. package/templates/dispatch-center/agent.ts +0 -1536
  203. package/templates/dispatch-center/client.tsx +0 -504
  204. package/templates/embedded-assets/agent.ts +0 -49
  205. package/templates/embedded-assets/client.tsx +0 -2
  206. package/templates/embedded-assets/knowledge.json +0 -20
  207. package/templates/health-assistant/agent.ts +0 -160
  208. package/templates/health-assistant/client.tsx +0 -2
  209. package/templates/infocom-adventure/agent.ts +0 -164
  210. package/templates/infocom-adventure/client.tsx +0 -299
  211. package/templates/math-buddy/agent.ts +0 -21
  212. package/templates/math-buddy/client.tsx +0 -2
  213. package/templates/memory-agent/agent.ts +0 -74
  214. package/templates/memory-agent/client.tsx +0 -2
  215. package/templates/night-owl/agent.ts +0 -98
  216. package/templates/night-owl/client.tsx +0 -28
  217. package/templates/personal-finance/agent.ts +0 -26
  218. package/templates/personal-finance/client.tsx +0 -2
  219. package/templates/simple/agent.ts +0 -6
  220. package/templates/simple/client.tsx +0 -2
  221. package/templates/smart-research/agent.ts +0 -164
  222. package/templates/smart-research/client.tsx +0 -2
  223. package/templates/support/README.md +0 -62
  224. package/templates/support/agent.ts +0 -19
  225. package/templates/support/client.tsx +0 -2
  226. package/templates/travel-concierge/agent.ts +0 -29
  227. package/templates/travel-concierge/client.tsx +0 -2
  228. package/templates/web-researcher/agent.ts +0 -17
  229. package/templates/web-researcher/client.tsx +0 -2
  230. package/ui/_components/app.tsx +0 -37
  231. package/ui/_components/chat_view.tsx +0 -36
  232. package/ui/_components/controls.tsx +0 -32
  233. package/ui/_components/error_banner.tsx +0 -18
  234. package/ui/_components/message_bubble.tsx +0 -21
  235. package/ui/_components/message_list.tsx +0 -61
  236. package/ui/_components/state_indicator.tsx +0 -17
  237. package/ui/_components/thinking_indicator.tsx +0 -19
  238. package/ui/_components/tool_call_block.tsx +0 -110
  239. package/ui/_components/tool_icons.tsx +0 -101
  240. package/ui/_components/transcript.tsx +0 -20
  241. package/ui/audio.ts +0 -170
  242. package/ui/components.ts +0 -49
  243. package/ui/mount.tsx +0 -112
  244. package/ui/mount_context.ts +0 -19
  245. package/ui/session.ts +0 -456
  246. package/ui/signals.ts +0 -111
  247. package/ui/types.ts +0 -50
  248. package/ui/worklets/capture-processor.js +0 -62
  249. 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":"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"}
@@ -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":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EACL,KAAK,kBAAkB,EACvB,UAAU,EAIX,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,kEAAkE;AAClE,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,IAAI,CAAC;IACrB,QAAQ,IAAI,IAAI,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,QAAQ,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACnF,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAClE,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,kBAAkB,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,UAAU;;CAEtB,CAAC;AAEF,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAmW9D"}