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/index.html
ADDED
|
@@ -0,0 +1,1457 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Luca — Agent-Native TypeScript Runtime</title>
|
|
7
|
+
<meta name="description" content="An agent-native TypeScript runtime that ships as a single binary — and builds yours too. One self-documenting container for humans and AI agents.">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Sora:wght@300;400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
11
|
+
<style>
|
|
12
|
+
/* ============ THEME (dark-first) ============ */
|
|
13
|
+
:root {
|
|
14
|
+
--font-body: 'Sora', system-ui, sans-serif;
|
|
15
|
+
--font-mono: 'IBM Plex Mono', 'SF Mono', Consolas, monospace;
|
|
16
|
+
|
|
17
|
+
--bg: #09090b;
|
|
18
|
+
--bg-subtle: #0f0f13;
|
|
19
|
+
--surface: #131318;
|
|
20
|
+
--surface2: #1a1a22;
|
|
21
|
+
--surface-elevated: #1f1f2a;
|
|
22
|
+
--border: rgba(255, 255, 255, 0.06);
|
|
23
|
+
--border-bright: rgba(255, 255, 255, 0.12);
|
|
24
|
+
--text: #ececf1;
|
|
25
|
+
--text-dim: #71717a;
|
|
26
|
+
--text-muted: #52525b;
|
|
27
|
+
|
|
28
|
+
--cyan: #06b6d4;
|
|
29
|
+
--cyan-bright: #22d3ee;
|
|
30
|
+
--cyan-dim: rgba(6, 182, 212, 0.12);
|
|
31
|
+
--cyan-glow: rgba(6, 182, 212, 0.25);
|
|
32
|
+
|
|
33
|
+
--purple: #a855f7;
|
|
34
|
+
--purple-bright: #c084fc;
|
|
35
|
+
--purple-dim: rgba(168, 85, 247, 0.12);
|
|
36
|
+
|
|
37
|
+
--amber: #f59e0b;
|
|
38
|
+
--amber-bright: #fbbf24;
|
|
39
|
+
--amber-dim: rgba(245, 158, 11, 0.1);
|
|
40
|
+
|
|
41
|
+
--green: #10b981;
|
|
42
|
+
--green-dim: rgba(16, 185, 129, 0.1);
|
|
43
|
+
|
|
44
|
+
--rose: #f43f5e;
|
|
45
|
+
--rose-dim: rgba(244, 63, 94, 0.1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@media (prefers-color-scheme: light) {
|
|
49
|
+
:root {
|
|
50
|
+
--bg: #fafafa;
|
|
51
|
+
--bg-subtle: #f4f4f5;
|
|
52
|
+
--surface: #ffffff;
|
|
53
|
+
--surface2: #f4f4f5;
|
|
54
|
+
--surface-elevated: #ffffff;
|
|
55
|
+
--border: rgba(0, 0, 0, 0.07);
|
|
56
|
+
--border-bright: rgba(0, 0, 0, 0.14);
|
|
57
|
+
--text: #18181b;
|
|
58
|
+
--text-dim: #71717a;
|
|
59
|
+
--text-muted: #a1a1aa;
|
|
60
|
+
--cyan: #0891b2;
|
|
61
|
+
--cyan-bright: #06b6d4;
|
|
62
|
+
--cyan-dim: rgba(8, 145, 178, 0.08);
|
|
63
|
+
--cyan-glow: rgba(8, 145, 178, 0.15);
|
|
64
|
+
--purple: #9333ea;
|
|
65
|
+
--purple-bright: #a855f7;
|
|
66
|
+
--purple-dim: rgba(147, 51, 234, 0.08);
|
|
67
|
+
--amber: #d97706;
|
|
68
|
+
--amber-bright: #f59e0b;
|
|
69
|
+
--amber-dim: rgba(217, 119, 6, 0.08);
|
|
70
|
+
--green: #059669;
|
|
71
|
+
--green-dim: rgba(5, 150, 105, 0.08);
|
|
72
|
+
--rose: #e11d48;
|
|
73
|
+
--rose-dim: rgba(225, 29, 72, 0.08);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ============ RESET ============ */
|
|
78
|
+
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
79
|
+
html { scroll-behavior: smooth; }
|
|
80
|
+
|
|
81
|
+
body {
|
|
82
|
+
background: var(--bg);
|
|
83
|
+
color: var(--text);
|
|
84
|
+
font-family: var(--font-body);
|
|
85
|
+
line-height: 1.6;
|
|
86
|
+
overflow-x: hidden;
|
|
87
|
+
-webkit-font-smoothing: antialiased;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* ============ BACKGROUND ATMOSPHERE ============ */
|
|
91
|
+
body::before {
|
|
92
|
+
content: '';
|
|
93
|
+
position: fixed;
|
|
94
|
+
inset: 0;
|
|
95
|
+
background:
|
|
96
|
+
radial-gradient(ellipse 80% 50% at 50% -10%, var(--cyan-glow) 0%, transparent 60%),
|
|
97
|
+
radial-gradient(ellipse 60% 40% at 80% 50%, var(--purple-dim) 0%, transparent 50%),
|
|
98
|
+
radial-gradient(ellipse 50% 30% at 10% 80%, var(--amber-dim) 0%, transparent 40%);
|
|
99
|
+
pointer-events: none;
|
|
100
|
+
z-index: 0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Dot grid overlay */
|
|
104
|
+
body::after {
|
|
105
|
+
content: '';
|
|
106
|
+
position: fixed;
|
|
107
|
+
inset: 0;
|
|
108
|
+
background-image: radial-gradient(circle, var(--border) 0.5px, transparent 0.5px);
|
|
109
|
+
background-size: 32px 32px;
|
|
110
|
+
pointer-events: none;
|
|
111
|
+
z-index: 0;
|
|
112
|
+
opacity: 0.5;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* ============ ANIMATIONS ============ */
|
|
116
|
+
@keyframes fadeUp {
|
|
117
|
+
from { opacity: 0; transform: translateY(20px); }
|
|
118
|
+
to { opacity: 1; transform: translateY(0); }
|
|
119
|
+
}
|
|
120
|
+
@keyframes fadeScale {
|
|
121
|
+
from { opacity: 0; transform: scale(0.95); }
|
|
122
|
+
to { opacity: 1; transform: scale(1); }
|
|
123
|
+
}
|
|
124
|
+
@keyframes float {
|
|
125
|
+
0%, 100% { transform: translateY(0); }
|
|
126
|
+
50% { transform: translateY(-6px); }
|
|
127
|
+
}
|
|
128
|
+
@keyframes pulse-glow {
|
|
129
|
+
0%, 100% { box-shadow: 0 0 20px var(--cyan-dim), 0 0 60px rgba(6,182,212,0.05); }
|
|
130
|
+
50% { box-shadow: 0 0 30px var(--cyan-glow), 0 0 80px rgba(6,182,212,0.1); }
|
|
131
|
+
}
|
|
132
|
+
@keyframes gradient-shift {
|
|
133
|
+
0% { background-position: 0% 50%; }
|
|
134
|
+
50% { background-position: 100% 50%; }
|
|
135
|
+
100% { background-position: 0% 50%; }
|
|
136
|
+
}
|
|
137
|
+
@keyframes typing {
|
|
138
|
+
from { width: 0; }
|
|
139
|
+
to { width: 100%; }
|
|
140
|
+
}
|
|
141
|
+
@keyframes blink {
|
|
142
|
+
50% { border-color: transparent; }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.anim { animation: fadeUp 0.5s ease-out both; animation-delay: calc(var(--i, 0) * 0.08s); }
|
|
146
|
+
.anim-scale { animation: fadeScale 0.4s ease-out both; animation-delay: calc(var(--i, 0) * 0.06s); }
|
|
147
|
+
|
|
148
|
+
@media (prefers-reduced-motion: reduce) {
|
|
149
|
+
*, *::before, *::after {
|
|
150
|
+
animation-duration: 0.01ms !important;
|
|
151
|
+
animation-delay: 0ms !important;
|
|
152
|
+
transition-duration: 0.01ms !important;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* ============ LAYOUT ============ */
|
|
157
|
+
.wrap {
|
|
158
|
+
max-width: 1200px;
|
|
159
|
+
margin: 0 auto;
|
|
160
|
+
padding: 0 40px;
|
|
161
|
+
position: relative;
|
|
162
|
+
z-index: 1;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
section { padding: 100px 0; }
|
|
166
|
+
|
|
167
|
+
/* ============ NAV ============ */
|
|
168
|
+
nav {
|
|
169
|
+
position: fixed;
|
|
170
|
+
top: 0;
|
|
171
|
+
left: 0;
|
|
172
|
+
right: 0;
|
|
173
|
+
z-index: 100;
|
|
174
|
+
padding: 0 40px;
|
|
175
|
+
backdrop-filter: blur(16px) saturate(1.4);
|
|
176
|
+
-webkit-backdrop-filter: blur(16px) saturate(1.4);
|
|
177
|
+
background: color-mix(in srgb, var(--bg) 80%, transparent);
|
|
178
|
+
border-bottom: 1px solid var(--border);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
nav .nav-inner {
|
|
182
|
+
max-width: 1200px;
|
|
183
|
+
margin: 0 auto;
|
|
184
|
+
display: flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
justify-content: space-between;
|
|
187
|
+
height: 60px;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.nav-logo {
|
|
191
|
+
font-weight: 800;
|
|
192
|
+
font-size: 20px;
|
|
193
|
+
letter-spacing: -0.5px;
|
|
194
|
+
display: flex;
|
|
195
|
+
align-items: center;
|
|
196
|
+
gap: 8px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.nav-logo .logo-mark {
|
|
200
|
+
width: 28px;
|
|
201
|
+
height: 28px;
|
|
202
|
+
border-radius: 7px;
|
|
203
|
+
background: linear-gradient(135deg, var(--cyan), var(--purple));
|
|
204
|
+
display: flex;
|
|
205
|
+
align-items: center;
|
|
206
|
+
justify-content: center;
|
|
207
|
+
font-size: 14px;
|
|
208
|
+
font-weight: 700;
|
|
209
|
+
color: white;
|
|
210
|
+
font-family: var(--font-mono);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.nav-links {
|
|
214
|
+
display: flex;
|
|
215
|
+
gap: 8px;
|
|
216
|
+
list-style: none;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.nav-links a {
|
|
220
|
+
font-size: 13px;
|
|
221
|
+
font-weight: 500;
|
|
222
|
+
color: var(--text-dim);
|
|
223
|
+
text-decoration: none;
|
|
224
|
+
padding: 6px 14px;
|
|
225
|
+
border-radius: 6px;
|
|
226
|
+
transition: all 0.2s;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.nav-links a:hover { color: var(--text); background: var(--border); }
|
|
230
|
+
.nav-links a.active { color: var(--cyan-bright); }
|
|
231
|
+
|
|
232
|
+
.nav-cta {
|
|
233
|
+
font-size: 13px;
|
|
234
|
+
font-weight: 600;
|
|
235
|
+
color: var(--bg) !important;
|
|
236
|
+
background: linear-gradient(135deg, var(--cyan), var(--cyan-bright));
|
|
237
|
+
padding: 8px 20px !important;
|
|
238
|
+
border-radius: 8px !important;
|
|
239
|
+
transition: all 0.2s !important;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.nav-cta:hover {
|
|
243
|
+
opacity: 0.9;
|
|
244
|
+
transform: translateY(-1px);
|
|
245
|
+
color: var(--bg) !important;
|
|
246
|
+
background: linear-gradient(135deg, var(--cyan), var(--cyan-bright)) !important;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* ============ HERO ============ */
|
|
250
|
+
.hero {
|
|
251
|
+
padding-top: 160px;
|
|
252
|
+
padding-bottom: 80px;
|
|
253
|
+
text-align: center;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.hero-badge {
|
|
257
|
+
display: inline-flex;
|
|
258
|
+
align-items: center;
|
|
259
|
+
gap: 8px;
|
|
260
|
+
padding: 6px 16px;
|
|
261
|
+
border-radius: 100px;
|
|
262
|
+
background: var(--cyan-dim);
|
|
263
|
+
border: 1px solid color-mix(in srgb, var(--cyan) 30%, transparent);
|
|
264
|
+
font-family: var(--font-mono);
|
|
265
|
+
font-size: 12px;
|
|
266
|
+
font-weight: 500;
|
|
267
|
+
color: var(--cyan-bright);
|
|
268
|
+
margin-bottom: 32px;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.hero-badge .dot {
|
|
272
|
+
width: 6px;
|
|
273
|
+
height: 6px;
|
|
274
|
+
border-radius: 50%;
|
|
275
|
+
background: var(--cyan-bright);
|
|
276
|
+
animation: pulse-glow 2s ease-in-out infinite;
|
|
277
|
+
box-shadow: 0 0 6px var(--cyan);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.hero h1 {
|
|
281
|
+
font-size: clamp(40px, 6vw, 72px);
|
|
282
|
+
font-weight: 800;
|
|
283
|
+
letter-spacing: -2px;
|
|
284
|
+
line-height: 1.05;
|
|
285
|
+
margin-bottom: 24px;
|
|
286
|
+
text-wrap: balance;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.hero h1 .gradient-text {
|
|
290
|
+
background: linear-gradient(135deg, var(--cyan-bright), var(--purple-bright), var(--amber-bright));
|
|
291
|
+
background-size: 200% 200%;
|
|
292
|
+
-webkit-background-clip: text;
|
|
293
|
+
-webkit-text-fill-color: transparent;
|
|
294
|
+
background-clip: text;
|
|
295
|
+
animation: gradient-shift 4s ease-in-out infinite;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.hero-sub {
|
|
299
|
+
font-size: clamp(16px, 2vw, 20px);
|
|
300
|
+
color: var(--text-dim);
|
|
301
|
+
max-width: 640px;
|
|
302
|
+
margin: 0 auto 48px;
|
|
303
|
+
font-weight: 400;
|
|
304
|
+
line-height: 1.6;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.hero-actions {
|
|
308
|
+
display: flex;
|
|
309
|
+
gap: 16px;
|
|
310
|
+
justify-content: center;
|
|
311
|
+
flex-wrap: wrap;
|
|
312
|
+
margin-bottom: 64px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.btn {
|
|
316
|
+
display: inline-flex;
|
|
317
|
+
align-items: center;
|
|
318
|
+
gap: 8px;
|
|
319
|
+
padding: 14px 28px;
|
|
320
|
+
border-radius: 12px;
|
|
321
|
+
font-size: 15px;
|
|
322
|
+
font-weight: 600;
|
|
323
|
+
text-decoration: none;
|
|
324
|
+
transition: all 0.25s;
|
|
325
|
+
cursor: pointer;
|
|
326
|
+
border: none;
|
|
327
|
+
font-family: var(--font-body);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.btn-primary {
|
|
331
|
+
background: linear-gradient(135deg, var(--cyan), color-mix(in srgb, var(--cyan) 80%, var(--purple)));
|
|
332
|
+
color: #000;
|
|
333
|
+
box-shadow: 0 4px 20px var(--cyan-dim), 0 0 60px rgba(6,182,212,0.08);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.btn-primary:hover {
|
|
337
|
+
transform: translateY(-2px);
|
|
338
|
+
box-shadow: 0 6px 30px var(--cyan-glow), 0 0 80px rgba(6,182,212,0.12);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.btn-secondary {
|
|
342
|
+
background: var(--surface2);
|
|
343
|
+
color: var(--text);
|
|
344
|
+
border: 1px solid var(--border-bright);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.btn-secondary:hover {
|
|
348
|
+
transform: translateY(-2px);
|
|
349
|
+
background: var(--surface-elevated);
|
|
350
|
+
border-color: var(--cyan);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* ============ TERMINAL ============ */
|
|
354
|
+
.terminal {
|
|
355
|
+
background: var(--surface);
|
|
356
|
+
border: 1px solid var(--border-bright);
|
|
357
|
+
border-radius: 16px;
|
|
358
|
+
max-width: 720px;
|
|
359
|
+
margin: 0 auto;
|
|
360
|
+
overflow: hidden;
|
|
361
|
+
text-align: left;
|
|
362
|
+
box-shadow:
|
|
363
|
+
0 0 0 1px var(--border),
|
|
364
|
+
0 20px 60px rgba(0, 0, 0, 0.4),
|
|
365
|
+
0 0 100px var(--cyan-dim);
|
|
366
|
+
animation: pulse-glow 3s ease-in-out infinite;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.terminal-bar {
|
|
370
|
+
display: flex;
|
|
371
|
+
align-items: center;
|
|
372
|
+
gap: 8px;
|
|
373
|
+
padding: 14px 20px;
|
|
374
|
+
border-bottom: 1px solid var(--border);
|
|
375
|
+
background: var(--surface2);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.terminal-dot {
|
|
379
|
+
width: 12px;
|
|
380
|
+
height: 12px;
|
|
381
|
+
border-radius: 50%;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.terminal-dot:nth-child(1) { background: #ff5f57; }
|
|
385
|
+
.terminal-dot:nth-child(2) { background: #febc2e; }
|
|
386
|
+
.terminal-dot:nth-child(3) { background: #28c840; }
|
|
387
|
+
|
|
388
|
+
.terminal-title {
|
|
389
|
+
flex: 1;
|
|
390
|
+
text-align: center;
|
|
391
|
+
font-family: var(--font-mono);
|
|
392
|
+
font-size: 12px;
|
|
393
|
+
color: var(--text-muted);
|
|
394
|
+
margin-right: 44px;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.terminal-body {
|
|
398
|
+
padding: 24px;
|
|
399
|
+
font-family: var(--font-mono);
|
|
400
|
+
font-size: 13px;
|
|
401
|
+
line-height: 2;
|
|
402
|
+
overflow-x: auto;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.terminal-body .line {
|
|
406
|
+
white-space: nowrap;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.t-prompt { color: var(--cyan-bright); }
|
|
410
|
+
.t-cmd { color: var(--text); }
|
|
411
|
+
.t-flag { color: var(--purple-bright); }
|
|
412
|
+
.t-str { color: var(--amber-bright); }
|
|
413
|
+
.t-comment { color: var(--text-muted); font-style: italic; }
|
|
414
|
+
.t-output { color: var(--text-dim); }
|
|
415
|
+
.t-key { color: var(--cyan-bright); }
|
|
416
|
+
.t-val { color: var(--green); }
|
|
417
|
+
.t-method { color: var(--purple-bright); }
|
|
418
|
+
.t-bracket { color: var(--text-dim); }
|
|
419
|
+
.t-kw { color: var(--rose); }
|
|
420
|
+
.t-fn { color: var(--amber-bright); }
|
|
421
|
+
|
|
422
|
+
/* ============ SECTION HEADERS ============ */
|
|
423
|
+
.sec-label {
|
|
424
|
+
font-family: var(--font-mono);
|
|
425
|
+
font-size: 12px;
|
|
426
|
+
font-weight: 600;
|
|
427
|
+
text-transform: uppercase;
|
|
428
|
+
letter-spacing: 2px;
|
|
429
|
+
color: var(--cyan);
|
|
430
|
+
margin-bottom: 16px;
|
|
431
|
+
display: flex;
|
|
432
|
+
align-items: center;
|
|
433
|
+
gap: 10px;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.sec-label::before {
|
|
437
|
+
content: '';
|
|
438
|
+
width: 20px;
|
|
439
|
+
height: 1px;
|
|
440
|
+
background: var(--cyan);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.sec-title {
|
|
444
|
+
font-size: clamp(28px, 4vw, 44px);
|
|
445
|
+
font-weight: 700;
|
|
446
|
+
letter-spacing: -1.5px;
|
|
447
|
+
margin-bottom: 16px;
|
|
448
|
+
text-wrap: balance;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.sec-desc {
|
|
452
|
+
font-size: 17px;
|
|
453
|
+
color: var(--text-dim);
|
|
454
|
+
max-width: 600px;
|
|
455
|
+
margin-bottom: 56px;
|
|
456
|
+
line-height: 1.7;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/* ============ FEATURES GRID ============ */
|
|
460
|
+
.features-grid {
|
|
461
|
+
display: grid;
|
|
462
|
+
grid-template-columns: repeat(3, 1fr);
|
|
463
|
+
gap: 16px;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.feature-card {
|
|
467
|
+
background: var(--surface);
|
|
468
|
+
border: 1px solid var(--border);
|
|
469
|
+
border-radius: 16px;
|
|
470
|
+
padding: 28px;
|
|
471
|
+
transition: all 0.3s;
|
|
472
|
+
position: relative;
|
|
473
|
+
overflow: hidden;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.feature-card::before {
|
|
477
|
+
content: '';
|
|
478
|
+
position: absolute;
|
|
479
|
+
top: 0;
|
|
480
|
+
left: 0;
|
|
481
|
+
right: 0;
|
|
482
|
+
height: 2px;
|
|
483
|
+
background: linear-gradient(90deg, var(--card-accent, var(--cyan)), transparent);
|
|
484
|
+
opacity: 0;
|
|
485
|
+
transition: opacity 0.3s;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.feature-card:hover {
|
|
489
|
+
border-color: var(--border-bright);
|
|
490
|
+
transform: translateY(-2px);
|
|
491
|
+
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.feature-card:hover::before { opacity: 1; }
|
|
495
|
+
|
|
496
|
+
.feature-icon {
|
|
497
|
+
width: 44px;
|
|
498
|
+
height: 44px;
|
|
499
|
+
border-radius: 12px;
|
|
500
|
+
display: flex;
|
|
501
|
+
align-items: center;
|
|
502
|
+
justify-content: center;
|
|
503
|
+
font-size: 20px;
|
|
504
|
+
margin-bottom: 18px;
|
|
505
|
+
background: var(--icon-bg, var(--cyan-dim));
|
|
506
|
+
color: var(--icon-color, var(--cyan-bright));
|
|
507
|
+
border: 1px solid color-mix(in srgb, var(--icon-color, var(--cyan)) 20%, transparent);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.feature-card h3 {
|
|
511
|
+
font-size: 16px;
|
|
512
|
+
font-weight: 600;
|
|
513
|
+
margin-bottom: 8px;
|
|
514
|
+
letter-spacing: -0.3px;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
.feature-card p {
|
|
518
|
+
font-size: 13px;
|
|
519
|
+
color: var(--text-dim);
|
|
520
|
+
line-height: 1.6;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
.feature-card code {
|
|
524
|
+
font-family: var(--font-mono);
|
|
525
|
+
font-size: 11px;
|
|
526
|
+
background: var(--cyan-dim);
|
|
527
|
+
color: var(--cyan-bright);
|
|
528
|
+
padding: 2px 6px;
|
|
529
|
+
border-radius: 4px;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* Feature card color variants */
|
|
533
|
+
.fc-cyan { --card-accent: var(--cyan); --icon-bg: var(--cyan-dim); --icon-color: var(--cyan-bright); }
|
|
534
|
+
.fc-purple { --card-accent: var(--purple); --icon-bg: var(--purple-dim); --icon-color: var(--purple-bright); }
|
|
535
|
+
.fc-amber { --card-accent: var(--amber); --icon-bg: var(--amber-dim); --icon-color: var(--amber-bright); }
|
|
536
|
+
.fc-green { --card-accent: var(--green); --icon-bg: var(--green-dim); --icon-color: var(--green); }
|
|
537
|
+
.fc-rose { --card-accent: var(--rose); --icon-bg: var(--rose-dim); --icon-color: var(--rose); }
|
|
538
|
+
|
|
539
|
+
/* ============ ARCHITECTURE ============ */
|
|
540
|
+
.arch-visual {
|
|
541
|
+
background: var(--surface);
|
|
542
|
+
border: 1px solid var(--border);
|
|
543
|
+
border-radius: 20px;
|
|
544
|
+
padding: 48px 40px;
|
|
545
|
+
position: relative;
|
|
546
|
+
overflow: hidden;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.arch-visual::before {
|
|
550
|
+
content: '';
|
|
551
|
+
position: absolute;
|
|
552
|
+
inset: 0;
|
|
553
|
+
background:
|
|
554
|
+
radial-gradient(ellipse at 50% 30%, var(--cyan-dim) 0%, transparent 60%),
|
|
555
|
+
radial-gradient(ellipse at 20% 80%, var(--purple-dim) 0%, transparent 40%);
|
|
556
|
+
pointer-events: none;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.arch-container-box {
|
|
560
|
+
position: relative;
|
|
561
|
+
border: 2px solid color-mix(in srgb, var(--cyan) 40%, transparent);
|
|
562
|
+
border-radius: 16px;
|
|
563
|
+
padding: 32px 24px 24px;
|
|
564
|
+
background: color-mix(in srgb, var(--surface) 90%, var(--cyan) 3%);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
.arch-container-label {
|
|
568
|
+
position: absolute;
|
|
569
|
+
top: -13px;
|
|
570
|
+
left: 24px;
|
|
571
|
+
background: var(--surface);
|
|
572
|
+
padding: 2px 14px;
|
|
573
|
+
font-family: var(--font-mono);
|
|
574
|
+
font-size: 13px;
|
|
575
|
+
font-weight: 600;
|
|
576
|
+
color: var(--cyan-bright);
|
|
577
|
+
border: 1px solid color-mix(in srgb, var(--cyan) 30%, transparent);
|
|
578
|
+
border-radius: 6px;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
.arch-row {
|
|
582
|
+
display: grid;
|
|
583
|
+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
584
|
+
gap: 12px;
|
|
585
|
+
margin-bottom: 16px;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
.arch-row:last-child { margin-bottom: 0; }
|
|
589
|
+
|
|
590
|
+
.arch-item {
|
|
591
|
+
background: var(--surface2);
|
|
592
|
+
border: 1px solid var(--border);
|
|
593
|
+
border-radius: 10px;
|
|
594
|
+
padding: 14px 16px;
|
|
595
|
+
text-align: center;
|
|
596
|
+
transition: all 0.2s;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.arch-item:hover {
|
|
600
|
+
border-color: var(--border-bright);
|
|
601
|
+
background: var(--surface-elevated);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.arch-item .arch-type {
|
|
605
|
+
font-family: var(--font-mono);
|
|
606
|
+
font-size: 9px;
|
|
607
|
+
font-weight: 600;
|
|
608
|
+
text-transform: uppercase;
|
|
609
|
+
letter-spacing: 1.5px;
|
|
610
|
+
margin-bottom: 6px;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
.arch-item .arch-name {
|
|
614
|
+
font-size: 13px;
|
|
615
|
+
font-weight: 600;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
.arch-item .arch-detail {
|
|
619
|
+
font-size: 11px;
|
|
620
|
+
color: var(--text-dim);
|
|
621
|
+
margin-top: 3px;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
.at-feature .arch-type { color: var(--cyan-bright); }
|
|
625
|
+
.at-client .arch-type { color: var(--purple-bright); }
|
|
626
|
+
.at-server .arch-type { color: var(--amber-bright); }
|
|
627
|
+
.at-cmd .arch-type { color: var(--green); }
|
|
628
|
+
.at-agent .arch-type { color: var(--rose); }
|
|
629
|
+
|
|
630
|
+
.arch-section-title {
|
|
631
|
+
font-family: var(--font-mono);
|
|
632
|
+
font-size: 10px;
|
|
633
|
+
font-weight: 600;
|
|
634
|
+
text-transform: uppercase;
|
|
635
|
+
letter-spacing: 1.5px;
|
|
636
|
+
color: var(--text-muted);
|
|
637
|
+
margin-bottom: 12px;
|
|
638
|
+
padding-bottom: 8px;
|
|
639
|
+
border-bottom: 1px solid var(--border);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
.arch-divider {
|
|
643
|
+
display: flex;
|
|
644
|
+
align-items: center;
|
|
645
|
+
gap: 12px;
|
|
646
|
+
margin: 20px 0;
|
|
647
|
+
font-family: var(--font-mono);
|
|
648
|
+
font-size: 11px;
|
|
649
|
+
color: var(--text-muted);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.arch-divider::before,
|
|
653
|
+
.arch-divider::after {
|
|
654
|
+
content: '';
|
|
655
|
+
flex: 1;
|
|
656
|
+
height: 1px;
|
|
657
|
+
background: var(--border);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/* ============ CODE EXAMPLES ============ */
|
|
661
|
+
.code-tabs {
|
|
662
|
+
display: flex;
|
|
663
|
+
gap: 4px;
|
|
664
|
+
margin-bottom: 0;
|
|
665
|
+
padding: 0 4px;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
.code-tab {
|
|
669
|
+
font-family: var(--font-mono);
|
|
670
|
+
font-size: 12px;
|
|
671
|
+
font-weight: 500;
|
|
672
|
+
color: var(--text-muted);
|
|
673
|
+
background: transparent;
|
|
674
|
+
border: none;
|
|
675
|
+
padding: 10px 18px;
|
|
676
|
+
border-radius: 10px 10px 0 0;
|
|
677
|
+
cursor: pointer;
|
|
678
|
+
transition: all 0.2s;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
.code-tab:hover { color: var(--text-dim); }
|
|
682
|
+
.code-tab.active {
|
|
683
|
+
color: var(--text);
|
|
684
|
+
background: var(--surface);
|
|
685
|
+
border: 1px solid var(--border);
|
|
686
|
+
border-bottom-color: var(--surface);
|
|
687
|
+
position: relative;
|
|
688
|
+
z-index: 2;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.code-panels {
|
|
692
|
+
background: var(--surface);
|
|
693
|
+
border: 1px solid var(--border);
|
|
694
|
+
border-radius: 0 16px 16px 16px;
|
|
695
|
+
overflow: hidden;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
.code-panel {
|
|
699
|
+
display: none;
|
|
700
|
+
padding: 28px;
|
|
701
|
+
font-family: var(--font-mono);
|
|
702
|
+
font-size: 13px;
|
|
703
|
+
line-height: 1.9;
|
|
704
|
+
overflow-x: auto;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
.code-panel.active { display: block; }
|
|
708
|
+
|
|
709
|
+
.code-panel .line {
|
|
710
|
+
white-space: pre;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/* ============ STATS ROW ============ */
|
|
714
|
+
.stats-row {
|
|
715
|
+
display: grid;
|
|
716
|
+
grid-template-columns: repeat(4, 1fr);
|
|
717
|
+
gap: 24px;
|
|
718
|
+
padding: 64px 0;
|
|
719
|
+
border-top: 1px solid var(--border);
|
|
720
|
+
border-bottom: 1px solid var(--border);
|
|
721
|
+
margin: 0;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.stat {
|
|
725
|
+
text-align: center;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
.stat-value {
|
|
729
|
+
font-size: 40px;
|
|
730
|
+
font-weight: 800;
|
|
731
|
+
letter-spacing: -2px;
|
|
732
|
+
line-height: 1;
|
|
733
|
+
margin-bottom: 8px;
|
|
734
|
+
font-variant-numeric: tabular-nums;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
.stat-value .accent { color: var(--cyan-bright); }
|
|
738
|
+
|
|
739
|
+
.stat-label {
|
|
740
|
+
font-size: 13px;
|
|
741
|
+
color: var(--text-dim);
|
|
742
|
+
font-weight: 500;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/* ============ CLI SHOWCASE ============ */
|
|
746
|
+
.cli-grid {
|
|
747
|
+
display: grid;
|
|
748
|
+
grid-template-columns: 1fr 1fr;
|
|
749
|
+
gap: 20px;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.cli-card {
|
|
753
|
+
background: var(--surface);
|
|
754
|
+
border: 1px solid var(--border);
|
|
755
|
+
border-radius: 14px;
|
|
756
|
+
padding: 24px;
|
|
757
|
+
transition: all 0.25s;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
.cli-card:hover {
|
|
761
|
+
border-color: var(--border-bright);
|
|
762
|
+
transform: translateY(-1px);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.cli-cmd {
|
|
766
|
+
font-family: var(--font-mono);
|
|
767
|
+
font-size: 14px;
|
|
768
|
+
font-weight: 600;
|
|
769
|
+
color: var(--cyan-bright);
|
|
770
|
+
margin-bottom: 8px;
|
|
771
|
+
display: flex;
|
|
772
|
+
align-items: center;
|
|
773
|
+
gap: 8px;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
.cli-cmd::before {
|
|
777
|
+
content: '$';
|
|
778
|
+
color: var(--text-muted);
|
|
779
|
+
font-weight: 400;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
.cli-desc {
|
|
783
|
+
font-size: 13px;
|
|
784
|
+
color: var(--text-dim);
|
|
785
|
+
line-height: 1.6;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
/* ============ CTA ============ */
|
|
789
|
+
.cta {
|
|
790
|
+
text-align: center;
|
|
791
|
+
padding: 120px 0;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
.cta-box {
|
|
795
|
+
background: var(--surface);
|
|
796
|
+
border: 1px solid var(--border-bright);
|
|
797
|
+
border-radius: 24px;
|
|
798
|
+
padding: 64px 48px;
|
|
799
|
+
position: relative;
|
|
800
|
+
overflow: hidden;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
.cta-box::before {
|
|
804
|
+
content: '';
|
|
805
|
+
position: absolute;
|
|
806
|
+
inset: 0;
|
|
807
|
+
background:
|
|
808
|
+
radial-gradient(ellipse at 50% 0%, var(--cyan-glow) 0%, transparent 50%),
|
|
809
|
+
radial-gradient(ellipse at 50% 100%, var(--purple-dim) 0%, transparent 50%);
|
|
810
|
+
pointer-events: none;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.cta h2 {
|
|
814
|
+
font-size: clamp(28px, 4vw, 40px);
|
|
815
|
+
font-weight: 700;
|
|
816
|
+
letter-spacing: -1px;
|
|
817
|
+
margin-bottom: 16px;
|
|
818
|
+
position: relative;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
.cta p {
|
|
822
|
+
font-size: 17px;
|
|
823
|
+
color: var(--text-dim);
|
|
824
|
+
margin-bottom: 36px;
|
|
825
|
+
position: relative;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.cta .hero-actions { position: relative; }
|
|
829
|
+
|
|
830
|
+
.install-cmd {
|
|
831
|
+
display: inline-flex;
|
|
832
|
+
align-items: center;
|
|
833
|
+
gap: 12px;
|
|
834
|
+
background: var(--surface2);
|
|
835
|
+
border: 1px solid var(--border);
|
|
836
|
+
border-radius: 10px;
|
|
837
|
+
padding: 14px 24px;
|
|
838
|
+
font-family: var(--font-mono);
|
|
839
|
+
font-size: 14px;
|
|
840
|
+
color: var(--text-dim);
|
|
841
|
+
margin-bottom: 28px;
|
|
842
|
+
position: relative;
|
|
843
|
+
cursor: pointer;
|
|
844
|
+
transition: all 0.2s;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
.install-cmd:hover {
|
|
848
|
+
border-color: var(--cyan);
|
|
849
|
+
color: var(--text);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
.install-cmd .t-prompt { margin-right: 4px; }
|
|
853
|
+
|
|
854
|
+
.copy-hint {
|
|
855
|
+
font-size: 10px;
|
|
856
|
+
color: var(--text-muted);
|
|
857
|
+
text-transform: uppercase;
|
|
858
|
+
letter-spacing: 1px;
|
|
859
|
+
font-weight: 500;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
/* ============ FOOTER ============ */
|
|
863
|
+
footer {
|
|
864
|
+
border-top: 1px solid var(--border);
|
|
865
|
+
padding: 40px 0;
|
|
866
|
+
text-align: center;
|
|
867
|
+
font-size: 13px;
|
|
868
|
+
color: var(--text-muted);
|
|
869
|
+
position: relative;
|
|
870
|
+
z-index: 1;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
footer a {
|
|
874
|
+
color: var(--text-dim);
|
|
875
|
+
text-decoration: none;
|
|
876
|
+
transition: color 0.2s;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
footer a:hover { color: var(--cyan-bright); }
|
|
880
|
+
|
|
881
|
+
/* ============ PHILOSOPHY CARDS ============ */
|
|
882
|
+
.philosophy {
|
|
883
|
+
display: grid;
|
|
884
|
+
grid-template-columns: repeat(3, 1fr);
|
|
885
|
+
gap: 24px;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
.phil-card {
|
|
889
|
+
padding: 32px;
|
|
890
|
+
border-radius: 16px;
|
|
891
|
+
border: 1px solid var(--border);
|
|
892
|
+
background: var(--surface);
|
|
893
|
+
position: relative;
|
|
894
|
+
overflow: hidden;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
.phil-card::before {
|
|
898
|
+
content: '';
|
|
899
|
+
position: absolute;
|
|
900
|
+
top: 0;
|
|
901
|
+
left: 0;
|
|
902
|
+
width: 100%;
|
|
903
|
+
height: 3px;
|
|
904
|
+
background: var(--phil-accent, var(--cyan));
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
.phil-num {
|
|
908
|
+
font-family: var(--font-mono);
|
|
909
|
+
font-size: 48px;
|
|
910
|
+
font-weight: 800;
|
|
911
|
+
color: var(--border-bright);
|
|
912
|
+
margin-bottom: 12px;
|
|
913
|
+
line-height: 1;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
.phil-card h3 {
|
|
917
|
+
font-size: 18px;
|
|
918
|
+
font-weight: 600;
|
|
919
|
+
margin-bottom: 10px;
|
|
920
|
+
letter-spacing: -0.3px;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
.phil-card p {
|
|
924
|
+
font-size: 14px;
|
|
925
|
+
color: var(--text-dim);
|
|
926
|
+
line-height: 1.6;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
/* ============ RESPONSIVE ============ */
|
|
930
|
+
@media (max-width: 900px) {
|
|
931
|
+
.wrap { padding: 0 20px; }
|
|
932
|
+
nav { padding: 0 20px; }
|
|
933
|
+
.features-grid { grid-template-columns: 1fr 1fr; }
|
|
934
|
+
.cli-grid { grid-template-columns: 1fr; }
|
|
935
|
+
.stats-row { grid-template-columns: repeat(2, 1fr); gap: 32px; }
|
|
936
|
+
.philosophy { grid-template-columns: 1fr; }
|
|
937
|
+
.nav-links { display: none; }
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
@media (max-width: 600px) {
|
|
941
|
+
.features-grid { grid-template-columns: 1fr; }
|
|
942
|
+
.stats-row { grid-template-columns: 1fr; gap: 40px; }
|
|
943
|
+
section { padding: 60px 0; }
|
|
944
|
+
.hero { padding-top: 120px; }
|
|
945
|
+
.cta-box { padding: 40px 24px; }
|
|
946
|
+
.arch-visual { padding: 32px 20px; }
|
|
947
|
+
.install-cmd { font-size: 11px; padding: 12px 16px; }
|
|
948
|
+
}
|
|
949
|
+
</style>
|
|
950
|
+
</head>
|
|
951
|
+
<body>
|
|
952
|
+
|
|
953
|
+
<!-- ===== NAV ===== -->
|
|
954
|
+
<nav>
|
|
955
|
+
<div class="nav-inner">
|
|
956
|
+
<div class="nav-logo">
|
|
957
|
+
<div class="logo-mark">L</div>
|
|
958
|
+
luca
|
|
959
|
+
</div>
|
|
960
|
+
<ul class="nav-links" id="nav">
|
|
961
|
+
<li><a href="#why">Why Luca</a></li>
|
|
962
|
+
<li><a href="#architecture">Architecture</a></li>
|
|
963
|
+
<li><a href="#code">Code</a></li>
|
|
964
|
+
<li><a href="#cli">CLI</a></li>
|
|
965
|
+
<li><a href="#get-started" class="nav-cta">Install</a></li>
|
|
966
|
+
</ul>
|
|
967
|
+
</div>
|
|
968
|
+
</nav>
|
|
969
|
+
|
|
970
|
+
<!-- ===== HERO ===== -->
|
|
971
|
+
<section class="hero" id="hero">
|
|
972
|
+
<div class="wrap">
|
|
973
|
+
<div class="hero-badge anim" style="--i:0">
|
|
974
|
+
<span class="dot"></span>
|
|
975
|
+
Single Binary · Agent-Native
|
|
976
|
+
</div>
|
|
977
|
+
<h1 class="anim" style="--i:1">
|
|
978
|
+
Lightweight Universal<br>
|
|
979
|
+
<span class="gradient-text">Conversational Architecture</span>
|
|
980
|
+
</h1>
|
|
981
|
+
<p class="hero-sub anim" style="--i:2">
|
|
982
|
+
A universal TypeScript framework you can talk to.
|
|
983
|
+
Orchestrate a fleet of self-improving agents across servers, browsers, and GPU instances through one observable bus.
|
|
984
|
+
</p>
|
|
985
|
+
<div class="hero-actions anim" style="--i:3">
|
|
986
|
+
<a href="#get-started" class="btn btn-primary">Install Luca</a>
|
|
987
|
+
<a href="#why" class="btn btn-secondary">See Why</a>
|
|
988
|
+
</div>
|
|
989
|
+
|
|
990
|
+
<div class="terminal anim" style="--i:4">
|
|
991
|
+
<div class="terminal-bar">
|
|
992
|
+
<div class="terminal-dot"></div>
|
|
993
|
+
<div class="terminal-dot"></div>
|
|
994
|
+
<div class="terminal-dot"></div>
|
|
995
|
+
<div class="terminal-title">luca — agent-native</div>
|
|
996
|
+
</div>
|
|
997
|
+
<div class="terminal-body">
|
|
998
|
+
<div class="line"><span class="t-comment">// memory lives in a queryable db backed by markdown</span></div>
|
|
999
|
+
<div class="line"><span class="t-comment">// <a href="https://contentbase.soederpop.com" target="_blank" rel="noopener" style="color:var(--cyan-bright);text-decoration:underline;font-style:normal">contentbase.soederpop.com</a></span></div>
|
|
1000
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">docs</span> = container.<span class="t-method">feature</span><span class="t-bracket">(</span><span class="t-str">'contentDb'</span>, { <span class="t-key">rootPath</span>: <span class="t-str">'docs'</span> }<span class="t-bracket">)</span></div>
|
|
1001
|
+
<div class="line"> </div>
|
|
1002
|
+
<div class="line"><span class="t-comment">// the central bus for your agent fleet</span></div>
|
|
1003
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">mgr</span> = container.<span class="t-method">feature</span><span class="t-bracket">(</span><span class="t-str">'assistantManager'</span><span class="t-bracket">)</span></div>
|
|
1004
|
+
<div class="line">mgr.<span class="t-method">add</span><span class="t-bracket">(</span><span class="t-str">'researcher'</span>, { <span class="t-key">use</span>: [<span class="t-str">'browserUse'</span>, docs] }<span class="t-bracket">)</span></div>
|
|
1005
|
+
<div class="line">mgr.<span class="t-method">add</span><span class="t-bracket">(</span><span class="t-str">'coder'</span>, { <span class="t-key">use</span>: [<span class="t-str">'git'</span>, <span class="t-str">'proc'</span>, <span class="t-str">'fs'</span>, docs] }<span class="t-bracket">)</span></div>
|
|
1006
|
+
<div class="line"> </div>
|
|
1007
|
+
<div class="line"><span class="t-comment">// query tasks, assign to the right agent</span></div>
|
|
1008
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">tasks</span> = <span class="t-kw">await</span> docs.<span class="t-method">query</span>(docs.models.<span class="t-key">Task</span>).<span class="t-method">where</span>(<span class="t-str">'status'</span>, <span class="t-str">'todo'</span>)</div>
|
|
1009
|
+
<div class="line">tasks.<span class="t-method">forEach</span>(<span class="t-cmd">task</span> <span class="t-kw">=></span> mgr.<span class="t-method">assign</span>(<span class="t-str">'coder'</span>, task))</div>
|
|
1010
|
+
<div class="line"> </div>
|
|
1011
|
+
<div class="line"><span class="t-kw">await</span> mgr.<span class="t-method">startAll</span><span class="t-bracket">()</span> <span class="t-comment">// a swarm, not a chatbot</span></div>
|
|
1012
|
+
</div>
|
|
1013
|
+
</div>
|
|
1014
|
+
</div>
|
|
1015
|
+
</section>
|
|
1016
|
+
|
|
1017
|
+
<!-- ===== STATS ===== -->
|
|
1018
|
+
<div class="wrap">
|
|
1019
|
+
<div class="stats-row">
|
|
1020
|
+
<div class="stat anim-scale" style="--i:0">
|
|
1021
|
+
<div class="stat-value"><span class="accent">0</span></div>
|
|
1022
|
+
<div class="stat-label">npm install required</div>
|
|
1023
|
+
</div>
|
|
1024
|
+
<div class="stat anim-scale" style="--i:1">
|
|
1025
|
+
<div class="stat-value">1</div>
|
|
1026
|
+
<div class="stat-label">Binary — In and Out</div>
|
|
1027
|
+
</div>
|
|
1028
|
+
<div class="stat anim-scale" style="--i:2">
|
|
1029
|
+
<div class="stat-value">20<span class="accent">+</span></div>
|
|
1030
|
+
<div class="stat-label">Built-in Helpers</div>
|
|
1031
|
+
</div>
|
|
1032
|
+
<div class="stat anim-scale" style="--i:3">
|
|
1033
|
+
<div class="stat-value"><span class="accent">∞</span></div>
|
|
1034
|
+
<div class="stat-label">Agent Toolkits via use()</div>
|
|
1035
|
+
</div>
|
|
1036
|
+
</div>
|
|
1037
|
+
</div>
|
|
1038
|
+
|
|
1039
|
+
<!-- ===== WHY LUCA / PHILOSOPHY ===== -->
|
|
1040
|
+
<section id="why">
|
|
1041
|
+
<div class="wrap">
|
|
1042
|
+
<div class="sec-label anim" style="--i:0">Why Luca</div>
|
|
1043
|
+
<h2 class="sec-title anim" style="--i:1">Three Ideas That<br>Change Everything</h2>
|
|
1044
|
+
<p class="sec-desc anim" style="--i:2">
|
|
1045
|
+
AI agents today either generate ad-hoc code or fight frameworks that weren't designed for them.
|
|
1046
|
+
Luca assistants build applications using the same components they are made from. They don't just write the code — they live in its runtime.
|
|
1047
|
+
</p>
|
|
1048
|
+
|
|
1049
|
+
<div class="philosophy">
|
|
1050
|
+
<div class="phil-card anim" style="--i:3; --phil-accent: var(--cyan);">
|
|
1051
|
+
<div class="phil-num">01</div>
|
|
1052
|
+
<h3>One Introspectable Container</h3>
|
|
1053
|
+
<p>Every Luca app has a single container — features, clients, servers, commands, state, events. Every component describes itself. The human reads the same docs the agent reads. There is one way to do things.</p>
|
|
1054
|
+
</div>
|
|
1055
|
+
<div class="phil-card anim" style="--i:4; --phil-accent: var(--purple);">
|
|
1056
|
+
<div class="phil-num">02</div>
|
|
1057
|
+
<h3>Single Binary In, Single Binary Out</h3>
|
|
1058
|
+
<p>Luca ships as a standalone binary. No runtime dependencies, no package manager. Use it to build your project, then compile your project into its own binary with your commands, features, and assistants baked in.</p>
|
|
1059
|
+
</div>
|
|
1060
|
+
<div class="phil-card anim" style="--i:5; --phil-accent: var(--amber);">
|
|
1061
|
+
<div class="phil-num">03</div>
|
|
1062
|
+
<h3>Assistants That Swarm</h3>
|
|
1063
|
+
<p>Each assistant can <code style="font-size:12px; background:var(--cyan-dim); color:var(--cyan-bright); padding:1px 5px; border-radius:3px; font-family:var(--font-mono);">use()</code> any module and inherit its tools. The <code style="font-size:12px; background:var(--cyan-dim); color:var(--cyan-bright); padding:1px 5px; border-radius:3px; font-family:var(--font-mono);">assistantManager</code> orchestrates many — across servers, browsers, and GPU instances — through one observable bus.</p>
|
|
1064
|
+
</div>
|
|
1065
|
+
</div>
|
|
1066
|
+
</div>
|
|
1067
|
+
</section>
|
|
1068
|
+
|
|
1069
|
+
<!-- ===== FEATURES ===== -->
|
|
1070
|
+
<section id="features">
|
|
1071
|
+
<div class="wrap">
|
|
1072
|
+
<div class="sec-label anim" style="--i:0">Capabilities</div>
|
|
1073
|
+
<h2 class="sec-title anim" style="--i:1">Everything an Agent<br>Needs to Operate</h2>
|
|
1074
|
+
<p class="sec-desc anim" style="--i:2">
|
|
1075
|
+
No imports beyond the container. File I/O, HTTP, databases, git, browser automation, terminal UI, encryption — all typed, all discoverable at runtime.
|
|
1076
|
+
</p>
|
|
1077
|
+
|
|
1078
|
+
<div class="features-grid">
|
|
1079
|
+
<div class="feature-card fc-rose anim" style="--i:3">
|
|
1080
|
+
<div class="feature-icon" style="--icon-bg: var(--rose-dim); --icon-color: var(--rose);">
|
|
1081
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M12 3c4.97 0 9 3.58 9 8s-4.03 8-9 8c-1.5 0-2.91-.35-4.13-.97L3 19l1.39-4.17C3.5 13.67 3 12.38 3 11c0-4.42 4.03-8 9-8z"/></svg>
|
|
1082
|
+
</div>
|
|
1083
|
+
<h3>Assistant Manager</h3>
|
|
1084
|
+
<p>The <code>assistantManager</code> is a central observable bus for your agent fleet. Spin up specialized assistants, route messages between them, watch their state — one coordinator for the whole swarm.</p>
|
|
1085
|
+
</div>
|
|
1086
|
+
|
|
1087
|
+
<div class="feature-card fc-purple anim" style="--i:4">
|
|
1088
|
+
<div class="feature-icon" style="--icon-bg: var(--purple-dim); --icon-color: var(--purple-bright);">
|
|
1089
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="2" y="6" width="18" height="12" rx="2"/><path d="M6 10l4 3-4 3"/><path d="M12 16h4"/></svg>
|
|
1090
|
+
</div>
|
|
1091
|
+
<h3>Binary Compiler</h3>
|
|
1092
|
+
<p>Compile your project into a standalone executable. No node, no bun, no npm on the target machine. Your users download one file and run it.</p>
|
|
1093
|
+
</div>
|
|
1094
|
+
|
|
1095
|
+
<div class="feature-card fc-cyan anim" style="--i:5">
|
|
1096
|
+
<div class="feature-icon">
|
|
1097
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M4 6h14M4 11h14M4 16h8"/></svg>
|
|
1098
|
+
</div>
|
|
1099
|
+
<h3>File System & Grep</h3>
|
|
1100
|
+
<p>Read, write, watch, and search your project. <code>fs</code>, <code>fileManager</code>, and <code>grep</code> give your agent full project awareness.</p>
|
|
1101
|
+
</div>
|
|
1102
|
+
|
|
1103
|
+
<div class="feature-card fc-green anim" style="--i:6">
|
|
1104
|
+
<div class="feature-icon" style="--icon-bg: var(--green-dim); --icon-color: var(--green);">
|
|
1105
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M6 3v18M6 8h9a3 3 0 010 6H6"/></svg>
|
|
1106
|
+
</div>
|
|
1107
|
+
<h3>Git Integration</h3>
|
|
1108
|
+
<p>Branch info, status, diff, log. The container knows your repo. The agent knows your repo.</p>
|
|
1109
|
+
</div>
|
|
1110
|
+
|
|
1111
|
+
<div class="feature-card fc-amber anim" style="--i:7">
|
|
1112
|
+
<div class="feature-icon" style="--icon-bg: var(--amber-dim); --icon-color: var(--amber-bright);">
|
|
1113
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M3 7l9-4 9 4-9 4-9-4zM3 12l9 4 9-4M3 17l9 4 9-4"/></svg>
|
|
1114
|
+
</div>
|
|
1115
|
+
<h3>Servers & Clients</h3>
|
|
1116
|
+
<p>Express, WebSocket, IPC, MCP. REST and WebSocket clients. Build APIs and real-time systems from the same container.</p>
|
|
1117
|
+
</div>
|
|
1118
|
+
|
|
1119
|
+
<div class="feature-card fc-purple anim" style="--i:8">
|
|
1120
|
+
<div class="feature-icon" style="--icon-bg: var(--purple-dim); --icon-color: var(--purple-bright);">
|
|
1121
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="3" y="3" width="16" height="16" rx="3"/><path d="M7 8h8M7 11h5M7 14h6"/></svg>
|
|
1122
|
+
</div>
|
|
1123
|
+
<h3>Process & VM</h3>
|
|
1124
|
+
<p>Shell commands with <code>proc.exec()</code>. Sandboxed code execution in the VM. Docker, SSH, and RunPod for remote compute.</p>
|
|
1125
|
+
</div>
|
|
1126
|
+
|
|
1127
|
+
<div class="feature-card fc-cyan anim" style="--i:9">
|
|
1128
|
+
<div class="feature-icon">
|
|
1129
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><path d="M11 7v4l3 3"/></svg>
|
|
1130
|
+
</div>
|
|
1131
|
+
<h3>Observable State</h3>
|
|
1132
|
+
<p>Every helper has reactive state and an event bus. The assistant can watch for changes and act autonomously across the entire system.</p>
|
|
1133
|
+
</div>
|
|
1134
|
+
|
|
1135
|
+
<div class="feature-card fc-amber anim" style="--i:10">
|
|
1136
|
+
<div class="feature-icon" style="--icon-bg: var(--amber-dim); --icon-color: var(--amber-bright);">
|
|
1137
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M4 6h14M4 11h14M4 16h14"/><circle cx="8" cy="6" r="1.5" fill="currentColor"/><circle cx="14" cy="11" r="1.5" fill="currentColor"/><circle cx="10" cy="16" r="1.5" fill="currentColor"/></svg>
|
|
1138
|
+
</div>
|
|
1139
|
+
<h3>Self-Documenting</h3>
|
|
1140
|
+
<p>Every component carries introspection metadata — method signatures, options, events, state shape. <code>luca describe</code> and agents use the same data.</p>
|
|
1141
|
+
</div>
|
|
1142
|
+
|
|
1143
|
+
<div class="feature-card fc-green anim" style="--i:11">
|
|
1144
|
+
<div class="feature-icon" style="--icon-bg: var(--green-dim); --icon-color: var(--green);">
|
|
1145
|
+
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M11 3a8 8 0 018 8 8 8 0 01-8 8 8 8 0 01-8-8 8 8 0 018-8z"/><path d="M3 11h18M11 3c2.5 2.8 4 5.8 4 8s-1.5 5.2-4 8c-2.5-2.8-4-5.8-4-8s1.5-5.2 4-8z"/></svg>
|
|
1146
|
+
</div>
|
|
1147
|
+
<h3>Distributed & Cross-Runtime</h3>
|
|
1148
|
+
<p>Assistants run anywhere — server, browser, RunPod GPU. They talk over WebSocket, IPC, or REST. Same container pattern on Node and in the browser via ESM.</p>
|
|
1149
|
+
</div>
|
|
1150
|
+
</div>
|
|
1151
|
+
</div>
|
|
1152
|
+
</section>
|
|
1153
|
+
|
|
1154
|
+
<!-- ===== ARCHITECTURE ===== -->
|
|
1155
|
+
<section id="architecture">
|
|
1156
|
+
<div class="wrap">
|
|
1157
|
+
<div class="sec-label anim" style="--i:0">Architecture</div>
|
|
1158
|
+
<h2 class="sec-title anim" style="--i:1">One Bus.<br>Agents Everywhere.</h2>
|
|
1159
|
+
<p class="sec-desc anim" style="--i:2">
|
|
1160
|
+
The <code style="font-size:14px; background:var(--cyan-dim); color:var(--cyan-bright); padding:2px 8px; border-radius:4px; font-family:var(--font-mono);">assistantManager</code> is the observable hub. Assistants discover their tools from the container, talk to each other across transports, and run on any machine.
|
|
1161
|
+
</p>
|
|
1162
|
+
|
|
1163
|
+
<div class="arch-visual anim" style="--i:3">
|
|
1164
|
+
<div class="arch-container-box">
|
|
1165
|
+
<div class="arch-container-label">container</div>
|
|
1166
|
+
|
|
1167
|
+
<div class="arch-section-title">Assistant Manager — Observable Orchestration Bus</div>
|
|
1168
|
+
<div class="arch-row">
|
|
1169
|
+
<div class="arch-item at-agent">
|
|
1170
|
+
<div class="arch-type">Agent</div>
|
|
1171
|
+
<div class="arch-name">researcher</div>
|
|
1172
|
+
<div class="arch-detail">browserUse, fs · local</div>
|
|
1173
|
+
</div>
|
|
1174
|
+
<div class="arch-item at-agent">
|
|
1175
|
+
<div class="arch-type">Agent</div>
|
|
1176
|
+
<div class="arch-name">coder</div>
|
|
1177
|
+
<div class="arch-detail">git, proc, fs · local</div>
|
|
1178
|
+
</div>
|
|
1179
|
+
<div class="arch-item at-agent">
|
|
1180
|
+
<div class="arch-type">Agent</div>
|
|
1181
|
+
<div class="arch-name">ui-agent</div>
|
|
1182
|
+
<div class="arch-detail">dom, state · browser</div>
|
|
1183
|
+
</div>
|
|
1184
|
+
<div class="arch-item at-agent">
|
|
1185
|
+
<div class="arch-type">Agent</div>
|
|
1186
|
+
<div class="arch-name">gpu-worker</div>
|
|
1187
|
+
<div class="arch-detail">runpod, cuda · remote</div>
|
|
1188
|
+
</div>
|
|
1189
|
+
</div>
|
|
1190
|
+
|
|
1191
|
+
<div class="arch-divider">connected via WebSocket · IPC · REST</div>
|
|
1192
|
+
|
|
1193
|
+
<div class="arch-section-title">Container Registries</div>
|
|
1194
|
+
<div class="arch-row">
|
|
1195
|
+
<div class="arch-item at-feature">
|
|
1196
|
+
<div class="arch-type">Features</div>
|
|
1197
|
+
<div class="arch-name">helpers</div>
|
|
1198
|
+
<div class="arch-detail">fs, git, proc, vm, grep, sqlite...</div>
|
|
1199
|
+
</div>
|
|
1200
|
+
<div class="arch-item at-client">
|
|
1201
|
+
<div class="arch-type">Clients</div>
|
|
1202
|
+
<div class="arch-name">transports</div>
|
|
1203
|
+
<div class="arch-detail">rest, websocket</div>
|
|
1204
|
+
</div>
|
|
1205
|
+
<div class="arch-item at-server">
|
|
1206
|
+
<div class="arch-type">Servers</div>
|
|
1207
|
+
<div class="arch-name">infrastructure</div>
|
|
1208
|
+
<div class="arch-detail">express, websocket, ipc, mcp</div>
|
|
1209
|
+
</div>
|
|
1210
|
+
<div class="arch-item at-cmd">
|
|
1211
|
+
<div class="arch-type">Commands</div>
|
|
1212
|
+
<div class="arch-name">CLI</div>
|
|
1213
|
+
<div class="arch-detail">file-based discovery</div>
|
|
1214
|
+
</div>
|
|
1215
|
+
</div>
|
|
1216
|
+
|
|
1217
|
+
<div class="arch-divider">primitives</div>
|
|
1218
|
+
|
|
1219
|
+
<div class="arch-row">
|
|
1220
|
+
<div class="arch-item">
|
|
1221
|
+
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1222
|
+
<div class="arch-name">Event Bus</div>
|
|
1223
|
+
<div class="arch-detail">emit, on, once</div>
|
|
1224
|
+
</div>
|
|
1225
|
+
<div class="arch-item">
|
|
1226
|
+
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1227
|
+
<div class="arch-name">Observable State</div>
|
|
1228
|
+
<div class="arch-detail">reactive, watchable</div>
|
|
1229
|
+
</div>
|
|
1230
|
+
<div class="arch-item">
|
|
1231
|
+
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1232
|
+
<div class="arch-name">Introspection</div>
|
|
1233
|
+
<div class="arch-detail">self-documenting metadata</div>
|
|
1234
|
+
</div>
|
|
1235
|
+
<div class="arch-item">
|
|
1236
|
+
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1237
|
+
<div class="arch-name">Binary Compiler</div>
|
|
1238
|
+
<div class="arch-detail">luca bundle → standalone exe</div>
|
|
1239
|
+
</div>
|
|
1240
|
+
</div>
|
|
1241
|
+
</div>
|
|
1242
|
+
</div>
|
|
1243
|
+
</div>
|
|
1244
|
+
</section>
|
|
1245
|
+
|
|
1246
|
+
<!-- ===== CODE EXAMPLES ===== -->
|
|
1247
|
+
<section id="code">
|
|
1248
|
+
<div class="wrap">
|
|
1249
|
+
<div class="sec-label anim" style="--i:0">Code</div>
|
|
1250
|
+
<h2 class="sec-title anim" style="--i:1">From Swarm<br>to Standalone Binary</h2>
|
|
1251
|
+
<p class="sec-desc anim" style="--i:2">
|
|
1252
|
+
Orchestrate a fleet of agents, wire up infrastructure, compile it all to a single executable.
|
|
1253
|
+
</p>
|
|
1254
|
+
|
|
1255
|
+
<div class="anim" style="--i:3">
|
|
1256
|
+
<div class="code-tabs">
|
|
1257
|
+
<button class="code-tab active" data-panel="swarm">Swarm</button>
|
|
1258
|
+
<button class="code-tab" data-panel="assistant">Assistant</button>
|
|
1259
|
+
<button class="code-tab" data-panel="server">Server</button>
|
|
1260
|
+
<button class="code-tab" data-panel="binary">Binary</button>
|
|
1261
|
+
</div>
|
|
1262
|
+
|
|
1263
|
+
<div class="code-panels">
|
|
1264
|
+
<div class="code-panel active" id="panel-swarm">
|
|
1265
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">mgr</span> = container.<span class="t-method">feature</span>(<span class="t-str">'assistantManager'</span>)</div>
|
|
1266
|
+
<div class="line"> </div>
|
|
1267
|
+
<div class="line"><span class="t-comment">// each assistant gets its own tools from the container</span></div>
|
|
1268
|
+
<div class="line">mgr.<span class="t-method">add</span>(<span class="t-str">'researcher'</span>, { <span class="t-key">use</span>: [<span class="t-str">'browserUse'</span>, <span class="t-str">'fs'</span>] })</div>
|
|
1269
|
+
<div class="line">mgr.<span class="t-method">add</span>(<span class="t-str">'coder'</span>, { <span class="t-key">use</span>: [<span class="t-str">'git'</span>, <span class="t-str">'proc'</span>, <span class="t-str">'fs'</span>] })</div>
|
|
1270
|
+
<div class="line">mgr.<span class="t-method">add</span>(<span class="t-str">'reviewer'</span>, { <span class="t-key">use</span>: [<span class="t-str">'git'</span>, <span class="t-str">'fs'</span>] })</div>
|
|
1271
|
+
<div class="line"> </div>
|
|
1272
|
+
<div class="line"><span class="t-comment">// observe the whole fleet</span></div>
|
|
1273
|
+
<div class="line">mgr.<span class="t-method">on</span>(<span class="t-str">'agent:message'</span>, ({ <span class="t-cmd">from</span>, <span class="t-cmd">to</span>, <span class="t-cmd">content</span> }) <span class="t-kw">=></span> { <span class="t-comment">/* ... */</span> })</div>
|
|
1274
|
+
<div class="line">mgr.<span class="t-method">on</span>(<span class="t-str">'agent:stateChange'</span>, ({ <span class="t-cmd">agent</span>, <span class="t-cmd">state</span> }) <span class="t-kw">=></span> { <span class="t-comment">/* ... */</span> })</div>
|
|
1275
|
+
<div class="line"> </div>
|
|
1276
|
+
<div class="line"><span class="t-kw">await</span> mgr.<span class="t-method">startAll</span>() <span class="t-comment">// launch the swarm</span></div>
|
|
1277
|
+
</div>
|
|
1278
|
+
|
|
1279
|
+
<div class="code-panel" id="panel-assistant">
|
|
1280
|
+
<div class="line"><span class="t-kw">import</span> <span class="t-cmd">container</span> <span class="t-kw">from</span> <span class="t-str">'luca'</span></div>
|
|
1281
|
+
<div class="line"> </div>
|
|
1282
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">browser</span> = container.<span class="t-method">feature</span>(<span class="t-str">'browserUse'</span>, { <span class="t-key">headed</span>: <span class="t-val">true</span> })</div>
|
|
1283
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">assistant</span> = container.<span class="t-method">feature</span>(<span class="t-str">'assistant'</span>, {</div>
|
|
1284
|
+
<div class="line"> <span class="t-key">systemPrompt</span>: <span class="t-str">'You are a web research assistant.'</span>,</div>
|
|
1285
|
+
<div class="line"> <span class="t-key">model</span>: <span class="t-str">'gpt-4.1-mini'</span>,</div>
|
|
1286
|
+
<div class="line">})</div>
|
|
1287
|
+
<div class="line"> </div>
|
|
1288
|
+
<div class="line"><span class="t-comment">// browserUse injects its tools automatically</span></div>
|
|
1289
|
+
<div class="line">assistant.<span class="t-method">use</span>(browser)</div>
|
|
1290
|
+
<div class="line"><span class="t-kw">await</span> assistant.<span class="t-method">start</span>()</div>
|
|
1291
|
+
<div class="line"> </div>
|
|
1292
|
+
<div class="line"><span class="t-kw">await</span> assistant.<span class="t-method">ask</span>(<span class="t-str">'Go to hacker news and tell me the top 3 stories'</span>)</div>
|
|
1293
|
+
</div>
|
|
1294
|
+
|
|
1295
|
+
<div class="code-panel" id="panel-server">
|
|
1296
|
+
<div class="line"><span class="t-comment">// spin up an Express server with endpoints</span></div>
|
|
1297
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">app</span> = container.<span class="t-method">server</span>(<span class="t-str">'express'</span>)</div>
|
|
1298
|
+
<div class="line"> </div>
|
|
1299
|
+
<div class="line"><span class="t-comment">// endpoints auto-discovered from your files</span></div>
|
|
1300
|
+
<div class="line"><span class="t-kw">await</span> app.<span class="t-method">mountEndpoints</span>()</div>
|
|
1301
|
+
<div class="line"> </div>
|
|
1302
|
+
<div class="line"><span class="t-comment">// WebSocket server alongside HTTP</span></div>
|
|
1303
|
+
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">ws</span> = container.<span class="t-method">server</span>(<span class="t-str">'websocket'</span>)</div>
|
|
1304
|
+
<div class="line">ws.<span class="t-method">on</span>(<span class="t-str">'connection'</span>, <span class="t-cmd">socket</span> <span class="t-kw">=></span> {</div>
|
|
1305
|
+
<div class="line"> socket.<span class="t-method">send</span>(<span class="t-str">'welcome to luca'</span>)</div>
|
|
1306
|
+
<div class="line">})</div>
|
|
1307
|
+
<div class="line"> </div>
|
|
1308
|
+
<div class="line"><span class="t-kw">await</span> app.<span class="t-method">start</span>() <span class="t-comment">// that's it</span></div>
|
|
1309
|
+
</div>
|
|
1310
|
+
|
|
1311
|
+
<div class="code-panel" id="panel-binary">
|
|
1312
|
+
<div class="line"><span class="t-comment"># bootstrap a project</span></div>
|
|
1313
|
+
<div class="line"><span class="t-prompt">$</span> <span class="t-cmd">luca bootstrap my-tool</span></div>
|
|
1314
|
+
<div class="line"><span class="t-prompt">$</span> <span class="t-cmd">cd my-tool</span></div>
|
|
1315
|
+
<div class="line"> </div>
|
|
1316
|
+
<div class="line"><span class="t-comment"># add your own stuff</span></div>
|
|
1317
|
+
<div class="line"><span class="t-prompt">$</span> <span class="t-cmd">luca scaffold command</span> <span class="t-str">analyze</span></div>
|
|
1318
|
+
<div class="line"><span class="t-prompt">$</span> <span class="t-cmd">luca scaffold feature</span> <span class="t-str">myCache</span></div>
|
|
1319
|
+
<div class="line"><span class="t-prompt">$</span> <span class="t-cmd">luca scaffold endpoint</span> <span class="t-str">status</span></div>
|
|
1320
|
+
<div class="line"> </div>
|
|
1321
|
+
<div class="line"><span class="t-comment"># compile to a single binary</span></div>
|
|
1322
|
+
<div class="line"><span class="t-prompt">$</span> <span class="t-cmd">luca bundle</span></div>
|
|
1323
|
+
<div class="line"> </div>
|
|
1324
|
+
<div class="line"><span class="t-output"> → dist/my-tool (standalone, no dependencies)</span></div>
|
|
1325
|
+
<div class="line"><span class="t-output"> → your commands, features, assistants — baked in</span></div>
|
|
1326
|
+
</div>
|
|
1327
|
+
</div>
|
|
1328
|
+
</div>
|
|
1329
|
+
</div>
|
|
1330
|
+
</section>
|
|
1331
|
+
|
|
1332
|
+
<!-- ===== CLI ===== -->
|
|
1333
|
+
<section id="cli">
|
|
1334
|
+
<div class="wrap">
|
|
1335
|
+
<div class="sec-label anim" style="--i:0">Command Line</div>
|
|
1336
|
+
<h2 class="sec-title anim" style="--i:1">A CLI That<br>Understands Your Code</h2>
|
|
1337
|
+
<p class="sec-desc anim" style="--i:2">
|
|
1338
|
+
Discover, prototype, serve, and compile — all from your terminal. Your AI assistant uses the same commands.
|
|
1339
|
+
</p>
|
|
1340
|
+
|
|
1341
|
+
<div class="cli-grid">
|
|
1342
|
+
<div class="cli-card anim" style="--i:3">
|
|
1343
|
+
<div class="cli-cmd">luca bootstrap my-app</div>
|
|
1344
|
+
<div class="cli-desc">Scaffold a complete project with commands, endpoints, features, docs, and AI assistant config — everything wired up.</div>
|
|
1345
|
+
</div>
|
|
1346
|
+
<div class="cli-card anim" style="--i:4">
|
|
1347
|
+
<div class="cli-cmd">luca describe fs</div>
|
|
1348
|
+
<div class="cli-desc">Auto-generated documentation for any feature, client, or server. Methods, options, state, events — all introspected at runtime.</div>
|
|
1349
|
+
</div>
|
|
1350
|
+
<div class="cli-card anim" style="--i:5">
|
|
1351
|
+
<div class="cli-cmd">luca eval "container.features.available"</div>
|
|
1352
|
+
<div class="cli-desc">Run arbitrary JavaScript against the live container. Inspect state, test features, explore registries interactively.</div>
|
|
1353
|
+
</div>
|
|
1354
|
+
<div class="cli-card anim" style="--i:6">
|
|
1355
|
+
<div class="cli-cmd">luca serve</div>
|
|
1356
|
+
<div class="cli-desc">Start an Express server that auto-discovers your endpoints/ folder. OpenAPI docs and static files included.</div>
|
|
1357
|
+
</div>
|
|
1358
|
+
<div class="cli-card anim" style="--i:7">
|
|
1359
|
+
<div class="cli-cmd">luca bundle</div>
|
|
1360
|
+
<div class="cli-desc">Compile your project into a standalone binary. Custom commands, features, endpoints, and assistants — all baked in.</div>
|
|
1361
|
+
</div>
|
|
1362
|
+
<div class="cli-card anim" style="--i:8">
|
|
1363
|
+
<div class="cli-cmd">luca console</div>
|
|
1364
|
+
<div class="cli-desc">Drop into a full REPL with the container in scope. Every feature, client, and server at your fingertips.</div>
|
|
1365
|
+
</div>
|
|
1366
|
+
</div>
|
|
1367
|
+
</div>
|
|
1368
|
+
</section>
|
|
1369
|
+
|
|
1370
|
+
<!-- ===== CTA ===== -->
|
|
1371
|
+
<section class="cta" id="get-started">
|
|
1372
|
+
<div class="wrap">
|
|
1373
|
+
<div class="cta-box anim" style="--i:0">
|
|
1374
|
+
<h2>One Download, Unlimited Potential</h2>
|
|
1375
|
+
<p>No dependencies. No node_modules. Agents that talk to each other out of the box.</p>
|
|
1376
|
+
|
|
1377
|
+
<div class="install-cmd" onclick="navigator.clipboard.writeText('curl -fsSL https://luca-js.soederpop.com/install.sh | bash').then(() => { this.querySelector('.copy-hint').textContent = 'copied!'; setTimeout(() => this.querySelector('.copy-hint').textContent = 'click to copy', 2000) })">
|
|
1378
|
+
<span class="t-prompt">$</span>
|
|
1379
|
+
<span>curl -fsSL https://luca-js.soederpop.com/install.sh | bash</span>
|
|
1380
|
+
<span class="copy-hint">click to copy</span>
|
|
1381
|
+
</div>
|
|
1382
|
+
|
|
1383
|
+
<div class="hero-actions">
|
|
1384
|
+
<a href="https://github.com/soederpop/luca" class="btn btn-primary" target="_blank" rel="noopener">
|
|
1385
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0112 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"/></svg>
|
|
1386
|
+
View on GitHub
|
|
1387
|
+
</a>
|
|
1388
|
+
<a href="#code" class="btn btn-secondary">See the Code</a>
|
|
1389
|
+
</div>
|
|
1390
|
+
</div>
|
|
1391
|
+
</div>
|
|
1392
|
+
</section>
|
|
1393
|
+
|
|
1394
|
+
<!-- ===== FOOTER ===== -->
|
|
1395
|
+
<footer>
|
|
1396
|
+
<div class="wrap">
|
|
1397
|
+
<p>Luca — An agent-native TypeScript runtime that ships as a single binary.</p>
|
|
1398
|
+
<p style="margin-top:8px">Built with <a href="https://bun.sh" target="_blank" rel="noopener">Bun</a>. Designed for humans and agents.</p>
|
|
1399
|
+
</div>
|
|
1400
|
+
</footer>
|
|
1401
|
+
|
|
1402
|
+
<!-- ===== SCRIPTS ===== -->
|
|
1403
|
+
<script>
|
|
1404
|
+
// Tab switching
|
|
1405
|
+
document.querySelectorAll('.code-tab').forEach(tab => {
|
|
1406
|
+
tab.addEventListener('click', () => {
|
|
1407
|
+
document.querySelectorAll('.code-tab').forEach(t => t.classList.remove('active'));
|
|
1408
|
+
document.querySelectorAll('.code-panel').forEach(p => p.classList.remove('active'));
|
|
1409
|
+
tab.classList.add('active');
|
|
1410
|
+
document.getElementById('panel-' + tab.dataset.panel).classList.add('active');
|
|
1411
|
+
});
|
|
1412
|
+
});
|
|
1413
|
+
|
|
1414
|
+
// Nav scroll spy
|
|
1415
|
+
const navLinks = document.querySelectorAll('#nav a[href^="#"]');
|
|
1416
|
+
const sections = [];
|
|
1417
|
+
navLinks.forEach(link => {
|
|
1418
|
+
const id = link.getAttribute('href').slice(1);
|
|
1419
|
+
const el = document.getElementById(id);
|
|
1420
|
+
if (el) sections.push({ el, link });
|
|
1421
|
+
});
|
|
1422
|
+
|
|
1423
|
+
const observer = new IntersectionObserver(entries => {
|
|
1424
|
+
entries.forEach(entry => {
|
|
1425
|
+
if (entry.isIntersecting) {
|
|
1426
|
+
navLinks.forEach(l => l.classList.remove('active'));
|
|
1427
|
+
const match = sections.find(s => s.el === entry.target);
|
|
1428
|
+
if (match) match.link.classList.add('active');
|
|
1429
|
+
}
|
|
1430
|
+
});
|
|
1431
|
+
}, { rootMargin: '-20% 0px -70% 0px' });
|
|
1432
|
+
|
|
1433
|
+
sections.forEach(s => observer.observe(s.el));
|
|
1434
|
+
|
|
1435
|
+
// Intersection observer for animations
|
|
1436
|
+
const animObserver = new IntersectionObserver((entries) => {
|
|
1437
|
+
entries.forEach(entry => {
|
|
1438
|
+
if (entry.isIntersecting) {
|
|
1439
|
+
entry.target.style.animationPlayState = 'running';
|
|
1440
|
+
animObserver.unobserve(entry.target);
|
|
1441
|
+
}
|
|
1442
|
+
});
|
|
1443
|
+
}, { threshold: 0.1 });
|
|
1444
|
+
|
|
1445
|
+
document.querySelectorAll('.anim, .anim-scale').forEach(el => {
|
|
1446
|
+
el.style.animationPlayState = 'paused';
|
|
1447
|
+
// Don't pause hero elements
|
|
1448
|
+
if (el.closest('.hero') || el.closest('.stats-row')) {
|
|
1449
|
+
el.style.animationPlayState = 'running';
|
|
1450
|
+
return;
|
|
1451
|
+
}
|
|
1452
|
+
animObserver.observe(el);
|
|
1453
|
+
});
|
|
1454
|
+
</script>
|
|
1455
|
+
|
|
1456
|
+
</body>
|
|
1457
|
+
</html>
|