luca 3.0.0 → 3.1.0

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 (388) 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 +264 -321
  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/social.ts +137 -0
  18. package/commands/try-all-challenges.ts +3 -3
  19. package/commands/try-challenge.ts +3 -3
  20. package/datasets/lora/agentic-loop-session-candidates.jsonl +91 -0
  21. package/datasets/lora/agentic-loop-session-curation-summary.json +123 -0
  22. package/datasets/lora/luca-session-candidates.jsonl +29 -0
  23. package/datasets/lora/luca-session-curation-summary.json +121 -0
  24. package/datasets/lora/review-batch-1.jsonl +30 -0
  25. package/datasets/lora/review-manifest.json +41 -0
  26. package/datasets/lora/review-queue.jsonl +120 -0
  27. package/datasets/lora/review-schema.json +134 -0
  28. package/datasets/lora/review-template.jsonl +2 -0
  29. package/datasets/lora/review-ui.html +725 -0
  30. package/dist/agi/container.server.d.ts +2 -2
  31. package/dist/agi/features/assistant.d.ts +2 -2
  32. package/dist/agi/features/assistants-manager.d.ts +1 -1
  33. package/dist/agi/features/autonomous-assistant.d.ts +1 -1
  34. package/dist/agi/features/browser-use.d.ts +1 -1
  35. package/dist/agi/features/claude-code.d.ts +1 -1
  36. package/dist/agi/features/conversation-history.d.ts +2 -2
  37. package/dist/agi/features/conversation.d.ts +1 -1
  38. package/dist/agi/features/docs-reader.d.ts +1 -1
  39. package/dist/agi/features/file-tools.d.ts +1 -1
  40. package/dist/agi/features/luca-coder.d.ts +1 -1
  41. package/dist/agi/features/openai-codex.d.ts +1 -1
  42. package/dist/agi/features/skills-library.d.ts +1 -1
  43. package/dist/clients/civitai/index.d.ts +4 -4
  44. package/dist/clients/client-template.d.ts +4 -4
  45. package/dist/clients/comfyui/index.d.ts +2 -2
  46. package/dist/clients/elevenlabs/index.d.ts +2 -2
  47. package/dist/clients/openai/index.d.ts +2 -2
  48. package/dist/clients/supabase/index.d.ts +3 -3
  49. package/dist/command.d.ts +1 -1
  50. package/dist/node/container.d.ts +1 -1
  51. package/dist/node/features/helpers.d.ts +3 -3
  52. package/dist/node/features/semantic-search.d.ts +1 -1
  53. package/dist/node/features/vm.d.ts +3 -3
  54. package/dist/node.d.ts +1 -1
  55. package/dist/scaffolds/generated.d.ts +1 -1
  56. package/dist/selector.d.ts +1 -1
  57. package/features/cipher-social.ts +493 -0
  58. package/index.html +217 -190
  59. package/luca.console.ts +1 -1
  60. package/package.json +7 -2
  61. package/public/index.html +217 -190
  62. package/public/slides-ai-native.html +1 -1
  63. package/public/slides-intro.html +2 -2
  64. package/scripts/curate-claude-sessions.ts +561 -0
  65. package/scripts/examples/ask-luca-expert.ts +1 -1
  66. package/scripts/examples/assistant-questions.ts +1 -1
  67. package/scripts/examples/excalidraw-expert.ts +1 -1
  68. package/scripts/examples/file-manager.ts +1 -1
  69. package/scripts/examples/ideas.ts +1 -1
  70. package/scripts/examples/interactive-chat.ts +1 -1
  71. package/scripts/examples/opening-a-web-browser.ts +1 -1
  72. package/scripts/examples/telegram-bot.ts +1 -1
  73. package/scripts/examples/using-assistant-with-mcp.ts +1 -1
  74. package/scripts/examples/using-claude-code.ts +1 -1
  75. package/scripts/examples/using-contentdb.ts +2 -2
  76. package/scripts/examples/using-conversations.ts +1 -1
  77. package/scripts/examples/using-disk-cache.ts +1 -1
  78. package/scripts/examples/using-docker-shell.ts +1 -1
  79. package/scripts/examples/using-elevenlabs.ts +1 -1
  80. package/scripts/examples/using-google-calendar.ts +1 -1
  81. package/scripts/examples/using-google-docs.ts +1 -1
  82. package/scripts/examples/using-google-drive.ts +1 -1
  83. package/scripts/examples/using-google-sheets.ts +1 -1
  84. package/scripts/examples/using-nlp.ts +1 -1
  85. package/scripts/examples/using-ollama.ts +1 -1
  86. package/scripts/examples/using-postgres.ts +1 -1
  87. package/scripts/examples/using-runpod.ts +1 -1
  88. package/scripts/examples/using-tts.ts +1 -1
  89. package/scripts/scaffold.ts +5 -5
  90. package/scripts/scratch.ts +1 -1
  91. package/scripts/test-assistant-hooks.ts +1 -1
  92. package/scripts/test-docs-reader.ts +1 -1
  93. package/src/agi/container.server.ts +6 -2
  94. package/src/agi/features/agent-memory.ts +25 -25
  95. package/src/agi/features/assistant.ts +34 -5
  96. package/src/agi/features/assistants-manager.ts +122 -6
  97. package/src/agi/features/autonomous-assistant.ts +1 -1
  98. package/src/agi/features/browser-use.ts +20 -1
  99. package/src/agi/features/claude-code.ts +51 -5
  100. package/src/agi/features/coding-tools.ts +1 -1
  101. package/src/agi/features/conversation-history.ts +181 -4
  102. package/src/agi/features/conversation.ts +186 -15
  103. package/src/agi/features/docs-reader.ts +2 -2
  104. package/src/agi/features/file-tools.ts +49 -2
  105. package/src/agi/features/luca-coder.ts +7 -5
  106. package/src/agi/features/mcp-bridge.ts +532 -0
  107. package/src/agi/features/openai-codex.ts +2 -2
  108. package/src/agi/features/skills-library.ts +131 -52
  109. package/src/agi/lib/token-counter.ts +80 -0
  110. package/src/bootstrap/generated.ts +56 -57
  111. package/src/browser.ts +1 -1
  112. package/src/cli/build-info.ts +2 -2
  113. package/src/cli/cli.ts +2 -2
  114. package/src/clients/civitai/index.ts +5 -5
  115. package/src/clients/client-template.ts +4 -4
  116. package/src/clients/comfyui/index.ts +4 -4
  117. package/src/clients/elevenlabs/index.ts +4 -4
  118. package/src/clients/openai/index.ts +7 -7
  119. package/src/clients/supabase/index.ts +4 -4
  120. package/src/clients/voicebox/index.ts +4 -4
  121. package/src/command.ts +2 -1
  122. package/src/commands/chat.ts +1 -0
  123. package/src/commands/eval.ts +2 -56
  124. package/src/commands/introspect.ts +1 -1
  125. package/src/commands/prompt.ts +41 -9
  126. package/src/container-describer.ts +8 -1
  127. package/src/container.ts +13 -0
  128. package/src/entity.ts +2 -2
  129. package/src/helper.ts +1 -1
  130. package/src/introspection/generated.agi.ts +29596 -27654
  131. package/src/introspection/generated.node.ts +20284 -19247
  132. package/src/introspection/generated.web.ts +605 -584
  133. package/src/introspection/scan.ts +11 -6
  134. package/src/node/container.ts +9 -1
  135. package/src/node/features/content-db.ts +39 -2
  136. package/src/node/features/display-result.ts +57 -0
  137. package/src/node/features/helpers.ts +46 -7
  138. package/src/node/features/python.ts +25 -19
  139. package/src/node/features/repl.ts +1 -1
  140. package/src/node/features/secure-shell.ts +11 -17
  141. package/src/node/features/semantic-search.ts +2 -2
  142. package/src/node/features/socket-repl.ts +336 -0
  143. package/src/node/features/telnyx-assistant-connector.ts +1206 -0
  144. package/src/node/features/transpiler.ts +2 -3
  145. package/src/node/features/ui.ts +5 -0
  146. package/src/node/features/vm.ts +20 -3
  147. package/src/node.ts +3 -3
  148. package/src/python/generated.ts +0 -1
  149. package/src/scaffolds/generated.ts +82 -83
  150. package/src/selector.ts +1 -1
  151. package/src/servers/express.ts +1 -1
  152. package/src/web/features/helpers.ts +22 -0
  153. package/tsconfig.json +12 -12
  154. package/docs/CLI.md +0 -335
  155. package/docs/CNAME +0 -1
  156. package/docs/README.md +0 -60
  157. package/docs/TABLE-OF-CONTENTS.md +0 -183
  158. package/docs/apis/clients/elevenlabs.md +0 -308
  159. package/docs/apis/clients/graph.md +0 -107
  160. package/docs/apis/clients/openai.md +0 -429
  161. package/docs/apis/clients/rest.md +0 -161
  162. package/docs/apis/clients/websocket.md +0 -174
  163. package/docs/apis/features/agi/assistant.md +0 -625
  164. package/docs/apis/features/agi/assistants-manager.md +0 -282
  165. package/docs/apis/features/agi/auto-assistant.md +0 -279
  166. package/docs/apis/features/agi/browser-use.md +0 -802
  167. package/docs/apis/features/agi/claude-code.md +0 -884
  168. package/docs/apis/features/agi/conversation-history.md +0 -364
  169. package/docs/apis/features/agi/conversation.md +0 -548
  170. package/docs/apis/features/agi/docs-reader.md +0 -99
  171. package/docs/apis/features/agi/file-tools.md +0 -163
  172. package/docs/apis/features/agi/luca-coder.md +0 -407
  173. package/docs/apis/features/agi/openai-codex.md +0 -396
  174. package/docs/apis/features/agi/openapi.md +0 -138
  175. package/docs/apis/features/agi/semantic-search.md +0 -387
  176. package/docs/apis/features/agi/skills-library.md +0 -239
  177. package/docs/apis/features/node/container-link.md +0 -192
  178. package/docs/apis/features/node/content-db.md +0 -450
  179. package/docs/apis/features/node/disk-cache.md +0 -379
  180. package/docs/apis/features/node/dns.md +0 -652
  181. package/docs/apis/features/node/docker.md +0 -706
  182. package/docs/apis/features/node/downloader.md +0 -81
  183. package/docs/apis/features/node/esbuild.md +0 -60
  184. package/docs/apis/features/node/file-manager.md +0 -191
  185. package/docs/apis/features/node/fs.md +0 -1217
  186. package/docs/apis/features/node/git.md +0 -371
  187. package/docs/apis/features/node/google-auth.md +0 -193
  188. package/docs/apis/features/node/google-calendar.md +0 -202
  189. package/docs/apis/features/node/google-docs.md +0 -173
  190. package/docs/apis/features/node/google-drive.md +0 -246
  191. package/docs/apis/features/node/google-mail.md +0 -214
  192. package/docs/apis/features/node/google-sheets.md +0 -194
  193. package/docs/apis/features/node/grep.md +0 -292
  194. package/docs/apis/features/node/helpers.md +0 -164
  195. package/docs/apis/features/node/ink.md +0 -334
  196. package/docs/apis/features/node/ipc-socket.md +0 -249
  197. package/docs/apis/features/node/json-tree.md +0 -86
  198. package/docs/apis/features/node/networking.md +0 -316
  199. package/docs/apis/features/node/nlp.md +0 -133
  200. package/docs/apis/features/node/opener.md +0 -97
  201. package/docs/apis/features/node/os.md +0 -146
  202. package/docs/apis/features/node/package-finder.md +0 -392
  203. package/docs/apis/features/node/postgres.md +0 -234
  204. package/docs/apis/features/node/proc.md +0 -399
  205. package/docs/apis/features/node/process-manager.md +0 -305
  206. package/docs/apis/features/node/python.md +0 -604
  207. package/docs/apis/features/node/redis.md +0 -380
  208. package/docs/apis/features/node/repl.md +0 -88
  209. package/docs/apis/features/node/runpod.md +0 -674
  210. package/docs/apis/features/node/secure-shell.md +0 -176
  211. package/docs/apis/features/node/semantic-search.md +0 -408
  212. package/docs/apis/features/node/sqlite.md +0 -233
  213. package/docs/apis/features/node/telegram.md +0 -279
  214. package/docs/apis/features/node/transpiler.md +0 -74
  215. package/docs/apis/features/node/tts.md +0 -133
  216. package/docs/apis/features/node/ui.md +0 -701
  217. package/docs/apis/features/node/vault.md +0 -59
  218. package/docs/apis/features/node/vm.md +0 -75
  219. package/docs/apis/features/node/yaml-tree.md +0 -85
  220. package/docs/apis/features/node/yaml.md +0 -176
  221. package/docs/apis/features/web/asset-loader.md +0 -59
  222. package/docs/apis/features/web/container-link.md +0 -192
  223. package/docs/apis/features/web/esbuild.md +0 -54
  224. package/docs/apis/features/web/helpers.md +0 -164
  225. package/docs/apis/features/web/network.md +0 -44
  226. package/docs/apis/features/web/speech.md +0 -69
  227. package/docs/apis/features/web/vault.md +0 -59
  228. package/docs/apis/features/web/vm.md +0 -75
  229. package/docs/apis/features/web/voice.md +0 -84
  230. package/docs/apis/servers/express.md +0 -171
  231. package/docs/apis/servers/mcp.md +0 -238
  232. package/docs/apis/servers/websocket.md +0 -170
  233. package/docs/bootstrap/CLAUDE.md +0 -101
  234. package/docs/bootstrap/SKILL.md +0 -341
  235. package/docs/bootstrap/templates/about-command.ts +0 -41
  236. package/docs/bootstrap/templates/docs-models.ts +0 -22
  237. package/docs/bootstrap/templates/docs-readme.md +0 -43
  238. package/docs/bootstrap/templates/example-feature.ts +0 -53
  239. package/docs/bootstrap/templates/health-endpoint.ts +0 -15
  240. package/docs/bootstrap/templates/luca-cli.ts +0 -30
  241. package/docs/bootstrap/templates/runme.md +0 -54
  242. package/docs/challenges/caching-proxy.md +0 -16
  243. package/docs/challenges/content-db-round-trip.md +0 -14
  244. package/docs/challenges/custom-command.md +0 -9
  245. package/docs/challenges/file-watcher-pipeline.md +0 -11
  246. package/docs/challenges/grep-audit-report.md +0 -15
  247. package/docs/challenges/multi-feature-dashboard.md +0 -14
  248. package/docs/challenges/process-orchestrator.md +0 -17
  249. package/docs/challenges/rest-api-server-with-client.md +0 -12
  250. package/docs/challenges/script-runner-with-vm.md +0 -11
  251. package/docs/challenges/simple-rest-api.md +0 -15
  252. package/docs/challenges/websocket-serve-and-client.md +0 -11
  253. package/docs/challenges/yaml-config-system.md +0 -14
  254. package/docs/command-system-overhaul.md +0 -94
  255. package/docs/documentation-audit.md +0 -134
  256. package/docs/examples/assistant/CORE.md +0 -18
  257. package/docs/examples/assistant/hooks.ts +0 -3
  258. package/docs/examples/assistant/tools.ts +0 -10
  259. package/docs/examples/assistant-hooks-reference.ts +0 -171
  260. package/docs/examples/assistant-with-process-manager.md +0 -84
  261. package/docs/examples/content-db.md +0 -77
  262. package/docs/examples/disk-cache.md +0 -83
  263. package/docs/examples/docker.md +0 -101
  264. package/docs/examples/downloader.md +0 -70
  265. package/docs/examples/entity.md +0 -124
  266. package/docs/examples/esbuild.md +0 -80
  267. package/docs/examples/feature-as-tool-provider.md +0 -143
  268. package/docs/examples/file-manager.md +0 -82
  269. package/docs/examples/fs.md +0 -83
  270. package/docs/examples/git.md +0 -85
  271. package/docs/examples/google-auth.md +0 -88
  272. package/docs/examples/google-calendar.md +0 -94
  273. package/docs/examples/google-docs.md +0 -82
  274. package/docs/examples/google-drive.md +0 -96
  275. package/docs/examples/google-sheets.md +0 -95
  276. package/docs/examples/grep.md +0 -85
  277. package/docs/examples/ink-blocks.md +0 -75
  278. package/docs/examples/ink-renderer.md +0 -41
  279. package/docs/examples/ink.md +0 -103
  280. package/docs/examples/ipc-socket.md +0 -103
  281. package/docs/examples/json-tree.md +0 -91
  282. package/docs/examples/networking.md +0 -58
  283. package/docs/examples/nlp.md +0 -91
  284. package/docs/examples/opener.md +0 -78
  285. package/docs/examples/os.md +0 -72
  286. package/docs/examples/package-finder.md +0 -89
  287. package/docs/examples/postgres.md +0 -91
  288. package/docs/examples/proc.md +0 -81
  289. package/docs/examples/process-manager.md +0 -79
  290. package/docs/examples/python.md +0 -132
  291. package/docs/examples/repl.md +0 -93
  292. package/docs/examples/runpod.md +0 -119
  293. package/docs/examples/secure-shell.md +0 -92
  294. package/docs/examples/sqlite.md +0 -86
  295. package/docs/examples/structured-output-with-assistants.md +0 -144
  296. package/docs/examples/telegram.md +0 -77
  297. package/docs/examples/tts.md +0 -86
  298. package/docs/examples/ui.md +0 -80
  299. package/docs/examples/vault.md +0 -70
  300. package/docs/examples/vm.md +0 -86
  301. package/docs/examples/websocket-ask-and-reply-example.md +0 -128
  302. package/docs/examples/yaml-tree.md +0 -93
  303. package/docs/examples/yaml.md +0 -104
  304. package/docs/ideas/assistant-factory-pattern.md +0 -142
  305. package/docs/in-memory-fs.md +0 -4
  306. package/docs/introspection-audit.md +0 -49
  307. package/docs/introspection.md +0 -164
  308. package/docs/mcp/readme.md +0 -162
  309. package/docs/models.ts +0 -41
  310. package/docs/philosophy.md +0 -86
  311. package/docs/principles.md +0 -7
  312. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +0 -34
  313. package/docs/prompts/check-for-undocumented-features.md +0 -27
  314. package/docs/prompts/mcp-test-easy-command.md +0 -27
  315. package/docs/scaffolds/client.md +0 -149
  316. package/docs/scaffolds/command.md +0 -120
  317. package/docs/scaffolds/endpoint.md +0 -171
  318. package/docs/scaffolds/feature.md +0 -158
  319. package/docs/scaffolds/selector.md +0 -91
  320. package/docs/scaffolds/server.md +0 -196
  321. package/docs/selectors.md +0 -115
  322. package/docs/sessions/custom-command/attempt-log-2.md +0 -195
  323. package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +0 -728
  324. package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +0 -555
  325. package/docs/sessions/grep-audit-report/attempt-log-1.md +0 -289
  326. package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +0 -679
  327. package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +0 -1
  328. package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +0 -920
  329. package/docs/sessions/simple-rest-api/attempt-log-1.md +0 -593
  330. package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +0 -995
  331. package/docs/tutorials/00-bootstrap.md +0 -166
  332. package/docs/tutorials/01-getting-started.md +0 -106
  333. package/docs/tutorials/02-container.md +0 -210
  334. package/docs/tutorials/03-scripts.md +0 -194
  335. package/docs/tutorials/04-features-overview.md +0 -196
  336. package/docs/tutorials/05-state-and-events.md +0 -171
  337. package/docs/tutorials/06-servers.md +0 -157
  338. package/docs/tutorials/07-endpoints.md +0 -198
  339. package/docs/tutorials/08-commands.md +0 -252
  340. package/docs/tutorials/09-clients.md +0 -162
  341. package/docs/tutorials/10-creating-features.md +0 -203
  342. package/docs/tutorials/11-contentbase.md +0 -191
  343. package/docs/tutorials/12-assistants.md +0 -215
  344. package/docs/tutorials/13-introspection.md +0 -157
  345. package/docs/tutorials/14-type-system.md +0 -174
  346. package/docs/tutorials/15-project-patterns.md +0 -222
  347. package/docs/tutorials/16-google-features.md +0 -534
  348. package/docs/tutorials/17-tui-blocks.md +0 -530
  349. package/docs/tutorials/18-semantic-search.md +0 -334
  350. package/docs/tutorials/19-python-sessions.md +0 -401
  351. package/docs/tutorials/20-browser-esm.md +0 -234
  352. package/index.ts +0 -1
  353. package/src/agi/endpoints/ask.ts +0 -60
  354. package/src/agi/endpoints/conversations/[id].ts +0 -45
  355. package/src/agi/endpoints/conversations.ts +0 -31
  356. package/src/agi/endpoints/experts.ts +0 -37
  357. package/test/assistant-hooks.test.ts +0 -306
  358. package/test/assistant.test.ts +0 -81
  359. package/test/bus.test.ts +0 -134
  360. package/test/clients-servers.test.ts +0 -217
  361. package/test/command.test.ts +0 -267
  362. package/test/container-link.test.ts +0 -274
  363. package/test/conversation.test.ts +0 -220
  364. package/test/features.test.ts +0 -160
  365. package/test/fork-and-research.test.ts +0 -450
  366. package/test/integration.test.ts +0 -787
  367. package/test/interceptor-chain.test.ts +0 -61
  368. package/test/node-container.test.ts +0 -121
  369. package/test/python-session.test.ts +0 -105
  370. package/test/rate-limit.test.ts +0 -272
  371. package/test/semantic-search.test.ts +0 -550
  372. package/test/state.test.ts +0 -121
  373. package/test/vm-context.test.ts +0 -146
  374. package/test/vm-loadmodule.test.ts +0 -213
  375. package/test/websocket-ask.test.ts +0 -101
  376. package/test-integration/assistant.test.ts +0 -138
  377. package/test-integration/assistants-manager.test.ts +0 -113
  378. package/test-integration/claude-code.test.ts +0 -98
  379. package/test-integration/conversation-history.test.ts +0 -205
  380. package/test-integration/conversation.test.ts +0 -137
  381. package/test-integration/elevenlabs.test.ts +0 -55
  382. package/test-integration/google-services.test.ts +0 -80
  383. package/test-integration/helpers.ts +0 -89
  384. package/test-integration/memory.test.ts +0 -204
  385. package/test-integration/openai-codex.test.ts +0 -93
  386. package/test-integration/runpod.test.ts +0 -58
  387. package/test-integration/server-endpoints.test.ts +0 -97
  388. 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 = 'b06dca0'
3
3
  export const BUILD_BRANCH = 'main'
4
- export const BUILD_DATE = '2026-04-10T05:00:55Z'
4
+ export const BUILD_DATE = '2026-05-23T07:32:17Z'
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)