luca 1.1.2 → 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 -8
- 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 -0
- 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 -66
- 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/index.d.ts +0 -2
- package/dist/cli/index.js +0 -5
- package/dist/cli/run.d.ts +0 -12
- package/dist/cli/run.js +0 -42
- package/dist/config/consts.d.ts +0 -2
- package/dist/config/consts.js +0 -29
- package/dist/config/default.d.ts +0 -8
- package/dist/config/default.js +0 -15
- package/dist/config/initConfig.d.ts +0 -1
- package/dist/config/initConfig.js +0 -52
- package/dist/config/openConfig.d.ts +0 -2
- package/dist/config/openConfig.js +0 -24
- package/dist/config/runConfig.d.ts +0 -3
- package/dist/config/runConfig.js +0 -117
- package/dist/config/types.d.ts +0 -13
- package/dist/config/types.js +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -5
- package/dist/utils/common.d.ts +0 -2
- package/dist/utils/common.js +0 -52
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -17
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-linux:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
|
|
14
|
+
- name: Setup Bun
|
|
15
|
+
uses: oven-sh/setup-bun@v2
|
|
16
|
+
|
|
17
|
+
- name: Install dependencies
|
|
18
|
+
run: bun install
|
|
19
|
+
|
|
20
|
+
- name: Pre-build steps
|
|
21
|
+
run: |
|
|
22
|
+
bash scripts/stamp-build.sh
|
|
23
|
+
bun run build:introspection
|
|
24
|
+
bun run build:scaffolds
|
|
25
|
+
bun run build:bootstrap
|
|
26
|
+
bun run build:python-bridge
|
|
27
|
+
|
|
28
|
+
- name: Build Linux binaries
|
|
29
|
+
run: |
|
|
30
|
+
mkdir -p dist/release
|
|
31
|
+
bun build ./src/cli/cli.ts --compile --target=bun-linux-x64 --outfile dist/release/luca-linux-x64 --external node-llama-cpp
|
|
32
|
+
bun build ./src/cli/cli.ts --compile --target=bun-linux-arm64 --outfile dist/release/luca-linux-arm64 --external node-llama-cpp
|
|
33
|
+
|
|
34
|
+
- name: Upload Linux artifacts
|
|
35
|
+
uses: actions/upload-artifact@v4
|
|
36
|
+
with:
|
|
37
|
+
name: linux-binaries
|
|
38
|
+
path: dist/release/luca-linux-*
|
|
39
|
+
|
|
40
|
+
build-windows:
|
|
41
|
+
runs-on: windows-latest
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
|
|
45
|
+
- name: Setup Bun
|
|
46
|
+
uses: oven-sh/setup-bun@v2
|
|
47
|
+
|
|
48
|
+
- name: Install dependencies
|
|
49
|
+
run: bun install
|
|
50
|
+
|
|
51
|
+
- name: Pre-build steps
|
|
52
|
+
shell: bash
|
|
53
|
+
run: |
|
|
54
|
+
bash scripts/stamp-build.sh
|
|
55
|
+
bun run build:introspection
|
|
56
|
+
bun run build:scaffolds
|
|
57
|
+
bun run build:bootstrap
|
|
58
|
+
bun run build:python-bridge
|
|
59
|
+
|
|
60
|
+
- name: Build Windows binary
|
|
61
|
+
shell: bash
|
|
62
|
+
run: |
|
|
63
|
+
mkdir -p dist/release
|
|
64
|
+
bun build ./src/cli/cli.ts --compile --target=bun-windows-x64 --outfile dist/release/luca-windows-x64.exe --external node-llama-cpp
|
|
65
|
+
|
|
66
|
+
- name: Upload Windows artifact
|
|
67
|
+
uses: actions/upload-artifact@v4
|
|
68
|
+
with:
|
|
69
|
+
name: windows-binaries
|
|
70
|
+
path: dist/release/luca-windows-x64.exe
|
|
71
|
+
|
|
72
|
+
build-macos:
|
|
73
|
+
runs-on: macos-latest
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- name: Setup Bun
|
|
78
|
+
uses: oven-sh/setup-bun@v2
|
|
79
|
+
|
|
80
|
+
- name: Install dependencies
|
|
81
|
+
run: bun install
|
|
82
|
+
|
|
83
|
+
- name: Pre-build steps
|
|
84
|
+
run: |
|
|
85
|
+
bash scripts/stamp-build.sh
|
|
86
|
+
bun run build:introspection
|
|
87
|
+
bun run build:scaffolds
|
|
88
|
+
bun run build:bootstrap
|
|
89
|
+
bun run build:python-bridge
|
|
90
|
+
|
|
91
|
+
- name: Build macOS binaries
|
|
92
|
+
run: |
|
|
93
|
+
mkdir -p dist/release
|
|
94
|
+
bun build ./src/cli/cli.ts --compile --target=bun-darwin-x64 --outfile dist/release/luca-darwin-x64 --external node-llama-cpp
|
|
95
|
+
bun build ./src/cli/cli.ts --compile --target=bun-darwin-arm64 --outfile dist/release/luca-darwin-arm64 --external node-llama-cpp
|
|
96
|
+
|
|
97
|
+
- name: Import Developer ID Certificate
|
|
98
|
+
env:
|
|
99
|
+
CERTIFICATE_P12: ${{ secrets.APPLE_CERTIFICATE_P12 }}
|
|
100
|
+
CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
101
|
+
run: |
|
|
102
|
+
echo "$CERTIFICATE_P12" | base64 --decode > certificate.p12
|
|
103
|
+
security create-keychain -p "" build.keychain
|
|
104
|
+
security import certificate.p12 -k build.keychain \
|
|
105
|
+
-P "$CERTIFICATE_PASSWORD" -T /usr/bin/codesign
|
|
106
|
+
security list-keychains -s build.keychain
|
|
107
|
+
security default-keychain -s build.keychain
|
|
108
|
+
security unlock-keychain -p "" build.keychain
|
|
109
|
+
security set-key-partition-list -S apple-tool:,apple: \
|
|
110
|
+
-s -k "" build.keychain
|
|
111
|
+
|
|
112
|
+
- name: Sign macOS binaries
|
|
113
|
+
run: |
|
|
114
|
+
codesign --sign "Developer ID Application: Demitra Del Fiacco (77WL45HR8M)" \
|
|
115
|
+
--force --options runtime --timestamp dist/release/luca-darwin-x64
|
|
116
|
+
codesign --sign "Developer ID Application: Demitra Del Fiacco (77WL45HR8M)" \
|
|
117
|
+
--force --options runtime --timestamp dist/release/luca-darwin-arm64
|
|
118
|
+
|
|
119
|
+
- name: Notarize macOS binaries
|
|
120
|
+
env:
|
|
121
|
+
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
122
|
+
APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }}
|
|
123
|
+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
124
|
+
run: |
|
|
125
|
+
zip dist/release/luca-darwin-x64.zip dist/release/luca-darwin-x64
|
|
126
|
+
xcrun notarytool submit dist/release/luca-darwin-x64.zip \
|
|
127
|
+
--apple-id "$APPLE_ID" \
|
|
128
|
+
--password "$APPLE_APP_PASSWORD" \
|
|
129
|
+
--team-id "$APPLE_TEAM_ID" \
|
|
130
|
+
--wait
|
|
131
|
+
|
|
132
|
+
zip dist/release/luca-darwin-arm64.zip dist/release/luca-darwin-arm64
|
|
133
|
+
xcrun notarytool submit dist/release/luca-darwin-arm64.zip \
|
|
134
|
+
--apple-id "$APPLE_ID" \
|
|
135
|
+
--password "$APPLE_APP_PASSWORD" \
|
|
136
|
+
--team-id "$APPLE_TEAM_ID" \
|
|
137
|
+
--wait
|
|
138
|
+
|
|
139
|
+
- name: Staple notarization
|
|
140
|
+
run: |
|
|
141
|
+
xcrun stapler staple dist/release/luca-darwin-x64 || true
|
|
142
|
+
xcrun stapler staple dist/release/luca-darwin-arm64 || true
|
|
143
|
+
|
|
144
|
+
- name: Upload macOS artifacts
|
|
145
|
+
uses: actions/upload-artifact@v4
|
|
146
|
+
with:
|
|
147
|
+
name: macos-binaries
|
|
148
|
+
path: dist/release/luca-darwin-*
|
|
149
|
+
exclude: |
|
|
150
|
+
dist/release/*.zip
|
|
151
|
+
|
|
152
|
+
create-release:
|
|
153
|
+
needs: [build-linux, build-windows, build-macos]
|
|
154
|
+
runs-on: ubuntu-latest
|
|
155
|
+
permissions:
|
|
156
|
+
contents: write
|
|
157
|
+
steps:
|
|
158
|
+
- name: Download all artifacts
|
|
159
|
+
uses: actions/download-artifact@v4
|
|
160
|
+
with:
|
|
161
|
+
merge-multiple: true
|
|
162
|
+
path: dist/release
|
|
163
|
+
|
|
164
|
+
- name: Create draft GitHub release
|
|
165
|
+
uses: softprops/action-gh-release@v2
|
|
166
|
+
with:
|
|
167
|
+
draft: true
|
|
168
|
+
generate_release_notes: true
|
|
169
|
+
files: dist/release/*
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# LUCA
|
|
2
|
+
|
|
3
|
+
Lightweight Universal Conversational Architecture. Runtime is bun.
|
|
4
|
+
|
|
5
|
+
The runtime is bun, that means no vitest.
|
|
6
|
+
|
|
7
|
+
Luca provides a system for building runtime `container` objects which provide server and browser applications with all of the dependencies they need to build complete applications. A `container` is a per process global singleton, event bus, state machine, and dependency injector. A `container` is either based on a node or browser runtime, and comes with features optimized for that environment. You can build your own container on top of it, with your own features, clients, servers. It is very much inspired by docker layer caching.
|
|
8
|
+
|
|
9
|
+
A `container` could be used for all "business logic" and state, and be a headless provider for an entire application. The UI, Scripting output, input, etc, are all just functional interfaces and event bindings to the core container and all of its helpers, and their state.
|
|
10
|
+
|
|
11
|
+
Dependencies consist of Helpers - Features, Clients, Servers, as well as primitives like event buses, observable state. The `container` contains registries of all available components: `container.features`, `container.clients`, `container.servers`, `container.commands`, `container.endpoints` as well as factory functions to create instances of them: `container.feature('fileManager')`, `container.server('express')`.
|
|
12
|
+
|
|
13
|
+
The `container` and its helpers are perfect for scripts and long running services on the backend, or highly reactive and stateful applications on the frontend. The components can easily talk to eachother, as the `container` on the server provides servers like `container.server('express')` and `container.server('websocket')` as well as `container.client('rest')` and `container.client('websocket')` and others.
|
|
14
|
+
|
|
15
|
+
On the frontend the browser container is perfect for highly reactive, stateful web applications, especially works well with React.
|
|
16
|
+
|
|
17
|
+
## The `luca` CLI
|
|
18
|
+
|
|
19
|
+
- in dev, `bun run src/cli/cli.ts` is the same as `luca`
|
|
20
|
+
|
|
21
|
+
- in prod, or educational material, `luca` refers to the binary build. In this mode, it can work in any project, and load `commands/` and `endpoints/` through its VM and therefore allows folders of these modules which don't depend on anything from NPM to extend the CLI and be used in commands like `luca serve` to run a local express server
|
|
22
|
+
|
|
23
|
+
- The `luca` cli is an extremely helpful tool.
|
|
24
|
+
- it runs code `luca eval "container.features.available"`
|
|
25
|
+
- it generates docs:
|
|
26
|
+
- `luca describe diskCache`
|
|
27
|
+
- `luca describe` describe the container itself
|
|
28
|
+
- `luca describe servers` describe which servers are available
|
|
29
|
+
- `luca describe ui.banner` describe a specific method or getter on a helper
|
|
30
|
+
- the arguments to describe are pretty forgiving and permissive
|
|
31
|
+
|
|
32
|
+
**IMPORTANT NOTE** When trying to investigate features, clients, servers, etc, see if these tools can help you first instead of searching for files and reading them that way. If youw ant to understand what they do, vs how theyre actually implemented
|
|
33
|
+
|
|
34
|
+
## Coding style and guidelines
|
|
35
|
+
|
|
36
|
+
- The container is intended to provide a collection of blessed, approved, audited modules that we've built and curated together. It is intended to be the primary API and interface through the system
|
|
37
|
+
- The container should provide you with everything you need, and you should not need to be importing dependencies or other modules. If you find yourself stuck by this constraint, raise this concern, and we can work on finding a way to bring in a feature or client
|
|
38
|
+
- When trying to find paths in the project, use `container.paths.resolve()` or `container.paths.join()` instead of `import { resolve } from 'path'`
|
|
39
|
+
- **NEVER import from `fs`, `path`, or other Node builtins when the container provides equivalents.** Use `container.feature('fs')` for file operations, `container.paths` for path operations. This applies everywhere — command handlers, scripts, and feature implementations alike. If a container feature wraps the functionality, use it.
|
|
40
|
+
|
|
41
|
+
## Container Utilities
|
|
42
|
+
|
|
43
|
+
The container provides `container.utils` with common utilities. **Use these instead of importing packages directly** — they work in both node and web environments.
|
|
44
|
+
|
|
45
|
+
- `container.utils.uuid()` — generates a v4 UUID (use instead of importing `node-uuid` or `crypto`)
|
|
46
|
+
- `container.utils.hashObject(obj)` — deterministic hash of any object
|
|
47
|
+
- `container.utils.stringUtils` — `{ kebabCase, camelCase, upperFirst, lowerFirst, pluralize, singularize }`
|
|
48
|
+
- `container.utils.lodash` — `{ uniq, keyBy, uniqBy, groupBy, debounce, throttle, mapValues, mapKeys, pick, get, set, omit }`
|
|
49
|
+
|
|
50
|
+
Also available on every container:
|
|
51
|
+
- `container.uuid` — the container's own unique ID
|
|
52
|
+
- `container.paths.resolve()` / `container.paths.join()` — path operations
|
|
53
|
+
|
|
54
|
+
## Adding a New Feature — Checklist
|
|
55
|
+
|
|
56
|
+
When creating a new feature (e.g. `gws`), all four of these steps must be completed or `container.feature('gws')` will fail silently or lack type safety:
|
|
57
|
+
|
|
58
|
+
1. **Feature file** — `src/node/features/gws.ts`
|
|
59
|
+
- Export the class: `export class Gws extends Feature { ... }`
|
|
60
|
+
- Register at bottom: `export default features.register('gws', Gws)`
|
|
61
|
+
|
|
62
|
+
2. **Side-effect import** — `src/node/container.ts` (import block ~line 20-63)
|
|
63
|
+
- Add `import "./features/gws";` (this triggers registration)
|
|
64
|
+
|
|
65
|
+
3. **Type import + re-export** — `src/node/container.ts` (type imports ~line 65-148)
|
|
66
|
+
- Add `import type { Gws } from './features/gws';`
|
|
67
|
+
- Add `type Gws,` to the `export { ... }` block
|
|
68
|
+
|
|
69
|
+
4. **Feature type mapping** — `src/node/container.ts` (`NodeFeatures` interface ~line 170-215)
|
|
70
|
+
- Add `gws: typeof Gws;` to the `NodeFeatures` interface
|
|
71
|
+
|
|
72
|
+
Missing step 2 = feature never registers (invisible).
|
|
73
|
+
Missing steps 3-4 = no autocomplete, `container.feature('gws')` returns `Feature` not `Gws`.
|
|
74
|
+
|
|
75
|
+
If the feature has a test, it goes in `test/gws.test.ts`.
|
|
76
|
+
|
|
77
|
+
## Type Safety and Introspection
|
|
78
|
+
|
|
79
|
+
- Zod does a lot of the heavy lifting for us with its type inference
|
|
80
|
+
- For more descriptive things like class descriptions, method descriptions, we rely on jsdoc blocks. These are parsed and used to generate modules we commit to source. We shouldn't let these drift, so for this reason we have a pre-commit hook which ensures they're up to date
|
|
81
|
+
- We rely on module augmentation a lot to make sure `container.feature()` can provide type signatures for everything that gets added to it by extension modules down the road. ( kind of like we did with AGIContainer extending NodeContainer )
|
|
82
|
+
|
|
83
|
+
## Testing
|
|
84
|
+
|
|
85
|
+
- Test runner is **bun** (not vitest). Do not import from or add vitest.
|
|
86
|
+
- `bun test` or `bun run test` — runs unit tests only (`test/*.test.ts`)
|
|
87
|
+
- `bun run test:integration` — runs integration tests in `test-integration/` that hit real APIs/CLIs (gated by env vars)
|
|
88
|
+
- Import `mock`, `spyOn` from `bun:test` when needed. If you import anything from `bun:test`, you must also import `describe`, `it`, `expect`, etc. from there (importing disables auto-globals).
|
|
89
|
+
- **ALL tests must pass. Zero tolerance for test failures.** The ESBuild feature's "service is no longer running" error is a known critical bug — if you encounter it, fix it. Do not ignore it, do not skip it, do not leave it broken. This applies to every test: if a test fails, that is a blocker. Fix the root cause.
|
|
90
|
+
|
|
91
|
+
## API Docs
|
|
92
|
+
|
|
93
|
+
- See [docs/apis](./docs/apis/) for detailed API descriptions of the public methods and options for creating various helpers
|
|
94
|
+
- See [docs/examples](./docs/examples/) for examples of using each feature. NOTE: These docs are runnable so you can see the output of the code blocks. `luca run docs/examples/grep` for example
|
|
95
|
+
- See [docs/tutorials](./docs/tutorials/) for longer form tutorials on various subjects and best practices
|
|
96
|
+
|
|
97
|
+
## Git Strategy
|
|
98
|
+
|
|
99
|
+
- We generally roll all on main. Commit your changes after you're done, only your changes. Leave a good message, tell me why don't just tell me what. Don't gimme that coauthored by whoever bullshit. The streets know we're one.
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# LUCA
|
|
2
|
+
|
|
3
|
+
Lightweight Universal Conversational Architecture. Runtime is bun.
|
|
4
|
+
|
|
5
|
+
The runtime is bun, that means no vitest.
|
|
6
|
+
|
|
7
|
+
Luca provides a system for building runtime `container` objects which provide server and browser applications with all of the dependencies they need to build complete applications. A `container` is a per process global singleton, event bus, state machine, and dependency injector. A `container` is either based on a node or browser runtime, and comes with features optimized for that environment. You can build your own container on top of it, with your own features, clients, servers. It is very much inspired by docker layer caching.
|
|
8
|
+
|
|
9
|
+
A `container` could be used for all "business logic" and state, and be a headless provider for an entire application. The UI, Scripting output, input, etc, are all just functional interfaces and event bindings to the core container and all of its helpers, and their state.
|
|
10
|
+
|
|
11
|
+
Dependencies consist of Helpers - Features, Clients, Servers, as well as primitives like event buses, observable state. The `container` contains registries of all available components: `container.features`, `container.clients`, `container.servers`, `container.commands`, `container.endpoints` as well as factory functions to create instances of them: `container.feature('fileManager')`, `container.server('express')`.
|
|
12
|
+
|
|
13
|
+
The `container` and its helpers are perfect for scripts and long running services on the backend, or highly reactive and stateful applications on the frontend. The components can easily talk to eachother, as the `container` on the server provides servers like `container.server('express')` and `container.server('websocket')` as well as `container.client('rest')` and `container.client('websocket')` and others.
|
|
14
|
+
|
|
15
|
+
On the frontend the browser container is perfect for highly reactive, stateful web applications, especially works well with React.
|
|
16
|
+
|
|
17
|
+
## The `luca` CLI
|
|
18
|
+
|
|
19
|
+
- in dev, `bun run src/cli/cli.ts` is the same as `luca`
|
|
20
|
+
|
|
21
|
+
- in prod, or educational material, `luca` refers to the binary build. In this mode, it can work in any project, and load `commands/` and `endpoints/` through its VM and therefore allows folders of these modules which don't depend on anything from NPM to extend the CLI and be used in commands like `luca serve` to run a local express server
|
|
22
|
+
|
|
23
|
+
- The `luca` cli is an extremely helpful tool.
|
|
24
|
+
- it runs code `luca eval "container.features.available"`
|
|
25
|
+
- it generates docs:
|
|
26
|
+
- `luca describe diskCache`
|
|
27
|
+
- `luca describe` describe the container itself
|
|
28
|
+
- `luca describe servers` describe which servers are available
|
|
29
|
+
- `luca describe ui.banner` describe a specific method or getter on a helper
|
|
30
|
+
- the arguments to describe are pretty forgiving and permissive
|
|
31
|
+
|
|
32
|
+
**IMPORTANT NOTE** When trying to investigate features, clients, servers, etc, see if these tools can help you first instead of searching for files and reading them that way. If youw ant to understand what they do, vs how theyre actually implemented
|
|
33
|
+
|
|
34
|
+
## OpenAI Tool Schemas (Zod → JSON Schema)
|
|
35
|
+
|
|
36
|
+
**OpenAI requires `required` to list ALL property keys in `properties`**, even optional ones. Zod's `toJSONSchema()` only puts non-optional fields in `required`, which OpenAI rejects with "Missing 'X'" errors. The `assistant.addTool()` method handles this automatically by always setting `required: Object.keys(properties)`. Do NOT use `z.any()` or `z.record(z.any())` in tool schemas — Zod v4's `toJSONSchema()` cannot serialize `z.any()` and will throw `schema._zod is undefined`. Use concrete types like `z.string()` instead (e.g. accept a JSON string and parse it at runtime).
|
|
37
|
+
|
|
38
|
+
## Coding style and guidelines
|
|
39
|
+
|
|
40
|
+
- The container is intended to provide a collection of blessed, approved, audited modules that we've built and curated together. It is intended to be the primary API and interface through the system
|
|
41
|
+
- The container should provide you with everything you need, and you should not need to be importing dependencies or other modules. If you find yourself stuck by this constraint, raise this concern, and we can work on finding a way to bring in a feature or client
|
|
42
|
+
- When trying to find paths in the project, use `container.paths.resolve()` or `container.paths.join()` instead of `import { resolve } from 'path'`
|
|
43
|
+
- **`paths.join()` vs `paths.resolve()` gotcha:** `paths.join()` always prepends `container.cwd` — even if you pass an absolute path as the first arg. Use `paths.resolve(absolutePath, 'sub')` when the base is already absolute (e.g. `os.tmpdir`). `resolve` respects absolute first args just like Node's `path.resolve`.
|
|
44
|
+
- **NEVER import from `fs`, `path`, or other Node builtins when the container provides equivalents.** Use `container.feature('fs')` for file operations, `container.paths` for path operations. This applies everywhere — command handlers, scripts, and feature implementations alike. If a container feature wraps the functionality, use it.
|
|
45
|
+
|
|
46
|
+
## Container Utilities
|
|
47
|
+
|
|
48
|
+
The container provides `container.utils` with common utilities. **Use these instead of importing packages directly** — they work in both node and web environments.
|
|
49
|
+
|
|
50
|
+
- `container.utils.uuid()` — generates a v4 UUID (use instead of importing `node-uuid` or `crypto`)
|
|
51
|
+
- `container.utils.hashObject(obj)` — deterministic hash of any object
|
|
52
|
+
- `container.utils.stringUtils` — `{ kebabCase, camelCase, upperFirst, lowerFirst, pluralize, singularize }`
|
|
53
|
+
- `container.utils.lodash` — `{ uniq, keyBy, uniqBy, groupBy, debounce, throttle, mapValues, mapKeys, pick, get, set, omit }`
|
|
54
|
+
|
|
55
|
+
Also available on every container:
|
|
56
|
+
- `container.uuid` — the container's own unique ID
|
|
57
|
+
- `container.paths.resolve()` / `container.paths.join()` — path operations
|
|
58
|
+
|
|
59
|
+
## Adding a New Feature — Checklist
|
|
60
|
+
|
|
61
|
+
When creating a new feature (e.g. `gws`), all four of these steps must be completed or `container.feature('gws')` will fail silently or lack type safety:
|
|
62
|
+
|
|
63
|
+
1. **Feature file** — `src/node/features/gws.ts`
|
|
64
|
+
- Export the class: `export class Gws extends Feature { ... }`
|
|
65
|
+
- Register inside the class: `static { Feature.register(this, 'gws') }`
|
|
66
|
+
- Default export is just the class: `export default Gws`
|
|
67
|
+
|
|
68
|
+
2. **Side-effect import** — `src/node/container.ts` (import block ~line 20-63)
|
|
69
|
+
- Add `import "./features/gws";` (this triggers registration)
|
|
70
|
+
|
|
71
|
+
3. **Type import + re-export** — `src/node/container.ts` (type imports ~line 65-148)
|
|
72
|
+
- Add `import type { Gws } from './features/gws';`
|
|
73
|
+
- Add `type Gws,` to the `export { ... }` block
|
|
74
|
+
|
|
75
|
+
4. **Feature type mapping** — `src/node/container.ts` (`NodeFeatures` interface ~line 170-215)
|
|
76
|
+
- Add `gws: typeof Gws;` to the `NodeFeatures` interface
|
|
77
|
+
|
|
78
|
+
Missing step 2 = feature never registers (invisible).
|
|
79
|
+
Missing steps 3-4 = no autocomplete, `container.feature('gws')` returns `Feature` not `Gws`.
|
|
80
|
+
|
|
81
|
+
If the feature has a test, it goes in `test/gws.test.ts`.
|
|
82
|
+
|
|
83
|
+
## Type Safety and Introspection
|
|
84
|
+
|
|
85
|
+
- Zod does a lot of the heavy lifting for us with its type inference
|
|
86
|
+
- For more descriptive things like class descriptions, method descriptions, we rely on jsdoc blocks. These are parsed and used to generate modules we commit to source. We shouldn't let these drift, so for this reason we have a pre-commit hook which ensures they're up to date
|
|
87
|
+
- We rely on module augmentation a lot to make sure `container.feature()` can provide type signatures for everything that gets added to it by extension modules down the road. ( kind of like we did with AGIContainer extending NodeContainer )
|
|
88
|
+
|
|
89
|
+
## Generated Files — Build Artifacts
|
|
90
|
+
|
|
91
|
+
**Files matching `generated.ts` or `.generated*.ts` are BUILD ARTIFACTS, not source of truth.** They are produced by the introspection system (which parses JSDoc blocks, Zod schemas, etc.) and bundled into the binary at compile time. **Never edit these files directly** — your changes will be overwritten on the next build.
|
|
92
|
+
|
|
93
|
+
The source of truth for scaffolds and templates is the markdown files and the actual source code with their JSDoc annotations. If scaffold output is wrong, fix the markdown source or the JSDoc blocks on the real classes, then rebuild.
|
|
94
|
+
|
|
95
|
+
This means **JSDoc blocks on helpers (features, clients, servers) must be valid and complete** — they are picked up by the introspection system, used to generate API docs, scaffold tutorials, and the `luca describe` output. Treat JSDoc as documentation infrastructure, not comments.
|
|
96
|
+
|
|
97
|
+
## Testing
|
|
98
|
+
|
|
99
|
+
- Test runner is **bun** (not vitest). Do not import from or add vitest.
|
|
100
|
+
- `bun test` or `bun run test` — runs unit tests only (`test/*.test.ts`)
|
|
101
|
+
- `bun run test:integration` — runs integration tests in `test-integration/` that hit real APIs/CLIs (gated by env vars)
|
|
102
|
+
- Import `mock`, `spyOn` from `bun:test` when needed. If you import anything from `bun:test`, you must also import `describe`, `it`, `expect`, etc. from there (importing disables auto-globals).
|
|
103
|
+
- **ALL tests must pass. Zero tolerance for test failures.** The ESBuild feature's "service is no longer running" error is a known critical bug — if you encounter it, fix it. Do not ignore it, do not skip it, do not leave it broken. This applies to every test: if a test fails, that is a blocker. Fix the root cause.
|
|
104
|
+
|
|
105
|
+
## API Docs
|
|
106
|
+
|
|
107
|
+
- See [docs/apis](./docs/apis/) for detailed API descriptions of the public methods and options for creating various helpers
|
|
108
|
+
- See [docs/examples](./docs/examples/) for examples of using each feature. NOTE: These docs are runnable so you can see the output of the code blocks. `luca run docs/examples/grep` for example
|
|
109
|
+
- See [docs/tutorials](./docs/tutorials/) for longer form tutorials on various subjects and best practices
|
|
110
|
+
|
|
111
|
+
## Git Strategy
|
|
112
|
+
|
|
113
|
+
- We generally roll all on main. Commit your changes after you're done, only your changes. Leave a good message, tell me why don't just tell me what. Don't gimme that coauthored by whoever bullshit. The streets know we're one.
|
|
114
|
+
|
|
115
|
+
- Always commit your work
|
package/CNAME
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
luca-js.soederpop.com
|
package/README.md
CHANGED
|
@@ -1,18 +1,267 @@
|
|
|
1
|
-
# Luca
|
|
1
|
+
# Luca
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Lightweight Universal Conversational Architecture**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A single binary CLI that ships 40+ self-documenting features, clients, and servers. No `npm install`, no setup — download it and start building.
|
|
6
|
+
|
|
7
|
+
Luca gives you a `container` object — think of it like a Docker container for your application runtime. It's a per-process singleton, event bus, state machine, and dependency injector all in one. Layer your own features, clients, servers, commands, and endpoints on top of the base `NodeContainer` (server) or `WebContainer` (browser), then bundle it into your own single-file executable or browser build.
|
|
8
|
+
|
|
9
|
+
The `AGIContainer` extends the node stack with features, clients, and servers for building AI assistants — wrappers around major coding models, tool orchestration, and UIs to visualize them working.
|
|
6
10
|
|
|
7
11
|
## Installation
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
### Quick install (macOS/Linux)
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
curl -fsSL https://luca-js.soederpop.com/install.sh | bash
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This detects your platform, downloads the right binary, and puts `luca` in your path. Done.
|
|
20
|
+
|
|
21
|
+
### Manual download
|
|
22
|
+
|
|
23
|
+
Grab the latest release for your platform from [GitHub Releases](https://github.com/soederpop/luca/releases/latest):
|
|
24
|
+
|
|
25
|
+
| Platform | Binary |
|
|
26
|
+
|----------|--------|
|
|
27
|
+
| macOS (Apple Silicon) | `luca-darwin-arm64` |
|
|
28
|
+
| macOS (Intel) | `luca-darwin-x64` |
|
|
29
|
+
| Linux x64 | `luca-linux-x64` |
|
|
30
|
+
| Linux ARM64 | `luca-linux-arm64` |
|
|
31
|
+
| Windows x64 | `luca-windows-x64.exe` |
|
|
32
|
+
|
|
33
|
+
### Verify
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
luca --version
|
|
37
|
+
# luca v0.0.34 (main@325a0ee) built 2026-03-25T06:10:28Z
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
### Bootstrap a new project
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
luca bootstrap my-app
|
|
46
|
+
cd my-app
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Or just run `luca bootstrap` and it'll ask you for a project name. This scaffolds a project with `commands/`, `endpoints/`, `features/`, `docs/`, and AI assistant configuration — everything wired up and ready to extend.
|
|
50
|
+
|
|
51
|
+
### Explore
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
luca # list all commands
|
|
55
|
+
luca describe features # index of 40+ features
|
|
56
|
+
luca describe fs # full docs for any feature
|
|
57
|
+
luca describe fs.readFile # drill into a specific method
|
|
58
|
+
luca eval "container.features.available" # run code with the container in scope
|
|
59
|
+
luca console # full REPL
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Run scripts and markdown
|
|
63
|
+
|
|
64
|
+
`luca run` executes TypeScript, JavaScript, and markdown files. Markdown files have their code blocks executed in order, with `container` already in scope — no imports needed:
|
|
65
|
+
|
|
66
|
+
````md
|
|
67
|
+
# my-script.md
|
|
68
|
+
|
|
69
|
+
Grab some data and print it:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
const fs = container.feature('fs')
|
|
73
|
+
const files = await fs.readdir('.')
|
|
74
|
+
console.log(`Found ${files.length} files`)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Then do something with it:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
const yaml = container.feature('yaml')
|
|
81
|
+
console.log(yaml.stringify({ files }))
|
|
82
|
+
```
|
|
83
|
+
````
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
luca run my-script.md
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Each block shares state with the previous ones, so variables defined in one block are available in the next. Use `--safe` to require approval before each block, or `--console` to drop into a REPL afterward with all the accumulated context. **Note:** if your block uses top-level awaits, we can't preserve context. You can use `container.addContext({ yourVariable })` and it will be available as a global variable in future blocks.
|
|
90
|
+
|
|
91
|
+
### Serve
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
luca serve # serves endpoints/ folder as HTTP routes
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
See [`docs/CLI.md`](./docs/CLI.md) for the full CLI reference.
|
|
98
|
+
|
|
99
|
+
## Importing the container into your own scripts / modules
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import container from '@soederpop/luca'
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
That's it — you get one object with everything on it. No factory function, no setup. It's a singleton.
|
|
106
|
+
|
|
107
|
+
We do export the framework classes (`WebContainer`, `Feature`, `Client`, `Server`, etc.) if you want to extend them, but for using the system you only ever need the default export.
|
|
108
|
+
|
|
109
|
+
### In the browser via esm.sh
|
|
110
|
+
|
|
111
|
+
**Static import:**
|
|
112
|
+
|
|
113
|
+
```js
|
|
114
|
+
import container from 'https://esm.sh/@soederpop/luca/web'
|
|
115
|
+
|
|
116
|
+
container.features.available // ['fetch', 'state', 'ui', ...]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Dynamic import:**
|
|
120
|
+
|
|
121
|
+
```js
|
|
122
|
+
const { default: container } = await import('https://esm.sh/@soederpop/luca/web')
|
|
123
|
+
|
|
124
|
+
container.features.available // same singleton
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
With dynamic import you have to pick it off `default` yourself — there's no top-level default binding like the static form gives you. Either way, it's the same singleton container, and `window.luca` is set automatically so you can poke at it from the console.
|
|
10
128
|
|
|
11
|
-
##
|
|
129
|
+
## How It Works
|
|
12
130
|
|
|
13
|
-
-
|
|
131
|
+
### Self-documenting at runtime
|
|
132
|
+
|
|
133
|
+
Every helper (feature, client, server) carries its own introspection metadata — constructor options, observable state shape, events emitted, environment variables used, method signatures. This powers `luca describe`, works in the REPL, and enables metaprogramming.
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
import container from '@soederpop/luca'
|
|
137
|
+
|
|
138
|
+
container.features.available // ['fs','git','proc','vault',...]
|
|
139
|
+
container.clients.available // ['rest','websocket']
|
|
140
|
+
container.servers.available // ['express','websocket','ipc','mcp']
|
|
141
|
+
|
|
142
|
+
container.features.describe() // markdown summary of all features
|
|
143
|
+
container.feature('fs').introspect() // json
|
|
144
|
+
container.feature('fs').introspectAsText() // markdown
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Content-aware documentation
|
|
148
|
+
|
|
149
|
+
The node container includes `container.docs` powered by [Contentbase](https://github.com/soederpop/contentbase) — query your project's markdown documentation like a database:
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
await container.docs.load()
|
|
153
|
+
const { Tutorial } = container.docs.models
|
|
154
|
+
const tutorials = await container.docs.query(Tutorial).fetchAll()
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Project extensions
|
|
158
|
+
|
|
159
|
+
Drop files into convention-based folders and they're auto-discovered:
|
|
160
|
+
|
|
161
|
+
- `commands/` — custom CLI commands, run via `luca <name>`
|
|
162
|
+
- `endpoints/` — file-based HTTP routes, served via `luca serve`
|
|
163
|
+
- `features/` — custom container features
|
|
164
|
+
|
|
165
|
+
Generate boilerplate with `luca scaffold`:
|
|
166
|
+
|
|
167
|
+
```sh
|
|
168
|
+
luca scaffold command myTask --description "Automate something"
|
|
169
|
+
luca scaffold feature myCache --description "Custom caching layer"
|
|
170
|
+
luca scaffold endpoint users --description "User management API"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Building an assistant
|
|
174
|
+
|
|
175
|
+
Features can inject their own tools into an assistant via `assistant.use()`. Here's an assistant that can browse the web:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
import container from '@soederpop/luca'
|
|
179
|
+
|
|
180
|
+
const browser = container.feature('browserUse', { headed: true })
|
|
181
|
+
const assistant = container.feature('assistant', {
|
|
182
|
+
systemPrompt: 'You are a web research assistant. Use your browser tools to find information.',
|
|
183
|
+
model: 'gpt-4.1-mini',
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
// browserUse injects its tools — open, click, type, screenshot, extract, etc.
|
|
187
|
+
assistant.use(browser)
|
|
188
|
+
await assistant.start()
|
|
189
|
+
|
|
190
|
+
await assistant.ask('Go to hacker news and tell me what the top 3 stories are about')
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### AI coding assistant integration
|
|
194
|
+
|
|
195
|
+
The CLI works great alongside Claude Code, Codex, and other coding assistants:
|
|
196
|
+
|
|
197
|
+
- `luca describe` gives assistants full API docs for any helper
|
|
198
|
+
- `luca eval` lets them test container expressions before committing code
|
|
199
|
+
- `luca sandbox-mcp` provides a REPL and doc browser as an MCP server
|
|
14
200
|
|
|
15
201
|
## Development
|
|
16
202
|
|
|
17
|
-
|
|
18
|
-
|
|
203
|
+
### Prerequisites
|
|
204
|
+
|
|
205
|
+
- [Bun](https://bun.sh) (runtime and test runner)
|
|
206
|
+
|
|
207
|
+
### Setup
|
|
208
|
+
|
|
209
|
+
```sh
|
|
210
|
+
git clone https://github.com/soederpop/luca.git
|
|
211
|
+
cd luca
|
|
212
|
+
bun install
|
|
213
|
+
bun run setup
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`bun run setup` applies `git update-index --skip-worktree` to the build artifact stubs so local changes to generated files (from running `build:introspection`, `build:scaffolds`, etc.) are never accidentally committed.
|
|
217
|
+
|
|
218
|
+
### Running in dev
|
|
219
|
+
|
|
220
|
+
```sh
|
|
221
|
+
# Run the CLI from source (equivalent to the luca binary)
|
|
222
|
+
bun run src/cli/cli.ts
|
|
223
|
+
|
|
224
|
+
# Examples
|
|
225
|
+
bun run src/cli/cli.ts describe features
|
|
226
|
+
bun run src/cli/cli.ts eval "container.features.available"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Testing
|
|
230
|
+
|
|
231
|
+
```sh
|
|
232
|
+
# Unit tests
|
|
233
|
+
bun test
|
|
234
|
+
|
|
235
|
+
# Integration tests (may require API keys / env vars)
|
|
236
|
+
bun run test:integration
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Building the binary
|
|
240
|
+
|
|
241
|
+
```sh
|
|
242
|
+
bun run compile
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
This runs the full pipeline: introspection generation, scaffold templates, bootstrap code, python bridge, build stamp, then compiles to `dist/luca` via Bun's native compiler.
|
|
246
|
+
|
|
247
|
+
### Project structure
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
src/
|
|
251
|
+
cli/ CLI entry point and commands
|
|
252
|
+
node/ NodeContainer and server-side features
|
|
253
|
+
web/ WebContainer and browser features
|
|
254
|
+
agi/ AGIContainer — AI assistant layer
|
|
255
|
+
schemas/ Shared Zod schemas
|
|
256
|
+
react/ React bindings
|
|
257
|
+
test/ Unit tests
|
|
258
|
+
test-integration/ Integration tests
|
|
259
|
+
docs/
|
|
260
|
+
apis/ Generated API docs
|
|
261
|
+
examples/ Runnable examples (luca run docs/examples/grep)
|
|
262
|
+
tutorials/ Longer-form guides
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## License
|
|
266
|
+
|
|
267
|
+
MIT
|