@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,121 @@
1
+ # DocsReader (features.docsReader)
2
+
3
+ No description provided
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('docsReader', {
9
+ // A ContentDb instance to read documents from
10
+ contentDb,
11
+ // Optional system prompt to prepend before the docs listing
12
+ systemPrompt,
13
+ // OpenAI model to use for the conversation
14
+ model,
15
+ })
16
+ ```
17
+
18
+ ## Options (Zod v4 schema)
19
+
20
+ | Property | Type | Description |
21
+ |----------|------|-------------|
22
+ | `contentDb` | `any` | A ContentDb instance to read documents from |
23
+ | `systemPrompt` | `string` | Optional system prompt to prepend before the docs listing |
24
+ | `model` | `string` | OpenAI model to use for the conversation |
25
+
26
+ ## Methods
27
+
28
+ ### buildTools
29
+
30
+ Build the tool definitions (listDocs, readDoc, readDocOutline, readDocs) that the conversation model uses to query the content database.
31
+
32
+ **Returns:** `Record<string, ConversationTool>`
33
+
34
+
35
+
36
+ ### buildSystemPrompt
37
+
38
+ Build the system prompt by combining the optional prefix with a table of contents generated from the content database.
39
+
40
+ **Returns:** `string`
41
+
42
+
43
+
44
+ ### createConversation
45
+
46
+ Create and return a new Conversation feature configured with the docs reader's system prompt and tools.
47
+
48
+ **Returns:** `Conversation`
49
+
50
+
51
+
52
+ ### start
53
+
54
+ Initialize the docs reader by loading the content database, creating the conversation, and emitting the start event.
55
+
56
+ **Returns:** `void`
57
+
58
+
59
+
60
+ ### ask
61
+
62
+ Ask the docs reader a question. It will read relevant documents and return an answer based on their content.
63
+
64
+ **Parameters:**
65
+
66
+ | Name | Type | Required | Description |
67
+ |------|------|----------|-------------|
68
+ | `question` | `string` | ✓ | The question to ask |
69
+
70
+ **Returns:** `void`
71
+
72
+
73
+
74
+ ## Getters
75
+
76
+ | Property | Type | Description |
77
+ |----------|------|-------------|
78
+ | `contentDb` | `ContentDb` | The ContentDb instance this reader draws from. |
79
+ | `isStarted` | `any` | Whether the reader has been started and is ready to answer questions. |
80
+
81
+ ## Events (Zod v4 schema)
82
+
83
+ ### start
84
+
85
+ Event emitted by DocsReader
86
+
87
+
88
+
89
+ ### preview
90
+
91
+ Event emitted by DocsReader
92
+
93
+
94
+
95
+ ### answered
96
+
97
+ Event emitted by DocsReader
98
+
99
+
100
+
101
+ ## State (Zod v4 schema)
102
+
103
+ | Property | Type | Description |
104
+ |----------|------|-------------|
105
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
106
+ | `started` | `boolean` | Whether the docs reader has been initialized |
107
+ | `docsLoaded` | `boolean` | Whether the content database has been loaded |
108
+
109
+ ## Examples
110
+
111
+ **features.docsReader**
112
+
113
+ ```ts
114
+ const reader = container.feature('docsReader', {
115
+ contentDb: myContentDb,
116
+ model: 'gpt-4.1'
117
+ })
118
+ await reader.start()
119
+ const answer = await reader.ask('How does authentication work?')
120
+ ```
121
+
@@ -0,0 +1,318 @@
1
+ # OpenAICodex (features.openaiCodex)
2
+
3
+ No description provided
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('openaiCodex', {
9
+ // Path to the codex CLI binary
10
+ codexPath,
11
+ // Default model to use for sessions
12
+ model,
13
+ // Default working directory for sessions
14
+ cwd,
15
+ // Sandbox policy for shell commands
16
+ sandbox,
17
+ // Approval mode for codex operations
18
+ approvalMode,
19
+ // Path to additional project doc to include
20
+ projectDoc,
21
+ // Disable automatic codex.md inclusion
22
+ noProjectDoc,
23
+ // Do not truncate stdout/stderr from command outputs
24
+ fullStdout,
25
+ })
26
+ ```
27
+
28
+ ## Options (Zod v4 schema)
29
+
30
+ | Property | Type | Description |
31
+ |----------|------|-------------|
32
+ | `codexPath` | `string` | Path to the codex CLI binary |
33
+ | `model` | `string` | Default model to use for sessions |
34
+ | `cwd` | `string` | Default working directory for sessions |
35
+ | `sandbox` | `string` | Sandbox policy for shell commands |
36
+ | `approvalMode` | `string` | Approval mode for codex operations |
37
+ | `projectDoc` | `string` | Path to additional project doc to include |
38
+ | `noProjectDoc` | `boolean` | Disable automatic codex.md inclusion |
39
+ | `fullStdout` | `boolean` | Do not truncate stdout/stderr from command outputs |
40
+
41
+ ## Methods
42
+
43
+ ### checkAvailability
44
+
45
+ Check if the Codex CLI is available and capture its version.
46
+
47
+ **Returns:** `Promise<boolean>`
48
+
49
+
50
+
51
+ ### run
52
+
53
+ Run a prompt in a new Codex session. Spawns a subprocess, streams NDJSON events, and resolves when the session completes.
54
+
55
+ **Parameters:**
56
+
57
+ | Name | Type | Required | Description |
58
+ |------|------|----------|-------------|
59
+ | `prompt` | `string` | ✓ | The natural language instruction for the Codex agent |
60
+ | `options` | `CodexRunOptions` | | Optional overrides for model, cwd, sandbox policy, etc. |
61
+
62
+ `CodexRunOptions` properties:
63
+
64
+ | Property | Type | Description |
65
+ |----------|------|-------------|
66
+ | `model` | `string` | |
67
+ | `cwd` | `string` | |
68
+ | `sandbox` | `'read-only' | 'workspace-write' | 'danger-full-access'` | |
69
+ | `approvalMode` | `'suggest' | 'auto-edit' | 'full-auto'` | |
70
+ | `projectDoc` | `string` | |
71
+ | `noProjectDoc` | `boolean` | |
72
+ | `fullStdout` | `boolean` | |
73
+ | `images` | `string[]` | |
74
+ | `fullAuto` | `boolean` | |
75
+ | `resumeSessionId` | `string` | Resume a previous session by ID. |
76
+ | `resumeLast` | `boolean` | Resume the most recent session. |
77
+ | `dangerouslyAutoApproveEverything` | `boolean` | Skip all approvals and sandboxing. |
78
+ | `extraArgs` | `string[]` | Additional CLI flags. |
79
+
80
+ **Returns:** `Promise<CodexSession>`
81
+
82
+ ```ts
83
+ const session = await codex.run('Fix the failing tests')
84
+ console.log(session.result)
85
+
86
+ const session = await codex.run('Refactor the auth module', {
87
+ model: 'o4-mini',
88
+ fullAuto: true,
89
+ cwd: '/path/to/project'
90
+ })
91
+ ```
92
+
93
+
94
+
95
+ ### start
96
+
97
+ Run a prompt without waiting for completion. Returns the session ID immediately so you can subscribe to events.
98
+
99
+ **Parameters:**
100
+
101
+ | Name | Type | Required | Description |
102
+ |------|------|----------|-------------|
103
+ | `prompt` | `string` | ✓ | The natural language instruction for the Codex agent |
104
+ | `options` | `CodexRunOptions` | | Optional overrides for model, cwd, sandbox policy, etc. |
105
+
106
+ `CodexRunOptions` properties:
107
+
108
+ | Property | Type | Description |
109
+ |----------|------|-------------|
110
+ | `model` | `string` | |
111
+ | `cwd` | `string` | |
112
+ | `sandbox` | `'read-only' | 'workspace-write' | 'danger-full-access'` | |
113
+ | `approvalMode` | `'suggest' | 'auto-edit' | 'full-auto'` | |
114
+ | `projectDoc` | `string` | |
115
+ | `noProjectDoc` | `boolean` | |
116
+ | `fullStdout` | `boolean` | |
117
+ | `images` | `string[]` | |
118
+ | `fullAuto` | `boolean` | |
119
+ | `resumeSessionId` | `string` | Resume a previous session by ID. |
120
+ | `resumeLast` | `boolean` | Resume the most recent session. |
121
+ | `dangerouslyAutoApproveEverything` | `boolean` | Skip all approvals and sandboxing. |
122
+ | `extraArgs` | `string[]` | Additional CLI flags. |
123
+
124
+ **Returns:** `string`
125
+
126
+ ```ts
127
+ const sessionId = codex.start('Build a REST API for users')
128
+
129
+ codex.on('session:delta', ({ sessionId: sid, text }) => {
130
+ if (sid === sessionId) process.stdout.write(text)
131
+ })
132
+ ```
133
+
134
+
135
+
136
+ ### abort
137
+
138
+ Kill a running session's subprocess.
139
+
140
+ **Parameters:**
141
+
142
+ | Name | Type | Required | Description |
143
+ |------|------|----------|-------------|
144
+ | `sessionId` | `string` | ✓ | The session ID to abort |
145
+
146
+ **Returns:** `void`
147
+
148
+
149
+
150
+ ### getSession
151
+
152
+ Retrieve the current state of a session by its ID.
153
+
154
+ **Parameters:**
155
+
156
+ | Name | Type | Required | Description |
157
+ |------|------|----------|-------------|
158
+ | `sessionId` | `string` | ✓ | The session ID to look up |
159
+
160
+ **Returns:** `CodexSession | undefined`
161
+
162
+
163
+
164
+ ### waitForSession
165
+
166
+ Wait for a running session to complete or error. Resolves immediately if the session is already in a terminal state.
167
+
168
+ **Parameters:**
169
+
170
+ | Name | Type | Required | Description |
171
+ |------|------|----------|-------------|
172
+ | `sessionId` | `string` | ✓ | The session ID to wait for |
173
+
174
+ **Returns:** `Promise<CodexSession>`
175
+
176
+
177
+
178
+ ### enable
179
+
180
+ Enable the feature. Delegates to the base Feature enable() lifecycle.
181
+
182
+ **Parameters:**
183
+
184
+ | Name | Type | Required | Description |
185
+ |------|------|----------|-------------|
186
+ | `options` | `any` | | Options to merge into the feature configuration |
187
+
188
+ **Returns:** `Promise<this>`
189
+
190
+
191
+
192
+ ## Getters
193
+
194
+ | Property | Type | Description |
195
+ |----------|------|-------------|
196
+ | `codexPath` | `string` | |
197
+
198
+ ## Events (Zod v4 schema)
199
+
200
+ ### session:event
201
+
202
+ Event emitted by OpenAICodex
203
+
204
+
205
+
206
+ ### session:delta
207
+
208
+ Event emitted by OpenAICodex
209
+
210
+
211
+
212
+ ### session:message
213
+
214
+ Event emitted by OpenAICodex
215
+
216
+
217
+
218
+ ### session:exec
219
+
220
+ Event emitted by OpenAICodex
221
+
222
+
223
+
224
+ ### session:reasoning
225
+
226
+ Event emitted by OpenAICodex
227
+
228
+
229
+
230
+ ### session:exec-start
231
+
232
+ Event emitted by OpenAICodex
233
+
234
+
235
+
236
+ ### session:start
237
+
238
+ Event emitted by OpenAICodex
239
+
240
+
241
+
242
+ ### session:error
243
+
244
+ Event emitted by OpenAICodex
245
+
246
+
247
+
248
+ ### session:parse-error
249
+
250
+ Event emitted by OpenAICodex
251
+
252
+
253
+
254
+ ### session:result
255
+
256
+ Event emitted by OpenAICodex
257
+
258
+
259
+
260
+ ### session:abort
261
+
262
+ Event emitted by OpenAICodex
263
+
264
+
265
+
266
+ ## State (Zod v4 schema)
267
+
268
+ | Property | Type | Description |
269
+ |----------|------|-------------|
270
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
271
+ | `sessions` | `object` | Map of session IDs to CodexSession objects |
272
+ | `activeSessions` | `array` | List of currently running session IDs |
273
+ | `codexAvailable` | `boolean` | Whether the codex CLI binary is available |
274
+ | `codexVersion` | `string` | Detected codex CLI version string |
275
+
276
+ ## Examples
277
+
278
+ **features.openaiCodex**
279
+
280
+ ```ts
281
+ const codex = container.feature('openaiCodex')
282
+
283
+ // Listen for events
284
+ codex.on('session:message', ({ sessionId, message }) => console.log(message))
285
+ codex.on('session:patch', ({ sessionId, patch }) => console.log('File changed:', patch.path))
286
+
287
+ // Run a prompt
288
+ const session = await codex.run('Fix the failing tests in src/')
289
+ console.log(session.result)
290
+ ```
291
+
292
+
293
+
294
+ **run**
295
+
296
+ ```ts
297
+ const session = await codex.run('Fix the failing tests')
298
+ console.log(session.result)
299
+
300
+ const session = await codex.run('Refactor the auth module', {
301
+ model: 'o4-mini',
302
+ fullAuto: true,
303
+ cwd: '/path/to/project'
304
+ })
305
+ ```
306
+
307
+
308
+
309
+ **start**
310
+
311
+ ```ts
312
+ const sessionId = codex.start('Build a REST API for users')
313
+
314
+ codex.on('session:delta', ({ sessionId: sid, text }) => {
315
+ if (sid === sessionId) process.stdout.write(text)
316
+ })
317
+ ```
318
+
@@ -0,0 +1,138 @@
1
+ # OpenAPI (features.openapi)
2
+
3
+ The OpenAPI feature loads an OpenAPI/Swagger spec from a URL and provides inspection and conversion utilities. Works in both browser and node environments since it uses fetch.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('openapi')
9
+ ```
10
+
11
+ ## Methods
12
+
13
+ ### load
14
+
15
+ Fetches and parses the OpenAPI spec from the configured URL. Populates `endpoints`, updates state with spec metadata.
16
+
17
+ **Returns:** `Promise<this>`
18
+
19
+
20
+
21
+ ### endpoint
22
+
23
+ Get a single endpoint by its friendly name or operationId.
24
+
25
+ **Parameters:**
26
+
27
+ | Name | Type | Required | Description |
28
+ |------|------|----------|-------------|
29
+ | `name` | `string` | ✓ | The friendly name or operationId to look up |
30
+
31
+ **Returns:** `EndpointInfo | undefined`
32
+
33
+
34
+
35
+ ### toTools
36
+
37
+ Convert all endpoints into OpenAI-compatible tool definitions.
38
+
39
+ **Parameters:**
40
+
41
+ | Name | Type | Required | Description |
42
+ |------|------|----------|-------------|
43
+ | `filter` | `(ep: EndpointInfo) => boolean` | | Optional predicate to select which endpoints to include |
44
+
45
+ **Returns:** `OpenAIToolDef[]`
46
+
47
+
48
+
49
+ ### toTool
50
+
51
+ Convert a single endpoint (by name) to an OpenAI-compatible tool definition.
52
+
53
+ **Parameters:**
54
+
55
+ | Name | Type | Required | Description |
56
+ |------|------|----------|-------------|
57
+ | `name` | `string` | ✓ | The endpoint friendly name or operationId |
58
+
59
+ **Returns:** `OpenAIToolDef | undefined`
60
+
61
+
62
+
63
+ ### toFunctions
64
+
65
+ Convert all endpoints into OpenAI-compatible function definitions.
66
+
67
+ **Parameters:**
68
+
69
+ | Name | Type | Required | Description |
70
+ |------|------|----------|-------------|
71
+ | `filter` | `(ep: EndpointInfo) => boolean` | | Optional predicate to select which endpoints to include |
72
+
73
+ **Returns:** `OpenAIFunctionDef[]`
74
+
75
+
76
+
77
+ ### toFunction
78
+
79
+ Convert a single endpoint (by name) to an OpenAI function definition.
80
+
81
+ **Parameters:**
82
+
83
+ | Name | Type | Required | Description |
84
+ |------|------|----------|-------------|
85
+ | `name` | `string` | ✓ | The endpoint friendly name or operationId |
86
+
87
+ **Returns:** `OpenAIFunctionDef | undefined`
88
+
89
+
90
+
91
+ ### toJSON
92
+
93
+ Return a compact JSON summary of all endpoints, useful for logging or REPL inspection.
94
+
95
+ **Returns:** `void`
96
+
97
+
98
+
99
+ ## Getters
100
+
101
+ | Property | Type | Description |
102
+ |----------|------|-------------|
103
+ | `serverUrl` | `string` | The base server URL derived from options, normalizing the openapi.json suffix |
104
+ | `specUrl` | `string` | The URL that will be fetched for the spec document |
105
+ | `spec` | `any` | The raw spec object. Null before load() is called. |
106
+ | `endpoints` | `EndpointInfo[]` | All parsed endpoints as an array |
107
+ | `endpointNames` | `string[]` | All endpoint friendly names |
108
+ | `endpointsByTag` | `Record<string, EndpointInfo[]>` | Map of endpoints grouped by tag |
109
+
110
+ ## Events (Zod v4 schema)
111
+
112
+ ### loaded
113
+
114
+ Event emitted by OpenAPI
115
+
116
+
117
+
118
+ ## Examples
119
+
120
+ **features.openapi**
121
+
122
+ ```ts
123
+ const api = container.feature('openapi', { url: 'https://petstore.swagger.io/v2' })
124
+ await api.load()
125
+
126
+ // Inspect all endpoints
127
+ api.endpoints
128
+
129
+ // Get a single endpoint by its friendly name
130
+ api.endpoint('getPetById')
131
+
132
+ // Convert to OpenAI tool definitions
133
+ api.toTools()
134
+
135
+ // Convert a single endpoint to a function definition
136
+ api.toFunction('getPetById')
137
+ ```
138
+