@soederpop/luca 0.0.2

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 (358) hide show
  1. package/CLAUDE.md +71 -0
  2. package/README.md +78 -0
  3. package/bun.lock +2928 -0
  4. package/bunfig.toml +3 -0
  5. package/commands/audit-docs.ts +740 -0
  6. package/commands/build-scaffolds.ts +154 -0
  7. package/commands/generate-api-docs.ts +114 -0
  8. package/commands/update-introspection.ts +67 -0
  9. package/docs/CLI.md +335 -0
  10. package/docs/README.md +88 -0
  11. package/docs/TABLE-OF-CONTENTS.md +157 -0
  12. package/docs/apis/clients/elevenlabs.md +84 -0
  13. package/docs/apis/clients/graph.md +56 -0
  14. package/docs/apis/clients/openai.md +69 -0
  15. package/docs/apis/clients/rest.md +41 -0
  16. package/docs/apis/clients/websocket.md +107 -0
  17. package/docs/apis/features/agi/assistant.md +471 -0
  18. package/docs/apis/features/agi/assistants-manager.md +154 -0
  19. package/docs/apis/features/agi/claude-code.md +602 -0
  20. package/docs/apis/features/agi/conversation-history.md +352 -0
  21. package/docs/apis/features/agi/conversation.md +333 -0
  22. package/docs/apis/features/agi/docs-reader.md +121 -0
  23. package/docs/apis/features/agi/openai-codex.md +318 -0
  24. package/docs/apis/features/agi/openapi.md +138 -0
  25. package/docs/apis/features/agi/semantic-search.md +387 -0
  26. package/docs/apis/features/agi/skills-library.md +216 -0
  27. package/docs/apis/features/node/container-link.md +133 -0
  28. package/docs/apis/features/node/content-db.md +313 -0
  29. package/docs/apis/features/node/disk-cache.md +379 -0
  30. package/docs/apis/features/node/dns.md +651 -0
  31. package/docs/apis/features/node/docker.md +705 -0
  32. package/docs/apis/features/node/downloader.md +81 -0
  33. package/docs/apis/features/node/esbuild.md +59 -0
  34. package/docs/apis/features/node/file-manager.md +182 -0
  35. package/docs/apis/features/node/fs.md +581 -0
  36. package/docs/apis/features/node/git.md +330 -0
  37. package/docs/apis/features/node/google-auth.md +174 -0
  38. package/docs/apis/features/node/google-calendar.md +187 -0
  39. package/docs/apis/features/node/google-docs.md +151 -0
  40. package/docs/apis/features/node/google-drive.md +225 -0
  41. package/docs/apis/features/node/google-sheets.md +179 -0
  42. package/docs/apis/features/node/grep.md +290 -0
  43. package/docs/apis/features/node/helpers.md +135 -0
  44. package/docs/apis/features/node/ink.md +334 -0
  45. package/docs/apis/features/node/ipc-socket.md +260 -0
  46. package/docs/apis/features/node/json-tree.md +86 -0
  47. package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
  48. package/docs/apis/features/node/networking.md +281 -0
  49. package/docs/apis/features/node/nlp.md +133 -0
  50. package/docs/apis/features/node/opener.md +97 -0
  51. package/docs/apis/features/node/os.md +118 -0
  52. package/docs/apis/features/node/package-finder.md +402 -0
  53. package/docs/apis/features/node/postgres.md +212 -0
  54. package/docs/apis/features/node/proc.md +430 -0
  55. package/docs/apis/features/node/process-manager.md +210 -0
  56. package/docs/apis/features/node/python.md +278 -0
  57. package/docs/apis/features/node/repl.md +88 -0
  58. package/docs/apis/features/node/runpod.md +673 -0
  59. package/docs/apis/features/node/secure-shell.md +169 -0
  60. package/docs/apis/features/node/semantic-search.md +401 -0
  61. package/docs/apis/features/node/sqlite.md +211 -0
  62. package/docs/apis/features/node/telegram.md +254 -0
  63. package/docs/apis/features/node/tts.md +118 -0
  64. package/docs/apis/features/node/ui.md +703 -0
  65. package/docs/apis/features/node/vault.md +64 -0
  66. package/docs/apis/features/node/vm.md +84 -0
  67. package/docs/apis/features/node/window-manager.md +337 -0
  68. package/docs/apis/features/node/yaml-tree.md +85 -0
  69. package/docs/apis/features/node/yaml.md +176 -0
  70. package/docs/apis/features/web/asset-loader.md +47 -0
  71. package/docs/apis/features/web/container-link.md +133 -0
  72. package/docs/apis/features/web/esbuild.md +59 -0
  73. package/docs/apis/features/web/helpers.md +135 -0
  74. package/docs/apis/features/web/network.md +30 -0
  75. package/docs/apis/features/web/speech.md +55 -0
  76. package/docs/apis/features/web/vault.md +64 -0
  77. package/docs/apis/features/web/vm.md +84 -0
  78. package/docs/apis/features/web/voice.md +67 -0
  79. package/docs/apis/servers/express.md +127 -0
  80. package/docs/apis/servers/mcp.md +213 -0
  81. package/docs/apis/servers/websocket.md +99 -0
  82. package/docs/documentation-audit.md +134 -0
  83. package/docs/examples/content-db.md +77 -0
  84. package/docs/examples/disk-cache.md +83 -0
  85. package/docs/examples/docker.md +101 -0
  86. package/docs/examples/downloader.md +70 -0
  87. package/docs/examples/esbuild.md +80 -0
  88. package/docs/examples/file-manager.md +82 -0
  89. package/docs/examples/fs.md +83 -0
  90. package/docs/examples/git.md +85 -0
  91. package/docs/examples/google-auth.md +88 -0
  92. package/docs/examples/google-calendar.md +94 -0
  93. package/docs/examples/google-docs.md +82 -0
  94. package/docs/examples/google-drive.md +96 -0
  95. package/docs/examples/google-sheets.md +95 -0
  96. package/docs/examples/grep.md +85 -0
  97. package/docs/examples/ink-blocks.md +75 -0
  98. package/docs/examples/ink-renderer.md +41 -0
  99. package/docs/examples/ink.md +103 -0
  100. package/docs/examples/ipc-socket.md +103 -0
  101. package/docs/examples/json-tree.md +91 -0
  102. package/docs/examples/launcher-app-command-listener.md +120 -0
  103. package/docs/examples/networking.md +58 -0
  104. package/docs/examples/nlp.md +91 -0
  105. package/docs/examples/opener.md +78 -0
  106. package/docs/examples/os.md +72 -0
  107. package/docs/examples/package-finder.md +89 -0
  108. package/docs/examples/port-exposer.md +89 -0
  109. package/docs/examples/postgres.md +91 -0
  110. package/docs/examples/proc.md +81 -0
  111. package/docs/examples/process-manager.md +79 -0
  112. package/docs/examples/python.md +91 -0
  113. package/docs/examples/repl.md +93 -0
  114. package/docs/examples/runpod.md +119 -0
  115. package/docs/examples/secure-shell.md +92 -0
  116. package/docs/examples/sqlite.md +86 -0
  117. package/docs/examples/telegram.md +77 -0
  118. package/docs/examples/tts.md +86 -0
  119. package/docs/examples/ui.md +80 -0
  120. package/docs/examples/vault.md +70 -0
  121. package/docs/examples/vm.md +86 -0
  122. package/docs/examples/window-manager.md +125 -0
  123. package/docs/examples/yaml-tree.md +93 -0
  124. package/docs/examples/yaml.md +104 -0
  125. package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
  126. package/docs/ideas/container-use-api.md +9 -0
  127. package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
  128. package/docs/ideas/feature-stacks.md +22 -0
  129. package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
  130. package/docs/ideas/mcp-design.md +9 -0
  131. package/docs/ideas/web-container-debugging-feature.md +13 -0
  132. package/docs/introspection-audit.md +49 -0
  133. package/docs/introspection.md +154 -0
  134. package/docs/mcp/readme.md +162 -0
  135. package/docs/models.ts +38 -0
  136. package/docs/philosophy.md +85 -0
  137. package/docs/principles.md +7 -0
  138. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
  139. package/docs/prompts/mcp-test-easy-command.md +27 -0
  140. package/docs/reports/assistant-bugs.md +38 -0
  141. package/docs/reports/attach-pattern-usage.md +18 -0
  142. package/docs/reports/code-audit-results.md +391 -0
  143. package/docs/reports/introspection-audit-tasks.md +378 -0
  144. package/docs/reports/luca-mcp-improvements.md +128 -0
  145. package/docs/scaffolds/client.md +140 -0
  146. package/docs/scaffolds/command.md +106 -0
  147. package/docs/scaffolds/endpoint.md +176 -0
  148. package/docs/scaffolds/feature.md +148 -0
  149. package/docs/scaffolds/server.md +187 -0
  150. package/docs/tasks/web-container-helper-discovery.md +71 -0
  151. package/docs/todos.md +1 -0
  152. package/docs/tutorials/01-getting-started.md +106 -0
  153. package/docs/tutorials/02-container.md +210 -0
  154. package/docs/tutorials/03-scripts.md +194 -0
  155. package/docs/tutorials/04-features-overview.md +196 -0
  156. package/docs/tutorials/05-state-and-events.md +171 -0
  157. package/docs/tutorials/06-servers.md +157 -0
  158. package/docs/tutorials/07-endpoints.md +198 -0
  159. package/docs/tutorials/08-commands.md +171 -0
  160. package/docs/tutorials/09-clients.md +162 -0
  161. package/docs/tutorials/10-creating-features.md +198 -0
  162. package/docs/tutorials/11-contentbase.md +191 -0
  163. package/docs/tutorials/12-assistants.md +215 -0
  164. package/docs/tutorials/13-introspection.md +147 -0
  165. package/docs/tutorials/14-type-system.md +174 -0
  166. package/docs/tutorials/15-project-patterns.md +222 -0
  167. package/docs/tutorials/16-google-features.md +534 -0
  168. package/docs/tutorials/17-tui-blocks.md +530 -0
  169. package/docs/tutorials/18-semantic-search.md +334 -0
  170. package/index.ts +1 -0
  171. package/luca.console.ts +9 -0
  172. package/main.py +6 -0
  173. package/package.json +154 -0
  174. package/pyproject.toml +7 -0
  175. package/scripts/animations/chrome-glitch.ts +55 -0
  176. package/scripts/animations/index.ts +16 -0
  177. package/scripts/animations/neon-pulse.ts +64 -0
  178. package/scripts/animations/types.ts +6 -0
  179. package/scripts/build-web.ts +28 -0
  180. package/scripts/examples/ask-luca-expert.ts +42 -0
  181. package/scripts/examples/assistant-questions.ts +12 -0
  182. package/scripts/examples/excalidraw-expert.ts +75 -0
  183. package/scripts/examples/expert-chat.ts +0 -0
  184. package/scripts/examples/file-manager.ts +14 -0
  185. package/scripts/examples/ideas.ts +12 -0
  186. package/scripts/examples/interactive-chat.ts +20 -0
  187. package/scripts/examples/openai-tool-calls.ts +113 -0
  188. package/scripts/examples/opening-a-web-browser.ts +5 -0
  189. package/scripts/examples/telegram-bot.ts +79 -0
  190. package/scripts/examples/telegram-ink-ui.ts +302 -0
  191. package/scripts/examples/using-assistant-with-mcp.ts +560 -0
  192. package/scripts/examples/using-claude-code.ts +10 -0
  193. package/scripts/examples/using-contentdb.ts +35 -0
  194. package/scripts/examples/using-conversations.ts +35 -0
  195. package/scripts/examples/using-disk-cache.ts +10 -0
  196. package/scripts/examples/using-docker-shell.ts +75 -0
  197. package/scripts/examples/using-elevenlabs.ts +25 -0
  198. package/scripts/examples/using-google-calendar.ts +57 -0
  199. package/scripts/examples/using-google-docs.ts +74 -0
  200. package/scripts/examples/using-google-drive.ts +74 -0
  201. package/scripts/examples/using-google-sheets.ts +89 -0
  202. package/scripts/examples/using-nlp.ts +55 -0
  203. package/scripts/examples/using-ollama.ts +10 -0
  204. package/scripts/examples/using-openai-codex.ts +23 -0
  205. package/scripts/examples/using-postgres.ts +55 -0
  206. package/scripts/examples/using-runpod.ts +32 -0
  207. package/scripts/examples/using-tts.ts +40 -0
  208. package/scripts/examples/vm-loading-esm-modules.ts +16 -0
  209. package/scripts/scaffold.ts +391 -0
  210. package/scripts/scratch.ts +15 -0
  211. package/scripts/test-command-listener.ts +123 -0
  212. package/scripts/test-window-manager-lifecycle.ts +86 -0
  213. package/scripts/test-window-manager.ts +43 -0
  214. package/scripts/update-introspection-data.ts +58 -0
  215. package/src/agi/README.md +14 -0
  216. package/src/agi/container.server.ts +114 -0
  217. package/src/agi/endpoints/ask.ts +60 -0
  218. package/src/agi/endpoints/conversations/[id].ts +45 -0
  219. package/src/agi/endpoints/conversations.ts +31 -0
  220. package/src/agi/endpoints/experts.ts +37 -0
  221. package/src/agi/features/assistant.ts +767 -0
  222. package/src/agi/features/assistants-manager.ts +260 -0
  223. package/src/agi/features/claude-code.ts +1111 -0
  224. package/src/agi/features/conversation-history.ts +497 -0
  225. package/src/agi/features/conversation.ts +799 -0
  226. package/src/agi/features/openai-codex.ts +631 -0
  227. package/src/agi/features/openapi.ts +438 -0
  228. package/src/agi/features/skills-library.ts +425 -0
  229. package/src/agi/index.ts +6 -0
  230. package/src/agi/lib/token-counter.ts +122 -0
  231. package/src/browser.ts +25 -0
  232. package/src/bus.ts +100 -0
  233. package/src/cli/cli.ts +70 -0
  234. package/src/client.ts +461 -0
  235. package/src/clients/civitai/index.ts +541 -0
  236. package/src/clients/client-template.ts +41 -0
  237. package/src/clients/comfyui/index.ts +597 -0
  238. package/src/clients/elevenlabs/index.ts +291 -0
  239. package/src/clients/openai/index.ts +451 -0
  240. package/src/clients/supabase/index.ts +366 -0
  241. package/src/command.ts +164 -0
  242. package/src/commands/chat.ts +182 -0
  243. package/src/commands/console.ts +192 -0
  244. package/src/commands/describe.ts +433 -0
  245. package/src/commands/eval.ts +116 -0
  246. package/src/commands/help.ts +214 -0
  247. package/src/commands/index.ts +14 -0
  248. package/src/commands/mcp.ts +64 -0
  249. package/src/commands/prompt.ts +807 -0
  250. package/src/commands/run.ts +257 -0
  251. package/src/commands/sandbox-mcp.ts +439 -0
  252. package/src/commands/scaffold.ts +79 -0
  253. package/src/commands/serve.ts +172 -0
  254. package/src/container.ts +781 -0
  255. package/src/endpoint.ts +340 -0
  256. package/src/feature.ts +75 -0
  257. package/src/hash-object.ts +97 -0
  258. package/src/helper.ts +543 -0
  259. package/src/introspection/generated.agi.ts +23388 -0
  260. package/src/introspection/generated.node.ts +18899 -0
  261. package/src/introspection/generated.web.ts +2021 -0
  262. package/src/introspection/index.ts +256 -0
  263. package/src/introspection/scan.ts +912 -0
  264. package/src/node/container.ts +354 -0
  265. package/src/node/feature.ts +13 -0
  266. package/src/node/features/container-link.ts +558 -0
  267. package/src/node/features/content-db.ts +475 -0
  268. package/src/node/features/disk-cache.ts +382 -0
  269. package/src/node/features/dns.ts +655 -0
  270. package/src/node/features/docker.ts +912 -0
  271. package/src/node/features/downloader.ts +92 -0
  272. package/src/node/features/esbuild.ts +68 -0
  273. package/src/node/features/file-manager.ts +357 -0
  274. package/src/node/features/fs.ts +534 -0
  275. package/src/node/features/git.ts +492 -0
  276. package/src/node/features/google-auth.ts +502 -0
  277. package/src/node/features/google-calendar.ts +300 -0
  278. package/src/node/features/google-docs.ts +404 -0
  279. package/src/node/features/google-drive.ts +339 -0
  280. package/src/node/features/google-sheets.ts +279 -0
  281. package/src/node/features/grep.ts +406 -0
  282. package/src/node/features/helpers.ts +374 -0
  283. package/src/node/features/ink.ts +490 -0
  284. package/src/node/features/ipc-socket.ts +459 -0
  285. package/src/node/features/json-tree.ts +188 -0
  286. package/src/node/features/launcher-app-command-listener.ts +388 -0
  287. package/src/node/features/networking.ts +925 -0
  288. package/src/node/features/nlp.ts +211 -0
  289. package/src/node/features/opener.ts +166 -0
  290. package/src/node/features/os.ts +157 -0
  291. package/src/node/features/package-finder.ts +539 -0
  292. package/src/node/features/port-exposer.ts +342 -0
  293. package/src/node/features/postgres.ts +273 -0
  294. package/src/node/features/proc.ts +502 -0
  295. package/src/node/features/process-manager.ts +542 -0
  296. package/src/node/features/python.ts +444 -0
  297. package/src/node/features/repl.ts +194 -0
  298. package/src/node/features/runpod.ts +802 -0
  299. package/src/node/features/secure-shell.ts +248 -0
  300. package/src/node/features/semantic-search.ts +924 -0
  301. package/src/node/features/sqlite.ts +289 -0
  302. package/src/node/features/telegram.ts +342 -0
  303. package/src/node/features/tts.ts +184 -0
  304. package/src/node/features/ui.ts +857 -0
  305. package/src/node/features/vault.ts +164 -0
  306. package/src/node/features/vm.ts +312 -0
  307. package/src/node/features/window-manager.ts +804 -0
  308. package/src/node/features/yaml-tree.ts +149 -0
  309. package/src/node/features/yaml.ts +132 -0
  310. package/src/node.ts +70 -0
  311. package/src/react/index.ts +175 -0
  312. package/src/registry.ts +199 -0
  313. package/src/scaffolds/generated.ts +1613 -0
  314. package/src/scaffolds/template.ts +37 -0
  315. package/src/schemas/base.ts +255 -0
  316. package/src/server.ts +135 -0
  317. package/src/servers/express.ts +209 -0
  318. package/src/servers/mcp.ts +805 -0
  319. package/src/servers/socket.ts +120 -0
  320. package/src/state.ts +101 -0
  321. package/src/web/clients/socket.ts +82 -0
  322. package/src/web/container.ts +74 -0
  323. package/src/web/extension.ts +30 -0
  324. package/src/web/feature.ts +12 -0
  325. package/src/web/features/asset-loader.ts +64 -0
  326. package/src/web/features/container-link.ts +385 -0
  327. package/src/web/features/esbuild.ts +79 -0
  328. package/src/web/features/helpers.ts +267 -0
  329. package/src/web/features/network.ts +61 -0
  330. package/src/web/features/speech.ts +87 -0
  331. package/src/web/features/vault.ts +189 -0
  332. package/src/web/features/vm.ts +78 -0
  333. package/src/web/features/voice-recognition.ts +129 -0
  334. package/src/web/shims/isomorphic-vm.ts +149 -0
  335. package/test/bus.test.ts +134 -0
  336. package/test/clients-servers.test.ts +216 -0
  337. package/test/container-link.test.ts +274 -0
  338. package/test/features.test.ts +160 -0
  339. package/test/integration.test.ts +787 -0
  340. package/test/node-container.test.ts +121 -0
  341. package/test/rate-limit.test.ts +272 -0
  342. package/test/semantic-search.test.ts +550 -0
  343. package/test/state.test.ts +121 -0
  344. package/test-integration/assistant.test.ts +138 -0
  345. package/test-integration/assistants-manager.test.ts +123 -0
  346. package/test-integration/claude-code.test.ts +98 -0
  347. package/test-integration/conversation-history.test.ts +205 -0
  348. package/test-integration/conversation.test.ts +137 -0
  349. package/test-integration/elevenlabs.test.ts +55 -0
  350. package/test-integration/google-services.test.ts +80 -0
  351. package/test-integration/helpers.ts +89 -0
  352. package/test-integration/openai-codex.test.ts +93 -0
  353. package/test-integration/runpod.test.ts +58 -0
  354. package/test-integration/server-endpoints.test.ts +97 -0
  355. package/test-integration/skills-library.test.ts +157 -0
  356. package/test-integration/telegram.test.ts +46 -0
  357. package/tsconfig.json +58 -0
  358. package/uv.lock +8 -0
