luca 3.0.0 → 3.0.2

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