@soederpop/luca 0.1.1 → 0.1.3

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 (369) hide show
  1. package/CLAUDE.md +2 -0
  2. package/assistants/codingAssistant/hooks.ts +3 -0
  3. package/assistants/inkbot/CORE.md +69 -0
  4. package/assistants/inkbot/hooks.ts +14 -0
  5. package/assistants/inkbot/tools.ts +47 -0
  6. package/commands/inkbot.ts +353 -0
  7. package/dist/agi/container.server.d.ts +63 -0
  8. package/dist/agi/container.server.d.ts.map +1 -0
  9. package/dist/agi/endpoints/ask.d.ts +20 -0
  10. package/dist/agi/endpoints/ask.d.ts.map +1 -0
  11. package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
  12. package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
  13. package/dist/agi/endpoints/conversations.d.ts +18 -0
  14. package/dist/agi/endpoints/conversations.d.ts.map +1 -0
  15. package/dist/agi/endpoints/experts.d.ts +8 -0
  16. package/dist/agi/endpoints/experts.d.ts.map +1 -0
  17. package/dist/agi/feature.d.ts +9 -0
  18. package/dist/agi/feature.d.ts.map +1 -0
  19. package/dist/agi/features/assistant.d.ts +509 -0
  20. package/dist/agi/features/assistant.d.ts.map +1 -0
  21. package/dist/agi/features/assistants-manager.d.ts +236 -0
  22. package/dist/agi/features/assistants-manager.d.ts.map +1 -0
  23. package/dist/agi/features/autonomous-assistant.d.ts +281 -0
  24. package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
  25. package/dist/agi/features/browser-use.d.ts +479 -0
  26. package/dist/agi/features/browser-use.d.ts.map +1 -0
  27. package/dist/agi/features/claude-code.d.ts +824 -0
  28. package/dist/agi/features/claude-code.d.ts.map +1 -0
  29. package/dist/agi/features/conversation-history.d.ts +245 -0
  30. package/dist/agi/features/conversation-history.d.ts.map +1 -0
  31. package/dist/agi/features/conversation.d.ts +464 -0
  32. package/dist/agi/features/conversation.d.ts.map +1 -0
  33. package/dist/agi/features/docs-reader.d.ts +72 -0
  34. package/dist/agi/features/docs-reader.d.ts.map +1 -0
  35. package/dist/agi/features/file-tools.d.ts +110 -0
  36. package/dist/agi/features/file-tools.d.ts.map +1 -0
  37. package/dist/agi/features/luca-coder.d.ts +323 -0
  38. package/dist/agi/features/luca-coder.d.ts.map +1 -0
  39. package/dist/agi/features/openai-codex.d.ts +381 -0
  40. package/dist/agi/features/openai-codex.d.ts.map +1 -0
  41. package/dist/agi/features/openapi.d.ts +200 -0
  42. package/dist/agi/features/openapi.d.ts.map +1 -0
  43. package/dist/agi/features/skills-library.d.ts +167 -0
  44. package/dist/agi/features/skills-library.d.ts.map +1 -0
  45. package/dist/agi/index.d.ts +5 -0
  46. package/dist/agi/index.d.ts.map +1 -0
  47. package/dist/agi/lib/interceptor-chain.d.ts +44 -0
  48. package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
  49. package/dist/agi/lib/token-counter.d.ts +13 -0
  50. package/dist/agi/lib/token-counter.d.ts.map +1 -0
  51. package/dist/bootstrap/generated.d.ts +5 -0
  52. package/dist/bootstrap/generated.d.ts.map +1 -0
  53. package/dist/browser.d.ts +12 -0
  54. package/dist/browser.d.ts.map +1 -0
  55. package/dist/bus.d.ts +29 -0
  56. package/dist/bus.d.ts.map +1 -0
  57. package/dist/cli/build-info.d.ts +4 -0
  58. package/dist/cli/build-info.d.ts.map +1 -0
  59. package/dist/cli/cli.d.ts +3 -0
  60. package/dist/cli/cli.d.ts.map +1 -0
  61. package/dist/client.d.ts +60 -0
  62. package/dist/client.d.ts.map +1 -0
  63. package/dist/clients/civitai/index.d.ts +472 -0
  64. package/dist/clients/civitai/index.d.ts.map +1 -0
  65. package/dist/clients/client-template.d.ts +30 -0
  66. package/dist/clients/client-template.d.ts.map +1 -0
  67. package/dist/clients/comfyui/index.d.ts +281 -0
  68. package/dist/clients/comfyui/index.d.ts.map +1 -0
  69. package/dist/clients/elevenlabs/index.d.ts +197 -0
  70. package/dist/clients/elevenlabs/index.d.ts.map +1 -0
  71. package/dist/clients/graph.d.ts +64 -0
  72. package/dist/clients/graph.d.ts.map +1 -0
  73. package/dist/clients/openai/index.d.ts +247 -0
  74. package/dist/clients/openai/index.d.ts.map +1 -0
  75. package/dist/clients/rest.d.ts +92 -0
  76. package/dist/clients/rest.d.ts.map +1 -0
  77. package/dist/clients/supabase/index.d.ts +176 -0
  78. package/dist/clients/supabase/index.d.ts.map +1 -0
  79. package/dist/clients/websocket.d.ts +127 -0
  80. package/dist/clients/websocket.d.ts.map +1 -0
  81. package/dist/command.d.ts +163 -0
  82. package/dist/command.d.ts.map +1 -0
  83. package/dist/commands/bootstrap.d.ts +20 -0
  84. package/dist/commands/bootstrap.d.ts.map +1 -0
  85. package/dist/commands/chat.d.ts +37 -0
  86. package/dist/commands/chat.d.ts.map +1 -0
  87. package/dist/commands/code.d.ts +28 -0
  88. package/dist/commands/code.d.ts.map +1 -0
  89. package/dist/commands/console.d.ts +22 -0
  90. package/dist/commands/console.d.ts.map +1 -0
  91. package/dist/commands/describe.d.ts +50 -0
  92. package/dist/commands/describe.d.ts.map +1 -0
  93. package/dist/commands/eval.d.ts +23 -0
  94. package/dist/commands/eval.d.ts.map +1 -0
  95. package/dist/commands/help.d.ts +25 -0
  96. package/dist/commands/help.d.ts.map +1 -0
  97. package/dist/commands/index.d.ts +18 -0
  98. package/dist/commands/index.d.ts.map +1 -0
  99. package/dist/commands/introspect.d.ts +24 -0
  100. package/dist/commands/introspect.d.ts.map +1 -0
  101. package/dist/commands/mcp.d.ts +35 -0
  102. package/dist/commands/mcp.d.ts.map +1 -0
  103. package/dist/commands/prompt.d.ts +38 -0
  104. package/dist/commands/prompt.d.ts.map +1 -0
  105. package/dist/commands/run.d.ts +24 -0
  106. package/dist/commands/run.d.ts.map +1 -0
  107. package/dist/commands/sandbox-mcp.d.ts +34 -0
  108. package/dist/commands/sandbox-mcp.d.ts.map +1 -0
  109. package/dist/commands/save-api-docs.d.ts +21 -0
  110. package/dist/commands/save-api-docs.d.ts.map +1 -0
  111. package/dist/commands/scaffold.d.ts +24 -0
  112. package/dist/commands/scaffold.d.ts.map +1 -0
  113. package/dist/commands/select.d.ts +22 -0
  114. package/dist/commands/select.d.ts.map +1 -0
  115. package/dist/commands/serve.d.ts +29 -0
  116. package/dist/commands/serve.d.ts.map +1 -0
  117. package/dist/container-describer.d.ts +144 -0
  118. package/dist/container-describer.d.ts.map +1 -0
  119. package/dist/container.d.ts +451 -0
  120. package/dist/container.d.ts.map +1 -0
  121. package/dist/endpoint.d.ts +113 -0
  122. package/dist/endpoint.d.ts.map +1 -0
  123. package/dist/feature.d.ts +47 -0
  124. package/dist/feature.d.ts.map +1 -0
  125. package/dist/graft.d.ts +29 -0
  126. package/dist/graft.d.ts.map +1 -0
  127. package/dist/hash-object.d.ts +8 -0
  128. package/dist/hash-object.d.ts.map +1 -0
  129. package/dist/helper.d.ts +209 -0
  130. package/dist/helper.d.ts.map +1 -0
  131. package/dist/introspection/generated.node.d.ts +44623 -0
  132. package/dist/introspection/generated.node.d.ts.map +1 -0
  133. package/dist/introspection/generated.web.d.ts +1412 -0
  134. package/dist/introspection/generated.web.d.ts.map +1 -0
  135. package/dist/introspection/index.d.ts +156 -0
  136. package/dist/introspection/index.d.ts.map +1 -0
  137. package/dist/introspection/scan.d.ts +147 -0
  138. package/dist/introspection/scan.d.ts.map +1 -0
  139. package/dist/node/container.d.ts +256 -0
  140. package/dist/node/container.d.ts.map +1 -0
  141. package/dist/node/feature.d.ts +9 -0
  142. package/dist/node/feature.d.ts.map +1 -0
  143. package/dist/node/features/container-link.d.ts +213 -0
  144. package/dist/node/features/container-link.d.ts.map +1 -0
  145. package/dist/node/features/content-db.d.ts +354 -0
  146. package/dist/node/features/content-db.d.ts.map +1 -0
  147. package/dist/node/features/disk-cache.d.ts +236 -0
  148. package/dist/node/features/disk-cache.d.ts.map +1 -0
  149. package/dist/node/features/dns.d.ts +511 -0
  150. package/dist/node/features/dns.d.ts.map +1 -0
  151. package/dist/node/features/docker.d.ts +485 -0
  152. package/dist/node/features/docker.d.ts.map +1 -0
  153. package/dist/node/features/downloader.d.ts +73 -0
  154. package/dist/node/features/downloader.d.ts.map +1 -0
  155. package/dist/node/features/figlet-fonts.d.ts +4 -0
  156. package/dist/node/features/figlet-fonts.d.ts.map +1 -0
  157. package/dist/node/features/file-manager.d.ts +177 -0
  158. package/dist/node/features/file-manager.d.ts.map +1 -0
  159. package/dist/node/features/fs.d.ts +635 -0
  160. package/dist/node/features/fs.d.ts.map +1 -0
  161. package/dist/node/features/git.d.ts +329 -0
  162. package/dist/node/features/git.d.ts.map +1 -0
  163. package/dist/node/features/google-auth.d.ts +200 -0
  164. package/dist/node/features/google-auth.d.ts.map +1 -0
  165. package/dist/node/features/google-calendar.d.ts +194 -0
  166. package/dist/node/features/google-calendar.d.ts.map +1 -0
  167. package/dist/node/features/google-docs.d.ts +138 -0
  168. package/dist/node/features/google-docs.d.ts.map +1 -0
  169. package/dist/node/features/google-drive.d.ts +202 -0
  170. package/dist/node/features/google-drive.d.ts.map +1 -0
  171. package/dist/node/features/google-mail.d.ts +221 -0
  172. package/dist/node/features/google-mail.d.ts.map +1 -0
  173. package/dist/node/features/google-sheets.d.ts +157 -0
  174. package/dist/node/features/google-sheets.d.ts.map +1 -0
  175. package/dist/node/features/grep.d.ts +207 -0
  176. package/dist/node/features/grep.d.ts.map +1 -0
  177. package/dist/node/features/helpers.d.ts +236 -0
  178. package/dist/node/features/helpers.d.ts.map +1 -0
  179. package/dist/node/features/ink.d.ts +332 -0
  180. package/dist/node/features/ink.d.ts.map +1 -0
  181. package/dist/node/features/ipc-socket.d.ts +298 -0
  182. package/dist/node/features/ipc-socket.d.ts.map +1 -0
  183. package/dist/node/features/json-tree.d.ts +140 -0
  184. package/dist/node/features/json-tree.d.ts.map +1 -0
  185. package/dist/node/features/networking.d.ts +373 -0
  186. package/dist/node/features/networking.d.ts.map +1 -0
  187. package/dist/node/features/nlp.d.ts +125 -0
  188. package/dist/node/features/nlp.d.ts.map +1 -0
  189. package/dist/node/features/opener.d.ts +93 -0
  190. package/dist/node/features/opener.d.ts.map +1 -0
  191. package/dist/node/features/os.d.ts +168 -0
  192. package/dist/node/features/os.d.ts.map +1 -0
  193. package/dist/node/features/package-finder.d.ts +419 -0
  194. package/dist/node/features/package-finder.d.ts.map +1 -0
  195. package/dist/node/features/postgres.d.ts +173 -0
  196. package/dist/node/features/postgres.d.ts.map +1 -0
  197. package/dist/node/features/proc.d.ts +285 -0
  198. package/dist/node/features/proc.d.ts.map +1 -0
  199. package/dist/node/features/process-manager.d.ts +427 -0
  200. package/dist/node/features/process-manager.d.ts.map +1 -0
  201. package/dist/node/features/python.d.ts +477 -0
  202. package/dist/node/features/python.d.ts.map +1 -0
  203. package/dist/node/features/redis.d.ts +247 -0
  204. package/dist/node/features/redis.d.ts.map +1 -0
  205. package/dist/node/features/repl.d.ts +84 -0
  206. package/dist/node/features/repl.d.ts.map +1 -0
  207. package/dist/node/features/runpod.d.ts +527 -0
  208. package/dist/node/features/runpod.d.ts.map +1 -0
  209. package/dist/node/features/secure-shell.d.ts +145 -0
  210. package/dist/node/features/secure-shell.d.ts.map +1 -0
  211. package/dist/node/features/semantic-search.d.ts +207 -0
  212. package/dist/node/features/semantic-search.d.ts.map +1 -0
  213. package/dist/node/features/sqlite.d.ts +180 -0
  214. package/dist/node/features/sqlite.d.ts.map +1 -0
  215. package/dist/node/features/telegram.d.ts +173 -0
  216. package/dist/node/features/telegram.d.ts.map +1 -0
  217. package/dist/node/features/transpiler.d.ts +51 -0
  218. package/dist/node/features/transpiler.d.ts.map +1 -0
  219. package/dist/node/features/tts.d.ts +108 -0
  220. package/dist/node/features/tts.d.ts.map +1 -0
  221. package/dist/node/features/ui.d.ts +562 -0
  222. package/dist/node/features/ui.d.ts.map +1 -0
  223. package/dist/node/features/vault.d.ts +90 -0
  224. package/dist/node/features/vault.d.ts.map +1 -0
  225. package/dist/node/features/vm.d.ts +285 -0
  226. package/dist/node/features/vm.d.ts.map +1 -0
  227. package/dist/node/features/yaml-tree.d.ts +118 -0
  228. package/dist/node/features/yaml-tree.d.ts.map +1 -0
  229. package/dist/node/features/yaml.d.ts +127 -0
  230. package/dist/node/features/yaml.d.ts.map +1 -0
  231. package/dist/node.d.ts +67 -0
  232. package/dist/node.d.ts.map +1 -0
  233. package/dist/python/generated.d.ts +2 -0
  234. package/dist/python/generated.d.ts.map +1 -0
  235. package/dist/react/index.d.ts +36 -0
  236. package/dist/react/index.d.ts.map +1 -0
  237. package/dist/registry.d.ts +97 -0
  238. package/dist/registry.d.ts.map +1 -0
  239. package/dist/scaffolds/generated.d.ts +13 -0
  240. package/dist/scaffolds/generated.d.ts.map +1 -0
  241. package/dist/scaffolds/template.d.ts +11 -0
  242. package/dist/scaffolds/template.d.ts.map +1 -0
  243. package/dist/schemas/base.d.ts +254 -0
  244. package/dist/schemas/base.d.ts.map +1 -0
  245. package/dist/selector.d.ts +130 -0
  246. package/dist/selector.d.ts.map +1 -0
  247. package/dist/server.d.ts +89 -0
  248. package/dist/server.d.ts.map +1 -0
  249. package/dist/servers/express.d.ts +104 -0
  250. package/dist/servers/express.d.ts.map +1 -0
  251. package/dist/servers/mcp.d.ts +201 -0
  252. package/dist/servers/mcp.d.ts.map +1 -0
  253. package/dist/servers/socket.d.ts +121 -0
  254. package/dist/servers/socket.d.ts.map +1 -0
  255. package/dist/state.d.ts +24 -0
  256. package/dist/state.d.ts.map +1 -0
  257. package/dist/web/clients/socket.d.ts +37 -0
  258. package/dist/web/clients/socket.d.ts.map +1 -0
  259. package/dist/web/container.d.ts +55 -0
  260. package/dist/web/container.d.ts.map +1 -0
  261. package/dist/web/extension.d.ts +4 -0
  262. package/dist/web/extension.d.ts.map +1 -0
  263. package/dist/web/feature.d.ts +8 -0
  264. package/dist/web/feature.d.ts.map +1 -0
  265. package/dist/web/features/asset-loader.d.ts +35 -0
  266. package/dist/web/features/asset-loader.d.ts.map +1 -0
  267. package/dist/web/features/container-link.d.ts +167 -0
  268. package/dist/web/features/container-link.d.ts.map +1 -0
  269. package/dist/web/features/esbuild.d.ts +51 -0
  270. package/dist/web/features/esbuild.d.ts.map +1 -0
  271. package/dist/web/features/helpers.d.ts +140 -0
  272. package/dist/web/features/helpers.d.ts.map +1 -0
  273. package/dist/web/features/network.d.ts +69 -0
  274. package/dist/web/features/network.d.ts.map +1 -0
  275. package/dist/web/features/speech.d.ts +71 -0
  276. package/dist/web/features/speech.d.ts.map +1 -0
  277. package/dist/web/features/vault.d.ts +62 -0
  278. package/dist/web/features/vault.d.ts.map +1 -0
  279. package/dist/web/features/vm.d.ts +48 -0
  280. package/dist/web/features/vm.d.ts.map +1 -0
  281. package/dist/web/features/voice-recognition.d.ts +96 -0
  282. package/dist/web/features/voice-recognition.d.ts.map +1 -0
  283. package/dist/web/shims/isomorphic-vm.d.ts +22 -0
  284. package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
  285. package/docs/apis/features/agi/assistant.md +1 -0
  286. package/docs/apis/features/agi/assistants-manager.md +62 -2
  287. package/docs/apis/features/agi/auto-assistant.md +11 -109
  288. package/docs/apis/features/agi/claude-code.md +138 -0
  289. package/docs/apis/features/agi/conversation.md +60 -31
  290. package/docs/apis/features/agi/luca-coder.md +407 -0
  291. package/docs/apis/features/agi/openapi.md +2 -2
  292. package/docs/apis/features/agi/skills-library.md +12 -0
  293. package/docs/apis/features/node/python.md +81 -11
  294. package/docs/apis/features/node/transpiler.md +74 -0
  295. package/docs/apis/features/web/esbuild.md +0 -6
  296. package/docs/apis/servers/mcp.md +2 -2
  297. package/docs/examples/entity.md +124 -0
  298. package/package.json +73 -21
  299. package/scripts/test-assistant-hooks.ts +13 -0
  300. package/src/agi/feature.ts +13 -0
  301. package/src/agi/features/assistant.ts +36 -25
  302. package/src/agi/features/assistants-manager.ts +70 -5
  303. package/src/agi/features/autonomous-assistant.ts +1 -5
  304. package/src/agi/features/browser-use.ts +2 -2
  305. package/src/agi/features/claude-code.ts +165 -1
  306. package/src/agi/features/conversation-history.ts +2 -6
  307. package/src/agi/features/conversation.ts +95 -3
  308. package/src/agi/features/docs-reader.ts +2 -1
  309. package/src/agi/features/file-tools.ts +2 -2
  310. package/src/agi/features/luca-coder.ts +1 -5
  311. package/src/agi/features/openai-codex.ts +1 -1
  312. package/src/agi/features/openapi.ts +3 -3
  313. package/src/agi/features/skills-library.ts +90 -2
  314. package/src/agi/lib/interceptor-chain.ts +10 -0
  315. package/src/agi/lib/token-counter.ts +1 -1
  316. package/src/bootstrap/generated.ts +126 -1
  317. package/src/bus.ts +27 -5
  318. package/src/cli/build-info.ts +2 -2
  319. package/src/client.ts +2 -2
  320. package/src/clients/elevenlabs/index.ts +5 -0
  321. package/src/commands/bootstrap.ts +2 -1
  322. package/src/commands/chat.ts +1 -0
  323. package/src/commands/code.ts +4 -2
  324. package/src/commands/prompt.ts +34 -34
  325. package/src/commands/sandbox-mcp.ts +69 -163
  326. package/src/commands/save-api-docs.ts +10 -8
  327. package/src/commands/select.ts +8 -3
  328. package/src/container-describer.ts +70 -84
  329. package/src/container.ts +93 -3
  330. package/src/endpoint.ts +1 -1
  331. package/src/entity.ts +173 -0
  332. package/src/feature.ts +3 -3
  333. package/src/helper.ts +8 -4
  334. package/src/introspection/generated.agi.ts +1403 -929
  335. package/src/introspection/generated.node.ts +127 -33
  336. package/src/introspection/generated.web.ts +95 -3
  337. package/src/introspection/scan.ts +1 -1
  338. package/src/node/container.ts +1 -1
  339. package/src/node/features/content-db.ts +3 -3
  340. package/src/node/features/file-manager.ts +10 -9
  341. package/src/node/features/git.ts +5 -5
  342. package/src/node/features/helpers.ts +1 -1
  343. package/src/node/features/json-tree.ts +1 -1
  344. package/src/node/features/os.ts +3 -3
  345. package/src/node/features/package-finder.ts +1 -1
  346. package/src/node/features/process-manager.ts +1 -1
  347. package/src/node/features/python.ts +3 -3
  348. package/src/node/features/redis.ts +1 -1
  349. package/src/node/features/repl.ts +2 -2
  350. package/src/node/features/transpiler.ts +34 -9
  351. package/src/node/features/ui.ts +1 -1
  352. package/src/node/features/vm.ts +6 -5
  353. package/src/node/features/yaml-tree.ts +1 -1
  354. package/src/node.ts +1 -0
  355. package/src/python/generated.ts +1 -1
  356. package/src/scaffolds/generated.ts +1 -1
  357. package/src/selector.ts +74 -4
  358. package/src/server.ts +2 -2
  359. package/src/servers/mcp.ts +6 -6
  360. package/src/web/features/helpers.ts +1 -1
  361. package/src/web/features/network.ts +1 -0
  362. package/test/assistant.test.ts +72 -0
  363. package/test/conversation.test.ts +220 -0
  364. package/test/vm-loadmodule.test.ts +213 -0
  365. package/tsconfig.build.json +12 -0
  366. package/tsconfig.json +1 -1
  367. package/scripts/examples/telegram-ink-ui.ts +0 -302
  368. package/scripts/examples/using-openai-codex.ts +0 -23
  369. package/scripts/examples/vm-loading-esm-modules.ts +0 -16
