@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,36 @@
1
+ /**
2
+ * Agent definition factory.
3
+ *
4
+ * @module
5
+ */
6
+ import { type AgentDef, type AgentOptions } from "./types.ts";
7
+ /**
8
+ * Create an agent definition from the given options, applying sensible defaults.
9
+ *
10
+ * This is the main entry point for defining a voice agent. The returned
11
+ * {@linkcode AgentDef} is consumed by the AAI server at deploy time.
12
+ *
13
+ * @param options Configuration for the agent including name, instructions,
14
+ * tools, hooks, and transport settings.
15
+ * @returns A fully resolved agent definition with all defaults applied.
16
+ *
17
+ * @example Basic agent with a custom tool
18
+ * ```ts
19
+ * import { defineAgent } from "aai";
20
+ * import { z } from "zod";
21
+ *
22
+ * export default defineAgent({
23
+ * name: "greeter",
24
+ * instructions: "You greet people warmly.",
25
+ * tools: {
26
+ * greet: {
27
+ * description: "Greet a user by name",
28
+ * parameters: z.object({ name: z.string() }),
29
+ * execute: ({ name }) => `Hello, ${name}!`,
30
+ * },
31
+ * },
32
+ * });
33
+ * ```
34
+ */
35
+ export declare function defineAgent<S>(options: AgentOptions<S>): AgentDef;
36
+ //# sourceMappingURL=define_agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define_agent.d.ts","sourceRoot":"","sources":["../../sdk/define_agent.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EAIlB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,CA0BjE"}
@@ -0,0 +1,63 @@
1
+ // Copyright 2025 the AAI authors. MIT license.
2
+ /**
3
+ * Agent definition factory.
4
+ *
5
+ * @module
6
+ */
7
+ import { DEFAULT_GREETING, DEFAULT_INSTRUCTIONS, normalizeTransport, } from "./types.js";
8
+ /**
9
+ * Create an agent definition from the given options, applying sensible defaults.
10
+ *
11
+ * This is the main entry point for defining a voice agent. The returned
12
+ * {@linkcode AgentDef} is consumed by the AAI server at deploy time.
13
+ *
14
+ * @param options Configuration for the agent including name, instructions,
15
+ * tools, hooks, and transport settings.
16
+ * @returns A fully resolved agent definition with all defaults applied.
17
+ *
18
+ * @example Basic agent with a custom tool
19
+ * ```ts
20
+ * import { defineAgent } from "aai";
21
+ * import { z } from "zod";
22
+ *
23
+ * export default defineAgent({
24
+ * name: "greeter",
25
+ * instructions: "You greet people warmly.",
26
+ * tools: {
27
+ * greet: {
28
+ * description: "Greet a user by name",
29
+ * parameters: z.object({ name: z.string() }),
30
+ * execute: ({ name }) => `Hello, ${name}!`,
31
+ * },
32
+ * },
33
+ * });
34
+ * ```
35
+ */
36
+ export function defineAgent(options) {
37
+ // AgentDef erases the S generic (it's a runtime artifact consumed by the
38
+ // server which doesn't need the compile-time state type). The cast is safe
39
+ // because AgentDef's hooks/tools use the same shapes with `any`/`unknown`.
40
+ return {
41
+ name: options.name,
42
+ env: options.env ?? ["ASSEMBLYAI_API_KEY"],
43
+ transport: normalizeTransport(options.transport),
44
+ mode: options.mode ?? "s2s",
45
+ instructions: options.instructions ?? DEFAULT_INSTRUCTIONS,
46
+ greeting: options.greeting ?? DEFAULT_GREETING,
47
+ voice: options.voice ?? "",
48
+ ...(options.sttPrompt !== undefined && { sttPrompt: options.sttPrompt }),
49
+ maxSteps: options.maxSteps ?? 5,
50
+ ...(options.toolChoice !== undefined && { toolChoice: options.toolChoice }),
51
+ ...(options.builtinTools !== undefined && { builtinTools: options.builtinTools }),
52
+ ...(options.activeTools !== undefined && { activeTools: options.activeTools }),
53
+ tools: options.tools ?? {},
54
+ ...(options.state !== undefined && { state: options.state }),
55
+ ...(options.onConnect !== undefined && { onConnect: options.onConnect }),
56
+ ...(options.onDisconnect !== undefined && { onDisconnect: options.onDisconnect }),
57
+ ...(options.onError !== undefined && { onError: options.onError }),
58
+ ...(options.onTurn !== undefined && { onTurn: options.onTurn }),
59
+ ...(options.onStep !== undefined && { onStep: options.onStep }),
60
+ ...(options.onBeforeStep !== undefined && { onBeforeStep: options.onBeforeStep }),
61
+ };
62
+ }
63
+ //# sourceMappingURL=define_agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define_agent.js","sourceRoot":"","sources":["../../sdk/define_agent.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;GAIG;AAEH,OAAO,EAGL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,WAAW,CAAI,OAAwB;IACrD,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC1C,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;QAChD,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;QAC3B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,oBAAoB;QAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,gBAAgB;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACxE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;QAC/B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3E,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACjF,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9E,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5D,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACjF,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAClE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/D,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/D,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;KACtE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Direct tool execution for self-hosted mode.
3
+ *
4
+ * In self-hosted mode, agent code is trusted (you're running your own code).
5
+ * Tools execute directly in-process — no sandbox, no RPC.
6
+ *
7
+ * @module
8
+ */
9
+ import { type AgentConfig, type ToolSchema } from "./_internal_types.ts";
10
+ import type { Kv } from "./kv.ts";
11
+ import type { ClientSink } from "./protocol.ts";
12
+ import type { Logger, Metrics, S2SConfig } from "./runtime.ts";
13
+ import type { CreateS2sWebSocket } from "./s2s.ts";
14
+ import { type HookInvoker, type Session } from "./session.ts";
15
+ import type { AgentDef } from "./types.ts";
16
+ import type { ExecuteTool } from "./worker_entry.ts";
17
+ export type DirectExecutorOptions = {
18
+ agent: AgentDef;
19
+ env: Record<string, string>;
20
+ kv?: Kv | undefined;
21
+ vectorSearch?: ((query: string, topK: number) => Promise<string>) | undefined;
22
+ createWebSocket?: CreateS2sWebSocket | undefined;
23
+ logger?: Logger | undefined;
24
+ metrics?: Metrics | undefined;
25
+ s2sConfig?: S2SConfig | undefined;
26
+ };
27
+ export type DirectExecutor = {
28
+ executeTool: ExecuteTool;
29
+ hookInvoker: HookInvoker;
30
+ toolSchemas: ToolSchema[];
31
+ createSession(opts: {
32
+ id: string;
33
+ agent: string;
34
+ client: ClientSink;
35
+ skipGreeting?: boolean;
36
+ }): Session;
37
+ };
38
+ /** Build a serializable AgentConfig from an AgentDef. */
39
+ export declare function buildAgentConfig(agent: AgentDef): AgentConfig;
40
+ /** Create a direct (in-process) tool executor and hook invoker for an agent. */
41
+ export declare function createDirectExecutor(opts: DirectExecutorOptions): DirectExecutor;
42
+ //# sourceMappingURL=direct_executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct_executor.d.ts","sourceRoot":"","sources":["../../sdk/direct_executor.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAuB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE9F,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9E,eAAe,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,aAAa,CAAC,IAAI,EAAE;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,UAAU,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;CACb,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAa7D;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,cAAc,CAmIhF"}
@@ -0,0 +1,143 @@
1
+ // Copyright 2025 the AAI authors. MIT license.
2
+ /**
3
+ * Direct tool execution for self-hosted mode.
4
+ *
5
+ * In self-hosted mode, agent code is trusted (you're running your own code).
6
+ * Tools execute directly in-process — no sandbox, no RPC.
7
+ *
8
+ * @module
9
+ */
10
+ import { agentToolsToSchemas } from "./_internal_types.js";
11
+ import { getBuiltinToolDefs, getBuiltinToolSchemas } from "./builtin_tools.js";
12
+ import { createMemoryKv } from "./kv.js";
13
+ import { consoleLogger, DEFAULT_S2S_CONFIG, noopMetrics } from "./runtime.js";
14
+ import { createS2sSession } from "./session.js";
15
+ import { executeToolCall } from "./worker_entry.js";
16
+ /** Build a serializable AgentConfig from an AgentDef. */
17
+ export function buildAgentConfig(agent) {
18
+ const config = {
19
+ name: agent.name,
20
+ instructions: agent.instructions,
21
+ greeting: agent.greeting,
22
+ voice: agent.voice,
23
+ };
24
+ if (agent.sttPrompt !== undefined)
25
+ config.sttPrompt = agent.sttPrompt;
26
+ if (typeof agent.maxSteps !== "function")
27
+ config.maxSteps = agent.maxSteps;
28
+ if (agent.toolChoice !== undefined)
29
+ config.toolChoice = agent.toolChoice;
30
+ if (agent.builtinTools)
31
+ config.builtinTools = [...agent.builtinTools];
32
+ if (agent.activeTools)
33
+ config.activeTools = [...agent.activeTools];
34
+ return config;
35
+ }
36
+ /** Create a direct (in-process) tool executor and hook invoker for an agent. */
37
+ export function createDirectExecutor(opts) {
38
+ const { agent, env, kv = createMemoryKv(), vectorSearch, createWebSocket, logger = consoleLogger, metrics = noopMetrics, s2sConfig = DEFAULT_S2S_CONFIG, } = opts;
39
+ const agentConfig = buildAgentConfig(agent);
40
+ // Merge custom + builtin tool definitions
41
+ const builtinDefs = getBuiltinToolDefs(agent.builtinTools ?? [], vectorSearch ? { vectorSearch } : undefined);
42
+ const allTools = {
43
+ ...builtinDefs,
44
+ ...agent.tools,
45
+ };
46
+ // Build tool schemas for the S2S API
47
+ const customSchemas = agentToolsToSchemas(agent.tools ?? {});
48
+ const builtinSchemas = getBuiltinToolSchemas(agent.builtinTools ?? []);
49
+ const toolSchemas = [...customSchemas, ...builtinSchemas];
50
+ // Per-session mutable state
51
+ const sessionState = new Map();
52
+ const frozenEnv = Object.freeze({ ...env });
53
+ function getState(sessionId) {
54
+ if (!sessionState.has(sessionId) && agent.state) {
55
+ sessionState.set(sessionId, agent.state());
56
+ }
57
+ return sessionState.get(sessionId) ?? {};
58
+ }
59
+ function makeHookContext(sessionId) {
60
+ return {
61
+ sessionId,
62
+ env: frozenEnv,
63
+ state: getState(sessionId),
64
+ get kv() {
65
+ return kv;
66
+ },
67
+ };
68
+ }
69
+ const executeTool = async (name, args, sessionId, messages) => {
70
+ const tool = allTools[name];
71
+ if (!tool)
72
+ return JSON.stringify({ error: `Unknown tool: ${name}` });
73
+ return executeToolCall(name, args, {
74
+ tool,
75
+ env: frozenEnv,
76
+ sessionId,
77
+ state: getState(sessionId ?? ""),
78
+ kv,
79
+ messages,
80
+ });
81
+ };
82
+ const hookInvoker = {
83
+ async onConnect(sessionId) {
84
+ await agent.onConnect?.(makeHookContext(sessionId));
85
+ },
86
+ async onDisconnect(sessionId) {
87
+ await agent.onDisconnect?.(makeHookContext(sessionId));
88
+ sessionState.delete(sessionId);
89
+ },
90
+ async onTurn(sessionId, text) {
91
+ await agent.onTurn?.(text, makeHookContext(sessionId));
92
+ },
93
+ async onError(sessionId, error) {
94
+ await agent.onError?.(new Error(error.message), makeHookContext(sessionId));
95
+ },
96
+ async onStep(sessionId, step) {
97
+ await agent.onStep?.(step, makeHookContext(sessionId));
98
+ },
99
+ async resolveTurnConfig(sessionId) {
100
+ const ctx = makeHookContext(sessionId);
101
+ let maxSteps;
102
+ let activeTools;
103
+ if (typeof agent.maxSteps === "function") {
104
+ maxSteps = (await agent.maxSteps(ctx)) ?? undefined;
105
+ }
106
+ if (agent.onBeforeStep) {
107
+ const result = await agent.onBeforeStep(0, ctx);
108
+ activeTools = result?.activeTools;
109
+ }
110
+ if (maxSteps === undefined && activeTools === undefined)
111
+ return null;
112
+ const config = {};
113
+ if (maxSteps !== undefined)
114
+ config.maxSteps = maxSteps;
115
+ if (activeTools !== undefined)
116
+ config.activeTools = activeTools;
117
+ return config;
118
+ },
119
+ };
120
+ function createSession(sessionOpts) {
121
+ if (!createWebSocket) {
122
+ throw new Error("createWebSocket not provided — pass it in DirectExecutorOptions");
123
+ }
124
+ const apiKey = frozenEnv.ASSEMBLYAI_API_KEY ?? "";
125
+ return createS2sSession({
126
+ id: sessionOpts.id,
127
+ agent: sessionOpts.agent,
128
+ client: sessionOpts.client,
129
+ agentConfig,
130
+ toolSchemas,
131
+ apiKey,
132
+ s2sConfig,
133
+ executeTool,
134
+ createWebSocket,
135
+ hookInvoker,
136
+ skipGreeting: sessionOpts.skipGreeting ?? false,
137
+ logger,
138
+ metrics,
139
+ });
140
+ }
141
+ return { executeTool, hookInvoker, toolSchemas, createSession };
142
+ }
143
+ //# sourceMappingURL=direct_executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct_executor.js","sourceRoot":"","sources":["../../sdk/direct_executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Key-value storage interface and in-memory implementation.
3
+ *
4
+ * @module
5
+ */
6
+ /**
7
+ * A single key-value entry returned by {@linkcode Kv.list}.
8
+ *
9
+ * @typeParam T The type of the stored value. Defaults to `unknown`.
10
+ */
11
+ export type KvEntry<T = unknown> = {
12
+ /** The key under which the value is stored. */
13
+ key: string;
14
+ /** The deserialized value. */
15
+ value: T;
16
+ };
17
+ /**
18
+ * Options for listing keys from the KV store.
19
+ *
20
+ * Used with {@linkcode Kv.list} to control result ordering and pagination.
21
+ */
22
+ export type KvListOptions = {
23
+ /** Maximum number of entries to return. */
24
+ limit?: number;
25
+ /** Return entries in reverse key order. */
26
+ reverse?: boolean;
27
+ };
28
+ /**
29
+ * Async key-value store interface used by agents.
30
+ *
31
+ * Agents access the KV store via {@linkcode ToolContext.kv} or
32
+ * {@linkcode HookContext.kv}. Values are JSON-serialized and stored as
33
+ * strings with an optional TTL.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * // Inside a tool execute function:
38
+ * const myTool = {
39
+ * description: "Save and retrieve data",
40
+ * execute: async (_args: unknown, ctx: { kv: Kv }) => {
41
+ * await ctx.kv.set("user:name", "Alice", { expireIn: 60_000 });
42
+ * const name = await ctx.kv.get<string>("user:name");
43
+ * return name; // "Alice"
44
+ * },
45
+ * };
46
+ * ```
47
+ */
48
+ export type Kv = {
49
+ /**
50
+ * Get a value by key, or `null` if not found.
51
+ *
52
+ * @typeParam T The expected type of the stored value.
53
+ * @param key The key to look up.
54
+ * @returns The deserialized value, or `null` if the key does not exist
55
+ * or has expired.
56
+ */
57
+ get<T = unknown>(key: string): Promise<T | null>;
58
+ /**
59
+ * Set a value, optionally with a TTL in milliseconds.
60
+ *
61
+ * @param key The key to store the value under.
62
+ * @param value The value to store. Must be JSON-serializable.
63
+ * @param options Optional settings.
64
+ * @param options.expireIn Time-to-live in milliseconds. The entry is
65
+ * automatically removed after this duration.
66
+ * @throws {Error} If the serialized value exceeds 65,536 bytes.
67
+ */
68
+ set(key: string, value: unknown, options?: {
69
+ expireIn?: number;
70
+ }): Promise<void>;
71
+ /**
72
+ * Delete a key.
73
+ *
74
+ * @param key The key to remove. No-op if the key does not exist.
75
+ */
76
+ delete(key: string): Promise<void>;
77
+ /**
78
+ * List entries whose keys start with the given prefix.
79
+ *
80
+ * Results are sorted by key in ascending lexicographic order by default.
81
+ *
82
+ * @typeParam T The expected type of the stored values.
83
+ * @param prefix Key prefix to filter by. Use `""` to list all entries.
84
+ * @param options Optional pagination and ordering settings.
85
+ * @returns An array of matching {@linkcode KvEntry} objects.
86
+ */
87
+ list<T = unknown>(prefix: string, options?: KvListOptions): Promise<KvEntry<T>[]>;
88
+ };
89
+ export declare const MAX_VALUE_SIZE = 65536;
90
+ /** Sort entries by key and apply reverse/limit options. Mutates the array. */
91
+ export declare function sortAndPaginate<T extends {
92
+ key: string;
93
+ }>(entries: T[], options?: {
94
+ limit?: number;
95
+ reverse?: boolean;
96
+ }): T[];
97
+ /**
98
+ * Create an in-memory KV store (useful for testing and local development).
99
+ *
100
+ * Data is stored in a plain `Map` and does not persist across restarts.
101
+ * TTL expiration is checked lazily on reads and list operations.
102
+ *
103
+ * @returns A {@linkcode Kv} instance backed by in-memory storage.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * import { createMemoryKv } from "./kv.ts";
108
+ *
109
+ * const kv = createMemoryKv();
110
+ * await kv.set("greeting", "hello");
111
+ * const value = await kv.get<string>("greeting"); // "hello"
112
+ * ```
113
+ *
114
+ * @example With TTL
115
+ * ```ts
116
+ * import { createMemoryKv } from "./kv.ts";
117
+ *
118
+ * const kv = createMemoryKv();
119
+ * await kv.set("temp", "expires soon", { expireIn: 5000 });
120
+ * ```
121
+ */
122
+ export declare function createMemoryKv(): Kv;
123
+ //# sourceMappingURL=kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../sdk/kv.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI;IACjC,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,EAAE,GAAG;IACf;;;;;;;OAOG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD;;;;;;;;;OASG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;;;;;;;;OASG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACnF,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvD,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9C,CAAC,EAAE,CAOL;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,IAAI,EAAE,CAmDnC"}
package/dist/sdk/kv.js ADDED
@@ -0,0 +1,91 @@
1
+ // Copyright 2025 the AAI authors. MIT license.
2
+ /**
3
+ * Key-value storage interface and in-memory implementation.
4
+ *
5
+ * @module
6
+ */
7
+ export const MAX_VALUE_SIZE = 65_536;
8
+ /** Sort entries by key and apply reverse/limit options. Mutates the array. */
9
+ export function sortAndPaginate(entries, options) {
10
+ entries.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
11
+ if (options?.reverse)
12
+ entries.reverse();
13
+ if (options?.limit && options.limit > 0) {
14
+ entries.length = Math.min(entries.length, options.limit);
15
+ }
16
+ return entries;
17
+ }
18
+ /**
19
+ * Create an in-memory KV store (useful for testing and local development).
20
+ *
21
+ * Data is stored in a plain `Map` and does not persist across restarts.
22
+ * TTL expiration is checked lazily on reads and list operations.
23
+ *
24
+ * @returns A {@linkcode Kv} instance backed by in-memory storage.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { createMemoryKv } from "./kv.ts";
29
+ *
30
+ * const kv = createMemoryKv();
31
+ * await kv.set("greeting", "hello");
32
+ * const value = await kv.get<string>("greeting"); // "hello"
33
+ * ```
34
+ *
35
+ * @example With TTL
36
+ * ```ts
37
+ * import { createMemoryKv } from "./kv.ts";
38
+ *
39
+ * const kv = createMemoryKv();
40
+ * await kv.set("temp", "expires soon", { expireIn: 5000 });
41
+ * ```
42
+ */
43
+ export function createMemoryKv() {
44
+ const store = new Map();
45
+ function isExpired(entry) {
46
+ return entry.expiresAt !== undefined && entry.expiresAt <= Date.now();
47
+ }
48
+ return {
49
+ get(key) {
50
+ const entry = store.get(key);
51
+ if (!entry || isExpired(entry)) {
52
+ if (entry)
53
+ store.delete(key);
54
+ return Promise.resolve(null);
55
+ }
56
+ return Promise.resolve(JSON.parse(entry.raw));
57
+ },
58
+ set(key, value, options) {
59
+ const raw = JSON.stringify(value);
60
+ if (raw.length > MAX_VALUE_SIZE) {
61
+ throw new Error(`Value exceeds max size of ${MAX_VALUE_SIZE} bytes`);
62
+ }
63
+ const expireIn = options?.expireIn;
64
+ const entry = { raw };
65
+ if (expireIn && expireIn > 0) {
66
+ entry.expiresAt = Date.now() + expireIn;
67
+ }
68
+ store.set(key, entry);
69
+ return Promise.resolve();
70
+ },
71
+ delete(key) {
72
+ store.delete(key);
73
+ return Promise.resolve();
74
+ },
75
+ list(prefix, options) {
76
+ const now = Date.now();
77
+ const entries = [];
78
+ for (const [key, entry] of store) {
79
+ if (entry.expiresAt && entry.expiresAt <= now) {
80
+ store.delete(key);
81
+ continue;
82
+ }
83
+ if (key.startsWith(prefix)) {
84
+ entries.push({ key, value: JSON.parse(entry.raw) });
85
+ }
86
+ }
87
+ return Promise.resolve(sortAndPaginate(entries, options));
88
+ },
89
+ };
90
+ }
91
+ //# sourceMappingURL=kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../sdk/kv.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- // Copyright 2025 the AAI authors. MIT license.
2
1
  /**
3
2
  * AAI SDK — build voice agents powered by STT, LLM, and TTS.
4
3
  *
@@ -22,14 +21,6 @@
22
21
  *
23
22
  * @module
24
23
  */
25
-
26
24
  export { defineAgent } from "./define_agent.ts";
27
- export type {
28
- AgentOptions,
29
- BeforeStepResult,
30
- HookContext,
31
- Message,
32
- PipelineMode,
33
- ToolContext,
34
- ToolDef,
35
- } from "./types.ts";
25
+ export type { AgentOptions, BeforeStepResult, HookContext, Message, PipelineMode, ToolContext, ToolDef, } from "./types.ts";
26
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../sdk/mod.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,YAAY,EACZ,WAAW,EACX,OAAO,GACR,MAAM,YAAY,CAAC"}
@@ -0,0 +1,26 @@
1
+ // Copyright 2025 the AAI authors. MIT license.
2
+ /**
3
+ * AAI SDK — build voice agents powered by STT, LLM, and TTS.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { defineAgent } from "aai";
8
+ * import { z } from "zod";
9
+ *
10
+ * export default defineAgent({
11
+ * name: "my-agent",
12
+ * instructions: "You are a helpful voice assistant.",
13
+ * tools: {
14
+ * greet: {
15
+ * description: "Greet the user by name",
16
+ * parameters: z.object({ name: z.string() }),
17
+ * execute: ({ name }) => `Hello, ${name}!`,
18
+ * },
19
+ * },
20
+ * });
21
+ * ```
22
+ *
23
+ * @module
24
+ */
25
+ export { defineAgent } from "./define_agent.js";
26
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../sdk/mod.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}