luca 3.0.0 → 3.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 (372) hide show
  1. package/.github/workflows/release.yaml +1 -0
  2. package/CLAUDE.md +10 -2
  3. package/README.md +130 -112
  4. package/assistants/codingAssistant/CORE.md +6 -1
  5. package/assistants/codingAssistant/hooks.ts +1 -1
  6. package/assistants/inkbot/hooks.ts +1 -1
  7. package/assistants/inkbot/tools.ts +1 -1
  8. package/bun.lock +220 -322
  9. package/commands/audit-docs.ts +2 -2
  10. package/commands/build-bootstrap.ts +2 -3
  11. package/commands/build-python-bridge.ts +2 -3
  12. package/commands/build-scaffolds.ts +2 -3
  13. package/commands/bundle-consumer-project.ts +521 -0
  14. package/commands/generate-api-docs.ts +2 -2
  15. package/commands/inkbot.ts +2 -2
  16. package/commands/release.ts +2 -2
  17. package/commands/try-all-challenges.ts +3 -3
  18. package/commands/try-challenge.ts +3 -3
  19. package/dist/agi/container.server.d.ts +2 -2
  20. package/dist/agi/features/assistant.d.ts +2 -2
  21. package/dist/agi/features/assistants-manager.d.ts +1 -1
  22. package/dist/agi/features/autonomous-assistant.d.ts +1 -1
  23. package/dist/agi/features/browser-use.d.ts +1 -1
  24. package/dist/agi/features/claude-code.d.ts +1 -1
  25. package/dist/agi/features/conversation-history.d.ts +2 -2
  26. package/dist/agi/features/conversation.d.ts +1 -1
  27. package/dist/agi/features/docs-reader.d.ts +1 -1
  28. package/dist/agi/features/file-tools.d.ts +1 -1
  29. package/dist/agi/features/luca-coder.d.ts +1 -1
  30. package/dist/agi/features/openai-codex.d.ts +1 -1
  31. package/dist/agi/features/skills-library.d.ts +1 -1
  32. package/dist/clients/civitai/index.d.ts +4 -4
  33. package/dist/clients/client-template.d.ts +4 -4
  34. package/dist/clients/comfyui/index.d.ts +2 -2
  35. package/dist/clients/elevenlabs/index.d.ts +2 -2
  36. package/dist/clients/openai/index.d.ts +2 -2
  37. package/dist/clients/supabase/index.d.ts +3 -3
  38. package/dist/command.d.ts +1 -1
  39. package/dist/node/container.d.ts +1 -1
  40. package/dist/node/features/helpers.d.ts +3 -3
  41. package/dist/node/features/semantic-search.d.ts +1 -1
  42. package/dist/node/features/vm.d.ts +3 -3
  43. package/dist/node.d.ts +1 -1
  44. package/dist/scaffolds/generated.d.ts +1 -1
  45. package/dist/selector.d.ts +1 -1
  46. package/index.html +217 -190
  47. package/luca.console.ts +1 -1
  48. package/package.json +2 -2
  49. package/public/index.html +217 -190
  50. package/public/slides-ai-native.html +1 -1
  51. package/public/slides-intro.html +2 -2
  52. package/scripts/examples/ask-luca-expert.ts +1 -1
  53. package/scripts/examples/assistant-questions.ts +1 -1
  54. package/scripts/examples/excalidraw-expert.ts +1 -1
  55. package/scripts/examples/file-manager.ts +1 -1
  56. package/scripts/examples/ideas.ts +1 -1
  57. package/scripts/examples/interactive-chat.ts +1 -1
  58. package/scripts/examples/opening-a-web-browser.ts +1 -1
  59. package/scripts/examples/telegram-bot.ts +1 -1
  60. package/scripts/examples/using-assistant-with-mcp.ts +1 -1
  61. package/scripts/examples/using-claude-code.ts +1 -1
  62. package/scripts/examples/using-contentdb.ts +2 -2
  63. package/scripts/examples/using-conversations.ts +1 -1
  64. package/scripts/examples/using-disk-cache.ts +1 -1
  65. package/scripts/examples/using-docker-shell.ts +1 -1
  66. package/scripts/examples/using-elevenlabs.ts +1 -1
  67. package/scripts/examples/using-google-calendar.ts +1 -1
  68. package/scripts/examples/using-google-docs.ts +1 -1
  69. package/scripts/examples/using-google-drive.ts +1 -1
  70. package/scripts/examples/using-google-sheets.ts +1 -1
  71. package/scripts/examples/using-nlp.ts +1 -1
  72. package/scripts/examples/using-ollama.ts +1 -1
  73. package/scripts/examples/using-postgres.ts +1 -1
  74. package/scripts/examples/using-runpod.ts +1 -1
  75. package/scripts/examples/using-tts.ts +1 -1
  76. package/scripts/scaffold.ts +5 -5
  77. package/scripts/scratch.ts +1 -1
  78. package/scripts/test-assistant-hooks.ts +1 -1
  79. package/scripts/test-docs-reader.ts +1 -1
  80. package/src/agi/container.server.ts +6 -2
  81. package/src/agi/features/agent-memory.ts +25 -25
  82. package/src/agi/features/assistant.ts +34 -5
  83. package/src/agi/features/assistants-manager.ts +122 -6
  84. package/src/agi/features/autonomous-assistant.ts +1 -1
  85. package/src/agi/features/browser-use.ts +20 -1
  86. package/src/agi/features/claude-code.ts +51 -5
  87. package/src/agi/features/coding-tools.ts +1 -1
  88. package/src/agi/features/conversation-history.ts +181 -4
  89. package/src/agi/features/conversation.ts +186 -15
  90. package/src/agi/features/docs-reader.ts +2 -2
  91. package/src/agi/features/file-tools.ts +49 -2
  92. package/src/agi/features/luca-coder.ts +7 -5
  93. package/src/agi/features/mcp-bridge.ts +532 -0
  94. package/src/agi/features/openai-codex.ts +2 -2
  95. package/src/agi/features/skills-library.ts +131 -52
  96. package/src/agi/lib/token-counter.ts +80 -0
  97. package/src/bootstrap/generated.ts +56 -57
  98. package/src/browser.ts +1 -1
  99. package/src/cli/build-info.ts +2 -2
  100. package/src/cli/cli.ts +2 -2
  101. package/src/clients/civitai/index.ts +5 -5
  102. package/src/clients/client-template.ts +4 -4
  103. package/src/clients/comfyui/index.ts +4 -4
  104. package/src/clients/elevenlabs/index.ts +4 -4
  105. package/src/clients/openai/index.ts +7 -7
  106. package/src/clients/supabase/index.ts +4 -4
  107. package/src/clients/voicebox/index.ts +4 -4
  108. package/src/command.ts +2 -1
  109. package/src/commands/chat.ts +1 -0
  110. package/src/commands/eval.ts +2 -56
  111. package/src/commands/introspect.ts +1 -1
  112. package/src/commands/prompt.ts +41 -9
  113. package/src/container-describer.ts +8 -1
  114. package/src/container.ts +13 -0
  115. package/src/entity.ts +2 -2
  116. package/src/helper.ts +1 -1
  117. package/src/introspection/generated.agi.ts +28563 -27571
  118. package/src/introspection/generated.node.ts +20281 -20194
  119. package/src/introspection/generated.web.ts +605 -584
  120. package/src/introspection/scan.ts +11 -6
  121. package/src/node/container.ts +1 -1
  122. package/src/node/features/content-db.ts +39 -2
  123. package/src/node/features/display-result.ts +57 -0
  124. package/src/node/features/helpers.ts +42 -15
  125. package/src/node/features/python.ts +25 -19
  126. package/src/node/features/repl.ts +1 -1
  127. package/src/node/features/secure-shell.ts +11 -17
  128. package/src/node/features/semantic-search.ts +2 -2
  129. package/src/node/features/transpiler.ts +2 -3
  130. package/src/node/features/ui.ts +5 -0
  131. package/src/node/features/vm.ts +3 -3
  132. package/src/node.ts +3 -3
  133. package/src/python/generated.ts +0 -1
  134. package/src/scaffolds/generated.ts +82 -83
  135. package/src/selector.ts +1 -1
  136. package/src/servers/express.ts +1 -1
  137. package/src/web/features/helpers.ts +22 -0
  138. package/tsconfig.json +12 -12
  139. package/docs/CLI.md +0 -335
  140. package/docs/CNAME +0 -1
  141. package/docs/README.md +0 -60
  142. package/docs/TABLE-OF-CONTENTS.md +0 -183
  143. package/docs/apis/clients/elevenlabs.md +0 -308
  144. package/docs/apis/clients/graph.md +0 -107
  145. package/docs/apis/clients/openai.md +0 -429
  146. package/docs/apis/clients/rest.md +0 -161
  147. package/docs/apis/clients/websocket.md +0 -174
  148. package/docs/apis/features/agi/assistant.md +0 -625
  149. package/docs/apis/features/agi/assistants-manager.md +0 -282
  150. package/docs/apis/features/agi/auto-assistant.md +0 -279
  151. package/docs/apis/features/agi/browser-use.md +0 -802
  152. package/docs/apis/features/agi/claude-code.md +0 -884
  153. package/docs/apis/features/agi/conversation-history.md +0 -364
  154. package/docs/apis/features/agi/conversation.md +0 -548
  155. package/docs/apis/features/agi/docs-reader.md +0 -99
  156. package/docs/apis/features/agi/file-tools.md +0 -163
  157. package/docs/apis/features/agi/luca-coder.md +0 -407
  158. package/docs/apis/features/agi/openai-codex.md +0 -396
  159. package/docs/apis/features/agi/openapi.md +0 -138
  160. package/docs/apis/features/agi/semantic-search.md +0 -387
  161. package/docs/apis/features/agi/skills-library.md +0 -239
  162. package/docs/apis/features/node/container-link.md +0 -192
  163. package/docs/apis/features/node/content-db.md +0 -450
  164. package/docs/apis/features/node/disk-cache.md +0 -379
  165. package/docs/apis/features/node/dns.md +0 -652
  166. package/docs/apis/features/node/docker.md +0 -706
  167. package/docs/apis/features/node/downloader.md +0 -81
  168. package/docs/apis/features/node/esbuild.md +0 -60
  169. package/docs/apis/features/node/file-manager.md +0 -191
  170. package/docs/apis/features/node/fs.md +0 -1217
  171. package/docs/apis/features/node/git.md +0 -371
  172. package/docs/apis/features/node/google-auth.md +0 -193
  173. package/docs/apis/features/node/google-calendar.md +0 -202
  174. package/docs/apis/features/node/google-docs.md +0 -173
  175. package/docs/apis/features/node/google-drive.md +0 -246
  176. package/docs/apis/features/node/google-mail.md +0 -214
  177. package/docs/apis/features/node/google-sheets.md +0 -194
  178. package/docs/apis/features/node/grep.md +0 -292
  179. package/docs/apis/features/node/helpers.md +0 -164
  180. package/docs/apis/features/node/ink.md +0 -334
  181. package/docs/apis/features/node/ipc-socket.md +0 -249
  182. package/docs/apis/features/node/json-tree.md +0 -86
  183. package/docs/apis/features/node/networking.md +0 -316
  184. package/docs/apis/features/node/nlp.md +0 -133
  185. package/docs/apis/features/node/opener.md +0 -97
  186. package/docs/apis/features/node/os.md +0 -146
  187. package/docs/apis/features/node/package-finder.md +0 -392
  188. package/docs/apis/features/node/postgres.md +0 -234
  189. package/docs/apis/features/node/proc.md +0 -399
  190. package/docs/apis/features/node/process-manager.md +0 -305
  191. package/docs/apis/features/node/python.md +0 -604
  192. package/docs/apis/features/node/redis.md +0 -380
  193. package/docs/apis/features/node/repl.md +0 -88
  194. package/docs/apis/features/node/runpod.md +0 -674
  195. package/docs/apis/features/node/secure-shell.md +0 -176
  196. package/docs/apis/features/node/semantic-search.md +0 -408
  197. package/docs/apis/features/node/sqlite.md +0 -233
  198. package/docs/apis/features/node/telegram.md +0 -279
  199. package/docs/apis/features/node/transpiler.md +0 -74
  200. package/docs/apis/features/node/tts.md +0 -133
  201. package/docs/apis/features/node/ui.md +0 -701
  202. package/docs/apis/features/node/vault.md +0 -59
  203. package/docs/apis/features/node/vm.md +0 -75
  204. package/docs/apis/features/node/yaml-tree.md +0 -85
  205. package/docs/apis/features/node/yaml.md +0 -176
  206. package/docs/apis/features/web/asset-loader.md +0 -59
  207. package/docs/apis/features/web/container-link.md +0 -192
  208. package/docs/apis/features/web/esbuild.md +0 -54
  209. package/docs/apis/features/web/helpers.md +0 -164
  210. package/docs/apis/features/web/network.md +0 -44
  211. package/docs/apis/features/web/speech.md +0 -69
  212. package/docs/apis/features/web/vault.md +0 -59
  213. package/docs/apis/features/web/vm.md +0 -75
  214. package/docs/apis/features/web/voice.md +0 -84
  215. package/docs/apis/servers/express.md +0 -171
  216. package/docs/apis/servers/mcp.md +0 -238
  217. package/docs/apis/servers/websocket.md +0 -170
  218. package/docs/bootstrap/CLAUDE.md +0 -101
  219. package/docs/bootstrap/SKILL.md +0 -341
  220. package/docs/bootstrap/templates/about-command.ts +0 -41
  221. package/docs/bootstrap/templates/docs-models.ts +0 -22
  222. package/docs/bootstrap/templates/docs-readme.md +0 -43
  223. package/docs/bootstrap/templates/example-feature.ts +0 -53
  224. package/docs/bootstrap/templates/health-endpoint.ts +0 -15
  225. package/docs/bootstrap/templates/luca-cli.ts +0 -30
  226. package/docs/bootstrap/templates/runme.md +0 -54
  227. package/docs/challenges/caching-proxy.md +0 -16
  228. package/docs/challenges/content-db-round-trip.md +0 -14
  229. package/docs/challenges/custom-command.md +0 -9
  230. package/docs/challenges/file-watcher-pipeline.md +0 -11
  231. package/docs/challenges/grep-audit-report.md +0 -15
  232. package/docs/challenges/multi-feature-dashboard.md +0 -14
  233. package/docs/challenges/process-orchestrator.md +0 -17
  234. package/docs/challenges/rest-api-server-with-client.md +0 -12
  235. package/docs/challenges/script-runner-with-vm.md +0 -11
  236. package/docs/challenges/simple-rest-api.md +0 -15
  237. package/docs/challenges/websocket-serve-and-client.md +0 -11
  238. package/docs/challenges/yaml-config-system.md +0 -14
  239. package/docs/command-system-overhaul.md +0 -94
  240. package/docs/documentation-audit.md +0 -134
  241. package/docs/examples/assistant/CORE.md +0 -18
  242. package/docs/examples/assistant/hooks.ts +0 -3
  243. package/docs/examples/assistant/tools.ts +0 -10
  244. package/docs/examples/assistant-hooks-reference.ts +0 -171
  245. package/docs/examples/assistant-with-process-manager.md +0 -84
  246. package/docs/examples/content-db.md +0 -77
  247. package/docs/examples/disk-cache.md +0 -83
  248. package/docs/examples/docker.md +0 -101
  249. package/docs/examples/downloader.md +0 -70
  250. package/docs/examples/entity.md +0 -124
  251. package/docs/examples/esbuild.md +0 -80
  252. package/docs/examples/feature-as-tool-provider.md +0 -143
  253. package/docs/examples/file-manager.md +0 -82
  254. package/docs/examples/fs.md +0 -83
  255. package/docs/examples/git.md +0 -85
  256. package/docs/examples/google-auth.md +0 -88
  257. package/docs/examples/google-calendar.md +0 -94
  258. package/docs/examples/google-docs.md +0 -82
  259. package/docs/examples/google-drive.md +0 -96
  260. package/docs/examples/google-sheets.md +0 -95
  261. package/docs/examples/grep.md +0 -85
  262. package/docs/examples/ink-blocks.md +0 -75
  263. package/docs/examples/ink-renderer.md +0 -41
  264. package/docs/examples/ink.md +0 -103
  265. package/docs/examples/ipc-socket.md +0 -103
  266. package/docs/examples/json-tree.md +0 -91
  267. package/docs/examples/networking.md +0 -58
  268. package/docs/examples/nlp.md +0 -91
  269. package/docs/examples/opener.md +0 -78
  270. package/docs/examples/os.md +0 -72
  271. package/docs/examples/package-finder.md +0 -89
  272. package/docs/examples/postgres.md +0 -91
  273. package/docs/examples/proc.md +0 -81
  274. package/docs/examples/process-manager.md +0 -79
  275. package/docs/examples/python.md +0 -132
  276. package/docs/examples/repl.md +0 -93
  277. package/docs/examples/runpod.md +0 -119
  278. package/docs/examples/secure-shell.md +0 -92
  279. package/docs/examples/sqlite.md +0 -86
  280. package/docs/examples/structured-output-with-assistants.md +0 -144
  281. package/docs/examples/telegram.md +0 -77
  282. package/docs/examples/tts.md +0 -86
  283. package/docs/examples/ui.md +0 -80
  284. package/docs/examples/vault.md +0 -70
  285. package/docs/examples/vm.md +0 -86
  286. package/docs/examples/websocket-ask-and-reply-example.md +0 -128
  287. package/docs/examples/yaml-tree.md +0 -93
  288. package/docs/examples/yaml.md +0 -104
  289. package/docs/ideas/assistant-factory-pattern.md +0 -142
  290. package/docs/in-memory-fs.md +0 -4
  291. package/docs/introspection-audit.md +0 -49
  292. package/docs/introspection.md +0 -164
  293. package/docs/mcp/readme.md +0 -162
  294. package/docs/models.ts +0 -41
  295. package/docs/philosophy.md +0 -86
  296. package/docs/principles.md +0 -7
  297. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +0 -34
  298. package/docs/prompts/check-for-undocumented-features.md +0 -27
  299. package/docs/prompts/mcp-test-easy-command.md +0 -27
  300. package/docs/scaffolds/client.md +0 -149
  301. package/docs/scaffolds/command.md +0 -120
  302. package/docs/scaffolds/endpoint.md +0 -171
  303. package/docs/scaffolds/feature.md +0 -158
  304. package/docs/scaffolds/selector.md +0 -91
  305. package/docs/scaffolds/server.md +0 -196
  306. package/docs/selectors.md +0 -115
  307. package/docs/sessions/custom-command/attempt-log-2.md +0 -195
  308. package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +0 -728
  309. package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +0 -555
  310. package/docs/sessions/grep-audit-report/attempt-log-1.md +0 -289
  311. package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +0 -679
  312. package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +0 -1
  313. package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +0 -920
  314. package/docs/sessions/simple-rest-api/attempt-log-1.md +0 -593
  315. package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +0 -995
  316. package/docs/tutorials/00-bootstrap.md +0 -166
  317. package/docs/tutorials/01-getting-started.md +0 -106
  318. package/docs/tutorials/02-container.md +0 -210
  319. package/docs/tutorials/03-scripts.md +0 -194
  320. package/docs/tutorials/04-features-overview.md +0 -196
  321. package/docs/tutorials/05-state-and-events.md +0 -171
  322. package/docs/tutorials/06-servers.md +0 -157
  323. package/docs/tutorials/07-endpoints.md +0 -198
  324. package/docs/tutorials/08-commands.md +0 -252
  325. package/docs/tutorials/09-clients.md +0 -162
  326. package/docs/tutorials/10-creating-features.md +0 -203
  327. package/docs/tutorials/11-contentbase.md +0 -191
  328. package/docs/tutorials/12-assistants.md +0 -215
  329. package/docs/tutorials/13-introspection.md +0 -157
  330. package/docs/tutorials/14-type-system.md +0 -174
  331. package/docs/tutorials/15-project-patterns.md +0 -222
  332. package/docs/tutorials/16-google-features.md +0 -534
  333. package/docs/tutorials/17-tui-blocks.md +0 -530
  334. package/docs/tutorials/18-semantic-search.md +0 -334
  335. package/docs/tutorials/19-python-sessions.md +0 -401
  336. package/docs/tutorials/20-browser-esm.md +0 -234
  337. package/src/agi/endpoints/ask.ts +0 -60
  338. package/src/agi/endpoints/conversations/[id].ts +0 -45
  339. package/src/agi/endpoints/conversations.ts +0 -31
  340. package/src/agi/endpoints/experts.ts +0 -37
  341. package/test/assistant-hooks.test.ts +0 -306
  342. package/test/assistant.test.ts +0 -81
  343. package/test/bus.test.ts +0 -134
  344. package/test/clients-servers.test.ts +0 -217
  345. package/test/command.test.ts +0 -267
  346. package/test/container-link.test.ts +0 -274
  347. package/test/conversation.test.ts +0 -220
  348. package/test/features.test.ts +0 -160
  349. package/test/fork-and-research.test.ts +0 -450
  350. package/test/integration.test.ts +0 -787
  351. package/test/interceptor-chain.test.ts +0 -61
  352. package/test/node-container.test.ts +0 -121
  353. package/test/python-session.test.ts +0 -105
  354. package/test/rate-limit.test.ts +0 -272
  355. package/test/semantic-search.test.ts +0 -550
  356. package/test/state.test.ts +0 -121
  357. package/test/vm-context.test.ts +0 -146
  358. package/test/vm-loadmodule.test.ts +0 -213
  359. package/test/websocket-ask.test.ts +0 -101
  360. package/test-integration/assistant.test.ts +0 -138
  361. package/test-integration/assistants-manager.test.ts +0 -113
  362. package/test-integration/claude-code.test.ts +0 -98
  363. package/test-integration/conversation-history.test.ts +0 -205
  364. package/test-integration/conversation.test.ts +0 -137
  365. package/test-integration/elevenlabs.test.ts +0 -55
  366. package/test-integration/google-services.test.ts +0 -80
  367. package/test-integration/helpers.ts +0 -89
  368. package/test-integration/memory.test.ts +0 -204
  369. package/test-integration/openai-codex.test.ts +0 -93
  370. package/test-integration/runpod.test.ts +0 -58
  371. package/test-integration/server-endpoints.test.ts +0 -97
  372. package/test-integration/telegram.test.ts +0 -46
