@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.
- package/CLAUDE.md +71 -0
- package/README.md +78 -0
- package/bun.lock +2928 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-scaffolds.ts +154 -0
- package/commands/generate-api-docs.ts +114 -0
- package/commands/update-introspection.ts +67 -0
- package/docs/CLI.md +335 -0
- package/docs/README.md +88 -0
- package/docs/TABLE-OF-CONTENTS.md +157 -0
- package/docs/apis/clients/elevenlabs.md +84 -0
- package/docs/apis/clients/graph.md +56 -0
- package/docs/apis/clients/openai.md +69 -0
- package/docs/apis/clients/rest.md +41 -0
- package/docs/apis/clients/websocket.md +107 -0
- package/docs/apis/features/agi/assistant.md +471 -0
- package/docs/apis/features/agi/assistants-manager.md +154 -0
- package/docs/apis/features/agi/claude-code.md +602 -0
- package/docs/apis/features/agi/conversation-history.md +352 -0
- package/docs/apis/features/agi/conversation.md +333 -0
- package/docs/apis/features/agi/docs-reader.md +121 -0
- package/docs/apis/features/agi/openai-codex.md +318 -0
- package/docs/apis/features/agi/openapi.md +138 -0
- package/docs/apis/features/agi/semantic-search.md +387 -0
- package/docs/apis/features/agi/skills-library.md +216 -0
- package/docs/apis/features/node/container-link.md +133 -0
- package/docs/apis/features/node/content-db.md +313 -0
- package/docs/apis/features/node/disk-cache.md +379 -0
- package/docs/apis/features/node/dns.md +651 -0
- package/docs/apis/features/node/docker.md +705 -0
- package/docs/apis/features/node/downloader.md +81 -0
- package/docs/apis/features/node/esbuild.md +59 -0
- package/docs/apis/features/node/file-manager.md +182 -0
- package/docs/apis/features/node/fs.md +581 -0
- package/docs/apis/features/node/git.md +330 -0
- package/docs/apis/features/node/google-auth.md +174 -0
- package/docs/apis/features/node/google-calendar.md +187 -0
- package/docs/apis/features/node/google-docs.md +151 -0
- package/docs/apis/features/node/google-drive.md +225 -0
- package/docs/apis/features/node/google-sheets.md +179 -0
- package/docs/apis/features/node/grep.md +290 -0
- package/docs/apis/features/node/helpers.md +135 -0
- package/docs/apis/features/node/ink.md +334 -0
- package/docs/apis/features/node/ipc-socket.md +260 -0
- package/docs/apis/features/node/json-tree.md +86 -0
- package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
- package/docs/apis/features/node/networking.md +281 -0
- package/docs/apis/features/node/nlp.md +133 -0
- package/docs/apis/features/node/opener.md +97 -0
- package/docs/apis/features/node/os.md +118 -0
- package/docs/apis/features/node/package-finder.md +402 -0
- package/docs/apis/features/node/postgres.md +212 -0
- package/docs/apis/features/node/proc.md +430 -0
- package/docs/apis/features/node/process-manager.md +210 -0
- package/docs/apis/features/node/python.md +278 -0
- package/docs/apis/features/node/repl.md +88 -0
- package/docs/apis/features/node/runpod.md +673 -0
- package/docs/apis/features/node/secure-shell.md +169 -0
- package/docs/apis/features/node/semantic-search.md +401 -0
- package/docs/apis/features/node/sqlite.md +211 -0
- package/docs/apis/features/node/telegram.md +254 -0
- package/docs/apis/features/node/tts.md +118 -0
- package/docs/apis/features/node/ui.md +703 -0
- package/docs/apis/features/node/vault.md +64 -0
- package/docs/apis/features/node/vm.md +84 -0
- package/docs/apis/features/node/window-manager.md +337 -0
- package/docs/apis/features/node/yaml-tree.md +85 -0
- package/docs/apis/features/node/yaml.md +176 -0
- package/docs/apis/features/web/asset-loader.md +47 -0
- package/docs/apis/features/web/container-link.md +133 -0
- package/docs/apis/features/web/esbuild.md +59 -0
- package/docs/apis/features/web/helpers.md +135 -0
- package/docs/apis/features/web/network.md +30 -0
- package/docs/apis/features/web/speech.md +55 -0
- package/docs/apis/features/web/vault.md +64 -0
- package/docs/apis/features/web/vm.md +84 -0
- package/docs/apis/features/web/voice.md +67 -0
- package/docs/apis/servers/express.md +127 -0
- package/docs/apis/servers/mcp.md +213 -0
- package/docs/apis/servers/websocket.md +99 -0
- package/docs/documentation-audit.md +134 -0
- package/docs/examples/content-db.md +77 -0
- package/docs/examples/disk-cache.md +83 -0
- package/docs/examples/docker.md +101 -0
- package/docs/examples/downloader.md +70 -0
- package/docs/examples/esbuild.md +80 -0
- package/docs/examples/file-manager.md +82 -0
- package/docs/examples/fs.md +83 -0
- package/docs/examples/git.md +85 -0
- package/docs/examples/google-auth.md +88 -0
- package/docs/examples/google-calendar.md +94 -0
- package/docs/examples/google-docs.md +82 -0
- package/docs/examples/google-drive.md +96 -0
- package/docs/examples/google-sheets.md +95 -0
- package/docs/examples/grep.md +85 -0
- package/docs/examples/ink-blocks.md +75 -0
- package/docs/examples/ink-renderer.md +41 -0
- package/docs/examples/ink.md +103 -0
- package/docs/examples/ipc-socket.md +103 -0
- package/docs/examples/json-tree.md +91 -0
- package/docs/examples/launcher-app-command-listener.md +120 -0
- package/docs/examples/networking.md +58 -0
- package/docs/examples/nlp.md +91 -0
- package/docs/examples/opener.md +78 -0
- package/docs/examples/os.md +72 -0
- package/docs/examples/package-finder.md +89 -0
- package/docs/examples/port-exposer.md +89 -0
- package/docs/examples/postgres.md +91 -0
- package/docs/examples/proc.md +81 -0
- package/docs/examples/process-manager.md +79 -0
- package/docs/examples/python.md +91 -0
- package/docs/examples/repl.md +93 -0
- package/docs/examples/runpod.md +119 -0
- package/docs/examples/secure-shell.md +92 -0
- package/docs/examples/sqlite.md +86 -0
- package/docs/examples/telegram.md +77 -0
- package/docs/examples/tts.md +86 -0
- package/docs/examples/ui.md +80 -0
- package/docs/examples/vault.md +70 -0
- package/docs/examples/vm.md +86 -0
- package/docs/examples/window-manager.md +125 -0
- package/docs/examples/yaml-tree.md +93 -0
- package/docs/examples/yaml.md +104 -0
- package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
- package/docs/ideas/container-use-api.md +9 -0
- package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
- package/docs/ideas/feature-stacks.md +22 -0
- package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
- package/docs/ideas/mcp-design.md +9 -0
- package/docs/ideas/web-container-debugging-feature.md +13 -0
- package/docs/introspection-audit.md +49 -0
- package/docs/introspection.md +154 -0
- package/docs/mcp/readme.md +162 -0
- package/docs/models.ts +38 -0
- package/docs/philosophy.md +85 -0
- package/docs/principles.md +7 -0
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
- package/docs/prompts/mcp-test-easy-command.md +27 -0
- package/docs/reports/assistant-bugs.md +38 -0
- package/docs/reports/attach-pattern-usage.md +18 -0
- package/docs/reports/code-audit-results.md +391 -0
- package/docs/reports/introspection-audit-tasks.md +378 -0
- package/docs/reports/luca-mcp-improvements.md +128 -0
- package/docs/scaffolds/client.md +140 -0
- package/docs/scaffolds/command.md +106 -0
- package/docs/scaffolds/endpoint.md +176 -0
- package/docs/scaffolds/feature.md +148 -0
- package/docs/scaffolds/server.md +187 -0
- package/docs/tasks/web-container-helper-discovery.md +71 -0
- package/docs/todos.md +1 -0
- package/docs/tutorials/01-getting-started.md +106 -0
- package/docs/tutorials/02-container.md +210 -0
- package/docs/tutorials/03-scripts.md +194 -0
- package/docs/tutorials/04-features-overview.md +196 -0
- package/docs/tutorials/05-state-and-events.md +171 -0
- package/docs/tutorials/06-servers.md +157 -0
- package/docs/tutorials/07-endpoints.md +198 -0
- package/docs/tutorials/08-commands.md +171 -0
- package/docs/tutorials/09-clients.md +162 -0
- package/docs/tutorials/10-creating-features.md +198 -0
- package/docs/tutorials/11-contentbase.md +191 -0
- package/docs/tutorials/12-assistants.md +215 -0
- package/docs/tutorials/13-introspection.md +147 -0
- package/docs/tutorials/14-type-system.md +174 -0
- package/docs/tutorials/15-project-patterns.md +222 -0
- package/docs/tutorials/16-google-features.md +534 -0
- package/docs/tutorials/17-tui-blocks.md +530 -0
- package/docs/tutorials/18-semantic-search.md +334 -0
- package/index.ts +1 -0
- package/luca.console.ts +9 -0
- package/main.py +6 -0
- package/package.json +154 -0
- package/pyproject.toml +7 -0
- package/scripts/animations/chrome-glitch.ts +55 -0
- package/scripts/animations/index.ts +16 -0
- package/scripts/animations/neon-pulse.ts +64 -0
- package/scripts/animations/types.ts +6 -0
- package/scripts/build-web.ts +28 -0
- package/scripts/examples/ask-luca-expert.ts +42 -0
- package/scripts/examples/assistant-questions.ts +12 -0
- package/scripts/examples/excalidraw-expert.ts +75 -0
- package/scripts/examples/expert-chat.ts +0 -0
- package/scripts/examples/file-manager.ts +14 -0
- package/scripts/examples/ideas.ts +12 -0
- package/scripts/examples/interactive-chat.ts +20 -0
- package/scripts/examples/openai-tool-calls.ts +113 -0
- package/scripts/examples/opening-a-web-browser.ts +5 -0
- package/scripts/examples/telegram-bot.ts +79 -0
- package/scripts/examples/telegram-ink-ui.ts +302 -0
- package/scripts/examples/using-assistant-with-mcp.ts +560 -0
- package/scripts/examples/using-claude-code.ts +10 -0
- package/scripts/examples/using-contentdb.ts +35 -0
- package/scripts/examples/using-conversations.ts +35 -0
- package/scripts/examples/using-disk-cache.ts +10 -0
- package/scripts/examples/using-docker-shell.ts +75 -0
- package/scripts/examples/using-elevenlabs.ts +25 -0
- package/scripts/examples/using-google-calendar.ts +57 -0
- package/scripts/examples/using-google-docs.ts +74 -0
- package/scripts/examples/using-google-drive.ts +74 -0
- package/scripts/examples/using-google-sheets.ts +89 -0
- package/scripts/examples/using-nlp.ts +55 -0
- package/scripts/examples/using-ollama.ts +10 -0
- package/scripts/examples/using-openai-codex.ts +23 -0
- package/scripts/examples/using-postgres.ts +55 -0
- package/scripts/examples/using-runpod.ts +32 -0
- package/scripts/examples/using-tts.ts +40 -0
- package/scripts/examples/vm-loading-esm-modules.ts +16 -0
- package/scripts/scaffold.ts +391 -0
- package/scripts/scratch.ts +15 -0
- package/scripts/test-command-listener.ts +123 -0
- package/scripts/test-window-manager-lifecycle.ts +86 -0
- package/scripts/test-window-manager.ts +43 -0
- package/scripts/update-introspection-data.ts +58 -0
- package/src/agi/README.md +14 -0
- package/src/agi/container.server.ts +114 -0
- package/src/agi/endpoints/ask.ts +60 -0
- package/src/agi/endpoints/conversations/[id].ts +45 -0
- package/src/agi/endpoints/conversations.ts +31 -0
- package/src/agi/endpoints/experts.ts +37 -0
- package/src/agi/features/assistant.ts +767 -0
- package/src/agi/features/assistants-manager.ts +260 -0
- package/src/agi/features/claude-code.ts +1111 -0
- package/src/agi/features/conversation-history.ts +497 -0
- package/src/agi/features/conversation.ts +799 -0
- package/src/agi/features/openai-codex.ts +631 -0
- package/src/agi/features/openapi.ts +438 -0
- package/src/agi/features/skills-library.ts +425 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/token-counter.ts +122 -0
- package/src/browser.ts +25 -0
- package/src/bus.ts +100 -0
- package/src/cli/cli.ts +70 -0
- package/src/client.ts +461 -0
- package/src/clients/civitai/index.ts +541 -0
- package/src/clients/client-template.ts +41 -0
- package/src/clients/comfyui/index.ts +597 -0
- package/src/clients/elevenlabs/index.ts +291 -0
- package/src/clients/openai/index.ts +451 -0
- package/src/clients/supabase/index.ts +366 -0
- package/src/command.ts +164 -0
- package/src/commands/chat.ts +182 -0
- package/src/commands/console.ts +192 -0
- package/src/commands/describe.ts +433 -0
- package/src/commands/eval.ts +116 -0
- package/src/commands/help.ts +214 -0
- package/src/commands/index.ts +14 -0
- package/src/commands/mcp.ts +64 -0
- package/src/commands/prompt.ts +807 -0
- package/src/commands/run.ts +257 -0
- package/src/commands/sandbox-mcp.ts +439 -0
- package/src/commands/scaffold.ts +79 -0
- package/src/commands/serve.ts +172 -0
- package/src/container.ts +781 -0
- package/src/endpoint.ts +340 -0
- package/src/feature.ts +75 -0
- package/src/hash-object.ts +97 -0
- package/src/helper.ts +543 -0
- package/src/introspection/generated.agi.ts +23388 -0
- package/src/introspection/generated.node.ts +18899 -0
- package/src/introspection/generated.web.ts +2021 -0
- package/src/introspection/index.ts +256 -0
- package/src/introspection/scan.ts +912 -0
- package/src/node/container.ts +354 -0
- package/src/node/feature.ts +13 -0
- package/src/node/features/container-link.ts +558 -0
- package/src/node/features/content-db.ts +475 -0
- package/src/node/features/disk-cache.ts +382 -0
- package/src/node/features/dns.ts +655 -0
- package/src/node/features/docker.ts +912 -0
- package/src/node/features/downloader.ts +92 -0
- package/src/node/features/esbuild.ts +68 -0
- package/src/node/features/file-manager.ts +357 -0
- package/src/node/features/fs.ts +534 -0
- package/src/node/features/git.ts +492 -0
- package/src/node/features/google-auth.ts +502 -0
- package/src/node/features/google-calendar.ts +300 -0
- package/src/node/features/google-docs.ts +404 -0
- package/src/node/features/google-drive.ts +339 -0
- package/src/node/features/google-sheets.ts +279 -0
- package/src/node/features/grep.ts +406 -0
- package/src/node/features/helpers.ts +374 -0
- package/src/node/features/ink.ts +490 -0
- package/src/node/features/ipc-socket.ts +459 -0
- package/src/node/features/json-tree.ts +188 -0
- package/src/node/features/launcher-app-command-listener.ts +388 -0
- package/src/node/features/networking.ts +925 -0
- package/src/node/features/nlp.ts +211 -0
- package/src/node/features/opener.ts +166 -0
- package/src/node/features/os.ts +157 -0
- package/src/node/features/package-finder.ts +539 -0
- package/src/node/features/port-exposer.ts +342 -0
- package/src/node/features/postgres.ts +273 -0
- package/src/node/features/proc.ts +502 -0
- package/src/node/features/process-manager.ts +542 -0
- package/src/node/features/python.ts +444 -0
- package/src/node/features/repl.ts +194 -0
- package/src/node/features/runpod.ts +802 -0
- package/src/node/features/secure-shell.ts +248 -0
- package/src/node/features/semantic-search.ts +924 -0
- package/src/node/features/sqlite.ts +289 -0
- package/src/node/features/telegram.ts +342 -0
- package/src/node/features/tts.ts +184 -0
- package/src/node/features/ui.ts +857 -0
- package/src/node/features/vault.ts +164 -0
- package/src/node/features/vm.ts +312 -0
- package/src/node/features/window-manager.ts +804 -0
- package/src/node/features/yaml-tree.ts +149 -0
- package/src/node/features/yaml.ts +132 -0
- package/src/node.ts +70 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +199 -0
- package/src/scaffolds/generated.ts +1613 -0
- package/src/scaffolds/template.ts +37 -0
- package/src/schemas/base.ts +255 -0
- package/src/server.ts +135 -0
- package/src/servers/express.ts +209 -0
- package/src/servers/mcp.ts +805 -0
- package/src/servers/socket.ts +120 -0
- package/src/state.ts +101 -0
- package/src/web/clients/socket.ts +82 -0
- package/src/web/container.ts +74 -0
- package/src/web/extension.ts +30 -0
- package/src/web/feature.ts +12 -0
- package/src/web/features/asset-loader.ts +64 -0
- package/src/web/features/container-link.ts +385 -0
- package/src/web/features/esbuild.ts +79 -0
- package/src/web/features/helpers.ts +267 -0
- package/src/web/features/network.ts +61 -0
- package/src/web/features/speech.ts +87 -0
- package/src/web/features/vault.ts +189 -0
- package/src/web/features/vm.ts +78 -0
- package/src/web/features/voice-recognition.ts +129 -0
- package/src/web/shims/isomorphic-vm.ts +149 -0
- package/test/bus.test.ts +134 -0
- package/test/clients-servers.test.ts +216 -0
- package/test/container-link.test.ts +274 -0
- package/test/features.test.ts +160 -0
- package/test/integration.test.ts +787 -0
- package/test/node-container.test.ts +121 -0
- package/test/rate-limit.test.ts +272 -0
- package/test/semantic-search.test.ts +550 -0
- package/test/state.test.ts +121 -0
- package/test-integration/assistant.test.ts +138 -0
- package/test-integration/assistants-manager.test.ts +123 -0
- package/test-integration/claude-code.test.ts +98 -0
- package/test-integration/conversation-history.test.ts +205 -0
- package/test-integration/conversation.test.ts +137 -0
- package/test-integration/elevenlabs.test.ts +55 -0
- package/test-integration/google-services.test.ts +80 -0
- package/test-integration/helpers.ts +89 -0
- package/test-integration/openai-codex.test.ts +93 -0
- package/test-integration/runpod.test.ts +58 -0
- package/test-integration/server-endpoints.test.ts +97 -0
- package/test-integration/skills-library.test.ts +157 -0
- package/test-integration/telegram.test.ts +46 -0
- package/tsconfig.json +58 -0
- 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
|
+
|