@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,176 @@
|
|
|
1
|
+
# YAML (features.yaml)
|
|
2
|
+
|
|
3
|
+
The YAML feature provides utilities for parsing and stringifying YAML data. This feature wraps the js-yaml library to provide convenient methods for converting between YAML strings and JavaScript objects. It's automatically attached to Node containers for easy access.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('yaml')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### stringify
|
|
14
|
+
|
|
15
|
+
Converts a JavaScript object to a YAML string. This method serializes JavaScript data structures into YAML format, which is human-readable and commonly used for configuration files.
|
|
16
|
+
|
|
17
|
+
**Parameters:**
|
|
18
|
+
|
|
19
|
+
| Name | Type | Required | Description |
|
|
20
|
+
|------|------|----------|-------------|
|
|
21
|
+
| `data` | `any` | ✓ | The data to convert to YAML format |
|
|
22
|
+
|
|
23
|
+
**Returns:** `string`
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const config = {
|
|
27
|
+
name: 'MyApp',
|
|
28
|
+
version: '1.0.0',
|
|
29
|
+
settings: {
|
|
30
|
+
debug: true,
|
|
31
|
+
ports: [3000, 3001]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const yamlString = yaml.stringify(config)
|
|
36
|
+
console.log(yamlString)
|
|
37
|
+
// Output:
|
|
38
|
+
// name: MyApp
|
|
39
|
+
// version: 1.0.0
|
|
40
|
+
// settings:
|
|
41
|
+
// debug: true
|
|
42
|
+
// ports:
|
|
43
|
+
// - 3000
|
|
44
|
+
// - 3001
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### parse
|
|
50
|
+
|
|
51
|
+
Parses a YAML string into a JavaScript object. This method deserializes YAML content into JavaScript data structures. It supports all standard YAML features including nested objects, arrays, and various data types.
|
|
52
|
+
|
|
53
|
+
**Parameters:**
|
|
54
|
+
|
|
55
|
+
| Name | Type | Required | Description |
|
|
56
|
+
|------|------|----------|-------------|
|
|
57
|
+
| `yamlStr` | `string` | ✓ | The YAML string to parse |
|
|
58
|
+
|
|
59
|
+
**Returns:** `T`
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const yamlContent = `
|
|
63
|
+
name: MyApp
|
|
64
|
+
version: 1.0.0
|
|
65
|
+
settings:
|
|
66
|
+
debug: true
|
|
67
|
+
ports:
|
|
68
|
+
- 3000
|
|
69
|
+
- 3001
|
|
70
|
+
`
|
|
71
|
+
|
|
72
|
+
// Parse with type inference
|
|
73
|
+
const config = yaml.parse(yamlContent)
|
|
74
|
+
console.log(config.name) // 'MyApp'
|
|
75
|
+
|
|
76
|
+
// Parse with explicit typing
|
|
77
|
+
interface AppConfig {
|
|
78
|
+
name: string
|
|
79
|
+
version: string
|
|
80
|
+
settings: {
|
|
81
|
+
debug: boolean
|
|
82
|
+
ports: number[]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const typedConfig = yaml.parse<AppConfig>(yamlContent)
|
|
87
|
+
console.log(typedConfig.settings.ports) // [3000, 3001]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## State (Zod v4 schema)
|
|
93
|
+
|
|
94
|
+
| Property | Type | Description |
|
|
95
|
+
|----------|------|-------------|
|
|
96
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
97
|
+
|
|
98
|
+
## Examples
|
|
99
|
+
|
|
100
|
+
**features.yaml**
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
const yamlFeature = container.feature('yaml')
|
|
104
|
+
|
|
105
|
+
// Parse YAML string to object
|
|
106
|
+
const config = yamlFeature.parse(`
|
|
107
|
+
name: MyApp
|
|
108
|
+
version: 1.0.0
|
|
109
|
+
settings:
|
|
110
|
+
debug: true
|
|
111
|
+
`)
|
|
112
|
+
|
|
113
|
+
// Convert object to YAML string
|
|
114
|
+
const yamlString = yamlFeature.stringify(config)
|
|
115
|
+
console.log(yamlString)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
**stringify**
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
const config = {
|
|
124
|
+
name: 'MyApp',
|
|
125
|
+
version: '1.0.0',
|
|
126
|
+
settings: {
|
|
127
|
+
debug: true,
|
|
128
|
+
ports: [3000, 3001]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const yamlString = yaml.stringify(config)
|
|
133
|
+
console.log(yamlString)
|
|
134
|
+
// Output:
|
|
135
|
+
// name: MyApp
|
|
136
|
+
// version: 1.0.0
|
|
137
|
+
// settings:
|
|
138
|
+
// debug: true
|
|
139
|
+
// ports:
|
|
140
|
+
// - 3000
|
|
141
|
+
// - 3001
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
**parse**
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
const yamlContent = `
|
|
150
|
+
name: MyApp
|
|
151
|
+
version: 1.0.0
|
|
152
|
+
settings:
|
|
153
|
+
debug: true
|
|
154
|
+
ports:
|
|
155
|
+
- 3000
|
|
156
|
+
- 3001
|
|
157
|
+
`
|
|
158
|
+
|
|
159
|
+
// Parse with type inference
|
|
160
|
+
const config = yaml.parse(yamlContent)
|
|
161
|
+
console.log(config.name) // 'MyApp'
|
|
162
|
+
|
|
163
|
+
// Parse with explicit typing
|
|
164
|
+
interface AppConfig {
|
|
165
|
+
name: string
|
|
166
|
+
version: string
|
|
167
|
+
settings: {
|
|
168
|
+
debug: boolean
|
|
169
|
+
ports: number[]
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const typedConfig = yaml.parse<AppConfig>(yamlContent)
|
|
174
|
+
console.log(typedConfig.settings.ports) // [3000, 3001]
|
|
175
|
+
```
|
|
176
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# AssetLoader (features.assetLoader)
|
|
2
|
+
|
|
3
|
+
The AssetLoader provides an API for injecting scripts and stylesheets into the page. It also provides a convenient way of loading any library from unpkg.com
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('assetLoader')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### removeStylesheet
|
|
14
|
+
|
|
15
|
+
**Parameters:**
|
|
16
|
+
|
|
17
|
+
| Name | Type | Required | Description |
|
|
18
|
+
|------|------|----------|-------------|
|
|
19
|
+
| `href` | `string` | ✓ | Parameter href |
|
|
20
|
+
|
|
21
|
+
**Returns:** `void`
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### loadScript
|
|
26
|
+
|
|
27
|
+
**Parameters:**
|
|
28
|
+
|
|
29
|
+
| Name | Type | Required | Description |
|
|
30
|
+
|------|------|----------|-------------|
|
|
31
|
+
| `url` | `string` | ✓ | Parameter url |
|
|
32
|
+
|
|
33
|
+
**Returns:** `Promise<void>`
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### unpkg
|
|
38
|
+
|
|
39
|
+
**Parameters:**
|
|
40
|
+
|
|
41
|
+
| Name | Type | Required | Description |
|
|
42
|
+
|------|------|----------|-------------|
|
|
43
|
+
| `packageName` | `string` | ✓ | Parameter packageName |
|
|
44
|
+
| `globalName` | `string` | ✓ | Parameter globalName |
|
|
45
|
+
|
|
46
|
+
**Returns:** `Promise<any>`
|
|
47
|
+
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# ContainerLink (features.containerLink)
|
|
2
|
+
|
|
3
|
+
ContainerLink (Web-side) — WebSocket client that connects to a node host. Connects to a ContainerLink host over WebSocket. The host can evaluate code in this container, and the web side can emit structured events to the host. The web side can NEVER eval code in the host — trust is strictly one-way.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('containerLink', {
|
|
9
|
+
// Port for the WebSocket server
|
|
10
|
+
port,
|
|
11
|
+
// Interval in ms between heartbeat pings
|
|
12
|
+
heartbeatInterval,
|
|
13
|
+
// Max missed pongs before disconnecting a client
|
|
14
|
+
maxMissedHeartbeats,
|
|
15
|
+
})
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Options (Zod v4 schema)
|
|
19
|
+
|
|
20
|
+
| Property | Type | Description |
|
|
21
|
+
|----------|------|-------------|
|
|
22
|
+
| `port` | `number` | Port for the WebSocket server |
|
|
23
|
+
| `heartbeatInterval` | `number` | Interval in ms between heartbeat pings |
|
|
24
|
+
| `maxMissedHeartbeats` | `number` | Max missed pongs before disconnecting a client |
|
|
25
|
+
|
|
26
|
+
## Methods
|
|
27
|
+
|
|
28
|
+
### connect
|
|
29
|
+
|
|
30
|
+
Connect to the host WebSocket server and perform registration.
|
|
31
|
+
|
|
32
|
+
**Parameters:**
|
|
33
|
+
|
|
34
|
+
| Name | Type | Required | Description |
|
|
35
|
+
|------|------|----------|-------------|
|
|
36
|
+
| `hostUrl` | `string` | | Override the configured host URL |
|
|
37
|
+
|
|
38
|
+
**Returns:** `Promise<this>`
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### disconnect
|
|
43
|
+
|
|
44
|
+
Disconnect from the host.
|
|
45
|
+
|
|
46
|
+
**Parameters:**
|
|
47
|
+
|
|
48
|
+
| Name | Type | Required | Description |
|
|
49
|
+
|------|------|----------|-------------|
|
|
50
|
+
| `reason` | `string` | | Optional reason string |
|
|
51
|
+
|
|
52
|
+
**Returns:** `void`
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
### emitToHost
|
|
57
|
+
|
|
58
|
+
Send a structured event to the host container.
|
|
59
|
+
|
|
60
|
+
**Parameters:**
|
|
61
|
+
|
|
62
|
+
| Name | Type | Required | Description |
|
|
63
|
+
|------|------|----------|-------------|
|
|
64
|
+
| `eventName` | `string` | ✓ | Name of the event |
|
|
65
|
+
| `data` | `any` | | Optional event data |
|
|
66
|
+
|
|
67
|
+
**Returns:** `void`
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## Getters
|
|
72
|
+
|
|
73
|
+
| Property | Type | Description |
|
|
74
|
+
|----------|------|-------------|
|
|
75
|
+
| `isConnected` | `boolean` | Whether currently connected to the host. |
|
|
76
|
+
| `token` | `string | undefined` | The auth token received from the host. |
|
|
77
|
+
| `hostId` | `string | undefined` | The host container's UUID. |
|
|
78
|
+
|
|
79
|
+
## Events (Zod v4 schema)
|
|
80
|
+
|
|
81
|
+
### connected
|
|
82
|
+
|
|
83
|
+
Event emitted by ContainerLink
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
### disconnected
|
|
88
|
+
|
|
89
|
+
Event emitted by ContainerLink
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
### evalRequest
|
|
94
|
+
|
|
95
|
+
Event emitted by ContainerLink
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### reconnecting
|
|
100
|
+
|
|
101
|
+
Event emitted by ContainerLink
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
## State (Zod v4 schema)
|
|
106
|
+
|
|
107
|
+
| Property | Type | Description |
|
|
108
|
+
|----------|------|-------------|
|
|
109
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
110
|
+
| `connectionCount` | `number` | Number of currently connected web containers |
|
|
111
|
+
| `port` | `number` | Port the WebSocket server is listening on |
|
|
112
|
+
| `listening` | `boolean` | Whether the WebSocket server is listening |
|
|
113
|
+
|
|
114
|
+
## Examples
|
|
115
|
+
|
|
116
|
+
**features.containerLink**
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
const link = container.feature('containerLink', {
|
|
120
|
+
enable: true,
|
|
121
|
+
hostUrl: 'ws://localhost:8089',
|
|
122
|
+
})
|
|
123
|
+
await link.connect()
|
|
124
|
+
|
|
125
|
+
// Send events to the host
|
|
126
|
+
link.emitToHost('click', { x: 100, y: 200 })
|
|
127
|
+
|
|
128
|
+
// Listen for eval requests before they execute
|
|
129
|
+
link.on('evalRequest', (code, requestId) => {
|
|
130
|
+
console.log('Host is evaluating:', code)
|
|
131
|
+
})
|
|
132
|
+
```
|
|
133
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Esbuild (features.esbuild)
|
|
2
|
+
|
|
3
|
+
Esbuild helper
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('esbuild')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### compile
|
|
14
|
+
|
|
15
|
+
**Parameters:**
|
|
16
|
+
|
|
17
|
+
| Name | Type | Required | Description |
|
|
18
|
+
|------|------|----------|-------------|
|
|
19
|
+
| `code` | `string` | ✓ | Parameter code |
|
|
20
|
+
| `options` | `esbuild.TransformOptions` | | Parameter options |
|
|
21
|
+
|
|
22
|
+
**Returns:** `void`
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### clearCache
|
|
27
|
+
|
|
28
|
+
**Returns:** `void`
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### start
|
|
33
|
+
|
|
34
|
+
**Returns:** `void`
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## Getters
|
|
39
|
+
|
|
40
|
+
| Property | Type | Description |
|
|
41
|
+
|----------|------|-------------|
|
|
42
|
+
| `assetLoader` | `any` | Returns the assetLoader feature for loading external libraries from unpkg. |
|
|
43
|
+
|
|
44
|
+
## State (Zod v4 schema)
|
|
45
|
+
|
|
46
|
+
| Property | Type | Description |
|
|
47
|
+
|----------|------|-------------|
|
|
48
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
49
|
+
|
|
50
|
+
## Examples
|
|
51
|
+
|
|
52
|
+
**features.esbuild**
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
const esbuild = container.feature('esbuild')
|
|
56
|
+
const result = esbuild.transformSync('const x: number = 1')
|
|
57
|
+
console.log(result.code) // 'const x = 1;\n'
|
|
58
|
+
```
|
|
59
|
+
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Helpers (features.helpers)
|
|
2
|
+
|
|
3
|
+
The Helpers feature discovers and loads project-level helpers from a JSON manifest served over HTTP. Scripts are injected via AssetLoader and self-register into the container's registries. This is the web equivalent of the node Helpers feature, which scans the filesystem. Instead of filesystem scanning, this feature fetches a manifest from a well-known URL and uses AssetLoader.loadScript() to inject each helper's script tag.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('helpers', {
|
|
9
|
+
// Root directory to scan for helper folders. Defaults to container.cwd
|
|
10
|
+
rootDir,
|
|
11
|
+
})
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Options (Zod v4 schema)
|
|
15
|
+
|
|
16
|
+
| Property | Type | Description |
|
|
17
|
+
|----------|------|-------------|
|
|
18
|
+
| `rootDir` | `string` | Root directory to scan for helper folders. Defaults to container.cwd |
|
|
19
|
+
|
|
20
|
+
## Methods
|
|
21
|
+
|
|
22
|
+
### setManifestURL
|
|
23
|
+
|
|
24
|
+
Set a new manifest URL. Invalidates any cached manifest.
|
|
25
|
+
|
|
26
|
+
**Parameters:**
|
|
27
|
+
|
|
28
|
+
| Name | Type | Required | Description |
|
|
29
|
+
|------|------|----------|-------------|
|
|
30
|
+
| `url` | `string` | ✓ | The new URL to fetch the manifest from |
|
|
31
|
+
|
|
32
|
+
**Returns:** `void`
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### discover
|
|
37
|
+
|
|
38
|
+
Discover and register helpers of the given type from the manifest. Fetches the manifest, then for each entry of the requested type, loads the script via AssetLoader and checks what got newly registered.
|
|
39
|
+
|
|
40
|
+
**Parameters:**
|
|
41
|
+
|
|
42
|
+
| Name | Type | Required | Description |
|
|
43
|
+
|------|------|----------|-------------|
|
|
44
|
+
| `type` | `RegistryType` | ✓ | Which type of helpers to discover ('features' or 'clients') |
|
|
45
|
+
|
|
46
|
+
**Returns:** `Promise<string[]>`
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### discoverAll
|
|
51
|
+
|
|
52
|
+
Discover all helper types from the manifest.
|
|
53
|
+
|
|
54
|
+
**Returns:** `Promise<Record<string, string[]>>`
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
### discoverFeatures
|
|
59
|
+
|
|
60
|
+
Convenience method to discover only features.
|
|
61
|
+
|
|
62
|
+
**Returns:** `Promise<string[]>`
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
### discoverClients
|
|
67
|
+
|
|
68
|
+
Convenience method to discover only clients.
|
|
69
|
+
|
|
70
|
+
**Returns:** `Promise<string[]>`
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
### lookup
|
|
75
|
+
|
|
76
|
+
Look up a helper class by type and name.
|
|
77
|
+
|
|
78
|
+
**Parameters:**
|
|
79
|
+
|
|
80
|
+
| Name | Type | Required | Description |
|
|
81
|
+
|------|------|----------|-------------|
|
|
82
|
+
| `type` | `RegistryType` | ✓ | The registry type |
|
|
83
|
+
| `name` | `string` | ✓ | The helper name within that registry |
|
|
84
|
+
|
|
85
|
+
**Returns:** `any`
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
### describe
|
|
90
|
+
|
|
91
|
+
Get the introspection description for a specific helper.
|
|
92
|
+
|
|
93
|
+
**Parameters:**
|
|
94
|
+
|
|
95
|
+
| Name | Type | Required | Description |
|
|
96
|
+
|------|------|----------|-------------|
|
|
97
|
+
| `type` | `RegistryType` | ✓ | The registry type |
|
|
98
|
+
| `name` | `string` | ✓ | The helper name |
|
|
99
|
+
|
|
100
|
+
**Returns:** `string`
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## Getters
|
|
105
|
+
|
|
106
|
+
| Property | Type | Description |
|
|
107
|
+
|----------|------|-------------|
|
|
108
|
+
| `manifestURL` | `string` | The URL to fetch the helpers manifest from. |
|
|
109
|
+
| `available` | `Record<string, string[]>` | Returns a unified view of all available helpers across all registries. Each key is a registry type, each value is the list of helper names in that registry. |
|
|
110
|
+
|
|
111
|
+
## State (Zod v4 schema)
|
|
112
|
+
|
|
113
|
+
| Property | Type | Description |
|
|
114
|
+
|----------|------|-------------|
|
|
115
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
116
|
+
| `discovered` | `object` | Which registry types have been discovered |
|
|
117
|
+
| `registered` | `array` | Names of project-level helpers that were discovered (type.name) |
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
**features.helpers**
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
const helpers = container.feature('helpers', { enable: true })
|
|
125
|
+
|
|
126
|
+
// Discover all helper types from the manifest
|
|
127
|
+
await helpers.discoverAll()
|
|
128
|
+
|
|
129
|
+
// Discover a specific type
|
|
130
|
+
await helpers.discover('features')
|
|
131
|
+
|
|
132
|
+
// Unified view of all available helpers
|
|
133
|
+
console.log(helpers.available)
|
|
134
|
+
```
|
|
135
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Network (features.network)
|
|
2
|
+
|
|
3
|
+
Network helper
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('network')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### start
|
|
14
|
+
|
|
15
|
+
**Returns:** `void`
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### disable
|
|
20
|
+
|
|
21
|
+
**Returns:** `void`
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## Getters
|
|
26
|
+
|
|
27
|
+
| Property | Type | Description |
|
|
28
|
+
|----------|------|-------------|
|
|
29
|
+
| `isOffline` | `any` | Whether the browser is currently offline. |
|
|
30
|
+
| `isOnline` | `any` | Whether the browser is currently online. |
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Speech (features.speech)
|
|
2
|
+
|
|
3
|
+
Speech helper
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('speech')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### loadVoices
|
|
14
|
+
|
|
15
|
+
**Returns:** `void`
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### setDefaultVoice
|
|
20
|
+
|
|
21
|
+
**Parameters:**
|
|
22
|
+
|
|
23
|
+
| Name | Type | Required | Description |
|
|
24
|
+
|------|------|----------|-------------|
|
|
25
|
+
| `name` | `string` | ✓ | Parameter name |
|
|
26
|
+
|
|
27
|
+
**Returns:** `void`
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### cancel
|
|
32
|
+
|
|
33
|
+
**Returns:** `void`
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### say
|
|
38
|
+
|
|
39
|
+
**Parameters:**
|
|
40
|
+
|
|
41
|
+
| Name | Type | Required | Description |
|
|
42
|
+
|------|------|----------|-------------|
|
|
43
|
+
| `text` | `string` | ✓ | Parameter text |
|
|
44
|
+
| `options` | `{ voice?: Voice }` | | Parameter options |
|
|
45
|
+
|
|
46
|
+
**Returns:** `void`
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## Getters
|
|
51
|
+
|
|
52
|
+
| Property | Type | Description |
|
|
53
|
+
|----------|------|-------------|
|
|
54
|
+
| `voices` | `any` | Returns the array of available speech synthesis voices. |
|
|
55
|
+
| `defaultVoice` | `any` | Returns the Voice object matching the currently selected default voice name. |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# WebVault (features.vault)
|
|
2
|
+
|
|
3
|
+
WebVault helper
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('vault')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### secret
|
|
14
|
+
|
|
15
|
+
**Parameters:**
|
|
16
|
+
|
|
17
|
+
| Name | Type | Required | Description |
|
|
18
|
+
|------|------|----------|-------------|
|
|
19
|
+
| `{ refresh = false, set = true }` | `any` | | Parameter { refresh = false, set = true } |
|
|
20
|
+
|
|
21
|
+
**Returns:** `Promise<ArrayBuffer>`
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### decrypt
|
|
26
|
+
|
|
27
|
+
**Parameters:**
|
|
28
|
+
|
|
29
|
+
| Name | Type | Required | Description |
|
|
30
|
+
|------|------|----------|-------------|
|
|
31
|
+
| `payload` | `string` | ✓ | Parameter payload |
|
|
32
|
+
|
|
33
|
+
**Returns:** `void`
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### encrypt
|
|
38
|
+
|
|
39
|
+
**Parameters:**
|
|
40
|
+
|
|
41
|
+
| Name | Type | Required | Description |
|
|
42
|
+
|------|------|----------|-------------|
|
|
43
|
+
| `payload` | `string` | ✓ | Parameter payload |
|
|
44
|
+
|
|
45
|
+
**Returns:** `void`
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## Examples
|
|
50
|
+
|
|
51
|
+
**features.vault**
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
const vault = container.feature('vault')
|
|
55
|
+
|
|
56
|
+
// Encrypt sensitive data
|
|
57
|
+
const encrypted = vault.encrypt('sensitive information')
|
|
58
|
+
console.log(encrypted) // Base64 encoded encrypted data
|
|
59
|
+
|
|
60
|
+
// Decrypt the data
|
|
61
|
+
const decrypted = vault.decrypt(encrypted)
|
|
62
|
+
console.log(decrypted) // 'sensitive information'
|
|
63
|
+
```
|
|
64
|
+
|