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
@@ -113,6 +113,7 @@ jobs:
113
113
  run: |
114
114
  codesign --sign "Developer ID Application: Demitra Del Fiacco (77WL45HR8M)" \
115
115
  --force --options runtime --timestamp dist/release/luca-darwin-x64
116
+ codesign --remove-signature dist/release/luca-darwin-arm64
116
117
  codesign --sign "Developer ID Application: Demitra Del Fiacco (77WL45HR8M)" \
117
118
  --force --options runtime --timestamp dist/release/luca-darwin-arm64
118
119
 
package/CLAUDE.md CHANGED
@@ -14,20 +14,28 @@ The `container` and its helpers are perfect for scripts and long running service
14
14
 
15
15
  On the frontend the browser container is perfect for highly reactive, stateful web applications, especially works well with React.
16
16
 
17
+ ## Developer Standards
18
+
19
+ - Please try not to have broken tests committed to the build and let them slide. Encourage me to fix them so they dont grow out of control.
20
+ - When working on features, clients, servers, or other helpers, the introspection system relies on good zod descriptions, and good jsdoc descriptions
21
+
22
+
17
23
  ## The `luca` CLI
18
24
 
19
25
  - in dev, `bun run src/cli/cli.ts` is the same as `luca`
20
26
 
21
27
  - in prod, or educational material, `luca` refers to the binary build. In this mode, it can work in any project, and load `commands/` and `endpoints/` through its VM and therefore allows folders of these modules which don't depend on anything from NPM to extend the CLI and be used in commands like `luca serve` to run a local express server
22
28
 
23
- - The `luca` cli is an extremely helpful tool.
24
- - it runs code `luca eval "container.features.available"`
29
+ - The `luca` cli is an extremely helpful tool.
30
+ - it runs code `luca eval "container.features.available"`
25
31
  - it generates docs:
26
32
  - `luca describe diskCache`
27
33
  - `luca describe` describe the container itself
28
34
  - `luca describe servers` describe which servers are available
29
35
  - `luca describe ui.banner` describe a specific method or getter on a helper
30
36
  - the arguments to describe are pretty forgiving and permissive
37
+ - `luca chat` — start an interactive chat session with an assistant
38
+ - `luca scaffold assistant <name>` — generate boilerplate for a new assistant
31
39
 
32
40
  **IMPORTANT NOTE** When trying to investigate features, clients, servers, etc, see if these tools can help you first instead of searching for files and reading them that way. If youw ant to understand what they do, vs how theyre actually implemented
33
41
 
package/README.md CHANGED
@@ -1,26 +1,33 @@
1
1
  # Luca
2
2
 
3
3
  **Lightweight Universal Conversational Architecture**
4
+ *(aka Le Ultimate Component Architecture)*
4
5
 
5
- A single binary CLI that ships 40+ self-documenting features, clients, and servers. No `npm install`, no setup download it and start building.
6
+ An agent-native TypeScript runtime that ships as a single binaryand builds yours too.
6
7
 
7
- Luca gives you a `container` object think of it like a Docker container for your application runtime. It's a per-process singleton, event bus, state machine, and dependency injector all in one. Layer your own features, clients, servers, commands, and endpoints on top of the base `NodeContainer` (server) or `WebContainer` (browser), then bundle it into your own single-file executable or browser build.
8
+ Luca gives humans and AI agents the same architectural map: one self-documenting `container` object with typed features, clients, servers, commands, state, events, and runtime docs. The agent doesn't guess at architecture it discovers it. No `npm install`, no `node_modules`, no supply chain exposure, no ceremony.
8
9
 
9
- The `AGIContainer` extends the node stack with features, clients, and servers for building AI assistants — wrappers around major coding models, tool orchestration, and UIs to visualize them working.
10
+ ## What Makes Luca Different
10
11
 
