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,238 +0,0 @@
1
- # MCPServer (servers.mcp)
2
-
3
- MCP (Model Context Protocol) server for exposing tools, resources, and prompts to AI clients like Claude Code. Uses the low-level MCP SDK Server class directly with Zod 4 native JSON Schema conversion. Register tools, resources, and prompts programmatically, then start the server over stdio (for CLI integration) or HTTP (for remote access).
4
-
5
- ## Usage
6
-
7
- ```ts
8
- container.server('mcp', {
9
- // Port number to listen on
10
- port,
11
- // Hostname or IP address to bind to
12
- host,
13
- // Transport type for MCP communication
14
- transport,
15
- // Server name reported to MCP clients
16
- serverName,
17
- // Server version reported to MCP clients
18
- serverVersion,
19
- // HTTP compatibility profile for MCP clients
20
- mcpCompat,
21
- // Stdio framing compatibility profile for MCP clients
22
- stdioCompat,
23
- })
24
- ```
25
-
26
- ## Options (Zod v4 schema)
27
-
28
- | Property | Type | Description |
29
- |----------|------|-------------|
30
- | `port` | `number` | Port number to listen on |
31
- | `host` | `string` | Hostname or IP address to bind to |
32
- | `transport` | `string` | Transport type for MCP communication |
33
- | `serverName` | `string` | Server name reported to MCP clients |
34
- | `serverVersion` | `string` | Server version reported to MCP clients |
35
- | `mcpCompat` | `string` | HTTP compatibility profile for MCP clients |
36
- | `stdioCompat` | `string` | Stdio framing compatibility profile for MCP clients |
37
-
38
- ## Methods
39
-
40
- ### tool
41
-
42
- Register an MCP tool. The tool's Zod schema is converted to JSON Schema for the protocol listing, and used for runtime argument validation. Tool handlers can return a string (auto-wrapped as text content) or a full CallToolResult object for advanced responses (images, errors, etc).
43
-
44
- **Parameters:**
45
-
46
- | Name | Type | Required | Description |
47
- |------|------|----------|-------------|
48
- | `name` | `string` | ✓ | Unique tool name |
49
- | `options` | `ToolRegistrationOptions` | ✓ | Tool schema, description, and handler |
50
-
51
- `ToolRegistrationOptions` properties:
52
-
53
- | Property | Type | Description |
54
- |----------|------|-------------|
55
- | `schema` | `z.ZodType` | |
56
- | `description` | `string` | |
57
- | `handler` | `Function | ((args: any, ctx: any) => any)` | |
58
-
59
- **Returns:** `this`
60
-
61
-
62
-
63
- ### resource
64
-
65
- Register an MCP resource. Resources expose data (files, configs, etc) that AI clients can read by URI. Accepts either a handler function directly or an options object with additional metadata (name, description, mimeType).
66
-
67
- **Parameters:**
68
-
69
- | Name | Type | Required | Description |
70
- |------|------|----------|-------------|
71
- | `uri` | `string` | ✓ | Unique resource URI (e.g. "project://readme") |
72
- | `handlerOrOptions` | `ResourceRegistrationOptions['handler'] | ResourceRegistrationOptions` | ✓ | Handler function or options object with handler |
73
-
74
- **Returns:** `this`
75
-
76
-
77
-
78
- ### prompt
79
-
80
- Register an MCP prompt. Prompts are reusable message templates that AI clients can invoke with optional string arguments.
81
-
82
- **Parameters:**
83
-
84
- | Name | Type | Required | Description |
85
- |------|------|----------|-------------|
86
- | `name` | `string` | ✓ | Unique prompt name |
87
- | `options` | `PromptRegistrationOptions` | ✓ | Prompt handler, optional args schema, and description |
88
-
89
- `PromptRegistrationOptions` properties:
90
-
91
- | Property | Type | Description |
92
- |----------|------|-------------|
93
- | `description` | `string` | |
94
- | `args` | `Record<string, z.ZodType>` | |
95
- | `handler` | `(args: Record<string, string | undefined>, ctx: MCPContext) => Promise<PromptMessage[]> | PromptMessage[]` | |
96
-
97
- **Returns:** `this`
98
-
99
-
100
-
101
- ### configure
102
-
103
- Configure the MCP protocol server and register all protocol handlers. Called automatically before start() if not already configured.
104
-
105
- **Returns:** `Promise<this>`
106
-
107
-
108
-
109
- ### start
110
-
111
- Start the MCP server with the specified transport.
112
-
113
- **Parameters:**
114
-
115
- | Name | Type | Required | Description |
116
- |------|------|----------|-------------|
117
- | `options` | `{
118
- transport?: 'stdio' | 'http'
119
- port?: number
120
- host?: string
121
- mcpCompat?: MCPCompatMode
122
- stdioCompat?: StdioCompatMode
123
- }` | | Transport configuration. Defaults to stdio. |
124
-
125
- `{
126
- transport?: 'stdio' | 'http'
127
- port?: number
128
- host?: string
129
- mcpCompat?: MCPCompatMode
130
- stdioCompat?: StdioCompatMode
131
- }` properties:
132
-
133
- | Property | Type | Description |
134
- |----------|------|-------------|
135
- | `transport` | `any` | 'stdio' for CLI integration, 'http' for remote access |
136
- | `port` | `any` | Port for HTTP transport (default 3001) |
137
-
138
- **Returns:** `Promise<this>`
139
-
140
-
141
-
142
- ### stop
143
-
144
- Stop the MCP server and close all connections.
145
-
146
- **Returns:** `Promise<this>`
147
-
148
-
149
-
150
- ## Getters
151
-
152
- | Property | Type | Description |
153
- |----------|------|-------------|
154
- | `mcpServer` | `MCPProtocolServer` | The underlying MCP protocol server instance. Created during configure(). |
155
- | `handlerContext` | `MCPContext` | The handler context passed to all tool, resource, and prompt handlers. |
156
-
157
- ## Events (Zod v4 schema)
158
-
159
- ### toolRegistered
160
-
161
- Emitted when a tool is registered
162
-
163
- **Event Arguments:**
164
-
165
- | Name | Type | Description |
166
- |------|------|-------------|
167
- | `arg0` | `string` | Tool name |
168
-
169
-
170
-
171
- ### resourceRegistered
172
-
173
- Emitted when a resource is registered
174
-
175
- **Event Arguments:**
176
-
177
- | Name | Type | Description |
178
- |------|------|-------------|
179
- | `arg0` | `string` | Resource URI |
180
-
181
-
182
-
183
- ### promptRegistered
184
-
185
- Emitted when a prompt is registered
186
-
187
- **Event Arguments:**
188
-
189
- | Name | Type | Description |
190
- |------|------|-------------|
191
- | `arg0` | `string` | Prompt name |
192
-
193
-
194
-
195
- ### toolCalled
196
-
197
- Emitted when a tool is called
198
-
199
- **Event Arguments:**
200
-
201
- | Name | Type | Description |
202
- |------|------|-------------|
203
- | `arg0` | `string` | Tool name |
204
- | `arg1` | `any` | Arguments |
205
-
206
-
207
-
208
- ## State (Zod v4 schema)
209
-
210
- | Property | Type | Description |
211
- |----------|------|-------------|
212
- | `port` | `number` | The port the server is bound to |
213
- | `listening` | `boolean` | Whether the server is actively listening for connections |
214
- | `configured` | `boolean` | Whether the server has been configured |
215
- | `stopped` | `boolean` | Whether the server has been stopped |
216
- | `transport` | `string` | Active transport type |
217
- | `toolCount` | `number` | Number of registered tools |
218
- | `resourceCount` | `number` | Number of registered resources |
219
- | `promptCount` | `number` | Number of registered prompts |
220
-
221
- ## Examples
222
-
223
- **servers.mcp**
224
-
225
- ```ts
226
- const mcp = container.server('mcp', { serverName: 'my-server', serverVersion: '1.0.0' })
227
-
228
- mcp.tool('search_files', {
229
- schema: z.object({ pattern: z.string() }),
230
- description: 'Search for files',
231
- handler: async (args, ctx) => {
232
- return ctx.container.feature('fs').walk('.', { include: [args.pattern] }).files.join('\n')
233
- }
234
- })
235
-
236
- await mcp.start()
237
- ```
238
-
@@ -1,170 +0,0 @@
1
- # WebsocketServer (servers.websocket)
2
-
3
- WebSocket server built on the `ws` library with optional JSON message framing. Manages WebSocket connections, tracks connected clients, and bridges messages to Luca's event bus. When `json` mode is enabled, incoming messages are automatically JSON-parsed (with `.toString()` for Buffer data) and outgoing messages via `send()` / `broadcast()` are JSON-stringified. When `json` mode is disabled, raw message data is emitted as-is and `send()` / `broadcast()` still JSON-stringify for safety. Supports ask/reply semantics when paired with the Luca WebSocket client. The server can `ask(ws, type, data)` a connected client and await a typed response, or handle incoming asks from clients by listening for messages with a `requestId` and replying via `send(ws, { replyTo, data })`. Requests time out if no reply arrives within the configurable window.
4
-
5
- ## Usage
6
-
7
- ```ts
8
- container.server('websocket', {
9
- // Port number to listen on
10
- port,
11
- // Hostname or IP address to bind to
12
- host,
13
- // When enabled, incoming messages are automatically JSON-parsed before emitting the message event, and outgoing send/broadcast calls JSON-stringify the payload
14
- json,
15
- })
16
- ```
17
-
18
- ## Options (Zod v4 schema)
19
-
20
- | Property | Type | Description |
21
- |----------|------|-------------|
22
- | `port` | `number` | Port number to listen on |
23
- | `host` | `string` | Hostname or IP address to bind to |
24
- | `json` | `boolean` | When enabled, incoming messages are automatically JSON-parsed before emitting the message event, and outgoing send/broadcast calls JSON-stringify the payload |
25
-
26
- ## Methods
27
-
28
- ### broadcast
29
-
30
- **Parameters:**
31
-
32
- | Name | Type | Required | Description |
33
- |------|------|----------|-------------|
34
- | `message` | `any` | ✓ | Parameter message |
35
-
36
- **Returns:** `Promise<this>`
37
-
38
-
39
-
40
- ### send
41
-
42
- **Parameters:**
43
-
44
- | Name | Type | Required | Description |
45
- |------|------|----------|-------------|
46
- | `ws` | `any` | ✓ | Parameter ws |
47
- | `message` | `any` | ✓ | Parameter message |
48
-
49
- **Returns:** `Promise<this>`
50
-
51
-
52
-
53
- ### ask
54
-
55
- Send a request to a specific client and wait for a correlated response. The client is expected to reply with a message whose `replyTo` matches the `requestId` of this message.
56
-
57
- **Parameters:**
58
-
59
- | Name | Type | Required | Description |
60
- |------|------|----------|-------------|
61
- | `ws` | `any` | ✓ | The WebSocket client to ask |
62
- | `type` | `string` | ✓ | A string identifying the request type |
63
- | `data` | `any` | | Optional payload |
64
- | `timeout` | `any` | | How long to wait (default 10 000 ms) |
65
-
66
- **Returns:** `Promise<R>`
67
-
68
- ```ts
69
- ws.on('connection', async (client) => {
70
- const info = await ws.ask(client, 'identify')
71
- console.log('Client says:', info)
72
- })
73
- ```
74
-
75
-
76
-
77
- ### start
78
-
79
- Start the WebSocket server. A runtime `port` overrides the constructor option and is written to state before the underlying `ws.Server` is created, so the server binds to the correct port.
80
-
81
- **Parameters:**
82
-
83
- | Name | Type | Required | Description |
84
- |------|------|----------|-------------|
85
- | `options` | `StartOptions` | | Optional runtime overrides for port and host |
86
-
87
- **Returns:** `Promise<this>`
88
-
89
-
90
-
91
- ### stop
92
-
93
- **Returns:** `Promise<this>`
94
-
95
-
96
-
97
- ## Getters
98
-
99
- | Property | Type | Description |
100
- |----------|------|-------------|
101
- | `wss` | `BaseServer` | |
102
- | `port` | `number` | The port this server will bind to. Defaults to 8081 if not set via constructor options or start(). |
103
-
104
- ## Events (Zod v4 schema)
105
-
106
- ### connection
107
-
108
- Fires when a new client connects
109
-
110
- **Event Arguments:**
111
-
112
- | Name | Type | Description |
113
- |------|------|-------------|
114
- | `arg0` | `any` | The raw WebSocket client instance from the ws library |
115
-
116
-
117
-
118
- ### message
119
-
120
- Fires when a message is received from a client. Handler signature: (data, ws)
121
-
122
- **Event Arguments:**
123
-
124
- | Name | Type | Description |
125
- |------|------|-------------|
126
- | `arg0` | `any` | The message data (JSON-parsed object when json option is enabled, raw Buffer/string otherwise) |
127
- | `arg1` | `any` | The WebSocket client that sent the message — use with server.send(ws, data) to reply |
128
-
129
-
130
-
131
- ## State (Zod v4 schema)
132
-
133
- | Property | Type | Description |
134
- |----------|------|-------------|
135
- | `port` | `number` | The port the server is bound to |
136
- | `listening` | `boolean` | Whether the server is actively listening for connections |
137
- | `configured` | `boolean` | Whether the server has been configured |
138
- | `stopped` | `boolean` | Whether the server has been stopped |
139
-
140
- ## Examples
141
-
142
- **servers.websocket**
143
-
144
- ```ts
145
- const ws = container.server('websocket', { json: true })
146
- await ws.start({ port: 8080 })
147
-
148
- ws.on('message', (data, client) => {
149
- console.log('Received:', data)
150
- ws.broadcast({ echo: data })
151
- })
152
-
153
- // ask/reply: request info from a connected client
154
- ws.on('connection', async (client) => {
155
- const info = await ws.ask(client, 'identify')
156
- console.log('Client says:', info)
157
- })
158
- ```
159
-
160
-
161
-
162
- **ask**
163
-
164
- ```ts
165
- ws.on('connection', async (client) => {
166
- const info = await ws.ask(client, 'identify')
167
- console.log('Client says:', info)
168
- })
169
- ```
170
-
@@ -1,101 +0,0 @@
1
- # Luca Project
2
-
3
- This project uses the [Luca framework](https://github.com/soederpop/luca) — Lightweight Universal Conversational Architecture.
4
-
5
- For a deep dive into the framework internals, see the [Luca GitHub repository](https://github.com/soederpop/luca).
6
-
7
- ## Runtime
8
-
9
- The runtime is **bun**. Use `bun run` for scripts, `bun test` for tests.
10
-
11
- ## The `luca` CLI
12
-
13
- The `luca` binary is available in the path. Key commands:
14
-
15
- - `luca` — list available commands (built-in + project commands)
16
- - `luca eval "expression"` — evaluate JS with the container in scope
17
- - `luca describe <name>` — full docs for any feature, client, or server (e.g. `luca describe fs`)
18
- - `luca describe <name>.<member>` — docs for a specific method or getter (e.g. `luca describe ui.banner`, `luca describe fs.readFile`)
19
- - `luca describe features` — index of all available features (also: `clients`, `servers`)
20
- - `luca serve` — start a local server using `endpoints/` folder
21
- - `luca run script.ts` — run a script with the container
22
- - `luca scaffold <type> <name>` — generate boilerplate for a new helper (run `luca scaffold` for full help)
23
-
24
- ## Container Rules
25
-
26
- - **NEVER import from `fs`, `path`, or other Node builtins.** Use `container.feature('fs')` for file operations, `container.paths` for path operations.
27
- - The container should provide everything you need. If something is missing, raise the concern rather than pulling in external dependencies.
28
- - Use `container.utils` for common utilities (uuid, lodash helpers, string utils).
29
-
30
- ## Learning the Framework
31
-
32
- 1. **Discover** — Run `luca describe features`, `luca describe clients`, `luca describe servers` to see what's available. Then `luca describe <name>` for full docs on any helper, or `luca describe <name>.<member>` to drill into a specific method or getter. This is your first move, always. (See `.claude/skills/luca-framework/SKILL.md` for the full mental model.)
33
- 2. **Build** — Run `luca scaffold <type> --tutorial` before creating a new helper. It covers the full guide for that type.
34
- 3. **Prototype** — Use `luca eval "expression"` to test container code before wiring up full handlers. Reach for eval when you're stuck — it gives you full runtime access.
35
- 4. **Reference** — The skill file (`.claude/skills/luca-framework/SKILL.md`) includes a full Framework Index with every feature, client, and server organized by category
36
-
37
- ## Project Structure
38
-
39
- - `commands/` — custom CLI commands, run via `luca <commandName>` (auto-discovered)
40
- - `endpoints/` — file-based HTTP routes, served via `luca serve` (auto-discovered)
41
- - `features/` — custom container features, discovered via `container.helpers.discoverAll()` (auto-discovered)
42
- - `docs/` — content documents managed by the `contentDb` feature (`container.docs`). See [contentbase](https://github.com/soederpop/contentbase) for the document model system.
43
- - `luca.cli.ts` — optional project-level CLI customization (runs before any command)
44
-
45
- ## Command Arguments
46
-
47
- Command handlers receive `(options, context)`. The `options` object contains:
48
- - **Named flags** from `argsSchema`: `--verbose` → `options.verbose`
49
- - **Positional args** mapped via `positionals` export: `luca cmd ./src` → `options.target`
50
- - **Raw positionals** in `options._`: array where `_[0]` is the command name, `_[1+]` are positional args
51
-
52
- To accept positional arguments, export a `positionals` array that maps them to named fields in `argsSchema`:
53
-
54
- ```ts
55
- export const positionals = ['target'] // luca myCmd ./src => options.target === './src'
56
- export const argsSchema = z.object({
57
- target: z.string().optional().describe('The target to operate on'),
58
- verbose: z.boolean().default(false).describe('Enable verbose output'),
59
- })
60
- ```
61
-
62
- ## What's Available
63
-
64
- The container provides more than you might expect. Before importing anything external, check here:
65
-
66
- - **YAML** — `container.feature('yaml')` wraps `js-yaml`. Use `.parse(str)` and `.stringify(obj)`.
67
- - **SQLite** — `container.feature('sqlite')` for databases. Parameterized queries, tagged templates.
68
- - **REST client** — `container.client('rest', { baseURL })`. Methods (`get`, `post`, etc.) return **parsed JSON directly**, not `{ data, status, headers }`. On HTTP errors, the error is returned (not thrown).
69
- - **Content DB** — `container.docs` (alias for `container.feature('contentDb')`) manages markdown documents with frontmatter. Query with `docs.query(docs.models.MyModel).fetchAll()`.
70
- - **Grep** — `container.feature('grep')` has `search()` and `codeAnnotations()` for finding TODOs/FIXMEs/etc.
71
- - **chalk** — available as `container.feature('ui').colors`, not via `import('chalk')`.
72
- - **figlet** — available as `container.feature('ui').asciiArt(text)`.
73
- - **uuid** — `container.utils.uuid()`
74
- - **lodash** — `container.utils.lodash` (groupBy, keyBy, pick, omit, debounce, etc.)
75
- - **string utils** — `container.utils.stringUtils` (camelCase, kebabCase, pluralize, etc.)
76
-
77
- ## Known Gotchas
78
-
79
- - **For DELETE endpoint handlers, use `export { del as delete }`** — `delete` is a JS reserved word. Define your function with any name, then re-export it as `delete`.
80
- - **Bun globals (`Bun.spawn`, `Bun.serve`) are unavailable** in command/endpoint handlers. Use Node's `child_process` for spawning processes, or use `container.feature('proc').exec()`.
81
- - **`ui.print.*` writes to stdout** — if your command supports `--json`, gate UI output behind `if (!options.json)`.
82
- - **VM contexts start empty** — when using `container.feature('vm')`, inject globals explicitly (`console`, `Date`, `Promise`, `crypto`, `TextEncoder`, `setTimeout`).
83
- - **Long-running commands** (servers, watchers) need `await new Promise(() => {})` at the end with a `process.on('SIGINT', ...)` handler for cleanup.
84
- - **Shared state between endpoints**: use `ctx.request.app.locals` to share data across endpoint files.
85
- - **Database init**: use `luca.cli.ts` `main()` hook for table creation and seeding — it runs before any command or server starts.
86
-
87
- ## Extending the Container
88
-
89
- Use `luca scaffold` to generate new helpers:
90
-
91
- ```sh
92
- luca scaffold command myTask --description "Automate something"
93
- luca scaffold feature myCache --description "Custom caching layer"
94
- luca scaffold endpoint users --description "User management API"
95
- ```
96
-
97
- Run `luca scaffold` with no arguments for full usage and examples.
98
-
99
- ## Git Strategy
100
-
101
- Roll on main. Commit with good messages that explain why, not just what.