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 scaffold and MCP readme content
2
- // Generated at: 2026-04-10T05:00:53.697Z
3
2
  // Source: docs/scaffolds/*.md, docs/examples/assistant/, and docs/mcp/readme.md
4
3
  //
5
4
  // Do not edit manually. Run: luca build-scaffolds
@@ -19,8 +18,8 @@ export const scaffolds: Record<string, ScaffoldData> = {
19
18
  feature: {
20
19
  sections: [
21
20
  { heading: "Imports", code: `import { z } from 'zod'
22
- import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from '@soederpop/luca'
23
- import { Feature } from '@soederpop/luca'` },
21
+ import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from 'luca'
22
+ import { Feature } from 'luca'` },
24
23
  { heading: "Schemas", code: `export const {{PascalName}}StateSchema = FeatureStateSchema.extend({
25
24
  // Add your state fields here. These are observable — changes emit events.
26
25
  // Example: itemCount: z.number().default(0).describe('Number of items stored'),
@@ -61,7 +60,7 @@ export class {{PascalName}} extends Feature<{{PascalName}}State, {{PascalName}}O
61
60
  // Set up initial state, start background tasks, etc.
62
61
  }
63
62
  }` },
64
- { heading: "Module Augmentation", code: `declare module '@soederpop/luca' {
63
+ { heading: "Module Augmentation", code: `declare module 'luca' {
65
64
  interface AvailableFeatures {
66
65
  {{camelName}}: typeof {{PascalName}}
67
66
  }
@@ -72,10 +71,10 @@ static { Feature.register(this, '{{camelName}}') }
72
71
  // At module level:
73
72
  export default {{PascalName}}` },
74
73
  { heading: "Complete Example", code: `import { z } from 'zod'
75
- import { FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
76
- import { Feature } from '@soederpop/luca'
74
+ import { FeatureStateSchema, FeatureOptionsSchema } from 'luca'
75
+ import { Feature } from 'luca'
77
76
 
78
- declare module '@soederpop/luca' {
77
+ declare module 'luca' {
79
78
  interface AvailableFeatures {
80
79
  {{camelName}}: typeof {{PascalName}}
81
80
  }
@@ -111,10 +110,10 @@ export class {{PascalName}} extends Feature<{{PascalName}}State, {{PascalName}}O
111
110
  export default {{PascalName}}` }
112
111
  ],
113
112
  full: `import { z } from 'zod'
114
- import { FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
115
- import { Feature } from '@soederpop/luca'
113
+ import { FeatureStateSchema, FeatureOptionsSchema } from 'luca'
114
+ import { Feature } from 'luca'
116
115
 
117
- declare module '@soederpop/luca' {
116
+ declare module 'luca' {
118
117
  interface AvailableFeatures {
119
118
  {{camelName}}: typeof {{PascalName}}
120
119
  }
@@ -161,8 +160,8 @@ When to build a feature:
161
160
 
162
161
  \`\`\`ts
163
162
  import { z } from 'zod'
164
- import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from '@soederpop/luca'
165
- import { Feature } from '@soederpop/luca'
163
+ import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from 'luca'
164
+ import { Feature } from 'luca'
166
165
  \`\`\`
167
166
 
168
167
  These are the only imports your feature file needs from luca. If your feature wraps a third-party library, import it here too — feature implementations are the ONE place where direct library imports are allowed.
@@ -234,7 +233,7 @@ export class {{PascalName}} extends Feature<{{PascalName}}State, {{PascalName}}O
234
233
  This is what gives \`container.feature('yourName')\` TypeScript autocomplete. Without it, the feature works but TypeScript won't know about it.
235
234
 
236
235
  \`\`\`ts
237
- declare module '@soederpop/luca' {
236
+ declare module 'luca' {
238
237
  interface AvailableFeatures {
239
238
  {{camelName}}: typeof {{PascalName}}
240
239
  }
@@ -259,10 +258,10 @@ Here's a minimal but complete feature. This is what a real feature file looks li
259
258
 
260
259
  \`\`\`ts
261
260
  import { z } from 'zod'
262
- import { FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
263
- import { Feature } from '@soederpop/luca'
261
+ import { FeatureStateSchema, FeatureOptionsSchema } from 'luca'
262
+ import { Feature } from 'luca'
264
263
 
265
- declare module '@soederpop/luca' {
264
+ declare module 'luca' {
266
265
  interface AvailableFeatures {
267
266
  {{camelName}}: typeof {{PascalName}}
268
267
  }
@@ -311,8 +310,8 @@ export default {{PascalName}}
311
310
  client: {
312
311
  sections: [
313
312
  { heading: "Imports", code: `import { z } from 'zod'
314
- import { Client, RestClient } from '@soederpop/luca/client'
315
- import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca'` },
313
+ import { Client, RestClient } from 'luca/client'
314
+ import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca'` },
316
315
  { heading: "Schemas", code: `export const {{PascalName}}StateSchema = ClientStateSchema.extend({
317
316
  // Add your state fields here.
318
317
  // Example: authenticated: z.boolean().default(false).describe('Whether API auth is configured'),
@@ -354,7 +353,7 @@ export class {{PascalName}} extends RestClient<{{PascalName}}State, {{PascalName
354
353
  // return this.get('/items')
355
354
  // }
356
355
  }` },
357
- { heading: "Module Augmentation", code: `declare module '@soederpop/luca/client' {
356
+ { heading: "Module Augmentation", code: `declare module 'luca/client' {
358
357
  interface AvailableClients {
359
358
  {{camelName}}: typeof {{PascalName}}
360
359
  }
@@ -365,10 +364,10 @@ static { Client.register(this, '{{camelName}}') }
365
364
  // At module level:
366
365
  export default {{PascalName}}` },
367
366
  { heading: "Complete Example", code: `import { z } from 'zod'
368
- import { Client, RestClient } from '@soederpop/luca/client'
369
- import { ClientStateSchema, ClientOptionsSchema } from '@soederpop/luca'
367
+ import { Client, RestClient } from 'luca/client'
368
+ import { ClientStateSchema, ClientOptionsSchema } from 'luca'
370
369
 
371
- declare module '@soederpop/luca/client' {
370
+ declare module 'luca/client' {
372
371
  interface AvailableClients {
373
372
  {{camelName}}: typeof {{PascalName}}
374
373
  }
@@ -406,10 +405,10 @@ export class {{PascalName}} extends RestClient<{{PascalName}}State, {{PascalName
406
405
  export default {{PascalName}}` }
407
406
  ],
408
407
  full: `import { z } from 'zod'
409
- import { Client, RestClient } from '@soederpop/luca/client'
410
- import { ClientStateSchema, ClientOptionsSchema } from '@soederpop/luca'
408
+ import { Client, RestClient } from 'luca/client'
409
+ import { ClientStateSchema, ClientOptionsSchema } from 'luca'
411
410
 
412
- declare module '@soederpop/luca/client' {
411
+ declare module 'luca/client' {
413
412
  interface AvailableClients {
414
413
  {{camelName}}: typeof {{PascalName}}
415
414
  }
@@ -458,8 +457,8 @@ When to build a client:
458
457
 
459
458
  \`\`\`ts
460
459
  import { z } from 'zod'
461
- import { Client, RestClient } from '@soederpop/luca/client'
462
- import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca'
460
+ import { Client, RestClient } from 'luca/client'
461
+ import { ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca'
463
462
  \`\`\`
464
463
 
465
464
  Use \`RestClient\` for HTTP APIs (most common). It gives you \`get\`, \`post\`, \`put\`, \`patch\`, \`delete\` methods that handle JSON, headers, and error wrapping.
@@ -522,7 +521,7 @@ export class {{PascalName}} extends RestClient<{{PascalName}}State, {{PascalName
522
521
  ## Module Augmentation
523
522
 
524
523
  \`\`\`ts
525
- declare module '@soederpop/luca/client' {
524
+ declare module 'luca/client' {
526
525
  interface AvailableClients {
527
526
  {{camelName}}: typeof {{PascalName}}
528
527
  }
@@ -545,10 +544,10 @@ export default {{PascalName}}
545
544
 
546
545
  \`\`\`ts
547
546
  import { z } from 'zod'
548
- import { Client, RestClient } from '@soederpop/luca/client'
549
- import { ClientStateSchema, ClientOptionsSchema } from '@soederpop/luca'
547
+ import { Client, RestClient } from 'luca/client'
548
+ import { ClientStateSchema, ClientOptionsSchema } from 'luca'
550
549
 
551
- declare module '@soederpop/luca/client' {
550
+ declare module 'luca/client' {
552
551
  interface AvailableClients {
553
552
  {{camelName}}: typeof {{PascalName}}
554
553
  }
@@ -599,10 +598,10 @@ export default {{PascalName}}
599
598
  server: {
600
599
  sections: [
601
600
  { heading: "Imports", code: `import { z } from 'zod'
602
- import { Server } from '@soederpop/luca'
603
- import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from '@soederpop/luca'
604
- import type { NodeContainer } from '@soederpop/luca'
605
- import type { ServersInterface } from '@soederpop/luca'` },
601
+ import { Server } from 'luca'
602
+ import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from 'luca'
603
+ import type { NodeContainer } from 'luca'
604
+ import type { ServersInterface } from 'luca'` },
606
605
  { heading: "Schemas", code: `export const {{PascalName}}StateSchema = ServerStateSchema.extend({
607
606
  // Add your state fields here.
608
607
  // Example: connectionCount: z.number().default(0).describe('Active connections'),
@@ -667,7 +666,7 @@ export class {{PascalName}} extends Server<{{PascalName}}State, {{PascalName}}Op
667
666
  return this
668
667
  }
669
668
  }` },
670
- { heading: "Module Augmentation", code: `declare module '@soederpop/luca' {
669
+ { heading: "Module Augmentation", code: `declare module 'luca' {
671
670
  interface AvailableServers {
672
671
  {{camelName}}: typeof {{PascalName}}
673
672
  }
@@ -678,12 +677,12 @@ static { Server.register(this, '{{camelName}}') }
678
677
  // At module level:
679
678
  export default {{PascalName}}` },
680
679
  { heading: "Complete Example", code: `import { z } from 'zod'
681
- import { Server } from '@soederpop/luca'
682
- import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from '@soederpop/luca'
683
- import type { NodeContainer } from '@soederpop/luca'
684
- import type { ServersInterface } from '@soederpop/luca'
680
+ import { Server } from 'luca'
681
+ import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from 'luca'
682
+ import type { NodeContainer } from 'luca'
683
+ import type { ServersInterface } from 'luca'
685
684
 
686
- declare module '@soederpop/luca' {
685
+ declare module 'luca' {
687
686
  interface AvailableServers {
688
687
  {{camelName}}: typeof {{PascalName}}
689
688
  }
@@ -745,12 +744,12 @@ export class {{PascalName}} extends Server<{{PascalName}}State, {{PascalName}}Op
745
744
  export default {{PascalName}}` }
746
745
  ],
747
746
  full: `import { z } from 'zod'
748
- import { Server } from '@soederpop/luca'
749
- import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from '@soederpop/luca'
750
- import type { NodeContainer } from '@soederpop/luca'
751
- import type { ServersInterface } from '@soederpop/luca'
747
+ import { Server } from 'luca'
748
+ import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from 'luca'
749
+ import type { NodeContainer } from 'luca'
750
+ import type { ServersInterface } from 'luca'
752
751
 
753
- declare module '@soederpop/luca' {
752
+ declare module 'luca' {
754
753
  interface AvailableServers {
755
754
  {{camelName}}: typeof {{PascalName}}
756
755
  }
@@ -823,10 +822,10 @@ When to build a server:
823
822
 
824
823
  \`\`\`ts
825
824
  import { z } from 'zod'
826
- import { Server } from '@soederpop/luca'
827
- import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from '@soederpop/luca'
828
- import type { NodeContainer } from '@soederpop/luca'
829
- import type { ServersInterface } from '@soederpop/luca'
825
+ import { Server } from 'luca'
826
+ import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from 'luca'
827
+ import type { NodeContainer } from 'luca'
828
+ import type { ServersInterface } from 'luca'
830
829
  \`\`\`
831
830
 
832
831
  ## Schemas
@@ -908,7 +907,7 @@ export class {{PascalName}} extends Server<{{PascalName}}State, {{PascalName}}Op
908
907
  ## Module Augmentation
909
908
 
910
909
  \`\`\`ts
911
- declare module '@soederpop/luca' {
910
+ declare module 'luca' {
912
911
  interface AvailableServers {
913
912
  {{camelName}}: typeof {{PascalName}}
914
913
  }
@@ -931,12 +930,12 @@ export default {{PascalName}}
931
930
 
932
931
  \`\`\`ts
933
932
  import { z } from 'zod'
934
- import { Server } from '@soederpop/luca'
935
- import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from '@soederpop/luca'
936
- import type { NodeContainer } from '@soederpop/luca'
937
- import type { ServersInterface } from '@soederpop/luca'
933
+ import { Server } from 'luca'
934
+ import { ServerStateSchema, ServerOptionsSchema, ServerEventsSchema } from 'luca'
935
+ import type { NodeContainer } from 'luca'
936
+ import type { ServersInterface } from 'luca'
938
937
 
939
- declare module '@soederpop/luca' {
938
+ declare module 'luca' {
940
939
  interface AvailableServers {
941
940
  {{camelName}}: typeof {{PascalName}}
942
941
  }
@@ -1011,7 +1010,7 @@ export default {{PascalName}}
1011
1010
  command: {
1012
1011
  sections: [
1013
1012
  { heading: "Imports", code: `import { z } from 'zod'
1014
- import type { ContainerContext } from '@soederpop/luca'` },
1013
+ import type { ContainerContext } from 'luca'` },
1015
1014
  { heading: "Positional Arguments", code: `// luca {{kebabName}} ./src => options.target === './src'
1016
1015
  export const positionals = ['target']` },
1017
1016
  { heading: "Args Schema", code: `export const argsSchema = z.object({
@@ -1033,7 +1032,7 @@ export const positionals = ['target']` },
1033
1032
  // Your implementation here
1034
1033
  }` },
1035
1034
  { heading: "Complete Example", code: `import { z } from 'zod'
1036
- import type { ContainerContext } from '@soederpop/luca'
1035
+ import type { ContainerContext } from 'luca'
1037
1036
 
1038
1037
  export const description = '{{description}}'
1039
1038
 
@@ -1070,7 +1069,7 @@ export default async function {{camelName}}(options: z.infer<typeof argsSchema>,
1070
1069
  }` }
1071
1070
  ],
1072
1071
  full: `import { z } from 'zod'
1073
- import type { ContainerContext } from '@soederpop/luca'
1072
+ import type { ContainerContext } from 'luca'
1074
1073
 
1075
1074
  export const description = '{{description}}'
1076
1075
 
@@ -1100,7 +1099,7 @@ When to build a command:
1100
1099
 
1101
1100
  \`\`\`ts
1102
1101
  import { z } from 'zod'
1103
- import type { ContainerContext } from '@soederpop/luca'
1102
+ import type { ContainerContext } from 'luca'
1104
1103
  \`\`\`
1105
1104
 
1106
1105
  ## Positional Arguments
@@ -1155,7 +1154,7 @@ export default async function {{camelName}}(options: z.infer<typeof argsSchema>,
1155
1154
 
1156
1155
  \`\`\`ts
1157
1156
  import { z } from 'zod'
1158
- import type { ContainerContext } from '@soederpop/luca'
1157
+ import type { ContainerContext } from 'luca'
1159
1158
 
1160
1159
  export const description = '{{description}}'
1161
1160
 
@@ -1322,7 +1321,7 @@ Run \`luca serve\` and they're automatically discovered and mounted.
1322
1321
 
1323
1322
  Endpoints are lightweight — just exports and handler functions. No imports are required.
1324
1323
 
1325
- If your project has \`@soederpop/luca\` as an npm dependency, you can import \`z\` from \`zod\` and \`EndpointContext\` from \`@soederpop/luca\` for type safety. Otherwise, use \`any\` types — the framework handles validation and context injection for you.
1324
+ If your project has \`luca\` as an npm dependency, you can import \`z\` from \`zod\` and \`EndpointContext\` from \`luca\` for type safety. Otherwise, use \`any\` types — the framework handles validation and context injection for you.
1326
1325
 
1327
1326
  Access framework capabilities through the \`ctx\` parameter:
1328
1327
  - \`ctx.container.feature('fs')\` for file operations
@@ -1368,7 +1367,7 @@ Return any object — it's automatically JSON-serialized as the response.
1368
1367
 
1369
1368
  ## Validation Schemas
1370
1369
 
1371
- If \`zod\` is available (via \`@soederpop/luca\` dependency or \`node_modules\`), export Zod schemas to validate parameters for each method. Name them \`{method}Schema\`:
1370
+ If \`zod\` is available (via \`luca\` dependency or \`node_modules\`), export Zod schemas to validate parameters for each method. Name them \`{method}Schema\`:
1372
1371
 
1373
1372
  \`\`\`ts
1374
1373
  import { z } from 'zod'
@@ -1476,7 +1475,7 @@ export { del as delete }
1476
1475
  selector: {
1477
1476
  sections: [
1478
1477
  { heading: "Imports", code: `import { z } from 'zod'
1479
- import type { ContainerContext } from '@soederpop/luca'` },
1478
+ import type { ContainerContext } from 'luca'` },
1480
1479
  { heading: "Args Schema", code: `export const argsSchema = z.object({
1481
1480
  // Add your input arguments here.
1482
1481
  // Example: field: z.string().optional().describe('Specific field to return'),
@@ -1492,7 +1491,7 @@ import type { ContainerContext } from '@soederpop/luca'` },
1492
1491
  return { /* your data */ }
1493
1492
  }` },
1494
1493
  { heading: "Complete Example", code: `import { z } from 'zod'
1495
- import type { ContainerContext } from '@soederpop/luca'
1494
+ import type { ContainerContext } from 'luca'
1496
1495
 
1497
1496
  export const description = '{{description}}'
1498
1497
 
@@ -1506,7 +1505,7 @@ export async function run(args: z.infer<typeof argsSchema>, context: ContainerCo
1506
1505
  }` }
1507
1506
  ],
1508
1507
  full: `import { z } from 'zod'
1509
- import type { ContainerContext } from '@soederpop/luca'
1508
+ import type { ContainerContext } from 'luca'
1510
1509
 
1511
1510
  export const description = '{{description}}'
1512
1511
 
@@ -1531,7 +1530,7 @@ When to build a selector:
1531
1530
 
1532
1531
  \`\`\`ts
1533
1532
  import { z } from 'zod'
1534
- import type { ContainerContext } from '@soederpop/luca'
1533
+ import type { ContainerContext } from 'luca'
1535
1534
  \`\`\`
1536
1535
 
1537
1536
  ## Args Schema
@@ -1587,7 +1586,7 @@ export async function run(args: z.infer<typeof argsSchema>, context: ContainerCo
1587
1586
 
1588
1587
  \`\`\`ts
1589
1588
  import { z } from 'zod'
1590
- import type { ContainerContext } from '@soederpop/luca'
1589
+ import type { ContainerContext } from 'luca'
1591
1590
 
1592
1591
  export const description = '{{description}}'
1593
1592
 
@@ -1660,20 +1659,20 @@ Every capability goes through the container. If you need something that doesn't
1660
1659
 
1661
1660
  ## Import Rule
1662
1661
 
1663
- All consumer code imports from \`@soederpop/luca\` only:
1662
+ All consumer code imports from \`luca\` only:
1664
1663
 
1665
1664
  \`\`\`ts
1666
- import { Feature, features, z, FeatureStateSchema, FeatureOptionsSchema } from '@soederpop/luca'
1667
- import { Client, clients, RestClient, ClientStateSchema } from '@soederpop/luca/client'
1668
- import { Server, servers, ServerStateSchema } from '@soederpop/luca'
1669
- import { commands, CommandOptionsSchema } from '@soederpop/luca'
1665
+ import { Feature, features, z, FeatureStateSchema, FeatureOptionsSchema } from 'luca'
1666
+ import { Client, clients, RestClient, ClientStateSchema } from 'luca/client'
1667
+ import { Server, servers, ServerStateSchema } from 'luca'
1668
+ import { commands, CommandOptionsSchema } from 'luca'
1670
1669
  \`\`\`
1671
1670
 
1672
1671
  Never import from \`fs\`, \`path\`, \`crypto\`, or other Node builtins. Never import third-party packages in consumer code. If a container feature wraps the functionality, use it.
1673
1672
 
1674
1673
  ## Zod v4
1675
1674
 
1676
- This project uses **Zod v4** — import \`z\` from \`@soederpop/luca\`, never from \`'zod'\` directly. All option, state, and event schemas use Zod v4 syntax. Key patterns:
1675
+ This project uses **Zod v4** — import \`z\` from \`luca\`, never from \`'zod'\` directly. All option, state, and event schemas use Zod v4 syntax. Key patterns:
1677
1676
 
1678
1677
  \`\`\`ts
1679
1678
  // Extending base schemas (options, state, events)
@@ -1700,7 +1699,7 @@ Zod v4 differences from v3 that matter:
1700
1699
 
1701
1700
  ## Dependencies
1702
1701
 
1703
- If the project has \`node_modules\` and a package manager, helper implementations can import third-party libraries internally. If not (e.g. running via the \`luca\` binary's VM), all code must import only from \`@soederpop/luca\`.
1702
+ If the project has \`node_modules\` and a package manager, helper implementations can import third-party libraries internally. If not (e.g. running via the \`luca\` binary's VM), all code must import only from \`luca\`.
1704
1703
 
1705
1704
  ## Discovering Capabilities
1706
1705
 
@@ -1719,9 +1718,9 @@ Features access other features via \`this.container.feature(...)\`:
1719
1718
 
1720
1719
  \`\`\`ts
1721
1720
  import { z } from 'zod'
1722
- import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from '@soederpop/luca'
1723
- import { Feature, features } from '@soederpop/luca'
1724
- import type { ContainerContext } from '@soederpop/luca'
1721
+ import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from 'luca'
1722
+ import { Feature, features } from 'luca'
1723
+ import type { ContainerContext } from 'luca'
1725
1724
 
1726
1725
  export const ConfigStateSchema = FeatureStateSchema.extend({
1727
1726
  loaded: z.boolean().default(false).describe('Whether config has been loaded'),
@@ -1753,7 +1752,7 @@ export class Config extends Feature<z.infer<typeof ConfigStateSchema>, z.infer<t
1753
1752
  }
1754
1753
  }
1755
1754
 
1756
- declare module '@soederpop/luca' {
1755
+ declare module 'luca' {
1757
1756
  interface AvailableFeatures { config: typeof Config }
1758
1757
  }
1759
1758
  export default features.register('config', Config)
@@ -1765,8 +1764,8 @@ Clients access features and other clients via \`this.container\`:
1765
1764
 
1766
1765
  \`\`\`ts
1767
1766
  import { z } from 'zod'
1768
- import { Client, clients, ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from '@soederpop/luca'
1769
- import type { ContainerContext } from '@soederpop/luca'
1767
+ import { Client, clients, ClientStateSchema, ClientOptionsSchema, ClientEventsSchema } from 'luca'
1768
+ import type { ContainerContext } from 'luca'
1770
1769
 
1771
1770
  export const GithubOptionsSchema = ClientOptionsSchema.extend({
1772
1771
  token: z.string().describe('GitHub personal access token'),
@@ -1795,7 +1794,7 @@ export class GithubClient extends Client<z.infer<typeof ClientStateSchema>, z.in
1795
1794
  }
1796
1795
  }
1797
1796
 
1798
- declare module '@soederpop/luca' {
1797
+ declare module 'luca' {
1799
1798
  interface AvailableClients { github: typeof GithubClient }
1800
1799
  }
1801
1800
  export default clients.register('github', GithubClient)
@@ -1811,5 +1810,5 @@ export default clients.register('github', GithubClient)
1811
1810
 
1812
1811
  ## Portability
1813
1812
 
1814
- Code that only imports from \`@soederpop/luca\` can be copied between any luca project. That's the goal. Features, clients, servers, and commands written this way are portable building blocks.
1813
+ Code that only imports from \`luca\` can be copied between any luca project. That's the goal. Features, clients, servers, and commands written this way are portable building blocks.
1815
1814
  `
package/src/selector.ts CHANGED
@@ -29,7 +29,7 @@ export interface SelectorsInterface {
29
29
  *
30
30
  * @example
31
31
  * ```typescript
32
- * declare module '@soederpop/luca' {
32
+ * declare module 'luca' {
33
33
  * interface AvailableSelectors {
34
34
  * packageInfo: SimpleSelector<typeof argsSchema>
35
35
  * }
@@ -183,7 +183,7 @@ export class ExpressServer<T extends ServerState = ServerState, K extends Expres
183
183
  const glob = new Glob('**/*.ts')
184
184
 
185
185
  // Use the helpers feature's VM-aware loader so endpoints can resolve
186
- // packages like zod and @soederpop/luca even from the compiled binary
186
+ // packages like zod and luca even from the compiled binary
187
187
  const helpers = this.container.feature('helpers') as any
188
188
 
189
189
  for await (const file of glob.scan({ cwd: dir, absolute: true })) {
@@ -2,6 +2,8 @@ import { z } from 'zod'
2
2
  import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from '../../schemas/base.js'
3
3
  import { Feature } from '../feature.js'
4
4
  import { Client } from '../../client.js'
5
+ import { allHelperInstances } from '../../container.js'
6
+ import type { Helper } from '../../helper.js'
5
7
  import type { Registry } from '../../registry.js'
6
8
  import type { AssetLoader } from './asset-loader.js'
7
9
 
@@ -106,6 +108,26 @@ export class Helpers extends Feature<HelpersState, HelpersOptions> {
106
108
  this.state.set('manifestLoaded', false)
107
109
  }
108
110
 
111
+ /**
112
+ * Returns all instantiated helper instances across all types, optionally filtered by class.
113
+ *
114
+ * @param FilterClass - When provided, only instances of this class are returned.
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // All instances of any type
119
+ * container.helpers.getInstances()
120
+ *
121
+ * // All Assistant instances
122
+ * const assistants = container.helpers.getInstances(Assistant)
123
+ * ```
124
+ */
125
+ getInstances(): Helper[]
126
+ getInstances<T extends Helper>(FilterClass: new (...args: any[]) => T): T[]
127
+ getInstances<T extends Helper>(FilterClass?: new (...args: any[]) => T): Helper[] | T[] {
128
+ return FilterClass ? allHelperInstances(FilterClass) : allHelperInstances()
129
+ }
130
+
109
131
  /**
110
132
  * Returns a unified view of all available helpers across all registries.
111
133
  * Each key is a registry type, each value is the list of helper names in that registry.
package/tsconfig.json CHANGED
@@ -21,18 +21,18 @@
21
21
  "@/*": ["src/*"],
22
22
  "@/web/*": ["src/web/*"],
23
23
  "@/node/*": ["src/node/*"],
24
- "@soederpop/luca": ["src/node.ts"],
25
- "@soederpop/luca/node": ["src/node.ts"],
26
- "@soederpop/luca/node/*": ["src/node/*"],
27
- "@soederpop/luca/agi": ["src/agi/index.ts"],
28
- "@soederpop/luca/agi/*": ["src/agi/*"],
29
- "@soederpop/luca/web": ["src/browser.ts"],
30
- "@soederpop/luca/web/*": ["src/web/*"],
31
- "@soederpop/luca/schemas": ["src/schemas/base.ts"],
32
- "@soederpop/luca/schemas/*": ["src/schemas/*"],
33
- "@soederpop/luca/container": ["src/container.ts"],
34
- "@soederpop/luca/client": ["src/client.ts"],
35
- "@soederpop/luca/feature": ["src/feature.ts"]
24
+ "luca": ["src/node.ts"],
25
+ "luca/node": ["src/node.ts"],
26
+ "luca/node/*": ["src/node/*"],
27
+ "luca/agi": ["src/agi/index.ts"],
28
+ "luca/agi/*": ["src/agi/*"],
29
+ "luca/web": ["src/browser.ts"],
30
+ "luca/web/*": ["src/web/*"],
31
+ "luca/schemas": ["src/schemas/base.ts"],
32
+ "luca/schemas/*": ["src/schemas/*"],
33
+ "luca/container": ["src/container.ts"],
34
+ "luca/client": ["src/client.ts"],
35
+ "luca/feature": ["src/feature.ts"]
36
36
  },
37
37
 
38
38
  // Best practices