@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,210 @@
1
+ # ProcessManager (features.processManager)
2
+
3
+ Manages long-running child processes with tracking, events, and automatic cleanup. Unlike the `proc` feature whose spawn methods block until the child exits, ProcessManager returns a SpawnHandler immediately — a handle object with its own state, events, and lifecycle methods. The feature tracks all spawned processes, maintains observable state, and can automatically kill them on parent exit.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('processManager', {
9
+ // Register process.on exit/SIGINT/SIGTERM handlers to kill all tracked processes
10
+ autoCleanup,
11
+ })
12
+ ```
13
+
14
+ ## Options (Zod v4 schema)
15
+
16
+ | Property | Type | Description |
17
+ |----------|------|-------------|
18
+ | `autoCleanup` | `boolean` | Register process.on exit/SIGINT/SIGTERM handlers to kill all tracked processes |
19
+
20
+ ## Methods
21
+
22
+ ### spawn
23
+
24
+ Spawn a long-running process and return a handle immediately. The returned SpawnHandler provides events for stdout/stderr streaming, exit/crash notifications, and methods to kill or await the process.
25
+
26
+ **Parameters:**
27
+
28
+ | Name | Type | Required | Description |
29
+ |------|------|----------|-------------|
30
+ | `command` | `string` | ✓ | The command to execute (e.g. 'node', 'bun', 'python') |
31
+ | `args` | `string[]` | | Arguments to pass to the command |
32
+ | `options` | `SpawnOptions` | | Spawn configuration |
33
+
34
+ `SpawnOptions` properties:
35
+
36
+ | Property | Type | Description |
37
+ |----------|------|-------------|
38
+ | `tag` | `string` | User-defined tag for later lookups via getByTag() |
39
+ | `cwd` | `string` | Working directory for the spawned process (defaults to container cwd) |
40
+ | `env` | `Record<string, string>` | Additional environment variables merged with process.env |
41
+ | `stdin` | `'pipe' | 'inherit' | 'ignore' | null` | stdin mode: 'pipe' to write to the process, 'inherit', or 'ignore' (default: 'ignore') |
42
+ | `stdout` | `'pipe' | 'inherit' | 'ignore' | null` | stdout mode: 'pipe' to capture output, 'inherit', or 'ignore' (default: 'pipe') |
43
+ | `stderr` | `'pipe' | 'inherit' | 'ignore' | null` | stderr mode: 'pipe' to capture errors, 'inherit', or 'ignore' (default: 'pipe') |
44
+
45
+ **Returns:** `SpawnHandler`
46
+
47
+
48
+
49
+ ### get
50
+
51
+ Get a SpawnHandler by its unique ID.
52
+
53
+ **Parameters:**
54
+
55
+ | Name | Type | Required | Description |
56
+ |------|------|----------|-------------|
57
+ | `id` | `string` | ✓ | The process ID returned by spawn |
58
+
59
+ **Returns:** `SpawnHandler | undefined`
60
+
61
+
62
+
63
+ ### getByTag
64
+
65
+ Find a SpawnHandler by its user-defined tag.
66
+
67
+ **Parameters:**
68
+
69
+ | Name | Type | Required | Description |
70
+ |------|------|----------|-------------|
71
+ | `tag` | `string` | ✓ | The tag passed to spawn() |
72
+
73
+ **Returns:** `SpawnHandler | undefined`
74
+
75
+
76
+
77
+ ### list
78
+
79
+ List all tracked SpawnHandlers (running and finished).
80
+
81
+ **Returns:** `SpawnHandler[]`
82
+
83
+
84
+
85
+ ### killAll
86
+
87
+ Kill all running processes.
88
+
89
+ **Parameters:**
90
+
91
+ | Name | Type | Required | Description |
92
+ |------|------|----------|-------------|
93
+ | `signal` | `NodeJS.Signals | number` | | Signal to send (default: SIGTERM) |
94
+
95
+ **Returns:** `void`
96
+
97
+
98
+
99
+ ### stop
100
+
101
+ Stop the process manager: kill all running processes and remove cleanup handlers.
102
+
103
+ **Returns:** `Promise<void>`
104
+
105
+
106
+
107
+ ### remove
108
+
109
+ Remove a finished handler from tracking.
110
+
111
+ **Parameters:**
112
+
113
+ | Name | Type | Required | Description |
114
+ |------|------|----------|-------------|
115
+ | `id` | `string` | ✓ | The process ID to remove |
116
+
117
+ **Returns:** `boolean`
118
+
119
+
120
+
121
+ ### enable
122
+
123
+ **Parameters:**
124
+
125
+ | Name | Type | Required | Description |
126
+ |------|------|----------|-------------|
127
+ | `options` | `any` | | Parameter options |
128
+
129
+ **Returns:** `Promise<this>`
130
+
131
+
132
+
133
+ ### _onHandlerDone
134
+
135
+ Called by SpawnHandler when a process finishes. Updates feature-level state.
136
+
137
+ **Parameters:**
138
+
139
+ | Name | Type | Required | Description |
140
+ |------|------|----------|-------------|
141
+ | `handler` | `SpawnHandler` | ✓ | Parameter handler |
142
+ | `status` | `'exited' | 'crashed' | 'killed'` | ✓ | Parameter status |
143
+ | `exitCode` | `number` | | Parameter exitCode |
144
+
145
+ **Returns:** `void`
146
+
147
+
148
+
149
+ ## Events (Zod v4 schema)
150
+
151
+ ### spawned
152
+
153
+ Event emitted by ProcessManager
154
+
155
+
156
+
157
+ ### exited
158
+
159
+ Event emitted by ProcessManager
160
+
161
+
162
+
163
+ ### crashed
164
+
165
+ Event emitted by ProcessManager
166
+
167
+
168
+
169
+ ### killed
170
+
171
+ Event emitted by ProcessManager
172
+
173
+
174
+
175
+ ### allStopped
176
+
177
+ Event emitted by ProcessManager
178
+
179
+
180
+
181
+ ## State (Zod v4 schema)
182
+
183
+ | Property | Type | Description |
184
+ |----------|------|-------------|
185
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
186
+ | `processes` | `object` | Map of process ID to metadata |
187
+ | `totalSpawned` | `number` | Total number of processes spawned since feature creation |
188
+
189
+ ## Examples
190
+
191
+ **features.processManager**
192
+
193
+ ```ts
194
+ const pm = container.feature('processManager', { enable: true })
195
+
196
+ const server = pm.spawn('node', ['server.js'], { tag: 'api', cwd: '/app' })
197
+ server.on('stdout', (data) => console.log('[api]', data))
198
+ server.on('crash', (code) => console.error('API crashed:', code))
199
+
200
+ // Kill one
201
+ server.kill()
202
+
203
+ // Kill all tracked processes
204
+ pm.killAll()
205
+
206
+ // List and lookup
207
+ pm.list() // SpawnHandler[]
208
+ pm.getByTag('api') // SpawnHandler | undefined
209
+ ```
210
+
@@ -0,0 +1,278 @@
1
+ # Python (features.python)
2
+
3
+ The Python VM feature provides Python virtual machine capabilities for executing Python code. This feature automatically detects Python environments (uv, conda, venv, system) and provides methods to install dependencies and execute Python scripts. It can manage project-specific Python environments and maintain context between executions.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('python', {
9
+ // Directory containing the Python project
10
+ dir,
11
+ // Custom install command to override auto-detection
12
+ installCommand,
13
+ // Path to Python script that will populate locals/context
14
+ contextScript,
15
+ // Specific Python executable path to use
16
+ pythonPath,
17
+ })
18
+ ```
19
+
20
+ ## Options (Zod v4 schema)
21
+
22
+ | Property | Type | Description |
23
+ |----------|------|-------------|
24
+ | `dir` | `string` | Directory containing the Python project |
25
+ | `installCommand` | `string` | Custom install command to override auto-detection |
26
+ | `contextScript` | `string` | Path to Python script that will populate locals/context |
27
+ | `pythonPath` | `string` | Specific Python executable path to use |
28
+
29
+ ## Methods
30
+
31
+ ### enable
32
+
33
+ **Parameters:**
34
+
35
+ | Name | Type | Required | Description |
36
+ |------|------|----------|-------------|
37
+ | `options` | `any` | | Parameter options |
38
+
39
+ **Returns:** `Promise<this>`
40
+
41
+
42
+
43
+ ### detectEnvironment
44
+
45
+ Detects the Python environment type and sets the appropriate Python path. This method checks for various Python environment managers in order of preference: uv, conda, venv, then falls back to system Python. It sets the pythonPath and environmentType in the state.
46
+
47
+ **Returns:** `Promise<void>`
48
+
49
+ ```ts
50
+ await python.detectEnvironment()
51
+ console.log(python.state.get('environmentType')) // 'uv' | 'conda' | 'venv' | 'system'
52
+ console.log(python.state.get('pythonPath')) // '/path/to/python/executable'
53
+ ```
54
+
55
+
56
+
57
+ ### installDependencies
58
+
59
+ Installs dependencies for the Python project. This method automatically detects the appropriate package manager and install command based on the environment type. If a custom installCommand is provided in options, it will use that instead.
60
+
61
+ **Returns:** `Promise<{ stdout: string; stderr: string; exitCode: number }>`
62
+
63
+ ```ts
64
+ // Auto-detect and install
65
+ const result = await python.installDependencies()
66
+
67
+ // With custom install command
68
+ const python = container.feature('python', {
69
+ installCommand: 'pip install -r requirements.txt'
70
+ })
71
+ const result = await python.installDependencies()
72
+ ```
73
+
74
+
75
+
76
+ ### execute
77
+
78
+ Executes Python code and returns the result. This method creates a temporary Python script with the provided code and variables, executes it using the detected Python environment, and captures the output.
79
+
80
+ **Parameters:**
81
+
82
+ | Name | Type | Required | Description |
83
+ |------|------|----------|-------------|
84
+ | `code` | `string` | ✓ | The Python code to execute |
85
+ | `variables` | `Record<string, any>` | | Variables to make available to the Python code |
86
+ | `options` | `{ captureLocals?: boolean }` | | Execution options |
87
+
88
+ `{ captureLocals?: boolean }` properties:
89
+
90
+ | Property | Type | Description |
91
+ |----------|------|-------------|
92
+ | `captureLocals` | `any` | Whether to capture and return local variables after execution |
93
+
94
+ **Returns:** `Promise<{ stdout: string; stderr: string; exitCode: number; locals?: any }>`
95
+
96
+ ```ts
97
+ // Simple execution
98
+ const result = await python.execute('print("Hello World")')
99
+ console.log(result.stdout) // 'Hello World'
100
+
101
+ // With variables
102
+ const result = await python.execute('print(f"Hello {name}!")', { name: 'Alice' })
103
+
104
+ // Capture locals
105
+ const result = await python.execute('x = 42\ny = x * 2', {}, { captureLocals: true })
106
+ console.log(result.locals) // { x: 42, y: 84 }
107
+ ```
108
+
109
+
110
+
111
+ ### executeFile
112
+
113
+ Executes a Python file and returns the result.
114
+
115
+ **Parameters:**
116
+
117
+ | Name | Type | Required | Description |
118
+ |------|------|----------|-------------|
119
+ | `filePath` | `string` | ✓ | Path to the Python file to execute |
120
+ | `variables` | `Record<string, any>` | | Variables to make available via command line arguments |
121
+
122
+ **Returns:** `Promise<{ stdout: string; stderr: string; exitCode: number }>`
123
+
124
+ ```ts
125
+ const result = await python.executeFile('/path/to/script.py')
126
+ console.log(result.stdout)
127
+ ```
128
+
129
+
130
+
131
+ ### getEnvironmentInfo
132
+
133
+ Gets information about the current Python environment.
134
+
135
+ **Returns:** `Promise<{ version: string; path: string; packages: string[] }>`
136
+
137
+
138
+
139
+ ## Getters
140
+
141
+ | Property | Type | Description |
142
+ |----------|------|-------------|
143
+ | `projectDir` | `any` | Returns the root directory of the Python project. |
144
+ | `pythonPath` | `any` | Returns the path to the Python executable for this environment. |
145
+ | `environmentType` | `any` | Returns the detected environment type: 'uv', 'conda', 'venv', or 'system'. |
146
+
147
+ ## Events (Zod v4 schema)
148
+
149
+ ### ready
150
+
151
+ Event emitted by Python
152
+
153
+
154
+
155
+ ### environmentDetected
156
+
157
+ Event emitted by Python
158
+
159
+
160
+
161
+ ### installingDependencies
162
+
163
+ Event emitted by Python
164
+
165
+
166
+
167
+ ### dependenciesInstalled
168
+
169
+ Event emitted by Python
170
+
171
+
172
+
173
+ ### dependencyInstallFailed
174
+
175
+ Event emitted by Python
176
+
177
+
178
+
179
+ ### localsParseError
180
+
181
+ Event emitted by Python
182
+
183
+
184
+
185
+ ### codeExecuted
186
+
187
+ Event emitted by Python
188
+
189
+
190
+
191
+ ### fileExecuted
192
+
193
+ Event emitted by Python
194
+
195
+
196
+
197
+ ## State (Zod v4 schema)
198
+
199
+ | Property | Type | Description |
200
+ |----------|------|-------------|
201
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
202
+ | `pythonPath` | `any` | Path to the detected Python executable |
203
+ | `projectDir` | `any` | Root directory of the Python project |
204
+ | `environmentType` | `any` | Detected Python environment type (uv, conda, venv, or system) |
205
+ | `isReady` | `boolean` | Whether the Python environment is ready for execution |
206
+ | `lastExecutedScript` | `any` | Path to the last executed Python script |
207
+
208
+ ## Examples
209
+
210
+ **features.python**
211
+
212
+ ```ts
213
+ const python = container.feature('python', {
214
+ dir: "/path/to/python/project",
215
+ contextScript: "/path/to/setup-context.py"
216
+ })
217
+
218
+ // Auto-install dependencies
219
+ await python.installDependencies()
220
+
221
+ // Execute Python code
222
+ const result = await python.execute('print("Hello from Python!")')
223
+
224
+ // Execute with custom variables
225
+ const result2 = await python.execute('print(f"Hello {name}!")', { name: 'World' })
226
+ ```
227
+
228
+
229
+
230
+ **detectEnvironment**
231
+
232
+ ```ts
233
+ await python.detectEnvironment()
234
+ console.log(python.state.get('environmentType')) // 'uv' | 'conda' | 'venv' | 'system'
235
+ console.log(python.state.get('pythonPath')) // '/path/to/python/executable'
236
+ ```
237
+
238
+
239
+
240
+ **installDependencies**
241
+
242
+ ```ts
243
+ // Auto-detect and install
244
+ const result = await python.installDependencies()
245
+
246
+ // With custom install command
247
+ const python = container.feature('python', {
248
+ installCommand: 'pip install -r requirements.txt'
249
+ })
250
+ const result = await python.installDependencies()
251
+ ```
252
+
253
+
254
+
255
+ **execute**
256
+
257
+ ```ts
258
+ // Simple execution
259
+ const result = await python.execute('print("Hello World")')
260
+ console.log(result.stdout) // 'Hello World'
261
+
262
+ // With variables
263
+ const result = await python.execute('print(f"Hello {name}!")', { name: 'Alice' })
264
+
265
+ // Capture locals
266
+ const result = await python.execute('x = 42\ny = x * 2', {}, { captureLocals: true })
267
+ console.log(result.locals) // { x: 42, y: 84 }
268
+ ```
269
+
270
+
271
+
272
+ **executeFile**
273
+
274
+ ```ts
275
+ const result = await python.executeFile('/path/to/script.py')
276
+ console.log(result.stdout)
277
+ ```
278
+
@@ -0,0 +1,88 @@
1
+ # Repl (features.repl)
2
+
3
+ REPL feature — provides an interactive read-eval-print loop with tab completion and history. Launches a REPL session that evaluates JavaScript/TypeScript expressions in a sandboxed VM context populated with the container and its helpers. Supports tab completion for dot-notation property access, command history persistence, and async/await.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ container.feature('repl', {
9
+ // The prompt string to display in the REPL (default: "> ")
10
+ prompt,
11
+ // Path to the REPL history file for command persistence
12
+ historyPath,
13
+ })
14
+ ```
15
+
16
+ ## Options (Zod v4 schema)
17
+
18
+ | Property | Type | Description |
19
+ |----------|------|-------------|
20
+ | `prompt` | `string` | The prompt string to display in the REPL (default: "> ") |
21
+ | `historyPath` | `string` | Path to the REPL history file for command persistence |
22
+
23
+ ## Methods
24
+
25
+ ### start
26
+
27
+ Start the REPL session. Creates a VM context populated with the container and its helpers, sets up readline with tab completion and history, then enters the interactive loop. Type `.exit` or `exit` to quit. Supports top-level await.
28
+
29
+ **Parameters:**
30
+
31
+ | Name | Type | Required | Description |
32
+ |------|------|----------|-------------|
33
+ | `options` | `{ historyPath?: string, context?: any }` | | Configuration for the REPL session |
34
+
35
+ `{ historyPath?: string, context?: any }` properties:
36
+
37
+ | Property | Type | Description |
38
+ |----------|------|-------------|
39
+ | `historyPath` | `any` | Custom path for the history file (defaults to node_modules/.cache/.repl_history) |
40
+ | `context` | `any` | Additional variables to inject into the VM context |
41
+
42
+ **Returns:** `void`
43
+
44
+ ```ts
45
+ const repl = container.feature('repl', { enable: true })
46
+ await repl.start({
47
+ context: { db: myDatabase },
48
+ historyPath: '.repl-history'
49
+ })
50
+ ```
51
+
52
+
53
+
54
+ ## Getters
55
+
56
+ | Property | Type | Description |
57
+ |----------|------|-------------|
58
+ | `isStarted` | `any` | Whether the REPL session is currently running. |
59
+ | `vmContext` | `any` | The VM context object used for evaluating expressions in the REPL. |
60
+
61
+ ## State (Zod v4 schema)
62
+
63
+ | Property | Type | Description |
64
+ |----------|------|-------------|
65
+ | `enabled` | `boolean` | Whether this feature is currently enabled |
66
+ | `started` | `boolean` | Whether the REPL server has been started |
67
+
68
+ ## Examples
69
+
70
+ **features.repl**
71
+
72
+ ```ts
73
+ const repl = container.feature('repl', { enable: true })
74
+ await repl.start({ context: { myVar: 42 } })
75
+ ```
76
+
77
+
78
+
79
+ **start**
80
+
81
+ ```ts
82
+ const repl = container.feature('repl', { enable: true })
83
+ await repl.start({
84
+ context: { db: myDatabase },
85
+ historyPath: '.repl-history'
86
+ })
87
+ ```
88
+