@@ -1,7 +1,7 @@
1
1
  import { setBuildTimeData, setContainerBuildTimeData } from './index.js';
2
2
 
3
3
  // Auto-generated introspection registry data
4
- // Generated at: 2026-03-28T06:19:48.333Z
4
+ // Generated at: 2026-04-03T01:24:52.289Z
5
5
 
6
6
  setBuildTimeData('features.googleDocs', {
7
7
  "id": "features.googleDocs",
@@ -12106,6 +12106,303 @@ setBuildTimeData('clients.openai', {
12106
12106
  ]
12107
12107
  });
12108
12108
 
12109
+ setBuildTimeData('clients.comfyui', {
12110
+ "id": "clients.comfyui",
12111
+ "description": "ComfyUI client — execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
12112
+ "shortcut": "clients.comfyui",
12113
+ "className": "ComfyUIClient",
12114
+ "methods": {
12115
+ "queuePrompt": {
12116
+ "description": "Queue a prompt (API-format workflow) for execution.",
12117
+ "parameters": {
12118
+ "prompt": {
12119
+ "type": "Record<string, any>",
12120
+ "description": "The API-format workflow object"
12121
+ },
12122
+ "clientId": {
12123
+ "type": "string",
12124
+ "description": "Override the client ID for this request"
12125
+ }
12126
+ },
12127
+ "required": [
12128
+ "prompt"
12129
+ ],
12130
+ "returns": "Promise<{ prompt_id: string; number: number }>",
12131
+ "examples": [
12132
+ {
12133
+ "language": "ts",
12134
+ "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
12135
+ }
12136
+ ]
12137
+ },
12138
+ "getQueue": {
12139
+ "description": "Get the current prompt queue status.",
12140
+ "parameters": {},
12141
+ "required": [],
12142
+ "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
12143
+ },
12144
+ "getHistory": {
12145
+ "description": "Get execution history, optionally for a specific prompt.",
12146
+ "parameters": {
12147
+ "promptId": {
12148
+ "type": "string",
12149
+ "description": "If provided, returns history for this prompt only"
12150
+ }
12151
+ },
12152
+ "required": [],
12153
+ "returns": "Promise<Record<string, any>>"
12154
+ },
12155
+ "getSystemStats": {
12156
+ "description": "Get system stats including GPU memory and queue info.",
12157
+ "parameters": {},
12158
+ "required": [],
12159
+ "returns": "Promise<any>"
12160
+ },
12161
+ "getObjectInfo": {
12162
+ "description": "Get node type info with input/output schemas.",
12163
+ "parameters": {
12164
+ "nodeClass": {
12165
+ "type": "string",
12166
+ "description": "If provided, returns info for this node type only"
12167
+ }
12168
+ },
12169
+ "required": [],
12170
+ "returns": "Promise<any>"
12171
+ },
12172
+ "interrupt": {
12173
+ "description": "Interrupt the currently executing prompt.",
12174
+ "parameters": {},
12175
+ "required": [],
12176
+ "returns": "Promise<void>"
12177
+ },
12178
+ "getModels": {
12179
+ "description": "List available models, optionally filtered by type.",
12180
+ "parameters": {
12181
+ "type": {
12182
+ "type": "string",
12183
+ "description": "Model type filter (e.g., 'checkpoints', 'loras')"
12184
+ }
12185
+ },
12186
+ "required": [],
12187
+ "returns": "Promise<string[]>"
12188
+ },
12189
+ "getEmbeddings": {
12190
+ "description": "List available embedding models.",
12191
+ "parameters": {},
12192
+ "required": [],
12193
+ "returns": "Promise<string[]>"
12194
+ },
12195
+ "uploadImage": {
12196
+ "description": "Upload an image to ComfyUI's input directory.",
12197
+ "parameters": {
12198
+ "file": {
12199
+ "type": "Buffer | Blob",
12200
+ "description": "The image data as Buffer or Blob"
12201
+ },
12202
+ "filename": {
12203
+ "type": "string",
12204
+ "description": "File name for the upload"
12205
+ },
12206
+ "opts": {
12207
+ "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
12208
+ "description": "Upload options (subfolder, type, overwrite)"
12209
+ }
12210
+ },
12211
+ "required": [
12212
+ "file",
12213
+ "filename"
12214
+ ],
12215
+ "returns": "Promise<any>"
12216
+ },
12217
+ "viewImage": {
12218
+ "description": "Download a generated image from ComfyUI as a Buffer.",
12219
+ "parameters": {
12220
+ "filename": {
12221
+ "type": "string",
12222
+ "description": "The image filename"
12223
+ },
12224
+ "subfolder": {
12225
+ "type": "any",
12226
+ "description": "Subfolder within the output directory"
12227
+ },
12228
+ "type": {
12229
+ "type": "any",
12230
+ "description": "Image type ('output', 'input', 'temp')"
12231
+ }
12232
+ },
12233
+ "required": [
12234
+ "filename"
12235
+ ],
12236
+ "returns": "Promise<Buffer>"
12237
+ },
12238
+ "connectWs": {
12239
+ "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
12240
+ "parameters": {},
12241
+ "required": [],
12242
+ "returns": "Promise<void>"
12243
+ },
12244
+ "disconnectWs": {
12245
+ "description": "Close the WebSocket connection.",
12246
+ "parameters": {},
12247
+ "required": [],
12248
+ "returns": "void"
12249
+ },
12250
+ "toApiFormat": {
12251
+ "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
12252
+ "parameters": {
12253
+ "workflow": {
12254
+ "type": "Record<string, any>",
12255
+ "description": "Parameter workflow"
12256
+ }
12257
+ },
12258
+ "required": [
12259
+ "workflow"
12260
+ ],
12261
+ "returns": "Promise<Record<string, any>>"
12262
+ },
12263
+ "runWorkflow": {
12264
+ "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
12265
+ "parameters": {
12266
+ "workflow": {
12267
+ "type": "Record<string, any>",
12268
+ "description": "Parameter workflow"
12269
+ },
12270
+ "inputs": {
12271
+ "type": "Record<string, any>",
12272
+ "description": "Parameter inputs"
12273
+ },
12274
+ "options": {
12275
+ "type": "WorkflowRunOptions",
12276
+ "description": "Parameter options",
12277
+ "properties": {
12278
+ "poll": {
12279
+ "type": "boolean",
12280
+ "description": "Use polling instead of WebSocket for tracking execution"
12281
+ },
12282
+ "pollInterval": {
12283
+ "type": "number",
12284
+ "description": "Polling interval in ms (default 1000)"
12285
+ },
12286
+ "inputMap": {
12287
+ "type": "InputMapping",
12288
+ "description": "Named input mapping: semantic name -> { nodeId, field }"
12289
+ },
12290
+ "outputDir": {
12291
+ "type": "string",
12292
+ "description": "If provided, output images are downloaded to this directory"
12293
+ }
12294
+ }
12295
+ }
12296
+ },
12297
+ "required": [
12298
+ "workflow"
12299
+ ],
12300
+ "returns": "Promise<WorkflowResult>"
12301
+ }
12302
+ },
12303
+ "getters": {
12304
+ "clientId": {
12305
+ "description": "The unique client ID used for WebSocket session tracking.",
12306
+ "returns": "string"
12307
+ },
12308
+ "wsURL": {
12309
+ "description": "The WebSocket URL derived from baseURL or overridden via options.",
12310
+ "returns": "string"
12311
+ }
12312
+ },
12313
+ "events": {
12314
+ "execution_start": {
12315
+ "name": "execution_start",
12316
+ "description": "Event emitted by ComfyUIClient",
12317
+ "arguments": {}
12318
+ },
12319
+ "execution_complete": {
12320
+ "name": "execution_complete",
12321
+ "description": "Event emitted by ComfyUIClient",
12322
+ "arguments": {}
12323
+ },
12324
+ "executing": {
12325
+ "name": "executing",
12326
+ "description": "Event emitted by ComfyUIClient",
12327
+ "arguments": {}
12328
+ },
12329
+ "progress": {
12330
+ "name": "progress",
12331
+ "description": "Event emitted by ComfyUIClient",
12332
+ "arguments": {}
12333
+ },
12334
+ "executed": {
12335
+ "name": "executed",
12336
+ "description": "Event emitted by ComfyUIClient",
12337
+ "arguments": {}
12338
+ },
12339
+ "execution_cached": {
12340
+ "name": "execution_cached",
12341
+ "description": "Event emitted by ComfyUIClient",
12342
+ "arguments": {}
12343
+ },
12344
+ "execution_error": {
12345
+ "name": "execution_error",
12346
+ "description": "Event emitted by ComfyUIClient",
12347
+ "arguments": {}
12348
+ }
12349
+ },
12350
+ "state": {},
12351
+ "options": {},
12352
+ "envVars": [],
12353
+ "examples": [
12354
+ {
12355
+ "language": "ts",
12356
+ "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
12357
+ }
12358
+ ],
12359
+ "types": {
12360
+ "WorkflowRunOptions": {
12361
+ "description": "",
12362
+ "properties": {
12363
+ "poll": {
12364
+ "type": "boolean",
12365
+ "description": "Use polling instead of WebSocket for tracking execution",
12366
+ "optional": true
12367
+ },
12368
+ "pollInterval": {
12369
+ "type": "number",
12370
+ "description": "Polling interval in ms (default 1000)",
12371
+ "optional": true
12372
+ },
12373
+ "inputMap": {
12374
+ "type": "InputMapping",
12375
+ "description": "Named input mapping: semantic name -> { nodeId, field }",
12376
+ "optional": true
12377
+ },
12378
+ "outputDir": {
12379
+ "type": "string",
12380
+ "description": "If provided, output images are downloaded to this directory",
12381
+ "optional": true
12382
+ }
12383
+ }
12384
+ },
12385
+ "WorkflowResult": {
12386
+ "description": "",
12387
+ "properties": {
12388
+ "promptId": {
12389
+ "type": "string",
12390
+ "description": ""
12391
+ },
12392
+ "outputs": {
12393
+ "type": "Record<string, any>",
12394
+ "description": ""
12395
+ },
12396
+ "images": {
12397
+ "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
12398
+ "description": "",
12399
+ "optional": true
12400
+ }
12401
+ }
12402
+ }
12403
+ }
12404
+ });
12405
+
12109
12406
  setBuildTimeData('clients.elevenlabs', {
12110
12407
  "id": "clients.elevenlabs",
12111
12408
  "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
@@ -12566,482 +12863,210 @@ setBuildTimeData('clients.supabase', {
12566
12863
  ]
12567
12864
  });
12568
12865
 
12569
- setBuildTimeData('clients.comfyui', {
12570
- "id": "clients.comfyui",
12571
- "description": "ComfyUI client execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
12572
- "shortcut": "clients.comfyui",
12573
- "className": "ComfyUIClient",
12866
+ setBuildTimeData('servers.mcp', {
12867
+ "id": "servers.mcp",
12868
+ "description": "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).",
12869
+ "shortcut": "servers.mcp",
12870
+ "className": "MCPServer",
12574
12871
  "methods": {
12575
- "queuePrompt": {
12576
- "description": "Queue a prompt (API-format workflow) for execution.",
12872
+ "tool": {
12873
+ "description": "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).",
12577
12874
  "parameters": {
12578
- "prompt": {
12579
- "type": "Record<string, any>",
12580
- "description": "The API-format workflow object"
12581
- },
12582
- "clientId": {
12875
+ "name": {
12583
12876
  "type": "string",
12584
- "description": "Override the client ID for this request"
12877
+ "description": "Unique tool name"
12878
+ },
12879
+ "options": {
12880
+ "type": "ToolRegistrationOptions",
12881
+ "description": "Tool schema, description, and handler",
12882
+ "properties": {
12883
+ "schema": {
12884
+ "type": "z.ZodType",
12885
+ "description": ""
12886
+ },
12887
+ "description": {
12888
+ "type": "string",
12889
+ "description": ""
12890
+ },
12891
+ "handler": {
12892
+ "type": "Function | ((args: any, ctx: any) => any)",
12893
+ "description": ""
12894
+ }
12895
+ }
12585
12896
  }
12586
12897
  },
12587
12898
  "required": [
12588
- "prompt"
12899
+ "name",
12900
+ "options"
12589
12901
  ],
12590
- "returns": "Promise<{ prompt_id: string; number: number }>",
12591
- "examples": [
12592
- {
12593
- "language": "ts",
12594
- "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
12595
- }
12596
- ]
12597
- },
12598
- "getQueue": {
12599
- "description": "Get the current prompt queue status.",
12600
- "parameters": {},
12601
- "required": [],
12602
- "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
12902
+ "returns": "this"
12603
12903
  },
12604
- "getHistory": {
12605
- "description": "Get execution history, optionally for a specific prompt.",
12904
+ "resource": {
12905
+ "description": "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).",
12606
12906
  "parameters": {
12607
- "promptId": {
12907
+ "uri": {
12608
12908
  "type": "string",
12609
- "description": "If provided, returns history for this prompt only"
12909
+ "description": "Unique resource URI (e.g. \"project://readme\")"
12910
+ },
12911
+ "handlerOrOptions": {
12912
+ "type": "ResourceRegistrationOptions['handler'] | ResourceRegistrationOptions",
12913
+ "description": "Handler function or options object with handler"
12610
12914
  }
12611
12915
  },
12612
- "required": [],
12613
- "returns": "Promise<Record<string, any>>"
12614
- },
12615
- "getSystemStats": {
12616
- "description": "Get system stats including GPU memory and queue info.",
12617
- "parameters": {},
12618
- "required": [],
12619
- "returns": "Promise<any>"
12916
+ "required": [
12917
+ "uri",
12918
+ "handlerOrOptions"
12919
+ ],
12920
+ "returns": "this"
12620
12921
  },
12621
- "getObjectInfo": {
12622
- "description": "Get node type info with input/output schemas.",
12922
+ "prompt": {
12923
+ "description": "Register an MCP prompt. Prompts are reusable message templates that AI clients can invoke with optional string arguments.",
12623
12924
  "parameters": {
12624
- "nodeClass": {
12925
+ "name": {
12625
12926
  "type": "string",
12626
- "description": "If provided, returns info for this node type only"
12927
+ "description": "Unique prompt name"
12928
+ },
12929
+ "options": {
12930
+ "type": "PromptRegistrationOptions",
12931
+ "description": "Prompt handler, optional args schema, and description",
12932
+ "properties": {
12933
+ "description": {
12934
+ "type": "string",
12935
+ "description": ""
12936
+ },
12937
+ "args": {
12938
+ "type": "Record<string, z.ZodType>",
12939
+ "description": ""
12940
+ },
12941
+ "handler": {
12942
+ "type": "(args: Record<string, string | undefined>, ctx: MCPContext) => Promise<PromptMessage[]> | PromptMessage[]",
12943
+ "description": ""
12944
+ }
12945
+ }
12627
12946
  }
12628
12947
  },
12629
- "required": [],
12630
- "returns": "Promise<any>"
12948
+ "required": [
12949
+ "name",
12950
+ "options"
12951
+ ],
12952
+ "returns": "this"
12631
12953
  },
12632
- "interrupt": {
12633
- "description": "Interrupt the currently executing prompt.",
12954
+ "configure": {
12955
+ "description": "Configure the MCP protocol server and register all protocol handlers. Called automatically before start() if not already configured.",
12634
12956
  "parameters": {},
12635
12957
  "required": [],
12636
- "returns": "Promise<void>"
12958
+ "returns": "Promise<this>"
12637
12959
  },
12638
- "getModels": {
12639
- "description": "List available models, optionally filtered by type.",
12960
+ "start": {
12961
+ "description": "Start the MCP server with the specified transport.",
12640
12962
  "parameters": {
12641
- "type": {
12642
- "type": "string",
12643
- "description": "Model type filter (e.g., 'checkpoints', 'loras')"
12963
+ "options": {
12964
+ "type": "{\n transport?: 'stdio' | 'http'\n port?: number\n host?: string\n mcpCompat?: MCPCompatMode\n stdioCompat?: StdioCompatMode\n }",
12965
+ "description": "Transport configuration. Defaults to stdio.",
12966
+ "properties": {
12967
+ "transport": {
12968
+ "type": "any",
12969
+ "description": "'stdio' for CLI integration, 'http' for remote access"
12970
+ },
12971
+ "port": {
12972
+ "type": "any",
12973
+ "description": "Port for HTTP transport (default 3001)"
12974
+ }
12975
+ }
12644
12976
  }
12645
12977
  },
12646
12978
  "required": [],
12647
- "returns": "Promise<string[]>"
12979
+ "returns": "Promise<this>"
12648
12980
  },
12649
- "getEmbeddings": {
12650
- "description": "List available embedding models.",
12981
+ "stop": {
12982
+ "description": "Stop the MCP server and close all connections.",
12651
12983
  "parameters": {},
12652
12984
  "required": [],
12653
- "returns": "Promise<string[]>"
12985
+ "returns": "Promise<this>"
12986
+ }
12987
+ },
12988
+ "getters": {
12989
+ "mcpServer": {
12990
+ "description": "The underlying MCP protocol server instance. Created during configure().",
12991
+ "returns": "MCPProtocolServer"
12654
12992
  },
12655
- "uploadImage": {
12656
- "description": "Upload an image to ComfyUI's input directory.",
12657
- "parameters": {
12658
- "file": {
12659
- "type": "Buffer | Blob",
12660
- "description": "The image data as Buffer or Blob"
12993
+ "handlerContext": {
12994
+ "description": "The handler context passed to all tool, resource, and prompt handlers.",
12995
+ "returns": "MCPContext"
12996
+ }
12997
+ },
12998
+ "events": {
12999
+ "toolRegistered": {
13000
+ "name": "toolRegistered",
13001
+ "description": "Event emitted by MCPServer",
13002
+ "arguments": {}
13003
+ },
13004
+ "resourceRegistered": {
13005
+ "name": "resourceRegistered",
13006
+ "description": "Event emitted by MCPServer",
13007
+ "arguments": {}
13008
+ },
13009
+ "promptRegistered": {
13010
+ "name": "promptRegistered",
13011
+ "description": "Event emitted by MCPServer",
13012
+ "arguments": {}
13013
+ },
13014
+ "toolCalled": {
13015
+ "name": "toolCalled",
13016
+ "description": "Event emitted by MCPServer",
13017
+ "arguments": {}
13018
+ }
13019
+ },
13020
+ "state": {},
13021
+ "options": {},
13022
+ "envVars": [],
13023
+ "examples": [
13024
+ {
13025
+ "language": "ts",
13026
+ "code": "const mcp = container.server('mcp', { serverName: 'my-server', serverVersion: '1.0.0' })\n\nmcp.tool('search_files', {\n schema: z.object({ pattern: z.string() }),\n description: 'Search for files',\n handler: async (args, ctx) => {\n return ctx.container.feature('fs').walk('.', { include: [args.pattern] }).files.join('\\n')\n }\n})\n\nawait mcp.start()"
13027
+ }
13028
+ ],
13029
+ "types": {
13030
+ "ToolRegistrationOptions": {
13031
+ "description": "",
13032
+ "properties": {
13033
+ "schema": {
13034
+ "type": "z.ZodType",
13035
+ "description": "",
13036
+ "optional": true
12661
13037
  },
12662
- "filename": {
13038
+ "description": {
12663
13039
  "type": "string",
12664
- "description": "File name for the upload"
13040
+ "description": "",
13041
+ "optional": true
12665
13042
  },
12666
- "opts": {
12667
- "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
12668
- "description": "Upload options (subfolder, type, overwrite)"
12669
- }
12670
- },
12671
- "required": [
12672
- "file",
12673
- "filename"
12674
- ],
12675
- "returns": "Promise<any>"
12676
- },
12677
- "viewImage": {
12678
- "description": "Download a generated image from ComfyUI as a Buffer.",
12679
- "parameters": {
12680
- "filename": {
12681
- "type": "string",
12682
- "description": "The image filename"
12683
- },
12684
- "subfolder": {
12685
- "type": "any",
12686
- "description": "Subfolder within the output directory"
12687
- },
12688
- "type": {
12689
- "type": "any",
12690
- "description": "Image type ('output', 'input', 'temp')"
12691
- }
12692
- },
12693
- "required": [
12694
- "filename"
12695
- ],
12696
- "returns": "Promise<Buffer>"
12697
- },
12698
- "connectWs": {
12699
- "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
12700
- "parameters": {},
12701
- "required": [],
12702
- "returns": "Promise<void>"
12703
- },
12704
- "disconnectWs": {
12705
- "description": "Close the WebSocket connection.",
12706
- "parameters": {},
12707
- "required": [],
12708
- "returns": "void"
12709
- },
12710
- "toApiFormat": {
12711
- "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
12712
- "parameters": {
12713
- "workflow": {
12714
- "type": "Record<string, any>",
12715
- "description": "Parameter workflow"
12716
- }
12717
- },
12718
- "required": [
12719
- "workflow"
12720
- ],
12721
- "returns": "Promise<Record<string, any>>"
12722
- },
12723
- "runWorkflow": {
12724
- "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
12725
- "parameters": {
12726
- "workflow": {
12727
- "type": "Record<string, any>",
12728
- "description": "Parameter workflow"
12729
- },
12730
- "inputs": {
12731
- "type": "Record<string, any>",
12732
- "description": "Parameter inputs"
12733
- },
12734
- "options": {
12735
- "type": "WorkflowRunOptions",
12736
- "description": "Parameter options",
12737
- "properties": {
12738
- "poll": {
12739
- "type": "boolean",
12740
- "description": "Use polling instead of WebSocket for tracking execution"
12741
- },
12742
- "pollInterval": {
12743
- "type": "number",
12744
- "description": "Polling interval in ms (default 1000)"
12745
- },
12746
- "inputMap": {
12747
- "type": "InputMapping",
12748
- "description": "Named input mapping: semantic name -> { nodeId, field }"
12749
- },
12750
- "outputDir": {
12751
- "type": "string",
12752
- "description": "If provided, output images are downloaded to this directory"
12753
- }
12754
- }
12755
- }
12756
- },
12757
- "required": [
12758
- "workflow"
12759
- ],
12760
- "returns": "Promise<WorkflowResult>"
12761
- }
12762
- },
12763
- "getters": {
12764
- "clientId": {
12765
- "description": "The unique client ID used for WebSocket session tracking.",
12766
- "returns": "string"
12767
- },
12768
- "wsURL": {
12769
- "description": "The WebSocket URL derived from baseURL or overridden via options.",
12770
- "returns": "string"
12771
- }
12772
- },
12773
- "events": {
12774
- "execution_start": {
12775
- "name": "execution_start",
12776
- "description": "Event emitted by ComfyUIClient",
12777
- "arguments": {}
12778
- },
12779
- "execution_complete": {
12780
- "name": "execution_complete",
12781
- "description": "Event emitted by ComfyUIClient",
12782
- "arguments": {}
12783
- },
12784
- "executing": {
12785
- "name": "executing",
12786
- "description": "Event emitted by ComfyUIClient",
12787
- "arguments": {}
12788
- },
12789
- "progress": {
12790
- "name": "progress",
12791
- "description": "Event emitted by ComfyUIClient",
12792
- "arguments": {}
12793
- },
12794
- "executed": {
12795
- "name": "executed",
12796
- "description": "Event emitted by ComfyUIClient",
12797
- "arguments": {}
12798
- },
12799
- "execution_cached": {
12800
- "name": "execution_cached",
12801
- "description": "Event emitted by ComfyUIClient",
12802
- "arguments": {}
12803
- },
12804
- "execution_error": {
12805
- "name": "execution_error",
12806
- "description": "Event emitted by ComfyUIClient",
12807
- "arguments": {}
12808
- }
12809
- },
12810
- "state": {},
12811
- "options": {},
12812
- "envVars": [],
12813
- "examples": [
12814
- {
12815
- "language": "ts",
12816
- "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
12817
- }
12818
- ],
12819
- "types": {
12820
- "WorkflowRunOptions": {
12821
- "description": "",
12822
- "properties": {
12823
- "poll": {
12824
- "type": "boolean",
12825
- "description": "Use polling instead of WebSocket for tracking execution",
12826
- "optional": true
12827
- },
12828
- "pollInterval": {
12829
- "type": "number",
12830
- "description": "Polling interval in ms (default 1000)",
12831
- "optional": true
12832
- },
12833
- "inputMap": {
12834
- "type": "InputMapping",
12835
- "description": "Named input mapping: semantic name -> { nodeId, field }",
12836
- "optional": true
12837
- },
12838
- "outputDir": {
12839
- "type": "string",
12840
- "description": "If provided, output images are downloaded to this directory",
12841
- "optional": true
13043
+ "handler": {
13044
+ "type": "Function | ((args: any, ctx: any) => any)",
13045
+ "description": "",
13046
+ "optional": true
12842
13047
  }
12843
13048
  }
12844
13049
  },
12845
- "WorkflowResult": {
13050
+ "ResourceRegistrationOptions": {
12846
13051
  "description": "",
12847
13052
  "properties": {
12848
- "promptId": {
13053
+ "name": {
12849
13054
  "type": "string",
12850
- "description": ""
12851
- },
12852
- "outputs": {
12853
- "type": "Record<string, any>",
12854
- "description": ""
12855
- },
12856
- "images": {
12857
- "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
12858
13055
  "description": "",
12859
13056
  "optional": true
12860
- }
12861
- }
12862
- }
12863
- }
12864
- });
12865
-
12866
- setBuildTimeData('servers.mcp', {
12867
- "id": "servers.mcp",
12868
- "description": "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).",
12869
- "shortcut": "servers.mcp",
12870
- "className": "MCPServer",
12871
- "methods": {
12872
- "tool": {
12873
- "description": "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).",
12874
- "parameters": {
12875
- "name": {
12876
- "type": "string",
12877
- "description": "Unique tool name"
12878
- },
12879
- "options": {
12880
- "type": "ToolRegistrationOptions",
12881
- "description": "Tool schema, description, and handler",
12882
- "properties": {
12883
- "schema": {
12884
- "type": "z.ZodObject<any>",
12885
- "description": ""
12886
- },
12887
- "description": {
12888
- "type": "string",
12889
- "description": ""
12890
- },
12891
- "handler": {
12892
- "type": "(args: any, ctx: MCPContext) => any",
12893
- "description": ""
12894
- }
12895
- }
12896
- }
12897
- },
12898
- "required": [
12899
- "name",
12900
- "options"
12901
- ],
12902
- "returns": "this"
12903
- },
12904
- "resource": {
12905
- "description": "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).",
12906
- "parameters": {
12907
- "uri": {
12908
- "type": "string",
12909
- "description": "Unique resource URI (e.g. \"project://readme\")"
12910
13057
  },
12911
- "handlerOrOptions": {
12912
- "type": "ResourceRegistrationOptions['handler'] | ResourceRegistrationOptions",
12913
- "description": "Handler function or options object with handler"
12914
- }
12915
- },
12916
- "required": [
12917
- "uri",
12918
- "handlerOrOptions"
12919
- ],
12920
- "returns": "this"
12921
- },
12922
- "prompt": {
12923
- "description": "Register an MCP prompt. Prompts are reusable message templates that AI clients can invoke with optional string arguments.",
12924
- "parameters": {
12925
- "name": {
13058
+ "description": {
12926
13059
  "type": "string",
12927
- "description": "Unique prompt name"
12928
- },
12929
- "options": {
12930
- "type": "PromptRegistrationOptions",
12931
- "description": "Prompt handler, optional args schema, and description",
12932
- "properties": {
12933
- "description": {
12934
- "type": "string",
12935
- "description": ""
12936
- },
12937
- "args": {
12938
- "type": "Record<string, z.ZodType>",
12939
- "description": ""
12940
- },
12941
- "handler": {
12942
- "type": "(args: Record<string, string | undefined>, ctx: MCPContext) => Promise<PromptMessage[]> | PromptMessage[]",
12943
- "description": ""
12944
- }
12945
- }
12946
- }
12947
- },
12948
- "required": [
12949
- "name",
12950
- "options"
12951
- ],
12952
- "returns": "this"
12953
- },
12954
- "configure": {
12955
- "description": "Configure the MCP protocol server and register all protocol handlers. Called automatically before start() if not already configured.",
12956
- "parameters": {},
12957
- "required": [],
12958
- "returns": "Promise<this>"
12959
- },
12960
- "start": {
12961
- "description": "Start the MCP server with the specified transport.",
12962
- "parameters": {
12963
- "options": {
12964
- "type": "{\n transport?: 'stdio' | 'http'\n port?: number\n host?: string\n mcpCompat?: MCPCompatMode\n stdioCompat?: StdioCompatMode\n }",
12965
- "description": "Transport configuration. Defaults to stdio.",
12966
- "properties": {
12967
- "transport": {
12968
- "type": "any",
12969
- "description": "'stdio' for CLI integration, 'http' for remote access"
12970
- },
12971
- "port": {
12972
- "type": "any",
12973
- "description": "Port for HTTP transport (default 3001)"
12974
- }
12975
- }
12976
- }
12977
- },
12978
- "required": [],
12979
- "returns": "Promise<this>"
12980
- },
12981
- "stop": {
12982
- "description": "Stop the MCP server and close all connections.",
12983
- "parameters": {},
12984
- "required": [],
12985
- "returns": "Promise<this>"
12986
- }
12987
- },
12988
- "getters": {
12989
- "mcpServer": {
12990
- "description": "The underlying MCP protocol server instance. Created during configure().",
12991
- "returns": "MCPProtocolServer"
12992
- },
12993
- "handlerContext": {
12994
- "description": "The handler context passed to all tool, resource, and prompt handlers.",
12995
- "returns": "MCPContext"
12996
- }
12997
- },
12998
- "events": {
12999
- "toolRegistered": {
13000
- "name": "toolRegistered",
13001
- "description": "Event emitted by MCPServer",
13002
- "arguments": {}
13003
- },
13004
- "resourceRegistered": {
13005
- "name": "resourceRegistered",
13006
- "description": "Event emitted by MCPServer",
13007
- "arguments": {}
13008
- },
13009
- "promptRegistered": {
13010
- "name": "promptRegistered",
13011
- "description": "Event emitted by MCPServer",
13012
- "arguments": {}
13013
- },
13014
- "toolCalled": {
13015
- "name": "toolCalled",
13016
- "description": "Event emitted by MCPServer",
13017
- "arguments": {}
13018
- }
13019
- },
13020
- "state": {},
13021
- "options": {},
13022
- "envVars": [],
13023
- "examples": [
13024
- {
13025
- "language": "ts",
13026
- "code": "const mcp = container.server('mcp', { serverName: 'my-server', serverVersion: '1.0.0' })\n\nmcp.tool('search_files', {\n schema: z.object({ pattern: z.string() }),\n description: 'Search for files',\n handler: async (args, ctx) => {\n return ctx.container.feature('fs').walk('.', { include: [args.pattern] }).files.join('\\n')\n }\n})\n\nawait mcp.start()"
13027
- }
13028
- ],
13029
- "types": {
13030
- "ToolRegistrationOptions": {
13031
- "description": "",
13032
- "properties": {
13033
- "schema": {
13034
- "type": "z.ZodObject<any>",
13035
13060
  "description": "",
13036
13061
  "optional": true
13037
13062
  },
13038
- "description": {
13063
+ "mimeType": {
13039
13064
  "type": "string",
13040
13065
  "description": "",
13041
13066
  "optional": true
13042
13067
  },
13043
13068
  "handler": {
13044
- "type": "(args: any, ctx: MCPContext) => any",
13069
+ "type": "(uri: string, ctx: MCPContext) => Promise<string> | string",
13045
13070
  "description": ""
13046
13071
  }
13047
13072
  }
@@ -13055,30 +13080,6 @@ setBuildTimeData('servers.mcp', {
13055
13080
  }
13056
13081
  }
13057
13082
  },
13058
- "ResourceRegistrationOptions": {
13059
- "description": "",
13060
- "properties": {
13061
- "name": {
13062
- "type": "string",
13063
- "description": "",
13064
- "optional": true
13065
- },
13066
- "description": {
13067
- "type": "string",
13068
- "description": "",
13069
- "optional": true
13070
- },
13071
- "mimeType": {
13072
- "type": "string",
13073
- "description": "",
13074
- "optional": true
13075
- },
13076
- "handler": {
13077
- "type": "(uri: string, ctx: MCPContext) => Promise<string> | string",
13078
- "description": ""
13079
- }
13080
- }
13081
- },
13082
13083
  "PromptRegistrationOptions": {
13083
13084
  "description": "",
13084
13085
  "properties": {
@@ -13370,8 +13371,51 @@ setBuildTimeData('features.assistantsManager', {
13370
13371
  "shortcut": "features.assistantsManager",
13371
13372
  "className": "AssistantsManager",
13372
13373
  "methods": {
13374
+ "intercept": {
13375
+ "description": "Registers a pipeline interceptor that is applied to every assistant created by this manager. Interceptors are applied at the given interception point on each assistant at creation time. This mirrors the per-assistant `assistant.intercept(point, fn)` API, but scopes it globally across all assistants managed here — useful for cross-cutting concerns like logging, tracing, or policy enforcement.",
13376
+ "parameters": {
13377
+ "point": {
13378
+ "type": "K",
13379
+ "description": "The interception point (beforeAsk, beforeTurn, beforeToolCall, afterToolCall, beforeResponse)"
13380
+ },
13381
+ "fn": {
13382
+ "type": "InterceptorFn<InterceptorPoints[K]>",
13383
+ "description": "Middleware function receiving (ctx, next)"
13384
+ }
13385
+ },
13386
+ "required": [
13387
+ "point",
13388
+ "fn"
13389
+ ],
13390
+ "returns": "this",
13391
+ "examples": [
13392
+ {
13393
+ "language": "ts",
13394
+ "code": "manager.intercept('beforeAsk', async (ctx, next) => {\n console.log(`[${ctx.assistant.name}] asking: ${ctx.message}`)\n await next()\n})"
13395
+ }
13396
+ ]
13397
+ },
13398
+ "addDiscoveryFolder": {
13399
+ "description": "Registers an additional folder to scan during assistant discovery and immediately triggers a new discovery pass.",
13400
+ "parameters": {
13401
+ "folderPath": {
13402
+ "type": "string",
13403
+ "description": "Absolute path to a folder containing assistant subdirectories"
13404
+ }
13405
+ },
13406
+ "required": [
13407
+ "folderPath"
13408
+ ],
13409
+ "returns": "Promise<this>",
13410
+ "examples": [
13411
+ {
13412
+ "language": "ts",
13413
+ "code": "await manager.addDiscoveryFolder('/path/to/more/assistants')\nconsole.log(manager.available) // includes assistants from the new folder"
13414
+ }
13415
+ ]
13416
+ },
13373
13417
  "discover": {
13374
- "description": "Discovers assistants by listing subdirectories in ~/.luca/assistants/ and cwd/assistants/. Each subdirectory containing a CORE.md is an assistant.",
13418
+ "description": "",
13375
13419
  "parameters": {},
13376
13420
  "required": [],
13377
13421
  "returns": "Promise<this>"
@@ -13615,6 +13659,47 @@ setBuildTimeData('features.conversation', {
13615
13659
  ],
13616
13660
  "returns": "this"
13617
13661
  },
13662
+ "stub": {
13663
+ "description": "Register a hardcoded stub response that bypasses the API when the user's message matches. Streaming is still simulated — chunk/preview events fire word-by-word.",
13664
+ "parameters": {
13665
+ "matcher": {
13666
+ "type": "string | RegExp",
13667
+ "description": "Exact string match, substring, or RegExp tested against user input"
13668
+ },
13669
+ "response": {
13670
+ "type": "string | (() => string)",
13671
+ "description": "The text to stream back, or a zero-arg function that returns it"
13672
+ }
13673
+ },
13674
+ "required": [
13675
+ "matcher",
13676
+ "response"
13677
+ ],
13678
+ "returns": "this",
13679
+ "examples": [
13680
+ {
13681
+ "language": "ts",
13682
+ "code": "conversation.stub('hello', 'Hi there!')\nconversation.stub(/weather/i, () => 'Sunny and 72°F.')"
13683
+ }
13684
+ ]
13685
+ },
13686
+ "fork": {
13687
+ "description": "Fork the conversation into a new independent instance. The fork inherits the same system prompt, tools, and full message history, but has its own identity and state — changes in either direction do not affect the other.",
13688
+ "parameters": {
13689
+ "overrides": {
13690
+ "type": "Partial<ConversationOptions>",
13691
+ "description": "Optional option overrides for the forked conversation (e.g. different model or title)"
13692
+ }
13693
+ },
13694
+ "required": [],
13695
+ "returns": "Conversation",
13696
+ "examples": [
13697
+ {
13698
+ "language": "ts",
13699
+ "code": "const fork = conversation.fork()\nawait fork.ask('What if we took a different approach?')\n// original conversation is unchanged"
13700
+ }
13701
+ ]
13702
+ },
13618
13703
  "estimateTokens": {
13619
13704
  "description": "Estimate the input token count for the current messages array using the js-tiktoken tokenizer. Updates state.",
13620
13705
  "parameters": {},
@@ -13793,48 +13878,48 @@ setBuildTimeData('features.conversation', {
13793
13878
  "description": "Event emitted by Conversation",
13794
13879
  "arguments": {}
13795
13880
  },
13796
- "rawEvent": {
13797
- "name": "rawEvent",
13881
+ "chunk": {
13882
+ "name": "chunk",
13798
13883
  "description": "Event emitted by Conversation",
13799
13884
  "arguments": {}
13800
13885
  },
13801
- "mcpEvent": {
13802
- "name": "mcpEvent",
13886
+ "preview": {
13887
+ "name": "preview",
13803
13888
  "description": "Event emitted by Conversation",
13804
13889
  "arguments": {}
13805
13890
  },
13806
- "chunk": {
13807
- "name": "chunk",
13891
+ "turnEnd": {
13892
+ "name": "turnEnd",
13808
13893
  "description": "Event emitted by Conversation",
13809
13894
  "arguments": {}
13810
13895
  },
13811
- "preview": {
13812
- "name": "preview",
13896
+ "response": {
13897
+ "name": "response",
13813
13898
  "description": "Event emitted by Conversation",
13814
13899
  "arguments": {}
13815
13900
  },
13816
- "responseCompleted": {
13817
- "name": "responseCompleted",
13901
+ "rawEvent": {
13902
+ "name": "rawEvent",
13818
13903
  "description": "Event emitted by Conversation",
13819
13904
  "arguments": {}
13820
13905
  },
13821
- "toolCallsStart": {
13822
- "name": "toolCallsStart",
13906
+ "mcpEvent": {
13907
+ "name": "mcpEvent",
13823
13908
  "description": "Event emitted by Conversation",
13824
13909
  "arguments": {}
13825
13910
  },
13826
- "toolCallsEnd": {
13827
- "name": "toolCallsEnd",
13911
+ "responseCompleted": {
13912
+ "name": "responseCompleted",
13828
13913
  "description": "Event emitted by Conversation",
13829
13914
  "arguments": {}
13830
13915
  },
13831
- "turnEnd": {
13832
- "name": "turnEnd",
13916
+ "toolCallsStart": {
13917
+ "name": "toolCallsStart",
13833
13918
  "description": "Event emitted by Conversation",
13834
13919
  "arguments": {}
13835
13920
  },
13836
- "response": {
13837
- "name": "response",
13921
+ "toolCallsEnd": {
13922
+ "name": "toolCallsEnd",
13838
13923
  "description": "Event emitted by Conversation",
13839
13924
  "arguments": {}
13840
13925
  }
@@ -13933,7 +14018,7 @@ setBuildTimeData('features.openapi', {
13933
14018
  ],
13934
14019
  "returns": "EndpointInfo | undefined"
13935
14020
  },
13936
- "toTools": {
14021
+ "toOpenAITools": {
13937
14022
  "description": "Convert all endpoints into OpenAI-compatible tool definitions.",
13938
14023
  "parameters": {
13939
14024
  "filter": {
@@ -14027,7 +14112,7 @@ setBuildTimeData('features.openapi', {
14027
14112
  "examples": [
14028
14113
  {
14029
14114
  "language": "ts",
14030
- "code": "const api = container.feature('openapi', { url: 'https://petstore.swagger.io/v2' })\nawait api.load()\n\n// Inspect all endpoints\napi.endpoints\n\n// Get a single endpoint by its friendly name\napi.endpoint('getPetById')\n\n// Convert to OpenAI tool definitions\napi.toTools()\n\n// Convert a single endpoint to a function definition\napi.toFunction('getPetById')"
14115
+ "code": "const api = container.feature('openapi', { url: 'https://petstore.swagger.io/v2' })\nawait api.load()\n\n// Inspect all endpoints\napi.endpoints\n\n// Get a single endpoint by its friendly name\napi.endpoint('getPetById')\n\n// Convert to OpenAI tool definitions\napi.toOpenAITools()\n\n// Convert a single endpoint to a function definition\napi.toFunction('getPetById')"
14031
14116
  }
14032
14117
  ],
14033
14118
  "types": {
@@ -14955,6 +15040,19 @@ setBuildTimeData('features.skillsLibrary', {
14955
15040
  "shortcut": "features.skillsLibrary",
14956
15041
  "className": "SkillsLibrary",
14957
15042
  "methods": {
15043
+ "setupToolsConsumer": {
15044
+ "description": "",
15045
+ "parameters": {
15046
+ "assistant": {
15047
+ "type": "Feature",
15048
+ "description": "Parameter assistant"
15049
+ }
15050
+ },
15051
+ "required": [
15052
+ "assistant"
15053
+ ],
15054
+ "returns": "void"
15055
+ },
14958
15056
  "start": {
14959
15057
  "description": "Start the skills library: read config, scan all locations.",
14960
15058
  "parameters": {},
@@ -15081,6 +15179,24 @@ setBuildTimeData('features.skillsLibrary', {
15081
15179
  "{ skillName, question }"
15082
15180
  ],
15083
15181
  "returns": "Promise<string>"
15182
+ },
15183
+ "findRelevantSkillsForAssistant": {
15184
+ "description": "Fork the given assistant and ask it which skills (if any) are relevant to the user's query. Returns an array of skill names that should be loaded before the real question is answered. The fork is ephemeral (historyMode: 'none') and uses structured output so the result is always a clean string array — never free text.",
15185
+ "parameters": {
15186
+ "assistant": {
15187
+ "type": "Assistant",
15188
+ "description": "The assistant instance to fork"
15189
+ },
15190
+ "userQuery": {
15191
+ "type": "string",
15192
+ "description": "The user's original question"
15193
+ }
15194
+ },
15195
+ "required": [
15196
+ "assistant",
15197
+ "userQuery"
15198
+ ],
15199
+ "returns": "Promise<string[]>"
15084
15200
  }
15085
15201
  },
15086
15202
  "getters": {
@@ -15517,6 +15633,10 @@ setBuildTimeData('features.assistant', {
15517
15633
  "description": "Parsed YAML frontmatter from CORE.md, or empty object if none.",
15518
15634
  "returns": "Record<string, any>"
15519
15635
  },
15636
+ "effectiveOptions": {
15637
+ "description": "Merged options where CORE.md frontmatter provides defaults and constructor options take precedence. Prefer this over `this.options` anywhere model parameters or runtime config is consumed.",
15638
+ "returns": "AssistantOptions & Record<string, any>"
15639
+ },
15520
15640
  "paths": {
15521
15641
  "description": "Provides a helper for creating paths off of the assistant's base folder",
15522
15642
  "returns": "any"
@@ -16096,6 +16216,77 @@ setBuildTimeData('features.claudeCode', {
16096
16216
  }
16097
16217
  ]
16098
16218
  },
16219
+ "listProcessSessions": {
16220
+ "description": "List all Claude Code processes currently registered in ~/.claude/sessions/. Returns each session's metadata along with whether the process is still alive.",
16221
+ "parameters": {},
16222
+ "required": [],
16223
+ "returns": "Promise<Array<{\n pid: number\n sessionId: string\n cwd: string\n startedAt: number\n kind: string\n entrypoint: string\n alive: boolean\n }>>",
16224
+ "examples": [
16225
+ {
16226
+ "language": "ts",
16227
+ "code": "const sessions = await cc.listProcessSessions()\nfor (const s of sessions) {\n console.log(`[${s.alive ? 'LIVE' : 'dead'}] PID ${s.pid} in ${s.cwd}`)\n}"
16228
+ }
16229
+ ]
16230
+ },
16231
+ "getProcessSession": {
16232
+ "description": "Read a single process session by PID from ~/.claude/sessions/<pid>.json.",
16233
+ "parameters": {
16234
+ "pid": {
16235
+ "type": "number",
16236
+ "description": "The process ID"
16237
+ }
16238
+ },
16239
+ "required": [
16240
+ "pid"
16241
+ ],
16242
+ "returns": "Promise<{\n pid: number\n sessionId: string\n cwd: string\n startedAt: number\n kind: string\n entrypoint: string\n } | null>",
16243
+ "examples": [
16244
+ {
16245
+ "language": "ts",
16246
+ "code": "const session = await cc.getProcessSession(12345)\nconsole.log(session?.cwd)"
16247
+ }
16248
+ ]
16249
+ },
16250
+ "getConversationHistory": {
16251
+ "description": "Read the conversation history for a Claude Code session from its JSONL file in ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl. Returns an array of parsed message objects (user, assistant, tool_use, tool_result).",
16252
+ "parameters": {
16253
+ "sessionId": {
16254
+ "type": "string",
16255
+ "description": "The Claude CLI session ID (from listProcessSessions or getProcessSession)"
16256
+ },
16257
+ "cwd": {
16258
+ "type": "string",
16259
+ "description": "The working directory of the session (used to locate the project folder)"
16260
+ }
16261
+ },
16262
+ "required": [
16263
+ "sessionId"
16264
+ ],
16265
+ "returns": "Promise<any[]>",
16266
+ "examples": [
16267
+ {
16268
+ "language": "ts",
16269
+ "code": "const sessions = await cc.listProcessSessions()\nconst s = sessions[0]\nconst history = await cc.getConversationHistory(s.sessionId, s.cwd)\nconsole.log(history.length, 'turns')"
16270
+ }
16271
+ ]
16272
+ },
16273
+ "listSessionsForCwd": {
16274
+ "description": "List all conversation sessions stored for a given working directory. Reads ~/.claude/projects/<encoded-cwd>/ and returns metadata for each .jsonl file.",
16275
+ "parameters": {
16276
+ "cwd": {
16277
+ "type": "string",
16278
+ "description": "The working directory path to look up"
16279
+ }
16280
+ },
16281
+ "required": [],
16282
+ "returns": "Promise<Array<{\n sessionId: string\n filePath: string\n messageCount: number\n }>>",
16283
+ "examples": [
16284
+ {
16285
+ "language": "ts",
16286
+ "code": "const sessions = await cc.listSessionsForCwd('/Users/me/my-project')\nfor (const s of sessions) {\n console.log(s.sessionId, s.messageCount, 'messages')\n}"
16287
+ }
16288
+ ]
16289
+ },
16099
16290
  "cleanupMcpTempFiles": {
16100
16291
  "description": "Clean up any temp MCP config files created during sessions.",
16101
16292
  "parameters": {},
@@ -18292,7 +18483,7 @@ setContainerBuildTimeData('Container', {
18292
18483
  "description": "The id of the feature to create."
18293
18484
  },
18294
18485
  "options": {
18295
- "type": "ConstructorParameters<Features[T]>[0]",
18486
+ "type": "FeatureInputOptions<Features>[T] | Record<string, unknown>",
18296
18487
  "description": "The options to pass to the feature constructor."
18297
18488
  }
18298
18489
  },
@@ -18301,6 +18492,52 @@ setContainerBuildTimeData('Container', {
18301
18492
  ],
18302
18493
  "returns": "InstanceType<Features[T]>"
18303
18494
  },
18495
+ "entity": {
18496
+ "description": "Creates a lightweight entity object with observable state, a typed event bus, and access to the container. Same id + options always returns the same cached base instance. An optional third argument auto-extends the entity with functions and getters. All extended methods and getters can access the entity (state, options, container, on/off/emit, etc.) via `this`.",
18497
+ "parameters": {
18498
+ "id": {
18499
+ "type": "string",
18500
+ "description": "Stable identifier for this entity (included in cache key)"
18501
+ },
18502
+ "options": {
18503
+ "type": "TOptions",
18504
+ "description": "Arbitrary options stored on `entity.options` (included in cache key)"
18505
+ },
18506
+ "extensions": {
18507
+ "type": "Ext & ThisType<Entity<TState, TOptions, TEvents> & Ext>",
18508
+ "description": "Optional object of functions/getters to graft onto the entity"
18509
+ }
18510
+ },
18511
+ "required": [
18512
+ "id"
18513
+ ],
18514
+ "returns": "Entity<TState, TOptions, TEvents> & Ext",
18515
+ "examples": [
18516
+ {
18517
+ "language": "ts",
18518
+ "code": "// Basic entity with typed state and events\nconst counter = container.entity<{ count: number }>('counter')\ncounter.setState({ count: 0 })\ncounter.on('tick', () => counter.setState(s => ({ count: s.count + 1 })))\n\n// With options and auto-extension\nconst user = container.entity('user:42', { name: 'Alice' }, {\n greet() { return `Hello ${this.options.name}` },\n get label() { return `User: ${this.options.name}` },\n})\nuser.greet() // \"Hello Alice\""
18519
+ }
18520
+ ]
18521
+ },
18522
+ "getHelperByUUID": {
18523
+ "description": "Look up any helper instance (feature, client, server) by its UUID. Returns undefined if the UUID is unknown or the instance was never created.",
18524
+ "parameters": {
18525
+ "uuid": {
18526
+ "type": "string",
18527
+ "description": "The `instance.uuid` value assigned at construction time"
18528
+ }
18529
+ },
18530
+ "required": [
18531
+ "uuid"
18532
+ ],
18533
+ "returns": "Helper | undefined",
18534
+ "examples": [
18535
+ {
18536
+ "language": "ts",
18537
+ "code": "const assistant = container.feature('assistant')\nconst { uuid } = assistant\n// ... later ...\nconst same = container.getHelperByUUID(uuid) // === assistant"
18538
+ }
18539
+ ]
18540
+ },
18304
18541
  "start": {
18305
18542
  "description": "Start the container. Emits the 'started' event and sets `state.started` to true. Plugins and features can listen for this event to perform initialization.",
18306
18543
  "parameters": {},
@@ -18607,7 +18844,7 @@ setContainerBuildTimeData('NodeContainer', {
18607
18844
  },
18608
18845
  "urlUtils": {
18609
18846
  "description": "Returns URL utility functions for parsing URIs.",
18610
- "returns": "{ parse: (uri: string) => url.URL | null }"
18847
+ "returns": "{ parse: (uri: string) => url.UrlWithStringQuery }"
18611
18848
  },
18612
18849
  "paths": {
18613
18850
  "description": "Returns path utility functions scoped to the current working directory (join, resolve, relative, dirname, parse).",
@@ -30727,6 +30964,302 @@ export const introspectionData = [
30727
30964
  }
30728
30965
  ]
30729
30966
  },
30967
+ {
30968
+ "id": "clients.comfyui",
30969
+ "description": "ComfyUI client — execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
30970
+ "shortcut": "clients.comfyui",
30971
+ "className": "ComfyUIClient",
30972
+ "methods": {
30973
+ "queuePrompt": {
30974
+ "description": "Queue a prompt (API-format workflow) for execution.",
30975
+ "parameters": {
30976
+ "prompt": {
30977
+ "type": "Record<string, any>",
30978
+ "description": "The API-format workflow object"
30979
+ },
30980
+ "clientId": {
30981
+ "type": "string",
30982
+ "description": "Override the client ID for this request"
30983
+ }
30984
+ },
30985
+ "required": [
30986
+ "prompt"
30987
+ ],
30988
+ "returns": "Promise<{ prompt_id: string; number: number }>",
30989
+ "examples": [
30990
+ {
30991
+ "language": "ts",
30992
+ "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
30993
+ }
30994
+ ]
30995
+ },
30996
+ "getQueue": {
30997
+ "description": "Get the current prompt queue status.",
30998
+ "parameters": {},
30999
+ "required": [],
31000
+ "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
31001
+ },
31002
+ "getHistory": {
31003
+ "description": "Get execution history, optionally for a specific prompt.",
31004
+ "parameters": {
31005
+ "promptId": {
31006
+ "type": "string",
31007
+ "description": "If provided, returns history for this prompt only"
31008
+ }
31009
+ },
31010
+ "required": [],
31011
+ "returns": "Promise<Record<string, any>>"
31012
+ },
31013
+ "getSystemStats": {
31014
+ "description": "Get system stats including GPU memory and queue info.",
31015
+ "parameters": {},
31016
+ "required": [],
31017
+ "returns": "Promise<any>"
31018
+ },
31019
+ "getObjectInfo": {
31020
+ "description": "Get node type info with input/output schemas.",
31021
+ "parameters": {
31022
+ "nodeClass": {
31023
+ "type": "string",
31024
+ "description": "If provided, returns info for this node type only"
31025
+ }
31026
+ },
31027
+ "required": [],
31028
+ "returns": "Promise<any>"
31029
+ },
31030
+ "interrupt": {
31031
+ "description": "Interrupt the currently executing prompt.",
31032
+ "parameters": {},
31033
+ "required": [],
31034
+ "returns": "Promise<void>"
31035
+ },
31036
+ "getModels": {
31037
+ "description": "List available models, optionally filtered by type.",
31038
+ "parameters": {
31039
+ "type": {
31040
+ "type": "string",
31041
+ "description": "Model type filter (e.g., 'checkpoints', 'loras')"
31042
+ }
31043
+ },
31044
+ "required": [],
31045
+ "returns": "Promise<string[]>"
31046
+ },
31047
+ "getEmbeddings": {
31048
+ "description": "List available embedding models.",
31049
+ "parameters": {},
31050
+ "required": [],
31051
+ "returns": "Promise<string[]>"
31052
+ },
31053
+ "uploadImage": {
31054
+ "description": "Upload an image to ComfyUI's input directory.",
31055
+ "parameters": {
31056
+ "file": {
31057
+ "type": "Buffer | Blob",
31058
+ "description": "The image data as Buffer or Blob"
31059
+ },
31060
+ "filename": {
31061
+ "type": "string",
31062
+ "description": "File name for the upload"
31063
+ },
31064
+ "opts": {
31065
+ "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
31066
+ "description": "Upload options (subfolder, type, overwrite)"
31067
+ }
31068
+ },
31069
+ "required": [
31070
+ "file",
31071
+ "filename"
31072
+ ],
31073
+ "returns": "Promise<any>"
31074
+ },
31075
+ "viewImage": {
31076
+ "description": "Download a generated image from ComfyUI as a Buffer.",
31077
+ "parameters": {
31078
+ "filename": {
31079
+ "type": "string",
31080
+ "description": "The image filename"
31081
+ },
31082
+ "subfolder": {
31083
+ "type": "any",
31084
+ "description": "Subfolder within the output directory"
31085
+ },
31086
+ "type": {
31087
+ "type": "any",
31088
+ "description": "Image type ('output', 'input', 'temp')"
31089
+ }
31090
+ },
31091
+ "required": [
31092
+ "filename"
31093
+ ],
31094
+ "returns": "Promise<Buffer>"
31095
+ },
31096
+ "connectWs": {
31097
+ "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
31098
+ "parameters": {},
31099
+ "required": [],
31100
+ "returns": "Promise<void>"
31101
+ },
31102
+ "disconnectWs": {
31103
+ "description": "Close the WebSocket connection.",
31104
+ "parameters": {},
31105
+ "required": [],
31106
+ "returns": "void"
31107
+ },
31108
+ "toApiFormat": {
31109
+ "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
31110
+ "parameters": {
31111
+ "workflow": {
31112
+ "type": "Record<string, any>",
31113
+ "description": "Parameter workflow"
31114
+ }
31115
+ },
31116
+ "required": [
31117
+ "workflow"
31118
+ ],
31119
+ "returns": "Promise<Record<string, any>>"
31120
+ },
31121
+ "runWorkflow": {
31122
+ "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
31123
+ "parameters": {
31124
+ "workflow": {
31125
+ "type": "Record<string, any>",
31126
+ "description": "Parameter workflow"
31127
+ },
31128
+ "inputs": {
31129
+ "type": "Record<string, any>",
31130
+ "description": "Parameter inputs"
31131
+ },
31132
+ "options": {
31133
+ "type": "WorkflowRunOptions",
31134
+ "description": "Parameter options",
31135
+ "properties": {
31136
+ "poll": {
31137
+ "type": "boolean",
31138
+ "description": "Use polling instead of WebSocket for tracking execution"
31139
+ },
31140
+ "pollInterval": {
31141
+ "type": "number",
31142
+ "description": "Polling interval in ms (default 1000)"
31143
+ },
31144
+ "inputMap": {
31145
+ "type": "InputMapping",
31146
+ "description": "Named input mapping: semantic name -> { nodeId, field }"
31147
+ },
31148
+ "outputDir": {
31149
+ "type": "string",
31150
+ "description": "If provided, output images are downloaded to this directory"
31151
+ }
31152
+ }
31153
+ }
31154
+ },
31155
+ "required": [
31156
+ "workflow"
31157
+ ],
31158
+ "returns": "Promise<WorkflowResult>"
31159
+ }
31160
+ },
31161
+ "getters": {
31162
+ "clientId": {
31163
+ "description": "The unique client ID used for WebSocket session tracking.",
31164
+ "returns": "string"
31165
+ },
31166
+ "wsURL": {
31167
+ "description": "The WebSocket URL derived from baseURL or overridden via options.",
31168
+ "returns": "string"
31169
+ }
31170
+ },
31171
+ "events": {
31172
+ "execution_start": {
31173
+ "name": "execution_start",
31174
+ "description": "Event emitted by ComfyUIClient",
31175
+ "arguments": {}
31176
+ },
31177
+ "execution_complete": {
31178
+ "name": "execution_complete",
31179
+ "description": "Event emitted by ComfyUIClient",
31180
+ "arguments": {}
31181
+ },
31182
+ "executing": {
31183
+ "name": "executing",
31184
+ "description": "Event emitted by ComfyUIClient",
31185
+ "arguments": {}
31186
+ },
31187
+ "progress": {
31188
+ "name": "progress",
31189
+ "description": "Event emitted by ComfyUIClient",
31190
+ "arguments": {}
31191
+ },
31192
+ "executed": {
31193
+ "name": "executed",
31194
+ "description": "Event emitted by ComfyUIClient",
31195
+ "arguments": {}
31196
+ },
31197
+ "execution_cached": {
31198
+ "name": "execution_cached",
31199
+ "description": "Event emitted by ComfyUIClient",
31200
+ "arguments": {}
31201
+ },
31202
+ "execution_error": {
31203
+ "name": "execution_error",
31204
+ "description": "Event emitted by ComfyUIClient",
31205
+ "arguments": {}
31206
+ }
31207
+ },
31208
+ "state": {},
31209
+ "options": {},
31210
+ "envVars": [],
31211
+ "examples": [
31212
+ {
31213
+ "language": "ts",
31214
+ "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
31215
+ }
31216
+ ],
31217
+ "types": {
31218
+ "WorkflowRunOptions": {
31219
+ "description": "",
31220
+ "properties": {
31221
+ "poll": {
31222
+ "type": "boolean",
31223
+ "description": "Use polling instead of WebSocket for tracking execution",
31224
+ "optional": true
31225
+ },
31226
+ "pollInterval": {
31227
+ "type": "number",
31228
+ "description": "Polling interval in ms (default 1000)",
31229
+ "optional": true
31230
+ },
31231
+ "inputMap": {
31232
+ "type": "InputMapping",
31233
+ "description": "Named input mapping: semantic name -> { nodeId, field }",
31234
+ "optional": true
31235
+ },
31236
+ "outputDir": {
31237
+ "type": "string",
31238
+ "description": "If provided, output images are downloaded to this directory",
31239
+ "optional": true
31240
+ }
31241
+ }
31242
+ },
31243
+ "WorkflowResult": {
31244
+ "description": "",
31245
+ "properties": {
31246
+ "promptId": {
31247
+ "type": "string",
31248
+ "description": ""
31249
+ },
31250
+ "outputs": {
31251
+ "type": "Record<string, any>",
31252
+ "description": ""
31253
+ },
31254
+ "images": {
31255
+ "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
31256
+ "description": "",
31257
+ "optional": true
31258
+ }
31259
+ }
31260
+ }
31261
+ }
31262
+ },
30730
31263
  {
30731
31264
  "id": "clients.elevenlabs",
30732
31265
  "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
@@ -31005,481 +31538,185 @@ export const introspectionData = [
31005
31538
  }
31006
31539
  },
31007
31540
  "required": [
31008
- "table"
31009
- ],
31010
- "returns": "void"
31011
- },
31012
- "rpc": {
31013
- "description": "Call a Postgres function (RPC).",
31014
- "parameters": {
31015
- "fn": {
31016
- "type": "string",
31017
- "description": "The function name"
31018
- },
31019
- "params": {
31020
- "type": "Record<string, unknown>",
31021
- "description": "Arguments to pass to the function"
31022
- },
31023
- "options": {
31024
- "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
31025
- "description": "Optional settings (head, get, count)"
31026
- }
31027
- },
31028
- "required": [
31029
- "fn"
31030
- ],
31031
- "returns": "void"
31032
- },
31033
- "signInWithPassword": {
31034
- "description": "Sign in with email and password.",
31035
- "parameters": {
31036
- "email": {
31037
- "type": "string",
31038
- "description": "Parameter email"
31039
- },
31040
- "password": {
31041
- "type": "string",
31042
- "description": "Parameter password"
31043
- }
31044
- },
31045
- "required": [
31046
- "email",
31047
- "password"
31048
- ],
31049
- "returns": "void"
31050
- },
31051
- "signUp": {
31052
- "description": "Create a new user account with email and password.",
31053
- "parameters": {
31054
- "email": {
31055
- "type": "string",
31056
- "description": "Parameter email"
31057
- },
31058
- "password": {
31059
- "type": "string",
31060
- "description": "Parameter password"
31061
- }
31062
- },
31063
- "required": [
31064
- "email",
31065
- "password"
31066
- ],
31067
- "returns": "void"
31068
- },
31069
- "signOut": {
31070
- "description": "Sign the current user out.",
31071
- "parameters": {},
31072
- "required": [],
31073
- "returns": "void"
31074
- },
31075
- "getSession": {
31076
- "description": "Get the current session, if any.",
31077
- "parameters": {},
31078
- "required": [],
31079
- "returns": "void"
31080
- },
31081
- "getUser": {
31082
- "description": "Get the current user, if any.",
31083
- "parameters": {},
31084
- "required": [],
31085
- "returns": "void"
31086
- },
31087
- "invoke": {
31088
- "description": "Invoke a Supabase Edge Function by name.",
31089
- "parameters": {
31090
- "name": {
31091
- "type": "string",
31092
- "description": "Parameter name"
31093
- },
31094
- "body": {
31095
- "type": "any",
31096
- "description": "Parameter body"
31097
- }
31098
- },
31099
- "required": [
31100
- "name"
31101
- ],
31102
- "returns": "void"
31103
- },
31104
- "subscribe": {
31105
- "description": "Subscribe to realtime changes on a Postgres table.",
31106
- "parameters": {
31107
- "channelName": {
31108
- "type": "string",
31109
- "description": "A name for this subscription channel"
31110
- },
31111
- "table": {
31112
- "type": "string",
31113
- "description": "The table to listen to"
31114
- },
31115
- "callback": {
31116
- "type": "(payload: any) => void",
31117
- "description": "Called with the payload on each change"
31118
- },
31119
- "event": {
31120
- "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
31121
- "description": "The event type to listen for (default: all changes)"
31122
- }
31123
- },
31124
- "required": [
31125
- "channelName",
31126
- "table",
31127
- "callback"
31128
- ],
31129
- "returns": "RealtimeChannel"
31130
- },
31131
- "unsubscribe": {
31132
- "description": "Unsubscribe and remove a realtime channel by name.",
31133
- "parameters": {
31134
- "channelName": {
31135
- "type": "string",
31136
- "description": "The channel name to remove"
31137
- }
31138
- },
31139
- "required": [
31140
- "channelName"
31141
- ],
31142
- "returns": "void"
31143
- },
31144
- "unsubscribeAll": {
31145
- "description": "Unsubscribe and remove all realtime channels.",
31146
- "parameters": {},
31147
- "required": [],
31148
- "returns": "void"
31149
- },
31150
- "connect": {
31151
- "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
31152
- "parameters": {},
31153
- "required": [],
31154
- "returns": "void"
31155
- },
31156
- "disconnect": {
31157
- "description": "Disconnect by signing out and removing all realtime channels.",
31158
- "parameters": {},
31159
- "required": [],
31160
- "returns": "void"
31161
- }
31162
- },
31163
- "getters": {
31164
- "sdk": {
31165
- "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
31166
- "returns": "SupabaseSDKClient<any, any>"
31167
- },
31168
- "storage": {
31169
- "description": "Returns the Supabase Storage client for managing buckets and files.",
31170
- "returns": "any"
31171
- },
31172
- "functions": {
31173
- "description": "Returns the Supabase Functions client.",
31174
- "returns": "any"
31175
- }
31176
- },
31177
- "events": {},
31178
- "state": {},
31179
- "options": {},
31180
- "envVars": [],
31181
- "examples": [
31182
- {
31183
- "language": "ts",
31184
- "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
31185
- }
31186
- ]
31187
- },
31188
- {
31189
- "id": "clients.comfyui",
31190
- "description": "ComfyUI client — execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
31191
- "shortcut": "clients.comfyui",
31192
- "className": "ComfyUIClient",
31193
- "methods": {
31194
- "queuePrompt": {
31195
- "description": "Queue a prompt (API-format workflow) for execution.",
31196
- "parameters": {
31197
- "prompt": {
31198
- "type": "Record<string, any>",
31199
- "description": "The API-format workflow object"
31200
- },
31201
- "clientId": {
31202
- "type": "string",
31203
- "description": "Override the client ID for this request"
31204
- }
31205
- },
31206
- "required": [
31207
- "prompt"
31208
- ],
31209
- "returns": "Promise<{ prompt_id: string; number: number }>",
31210
- "examples": [
31211
- {
31212
- "language": "ts",
31213
- "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
31214
- }
31215
- ]
31216
- },
31217
- "getQueue": {
31218
- "description": "Get the current prompt queue status.",
31219
- "parameters": {},
31220
- "required": [],
31221
- "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
31222
- },
31223
- "getHistory": {
31224
- "description": "Get execution history, optionally for a specific prompt.",
31225
- "parameters": {
31226
- "promptId": {
31227
- "type": "string",
31228
- "description": "If provided, returns history for this prompt only"
31229
- }
31230
- },
31231
- "required": [],
31232
- "returns": "Promise<Record<string, any>>"
31233
- },
31234
- "getSystemStats": {
31235
- "description": "Get system stats including GPU memory and queue info.",
31236
- "parameters": {},
31237
- "required": [],
31238
- "returns": "Promise<any>"
31239
- },
31240
- "getObjectInfo": {
31241
- "description": "Get node type info with input/output schemas.",
31242
- "parameters": {
31243
- "nodeClass": {
31244
- "type": "string",
31245
- "description": "If provided, returns info for this node type only"
31246
- }
31247
- },
31248
- "required": [],
31249
- "returns": "Promise<any>"
31250
- },
31251
- "interrupt": {
31252
- "description": "Interrupt the currently executing prompt.",
31253
- "parameters": {},
31254
- "required": [],
31255
- "returns": "Promise<void>"
31541
+ "table"
31542
+ ],
31543
+ "returns": "void"
31256
31544
  },
31257
- "getModels": {
31258
- "description": "List available models, optionally filtered by type.",
31545
+ "rpc": {
31546
+ "description": "Call a Postgres function (RPC).",
31259
31547
  "parameters": {
31260
- "type": {
31548
+ "fn": {
31261
31549
  "type": "string",
31262
- "description": "Model type filter (e.g., 'checkpoints', 'loras')"
31550
+ "description": "The function name"
31551
+ },
31552
+ "params": {
31553
+ "type": "Record<string, unknown>",
31554
+ "description": "Arguments to pass to the function"
31555
+ },
31556
+ "options": {
31557
+ "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
31558
+ "description": "Optional settings (head, get, count)"
31263
31559
  }
31264
31560
  },
31265
- "required": [],
31266
- "returns": "Promise<string[]>"
31267
- },
31268
- "getEmbeddings": {
31269
- "description": "List available embedding models.",
31270
- "parameters": {},
31271
- "required": [],
31272
- "returns": "Promise<string[]>"
31561
+ "required": [
31562
+ "fn"
31563
+ ],
31564
+ "returns": "void"
31273
31565
  },
31274
- "uploadImage": {
31275
- "description": "Upload an image to ComfyUI's input directory.",
31566
+ "signInWithPassword": {
31567
+ "description": "Sign in with email and password.",
31276
31568
  "parameters": {
31277
- "file": {
31278
- "type": "Buffer | Blob",
31279
- "description": "The image data as Buffer or Blob"
31280
- },
31281
- "filename": {
31569
+ "email": {
31282
31570
  "type": "string",
31283
- "description": "File name for the upload"
31571
+ "description": "Parameter email"
31284
31572
  },
31285
- "opts": {
31286
- "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
31287
- "description": "Upload options (subfolder, type, overwrite)"
31573
+ "password": {
31574
+ "type": "string",
31575
+ "description": "Parameter password"
31288
31576
  }
31289
31577
  },
31290
31578
  "required": [
31291
- "file",
31292
- "filename"
31579
+ "email",
31580
+ "password"
31293
31581
  ],
31294
- "returns": "Promise<any>"
31582
+ "returns": "void"
31295
31583
  },
31296
- "viewImage": {
31297
- "description": "Download a generated image from ComfyUI as a Buffer.",
31584
+ "signUp": {
31585
+ "description": "Create a new user account with email and password.",
31298
31586
  "parameters": {
31299
- "filename": {
31587
+ "email": {
31300
31588
  "type": "string",
31301
- "description": "The image filename"
31302
- },
31303
- "subfolder": {
31304
- "type": "any",
31305
- "description": "Subfolder within the output directory"
31589
+ "description": "Parameter email"
31306
31590
  },
31307
- "type": {
31308
- "type": "any",
31309
- "description": "Image type ('output', 'input', 'temp')"
31591
+ "password": {
31592
+ "type": "string",
31593
+ "description": "Parameter password"
31310
31594
  }
31311
31595
  },
31312
31596
  "required": [
31313
- "filename"
31597
+ "email",
31598
+ "password"
31314
31599
  ],
31315
- "returns": "Promise<Buffer>"
31600
+ "returns": "void"
31316
31601
  },
31317
- "connectWs": {
31318
- "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
31602
+ "signOut": {
31603
+ "description": "Sign the current user out.",
31319
31604
  "parameters": {},
31320
31605
  "required": [],
31321
- "returns": "Promise<void>"
31606
+ "returns": "void"
31322
31607
  },
31323
- "disconnectWs": {
31324
- "description": "Close the WebSocket connection.",
31608
+ "getSession": {
31609
+ "description": "Get the current session, if any.",
31325
31610
  "parameters": {},
31326
31611
  "required": [],
31327
31612
  "returns": "void"
31328
31613
  },
31329
- "toApiFormat": {
31330
- "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
31614
+ "getUser": {
31615
+ "description": "Get the current user, if any.",
31616
+ "parameters": {},
31617
+ "required": [],
31618
+ "returns": "void"
31619
+ },
31620
+ "invoke": {
31621
+ "description": "Invoke a Supabase Edge Function by name.",
31331
31622
  "parameters": {
31332
- "workflow": {
31333
- "type": "Record<string, any>",
31334
- "description": "Parameter workflow"
31623
+ "name": {
31624
+ "type": "string",
31625
+ "description": "Parameter name"
31626
+ },
31627
+ "body": {
31628
+ "type": "any",
31629
+ "description": "Parameter body"
31335
31630
  }
31336
31631
  },
31337
31632
  "required": [
31338
- "workflow"
31633
+ "name"
31339
31634
  ],
31340
- "returns": "Promise<Record<string, any>>"
31635
+ "returns": "void"
31341
31636
  },
31342
- "runWorkflow": {
31343
- "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
31637
+ "subscribe": {
31638
+ "description": "Subscribe to realtime changes on a Postgres table.",
31344
31639
  "parameters": {
31345
- "workflow": {
31346
- "type": "Record<string, any>",
31347
- "description": "Parameter workflow"
31640
+ "channelName": {
31641
+ "type": "string",
31642
+ "description": "A name for this subscription channel"
31348
31643
  },
31349
- "inputs": {
31350
- "type": "Record<string, any>",
31351
- "description": "Parameter inputs"
31644
+ "table": {
31645
+ "type": "string",
31646
+ "description": "The table to listen to"
31352
31647
  },
31353
- "options": {
31354
- "type": "WorkflowRunOptions",
31355
- "description": "Parameter options",
31356
- "properties": {
31357
- "poll": {
31358
- "type": "boolean",
31359
- "description": "Use polling instead of WebSocket for tracking execution"
31360
- },
31361
- "pollInterval": {
31362
- "type": "number",
31363
- "description": "Polling interval in ms (default 1000)"
31364
- },
31365
- "inputMap": {
31366
- "type": "InputMapping",
31367
- "description": "Named input mapping: semantic name -> { nodeId, field }"
31368
- },
31369
- "outputDir": {
31370
- "type": "string",
31371
- "description": "If provided, output images are downloaded to this directory"
31372
- }
31373
- }
31648
+ "callback": {
31649
+ "type": "(payload: any) => void",
31650
+ "description": "Called with the payload on each change"
31651
+ },
31652
+ "event": {
31653
+ "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
31654
+ "description": "The event type to listen for (default: all changes)"
31374
31655
  }
31375
31656
  },
31376
31657
  "required": [
31377
- "workflow"
31658
+ "channelName",
31659
+ "table",
31660
+ "callback"
31378
31661
  ],
31379
- "returns": "Promise<WorkflowResult>"
31380
- }
31381
- },
31382
- "getters": {
31383
- "clientId": {
31384
- "description": "The unique client ID used for WebSocket session tracking.",
31385
- "returns": "string"
31386
- },
31387
- "wsURL": {
31388
- "description": "The WebSocket URL derived from baseURL or overridden via options.",
31389
- "returns": "string"
31390
- }
31391
- },
31392
- "events": {
31393
- "execution_start": {
31394
- "name": "execution_start",
31395
- "description": "Event emitted by ComfyUIClient",
31396
- "arguments": {}
31662
+ "returns": "RealtimeChannel"
31397
31663
  },
31398
- "execution_complete": {
31399
- "name": "execution_complete",
31400
- "description": "Event emitted by ComfyUIClient",
31401
- "arguments": {}
31664
+ "unsubscribe": {
31665
+ "description": "Unsubscribe and remove a realtime channel by name.",
31666
+ "parameters": {
31667
+ "channelName": {
31668
+ "type": "string",
31669
+ "description": "The channel name to remove"
31670
+ }
31671
+ },
31672
+ "required": [
31673
+ "channelName"
31674
+ ],
31675
+ "returns": "void"
31402
31676
  },
31403
- "executing": {
31404
- "name": "executing",
31405
- "description": "Event emitted by ComfyUIClient",
31406
- "arguments": {}
31677
+ "unsubscribeAll": {
31678
+ "description": "Unsubscribe and remove all realtime channels.",
31679
+ "parameters": {},
31680
+ "required": [],
31681
+ "returns": "void"
31407
31682
  },
31408
- "progress": {
31409
- "name": "progress",
31410
- "description": "Event emitted by ComfyUIClient",
31411
- "arguments": {}
31683
+ "connect": {
31684
+ "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
31685
+ "parameters": {},
31686
+ "required": [],
31687
+ "returns": "void"
31412
31688
  },
31413
- "executed": {
31414
- "name": "executed",
31415
- "description": "Event emitted by ComfyUIClient",
31416
- "arguments": {}
31689
+ "disconnect": {
31690
+ "description": "Disconnect by signing out and removing all realtime channels.",
31691
+ "parameters": {},
31692
+ "required": [],
31693
+ "returns": "void"
31694
+ }
31695
+ },
31696
+ "getters": {
31697
+ "sdk": {
31698
+ "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
31699
+ "returns": "SupabaseSDKClient<any, any>"
31417
31700
  },
31418
- "execution_cached": {
31419
- "name": "execution_cached",
31420
- "description": "Event emitted by ComfyUIClient",
31421
- "arguments": {}
31701
+ "storage": {
31702
+ "description": "Returns the Supabase Storage client for managing buckets and files.",
31703
+ "returns": "any"
31422
31704
  },
31423
- "execution_error": {
31424
- "name": "execution_error",
31425
- "description": "Event emitted by ComfyUIClient",
31426
- "arguments": {}
31705
+ "functions": {
31706
+ "description": "Returns the Supabase Functions client.",
31707
+ "returns": "any"
31427
31708
  }
31428
31709
  },
31710
+ "events": {},
31429
31711
  "state": {},
31430
31712
  "options": {},
31431
31713
  "envVars": [],
31432
31714
  "examples": [
31433
31715
  {
31434
31716
  "language": "ts",
31435
- "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
31436
- }
31437
- ],
31438
- "types": {
31439
- "WorkflowRunOptions": {
31440
- "description": "",
31441
- "properties": {
31442
- "poll": {
31443
- "type": "boolean",
31444
- "description": "Use polling instead of WebSocket for tracking execution",
31445
- "optional": true
31446
- },
31447
- "pollInterval": {
31448
- "type": "number",
31449
- "description": "Polling interval in ms (default 1000)",
31450
- "optional": true
31451
- },
31452
- "inputMap": {
31453
- "type": "InputMapping",
31454
- "description": "Named input mapping: semantic name -> { nodeId, field }",
31455
- "optional": true
31456
- },
31457
- "outputDir": {
31458
- "type": "string",
31459
- "description": "If provided, output images are downloaded to this directory",
31460
- "optional": true
31461
- }
31462
- }
31463
- },
31464
- "WorkflowResult": {
31465
- "description": "",
31466
- "properties": {
31467
- "promptId": {
31468
- "type": "string",
31469
- "description": ""
31470
- },
31471
- "outputs": {
31472
- "type": "Record<string, any>",
31473
- "description": ""
31474
- },
31475
- "images": {
31476
- "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
31477
- "description": "",
31478
- "optional": true
31479
- }
31480
- }
31717
+ "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
31481
31718
  }
31482
- }
31719
+ ]
31483
31720
  },
31484
31721
  {
31485
31722
  "id": "servers.mcp",
@@ -31499,7 +31736,7 @@ export const introspectionData = [
31499
31736
  "description": "Tool schema, description, and handler",
31500
31737
  "properties": {
31501
31738
  "schema": {
31502
- "type": "z.ZodObject<any>",
31739
+ "type": "z.ZodType",
31503
31740
  "description": ""
31504
31741
  },
31505
31742
  "description": {
@@ -31507,7 +31744,7 @@ export const introspectionData = [
31507
31744
  "description": ""
31508
31745
  },
31509
31746
  "handler": {
31510
- "type": "(args: any, ctx: MCPContext) => any",
31747
+ "type": "Function | ((args: any, ctx: any) => any)",
31511
31748
  "description": ""
31512
31749
  }
31513
31750
  }
@@ -31649,7 +31886,7 @@ export const introspectionData = [
31649
31886
  "description": "",
31650
31887
  "properties": {
31651
31888
  "schema": {
31652
- "type": "z.ZodObject<any>",
31889
+ "type": "z.ZodType",
31653
31890
  "description": "",
31654
31891
  "optional": true
31655
31892
  },
@@ -31659,17 +31896,9 @@ export const introspectionData = [
31659
31896
  "optional": true
31660
31897
  },
31661
31898
  "handler": {
31662
- "type": "(args: any, ctx: MCPContext) => any",
31663
- "description": ""
31664
- }
31665
- }
31666
- },
31667
- "MCPContext": {
31668
- "description": "Context object passed to all MCP tool, resource, and prompt handlers.",
31669
- "properties": {
31670
- "container": {
31671
- "type": "NodeContainer",
31672
- "description": ""
31899
+ "type": "Function | ((args: any, ctx: any) => any)",
31900
+ "description": "",
31901
+ "optional": true
31673
31902
  }
31674
31903
  }
31675
31904
  },
@@ -31697,6 +31926,15 @@ export const introspectionData = [
31697
31926
  }
31698
31927
  }
31699
31928
  },
31929
+ "MCPContext": {
31930
+ "description": "Context object passed to all MCP tool, resource, and prompt handlers.",
31931
+ "properties": {
31932
+ "container": {
31933
+ "type": "NodeContainer",
31934
+ "description": ""
31935
+ }
31936
+ }
31937
+ },
31700
31938
  "PromptRegistrationOptions": {
31701
31939
  "description": "",
31702
31940
  "properties": {
@@ -31985,8 +32223,51 @@ export const introspectionData = [
31985
32223
  "shortcut": "features.assistantsManager",
31986
32224
  "className": "AssistantsManager",
31987
32225
  "methods": {
32226
+ "intercept": {
32227
+ "description": "Registers a pipeline interceptor that is applied to every assistant created by this manager. Interceptors are applied at the given interception point on each assistant at creation time. This mirrors the per-assistant `assistant.intercept(point, fn)` API, but scopes it globally across all assistants managed here — useful for cross-cutting concerns like logging, tracing, or policy enforcement.",
32228
+ "parameters": {
32229
+ "point": {
32230
+ "type": "K",
32231
+ "description": "The interception point (beforeAsk, beforeTurn, beforeToolCall, afterToolCall, beforeResponse)"
32232
+ },
32233
+ "fn": {
32234
+ "type": "InterceptorFn<InterceptorPoints[K]>",
32235
+ "description": "Middleware function receiving (ctx, next)"
32236
+ }
32237
+ },
32238
+ "required": [
32239
+ "point",
32240
+ "fn"
32241
+ ],
32242
+ "returns": "this",
32243
+ "examples": [
32244
+ {
32245
+ "language": "ts",
32246
+ "code": "manager.intercept('beforeAsk', async (ctx, next) => {\n console.log(`[${ctx.assistant.name}] asking: ${ctx.message}`)\n await next()\n})"
32247
+ }
32248
+ ]
32249
+ },
32250
+ "addDiscoveryFolder": {
32251
+ "description": "Registers an additional folder to scan during assistant discovery and immediately triggers a new discovery pass.",
32252
+ "parameters": {
32253
+ "folderPath": {
32254
+ "type": "string",
32255
+ "description": "Absolute path to a folder containing assistant subdirectories"
32256
+ }
32257
+ },
32258
+ "required": [
32259
+ "folderPath"
32260
+ ],
32261
+ "returns": "Promise<this>",
32262
+ "examples": [
32263
+ {
32264
+ "language": "ts",
32265
+ "code": "await manager.addDiscoveryFolder('/path/to/more/assistants')\nconsole.log(manager.available) // includes assistants from the new folder"
32266
+ }
32267
+ ]
32268
+ },
31988
32269
  "discover": {
31989
- "description": "Discovers assistants by listing subdirectories in ~/.luca/assistants/ and cwd/assistants/. Each subdirectory containing a CORE.md is an assistant.",
32270
+ "description": "",
31990
32271
  "parameters": {},
31991
32272
  "required": [],
31992
32273
  "returns": "Promise<this>"
@@ -32229,6 +32510,47 @@ export const introspectionData = [
32229
32510
  ],
32230
32511
  "returns": "this"
32231
32512
  },
32513
+ "stub": {
32514
+ "description": "Register a hardcoded stub response that bypasses the API when the user's message matches. Streaming is still simulated — chunk/preview events fire word-by-word.",
32515
+ "parameters": {
32516
+ "matcher": {
32517
+ "type": "string | RegExp",
32518
+ "description": "Exact string match, substring, or RegExp tested against user input"
32519
+ },
32520
+ "response": {
32521
+ "type": "string | (() => string)",
32522
+ "description": "The text to stream back, or a zero-arg function that returns it"
32523
+ }
32524
+ },
32525
+ "required": [
32526
+ "matcher",
32527
+ "response"
32528
+ ],
32529
+ "returns": "this",
32530
+ "examples": [
32531
+ {
32532
+ "language": "ts",
32533
+ "code": "conversation.stub('hello', 'Hi there!')\nconversation.stub(/weather/i, () => 'Sunny and 72°F.')"
32534
+ }
32535
+ ]
32536
+ },
32537
+ "fork": {
32538
+ "description": "Fork the conversation into a new independent instance. The fork inherits the same system prompt, tools, and full message history, but has its own identity and state — changes in either direction do not affect the other.",
32539
+ "parameters": {
32540
+ "overrides": {
32541
+ "type": "Partial<ConversationOptions>",
32542
+ "description": "Optional option overrides for the forked conversation (e.g. different model or title)"
32543
+ }
32544
+ },
32545
+ "required": [],
32546
+ "returns": "Conversation",
32547
+ "examples": [
32548
+ {
32549
+ "language": "ts",
32550
+ "code": "const fork = conversation.fork()\nawait fork.ask('What if we took a different approach?')\n// original conversation is unchanged"
32551
+ }
32552
+ ]
32553
+ },
32232
32554
  "estimateTokens": {
32233
32555
  "description": "Estimate the input token count for the current messages array using the js-tiktoken tokenizer. Updates state.",
32234
32556
  "parameters": {},
@@ -32407,48 +32729,48 @@ export const introspectionData = [
32407
32729
  "description": "Event emitted by Conversation",
32408
32730
  "arguments": {}
32409
32731
  },
32410
- "rawEvent": {
32411
- "name": "rawEvent",
32732
+ "chunk": {
32733
+ "name": "chunk",
32412
32734
  "description": "Event emitted by Conversation",
32413
32735
  "arguments": {}
32414
32736
  },
32415
- "mcpEvent": {
32416
- "name": "mcpEvent",
32737
+ "preview": {
32738
+ "name": "preview",
32417
32739
  "description": "Event emitted by Conversation",
32418
32740
  "arguments": {}
32419
32741
  },
32420
- "chunk": {
32421
- "name": "chunk",
32742
+ "turnEnd": {
32743
+ "name": "turnEnd",
32422
32744
  "description": "Event emitted by Conversation",
32423
32745
  "arguments": {}
32424
32746
  },
32425
- "preview": {
32426
- "name": "preview",
32747
+ "response": {
32748
+ "name": "response",
32427
32749
  "description": "Event emitted by Conversation",
32428
32750
  "arguments": {}
32429
32751
  },
32430
- "responseCompleted": {
32431
- "name": "responseCompleted",
32752
+ "rawEvent": {
32753
+ "name": "rawEvent",
32432
32754
  "description": "Event emitted by Conversation",
32433
32755
  "arguments": {}
32434
32756
  },
32435
- "toolCallsStart": {
32436
- "name": "toolCallsStart",
32757
+ "mcpEvent": {
32758
+ "name": "mcpEvent",
32437
32759
  "description": "Event emitted by Conversation",
32438
32760
  "arguments": {}
32439
32761
  },
32440
- "toolCallsEnd": {
32441
- "name": "toolCallsEnd",
32762
+ "responseCompleted": {
32763
+ "name": "responseCompleted",
32442
32764
  "description": "Event emitted by Conversation",
32443
32765
  "arguments": {}
32444
32766
  },
32445
- "turnEnd": {
32446
- "name": "turnEnd",
32767
+ "toolCallsStart": {
32768
+ "name": "toolCallsStart",
32447
32769
  "description": "Event emitted by Conversation",
32448
32770
  "arguments": {}
32449
32771
  },
32450
- "response": {
32451
- "name": "response",
32772
+ "toolCallsEnd": {
32773
+ "name": "toolCallsEnd",
32452
32774
  "description": "Event emitted by Conversation",
32453
32775
  "arguments": {}
32454
32776
  }
@@ -32546,7 +32868,7 @@ export const introspectionData = [
32546
32868
  ],
32547
32869
  "returns": "EndpointInfo | undefined"
32548
32870
  },
32549
- "toTools": {
32871
+ "toOpenAITools": {
32550
32872
  "description": "Convert all endpoints into OpenAI-compatible tool definitions.",
32551
32873
  "parameters": {
32552
32874
  "filter": {
@@ -32640,7 +32962,7 @@ export const introspectionData = [
32640
32962
  "examples": [
32641
32963
  {
32642
32964
  "language": "ts",
32643
- "code": "const api = container.feature('openapi', { url: 'https://petstore.swagger.io/v2' })\nawait api.load()\n\n// Inspect all endpoints\napi.endpoints\n\n// Get a single endpoint by its friendly name\napi.endpoint('getPetById')\n\n// Convert to OpenAI tool definitions\napi.toTools()\n\n// Convert a single endpoint to a function definition\napi.toFunction('getPetById')"
32965
+ "code": "const api = container.feature('openapi', { url: 'https://petstore.swagger.io/v2' })\nawait api.load()\n\n// Inspect all endpoints\napi.endpoints\n\n// Get a single endpoint by its friendly name\napi.endpoint('getPetById')\n\n// Convert to OpenAI tool definitions\napi.toOpenAITools()\n\n// Convert a single endpoint to a function definition\napi.toFunction('getPetById')"
32644
32966
  }
32645
32967
  ],
32646
32968
  "types": {
@@ -33565,6 +33887,19 @@ export const introspectionData = [
33565
33887
  "shortcut": "features.skillsLibrary",
33566
33888
  "className": "SkillsLibrary",
33567
33889
  "methods": {
33890
+ "setupToolsConsumer": {
33891
+ "description": "",
33892
+ "parameters": {
33893
+ "assistant": {
33894
+ "type": "Feature",
33895
+ "description": "Parameter assistant"
33896
+ }
33897
+ },
33898
+ "required": [
33899
+ "assistant"
33900
+ ],
33901
+ "returns": "void"
33902
+ },
33568
33903
  "start": {
33569
33904
  "description": "Start the skills library: read config, scan all locations.",
33570
33905
  "parameters": {},
@@ -33691,6 +34026,24 @@ export const introspectionData = [
33691
34026
  "{ skillName, question }"
33692
34027
  ],
33693
34028
  "returns": "Promise<string>"
34029
+ },
34030
+ "findRelevantSkillsForAssistant": {
34031
+ "description": "Fork the given assistant and ask it which skills (if any) are relevant to the user's query. Returns an array of skill names that should be loaded before the real question is answered. The fork is ephemeral (historyMode: 'none') and uses structured output so the result is always a clean string array — never free text.",
34032
+ "parameters": {
34033
+ "assistant": {
34034
+ "type": "Assistant",
34035
+ "description": "The assistant instance to fork"
34036
+ },
34037
+ "userQuery": {
34038
+ "type": "string",
34039
+ "description": "The user's original question"
34040
+ }
34041
+ },
34042
+ "required": [
34043
+ "assistant",
34044
+ "userQuery"
34045
+ ],
34046
+ "returns": "Promise<string[]>"
33694
34047
  }
33695
34048
  },
33696
34049
  "getters": {
@@ -34126,6 +34479,10 @@ export const introspectionData = [
34126
34479
  "description": "Parsed YAML frontmatter from CORE.md, or empty object if none.",
34127
34480
  "returns": "Record<string, any>"
34128
34481
  },
34482
+ "effectiveOptions": {
34483
+ "description": "Merged options where CORE.md frontmatter provides defaults and constructor options take precedence. Prefer this over `this.options` anywhere model parameters or runtime config is consumed.",
34484
+ "returns": "AssistantOptions & Record<string, any>"
34485
+ },
34129
34486
  "paths": {
34130
34487
  "description": "Provides a helper for creating paths off of the assistant's base folder",
34131
34488
  "returns": "any"
@@ -34704,6 +35061,77 @@ export const introspectionData = [
34704
35061
  }
34705
35062
  ]
34706
35063
  },
35064
+ "listProcessSessions": {
35065
+ "description": "List all Claude Code processes currently registered in ~/.claude/sessions/. Returns each session's metadata along with whether the process is still alive.",
35066
+ "parameters": {},
35067
+ "required": [],
35068
+ "returns": "Promise<Array<{\n pid: number\n sessionId: string\n cwd: string\n startedAt: number\n kind: string\n entrypoint: string\n alive: boolean\n }>>",
35069
+ "examples": [
35070
+ {
35071
+ "language": "ts",
35072
+ "code": "const sessions = await cc.listProcessSessions()\nfor (const s of sessions) {\n console.log(`[${s.alive ? 'LIVE' : 'dead'}] PID ${s.pid} in ${s.cwd}`)\n}"
35073
+ }
35074
+ ]
35075
+ },
35076
+ "getProcessSession": {
35077
+ "description": "Read a single process session by PID from ~/.claude/sessions/<pid>.json.",
35078
+ "parameters": {
35079
+ "pid": {
35080
+ "type": "number",
35081
+ "description": "The process ID"
35082
+ }
35083
+ },
35084
+ "required": [
35085
+ "pid"
35086
+ ],
35087
+ "returns": "Promise<{\n pid: number\n sessionId: string\n cwd: string\n startedAt: number\n kind: string\n entrypoint: string\n } | null>",
35088
+ "examples": [
35089
+ {
35090
+ "language": "ts",
35091
+ "code": "const session = await cc.getProcessSession(12345)\nconsole.log(session?.cwd)"
35092
+ }
35093
+ ]
35094
+ },
35095
+ "getConversationHistory": {
35096
+ "description": "Read the conversation history for a Claude Code session from its JSONL file in ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl. Returns an array of parsed message objects (user, assistant, tool_use, tool_result).",
35097
+ "parameters": {
35098
+ "sessionId": {
35099
+ "type": "string",
35100
+ "description": "The Claude CLI session ID (from listProcessSessions or getProcessSession)"
35101
+ },
35102
+ "cwd": {
35103
+ "type": "string",
35104
+ "description": "The working directory of the session (used to locate the project folder)"
35105
+ }
35106
+ },
35107
+ "required": [
35108
+ "sessionId"
35109
+ ],
35110
+ "returns": "Promise<any[]>",
35111
+ "examples": [
35112
+ {
35113
+ "language": "ts",
35114
+ "code": "const sessions = await cc.listProcessSessions()\nconst s = sessions[0]\nconst history = await cc.getConversationHistory(s.sessionId, s.cwd)\nconsole.log(history.length, 'turns')"
35115
+ }
35116
+ ]
35117
+ },
35118
+ "listSessionsForCwd": {
35119
+ "description": "List all conversation sessions stored for a given working directory. Reads ~/.claude/projects/<encoded-cwd>/ and returns metadata for each .jsonl file.",
35120
+ "parameters": {
35121
+ "cwd": {
35122
+ "type": "string",
35123
+ "description": "The working directory path to look up"
35124
+ }
35125
+ },
35126
+ "required": [],
35127
+ "returns": "Promise<Array<{\n sessionId: string\n filePath: string\n messageCount: number\n }>>",
35128
+ "examples": [
35129
+ {
35130
+ "language": "ts",
35131
+ "code": "const sessions = await cc.listSessionsForCwd('/Users/me/my-project')\nfor (const s of sessions) {\n console.log(s.sessionId, s.messageCount, 'messages')\n}"
35132
+ }
35133
+ ]
35134
+ },
34707
35135
  "cleanupMcpTempFiles": {
34708
35136
  "description": "Clean up any temp MCP config files created during sessions.",
34709
35137
  "parameters": {},
@@ -36896,7 +37324,7 @@ export const containerIntrospectionData = [
36896
37324
  "description": "The id of the feature to create."
36897
37325
  },
36898
37326
  "options": {
36899
- "type": "ConstructorParameters<Features[T]>[0]",
37327
+ "type": "FeatureInputOptions<Features>[T] | Record<string, unknown>",
36900
37328
  "description": "The options to pass to the feature constructor."
36901
37329
  }
36902
37330
  },
@@ -36905,6 +37333,52 @@ export const containerIntrospectionData = [
36905
37333
  ],
36906
37334
  "returns": "InstanceType<Features[T]>"
36907
37335
  },
37336
+ "entity": {
37337
+ "description": "Creates a lightweight entity object with observable state, a typed event bus, and access to the container. Same id + options always returns the same cached base instance. An optional third argument auto-extends the entity with functions and getters. All extended methods and getters can access the entity (state, options, container, on/off/emit, etc.) via `this`.",
37338
+ "parameters": {
37339
+ "id": {
37340
+ "type": "string",
37341
+ "description": "Stable identifier for this entity (included in cache key)"
37342
+ },
37343
+ "options": {
37344
+ "type": "TOptions",
37345
+ "description": "Arbitrary options stored on `entity.options` (included in cache key)"
37346
+ },
37347
+ "extensions": {
37348
+ "type": "Ext & ThisType<Entity<TState, TOptions, TEvents> & Ext>",
37349
+ "description": "Optional object of functions/getters to graft onto the entity"
37350
+ }
37351
+ },
37352
+ "required": [
37353
+ "id"
37354
+ ],
37355
+ "returns": "Entity<TState, TOptions, TEvents> & Ext",
37356
+ "examples": [
37357
+ {
37358
+ "language": "ts",
37359
+ "code": "// Basic entity with typed state and events\nconst counter = container.entity<{ count: number }>('counter')\ncounter.setState({ count: 0 })\ncounter.on('tick', () => counter.setState(s => ({ count: s.count + 1 })))\n\n// With options and auto-extension\nconst user = container.entity('user:42', { name: 'Alice' }, {\n greet() { return `Hello ${this.options.name}` },\n get label() { return `User: ${this.options.name}` },\n})\nuser.greet() // \"Hello Alice\""
37360
+ }
37361
+ ]
37362
+ },
37363
+ "getHelperByUUID": {
37364
+ "description": "Look up any helper instance (feature, client, server) by its UUID. Returns undefined if the UUID is unknown or the instance was never created.",
37365
+ "parameters": {
37366
+ "uuid": {
37367
+ "type": "string",
37368
+ "description": "The `instance.uuid` value assigned at construction time"
37369
+ }
37370
+ },
37371
+ "required": [
37372
+ "uuid"
37373
+ ],
37374
+ "returns": "Helper | undefined",
37375
+ "examples": [
37376
+ {
37377
+ "language": "ts",
37378
+ "code": "const assistant = container.feature('assistant')\nconst { uuid } = assistant\n// ... later ...\nconst same = container.getHelperByUUID(uuid) // === assistant"
37379
+ }
37380
+ ]
37381
+ },
36908
37382
  "start": {
36909
37383
  "description": "Start the container. Emits the 'started' event and sets `state.started` to true. Plugins and features can listen for this event to perform initialization.",
36910
37384
  "parameters": {},
@@ -37210,7 +37684,7 @@ export const containerIntrospectionData = [
37210
37684
  },
37211
37685
  "urlUtils": {
37212
37686
  "description": "Returns URL utility functions for parsing URIs.",
37213
- "returns": "{ parse: (uri: string) => url.URL | null }"
37687
+ "returns": "{ parse: (uri: string) => url.UrlWithStringQuery }"
37214
37688
  },
37215
37689
  "paths": {
37216
37690
  "description": "Returns path utility functions scoped to the current working directory (join, resolve, relative, dirname, parse).",