luca 2.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yaml +170 -0
- package/AGENTS.md +99 -0
- package/CLAUDE.md +123 -0
- package/CNAME +1 -0
- package/README.md +275 -9
- package/RUNME.md +56 -0
- package/assistants/codingAssistant/ABOUT.md +5 -0
- package/assistants/codingAssistant/CORE.md +33 -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 +2667 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-bootstrap.ts +117 -0
- package/commands/build-python-bridge.ts +42 -0
- package/commands/build-scaffolds.ts +175 -0
- package/commands/bundle-consumer-project.ts +521 -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/index.html +1457 -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 +1457 -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 +156 -0
- package/src/agi/feature.ts +13 -0
- package/src/agi/features/agent-memory.ts +694 -0
- package/src/agi/features/assistant.ts +1653 -0
- package/src/agi/features/assistants-manager.ts +534 -0
- package/src/agi/features/autonomous-assistant.ts +431 -0
- package/src/agi/features/browser-use.ts +672 -0
- package/src/agi/features/claude-code.ts +1584 -0
- package/src/agi/features/coding-tools.ts +175 -0
- package/src/agi/features/conversation-history.ts +672 -0
- package/src/agi/features/conversation.ts +1494 -0
- package/src/agi/features/docs-reader.ts +167 -0
- package/src/agi/features/file-tools.ts +340 -0
- package/src/agi/features/luca-coder.ts +641 -0
- package/src/agi/features/mcp-bridge.ts +532 -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 +557 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/interceptor-chain.ts +89 -0
- package/src/agi/lib/token-counter.ts +202 -0
- package/src/bootstrap/generated.ts +9791 -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 +506 -0
- package/src/commands/bootstrap.ts +244 -0
- package/src/commands/chat.ts +309 -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 +67 -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 +1014 -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 +1091 -0
- package/src/container.ts +1199 -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 +41200 -0
- package/src/introspection/generated.node.ts +28773 -0
- package/src/introspection/generated.web.ts +2272 -0
- package/src/introspection/index.ts +296 -0
- package/src/introspection/scan.ts +1136 -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 +849 -0
- package/src/node/features/disk-cache.ts +388 -0
- package/src/node/features/display-result.ts +57 -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 +762 -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 +912 -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 +261 -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 +160 -0
- package/src/node/features/tts.ts +185 -0
- package/src/node/features/ui.ts +791 -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 +226 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +210 -0
- package/src/scaffolds/generated.ts +1814 -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 +291 -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/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
package/README.md
CHANGED
|
@@ -1,19 +1,285 @@
|
|
|
1
|
-
# Luca
|
|
1
|
+
# Luca
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Lightweight Universal Conversational Architecture**
|
|
4
|
+
*(aka Le Ultimate Component Architecture)*
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
An agent-native TypeScript runtime that ships as a single binary — and builds yours too.
|
|
7
|
+
|
|
8
|
+
Luca gives humans and AI agents the same architectural map: one self-documenting `container` object with typed features, clients, servers, commands, state, events, and runtime docs. The agent doesn't guess at architecture — it discovers it. No `npm install`, no `node_modules`, no supply chain exposure, no ceremony.
|
|
9
|
+
|
|
10
|
+
## What Makes Luca Different
|
|
11
|
+
|
|
12
|
+
AI agents today either generate sprawling ad-hoc code or fight against frameworks that weren't designed for them. They don't know what's available, what conventions to follow, or where to put things. The result is brittle, unreviewable output that drifts further from the codebase with every generation.
|
|
13
|
+
|
|
14
|
+
Luca solves this with three ideas:
|
|
15
|
+
|
|
16
|
+
**One introspectable container.** Every Luca app has a single `container` — a dependency-injected runtime that carries features, clients, servers, commands, endpoints, observable state, and an event bus. Every component describes itself: constructor options, method signatures, events emitted, state shape. The human reads the same docs the agent reads. There is one way to do things.
|
|
17
|
+
|
|
18
|
+
**Single binary in, single binary out.** Luca ships as a standalone binary. No runtime dependencies, no package manager, no exposure to the npm supply chain. You use it to build your project, then compile your project into its own standalone binary with your custom commands, features, endpoints, and assistants baked in.
|
|
19
|
+
|
|
20
|
+
**The assistant is a first-class citizen.** Luca's `Assistant` class can `use()` any feature, client, or server in the container — inheriting its tools automatically. The assistant doesn't need hand-written tool definitions. It discovers capabilities from the runtime it's embedded in.
|
|
6
21
|
|
|
7
22
|
## Installation
|
|
8
23
|
|
|
9
|
-
|
|
24
|
+
```sh
|
|
25
|
+
curl -fsSL https://luca-js.soederpop.com/install.sh | bash
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Detects your platform, downloads the binary, puts `luca` in your path. Done.
|
|
29
|
+
|
|
30
|
+
Or grab a release directly from [GitHub Releases](https://github.com/soederpop/luca/releases/latest):
|
|
31
|
+
|
|
32
|
+
| Platform | Binary |
|
|
33
|
+
|----------|--------|
|
|
34
|
+
| macOS (Apple Silicon) | `luca-darwin-arm64` |
|
|
35
|
+
| macOS (Intel) | `luca-darwin-x64` |
|
|
36
|
+
| Linux x64 | `luca-linux-x64` |
|
|
37
|
+
| Linux ARM64 | `luca-linux-arm64` |
|
|
38
|
+
| Windows x64 | `luca-windows-x64.exe` |
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
luca --version
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
luca bootstrap my-app
|
|
48
|
+
cd my-app
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This scaffolds a project with `commands/`, `endpoints/`, `features/`, `docs/`, and AI assistant configuration — everything wired up and ready to extend.
|
|
52
|
+
|
|
53
|
+
Now explore what the runtime can do:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
luca # list all commands
|
|
57
|
+
luca describe features # see every available feature
|
|
58
|
+
luca describe fs # full docs for a specific feature
|
|
59
|
+
luca describe fs.readFile # drill into a specific method
|
|
60
|
+
luca eval "container.features.available" # run code against the live container
|
|
61
|
+
luca console # full REPL
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
This is the core loop: discover what's available, evaluate code against it, build on top of it. Your AI assistant does the same thing.
|
|
65
|
+
|
|
66
|
+
## The Container
|
|
67
|
+
|
|
68
|
+
One import. One object. Everything on it.
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import container from 'luca'
|
|
72
|
+
|
|
73
|
+
container.features.available // ['fs', 'git', 'proc', 'vault', 'yaml', 'sqlite', ...]
|
|
74
|
+
container.clients.available // ['rest', 'websocket', ...]
|
|
75
|
+
container.servers.available // ['express', 'websocket', 'ipc', 'mcp', ...]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The container is a singleton — a per-process global that acts as dependency injector, event bus, and state machine. Features, clients, and servers are lazy-loaded from registries. Every helper carries introspection metadata that powers `luca describe`, the REPL, and agent tool discovery.
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
const fs = container.feature('fs')
|
|
82
|
+
const rest = container.client('rest', { baseURL: 'https://api.example.com' })
|
|
83
|
+
const server = container.server('express')
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
No imports beyond the container. No `require('fs')`, no `import axios`, no `npm install anything`. The container provides file I/O, HTTP clients, databases, YAML parsing, git operations, browser automation, terminal UI, semantic search, encryption, and more — all typed, all documented, all discoverable at runtime.
|
|
87
|
+
|
|
88
|
+
### In the browser
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
import container from 'https://esm.sh/luca/web'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Same singleton pattern, optimized for browser features. `window.luca` is set automatically.
|
|
95
|
+
|
|
96
|
+
## Build an Assistant
|
|
97
|
+
|
|
98
|
+
The assistant is the interface that ties everything together. It can `use()` any module in the container, automatically inheriting that module's tools:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
import container from 'luca'
|
|
102
|
+
|
|
103
|
+
const browser = container.feature('browserUse', { headed: true })
|
|
104
|
+
const assistant = container.feature('assistant', {
|
|
105
|
+
systemPrompt: 'You are a web research assistant.',
|
|
106
|
+
model: 'gpt-4.1-mini',
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// browserUse injects its tools — open, click, type, screenshot, extract, etc.
|
|
110
|
+
assistant.use(browser)
|
|
111
|
+
await assistant.start()
|
|
112
|
+
|
|
113
|
+
await assistant.ask('Go to hacker news and tell me the top 3 stories')
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The assistant doesn't need hand-written tool schemas. When it calls `use(browser)`, it gets every tool that `browserUse` exposes — typed, documented, ready to invoke. Swap `browserUse` for `fs` or `git` or `sqlite` and the assistant gets a completely different toolkit from the same pattern.
|
|
117
|
+
|
|
118
|
+
This is what agent-native means: the runtime teaches the agent what it can do.
|
|
119
|
+
|
|
120
|
+
### The Assistant as Operator
|
|
121
|
+
|
|
122
|
+
Most agent frameworks give you a chat loop with tool calls bolted on. Luca gives you an agent that can operate real infrastructure.
|
|
123
|
+
|
|
124
|
+
The container has servers — REST, WebSocket, IPC. It has clients for all of them. It has process management, a VM, file I/O, databases, git, docker, SSH, even GPU compute over RunPod. The assistant can `use()` any combination of these, which means you can build agents that:
|
|
125
|
+
|
|
126
|
+
- **Stand up and manage servers** — spin up an Express server, add routes, react to incoming requests
|
|
127
|
+
- **Listen to events across transports** — WebSocket messages, IPC signals, HTTP webhooks, file system changes
|
|
128
|
+
- **Spawn and manage processes** — launch child processes, monitor their output, kill them when done — locally, over SSH, in Docker containers, or on remote GPU instances
|
|
129
|
+
- **Inspect and react to state** — every helper has observable state and an event bus; the assistant can watch for changes and act on them autonomously
|
|
130
|
+
- **Run code in a sandboxed VM** — execute untrusted code safely, evaluate expressions, build REPL-like workflows
|
|
131
|
+
|
|
132
|
+
The assistant isn't answering questions in a chat window. It's running your infrastructure, reacting to events in real time, and coordinating across multiple systems — all through the same `container` it already knows how to discover.
|
|
10
133
|
|
|
11
|
-
|
|
134
|
+
```ts
|
|
135
|
+
const assistant = container.feature('assistant', {
|
|
136
|
+
systemPrompt: 'You manage the deployment pipeline. Monitor builds, restart failed services, report status.',
|
|
137
|
+
model: 'gpt-4.1-mini',
|
|
138
|
+
})
|
|
12
139
|
|
|
13
|
-
|
|
140
|
+
assistant.use(container.feature('proc'))
|
|
141
|
+
assistant.use(container.server('express'))
|
|
142
|
+
assistant.use(container.server('websocket'))
|
|
143
|
+
assistant.use(container.feature('docker'))
|
|
144
|
+
assistant.use(container.feature('fs'))
|
|
145
|
+
|
|
146
|
+
await assistant.start()
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
That's an agent harness. Not a chatbot — an operator.
|
|
150
|
+
|
|
151
|
+
## Build Your Own Binary
|
|
152
|
+
|
|
153
|
+
Luca isn't just a tool you use — it's a tool that builds tools.
|
|
154
|
+
|
|
155
|
+
Bootstrap a project, add your own commands, features, endpoints, and assistants, then compile the whole thing into a standalone binary:
|
|
156
|
+
|
|
157
|
+
```sh
|
|
158
|
+
luca bootstrap my-tool
|
|
159
|
+
cd my-tool
|
|
160
|
+
|
|
161
|
+
# add your own commands, features, endpoints
|
|
162
|
+
luca scaffold command analyze --description "Run analysis on input data"
|
|
163
|
+
luca scaffold feature myCache --description "Custom caching layer"
|
|
164
|
+
luca scaffold endpoint status --description "Health check endpoint"
|
|
165
|
+
|
|
166
|
+
# compile to a single binary
|
|
167
|
+
luca bundle
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The output is a self-contained executable. No node, no bun, no npm on the target machine. Your users download one file and run it. Your custom commands show up in `my-tool --help`. Your assistant ships inside.
|
|
171
|
+
|
|
172
|
+
## Project Structure
|
|
173
|
+
|
|
174
|
+
Convention-based folders are auto-discovered:
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
commands/ custom CLI commands → luca <name>
|
|
178
|
+
endpoints/ file-based HTTP routes → luca serve
|
|
179
|
+
features/ custom container features → container.feature('<name>')
|
|
180
|
+
assistants/ AI assistants with system prompts and tools
|
|
181
|
+
docs/ content documents queryable via container.docs
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Generate boilerplate with `luca scaffold`:
|
|
185
|
+
|
|
186
|
+
```sh
|
|
187
|
+
luca scaffold command myTask --description "Automate something"
|
|
188
|
+
luca scaffold feature myCache --description "Custom caching layer"
|
|
189
|
+
luca scaffold endpoint users --description "User management API"
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Run Scripts and Markdown
|
|
193
|
+
|
|
194
|
+
`luca run` executes TypeScript, JavaScript, and markdown files with the container in scope:
|
|
195
|
+
|
|
196
|
+
````md
|
|
197
|
+
# my-script.md
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
const fs = container.feature('fs')
|
|
201
|
+
const files = await fs.readdir('.')
|
|
202
|
+
console.log(`Found ${files.length} files`)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```ts
|
|
206
|
+
const yaml = container.feature('yaml')
|
|
207
|
+
console.log(yaml.stringify({ files }))
|
|
208
|
+
```
|
|
209
|
+
````
|
|
210
|
+
|
|
211
|
+
```sh
|
|
212
|
+
luca run my-script.md
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Blocks share state. Use `--safe` for approval before each block, `--console` to drop into a REPL afterward with accumulated context.
|
|
216
|
+
|
|
217
|
+
## AI Coding Assistant Integration
|
|
218
|
+
|
|
219
|
+
Luca is designed to work alongside Claude Code, Codex, and other AI coding assistants:
|
|
220
|
+
|
|
221
|
+
- `luca describe` gives the assistant full API docs for any helper — method signatures, options, events, state shape
|
|
222
|
+
- `luca eval` lets the assistant test container expressions before writing code
|
|
223
|
+
- `luca sandbox-mcp` exposes a REPL and doc browser as an MCP server
|
|
224
|
+
|
|
225
|
+
The assistant doesn't need to read source files to understand the framework. It asks the framework directly.
|
|
14
226
|
|
|
15
227
|
## Development
|
|
16
228
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
229
|
+
### Prerequisites
|
|
230
|
+
|
|
231
|
+
- [Bun](https://bun.sh) (runtime and test runner)
|
|
232
|
+
|
|
233
|
+
### Setup
|
|
234
|
+
|
|
235
|
+
```sh
|
|
236
|
+
git clone https://github.com/soederpop/luca.git
|
|
237
|
+
cd luca
|
|
238
|
+
bun install
|
|
239
|
+
bun run setup
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Running in dev
|
|
243
|
+
|
|
244
|
+
```sh
|
|
245
|
+
bun run src/cli/cli.ts # same as luca binary
|
|
246
|
+
bun run src/cli/cli.ts describe features
|
|
247
|
+
bun run src/cli/cli.ts eval "container.features.available"
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Testing
|
|
251
|
+
|
|
252
|
+
```sh
|
|
253
|
+
bun test # unit tests
|
|
254
|
+
bun run test:integration # integration tests (may require API keys)
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Building the binary
|
|
258
|
+
|
|
259
|
+
```sh
|
|
260
|
+
bun run compile
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Runs the full pipeline: introspection generation, scaffold templates, build stamp, then compiles to `dist/luca` via Bun's native compiler.
|
|
264
|
+
|
|
265
|
+
### Project structure
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
src/
|
|
269
|
+
cli/ CLI entry point and built-in commands
|
|
270
|
+
node/ NodeContainer and server-side features
|
|
271
|
+
web/ WebContainer and browser features
|
|
272
|
+
agi/ AGIContainer — AI assistant layer
|
|
273
|
+
schemas/ Shared Zod schemas
|
|
274
|
+
react/ React bindings
|
|
275
|
+
test/ Unit tests
|
|
276
|
+
test-integration/ Integration tests
|
|
277
|
+
docs/
|
|
278
|
+
apis/ Generated API docs
|
|
279
|
+
examples/ Runnable examples (luca run docs/examples/grep)
|
|
280
|
+
tutorials/ Longer-form guides
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## License
|
|
284
|
+
|
|
285
|
+
MIT
|
package/RUNME.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Runnable Markdown
|
|
2
|
+
|
|
3
|
+
The `luca` CLI allows you to run markdown blocks as long as they're tagged with `ts` in the language.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
const banner = ui.banner('LUCA', {
|
|
7
|
+
font: 'Puffy',
|
|
8
|
+
colors: ['red','white','blue']
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
ui.print(banner)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What is kind of cool is ( so long as there's no top-level-await in the block ) the context will preserve:
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
if(typeof banner === 'undefined') {
|
|
18
|
+
ui.print.red('uh oh, something broke.')
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
You can skip blocks too with the skip tag in the language of the fenced block
|
|
23
|
+
|
|
24
|
+
```ts skip
|
|
25
|
+
console.log('Not gonna say anything')
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Did you hear something? No.
|
|
29
|
+
|
|
30
|
+
Something even cooler is the ability to render React blocks. This makes luca kind of like a poor man's MDX. I just define some Blocks in the markdown by creating an h2 `## Blocks` section with a fenced codeblock that uses `tsx`. The `ink.components` and `ink.React` globals are injected into the scope.
|
|
31
|
+
|
|
32
|
+
## Blocks
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
const { Box, Text } = ink.components
|
|
36
|
+
const React = ink.React
|
|
37
|
+
|
|
38
|
+
function Greeting({ name, role }) {
|
|
39
|
+
return (
|
|
40
|
+
<Box borderStyle="round" padding={1}>
|
|
41
|
+
<Text color="green" bold>Hello {name}!</Text>
|
|
42
|
+
<Text dimColor> ({role})</Text>
|
|
43
|
+
</Box>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Rendering React Blocks
|
|
49
|
+
|
|
50
|
+
Then I can use the Blocks in code.
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
await render('Greeting', { name: 'Jon', role: 'Humble Servant' })
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Luca Coding Assistant
|
|
2
|
+
|
|
3
|
+
This Assistant is trained on the Luca Framework and has a powerful suite of coding tools (rg, cat, ls, sed), the ability to load skills.md, CLAUDE.md, Agents.md, it knows how to use the `luca` CLI.
|
|
4
|
+
|
|
5
|
+
Any tool you want to add to an assistant, new assistant you want to create, new workflow you want to add, literally anything you can think of, it can do with the luca framework, securely, local first.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
model: qwen/qwen-3.6-27b
|
|
3
|
+
clientOptions:
|
|
4
|
+
baseURL: http://chief:1234/v1
|
|
5
|
+
apiKey: sk-local
|
|
6
|
+
contextWindow: 64000
|
|
7
|
+
skills:
|
|
8
|
+
- luca-framework
|
|
9
|
+
---
|
|
10
|
+
# Coding Assistant
|
|
11
|
+
|
|
12
|
+
You are a Luca Framework coding assistant. You read, search, understand, and modify codebases that use the luca framework. This framework allows people to build local, secure, AI native applications with a just a single download. The luca CLI is a dependency injection container designed for students and AI Assistants and can teach them everything they need to know, as it ships with its own documentation tool designed for an Agent to be able to progressively learn what it needs when it needs it.
|
|
13
|
+
|
|
14
|
+
## Luca First
|
|
15
|
+
|
|
16
|
+
This assistant lives in a Luca project. Load `luca-framework` immediately, use `luca describe` to learn framework APIs, and use `luca eval` to verify runtime behavior. Prefer `luca` over guessing from source when the question is about the framework.
|
|
17
|
+
|
|
18
|
+
## How to Work
|
|
19
|
+
|
|
20
|
+
1. **Introspect** -- use `luca describe` for framework APIs and `luca eval` for runtime verification before guessing.
|
|
21
|
+
2. **Orient** -- `ls` to see what's around, `rg` to find what you need. Start broad, narrow fast.
|
|
22
|
+
3. **Read** -- `cat -n` to read files with line numbers. `sed -n "10,30p"` for specific ranges. Don't load 500 lines when you need 20.
|
|
23
|
+
4. **Change** -- `editFile` for surgical edits to existing code. `writeFile` only for new files. Never rewrite what you can edit.
|
|
24
|
+
5. **Verify** -- `runCommand` to build, test, type-check after changes. Don't assume your edit worked.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- Read before you write. Always.
|
|
29
|
+
- Prefer `editFile` over `writeFile` for existing files -- it makes targeted replacements instead of overwriting.
|
|
30
|
+
- Use `rg` liberally. It is faster and more reliable than guessing file paths or grepping your memory.
|
|
31
|
+
- Keep changes minimal. Fix what was asked, don't refactor the neighborhood.
|
|
32
|
+
- Load `luca-framework` at the start and use the Luca CLI before inferring framework behavior from source.
|
|
33
|
+
- Explain what you're about to do, then do it. No essays.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Assistant, AGIContainer } from 'luca/agi'
|
|
2
|
+
|
|
3
|
+
declare global {
|
|
4
|
+
var assistant: Assistant
|
|
5
|
+
var container: AGIContainer
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function started() {
|
|
9
|
+
assistant.intercept('beforeAsk', async function runOnceBeforeChat(ctx, next) {
|
|
10
|
+
const claudeMd = await container.fs.readFileAsync('CLAUDE.md').then(r => String(r))
|
|
11
|
+
|
|
12
|
+
assistant.state.set('loadedClaudeMd', true)
|
|
13
|
+
|
|
14
|
+
assistant.addSystemPromptExtension('code-context', claudeMd)
|
|
15
|
+
|
|
16
|
+
assistant.interceptors.beforeAsk.remove(runOnceBeforeChat)
|
|
17
|
+
|
|
18
|
+
await next()
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
const fileTools = container.feature('fileTools')
|
|
4
|
+
|
|
5
|
+
export const use = [
|
|
6
|
+
container.feature('codingTools'),
|
|
7
|
+
fileTools.toTools({ only: ['editFile', 'writeFile', 'deleteFile'] }),
|
|
8
|
+
container.feature('processManager'),
|
|
9
|
+
container.feature('skillsLibrary'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
export const schemas = {}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Luca Inkbot Assistant
|
|
2
|
+
|
|
3
|
+
Inkbot renders React Ink components directly in the canvas pane — no subprocesses, no temp files, no `luca run`. Components live in the same React tree as the host app, giving them direct access to the assistant's mental state and full error boundary protection.
|
|
4
|
+
|
|
5
|
+
## Key Features
|
|
6
|
+
|
|
7
|
+
- **Direct rendering** — components evaluate in-process and render as part of the Ink tree
|
|
8
|
+
- **Error boundaries** — render errors are caught and displayed, not crashes
|
|
9
|
+
- **useSceneInput** — focus-aware, error-safe keyboard handling
|
|
10
|
+
- **Mental state integration** — components call `setMental()`/`getMental()` directly via closure
|
|
11
|
+
|
|
12
|
+
## Example Prompts
|
|
13
|
+
|
|
14
|
+
- Show me what features this project has, let me browse them
|
|
15
|
+
- Build me an interactive form to configure a new endpoint
|
|
16
|
+
- Create a dashboard showing project stats
|