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,5 +1,4 @@
1
1
  // Auto-generated bootstrap content
2
- // Generated at: 2026-04-10T05:00:54.788Z
3
2
  // Source: docs/bootstrap/*.md, docs/bootstrap/templates/*, docs/examples/*.md, docs/tutorials/*.md
4
3
  //
5
4
  // Do not edit manually. Run: luca build-bootstrap
@@ -7,11 +6,11 @@
7
6
  export const bootstrapFiles: Record<string, string> = {
8
7
  "SKILL": `---
9
8
  name: Using the luca framework
10
- description: The @soederpop/luca framework, when you see a project with docs/ commands/ features/ luca.cli.ts endpoints/ folders, or @soederpop/luca is in the package.json, or the user is asking you to develop a new Luca feature, use this skill to learn about the APIs and how to learn the framework at runtime. The luca cli bundles all of the documentation in a searchable, progressively learnable interface designed for students and AI assistants alike
9
+ description: The luca framework, when you see a project with docs/ commands/ features/ luca.cli.ts endpoints/ folders, or luca is in the package.json, or the user is asking you to develop a new Luca feature, use this skill to learn about the APIs and how to learn the framework at runtime. The luca cli bundles all of the documentation in a searchable, progressively learnable interface designed for students and AI assistants alike
11
10
  ---
12
11
  # Luca: Learning the Container
13
12
 
14
- The Luca framework \`@soederpop/luca\` ships a \`luca\` binary — a bun-based CLI for a dependency injection container. This project is based on it if this skill is present. The container auto-discovers modules in \`commands/\`, \`clients/\`, \`servers/\`, \`features/\`, and \`endpoints/\` folders.
13
+ The Luca framework \`luca\` ships a \`luca\` binary — a bun-based CLI for a dependency injection container. This project is based on it if this skill is present. The container auto-discovers modules in \`commands/\`, \`clients/\`, \`servers/\`, \`features/\`, and \`endpoints/\` folders.
15
14
 
16
15
  The \`luca\` cli loads typescript modules in through its VM which injects a \`container\` global that is a singleton object from which you can learn about, and access all different kinds of utils and Helpers (features, clients, servers, commands, and compositions thereof)
17
16
 
@@ -551,11 +550,11 @@ Content goes here.
551
550
  - \`luca describe contentDb\` — runtime docs for the contentDb feature
552
551
  `,
553
552
  "example-feature": `import { z } from 'zod'
554
- import { FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
555
- import { Feature } from '@soederpop/luca'
556
- import type { ContainerContext } from '@soederpop/luca'
553
+ import { FeatureStateSchema, FeatureOptionsSchema } from 'luca'
554
+ import { Feature } from 'luca'
555
+ import type { ContainerContext } from 'luca'
557
556
 
558
- declare module '@soederpop/luca' {
557
+ declare module 'luca' {
559
558
  interface AvailableFeatures {
560
559
  example: typeof Example
561
560
  }
@@ -612,7 +611,7 @@ export default Example
612
611
  * For example: \`luca about commands\` → options._[1] === 'commands'
613
612
  */
614
613
  import { z } from 'zod'
615
- import type { ContainerContext } from '@soederpop/luca'
614
+ import type { ContainerContext } from 'luca'
616
615
 
617
616
  export const description = 'Display project information and discovered helpers'
618
617
 
@@ -2286,7 +2285,7 @@ Here's the structure of the built-in \`fileTools\` feature (simplified for clari
2286
2285
 
2287
2286
  \`\`\`ts
2288
2287
  import { z } from 'zod'
2289
- import { Feature } from '@soederpop/luca/feature'
2288
+ import { Feature } from 'luca/feature'
2290
2289
 
2291
2290
  export class FileTools extends Feature {
2292
2291
  static { Feature.register(this, 'fileTools') }
@@ -5314,7 +5313,7 @@ A feature has:
5314
5313
 
5315
5314
  \`\`\`typescript
5316
5315
  import { z } from 'zod'
5317
- import { Feature, features, FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
5316
+ import { Feature, features, FeatureStateSchema, FeatureOptionsSchema } from 'luca'
5318
5317
 
5319
5318
  // Define state schema by extending the base FeatureStateSchema
5320
5319
  export const CounterStateSchema = FeatureStateSchema.extend({
@@ -5379,7 +5378,7 @@ export class Counter extends Feature<CounterState, CounterOptions> {
5379
5378
  features.register('counter', Counter)
5380
5379
 
5381
5380
  // Module augmentation for type safety
5382
- declare module '@soederpop/luca' {
5381
+ declare module 'luca' {
5383
5382
  interface AvailableFeatures {
5384
5383
  counter: typeof Counter
5385
5384
  }
@@ -5671,7 +5670,7 @@ tags: [setup, quickstart, project, init]
5671
5670
  \`\`\`bash
5672
5671
  mkdir my-app && cd my-app
5673
5672
  bun init -y
5674
- bun add @soederpop/luca
5673
+ bun add luca
5675
5674
  \`\`\`
5676
5675
 
5677
5676
  ## Project Structure
@@ -5705,7 +5704,7 @@ Everything in Luca revolves around the **container**. It is a per-process single
5705
5704
  In scripts, you create one directly:
5706
5705
 
5707
5706
  \`\`\`typescript
5708
- import container from '@soederpop/luca/node'
5707
+ import container from 'luca/node'
5709
5708
 
5710
5709
  // Now you have access to all features
5711
5710
  const fs = container.fs // File system operations
@@ -5791,7 +5790,7 @@ Define schemas for your handlers. Parameters are validated automatically:
5791
5790
  \`\`\`typescript
5792
5791
  // endpoints/users.ts
5793
5792
  import { z } from 'zod'
5794
- import type { EndpointContext } from '@soederpop/luca'
5793
+ import type { EndpointContext } from 'luca'
5795
5794
 
5796
5795
  export const path = '/api/users'
5797
5796
  export const description = 'User management'
@@ -5828,7 +5827,7 @@ Use \`:param\` in the path or bracket-based file naming:
5828
5827
  \`\`\`typescript
5829
5828
  // endpoints/users/[id].ts
5830
5829
  import { z } from 'zod'
5831
- import type { EndpointContext } from '@soederpop/luca'
5830
+ import type { EndpointContext } from 'luca'
5832
5831
 
5833
5832
  export const path = '/api/users/:id'
5834
5833
  export const description = 'Get, update, or delete a specific user'
@@ -5923,7 +5922,7 @@ The server automatically:
5923
5922
  You can also set up the server in a script:
5924
5923
 
5925
5924
  \`\`\`typescript
5926
- import container from '@soederpop/luca'
5925
+ import container from 'luca'
5927
5926
 
5928
5927
  const server = container.server('express', { port: 3000, cors: true })
5929
5928
 
@@ -6267,8 +6266,8 @@ await python.stopSession()
6267
6266
  \`\`\`ts skip
6268
6267
  // commands/analyze.ts
6269
6268
  import { z } from 'zod'
6270
- import type { ContainerContext } from '@soederpop/luca'
6271
- import { CommandOptionsSchema } from '@soederpop/luca/schemas'
6269
+ import type { ContainerContext } from 'luca'
6270
+ import { CommandOptionsSchema } from 'luca/schemas'
6272
6271
 
6273
6272
  export const positionals = ['target']
6274
6273
  export const argsSchema = CommandOptionsSchema.extend({
@@ -6376,7 +6375,7 @@ Luca's \`semanticSearch\` feature provides BM25 keyword search, vector similarit
6376
6375
  The fastest way to use semantic search is through the \`contentDb\` feature, which handles indexing and querying automatically:
6377
6376
 
6378
6377
  \`\`\`typescript
6379
- import container from '@soederpop/luca'
6378
+ import container from 'luca'
6380
6379
 
6381
6380
  const db = container.feature('contentDb', { rootPath: './docs' })
6382
6381
  await db.load()
@@ -6412,8 +6411,8 @@ await db.hybridSearch('authentication flow', { limit: 5 })
6412
6411
  For more control, use the \`semanticSearch\` feature directly:
6413
6412
 
6414
6413
  \`\`\`typescript
6415
- import container from '@soederpop/luca'
6416
- import { SemanticSearch } from '@soederpop/luca/node/features/semantic-search'
6414
+ import container from 'luca'
6415
+ import { SemanticSearch } from 'luca/node/features/semantic-search'
6417
6416
 
6418
6417
  // Attach the feature to the container
6419
6418
  SemanticSearch.attach(container)
@@ -7233,7 +7232,7 @@ Commands are CLI actions that the \`luca\` command discovers and runs. They are
7233
7232
  \`\`\`typescript
7234
7233
  // commands/seed.ts
7235
7234
  import { z } from 'zod'
7236
- import type { ContainerContext } from '@soederpop/luca'
7235
+ import type { ContainerContext } from 'luca'
7237
7236
 
7238
7237
  export const description = 'Seed the database with sample data'
7239
7238
 
@@ -7284,7 +7283,7 @@ The simplest pattern — export a default async function. The function becomes t
7284
7283
  \`\`\`typescript
7285
7284
  // commands/greet.ts
7286
7285
  import { z } from 'zod'
7287
- import type { ContainerContext } from '@soederpop/luca'
7286
+ import type { ContainerContext } from 'luca'
7288
7287
 
7289
7288
  export const description = 'Greet someone'
7290
7289
  export const argsSchema = z.object({
@@ -7303,7 +7302,7 @@ Useful when you want to co-locate all exports in one object:
7303
7302
  \`\`\`typescript
7304
7303
  // commands/deploy.ts
7305
7304
  import { z } from 'zod'
7306
- import type { ContainerContext } from '@soederpop/luca'
7305
+ import type { ContainerContext } from 'luca'
7307
7306
 
7308
7307
  export const argsSchema = z.object({
7309
7308
  env: z.enum(['staging', 'production']).describe('Target environment'),
@@ -7486,7 +7485,7 @@ Luca's type system ensures that as you add features, clients, servers, and comma
7486
7485
  When you register a new helper, you augment the corresponding interface so TypeScript knows about it:
7487
7486
 
7488
7487
  \`\`\`typescript
7489
- import { Feature, features, FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
7488
+ import { Feature, features, FeatureStateSchema, FeatureOptionsSchema } from 'luca'
7490
7489
  import { z } from 'zod'
7491
7490
 
7492
7491
  // 1. Define your feature
@@ -7498,7 +7497,7 @@ export class MyCache extends Feature<MyCacheState, MyCacheOptions> {
7498
7497
  features.register('myCache', MyCache)
7499
7498
 
7500
7499
  // 3. Augment the interface
7501
- declare module '@soederpop/luca' {
7500
+ declare module 'luca' {
7502
7501
  interface AvailableFeatures {
7503
7502
  myCache: typeof MyCache
7504
7503
  }
@@ -7574,28 +7573,28 @@ The pattern is the same for features, clients, servers, and commands:
7574
7573
 
7575
7574
  \`\`\`typescript
7576
7575
  // Features
7577
- declare module '@soederpop/luca' {
7576
+ declare module 'luca' {
7578
7577
  interface AvailableFeatures {
7579
7578
  myFeature: typeof MyFeature
7580
7579
  }
7581
7580
  }
7582
7581
 
7583
7582
  // Clients
7584
- declare module '@soederpop/luca' {
7583
+ declare module 'luca' {
7585
7584
  interface AvailableClients {
7586
7585
  myClient: typeof MyClient
7587
7586
  }
7588
7587
  }
7589
7588
 
7590
7589
  // Servers
7591
- declare module '@soederpop/luca' {
7590
+ declare module 'luca' {
7592
7591
  interface AvailableServers {
7593
7592
  myServer: typeof MyServer
7594
7593
  }
7595
7594
  }
7596
7595
 
7597
7596
  // Commands
7598
- declare module '@soederpop/luca' {
7597
+ declare module 'luca' {
7599
7598
  interface AvailableCommands {
7600
7599
  myCommand: typeof MyCommand
7601
7600
  }
@@ -7631,7 +7630,7 @@ export class Analytics extends Feature<AnalyticsState, AnalyticsOptions> { ... }
7631
7630
 
7632
7631
  // 2. You register + augment
7633
7632
  features.register('analytics', Analytics)
7634
- declare module '@soederpop/luca' {
7633
+ declare module 'luca' {
7635
7634
  interface AvailableFeatures { analytics: typeof Analytics }
7636
7635
  }
7637
7636
 
@@ -7664,14 +7663,14 @@ The container is the heart of every Luca application. It is a per-process single
7664
7663
  ## Getting the Container
7665
7664
 
7666
7665
  \`\`\`typescript
7667
- import container from '@soederpop/luca'
7666
+ import container from 'luca'
7668
7667
  \`\`\`
7669
7668
 
7670
- The import resolves automatically based on environment -- \`@soederpop/luca\` gives you a \`NodeContainer\` on the server and a \`WebContainer\` in browser builds. You can also be explicit:
7669
+ The import resolves automatically based on environment -- \`luca\` gives you a \`NodeContainer\` on the server and a \`WebContainer\` in browser builds. You can also be explicit:
7671
7670
 
7672
7671
  \`\`\`typescript
7673
- import container from '@soederpop/luca/node' // Always NodeContainer
7674
- import container from '@soederpop/luca/web' // Always WebContainer
7672
+ import container from 'luca/node' // Always NodeContainer
7673
+ import container from 'luca/web' // Always WebContainer
7675
7674
  \`\`\`
7676
7675
 
7677
7676
  The NodeContainer comes pre-loaded with registries for features, clients, servers, commands, and endpoints. Core features like \`fs\`, \`git\`, \`proc\`, \`os\`, \`networking\`, \`ui\`, and \`vm\` are auto-enabled.
@@ -7875,7 +7874,7 @@ You can use Luca in any browser environment — no bundler, no build step. Impor
7875
7874
 
7876
7875
  \`\`\`html
7877
7876
  <script type="module">
7878
- import "https://esm.sh/@soederpop/luca/web"
7877
+ import "https://esm.sh/luca/web"
7879
7878
 
7880
7879
  const container = window.luca
7881
7880
  console.log(container.uuid) // unique container ID
@@ -7889,7 +7888,7 @@ If you prefer a named import:
7889
7888
 
7890
7889
  \`\`\`html
7891
7890
  <script type="module">
7892
- import container from "https://esm.sh/@soederpop/luca/web"
7891
+ import container from "https://esm.sh/luca/web"
7893
7892
  // container === window.luca
7894
7893
  </script>
7895
7894
  \`\`\`
@@ -7900,7 +7899,7 @@ Once you have the container, features work exactly like they do on the server
7900
7899
 
7901
7900
  \`\`\`html
7902
7901
  <script type="module">
7903
- import "https://esm.sh/@soederpop/luca/web"
7902
+ import "https://esm.sh/luca/web"
7904
7903
  const { luca: container } = window
7905
7904
 
7906
7905
  // Load a script from a CDN
@@ -7927,7 +7926,7 @@ The container is a state machine and event bus. This works identically to the se
7927
7926
 
7928
7927
  \`\`\`html
7929
7928
  <script type="module">
7930
- import container from "https://esm.sh/@soederpop/luca/web"
7929
+ import container from "https://esm.sh/luca/web"
7931
7930
 
7932
7931
  // Listen for state changes
7933
7932
  container.on('stateChanged', ({ changes }) => {
@@ -7948,7 +7947,7 @@ Make HTTP requests with the built-in REST client. Methods return parsed JSON dir
7948
7947
 
7949
7948
  \`\`\`html
7950
7949
  <script type="module">
7951
- import container from "https://esm.sh/@soederpop/luca/web"
7950
+ import container from "https://esm.sh/luca/web"
7952
7951
 
7953
7952
  const api = container.client('rest', { baseURL: 'https://jsonplaceholder.typicode.com' })
7954
7953
  const posts = await api.get('/posts')
@@ -7962,7 +7961,7 @@ Connect to a WebSocket server:
7962
7961
 
7963
7962
  \`\`\`html
7964
7963
  <script type="module">
7965
- import container from "https://esm.sh/@soederpop/luca/web"
7964
+ import container from "https://esm.sh/luca/web"
7966
7965
 
7967
7966
  const socket = container.client('socket', { url: 'ws://localhost:3000' })
7968
7967
  socket.on('message', (data) => console.log('Received:', data))
@@ -7976,7 +7975,7 @@ The container exposes the \`Feature\` class directly, so you can create your own
7976
7975
 
7977
7976
  \`\`\`html
7978
7977
  <script type="module">
7979
- import container from "https://esm.sh/@soederpop/luca/web"
7978
+ import container from "https://esm.sh/luca/web"
7980
7979
 
7981
7980
  const { Feature } = container
7982
7981
 
@@ -8008,7 +8007,7 @@ The container's built-in utilities are available in the browser too.
8008
8007
 
8009
8008
  \`\`\`html
8010
8009
  <script type="module">
8011
- import container from "https://esm.sh/@soederpop/luca/web"
8010
+ import container from "https://esm.sh/luca/web"
8012
8011
 
8013
8012
  // UUID generation
8014
8013
  const id = container.utils.uuid()
@@ -8037,7 +8036,7 @@ The container's built-in utilities are available in the browser too.
8037
8036
  <pre id="output"></pre>
8038
8037
 
8039
8038
  <script type="module">
8040
- import container from "https://esm.sh/@soederpop/luca/web"
8039
+ import container from "https://esm.sh/luca/web"
8041
8040
 
8042
8041
  const log = (msg) => {
8043
8042
  document.getElementById('output').textContent += msg + '\\n'
@@ -8082,7 +8081,7 @@ Save this as an HTML file, open it in a browser, and everything works — no npm
8082
8081
 
8083
8082
  ## Gotchas
8084
8083
 
8085
- - **esm.sh caches aggressively.** Pin a version if you need stability: \`https://esm.sh/@soederpop/luca@0.0.29/web\`
8084
+ - **esm.sh caches aggressively.** Pin a version if you need stability: \`https://esm.sh/luca@0.0.29/web\`
8086
8085
  - **Browser features only.** The web container doesn't include node-specific features like \`fs\`, \`git\`, \`proc\`, or \`docker\`. If you need server features, run Luca on the server and connect via the REST or WebSocket clients.
8087
8086
  - **\`window.luca\` is the singleton.** Don't call \`createContainer()\` — it just warns and returns the same instance. If you need isolation, use \`container.subcontainer()\`.
8088
8087
  - **CORS applies.** REST client requests from the browser are subject to browser CORS rules. Your API must send the right headers.
@@ -8128,7 +8127,7 @@ my-api/
8128
8127
  "seed": "luca seed"
8129
8128
  },
8130
8129
  "dependencies": {
8131
- "@soederpop/luca": "latest",
8130
+ "luca": "latest",
8132
8131
  "zod": "^3.24.0"
8133
8132
  }
8134
8133
  }
@@ -8188,7 +8187,7 @@ The endpoint creates the assistant and forwards questions:
8188
8187
  \`\`\`typescript
8189
8188
  // endpoints/ask.ts
8190
8189
  import { z } from 'zod'
8191
- import type { EndpointContext } from '@soederpop/luca'
8190
+ import type { EndpointContext } from 'luca'
8192
8191
 
8193
8192
  export const path = '/api/ask'
8194
8193
  export const postSchema = z.object({
@@ -8232,7 +8231,7 @@ docs-site/
8232
8231
  \`\`\`typescript
8233
8232
  // endpoints/docs.ts
8234
8233
  import { z } from 'zod'
8235
- import type { EndpointContext } from '@soederpop/luca'
8234
+ import type { EndpointContext } from 'luca'
8236
8235
 
8237
8236
  export const path = '/api/docs'
8238
8237
  export const getSchema = z.object({
@@ -8500,7 +8499,7 @@ Contentbase lets you treat folders of markdown files as queryable database colle
8500
8499
  ## Setup
8501
8500
 
8502
8501
  \`\`\`typescript
8503
- import container from '@soederpop/luca'
8502
+ import container from 'luca'
8504
8503
 
8505
8504
  const db = container.feature('contentDb', { rootPath: './content' })
8506
8505
  const { defineModel, section, hasMany, belongsTo } = db.library
@@ -8644,7 +8643,7 @@ console.log('Hello!')
8644
8643
  ## Full Example: Blog Engine
8645
8644
 
8646
8645
  \`\`\`typescript
8647
- import container from '@soederpop/luca'
8646
+ import container from 'luca'
8648
8647
  import { z } from 'zod'
8649
8648
 
8650
8649
  const db = container.feature('contentDb', { rootPath: './blog' })
@@ -8825,7 +8824,7 @@ researchInternalDocs tool first to find accurate information before answering.
8825
8824
  ### In a Script
8826
8825
 
8827
8826
  \`\`\`typescript
8828
- import container from '@soederpop/luca'
8827
+ import container from 'luca'
8829
8828
 
8830
8829
  const assistant = container.feature('assistant', {
8831
8830
  folder: 'assistants/my-assistant',
@@ -8851,7 +8850,7 @@ Expose the assistant as an API:
8851
8850
  \`\`\`typescript
8852
8851
  // endpoints/ask.ts
8853
8852
  import { z } from 'zod'
8854
- import type { EndpointContext } from '@soederpop/luca'
8853
+ import type { EndpointContext } from 'luca'
8855
8854
 
8856
8855
  export const path = '/api/ask'
8857
8856
  export const description = 'Ask the support assistant a question'
@@ -8913,7 +8912,7 @@ luca run scripts/hello.ts
8913
8912
 
8914
8913
  \`\`\`typescript
8915
8914
  // scripts/hello.ts
8916
- import container from '@soederpop/luca'
8915
+ import container from 'luca'
8917
8916
 
8918
8917
  console.log('Available features:', container.features.available)
8919
8918
  console.log('Git branch:', container.git.branch)
@@ -9015,7 +9014,7 @@ console.log(\`Found \${files.length} files in src/\`)
9015
9014
 
9016
9015
  \`\`\`typescript
9017
9016
  // scripts/process-images.ts
9018
- import container from '@soederpop/luca'
9017
+ import container from 'luca'
9019
9018
 
9020
9019
  const { fs, proc } = container
9021
9020
 
@@ -9034,7 +9033,7 @@ console.log('Done.')
9034
9033
 
9035
9034
  \`\`\`typescript
9036
9035
  // scripts/migrate-data.ts
9037
- import container from '@soederpop/luca'
9036
+ import container from 'luca'
9038
9037
 
9039
9038
  const { fs } = container
9040
9039
 
@@ -9062,7 +9061,7 @@ console.log('Migration complete.')
9062
9061
 
9063
9062
  \`\`\`typescript
9064
9063
  // scripts/weekly-report.ts
9065
- import container from '@soederpop/luca'
9064
+ import container from 'luca'
9066
9065
 
9067
9066
  const { git, fs } = container
9068
9067
 
@@ -9211,7 +9210,7 @@ container.clients.describe('rest')
9211
9210
  \`\`\`typescript
9212
9211
  // endpoints/proxy.ts
9213
9212
  import { z } from 'zod'
9214
- import type { EndpointContext } from '@soederpop/luca'
9213
+ import type { EndpointContext } from 'luca'
9215
9214
 
9216
9215
  export const path = '/api/external-data'
9217
9216
 
package/src/browser.ts CHANGED
@@ -18,7 +18,7 @@ export default container
18
18
  export function createContainer() {
19
19
  console.warn(
20
20
  '[luca] createContainer() is unnecessary — import the default export instead.\n' +
21
- ' `import container from "@soederpop/luca"`\n' +
21
+ ' `import container from "luca"`\n' +
22
22
  ' For a separate instance, use container.subcontainer().'
23
23
  )
24
24
  return container
@@ -1,4 +1,4 @@
1
1
  // Generated at compile time — do not edit manually
2
- export const BUILD_SHA = '066d9cb'
2
+ export const BUILD_SHA = '6a44967'
3
3
  export const BUILD_BRANCH = 'main'
4
- export const BUILD_DATE = '2026-04-10T05:00:55Z'
4
+ export const BUILD_DATE = '2026-05-09T04:02:58Z'
package/src/cli/cli.ts CHANGED
@@ -7,12 +7,12 @@ import { BUILD_SHA, BUILD_BRANCH, BUILD_DATE } from './build-info'
7
7
  const args = process.argv.slice(2)
8
8
  if (args.includes('--version') || args.includes('-v')) {
9
9
  console.log(`luca v${pkg.version} (${BUILD_BRANCH}@${BUILD_SHA}) built ${BUILD_DATE}`)
10
- console.log(` npm: https://www.npmjs.com/package/@soederpop/luca`)
10
+ console.log(` npm: https://www.npmjs.com/package/luca`)
11
11
  console.log(` git: https://github.com/soederpop/luca`)
12
12
  process.exit(0)
13
13
  }