11
- ## Installation
12
+ AI agents today either generate sprawling ad-hoc code or fight against frameworks that weren't designed for them. They don't know what's available, what conventions to follow, or where to put things. The result is brittle, unreviewable output that drifts further from the codebase with every generation.
13
+
14
+ Luca solves this with three ideas:
15
+
16
+ **One introspectable container.** Every Luca app has a single `container` — a dependency-injected runtime that carries features, clients, servers, commands, endpoints, observable state, and an event bus. Every component describes itself: constructor options, method signatures, events emitted, state shape. The human reads the same docs the agent reads. There is one way to do things.
12
17
 
13
- ### Quick install (macOS/Linux)
18
+ **Single binary in, single binary out.** Luca ships as a standalone binary. No runtime dependencies, no package manager, no exposure to the npm supply chain. You use it to build your project, then compile your project into its own standalone binary with your custom commands, features, endpoints, and assistants baked in.
19
+
20
+ **The assistant is a first-class citizen.** Luca's `Assistant` class can `use()` any feature, client, or server in the container — inheriting its tools automatically. The assistant doesn't need hand-written tool definitions. It discovers capabilities from the runtime it's embedded in.
21
+
22
+ ## Installation
14
23
 
15
24
  ```sh
16
25
  curl -fsSL https://luca-js.soederpop.com/install.sh | bash
17
26
  ```
18
27
 
19
- This detects your platform, downloads the right binary, and puts `luca` in your path. Done.
28
+ Detects your platform, downloads the binary, puts `luca` in your path. Done.
20
29
 
