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,166 +0,0 @@
1
- ---
2
- title: "Bootstrap: Learning the Container at Runtime"
3
- tags:
4
- - bootstrap
5
- - introspection
6
- - repl
7
- - agent
8
- - discovery
9
- - quickstart
10
- ---
11
- # Bootstrap: Learning the Container at Runtime
12
-
13
- You don't need to memorize the Luca API. The container tells you everything it can do — at runtime. This tutorial teaches you the discovery pattern so you can explore any feature, client, server, or command without reading docs.
14
-
15
- ## Start with `luca eval`
16
-
17
- The `eval` command runs JavaScript with the container in scope. All features are available as top-level variables.
18
-
19
- ```bash
20
- # What features are available?
21
- luca eval "container.features.available"
22
- # => ['fs', 'git', 'proc', 'vm', 'networking', 'os', 'grep', ...]
23
-
24
- # What clients?
25
- luca eval "container.clients.available"
26
-
27
- # What servers?
28
- luca eval "container.servers.available"
29
-
30
- # What commands?
31
- luca eval "container.commands.available"
32
- ```
33
-
34
- ## Describe Anything
35
-
36
- The `luca describe` command generates API docs for any helper. It reads JSDoc, Zod schemas, and method signatures to produce markdown documentation.
37
-
38
- ```bash
39
- # Describe the container itself
40
- luca describe
41
-
42
- # Describe a feature
43
- luca describe fs
44
-
45
- # Describe multiple at once
46
- luca describe git fs proc
47
-
48
- # Show only specific sections
49
- luca describe fs --methods --examples
50
-
51
- # Describe all features
52
- luca describe features
53
- ```
54
-
55
- In code, the same works via registries:
56
-
57
- ```js
58
- container.features.describe('fs') // markdown docs for fs
59
- container.features.describeAll() // condensed overview of all features
60
- container.clients.describe('rest') // docs for the rest client
61
- ```
62
-
63
- ## The Discovery Pattern
64
-
65
- Every registry follows the same shape. Once you know the pattern, you can explore anything:
66
-
67
- ```js
68
- // List what's available
69
- container.features.available
70
- container.clients.available
71
- container.servers.available
72
- container.commands.available
73
-
74
- // Get docs for a specific helper
75
- container.features.describe('fs')
76
- container.clients.describe('rest')
77
- container.servers.describe('express')
78
-
79
- // Check if something exists
80
- container.features.has('fs') // => true
81
-
82
- // Get a helper instance
83
- const fs = container.feature('fs')
84
- const rest = container.client('rest')
85
- ```
86
-
87
- ## Instance Introspection
88
-
89
- Once you have a helper instance, it can describe itself:
90
-
91
- ```js
92
- const fs = container.feature('fs')
93
-
94
- // Structured introspection (object with methods, getters, events, state, options)
95
- fs.introspect()
96
-
97
- // Human-readable markdown
98
- fs.introspectAsText()
99
- ```
100
-
101
- The container itself is introspectable:
102
-
103
- ```js
104
- container.introspect() // structured object with all registries, state, events
105
- container.introspectAsText() // full markdown overview
106
- ```
107
-
108
- ## The REPL
109
-
110
- For interactive exploration, use `luca console`. It gives you a persistent REPL with the container and all features in scope:
111
-
112
- ```bash
113
- luca console
114
- ```
115
-
116
- Inside the REPL, you can tab-complete, call methods, and explore interactively. Variables survive across lines.
117
-
118
- ## Feature Shortcuts
119
-
120
- In eval and REPL contexts, core features are available as top-level variables — no need to call `container.feature()`:
121
-
122
- ```bash
123
- luca eval "fs.readFile('package.json')"
124
- luca eval "git.branch"
125
- luca eval "proc.exec('ls')"
126
- luca eval "grep.search('.', 'TODO')"
127
- ```
128
-
129
- ## Quick Reference
130
-
131
- | Want to know... | Ask |
132
- |--------------------------------|----------------------------------------|
133
- | What registries exist? | `container.registries` |
134
- | What features are available? | `container.features.available` |
135
- | Full docs for a feature? | `container.features.describe('fs')` |
136
- | All features at a glance? | `container.features.describeAll()` |
137
- | Structured introspection? | `feature.introspect()` |
138
- | What state does it have? | `feature.state.current` |
139
- | What events does it emit? | `feature.introspect().events` |
140
- | Full container overview? | `container.introspectAsText()` |
141
- | CLI docs for a helper? | `luca describe <name>` |
142
-
143
- ## Gotchas
144
-
145
- ### `paths.join()` vs `paths.resolve()`
146
-
147
- `container.paths.join()` and `container.paths.resolve()` are Node's `path.join` and `path.resolve` curried with `container.cwd`. This means `paths.join()` always prepends `cwd` — even if you pass an absolute path as the first argument.
148
-
149
- ```js
150
- // WRONG — paths.join will prepend cwd to the absolute tmpdir path
151
- const bad = container.paths.join(os.tmpdir, 'mydir')
152
- // => "/your/project/tmp/mydir" (not what you want)
153
-
154
- // RIGHT — paths.resolve respects absolute first args
155
- const good = container.paths.resolve(os.tmpdir, 'mydir')
156
- // => "/tmp/mydir"
157
- ```
158
-
159
- **Rule of thumb:** Use `paths.join()` for project-relative paths, `paths.resolve()` when the base is already absolute.
160
-
161
- ## What's Next
162
-
163
- - [The Container](./02-container.md) — deep dive into state, events, and lifecycle
164
- - [Scripts](./03-scripts.md) — run scripts and executable markdown notebooks
165
- - [Features Overview](./04-features-overview.md) — explore built-in features
166
- - [Writing Commands](./08-commands.md) — add CLI commands to your project
@@ -1,106 +0,0 @@
1
- ---
2
- title: Getting Started with Luca
3
- tags: [setup, quickstart, project, init]
4
- ---
5
-
6
- # Getting Started with Luca
7
-
8
- ## Prerequisites
9
-
10
- - [Bun](https://bun.sh) installed (Luca's runtime)
11
- - A new or existing bun project
12
-
13
- ## Create a New Project
14
-
15
- ```bash
16
- mkdir my-app && cd my-app
17
- bun init -y
18
- bun add @soederpop/luca
19
- ```
20
-
21
- ## Project Structure
22
-
23
- A typical Luca project looks like this:
24
-
25
- ```
26
- my-app/
27
- ├── package.json
28
- ├── endpoints/ # File-based HTTP routes (auto-discovered by `luca serve`)
29
- │ ├── health.ts
30
- │ └── users.ts
31
- ├── commands/ # Project-local CLI commands (auto-discovered by `luca`)
32
- │ └── seed.ts
33
- ├── assistants/ # AI assistants (file-based convention)
34
- │ └── my-helper/
35
- │ ├── CORE.md
36
- │ ├── tools.ts
37
- │ ├── hooks.ts
38
- │ └── docs/
39
- ├── public/ # Static files served by `luca serve`
40
- │ └── index.html
41
- └── scripts/ # Standalone scripts that use the container
42
- └── migrate.ts
43
- ```
44
-
45
- ## The Container
46
-
47
- Everything in Luca revolves around the **container**. It is a per-process singleton that acts as your dependency injector, event bus, and state machine.
48
-
49
- In scripts, you create one directly:
50
-
51
- ```typescript
52
- import container from '@soederpop/luca/node'
53
-
54
- // Now you have access to all features
55
- const fs = container.fs // File system operations
56
- const git = container.git // Git utilities (branch, sha, lsFiles, etc.)
57
- const ui = container.ui // Terminal UI (colors, prompts, figlet)
58
- const proc = container.feature('proc') // Process execution
59
- ```
60
-
61
- In endpoints and commands, the container is provided for you via context:
62
-
63
- ```typescript
64
- // endpoints/health.ts
65
- export const path = '/health'
66
-
67
- export async function get(_params: any, ctx: EndpointContext) {
68
- const { container } = ctx
69
- return { status: 'ok', uptime: process.uptime() }
70
- }
71
- ```
72
-
73
- ## Running Your Project
74
-
75
- ### Start the API server
76
-
77
- ```bash
78
- luca serve
79
- # or with options:
80
- luca serve --port 4000 --endpointsDir src/endpoints
81
- ```
82
-
83
- This auto-discovers your `endpoints/` directory, mounts all routes, and generates an OpenAPI spec at `/openapi.json`.
84
-
85
- ### Run a CLI command
86
-
87
- ```bash
88
- luca seed --count 10
89
- ```
90
-
91
- This auto-discovers `commands/seed.ts` from your project and runs it.
92
-
93
- ### Run a script
94
-
95
- ```bash
96
- luca run scripts/migrate.ts
97
- ```
98
-
99
- ## What's Next
100
-
101
- - [The Container](./02-container.md) -- deep dive into the container
102
- - [Scripts and Markdown Notebooks](./03-scripts.md) -- run scripts and executable markdown
103
- - [Using Features](./04-features-overview.md) -- explore built-in features
104
- - [Servers](./06-servers.md) -- set up Express and WebSocket servers
105
- - [Writing Endpoints](./07-endpoints.md) -- build your API routes
106
- - [Writing Commands](./08-commands.md) -- add CLI commands to your project
@@ -1,210 +0,0 @@
1
- ---
2
- title: The Container
3
- tags: [container, singleton, state, events, registries, dependency-injection]
4
- ---
5
-
6
- # The Container
7
-
8
- The container is the heart of every Luca application. It is a per-process singleton that provides:
9
-
10
- - **Dependency injection** via factory methods and registries
11
- - **Observable state** that you can watch for changes
12
- - **Event bus** for decoupled communication
13
- - **Registries** for discovering available helpers
14
-
15
- ## Getting the Container
16
-
17
- ```typescript
18
- import container from '@soederpop/luca'
19
- ```
20
-
21
- 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:
22
-
23
- ```typescript
24
- import container from '@soederpop/luca/node' // Always NodeContainer
25
- import container from '@soederpop/luca/web' // Always WebContainer
26
- ```
27
-
28
- 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.
29
-
30
- ## Registries
31
-
32
- Every helper type has a registry. Registries let you discover what's available and create instances:
33
-
34
- ```typescript
35
- // What features are available?
36
- container.features.available
37
- // => ['fs', 'git', 'proc', 'vm', 'ui', 'networking', 'os', 'diskCache', 'contentDb', ...]
38
-
39
- // Get documentation for a feature
40
- container.features.describe('fs')
41
-
42
- // Get documentation for all features
43
- container.features.describeAll()
44
-
45
- // Check if something is registered
46
- container.features.has('diskCache')
47
-
48
- // Same pattern for all helper types:
49
- container.servers.available // ['express', 'websocket']
50
- container.clients.available // ['rest', 'graph', 'websocket']
51
- container.commands.available // ['serve', 'run', ...]
52
- ```
53
-
54
- ## Factory Methods
55
-
56
- Create helper instances through the container's factory methods:
57
-
58
- ```typescript
59
- // Features (cached by id + options hash)
60
- const fs = container.feature('fs')
61
- const cache = container.feature('diskCache', { path: './cache' })
62
-
63
- // Servers
64
- const server = container.server('express', { port: 3000, cors: true })
65
-
66
- // Clients
67
- const api = container.client('rest', { baseURL: 'https://api.example.com' })
68
- ```
69
-
70
- Factory results are **cached**. Calling `container.feature('fs')` twice returns the same instance. Different options produce different instances.
71
-
72
- ## Enabled Features (Shortcuts)
73
-
74
- Some features are "enabled" on the container, giving them shortcut access:
75
-
76
- ```typescript
77
- // These are equivalent:
78
- container.feature('fs')
79
- container.fs
80
-
81
- // Auto-enabled features:
82
- container.fs // File system
83
- container.git // Git operations
84
- container.proc // Process execution
85
- container.vm // JavaScript VM
86
- container.ui // Terminal UI
87
- container.os // OS info
88
- container.networking // Port finding, availability
89
- ```
90
-
91
- To enable your own feature:
92
-
93
- ```typescript
94
- const myFeature = container.feature('myFeature', { enable: true })
95
- // Now accessible as container.myFeature
96
- ```
97
-
98
- ## Observable State
99
-
100
- The container (and every helper) has observable state:
101
-
102
- ```typescript
103
- // Set state
104
- container.state.set('ready', true)
105
-
106
- // Get state
107
- container.state.get('ready') // true
108
-
109
- // Get a snapshot of all state
110
- container.state.current
111
-
112
- // Observe all changes (changeType is 'add' | 'update' | 'delete')
113
- container.state.observe((changeType, key, value) => {
114
- console.log(`${key} ${changeType}:`, value)
115
- })
116
-
117
- // State has a version counter
118
- container.state.version // increments on every change
119
- ```
120
-
121
- ## Event Bus
122
-
123
- The container has a built-in event bus for decoupled communication:
124
-
125
- ```typescript
126
- // Listen for events
127
- container.on('featureEnabled', (featureName) => {
128
- console.log(`${featureName} was enabled`)
129
- })
130
-
131
- // Emit events
132
- container.emit('myCustomEvent', { some: 'data' })
133
-
134
- // One-time listener
135
- container.once('ready', () => console.log('Container is ready'))
136
-
137
- // Wait for an event (promise-based)
138
- await container.waitFor('ready')
139
- ```
140
-
141
- ## Plugins and `.use()`
142
-
143
- Extend the container with the `.use()` method:
144
-
145
- ```typescript
146
- // Enable a feature by name
147
- container.use('diskCache')
148
-
149
- // Attach a plugin
150
- container.use(MyPlugin)
151
- ```
152
-
153
- A plugin is any class with a static `attach(container)` method:
154
-
155
- ```typescript
156
- class MyPlugin {
157
- static attach(container) {
158
- // Add registries, factories, whatever you need
159
- container.myThing = new MyThing(container)
160
- return container
161
- }
162
- }
163
- ```
164
-
165
- ## Utilities
166
-
167
- The container provides common utilities so you don't need extra dependencies:
168
-
169
- ```typescript
170
- container.utils.uuid() // Generate a v4 UUID
171
- container.utils.hashObject({ foo: 'bar' }) // Deterministic hash
172
- container.utils.stringUtils.camelCase('my-var') // 'myVar'
173
- container.utils.stringUtils.kebabCase('MyVar') // 'my-var'
174
- container.utils.stringUtils.pluralize('feature') // 'features'
175
-
176
- // Lodash utilities
177
- const { uniq, groupBy, keyBy, debounce, throttle } = container.utils.lodash
178
- ```
179
-
180
- ## Path Utilities
181
-
182
- ```typescript
183
- container.paths.resolve('relative/path') // Resolve from cwd
184
- container.paths.join('a', 'b', 'c') // Join path segments
185
- container.paths.relative('/absolute/path') // Make relative to cwd
186
- ```
187
-
188
- ## Package Manifest
189
-
190
- Access the project's package.json:
191
-
192
- ```typescript
193
- container.manifest.name // "my-app"
194
- container.manifest.version // "0.1.0"
195
- container.manifest.dependencies
196
- ```
197
-
198
- ## Introspection
199
-
200
- Discover everything about the container at runtime:
201
-
202
- ```typescript
203
- // Structured introspection data
204
- const info = container.introspect()
205
-
206
- // Human-readable markdown
207
- const docs = container.introspectAsText()
208
- ```
209
-
210
- This is what makes Luca especially powerful for AI agents -- they can discover the entire API surface at runtime without reading documentation.
@@ -1,194 +0,0 @@
1
- ---
2
- title: Running Scripts and Markdown Notebooks
3
- tags: [scripts, luca-run, automation, bun, standalone, markdown, codeblocks, notebook]
4
- ---
5
-
6
- # Running Scripts and Markdown Notebooks
7
-
8
- `luca run` executes TypeScript/JavaScript files and markdown files. This is often the fastest way to try out Luca features, automate tasks, or build runnable documentation.
9
-
10
- ## Running a TypeScript Script
11
-
12
- ```bash
13
- luca run scripts/hello.ts
14
- ```
15
-
16
- ```typescript
17
- // scripts/hello.ts
18
- import container from '@soederpop/luca'
19
-
20
- console.log('Available features:', container.features.available)
21
- console.log('Git branch:', container.git.branch)
22
- console.log('OS:', container.os.platform, container.os.arch)
23
- ```
24
-
25
- The extension is optional -- `luca run scripts/hello` tries `.ts`, `.js`, and `.md` automatically.
26
-
27
- ## Running Markdown Files
28
-
29
- This is one of Luca's most useful features. `luca run` can execute markdown files as runnable notebooks. It walks through the document, renders the prose to the terminal, and executes each `ts` or `js` fenced codeblock in sequence. All blocks share the same VM context, so variables defined in one block are available in the next.
30
-
31
- ```bash
32
- luca run docs/tutorial.md
33
- ```
34
-
35
- ### How It Works
36
-
37
- Given a markdown file like this:
38
-
39
- ````markdown
40
- # Setup Tutorial
41
-
42
- First, let's see what's available (container is provided automatically):
43
-
44
- ```ts
45
- console.log(container.features.available)
46
- ```
47
-
48
- Now let's use the file system feature:
49
-
50
- ```ts
51
- const { files } = container.fs.walk('./src', { include: ['*.ts'] })
52
- console.log(`Found ${files.length} TypeScript files`)
53
- ```
54
-
55
- This block won't run because it's Python:
56
-
57
- ```python
58
- print("I'm skipped -- only ts and js blocks run")
59
- ```
60
- ````
61
-
62
- When you run `luca run docs/tutorial.md`, it:
63
-
64
- 1. Renders "# Setup Tutorial" and the prose as formatted markdown in your terminal
65
- 2. Displays the first codeblock, then executes it
66
- 3. Renders the next paragraph
67
- 4. Displays and executes the second codeblock (which can reference `container` from block 1)
68
- 5. Skips the Python block entirely (only `ts` and `js` blocks execute)
69
-
70
- ### Skipping Blocks
71
-
72
- Add `skip` in the code fence meta to prevent a block from running:
73
-
74
- ````markdown
75
- ```ts skip
76
- // This block is shown but NOT executed
77
- dangerousOperation()
78
- ```
79
- ````
80
-
81
- ### Safe Mode
82
-
83
- Use `--safe` to require manual approval before each block runs:
84
-
85
- ```bash
86
- luca run docs/tutorial.md --safe
87
- ```
88
-
89
- The runner will prompt "Run this block? (y/n)" before executing each codeblock. Great for walkthroughs where you want to pause and observe.
90
-
91
- ### Shared Context
92
-
93
- All codeblocks in a markdown file share a VM context. The context includes `console` and the full container context, so you can use container features without importing:
94
-
95
- ````markdown
96
- ```ts
97
- // Block 1: container is already available in the context
98
- const { files } = container.fs.walk('./src')
99
- ```
100
-
101
- ```ts
102
- // Block 2: `files` from block 1 is still in scope
103
- console.log(`Found ${files.length} files in src/`)
104
- ```
105
- ````
106
-
107
- ### Use Cases for Markdown Scripts
108
-
109
- - **Runnable tutorials** -- documentation that actually executes
110
- - **Onboarding guides** -- new developers run the guide and see real output
111
- - **Demo scripts** -- explain and execute in the same document
112
- - **Literate DevOps** -- annotated operational runbooks
113
-
114
- ## TypeScript Script Examples
115
-
116
- ### File Processor
117
-
118
- ```typescript
119
- // scripts/process-images.ts
120
- import container from '@soederpop/luca'
121
-
122
- const { fs, proc } = container
123
-
124
- const { files: images } = fs.walk('./uploads', { include: ['*.png', '*.jpg'] })
125
- console.log(`Processing ${images.length} images...`)
126
-
127
- for (const image of images) {
128
- console.log(` Optimizing: ${image}`)
129
- proc.exec(`optipng ${image}`)
130
- }
131
-
132
- console.log('Done.')
133
- ```
134
-
135
- ### Data Migration
136
-
137
- ```typescript
138
- // scripts/migrate-data.ts
139
- import container from '@soederpop/luca'
140
-
141
- const { fs } = container
142
-
143
- const api = container.client('rest', {
144
- baseURL: 'https://api.example.com',
145
- })
146
- await api.connect()
147
-
148
- const oldData = fs.readJson('./data/legacy-users.json')
149
- console.log(`Migrating ${oldData.length} users...`)
150
-
151
- for (const user of oldData) {
152
- await api.post('/users', {
153
- name: user.full_name,
154
- email: user.email_address,
155
- role: 'user',
156
- })
157
- console.log(` Migrated: ${user.full_name}`)
158
- }
159
-
160
- console.log('Migration complete.')
161
- ```
162
-
163
- ### Generate Report
164
-
165
- ```typescript
166
- // scripts/weekly-report.ts
167
- import container from '@soederpop/luca'
168
-
169
- const { git, fs } = container
170
-
171
- const branch = git.branch // getter, not a method
172
- const sha = git.sha // getter, not a method
173
- const files = await git.lsFiles()
174
- const { files: srcFiles } = fs.walk('./src', { include: ['*.ts'] })
175
-
176
- const report = `# Weekly Report
177
-
178
- - Branch: ${branch}
179
- - Commit: ${sha}
180
- - Tracked files: ${files.length}
181
- - Source files: ${srcFiles.length}
182
-
183
- Generated: ${new Date().toISOString()}
184
- `
185
-
186
- await fs.writeFile('./reports/weekly.md', report)
187
- console.log('Report generated: reports/weekly.md')
188
- ```
189
-
190
- ## Tips
191
-
192
- - **Use the container** -- don't import `fs` from Node directly. `container.fs` gives you the same operations with the benefit of working within the container ecosystem.
193
- - **Markdown scripts are great for prototyping** -- write a markdown file, mix explanation with code, run it, iterate.
194
- - **Use `--safe` for unfamiliar scripts** -- review each block before it runs.