@@ -0,0 +1,471 @@
1
+ # Assistant (features.assistant)
2
+
3
+ No description provided
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('assistant', {
9
+ // The folder containing the assistant definition
10
+ folder,
11
+ // The folder containing the assistant documentation
12
+ docsFolder,
13
+ // Text to prepend to the system prompt
14
+ prependPrompt,
15
+ // Text to append to the system prompt
16
+ appendPrompt,
17
+ // Override or extend the tools loaded from tools.ts
18
+ tools,
19
+ // Override or extend schemas whose keys match tool names
20
+ schemas,
21
+ // OpenAI model to use
22
+ model,
23
+ // Maximum number of output tokens per completion
24
+ maxTokens,
25
+ // Conversation history persistence mode
26
+ historyMode,
27
+ })
28
+ ```
29
+
30
+ ## Options (Zod v4 schema)
31
+
32
+ | Property | Type | Description |
33
+ |----------|------|-------------|
34
+ | `folder` | `string` | The folder containing the assistant definition |
35
+ | `docsFolder` | `string` | The folder containing the assistant documentation |
36
+ | `prependPrompt` | `string` | Text to prepend to the system prompt |
37
+ | `appendPrompt` | `string` | Text to append to the system prompt |
38
+ | `tools` | `object` | Override or extend the tools loaded from tools.ts |
39
+ | `schemas` | `object` | Override or extend schemas whose keys match tool names |
40
+ | `model` | `string` | OpenAI model to use |
41
+ | `maxTokens` | `number` | Maximum number of output tokens per completion |
42
+ | `historyMode` | `string` | Conversation history persistence mode |
43
+
44
+ ## Methods
45
+
46
+ ### afterInitialize
47
+
48
+ Called immediately after the assistant is constructed. Synchronously loads the system prompt, tools, and hooks, then binds hooks as event listeners so every emitted event automatically invokes its corresponding hook.
49
+
50
+ **Returns:** `void`
51
+
52
+
53
+
54
+ ### use
55
+
56
+ Apply a setup function to this assistant. The function receives the assistant instance and can configure tools, hooks, event listeners, etc.
57
+
58
+ **Parameters:**
59
+
60
+ | Name | Type | Required | Description |
61
+ |------|------|----------|-------------|
62
+ | `fn` | `(assistant: this) => void | Promise<void>` | ✓ | Setup function that receives this assistant |
63
+
64
+ **Returns:** `this`
65
+
66
+ ```ts
67
+ assistant
68
+ .use(setupLogging)
69
+ .use(addAnalyticsTools)
70
+ ```
71
+
72
+
73
+
74
+ ### addTool
75
+
76
+ Add a tool to this assistant. The tool name is derived from the handler's function name.
77
+
78
+ **Parameters:**
79
+
80
+ | Name | Type | Required | Description |
81
+ |------|------|----------|-------------|
82
+ | `handler` | `(...args: any[]) => any` | ✓ | A named function that implements the tool |
83
+ | `schema` | `z.ZodType` | | Optional Zod schema describing the tool's parameters |
84
+
85
+ **Returns:** `this`
86
+
87
+ ```ts
88
+ assistant.addTool(function getWeather(args) {
89
+ return { temp: 72 }
90
+ }, z.object({ city: z.string() }).describe('Get weather for a city'))
91
+ ```
92
+
93
+
94
+
95
+ ### removeTool
96
+
97
+ Remove a tool by name or handler function reference.
98
+
99
+ **Parameters:**
100
+
101
+ | Name | Type | Required | Description |
102
+ |------|------|----------|-------------|
103
+ | `nameOrHandler` | `string | ((...args: any[]) => any)` | ✓ | The tool name string, or the handler function to match |
104
+
105
+ **Returns:** `this`
106
+
107
+
108
+
109
+ ### simulateToolCallWithResult
110
+
111
+ Simulate a tool call and its result by appending the appropriate messages to the conversation history. Useful for injecting context that looks like the assistant performed a tool call.
112
+
113
+ **Parameters:**
114
+
115
+ | Name | Type | Required | Description |
116
+ |------|------|----------|-------------|
117
+ | `toolCallName` | `string` | ✓ | The name of the tool |
118
+ | `args` | `Record<string, any>` | ✓ | The arguments that were "passed" to the tool |
119
+ | `result` | `any` | ✓ | The result the tool "returned" |
120
+
121
+ **Returns:** `this`
122
+
123
+
124
+
125
+ ### simulateQuestionAndResponse
126
+
127
+ Simulate a user question and assistant response by appending both messages to the conversation history.
128
+
129
+ **Parameters:**
130
+
131
+ | Name | Type | Required | Description |
132
+ |------|------|----------|-------------|
133
+ | `question` | `string` | ✓ | The user's question |
134
+ | `response` | `string` | ✓ | The assistant's response |
135
+
136
+ **Returns:** `this`
137
+
138
+
139
+
140
+ ### loadSystemPrompt
141
+
142
+ Load the system prompt from CORE.md, applying any prepend/append options.
143
+
144
+ **Returns:** `string`
145
+
146
+
147
+
148
+ ### loadTools
149
+
150
+ Load tools from tools.ts using the container's VM feature, injecting the container and assistant as globals. Merges with any tools provided in the constructor options. Runs synchronously via vm.loadModule.
151
+
152
+ **Returns:** `Record<string, ConversationTool>`
153
+
154
+
155
+
156
+ ### loadHooks
157
+
158
+ Load event hooks from hooks.ts. Each exported function name should match an event the assistant emits. When that event fires, the corresponding hook function is called. Runs synchronously via vm.loadModule.
159
+
160
+ **Returns:** `Record<string, (...args: any[]) => any>`
161
+
162
+
163
+
164
+ ### resumeThread
165
+
166
+ Override thread for resume. Call before start().
167
+
168
+ **Parameters:**
169
+
170
+ | Name | Type | Required | Description |
171
+ |------|------|----------|-------------|
172
+ | `threadId` | `string` | ✓ | The thread ID to resume |
173
+
174
+ **Returns:** `this`
175
+
176
+
177
+
178
+ ### listHistory
179
+
180
+ List saved conversations for this assistant+project.
181
+
182
+ **Parameters:**
183
+
184
+ | Name | Type | Required | Description |
185
+ |------|------|----------|-------------|
186
+ | `opts` | `{ limit?: number }` | | Optional limit |
187
+
188
+ **Returns:** `Promise<ConversationMeta[]>`
189
+
190
+
191
+
192
+ ### clearHistory
193
+
194
+ Delete all history for this assistant+project.
195
+
196
+ **Returns:** `Promise<number>`
197
+
198
+
199
+
200
+ ### start
201
+
202
+ Start the assistant by creating the conversation and wiring up events. The system prompt, tools, and hooks are already loaded synchronously during initialization.
203
+
204
+ **Returns:** `Promise<this>`
205
+
206
+
207
+
208
+ ### ask
209
+
210
+ Ask the assistant a question. It will use its tools to produce a streamed response. The assistant auto-starts if needed.
211
+
212
+ **Parameters:**
213
+
214
+ | Name | Type | Required | Description |
215
+ |------|------|----------|-------------|
216
+ | `question` | `string | ContentPart[]` | ✓ | The question to ask |
217
+ | `options` | `AskOptions` | | Parameter options |
218
+
219
+ **Returns:** `Promise<string>`
220
+
221
+ ```ts
222
+ const answer = await assistant.ask('What capabilities do you have?')
223
+ ```
224
+
225
+
226
+
227
+ ### save
228
+
229
+ Save the conversation to disk via conversationHistory.
230
+
231
+ **Parameters:**
232
+
233
+ | Name | Type | Required | Description |
234
+ |------|------|----------|-------------|
235
+ | `opts` | `{ title?: string; tags?: string[]; thread?: string; metadata?: Record<string, any> }` | | Optional overrides for title, tags, thread, or metadata |
236
+
237
+ **Returns:** `void`
238
+
239
+
240
+
241
+ ## Getters
242
+
243
+ | Property | Type | Description |
244
+ |----------|------|-------------|
245
+ | `resolvedFolder` | `string` | The absolute resolved path to the assistant folder. |
246
+ | `corePromptPath` | `string` | The path to CORE.md which provides the system prompt. |
247
+ | `toolsModulePath` | `string` | The path to tools.ts which provides tool implementations and schemas. |
248
+ | `hooksModulePath` | `string` | The path to hooks.ts which provides event handler functions. |
249
+ | `hasVoice` | `boolean` | Whether this assistant has a voice.yaml configuration file. |
250
+ | `voiceConfig` | `Record<string, any> | undefined` | Parsed voice configuration from voice.yaml, or undefined if not present. |
251
+ | `resolvedDocsFolder` | `any` | |
252
+ | `contentDb` | `ContentDb` | Returns an instance of a ContentDb feature for the resolved docs folder |
253
+ | `conversation` | `Conversation` | |
254
+ | `messages` | `any` | |
255
+ | `isStarted` | `boolean` | Whether the assistant has been started and is ready to receive questions. |
256
+ | `systemPrompt` | `string` | The current system prompt text. |
257
+ | `tools` | `Record<string, ConversationTool>` | The tools registered with this assistant. |
258
+ | `paths` | `any` | Provides a helper for creating paths off of the assistant's base folder |
259
+ | `assistantName` | `string` | The assistant name derived from the folder basename. |
260
+ | `cwdHash` | `string` | An 8-char hash of the container cwd for per-project thread isolation. |
261
+ | `threadPrefix` | `string` | The thread prefix for this assistant+project combination. |
262
+ | `conversationHistory` | `ConversationHistory` | The conversationHistory feature instance. |
263
+ | `currentThreadId` | `string | undefined` | The active thread ID (undefined in lifecycle mode). |
264
+
265
+ ## Events (Zod v4 schema)
266
+
267
+ ### created
268
+
269
+ Emitted immediately after the assistant loads its prompt, tools, and hooks.
270
+
271
+
272
+
273
+ ### hookFired
274
+
275
+ Emitted when a hook function is called
276
+
277
+ **Event Arguments:**
278
+
279
+ | Name | Type | Description |
280
+ |------|------|-------------|
281
+ | `arg0` | `string` | Hook/event name |
282
+
283
+
284
+
285
+ ### turnStart
286
+
287
+ Emitted when a new completion turn begins. isFollowUp is true when resuming after tool calls
288
+
289
+ **Event Arguments:**
290
+
291
+ | Name | Type | Description |
292
+ |------|------|-------------|
293
+ | `arg0` | `object` | |
294
+
295
+
296
+
297
+ ### turnEnd
298
+
299
+ Emitted when a completion turn ends. hasToolCalls indicates whether tool calls will follow
300
+
301
+ **Event Arguments:**
302
+
303
+ | Name | Type | Description |
304
+ |------|------|-------------|
305
+ | `arg0` | `object` | |
306
+
307
+
308
+
309
+ ### chunk
310
+
311
+ Emitted as tokens stream in
312
+
313
+ **Event Arguments:**
314
+
315
+ | Name | Type | Description |
316
+ |------|------|-------------|
317
+ | `arg0` | `string` | A chunk of streamed text |
318
+
319
+
320
+
321
+ ### preview
322
+
323
+ Emitted with the full response text accumulated across all turns
324
+
325
+ **Event Arguments:**
326
+
327
+ | Name | Type | Description |
328
+ |------|------|-------------|
329
+ | `arg0` | `string` | The accumulated response so far |
330
+
331
+
332
+
333
+ ### response
334
+
335
+ Emitted when a complete response is produced (accumulated across all turns)
336
+
337
+ **Event Arguments:**
338
+
339
+ | Name | Type | Description |
340
+ |------|------|-------------|
341
+ | `arg0` | `string` | The final response text |
342
+
343
+
344
+
345
+ ### rawEvent
346
+
347
+ Emitted for each raw streaming event from the underlying conversation transport
348
+
349
+ **Event Arguments:**
350
+
351
+ | Name | Type | Description |
352
+ |------|------|-------------|
353
+ | `arg0` | `any` | A raw streaming event from the active model API |
354
+
355
+
356
+
357
+ ### mcpEvent
358
+
359
+ Emitted for MCP-specific streaming and output-item events when using Responses API MCP tools
360
+
361
+ **Event Arguments:**
362
+
363
+ | Name | Type | Description |
364
+ |------|------|-------------|
365
+ | `arg0` | `any` | A raw MCP-related streaming event |
366
+
367
+
368
+
369
+ ### toolCall
370
+
371
+ Emitted when a tool is called
372
+
373
+ **Event Arguments:**
374
+
375
+ | Name | Type | Description |
376
+ |------|------|-------------|
377
+ | `arg0` | `string` | Tool name |
378
+ | `arg1` | `any` | Tool arguments |
379
+
380
+
381
+
382
+ ### toolResult
383
+
384
+ Emitted when a tool returns a result
385
+
386
+ **Event Arguments:**
387
+
388
+ | Name | Type | Description |
389
+ |------|------|-------------|
390
+ | `arg0` | `string` | Tool name |
391
+ | `arg1` | `any` | Result value |
392
+
393
+
394
+
395
+ ### toolError
396
+
397
+ Emitted when a tool call fails
398
+
399
+ **Event Arguments:**
400
+
401
+ | Name | Type | Description |
402
+ |------|------|-------------|
403
+ | `arg0` | `string` | Tool name |
404
+ | `arg1` | `any` | Error |
405
+
406
+
407
+
408
+ ### started
409
+
410
+ Emitted when the assistant has been initialized
411
+
412
+
413
+
414
+ ### answered
415
+
416
+ Event emitted by Assistant
417
+
418
+
419
+
420
+ ## State (Zod v4 schema)
421
+
422
+ | Property | Type | Description |
423
+ |----------|------|-------------|
424
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
425
+ | `started` | `boolean` | Whether the assistant has been initialized |
426
+ | `conversationCount` | `number` | Number of ask() calls made |
427
+ | `lastResponse` | `string` | The most recent response text |
428
+ | `folder` | `string` | The resolved assistant folder path |
429
+ | `docsFolder` | `string` | The resolved docs folder |
430
+ | `conversationId` | `string` | The active conversation persistence ID |
431
+ | `threadId` | `string` | The active thread ID |
432
+
433
+ ## Examples
434
+
435
+ **features.assistant**
436
+
437
+ ```ts
438
+ const assistant = container.feature('assistant', {
439
+ folder: 'assistants/my-helper'
440
+ })
441
+ const answer = await assistant.ask('What capabilities do you have?')
442
+ ```
443
+
444
+
445
+
446
+ **use**
447
+
448
+ ```ts
449
+ assistant
450
+ .use(setupLogging)
451
+ .use(addAnalyticsTools)
452
+ ```
453
+
454
+
455
+
456
+ **addTool**
457
+
458
+ ```ts
459
+ assistant.addTool(function getWeather(args) {
460
+ return { temp: 72 }
461
+ }, z.object({ city: z.string() }).describe('Get weather for a city'))
462
+ ```
463
+
464
+
465
+
466
+ **ask**
467
+
468
+ ```ts
469
+ const answer = await assistant.ask('What capabilities do you have?')
470
+ ```
471
+
@@ -0,0 +1,154 @@
1
+ # AssistantsManager (features.assistantsManager)
2
+
3
+ No description provided
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('assistantsManager', {
9
+ // Automatically discover assistants on init
10
+ autoDiscover,
11
+ })
12
+ ```
13
+
14
+ ## Options (Zod v4 schema)
15
+
16
+ | Property | Type | Description |
17
+ |----------|------|-------------|
18
+ | `autoDiscover` | `boolean` | Automatically discover assistants on init |
19
+
20
+ ## Methods
21
+
22
+ ### afterInitialize
23
+
24
+ **Returns:** `void`
25
+
26
+
27
+
28
+ ### discover
29
+
30
+ Discovers assistants by finding all CORE.md files in the project using the fileManager. Each directory containing a CORE.md is treated as an assistant definition.
31
+
32
+ **Returns:** `this`
33
+
34
+
35
+
36
+ ### list
37
+
38
+ Returns all discovered assistant entries as an array.
39
+
40
+ **Returns:** `AssistantEntry[]`
41
+
42
+
43
+
44
+ ### get
45
+
46
+ Looks up a single assistant entry by name.
47
+
48
+ **Parameters:**
49
+
50
+ | Name | Type | Required | Description |
51
+ |------|------|----------|-------------|
52
+ | `name` | `string` | ✓ | The assistant name (e.g. 'assistants/chief-of-staff') |
53
+
54
+ **Returns:** `AssistantEntry | undefined`
55
+
56
+
57
+
58
+ ### create
59
+
60
+ Creates and returns a new Assistant feature instance for the given name. The assistant is configured with the discovered folder path. Any additional options are merged in.
61
+
62
+ **Parameters:**
63
+
64
+ | Name | Type | Required | Description |
65
+ |------|------|----------|-------------|
66
+ | `name` | `string` | ✓ | The assistant name (must match a discovered entry) |
67
+ | `options` | `Record<string, any>` | | Additional options to pass to the Assistant constructor |
68
+
69
+ **Returns:** `Assistant`
70
+
71
+ ```ts
72
+ const assistant = manager.create('assistants/chief-of-staff', { model: 'gpt-4.1' })
73
+ ```
74
+
75
+
76
+
77
+ ### getInstance
78
+
79
+ Returns a previously created assistant instance by name.
80
+
81
+ **Parameters:**
82
+
83
+ | Name | Type | Required | Description |
84
+ |------|------|----------|-------------|
85
+ | `name` | `string` | ✓ | The assistant name |
86
+
87
+ **Returns:** `Assistant | undefined`
88
+
89
+
90
+
91
+ ### toSummary
92
+
93
+ Generates a markdown summary of all discovered assistants, listing their names and which definition files are present.
94
+
95
+ **Returns:** `string`
96
+
97
+
98
+
99
+ ## Getters
100
+
101
+ | Property | Type | Description |
102
+ |----------|------|-------------|
103
+ | `available` | `any` | |
104
+
105
+ ## Events (Zod v4 schema)
106
+
107
+ ### discovered
108
+
109
+ Emitted when assistant discovery scan completes
110
+
111
+
112
+
113
+ ### assistantCreated
114
+
115
+ Emitted when a new assistant instance is created
116
+
117
+ **Event Arguments:**
118
+
119
+ | Name | Type | Description |
120
+ |------|------|-------------|
121
+ | `arg0` | `string` | The assistant name |
122
+ | `arg1` | `any` | The assistant instance |
123
+
124
+
125
+
126
+ ## State (Zod v4 schema)
127
+
128
+ | Property | Type | Description |
129
+ |----------|------|-------------|
130
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
131
+ | `discovered` | `boolean` | Whether discovery has been run |
132
+ | `assistantCount` | `number` | Number of discovered assistant definitions |
133
+ | `activeCount` | `number` | Number of currently instantiated assistants |
134
+
135
+ ## Examples
136
+
137
+ **features.assistantsManager**
138
+
139
+ ```ts
140
+ const manager = container.feature('assistantsManager')
141
+ manager.discover()
142
+ console.log(manager.list()) // [{ name: 'assistants/chief-of-staff', folder: '...', ... }]
143
+ const assistant = manager.create('assistants/chief-of-staff')
144
+ const answer = await assistant.ask('Hello!')
145
+ ```
146
+
147
+
148
+
149
+ **create**
150
+
151
+ ```ts
152
+ const assistant = manager.create('assistants/chief-of-staff', { model: 'gpt-4.1' })
153
+ ```
154
+