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
|
@@ -113,6 +113,7 @@ jobs:
|
|
|
113
113
|
run: |
|
|
114
114
|
codesign --sign "Developer ID Application: Demitra Del Fiacco (77WL45HR8M)" \
|
|
115
115
|
--force --options runtime --timestamp dist/release/luca-darwin-x64
|
|
116
|
+
codesign --remove-signature dist/release/luca-darwin-arm64
|
|
116
117
|
codesign --sign "Developer ID Application: Demitra Del Fiacco (77WL45HR8M)" \
|
|
117
118
|
--force --options runtime --timestamp dist/release/luca-darwin-arm64
|
|
118
119
|
|
package/CLAUDE.md
CHANGED
|
@@ -14,20 +14,28 @@ The `container` and its helpers are perfect for scripts and long running service
|
|
|
14
14
|
|
|
15
15
|
On the frontend the browser container is perfect for highly reactive, stateful web applications, especially works well with React.
|
|
16
16
|
|
|
17
|
+
## Developer Standards
|
|
18
|
+
|
|
19
|
+
- Please try not to have broken tests committed to the build and let them slide. Encourage me to fix them so they dont grow out of control.
|
|
20
|
+
- When working on features, clients, servers, or other helpers, the introspection system relies on good zod descriptions, and good jsdoc descriptions
|
|
21
|
+
|
|
22
|
+
|
|
17
23
|
## The `luca` CLI
|
|
18
24
|
|
|
19
25
|
- in dev, `bun run src/cli/cli.ts` is the same as `luca`
|
|
20
26
|
|
|
21
27
|
- in prod, or educational material, `luca` refers to the binary build. In this mode, it can work in any project, and load `commands/` and `endpoints/` through its VM and therefore allows folders of these modules which don't depend on anything from NPM to extend the CLI and be used in commands like `luca serve` to run a local express server
|
|
22
28
|
|
|
23
|
-
- The `luca` cli is an extremely helpful tool.
|
|
24
|
-
- it runs code `luca eval "container.features.available"`
|
|
29
|
+
- The `luca` cli is an extremely helpful tool.
|
|
30
|
+
- it runs code `luca eval "container.features.available"`
|
|
25
31
|
- it generates docs:
|
|
26
32
|
- `luca describe diskCache`
|
|
27
33
|
- `luca describe` describe the container itself
|
|
28
34
|
- `luca describe servers` describe which servers are available
|
|
29
35
|
- `luca describe ui.banner` describe a specific method or getter on a helper
|
|
30
36
|
- the arguments to describe are pretty forgiving and permissive
|
|
37
|
+
- `luca chat` — start an interactive chat session with an assistant
|
|
38
|
+
- `luca scaffold assistant <name>` — generate boilerplate for a new assistant
|
|
31
39
|
|
|
32
40
|
**IMPORTANT NOTE** When trying to investigate features, clients, servers, etc, see if these tools can help you first instead of searching for files and reading them that way. If youw ant to understand what they do, vs how theyre actually implemented
|
|
33
41
|
|
package/README.md
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
# Luca
|
|
2
2
|
|
|
3
3
|
**Lightweight Universal Conversational Architecture**
|
|
4
|
+
*(aka Le Ultimate Component Architecture)*
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
An agent-native TypeScript runtime that ships as a single binary — and builds yours too.
|
|
6
7
|
|
|
7
|
-
Luca gives
|
|
8
|
+
Luca gives humans and AI agents the same architectural map: one self-documenting `container` object with typed features, clients, servers, commands, state, events, and runtime docs. The agent doesn't guess at architecture — it discovers it. No `npm install`, no `node_modules`, no supply chain exposure, no ceremony.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
## What Makes Luca Different
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
AI agents today either generate sprawling ad-hoc code or fight against frameworks that weren't designed for them. They don't know what's available, what conventions to follow, or where to put things. The result is brittle, unreviewable output that drifts further from the codebase with every generation.
|
|
13
|
+
|
|
14
|
+
Luca solves this with three ideas:
|
|
15
|
+
|
|
16
|
+
**One introspectable container.** Every Luca app has a single `container` — a dependency-injected runtime that carries features, clients, servers, commands, endpoints, observable state, and an event bus. Every component describes itself: constructor options, method signatures, events emitted, state shape. The human reads the same docs the agent reads. There is one way to do things.
|
|
12
17
|
|
|
13
|
-
|
|
18
|
+
**Single binary in, single binary out.** Luca ships as a standalone binary. No runtime dependencies, no package manager, no exposure to the npm supply chain. You use it to build your project, then compile your project into its own standalone binary with your custom commands, features, endpoints, and assistants baked in.
|
|
19
|
+
|
|
20
|
+
**The assistant is a first-class citizen.** Luca's `Assistant` class can `use()` any feature, client, or server in the container — inheriting its tools automatically. The assistant doesn't need hand-written tool definitions. It discovers capabilities from the runtime it's embedded in.
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
14
23
|
|
|
15
24
|
```sh
|
|
16
25
|
curl -fsSL https://luca-js.soederpop.com/install.sh | bash
|
|
17
26
|
```
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
Detects your platform, downloads the binary, puts `luca` in your path. Done.
|
|
20
29
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Grab the latest release for your platform from [GitHub Releases](https://github.com/soederpop/luca/releases/latest):
|
|
30
|
+
Or grab a release directly from [GitHub Releases](https://github.com/soederpop/luca/releases/latest):
|
|
24
31
|
|
|
25
32
|
| Platform | Binary |
|
|
26
33
|
|----------|--------|
|
|
@@ -30,137 +37,149 @@ Grab the latest release for your platform from [GitHub Releases](https://github.
|
|
|
30
37
|
| Linux ARM64 | `luca-linux-arm64` |
|
|
31
38
|
| Windows x64 | `luca-windows-x64.exe` |
|
|
32
39
|
|
|
33
|
-
### Verify
|
|
34
|
-
|
|
35
40
|
```sh
|
|
36
41
|
luca --version
|
|
37
|
-
# luca v0.0.34 (main@325a0ee) built 2026-03-25T06:10:28Z
|
|
38
42
|
```
|
|
39
43
|
|
|
40
44
|
## Quick Start
|
|
41
45
|
|
|
42
|
-
### Bootstrap a new project
|
|
43
|
-
|
|
44
46
|
```sh
|
|
45
47
|
luca bootstrap my-app
|
|
46
48
|
cd my-app
|
|
47
49
|
```
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
This scaffolds a project with `commands/`, `endpoints/`, `features/`, `docs/`, and AI assistant configuration — everything wired up and ready to extend.
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
Now explore what the runtime can do:
|
|
52
54
|
|
|
53
55
|
```sh
|
|
54
56
|
luca # list all commands
|
|
55
|
-
luca describe features #
|
|
56
|
-
luca describe fs # full docs for
|
|
57
|
+
luca describe features # see every available feature
|
|
58
|
+
luca describe fs # full docs for a specific feature
|
|
57
59
|
luca describe fs.readFile # drill into a specific method
|
|
58
|
-
luca eval "container.features.available" # run code
|
|
60
|
+
luca eval "container.features.available" # run code against the live container
|
|
59
61
|
luca console # full REPL
|
|
60
62
|
```
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
This is the core loop: discover what's available, evaluate code against it, build on top of it. Your AI assistant does the same thing.
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
## The Container
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
# my-script.md
|
|
68
|
-
|
|
69
|
-
Grab some data and print it:
|
|
68
|
+
One import. One object. Everything on it.
|
|
70
69
|
|
|
71
70
|
```ts
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
import container from 'luca'
|
|
72
|
+
|
|
73
|
+
container.features.available // ['fs', 'git', 'proc', 'vault', 'yaml', 'sqlite', ...]
|
|
74
|
+
container.clients.available // ['rest', 'websocket', ...]
|
|
75
|
+
container.servers.available // ['express', 'websocket', 'ipc', 'mcp', ...]
|
|
75
76
|
```
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
The container is a singleton — a per-process global that acts as dependency injector, event bus, and state machine. Features, clients, and servers are lazy-loaded from registries. Every helper carries introspection metadata that powers `luca describe`, the REPL, and agent tool discovery.
|
|
78
79
|
|
|
79
80
|
```ts
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
````
|
|
84
|
-
|
|
85
|
-
```sh
|
|
86
|
-
luca run my-script.md
|
|
81
|
+
const fs = container.feature('fs')
|
|
82
|
+
const rest = container.client('rest', { baseURL: 'https://api.example.com' })
|
|
83
|
+
const server = container.server('express')
|
|
87
84
|
```
|
|
88
85
|
|
|
89
|
-
|
|
86
|
+
No imports beyond the container. No `require('fs')`, no `import axios`, no `npm install anything`. The container provides file I/O, HTTP clients, databases, YAML parsing, git operations, browser automation, terminal UI, semantic search, encryption, and more — all typed, all documented, all discoverable at runtime.
|
|
90
87
|
|
|
91
|
-
###
|
|
88
|
+
### In the browser
|
|
92
89
|
|
|
93
|
-
```
|
|
94
|
-
|
|
90
|
+
```js
|
|
91
|
+
import container from 'https://esm.sh/luca/web'
|
|
95
92
|
```
|
|
96
93
|
|
|
97
|
-
|
|
94
|
+
Same singleton pattern, optimized for browser features. `window.luca` is set automatically.
|
|
98
95
|
|
|
99
|
-
##
|
|
96
|
+
## Build an Assistant
|
|
100
97
|
|
|
101
|
-
|
|
102
|
-
import container from '@soederpop/luca'
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
That's it — you get one object with everything on it. No factory function, no setup. It's a singleton.
|
|
98
|
+
The assistant is the interface that ties everything together. It can `use()` any module in the container, automatically inheriting that module's tools:
|
|
106
99
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
### In the browser via esm.sh
|
|
100
|
+
```ts
|
|
101
|
+
import container from 'luca'
|
|
110
102
|
|
|
111
|
-
|
|
103
|
+
const browser = container.feature('browserUse', { headed: true })
|
|
104
|
+
const assistant = container.feature('assistant', {
|
|
105
|
+
systemPrompt: 'You are a web research assistant.',
|
|
106
|
+
model: 'gpt-4.1-mini',
|
|
107
|
+
})
|
|
112
108
|
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
// browserUse injects its tools — open, click, type, screenshot, extract, etc.
|
|
110
|
+
assistant.use(browser)
|
|
111
|
+
await assistant.start()
|
|
115
112
|
|
|
116
|
-
|
|
113
|
+
await assistant.ask('Go to hacker news and tell me the top 3 stories')
|
|
117
114
|
```
|
|
118
115
|
|
|
119
|
-
|
|
116
|
+
The assistant doesn't need hand-written tool schemas. When it calls `use(browser)`, it gets every tool that `browserUse` exposes — typed, documented, ready to invoke. Swap `browserUse` for `fs` or `git` or `sqlite` and the assistant gets a completely different toolkit from the same pattern.
|
|
120
117
|
|
|
121
|
-
|
|
122
|
-
const { default: container } = await import('https://esm.sh/@soederpop/luca/web')
|
|
118
|
+
This is what agent-native means: the runtime teaches the agent what it can do.
|
|
123
119
|
|
|
124
|
-
|
|
125
|
-
```
|
|
120
|
+
### The Assistant as Operator
|
|
126
121
|
|
|
127
|
-
|
|
122
|
+
Most agent frameworks give you a chat loop with tool calls bolted on. Luca gives you an agent that can operate real infrastructure.
|
|
128
123
|
|
|
129
|
-
|
|
124
|
+
The container has servers — REST, WebSocket, IPC. It has clients for all of them. It has process management, a VM, file I/O, databases, git, docker, SSH, even GPU compute over RunPod. The assistant can `use()` any combination of these, which means you can build agents that:
|
|
130
125
|
|
|
131
|
-
|
|
126
|
+
- **Stand up and manage servers** — spin up an Express server, add routes, react to incoming requests
|
|
127
|
+
- **Listen to events across transports** — WebSocket messages, IPC signals, HTTP webhooks, file system changes
|
|
128
|
+
- **Spawn and manage processes** — launch child processes, monitor their output, kill them when done — locally, over SSH, in Docker containers, or on remote GPU instances
|
|
129
|
+
- **Inspect and react to state** — every helper has observable state and an event bus; the assistant can watch for changes and act on them autonomously
|
|
130
|
+
- **Run code in a sandboxed VM** — execute untrusted code safely, evaluate expressions, build REPL-like workflows
|
|
132
131
|
|
|
133
|
-
|
|
132
|
+
The assistant isn't answering questions in a chat window. It's running your infrastructure, reacting to events in real time, and coordinating across multiple systems — all through the same `container` it already knows how to discover.
|
|
134
133
|
|
|
135
134
|
```ts
|
|
136
|
-
|
|
135
|
+
const assistant = container.feature('assistant', {
|
|
136
|
+
systemPrompt: 'You manage the deployment pipeline. Monitor builds, restart failed services, report status.',
|
|
137
|
+
model: 'gpt-4.1-mini',
|
|
138
|
+
})
|
|
137
139
|
|
|
138
|
-
container.
|
|
139
|
-
container.
|
|
140
|
-
container.
|
|
140
|
+
assistant.use(container.feature('proc'))
|
|
141
|
+
assistant.use(container.server('express'))
|
|
142
|
+
assistant.use(container.server('websocket'))
|
|
143
|
+
assistant.use(container.feature('docker'))
|
|
144
|
+
assistant.use(container.feature('fs'))
|
|
141
145
|
|
|
142
|
-
|
|
143
|
-
container.feature('fs').introspect() // json
|
|
144
|
-
container.feature('fs').introspectAsText() // markdown
|
|
146
|
+
await assistant.start()
|
|
145
147
|
```
|
|
146
148
|
|
|
147
|
-
|
|
149
|
+
That's an agent harness. Not a chatbot — an operator.
|
|
148
150
|
|
|
149
|
-
|
|
151
|
+
## Build Your Own Binary
|
|
150
152
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
Luca isn't just a tool you use — it's a tool that builds tools.
|
|
154
|
+
|
|
155
|
+
Bootstrap a project, add your own commands, features, endpoints, and assistants, then compile the whole thing into a standalone binary:
|
|
156
|
+
|
|
157
|
+
```sh
|
|
158
|
+
luca bootstrap my-tool
|
|
159
|
+
cd my-tool
|
|
160
|
+
|
|
161
|
+
# add your own commands, features, endpoints
|
|
162
|
+
luca scaffold command analyze --description "Run analysis on input data"
|
|
163
|
+
luca scaffold feature myCache --description "Custom caching layer"
|
|
164
|
+
luca scaffold endpoint status --description "Health check endpoint"
|
|
165
|
+
|
|
166
|
+
# compile to a single binary
|
|
167
|
+
luca bundle
|
|
155
168
|
```
|
|
156
169
|
|
|
157
|
-
|
|
170
|
+
The output is a self-contained executable. No node, no bun, no npm on the target machine. Your users download one file and run it. Your custom commands show up in `my-tool --help`. Your assistant ships inside.
|
|
158
171
|
|
|
159
|
-
|
|
172
|
+
## Project Structure
|
|
160
173
|
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
174
|
+
Convention-based folders are auto-discovered:
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
commands/ custom CLI commands → luca <name>
|
|
178
|
+
endpoints/ file-based HTTP routes → luca serve
|
|
179
|
+
features/ custom container features → container.feature('<name>')
|
|
180
|
+
assistants/ AI assistants with system prompts and tools
|
|
181
|
+
docs/ content documents queryable via container.docs
|
|
182
|
+
```
|
|
164
183
|
|
|
165
184
|
Generate boilerplate with `luca scaffold`:
|
|
166
185
|
|
|
@@ -170,33 +189,40 @@ luca scaffold feature myCache --description "Custom caching layer"
|
|
|
170
189
|
luca scaffold endpoint users --description "User management API"
|
|
171
190
|
```
|
|
172
191
|
|
|
173
|
-
|
|
192
|
+
## Run Scripts and Markdown
|
|
174
193
|
|
|
175
|
-
|
|
194
|
+
`luca run` executes TypeScript, JavaScript, and markdown files with the container in scope:
|
|
176
195
|
|
|
177
|
-
|
|
178
|
-
|
|
196
|
+
````md
|
|
197
|
+
# my-script.md
|
|
179
198
|
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
199
|
+
```ts
|
|
200
|
+
const fs = container.feature('fs')
|
|
201
|
+
const files = await fs.readdir('.')
|
|
202
|
+
console.log(`Found ${files.length} files`)
|
|
203
|
+
```
|
|
185
204
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
205
|
+
```ts
|
|
206
|
+
const yaml = container.feature('yaml')
|
|
207
|
+
console.log(yaml.stringify({ files }))
|
|
208
|
+
```
|
|
209
|
+
````
|
|
189
210
|
|
|
190
|
-
|
|
211
|
+
```sh
|
|
212
|
+
luca run my-script.md
|
|
191
213
|
```
|
|
192
214
|
|
|
193
|
-
|
|
215
|
+
Blocks share state. Use `--safe` for approval before each block, `--console` to drop into a REPL afterward with accumulated context.
|
|
194
216
|
|
|
195
|
-
|
|
217
|
+
## AI Coding Assistant Integration
|
|
196
218
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
- `luca
|
|
219
|
+
Luca is designed to work alongside Claude Code, Codex, and other AI coding assistants:
|
|
220
|
+
|
|
221
|
+
- `luca describe` gives the assistant full API docs for any helper — method signatures, options, events, state shape
|
|
222
|
+
- `luca eval` lets the assistant test container expressions before writing code
|
|
223
|
+
- `luca sandbox-mcp` exposes a REPL and doc browser as an MCP server
|
|
224
|
+
|
|
225
|
+
The assistant doesn't need to read source files to understand the framework. It asks the framework directly.
|
|
200
226
|
|
|
201
227
|
## Development
|
|
202
228
|
|
|
@@ -213,15 +239,10 @@ bun install
|
|
|
213
239
|
bun run setup
|
|
214
240
|
```
|
|
215
241
|
|
|
216
|
-
`bun run setup` applies `git update-index --skip-worktree` to the build artifact stubs so local changes to generated files (from running `build:introspection`, `build:scaffolds`, etc.) are never accidentally committed.
|
|
217
|
-
|
|
218
242
|
### Running in dev
|
|
219
243
|
|
|
220
244
|
```sh
|
|
221
|
-
|
|
222
|
-
bun run src/cli/cli.ts
|
|
223
|
-
|
|
224
|
-
# Examples
|
|
245
|
+
bun run src/cli/cli.ts # same as luca binary
|
|
225
246
|
bun run src/cli/cli.ts describe features
|
|
226
247
|
bun run src/cli/cli.ts eval "container.features.available"
|
|
227
248
|
```
|
|
@@ -229,11 +250,8 @@ bun run src/cli/cli.ts eval "container.features.available"
|
|
|
229
250
|
### Testing
|
|
230
251
|
|
|
231
252
|
```sh
|
|
232
|
-
#
|
|
233
|
-
bun test
|
|
234
|
-
|
|
235
|
-
# Integration tests (may require API keys / env vars)
|
|
236
|
-
bun run test:integration
|
|
253
|
+
bun test # unit tests
|
|
254
|
+
bun run test:integration # integration tests (may require API keys)
|
|
237
255
|
```
|
|
238
256
|
|
|
239
257
|
### Building the binary
|
|
@@ -242,13 +260,13 @@ bun run test:integration
|
|
|
242
260
|
bun run compile
|
|
243
261
|
```
|
|
244
262
|
|
|
245
|
-
|
|
263
|
+
Runs the full pipeline: introspection generation, scaffold templates, build stamp, then compiles to `dist/luca` via Bun's native compiler.
|
|
246
264
|
|
|
247
265
|
### Project structure
|
|
248
266
|
|
|
249
267
|
```
|
|
250
268
|
src/
|
|
251
|
-
cli/ CLI entry point and commands
|
|
269
|
+
cli/ CLI entry point and built-in commands
|
|
252
270
|
node/ NodeContainer and server-side features
|
|
253
271
|
web/ WebContainer and browser features
|
|
254
272
|
agi/ AGIContainer — AI assistant layer
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
+
model: qwen/qwen-3.6-27b
|
|
3
|
+
clientOptions:
|
|
4
|
+
baseURL: http://chief:1234/v1
|
|
5
|
+
apiKey: sk-local
|
|
6
|
+
contextWindow: 64000
|
|
2
7
|
skills:
|
|
3
8
|
- luca-framework
|
|
4
9
|
---
|
|
5
10
|
# Coding Assistant
|
|
6
11
|
|
|
7
|
-
You are a Luca Framework coding assistant. You read, search, understand, and modify codebases that use the
|
|
12
|
+
You are a Luca Framework coding assistant. You read, search, understand, and modify codebases that use the luca framework. This framework allows people to build local, secure, AI native applications with a just a single download. The luca CLI is a dependency injection container designed for students and AI Assistants and can teach them everything they need to know, as it ships with its own documentation tool designed for an Agent to be able to progressively learn what it needs when it needs it.
|
|
8
13
|
|
|
9
14
|
## Luca First
|
|
10
15
|
|