luca 2.0.0 → 3.0.0
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 +169 -0
- package/AGENTS.md +99 -0
- package/CLAUDE.md +115 -0
- package/CNAME +1 -0
- package/README.md +257 -9
- package/RUNME.md +56 -0
- package/assistants/codingAssistant/ABOUT.md +5 -0
- package/assistants/codingAssistant/CORE.md +28 -0
- package/assistants/codingAssistant/hooks.ts +21 -0
- package/assistants/codingAssistant/tools.ts +12 -0
- package/assistants/inkbot/ABOUT.md +16 -0
- package/assistants/inkbot/CORE.md +330 -0
- package/assistants/inkbot/hooks.ts +6 -0
- package/assistants/inkbot/tools.ts +53 -0
- package/assistants/researcher/ABOUT.md +5 -0
- package/assistants/researcher/CORE.md +46 -0
- package/assistants/researcher/hooks.ts +16 -0
- package/assistants/researcher/tools.ts +237 -0
- package/bun.lock +2769 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-bootstrap.ts +118 -0
- package/commands/build-python-bridge.ts +43 -0
- package/commands/build-scaffolds.ts +176 -0
- package/commands/generate-api-docs.ts +114 -0
- package/commands/inkbot.ts +874 -0
- package/commands/release.ts +80 -0
- package/commands/try-all-challenges.ts +543 -0
- package/commands/try-challenge.ts +100 -0
- package/dist/agi/container.server.d.ts +63 -0
- package/dist/agi/container.server.d.ts.map +1 -0
- package/dist/agi/endpoints/ask.d.ts +20 -0
- package/dist/agi/endpoints/ask.d.ts.map +1 -0
- package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
- package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
- package/dist/agi/endpoints/conversations.d.ts +18 -0
- package/dist/agi/endpoints/conversations.d.ts.map +1 -0
- package/dist/agi/endpoints/experts.d.ts +8 -0
- package/dist/agi/endpoints/experts.d.ts.map +1 -0
- package/dist/agi/feature.d.ts +9 -0
- package/dist/agi/feature.d.ts.map +1 -0
- package/dist/agi/features/assistant.d.ts +509 -0
- package/dist/agi/features/assistant.d.ts.map +1 -0
- package/dist/agi/features/assistants-manager.d.ts +236 -0
- package/dist/agi/features/assistants-manager.d.ts.map +1 -0
- package/dist/agi/features/autonomous-assistant.d.ts +281 -0
- package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
- package/dist/agi/features/browser-use.d.ts +479 -0
- package/dist/agi/features/browser-use.d.ts.map +1 -0
- package/dist/agi/features/claude-code.d.ts +824 -0
- package/dist/agi/features/claude-code.d.ts.map +1 -0
- package/dist/agi/features/conversation-history.d.ts +245 -0
- package/dist/agi/features/conversation-history.d.ts.map +1 -0
- package/dist/agi/features/conversation.d.ts +464 -0
- package/dist/agi/features/conversation.d.ts.map +1 -0
- package/dist/agi/features/docs-reader.d.ts +72 -0
- package/dist/agi/features/docs-reader.d.ts.map +1 -0
- package/dist/agi/features/file-tools.d.ts +110 -0
- package/dist/agi/features/file-tools.d.ts.map +1 -0
- package/dist/agi/features/luca-coder.d.ts +323 -0
- package/dist/agi/features/luca-coder.d.ts.map +1 -0
- package/dist/agi/features/openai-codex.d.ts +381 -0
- package/dist/agi/features/openai-codex.d.ts.map +1 -0
- package/dist/agi/features/openapi.d.ts +200 -0
- package/dist/agi/features/openapi.d.ts.map +1 -0
- package/dist/agi/features/skills-library.d.ts +167 -0
- package/dist/agi/features/skills-library.d.ts.map +1 -0
- package/dist/agi/index.d.ts +5 -0
- package/dist/agi/index.d.ts.map +1 -0
- package/dist/agi/lib/interceptor-chain.d.ts +44 -0
- package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
- package/dist/agi/lib/token-counter.d.ts +13 -0
- package/dist/agi/lib/token-counter.d.ts.map +1 -0
- package/dist/bootstrap/generated.d.ts +5 -0
- package/dist/bootstrap/generated.d.ts.map +1 -0
- package/dist/browser.d.ts +12 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/bus.d.ts +29 -0
- package/dist/bus.d.ts.map +1 -0
- package/dist/cli/build-info.d.ts +4 -0
- package/dist/cli/build-info.d.ts.map +1 -0
- package/dist/cli/cli.d.ts +3 -12
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/client.d.ts +60 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/clients/civitai/index.d.ts +472 -0
- package/dist/clients/civitai/index.d.ts.map +1 -0
- package/dist/clients/client-template.d.ts +30 -0
- package/dist/clients/client-template.d.ts.map +1 -0
- package/dist/clients/comfyui/index.d.ts +281 -0
- package/dist/clients/comfyui/index.d.ts.map +1 -0
- package/dist/clients/elevenlabs/index.d.ts +197 -0
- package/dist/clients/elevenlabs/index.d.ts.map +1 -0
- package/dist/clients/graph.d.ts +64 -0
- package/dist/clients/graph.d.ts.map +1 -0
- package/dist/clients/openai/index.d.ts +247 -0
- package/dist/clients/openai/index.d.ts.map +1 -0
- package/dist/clients/rest.d.ts +92 -0
- package/dist/clients/rest.d.ts.map +1 -0
- package/dist/clients/supabase/index.d.ts +176 -0
- package/dist/clients/supabase/index.d.ts.map +1 -0
- package/dist/clients/websocket.d.ts +127 -0
- package/dist/clients/websocket.d.ts.map +1 -0
- package/dist/command.d.ts +163 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/commands/bootstrap.d.ts +20 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/chat.d.ts +37 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/code.d.ts +28 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/console.d.ts +22 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/describe.d.ts +50 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/eval.d.ts +23 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/help.d.ts +25 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/introspect.d.ts +24 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/mcp.d.ts +35 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/prompt.d.ts +38 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/run.d.ts +24 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/sandbox-mcp.d.ts +34 -0
- package/dist/commands/sandbox-mcp.d.ts.map +1 -0
- package/dist/commands/save-api-docs.d.ts +21 -0
- package/dist/commands/save-api-docs.d.ts.map +1 -0
- package/dist/commands/scaffold.d.ts +24 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/select.d.ts +22 -0
- package/dist/commands/select.d.ts.map +1 -0
- package/dist/commands/serve.d.ts +29 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/container-describer.d.ts +144 -0
- package/dist/container-describer.d.ts.map +1 -0
- package/dist/container.d.ts +451 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/endpoint.d.ts +113 -0
- package/dist/endpoint.d.ts.map +1 -0
- package/dist/feature.d.ts +47 -0
- package/dist/feature.d.ts.map +1 -0
- package/dist/graft.d.ts +29 -0
- package/dist/graft.d.ts.map +1 -0
- package/dist/hash-object.d.ts +8 -0
- package/dist/hash-object.d.ts.map +1 -0
- package/dist/helper.d.ts +209 -0
- package/dist/helper.d.ts.map +1 -0
- package/dist/introspection/generated.node.d.ts +44623 -0
- package/dist/introspection/generated.node.d.ts.map +1 -0
- package/dist/introspection/generated.web.d.ts +1412 -0
- package/dist/introspection/generated.web.d.ts.map +1 -0
- package/dist/introspection/index.d.ts +156 -0
- package/dist/introspection/index.d.ts.map +1 -0
- package/dist/introspection/scan.d.ts +147 -0
- package/dist/introspection/scan.d.ts.map +1 -0
- package/dist/node/container.d.ts +256 -0
- package/dist/node/container.d.ts.map +1 -0
- package/dist/node/feature.d.ts +9 -0
- package/dist/node/feature.d.ts.map +1 -0
- package/dist/node/features/container-link.d.ts +213 -0
- package/dist/node/features/container-link.d.ts.map +1 -0
- package/dist/node/features/content-db.d.ts +354 -0
- package/dist/node/features/content-db.d.ts.map +1 -0
- package/dist/node/features/disk-cache.d.ts +236 -0
- package/dist/node/features/disk-cache.d.ts.map +1 -0
- package/dist/node/features/dns.d.ts +511 -0
- package/dist/node/features/dns.d.ts.map +1 -0
- package/dist/node/features/docker.d.ts +485 -0
- package/dist/node/features/docker.d.ts.map +1 -0
- package/dist/node/features/downloader.d.ts +73 -0
- package/dist/node/features/downloader.d.ts.map +1 -0
- package/dist/node/features/figlet-fonts.d.ts +4 -0
- package/dist/node/features/figlet-fonts.d.ts.map +1 -0
- package/dist/node/features/file-manager.d.ts +177 -0
- package/dist/node/features/file-manager.d.ts.map +1 -0
- package/dist/node/features/fs.d.ts +635 -0
- package/dist/node/features/fs.d.ts.map +1 -0
- package/dist/node/features/git.d.ts +329 -0
- package/dist/node/features/git.d.ts.map +1 -0
- package/dist/node/features/google-auth.d.ts +200 -0
- package/dist/node/features/google-auth.d.ts.map +1 -0
- package/dist/node/features/google-calendar.d.ts +194 -0
- package/dist/node/features/google-calendar.d.ts.map +1 -0
- package/dist/node/features/google-docs.d.ts +138 -0
- package/dist/node/features/google-docs.d.ts.map +1 -0
- package/dist/node/features/google-drive.d.ts +202 -0
- package/dist/node/features/google-drive.d.ts.map +1 -0
- package/dist/node/features/google-mail.d.ts +221 -0
- package/dist/node/features/google-mail.d.ts.map +1 -0
- package/dist/node/features/google-sheets.d.ts +157 -0
- package/dist/node/features/google-sheets.d.ts.map +1 -0
- package/dist/node/features/grep.d.ts +207 -0
- package/dist/node/features/grep.d.ts.map +1 -0
- package/dist/node/features/helpers.d.ts +236 -0
- package/dist/node/features/helpers.d.ts.map +1 -0
- package/dist/node/features/ink.d.ts +332 -0
- package/dist/node/features/ink.d.ts.map +1 -0
- package/dist/node/features/ipc-socket.d.ts +298 -0
- package/dist/node/features/ipc-socket.d.ts.map +1 -0
- package/dist/node/features/json-tree.d.ts +140 -0
- package/dist/node/features/json-tree.d.ts.map +1 -0
- package/dist/node/features/networking.d.ts +373 -0
- package/dist/node/features/networking.d.ts.map +1 -0
- package/dist/node/features/nlp.d.ts +125 -0
- package/dist/node/features/nlp.d.ts.map +1 -0
- package/dist/node/features/opener.d.ts +93 -0
- package/dist/node/features/opener.d.ts.map +1 -0
- package/dist/node/features/os.d.ts +168 -0
- package/dist/node/features/os.d.ts.map +1 -0
- package/dist/node/features/package-finder.d.ts +419 -0
- package/dist/node/features/package-finder.d.ts.map +1 -0
- package/dist/node/features/postgres.d.ts +173 -0
- package/dist/node/features/postgres.d.ts.map +1 -0
- package/dist/node/features/proc.d.ts +285 -0
- package/dist/node/features/proc.d.ts.map +1 -0
- package/dist/node/features/process-manager.d.ts +427 -0
- package/dist/node/features/process-manager.d.ts.map +1 -0
- package/dist/node/features/python.d.ts +477 -0
- package/dist/node/features/python.d.ts.map +1 -0
- package/dist/node/features/redis.d.ts +247 -0
- package/dist/node/features/redis.d.ts.map +1 -0
- package/dist/node/features/repl.d.ts +84 -0
- package/dist/node/features/repl.d.ts.map +1 -0
- package/dist/node/features/runpod.d.ts +527 -0
- package/dist/node/features/runpod.d.ts.map +1 -0
- package/dist/node/features/secure-shell.d.ts +145 -0
- package/dist/node/features/secure-shell.d.ts.map +1 -0
- package/dist/node/features/semantic-search.d.ts +207 -0
- package/dist/node/features/semantic-search.d.ts.map +1 -0
- package/dist/node/features/sqlite.d.ts +180 -0
- package/dist/node/features/sqlite.d.ts.map +1 -0
- package/dist/node/features/telegram.d.ts +173 -0
- package/dist/node/features/telegram.d.ts.map +1 -0
- package/dist/node/features/transpiler.d.ts +51 -0
- package/dist/node/features/transpiler.d.ts.map +1 -0
- package/dist/node/features/tts.d.ts +108 -0
- package/dist/node/features/tts.d.ts.map +1 -0
- package/dist/node/features/ui.d.ts +562 -0
- package/dist/node/features/ui.d.ts.map +1 -0
- package/dist/node/features/vault.d.ts +90 -0
- package/dist/node/features/vault.d.ts.map +1 -0
- package/dist/node/features/vm.d.ts +285 -0
- package/dist/node/features/vm.d.ts.map +1 -0
- package/dist/node/features/yaml-tree.d.ts +118 -0
- package/dist/node/features/yaml-tree.d.ts.map +1 -0
- package/dist/node/features/yaml.d.ts +127 -0
- package/dist/node/features/yaml.d.ts.map +1 -0
- package/dist/node.d.ts +67 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/python/generated.d.ts +2 -0
- package/dist/python/generated.d.ts.map +1 -0
- package/dist/react/index.d.ts +36 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/registry.d.ts +97 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/scaffolds/generated.d.ts +13 -0
- package/dist/scaffolds/generated.d.ts.map +1 -0
- package/dist/scaffolds/template.d.ts +11 -0
- package/dist/scaffolds/template.d.ts.map +1 -0
- package/dist/schemas/base.d.ts +254 -0
- package/dist/schemas/base.d.ts.map +1 -0
- package/dist/selector.d.ts +130 -0
- package/dist/selector.d.ts.map +1 -0
- package/dist/server.d.ts +89 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/servers/express.d.ts +104 -0
- package/dist/servers/express.d.ts.map +1 -0
- package/dist/servers/mcp.d.ts +201 -0
- package/dist/servers/mcp.d.ts.map +1 -0
- package/dist/servers/socket.d.ts +121 -0
- package/dist/servers/socket.d.ts.map +1 -0
- package/dist/state.d.ts +24 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/web/clients/socket.d.ts +37 -0
- package/dist/web/clients/socket.d.ts.map +1 -0
- package/dist/web/container.d.ts +55 -0
- package/dist/web/container.d.ts.map +1 -0
- package/dist/web/extension.d.ts +4 -0
- package/dist/web/extension.d.ts.map +1 -0
- package/dist/web/feature.d.ts +8 -0
- package/dist/web/feature.d.ts.map +1 -0
- package/dist/web/features/asset-loader.d.ts +35 -0
- package/dist/web/features/asset-loader.d.ts.map +1 -0
- package/dist/web/features/container-link.d.ts +167 -0
- package/dist/web/features/container-link.d.ts.map +1 -0
- package/dist/web/features/esbuild.d.ts +51 -0
- package/dist/web/features/esbuild.d.ts.map +1 -0
- package/dist/web/features/helpers.d.ts +140 -0
- package/dist/web/features/helpers.d.ts.map +1 -0
- package/dist/web/features/network.d.ts +69 -0
- package/dist/web/features/network.d.ts.map +1 -0
- package/dist/web/features/speech.d.ts +71 -0
- package/dist/web/features/speech.d.ts.map +1 -0
- package/dist/web/features/vault.d.ts +62 -0
- package/dist/web/features/vault.d.ts.map +1 -0
- package/dist/web/features/vm.d.ts +48 -0
- package/dist/web/features/vm.d.ts.map +1 -0
- package/dist/web/features/voice-recognition.d.ts +96 -0
- package/dist/web/features/voice-recognition.d.ts.map +1 -0
- package/dist/web/shims/isomorphic-vm.d.ts +22 -0
- package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
- package/docs/CLI.md +335 -0
- package/docs/CNAME +1 -0
- package/docs/README.md +60 -0
- package/docs/TABLE-OF-CONTENTS.md +183 -0
- package/docs/apis/clients/elevenlabs.md +308 -0
- package/docs/apis/clients/graph.md +107 -0
- package/docs/apis/clients/openai.md +429 -0
- package/docs/apis/clients/rest.md +161 -0
- package/docs/apis/clients/websocket.md +174 -0
- package/docs/apis/features/agi/assistant.md +625 -0
- package/docs/apis/features/agi/assistants-manager.md +282 -0
- package/docs/apis/features/agi/auto-assistant.md +279 -0
- package/docs/apis/features/agi/browser-use.md +802 -0
- package/docs/apis/features/agi/claude-code.md +884 -0
- package/docs/apis/features/agi/conversation-history.md +364 -0
- package/docs/apis/features/agi/conversation.md +548 -0
- package/docs/apis/features/agi/docs-reader.md +99 -0
- package/docs/apis/features/agi/file-tools.md +163 -0
- package/docs/apis/features/agi/luca-coder.md +407 -0
- package/docs/apis/features/agi/openai-codex.md +396 -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 +239 -0
- package/docs/apis/features/node/container-link.md +192 -0
- package/docs/apis/features/node/content-db.md +450 -0
- package/docs/apis/features/node/disk-cache.md +379 -0
- package/docs/apis/features/node/dns.md +652 -0
- package/docs/apis/features/node/docker.md +706 -0
- package/docs/apis/features/node/downloader.md +81 -0
- package/docs/apis/features/node/esbuild.md +60 -0
- package/docs/apis/features/node/file-manager.md +191 -0
- package/docs/apis/features/node/fs.md +1217 -0
- package/docs/apis/features/node/git.md +371 -0
- package/docs/apis/features/node/google-auth.md +193 -0
- package/docs/apis/features/node/google-calendar.md +202 -0
- package/docs/apis/features/node/google-docs.md +173 -0
- package/docs/apis/features/node/google-drive.md +246 -0
- package/docs/apis/features/node/google-mail.md +214 -0
- package/docs/apis/features/node/google-sheets.md +194 -0
- package/docs/apis/features/node/grep.md +292 -0
- package/docs/apis/features/node/helpers.md +164 -0
- package/docs/apis/features/node/ink.md +334 -0
- package/docs/apis/features/node/ipc-socket.md +249 -0
- package/docs/apis/features/node/json-tree.md +86 -0
- package/docs/apis/features/node/networking.md +316 -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 +146 -0
- package/docs/apis/features/node/package-finder.md +392 -0
- package/docs/apis/features/node/postgres.md +234 -0
- package/docs/apis/features/node/proc.md +399 -0
- package/docs/apis/features/node/process-manager.md +305 -0
- package/docs/apis/features/node/python.md +604 -0
- package/docs/apis/features/node/redis.md +380 -0
- package/docs/apis/features/node/repl.md +88 -0
- package/docs/apis/features/node/runpod.md +674 -0
- package/docs/apis/features/node/secure-shell.md +176 -0
- package/docs/apis/features/node/semantic-search.md +408 -0
- package/docs/apis/features/node/sqlite.md +233 -0
- package/docs/apis/features/node/telegram.md +279 -0
- package/docs/apis/features/node/transpiler.md +74 -0
- package/docs/apis/features/node/tts.md +133 -0
- package/docs/apis/features/node/ui.md +701 -0
- package/docs/apis/features/node/vault.md +59 -0
- package/docs/apis/features/node/vm.md +75 -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 +59 -0
- package/docs/apis/features/web/container-link.md +192 -0
- package/docs/apis/features/web/esbuild.md +54 -0
- package/docs/apis/features/web/helpers.md +164 -0
- package/docs/apis/features/web/network.md +44 -0
- package/docs/apis/features/web/speech.md +69 -0
- package/docs/apis/features/web/vault.md +59 -0
- package/docs/apis/features/web/vm.md +75 -0
- package/docs/apis/features/web/voice.md +84 -0
- package/docs/apis/servers/express.md +171 -0
- package/docs/apis/servers/mcp.md +238 -0
- package/docs/apis/servers/websocket.md +170 -0
- package/docs/bootstrap/CLAUDE.md +101 -0
- package/docs/bootstrap/SKILL.md +341 -0
- package/docs/bootstrap/templates/about-command.ts +41 -0
- package/docs/bootstrap/templates/docs-models.ts +22 -0
- package/docs/bootstrap/templates/docs-readme.md +43 -0
- package/docs/bootstrap/templates/example-feature.ts +53 -0
- package/docs/bootstrap/templates/health-endpoint.ts +15 -0
- package/docs/bootstrap/templates/luca-cli.ts +30 -0
- package/docs/bootstrap/templates/runme.md +54 -0
- package/docs/challenges/caching-proxy.md +16 -0
- package/docs/challenges/content-db-round-trip.md +14 -0
- package/docs/challenges/custom-command.md +9 -0
- package/docs/challenges/file-watcher-pipeline.md +11 -0
- package/docs/challenges/grep-audit-report.md +15 -0
- package/docs/challenges/multi-feature-dashboard.md +14 -0
- package/docs/challenges/process-orchestrator.md +17 -0
- package/docs/challenges/rest-api-server-with-client.md +12 -0
- package/docs/challenges/script-runner-with-vm.md +11 -0
- package/docs/challenges/simple-rest-api.md +15 -0
- package/docs/challenges/websocket-serve-and-client.md +11 -0
- package/docs/challenges/yaml-config-system.md +14 -0
- package/docs/command-system-overhaul.md +94 -0
- package/docs/documentation-audit.md +134 -0
- package/docs/examples/assistant/CORE.md +18 -0
- package/docs/examples/assistant/hooks.ts +3 -0
- package/docs/examples/assistant/tools.ts +10 -0
- package/docs/examples/assistant-hooks-reference.ts +171 -0
- package/docs/examples/assistant-with-process-manager.md +84 -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/entity.md +124 -0
- package/docs/examples/esbuild.md +80 -0
- package/docs/examples/feature-as-tool-provider.md +143 -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/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/postgres.md +91 -0
- package/docs/examples/proc.md +81 -0
- package/docs/examples/process-manager.md +79 -0
- package/docs/examples/python.md +132 -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/structured-output-with-assistants.md +144 -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/websocket-ask-and-reply-example.md +128 -0
- package/docs/examples/yaml-tree.md +93 -0
- package/docs/examples/yaml.md +104 -0
- package/docs/ideas/assistant-factory-pattern.md +142 -0
- package/docs/in-memory-fs.md +4 -0
- package/docs/introspection-audit.md +49 -0
- package/docs/introspection.md +164 -0
- package/docs/mcp/readme.md +162 -0
- package/docs/models.ts +41 -0
- package/docs/philosophy.md +86 -0
- package/docs/principles.md +7 -0
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
- package/docs/prompts/check-for-undocumented-features.md +27 -0
- package/docs/prompts/mcp-test-easy-command.md +27 -0
- package/docs/scaffolds/client.md +149 -0
- package/docs/scaffolds/command.md +120 -0
- package/docs/scaffolds/endpoint.md +171 -0
- package/docs/scaffolds/feature.md +158 -0
- package/docs/scaffolds/selector.md +91 -0
- package/docs/scaffolds/server.md +196 -0
- package/docs/selectors.md +115 -0
- package/docs/sessions/custom-command/attempt-log-2.md +195 -0
- package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +728 -0
- package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +555 -0
- package/docs/sessions/grep-audit-report/attempt-log-1.md +289 -0
- package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +679 -0
- package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +1 -0
- package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +920 -0
- package/docs/sessions/simple-rest-api/attempt-log-1.md +593 -0
- package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +995 -0
- package/docs/tutorials/00-bootstrap.md +166 -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 +252 -0
- package/docs/tutorials/09-clients.md +162 -0
- package/docs/tutorials/10-creating-features.md +203 -0
- package/docs/tutorials/11-contentbase.md +191 -0
- package/docs/tutorials/12-assistants.md +215 -0
- package/docs/tutorials/13-introspection.md +157 -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/docs/tutorials/19-python-sessions.md +401 -0
- package/docs/tutorials/20-browser-esm.md +234 -0
- package/index.html +1430 -0
- package/index.ts +1 -0
- package/install.sh +84 -0
- package/luca.cli.ts +16 -0
- package/luca.console.ts +9 -0
- package/main.py +6 -0
- package/package.json +219 -58
- package/public/index.html +1430 -0
- package/public/slides-ai-native.html +902 -0
- package/public/slides-intro.html +974 -0
- package/pyproject.toml +7 -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/using-assistant-with-mcp.ts +555 -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 +11 -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/scaffold.ts +391 -0
- package/scripts/scratch.ts +15 -0
- package/scripts/stamp-build.sh +12 -0
- package/scripts/test-assistant-hooks.ts +13 -0
- package/scripts/test-docs-reader.ts +10 -0
- package/scripts/test-linux-binary.sh +80 -0
- package/scripts/update-introspection-data.ts +58 -0
- package/src/agi/README.md +14 -0
- package/src/agi/container.server.ts +152 -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/feature.ts +13 -0
- package/src/agi/features/agent-memory.ts +694 -0
- package/src/agi/features/assistant.ts +1624 -0
- package/src/agi/features/assistants-manager.ts +418 -0
- package/src/agi/features/autonomous-assistant.ts +431 -0
- package/src/agi/features/browser-use.ts +653 -0
- package/src/agi/features/claude-code.ts +1538 -0
- package/src/agi/features/coding-tools.ts +175 -0
- package/src/agi/features/conversation-history.ts +495 -0
- package/src/agi/features/conversation.ts +1323 -0
- package/src/agi/features/docs-reader.ts +167 -0
- package/src/agi/features/file-tools.ts +293 -0
- package/src/agi/features/luca-coder.ts +639 -0
- package/src/agi/features/openai-codex.ts +651 -0
- package/src/agi/features/openapi.ts +445 -0
- package/src/agi/features/skills-library.ts +478 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/interceptor-chain.ts +89 -0
- package/src/agi/lib/token-counter.ts +122 -0
- package/src/bootstrap/generated.ts +9792 -0
- package/src/browser.ts +25 -0
- package/src/bus.ts +122 -0
- package/src/cli/build-info.ts +4 -0
- package/src/cli/cli.ts +355 -0
- package/src/client.ts +170 -0
- package/src/clients/civitai/index.ts +537 -0
- package/src/clients/client-template.ts +41 -0
- package/src/clients/comfyui/index.ts +604 -0
- package/src/clients/elevenlabs/index.ts +317 -0
- package/src/clients/graph.ts +87 -0
- package/src/clients/openai/index.ts +456 -0
- package/src/clients/rest.ts +207 -0
- package/src/clients/supabase/index.ts +357 -0
- package/src/clients/voicebox/index.ts +300 -0
- package/src/clients/websocket.ts +251 -0
- package/src/command.ts +505 -0
- package/src/commands/bootstrap.ts +244 -0
- package/src/commands/chat.ts +308 -0
- package/src/commands/code.ts +371 -0
- package/src/commands/console.ts +189 -0
- package/src/commands/describe.ts +243 -0
- package/src/commands/eval.ts +121 -0
- package/src/commands/help.ts +240 -0
- package/src/commands/index.ts +19 -0
- package/src/commands/introspect.ts +218 -0
- package/src/commands/mcp.ts +64 -0
- package/src/commands/prompt.ts +982 -0
- package/src/commands/run.ts +278 -0
- package/src/commands/sandbox-mcp.ts +343 -0
- package/src/commands/save-api-docs.ts +51 -0
- package/src/commands/scaffold.ts +225 -0
- package/src/commands/select.ts +99 -0
- package/src/commands/serve.ts +208 -0
- package/src/container-describer.ts +1084 -0
- package/src/container.ts +1186 -0
- package/src/endpoint.ts +365 -0
- package/src/entity.ts +173 -0
- package/src/feature.ts +118 -0
- package/src/graft.ts +181 -0
- package/src/hash-object.ts +97 -0
- package/src/helper.ts +849 -0
- package/src/introspection/generated.agi.ts +40208 -0
- package/src/introspection/generated.node.ts +28686 -0
- package/src/introspection/generated.web.ts +2251 -0
- package/src/introspection/index.ts +296 -0
- package/src/introspection/scan.ts +1131 -0
- package/src/node/container.ts +409 -0
- package/src/node/feature.ts +13 -0
- package/src/node/features/container-link.ts +559 -0
- package/src/node/features/content-db.ts +812 -0
- package/src/node/features/disk-cache.ts +388 -0
- package/src/node/features/dns.ts +669 -0
- package/src/node/features/docker.ts +921 -0
- package/src/node/features/downloader.ts +79 -0
- package/src/node/features/figlet-fonts.ts +600 -0
- package/src/node/features/file-manager.ts +535 -0
- package/src/node/features/fs.ts +1050 -0
- package/src/node/features/git.ts +592 -0
- package/src/node/features/google-auth.ts +504 -0
- package/src/node/features/google-calendar.ts +306 -0
- package/src/node/features/google-docs.ts +412 -0
- package/src/node/features/google-drive.ts +346 -0
- package/src/node/features/google-mail.ts +540 -0
- package/src/node/features/google-sheets.ts +286 -0
- package/src/node/features/grep.ts +427 -0
- package/src/node/features/helpers.ts +735 -0
- package/src/node/features/ink.ts +490 -0
- package/src/node/features/ipc-socket.ts +649 -0
- package/src/node/features/json-tree.ts +170 -0
- package/src/node/features/networking.ts +961 -0
- package/src/node/features/nlp.ts +212 -0
- package/src/node/features/opener.ts +180 -0
- package/src/node/features/os.ts +403 -0
- package/src/node/features/package-finder.ts +540 -0
- package/src/node/features/postgres.ts +289 -0
- package/src/node/features/proc.ts +503 -0
- package/src/node/features/process-manager.ts +844 -0
- package/src/node/features/python.ts +906 -0
- package/src/node/features/redis.ts +446 -0
- package/src/node/features/repl.ts +212 -0
- package/src/node/features/runpod.ts +811 -0
- package/src/node/features/secure-shell.ts +267 -0
- package/src/node/features/semantic-search.ts +935 -0
- package/src/node/features/sqlite.ts +289 -0
- package/src/node/features/telegram.ts +343 -0
- package/src/node/features/transpiler.ts +161 -0
- package/src/node/features/tts.ts +185 -0
- package/src/node/features/ui.ts +786 -0
- package/src/node/features/vault.ts +153 -0
- package/src/node/features/vm.ts +462 -0
- package/src/node/features/yaml-tree.ts +148 -0
- package/src/node/features/yaml.ts +133 -0
- package/src/node.ts +76 -0
- package/src/python/bridge.py +220 -0
- package/src/python/generated.ts +227 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +210 -0
- package/src/scaffolds/generated.ts +1815 -0
- package/src/scaffolds/template.ts +46 -0
- package/src/schemas/base.ts +296 -0
- package/src/selector.ts +352 -0
- package/src/server.ts +229 -0
- package/src/servers/express.ts +283 -0
- package/src/servers/mcp.ts +802 -0
- package/src/servers/socket.ts +258 -0
- package/src/state.ts +101 -0
- package/src/web/clients/socket.ts +99 -0
- package/src/web/container.ts +75 -0
- package/src/web/extension.ts +30 -0
- package/src/web/feature.ts +12 -0
- package/src/web/features/asset-loader.ts +72 -0
- package/src/web/features/container-link.ts +382 -0
- package/src/web/features/esbuild.ts +93 -0
- package/src/web/features/helpers.ts +269 -0
- package/src/web/features/network.ts +85 -0
- package/src/web/features/speech.ts +104 -0
- package/src/web/features/vault.ts +207 -0
- package/src/web/features/vm.ts +85 -0
- package/src/web/features/voice-recognition.ts +161 -0
- package/src/web/shims/isomorphic-vm.ts +149 -0
- package/test/assistant-hooks.test.ts +306 -0
- package/test/assistant.test.ts +81 -0
- package/test/bus.test.ts +134 -0
- package/test/clients-servers.test.ts +217 -0
- package/test/command.test.ts +267 -0
- package/test/container-link.test.ts +274 -0
- package/test/conversation.test.ts +220 -0
- package/test/features.test.ts +160 -0
- package/test/fork-and-research.test.ts +450 -0
- package/test/integration.test.ts +787 -0
- package/test/interceptor-chain.test.ts +61 -0
- package/test/node-container.test.ts +121 -0
- package/test/python-session.test.ts +105 -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/vm-context.test.ts +146 -0
- package/test/vm-loadmodule.test.ts +213 -0
- package/test/websocket-ask.test.ts +101 -0
- package/test-integration/assistant.test.ts +138 -0
- package/test-integration/assistants-manager.test.ts +113 -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/memory.test.ts +204 -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/telegram.test.ts +46 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +58 -0
- package/uv.lock +8 -0
- package/LICENSE +0 -21
- package/dist/cli/cli.js +0 -48
- package/dist/cli/common.d.ts +0 -2
- package/dist/cli/common.js +0 -6
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -5
- package/dist/cli/run.d.ts +0 -1
- package/dist/cli/run.js +0 -38
- package/dist/core/index.d.ts +0 -4
- package/dist/core/index.js +0 -32
- package/dist/core/read.d.ts +0 -2
- package/dist/core/read.js +0 -29
- package/dist/core/request.d.ts +0 -1
- package/dist/core/request.js +0 -2
- package/dist/core/write.d.ts +0 -2
- package/dist/core/write.js +0 -21
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -5
- package/dist/utils/common.d.ts +0 -9
- package/dist/utils/common.js +0 -57
- package/dist/utils/consts.d.ts +0 -3
- package/dist/utils/consts.js +0 -11
- package/dist/utils/dict.d.ts +0 -1
- package/dist/utils/dict.js +0 -7
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.js +0 -21
- package/dist/utils/log.d.ts +0 -1
- package/dist/utils/log.js +0 -5
- package/dist/utils/types.d.ts +0 -1
- package/dist/utils/types.js +0 -2
- package/dist/utils/utils.test.d.ts +0 -1
- package/dist/utils/utils.test.js +0 -7
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
# ChildProcess (features.proc)
|
|
2
|
+
|
|
3
|
+
The ChildProcess feature provides utilities for executing external processes and commands. This feature wraps Node.js child process functionality to provide convenient methods for executing shell commands, spawning processes, and capturing their output. It supports both synchronous and asynchronous execution with various options.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('proc')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### execAndCapture
|
|
14
|
+
|
|
15
|
+
Executes a command string and captures its output asynchronously. This method takes a complete command string, splits it into command and arguments, and executes it using the spawnAndCapture method. It's a convenient wrapper for simple command execution.
|
|
16
|
+
|
|
17
|
+
**Parameters:**
|
|
18
|
+
|
|
19
|
+
| Name | Type | Required | Description |
|
|
20
|
+
|------|------|----------|-------------|
|
|
21
|
+
| `cmd` | `string` | ✓ | The complete command string to execute (e.g., "git status --porcelain") |
|
|
22
|
+
| `options` | `any` | | Options to pass to the underlying spawn process |
|
|
23
|
+
|
|
24
|
+
**Returns:** `Promise<{
|
|
25
|
+
stderr: string;
|
|
26
|
+
stdout: string;
|
|
27
|
+
error: null | any;
|
|
28
|
+
exitCode: number;
|
|
29
|
+
pid: number | null;
|
|
30
|
+
}>`
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// Execute a git command
|
|
34
|
+
const result = await proc.execAndCapture('git status --porcelain')
|
|
35
|
+
if (result.exitCode === 0) {
|
|
36
|
+
console.log('Git status:', result.stdout)
|
|
37
|
+
} else {
|
|
38
|
+
console.error('Git error:', result.stderr)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Execute with options
|
|
42
|
+
const result = await proc.execAndCapture('npm list --depth=0', {
|
|
43
|
+
cwd: '/path/to/project'
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### spawnAndCapture
|
|
50
|
+
|
|
51
|
+
Spawns a process and captures its output with real-time monitoring capabilities. This method provides comprehensive process execution with the ability to capture output, monitor real-time data streams, and handle process lifecycle events. It's ideal for long-running processes where you need to capture output as it happens.
|
|
52
|
+
|
|
53
|
+
**Parameters:**
|
|
54
|
+
|
|
55
|
+
| Name | Type | Required | Description |
|
|
56
|
+
|------|------|----------|-------------|
|
|
57
|
+
| `command` | `string` | ✓ | The command to execute (e.g., 'node', 'npm', 'git') |
|
|
58
|
+
| `args` | `string[]` | ✓ | Array of arguments to pass to the command |
|
|
59
|
+
| `options` | `SpawnOptions` | | Options for process execution and monitoring |
|
|
60
|
+
|
|
61
|
+
`SpawnOptions` properties:
|
|
62
|
+
|
|
63
|
+
| Property | Type | Description |
|
|
64
|
+
|----------|------|-------------|
|
|
65
|
+
| `stdio` | `"ignore" | "inherit"` | Standard I/O mode for the child process |
|
|
66
|
+
| `stdout` | `"ignore" | "inherit"` | Stdout mode for the child process |
|
|
67
|
+
| `stderr` | `"ignore" | "inherit"` | Stderr mode for the child process |
|
|
68
|
+
| `cwd` | `string` | Working directory for the child process |
|
|
69
|
+
| `environment` | `Record<string, any>` | Environment variables to pass to the child process |
|
|
70
|
+
| `onError` | `(data: string) => void` | Callback invoked when stderr data is received |
|
|
71
|
+
| `onOutput` | `(data: string) => void` | Callback invoked when stdout data is received |
|
|
72
|
+
| `onExit` | `(code: number) => void` | Callback invoked when the process exits |
|
|
73
|
+
| `onStart` | `(childProcess: ChildProcess) => void` | Callback invoked when the process starts |
|
|
74
|
+
|
|
75
|
+
**Returns:** `Promise<{
|
|
76
|
+
stderr: string;
|
|
77
|
+
stdout: string;
|
|
78
|
+
error: null | any;
|
|
79
|
+
exitCode: number;
|
|
80
|
+
pid: number | null;
|
|
81
|
+
}>`
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
// Basic usage
|
|
85
|
+
const result = await proc.spawnAndCapture('node', ['--version'])
|
|
86
|
+
console.log(`Node version: ${result.stdout}`)
|
|
87
|
+
|
|
88
|
+
// With real-time output monitoring
|
|
89
|
+
const result = await proc.spawnAndCapture('npm', ['install'], {
|
|
90
|
+
onOutput: (data) => console.log('📦 ', data.trim()),
|
|
91
|
+
onError: (data) => console.error('❌ ', data.trim()),
|
|
92
|
+
onExit: (code) => console.log(`Process exited with code ${code}`)
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
// Long-running process with custom working directory
|
|
96
|
+
const buildResult = await proc.spawnAndCapture('npm', ['run', 'build'], {
|
|
97
|
+
cwd: '/path/to/project',
|
|
98
|
+
onOutput: (data) => {
|
|
99
|
+
if (data.includes('error')) {
|
|
100
|
+
console.error('Build error detected:', data)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
### spawn
|
|
109
|
+
|
|
110
|
+
Spawn a raw child process and return the handle immediately. Useful when callers need streaming access to stdout/stderr and direct lifecycle control (for example, cancellation via kill()).
|
|
111
|
+
|
|
112
|
+
**Parameters:**
|
|
113
|
+
|
|
114
|
+
| Name | Type | Required | Description |
|
|
115
|
+
|------|------|----------|-------------|
|
|
116
|
+
| `command` | `string` | ✓ | Parameter command |
|
|
117
|
+
| `args` | `string[]` | | Parameter args |
|
|
118
|
+
| `options` | `RawSpawnOptions` | | Parameter options |
|
|
119
|
+
|
|
120
|
+
`RawSpawnOptions` properties:
|
|
121
|
+
|
|
122
|
+
| Property | Type | Description |
|
|
123
|
+
|----------|------|-------------|
|
|
124
|
+
| `cwd` | `string` | Working directory for the child process |
|
|
125
|
+
| `environment` | `Record<string, any>` | Environment variables to pass to the child process |
|
|
126
|
+
| `stdin` | `string | Buffer` | Optional stdin payload written immediately after spawn |
|
|
127
|
+
| `stdout` | `"pipe" | "inherit" | "ignore"` | Stdout mode for the child process |
|
|
128
|
+
| `stderr` | `"pipe" | "inherit" | "ignore"` | Stderr mode for the child process |
|
|
129
|
+
|
|
130
|
+
**Returns:** `import('child_process').ChildProcess`
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
### exec
|
|
135
|
+
|
|
136
|
+
Execute a command synchronously and return its output. Runs a shell command and waits for it to complete before returning. Useful for simple commands where you need the result immediately.
|
|
137
|
+
|
|
138
|
+
**Parameters:**
|
|
139
|
+
|
|
140
|
+
| Name | Type | Required | Description |
|
|
141
|
+
|------|------|----------|-------------|
|
|
142
|
+
| `command` | `string` | ✓ | The command to execute |
|
|
143
|
+
| `options` | `any` | | Options for command execution (cwd, encoding, etc.) |
|
|
144
|
+
|
|
145
|
+
**Returns:** `string`
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
const branch = proc.exec('git branch --show-current')
|
|
149
|
+
const version = proc.exec('node --version')
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
### execSync
|
|
155
|
+
|
|
156
|
+
**Parameters:**
|
|
157
|
+
|
|
158
|
+
| Name | Type | Required | Description |
|
|
159
|
+
|------|------|----------|-------------|
|
|
160
|
+
| `command` | `string` | ✓ | Parameter command |
|
|
161
|
+
| `options` | `any` | | Parameter options |
|
|
162
|
+
|
|
163
|
+
**Returns:** `string`
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
### establishLock
|
|
168
|
+
|
|
169
|
+
Establishes a PID-file lock to prevent duplicate process instances. Writes the current process PID to the given file path. If the file already exists and the PID inside it refers to a running process, the current process exits immediately. Stale PID files (where the process is no longer running) are automatically cleaned up. Cleanup handlers are registered on SIGTERM, SIGINT, and process exit to remove the PID file when the process shuts down.
|
|
170
|
+
|
|
171
|
+
**Parameters:**
|
|
172
|
+
|
|
173
|
+
| Name | Type | Required | Description |
|
|
174
|
+
|------|------|----------|-------------|
|
|
175
|
+
| `pidPath` | `string` | ✓ | Path to the PID file, resolved relative to container.cwd |
|
|
176
|
+
|
|
177
|
+
**Returns:** `{ release: () => void }`
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
// In a command handler — exits if already running
|
|
181
|
+
const lock = proc.establishLock('tmp/luca-main.pid')
|
|
182
|
+
|
|
183
|
+
// Later, if you need to release manually
|
|
184
|
+
lock.release()
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
### kill
|
|
190
|
+
|
|
191
|
+
Kills a process by its PID.
|
|
192
|
+
|
|
193
|
+
**Parameters:**
|
|
194
|
+
|
|
195
|
+
| Name | Type | Required | Description |
|
|
196
|
+
|------|------|----------|-------------|
|
|
197
|
+
| `pid` | `number` | ✓ | The process ID to kill |
|
|
198
|
+
| `signal` | `NodeJS.Signals | number` | | The signal to send (e.g. 'SIGTERM', 'SIGKILL', 9) |
|
|
199
|
+
|
|
200
|
+
**Returns:** `boolean`
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
// Gracefully terminate a process
|
|
204
|
+
proc.kill(12345)
|
|
205
|
+
|
|
206
|
+
// Force kill a process
|
|
207
|
+
proc.kill(12345, 'SIGKILL')
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
### findPidsByPort
|
|
213
|
+
|
|
214
|
+
Finds PIDs of processes listening on a given port. Uses `lsof` on macOS/Linux to discover which processes have a socket bound to the specified port.
|
|
215
|
+
|
|
216
|
+
**Parameters:**
|
|
217
|
+
|
|
218
|
+
| Name | Type | Required | Description |
|
|
219
|
+
|------|------|----------|-------------|
|
|
220
|
+
| `port` | `number` | ✓ | The port number to search for |
|
|
221
|
+
|
|
222
|
+
**Returns:** `number[]`
|
|
223
|
+
|
|
224
|
+
```ts
|
|
225
|
+
const pids = proc.findPidsByPort(3000)
|
|
226
|
+
console.log(`Processes on port 3000: ${pids}`)
|
|
227
|
+
|
|
228
|
+
// Kill everything on port 3000
|
|
229
|
+
for (const pid of proc.findPidsByPort(3000)) {
|
|
230
|
+
proc.kill(pid)
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
### isProcessRunning
|
|
237
|
+
|
|
238
|
+
Checks whether any process matching a given name is currently running. Uses `pgrep -x` for an exact match against process names.
|
|
239
|
+
|
|
240
|
+
**Parameters:**
|
|
241
|
+
|
|
242
|
+
| Name | Type | Required | Description |
|
|
243
|
+
|------|------|----------|-------------|
|
|
244
|
+
| `name` | `string` | ✓ | The process name to look for (e.g. 'afplay', 'node', 'nginx') |
|
|
245
|
+
|
|
246
|
+
**Returns:** `boolean`
|
|
247
|
+
|
|
248
|
+
```ts
|
|
249
|
+
if (proc.isProcessRunning('afplay')) {
|
|
250
|
+
console.log('Audio is currently playing')
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
### onSignal
|
|
257
|
+
|
|
258
|
+
**Parameters:**
|
|
259
|
+
|
|
260
|
+
| Name | Type | Required | Description |
|
|
261
|
+
|------|------|----------|-------------|
|
|
262
|
+
| `signal` | `NodeJS.Signals` | ✓ | Parameter signal |
|
|
263
|
+
| `handler` | `() => void` | ✓ | Parameter handler |
|
|
264
|
+
|
|
265
|
+
**Returns:** `() => void`
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
## State (Zod v4 schema)
|
|
270
|
+
|
|
271
|
+
| Property | Type | Description |
|
|
272
|
+
|----------|------|-------------|
|
|
273
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
274
|
+
|
|
275
|
+
## Examples
|
|
276
|
+
|
|
277
|
+
**features.proc**
|
|
278
|
+
|
|
279
|
+
```ts
|
|
280
|
+
const proc = container.feature('proc')
|
|
281
|
+
|
|
282
|
+
// Execute a simple command synchronously
|
|
283
|
+
const result = proc.exec('echo "Hello World"')
|
|
284
|
+
console.log(result) // 'Hello World'
|
|
285
|
+
|
|
286
|
+
// Execute and capture output asynchronously
|
|
287
|
+
const { stdout, stderr } = await proc.spawnAndCapture('npm', ['--version'])
|
|
288
|
+
console.log(`npm version: ${stdout}`)
|
|
289
|
+
|
|
290
|
+
// Execute with callbacks for real-time output
|
|
291
|
+
await proc.spawnAndCapture('npm', ['install'], {
|
|
292
|
+
onOutput: (data) => console.log('OUT:', data),
|
|
293
|
+
onError: (data) => console.log('ERR:', data)
|
|
294
|
+
})
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
**execAndCapture**
|
|
300
|
+
|
|
301
|
+
```ts
|
|
302
|
+
// Execute a git command
|
|
303
|
+
const result = await proc.execAndCapture('git status --porcelain')
|
|
304
|
+
if (result.exitCode === 0) {
|
|
305
|
+
console.log('Git status:', result.stdout)
|
|
306
|
+
} else {
|
|
307
|
+
console.error('Git error:', result.stderr)
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Execute with options
|
|
311
|
+
const result = await proc.execAndCapture('npm list --depth=0', {
|
|
312
|
+
cwd: '/path/to/project'
|
|
313
|
+
})
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
**spawnAndCapture**
|
|
319
|
+
|
|
320
|
+
```ts
|
|
321
|
+
// Basic usage
|
|
322
|
+
const result = await proc.spawnAndCapture('node', ['--version'])
|
|
323
|
+
console.log(`Node version: ${result.stdout}`)
|
|
324
|
+
|
|
325
|
+
// With real-time output monitoring
|
|
326
|
+
const result = await proc.spawnAndCapture('npm', ['install'], {
|
|
327
|
+
onOutput: (data) => console.log('📦 ', data.trim()),
|
|
328
|
+
onError: (data) => console.error('❌ ', data.trim()),
|
|
329
|
+
onExit: (code) => console.log(`Process exited with code ${code}`)
|
|
330
|
+
})
|
|
331
|
+
|
|
332
|
+
// Long-running process with custom working directory
|
|
333
|
+
const buildResult = await proc.spawnAndCapture('npm', ['run', 'build'], {
|
|
334
|
+
cwd: '/path/to/project',
|
|
335
|
+
onOutput: (data) => {
|
|
336
|
+
if (data.includes('error')) {
|
|
337
|
+
console.error('Build error detected:', data)
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
})
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
**exec**
|
|
346
|
+
|
|
347
|
+
```ts
|
|
348
|
+
const branch = proc.exec('git branch --show-current')
|
|
349
|
+
const version = proc.exec('node --version')
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
**establishLock**
|
|
355
|
+
|
|
356
|
+
```ts
|
|
357
|
+
// In a command handler — exits if already running
|
|
358
|
+
const lock = proc.establishLock('tmp/luca-main.pid')
|
|
359
|
+
|
|
360
|
+
// Later, if you need to release manually
|
|
361
|
+
lock.release()
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
**kill**
|
|
367
|
+
|
|
368
|
+
```ts
|
|
369
|
+
// Gracefully terminate a process
|
|
370
|
+
proc.kill(12345)
|
|
371
|
+
|
|
372
|
+
// Force kill a process
|
|
373
|
+
proc.kill(12345, 'SIGKILL')
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
**findPidsByPort**
|
|
379
|
+
|
|
380
|
+
```ts
|
|
381
|
+
const pids = proc.findPidsByPort(3000)
|
|
382
|
+
console.log(`Processes on port 3000: ${pids}`)
|
|
383
|
+
|
|
384
|
+
// Kill everything on port 3000
|
|
385
|
+
for (const pid of proc.findPidsByPort(3000)) {
|
|
386
|
+
proc.kill(pid)
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
**isProcessRunning**
|
|
393
|
+
|
|
394
|
+
```ts
|
|
395
|
+
if (proc.isProcessRunning('afplay')) {
|
|
396
|
+
console.log('Audio is currently playing')
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
@@ -0,0 +1,305 @@
|
|
|
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. Each handler maintains a memory-efficient output buffer: the first 20 lines (head) and last 50 lines (tail) of stdout/stderr are kept, everything in between is discarded.
|
|
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
|
+
### spawnProcess
|
|
23
|
+
|
|
24
|
+
Tool handler: spawn a long-running background process.
|
|
25
|
+
|
|
26
|
+
**Parameters:**
|
|
27
|
+
|
|
28
|
+
| Name | Type | Required | Description |
|
|
29
|
+
|------|------|----------|-------------|
|
|
30
|
+
| `args` | `{ command: string; args?: string; tag?: string; cwd?: string }` | ✓ | Parameter args |
|
|
31
|
+
|
|
32
|
+
**Returns:** `void`
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### runCommand
|
|
37
|
+
|
|
38
|
+
Tool handler: run a command to completion and return its output.
|
|
39
|
+
|
|
40
|
+
**Parameters:**
|
|
41
|
+
|
|
42
|
+
| Name | Type | Required | Description |
|
|
43
|
+
|------|------|----------|-------------|
|
|
44
|
+
| `args` | `{ command: string; cwd?: string }` | ✓ | Parameter args |
|
|
45
|
+
|
|
46
|
+
**Returns:** `void`
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### listProcesses
|
|
51
|
+
|
|
52
|
+
Tool handler: list all tracked processes.
|
|
53
|
+
|
|
54
|
+
**Returns:** `void`
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
### getProcessOutput
|
|
59
|
+
|
|
60
|
+
Tool handler: peek at a process's buffered output.
|
|
61
|
+
|
|
62
|
+
**Parameters:**
|
|
63
|
+
|
|
64
|
+
| Name | Type | Required | Description |
|
|
65
|
+
|------|------|----------|-------------|
|
|
66
|
+
| `args` | `{ id?: string; tag?: string; stream?: string }` | ✓ | Parameter args |
|
|
67
|
+
|
|
68
|
+
**Returns:** `void`
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
### killProcess
|
|
73
|
+
|
|
74
|
+
Tool handler: kill a process by ID or tag.
|
|
75
|
+
|
|
76
|
+
**Parameters:**
|
|
77
|
+
|
|
78
|
+
| Name | Type | Required | Description |
|
|
79
|
+
|------|------|----------|-------------|
|
|
80
|
+
| `args` | `{ id?: string; tag?: string; signal?: string }` | ✓ | Parameter args |
|
|
81
|
+
|
|
82
|
+
**Returns:** `void`
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
### spawn
|
|
87
|
+
|
|
88
|
+
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.
|
|
89
|
+
|
|
90
|
+
**Parameters:**
|
|
91
|
+
|
|
92
|
+
| Name | Type | Required | Description |
|
|
93
|
+
|------|------|----------|-------------|
|
|
94
|
+
| `command` | `string` | ✓ | The command to execute (e.g. 'node', 'bun', 'python') |
|
|
95
|
+
| `args` | `string[]` | | Arguments to pass to the command |
|
|
96
|
+
| `options` | `SpawnOptions` | | Spawn configuration |
|
|
97
|
+
|
|
98
|
+
`SpawnOptions` properties:
|
|
99
|
+
|
|
100
|
+
| Property | Type | Description |
|
|
101
|
+
|----------|------|-------------|
|
|
102
|
+
| `tag` | `string` | User-defined tag for later lookups via getByTag() |
|
|
103
|
+
| `cwd` | `string` | Working directory for the spawned process (defaults to container cwd) |
|
|
104
|
+
| `env` | `Record<string, string>` | Additional environment variables merged with process.env |
|
|
105
|
+
| `stdin` | `'pipe' | 'inherit' | 'ignore' | null` | stdin mode: 'pipe' to write to the process, 'inherit', or 'ignore' (default: 'ignore') |
|
|
106
|
+
| `stdout` | `'pipe' | 'inherit' | 'ignore' | null` | stdout mode: 'pipe' to capture output, 'inherit', or 'ignore' (default: 'pipe') |
|
|
107
|
+
| `stderr` | `'pipe' | 'inherit' | 'ignore' | null` | stderr mode: 'pipe' to capture errors, 'inherit', or 'ignore' (default: 'pipe') |
|
|
108
|
+
|
|
109
|
+
**Returns:** `SpawnHandler`
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
### get
|
|
114
|
+
|
|
115
|
+
Get a SpawnHandler by its unique ID.
|
|
116
|
+
|
|
117
|
+
**Parameters:**
|
|
118
|
+
|
|
119
|
+
| Name | Type | Required | Description |
|
|
120
|
+
|------|------|----------|-------------|
|
|
121
|
+
| `id` | `string` | ✓ | The process ID returned by spawn |
|
|
122
|
+
|
|
123
|
+
**Returns:** `SpawnHandler | undefined`
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
### getByTag
|
|
128
|
+
|
|
129
|
+
Find a SpawnHandler by its user-defined tag.
|
|
130
|
+
|
|
131
|
+
**Parameters:**
|
|
132
|
+
|
|
133
|
+
| Name | Type | Required | Description |
|
|
134
|
+
|------|------|----------|-------------|
|
|
135
|
+
| `tag` | `string` | ✓ | The tag passed to spawn() |
|
|
136
|
+
|
|
137
|
+
**Returns:** `SpawnHandler | undefined`
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
### list
|
|
142
|
+
|
|
143
|
+
List all tracked SpawnHandlers (running and finished).
|
|
144
|
+
|
|
145
|
+
**Returns:** `SpawnHandler[]`
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
### killAll
|
|
150
|
+
|
|
151
|
+
Kill all running processes.
|
|
152
|
+
|
|
153
|
+
**Parameters:**
|
|
154
|
+
|
|
155
|
+
| Name | Type | Required | Description |
|
|
156
|
+
|------|------|----------|-------------|
|
|
157
|
+
| `signal` | `NodeJS.Signals | number` | | Signal to send (default: SIGTERM) |
|
|
158
|
+
|
|
159
|
+
**Returns:** `void`
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
### stop
|
|
164
|
+
|
|
165
|
+
Stop the process manager: kill all running processes and remove cleanup handlers.
|
|
166
|
+
|
|
167
|
+
**Returns:** `Promise<void>`
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
### remove
|
|
172
|
+
|
|
173
|
+
Remove a finished handler from tracking.
|
|
174
|
+
|
|
175
|
+
**Parameters:**
|
|
176
|
+
|
|
177
|
+
| Name | Type | Required | Description |
|
|
178
|
+
|------|------|----------|-------------|
|
|
179
|
+
| `id` | `string` | ✓ | The process ID to remove |
|
|
180
|
+
|
|
181
|
+
**Returns:** `boolean`
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
### enable
|
|
186
|
+
|
|
187
|
+
**Parameters:**
|
|
188
|
+
|
|
189
|
+
| Name | Type | Required | Description |
|
|
190
|
+
|------|------|----------|-------------|
|
|
191
|
+
| `options` | `any` | | Parameter options |
|
|
192
|
+
|
|
193
|
+
**Returns:** `Promise<this>`
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
### _onHandlerDone
|
|
198
|
+
|
|
199
|
+
Called by SpawnHandler when a process finishes. Updates feature-level state.
|
|
200
|
+
|
|
201
|
+
**Parameters:**
|
|
202
|
+
|
|
203
|
+
| Name | Type | Required | Description |
|
|
204
|
+
|------|------|----------|-------------|
|
|
205
|
+
| `handler` | `SpawnHandler` | ✓ | Parameter handler |
|
|
206
|
+
| `status` | `'exited' | 'crashed' | 'killed'` | ✓ | Parameter status |
|
|
207
|
+
| `exitCode` | `number` | | Parameter exitCode |
|
|
208
|
+
|
|
209
|
+
**Returns:** `void`
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
## Events (Zod v4 schema)
|
|
214
|
+
|
|
215
|
+
### spawned
|
|
216
|
+
|
|
217
|
+
Emitted when a new process is spawned
|
|
218
|
+
|
|
219
|
+
**Event Arguments:**
|
|
220
|
+
|
|
221
|
+
| Name | Type | Description |
|
|
222
|
+
|------|------|-------------|
|
|
223
|
+
| `arg0` | `string` | process ID |
|
|
224
|
+
| `arg1` | `string` | process metadata |
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
### exited
|
|
229
|
+
|
|
230
|
+
Emitted when a process exits normally
|
|
231
|
+
|
|
232
|
+
**Event Arguments:**
|
|
233
|
+
|
|
234
|
+
| Name | Type | Description |
|
|
235
|
+
|------|------|-------------|
|
|
236
|
+
| `arg0` | `string` | process ID |
|
|
237
|
+
| `arg1` | `number` | exit code |
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
### crashed
|
|
242
|
+
|
|
243
|
+
Emitted when a process exits with non-zero code
|
|
244
|
+
|
|
245
|
+
**Event Arguments:**
|
|
246
|
+
|
|
247
|
+
| Name | Type | Description |
|
|
248
|
+
|------|------|-------------|
|
|
249
|
+
| `arg0` | `string` | process ID |
|
|
250
|
+
| `arg1` | `number` | exit code |
|
|
251
|
+
| `arg2` | `string` | error info |
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
### killed
|
|
256
|
+
|
|
257
|
+
Emitted when a process is killed
|
|
258
|
+
|
|
259
|
+
**Event Arguments:**
|
|
260
|
+
|
|
261
|
+
| Name | Type | Description |
|
|
262
|
+
|------|------|-------------|
|
|
263
|
+
| `arg0` | `string` | process ID |
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
### allStopped
|
|
268
|
+
|
|
269
|
+
Emitted when all tracked processes have stopped
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
## State (Zod v4 schema)
|
|
274
|
+
|
|
275
|
+
| Property | Type | Description |
|
|
276
|
+
|----------|------|-------------|
|
|
277
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
278
|
+
| `processes` | `object` | Map of process ID to metadata |
|
|
279
|
+
| `totalSpawned` | `number` | Total number of processes spawned since feature creation |
|
|
280
|
+
|
|
281
|
+
## Examples
|
|
282
|
+
|
|
283
|
+
**features.processManager**
|
|
284
|
+
|
|
285
|
+
```ts
|
|
286
|
+
const pm = container.feature('processManager', { enable: true })
|
|
287
|
+
|
|
288
|
+
const server = pm.spawn('node', ['server.js'], { tag: 'api', cwd: '/app' })
|
|
289
|
+
server.on('stdout', (data) => console.log('[api]', data))
|
|
290
|
+
server.on('crash', (code) => console.error('API crashed:', code))
|
|
291
|
+
|
|
292
|
+
// Peek at buffered output
|
|
293
|
+
const { head, tail } = server.peek()
|
|
294
|
+
|
|
295
|
+
// Kill one
|
|
296
|
+
server.kill()
|
|
297
|
+
|
|
298
|
+
// Kill all tracked processes
|
|
299
|
+
pm.killAll()
|
|
300
|
+
|
|
301
|
+
// List and lookup
|
|
302
|
+
pm.list() // SpawnHandler[]
|
|
303
|
+
pm.getByTag('api') // SpawnHandler | undefined
|
|
304
|
+
```
|
|
305
|
+
|