@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,145 @@
|
|
|
1
|
+
# LauncherAppCommandListener (features.launcherAppCommandListener)
|
|
2
|
+
|
|
3
|
+
LauncherAppCommandListener — IPC transport for commands from the LucaVoiceLauncher app Listens on a Unix domain socket for the native macOS launcher app to connect. When a command event arrives (voice, hotkey, text input), it wraps it in a `CommandHandle` and emits a `command` event. The consumer is responsible for acknowledging, processing, and finishing the command via the handle. Uses NDJSON (newline-delimited JSON) over the socket per the CLIENT_SPEC protocol.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('launcherAppCommandListener', {
|
|
9
|
+
// Path to the Unix domain socket to listen on
|
|
10
|
+
socketPath,
|
|
11
|
+
// Automatically start listening when the feature is enabled
|
|
12
|
+
autoListen,
|
|
13
|
+
})
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Options (Zod v4 schema)
|
|
17
|
+
|
|
18
|
+
| Property | Type | Description |
|
|
19
|
+
|----------|------|-------------|
|
|
20
|
+
| `socketPath` | `string` | Path to the Unix domain socket to listen on |
|
|
21
|
+
| `autoListen` | `boolean` | Automatically start listening when the feature is enabled |
|
|
22
|
+
|
|
23
|
+
## Methods
|
|
24
|
+
|
|
25
|
+
### enable
|
|
26
|
+
|
|
27
|
+
**Parameters:**
|
|
28
|
+
|
|
29
|
+
| Name | Type | Required | Description |
|
|
30
|
+
|------|------|----------|-------------|
|
|
31
|
+
| `options` | `any` | | Parameter options |
|
|
32
|
+
|
|
33
|
+
**Returns:** `Promise<this>`
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### listen
|
|
38
|
+
|
|
39
|
+
Start listening on the Unix domain socket for the native app to connect. Fire-and-forget — binds the socket and returns immediately. Sits quietly until the native app connects; does nothing visible if it never does.
|
|
40
|
+
|
|
41
|
+
**Parameters:**
|
|
42
|
+
|
|
43
|
+
| Name | Type | Required | Description |
|
|
44
|
+
|------|------|----------|-------------|
|
|
45
|
+
| `socketPath` | `string` | | Override the configured socket path |
|
|
46
|
+
|
|
47
|
+
**Returns:** `this`
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### stop
|
|
52
|
+
|
|
53
|
+
Stop the IPC server and clean up all connections.
|
|
54
|
+
|
|
55
|
+
**Returns:** `Promise<this>`
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
### send
|
|
60
|
+
|
|
61
|
+
Write an NDJSON message to the connected app client.
|
|
62
|
+
|
|
63
|
+
**Parameters:**
|
|
64
|
+
|
|
65
|
+
| Name | Type | Required | Description |
|
|
66
|
+
|------|------|----------|-------------|
|
|
67
|
+
| `msg` | `Record<string, any>` | ✓ | The message object to send (will be JSON-serialized + newline) |
|
|
68
|
+
|
|
69
|
+
**Returns:** `boolean`
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Getters
|
|
74
|
+
|
|
75
|
+
| Property | Type | Description |
|
|
76
|
+
|----------|------|-------------|
|
|
77
|
+
| `isListening` | `boolean` | Whether the IPC server is currently listening. |
|
|
78
|
+
| `isClientConnected` | `boolean` | Whether the native app client is currently connected. |
|
|
79
|
+
|
|
80
|
+
## Events (Zod v4 schema)
|
|
81
|
+
|
|
82
|
+
### listening
|
|
83
|
+
|
|
84
|
+
Event emitted by LauncherAppCommandListener
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
### clientConnected
|
|
89
|
+
|
|
90
|
+
Event emitted by LauncherAppCommandListener
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
### clientDisconnected
|
|
95
|
+
|
|
96
|
+
Event emitted by LauncherAppCommandListener
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
### command
|
|
101
|
+
|
|
102
|
+
Event emitted by LauncherAppCommandListener
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
### message
|
|
107
|
+
|
|
108
|
+
Event emitted by LauncherAppCommandListener
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
## State (Zod v4 schema)
|
|
113
|
+
|
|
114
|
+
| Property | Type | Description |
|
|
115
|
+
|----------|------|-------------|
|
|
116
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
117
|
+
| `listening` | `boolean` | Whether the IPC server is listening |
|
|
118
|
+
| `clientConnected` | `boolean` | Whether the native launcher app is connected |
|
|
119
|
+
| `socketPath` | `string` | The socket path in use |
|
|
120
|
+
| `commandsReceived` | `number` | Total number of commands received |
|
|
121
|
+
| `lastCommandText` | `string` | The text of the last received command |
|
|
122
|
+
| `lastError` | `string` | Last error message |
|
|
123
|
+
|
|
124
|
+
## Examples
|
|
125
|
+
|
|
126
|
+
**features.launcherAppCommandListener**
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
const listener = container.feature('launcherAppCommandListener', {
|
|
130
|
+
enable: true,
|
|
131
|
+
autoListen: true,
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
listener.on('command', async (cmd) => {
|
|
135
|
+
cmd.ack('Working on it!') // or just cmd.ack() for silent
|
|
136
|
+
|
|
137
|
+
// ... do your actual work ...
|
|
138
|
+
cmd.progress(0.5, 'Halfway there')
|
|
139
|
+
|
|
140
|
+
cmd.finish() // silent finish
|
|
141
|
+
cmd.finish({ result: { action: 'completed' }, speech: 'All done!' })
|
|
142
|
+
// or: cmd.fail({ error: 'not found', speech: 'Sorry, that failed.' })
|
|
143
|
+
})
|
|
144
|
+
```
|
|
145
|
+
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Networking (features.networking)
|
|
2
|
+
|
|
3
|
+
The Networking feature provides utilities for network-related operations. This feature includes utilities for port detection and availability checking, which are commonly needed when setting up servers or network services.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('networking', {
|
|
9
|
+
// Default timeout in milliseconds for probing
|
|
10
|
+
timeout,
|
|
11
|
+
// Default concurrency for scanning operations
|
|
12
|
+
concurrency,
|
|
13
|
+
})
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Options (Zod v4 schema)
|
|
17
|
+
|
|
18
|
+
| Property | Type | Description |
|
|
19
|
+
|----------|------|-------------|
|
|
20
|
+
| `timeout` | `number` | Default timeout in milliseconds for probing |
|
|
21
|
+
| `concurrency` | `number` | Default concurrency for scanning operations |
|
|
22
|
+
|
|
23
|
+
## Methods
|
|
24
|
+
|
|
25
|
+
### findOpenPort
|
|
26
|
+
|
|
27
|
+
Finds the next available port starting from the specified port number. This method will search for the first available port starting from the given port number. If the specified port is available, it returns that port. Otherwise, it returns the next available port.
|
|
28
|
+
|
|
29
|
+
**Parameters:**
|
|
30
|
+
|
|
31
|
+
| Name | Type | Required | Description |
|
|
32
|
+
|------|------|----------|-------------|
|
|
33
|
+
| `startAt` | `any` | | The port number to start searching from (0 means system will choose) |
|
|
34
|
+
|
|
35
|
+
**Returns:** `void`
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// Find any available port
|
|
39
|
+
const anyPort = await networking.findOpenPort()
|
|
40
|
+
|
|
41
|
+
// Find an available port starting from 3000
|
|
42
|
+
const port = await networking.findOpenPort(3000)
|
|
43
|
+
console.log(`Server can use port: ${port}`)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### isPortOpen
|
|
49
|
+
|
|
50
|
+
Checks if a specific port is available for use. This method attempts to detect if the specified port is available. It returns true if the port is available, false if it's already in use.
|
|
51
|
+
|
|
52
|
+
**Parameters:**
|
|
53
|
+
|
|
54
|
+
| Name | Type | Required | Description |
|
|
55
|
+
|------|------|----------|-------------|
|
|
56
|
+
| `checkPort` | `any` | | The port number to check for availability |
|
|
57
|
+
|
|
58
|
+
**Returns:** `void`
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
// Check if port 8080 is available
|
|
62
|
+
const isAvailable = await networking.isPortOpen(8080)
|
|
63
|
+
if (isAvailable) {
|
|
64
|
+
console.log('Port 8080 is free to use')
|
|
65
|
+
} else {
|
|
66
|
+
console.log('Port 8080 is already in use')
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
### getLocalNetworks
|
|
73
|
+
|
|
74
|
+
Returns local external IPv4 interfaces and their CIDR ranges.
|
|
75
|
+
|
|
76
|
+
**Returns:** `LocalNetwork[]`
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
### expandCidr
|
|
81
|
+
|
|
82
|
+
Expands a CIDR block to host IP addresses. For /31 and /32, all addresses are returned. For all others, network/broadcast are excluded.
|
|
83
|
+
|
|
84
|
+
**Parameters:**
|
|
85
|
+
|
|
86
|
+
| Name | Type | Required | Description |
|
|
87
|
+
|------|------|----------|-------------|
|
|
88
|
+
| `cidr` | `string` | ✓ | Parameter cidr |
|
|
89
|
+
|
|
90
|
+
**Returns:** `string[]`
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
### getArpTable
|
|
95
|
+
|
|
96
|
+
Reads and parses the system ARP cache.
|
|
97
|
+
|
|
98
|
+
**Returns:** `Promise<ArpEntry[]>`
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
### isHostReachable
|
|
103
|
+
|
|
104
|
+
Performs a lightweight TCP reachability probe.
|
|
105
|
+
|
|
106
|
+
**Parameters:**
|
|
107
|
+
|
|
108
|
+
| Name | Type | Required | Description |
|
|
109
|
+
|------|------|----------|-------------|
|
|
110
|
+
| `host` | `string` | ✓ | Parameter host |
|
|
111
|
+
| `options` | `ReachableHostOptions` | | Parameter options |
|
|
112
|
+
|
|
113
|
+
`ReachableHostOptions` properties:
|
|
114
|
+
|
|
115
|
+
| Property | Type | Description |
|
|
116
|
+
|----------|------|-------------|
|
|
117
|
+
| `timeout` | `number` | |
|
|
118
|
+
| `ports` | `number[]` | |
|
|
119
|
+
|
|
120
|
+
**Returns:** `Promise<boolean>`
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
### discoverHosts
|
|
125
|
+
|
|
126
|
+
Discovers hosts in a CIDR range by combining ARP cache and TCP probes.
|
|
127
|
+
|
|
128
|
+
**Parameters:**
|
|
129
|
+
|
|
130
|
+
| Name | Type | Required | Description |
|
|
131
|
+
|------|------|----------|-------------|
|
|
132
|
+
| `cidr` | `string` | ✓ | Parameter cidr |
|
|
133
|
+
| `options` | `DiscoverHostsOptions` | | Parameter options |
|
|
134
|
+
|
|
135
|
+
`DiscoverHostsOptions` properties:
|
|
136
|
+
|
|
137
|
+
| Property | Type | Description |
|
|
138
|
+
|----------|------|-------------|
|
|
139
|
+
| `timeout` | `number` | |
|
|
140
|
+
| `concurrency` | `number` | |
|
|
141
|
+
| `ports` | `number[]` | |
|
|
142
|
+
|
|
143
|
+
**Returns:** `Promise<DiscoverHost[]>`
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
### scanPorts
|
|
148
|
+
|
|
149
|
+
TCP connect scan for a host. By default only returns open ports.
|
|
150
|
+
|
|
151
|
+
**Parameters:**
|
|
152
|
+
|
|
153
|
+
| Name | Type | Required | Description |
|
|
154
|
+
|------|------|----------|-------------|
|
|
155
|
+
| `host` | `string` | ✓ | Parameter host |
|
|
156
|
+
| `options` | `ScanPortsOptions` | | Parameter options |
|
|
157
|
+
|
|
158
|
+
`ScanPortsOptions` properties:
|
|
159
|
+
|
|
160
|
+
| Property | Type | Description |
|
|
161
|
+
|----------|------|-------------|
|
|
162
|
+
| `ports` | `string | number[]` | |
|
|
163
|
+
| `timeout` | `number` | |
|
|
164
|
+
| `concurrency` | `number` | |
|
|
165
|
+
| `banner` | `boolean` | |
|
|
166
|
+
| `includeClosed` | `boolean` | |
|
|
167
|
+
|
|
168
|
+
**Returns:** `Promise<PortScanResult[]>`
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
### scanLocalNetworks
|
|
173
|
+
|
|
174
|
+
Convenience method: discover and port-scan hosts across all local networks.
|
|
175
|
+
|
|
176
|
+
**Parameters:**
|
|
177
|
+
|
|
178
|
+
| Name | Type | Required | Description |
|
|
179
|
+
|------|------|----------|-------------|
|
|
180
|
+
| `options` | `ScanLocalNetworksOptions` | | Parameter options |
|
|
181
|
+
|
|
182
|
+
`ScanLocalNetworksOptions` properties:
|
|
183
|
+
|
|
184
|
+
| Property | Type | Description |
|
|
185
|
+
|----------|------|-------------|
|
|
186
|
+
| `ports` | `string | number[]` | |
|
|
187
|
+
| `timeout` | `number` | |
|
|
188
|
+
| `concurrency` | `number` | |
|
|
189
|
+
| `hostConcurrency` | `number` | |
|
|
190
|
+
| `banner` | `boolean` | |
|
|
191
|
+
|
|
192
|
+
**Returns:** `Promise<LocalNetworkScanHost[]>`
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
## Getters
|
|
197
|
+
|
|
198
|
+
| Property | Type | Description |
|
|
199
|
+
|----------|------|-------------|
|
|
200
|
+
| `proc` | `any` | |
|
|
201
|
+
| `os` | `any` | |
|
|
202
|
+
| `nmap` | `any` | Optional nmap wrapper for users that already have nmap installed. |
|
|
203
|
+
|
|
204
|
+
## Events (Zod v4 schema)
|
|
205
|
+
|
|
206
|
+
### scan:start
|
|
207
|
+
|
|
208
|
+
Event emitted by Networking
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
### host:discovered
|
|
213
|
+
|
|
214
|
+
Event emitted by Networking
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
### scan:complete
|
|
219
|
+
|
|
220
|
+
Event emitted by Networking
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
### port:open
|
|
225
|
+
|
|
226
|
+
Event emitted by Networking
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
## State (Zod v4 schema)
|
|
231
|
+
|
|
232
|
+
| Property | Type | Description |
|
|
233
|
+
|----------|------|-------------|
|
|
234
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
235
|
+
| `lastScan` | `object` | The most recent network scan result |
|
|
236
|
+
|
|
237
|
+
## Examples
|
|
238
|
+
|
|
239
|
+
**features.networking**
|
|
240
|
+
|
|
241
|
+
```ts
|
|
242
|
+
const networking = container.feature('networking')
|
|
243
|
+
|
|
244
|
+
// Find an available port starting from 3000
|
|
245
|
+
const port = await networking.findOpenPort(3000)
|
|
246
|
+
console.log(`Available port: ${port}`)
|
|
247
|
+
|
|
248
|
+
// Check if a specific port is available
|
|
249
|
+
const isAvailable = await networking.isPortOpen(8080)
|
|
250
|
+
if (isAvailable) {
|
|
251
|
+
console.log('Port 8080 is available')
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
**findOpenPort**
|
|
258
|
+
|
|
259
|
+
```ts
|
|
260
|
+
// Find any available port
|
|
261
|
+
const anyPort = await networking.findOpenPort()
|
|
262
|
+
|
|
263
|
+
// Find an available port starting from 3000
|
|
264
|
+
const port = await networking.findOpenPort(3000)
|
|
265
|
+
console.log(`Server can use port: ${port}`)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
**isPortOpen**
|
|
271
|
+
|
|
272
|
+
```ts
|
|
273
|
+
// Check if port 8080 is available
|
|
274
|
+
const isAvailable = await networking.isPortOpen(8080)
|
|
275
|
+
if (isAvailable) {
|
|
276
|
+
console.log('Port 8080 is free to use')
|
|
277
|
+
} else {
|
|
278
|
+
console.log('Port 8080 is already in use')
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# NLP (features.nlp)
|
|
2
|
+
|
|
3
|
+
The NLP feature provides natural language processing utilities for parsing utterances into structured data. Combines two complementary libraries: - **compromise**: Verb normalization (toInfinitive), POS pattern matching - **wink-nlp**: High-accuracy POS tagging (~95%), named entity recognition Three methods at increasing levels of detail: - `parse()` — compromise-powered quick structure + verb normalization - `analyze()` — wink-powered high-accuracy POS + entity extraction - `understand()` — combined parse + analyze merged
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('nlp')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### parse
|
|
14
|
+
|
|
15
|
+
Parse an utterance into structured command data using compromise. Extracts intent (normalized verb), target noun, prepositional subject, and modifiers.
|
|
16
|
+
|
|
17
|
+
**Parameters:**
|
|
18
|
+
|
|
19
|
+
| Name | Type | Required | Description |
|
|
20
|
+
|------|------|----------|-------------|
|
|
21
|
+
| `text` | `string` | ✓ | The raw utterance to parse |
|
|
22
|
+
|
|
23
|
+
**Returns:** `ParsedCommand`
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
nlp.parse("open the terminal")
|
|
27
|
+
// { intent: "open", target: "terminal", subject: null, modifiers: [], raw: "open the terminal" }
|
|
28
|
+
|
|
29
|
+
nlp.parse("draw a diagram of the auth flow")
|
|
30
|
+
// { intent: "draw", target: "diagram", subject: "auth flow", modifiers: [], raw: "..." }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### analyze
|
|
36
|
+
|
|
37
|
+
Analyze text with high-accuracy POS tagging and named entity recognition using wink-nlp.
|
|
38
|
+
|
|
39
|
+
**Parameters:**
|
|
40
|
+
|
|
41
|
+
| Name | Type | Required | Description |
|
|
42
|
+
|------|------|----------|-------------|
|
|
43
|
+
| `text` | `string` | ✓ | The text to analyze |
|
|
44
|
+
|
|
45
|
+
**Returns:** `Analysis`
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
nlp.analyze("meet john at 3pm about the deployment")
|
|
49
|
+
// { tokens: [{value:"meet",pos:"VERB"}, {value:"john",pos:"PROPN"}, ...],
|
|
50
|
+
// entities: [{value:"john",type:"PERSON"}, {value:"3pm",type:"TIME"}],
|
|
51
|
+
// raw: "meet john at 3pm about the deployment" }
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
### understand
|
|
57
|
+
|
|
58
|
+
Full understanding: combines compromise parsing with wink-nlp analysis. Returns intent, target, subject, modifiers (from parse) plus tokens and entities (from analyze).
|
|
59
|
+
|
|
60
|
+
**Parameters:**
|
|
61
|
+
|
|
62
|
+
| Name | Type | Required | Description |
|
|
63
|
+
|------|------|----------|-------------|
|
|
64
|
+
| `text` | `string` | ✓ | The text to understand |
|
|
65
|
+
|
|
66
|
+
**Returns:** `ParsedCommand & Analysis`
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
nlp.understand("draw a diagram of the auth flow")
|
|
70
|
+
// { intent: "draw", target: "diagram", subject: "auth flow", modifiers: [],
|
|
71
|
+
// tokens: [{value:"draw",pos:"VERB"}, ...], entities: [...], raw: "..." }
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## State (Zod v4 schema)
|
|
77
|
+
|
|
78
|
+
| Property | Type | Description |
|
|
79
|
+
|----------|------|-------------|
|
|
80
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
81
|
+
| `parseCalls` | `number` | Total parse() invocations |
|
|
82
|
+
| `analyzeCalls` | `number` | Total analyze() invocations |
|
|
83
|
+
|
|
84
|
+
## Examples
|
|
85
|
+
|
|
86
|
+
**features.nlp**
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
const nlp = container.feature('nlp', { enable: true })
|
|
90
|
+
|
|
91
|
+
nlp.parse("draw a diagram of the auth flow")
|
|
92
|
+
// { intent: "draw", target: "diagram", subject: "auth flow", modifiers: [], raw: "..." }
|
|
93
|
+
|
|
94
|
+
nlp.analyze("meet john at 3pm about the deployment")
|
|
95
|
+
// { tokens: [{value:"meet",pos:"VERB"}, ...], entities: [{value:"john",type:"PERSON"}, ...] }
|
|
96
|
+
|
|
97
|
+
nlp.understand("draw a diagram of the auth flow")
|
|
98
|
+
// { intent, target, subject, modifiers, tokens, entities, raw }
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
**parse**
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
nlp.parse("open the terminal")
|
|
107
|
+
// { intent: "open", target: "terminal", subject: null, modifiers: [], raw: "open the terminal" }
|
|
108
|
+
|
|
109
|
+
nlp.parse("draw a diagram of the auth flow")
|
|
110
|
+
// { intent: "draw", target: "diagram", subject: "auth flow", modifiers: [], raw: "..." }
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
**analyze**
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
nlp.analyze("meet john at 3pm about the deployment")
|
|
119
|
+
// { tokens: [{value:"meet",pos:"VERB"}, {value:"john",pos:"PROPN"}, ...],
|
|
120
|
+
// entities: [{value:"john",type:"PERSON"}, {value:"3pm",type:"TIME"}],
|
|
121
|
+
// raw: "meet john at 3pm about the deployment" }
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
**understand**
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
nlp.understand("draw a diagram of the auth flow")
|
|
130
|
+
// { intent: "draw", target: "diagram", subject: "auth flow", modifiers: [],
|
|
131
|
+
// tokens: [{value:"draw",pos:"VERB"}, ...], entities: [...], raw: "..." }
|
|
132
|
+
```
|
|
133
|
+
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Opener (features.opener)
|
|
2
|
+
|
|
3
|
+
The Opener feature opens files, URLs, desktop applications, and code editors. HTTP/HTTPS URLs are opened in Google Chrome. Desktop apps can be launched by name. VS Code and Cursor can be opened to a specific path. All other paths are opened with the platform's default handler (e.g. Preview for images, Finder for folders).
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('opener')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### open
|
|
14
|
+
|
|
15
|
+
Opens a path or URL with the appropriate application. HTTP and HTTPS URLs are opened in Google Chrome. Everything else is opened with the system default handler via `open` (macOS).
|
|
16
|
+
|
|
17
|
+
**Parameters:**
|
|
18
|
+
|
|
19
|
+
| Name | Type | Required | Description |
|
|
20
|
+
|------|------|----------|-------------|
|
|
21
|
+
| `target` | `string` | ✓ | A URL or file path to open |
|
|
22
|
+
|
|
23
|
+
**Returns:** `Promise<void>`
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### app
|
|
28
|
+
|
|
29
|
+
Opens a desktop application by name. On macOS, uses `open -a` to launch the app. On Windows, uses `start`. On Linux, attempts to run the lowercase app name as a command.
|
|
30
|
+
|
|
31
|
+
**Parameters:**
|
|
32
|
+
|
|
33
|
+
| Name | Type | Required | Description |
|
|
34
|
+
|------|------|----------|-------------|
|
|
35
|
+
| `name` | `string` | ✓ | The application name (e.g. "Slack", "Finder", "Safari") |
|
|
36
|
+
|
|
37
|
+
**Returns:** `Promise<void>`
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### code
|
|
42
|
+
|
|
43
|
+
Opens VS Code at the specified path. Uses the `code` CLI command. Falls back to `open -a "Visual Studio Code"` on macOS.
|
|
44
|
+
|
|
45
|
+
**Parameters:**
|
|
46
|
+
|
|
47
|
+
| Name | Type | Required | Description |
|
|
48
|
+
|------|------|----------|-------------|
|
|
49
|
+
| `path` | `string` | | The file or folder path to open |
|
|
50
|
+
|
|
51
|
+
**Returns:** `Promise<void>`
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### cursor
|
|
56
|
+
|
|
57
|
+
Opens Cursor at the specified path. Uses the `cursor` CLI command. Falls back to `open -a "Cursor"` on macOS.
|
|
58
|
+
|
|
59
|
+
**Parameters:**
|
|
60
|
+
|
|
61
|
+
| Name | Type | Required | Description |
|
|
62
|
+
|------|------|----------|-------------|
|
|
63
|
+
| `path` | `string` | | The file or folder path to open |
|
|
64
|
+
|
|
65
|
+
**Returns:** `Promise<void>`
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
## State (Zod v4 schema)
|
|
70
|
+
|
|
71
|
+
| Property | Type | Description |
|
|
72
|
+
|----------|------|-------------|
|
|
73
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
74
|
+
|
|
75
|
+
## Examples
|
|
76
|
+
|
|
77
|
+
**features.opener**
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
const opener = container.feature('opener')
|
|
81
|
+
|
|
82
|
+
// Open a URL in Chrome
|
|
83
|
+
await opener.open('https://www.google.com')
|
|
84
|
+
|
|
85
|
+
// Open a file with the default application
|
|
86
|
+
await opener.open('/path/to/image.png')
|
|
87
|
+
|
|
88
|
+
// Open a desktop application
|
|
89
|
+
await opener.app('Slack')
|
|
90
|
+
|
|
91
|
+
// Open VS Code at a project path
|
|
92
|
+
await opener.code('/Users/jon/projects/my-app')
|
|
93
|
+
|
|
94
|
+
// Open Cursor at a project path
|
|
95
|
+
await opener.cursor('/Users/jon/projects/my-app')
|
|
96
|
+
```
|
|
97
|
+
|