@@ -1,91 +0,0 @@
1
- ---
2
- title: "Natural Language Processing"
3
- tags: [nlp, parsing, text-analysis]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # nlp
9
-
10
- Natural language processing utilities for parsing utterances into structured data, POS tagging, and entity extraction.
11
-
12
- ## Overview
13
-
14
- The `nlp` feature is an on-demand feature that combines two complementary NLP libraries: **compromise** for verb normalization and quick structural parsing, and **wink-nlp** for high-accuracy part-of-speech tagging and named entity recognition. Use it when you need to extract intent from voice commands, classify sentence structure, or identify entities in text.
15
-
16
- ## Enabling the Feature
17
-
18
- The nlp feature is on-demand, so we enable it explicitly.
19
-
20
- ```ts
21
- const nlp = container.feature('nlp', { enable: true })
22
- console.log('NLP feature enabled:', nlp.state.enabled)
23
- ```
24
-
25
- ## Parsing Voice Commands
26
-
27
- The `parse()` method uses compromise to extract structured command data: an intent (normalized verb), a target noun, an optional prepositional subject, and any modifiers.
28
-
29
- ```ts
30
- const cmd1 = nlp.parse("open the terminal")
31
- console.log('Command:', JSON.stringify(cmd1, null, 2))
32
- ```
33
-
34
- Prepositional phrases with "of" are extracted as the subject.
35
-
36
- ```ts
37
- const cmd2 = nlp.parse("draw a diagram of the auth flow")
38
- console.log('Command with subject:', JSON.stringify(cmd2, null, 2))
39
- ```
40
-
41
- Notice how `intent` is the normalized verb form ("draw"), `target` is the direct object ("diagram"), and `subject` captures the prepositional phrase ("auth flow").
42
-
43
- ## POS Tagging and Entity Recognition
44
-
45
- The `analyze()` method uses wink-nlp for high-accuracy part-of-speech tagging and named entity recognition.
46
-
47
- ```ts
48
- const analysis = nlp.analyze("meet john at 3pm about the deployment")
49
- console.log('Tokens:')
50
- for (const tok of analysis.tokens) {
51
- console.log(` ${tok.value.padEnd(15)} ${tok.pos}`)
52
- }
53
- console.log('Entities:', JSON.stringify(analysis.entities))
54
- ```
55
-
56
- Each token is tagged with its part of speech (VERB, NOUN, ADP, DET, etc.) and named entities like times and proper nouns are extracted separately.
57
-
58
- ## Full Understanding
59
-
60
- The `understand()` method combines both `parse()` and `analyze()` into a single result, giving you structured command data alongside detailed POS tags and entities.
61
-
62
- ```ts
63
- const full = nlp.understand("send an email to sarah about the quarterly report")
64
- console.log('Intent:', full.intent)
65
- console.log('Target:', full.target)
66
- console.log('Modifiers:', full.modifiers)
67
- console.log('Token count:', full.tokens.length)
68
- console.log('Entities:', JSON.stringify(full.entities))
69
- ```
70
-
71
- This is the most complete method when you need both the high-level command structure and the detailed linguistic analysis in one call.
72
-
73
- ## Comparing Multiple Commands
74
-
75
- Parse is fast and lightweight, making it suitable for batch processing of voice commands.
76
-
77
- ```ts
78
- const commands = [
79
- "deploy the app to production",
80
- "restart the database server",
81
- "show logs for the api gateway",
82
- ]
83
- for (const raw of commands) {
84
- const parsed = nlp.parse(raw)
85
- console.log(`"${raw}" => intent: ${parsed.intent}, target: ${parsed.target}`)
86
- }
87
- ```
88
-
89
- ## Summary
90
-
91
- This demo covered the three main methods of the `nlp` feature: `parse()` for quick structural extraction from voice commands, `analyze()` for detailed POS tagging and entity recognition, and `understand()` for a combined view of both. The feature is well suited for building voice command interpreters, chatbot intent classifiers, and text analysis pipelines.
@@ -1,78 +0,0 @@
1
- ---
2
- title: "Opener"
3
- tags: [opener, files, urls, apps, editor]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # opener
9
-
10
- Opens files, URLs, desktop applications, and code editors from scripts. HTTP/HTTPS URLs open in Chrome, files open with the system default handler, and VS Code / Cursor can be targeted directly.
11
-
12
- ## Overview
13
-
14
- The `opener` feature provides a simple interface for opening things on the host system. It delegates to platform-appropriate commands (`open` on macOS, `start` on Windows, direct invocation on Linux). Because every method triggers a side effect (launching an application or browser), all operational examples use skip blocks.
15
-
16
- ## Enabling the Feature
17
-
18
- ```ts
19
- const opener = container.feature('opener', { enable: true })
20
- console.log('Opener enabled:', opener.state.get('enabled'))
21
- ```
22
-
23
- ## Exploring the API
24
-
25
- ```ts
26
- const docs = container.features.describe('opener')
27
- console.log(docs)
28
- ```
29
-
30
- ## Opening a URL
31
-
32
- Open a URL in Google Chrome (the default browser for HTTP/HTTPS targets).
33
-
34
- ```ts skip
35
- await opener.open('https://github.com/soederpop/luca')
36
- console.log('URL opened in Chrome')
37
- ```
38
-
39
- Non-HTTP paths are opened with the platform default handler. For example, opening a `.png` file would launch Preview on macOS.
40
-
41
- ```ts skip
42
- await opener.open('/Users/jon/screenshots/diagram.png')
43
- ```
44
-
45
- ## Opening a Desktop App
46
-
47
- Launch any desktop application by name.
48
-
49
- ```ts skip
50
- await opener.app('Slack')
51
- console.log('Slack launched')
52
- ```
53
-
54
- ```ts skip
55
- await opener.app('Finder')
56
- ```
57
-
58
- On macOS this uses `open -a`. The application name should match what appears in `/Applications`.
59
-
60
- ## Opening in VS Code or Cursor
61
-
62
- Open a file or folder directly in VS Code or Cursor.
63
-
64
- ```ts skip
65
- await opener.code('/Users/jon/projects/my-app')
66
- console.log('VS Code opened')
67
- ```
68
-
69
- ```ts skip
70
- await opener.cursor('/Users/jon/projects/my-app/src/index.ts')
71
- console.log('Cursor opened')
72
- ```
73
-
74
- Both methods fall back to `open -a` on macOS if the CLI command is not found in PATH.
75
-
76
- ## Summary
77
-
78
- The `opener` feature provides `open`, `app`, `code`, and `cursor` methods for launching URLs, files, desktop applications, and code editors from Luca scripts. All operations produce side effects on the host system.
@@ -1,72 +0,0 @@
1
- ---
2
- title: "os"
3
- tags: [os, system, platform, core]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # os
9
-
10
- Operating system information including platform, architecture, CPU, and network details.
11
-
12
- ## Overview
13
-
14
- The `os` feature is a core feature, auto-enabled on every container. You can access it directly as a global or via `container.feature('os')`. It exposes system metadata through simple getters -- no method calls needed. Use it to detect the runtime environment, adapt behavior per platform, or gather machine info for diagnostics.
15
-
16
- ## Platform and Architecture
17
-
18
- The `platform` and `arch` getters tell you what operating system and CPU architecture the code is running on.
19
-
20
- ```ts
21
- console.log('Platform:', os.platform)
22
- console.log('Architecture:', os.arch)
23
- ```
24
-
25
- Platform returns values like `darwin`, `linux`, or `win32`. Architecture returns values like `arm64` or `x64`.
26
-
27
- ## CPU Information
28
-
29
- The `cpuCount` getter reports the number of logical CPU cores available.
30
-
31
- ```ts
32
- console.log('CPU cores:', os.cpuCount)
33
- ```
34
-
35
- Use this to size worker pools or decide how many parallel tasks to run.
36
-
37
- ## System Paths
38
-
39
- The `tmpdir` and `homedir` getters return commonly needed system directories.
40
-
41
- ```ts
42
- console.log('Temp directory:', os.tmpdir)
43
- console.log('Home directory:', os.homedir)
44
- ```
45
-
46
- These are the OS defaults -- `tmpdir` for throwaway files and `homedir` for the current user's home.
47
-
48
- ## Hostname
49
-
50
- The `hostname` getter returns the machine's network hostname.
51
-
52
- ```ts
53
- console.log('Hostname:', os.hostname)
54
- ```
55
-
56
- This can be useful for logging, multi-machine coordination, or display purposes.
57
-
58
- ## Network Interfaces
59
-
60
- The `macAddresses` getter returns MAC addresses for non-internal IPv4 network interfaces.
61
-
62
- ```ts
63
- const macs = os.macAddresses
64
- console.log('MAC addresses:', macs.length, 'found')
65
- macs.slice(0, 3).forEach(mac => console.log(' ', mac))
66
- ```
67
-
68
- MAC addresses are useful for machine fingerprinting or license management.
69
-
70
- ## Summary
71
-
72
- This demo covered querying the platform and architecture, checking CPU core count, retrieving system directory paths, reading the hostname, and listing network MAC addresses. The `os` feature gives scripts everything they need to adapt to and report on the runtime environment.
@@ -1,89 +0,0 @@
1
- ---
2
- title: "Package Finder"
3
- tags: [packageFinder, packages, dependencies, npm]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # packageFinder
9
-
10
- Scans your workspace's node_modules and builds a queryable index of every installed package. Find duplicates, inspect versions, and map dependency relationships.
11
-
12
- ## Overview
13
-
14
- The `packageFinder` feature is on-demand. After enabling and starting it, it recursively walks all node_modules directories, reads every package.json, and indexes the results. Use it for dependency auditing, duplicate detection, or understanding what is actually installed in your project.
15
-
16
- ## Starting the Finder
17
-
18
- Enable the feature and run the initial scan.
19
-
20
- ```ts
21
- const finder = container.feature('packageFinder')
22
- await finder.start()
23
- console.log('Scan complete:', finder.isStarted)
24
- console.log('Unique packages:', finder.packageNames.length)
25
- console.log('Total manifests:', finder.manifests.length)
26
- ```
27
-
28
- The difference between unique package names and total manifests reveals how many packages exist in multiple copies (different versions in different locations).
29
-
30
- ## Listing Packages
31
-
32
- Browse the discovered package names.
33
-
34
- ```ts
35
- const names = finder.packageNames
36
- console.log('First 10 packages:')
37
- names.slice(0, 10).forEach(n => console.log(' ', n))
38
- ```
39
-
40
- Package names include both scoped and unscoped packages from every node_modules tree in the workspace.
41
-
42
- ## Finding a Package by Name
43
-
44
- Look up a specific package to see its version and location.
45
-
46
- ```ts
47
- const zod = finder.findByName('zod')
48
- if (zod) {
49
- console.log('Found:', zod.name)
50
- console.log('Version:', zod.version)
51
- console.log('Description:', zod.description)
52
- }
53
- ```
54
-
55
- If multiple versions exist, `findByName` returns the first match. Use `filter()` to find all instances.
56
-
57
- ## Scoped Packages
58
-
59
- The finder tracks which npm scopes are present in your dependencies.
60
-
61
- ```ts
62
- const scopes = finder.scopes
63
- console.log('Scopes found:', scopes.length)
64
- scopes.slice(0, 8).forEach(s => {
65
- const count = finder.packageNames.filter(n => n.startsWith(s)).length
66
- console.log(` ${s}: ${count} packages`)
67
- })
68
- ```
69
-
70
- This is useful for auditing which organizations and ecosystems your project depends on.
71
-
72
- ## Detecting Duplicates
73
-
74
- Packages that appear in multiple locations (often at different versions) show up in the duplicates list.
75
-
76
- ```ts
77
- const dupes = finder.duplicates
78
- console.log('Duplicate packages:', dupes.length)
79
- dupes.slice(0, 5).forEach(name => {
80
- const count = finder.counts[name]
81
- console.log(` ${name}: ${count} copies`)
82
- })
83
- ```
84
-
85
- Duplicates increase install size and can cause subtle bugs when multiple versions of the same library coexist.
86
-
87
- ## Summary
88
-
89
- This demo covered scanning the workspace for packages, listing and looking up packages, inspecting scopes, and detecting duplicates. The `packageFinder` feature gives you a complete inventory of your installed dependencies for auditing and analysis.
@@ -1,91 +0,0 @@
1
- ---
2
- title: "PostgreSQL"
3
- tags: [postgres, database, sql, storage]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # postgres
9
-
10
- PostgreSQL feature for safe SQL execution through Bun's native SQL client. Supports parameterized queries, tagged-template literals, and write operations.
11
-
12
- ## Overview
13
-
14
- Use the `postgres` feature when you need to interact with a PostgreSQL database. It provides three query interfaces: parameterized `query()` for reads, `execute()` for writes, and the `sql` tagged template for injection-safe inline SQL.
15
-
16
- Requires a running PostgreSQL instance and a connection URL.
17
-
18
- ## Enabling the Feature
19
-
20
- ```ts
21
- const pg = container.feature('postgres', {
22
- url: 'postgres://user:pass@localhost:5432/mydb'
23
- })
24
- console.log('Postgres feature created')
25
- console.log('Connection URL configured:', !!pg.state.url)
26
- ```
27
-
28
- Pass your connection URL via the `url` option. In production, read from an environment variable.
29
-
30
- ## API Documentation
31
-
32
- ```ts
33
- const info = await container.features.describe('postgres')
34
- console.log(info)
35
- ```
36
-
37
- ## Parameterized Queries
38
-
39
- Use `query()` for SELECT statements with `$N` placeholders to prevent SQL injection.
40
-
41
- ```ts skip
42
- const users = await pg.query(
43
- 'SELECT id, email FROM users WHERE active = $1 LIMIT $2',
44
- [true, 10]
45
- )
46
- console.log(`Found ${users.length} active users`)
47
- users.forEach(u => console.log(` ${u.id}: ${u.email}`))
48
- ```
49
-
50
- With a running database, this would return an array of row objects matching the query. The `query` event fires on each execution.
51
-
52
- ## Tagged Template SQL
53
-
54
- The `sql` tagged template automatically converts interpolated values into bound parameters.
55
-
56
- ```ts skip
57
- const email = 'hello@example.com'
58
- const rows = await pg.sql`
59
- SELECT id, name FROM users WHERE email = ${email}
60
- `
61
- console.log('Found:', rows)
62
- ```
63
-
64
- This is the most ergonomic way to write queries. Each interpolated value becomes a `$N` parameter automatically, preventing SQL injection without manual placeholder numbering.
65
-
66
- ## Write Operations
67
-
68
- Use `execute()` for INSERT, UPDATE, and DELETE statements that return affected row counts.
69
-
70
- ```ts skip
71
- const { rowCount } = await pg.execute(
72
- 'UPDATE users SET active = $1 WHERE last_login < $2',
73
- [false, '2024-01-01']
74
- )
75
- console.log(`Deactivated ${rowCount} users`)
76
- ```
77
-
78
- The `execute` event fires with the row count after each write operation.
79
-
80
- ## Closing the Connection
81
-
82
- ```ts skip
83
- await pg.close()
84
- console.log('Connection closed:', !pg.state.connected)
85
- ```
86
-
87
- Always close the connection when done. The `closed` event fires after teardown.
88
-
89
- ## Summary
90
-
91
- The `postgres` feature wraps Bun's native SQL client with three query methods: `query()` for parameterized reads, `execute()` for writes, and the `sql` tagged template for ergonomic injection-safe queries. Events fire for each operation. Key methods: `query()`, `execute()`, `sql`, `close()`.
@@ -1,81 +0,0 @@
1
- ---
2
- title: "proc"
3
- tags: [proc, process, shell, core]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # proc
9
-
10
- Process execution utilities for running shell commands and capturing their output.
11
-
12
- ## Overview
13
-
14
- The `proc` feature is a core feature, auto-enabled on every container. You can access it directly as a global or via `container.feature('proc')`. It provides synchronous and asynchronous methods for executing shell commands. Use `exec()` for quick synchronous calls and `execAndCapture()` when you need structured output with exit codes.
15
-
16
- ## Simple Command Execution
17
-
18
- Use `exec()` to run a command synchronously and get its stdout as a string.
19
-
20
- ```ts
21
- const result = proc.exec('echo hello from luca')
22
- console.log('Output:', result.trim())
23
- ```
24
-
25
- The output is returned directly as a string, with no wrapper object.
26
-
27
- ## Listing Files
28
-
29
- Commands that produce multi-line output work naturally. Each line comes through as part of the string.
30
-
31
- ```ts
32
- const listing = proc.exec('ls src')
33
- const entries = listing.trim().split('\n')
34
- console.log('Entries in src/:', entries.length)
35
- entries.slice(0, 5).forEach(e => console.log(' ', e))
36
- ```
37
-
38
- You can split and process the output like any other string.
39
-
40
- ## Working Directory Option
41
-
42
- Pass a `cwd` option to run a command in a different directory without changing the container's working directory.
43
-
44
- ```ts
45
- const rootFiles = proc.exec('ls -1', { cwd: '.' })
46
- console.log('Files in project root:')
47
- rootFiles.trim().split('\n').slice(0, 5).forEach(f => console.log(' ', f))
48
- ```
49
-
50
- This is useful when you need to operate on files in a subdirectory or sibling project.
51
-
52
- ## Getting System Info
53
-
54
- Shell commands work for gathering system information that might not be available through other features.
55
-
56
- ```ts
57
- const date = proc.exec('date')
58
- console.log('Current date:', date.trim())
59
-
60
- const whoami = proc.exec('whoami')
61
- console.log('Current user:', whoami.trim())
62
- ```
63
-
64
- Any command available on the system PATH can be called through `exec()`.
65
-
66
- ## Async Execution with Capture
67
-
68
- Use `execAndCapture()` for async execution with structured output including exit code and stderr.
69
-
70
- ```ts
71
- const result = await proc.execAndCapture('ls src')
72
- console.log('Exit code:', result.exitCode)
73
- console.log('Stdout lines:', result.stdout.trim().split('\n').length)
74
- console.log('Stderr:', result.stderr || '(empty)')
75
- ```
76
-
77
- The returned object gives you `stdout`, `stderr`, `exitCode`, and `pid` for full control over the result.
78
-
79
- ## Summary
80
-
81
- This demo covered synchronous command execution, processing multi-line output, running commands in different directories, gathering system info, and async execution with structured results. The `proc` feature is the escape hatch for anything the other features do not cover directly.
@@ -1,79 +0,0 @@
1
- ---
2
- title: "Process Manager"
3
- tags: [processManager, processes, spawn, lifecycle]
4
- lastTested: null
5
- lastTestPassed: null
6
- ---
7
-
8
- # processManager
9
-
10
- Manage long-running child processes with tracking, events, and automatic cleanup.
11
-
12
- ## Overview
13
-
14
- The `processManager` feature is an on-demand feature for spawning and supervising child processes. Unlike `proc.spawn` which blocks until a process exits, processManager returns a `SpawnHandler` immediately -- a handle object with its own state, events, and lifecycle methods. The feature tracks all spawned processes and can kill them all on parent exit. Use it when you need to orchestrate multiple background services, dev servers, or worker processes.
15
-
16
- ## Enabling the Feature
17
-
18
- Enable the processManager with auto-cleanup so tracked processes are killed when the parent exits.
19
-
20
- ```ts
21
- const pm = container.feature('processManager', { enable: true, autoCleanup: true })
22
- console.log('ProcessManager enabled:', pm.state.enabled)
23
- console.log('Total spawned so far:', pm.state.totalSpawned)
24
- ```
25
-
26
- ## Spawning a Process
27
-
28
- Spawn a short-lived process and capture its output. The `spawn` method returns a `SpawnHandler` immediately.
29
-
30
- ```ts
31
- const handle = pm.spawn('echo', ['hello from process manager'], { tag: 'greeter' })
32
- console.log('Spawned process tag:', 'greeter')
33
- console.log('Handle has kill method:', typeof handle.kill === 'function')
34
- ```
35
-
36
- The handle provides methods like `kill()` and events like `stdout`, `stderr`, `exited`, and `crashed`.
37
-
38
- ## Listing Tracked Processes
39
-
40
- The processManager keeps track of every process it has spawned, whether running or finished.
41
-
42
- ```ts
43
- const all = pm.list()
44
- console.log('Tracked processes:', all.length)
45
- console.log('Total spawned:', pm.state.totalSpawned)
46
- ```
47
-
48
- You can also look up a specific process by its tag.
49
-
50
- ```ts
51
- const found = pm.getByTag('greeter')
52
- console.log('Found by tag:', found ? 'yes' : 'no')
53
- ```
54
-
55
- ## Spawning and Killing
56
-
57
- You can spawn a longer process and then kill it. Here we spawn `sleep` and immediately terminate it.
58
-
59
- ```ts
60
- const sleeper = pm.spawn('sleep', ['10'], { tag: 'sleeper' })
61
- console.log('Sleeper spawned')
62
- sleeper.kill()
63
- console.log('Sleeper killed')
64
- console.log('Total spawned now:', pm.state.totalSpawned)
65
- ```
66
-
67
- ## Cleaning Up
68
-
69
- The `killAll` method terminates every tracked process, and `stop` does a full teardown including removing exit handlers.
70
-
71
- ```ts
72
- pm.killAll()
73
- const remaining = pm.list().filter(h => h.state?.status === 'running')
74
- console.log('Running after killAll:', remaining.length)
75
- ```
76
-
77
- ## Summary
78
-
79
- This demo covered the `processManager` feature: spawning processes that return handles immediately, tracking them by ID or tag, listing all tracked processes, and killing them individually or all at once. It is the right tool for orchestrating background services, dev servers, and any scenario where you need non-blocking process management with lifecycle events.