@soederpop/luca 0.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/CLAUDE.md +71 -0
- package/README.md +78 -0
- package/bun.lock +2928 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-scaffolds.ts +154 -0
- package/commands/generate-api-docs.ts +114 -0
- package/commands/update-introspection.ts +67 -0
- package/docs/CLI.md +335 -0
- package/docs/README.md +88 -0
- package/docs/TABLE-OF-CONTENTS.md +157 -0
- package/docs/apis/clients/elevenlabs.md +84 -0
- package/docs/apis/clients/graph.md +56 -0
- package/docs/apis/clients/openai.md +69 -0
- package/docs/apis/clients/rest.md +41 -0
- package/docs/apis/clients/websocket.md +107 -0
- package/docs/apis/features/agi/assistant.md +471 -0
- package/docs/apis/features/agi/assistants-manager.md +154 -0
- package/docs/apis/features/agi/claude-code.md +602 -0
- package/docs/apis/features/agi/conversation-history.md +352 -0
- package/docs/apis/features/agi/conversation.md +333 -0
- package/docs/apis/features/agi/docs-reader.md +121 -0
- package/docs/apis/features/agi/openai-codex.md +318 -0
- package/docs/apis/features/agi/openapi.md +138 -0
- package/docs/apis/features/agi/semantic-search.md +387 -0
- package/docs/apis/features/agi/skills-library.md +216 -0
- package/docs/apis/features/node/container-link.md +133 -0
- package/docs/apis/features/node/content-db.md +313 -0
- package/docs/apis/features/node/disk-cache.md +379 -0
- package/docs/apis/features/node/dns.md +651 -0
- package/docs/apis/features/node/docker.md +705 -0
- package/docs/apis/features/node/downloader.md +81 -0
- package/docs/apis/features/node/esbuild.md +59 -0
- package/docs/apis/features/node/file-manager.md +182 -0
- package/docs/apis/features/node/fs.md +581 -0
- package/docs/apis/features/node/git.md +330 -0
- package/docs/apis/features/node/google-auth.md +174 -0
- package/docs/apis/features/node/google-calendar.md +187 -0
- package/docs/apis/features/node/google-docs.md +151 -0
- package/docs/apis/features/node/google-drive.md +225 -0
- package/docs/apis/features/node/google-sheets.md +179 -0
- package/docs/apis/features/node/grep.md +290 -0
- package/docs/apis/features/node/helpers.md +135 -0
- package/docs/apis/features/node/ink.md +334 -0
- package/docs/apis/features/node/ipc-socket.md +260 -0
- package/docs/apis/features/node/json-tree.md +86 -0
- package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
- package/docs/apis/features/node/networking.md +281 -0
- package/docs/apis/features/node/nlp.md +133 -0
- package/docs/apis/features/node/opener.md +97 -0
- package/docs/apis/features/node/os.md +118 -0
- package/docs/apis/features/node/package-finder.md +402 -0
- package/docs/apis/features/node/postgres.md +212 -0
- package/docs/apis/features/node/proc.md +430 -0
- package/docs/apis/features/node/process-manager.md +210 -0
- package/docs/apis/features/node/python.md +278 -0
- package/docs/apis/features/node/repl.md +88 -0
- package/docs/apis/features/node/runpod.md +673 -0
- package/docs/apis/features/node/secure-shell.md +169 -0
- package/docs/apis/features/node/semantic-search.md +401 -0
- package/docs/apis/features/node/sqlite.md +211 -0
- package/docs/apis/features/node/telegram.md +254 -0
- package/docs/apis/features/node/tts.md +118 -0
- package/docs/apis/features/node/ui.md +703 -0
- package/docs/apis/features/node/vault.md +64 -0
- package/docs/apis/features/node/vm.md +84 -0
- package/docs/apis/features/node/window-manager.md +337 -0
- package/docs/apis/features/node/yaml-tree.md +85 -0
- package/docs/apis/features/node/yaml.md +176 -0
- package/docs/apis/features/web/asset-loader.md +47 -0
- package/docs/apis/features/web/container-link.md +133 -0
- package/docs/apis/features/web/esbuild.md +59 -0
- package/docs/apis/features/web/helpers.md +135 -0
- package/docs/apis/features/web/network.md +30 -0
- package/docs/apis/features/web/speech.md +55 -0
- package/docs/apis/features/web/vault.md +64 -0
- package/docs/apis/features/web/vm.md +84 -0
- package/docs/apis/features/web/voice.md +67 -0
- package/docs/apis/servers/express.md +127 -0
- package/docs/apis/servers/mcp.md +213 -0
- package/docs/apis/servers/websocket.md +99 -0
- package/docs/documentation-audit.md +134 -0
- package/docs/examples/content-db.md +77 -0
- package/docs/examples/disk-cache.md +83 -0
- package/docs/examples/docker.md +101 -0
- package/docs/examples/downloader.md +70 -0
- package/docs/examples/esbuild.md +80 -0
- package/docs/examples/file-manager.md +82 -0
- package/docs/examples/fs.md +83 -0
- package/docs/examples/git.md +85 -0
- package/docs/examples/google-auth.md +88 -0
- package/docs/examples/google-calendar.md +94 -0
- package/docs/examples/google-docs.md +82 -0
- package/docs/examples/google-drive.md +96 -0
- package/docs/examples/google-sheets.md +95 -0
- package/docs/examples/grep.md +85 -0
- package/docs/examples/ink-blocks.md +75 -0
- package/docs/examples/ink-renderer.md +41 -0
- package/docs/examples/ink.md +103 -0
- package/docs/examples/ipc-socket.md +103 -0
- package/docs/examples/json-tree.md +91 -0
- package/docs/examples/launcher-app-command-listener.md +120 -0
- package/docs/examples/networking.md +58 -0
- package/docs/examples/nlp.md +91 -0
- package/docs/examples/opener.md +78 -0
- package/docs/examples/os.md +72 -0
- package/docs/examples/package-finder.md +89 -0
- package/docs/examples/port-exposer.md +89 -0
- package/docs/examples/postgres.md +91 -0
- package/docs/examples/proc.md +81 -0
- package/docs/examples/process-manager.md +79 -0
- package/docs/examples/python.md +91 -0
- package/docs/examples/repl.md +93 -0
- package/docs/examples/runpod.md +119 -0
- package/docs/examples/secure-shell.md +92 -0
- package/docs/examples/sqlite.md +86 -0
- package/docs/examples/telegram.md +77 -0
- package/docs/examples/tts.md +86 -0
- package/docs/examples/ui.md +80 -0
- package/docs/examples/vault.md +70 -0
- package/docs/examples/vm.md +86 -0
- package/docs/examples/window-manager.md +125 -0
- package/docs/examples/yaml-tree.md +93 -0
- package/docs/examples/yaml.md +104 -0
- package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
- package/docs/ideas/container-use-api.md +9 -0
- package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
- package/docs/ideas/feature-stacks.md +22 -0
- package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
- package/docs/ideas/mcp-design.md +9 -0
- package/docs/ideas/web-container-debugging-feature.md +13 -0
- package/docs/introspection-audit.md +49 -0
- package/docs/introspection.md +154 -0
- package/docs/mcp/readme.md +162 -0
- package/docs/models.ts +38 -0
- package/docs/philosophy.md +85 -0
- package/docs/principles.md +7 -0
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
- package/docs/prompts/mcp-test-easy-command.md +27 -0
- package/docs/reports/assistant-bugs.md +38 -0
- package/docs/reports/attach-pattern-usage.md +18 -0
- package/docs/reports/code-audit-results.md +391 -0
- package/docs/reports/introspection-audit-tasks.md +378 -0
- package/docs/reports/luca-mcp-improvements.md +128 -0
- package/docs/scaffolds/client.md +140 -0
- package/docs/scaffolds/command.md +106 -0
- package/docs/scaffolds/endpoint.md +176 -0
- package/docs/scaffolds/feature.md +148 -0
- package/docs/scaffolds/server.md +187 -0
- package/docs/tasks/web-container-helper-discovery.md +71 -0
- package/docs/todos.md +1 -0
- package/docs/tutorials/01-getting-started.md +106 -0
- package/docs/tutorials/02-container.md +210 -0
- package/docs/tutorials/03-scripts.md +194 -0
- package/docs/tutorials/04-features-overview.md +196 -0
- package/docs/tutorials/05-state-and-events.md +171 -0
- package/docs/tutorials/06-servers.md +157 -0
- package/docs/tutorials/07-endpoints.md +198 -0
- package/docs/tutorials/08-commands.md +171 -0
- package/docs/tutorials/09-clients.md +162 -0
- package/docs/tutorials/10-creating-features.md +198 -0
- package/docs/tutorials/11-contentbase.md +191 -0
- package/docs/tutorials/12-assistants.md +215 -0
- package/docs/tutorials/13-introspection.md +147 -0
- package/docs/tutorials/14-type-system.md +174 -0
- package/docs/tutorials/15-project-patterns.md +222 -0
- package/docs/tutorials/16-google-features.md +534 -0
- package/docs/tutorials/17-tui-blocks.md +530 -0
- package/docs/tutorials/18-semantic-search.md +334 -0
- package/index.ts +1 -0
- package/luca.console.ts +9 -0
- package/main.py +6 -0
- package/package.json +154 -0
- package/pyproject.toml +7 -0
- package/scripts/animations/chrome-glitch.ts +55 -0
- package/scripts/animations/index.ts +16 -0
- package/scripts/animations/neon-pulse.ts +64 -0
- package/scripts/animations/types.ts +6 -0
- package/scripts/build-web.ts +28 -0
- package/scripts/examples/ask-luca-expert.ts +42 -0
- package/scripts/examples/assistant-questions.ts +12 -0
- package/scripts/examples/excalidraw-expert.ts +75 -0
- package/scripts/examples/expert-chat.ts +0 -0
- package/scripts/examples/file-manager.ts +14 -0
- package/scripts/examples/ideas.ts +12 -0
- package/scripts/examples/interactive-chat.ts +20 -0
- package/scripts/examples/openai-tool-calls.ts +113 -0
- package/scripts/examples/opening-a-web-browser.ts +5 -0
- package/scripts/examples/telegram-bot.ts +79 -0
- package/scripts/examples/telegram-ink-ui.ts +302 -0
- package/scripts/examples/using-assistant-with-mcp.ts +560 -0
- package/scripts/examples/using-claude-code.ts +10 -0
- package/scripts/examples/using-contentdb.ts +35 -0
- package/scripts/examples/using-conversations.ts +35 -0
- package/scripts/examples/using-disk-cache.ts +10 -0
- package/scripts/examples/using-docker-shell.ts +75 -0
- package/scripts/examples/using-elevenlabs.ts +25 -0
- package/scripts/examples/using-google-calendar.ts +57 -0
- package/scripts/examples/using-google-docs.ts +74 -0
- package/scripts/examples/using-google-drive.ts +74 -0
- package/scripts/examples/using-google-sheets.ts +89 -0
- package/scripts/examples/using-nlp.ts +55 -0
- package/scripts/examples/using-ollama.ts +10 -0
- package/scripts/examples/using-openai-codex.ts +23 -0
- package/scripts/examples/using-postgres.ts +55 -0
- package/scripts/examples/using-runpod.ts +32 -0
- package/scripts/examples/using-tts.ts +40 -0
- package/scripts/examples/vm-loading-esm-modules.ts +16 -0
- package/scripts/scaffold.ts +391 -0
- package/scripts/scratch.ts +15 -0
- package/scripts/test-command-listener.ts +123 -0
- package/scripts/test-window-manager-lifecycle.ts +86 -0
- package/scripts/test-window-manager.ts +43 -0
- package/scripts/update-introspection-data.ts +58 -0
- package/src/agi/README.md +14 -0
- package/src/agi/container.server.ts +114 -0
- package/src/agi/endpoints/ask.ts +60 -0
- package/src/agi/endpoints/conversations/[id].ts +45 -0
- package/src/agi/endpoints/conversations.ts +31 -0
- package/src/agi/endpoints/experts.ts +37 -0
- package/src/agi/features/assistant.ts +767 -0
- package/src/agi/features/assistants-manager.ts +260 -0
- package/src/agi/features/claude-code.ts +1111 -0
- package/src/agi/features/conversation-history.ts +497 -0
- package/src/agi/features/conversation.ts +799 -0
- package/src/agi/features/openai-codex.ts +631 -0
- package/src/agi/features/openapi.ts +438 -0
- package/src/agi/features/skills-library.ts +425 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/token-counter.ts +122 -0
- package/src/browser.ts +25 -0
- package/src/bus.ts +100 -0
- package/src/cli/cli.ts +70 -0
- package/src/client.ts +461 -0
- package/src/clients/civitai/index.ts +541 -0
- package/src/clients/client-template.ts +41 -0
- package/src/clients/comfyui/index.ts +597 -0
- package/src/clients/elevenlabs/index.ts +291 -0
- package/src/clients/openai/index.ts +451 -0
- package/src/clients/supabase/index.ts +366 -0
- package/src/command.ts +164 -0
- package/src/commands/chat.ts +182 -0
- package/src/commands/console.ts +192 -0
- package/src/commands/describe.ts +433 -0
- package/src/commands/eval.ts +116 -0
- package/src/commands/help.ts +214 -0
- package/src/commands/index.ts +14 -0
- package/src/commands/mcp.ts +64 -0
- package/src/commands/prompt.ts +807 -0
- package/src/commands/run.ts +257 -0
- package/src/commands/sandbox-mcp.ts +439 -0
- package/src/commands/scaffold.ts +79 -0
- package/src/commands/serve.ts +172 -0
- package/src/container.ts +781 -0
- package/src/endpoint.ts +340 -0
- package/src/feature.ts +75 -0
- package/src/hash-object.ts +97 -0
- package/src/helper.ts +543 -0
- package/src/introspection/generated.agi.ts +23388 -0
- package/src/introspection/generated.node.ts +18899 -0
- package/src/introspection/generated.web.ts +2021 -0
- package/src/introspection/index.ts +256 -0
- package/src/introspection/scan.ts +912 -0
- package/src/node/container.ts +354 -0
- package/src/node/feature.ts +13 -0
- package/src/node/features/container-link.ts +558 -0
- package/src/node/features/content-db.ts +475 -0
- package/src/node/features/disk-cache.ts +382 -0
- package/src/node/features/dns.ts +655 -0
- package/src/node/features/docker.ts +912 -0
- package/src/node/features/downloader.ts +92 -0
- package/src/node/features/esbuild.ts +68 -0
- package/src/node/features/file-manager.ts +357 -0
- package/src/node/features/fs.ts +534 -0
- package/src/node/features/git.ts +492 -0
- package/src/node/features/google-auth.ts +502 -0
- package/src/node/features/google-calendar.ts +300 -0
- package/src/node/features/google-docs.ts +404 -0
- package/src/node/features/google-drive.ts +339 -0
- package/src/node/features/google-sheets.ts +279 -0
- package/src/node/features/grep.ts +406 -0
- package/src/node/features/helpers.ts +374 -0
- package/src/node/features/ink.ts +490 -0
- package/src/node/features/ipc-socket.ts +459 -0
- package/src/node/features/json-tree.ts +188 -0
- package/src/node/features/launcher-app-command-listener.ts +388 -0
- package/src/node/features/networking.ts +925 -0
- package/src/node/features/nlp.ts +211 -0
- package/src/node/features/opener.ts +166 -0
- package/src/node/features/os.ts +157 -0
- package/src/node/features/package-finder.ts +539 -0
- package/src/node/features/port-exposer.ts +342 -0
- package/src/node/features/postgres.ts +273 -0
- package/src/node/features/proc.ts +502 -0
- package/src/node/features/process-manager.ts +542 -0
- package/src/node/features/python.ts +444 -0
- package/src/node/features/repl.ts +194 -0
- package/src/node/features/runpod.ts +802 -0
- package/src/node/features/secure-shell.ts +248 -0
- package/src/node/features/semantic-search.ts +924 -0
- package/src/node/features/sqlite.ts +289 -0
- package/src/node/features/telegram.ts +342 -0
- package/src/node/features/tts.ts +184 -0
- package/src/node/features/ui.ts +857 -0
- package/src/node/features/vault.ts +164 -0
- package/src/node/features/vm.ts +312 -0
- package/src/node/features/window-manager.ts +804 -0
- package/src/node/features/yaml-tree.ts +149 -0
- package/src/node/features/yaml.ts +132 -0
- package/src/node.ts +70 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +199 -0
- package/src/scaffolds/generated.ts +1613 -0
- package/src/scaffolds/template.ts +37 -0
- package/src/schemas/base.ts +255 -0
- package/src/server.ts +135 -0
- package/src/servers/express.ts +209 -0
- package/src/servers/mcp.ts +805 -0
- package/src/servers/socket.ts +120 -0
- package/src/state.ts +101 -0
- package/src/web/clients/socket.ts +82 -0
- package/src/web/container.ts +74 -0
- package/src/web/extension.ts +30 -0
- package/src/web/feature.ts +12 -0
- package/src/web/features/asset-loader.ts +64 -0
- package/src/web/features/container-link.ts +385 -0
- package/src/web/features/esbuild.ts +79 -0
- package/src/web/features/helpers.ts +267 -0
- package/src/web/features/network.ts +61 -0
- package/src/web/features/speech.ts +87 -0
- package/src/web/features/vault.ts +189 -0
- package/src/web/features/vm.ts +78 -0
- package/src/web/features/voice-recognition.ts +129 -0
- package/src/web/shims/isomorphic-vm.ts +149 -0
- package/test/bus.test.ts +134 -0
- package/test/clients-servers.test.ts +216 -0
- package/test/container-link.test.ts +274 -0
- package/test/features.test.ts +160 -0
- package/test/integration.test.ts +787 -0
- package/test/node-container.test.ts +121 -0
- package/test/rate-limit.test.ts +272 -0
- package/test/semantic-search.test.ts +550 -0
- package/test/state.test.ts +121 -0
- package/test-integration/assistant.test.ts +138 -0
- package/test-integration/assistants-manager.test.ts +123 -0
- package/test-integration/claude-code.test.ts +98 -0
- package/test-integration/conversation-history.test.ts +205 -0
- package/test-integration/conversation.test.ts +137 -0
- package/test-integration/elevenlabs.test.ts +55 -0
- package/test-integration/google-services.test.ts +80 -0
- package/test-integration/helpers.ts +89 -0
- package/test-integration/openai-codex.test.ts +93 -0
- package/test-integration/runpod.test.ts +58 -0
- package/test-integration/server-endpoints.test.ts +97 -0
- package/test-integration/skills-library.test.ts +157 -0
- package/test-integration/telegram.test.ts +46 -0
- package/tsconfig.json +58 -0
- package/uv.lock +8 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Sqlite (features.sqlite)
|
|
2
|
+
|
|
3
|
+
SQLite feature for safe SQL execution through Bun's native sqlite binding. Supports: - parameterized query execution (`query` / `execute`) - tagged-template query execution (`sql`) to avoid manual placeholder wiring
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('sqlite', {
|
|
9
|
+
// Path to sqlite file. Use :memory: for in-memory database
|
|
10
|
+
path,
|
|
11
|
+
// Open sqlite database in readonly mode
|
|
12
|
+
readonly,
|
|
13
|
+
// Open sqlite database in readwrite mode (defaults to true when readonly is false)
|
|
14
|
+
readwrite,
|
|
15
|
+
// Create the sqlite database file if it does not exist
|
|
16
|
+
create,
|
|
17
|
+
})
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Options (Zod v4 schema)
|
|
21
|
+
|
|
22
|
+
| Property | Type | Description |
|
|
23
|
+
|----------|------|-------------|
|
|
24
|
+
| `path` | `string` | Path to sqlite file. Use :memory: for in-memory database |
|
|
25
|
+
| `readonly` | `boolean` | Open sqlite database in readonly mode |
|
|
26
|
+
| `readwrite` | `boolean` | Open sqlite database in readwrite mode (defaults to true when readonly is false) |
|
|
27
|
+
| `create` | `boolean` | Create the sqlite database file if it does not exist |
|
|
28
|
+
|
|
29
|
+
## Methods
|
|
30
|
+
|
|
31
|
+
### query
|
|
32
|
+
|
|
33
|
+
Executes a SELECT-like query and returns result rows. Use sqlite placeholders (`?`) for `params`.
|
|
34
|
+
|
|
35
|
+
**Parameters:**
|
|
36
|
+
|
|
37
|
+
| Name | Type | Required | Description |
|
|
38
|
+
|------|------|----------|-------------|
|
|
39
|
+
| `queryText` | `string` | ✓ | The SQL query string with optional `?` placeholders |
|
|
40
|
+
| `params` | `SqlValue[]` | | Ordered array of values to bind to the placeholders |
|
|
41
|
+
|
|
42
|
+
**Returns:** `Promise<T[]>`
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
46
|
+
const users = await db.query<{ id: number; email: string }>(
|
|
47
|
+
'SELECT id, email FROM users WHERE active = ?',
|
|
48
|
+
[1]
|
|
49
|
+
)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### execute
|
|
55
|
+
|
|
56
|
+
Executes a write/update/delete statement and returns metadata. Use sqlite placeholders (`?`) for `params`.
|
|
57
|
+
|
|
58
|
+
**Parameters:**
|
|
59
|
+
|
|
60
|
+
| Name | Type | Required | Description |
|
|
61
|
+
|------|------|----------|-------------|
|
|
62
|
+
| `queryText` | `string` | ✓ | The SQL statement string with optional `?` placeholders |
|
|
63
|
+
| `params` | `SqlValue[]` | | Ordered array of values to bind to the placeholders |
|
|
64
|
+
|
|
65
|
+
**Returns:** `Promise<{ changes: number; lastInsertRowid: number | bigint | null }>`
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
69
|
+
const { changes, lastInsertRowid } = await db.execute(
|
|
70
|
+
'INSERT INTO users (email) VALUES (?)',
|
|
71
|
+
['hello@example.com']
|
|
72
|
+
)
|
|
73
|
+
console.log(`Inserted row ${lastInsertRowid}, ${changes} change(s)`)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### sql
|
|
79
|
+
|
|
80
|
+
Safe tagged-template SQL helper. Values become bound parameters automatically, preventing SQL injection.
|
|
81
|
+
|
|
82
|
+
**Parameters:**
|
|
83
|
+
|
|
84
|
+
| Name | Type | Required | Description |
|
|
85
|
+
|------|------|----------|-------------|
|
|
86
|
+
| `strings` | `TemplateStringsArray` | ✓ | Template literal string segments |
|
|
87
|
+
| `values` | `SqlValue[]` | ✓ | Interpolated values that become bound `?` parameters |
|
|
88
|
+
|
|
89
|
+
**Returns:** `Promise<T[]>`
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
93
|
+
const email = 'hello@example.com'
|
|
94
|
+
const rows = await db.sql<{ id: number }>`
|
|
95
|
+
SELECT id FROM users WHERE email = ${email}
|
|
96
|
+
`
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
### close
|
|
102
|
+
|
|
103
|
+
Closes the sqlite database and updates feature state. Emits `closed` after the database handle is released.
|
|
104
|
+
|
|
105
|
+
**Returns:** `void`
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
109
|
+
// ... run queries ...
|
|
110
|
+
db.close()
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
## Getters
|
|
116
|
+
|
|
117
|
+
| Property | Type | Description |
|
|
118
|
+
|----------|------|-------------|
|
|
119
|
+
| `db` | `any` | Returns the underlying Bun sqlite database instance. |
|
|
120
|
+
|
|
121
|
+
## Events (Zod v4 schema)
|
|
122
|
+
|
|
123
|
+
### query
|
|
124
|
+
|
|
125
|
+
Event emitted by Sqlite
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
### error
|
|
130
|
+
|
|
131
|
+
Event emitted by Sqlite
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
### execute
|
|
136
|
+
|
|
137
|
+
Event emitted by Sqlite
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
### closed
|
|
142
|
+
|
|
143
|
+
Event emitted by Sqlite
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
## Examples
|
|
148
|
+
|
|
149
|
+
**features.sqlite**
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
const sqlite = container.feature('sqlite', { path: 'data/app.db' })
|
|
153
|
+
|
|
154
|
+
await sqlite.execute(
|
|
155
|
+
'create table if not exists users (id integer primary key, email text not null unique)'
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
await sqlite.execute('insert into users (email) values (?)', ['hello@example.com'])
|
|
159
|
+
|
|
160
|
+
const users = await sqlite.sql<{ id: number; email: string }>`
|
|
161
|
+
select id, email from users where email = ${'hello@example.com'}
|
|
162
|
+
`
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
**query**
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
171
|
+
const users = await db.query<{ id: number; email: string }>(
|
|
172
|
+
'SELECT id, email FROM users WHERE active = ?',
|
|
173
|
+
[1]
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
**execute**
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
183
|
+
const { changes, lastInsertRowid } = await db.execute(
|
|
184
|
+
'INSERT INTO users (email) VALUES (?)',
|
|
185
|
+
['hello@example.com']
|
|
186
|
+
)
|
|
187
|
+
console.log(`Inserted row ${lastInsertRowid}, ${changes} change(s)`)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
**sql**
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
196
|
+
const email = 'hello@example.com'
|
|
197
|
+
const rows = await db.sql<{ id: number }>`
|
|
198
|
+
SELECT id FROM users WHERE email = ${email}
|
|
199
|
+
`
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
**close**
|
|
205
|
+
|
|
206
|
+
```ts
|
|
207
|
+
const db = container.feature('sqlite', { path: 'app.db' })
|
|
208
|
+
// ... run queries ...
|
|
209
|
+
db.close()
|
|
210
|
+
```
|
|
211
|
+
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Telegram (features.telegram)
|
|
2
|
+
|
|
3
|
+
Telegram bot feature powered by grammY. Supports both long-polling and webhook modes. Exposes the grammY Bot instance directly for full API access while bridging events to Luca's event bus.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('telegram', {
|
|
9
|
+
// Bot token from @BotFather (falls back to TELEGRAM_BOT_TOKEN env var)
|
|
10
|
+
token,
|
|
11
|
+
// Update mode: polling for long-polling, webhook for HTTP callbacks
|
|
12
|
+
mode,
|
|
13
|
+
// Public HTTPS URL for webhook mode
|
|
14
|
+
webhookUrl,
|
|
15
|
+
// HTTP path for the webhook endpoint
|
|
16
|
+
webhookPath,
|
|
17
|
+
// Port for webhook Express server
|
|
18
|
+
webhookPort,
|
|
19
|
+
// Automatically start the bot when enabled
|
|
20
|
+
autoStart,
|
|
21
|
+
// Drop pending updates on start (polling mode)
|
|
22
|
+
dropPendingUpdates,
|
|
23
|
+
// Long-polling timeout in seconds. Lower = faster response. 0 = short polling (fastest, testing only). Default 1s.
|
|
24
|
+
pollingTimeout,
|
|
25
|
+
// Max updates per polling request (1-100, default 100)
|
|
26
|
+
pollingLimit,
|
|
27
|
+
// Update types to receive (e.g. ["message", "callback_query"])
|
|
28
|
+
allowedUpdates,
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Options (Zod v4 schema)
|
|
33
|
+
|
|
34
|
+
| Property | Type | Description |
|
|
35
|
+
|----------|------|-------------|
|
|
36
|
+
| `token` | `string` | Bot token from @BotFather (falls back to TELEGRAM_BOT_TOKEN env var) |
|
|
37
|
+
| `mode` | `string` | Update mode: polling for long-polling, webhook for HTTP callbacks |
|
|
38
|
+
| `webhookUrl` | `string` | Public HTTPS URL for webhook mode |
|
|
39
|
+
| `webhookPath` | `string` | HTTP path for the webhook endpoint |
|
|
40
|
+
| `webhookPort` | `number` | Port for webhook Express server |
|
|
41
|
+
| `autoStart` | `boolean` | Automatically start the bot when enabled |
|
|
42
|
+
| `dropPendingUpdates` | `boolean` | Drop pending updates on start (polling mode) |
|
|
43
|
+
| `pollingTimeout` | `number` | Long-polling timeout in seconds. Lower = faster response. 0 = short polling (fastest, testing only). Default 1s. |
|
|
44
|
+
| `pollingLimit` | `number` | Max updates per polling request (1-100, default 100) |
|
|
45
|
+
| `allowedUpdates` | `array` | Update types to receive (e.g. ["message", "callback_query"]) |
|
|
46
|
+
|
|
47
|
+
## Methods
|
|
48
|
+
|
|
49
|
+
### enable
|
|
50
|
+
|
|
51
|
+
**Parameters:**
|
|
52
|
+
|
|
53
|
+
| Name | Type | Required | Description |
|
|
54
|
+
|------|------|----------|-------------|
|
|
55
|
+
| `options` | `any` | | Parameter options |
|
|
56
|
+
|
|
57
|
+
**Returns:** `Promise<this>`
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### start
|
|
62
|
+
|
|
63
|
+
Start the bot in the configured mode (polling or webhook).
|
|
64
|
+
|
|
65
|
+
**Returns:** `Promise<this>`
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
### stop
|
|
70
|
+
|
|
71
|
+
Stop the bot gracefully.
|
|
72
|
+
|
|
73
|
+
**Returns:** `Promise<this>`
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
### command
|
|
78
|
+
|
|
79
|
+
Register a command handler. Also emits 'command' on the Luca event bus.
|
|
80
|
+
|
|
81
|
+
**Parameters:**
|
|
82
|
+
|
|
83
|
+
| Name | Type | Required | Description |
|
|
84
|
+
|------|------|----------|-------------|
|
|
85
|
+
| `name` | `string` | ✓ | Parameter name |
|
|
86
|
+
| `handler` | `(ctx: Context) => any` | ✓ | Parameter handler |
|
|
87
|
+
|
|
88
|
+
**Returns:** `this`
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
### handle
|
|
93
|
+
|
|
94
|
+
Register a grammY update handler (filter query). Named 'handle' to avoid collision with the inherited on() event bus method.
|
|
95
|
+
|
|
96
|
+
**Parameters:**
|
|
97
|
+
|
|
98
|
+
| Name | Type | Required | Description |
|
|
99
|
+
|------|------|----------|-------------|
|
|
100
|
+
| `filter` | `Parameters<Bot['on']>[0]` | ✓ | Parameter filter |
|
|
101
|
+
| `handler` | `(ctx: any) => any` | ✓ | Parameter handler |
|
|
102
|
+
|
|
103
|
+
**Returns:** `this`
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
tg.handle('message:text', (ctx) => ctx.reply('Got text'))
|
|
107
|
+
tg.handle('callback_query:data', (ctx) => ctx.answerCallbackQuery('Clicked'))
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
### use
|
|
113
|
+
|
|
114
|
+
Add grammY middleware.
|
|
115
|
+
|
|
116
|
+
**Parameters:**
|
|
117
|
+
|
|
118
|
+
| Name | Type | Required | Description |
|
|
119
|
+
|------|------|----------|-------------|
|
|
120
|
+
| `middleware` | `Middleware[]` | ✓ | Parameter middleware |
|
|
121
|
+
|
|
122
|
+
**Returns:** `this`
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
### startPolling
|
|
127
|
+
|
|
128
|
+
Start long-polling mode.
|
|
129
|
+
|
|
130
|
+
**Parameters:**
|
|
131
|
+
|
|
132
|
+
| Name | Type | Required | Description |
|
|
133
|
+
|------|------|----------|-------------|
|
|
134
|
+
| `dropPendingUpdates` | `boolean` | | Parameter dropPendingUpdates |
|
|
135
|
+
|
|
136
|
+
**Returns:** `Promise<this>`
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
### setupWebhook
|
|
141
|
+
|
|
142
|
+
Set up webhook mode with an Express server.
|
|
143
|
+
|
|
144
|
+
**Parameters:**
|
|
145
|
+
|
|
146
|
+
| Name | Type | Required | Description |
|
|
147
|
+
|------|------|----------|-------------|
|
|
148
|
+
| `url` | `string` | | Parameter url |
|
|
149
|
+
| `path` | `string` | | Parameter path |
|
|
150
|
+
|
|
151
|
+
**Returns:** `Promise<this>`
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
### deleteWebhook
|
|
156
|
+
|
|
157
|
+
Remove the webhook from Telegram.
|
|
158
|
+
|
|
159
|
+
**Returns:** `Promise<this>`
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
### getMe
|
|
164
|
+
|
|
165
|
+
Get bot info from Telegram API.
|
|
166
|
+
|
|
167
|
+
**Returns:** `Promise<UserFromGetMe>`
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
### diagnostics
|
|
172
|
+
|
|
173
|
+
Print a diagnostic summary of the bot's current state.
|
|
174
|
+
|
|
175
|
+
**Returns:** `this`
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
## Getters
|
|
180
|
+
|
|
181
|
+
| Property | Type | Description |
|
|
182
|
+
|----------|------|-------------|
|
|
183
|
+
| `token` | `string` | Bot token from options or TELEGRAM_BOT_TOKEN env var. |
|
|
184
|
+
| `bot` | `Bot` | The grammY Bot instance. Created lazily on first access. |
|
|
185
|
+
| `isRunning` | `boolean` | Whether the bot is currently receiving updates. |
|
|
186
|
+
| `mode` | `'polling' | 'webhook' | 'idle'` | Current operation mode: 'polling', 'webhook', or 'idle'. |
|
|
187
|
+
|
|
188
|
+
## Events (Zod v4 schema)
|
|
189
|
+
|
|
190
|
+
### stopped
|
|
191
|
+
|
|
192
|
+
Event emitted by Telegram
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
### command
|
|
197
|
+
|
|
198
|
+
Event emitted by Telegram
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
### started
|
|
203
|
+
|
|
204
|
+
Event emitted by Telegram
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
### webhook_ready
|
|
209
|
+
|
|
210
|
+
Event emitted by Telegram
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
### error
|
|
215
|
+
|
|
216
|
+
Event emitted by Telegram
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
## State (Zod v4 schema)
|
|
221
|
+
|
|
222
|
+
| Property | Type | Description |
|
|
223
|
+
|----------|------|-------------|
|
|
224
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
225
|
+
| `mode` | `string` | Current operation mode |
|
|
226
|
+
| `isRunning` | `boolean` | Whether the bot is currently receiving updates |
|
|
227
|
+
| `webhookUrl` | `string` | Active webhook URL if in webhook mode |
|
|
228
|
+
| `commandsRegistered` | `array` | List of registered command names |
|
|
229
|
+
| `lastError` | `string` | Last error message |
|
|
230
|
+
| `botInfo` | `object` | Bot user information from Telegram API |
|
|
231
|
+
|
|
232
|
+
## Environment Variables
|
|
233
|
+
|
|
234
|
+
- `TELEGRAM_BOT_TOKEN`
|
|
235
|
+
|
|
236
|
+
## Examples
|
|
237
|
+
|
|
238
|
+
**features.telegram**
|
|
239
|
+
|
|
240
|
+
```ts
|
|
241
|
+
const tg = container.feature('telegram', { autoStart: true })
|
|
242
|
+
tg.command('start', (ctx) => ctx.reply('Hello!'))
|
|
243
|
+
tg.handle('message:text', (ctx) => ctx.reply(`Echo: ${ctx.message.text}`))
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
**handle**
|
|
249
|
+
|
|
250
|
+
```ts
|
|
251
|
+
tg.handle('message:text', (ctx) => ctx.reply('Got text'))
|
|
252
|
+
tg.handle('callback_query:data', (ctx) => ctx.answerCallbackQuery('Clicked'))
|
|
253
|
+
```
|
|
254
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# TTS (features.tts)
|
|
2
|
+
|
|
3
|
+
TTS feature — synthesizes text to audio files via RunPod's Chatterbox Turbo endpoint. Generates high-quality speech audio by calling the Chatterbox Turbo public endpoint on RunPod, downloads the resulting audio, and saves it locally. Supports 20 preset voices and voice cloning via a reference audio URL.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('tts', {
|
|
9
|
+
// RunPod API key (falls back to RUNPOD_API_KEY env var)
|
|
10
|
+
apiKey,
|
|
11
|
+
// Default preset voice name
|
|
12
|
+
voice,
|
|
13
|
+
// Directory to save generated audio files
|
|
14
|
+
outputDir,
|
|
15
|
+
// Audio output format
|
|
16
|
+
format,
|
|
17
|
+
})
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Options (Zod v4 schema)
|
|
21
|
+
|
|
22
|
+
| Property | Type | Description |
|
|
23
|
+
|----------|------|-------------|
|
|
24
|
+
| `apiKey` | `string` | RunPod API key (falls back to RUNPOD_API_KEY env var) |
|
|
25
|
+
| `voice` | `string` | Default preset voice name |
|
|
26
|
+
| `outputDir` | `string` | Directory to save generated audio files |
|
|
27
|
+
| `format` | `string` | Audio output format |
|
|
28
|
+
|
|
29
|
+
## Methods
|
|
30
|
+
|
|
31
|
+
### synthesize
|
|
32
|
+
|
|
33
|
+
Synthesize text to an audio file using Chatterbox Turbo. Calls the RunPod public endpoint, downloads the generated audio, and saves it to the output directory.
|
|
34
|
+
|
|
35
|
+
**Parameters:**
|
|
36
|
+
|
|
37
|
+
| Name | Type | Required | Description |
|
|
38
|
+
|------|------|----------|-------------|
|
|
39
|
+
| `text` | `string` | ✓ | The text to synthesize into speech |
|
|
40
|
+
| `options` | `{
|
|
41
|
+
voice?: string
|
|
42
|
+
format?: 'wav' | 'flac' | 'ogg'
|
|
43
|
+
voiceUrl?: string
|
|
44
|
+
}` | | Override voice, format, or provide a voiceUrl for cloning |
|
|
45
|
+
|
|
46
|
+
**Returns:** `Promise<string>`
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// Use a preset voice
|
|
50
|
+
const path = await tts.synthesize('Good morning!', { voice: 'ethan' })
|
|
51
|
+
|
|
52
|
+
// Clone a voice from a reference audio URL
|
|
53
|
+
const path = await tts.synthesize('Hello world', {
|
|
54
|
+
voiceUrl: 'https://example.com/reference.wav'
|
|
55
|
+
})
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
## Getters
|
|
61
|
+
|
|
62
|
+
| Property | Type | Description |
|
|
63
|
+
|----------|------|-------------|
|
|
64
|
+
| `apiKey` | `string` | RunPod API key from options or environment. |
|
|
65
|
+
| `outputDir` | `string` | Directory where generated audio files are saved. |
|
|
66
|
+
| `voices` | `readonly string[]` | The 20 preset voice names available in Chatterbox Turbo. |
|
|
67
|
+
|
|
68
|
+
## Events (Zod v4 schema)
|
|
69
|
+
|
|
70
|
+
### synthesized
|
|
71
|
+
|
|
72
|
+
Event emitted by TTS
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
### error
|
|
77
|
+
|
|
78
|
+
Event emitted by TTS
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
## State (Zod v4 schema)
|
|
83
|
+
|
|
84
|
+
| Property | Type | Description |
|
|
85
|
+
|----------|------|-------------|
|
|
86
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
87
|
+
| `lastFile` | `string` | Path to the last generated audio file |
|
|
88
|
+
| `lastText` | `string` | Text of the last synthesis request |
|
|
89
|
+
| `generating` | `boolean` | Whether audio is currently being generated |
|
|
90
|
+
|
|
91
|
+
## Environment Variables
|
|
92
|
+
|
|
93
|
+
- `RUNPOD_API_KEY`
|
|
94
|
+
|
|
95
|
+
## Examples
|
|
96
|
+
|
|
97
|
+
**features.tts**
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
const tts = container.feature('tts', { enable: true })
|
|
101
|
+
const path = await tts.synthesize('Hello, how are you?', { voice: 'lucy' })
|
|
102
|
+
console.log(`Audio saved to: ${path}`)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
**synthesize**
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
// Use a preset voice
|
|
111
|
+
const path = await tts.synthesize('Good morning!', { voice: 'ethan' })
|
|
112
|
+
|
|
113
|
+
// Clone a voice from a reference audio URL
|
|
114
|
+
const path = await tts.synthesize('Hello world', {
|
|
115
|
+
voiceUrl: 'https://example.com/reference.wav'
|
|
116
|
+
})
|
|
117
|
+
```
|
|
118
|
+
|