@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,352 @@
1
+ # ConversationHistory (features.conversationHistory)
2
+
3
+ No description provided
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('conversationHistory', {
9
+ // Custom cache directory for conversation storage
10
+ cachePath,
11
+ // Namespace prefix for cache keys to isolate datasets
12
+ namespace,
13
+ })
14
+ ```
15
+
16
+ ## Options (Zod v4 schema)
17
+
18
+ | Property | Type | Description |
19
+ |----------|------|-------------|
20
+ | `cachePath` | `string` | Custom cache directory for conversation storage |
21
+ | `namespace` | `string` | Namespace prefix for cache keys to isolate datasets |
22
+
23
+ ## Methods
24
+
25
+ ### save
26
+
27
+ Save a conversation. Creates or overwrites by ID.
28
+
29
+ **Parameters:**
30
+
31
+ | Name | Type | Required | Description |
32
+ |------|------|----------|-------------|
33
+ | `record` | `ConversationRecord` | ✓ | The full conversation record to persist |
34
+
35
+ `ConversationRecord` properties:
36
+
37
+ | Property | Type | Description |
38
+ |----------|------|-------------|
39
+ | `id` | `string` | |
40
+ | `title` | `string` | |
41
+ | `model` | `string` | |
42
+ | `messages` | `Message[]` | |
43
+ | `tags` | `string[]` | |
44
+ | `thread` | `string` | |
45
+ | `createdAt` | `string` | |
46
+ | `updatedAt` | `string` | |
47
+ | `messageCount` | `number` | |
48
+ | `metadata` | `Record<string, any>` | |
49
+
50
+ **Returns:** `Promise<void>`
51
+
52
+
53
+
54
+ ### create
55
+
56
+ Create a new conversation from messages, returning the saved record.
57
+
58
+ **Parameters:**
59
+
60
+ | Name | Type | Required | Description |
61
+ |------|------|----------|-------------|
62
+ | `opts` | `{
63
+ id?: string
64
+ title?: string
65
+ model?: string
66
+ messages: Message[]
67
+ tags?: string[]
68
+ thread?: string
69
+ metadata?: Record<string, any>
70
+ }` | ✓ | Creation options including messages, optional title, model, tags, thread, and metadata |
71
+
72
+ **Returns:** `Promise<ConversationRecord>`
73
+
74
+
75
+
76
+ ### load
77
+
78
+ Load a full conversation by ID, including all messages.
79
+
80
+ **Parameters:**
81
+
82
+ | Name | Type | Required | Description |
83
+ |------|------|----------|-------------|
84
+ | `id` | `string` | ✓ | The conversation ID |
85
+
86
+ **Returns:** `Promise<ConversationRecord | null>`
87
+
88
+
89
+
90
+ ### getMeta
91
+
92
+ Load just the metadata for a conversation (no messages).
93
+
94
+ **Parameters:**
95
+
96
+ | Name | Type | Required | Description |
97
+ |------|------|----------|-------------|
98
+ | `id` | `string` | ✓ | The conversation ID |
99
+
100
+ **Returns:** `Promise<ConversationMeta | null>`
101
+
102
+
103
+
104
+ ### append
105
+
106
+ Append messages to an existing conversation.
107
+
108
+ **Parameters:**
109
+
110
+ | Name | Type | Required | Description |
111
+ |------|------|----------|-------------|
112
+ | `id` | `string` | ✓ | The conversation ID to append to |
113
+ | `messages` | `Message[]` | ✓ | The messages to append |
114
+
115
+ **Returns:** `Promise<ConversationRecord | null>`
116
+
117
+
118
+
119
+ ### delete
120
+
121
+ Delete a conversation by ID.
122
+
123
+ **Parameters:**
124
+
125
+ | Name | Type | Required | Description |
126
+ |------|------|----------|-------------|
127
+ | `id` | `string` | ✓ | The conversation ID to delete |
128
+
129
+ **Returns:** `Promise<boolean>`
130
+
131
+
132
+
133
+ ### list
134
+
135
+ List all conversation metadata, with optional search/filter. Loads only the lightweight meta records, never the full messages.
136
+
137
+ **Parameters:**
138
+
139
+ | Name | Type | Required | Description |
140
+ |------|------|----------|-------------|
141
+ | `options` | `SearchOptions` | | Optional filters for tag, thread, model, date range, and text query |
142
+
143
+ `SearchOptions` properties:
144
+
145
+ | Property | Type | Description |
146
+ |----------|------|-------------|
147
+ | `tag` | `string` | |
148
+ | `tags` | `string[]` | |
149
+ | `thread` | `string` | |
150
+ | `model` | `string` | |
151
+ | `before` | `string | Date` | |
152
+ | `after` | `string | Date` | |
153
+ | `query` | `string` | |
154
+ | `limit` | `number` | |
155
+ | `offset` | `number` | |
156
+
157
+ **Returns:** `Promise<ConversationMeta[]>`
158
+
159
+
160
+
161
+ ### search
162
+
163
+ Search conversations by text query across titles, tags, and metadata. Also supports filtering by tag, thread, model, and date range.
164
+
165
+ **Parameters:**
166
+
167
+ | Name | Type | Required | Description |
168
+ |------|------|----------|-------------|
169
+ | `options` | `SearchOptions` | ✓ | Search and filter criteria |
170
+
171
+ `SearchOptions` properties:
172
+
173
+ | Property | Type | Description |
174
+ |----------|------|-------------|
175
+ | `tag` | `string` | |
176
+ | `tags` | `string[]` | |
177
+ | `thread` | `string` | |
178
+ | `model` | `string` | |
179
+ | `before` | `string | Date` | |
180
+ | `after` | `string | Date` | |
181
+ | `query` | `string` | |
182
+ | `limit` | `number` | |
183
+ | `offset` | `number` | |
184
+
185
+ **Returns:** `Promise<ConversationMeta[]>`
186
+
187
+
188
+
189
+ ### allTags
190
+
191
+ Get all unique tags across all conversations.
192
+
193
+ **Returns:** `Promise<string[]>`
194
+
195
+
196
+
197
+ ### allThreads
198
+
199
+ Get all unique threads across all conversations.
200
+
201
+ **Returns:** `Promise<string[]>`
202
+
203
+
204
+
205
+ ### tag
206
+
207
+ Tag a conversation. Adds tags without duplicates.
208
+
209
+ **Parameters:**
210
+
211
+ | Name | Type | Required | Description |
212
+ |------|------|----------|-------------|
213
+ | `id` | `string` | ✓ | The conversation ID |
214
+ | `tags` | `string[]` | ✓ | One or more tags to add |
215
+
216
+ **Returns:** `Promise<boolean>`
217
+
218
+
219
+
220
+ ### untag
221
+
222
+ Remove tags from a conversation.
223
+
224
+ **Parameters:**
225
+
226
+ | Name | Type | Required | Description |
227
+ |------|------|----------|-------------|
228
+ | `id` | `string` | ✓ | The conversation ID |
229
+ | `tags` | `string[]` | ✓ | One or more tags to remove |
230
+
231
+ **Returns:** `Promise<boolean>`
232
+
233
+
234
+
235
+ ### updateMeta
236
+
237
+ Update metadata on a conversation without touching messages.
238
+
239
+ **Parameters:**
240
+
241
+ | Name | Type | Required | Description |
242
+ |------|------|----------|-------------|
243
+ | `id` | `string` | ✓ | The conversation ID |
244
+ | `updates` | `Partial<Pick<ConversationRecord, 'title' | 'tags' | 'thread' | 'metadata'>>` | ✓ | Partial updates for title, tags, thread, and/or metadata |
245
+
246
+ **Returns:** `Promise<boolean>`
247
+
248
+
249
+
250
+ ### findByThread
251
+
252
+ Find the most recent conversation for an exact thread ID.
253
+
254
+ **Parameters:**
255
+
256
+ | Name | Type | Required | Description |
257
+ |------|------|----------|-------------|
258
+ | `thread` | `string` | ✓ | The exact thread ID to match |
259
+
260
+ **Returns:** `Promise<ConversationRecord | null>`
261
+
262
+
263
+
264
+ ### findByThreadPrefix
265
+
266
+ Find all conversations whose thread starts with a prefix.
267
+
268
+ **Parameters:**
269
+
270
+ | Name | Type | Required | Description |
271
+ |------|------|----------|-------------|
272
+ | `prefix` | `string` | ✓ | The thread prefix to match |
273
+
274
+ **Returns:** `Promise<ConversationMeta[]>`
275
+
276
+
277
+
278
+ ### deleteThread
279
+
280
+ Delete all conversations for an exact thread.
281
+
282
+ **Parameters:**
283
+
284
+ | Name | Type | Required | Description |
285
+ |------|------|----------|-------------|
286
+ | `thread` | `string` | ✓ | The exact thread ID |
287
+
288
+ **Returns:** `Promise<number>`
289
+
290
+
291
+
292
+ ### deleteByThreadPrefix
293
+
294
+ Delete all conversations matching a thread prefix.
295
+
296
+ **Parameters:**
297
+
298
+ | Name | Type | Required | Description |
299
+ |------|------|----------|-------------|
300
+ | `prefix` | `string` | ✓ | The thread prefix to match |
301
+
302
+ **Returns:** `Promise<number>`
303
+
304
+
305
+
306
+ ## Getters
307
+
308
+ | Property | Type | Description |
309
+ |----------|------|-------------|
310
+ | `diskCache` | `DiskCache` | |
311
+ | `namespace` | `string` | |
312
+
313
+ ## Events (Zod v4 schema)
314
+
315
+ ### saved
316
+
317
+ Event emitted by ConversationHistory
318
+
319
+
320
+
321
+ ### deleted
322
+
323
+ Event emitted by ConversationHistory
324
+
325
+
326
+
327
+ ## State (Zod v4 schema)
328
+
329
+ | Property | Type | Description |
330
+ |----------|------|-------------|
331
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
332
+ | `conversationCount` | `number` | Total number of stored conversations |
333
+ | `lastSaved` | `string` | ISO timestamp of the last save operation |
334
+
335
+ ## Examples
336
+
337
+ **features.conversationHistory**
338
+
339
+ ```ts
340
+ const history = container.feature('conversationHistory', {
341
+ namespace: 'my-app',
342
+ cachePath: '/tmp/conversations'
343
+ })
344
+
345
+ // Create and retrieve conversations
346
+ const record = await history.create({ messages, title: 'My Chat' })
347
+ const loaded = await history.load(record.id)
348
+
349
+ // Search and filter
350
+ const results = await history.search({ tag: 'important', limit: 10 })
351
+ ```
352
+
@@ -0,0 +1,333 @@
1
+ # Conversation (features.conversation)
2
+
3
+ No description provided
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('conversation', {
9
+ // A unique identifier for the conversation
10
+ id,
11
+ // A human-readable title for the conversation
12
+ title,
13
+ // A unique identifier for threads, an arbitrary grouping mechanism
14
+ thread,
15
+ // Any available OpenAI model
16
+ model,
17
+ // Initial message history to seed the conversation
18
+ history,
19
+ // Tools the model can call during conversation
20
+ tools,
21
+ // Remote MCP servers keyed by server label
22
+ mcpServers,
23
+ // Completion API mode. auto uses Responses unless local=true
24
+ api,
25
+ // Tags for categorizing and searching this conversation
26
+ tags,
27
+ // Arbitrary metadata to attach to this conversation
28
+ metadata,
29
+ // Options for the OpenAI client
30
+ clientOptions,
31
+ // Whether to use the local ollama models instead of the remote OpenAI models
32
+ local,
33
+ // Maximum number of output tokens per completion
34
+ maxTokens,
35
+ // Enable automatic compaction when input tokens approach the context limit
36
+ autoCompact,
37
+ // Fraction of context window at which auto-compact triggers (default 0.8)
38
+ compactThreshold,
39
+ // Override the inferred context window size for this model
40
+ contextWindow,
41
+ // Number of recent messages to preserve after compaction (default 4)
42
+ compactKeepRecent,
43
+ })
44
+ ```
45
+
46
+ ## Options (Zod v4 schema)
47
+
48
+ | Property | Type | Description |
49
+ |----------|------|-------------|
50
+ | `id` | `string` | A unique identifier for the conversation |
51
+ | `title` | `string` | A human-readable title for the conversation |
52
+ | `thread` | `string` | A unique identifier for threads, an arbitrary grouping mechanism |
53
+ | `model` | `string` | Any available OpenAI model |
54
+ | `history` | `array` | Initial message history to seed the conversation |
55
+ | `tools` | `object` | Tools the model can call during conversation |
56
+ | `mcpServers` | `object` | Remote MCP servers keyed by server label |
57
+ | `api` | `string` | Completion API mode. auto uses Responses unless local=true |
58
+ | `tags` | `array` | Tags for categorizing and searching this conversation |
59
+ | `metadata` | `object` | Arbitrary metadata to attach to this conversation |
60
+ | `clientOptions` | `object` | Options for the OpenAI client |
61
+ | `local` | `boolean` | Whether to use the local ollama models instead of the remote OpenAI models |
62
+ | `maxTokens` | `number` | Maximum number of output tokens per completion |
63
+ | `autoCompact` | `boolean` | Enable automatic compaction when input tokens approach the context limit |
64
+ | `compactThreshold` | `number` | Fraction of context window at which auto-compact triggers (default 0.8) |
65
+ | `contextWindow` | `number` | Override the inferred context window size for this model |
66
+ | `compactKeepRecent` | `number` | Number of recent messages to preserve after compaction (default 4) |
67
+
68
+ ## Methods
69
+
70
+ ### estimateTokens
71
+
72
+ Estimate the input token count for the current messages array using the js-tiktoken tokenizer. Updates state.
73
+
74
+ **Returns:** `number`
75
+
76
+
77
+
78
+ ### summarize
79
+
80
+ Generate a summary of the conversation so far using the LLM. Read-only — does not modify messages.
81
+
82
+ **Returns:** `Promise<string>`
83
+
84
+
85
+
86
+ ### compact
87
+
88
+ Compact the conversation by summarizing old messages and replacing them with a summary message. Keeps the system message (if any) and the most recent N messages.
89
+
90
+ **Parameters:**
91
+
92
+ | Name | Type | Required | Description |
93
+ |------|------|----------|-------------|
94
+ | `options` | `{ keepRecent?: number }` | | Parameter options |
95
+
96
+ **Returns:** `Promise<{ summary: string; removedCount: number; estimatedTokens: number }>`
97
+
98
+
99
+
100
+ ### ask
101
+
102
+ Send a message and get a streamed response. Automatically handles tool calls by invoking the registered handlers and feeding results back to the model until a final text response is produced.
103
+
104
+ **Parameters:**
105
+
106
+ | Name | Type | Required | Description |
107
+ |------|------|----------|-------------|
108
+ | `content` | `string | ContentPart[]` | ✓ | The user message, either a string or array of content parts (text + images) |
109
+ | `options` | `AskOptions` | | Parameter options |
110
+
111
+ `AskOptions` properties:
112
+
113
+ | Property | Type | Description |
114
+ |----------|------|-------------|
115
+ | `maxTokens` | `number` | |
116
+
117
+ **Returns:** `Promise<string>`
118
+
119
+ ```ts
120
+ const reply = await conversation.ask("What's the weather in SF?")
121
+ // With image:
122
+ const reply = await conversation.ask([
123
+ { type: 'text', text: 'What is in this diagram?' },
124
+ { type: 'image_url', image_url: { url: 'data:image/png;base64,...' } }
125
+ ])
126
+ ```
127
+
128
+
129
+
130
+ ### save
131
+
132
+ Persist this conversation to disk via conversationHistory. Creates a new record if this conversation hasn't been saved before, or updates the existing one.
133
+
134
+ **Parameters:**
135
+
136
+ | Name | Type | Required | Description |
137
+ |------|------|----------|-------------|
138
+ | `opts` | `{ title?: string; tags?: string[]; thread?: string; metadata?: Record<string, any> }` | | Optional overrides for title, tags, thread, or metadata |
139
+
140
+ **Returns:** `void`
141
+
142
+
143
+
144
+ ### pushMessage
145
+
146
+ Append a message to the conversation state.
147
+
148
+ **Parameters:**
149
+
150
+ | Name | Type | Required | Description |
151
+ |------|------|----------|-------------|
152
+ | `message` | `Message` | ✓ | The message to append |
153
+
154
+ **Returns:** `void`
155
+
156
+
157
+
158
+ ## Getters
159
+
160
+ | Property | Type | Description |
161
+ |----------|------|-------------|
162
+ | `tools` | `Record<string, any>` | Returns the registered tools available for the model to call. |
163
+ | `mcpServers` | `Record<string, ConversationMCPServer>` | Returns configured remote MCP servers keyed by server label. |
164
+ | `messages` | `Message[]` | Returns the full message history of the conversation. |
165
+ | `model` | `string` | Returns the OpenAI model name being used for completions. |
166
+ | `apiMode` | `'responses' | 'chat'` | Returns the active completion API mode after resolving auto/local behavior. |
167
+ | `isStreaming` | `boolean` | Whether a streaming response is currently in progress. |
168
+ | `contextWindow` | `number` | The context window size for the current model (from options override or auto-detected). |
169
+ | `isNearContextLimit` | `boolean` | Whether the conversation is approaching the context limit. |
170
+ | `openai` | `any` | Returns the OpenAI client instance from the container. |
171
+ | `history` | `ConversationHistory` | Returns the conversationHistory feature for persistence. |
172
+
173
+ ## Events (Zod v4 schema)
174
+
175
+ ### summarizeStart
176
+
177
+ Event emitted by Conversation
178
+
179
+
180
+
181
+ ### summarizeEnd
182
+
183
+ Event emitted by Conversation
184
+
185
+
186
+
187
+ ### compactStart
188
+
189
+ Event emitted by Conversation
190
+
191
+
192
+
193
+ ### compactEnd
194
+
195
+ Event emitted by Conversation
196
+
197
+
198
+
199
+ ### autoCompactTriggered
200
+
201
+ Event emitted by Conversation
202
+
203
+
204
+
205
+ ### userMessage
206
+
207
+ Event emitted by Conversation
208
+
209
+
210
+
211
+ ### turnStart
212
+
213
+ Event emitted by Conversation
214
+
215
+
216
+
217
+ ### rawEvent
218
+
219
+ Event emitted by Conversation
220
+
221
+
222
+
223
+ ### mcpEvent
224
+
225
+ Event emitted by Conversation
226
+
227
+
228
+
229
+ ### chunk
230
+
231
+ Event emitted by Conversation
232
+
233
+
234
+
235
+ ### preview
236
+
237
+ Event emitted by Conversation
238
+
239
+
240
+
241
+ ### responseCompleted
242
+
243
+ Event emitted by Conversation
244
+
245
+
246
+
247
+ ### toolCallsStart
248
+
249
+ Event emitted by Conversation
250
+
251
+
252
+
253
+ ### toolError
254
+
255
+ Event emitted by Conversation
256
+
257
+
258
+
259
+ ### toolCall
260
+
261
+ Event emitted by Conversation
262
+
263
+
264
+
265
+ ### toolResult
266
+
267
+ Event emitted by Conversation
268
+
269
+
270
+
271
+ ### toolCallsEnd
272
+
273
+ Event emitted by Conversation
274
+
275
+
276
+
277
+ ### turnEnd
278
+
279
+ Event emitted by Conversation
280
+
281
+
282
+
283
+ ### response
284
+
285
+ Event emitted by Conversation
286
+
287
+
288
+
289
+ ## State (Zod v4 schema)
290
+
291
+ | Property | Type | Description |
292
+ |----------|------|-------------|
293
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
294
+ | `id` | `string` | Unique identifier for this conversation instance |
295
+ | `thread` | `string` | Thread identifier for grouping conversations |
296
+ | `model` | `string` | The OpenAI model being used |
297
+ | `messages` | `array` | Full message history of the conversation |
298
+ | `streaming` | `boolean` | Whether a streaming response is currently in progress |
299
+ | `lastResponse` | `string` | The last assistant response text |
300
+ | `toolCalls` | `number` | Total number of tool calls made in this conversation |
301
+ | `api` | `string` | Which completion API is active for this conversation |
302
+ | `lastResponseId` | `any` | Most recent OpenAI Responses API response ID for continuing conversation state |
303
+ | `tokenUsage` | `object` | Cumulative token usage statistics |
304
+ | `estimatedInputTokens` | `number` | Estimated input token count for the current messages array |
305
+ | `compactionCount` | `number` | Number of times compact() has been called |
306
+ | `contextWindow` | `number` | The context window size for the current model |
307
+
308
+ ## Examples
309
+
310
+ **features.conversation**
311
+
312
+ ```ts
313
+ const conversation = container.feature('conversation', {
314
+ model: 'gpt-4.1',
315
+ tools: myToolMap,
316
+ history: [{ role: 'system', content: 'You are a helpful assistant.' }]
317
+ })
318
+ const reply = await conversation.ask('What is the meaning of life?')
319
+ ```
320
+
321
+
322
+
323
+ **ask**
324
+
325
+ ```ts
326
+ const reply = await conversation.ask("What's the weather in SF?")
327
+ // With image:
328
+ const reply = await conversation.ask([
329
+ { type: 'text', text: 'What is in this diagram?' },
330
+ { type: 'image_url', image_url: { url: 'data:image/png;base64,...' } }
331
+ ])
332
+ ```
333
+