@soederpop/luca 0.1.1 → 0.1.3
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/CLAUDE.md +2 -0
- package/assistants/codingAssistant/hooks.ts +3 -0
- package/assistants/inkbot/CORE.md +69 -0
- package/assistants/inkbot/hooks.ts +14 -0
- package/assistants/inkbot/tools.ts +47 -0
- package/commands/inkbot.ts +353 -0
- package/dist/agi/container.server.d.ts +63 -0
- package/dist/agi/container.server.d.ts.map +1 -0
- package/dist/agi/endpoints/ask.d.ts +20 -0
- package/dist/agi/endpoints/ask.d.ts.map +1 -0
- package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
- package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
- package/dist/agi/endpoints/conversations.d.ts +18 -0
- package/dist/agi/endpoints/conversations.d.ts.map +1 -0
- package/dist/agi/endpoints/experts.d.ts +8 -0
- package/dist/agi/endpoints/experts.d.ts.map +1 -0
- package/dist/agi/feature.d.ts +9 -0
- package/dist/agi/feature.d.ts.map +1 -0
- package/dist/agi/features/assistant.d.ts +509 -0
- package/dist/agi/features/assistant.d.ts.map +1 -0
- package/dist/agi/features/assistants-manager.d.ts +236 -0
- package/dist/agi/features/assistants-manager.d.ts.map +1 -0
- package/dist/agi/features/autonomous-assistant.d.ts +281 -0
- package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
- package/dist/agi/features/browser-use.d.ts +479 -0
- package/dist/agi/features/browser-use.d.ts.map +1 -0
- package/dist/agi/features/claude-code.d.ts +824 -0
- package/dist/agi/features/claude-code.d.ts.map +1 -0
- package/dist/agi/features/conversation-history.d.ts +245 -0
- package/dist/agi/features/conversation-history.d.ts.map +1 -0
- package/dist/agi/features/conversation.d.ts +464 -0
- package/dist/agi/features/conversation.d.ts.map +1 -0
- package/dist/agi/features/docs-reader.d.ts +72 -0
- package/dist/agi/features/docs-reader.d.ts.map +1 -0
- package/dist/agi/features/file-tools.d.ts +110 -0
- package/dist/agi/features/file-tools.d.ts.map +1 -0
- package/dist/agi/features/luca-coder.d.ts +323 -0
- package/dist/agi/features/luca-coder.d.ts.map +1 -0
- package/dist/agi/features/openai-codex.d.ts +381 -0
- package/dist/agi/features/openai-codex.d.ts.map +1 -0
- package/dist/agi/features/openapi.d.ts +200 -0
- package/dist/agi/features/openapi.d.ts.map +1 -0
- package/dist/agi/features/skills-library.d.ts +167 -0
- package/dist/agi/features/skills-library.d.ts.map +1 -0
- package/dist/agi/index.d.ts +5 -0
- package/dist/agi/index.d.ts.map +1 -0
- package/dist/agi/lib/interceptor-chain.d.ts +44 -0
- package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
- package/dist/agi/lib/token-counter.d.ts +13 -0
- package/dist/agi/lib/token-counter.d.ts.map +1 -0
- package/dist/bootstrap/generated.d.ts +5 -0
- package/dist/bootstrap/generated.d.ts.map +1 -0
- package/dist/browser.d.ts +12 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/bus.d.ts +29 -0
- package/dist/bus.d.ts.map +1 -0
- package/dist/cli/build-info.d.ts +4 -0
- package/dist/cli/build-info.d.ts.map +1 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/client.d.ts +60 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/clients/civitai/index.d.ts +472 -0
- package/dist/clients/civitai/index.d.ts.map +1 -0
- package/dist/clients/client-template.d.ts +30 -0
- package/dist/clients/client-template.d.ts.map +1 -0
- package/dist/clients/comfyui/index.d.ts +281 -0
- package/dist/clients/comfyui/index.d.ts.map +1 -0
- package/dist/clients/elevenlabs/index.d.ts +197 -0
- package/dist/clients/elevenlabs/index.d.ts.map +1 -0
- package/dist/clients/graph.d.ts +64 -0
- package/dist/clients/graph.d.ts.map +1 -0
- package/dist/clients/openai/index.d.ts +247 -0
- package/dist/clients/openai/index.d.ts.map +1 -0
- package/dist/clients/rest.d.ts +92 -0
- package/dist/clients/rest.d.ts.map +1 -0
- package/dist/clients/supabase/index.d.ts +176 -0
- package/dist/clients/supabase/index.d.ts.map +1 -0
- package/dist/clients/websocket.d.ts +127 -0
- package/dist/clients/websocket.d.ts.map +1 -0
- package/dist/command.d.ts +163 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/commands/bootstrap.d.ts +20 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/chat.d.ts +37 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/code.d.ts +28 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/console.d.ts +22 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/describe.d.ts +50 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/eval.d.ts +23 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/help.d.ts +25 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/introspect.d.ts +24 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/mcp.d.ts +35 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/prompt.d.ts +38 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/run.d.ts +24 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/sandbox-mcp.d.ts +34 -0
- package/dist/commands/sandbox-mcp.d.ts.map +1 -0
- package/dist/commands/save-api-docs.d.ts +21 -0
- package/dist/commands/save-api-docs.d.ts.map +1 -0
- package/dist/commands/scaffold.d.ts +24 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/select.d.ts +22 -0
- package/dist/commands/select.d.ts.map +1 -0
- package/dist/commands/serve.d.ts +29 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/container-describer.d.ts +144 -0
- package/dist/container-describer.d.ts.map +1 -0
- package/dist/container.d.ts +451 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/endpoint.d.ts +113 -0
- package/dist/endpoint.d.ts.map +1 -0
- package/dist/feature.d.ts +47 -0
- package/dist/feature.d.ts.map +1 -0
- package/dist/graft.d.ts +29 -0
- package/dist/graft.d.ts.map +1 -0
- package/dist/hash-object.d.ts +8 -0
- package/dist/hash-object.d.ts.map +1 -0
- package/dist/helper.d.ts +209 -0
- package/dist/helper.d.ts.map +1 -0
- package/dist/introspection/generated.node.d.ts +44623 -0
- package/dist/introspection/generated.node.d.ts.map +1 -0
- package/dist/introspection/generated.web.d.ts +1412 -0
- package/dist/introspection/generated.web.d.ts.map +1 -0
- package/dist/introspection/index.d.ts +156 -0
- package/dist/introspection/index.d.ts.map +1 -0
- package/dist/introspection/scan.d.ts +147 -0
- package/dist/introspection/scan.d.ts.map +1 -0
- package/dist/node/container.d.ts +256 -0
- package/dist/node/container.d.ts.map +1 -0
- package/dist/node/feature.d.ts +9 -0
- package/dist/node/feature.d.ts.map +1 -0
- package/dist/node/features/container-link.d.ts +213 -0
- package/dist/node/features/container-link.d.ts.map +1 -0
- package/dist/node/features/content-db.d.ts +354 -0
- package/dist/node/features/content-db.d.ts.map +1 -0
- package/dist/node/features/disk-cache.d.ts +236 -0
- package/dist/node/features/disk-cache.d.ts.map +1 -0
- package/dist/node/features/dns.d.ts +511 -0
- package/dist/node/features/dns.d.ts.map +1 -0
- package/dist/node/features/docker.d.ts +485 -0
- package/dist/node/features/docker.d.ts.map +1 -0
- package/dist/node/features/downloader.d.ts +73 -0
- package/dist/node/features/downloader.d.ts.map +1 -0
- package/dist/node/features/figlet-fonts.d.ts +4 -0
- package/dist/node/features/figlet-fonts.d.ts.map +1 -0
- package/dist/node/features/file-manager.d.ts +177 -0
- package/dist/node/features/file-manager.d.ts.map +1 -0
- package/dist/node/features/fs.d.ts +635 -0
- package/dist/node/features/fs.d.ts.map +1 -0
- package/dist/node/features/git.d.ts +329 -0
- package/dist/node/features/git.d.ts.map +1 -0
- package/dist/node/features/google-auth.d.ts +200 -0
- package/dist/node/features/google-auth.d.ts.map +1 -0
- package/dist/node/features/google-calendar.d.ts +194 -0
- package/dist/node/features/google-calendar.d.ts.map +1 -0
- package/dist/node/features/google-docs.d.ts +138 -0
- package/dist/node/features/google-docs.d.ts.map +1 -0
- package/dist/node/features/google-drive.d.ts +202 -0
- package/dist/node/features/google-drive.d.ts.map +1 -0
- package/dist/node/features/google-mail.d.ts +221 -0
- package/dist/node/features/google-mail.d.ts.map +1 -0
- package/dist/node/features/google-sheets.d.ts +157 -0
- package/dist/node/features/google-sheets.d.ts.map +1 -0
- package/dist/node/features/grep.d.ts +207 -0
- package/dist/node/features/grep.d.ts.map +1 -0
- package/dist/node/features/helpers.d.ts +236 -0
- package/dist/node/features/helpers.d.ts.map +1 -0
- package/dist/node/features/ink.d.ts +332 -0
- package/dist/node/features/ink.d.ts.map +1 -0
- package/dist/node/features/ipc-socket.d.ts +298 -0
- package/dist/node/features/ipc-socket.d.ts.map +1 -0
- package/dist/node/features/json-tree.d.ts +140 -0
- package/dist/node/features/json-tree.d.ts.map +1 -0
- package/dist/node/features/networking.d.ts +373 -0
- package/dist/node/features/networking.d.ts.map +1 -0
- package/dist/node/features/nlp.d.ts +125 -0
- package/dist/node/features/nlp.d.ts.map +1 -0
- package/dist/node/features/opener.d.ts +93 -0
- package/dist/node/features/opener.d.ts.map +1 -0
- package/dist/node/features/os.d.ts +168 -0
- package/dist/node/features/os.d.ts.map +1 -0
- package/dist/node/features/package-finder.d.ts +419 -0
- package/dist/node/features/package-finder.d.ts.map +1 -0
- package/dist/node/features/postgres.d.ts +173 -0
- package/dist/node/features/postgres.d.ts.map +1 -0
- package/dist/node/features/proc.d.ts +285 -0
- package/dist/node/features/proc.d.ts.map +1 -0
- package/dist/node/features/process-manager.d.ts +427 -0
- package/dist/node/features/process-manager.d.ts.map +1 -0
- package/dist/node/features/python.d.ts +477 -0
- package/dist/node/features/python.d.ts.map +1 -0
- package/dist/node/features/redis.d.ts +247 -0
- package/dist/node/features/redis.d.ts.map +1 -0
- package/dist/node/features/repl.d.ts +84 -0
- package/dist/node/features/repl.d.ts.map +1 -0
- package/dist/node/features/runpod.d.ts +527 -0
- package/dist/node/features/runpod.d.ts.map +1 -0
- package/dist/node/features/secure-shell.d.ts +145 -0
- package/dist/node/features/secure-shell.d.ts.map +1 -0
- package/dist/node/features/semantic-search.d.ts +207 -0
- package/dist/node/features/semantic-search.d.ts.map +1 -0
- package/dist/node/features/sqlite.d.ts +180 -0
- package/dist/node/features/sqlite.d.ts.map +1 -0
- package/dist/node/features/telegram.d.ts +173 -0
- package/dist/node/features/telegram.d.ts.map +1 -0
- package/dist/node/features/transpiler.d.ts +51 -0
- package/dist/node/features/transpiler.d.ts.map +1 -0
- package/dist/node/features/tts.d.ts +108 -0
- package/dist/node/features/tts.d.ts.map +1 -0
- package/dist/node/features/ui.d.ts +562 -0
- package/dist/node/features/ui.d.ts.map +1 -0
- package/dist/node/features/vault.d.ts +90 -0
- package/dist/node/features/vault.d.ts.map +1 -0
- package/dist/node/features/vm.d.ts +285 -0
- package/dist/node/features/vm.d.ts.map +1 -0
- package/dist/node/features/yaml-tree.d.ts +118 -0
- package/dist/node/features/yaml-tree.d.ts.map +1 -0
- package/dist/node/features/yaml.d.ts +127 -0
- package/dist/node/features/yaml.d.ts.map +1 -0
- package/dist/node.d.ts +67 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/python/generated.d.ts +2 -0
- package/dist/python/generated.d.ts.map +1 -0
- package/dist/react/index.d.ts +36 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/registry.d.ts +97 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/scaffolds/generated.d.ts +13 -0
- package/dist/scaffolds/generated.d.ts.map +1 -0
- package/dist/scaffolds/template.d.ts +11 -0
- package/dist/scaffolds/template.d.ts.map +1 -0
- package/dist/schemas/base.d.ts +254 -0
- package/dist/schemas/base.d.ts.map +1 -0
- package/dist/selector.d.ts +130 -0
- package/dist/selector.d.ts.map +1 -0
- package/dist/server.d.ts +89 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/servers/express.d.ts +104 -0
- package/dist/servers/express.d.ts.map +1 -0
- package/dist/servers/mcp.d.ts +201 -0
- package/dist/servers/mcp.d.ts.map +1 -0
- package/dist/servers/socket.d.ts +121 -0
- package/dist/servers/socket.d.ts.map +1 -0
- package/dist/state.d.ts +24 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/web/clients/socket.d.ts +37 -0
- package/dist/web/clients/socket.d.ts.map +1 -0
- package/dist/web/container.d.ts +55 -0
- package/dist/web/container.d.ts.map +1 -0
- package/dist/web/extension.d.ts +4 -0
- package/dist/web/extension.d.ts.map +1 -0
- package/dist/web/feature.d.ts +8 -0
- package/dist/web/feature.d.ts.map +1 -0
- package/dist/web/features/asset-loader.d.ts +35 -0
- package/dist/web/features/asset-loader.d.ts.map +1 -0
- package/dist/web/features/container-link.d.ts +167 -0
- package/dist/web/features/container-link.d.ts.map +1 -0
- package/dist/web/features/esbuild.d.ts +51 -0
- package/dist/web/features/esbuild.d.ts.map +1 -0
- package/dist/web/features/helpers.d.ts +140 -0
- package/dist/web/features/helpers.d.ts.map +1 -0
- package/dist/web/features/network.d.ts +69 -0
- package/dist/web/features/network.d.ts.map +1 -0
- package/dist/web/features/speech.d.ts +71 -0
- package/dist/web/features/speech.d.ts.map +1 -0
- package/dist/web/features/vault.d.ts +62 -0
- package/dist/web/features/vault.d.ts.map +1 -0
- package/dist/web/features/vm.d.ts +48 -0
- package/dist/web/features/vm.d.ts.map +1 -0
- package/dist/web/features/voice-recognition.d.ts +96 -0
- package/dist/web/features/voice-recognition.d.ts.map +1 -0
- package/dist/web/shims/isomorphic-vm.d.ts +22 -0
- package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
- package/docs/apis/features/agi/assistant.md +1 -0
- package/docs/apis/features/agi/assistants-manager.md +62 -2
- package/docs/apis/features/agi/auto-assistant.md +11 -109
- package/docs/apis/features/agi/claude-code.md +138 -0
- package/docs/apis/features/agi/conversation.md +60 -31
- package/docs/apis/features/agi/luca-coder.md +407 -0
- package/docs/apis/features/agi/openapi.md +2 -2
- package/docs/apis/features/agi/skills-library.md +12 -0
- package/docs/apis/features/node/python.md +81 -11
- package/docs/apis/features/node/transpiler.md +74 -0
- package/docs/apis/features/web/esbuild.md +0 -6
- package/docs/apis/servers/mcp.md +2 -2
- package/docs/examples/entity.md +124 -0
- package/package.json +73 -21
- package/scripts/test-assistant-hooks.ts +13 -0
- package/src/agi/feature.ts +13 -0
- package/src/agi/features/assistant.ts +36 -25
- package/src/agi/features/assistants-manager.ts +70 -5
- package/src/agi/features/autonomous-assistant.ts +1 -5
- package/src/agi/features/browser-use.ts +2 -2
- package/src/agi/features/claude-code.ts +165 -1
- package/src/agi/features/conversation-history.ts +2 -6
- package/src/agi/features/conversation.ts +95 -3
- package/src/agi/features/docs-reader.ts +2 -1
- package/src/agi/features/file-tools.ts +2 -2
- package/src/agi/features/luca-coder.ts +1 -5
- package/src/agi/features/openai-codex.ts +1 -1
- package/src/agi/features/openapi.ts +3 -3
- package/src/agi/features/skills-library.ts +90 -2
- package/src/agi/lib/interceptor-chain.ts +10 -0
- package/src/agi/lib/token-counter.ts +1 -1
- package/src/bootstrap/generated.ts +126 -1
- package/src/bus.ts +27 -5
- package/src/cli/build-info.ts +2 -2
- package/src/client.ts +2 -2
- package/src/clients/elevenlabs/index.ts +5 -0
- package/src/commands/bootstrap.ts +2 -1
- package/src/commands/chat.ts +1 -0
- package/src/commands/code.ts +4 -2
- package/src/commands/prompt.ts +34 -34
- package/src/commands/sandbox-mcp.ts +69 -163
- package/src/commands/save-api-docs.ts +10 -8
- package/src/commands/select.ts +8 -3
- package/src/container-describer.ts +70 -84
- package/src/container.ts +93 -3
- package/src/endpoint.ts +1 -1
- package/src/entity.ts +173 -0
- package/src/feature.ts +3 -3
- package/src/helper.ts +8 -4
- package/src/introspection/generated.agi.ts +1403 -929
- package/src/introspection/generated.node.ts +127 -33
- package/src/introspection/generated.web.ts +95 -3
- package/src/introspection/scan.ts +1 -1
- package/src/node/container.ts +1 -1
- package/src/node/features/content-db.ts +3 -3
- package/src/node/features/file-manager.ts +10 -9
- package/src/node/features/git.ts +5 -5
- package/src/node/features/helpers.ts +1 -1
- package/src/node/features/json-tree.ts +1 -1
- package/src/node/features/os.ts +3 -3
- package/src/node/features/package-finder.ts +1 -1
- package/src/node/features/process-manager.ts +1 -1
- package/src/node/features/python.ts +3 -3
- package/src/node/features/redis.ts +1 -1
- package/src/node/features/repl.ts +2 -2
- package/src/node/features/transpiler.ts +34 -9
- package/src/node/features/ui.ts +1 -1
- package/src/node/features/vm.ts +6 -5
- package/src/node/features/yaml-tree.ts +1 -1
- package/src/node.ts +1 -0
- package/src/python/generated.ts +1 -1
- package/src/scaffolds/generated.ts +1 -1
- package/src/selector.ts +74 -4
- package/src/server.ts +2 -2
- package/src/servers/mcp.ts +6 -6
- package/src/web/features/helpers.ts +1 -1
- package/src/web/features/network.ts +1 -0
- package/test/assistant.test.ts +72 -0
- package/test/conversation.test.ts +220 -0
- package/test/vm-loadmodule.test.ts +213 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +1 -1
- package/scripts/examples/telegram-ink-ui.ts +0 -302
- package/scripts/examples/using-openai-codex.ts +0 -23
- package/scripts/examples/vm-loading-esm-modules.ts +0 -16
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import Redis from 'ioredis';
|
|
3
|
+
import { Feature } from '../feature.js';
|
|
4
|
+
import type { ContainerContext } from '../../container.js';
|
|
5
|
+
export declare const RedisStateSchema: z.ZodObject<{
|
|
6
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
connected: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
url: z.ZodDefault<z.ZodString>;
|
|
9
|
+
subscriberConnected: z.ZodDefault<z.ZodBoolean>;
|
|
10
|
+
subscribedChannels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
11
|
+
lastError: z.ZodOptional<z.ZodString>;
|
|
12
|
+
}, z.core.$loose>;
|
|
13
|
+
export declare const RedisOptionsSchema: z.ZodObject<{
|
|
14
|
+
name: z.ZodOptional<z.ZodString>;
|
|
15
|
+
_cacheKey: z.ZodOptional<z.ZodString>;
|
|
16
|
+
cached: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
enable: z.ZodOptional<z.ZodBoolean>;
|
|
18
|
+
url: z.ZodOptional<z.ZodString>;
|
|
19
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
20
|
+
lazyConnect: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type RedisState = z.infer<typeof RedisStateSchema>;
|
|
23
|
+
export type RedisOptions = z.infer<typeof RedisOptionsSchema>;
|
|
24
|
+
export declare const RedisEventsSchema: z.ZodObject<{
|
|
25
|
+
stateChange: z.ZodTuple<[z.ZodAny], null>;
|
|
26
|
+
enabled: z.ZodTuple<[], null>;
|
|
27
|
+
message: z.ZodTuple<[z.ZodString, z.ZodString], null>;
|
|
28
|
+
subscribed: z.ZodTuple<[z.ZodString], null>;
|
|
29
|
+
unsubscribed: z.ZodTuple<[z.ZodString], null>;
|
|
30
|
+
error: z.ZodTuple<[z.ZodString], null>;
|
|
31
|
+
closed: z.ZodTuple<[], null>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
type MessageHandler = (channel: string, message: string) => void;
|
|
34
|
+
/**
|
|
35
|
+
* Redis feature for shared state and pub/sub communication between container instances.
|
|
36
|
+
*
|
|
37
|
+
* Wraps ioredis with a focused API for the primitives that matter most:
|
|
38
|
+
* key/value state, pub/sub messaging, and cross-instance coordination.
|
|
39
|
+
*
|
|
40
|
+
* Uses a dedicated subscriber connection for pub/sub (ioredis requirement),
|
|
41
|
+
* created lazily on first subscribe call.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const redis = container.feature('redis', { url: 'redis://localhost:6379' })
|
|
46
|
+
*
|
|
47
|
+
* // Shared state
|
|
48
|
+
* await redis.set('worker:status', 'active')
|
|
49
|
+
* const status = await redis.get('worker:status')
|
|
50
|
+
*
|
|
51
|
+
* // Pub/sub between instances
|
|
52
|
+
* redis.on('message', (channel, msg) => console.log(`${channel}: ${msg}`))
|
|
53
|
+
* await redis.subscribe('tasks')
|
|
54
|
+
* await redis.publish('tasks', JSON.stringify({ type: 'ping' }))
|
|
55
|
+
*
|
|
56
|
+
* // JSON helpers
|
|
57
|
+
* await redis.setJSON('config', { workers: 4, debug: true })
|
|
58
|
+
* const config = await redis.getJSON<{ workers: number }>('config')
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare class RedisFeature extends Feature<RedisState, RedisOptions> {
|
|
62
|
+
static shortcut: "features.redis";
|
|
63
|
+
static stateSchema: z.ZodObject<{
|
|
64
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
connected: z.ZodDefault<z.ZodBoolean>;
|
|
66
|
+
url: z.ZodDefault<z.ZodString>;
|
|
67
|
+
subscriberConnected: z.ZodDefault<z.ZodBoolean>;
|
|
68
|
+
subscribedChannels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
69
|
+
lastError: z.ZodOptional<z.ZodString>;
|
|
70
|
+
}, z.core.$loose>;
|
|
71
|
+
static optionsSchema: z.ZodObject<{
|
|
72
|
+
name: z.ZodOptional<z.ZodString>;
|
|
73
|
+
_cacheKey: z.ZodOptional<z.ZodString>;
|
|
74
|
+
cached: z.ZodOptional<z.ZodBoolean>;
|
|
75
|
+
enable: z.ZodOptional<z.ZodBoolean>;
|
|
76
|
+
url: z.ZodOptional<z.ZodString>;
|
|
77
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
78
|
+
lazyConnect: z.ZodDefault<z.ZodBoolean>;
|
|
79
|
+
}, z.core.$strip>;
|
|
80
|
+
static eventsSchema: z.ZodObject<{
|
|
81
|
+
stateChange: z.ZodTuple<[z.ZodAny], null>;
|
|
82
|
+
enabled: z.ZodTuple<[], null>;
|
|
83
|
+
message: z.ZodTuple<[z.ZodString, z.ZodString], null>;
|
|
84
|
+
subscribed: z.ZodTuple<[z.ZodString], null>;
|
|
85
|
+
unsubscribed: z.ZodTuple<[z.ZodString], null>;
|
|
86
|
+
error: z.ZodTuple<[z.ZodString], null>;
|
|
87
|
+
closed: z.ZodTuple<[], null>;
|
|
88
|
+
}, z.core.$strip>;
|
|
89
|
+
private _client;
|
|
90
|
+
private _subscriber;
|
|
91
|
+
private _prefix;
|
|
92
|
+
private _messageHandlers;
|
|
93
|
+
get initialState(): RedisState;
|
|
94
|
+
constructor(options: RedisOptions, context: ContainerContext);
|
|
95
|
+
/** The underlying ioredis client for advanced operations. */
|
|
96
|
+
get client(): Redis;
|
|
97
|
+
/** The dedicated subscriber connection, if pub/sub is active. */
|
|
98
|
+
get subscriber(): Redis | null;
|
|
99
|
+
private _key;
|
|
100
|
+
/**
|
|
101
|
+
* Set a key to a string value with optional TTL.
|
|
102
|
+
*
|
|
103
|
+
* @param key - The key name
|
|
104
|
+
* @param value - The string value to store
|
|
105
|
+
* @param ttl - Optional time-to-live in seconds
|
|
106
|
+
*/
|
|
107
|
+
set(key: string, value: string, ttl?: number): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Get a key's value. Returns null if the key doesn't exist.
|
|
110
|
+
*
|
|
111
|
+
* @param key - The key name
|
|
112
|
+
* @returns The stored value, or null
|
|
113
|
+
*/
|
|
114
|
+
get(key: string): Promise<string | null>;
|
|
115
|
+
/**
|
|
116
|
+
* Delete one or more keys.
|
|
117
|
+
*
|
|
118
|
+
* @param keys - One or more key names to delete
|
|
119
|
+
* @returns Number of keys that were deleted
|
|
120
|
+
*/
|
|
121
|
+
del(...keys: string[]): Promise<number>;
|
|
122
|
+
/**
|
|
123
|
+
* Check if a key exists.
|
|
124
|
+
*
|
|
125
|
+
* @param key - The key name
|
|
126
|
+
*/
|
|
127
|
+
exists(key: string): Promise<boolean>;
|
|
128
|
+
/**
|
|
129
|
+
* Set a key's TTL in seconds.
|
|
130
|
+
*
|
|
131
|
+
* @param key - The key name
|
|
132
|
+
* @param seconds - TTL in seconds
|
|
133
|
+
*/
|
|
134
|
+
expire(key: string, seconds: number): Promise<boolean>;
|
|
135
|
+
/**
|
|
136
|
+
* Find keys matching a glob pattern (respects prefix).
|
|
137
|
+
*
|
|
138
|
+
* @param pattern - Glob pattern, e.g. "worker:*"
|
|
139
|
+
* @returns Array of matching key names (with prefix stripped)
|
|
140
|
+
*/
|
|
141
|
+
keys(pattern?: string): Promise<string[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Store a value as JSON.
|
|
144
|
+
*
|
|
145
|
+
* @param key - The key name
|
|
146
|
+
* @param value - Any JSON-serializable value
|
|
147
|
+
* @param ttl - Optional TTL in seconds
|
|
148
|
+
*/
|
|
149
|
+
setJSON(key: string, value: unknown, ttl?: number): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Retrieve and parse a JSON value.
|
|
152
|
+
*
|
|
153
|
+
* @param key - The key name
|
|
154
|
+
* @returns The parsed value, or null if the key doesn't exist
|
|
155
|
+
*/
|
|
156
|
+
getJSON<T = unknown>(key: string): Promise<T | null>;
|
|
157
|
+
/**
|
|
158
|
+
* Set fields on a hash.
|
|
159
|
+
*
|
|
160
|
+
* @param key - The hash key
|
|
161
|
+
* @param fields - Object of field/value pairs
|
|
162
|
+
*/
|
|
163
|
+
hset(key: string, fields: Record<string, string>): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Get all fields from a hash.
|
|
166
|
+
*
|
|
167
|
+
* @param key - The hash key
|
|
168
|
+
* @returns Object of field/value pairs
|
|
169
|
+
*/
|
|
170
|
+
hgetall(key: string): Promise<Record<string, string>>;
|
|
171
|
+
/**
|
|
172
|
+
* Get a single field from a hash.
|
|
173
|
+
*
|
|
174
|
+
* @param key - The hash key
|
|
175
|
+
* @param field - The field name
|
|
176
|
+
*/
|
|
177
|
+
hget(key: string, field: string): Promise<string | null>;
|
|
178
|
+
/**
|
|
179
|
+
* Ensures the dedicated subscriber connection exists.
|
|
180
|
+
* ioredis requires a separate connection for subscriptions.
|
|
181
|
+
*/
|
|
182
|
+
private _ensureSubscriber;
|
|
183
|
+
/**
|
|
184
|
+
* Subscribe to one or more channels.
|
|
185
|
+
*
|
|
186
|
+
* Optionally pass a handler that fires only for these channels.
|
|
187
|
+
* The feature also emits a `message` event for all messages.
|
|
188
|
+
*
|
|
189
|
+
* @param channels - Channel name(s) to subscribe to
|
|
190
|
+
* @param handler - Optional per-channel message handler
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```typescript
|
|
194
|
+
* await redis.subscribe('tasks', (channel, msg) => {
|
|
195
|
+
* console.log(`Got ${msg} on ${channel}`)
|
|
196
|
+
* })
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
subscribe(channels: string | string[], handler?: MessageHandler): Promise<void>;
|
|
200
|
+
/**
|
|
201
|
+
* Unsubscribe from one or more channels.
|
|
202
|
+
*
|
|
203
|
+
* @param channels - Channel name(s) to unsubscribe from
|
|
204
|
+
*/
|
|
205
|
+
unsubscribe(...channels: string[]): Promise<void>;
|
|
206
|
+
/**
|
|
207
|
+
* Publish a message to a channel.
|
|
208
|
+
*
|
|
209
|
+
* @param channel - The channel to publish to
|
|
210
|
+
* @param message - The message string (use JSON.stringify for objects)
|
|
211
|
+
* @returns Number of subscribers that received the message
|
|
212
|
+
*/
|
|
213
|
+
publish(channel: string, message: string): Promise<number>;
|
|
214
|
+
/**
|
|
215
|
+
* Spin up a local Redis instance via Docker. Checks if a container with
|
|
216
|
+
* the given name already exists and starts it if stopped, or creates a
|
|
217
|
+
* new one from redis:alpine.
|
|
218
|
+
*
|
|
219
|
+
* Requires the docker feature to be available on the container.
|
|
220
|
+
*
|
|
221
|
+
* @param options - Container name and host port
|
|
222
|
+
* @returns The docker container ID
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const redis = container.feature('redis', { url: 'redis://localhost:6379', lazyConnect: true })
|
|
227
|
+
* await redis.ensureLocalDocker()
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
ensureLocalDocker(options?: {
|
|
231
|
+
name?: string;
|
|
232
|
+
port?: number;
|
|
233
|
+
image?: string;
|
|
234
|
+
}): Promise<string>;
|
|
235
|
+
/**
|
|
236
|
+
* Close all redis connections (main client + subscriber).
|
|
237
|
+
*/
|
|
238
|
+
close(): Promise<this>;
|
|
239
|
+
}
|
|
240
|
+
export { RedisFeature as Redis };
|
|
241
|
+
export default RedisFeature;
|
|
242
|
+
declare module '../../feature.js' {
|
|
243
|
+
interface AvailableFeatures {
|
|
244
|
+
redis: typeof RedisFeature;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/node/features/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Feature } from "../feature.js";
|
|
3
|
+
import vm from 'vm';
|
|
4
|
+
import readline from 'readline';
|
|
5
|
+
export declare const ReplStateSchema: z.ZodObject<{
|
|
6
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
started: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
}, z.core.$loose>;
|
|
9
|
+
export type ReplState = z.infer<typeof ReplStateSchema>;
|
|
10
|
+
export declare const ReplOptionsSchema: z.ZodObject<{
|
|
11
|
+
name: z.ZodOptional<z.ZodString>;
|
|
12
|
+
_cacheKey: z.ZodOptional<z.ZodString>;
|
|
13
|
+
cached: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
enable: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
16
|
+
historyPath: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export type ReplOptions = z.infer<typeof ReplOptionsSchema>;
|
|
19
|
+
/**
|
|
20
|
+
* REPL feature — provides an interactive read-eval-print loop with tab completion and history.
|
|
21
|
+
*
|
|
22
|
+
* Launches a REPL session that evaluates JavaScript/TypeScript expressions in a sandboxed
|
|
23
|
+
* VM context populated with the container and its helpers. Supports tab completion for
|
|
24
|
+
* dot-notation property access, command history persistence, and async/await.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const repl = container.feature('repl', { enable: true })
|
|
29
|
+
* await repl.start({ context: { myVar: 42 } })
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class Repl<T extends ReplState = ReplState, K extends ReplOptions = ReplOptions> extends Feature<T, K> {
|
|
33
|
+
static shortcut: "features.repl";
|
|
34
|
+
static stateSchema: z.ZodObject<{
|
|
35
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
started: z.ZodOptional<z.ZodBoolean>;
|
|
37
|
+
}, z.core.$loose>;
|
|
38
|
+
static optionsSchema: z.ZodObject<{
|
|
39
|
+
name: z.ZodOptional<z.ZodString>;
|
|
40
|
+
_cacheKey: z.ZodOptional<z.ZodString>;
|
|
41
|
+
cached: z.ZodOptional<z.ZodBoolean>;
|
|
42
|
+
enable: z.ZodOptional<z.ZodBoolean>;
|
|
43
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
44
|
+
historyPath: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
/** Whether the REPL session is currently running. */
|
|
47
|
+
get isStarted(): boolean;
|
|
48
|
+
_rl?: readline.Interface;
|
|
49
|
+
_vmContext?: vm.Context;
|
|
50
|
+
_history: string[];
|
|
51
|
+
_historyPath?: string;
|
|
52
|
+
/** The VM context object used for evaluating expressions in the REPL. */
|
|
53
|
+
get vmContext(): vm.Context | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Start the REPL session.
|
|
56
|
+
*
|
|
57
|
+
* Creates a VM context populated with the container and its helpers, sets up
|
|
58
|
+
* readline with tab completion and history, then enters the interactive loop.
|
|
59
|
+
* Type `.exit` or `exit` to quit. Supports top-level await.
|
|
60
|
+
*
|
|
61
|
+
* @param options - Configuration for the REPL session
|
|
62
|
+
* @param options.historyPath - Custom path for the history file (defaults to ~/.cache/luca/repl-{cwdHash}.history)
|
|
63
|
+
* @param options.context - Additional variables to inject into the VM context
|
|
64
|
+
* @returns The Repl instance
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const repl = container.feature('repl', { enable: true })
|
|
69
|
+
* await repl.start({
|
|
70
|
+
* context: { db: myDatabase },
|
|
71
|
+
* historyPath: '.repl-history'
|
|
72
|
+
* })
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
start(options?: {
|
|
76
|
+
historyPath?: string;
|
|
77
|
+
context?: any;
|
|
78
|
+
}): Promise<this>;
|
|
79
|
+
/** Open a fresh readline and enter the REPL loop using the existing VM context. */
|
|
80
|
+
private _resume;
|
|
81
|
+
private _saveHistory;
|
|
82
|
+
}
|
|
83
|
+
export default Repl;
|
|
84
|
+
//# sourceMappingURL=repl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/node/features/repl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,QAAQ,MAAM,UAAU,CAAA;AAG/B,eAAO,MAAM,eAAe;;;iBAE1B,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAEvD,eAAO,MAAM,iBAAiB;;;;;;;iBAG5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;;;;;;;;;;;GAYG;AACH,qBAAa,IAAI,CACf,CAAC,SAAS,SAAS,GAAG,SAAS,EAC/B,CAAC,SAAS,WAAW,GAAG,WAAW,CACnC,SAAQ,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,OAAgB,QAAQ,EAAG,eAAe,CAAS;IACnD,OAAgB,WAAW;;;sBAAkB;IAC7C,OAAgB,aAAa;;;;;;;sBAAoB;IAGjD,qDAAqD;IACrD,IAAI,SAAS,YAEZ;IAED,GAAG,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAA;IACxB,UAAU,CAAC,EAAE,EAAE,CAAC,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAK;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,yEAAyE;IACzE,IAAI,SAAS,2BAEZ;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,CAAC,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAO;IA6CjE,mFAAmF;IACnF,OAAO,CAAC,OAAO;IAiFf,OAAO,CAAC,YAAY;CAMrB;AAED,eAAe,IAAI,CAAA"}
|