@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.
Files changed (358) hide show
  1. package/CLAUDE.md +71 -0
  2. package/README.md +78 -0
  3. package/bun.lock +2928 -0
  4. package/bunfig.toml +3 -0
  5. package/commands/audit-docs.ts +740 -0
  6. package/commands/build-scaffolds.ts +154 -0
  7. package/commands/generate-api-docs.ts +114 -0
  8. package/commands/update-introspection.ts +67 -0
  9. package/docs/CLI.md +335 -0
  10. package/docs/README.md +88 -0
  11. package/docs/TABLE-OF-CONTENTS.md +157 -0
  12. package/docs/apis/clients/elevenlabs.md +84 -0
  13. package/docs/apis/clients/graph.md +56 -0
  14. package/docs/apis/clients/openai.md +69 -0
  15. package/docs/apis/clients/rest.md +41 -0
  16. package/docs/apis/clients/websocket.md +107 -0
  17. package/docs/apis/features/agi/assistant.md +471 -0
  18. package/docs/apis/features/agi/assistants-manager.md +154 -0
  19. package/docs/apis/features/agi/claude-code.md +602 -0
  20. package/docs/apis/features/agi/conversation-history.md +352 -0
  21. package/docs/apis/features/agi/conversation.md +333 -0
  22. package/docs/apis/features/agi/docs-reader.md +121 -0
  23. package/docs/apis/features/agi/openai-codex.md +318 -0
  24. package/docs/apis/features/agi/openapi.md +138 -0
  25. package/docs/apis/features/agi/semantic-search.md +387 -0
  26. package/docs/apis/features/agi/skills-library.md +216 -0
  27. package/docs/apis/features/node/container-link.md +133 -0
  28. package/docs/apis/features/node/content-db.md +313 -0
  29. package/docs/apis/features/node/disk-cache.md +379 -0
  30. package/docs/apis/features/node/dns.md +651 -0
  31. package/docs/apis/features/node/docker.md +705 -0
  32. package/docs/apis/features/node/downloader.md +81 -0
  33. package/docs/apis/features/node/esbuild.md +59 -0
  34. package/docs/apis/features/node/file-manager.md +182 -0
  35. package/docs/apis/features/node/fs.md +581 -0
  36. package/docs/apis/features/node/git.md +330 -0
  37. package/docs/apis/features/node/google-auth.md +174 -0
  38. package/docs/apis/features/node/google-calendar.md +187 -0
  39. package/docs/apis/features/node/google-docs.md +151 -0
  40. package/docs/apis/features/node/google-drive.md +225 -0
  41. package/docs/apis/features/node/google-sheets.md +179 -0
  42. package/docs/apis/features/node/grep.md +290 -0
  43. package/docs/apis/features/node/helpers.md +135 -0
  44. package/docs/apis/features/node/ink.md +334 -0
  45. package/docs/apis/features/node/ipc-socket.md +260 -0
  46. package/docs/apis/features/node/json-tree.md +86 -0
  47. package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
  48. package/docs/apis/features/node/networking.md +281 -0
  49. package/docs/apis/features/node/nlp.md +133 -0
  50. package/docs/apis/features/node/opener.md +97 -0
  51. package/docs/apis/features/node/os.md +118 -0
  52. package/docs/apis/features/node/package-finder.md +402 -0
  53. package/docs/apis/features/node/postgres.md +212 -0
  54. package/docs/apis/features/node/proc.md +430 -0
  55. package/docs/apis/features/node/process-manager.md +210 -0
  56. package/docs/apis/features/node/python.md +278 -0
  57. package/docs/apis/features/node/repl.md +88 -0
  58. package/docs/apis/features/node/runpod.md +673 -0
  59. package/docs/apis/features/node/secure-shell.md +169 -0
  60. package/docs/apis/features/node/semantic-search.md +401 -0
  61. package/docs/apis/features/node/sqlite.md +211 -0
  62. package/docs/apis/features/node/telegram.md +254 -0
  63. package/docs/apis/features/node/tts.md +118 -0
  64. package/docs/apis/features/node/ui.md +703 -0
  65. package/docs/apis/features/node/vault.md +64 -0
  66. package/docs/apis/features/node/vm.md +84 -0
  67. package/docs/apis/features/node/window-manager.md +337 -0
  68. package/docs/apis/features/node/yaml-tree.md +85 -0
  69. package/docs/apis/features/node/yaml.md +176 -0
  70. package/docs/apis/features/web/asset-loader.md +47 -0
  71. package/docs/apis/features/web/container-link.md +133 -0
  72. package/docs/apis/features/web/esbuild.md +59 -0
  73. package/docs/apis/features/web/helpers.md +135 -0
  74. package/docs/apis/features/web/network.md +30 -0
  75. package/docs/apis/features/web/speech.md +55 -0
  76. package/docs/apis/features/web/vault.md +64 -0
  77. package/docs/apis/features/web/vm.md +84 -0
  78. package/docs/apis/features/web/voice.md +67 -0
  79. package/docs/apis/servers/express.md +127 -0
  80. package/docs/apis/servers/mcp.md +213 -0
  81. package/docs/apis/servers/websocket.md +99 -0
  82. package/docs/documentation-audit.md +134 -0
  83. package/docs/examples/content-db.md +77 -0
  84. package/docs/examples/disk-cache.md +83 -0
  85. package/docs/examples/docker.md +101 -0
  86. package/docs/examples/downloader.md +70 -0
  87. package/docs/examples/esbuild.md +80 -0
  88. package/docs/examples/file-manager.md +82 -0
  89. package/docs/examples/fs.md +83 -0
  90. package/docs/examples/git.md +85 -0
  91. package/docs/examples/google-auth.md +88 -0
  92. package/docs/examples/google-calendar.md +94 -0
  93. package/docs/examples/google-docs.md +82 -0
  94. package/docs/examples/google-drive.md +96 -0
  95. package/docs/examples/google-sheets.md +95 -0
  96. package/docs/examples/grep.md +85 -0
  97. package/docs/examples/ink-blocks.md +75 -0
  98. package/docs/examples/ink-renderer.md +41 -0
  99. package/docs/examples/ink.md +103 -0
  100. package/docs/examples/ipc-socket.md +103 -0
  101. package/docs/examples/json-tree.md +91 -0
  102. package/docs/examples/launcher-app-command-listener.md +120 -0
  103. package/docs/examples/networking.md +58 -0
  104. package/docs/examples/nlp.md +91 -0
  105. package/docs/examples/opener.md +78 -0
  106. package/docs/examples/os.md +72 -0
  107. package/docs/examples/package-finder.md +89 -0
  108. package/docs/examples/port-exposer.md +89 -0
  109. package/docs/examples/postgres.md +91 -0
  110. package/docs/examples/proc.md +81 -0
  111. package/docs/examples/process-manager.md +79 -0
  112. package/docs/examples/python.md +91 -0
  113. package/docs/examples/repl.md +93 -0
  114. package/docs/examples/runpod.md +119 -0
  115. package/docs/examples/secure-shell.md +92 -0
  116. package/docs/examples/sqlite.md +86 -0
  117. package/docs/examples/telegram.md +77 -0
  118. package/docs/examples/tts.md +86 -0
  119. package/docs/examples/ui.md +80 -0
  120. package/docs/examples/vault.md +70 -0
  121. package/docs/examples/vm.md +86 -0
  122. package/docs/examples/window-manager.md +125 -0
  123. package/docs/examples/yaml-tree.md +93 -0
  124. package/docs/examples/yaml.md +104 -0
  125. package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
  126. package/docs/ideas/container-use-api.md +9 -0
  127. package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
  128. package/docs/ideas/feature-stacks.md +22 -0
  129. package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
  130. package/docs/ideas/mcp-design.md +9 -0
  131. package/docs/ideas/web-container-debugging-feature.md +13 -0
  132. package/docs/introspection-audit.md +49 -0
  133. package/docs/introspection.md +154 -0
  134. package/docs/mcp/readme.md +162 -0
  135. package/docs/models.ts +38 -0
  136. package/docs/philosophy.md +85 -0
  137. package/docs/principles.md +7 -0
  138. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
  139. package/docs/prompts/mcp-test-easy-command.md +27 -0
  140. package/docs/reports/assistant-bugs.md +38 -0
  141. package/docs/reports/attach-pattern-usage.md +18 -0
  142. package/docs/reports/code-audit-results.md +391 -0
  143. package/docs/reports/introspection-audit-tasks.md +378 -0
  144. package/docs/reports/luca-mcp-improvements.md +128 -0
  145. package/docs/scaffolds/client.md +140 -0
  146. package/docs/scaffolds/command.md +106 -0
  147. package/docs/scaffolds/endpoint.md +176 -0
  148. package/docs/scaffolds/feature.md +148 -0
  149. package/docs/scaffolds/server.md +187 -0
  150. package/docs/tasks/web-container-helper-discovery.md +71 -0
  151. package/docs/todos.md +1 -0
  152. package/docs/tutorials/01-getting-started.md +106 -0
  153. package/docs/tutorials/02-container.md +210 -0
  154. package/docs/tutorials/03-scripts.md +194 -0
  155. package/docs/tutorials/04-features-overview.md +196 -0
  156. package/docs/tutorials/05-state-and-events.md +171 -0
  157. package/docs/tutorials/06-servers.md +157 -0
  158. package/docs/tutorials/07-endpoints.md +198 -0
  159. package/docs/tutorials/08-commands.md +171 -0
  160. package/docs/tutorials/09-clients.md +162 -0
  161. package/docs/tutorials/10-creating-features.md +198 -0
  162. package/docs/tutorials/11-contentbase.md +191 -0
  163. package/docs/tutorials/12-assistants.md +215 -0
  164. package/docs/tutorials/13-introspection.md +147 -0
  165. package/docs/tutorials/14-type-system.md +174 -0
  166. package/docs/tutorials/15-project-patterns.md +222 -0
  167. package/docs/tutorials/16-google-features.md +534 -0
  168. package/docs/tutorials/17-tui-blocks.md +530 -0
  169. package/docs/tutorials/18-semantic-search.md +334 -0
  170. package/index.ts +1 -0
  171. package/luca.console.ts +9 -0
  172. package/main.py +6 -0
  173. package/package.json +154 -0
  174. package/pyproject.toml +7 -0
  175. package/scripts/animations/chrome-glitch.ts +55 -0
  176. package/scripts/animations/index.ts +16 -0
  177. package/scripts/animations/neon-pulse.ts +64 -0
  178. package/scripts/animations/types.ts +6 -0
  179. package/scripts/build-web.ts +28 -0
  180. package/scripts/examples/ask-luca-expert.ts +42 -0
  181. package/scripts/examples/assistant-questions.ts +12 -0
  182. package/scripts/examples/excalidraw-expert.ts +75 -0
  183. package/scripts/examples/expert-chat.ts +0 -0
  184. package/scripts/examples/file-manager.ts +14 -0
  185. package/scripts/examples/ideas.ts +12 -0
  186. package/scripts/examples/interactive-chat.ts +20 -0
  187. package/scripts/examples/openai-tool-calls.ts +113 -0
  188. package/scripts/examples/opening-a-web-browser.ts +5 -0
  189. package/scripts/examples/telegram-bot.ts +79 -0
  190. package/scripts/examples/telegram-ink-ui.ts +302 -0
  191. package/scripts/examples/using-assistant-with-mcp.ts +560 -0
  192. package/scripts/examples/using-claude-code.ts +10 -0
  193. package/scripts/examples/using-contentdb.ts +35 -0
  194. package/scripts/examples/using-conversations.ts +35 -0
  195. package/scripts/examples/using-disk-cache.ts +10 -0
  196. package/scripts/examples/using-docker-shell.ts +75 -0
  197. package/scripts/examples/using-elevenlabs.ts +25 -0
  198. package/scripts/examples/using-google-calendar.ts +57 -0
  199. package/scripts/examples/using-google-docs.ts +74 -0
  200. package/scripts/examples/using-google-drive.ts +74 -0
  201. package/scripts/examples/using-google-sheets.ts +89 -0
  202. package/scripts/examples/using-nlp.ts +55 -0
  203. package/scripts/examples/using-ollama.ts +10 -0
  204. package/scripts/examples/using-openai-codex.ts +23 -0
  205. package/scripts/examples/using-postgres.ts +55 -0
  206. package/scripts/examples/using-runpod.ts +32 -0
  207. package/scripts/examples/using-tts.ts +40 -0
  208. package/scripts/examples/vm-loading-esm-modules.ts +16 -0
  209. package/scripts/scaffold.ts +391 -0
  210. package/scripts/scratch.ts +15 -0
  211. package/scripts/test-command-listener.ts +123 -0
  212. package/scripts/test-window-manager-lifecycle.ts +86 -0
  213. package/scripts/test-window-manager.ts +43 -0
  214. package/scripts/update-introspection-data.ts +58 -0
  215. package/src/agi/README.md +14 -0
  216. package/src/agi/container.server.ts +114 -0
  217. package/src/agi/endpoints/ask.ts +60 -0
  218. package/src/agi/endpoints/conversations/[id].ts +45 -0
  219. package/src/agi/endpoints/conversations.ts +31 -0
  220. package/src/agi/endpoints/experts.ts +37 -0
  221. package/src/agi/features/assistant.ts +767 -0
  222. package/src/agi/features/assistants-manager.ts +260 -0
  223. package/src/agi/features/claude-code.ts +1111 -0
  224. package/src/agi/features/conversation-history.ts +497 -0
  225. package/src/agi/features/conversation.ts +799 -0
  226. package/src/agi/features/openai-codex.ts +631 -0
  227. package/src/agi/features/openapi.ts +438 -0
  228. package/src/agi/features/skills-library.ts +425 -0
  229. package/src/agi/index.ts +6 -0
  230. package/src/agi/lib/token-counter.ts +122 -0
  231. package/src/browser.ts +25 -0
  232. package/src/bus.ts +100 -0
  233. package/src/cli/cli.ts +70 -0
  234. package/src/client.ts +461 -0
  235. package/src/clients/civitai/index.ts +541 -0
  236. package/src/clients/client-template.ts +41 -0
  237. package/src/clients/comfyui/index.ts +597 -0
  238. package/src/clients/elevenlabs/index.ts +291 -0
  239. package/src/clients/openai/index.ts +451 -0
  240. package/src/clients/supabase/index.ts +366 -0
  241. package/src/command.ts +164 -0
  242. package/src/commands/chat.ts +182 -0
  243. package/src/commands/console.ts +192 -0
  244. package/src/commands/describe.ts +433 -0
  245. package/src/commands/eval.ts +116 -0
  246. package/src/commands/help.ts +214 -0
  247. package/src/commands/index.ts +14 -0
  248. package/src/commands/mcp.ts +64 -0
  249. package/src/commands/prompt.ts +807 -0
  250. package/src/commands/run.ts +257 -0
  251. package/src/commands/sandbox-mcp.ts +439 -0
  252. package/src/commands/scaffold.ts +79 -0
  253. package/src/commands/serve.ts +172 -0
  254. package/src/container.ts +781 -0
  255. package/src/endpoint.ts +340 -0
  256. package/src/feature.ts +75 -0
  257. package/src/hash-object.ts +97 -0
  258. package/src/helper.ts +543 -0
  259. package/src/introspection/generated.agi.ts +23388 -0
  260. package/src/introspection/generated.node.ts +18899 -0
  261. package/src/introspection/generated.web.ts +2021 -0
  262. package/src/introspection/index.ts +256 -0
  263. package/src/introspection/scan.ts +912 -0
  264. package/src/node/container.ts +354 -0
  265. package/src/node/feature.ts +13 -0
  266. package/src/node/features/container-link.ts +558 -0
  267. package/src/node/features/content-db.ts +475 -0
  268. package/src/node/features/disk-cache.ts +382 -0
  269. package/src/node/features/dns.ts +655 -0
  270. package/src/node/features/docker.ts +912 -0
  271. package/src/node/features/downloader.ts +92 -0
  272. package/src/node/features/esbuild.ts +68 -0
  273. package/src/node/features/file-manager.ts +357 -0
  274. package/src/node/features/fs.ts +534 -0
  275. package/src/node/features/git.ts +492 -0
  276. package/src/node/features/google-auth.ts +502 -0
  277. package/src/node/features/google-calendar.ts +300 -0
  278. package/src/node/features/google-docs.ts +404 -0
  279. package/src/node/features/google-drive.ts +339 -0
  280. package/src/node/features/google-sheets.ts +279 -0
  281. package/src/node/features/grep.ts +406 -0
  282. package/src/node/features/helpers.ts +374 -0
  283. package/src/node/features/ink.ts +490 -0
  284. package/src/node/features/ipc-socket.ts +459 -0
  285. package/src/node/features/json-tree.ts +188 -0
  286. package/src/node/features/launcher-app-command-listener.ts +388 -0
  287. package/src/node/features/networking.ts +925 -0
  288. package/src/node/features/nlp.ts +211 -0
  289. package/src/node/features/opener.ts +166 -0
  290. package/src/node/features/os.ts +157 -0
  291. package/src/node/features/package-finder.ts +539 -0
  292. package/src/node/features/port-exposer.ts +342 -0
  293. package/src/node/features/postgres.ts +273 -0
  294. package/src/node/features/proc.ts +502 -0
  295. package/src/node/features/process-manager.ts +542 -0
  296. package/src/node/features/python.ts +444 -0
  297. package/src/node/features/repl.ts +194 -0
  298. package/src/node/features/runpod.ts +802 -0
  299. package/src/node/features/secure-shell.ts +248 -0
  300. package/src/node/features/semantic-search.ts +924 -0
  301. package/src/node/features/sqlite.ts +289 -0
  302. package/src/node/features/telegram.ts +342 -0
  303. package/src/node/features/tts.ts +184 -0
  304. package/src/node/features/ui.ts +857 -0
  305. package/src/node/features/vault.ts +164 -0
  306. package/src/node/features/vm.ts +312 -0
  307. package/src/node/features/window-manager.ts +804 -0
  308. package/src/node/features/yaml-tree.ts +149 -0
  309. package/src/node/features/yaml.ts +132 -0
  310. package/src/node.ts +70 -0
  311. package/src/react/index.ts +175 -0
  312. package/src/registry.ts +199 -0
  313. package/src/scaffolds/generated.ts +1613 -0
  314. package/src/scaffolds/template.ts +37 -0
  315. package/src/schemas/base.ts +255 -0
  316. package/src/server.ts +135 -0
  317. package/src/servers/express.ts +209 -0
  318. package/src/servers/mcp.ts +805 -0
  319. package/src/servers/socket.ts +120 -0
  320. package/src/state.ts +101 -0
  321. package/src/web/clients/socket.ts +82 -0
  322. package/src/web/container.ts +74 -0
  323. package/src/web/extension.ts +30 -0
  324. package/src/web/feature.ts +12 -0
  325. package/src/web/features/asset-loader.ts +64 -0
  326. package/src/web/features/container-link.ts +385 -0
  327. package/src/web/features/esbuild.ts +79 -0
  328. package/src/web/features/helpers.ts +267 -0
  329. package/src/web/features/network.ts +61 -0
  330. package/src/web/features/speech.ts +87 -0
  331. package/src/web/features/vault.ts +189 -0
  332. package/src/web/features/vm.ts +78 -0
  333. package/src/web/features/voice-recognition.ts +129 -0
  334. package/src/web/shims/isomorphic-vm.ts +149 -0
  335. package/test/bus.test.ts +134 -0
  336. package/test/clients-servers.test.ts +216 -0
  337. package/test/container-link.test.ts +274 -0
  338. package/test/features.test.ts +160 -0
  339. package/test/integration.test.ts +787 -0
  340. package/test/node-container.test.ts +121 -0
  341. package/test/rate-limit.test.ts +272 -0
  342. package/test/semantic-search.test.ts +550 -0
  343. package/test/state.test.ts +121 -0
  344. package/test-integration/assistant.test.ts +138 -0
  345. package/test-integration/assistants-manager.test.ts +123 -0
  346. package/test-integration/claude-code.test.ts +98 -0
  347. package/test-integration/conversation-history.test.ts +205 -0
  348. package/test-integration/conversation.test.ts +137 -0
  349. package/test-integration/elevenlabs.test.ts +55 -0
  350. package/test-integration/google-services.test.ts +80 -0
  351. package/test-integration/helpers.ts +89 -0
  352. package/test-integration/openai-codex.test.ts +93 -0
  353. package/test-integration/runpod.test.ts +58 -0
  354. package/test-integration/server-endpoints.test.ts +97 -0
  355. package/test-integration/skills-library.test.ts +157 -0
  356. package/test-integration/telegram.test.ts +46 -0
  357. package/tsconfig.json +58 -0
  358. 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
+