14
14
 
15
- import container from '@soederpop/luca/agi'
15
+ import container from 'luca/agi'
16
16
  import '@/commands/index.js'
17
17
  import { homedir } from 'os'
18
18
  import { join } from 'path'
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  Client,
3
3
  type ClientOptions,
4
- } from "@soederpop/luca/client";
4
+ } from "luca/client";
5
5
  import { RestClient } from "../rest";
6
- import { type ContainerContext } from "@soederpop/luca/container";
6
+ import { type ContainerContext } from "luca/container";
7
7
  import { isEmpty, maxBy, omitBy } from "lodash-es";
8
- import { NodeContainer } from "@soederpop/luca/node/container";
8
+ import { NodeContainer } from "luca/node/container";
9
9
  import { z } from 'zod'
10
- import { ClientStateSchema } from '@soederpop/luca/schemas/base.js'
10
+ import { ClientStateSchema } from 'luca/schemas/base.js'
11
11
 
12
- declare module "@soederpop/luca/client" {
12
+ declare module "luca/client" {
13
13
  interface AvailableClients {
14
14
  civitai: typeof CivitaiClient;
15
15
  }
@@ -2,13 +2,13 @@ import {
2
2
  type ClientOptions,
3
3
  type ClientsInterface,
4
4
  clients,
5
- } from "@soederpop/luca/client";
5
+ } from "luca/client";
6
6
  import { RestClient } from "./rest";
7
- import { type ContainerContext } from "@soederpop/luca/container";
7
+ import { type ContainerContext } from "luca/container";
8
8
  import { z } from 'zod'
9
- import { ClientStateSchema } from '@soederpop/luca/schemas/base.js'
9
+ import { ClientStateSchema } from 'luca/schemas/base.js'
10
10
 
11
- declare module "@soederpop/luca/client" {
11
+ declare module "luca/client" {
12
12
  interface AvailableClients {
13
13
  myClient: typeof MyClient;
14
14
  }
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  Client,
3
- } from "@soederpop/luca/client";
3
+ } from "luca/client";
4
4
  import { RestClient } from "../rest";
5
- import type { ContainerContext } from "@soederpop/luca/container";
5
+ import type { ContainerContext } from "luca/container";
6
6
  import { z } from 'zod'
7
- import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca/schemas/base.js'
7
+ import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca/schemas/base.js'
8
8
 
9
- declare module "@soederpop/luca/client" {
9
+ declare module "luca/client" {
10
10
  interface AvailableClients {
11
11
  comfyui: typeof ComfyUIClient;
12
12
  }
@@ -1,12 +1,12 @@
1
1
  import { z } from 'zod'
2
- import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca/schemas/base.js'
3
- import { Client } from "@soederpop/luca/client";
2
+ import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca/schemas/base.js'
3
+ import { Client } from "luca/client";
4
4
  import { RestClient } from "../rest";
5
- import type { ContainerContext } from "@soederpop/luca/container";
5
+ import type { ContainerContext } from "luca/container";
6
6
  import type { NodeContainer } from "../../node/container.js";
7
7
  import type { AxiosRequestConfig } from 'axios'
8
8
 
9
- declare module "@soederpop/luca/client" {
9
+ declare module "luca/client" {
10
10
  interface AvailableClients {
11
11
  elevenlabs: typeof ElevenLabsClient;
12
12
  }
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod'
2
- import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca/schemas/base.js'
3
- import { Client } from "@soederpop/luca/client";
4
- import type { Container, ContainerContext } from "@soederpop/luca/container";
2
+ import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca/schemas/base.js'
3
+ import { Client } from "luca/client";
4
+ import type { Container, ContainerContext } from "luca/container";
5
5
 
6
6
  import OpenAI from "openai";
7
7
 
@@ -21,7 +21,7 @@ export const OpenAIClientOptionsSchema = ClientOptionsSchema.extend({
21
21
  organization: z.string().optional().describe('OpenAI organization ID'),
22
22
  project: z.string().optional().describe('OpenAI project ID'),
23
23
  dangerouslyAllowBrowser: z.boolean().optional().describe('Allow usage in browser environments'),
24
- defaultModel: z.string().optional().describe('Default model for completions (default: gpt-4o)'),
24
+ defaultModel: z.string().optional().describe('Default model for completions (falls back to OPENAI_DEFAULT_MODEL env var, then gpt-5.4-mini)'),
25
25
  timeout: z.number().optional().describe('Request timeout in milliseconds'),
26
26
  maxRetries: z.number().optional().describe('Maximum number of retries on failure'),
27
27
  })
@@ -52,7 +52,7 @@ export class OpenAIClient extends Client<OpenAIClientState, OpenAIClientOptions>
52
52
  private openai!: OpenAI;
53
53
 
54
54
  static override shortcut = "clients.openai" as const
55
- static override envVars = ['OPENAI_API_KEY']
55
+ static override envVars = ['OPENAI_API_KEY', 'OPENAI_DEFAULT_MODEL']
56
56
  static override stateSchema = OpenAIClientStateSchema
57
57
  static override optionsSchema = OpenAIClientOptionsSchema
58
58
  static override eventsSchema = OpenAIClientEventsSchema
@@ -116,7 +116,7 @@ export class OpenAIClient extends Client<OpenAIClientState, OpenAIClientOptions>
116
116
 
117
117
  /** The default model used for completions, from options or 'gpt-4o'. */
118
118
  get defaultModel(): string {
119
- return this.options.defaultModel || 'gpt-4o';
119
+ return this.options.defaultModel || process.env.OPENAI_DEFAULT_MODEL || 'gpt-5.4-mini';
120
120
  }
121
121
 
122
122
  private updateTokenUsage(usage?: OpenAI.CompletionUsage | OpenAI.Embeddings.CreateEmbeddingResponse.Usage) {
@@ -287,7 +287,7 @@ export class OpenAIClient extends Client<OpenAIClientState, OpenAIClientOptions>
287
287
 
288
288
  try {
289
289
  const response = await this.openai.completions.create({
290
- model: options.model || 'gpt-5',
290
+ model: options.model || this.defaultModel,
291
291
  prompt,
292
292
  stream: false, // Ensure non-streaming response
293
293
  ...options
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  Client,
3
- } from "@soederpop/luca/client";
4
- import type { ContainerContext } from "@soederpop/luca/container";
3
+ } from "luca/client";
4
+ import type { ContainerContext } from "luca/container";
5
5
  import { z } from "zod";
6
6
  import {
7
7
  ClientStateSchema,
8
8
  ClientOptionsSchema,
9
9
  ClientEventsSchema,
10
- } from "@soederpop/luca/schemas/base.js";
10
+ } from "luca/schemas/base.js";
11
11
  import {
12
12
  createClient,
13
13
  type SupabaseClient as SupabaseSDKClient,
@@ -15,7 +15,7 @@ import {
15
15
  type RealtimeChannel,
16
16
  } from "@supabase/supabase-js";
17
17
 
18
- declare module "@soederpop/luca/client" {
18
+ declare module "luca/client" {
19
19
  interface AvailableClients {
20
20
  supabase: typeof SupabaseClient;
21
21
  }
@@ -1,11 +1,11 @@
1
1
  import { z } from 'zod'
2
- import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca/schemas/base.js'
3
- import { Client } from "@soederpop/luca/client";
2
+ import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca/schemas/base.js'
3
+ import { Client } from "luca/client";
4
4
  import { RestClient } from "../rest";
5
- import type { ContainerContext } from "@soederpop/luca/container";
5
+ import type { ContainerContext } from "luca/container";
6
6
  import type { NodeContainer } from "../../node/container.js";
7
7
 
8
- declare module "@soederpop/luca/client" {
8
+ declare module "luca/client" {
9
9
  interface AvailableClients {
10
10
  voicebox: typeof VoiceBoxClient;
11
11
  }
package/src/command.ts CHANGED
@@ -31,7 +31,7 @@ export type CommandHandler<T = any> = (options: T, context: ContainerContext) =>
31
31
  *
32
32
  * @example
33
33
  * ```typescript
34
- * declare module '@soederpop/luca' {
34
+ * declare module 'luca' {
35
35
  * interface AvailableCommands {
36
36
  * serve: SimpleCommand<typeof argsSchema>
37
37
  * }
@@ -432,6 +432,7 @@ export class CommandsRegistry extends Registry<Command<any>> {
432
432
  const Grafted = graftModule(Command as any, {
433
433
  description: commandModule.description,
434
434
  argsSchema: commandModule.argsSchema,
435
+ positionals: commandModule.positionals ?? mod.positionals,
435
436
  handler: commandModule.handler,
436
437
  }, name, 'commands')
437
438
  this.register(name, Grafted as any)