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
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
# RedisFeature (features.redis)
|
|
2
|
-
|
|
3
|
-
Redis feature for shared state and pub/sub communication between container instances. Wraps ioredis with a focused API for the primitives that matter most: key/value state, pub/sub messaging, and cross-instance coordination. Uses a dedicated subscriber connection for pub/sub (ioredis requirement), created lazily on first subscribe call.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
container.feature('redis', {
|
|
9
|
-
// Redis connection URL, e.g. redis://localhost:6379. Defaults to redis://localhost:6379
|
|
10
|
-
url,
|
|
11
|
-
// Key prefix applied to all get/set/del operations for namespace isolation
|
|
12
|
-
prefix,
|
|
13
|
-
// If true, connection is deferred until first command
|
|
14
|
-
lazyConnect,
|
|
15
|
-
})
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Options (Zod v4 schema)
|
|
19
|
-
|
|
20
|
-
| Property | Type | Description |
|
|
21
|
-
|----------|------|-------------|
|
|
22
|
-
| `url` | `string` | Redis connection URL, e.g. redis://localhost:6379. Defaults to redis://localhost:6379 |
|
|
23
|
-
| `prefix` | `string` | Key prefix applied to all get/set/del operations for namespace isolation |
|
|
24
|
-
| `lazyConnect` | `boolean` | If true, connection is deferred until first command |
|
|
25
|
-
|
|
26
|
-
## Methods
|
|
27
|
-
|
|
28
|
-
### set
|
|
29
|
-
|
|
30
|
-
Set a key to a string value with optional TTL.
|
|
31
|
-
|
|
32
|
-
**Parameters:**
|
|
33
|
-
|
|
34
|
-
| Name | Type | Required | Description |
|
|
35
|
-
|------|------|----------|-------------|
|
|
36
|
-
| `key` | `string` | ✓ | The key name |
|
|
37
|
-
| `value` | `string` | ✓ | The string value to store |
|
|
38
|
-
| `ttl` | `number` | | Optional time-to-live in seconds |
|
|
39
|
-
|
|
40
|
-
**Returns:** `Promise<void>`
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
### get
|
|
45
|
-
|
|
46
|
-
Get a key's value. Returns null if the key doesn't exist.
|
|
47
|
-
|
|
48
|
-
**Parameters:**
|
|
49
|
-
|
|
50
|
-
| Name | Type | Required | Description |
|
|
51
|
-
|------|------|----------|-------------|
|
|
52
|
-
| `key` | `string` | ✓ | The key name |
|
|
53
|
-
|
|
54
|
-
**Returns:** `Promise<string | null>`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
### del
|
|
59
|
-
|
|
60
|
-
Delete one or more keys.
|
|
61
|
-
|
|
62
|
-
**Parameters:**
|
|
63
|
-
|
|
64
|
-
| Name | Type | Required | Description |
|
|
65
|
-
|------|------|----------|-------------|
|
|
66
|
-
| `keys` | `string[]` | ✓ | One or more key names to delete |
|
|
67
|
-
|
|
68
|
-
**Returns:** `Promise<number>`
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
### exists
|
|
73
|
-
|
|
74
|
-
Check if a key exists.
|
|
75
|
-
|
|
76
|
-
**Parameters:**
|
|
77
|
-
|
|
78
|
-
| Name | Type | Required | Description |
|
|
79
|
-
|------|------|----------|-------------|
|
|
80
|
-
| `key` | `string` | ✓ | The key name |
|
|
81
|
-
|
|
82
|
-
**Returns:** `Promise<boolean>`
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
### expire
|
|
87
|
-
|
|
88
|
-
Set a key's TTL in seconds.
|
|
89
|
-
|
|
90
|
-
**Parameters:**
|
|
91
|
-
|
|
92
|
-
| Name | Type | Required | Description |
|
|
93
|
-
|------|------|----------|-------------|
|
|
94
|
-
| `key` | `string` | ✓ | The key name |
|
|
95
|
-
| `seconds` | `number` | ✓ | TTL in seconds |
|
|
96
|
-
|
|
97
|
-
**Returns:** `Promise<boolean>`
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
### keys
|
|
102
|
-
|
|
103
|
-
Find keys matching a glob pattern (respects prefix).
|
|
104
|
-
|
|
105
|
-
**Parameters:**
|
|
106
|
-
|
|
107
|
-
| Name | Type | Required | Description |
|
|
108
|
-
|------|------|----------|-------------|
|
|
109
|
-
| `pattern` | `string` | | Glob pattern, e.g. "worker:*" |
|
|
110
|
-
|
|
111
|
-
**Returns:** `Promise<string[]>`
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
### setJSON
|
|
116
|
-
|
|
117
|
-
Store a value as JSON.
|
|
118
|
-
|
|
119
|
-
**Parameters:**
|
|
120
|
-
|
|
121
|
-
| Name | Type | Required | Description |
|
|
122
|
-
|------|------|----------|-------------|
|
|
123
|
-
| `key` | `string` | ✓ | The key name |
|
|
124
|
-
| `value` | `unknown` | ✓ | Any JSON-serializable value |
|
|
125
|
-
| `ttl` | `number` | | Optional TTL in seconds |
|
|
126
|
-
|
|
127
|
-
**Returns:** `Promise<void>`
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
### getJSON
|
|
132
|
-
|
|
133
|
-
Retrieve and parse a JSON value.
|
|
134
|
-
|
|
135
|
-
**Parameters:**
|
|
136
|
-
|
|
137
|
-
| Name | Type | Required | Description |
|
|
138
|
-
|------|------|----------|-------------|
|
|
139
|
-
| `key` | `string` | ✓ | The key name |
|
|
140
|
-
|
|
141
|
-
**Returns:** `Promise<T | null>`
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
### hset
|
|
146
|
-
|
|
147
|
-
Set fields on a hash.
|
|
148
|
-
|
|
149
|
-
**Parameters:**
|
|
150
|
-
|
|
151
|
-
| Name | Type | Required | Description |
|
|
152
|
-
|------|------|----------|-------------|
|
|
153
|
-
| `key` | `string` | ✓ | The hash key |
|
|
154
|
-
| `fields` | `Record<string, string>` | ✓ | Object of field/value pairs |
|
|
155
|
-
|
|
156
|
-
**Returns:** `Promise<void>`
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
### hgetall
|
|
161
|
-
|
|
162
|
-
Get all fields from a hash.
|
|
163
|
-
|
|
164
|
-
**Parameters:**
|
|
165
|
-
|
|
166
|
-
| Name | Type | Required | Description |
|
|
167
|
-
|------|------|----------|-------------|
|
|
168
|
-
| `key` | `string` | ✓ | The hash key |
|
|
169
|
-
|
|
170
|
-
**Returns:** `Promise<Record<string, string>>`
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
### hget
|
|
175
|
-
|
|
176
|
-
Get a single field from a hash.
|
|
177
|
-
|
|
178
|
-
**Parameters:**
|
|
179
|
-
|
|
180
|
-
| Name | Type | Required | Description |
|
|
181
|
-
|------|------|----------|-------------|
|
|
182
|
-
| `key` | `string` | ✓ | The hash key |
|
|
183
|
-
| `field` | `string` | ✓ | The field name |
|
|
184
|
-
|
|
185
|
-
**Returns:** `Promise<string | null>`
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
### subscribe
|
|
190
|
-
|
|
191
|
-
Subscribe to one or more channels. Optionally pass a handler that fires only for these channels. The feature also emits a `message` event for all messages.
|
|
192
|
-
|
|
193
|
-
**Parameters:**
|
|
194
|
-
|
|
195
|
-
| Name | Type | Required | Description |
|
|
196
|
-
|------|------|----------|-------------|
|
|
197
|
-
| `channels` | `string | string[]` | ✓ | Channel name(s) to subscribe to |
|
|
198
|
-
| `handler` | `MessageHandler` | | Optional per-channel message handler |
|
|
199
|
-
|
|
200
|
-
**Returns:** `Promise<void>`
|
|
201
|
-
|
|
202
|
-
```ts
|
|
203
|
-
await redis.subscribe('tasks', (channel, msg) => {
|
|
204
|
-
console.log(`Got ${msg} on ${channel}`)
|
|
205
|
-
})
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
### unsubscribe
|
|
211
|
-
|
|
212
|
-
Unsubscribe from one or more channels.
|
|
213
|
-
|
|
214
|
-
**Parameters:**
|
|
215
|
-
|
|
216
|
-
| Name | Type | Required | Description |
|
|
217
|
-
|------|------|----------|-------------|
|
|
218
|
-
| `channels` | `string[]` | ✓ | Channel name(s) to unsubscribe from |
|
|
219
|
-
|
|
220
|
-
**Returns:** `Promise<void>`
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
### publish
|
|
225
|
-
|
|
226
|
-
Publish a message to a channel.
|
|
227
|
-
|
|
228
|
-
**Parameters:**
|
|
229
|
-
|
|
230
|
-
| Name | Type | Required | Description |
|
|
231
|
-
|------|------|----------|-------------|
|
|
232
|
-
| `channel` | `string` | ✓ | The channel to publish to |
|
|
233
|
-
| `message` | `string` | ✓ | The message string (use JSON.stringify for objects) |
|
|
234
|
-
|
|
235
|
-
**Returns:** `Promise<number>`
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
### ensureLocalDocker
|
|
240
|
-
|
|
241
|
-
Spin up a local Redis instance via Docker. Checks if a container with the given name already exists and starts it if stopped, or creates a new one from redis:alpine. Requires the docker feature to be available on the container.
|
|
242
|
-
|
|
243
|
-
**Parameters:**
|
|
244
|
-
|
|
245
|
-
| Name | Type | Required | Description |
|
|
246
|
-
|------|------|----------|-------------|
|
|
247
|
-
| `options` | `{ name?: string; port?: number; image?: string }` | | Container name and host port |
|
|
248
|
-
|
|
249
|
-
**Returns:** `Promise<string>`
|
|
250
|
-
|
|
251
|
-
```ts
|
|
252
|
-
const redis = container.feature('redis', { url: 'redis://localhost:6379', lazyConnect: true })
|
|
253
|
-
await redis.ensureLocalDocker()
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
### close
|
|
259
|
-
|
|
260
|
-
Close all redis connections (main client + subscriber).
|
|
261
|
-
|
|
262
|
-
**Returns:** `Promise<this>`
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
## Getters
|
|
267
|
-
|
|
268
|
-
| Property | Type | Description |
|
|
269
|
-
|----------|------|-------------|
|
|
270
|
-
| `client` | `Redis` | The underlying ioredis client for advanced operations. |
|
|
271
|
-
| `subscriber` | `Redis | null` | The dedicated subscriber connection, if pub/sub is active. |
|
|
272
|
-
|
|
273
|
-
## Events (Zod v4 schema)
|
|
274
|
-
|
|
275
|
-
### message
|
|
276
|
-
|
|
277
|
-
When a message is received on a subscribed channel
|
|
278
|
-
|
|
279
|
-
**Event Arguments:**
|
|
280
|
-
|
|
281
|
-
| Name | Type | Description |
|
|
282
|
-
|------|------|-------------|
|
|
283
|
-
| `arg0` | `string` | The channel name |
|
|
284
|
-
| `arg1` | `string` | The message payload |
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
### error
|
|
289
|
-
|
|
290
|
-
When a redis operation fails
|
|
291
|
-
|
|
292
|
-
**Event Arguments:**
|
|
293
|
-
|
|
294
|
-
| Name | Type | Description |
|
|
295
|
-
|------|------|-------------|
|
|
296
|
-
| `arg0` | `string` | The error message |
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
### subscribed
|
|
301
|
-
|
|
302
|
-
When successfully subscribed to a channel
|
|
303
|
-
|
|
304
|
-
**Event Arguments:**
|
|
305
|
-
|
|
306
|
-
| Name | Type | Description |
|
|
307
|
-
|------|------|-------------|
|
|
308
|
-
| `arg0` | `string` | The channel name |
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
### unsubscribed
|
|
313
|
-
|
|
314
|
-
When unsubscribed from a channel
|
|
315
|
-
|
|
316
|
-
**Event Arguments:**
|
|
317
|
-
|
|
318
|
-
| Name | Type | Description |
|
|
319
|
-
|------|------|-------------|
|
|
320
|
-
| `arg0` | `string` | The channel name |
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
### closed
|
|
325
|
-
|
|
326
|
-
When the redis connection is closed
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
## State (Zod v4 schema)
|
|
331
|
-
|
|
332
|
-
| Property | Type | Description |
|
|
333
|
-
|----------|------|-------------|
|
|
334
|
-
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
335
|
-
| `connected` | `boolean` | Whether the redis connection is currently open |
|
|
336
|
-
| `url` | `string` | Connection URL used for this redis feature instance |
|
|
337
|
-
| `subscriberConnected` | `boolean` | Whether the dedicated subscriber connection is open |
|
|
338
|
-
| `subscribedChannels` | `array` | List of channels currently subscribed to |
|
|
339
|
-
| `lastError` | `string` | Most recent redis error message, if any |
|
|
340
|
-
|
|
341
|
-
## Examples
|
|
342
|
-
|
|
343
|
-
**features.redis**
|
|
344
|
-
|
|
345
|
-
```ts
|
|
346
|
-
const redis = container.feature('redis', { url: 'redis://localhost:6379' })
|
|
347
|
-
|
|
348
|
-
// Shared state
|
|
349
|
-
await redis.set('worker:status', 'active')
|
|
350
|
-
const status = await redis.get('worker:status')
|
|
351
|
-
|
|
352
|
-
// Pub/sub between instances
|
|
353
|
-
redis.on('message', (channel, msg) => console.log(`${channel}: ${msg}`))
|
|
354
|
-
await redis.subscribe('tasks')
|
|
355
|
-
await redis.publish('tasks', JSON.stringify({ type: 'ping' }))
|
|
356
|
-
|
|
357
|
-
// JSON helpers
|
|
358
|
-
await redis.setJSON('config', { workers: 4, debug: true })
|
|
359
|
-
const config = await redis.getJSON<{ workers: number }>('config')
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
**subscribe**
|
|
365
|
-
|
|
366
|
-
```ts
|
|
367
|
-
await redis.subscribe('tasks', (channel, msg) => {
|
|
368
|
-
console.log(`Got ${msg} on ${channel}`)
|
|
369
|
-
})
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
**ensureLocalDocker**
|
|
375
|
-
|
|
376
|
-
```ts
|
|
377
|
-
const redis = container.feature('redis', { url: 'redis://localhost:6379', lazyConnect: true })
|
|
378
|
-
await redis.ensureLocalDocker()
|
|
379
|
-
```
|
|
380
|
-
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# Repl (features.repl)
|
|
2
|
-
|
|
3
|
-
REPL feature — provides an interactive read-eval-print loop with tab completion and history. Launches a REPL session that evaluates JavaScript/TypeScript expressions in a sandboxed VM context populated with the container and its helpers. Supports tab completion for dot-notation property access, command history persistence, and async/await.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
container.feature('repl', {
|
|
9
|
-
// The prompt string to display in the REPL (default: "> ")
|
|
10
|
-
prompt,
|
|
11
|
-
// Path to the REPL history file for command persistence
|
|
12
|
-
historyPath,
|
|
13
|
-
})
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Options (Zod v4 schema)
|
|
17
|
-
|
|
18
|
-
| Property | Type | Description |
|
|
19
|
-
|----------|------|-------------|
|
|
20
|
-
| `prompt` | `string` | The prompt string to display in the REPL (default: "> ") |
|
|
21
|
-
| `historyPath` | `string` | Path to the REPL history file for command persistence |
|
|
22
|
-
|
|
23
|
-
## Methods
|
|
24
|
-
|
|
25
|
-
### start
|
|
26
|
-
|
|
27
|
-
Start the REPL session. Creates a VM context populated with the container and its helpers, sets up readline with tab completion and history, then enters the interactive loop. Type `.exit` or `exit` to quit. Supports top-level await.
|
|
28
|
-
|
|
29
|
-
**Parameters:**
|
|
30
|
-
|
|
31
|
-
| Name | Type | Required | Description |
|
|
32
|
-
|------|------|----------|-------------|
|
|
33
|
-
| `options` | `{ historyPath?: string, context?: any }` | | Configuration for the REPL session |
|
|
34
|
-
|
|
35
|
-
`{ historyPath?: string, context?: any }` properties:
|
|
36
|
-
|
|
37
|
-
| Property | Type | Description |
|
|
38
|
-
|----------|------|-------------|
|
|
39
|
-
| `historyPath` | `any` | Custom path for the history file (defaults to ~/.cache/luca/repl-{cwdHash}.history) |
|
|
40
|
-
| `context` | `any` | Additional variables to inject into the VM context |
|
|
41
|
-
|
|
42
|
-
**Returns:** `void`
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
const repl = container.feature('repl', { enable: true })
|
|
46
|
-
await repl.start({
|
|
47
|
-
context: { db: myDatabase },
|
|
48
|
-
historyPath: '.repl-history'
|
|
49
|
-
})
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
## Getters
|
|
55
|
-
|
|
56
|
-
| Property | Type | Description |
|
|
57
|
-
|----------|------|-------------|
|
|
58
|
-
| `isStarted` | `any` | Whether the REPL session is currently running. |
|
|
59
|
-
| `vmContext` | `any` | The VM context object used for evaluating expressions in the REPL. |
|
|
60
|
-
|
|
61
|
-
## State (Zod v4 schema)
|
|
62
|
-
|
|
63
|
-
| Property | Type | Description |
|
|
64
|
-
|----------|------|-------------|
|
|
65
|
-
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
66
|
-
| `started` | `boolean` | Whether the REPL server has been started |
|
|
67
|
-
|
|
68
|
-
## Examples
|
|
69
|
-
|
|
70
|
-
**features.repl**
|
|
71
|
-
|
|
72
|
-
```ts
|
|
73
|
-
const repl = container.feature('repl', { enable: true })
|
|
74
|
-
await repl.start({ context: { myVar: 42 } })
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
**start**
|
|
80
|
-
|
|
81
|
-
```ts
|
|
82
|
-
const repl = container.feature('repl', { enable: true })
|
|
83
|
-
await repl.start({
|
|
84
|
-
context: { db: myDatabase },
|
|
85
|
-
historyPath: '.repl-history'
|
|
86
|
-
})
|
|
87
|
-
```
|
|
88
|
-
|