21
- ### Manual download
22
-
23
- Grab the latest release for your platform from [GitHub Releases](https://github.com/soederpop/luca/releases/latest):
30
+ Or grab a release directly from [GitHub Releases](https://github.com/soederpop/luca/releases/latest):
24
31
 
25
32
  | Platform | Binary |
26
33
  |----------|--------|
@@ -30,137 +37,149 @@ Grab the latest release for your platform from [GitHub Releases](https://github.
30
37
  | Linux ARM64 | `luca-linux-arm64` |
31
38
  | Windows x64 | `luca-windows-x64.exe` |
32
39
 
33
- ### Verify
34
-
35
40
  ```sh
36
41
  luca --version
37
- # luca v0.0.34 (main@325a0ee) built 2026-03-25T06:10:28Z
38
42
  ```
39
43
 
40
44
  ## Quick Start
41
45
 
42
- ### Bootstrap a new project
43
-
44
46
  ```sh
45
47
  luca bootstrap my-app
46
48
  cd my-app
47
49
  ```
48
50
 
49
- Or just run `luca bootstrap` and it'll ask you for a project name. This scaffolds a project with `commands/`, `endpoints/`, `features/`, `docs/`, and AI assistant configuration — everything wired up and ready to extend.
51
+ This scaffolds a project with `commands/`, `endpoints/`, `features/`, `docs/`, and AI assistant configuration — everything wired up and ready to extend.
50
52
 
51
- ### Explore
53
+ Now explore what the runtime can do:
52
54
 
53
55
  ```sh
54
56
  luca # list all commands
55
- luca describe features # index of 40+ features
56
- luca describe fs # full docs for any feature
57
+ luca describe features # see every available feature
58
+ luca describe fs # full docs for a specific feature
57
59
  luca describe fs.readFile # drill into a specific method
58
- luca eval "container.features.available" # run code with the container in scope
60
+ luca eval "container.features.available" # run code against the live container
59
61
  luca console # full REPL
60
62
  ```
61
63
 
62
- ### Run scripts and markdown
64
+ This is the core loop: discover what's available, evaluate code against it, build on top of it. Your AI assistant does the same thing.
63
65
 
64
- `luca run` executes TypeScript, JavaScript, and markdown files. Markdown files have their code blocks executed in order, with `container` already in scope — no imports needed:
66
+ ## The Container
65
67
 
66
- ````md
67
- # my-script.md
68
-
69
- Grab some data and print it:
68
+ One import. One object. Everything on it.
70
69
 
71
70
  ```ts
72
- const fs = container.feature('fs')
73
- const files = await fs.readdir('.')
74
- console.log(`Found ${files.length} files`)
71
+ import container from 'luca'
72
+
73
+ container.features.available // ['fs', 'git', 'proc', 'vault', 'yaml', 'sqlite', ...]
74
+ container.clients.available // ['rest', 'websocket', ...]
75
+ container.servers.available // ['express', 'websocket', 'ipc', 'mcp', ...]
75
76
  ```
76
77
 
77
- Then do something with it:
78
+ The container is a singleton — a per-process global that acts as dependency injector, event bus, and state machine. Features, clients, and servers are lazy-loaded from registries. Every helper carries introspection metadata that powers `luca describe`, the REPL, and agent tool discovery.
78
79
 
79
80
  ```ts
80
- const yaml = container.feature('yaml')
81
- console.log(yaml.stringify({ files }))
82
- ```
83
- ````
84
-
85
- ```sh
86
- luca run my-script.md
81
+ const fs = container.feature('fs')
82
+ const rest = container.client('rest', { baseURL: 'https://api.example.com' })
83
+ const server = container.server('express')
87
84
  ```
88
85
 
89
- Each block shares state with the previous ones, so variables defined in one block are available in the next. Use `--safe` to require approval before each block, or `--console` to drop into a REPL afterward with all the accumulated context. **Note:** if your block uses top-level awaits, we can't preserve context. You can use `container.addContext({ yourVariable })` and it will be available as a global variable in future blocks.
86
+ No imports beyond the container. No `require('fs')`, no `import axios`, no `npm install anything`. The container provides file I/O, HTTP clients, databases, YAML parsing, git operations, browser automation, terminal UI, semantic search, encryption, and more all typed, all documented, all discoverable at runtime.
90
87
 
91
- ### Serve
88
+ ### In the browser
92
89
 
93
- ```sh
94
- luca serve # serves endpoints/ folder as HTTP routes
90
+ ```js
91
+ import container from 'https://esm.sh/luca/web'
95
92
  ```
96
93
 
97
- See [`docs/CLI.md`](./docs/CLI.md) for the full CLI reference.
94
+ Same singleton pattern, optimized for browser features. `window.luca` is set automatically.
98
95
 
99
- ## Importing the container into your own scripts / modules
96
+ ## Build an Assistant
100
97
 
101
- ```ts
102
- import container from '@soederpop/luca'
103
- ```
104
-
105
- That's it — you get one object with everything on it. No factory function, no setup. It's a singleton.
98
+ The assistant is the interface that ties everything together. It can `use()` any module in the container, automatically inheriting that module's tools:
106
99
 
107
- We do export the framework classes (`WebContainer`, `Feature`, `Client`, `Server`, etc.) if you want to extend them, but for using the system you only ever need the default export.
108
-
109
- ### In the browser via esm.sh
100
+ ```ts
101
+ import container from 'luca'
110
102
 
111
- **Static import:**
103
+ const browser = container.feature('browserUse', { headed: true })
104
+ const assistant = container.feature('assistant', {
105
+ systemPrompt: 'You are a web research assistant.',
106
+ model: 'gpt-4.1-mini',
107
+ })
112
108
 
113
- ```js
114
- import container from 'https://esm.sh/@soederpop/luca/web'
109
+ // browserUse injects its tools — open, click, type, screenshot, extract, etc.
110
+ assistant.use(browser)
111
+ await assistant.start()
115
112
 
116
- container.features.available // ['fetch', 'state', 'ui', ...]
113
+ await assistant.ask('Go to hacker news and tell me the top 3 stories')
117
114
  ```
118
115
 
119
- **Dynamic import:**
116
+ The assistant doesn't need hand-written tool schemas. When it calls `use(browser)`, it gets every tool that `browserUse` exposes — typed, documented, ready to invoke. Swap `browserUse` for `fs` or `git` or `sqlite` and the assistant gets a completely different toolkit from the same pattern.
120
117
 
121
- ```js
122
- const { default: container } = await import('https://esm.sh/@soederpop/luca/web')
118
+ This is what agent-native means: the runtime teaches the agent what it can do.
123
119
 
124
- container.features.available // same singleton
125
- ```
120
+ ### The Assistant as Operator
126
121
 
127
- With dynamic import you have to pick it off `default` yourself there's no top-level default binding like the static form gives you. Either way, it's the same singleton container, and `window.luca` is set automatically so you can poke at it from the console.
122
+ Most agent frameworks give you a chat loop with tool calls bolted on. Luca gives you an agent that can operate real infrastructure.
128
123
 
129
- ## How It Works
124
+ The container has servers — REST, WebSocket, IPC. It has clients for all of them. It has process management, a VM, file I/O, databases, git, docker, SSH, even GPU compute over RunPod. The assistant can `use()` any combination of these, which means you can build agents that:
130
125
 
131
- ### Self-documenting at runtime
126
+ - **Stand up and manage servers** — spin up an Express server, add routes, react to incoming requests
127
+ - **Listen to events across transports** — WebSocket messages, IPC signals, HTTP webhooks, file system changes
128
+ - **Spawn and manage processes** — launch child processes, monitor their output, kill them when done — locally, over SSH, in Docker containers, or on remote GPU instances
129
+ - **Inspect and react to state** — every helper has observable state and an event bus; the assistant can watch for changes and act on them autonomously
130
+ - **Run code in a sandboxed VM** — execute untrusted code safely, evaluate expressions, build REPL-like workflows
132
131
 
133
- Every helper (feature, client, server) carries its own introspection metadata constructor options, observable state shape, events emitted, environment variables used, method signatures. This powers `luca describe`, works in the REPL, and enables metaprogramming.
132
+ The assistant isn't answering questions in a chat window. It's running your infrastructure, reacting to events in real time, and coordinating across multiple systems all through the same `container` it already knows how to discover.
134
133
 
135
134
  ```ts
136
- import container from '@soederpop/luca'
135
+ const assistant = container.feature('assistant', {
136
+ systemPrompt: 'You manage the deployment pipeline. Monitor builds, restart failed services, report status.',
137
+ model: 'gpt-4.1-mini',
138
+ })
137
139
 
138
- container.features.available // ['fs','git','proc','vault',...]
139
- container.clients.available // ['rest','websocket']
140
- container.servers.available // ['express','websocket','ipc','mcp']
140
+ assistant.use(container.feature('proc'))
141
+ assistant.use(container.server('express'))
142
+ assistant.use(container.server('websocket'))
143
+ assistant.use(container.feature('docker'))
144
+ assistant.use(container.feature('fs'))
141
145
 
142
- container.features.describe() // markdown summary of all features
143
- container.feature('fs').introspect() // json
144
- container.feature('fs').introspectAsText() // markdown
146
+ await assistant.start()
145
147
  ```
146
148
 
147
- ### Content-aware documentation
149
+ That's an agent harness. Not a chatbot — an operator.
148
150
 
149
- The node container includes `container.docs` powered by [Contentbase](https://github.com/soederpop/contentbase) — query your project's markdown documentation like a database:
151
+ ## Build Your Own Binary
150
152
 
151
- ```ts
152
- await container.docs.load()
153
- const { Tutorial } = container.docs.models
154
- const tutorials = await container.docs.query(Tutorial).fetchAll()
153
+ Luca isn't just a tool you use — it's a tool that builds tools.
154
+
155
+ Bootstrap a project, add your own commands, features, endpoints, and assistants, then compile the whole thing into a standalone binary:
156
+
157
+ ```sh
158
+ luca bootstrap my-tool
159
+ cd my-tool
160
+
161
+ # add your own commands, features, endpoints
162
+ luca scaffold command analyze --description "Run analysis on input data"
163
+ luca scaffold feature myCache --description "Custom caching layer"
164
+ luca scaffold endpoint status --description "Health check endpoint"
165
+
166
+ # compile to a single binary
167
+ luca bundle
155
168
  ```
156
169
 
157
- ### Project extensions
170
+ The output is a self-contained executable. No node, no bun, no npm on the target machine. Your users download one file and run it. Your custom commands show up in `my-tool --help`. Your assistant ships inside.
158
171
 
159
- Drop files into convention-based folders and they're auto-discovered:
172
+ ## Project Structure
160
173
 
161
- - `commands/` custom CLI commands, run via `luca <name>`
162
- - `endpoints/` — file-based HTTP routes, served via `luca serve`
163
- - `features/` — custom container features
174
+ Convention-based folders are auto-discovered:
175
+
176
+ ```
177
+ commands/ custom CLI commands → luca <name>
178
+ endpoints/ file-based HTTP routes → luca serve
179
+ features/ custom container features → container.feature('<name>')
180
+ assistants/ AI assistants with system prompts and tools
181
+ docs/ content documents queryable via container.docs
182
+ ```
164
183
 
165
184
  Generate boilerplate with `luca scaffold`:
166
185
 
@@ -170,33 +189,40 @@ luca scaffold feature myCache --description "Custom caching layer"
170
189
  luca scaffold endpoint users --description "User management API"
171
190
  ```
172
191
 
173
- ### Building an assistant
192
+ ## Run Scripts and Markdown
174
193
 
175
- Features can inject their own tools into an assistant via `assistant.use()`. Here's an assistant that can browse the web:
194
+ `luca run` executes TypeScript, JavaScript, and markdown files with the container in scope:
176
195
 
177
- ```ts
178
- import container from '@soederpop/luca'
196
+ ````md
197
+ # my-script.md
179
198
 
180
- const browser = container.feature('browserUse', { headed: true })
181
- const assistant = container.feature('assistant', {
182
- systemPrompt: 'You are a web research assistant. Use your browser tools to find information.',
183
- model: 'gpt-4.1-mini',
184
- })
199
+ ```ts
200
+ const fs = container.feature('fs')
201
+ const files = await fs.readdir('.')
202
+ console.log(`Found ${files.length} files`)
203
+ ```
185
204
 
186
- // browserUse injects its tools — open, click, type, screenshot, extract, etc.
187
- assistant.use(browser)
188
- await assistant.start()
205
+ ```ts
206
+ const yaml = container.feature('yaml')
207
+ console.log(yaml.stringify({ files }))
208
+ ```
209
+ ````
189
210
 
190
- await assistant.ask('Go to hacker news and tell me what the top 3 stories are about')
211
+ ```sh
212
+ luca run my-script.md
191
213
  ```
192
214
 
193
- ### AI coding assistant integration
215
+ Blocks share state. Use `--safe` for approval before each block, `--console` to drop into a REPL afterward with accumulated context.
194
216
 
195
- The CLI works great alongside Claude Code, Codex, and other coding assistants:
217
+ ## AI Coding Assistant Integration
196
218
 
197
- - `luca describe` gives assistants full API docs for any helper
198
- - `luca eval` lets them test container expressions before committing code
199
- - `luca sandbox-mcp` provides a REPL and doc browser as an MCP server
219
+ Luca is designed to work alongside Claude Code, Codex, and other AI coding assistants:
220
+
221
+ - `luca describe` gives the assistant full API docs for any helper — method signatures, options, events, state shape
222
+ - `luca eval` lets the assistant test container expressions before writing code
223
+ - `luca sandbox-mcp` exposes a REPL and doc browser as an MCP server
224
+
225
+ The assistant doesn't need to read source files to understand the framework. It asks the framework directly.
200
226
 
201
227
  ## Development
202
228
 
@@ -213,15 +239,10 @@ bun install
213
239
  bun run setup
214
240
  ```
215
241
 
216
- `bun run setup` applies `git update-index --skip-worktree` to the build artifact stubs so local changes to generated files (from running `build:introspection`, `build:scaffolds`, etc.) are never accidentally committed.
217
-
218
242
  ### Running in dev
219
243
 
220
244
  ```sh
221
- # Run the CLI from source (equivalent to the luca binary)
222
- bun run src/cli/cli.ts
223
-
224
- # Examples
245
+ bun run src/cli/cli.ts # same as luca binary
225
246
  bun run src/cli/cli.ts describe features
226
247
  bun run src/cli/cli.ts eval "container.features.available"
227
248
  ```
@@ -229,11 +250,8 @@ bun run src/cli/cli.ts eval "container.features.available"
229
250
  ### Testing
230
251
 
231
252
  ```sh
232
- # Unit tests
233
- bun test
234
-
235
- # Integration tests (may require API keys / env vars)
236
- bun run test:integration
253
+ bun test # unit tests
254
+ bun run test:integration # integration tests (may require API keys)
237
255
  ```
238
256
 
239
257
  ### Building the binary
@@ -242,13 +260,13 @@ bun run test:integration
242
260
  bun run compile
243
261
  ```
244
262
 
245
- This runs the full pipeline: introspection generation, scaffold templates, bootstrap code, python bridge, build stamp, then compiles to `dist/luca` via Bun's native compiler.
263
+ Runs the full pipeline: introspection generation, scaffold templates, build stamp, then compiles to `dist/luca` via Bun's native compiler.
246
264
 
247
265
  ### Project structure
248
266
 
249
267
  ```
250
268
  src/
251
- cli/ CLI entry point and commands
269
+ cli/ CLI entry point and built-in commands
252
270
  node/ NodeContainer and server-side features
253
271
  web/ WebContainer and browser features
254
272
  agi/ AGIContainer — AI assistant layer
@@ -1,10 +1,15 @@
1
1
  ---
2
+ model: qwen/qwen-3.6-27b
3
+ clientOptions:
4
+ baseURL: http://chief:1234/v1
5
+ apiKey: sk-local
6
+ contextWindow: 64000
2
7
  skills:
3
8
  - luca-framework
4
9
  ---
5
10
  # Coding Assistant
6
11
 
7
- You are a Luca Framework coding assistant. You read, search, understand, and modify codebases that use the @soederpop/luca framework. This framework allows people to build local, secure, AI native applications with a just a single download. The luca CLI is a dependency injection container designed for students and AI Assistants and can teach them everything they need to know, as it ships with its own documentation tool designed for an Agent to be able to progressively learn what it needs when it needs it.
12
+ You are a Luca Framework coding assistant. You read, search, understand, and modify codebases that use the luca framework. This framework allows people to build local, secure, AI native applications with a just a single download. The luca CLI is a dependency injection container designed for students and AI Assistants and can teach them everything they need to know, as it ships with its own documentation tool designed for an Agent to be able to progressively learn what it needs when it needs it.
8
13
 
9
14
  ## Luca First
10
15
 
@@ -1,4 +1,4 @@
1
- import type { Assistant, AGIContainer } from '@soederpop/luca/agi'
1
+ import type { Assistant, AGIContainer } from 'luca/agi'
2
2
 
3
3
  declare global {
4
4
  var assistant: Assistant
@@ -1,4 +1,4 @@
1
- import type { AGIContainer, Assistant } from "@soederpop/luca/agi"
1
+ import type { AGIContainer, Assistant } from "luca/agi"
2
2
 
3
3
  declare global {
4
4
  var assistant: Assistant
@@ -1,4 +1,4 @@
1
- import container from '@soederpop/luca/agi'
1
+ import container from 'luca/agi'
2
2
  import { z } from 'zod'
3
3
 
4
4
  export const use = [