luca 3.0.0 → 3.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/.github/workflows/release.yaml +1 -0
- package/CLAUDE.md +10 -2
- package/README.md +130 -112
- package/assistants/codingAssistant/CORE.md +6 -1
- package/assistants/codingAssistant/hooks.ts +1 -1
- package/assistants/inkbot/hooks.ts +1 -1
- package/assistants/inkbot/tools.ts +1 -1
- package/bun.lock +220 -322
- package/commands/audit-docs.ts +2 -2
- package/commands/build-bootstrap.ts +2 -3
- package/commands/build-python-bridge.ts +2 -3
- package/commands/build-scaffolds.ts +2 -3
- package/commands/bundle-consumer-project.ts +521 -0
- package/commands/generate-api-docs.ts +2 -2
- package/commands/inkbot.ts +2 -2
- package/commands/release.ts +2 -2
- package/commands/try-all-challenges.ts +3 -3
- package/commands/try-challenge.ts +3 -3
- package/dist/agi/container.server.d.ts +2 -2
- package/dist/agi/features/assistant.d.ts +2 -2
- package/dist/agi/features/assistants-manager.d.ts +1 -1
- package/dist/agi/features/autonomous-assistant.d.ts +1 -1
- package/dist/agi/features/browser-use.d.ts +1 -1
- package/dist/agi/features/claude-code.d.ts +1 -1
- package/dist/agi/features/conversation-history.d.ts +2 -2
- package/dist/agi/features/conversation.d.ts +1 -1
- package/dist/agi/features/docs-reader.d.ts +1 -1
- package/dist/agi/features/file-tools.d.ts +1 -1
- package/dist/agi/features/luca-coder.d.ts +1 -1
- package/dist/agi/features/openai-codex.d.ts +1 -1
- package/dist/agi/features/skills-library.d.ts +1 -1
- package/dist/clients/civitai/index.d.ts +4 -4
- package/dist/clients/client-template.d.ts +4 -4
- package/dist/clients/comfyui/index.d.ts +2 -2
- package/dist/clients/elevenlabs/index.d.ts +2 -2
- package/dist/clients/openai/index.d.ts +2 -2
- package/dist/clients/supabase/index.d.ts +3 -3
- package/dist/command.d.ts +1 -1
- package/dist/node/container.d.ts +1 -1
- package/dist/node/features/helpers.d.ts +3 -3
- package/dist/node/features/semantic-search.d.ts +1 -1
- package/dist/node/features/vm.d.ts +3 -3
- package/dist/node.d.ts +1 -1
- package/dist/scaffolds/generated.d.ts +1 -1
- package/dist/selector.d.ts +1 -1
- package/index.html +217 -190
- package/luca.console.ts +1 -1
- package/package.json +2 -2
- package/public/index.html +217 -190
- package/public/slides-ai-native.html +1 -1
- package/public/slides-intro.html +2 -2
- package/scripts/examples/ask-luca-expert.ts +1 -1
- package/scripts/examples/assistant-questions.ts +1 -1
- package/scripts/examples/excalidraw-expert.ts +1 -1
- package/scripts/examples/file-manager.ts +1 -1
- package/scripts/examples/ideas.ts +1 -1
- package/scripts/examples/interactive-chat.ts +1 -1
- package/scripts/examples/opening-a-web-browser.ts +1 -1
- package/scripts/examples/telegram-bot.ts +1 -1
- package/scripts/examples/using-assistant-with-mcp.ts +1 -1
- package/scripts/examples/using-claude-code.ts +1 -1
- package/scripts/examples/using-contentdb.ts +2 -2
- package/scripts/examples/using-conversations.ts +1 -1
- package/scripts/examples/using-disk-cache.ts +1 -1
- package/scripts/examples/using-docker-shell.ts +1 -1
- package/scripts/examples/using-elevenlabs.ts +1 -1
- package/scripts/examples/using-google-calendar.ts +1 -1
- package/scripts/examples/using-google-docs.ts +1 -1
- package/scripts/examples/using-google-drive.ts +1 -1
- package/scripts/examples/using-google-sheets.ts +1 -1
- package/scripts/examples/using-nlp.ts +1 -1
- package/scripts/examples/using-ollama.ts +1 -1
- package/scripts/examples/using-postgres.ts +1 -1
- package/scripts/examples/using-runpod.ts +1 -1
- package/scripts/examples/using-tts.ts +1 -1
- package/scripts/scaffold.ts +5 -5
- package/scripts/scratch.ts +1 -1
- package/scripts/test-assistant-hooks.ts +1 -1
- package/scripts/test-docs-reader.ts +1 -1
- package/src/agi/container.server.ts +6 -2
- package/src/agi/features/agent-memory.ts +25 -25
- package/src/agi/features/assistant.ts +34 -5
- package/src/agi/features/assistants-manager.ts +122 -6
- package/src/agi/features/autonomous-assistant.ts +1 -1
- package/src/agi/features/browser-use.ts +20 -1
- package/src/agi/features/claude-code.ts +51 -5
- package/src/agi/features/coding-tools.ts +1 -1
- package/src/agi/features/conversation-history.ts +181 -4
- package/src/agi/features/conversation.ts +186 -15
- package/src/agi/features/docs-reader.ts +2 -2
- package/src/agi/features/file-tools.ts +49 -2
- package/src/agi/features/luca-coder.ts +7 -5
- package/src/agi/features/mcp-bridge.ts +532 -0
- package/src/agi/features/openai-codex.ts +2 -2
- package/src/agi/features/skills-library.ts +131 -52
- package/src/agi/lib/token-counter.ts +80 -0
- package/src/bootstrap/generated.ts +56 -57
- package/src/browser.ts +1 -1
- package/src/cli/build-info.ts +2 -2
- package/src/cli/cli.ts +2 -2
- package/src/clients/civitai/index.ts +5 -5
- package/src/clients/client-template.ts +4 -4
- package/src/clients/comfyui/index.ts +4 -4
- package/src/clients/elevenlabs/index.ts +4 -4
- package/src/clients/openai/index.ts +7 -7
- package/src/clients/supabase/index.ts +4 -4
- package/src/clients/voicebox/index.ts +4 -4
- package/src/command.ts +2 -1
- package/src/commands/chat.ts +1 -0
- package/src/commands/eval.ts +2 -56
- package/src/commands/introspect.ts +1 -1
- package/src/commands/prompt.ts +41 -9
- package/src/container-describer.ts +8 -1
- package/src/container.ts +13 -0
- package/src/entity.ts +2 -2
- package/src/helper.ts +1 -1
- package/src/introspection/generated.agi.ts +28563 -27571
- package/src/introspection/generated.node.ts +20281 -20194
- package/src/introspection/generated.web.ts +605 -584
- package/src/introspection/scan.ts +11 -6
- package/src/node/container.ts +1 -1
- package/src/node/features/content-db.ts +39 -2
- package/src/node/features/display-result.ts +57 -0
- package/src/node/features/helpers.ts +42 -15
- package/src/node/features/python.ts +25 -19
- package/src/node/features/repl.ts +1 -1
- package/src/node/features/secure-shell.ts +11 -17
- package/src/node/features/semantic-search.ts +2 -2
- package/src/node/features/transpiler.ts +2 -3
- package/src/node/features/ui.ts +5 -0
- package/src/node/features/vm.ts +3 -3
- package/src/node.ts +3 -3
- package/src/python/generated.ts +0 -1
- package/src/scaffolds/generated.ts +82 -83
- package/src/selector.ts +1 -1
- package/src/servers/express.ts +1 -1
- package/src/web/features/helpers.ts +22 -0
- package/tsconfig.json +12 -12
- package/docs/CLI.md +0 -335
- package/docs/CNAME +0 -1
- package/docs/README.md +0 -60
- package/docs/TABLE-OF-CONTENTS.md +0 -183
- package/docs/apis/clients/elevenlabs.md +0 -308
- package/docs/apis/clients/graph.md +0 -107
- package/docs/apis/clients/openai.md +0 -429
- package/docs/apis/clients/rest.md +0 -161
- package/docs/apis/clients/websocket.md +0 -174
- package/docs/apis/features/agi/assistant.md +0 -625
- package/docs/apis/features/agi/assistants-manager.md +0 -282
- package/docs/apis/features/agi/auto-assistant.md +0 -279
- package/docs/apis/features/agi/browser-use.md +0 -802
- package/docs/apis/features/agi/claude-code.md +0 -884
- package/docs/apis/features/agi/conversation-history.md +0 -364
- package/docs/apis/features/agi/conversation.md +0 -548
- package/docs/apis/features/agi/docs-reader.md +0 -99
- package/docs/apis/features/agi/file-tools.md +0 -163
- package/docs/apis/features/agi/luca-coder.md +0 -407
- package/docs/apis/features/agi/openai-codex.md +0 -396
- package/docs/apis/features/agi/openapi.md +0 -138
- package/docs/apis/features/agi/semantic-search.md +0 -387
- package/docs/apis/features/agi/skills-library.md +0 -239
- package/docs/apis/features/node/container-link.md +0 -192
- package/docs/apis/features/node/content-db.md +0 -450
- package/docs/apis/features/node/disk-cache.md +0 -379
- package/docs/apis/features/node/dns.md +0 -652
- package/docs/apis/features/node/docker.md +0 -706
- package/docs/apis/features/node/downloader.md +0 -81
- package/docs/apis/features/node/esbuild.md +0 -60
- package/docs/apis/features/node/file-manager.md +0 -191
- package/docs/apis/features/node/fs.md +0 -1217
- package/docs/apis/features/node/git.md +0 -371
- package/docs/apis/features/node/google-auth.md +0 -193
- package/docs/apis/features/node/google-calendar.md +0 -202
- package/docs/apis/features/node/google-docs.md +0 -173
- package/docs/apis/features/node/google-drive.md +0 -246
- package/docs/apis/features/node/google-mail.md +0 -214
- package/docs/apis/features/node/google-sheets.md +0 -194
- package/docs/apis/features/node/grep.md +0 -292
- package/docs/apis/features/node/helpers.md +0 -164
- package/docs/apis/features/node/ink.md +0 -334
- package/docs/apis/features/node/ipc-socket.md +0 -249
- package/docs/apis/features/node/json-tree.md +0 -86
- package/docs/apis/features/node/networking.md +0 -316
- package/docs/apis/features/node/nlp.md +0 -133
- package/docs/apis/features/node/opener.md +0 -97
- package/docs/apis/features/node/os.md +0 -146
- package/docs/apis/features/node/package-finder.md +0 -392
- package/docs/apis/features/node/postgres.md +0 -234
- package/docs/apis/features/node/proc.md +0 -399
- package/docs/apis/features/node/process-manager.md +0 -305
- package/docs/apis/features/node/python.md +0 -604
- package/docs/apis/features/node/redis.md +0 -380
- package/docs/apis/features/node/repl.md +0 -88
- package/docs/apis/features/node/runpod.md +0 -674
- package/docs/apis/features/node/secure-shell.md +0 -176
- package/docs/apis/features/node/semantic-search.md +0 -408
- package/docs/apis/features/node/sqlite.md +0 -233
- package/docs/apis/features/node/telegram.md +0 -279
- package/docs/apis/features/node/transpiler.md +0 -74
- package/docs/apis/features/node/tts.md +0 -133
- package/docs/apis/features/node/ui.md +0 -701
- package/docs/apis/features/node/vault.md +0 -59
- package/docs/apis/features/node/vm.md +0 -75
- package/docs/apis/features/node/yaml-tree.md +0 -85
- package/docs/apis/features/node/yaml.md +0 -176
- package/docs/apis/features/web/asset-loader.md +0 -59
- package/docs/apis/features/web/container-link.md +0 -192
- package/docs/apis/features/web/esbuild.md +0 -54
- package/docs/apis/features/web/helpers.md +0 -164
- package/docs/apis/features/web/network.md +0 -44
- package/docs/apis/features/web/speech.md +0 -69
- package/docs/apis/features/web/vault.md +0 -59
- package/docs/apis/features/web/vm.md +0 -75
- package/docs/apis/features/web/voice.md +0 -84
- package/docs/apis/servers/express.md +0 -171
- package/docs/apis/servers/mcp.md +0 -238
- package/docs/apis/servers/websocket.md +0 -170
- package/docs/bootstrap/CLAUDE.md +0 -101
- package/docs/bootstrap/SKILL.md +0 -341
- package/docs/bootstrap/templates/about-command.ts +0 -41
- package/docs/bootstrap/templates/docs-models.ts +0 -22
- package/docs/bootstrap/templates/docs-readme.md +0 -43
- package/docs/bootstrap/templates/example-feature.ts +0 -53
- package/docs/bootstrap/templates/health-endpoint.ts +0 -15
- package/docs/bootstrap/templates/luca-cli.ts +0 -30
- package/docs/bootstrap/templates/runme.md +0 -54
- package/docs/challenges/caching-proxy.md +0 -16
- package/docs/challenges/content-db-round-trip.md +0 -14
- package/docs/challenges/custom-command.md +0 -9
- package/docs/challenges/file-watcher-pipeline.md +0 -11
- package/docs/challenges/grep-audit-report.md +0 -15
- package/docs/challenges/multi-feature-dashboard.md +0 -14
- package/docs/challenges/process-orchestrator.md +0 -17
- package/docs/challenges/rest-api-server-with-client.md +0 -12
- package/docs/challenges/script-runner-with-vm.md +0 -11
- package/docs/challenges/simple-rest-api.md +0 -15
- package/docs/challenges/websocket-serve-and-client.md +0 -11
- package/docs/challenges/yaml-config-system.md +0 -14
- package/docs/command-system-overhaul.md +0 -94
- package/docs/documentation-audit.md +0 -134
- package/docs/examples/assistant/CORE.md +0 -18
- package/docs/examples/assistant/hooks.ts +0 -3
- package/docs/examples/assistant/tools.ts +0 -10
- package/docs/examples/assistant-hooks-reference.ts +0 -171
- package/docs/examples/assistant-with-process-manager.md +0 -84
- package/docs/examples/content-db.md +0 -77
- package/docs/examples/disk-cache.md +0 -83
- package/docs/examples/docker.md +0 -101
- package/docs/examples/downloader.md +0 -70
- package/docs/examples/entity.md +0 -124
- package/docs/examples/esbuild.md +0 -80
- package/docs/examples/feature-as-tool-provider.md +0 -143
- package/docs/examples/file-manager.md +0 -82
- package/docs/examples/fs.md +0 -83
- package/docs/examples/git.md +0 -85
- package/docs/examples/google-auth.md +0 -88
- package/docs/examples/google-calendar.md +0 -94
- package/docs/examples/google-docs.md +0 -82
- package/docs/examples/google-drive.md +0 -96
- package/docs/examples/google-sheets.md +0 -95
- package/docs/examples/grep.md +0 -85
- package/docs/examples/ink-blocks.md +0 -75
- package/docs/examples/ink-renderer.md +0 -41
- package/docs/examples/ink.md +0 -103
- package/docs/examples/ipc-socket.md +0 -103
- package/docs/examples/json-tree.md +0 -91
- package/docs/examples/networking.md +0 -58
- package/docs/examples/nlp.md +0 -91
- package/docs/examples/opener.md +0 -78
- package/docs/examples/os.md +0 -72
- package/docs/examples/package-finder.md +0 -89
- package/docs/examples/postgres.md +0 -91
- package/docs/examples/proc.md +0 -81
- package/docs/examples/process-manager.md +0 -79
- package/docs/examples/python.md +0 -132
- package/docs/examples/repl.md +0 -93
- package/docs/examples/runpod.md +0 -119
- package/docs/examples/secure-shell.md +0 -92
- package/docs/examples/sqlite.md +0 -86
- package/docs/examples/structured-output-with-assistants.md +0 -144
- package/docs/examples/telegram.md +0 -77
- package/docs/examples/tts.md +0 -86
- package/docs/examples/ui.md +0 -80
- package/docs/examples/vault.md +0 -70
- package/docs/examples/vm.md +0 -86
- package/docs/examples/websocket-ask-and-reply-example.md +0 -128
- package/docs/examples/yaml-tree.md +0 -93
- package/docs/examples/yaml.md +0 -104
- package/docs/ideas/assistant-factory-pattern.md +0 -142
- package/docs/in-memory-fs.md +0 -4
- package/docs/introspection-audit.md +0 -49
- package/docs/introspection.md +0 -164
- package/docs/mcp/readme.md +0 -162
- package/docs/models.ts +0 -41
- package/docs/philosophy.md +0 -86
- package/docs/principles.md +0 -7
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +0 -34
- package/docs/prompts/check-for-undocumented-features.md +0 -27
- package/docs/prompts/mcp-test-easy-command.md +0 -27
- package/docs/scaffolds/client.md +0 -149
- package/docs/scaffolds/command.md +0 -120
- package/docs/scaffolds/endpoint.md +0 -171
- package/docs/scaffolds/feature.md +0 -158
- package/docs/scaffolds/selector.md +0 -91
- package/docs/scaffolds/server.md +0 -196
- package/docs/selectors.md +0 -115
- package/docs/sessions/custom-command/attempt-log-2.md +0 -195
- package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +0 -728
- package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +0 -555
- package/docs/sessions/grep-audit-report/attempt-log-1.md +0 -289
- package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +0 -679
- package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +0 -1
- package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +0 -920
- package/docs/sessions/simple-rest-api/attempt-log-1.md +0 -593
- package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +0 -995
- package/docs/tutorials/00-bootstrap.md +0 -166
- package/docs/tutorials/01-getting-started.md +0 -106
- package/docs/tutorials/02-container.md +0 -210
- package/docs/tutorials/03-scripts.md +0 -194
- package/docs/tutorials/04-features-overview.md +0 -196
- package/docs/tutorials/05-state-and-events.md +0 -171
- package/docs/tutorials/06-servers.md +0 -157
- package/docs/tutorials/07-endpoints.md +0 -198
- package/docs/tutorials/08-commands.md +0 -252
- package/docs/tutorials/09-clients.md +0 -162
- package/docs/tutorials/10-creating-features.md +0 -203
- package/docs/tutorials/11-contentbase.md +0 -191
- package/docs/tutorials/12-assistants.md +0 -215
- package/docs/tutorials/13-introspection.md +0 -157
- package/docs/tutorials/14-type-system.md +0 -174
- package/docs/tutorials/15-project-patterns.md +0 -222
- package/docs/tutorials/16-google-features.md +0 -534
- package/docs/tutorials/17-tui-blocks.md +0 -530
- package/docs/tutorials/18-semantic-search.md +0 -334
- package/docs/tutorials/19-python-sessions.md +0 -401
- package/docs/tutorials/20-browser-esm.md +0 -234
- package/src/agi/endpoints/ask.ts +0 -60
- package/src/agi/endpoints/conversations/[id].ts +0 -45
- package/src/agi/endpoints/conversations.ts +0 -31
- package/src/agi/endpoints/experts.ts +0 -37
- package/test/assistant-hooks.test.ts +0 -306
- package/test/assistant.test.ts +0 -81
- package/test/bus.test.ts +0 -134
- package/test/clients-servers.test.ts +0 -217
- package/test/command.test.ts +0 -267
- package/test/container-link.test.ts +0 -274
- package/test/conversation.test.ts +0 -220
- package/test/features.test.ts +0 -160
- package/test/fork-and-research.test.ts +0 -450
- package/test/integration.test.ts +0 -787
- package/test/interceptor-chain.test.ts +0 -61
- package/test/node-container.test.ts +0 -121
- package/test/python-session.test.ts +0 -105
- package/test/rate-limit.test.ts +0 -272
- package/test/semantic-search.test.ts +0 -550
- package/test/state.test.ts +0 -121
- package/test/vm-context.test.ts +0 -146
- package/test/vm-loadmodule.test.ts +0 -213
- package/test/websocket-ask.test.ts +0 -101
- package/test-integration/assistant.test.ts +0 -138
- package/test-integration/assistants-manager.test.ts +0 -113
- package/test-integration/claude-code.test.ts +0 -98
- package/test-integration/conversation-history.test.ts +0 -205
- package/test-integration/conversation.test.ts +0 -137
- package/test-integration/elevenlabs.test.ts +0 -55
- package/test-integration/google-services.test.ts +0 -80
- package/test-integration/helpers.ts +0 -89
- package/test-integration/memory.test.ts +0 -204
- package/test-integration/openai-codex.test.ts +0 -93
- package/test-integration/runpod.test.ts +0 -58
- package/test-integration/server-endpoints.test.ts +0 -97
- package/test-integration/telegram.test.ts +0 -46
|
@@ -1,604 +0,0 @@
|
|
|
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. Supports two modes: - **Stateless** (default): `execute()` and `executeFile()` spawn a fresh process per call - **Persistent session**: `startSession()` spawns a long-lived bridge process that maintains state across `run()` calls, enabling real codebase interaction with imports and session variables
|
|
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
|
-
### startSession
|
|
140
|
-
|
|
141
|
-
Starts a persistent Python session by spawning the bridge process. The bridge sets up sys.path for the project directory, then enters a JSON-line REPL loop. State (variables, imports) persists across run() calls until stopSession() or resetSession() is called.
|
|
142
|
-
|
|
143
|
-
**Returns:** `Promise<void>`
|
|
144
|
-
|
|
145
|
-
```ts
|
|
146
|
-
const python = container.feature('python', { dir: '/path/to/project' })
|
|
147
|
-
await python.enable()
|
|
148
|
-
await python.startSession()
|
|
149
|
-
await python.run('x = 42')
|
|
150
|
-
const result = await python.run('print(x)')
|
|
151
|
-
console.log(result.stdout) // '42\n'
|
|
152
|
-
await python.stopSession()
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
### stopSession
|
|
158
|
-
|
|
159
|
-
Stops the persistent Python session and cleans up the bridge process.
|
|
160
|
-
|
|
161
|
-
**Returns:** `Promise<void>`
|
|
162
|
-
|
|
163
|
-
```ts
|
|
164
|
-
await python.stopSession()
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
### run
|
|
170
|
-
|
|
171
|
-
Executes Python code in the persistent session. Variables and imports survive across calls. This is the session equivalent of execute().
|
|
172
|
-
|
|
173
|
-
**Parameters:**
|
|
174
|
-
|
|
175
|
-
| Name | Type | Required | Description |
|
|
176
|
-
|------|------|----------|-------------|
|
|
177
|
-
| `code` | `string` | ✓ | Python code to execute |
|
|
178
|
-
| `variables` | `Record<string, any>` | | Variables to inject into the namespace before execution |
|
|
179
|
-
|
|
180
|
-
**Returns:** `Promise<RunResult>`
|
|
181
|
-
|
|
182
|
-
```ts
|
|
183
|
-
await python.startSession()
|
|
184
|
-
|
|
185
|
-
// State persists across calls
|
|
186
|
-
await python.run('x = 42')
|
|
187
|
-
const result = await python.run('print(x * 2)')
|
|
188
|
-
console.log(result.stdout) // '84\n'
|
|
189
|
-
|
|
190
|
-
// Inject variables from JS
|
|
191
|
-
const result2 = await python.run('print(f"Hello {name}!")', { name: 'World' })
|
|
192
|
-
console.log(result2.stdout) // 'Hello World!\n'
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
### eval
|
|
198
|
-
|
|
199
|
-
Evaluates a Python expression in the persistent session and returns its value.
|
|
200
|
-
|
|
201
|
-
**Parameters:**
|
|
202
|
-
|
|
203
|
-
| Name | Type | Required | Description |
|
|
204
|
-
|------|------|----------|-------------|
|
|
205
|
-
| `expression` | `string` | ✓ | Python expression to evaluate |
|
|
206
|
-
|
|
207
|
-
**Returns:** `Promise<any>`
|
|
208
|
-
|
|
209
|
-
```ts
|
|
210
|
-
await python.run('x = 42')
|
|
211
|
-
const result = await python.eval('x * 2')
|
|
212
|
-
console.log(result) // 84
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
### importModule
|
|
218
|
-
|
|
219
|
-
Imports a Python module into the persistent session namespace.
|
|
220
|
-
|
|
221
|
-
**Parameters:**
|
|
222
|
-
|
|
223
|
-
| Name | Type | Required | Description |
|
|
224
|
-
|------|------|----------|-------------|
|
|
225
|
-
| `moduleName` | `string` | ✓ | Dotted module path (e.g. 'myapp.models') |
|
|
226
|
-
| `alias` | `string` | | Optional alias for the import (defaults to the last segment) |
|
|
227
|
-
|
|
228
|
-
**Returns:** `Promise<void>`
|
|
229
|
-
|
|
230
|
-
```ts
|
|
231
|
-
await python.importModule('json')
|
|
232
|
-
await python.importModule('myapp.models', 'models')
|
|
233
|
-
const result = await python.eval('models.User')
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
### call
|
|
239
|
-
|
|
240
|
-
Calls a function by dotted path in the persistent session namespace.
|
|
241
|
-
|
|
242
|
-
**Parameters:**
|
|
243
|
-
|
|
244
|
-
| Name | Type | Required | Description |
|
|
245
|
-
|------|------|----------|-------------|
|
|
246
|
-
| `funcPath` | `string` | ✓ | Dotted path to the function (e.g. 'json.dumps' or 'my_func') |
|
|
247
|
-
| `args` | `any[]` | | Positional arguments |
|
|
248
|
-
| `kwargs` | `Record<string, any>` | | Keyword arguments |
|
|
249
|
-
|
|
250
|
-
**Returns:** `Promise<any>`
|
|
251
|
-
|
|
252
|
-
```ts
|
|
253
|
-
await python.importModule('json')
|
|
254
|
-
const result = await python.call('json.dumps', [{ a: 1 }], { indent: 2 })
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
### getLocals
|
|
260
|
-
|
|
261
|
-
Returns all non-dunder variables from the persistent session namespace.
|
|
262
|
-
|
|
263
|
-
**Returns:** `Promise<Record<string, any>>`
|
|
264
|
-
|
|
265
|
-
```ts
|
|
266
|
-
await python.run('x = 42\ny = "hello"')
|
|
267
|
-
const locals = await python.getLocals()
|
|
268
|
-
console.log(locals) // { x: 42, y: 'hello' }
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
### resetSession
|
|
274
|
-
|
|
275
|
-
Clears all variables and imports from the persistent session namespace. The session remains active — you can continue calling run() after reset.
|
|
276
|
-
|
|
277
|
-
**Returns:** `Promise<void>`
|
|
278
|
-
|
|
279
|
-
```ts
|
|
280
|
-
await python.run('x = 42')
|
|
281
|
-
await python.resetSession()
|
|
282
|
-
// x is now undefined
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
## Getters
|
|
288
|
-
|
|
289
|
-
| Property | Type | Description |
|
|
290
|
-
|----------|------|-------------|
|
|
291
|
-
| `projectDir` | `any` | Returns the root directory of the Python project. |
|
|
292
|
-
| `pythonPath` | `any` | Returns the path to the Python executable for this environment. |
|
|
293
|
-
| `environmentType` | `any` | Returns the detected environment type: 'uv', 'conda', 'venv', or 'system'. |
|
|
294
|
-
|
|
295
|
-
## Events (Zod v4 schema)
|
|
296
|
-
|
|
297
|
-
### ready
|
|
298
|
-
|
|
299
|
-
When the Python environment is ready for execution
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
### environmentDetected
|
|
304
|
-
|
|
305
|
-
When the Python environment type is detected
|
|
306
|
-
|
|
307
|
-
**Event Arguments:**
|
|
308
|
-
|
|
309
|
-
| Name | Type | Description |
|
|
310
|
-
|------|------|-------------|
|
|
311
|
-
| `pythonPath` | `any` | Path to the detected Python executable |
|
|
312
|
-
| `environmentType` | `any` | Detected environment type |
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
### installingDependencies
|
|
317
|
-
|
|
318
|
-
When dependency installation begins
|
|
319
|
-
|
|
320
|
-
**Event Arguments:**
|
|
321
|
-
|
|
322
|
-
| Name | Type | Description |
|
|
323
|
-
|------|------|-------------|
|
|
324
|
-
| `command` | `string` | The install command being run |
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
### dependenciesInstalled
|
|
329
|
-
|
|
330
|
-
When dependencies are successfully installed
|
|
331
|
-
|
|
332
|
-
**Event Arguments:**
|
|
333
|
-
|
|
334
|
-
| Name | Type | Description |
|
|
335
|
-
|------|------|-------------|
|
|
336
|
-
| `stdout` | `string` | Standard output from install |
|
|
337
|
-
| `stderr` | `string` | Standard error from install |
|
|
338
|
-
| `exitCode` | `number` | Process exit code |
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
### dependencyInstallFailed
|
|
343
|
-
|
|
344
|
-
When dependency installation fails
|
|
345
|
-
|
|
346
|
-
**Event Arguments:**
|
|
347
|
-
|
|
348
|
-
| Name | Type | Description |
|
|
349
|
-
|------|------|-------------|
|
|
350
|
-
| `stdout` | `string` | Standard output from install |
|
|
351
|
-
| `stderr` | `string` | Standard error from install |
|
|
352
|
-
| `exitCode` | `number` | Process exit code |
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
### localsParseError
|
|
357
|
-
|
|
358
|
-
When captured locals fail to parse as JSON
|
|
359
|
-
|
|
360
|
-
**Event Arguments:**
|
|
361
|
-
|
|
362
|
-
| Name | Type | Description |
|
|
363
|
-
|------|------|-------------|
|
|
364
|
-
| `arg0` | `any` | The parse error |
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
### codeExecuted
|
|
369
|
-
|
|
370
|
-
When Python code finishes executing
|
|
371
|
-
|
|
372
|
-
**Event Arguments:**
|
|
373
|
-
|
|
374
|
-
| Name | Type | Description |
|
|
375
|
-
|------|------|-------------|
|
|
376
|
-
| `code` | `string` | The Python code that was executed |
|
|
377
|
-
| `variables` | `object` | Variables passed to the execution |
|
|
378
|
-
| `result` | `object` | Execution result |
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
### fileExecuted
|
|
383
|
-
|
|
384
|
-
When a Python file finishes executing
|
|
385
|
-
|
|
386
|
-
**Event Arguments:**
|
|
387
|
-
|
|
388
|
-
| Name | Type | Description |
|
|
389
|
-
|------|------|-------------|
|
|
390
|
-
| `filePath` | `string` | Path to the executed Python file |
|
|
391
|
-
| `variables` | `object` | Variables passed as arguments |
|
|
392
|
-
| `result` | `object` | Execution result |
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
### sessionError
|
|
397
|
-
|
|
398
|
-
When a session-level error occurs
|
|
399
|
-
|
|
400
|
-
**Event Arguments:**
|
|
401
|
-
|
|
402
|
-
| Name | Type | Description |
|
|
403
|
-
|------|------|-------------|
|
|
404
|
-
| `error` | `string` | Error message |
|
|
405
|
-
| `sessionId` | `any` | Session identifier, if available |
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
### sessionStarted
|
|
410
|
-
|
|
411
|
-
When a persistent Python session starts
|
|
412
|
-
|
|
413
|
-
**Event Arguments:**
|
|
414
|
-
|
|
415
|
-
| Name | Type | Description |
|
|
416
|
-
|------|------|-------------|
|
|
417
|
-
| `sessionId` | `string` | Unique session identifier |
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
### sessionStopped
|
|
422
|
-
|
|
423
|
-
When a persistent Python session stops
|
|
424
|
-
|
|
425
|
-
**Event Arguments:**
|
|
426
|
-
|
|
427
|
-
| Name | Type | Description |
|
|
428
|
-
|------|------|-------------|
|
|
429
|
-
| `sessionId` | `string` | Session identifier that stopped |
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
## State (Zod v4 schema)
|
|
434
|
-
|
|
435
|
-
| Property | Type | Description |
|
|
436
|
-
|----------|------|-------------|
|
|
437
|
-
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
438
|
-
| `pythonPath` | `any` | Path to the detected Python executable |
|
|
439
|
-
| `projectDir` | `any` | Root directory of the Python project |
|
|
440
|
-
| `environmentType` | `any` | Detected Python environment type (uv, conda, venv, or system) |
|
|
441
|
-
| `isReady` | `boolean` | Whether the Python environment is ready for execution |
|
|
442
|
-
| `lastExecutedScript` | `any` | Path to the last executed Python script |
|
|
443
|
-
| `sessionActive` | `boolean` | Whether a persistent Python session is currently active |
|
|
444
|
-
| `sessionId` | `any` | Unique ID of the current persistent session |
|
|
445
|
-
|
|
446
|
-
## Examples
|
|
447
|
-
|
|
448
|
-
**features.python**
|
|
449
|
-
|
|
450
|
-
```ts
|
|
451
|
-
const python = container.feature('python', {
|
|
452
|
-
dir: "/path/to/python/project",
|
|
453
|
-
})
|
|
454
|
-
|
|
455
|
-
// Stateless execution
|
|
456
|
-
const result = await python.execute('print("Hello from Python!")')
|
|
457
|
-
|
|
458
|
-
// Persistent session
|
|
459
|
-
await python.startSession()
|
|
460
|
-
await python.run('import myapp.models')
|
|
461
|
-
await python.run('users = myapp.models.User.objects.all()')
|
|
462
|
-
const result = await python.run('print(len(users))')
|
|
463
|
-
await python.stopSession()
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
**detectEnvironment**
|
|
469
|
-
|
|
470
|
-
```ts
|
|
471
|
-
await python.detectEnvironment()
|
|
472
|
-
console.log(python.state.get('environmentType')) // 'uv' | 'conda' | 'venv' | 'system'
|
|
473
|
-
console.log(python.state.get('pythonPath')) // '/path/to/python/executable'
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
**installDependencies**
|
|
479
|
-
|
|
480
|
-
```ts
|
|
481
|
-
// Auto-detect and install
|
|
482
|
-
const result = await python.installDependencies()
|
|
483
|
-
|
|
484
|
-
// With custom install command
|
|
485
|
-
const python = container.feature('python', {
|
|
486
|
-
installCommand: 'pip install -r requirements.txt'
|
|
487
|
-
})
|
|
488
|
-
const result = await python.installDependencies()
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
**execute**
|
|
494
|
-
|
|
495
|
-
```ts
|
|
496
|
-
// Simple execution
|
|
497
|
-
const result = await python.execute('print("Hello World")')
|
|
498
|
-
console.log(result.stdout) // 'Hello World'
|
|
499
|
-
|
|
500
|
-
// With variables
|
|
501
|
-
const result = await python.execute('print(f"Hello {name}!")', { name: 'Alice' })
|
|
502
|
-
|
|
503
|
-
// Capture locals
|
|
504
|
-
const result = await python.execute('x = 42\ny = x * 2', {}, { captureLocals: true })
|
|
505
|
-
console.log(result.locals) // { x: 42, y: 84 }
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
**executeFile**
|
|
511
|
-
|
|
512
|
-
```ts
|
|
513
|
-
const result = await python.executeFile('/path/to/script.py')
|
|
514
|
-
console.log(result.stdout)
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
**startSession**
|
|
520
|
-
|
|
521
|
-
```ts
|
|
522
|
-
const python = container.feature('python', { dir: '/path/to/project' })
|
|
523
|
-
await python.enable()
|
|
524
|
-
await python.startSession()
|
|
525
|
-
await python.run('x = 42')
|
|
526
|
-
const result = await python.run('print(x)')
|
|
527
|
-
console.log(result.stdout) // '42\n'
|
|
528
|
-
await python.stopSession()
|
|
529
|
-
```
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
**stopSession**
|
|
534
|
-
|
|
535
|
-
```ts
|
|
536
|
-
await python.stopSession()
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
**run**
|
|
542
|
-
|
|
543
|
-
```ts
|
|
544
|
-
await python.startSession()
|
|
545
|
-
|
|
546
|
-
// State persists across calls
|
|
547
|
-
await python.run('x = 42')
|
|
548
|
-
const result = await python.run('print(x * 2)')
|
|
549
|
-
console.log(result.stdout) // '84\n'
|
|
550
|
-
|
|
551
|
-
// Inject variables from JS
|
|
552
|
-
const result2 = await python.run('print(f"Hello {name}!")', { name: 'World' })
|
|
553
|
-
console.log(result2.stdout) // 'Hello World!\n'
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
**eval**
|
|
559
|
-
|
|
560
|
-
```ts
|
|
561
|
-
await python.run('x = 42')
|
|
562
|
-
const result = await python.eval('x * 2')
|
|
563
|
-
console.log(result) // 84
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
**importModule**
|
|
569
|
-
|
|
570
|
-
```ts
|
|
571
|
-
await python.importModule('json')
|
|
572
|
-
await python.importModule('myapp.models', 'models')
|
|
573
|
-
const result = await python.eval('models.User')
|
|
574
|
-
```
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
**call**
|
|
579
|
-
|
|
580
|
-
```ts
|
|
581
|
-
await python.importModule('json')
|
|
582
|
-
const result = await python.call('json.dumps', [{ a: 1 }], { indent: 2 })
|
|
583
|
-
```
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
**getLocals**
|
|
588
|
-
|
|
589
|
-
```ts
|
|
590
|
-
await python.run('x = 42\ny = "hello"')
|
|
591
|
-
const locals = await python.getLocals()
|
|
592
|
-
console.log(locals) // { x: 42, y: 'hello' }
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
**resetSession**
|
|
598
|
-
|
|
599
|
-
```ts
|
|
600
|
-
await python.run('x = 42')
|
|
601
|
-
await python.resetSession()
|
|
602
|
-
// x is now undefined
|
|
603
|
-
```
|
|
604
|
-
|