luca 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yaml +1 -0
- package/CLAUDE.md +10 -2
- package/README.md +130 -112
- package/assistants/codingAssistant/CORE.md +6 -1
- package/assistants/codingAssistant/hooks.ts +1 -1
- package/assistants/inkbot/hooks.ts +1 -1
- package/assistants/inkbot/tools.ts +1 -1
- package/bun.lock +220 -322
- package/commands/audit-docs.ts +2 -2
- package/commands/build-bootstrap.ts +2 -3
- package/commands/build-python-bridge.ts +2 -3
- package/commands/build-scaffolds.ts +2 -3
- package/commands/bundle-consumer-project.ts +521 -0
- package/commands/generate-api-docs.ts +2 -2
- package/commands/inkbot.ts +2 -2
- package/commands/release.ts +2 -2
- package/commands/try-all-challenges.ts +3 -3
- package/commands/try-challenge.ts +3 -3
- package/dist/agi/container.server.d.ts +2 -2
- package/dist/agi/features/assistant.d.ts +2 -2
- package/dist/agi/features/assistants-manager.d.ts +1 -1
- package/dist/agi/features/autonomous-assistant.d.ts +1 -1
- package/dist/agi/features/browser-use.d.ts +1 -1
- package/dist/agi/features/claude-code.d.ts +1 -1
- package/dist/agi/features/conversation-history.d.ts +2 -2
- package/dist/agi/features/conversation.d.ts +1 -1
- package/dist/agi/features/docs-reader.d.ts +1 -1
- package/dist/agi/features/file-tools.d.ts +1 -1
- package/dist/agi/features/luca-coder.d.ts +1 -1
- package/dist/agi/features/openai-codex.d.ts +1 -1
- package/dist/agi/features/skills-library.d.ts +1 -1
- package/dist/clients/civitai/index.d.ts +4 -4
- package/dist/clients/client-template.d.ts +4 -4
- package/dist/clients/comfyui/index.d.ts +2 -2
- package/dist/clients/elevenlabs/index.d.ts +2 -2
- package/dist/clients/openai/index.d.ts +2 -2
- package/dist/clients/supabase/index.d.ts +3 -3
- package/dist/command.d.ts +1 -1
- package/dist/node/container.d.ts +1 -1
- package/dist/node/features/helpers.d.ts +3 -3
- package/dist/node/features/semantic-search.d.ts +1 -1
- package/dist/node/features/vm.d.ts +3 -3
- package/dist/node.d.ts +1 -1
- package/dist/scaffolds/generated.d.ts +1 -1
- package/dist/selector.d.ts +1 -1
- package/index.html +217 -190
- package/luca.console.ts +1 -1
- package/package.json +2 -2
- package/public/index.html +217 -190
- package/public/slides-ai-native.html +1 -1
- package/public/slides-intro.html +2 -2
- package/scripts/examples/ask-luca-expert.ts +1 -1
- package/scripts/examples/assistant-questions.ts +1 -1
- package/scripts/examples/excalidraw-expert.ts +1 -1
- package/scripts/examples/file-manager.ts +1 -1
- package/scripts/examples/ideas.ts +1 -1
- package/scripts/examples/interactive-chat.ts +1 -1
- package/scripts/examples/opening-a-web-browser.ts +1 -1
- package/scripts/examples/telegram-bot.ts +1 -1
- package/scripts/examples/using-assistant-with-mcp.ts +1 -1
- package/scripts/examples/using-claude-code.ts +1 -1
- package/scripts/examples/using-contentdb.ts +2 -2
- package/scripts/examples/using-conversations.ts +1 -1
- package/scripts/examples/using-disk-cache.ts +1 -1
- package/scripts/examples/using-docker-shell.ts +1 -1
- package/scripts/examples/using-elevenlabs.ts +1 -1
- package/scripts/examples/using-google-calendar.ts +1 -1
- package/scripts/examples/using-google-docs.ts +1 -1
- package/scripts/examples/using-google-drive.ts +1 -1
- package/scripts/examples/using-google-sheets.ts +1 -1
- package/scripts/examples/using-nlp.ts +1 -1
- package/scripts/examples/using-ollama.ts +1 -1
- package/scripts/examples/using-postgres.ts +1 -1
- package/scripts/examples/using-runpod.ts +1 -1
- package/scripts/examples/using-tts.ts +1 -1
- package/scripts/scaffold.ts +5 -5
- package/scripts/scratch.ts +1 -1
- package/scripts/test-assistant-hooks.ts +1 -1
- package/scripts/test-docs-reader.ts +1 -1
- package/src/agi/container.server.ts +6 -2
- package/src/agi/features/agent-memory.ts +25 -25
- package/src/agi/features/assistant.ts +34 -5
- package/src/agi/features/assistants-manager.ts +122 -6
- package/src/agi/features/autonomous-assistant.ts +1 -1
- package/src/agi/features/browser-use.ts +20 -1
- package/src/agi/features/claude-code.ts +51 -5
- package/src/agi/features/coding-tools.ts +1 -1
- package/src/agi/features/conversation-history.ts +181 -4
- package/src/agi/features/conversation.ts +186 -15
- package/src/agi/features/docs-reader.ts +2 -2
- package/src/agi/features/file-tools.ts +49 -2
- package/src/agi/features/luca-coder.ts +7 -5
- package/src/agi/features/mcp-bridge.ts +532 -0
- package/src/agi/features/openai-codex.ts +2 -2
- package/src/agi/features/skills-library.ts +131 -52
- package/src/agi/lib/token-counter.ts +80 -0
- package/src/bootstrap/generated.ts +56 -57
- package/src/browser.ts +1 -1
- package/src/cli/build-info.ts +2 -2
- package/src/cli/cli.ts +2 -2
- package/src/clients/civitai/index.ts +5 -5
- package/src/clients/client-template.ts +4 -4
- package/src/clients/comfyui/index.ts +4 -4
- package/src/clients/elevenlabs/index.ts +4 -4
- package/src/clients/openai/index.ts +7 -7
- package/src/clients/supabase/index.ts +4 -4
- package/src/clients/voicebox/index.ts +4 -4
- package/src/command.ts +2 -1
- package/src/commands/chat.ts +1 -0
- package/src/commands/eval.ts +2 -56
- package/src/commands/introspect.ts +1 -1
- package/src/commands/prompt.ts +41 -9
- package/src/container-describer.ts +8 -1
- package/src/container.ts +13 -0
- package/src/entity.ts +2 -2
- package/src/helper.ts +1 -1
- package/src/introspection/generated.agi.ts +28563 -27571
- package/src/introspection/generated.node.ts +20281 -20194
- package/src/introspection/generated.web.ts +605 -584
- package/src/introspection/scan.ts +11 -6
- package/src/node/container.ts +1 -1
- package/src/node/features/content-db.ts +39 -2
- package/src/node/features/display-result.ts +57 -0
- package/src/node/features/helpers.ts +42 -15
- package/src/node/features/python.ts +25 -19
- package/src/node/features/repl.ts +1 -1
- package/src/node/features/secure-shell.ts +11 -17
- package/src/node/features/semantic-search.ts +2 -2
- package/src/node/features/transpiler.ts +2 -3
- package/src/node/features/ui.ts +5 -0
- package/src/node/features/vm.ts +3 -3
- package/src/node.ts +3 -3
- package/src/python/generated.ts +0 -1
- package/src/scaffolds/generated.ts +82 -83
- package/src/selector.ts +1 -1
- package/src/servers/express.ts +1 -1
- package/src/web/features/helpers.ts +22 -0
- package/tsconfig.json +12 -12
- package/docs/CLI.md +0 -335
- package/docs/CNAME +0 -1
- package/docs/README.md +0 -60
- package/docs/TABLE-OF-CONTENTS.md +0 -183
- package/docs/apis/clients/elevenlabs.md +0 -308
- package/docs/apis/clients/graph.md +0 -107
- package/docs/apis/clients/openai.md +0 -429
- package/docs/apis/clients/rest.md +0 -161
- package/docs/apis/clients/websocket.md +0 -174
- package/docs/apis/features/agi/assistant.md +0 -625
- package/docs/apis/features/agi/assistants-manager.md +0 -282
- package/docs/apis/features/agi/auto-assistant.md +0 -279
- package/docs/apis/features/agi/browser-use.md +0 -802
- package/docs/apis/features/agi/claude-code.md +0 -884
- package/docs/apis/features/agi/conversation-history.md +0 -364
- package/docs/apis/features/agi/conversation.md +0 -548
- package/docs/apis/features/agi/docs-reader.md +0 -99
- package/docs/apis/features/agi/file-tools.md +0 -163
- package/docs/apis/features/agi/luca-coder.md +0 -407
- package/docs/apis/features/agi/openai-codex.md +0 -396
- package/docs/apis/features/agi/openapi.md +0 -138
- package/docs/apis/features/agi/semantic-search.md +0 -387
- package/docs/apis/features/agi/skills-library.md +0 -239
- package/docs/apis/features/node/container-link.md +0 -192
- package/docs/apis/features/node/content-db.md +0 -450
- package/docs/apis/features/node/disk-cache.md +0 -379
- package/docs/apis/features/node/dns.md +0 -652
- package/docs/apis/features/node/docker.md +0 -706
- package/docs/apis/features/node/downloader.md +0 -81
- package/docs/apis/features/node/esbuild.md +0 -60
- package/docs/apis/features/node/file-manager.md +0 -191
- package/docs/apis/features/node/fs.md +0 -1217
- package/docs/apis/features/node/git.md +0 -371
- package/docs/apis/features/node/google-auth.md +0 -193
- package/docs/apis/features/node/google-calendar.md +0 -202
- package/docs/apis/features/node/google-docs.md +0 -173
- package/docs/apis/features/node/google-drive.md +0 -246
- package/docs/apis/features/node/google-mail.md +0 -214
- package/docs/apis/features/node/google-sheets.md +0 -194
- package/docs/apis/features/node/grep.md +0 -292
- package/docs/apis/features/node/helpers.md +0 -164
- package/docs/apis/features/node/ink.md +0 -334
- package/docs/apis/features/node/ipc-socket.md +0 -249
- package/docs/apis/features/node/json-tree.md +0 -86
- package/docs/apis/features/node/networking.md +0 -316
- package/docs/apis/features/node/nlp.md +0 -133
- package/docs/apis/features/node/opener.md +0 -97
- package/docs/apis/features/node/os.md +0 -146
- package/docs/apis/features/node/package-finder.md +0 -392
- package/docs/apis/features/node/postgres.md +0 -234
- package/docs/apis/features/node/proc.md +0 -399
- package/docs/apis/features/node/process-manager.md +0 -305
- package/docs/apis/features/node/python.md +0 -604
- package/docs/apis/features/node/redis.md +0 -380
- package/docs/apis/features/node/repl.md +0 -88
- package/docs/apis/features/node/runpod.md +0 -674
- package/docs/apis/features/node/secure-shell.md +0 -176
- package/docs/apis/features/node/semantic-search.md +0 -408
- package/docs/apis/features/node/sqlite.md +0 -233
- package/docs/apis/features/node/telegram.md +0 -279
- package/docs/apis/features/node/transpiler.md +0 -74
- package/docs/apis/features/node/tts.md +0 -133
- package/docs/apis/features/node/ui.md +0 -701
- package/docs/apis/features/node/vault.md +0 -59
- package/docs/apis/features/node/vm.md +0 -75
- package/docs/apis/features/node/yaml-tree.md +0 -85
- package/docs/apis/features/node/yaml.md +0 -176
- package/docs/apis/features/web/asset-loader.md +0 -59
- package/docs/apis/features/web/container-link.md +0 -192
- package/docs/apis/features/web/esbuild.md +0 -54
- package/docs/apis/features/web/helpers.md +0 -164
- package/docs/apis/features/web/network.md +0 -44
- package/docs/apis/features/web/speech.md +0 -69
- package/docs/apis/features/web/vault.md +0 -59
- package/docs/apis/features/web/vm.md +0 -75
- package/docs/apis/features/web/voice.md +0 -84
- package/docs/apis/servers/express.md +0 -171
- package/docs/apis/servers/mcp.md +0 -238
- package/docs/apis/servers/websocket.md +0 -170
- package/docs/bootstrap/CLAUDE.md +0 -101
- package/docs/bootstrap/SKILL.md +0 -341
- package/docs/bootstrap/templates/about-command.ts +0 -41
- package/docs/bootstrap/templates/docs-models.ts +0 -22
- package/docs/bootstrap/templates/docs-readme.md +0 -43
- package/docs/bootstrap/templates/example-feature.ts +0 -53
- package/docs/bootstrap/templates/health-endpoint.ts +0 -15
- package/docs/bootstrap/templates/luca-cli.ts +0 -30
- package/docs/bootstrap/templates/runme.md +0 -54
- package/docs/challenges/caching-proxy.md +0 -16
- package/docs/challenges/content-db-round-trip.md +0 -14
- package/docs/challenges/custom-command.md +0 -9
- package/docs/challenges/file-watcher-pipeline.md +0 -11
- package/docs/challenges/grep-audit-report.md +0 -15
- package/docs/challenges/multi-feature-dashboard.md +0 -14
- package/docs/challenges/process-orchestrator.md +0 -17
- package/docs/challenges/rest-api-server-with-client.md +0 -12
- package/docs/challenges/script-runner-with-vm.md +0 -11
- package/docs/challenges/simple-rest-api.md +0 -15
- package/docs/challenges/websocket-serve-and-client.md +0 -11
- package/docs/challenges/yaml-config-system.md +0 -14
- package/docs/command-system-overhaul.md +0 -94
- package/docs/documentation-audit.md +0 -134
- package/docs/examples/assistant/CORE.md +0 -18
- package/docs/examples/assistant/hooks.ts +0 -3
- package/docs/examples/assistant/tools.ts +0 -10
- package/docs/examples/assistant-hooks-reference.ts +0 -171
- package/docs/examples/assistant-with-process-manager.md +0 -84
- package/docs/examples/content-db.md +0 -77
- package/docs/examples/disk-cache.md +0 -83
- package/docs/examples/docker.md +0 -101
- package/docs/examples/downloader.md +0 -70
- package/docs/examples/entity.md +0 -124
- package/docs/examples/esbuild.md +0 -80
- package/docs/examples/feature-as-tool-provider.md +0 -143
- package/docs/examples/file-manager.md +0 -82
- package/docs/examples/fs.md +0 -83
- package/docs/examples/git.md +0 -85
- package/docs/examples/google-auth.md +0 -88
- package/docs/examples/google-calendar.md +0 -94
- package/docs/examples/google-docs.md +0 -82
- package/docs/examples/google-drive.md +0 -96
- package/docs/examples/google-sheets.md +0 -95
- package/docs/examples/grep.md +0 -85
- package/docs/examples/ink-blocks.md +0 -75
- package/docs/examples/ink-renderer.md +0 -41
- package/docs/examples/ink.md +0 -103
- package/docs/examples/ipc-socket.md +0 -103
- package/docs/examples/json-tree.md +0 -91
- package/docs/examples/networking.md +0 -58
- package/docs/examples/nlp.md +0 -91
- package/docs/examples/opener.md +0 -78
- package/docs/examples/os.md +0 -72
- package/docs/examples/package-finder.md +0 -89
- package/docs/examples/postgres.md +0 -91
- package/docs/examples/proc.md +0 -81
- package/docs/examples/process-manager.md +0 -79
- package/docs/examples/python.md +0 -132
- package/docs/examples/repl.md +0 -93
- package/docs/examples/runpod.md +0 -119
- package/docs/examples/secure-shell.md +0 -92
- package/docs/examples/sqlite.md +0 -86
- package/docs/examples/structured-output-with-assistants.md +0 -144
- package/docs/examples/telegram.md +0 -77
- package/docs/examples/tts.md +0 -86
- package/docs/examples/ui.md +0 -80
- package/docs/examples/vault.md +0 -70
- package/docs/examples/vm.md +0 -86
- package/docs/examples/websocket-ask-and-reply-example.md +0 -128
- package/docs/examples/yaml-tree.md +0 -93
- package/docs/examples/yaml.md +0 -104
- package/docs/ideas/assistant-factory-pattern.md +0 -142
- package/docs/in-memory-fs.md +0 -4
- package/docs/introspection-audit.md +0 -49
- package/docs/introspection.md +0 -164
- package/docs/mcp/readme.md +0 -162
- package/docs/models.ts +0 -41
- package/docs/philosophy.md +0 -86
- package/docs/principles.md +0 -7
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +0 -34
- package/docs/prompts/check-for-undocumented-features.md +0 -27
- package/docs/prompts/mcp-test-easy-command.md +0 -27
- package/docs/scaffolds/client.md +0 -149
- package/docs/scaffolds/command.md +0 -120
- package/docs/scaffolds/endpoint.md +0 -171
- package/docs/scaffolds/feature.md +0 -158
- package/docs/scaffolds/selector.md +0 -91
- package/docs/scaffolds/server.md +0 -196
- package/docs/selectors.md +0 -115
- package/docs/sessions/custom-command/attempt-log-2.md +0 -195
- package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +0 -728
- package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +0 -555
- package/docs/sessions/grep-audit-report/attempt-log-1.md +0 -289
- package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +0 -679
- package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +0 -1
- package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +0 -920
- package/docs/sessions/simple-rest-api/attempt-log-1.md +0 -593
- package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +0 -995
- package/docs/tutorials/00-bootstrap.md +0 -166
- package/docs/tutorials/01-getting-started.md +0 -106
- package/docs/tutorials/02-container.md +0 -210
- package/docs/tutorials/03-scripts.md +0 -194
- package/docs/tutorials/04-features-overview.md +0 -196
- package/docs/tutorials/05-state-and-events.md +0 -171
- package/docs/tutorials/06-servers.md +0 -157
- package/docs/tutorials/07-endpoints.md +0 -198
- package/docs/tutorials/08-commands.md +0 -252
- package/docs/tutorials/09-clients.md +0 -162
- package/docs/tutorials/10-creating-features.md +0 -203
- package/docs/tutorials/11-contentbase.md +0 -191
- package/docs/tutorials/12-assistants.md +0 -215
- package/docs/tutorials/13-introspection.md +0 -157
- package/docs/tutorials/14-type-system.md +0 -174
- package/docs/tutorials/15-project-patterns.md +0 -222
- package/docs/tutorials/16-google-features.md +0 -534
- package/docs/tutorials/17-tui-blocks.md +0 -530
- package/docs/tutorials/18-semantic-search.md +0 -334
- package/docs/tutorials/19-python-sessions.md +0 -401
- package/docs/tutorials/20-browser-esm.md +0 -234
- package/src/agi/endpoints/ask.ts +0 -60
- package/src/agi/endpoints/conversations/[id].ts +0 -45
- package/src/agi/endpoints/conversations.ts +0 -31
- package/src/agi/endpoints/experts.ts +0 -37
- package/test/assistant-hooks.test.ts +0 -306
- package/test/assistant.test.ts +0 -81
- package/test/bus.test.ts +0 -134
- package/test/clients-servers.test.ts +0 -217
- package/test/command.test.ts +0 -267
- package/test/container-link.test.ts +0 -274
- package/test/conversation.test.ts +0 -220
- package/test/features.test.ts +0 -160
- package/test/fork-and-research.test.ts +0 -450
- package/test/integration.test.ts +0 -787
- package/test/interceptor-chain.test.ts +0 -61
- package/test/node-container.test.ts +0 -121
- package/test/python-session.test.ts +0 -105
- package/test/rate-limit.test.ts +0 -272
- package/test/semantic-search.test.ts +0 -550
- package/test/state.test.ts +0 -121
- package/test/vm-context.test.ts +0 -146
- package/test/vm-loadmodule.test.ts +0 -213
- package/test/websocket-ask.test.ts +0 -101
- package/test-integration/assistant.test.ts +0 -138
- package/test-integration/assistants-manager.test.ts +0 -113
- package/test-integration/claude-code.test.ts +0 -98
- package/test-integration/conversation-history.test.ts +0 -205
- package/test-integration/conversation.test.ts +0 -137
- package/test-integration/elevenlabs.test.ts +0 -55
- package/test-integration/google-services.test.ts +0 -80
- package/test-integration/helpers.ts +0 -89
- package/test-integration/memory.test.ts +0 -204
- package/test-integration/openai-codex.test.ts +0 -93
- package/test-integration/runpod.test.ts +0 -58
- package/test-integration/server-endpoints.test.ts +0 -97
- package/test-integration/telegram.test.ts +0 -46
package/public/index.html
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Luca —
|
|
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.">
|
|
7
8
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
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">
|
|
@@ -297,7 +298,7 @@
|
|
|
297
298
|
.hero-sub {
|
|
298
299
|
font-size: clamp(16px, 2vw, 20px);
|
|
299
300
|
color: var(--text-dim);
|
|
300
|
-
max-width:
|
|
301
|
+
max-width: 640px;
|
|
301
302
|
margin: 0 auto 48px;
|
|
302
303
|
font-weight: 400;
|
|
303
304
|
line-height: 1.6;
|
|
@@ -624,6 +625,7 @@
|
|
|
624
625
|
.at-client .arch-type { color: var(--purple-bright); }
|
|
625
626
|
.at-server .arch-type { color: var(--amber-bright); }
|
|
626
627
|
.at-cmd .arch-type { color: var(--green); }
|
|
628
|
+
.at-agent .arch-type { color: var(--rose); }
|
|
627
629
|
|
|
628
630
|
.arch-section-title {
|
|
629
631
|
font-family: var(--font-mono);
|
|
@@ -942,6 +944,7 @@
|
|
|
942
944
|
.hero { padding-top: 120px; }
|
|
943
945
|
.cta-box { padding: 40px 24px; }
|
|
944
946
|
.arch-visual { padding: 32px 20px; }
|
|
947
|
+
.install-cmd { font-size: 11px; padding: 12px 16px; }
|
|
945
948
|
}
|
|
946
949
|
</style>
|
|
947
950
|
</head>
|
|
@@ -955,11 +958,11 @@
|
|
|
955
958
|
luca
|
|
956
959
|
</div>
|
|
957
960
|
<ul class="nav-links" id="nav">
|
|
958
|
-
<li><a href="#
|
|
961
|
+
<li><a href="#why">Why Luca</a></li>
|
|
959
962
|
<li><a href="#architecture">Architecture</a></li>
|
|
960
963
|
<li><a href="#code">Code</a></li>
|
|
961
964
|
<li><a href="#cli">CLI</a></li>
|
|
962
|
-
<li><a href="#get-started" class="nav-cta">
|
|
965
|
+
<li><a href="#get-started" class="nav-cta">Install</a></li>
|
|
963
966
|
</ul>
|
|
964
967
|
</div>
|
|
965
968
|
</nav>
|
|
@@ -969,19 +972,19 @@
|
|
|
969
972
|
<div class="wrap">
|
|
970
973
|
<div class="hero-badge anim" style="--i:0">
|
|
971
974
|
<span class="dot"></span>
|
|
972
|
-
|
|
975
|
+
Single Binary · Agent-Native
|
|
973
976
|
</div>
|
|
974
977
|
<h1 class="anim" style="--i:1">
|
|
975
|
-
|
|
976
|
-
<span class="gradient-text">
|
|
978
|
+
Lightweight Universal<br>
|
|
979
|
+
<span class="gradient-text">Conversational Architecture</span>
|
|
977
980
|
</h1>
|
|
978
981
|
<p class="hero-sub anim" style="--i:2">
|
|
979
|
-
|
|
980
|
-
|
|
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.
|
|
981
984
|
</p>
|
|
982
985
|
<div class="hero-actions anim" style="--i:3">
|
|
983
|
-
<a href="#get-started" class="btn btn-primary">
|
|
984
|
-
<a href="#
|
|
986
|
+
<a href="#get-started" class="btn btn-primary">Install Luca</a>
|
|
987
|
+
<a href="#why" class="btn btn-secondary">See Why</a>
|
|
985
988
|
</div>
|
|
986
989
|
|
|
987
990
|
<div class="terminal anim" style="--i:4">
|
|
@@ -989,19 +992,23 @@
|
|
|
989
992
|
<div class="terminal-dot"></div>
|
|
990
993
|
<div class="terminal-dot"></div>
|
|
991
994
|
<div class="terminal-dot"></div>
|
|
992
|
-
<div class="terminal-title">luca —
|
|
995
|
+
<div class="terminal-title">luca — agent-native</div>
|
|
993
996
|
</div>
|
|
994
997
|
<div class="terminal-body">
|
|
995
|
-
<div class="line"><span class="t-comment">//
|
|
996
|
-
<div class="line"><span class="t-
|
|
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>
|
|
997
1006
|
<div class="line"> </div>
|
|
998
|
-
<div class="line"><span class="t-comment">//
|
|
999
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">
|
|
1000
|
-
<div class="line"
|
|
1001
|
-
<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-bracket">(</span><span class="t-str">'express'</span><span class="t-bracket">)</span></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>
|
|
1002
1010
|
<div class="line"> </div>
|
|
1003
|
-
<div class="line"><span class="t-comment">//
|
|
1004
|
-
<div class="line"><span class="t-kw">await</span> app.<span class="t-method">start</span><span class="t-bracket">()</span></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>
|
|
1005
1012
|
</div>
|
|
1006
1013
|
</div>
|
|
1007
1014
|
</div>
|
|
@@ -1012,55 +1019,85 @@
|
|
|
1012
1019
|
<div class="stats-row">
|
|
1013
1020
|
<div class="stat anim-scale" style="--i:0">
|
|
1014
1021
|
<div class="stat-value"><span class="accent">0</span></div>
|
|
1015
|
-
<div class="stat-label">
|
|
1022
|
+
<div class="stat-label">npm install required</div>
|
|
1016
1023
|
</div>
|
|
1017
1024
|
<div class="stat anim-scale" style="--i:1">
|
|
1018
|
-
<div class="stat-value">
|
|
1019
|
-
<div class="stat-label">
|
|
1025
|
+
<div class="stat-value">1</div>
|
|
1026
|
+
<div class="stat-label">Binary — In and Out</div>
|
|
1020
1027
|
</div>
|
|
1021
1028
|
<div class="stat anim-scale" style="--i:2">
|
|
1022
|
-
<div class="stat-value">
|
|
1023
|
-
<div class="stat-label">
|
|
1029
|
+
<div class="stat-value">20<span class="accent">+</span></div>
|
|
1030
|
+
<div class="stat-label">Built-in Helpers</div>
|
|
1024
1031
|
</div>
|
|
1025
1032
|
<div class="stat anim-scale" style="--i:3">
|
|
1026
|
-
<div class="stat-value"
|
|
1027
|
-
<div class="stat-label">
|
|
1033
|
+
<div class="stat-value"><span class="accent">∞</span></div>
|
|
1034
|
+
<div class="stat-label">Agent Toolkits via use()</div>
|
|
1028
1035
|
</div>
|
|
1029
1036
|
</div>
|
|
1030
1037
|
</div>
|
|
1031
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
|
+
|
|
1032
1069
|
<!-- ===== FEATURES ===== -->
|
|
1033
1070
|
<section id="features">
|
|
1034
1071
|
<div class="wrap">
|
|
1035
|
-
<div class="sec-label anim" style="--i:0">
|
|
1036
|
-
<h2 class="sec-title anim" style="--i:1">
|
|
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>
|
|
1037
1074
|
<p class="sec-desc anim" style="--i:2">
|
|
1038
|
-
|
|
1075
|
+
No imports beyond the container. File I/O, HTTP, databases, git, browser automation, terminal UI, encryption — all typed, all discoverable at runtime.
|
|
1039
1076
|
</p>
|
|
1040
1077
|
|
|
1041
1078
|
<div class="features-grid">
|
|
1042
|
-
<div class="feature-card fc-
|
|
1043
|
-
<div class="feature-icon">
|
|
1044
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="
|
|
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>
|
|
1045
1082
|
</div>
|
|
1046
|
-
<h3>
|
|
1047
|
-
<p>
|
|
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>
|
|
1048
1085
|
</div>
|
|
1049
1086
|
|
|
1050
1087
|
<div class="feature-card fc-purple anim" style="--i:4">
|
|
1051
1088
|
<div class="feature-icon" style="--icon-bg: var(--purple-dim); --icon-color: var(--purple-bright);">
|
|
1052
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="
|
|
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>
|
|
1053
1090
|
</div>
|
|
1054
|
-
<h3>
|
|
1055
|
-
<p>
|
|
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>
|
|
1056
1093
|
</div>
|
|
1057
1094
|
|
|
1058
|
-
<div class="feature-card fc-
|
|
1059
|
-
<div class="feature-icon"
|
|
1060
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><
|
|
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>
|
|
1061
1098
|
</div>
|
|
1062
|
-
<h3>
|
|
1063
|
-
<p>
|
|
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>
|
|
1064
1101
|
</div>
|
|
1065
1102
|
|
|
1066
1103
|
<div class="feature-card fc-green anim" style="--i:6">
|
|
@@ -1068,76 +1105,47 @@
|
|
|
1068
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>
|
|
1069
1106
|
</div>
|
|
1070
1107
|
<h3>Git Integration</h3>
|
|
1071
|
-
<p>
|
|
1108
|
+
<p>Branch info, status, diff, log. The container knows your repo. The agent knows your repo.</p>
|
|
1072
1109
|
</div>
|
|
1073
1110
|
|
|
1074
|
-
<div class="feature-card fc-
|
|
1075
|
-
<div class="feature-icon" style="--icon-bg: var(--
|
|
1076
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="
|
|
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>
|
|
1077
1114
|
</div>
|
|
1078
|
-
<h3>
|
|
1079
|
-
<p>
|
|
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>
|
|
1080
1117
|
</div>
|
|
1081
1118
|
|
|
1082
|
-
<div class="feature-card fc-
|
|
1083
|
-
<div class="feature-icon">
|
|
1084
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><
|
|
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>
|
|
1085
1122
|
</div>
|
|
1086
|
-
<h3>
|
|
1087
|
-
<p>
|
|
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>
|
|
1088
1125
|
</div>
|
|
1089
1126
|
|
|
1090
|
-
<div class="feature-card fc-
|
|
1091
|
-
<div class="feature-icon"
|
|
1092
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><
|
|
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>
|
|
1093
1130
|
</div>
|
|
1094
|
-
<h3>
|
|
1095
|
-
<p>Every helper
|
|
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>
|
|
1096
1133
|
</div>
|
|
1097
1134
|
|
|
1098
1135
|
<div class="feature-card fc-amber anim" style="--i:10">
|
|
1099
1136
|
<div class="feature-icon" style="--icon-bg: var(--amber-dim); --icon-color: var(--amber-bright);">
|
|
1100
|
-
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="
|
|
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>
|
|
1101
1138
|
</div>
|
|
1102
|
-
<h3>
|
|
1103
|
-
<p>
|
|
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>
|
|
1104
1141
|
</div>
|
|
1105
1142
|
|
|
1106
1143
|
<div class="feature-card fc-green anim" style="--i:11">
|
|
1107
1144
|
<div class="feature-icon" style="--icon-bg: var(--green-dim); --icon-color: var(--green);">
|
|
1108
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>
|
|
1109
1146
|
</div>
|
|
1110
|
-
<h3>Cross-Runtime</h3>
|
|
1111
|
-
<p>
|
|
1112
|
-
</div>
|
|
1113
|
-
</div>
|
|
1114
|
-
</div>
|
|
1115
|
-
</section>
|
|
1116
|
-
|
|
1117
|
-
<!-- ===== PHILOSOPHY ===== -->
|
|
1118
|
-
<section>
|
|
1119
|
-
<div class="wrap">
|
|
1120
|
-
<div class="sec-label anim" style="--i:0">Philosophy</div>
|
|
1121
|
-
<h2 class="sec-title anim" style="--i:1">Docker for Your Runtime</h2>
|
|
1122
|
-
<p class="sec-desc anim" style="--i:2">
|
|
1123
|
-
Like Docker gives you a complete, reproducible environment for deployment — Luca gives you a complete, consistent runtime for development.
|
|
1124
|
-
</p>
|
|
1125
|
-
|
|
1126
|
-
<div class="philosophy">
|
|
1127
|
-
<div class="phil-card anim" style="--i:3; --phil-accent: var(--cyan);">
|
|
1128
|
-
<div class="phil-num">01</div>
|
|
1129
|
-
<h3>Zero Dependencies</h3>
|
|
1130
|
-
<p>The container provides everything. File system, networking, git, servers, clients, process execution — no <code style="font-size:12px; background:var(--cyan-dim); color:var(--cyan-bright); padding:1px 5px; border-radius:3px; font-family:var(--font-mono);">npm install</code> needed.</p>
|
|
1131
|
-
</div>
|
|
1132
|
-
<div class="phil-card anim" style="--i:4; --phil-accent: var(--purple);">
|
|
1133
|
-
<div class="phil-num">02</div>
|
|
1134
|
-
<h3>Compose, Don't Configure</h3>
|
|
1135
|
-
<p>Features, clients, and servers are composable building blocks. Request what you need from the container, wire it together, ship it.</p>
|
|
1136
|
-
</div>
|
|
1137
|
-
<div class="phil-card anim" style="--i:5; --phil-accent: var(--amber);">
|
|
1138
|
-
<div class="phil-num">03</div>
|
|
1139
|
-
<h3>Know Thyself</h3>
|
|
1140
|
-
<p>Every component is introspectable. Auto-generated documentation, observable state, full event system. Your app explains itself.</p>
|
|
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>
|
|
1141
1149
|
</div>
|
|
1142
1150
|
</div>
|
|
1143
1151
|
</div>
|
|
@@ -1147,42 +1155,63 @@
|
|
|
1147
1155
|
<section id="architecture">
|
|
1148
1156
|
<div class="wrap">
|
|
1149
1157
|
<div class="sec-label anim" style="--i:0">Architecture</div>
|
|
1150
|
-
<h2 class="sec-title anim" style="--i:1">
|
|
1158
|
+
<h2 class="sec-title anim" style="--i:1">One Bus.<br>Agents Everywhere.</h2>
|
|
1151
1159
|
<p class="sec-desc anim" style="--i:2">
|
|
1152
|
-
|
|
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.
|
|
1153
1161
|
</p>
|
|
1154
1162
|
|
|
1155
1163
|
<div class="arch-visual anim" style="--i:3">
|
|
1156
1164
|
<div class="arch-container-box">
|
|
1157
1165
|
<div class="arch-container-label">container</div>
|
|
1158
1166
|
|
|
1159
|
-
<div class="arch-section-title">
|
|
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>
|
|
1160
1194
|
<div class="arch-row">
|
|
1161
1195
|
<div class="arch-item at-feature">
|
|
1162
|
-
<div class="arch-type">
|
|
1163
|
-
<div class="arch-name">
|
|
1164
|
-
<div class="arch-detail">fs, git, proc, vm, grep...</div>
|
|
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>
|
|
1165
1199
|
</div>
|
|
1166
1200
|
<div class="arch-item at-client">
|
|
1167
|
-
<div class="arch-type">
|
|
1168
|
-
<div class="arch-name">
|
|
1201
|
+
<div class="arch-type">Clients</div>
|
|
1202
|
+
<div class="arch-name">transports</div>
|
|
1169
1203
|
<div class="arch-detail">rest, websocket</div>
|
|
1170
1204
|
</div>
|
|
1171
1205
|
<div class="arch-item at-server">
|
|
1172
|
-
<div class="arch-type">
|
|
1173
|
-
<div class="arch-name">
|
|
1174
|
-
<div class="arch-detail">express, websocket</div>
|
|
1206
|
+
<div class="arch-type">Servers</div>
|
|
1207
|
+
<div class="arch-name">infrastructure</div>
|
|
1208
|
+
<div class="arch-detail">express, websocket, ipc, mcp</div>
|
|
1175
1209
|
</div>
|
|
1176
1210
|
<div class="arch-item at-cmd">
|
|
1177
|
-
<div class="arch-type">
|
|
1178
|
-
<div class="arch-name">
|
|
1211
|
+
<div class="arch-type">Commands</div>
|
|
1212
|
+
<div class="arch-name">CLI</div>
|
|
1179
1213
|
<div class="arch-detail">file-based discovery</div>
|
|
1180
1214
|
</div>
|
|
1181
|
-
<div class="arch-item at-cmd">
|
|
1182
|
-
<div class="arch-type">Registry</div>
|
|
1183
|
-
<div class="arch-name">endpoints</div>
|
|
1184
|
-
<div class="arch-detail">HTTP handlers</div>
|
|
1185
|
-
</div>
|
|
1186
1215
|
</div>
|
|
1187
1216
|
|
|
1188
1217
|
<div class="arch-divider">primitives</div>
|
|
@@ -1195,18 +1224,18 @@
|
|
|
1195
1224
|
</div>
|
|
1196
1225
|
<div class="arch-item">
|
|
1197
1226
|
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1198
|
-
<div class="arch-name">State
|
|
1199
|
-
<div class="arch-detail">
|
|
1227
|
+
<div class="arch-name">Observable State</div>
|
|
1228
|
+
<div class="arch-detail">reactive, watchable</div>
|
|
1200
1229
|
</div>
|
|
1201
1230
|
<div class="arch-item">
|
|
1202
1231
|
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1203
|
-
<div class="arch-name">
|
|
1204
|
-
<div class="arch-detail">
|
|
1232
|
+
<div class="arch-name">Introspection</div>
|
|
1233
|
+
<div class="arch-detail">self-documenting metadata</div>
|
|
1205
1234
|
</div>
|
|
1206
1235
|
<div class="arch-item">
|
|
1207
1236
|
<div class="arch-type" style="color:var(--text-dim)">Core</div>
|
|
1208
|
-
<div class="arch-name">
|
|
1209
|
-
<div class="arch-detail">
|
|
1237
|
+
<div class="arch-name">Binary Compiler</div>
|
|
1238
|
+
<div class="arch-detail">luca bundle → standalone exe</div>
|
|
1210
1239
|
</div>
|
|
1211
1240
|
</div>
|
|
1212
1241
|
</div>
|
|
@@ -1217,85 +1246,83 @@
|
|
|
1217
1246
|
<!-- ===== CODE EXAMPLES ===== -->
|
|
1218
1247
|
<section id="code">
|
|
1219
1248
|
<div class="wrap">
|
|
1220
|
-
<div class="sec-label anim" style="--i:0">
|
|
1221
|
-
<h2 class="sec-title anim" style="--i:1">
|
|
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>
|
|
1222
1251
|
<p class="sec-desc anim" style="--i:2">
|
|
1223
|
-
|
|
1252
|
+
Orchestrate a fleet of agents, wire up infrastructure, compile it all to a single executable.
|
|
1224
1253
|
</p>
|
|
1225
1254
|
|
|
1226
1255
|
<div class="anim" style="--i:3">
|
|
1227
1256
|
<div class="code-tabs">
|
|
1228
|
-
<button class="code-tab active" data-panel="
|
|
1229
|
-
<button class="code-tab" data-panel="
|
|
1230
|
-
<button class="code-tab" data-panel="
|
|
1231
|
-
<button class="code-tab" data-panel="
|
|
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>
|
|
1232
1261
|
</div>
|
|
1233
1262
|
|
|
1234
1263
|
<div class="code-panels">
|
|
1235
|
-
<div class="code-panel active" id="panel-
|
|
1236
|
-
<div class="line"><span class="t-
|
|
1237
|
-
<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>
|
|
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>
|
|
1238
1266
|
<div class="line"> </div>
|
|
1239
|
-
<div class="line"><span class="t-comment">//
|
|
1240
|
-
<div class="line"
|
|
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>
|
|
1241
1271
|
<div class="line"> </div>
|
|
1242
|
-
<div class="line"><span class="t-comment">//
|
|
1243
|
-
<div class="line"
|
|
1244
|
-
<div class="line">
|
|
1245
|
-
<div class="line"> socket.<span class="t-method">send</span>(<span class="t-str">'welcome to luca'</span>)</div>
|
|
1246
|
-
<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>
|
|
1247
1275
|
<div class="line"> </div>
|
|
1248
|
-
<div class="line"><span class="t-kw">await</span>
|
|
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>
|
|
1249
1277
|
</div>
|
|
1250
1278
|
|
|
1251
|
-
<div class="code-panel" id="panel-
|
|
1252
|
-
<div class="line"><span class="t-kw">
|
|
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>
|
|
1253
1281
|
<div class="line"> </div>
|
|
1254
|
-
<div class="line"><span class="t-
|
|
1255
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">
|
|
1256
|
-
<div class="line"
|
|
1257
|
-
<div class="line"
|
|
1258
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">grep</span> = container.<span class="t-method">feature</span>(<span class="t-str">'grep'</span>)</div>
|
|
1259
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">results</span> = <span class="t-kw">await</span> grep.<span class="t-method">run</span>(<span class="t-str">'TODO'</span>, {</div>
|
|
1260
|
-
<div class="line"> <span class="t-key">include</span>: [<span class="t-str">'**/*.ts'</span>]</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>
|
|
1261
1286
|
<div class="line">})</div>
|
|
1262
1287
|
<div class="line"> </div>
|
|
1263
|
-
<div class="line"><span class="t-comment">//
|
|
1264
|
-
<div class="line"
|
|
1265
|
-
<div class="line"><span class="t-kw">
|
|
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>
|
|
1266
1293
|
</div>
|
|
1267
1294
|
|
|
1268
|
-
<div class="code-panel" id="panel-
|
|
1269
|
-
<div class="line"><span class="t-comment">//
|
|
1270
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">
|
|
1271
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">proc</span> = container.<span class="t-method">feature</span>(<span class="t-str">'proc'</span>)</div>
|
|
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>
|
|
1272
1298
|
<div class="line"> </div>
|
|
1273
|
-
<div class="line"><span class="t-comment">//
|
|
1274
|
-
<div class="line"
|
|
1275
|
-
<div class="line">console.<span class="t-method">log</span>(git.<span class="t-key">status</span>) <span class="t-comment">// { modified: [...] }</span></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>
|
|
1276
1301
|
<div class="line"> </div>
|
|
1277
|
-
<div class="line"><span class="t-comment">//
|
|
1278
|
-
<div class="line"><span class="t-kw">const</span>
|
|
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>
|
|
1279
1307
|
<div class="line"> </div>
|
|
1280
|
-
<div class="line"><span class="t-comment">//
|
|
1281
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">vm</span> = container.<span class="t-method">feature</span>(<span class="t-str">'vm'</span>)</div>
|
|
1282
|
-
<div class="line"><span class="t-kw">const</span> <span class="t-cmd">result</span> = <span class="t-kw">await</span> vm.<span class="t-method">run</span>(<span class="t-str">'return 2 + 2'</span>)</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>
|
|
1283
1309
|
</div>
|
|
1284
1310
|
|
|
1285
|
-
<div class="code-panel" id="panel-
|
|
1286
|
-
<div class="line"><span class="t-comment"
|
|
1287
|
-
<div class="line"><span class="t-
|
|
1288
|
-
<div class="line"
|
|
1289
|
-
<div class="line"> <span class="t-key">path</span>: <span class="t-str">'/hello/:name'</span>,</div>
|
|
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>
|
|
1290
1315
|
<div class="line"> </div>
|
|
1291
|
-
<div class="line"
|
|
1292
|
-
<div class="line">
|
|
1293
|
-
<div class="line"
|
|
1294
|
-
<div class="line"
|
|
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>
|
|
1295
1320
|
<div class="line"> </div>
|
|
1296
|
-
<div class="line"
|
|
1297
|
-
<div class="line">
|
|
1298
|
-
<div class="line"
|
|
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>
|
|
1299
1326
|
</div>
|
|
1300
1327
|
</div>
|
|
1301
1328
|
</div>
|
|
@@ -1308,33 +1335,33 @@
|
|
|
1308
1335
|
<div class="sec-label anim" style="--i:0">Command Line</div>
|
|
1309
1336
|
<h2 class="sec-title anim" style="--i:1">A CLI That<br>Understands Your Code</h2>
|
|
1310
1337
|
<p class="sec-desc anim" style="--i:2">
|
|
1311
|
-
|
|
1338
|
+
Discover, prototype, serve, and compile — all from your terminal. Your AI assistant uses the same commands.
|
|
1312
1339
|
</p>
|
|
1313
1340
|
|
|
1314
1341
|
<div class="cli-grid">
|
|
1315
1342
|
<div class="cli-card anim" style="--i:3">
|
|
1316
|
-
<div class="cli-cmd">luca
|
|
1317
|
-
<div class="cli-desc">
|
|
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>
|
|
1318
1345
|
</div>
|
|
1319
1346
|
<div class="cli-card anim" style="--i:4">
|
|
1320
1347
|
<div class="cli-cmd">luca describe fs</div>
|
|
1321
|
-
<div class="cli-desc">Auto-generated documentation for any feature, client, or server. Methods, options, state, events — all introspected.</div>
|
|
1348
|
+
<div class="cli-desc">Auto-generated documentation for any feature, client, or server. Methods, options, state, events — all introspected at runtime.</div>
|
|
1322
1349
|
</div>
|
|
1323
1350
|
<div class="cli-card anim" style="--i:5">
|
|
1324
|
-
<div class="cli-cmd">luca
|
|
1325
|
-
<div class="cli-desc">
|
|
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>
|
|
1326
1353
|
</div>
|
|
1327
1354
|
<div class="cli-card anim" style="--i:6">
|
|
1328
|
-
<div class="cli-cmd">luca
|
|
1329
|
-
<div class="cli-desc">
|
|
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>
|
|
1330
1357
|
</div>
|
|
1331
1358
|
<div class="cli-card anim" style="--i:7">
|
|
1332
|
-
<div class="cli-cmd">luca
|
|
1333
|
-
<div class="cli-desc">
|
|
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>
|
|
1334
1361
|
</div>
|
|
1335
1362
|
<div class="cli-card anim" style="--i:8">
|
|
1336
|
-
<div class="cli-cmd">luca
|
|
1337
|
-
<div class="cli-desc">
|
|
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>
|
|
1338
1365
|
</div>
|
|
1339
1366
|
</div>
|
|
1340
1367
|
</div>
|
|
@@ -1344,12 +1371,12 @@
|
|
|
1344
1371
|
<section class="cta" id="get-started">
|
|
1345
1372
|
<div class="wrap">
|
|
1346
1373
|
<div class="cta-box anim" style="--i:0">
|
|
1347
|
-
<h2>
|
|
1348
|
-
<p>
|
|
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>
|
|
1349
1376
|
|
|
1350
|
-
<div class="install-cmd" onclick="navigator.clipboard.writeText('
|
|
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) })">
|
|
1351
1378
|
<span class="t-prompt">$</span>
|
|
1352
|
-
<span>
|
|
1379
|
+
<span>curl -fsSL https://luca-js.soederpop.com/install.sh | bash</span>
|
|
1353
1380
|
<span class="copy-hint">click to copy</span>
|
|
1354
1381
|
</div>
|
|
1355
1382
|
|
|
@@ -1358,7 +1385,7 @@
|
|
|
1358
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>
|
|
1359
1386
|
View on GitHub
|
|
1360
1387
|
</a>
|
|
1361
|
-
<a href="#
|
|
1388
|
+
<a href="#code" class="btn btn-secondary">See the Code</a>
|
|
1362
1389
|
</div>
|
|
1363
1390
|
</div>
|
|
1364
1391
|
</div>
|
|
@@ -1367,8 +1394,8 @@
|
|
|
1367
1394
|
<!-- ===== FOOTER ===== -->
|
|
1368
1395
|
<footer>
|
|
1369
1396
|
<div class="wrap">
|
|
1370
|
-
<p>Luca —
|
|
1371
|
-
<p style="margin-top:8px">Built with <a href="https://bun.sh" target="_blank" rel="noopener">Bun</a>. Designed for
|
|
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>
|
|
1372
1399
|
</div>
|
|
1373
1400
|
</footer>
|
|
1374
1401
|
|