@soederpop/luca 0.1.2 → 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 (366) hide show
  1. package/CLAUDE.md +2 -0
  2. package/assistants/codingAssistant/hooks.ts +1 -5
  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/src/agi/feature.ts +13 -0
  300. package/src/agi/features/assistant.ts +36 -25
  301. package/src/agi/features/assistants-manager.ts +70 -5
  302. package/src/agi/features/autonomous-assistant.ts +1 -5
  303. package/src/agi/features/browser-use.ts +2 -2
  304. package/src/agi/features/claude-code.ts +165 -1
  305. package/src/agi/features/conversation-history.ts +2 -6
  306. package/src/agi/features/conversation.ts +95 -3
  307. package/src/agi/features/docs-reader.ts +2 -1
  308. package/src/agi/features/file-tools.ts +2 -2
  309. package/src/agi/features/luca-coder.ts +1 -5
  310. package/src/agi/features/openai-codex.ts +1 -1
  311. package/src/agi/features/openapi.ts +3 -3
  312. package/src/agi/features/skills-library.ts +87 -6
  313. package/src/agi/lib/interceptor-chain.ts +10 -0
  314. package/src/agi/lib/token-counter.ts +1 -1
  315. package/src/bootstrap/generated.ts +126 -1
  316. package/src/bus.ts +27 -5
  317. package/src/cli/build-info.ts +2 -2
  318. package/src/client.ts +2 -2
  319. package/src/clients/elevenlabs/index.ts +5 -0
  320. package/src/commands/bootstrap.ts +2 -1
  321. package/src/commands/chat.ts +1 -0
  322. package/src/commands/code.ts +4 -2
  323. package/src/commands/prompt.ts +34 -34
  324. package/src/commands/sandbox-mcp.ts +69 -163
  325. package/src/commands/save-api-docs.ts +10 -8
  326. package/src/commands/select.ts +8 -3
  327. package/src/container-describer.ts +70 -84
  328. package/src/container.ts +93 -3
  329. package/src/endpoint.ts +1 -1
  330. package/src/entity.ts +173 -0
  331. package/src/feature.ts +3 -3
  332. package/src/helper.ts +8 -4
  333. package/src/introspection/generated.agi.ts +1246 -798
  334. package/src/introspection/generated.node.ts +892 -798
  335. package/src/introspection/generated.web.ts +95 -3
  336. package/src/introspection/scan.ts +1 -1
  337. package/src/node/container.ts +1 -1
  338. package/src/node/features/content-db.ts +3 -3
  339. package/src/node/features/file-manager.ts +10 -9
  340. package/src/node/features/git.ts +5 -5
  341. package/src/node/features/helpers.ts +1 -1
  342. package/src/node/features/json-tree.ts +1 -1
  343. package/src/node/features/os.ts +3 -3
  344. package/src/node/features/package-finder.ts +1 -1
  345. package/src/node/features/process-manager.ts +1 -1
  346. package/src/node/features/python.ts +3 -3
  347. package/src/node/features/redis.ts +1 -1
  348. package/src/node/features/repl.ts +2 -2
  349. package/src/node/features/transpiler.ts +2 -2
  350. package/src/node/features/ui.ts +1 -1
  351. package/src/node/features/vm.ts +3 -3
  352. package/src/node/features/yaml-tree.ts +1 -1
  353. package/src/node.ts +1 -0
  354. package/src/python/generated.ts +1 -1
  355. package/src/scaffolds/generated.ts +1 -1
  356. package/src/selector.ts +74 -4
  357. package/src/server.ts +2 -2
  358. package/src/servers/mcp.ts +6 -6
  359. package/src/web/features/helpers.ts +1 -1
  360. package/src/web/features/network.ts +1 -0
  361. package/test/conversation.test.ts +220 -0
  362. package/tsconfig.build.json +12 -0
  363. package/tsconfig.json +1 -1
  364. package/scripts/examples/telegram-ink-ui.ts +0 -302
  365. package/scripts/examples/using-openai-codex.ts +0 -23
  366. 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-30T06:52:55.070Z
4
+ // Generated at: 2026-04-03T01:24:52.289Z
5
5
 
6
6
  setBuildTimeData('features.googleDocs', {
7
7
  "id": "features.googleDocs",
@@ -12106,200 +12106,301 @@ setBuildTimeData('clients.openai', {
12106
12106
  ]
12107
12107
  });
12108
12108
 
12109
- setBuildTimeData('clients.supabase', {
12110
- "id": "clients.supabase",
12111
- "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
12112
- "shortcut": "clients.supabase",
12113
- "className": "SupabaseClient",
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
12114
  "methods": {
12115
- "from": {
12116
- "description": "Start a query on a Postgres table or view.",
12115
+ "queuePrompt": {
12116
+ "description": "Queue a prompt (API-format workflow) for execution.",
12117
12117
  "parameters": {
12118
- "table": {
12118
+ "prompt": {
12119
+ "type": "Record<string, any>",
12120
+ "description": "The API-format workflow object"
12121
+ },
12122
+ "clientId": {
12119
12123
  "type": "string",
12120
- "description": "The table or view name to query"
12124
+ "description": "Override the client ID for this request"
12121
12125
  }
12122
12126
  },
12123
12127
  "required": [
12124
- "table"
12128
+ "prompt"
12125
12129
  ],
12126
- "returns": "void"
12127
- },
12128
- "rpc": {
12129
- "description": "Call a Postgres function (RPC).",
12130
- "parameters": {
12131
- "fn": {
12132
- "type": "string",
12133
- "description": "The function name"
12134
- },
12135
- "params": {
12136
- "type": "Record<string, unknown>",
12137
- "description": "Arguments to pass to the function"
12138
- },
12139
- "options": {
12140
- "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
12141
- "description": "Optional settings (head, get, count)"
12130
+ "returns": "Promise<{ prompt_id: string; number: number }>",
12131
+ "examples": [
12132
+ {
12133
+ "language": "ts",
12134
+ "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
12142
12135
  }
12143
- },
12144
- "required": [
12145
- "fn"
12146
- ],
12147
- "returns": "void"
12136
+ ]
12148
12137
  },
12149
- "signInWithPassword": {
12150
- "description": "Sign in with email and password.",
12151
- "parameters": {
12152
- "email": {
12153
- "type": "string",
12154
- "description": "Parameter email"
12155
- },
12156
- "password": {
12157
- "type": "string",
12158
- "description": "Parameter password"
12159
- }
12160
- },
12161
- "required": [
12162
- "email",
12163
- "password"
12164
- ],
12165
- "returns": "void"
12138
+ "getQueue": {
12139
+ "description": "Get the current prompt queue status.",
12140
+ "parameters": {},
12141
+ "required": [],
12142
+ "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
12166
12143
  },
12167
- "signUp": {
12168
- "description": "Create a new user account with email and password.",
12144
+ "getHistory": {
12145
+ "description": "Get execution history, optionally for a specific prompt.",
12169
12146
  "parameters": {
12170
- "email": {
12171
- "type": "string",
12172
- "description": "Parameter email"
12173
- },
12174
- "password": {
12147
+ "promptId": {
12175
12148
  "type": "string",
12176
- "description": "Parameter password"
12149
+ "description": "If provided, returns history for this prompt only"
12177
12150
  }
12178
12151
  },
12179
- "required": [
12180
- "email",
12181
- "password"
12182
- ],
12183
- "returns": "void"
12152
+ "required": [],
12153
+ "returns": "Promise<Record<string, any>>"
12184
12154
  },
12185
- "signOut": {
12186
- "description": "Sign the current user out.",
12155
+ "getSystemStats": {
12156
+ "description": "Get system stats including GPU memory and queue info.",
12187
12157
  "parameters": {},
12188
12158
  "required": [],
12189
- "returns": "void"
12159
+ "returns": "Promise<any>"
12190
12160
  },
12191
- "getSession": {
12192
- "description": "Get the current session, if any.",
12193
- "parameters": {},
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
+ },
12194
12169
  "required": [],
12195
- "returns": "void"
12170
+ "returns": "Promise<any>"
12196
12171
  },
12197
- "getUser": {
12198
- "description": "Get the current user, if any.",
12172
+ "interrupt": {
12173
+ "description": "Interrupt the currently executing prompt.",
12199
12174
  "parameters": {},
12200
12175
  "required": [],
12201
- "returns": "void"
12176
+ "returns": "Promise<void>"
12202
12177
  },
12203
- "invoke": {
12204
- "description": "Invoke a Supabase Edge Function by name.",
12178
+ "getModels": {
12179
+ "description": "List available models, optionally filtered by type.",
12205
12180
  "parameters": {
12206
- "name": {
12181
+ "type": {
12207
12182
  "type": "string",
12208
- "description": "Parameter name"
12209
- },
12210
- "body": {
12211
- "type": "any",
12212
- "description": "Parameter body"
12183
+ "description": "Model type filter (e.g., 'checkpoints', 'loras')"
12213
12184
  }
12214
12185
  },
12215
- "required": [
12216
- "name"
12217
- ],
12218
- "returns": "void"
12186
+ "required": [],
12187
+ "returns": "Promise<string[]>"
12219
12188
  },
12220
- "subscribe": {
12221
- "description": "Subscribe to realtime changes on a Postgres table.",
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.",
12222
12197
  "parameters": {
12223
- "channelName": {
12224
- "type": "string",
12225
- "description": "A name for this subscription channel"
12198
+ "file": {
12199
+ "type": "Buffer | Blob",
12200
+ "description": "The image data as Buffer or Blob"
12226
12201
  },
12227
- "table": {
12202
+ "filename": {
12228
12203
  "type": "string",
12229
- "description": "The table to listen to"
12230
- },
12231
- "callback": {
12232
- "type": "(payload: any) => void",
12233
- "description": "Called with the payload on each change"
12204
+ "description": "File name for the upload"
12234
12205
  },
12235
- "event": {
12236
- "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
12237
- "description": "The event type to listen for (default: all changes)"
12206
+ "opts": {
12207
+ "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
12208
+ "description": "Upload options (subfolder, type, overwrite)"
12238
12209
  }
12239
12210
  },
12240
12211
  "required": [
12241
- "channelName",
12242
- "table",
12243
- "callback"
12212
+ "file",
12213
+ "filename"
12244
12214
  ],
12245
- "returns": "RealtimeChannel"
12215
+ "returns": "Promise<any>"
12246
12216
  },
12247
- "unsubscribe": {
12248
- "description": "Unsubscribe and remove a realtime channel by name.",
12217
+ "viewImage": {
12218
+ "description": "Download a generated image from ComfyUI as a Buffer.",
12249
12219
  "parameters": {
12250
- "channelName": {
12220
+ "filename": {
12251
12221
  "type": "string",
12252
- "description": "The channel name to remove"
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')"
12253
12231
  }
12254
12232
  },
12255
12233
  "required": [
12256
- "channelName"
12234
+ "filename"
12257
12235
  ],
12258
- "returns": "void"
12236
+ "returns": "Promise<Buffer>"
12259
12237
  },
12260
- "unsubscribeAll": {
12261
- "description": "Unsubscribe and remove all realtime channels.",
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`.",
12262
12240
  "parameters": {},
12263
12241
  "required": [],
12264
- "returns": "void"
12242
+ "returns": "Promise<void>"
12265
12243
  },
12266
- "connect": {
12267
- "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
12244
+ "disconnectWs": {
12245
+ "description": "Close the WebSocket connection.",
12268
12246
  "parameters": {},
12269
12247
  "required": [],
12270
12248
  "returns": "void"
12271
12249
  },
12272
- "disconnect": {
12273
- "description": "Disconnect by signing out and removing all realtime channels.",
12274
- "parameters": {},
12275
- "required": [],
12276
- "returns": "void"
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>"
12277
12301
  }
12278
12302
  },
12279
12303
  "getters": {
12280
- "sdk": {
12281
- "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
12282
- "returns": "SupabaseSDKClient<any, any>"
12304
+ "clientId": {
12305
+ "description": "The unique client ID used for WebSocket session tracking.",
12306
+ "returns": "string"
12283
12307
  },
12284
- "storage": {
12285
- "description": "Returns the Supabase Storage client for managing buckets and files.",
12286
- "returns": "any"
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": {}
12287
12318
  },
12288
- "functions": {
12289
- "description": "Returns the Supabase Functions client.",
12290
- "returns": "any"
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": {}
12291
12348
  }
12292
12349
  },
12293
- "events": {},
12294
12350
  "state": {},
12295
12351
  "options": {},
12296
12352
  "envVars": [],
12297
12353
  "examples": [
12298
12354
  {
12299
12355
  "language": "ts",
12300
- "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})"
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)"
12301
12357
  }
12302
- ]
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
+ }
12303
12404
  });
12304
12405
 
12305
12406
  setBuildTimeData('clients.elevenlabs', {
@@ -12566,301 +12667,200 @@ setBuildTimeData('clients.elevenlabs', {
12566
12667
  }
12567
12668
  });
12568
12669
 
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",
12670
+ setBuildTimeData('clients.supabase', {
12671
+ "id": "clients.supabase",
12672
+ "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
12673
+ "shortcut": "clients.supabase",
12674
+ "className": "SupabaseClient",
12574
12675
  "methods": {
12575
- "queuePrompt": {
12576
- "description": "Queue a prompt (API-format workflow) for execution.",
12676
+ "from": {
12677
+ "description": "Start a query on a Postgres table or view.",
12577
12678
  "parameters": {
12578
- "prompt": {
12579
- "type": "Record<string, any>",
12580
- "description": "The API-format workflow object"
12581
- },
12582
- "clientId": {
12679
+ "table": {
12583
12680
  "type": "string",
12584
- "description": "Override the client ID for this request"
12681
+ "description": "The table or view name to query"
12585
12682
  }
12586
12683
  },
12587
12684
  "required": [
12588
- "prompt"
12685
+ "table"
12589
12686
  ],
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[] }>"
12603
- },
12604
- "getHistory": {
12605
- "description": "Get execution history, optionally for a specific prompt.",
12606
- "parameters": {
12607
- "promptId": {
12608
- "type": "string",
12609
- "description": "If provided, returns history for this prompt only"
12610
- }
12611
- },
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>"
12687
+ "returns": "void"
12620
12688
  },
12621
- "getObjectInfo": {
12622
- "description": "Get node type info with input/output schemas.",
12689
+ "rpc": {
12690
+ "description": "Call a Postgres function (RPC).",
12623
12691
  "parameters": {
12624
- "nodeClass": {
12692
+ "fn": {
12625
12693
  "type": "string",
12626
- "description": "If provided, returns info for this node type only"
12694
+ "description": "The function name"
12695
+ },
12696
+ "params": {
12697
+ "type": "Record<string, unknown>",
12698
+ "description": "Arguments to pass to the function"
12699
+ },
12700
+ "options": {
12701
+ "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
12702
+ "description": "Optional settings (head, get, count)"
12627
12703
  }
12628
12704
  },
12629
- "required": [],
12630
- "returns": "Promise<any>"
12631
- },
12632
- "interrupt": {
12633
- "description": "Interrupt the currently executing prompt.",
12634
- "parameters": {},
12635
- "required": [],
12636
- "returns": "Promise<void>"
12705
+ "required": [
12706
+ "fn"
12707
+ ],
12708
+ "returns": "void"
12637
12709
  },
12638
- "getModels": {
12639
- "description": "List available models, optionally filtered by type.",
12710
+ "signInWithPassword": {
12711
+ "description": "Sign in with email and password.",
12640
12712
  "parameters": {
12641
- "type": {
12713
+ "email": {
12642
12714
  "type": "string",
12643
- "description": "Model type filter (e.g., 'checkpoints', 'loras')"
12644
- }
12645
- },
12646
- "required": [],
12647
- "returns": "Promise<string[]>"
12648
- },
12649
- "getEmbeddings": {
12650
- "description": "List available embedding models.",
12651
- "parameters": {},
12652
- "required": [],
12653
- "returns": "Promise<string[]>"
12654
- },
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"
12715
+ "description": "Parameter email"
12661
12716
  },
12662
- "filename": {
12717
+ "password": {
12663
12718
  "type": "string",
12664
- "description": "File name for the upload"
12665
- },
12666
- "opts": {
12667
- "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
12668
- "description": "Upload options (subfolder, type, overwrite)"
12719
+ "description": "Parameter password"
12669
12720
  }
12670
12721
  },
12671
12722
  "required": [
12672
- "file",
12673
- "filename"
12723
+ "email",
12724
+ "password"
12674
12725
  ],
12675
- "returns": "Promise<any>"
12726
+ "returns": "void"
12676
12727
  },
12677
- "viewImage": {
12678
- "description": "Download a generated image from ComfyUI as a Buffer.",
12728
+ "signUp": {
12729
+ "description": "Create a new user account with email and password.",
12679
12730
  "parameters": {
12680
- "filename": {
12731
+ "email": {
12681
12732
  "type": "string",
12682
- "description": "The image filename"
12683
- },
12684
- "subfolder": {
12685
- "type": "any",
12686
- "description": "Subfolder within the output directory"
12733
+ "description": "Parameter email"
12687
12734
  },
12688
- "type": {
12689
- "type": "any",
12690
- "description": "Image type ('output', 'input', 'temp')"
12735
+ "password": {
12736
+ "type": "string",
12737
+ "description": "Parameter password"
12691
12738
  }
12692
12739
  },
12693
12740
  "required": [
12694
- "filename"
12741
+ "email",
12742
+ "password"
12695
12743
  ],
12696
- "returns": "Promise<Buffer>"
12744
+ "returns": "void"
12697
12745
  },
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`.",
12746
+ "signOut": {
12747
+ "description": "Sign the current user out.",
12700
12748
  "parameters": {},
12701
12749
  "required": [],
12702
- "returns": "Promise<void>"
12750
+ "returns": "void"
12703
12751
  },
12704
- "disconnectWs": {
12705
- "description": "Close the WebSocket connection.",
12752
+ "getSession": {
12753
+ "description": "Get the current session, if any.",
12706
12754
  "parameters": {},
12707
12755
  "required": [],
12708
12756
  "returns": "void"
12709
12757
  },
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.",
12758
+ "getUser": {
12759
+ "description": "Get the current user, if any.",
12760
+ "parameters": {},
12761
+ "required": [],
12762
+ "returns": "void"
12763
+ },
12764
+ "invoke": {
12765
+ "description": "Invoke a Supabase Edge Function by name.",
12712
12766
  "parameters": {
12713
- "workflow": {
12714
- "type": "Record<string, any>",
12715
- "description": "Parameter workflow"
12767
+ "name": {
12768
+ "type": "string",
12769
+ "description": "Parameter name"
12770
+ },
12771
+ "body": {
12772
+ "type": "any",
12773
+ "description": "Parameter body"
12716
12774
  }
12717
12775
  },
12718
12776
  "required": [
12719
- "workflow"
12777
+ "name"
12720
12778
  ],
12721
- "returns": "Promise<Record<string, any>>"
12779
+ "returns": "void"
12722
12780
  },
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' } } ```",
12781
+ "subscribe": {
12782
+ "description": "Subscribe to realtime changes on a Postgres table.",
12725
12783
  "parameters": {
12726
- "workflow": {
12727
- "type": "Record<string, any>",
12728
- "description": "Parameter workflow"
12784
+ "channelName": {
12785
+ "type": "string",
12786
+ "description": "A name for this subscription channel"
12729
12787
  },
12730
- "inputs": {
12731
- "type": "Record<string, any>",
12732
- "description": "Parameter inputs"
12788
+ "table": {
12789
+ "type": "string",
12790
+ "description": "The table to listen to"
12733
12791
  },
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
- }
12792
+ "callback": {
12793
+ "type": "(payload: any) => void",
12794
+ "description": "Called with the payload on each change"
12795
+ },
12796
+ "event": {
12797
+ "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
12798
+ "description": "The event type to listen for (default: all changes)"
12755
12799
  }
12756
12800
  },
12757
12801
  "required": [
12758
- "workflow"
12802
+ "channelName",
12803
+ "table",
12804
+ "callback"
12759
12805
  ],
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": {}
12806
+ "returns": "RealtimeChannel"
12778
12807
  },
12779
- "execution_complete": {
12780
- "name": "execution_complete",
12781
- "description": "Event emitted by ComfyUIClient",
12782
- "arguments": {}
12808
+ "unsubscribe": {
12809
+ "description": "Unsubscribe and remove a realtime channel by name.",
12810
+ "parameters": {
12811
+ "channelName": {
12812
+ "type": "string",
12813
+ "description": "The channel name to remove"
12814
+ }
12815
+ },
12816
+ "required": [
12817
+ "channelName"
12818
+ ],
12819
+ "returns": "void"
12783
12820
  },
12784
- "executing": {
12785
- "name": "executing",
12786
- "description": "Event emitted by ComfyUIClient",
12787
- "arguments": {}
12821
+ "unsubscribeAll": {
12822
+ "description": "Unsubscribe and remove all realtime channels.",
12823
+ "parameters": {},
12824
+ "required": [],
12825
+ "returns": "void"
12788
12826
  },
12789
- "progress": {
12790
- "name": "progress",
12791
- "description": "Event emitted by ComfyUIClient",
12792
- "arguments": {}
12827
+ "connect": {
12828
+ "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
12829
+ "parameters": {},
12830
+ "required": [],
12831
+ "returns": "void"
12793
12832
  },
12794
- "executed": {
12795
- "name": "executed",
12796
- "description": "Event emitted by ComfyUIClient",
12797
- "arguments": {}
12833
+ "disconnect": {
12834
+ "description": "Disconnect by signing out and removing all realtime channels.",
12835
+ "parameters": {},
12836
+ "required": [],
12837
+ "returns": "void"
12838
+ }
12839
+ },
12840
+ "getters": {
12841
+ "sdk": {
12842
+ "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
12843
+ "returns": "SupabaseSDKClient<any, any>"
12798
12844
  },
12799
- "execution_cached": {
12800
- "name": "execution_cached",
12801
- "description": "Event emitted by ComfyUIClient",
12802
- "arguments": {}
12845
+ "storage": {
12846
+ "description": "Returns the Supabase Storage client for managing buckets and files.",
12847
+ "returns": "any"
12803
12848
  },
12804
- "execution_error": {
12805
- "name": "execution_error",
12806
- "description": "Event emitted by ComfyUIClient",
12807
- "arguments": {}
12849
+ "functions": {
12850
+ "description": "Returns the Supabase Functions client.",
12851
+ "returns": "any"
12808
12852
  }
12809
12853
  },
12854
+ "events": {},
12810
12855
  "state": {},
12811
12856
  "options": {},
12812
12857
  "envVars": [],
12813
12858
  "examples": [
12814
12859
  {
12815
12860
  "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
12842
- }
12843
- }
12844
- },
12845
- "WorkflowResult": {
12846
- "description": "",
12847
- "properties": {
12848
- "promptId": {
12849
- "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
- "description": "",
12859
- "optional": true
12860
- }
12861
- }
12861
+ "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})"
12862
12862
  }
12863
- }
12863
+ ]
12864
12864
  });
12865
12865
 
12866
12866
  setBuildTimeData('servers.mcp', {
@@ -12881,7 +12881,7 @@ setBuildTimeData('servers.mcp', {
12881
12881
  "description": "Tool schema, description, and handler",
12882
12882
  "properties": {
12883
12883
  "schema": {
12884
- "type": "z.ZodObject<any>",
12884
+ "type": "z.ZodType",
12885
12885
  "description": ""
12886
12886
  },
12887
12887
  "description": {
@@ -12889,7 +12889,7 @@ setBuildTimeData('servers.mcp', {
12889
12889
  "description": ""
12890
12890
  },
12891
12891
  "handler": {
12892
- "type": "(args: any, ctx: MCPContext) => any",
12892
+ "type": "Function | ((args: any, ctx: any) => any)",
12893
12893
  "description": ""
12894
12894
  }
12895
12895
  }
@@ -13031,7 +13031,7 @@ setBuildTimeData('servers.mcp', {
13031
13031
  "description": "",
13032
13032
  "properties": {
13033
13033
  "schema": {
13034
- "type": "z.ZodObject<any>",
13034
+ "type": "z.ZodType",
13035
13035
  "description": "",
13036
13036
  "optional": true
13037
13037
  },
@@ -13041,17 +13041,9 @@ setBuildTimeData('servers.mcp', {
13041
13041
  "optional": true
13042
13042
  },
13043
13043
  "handler": {
13044
- "type": "(args: any, ctx: MCPContext) => any",
13045
- "description": ""
13046
- }
13047
- }
13048
- },
13049
- "MCPContext": {
13050
- "description": "Context object passed to all MCP tool, resource, and prompt handlers.",
13051
- "properties": {
13052
- "container": {
13053
- "type": "NodeContainer",
13054
- "description": ""
13044
+ "type": "Function | ((args: any, ctx: any) => any)",
13045
+ "description": "",
13046
+ "optional": true
13055
13047
  }
13056
13048
  }
13057
13049
  },
@@ -13079,6 +13071,15 @@ setBuildTimeData('servers.mcp', {
13079
13071
  }
13080
13072
  }
13081
13073
  },
13074
+ "MCPContext": {
13075
+ "description": "Context object passed to all MCP tool, resource, and prompt handlers.",
13076
+ "properties": {
13077
+ "container": {
13078
+ "type": "NodeContainer",
13079
+ "description": ""
13080
+ }
13081
+ }
13082
+ },
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": {
@@ -14959,7 +15044,7 @@ setBuildTimeData('features.skillsLibrary', {
14959
15044
  "description": "",
14960
15045
  "parameters": {
14961
15046
  "assistant": {
14962
- "type": "Assistant",
15047
+ "type": "Feature",
14963
15048
  "description": "Parameter assistant"
14964
15049
  }
14965
15050
  },
@@ -15094,6 +15179,24 @@ setBuildTimeData('features.skillsLibrary', {
15094
15179
  "{ skillName, question }"
15095
15180
  ],
15096
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[]>"
15097
15200
  }
15098
15201
  },
15099
15202
  "getters": {
@@ -15530,6 +15633,10 @@ setBuildTimeData('features.assistant', {
15530
15633
  "description": "Parsed YAML frontmatter from CORE.md, or empty object if none.",
15531
15634
  "returns": "Record<string, any>"
15532
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
+ },
15533
15640
  "paths": {
15534
15641
  "description": "Provides a helper for creating paths off of the assistant's base folder",
15535
15642
  "returns": "any"
@@ -16109,6 +16216,77 @@ setBuildTimeData('features.claudeCode', {
16109
16216
  }
16110
16217
  ]
16111
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
+ },
16112
16290
  "cleanupMcpTempFiles": {
16113
16291
  "description": "Clean up any temp MCP config files created during sessions.",
16114
16292
  "parameters": {},
@@ -18305,7 +18483,7 @@ setContainerBuildTimeData('Container', {
18305
18483
  "description": "The id of the feature to create."
18306
18484
  },
18307
18485
  "options": {
18308
- "type": "ConstructorParameters<Features[T]>[0]",
18486
+ "type": "FeatureInputOptions<Features>[T] | Record<string, unknown>",
18309
18487
  "description": "The options to pass to the feature constructor."
18310
18488
  }
18311
18489
  },
@@ -18314,6 +18492,52 @@ setContainerBuildTimeData('Container', {
18314
18492
  ],
18315
18493
  "returns": "InstanceType<Features[T]>"
18316
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
+ },
18317
18541
  "start": {
18318
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.",
18319
18543
  "parameters": {},
@@ -18620,7 +18844,7 @@ setContainerBuildTimeData('NodeContainer', {
18620
18844
  },
18621
18845
  "urlUtils": {
18622
18846
  "description": "Returns URL utility functions for parsing URIs.",
18623
- "returns": "{ parse: (uri: string) => url.URL | null }"
18847
+ "returns": "{ parse: (uri: string) => url.UrlWithStringQuery }"
18624
18848
  },
18625
18849
  "paths": {
18626
18850
  "description": "Returns path utility functions scoped to the current working directory (join, resolve, relative, dirname, parse).",
@@ -30741,199 +30965,300 @@ export const introspectionData = [
30741
30965
  ]
30742
30966
  },
30743
30967
  {
30744
- "id": "clients.supabase",
30745
- "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
30746
- "shortcut": "clients.supabase",
30747
- "className": "SupabaseClient",
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",
30748
30972
  "methods": {
30749
- "from": {
30750
- "description": "Start a query on a Postgres table or view.",
30973
+ "queuePrompt": {
30974
+ "description": "Queue a prompt (API-format workflow) for execution.",
30751
30975
  "parameters": {
30752
- "table": {
30976
+ "prompt": {
30977
+ "type": "Record<string, any>",
30978
+ "description": "The API-format workflow object"
30979
+ },
30980
+ "clientId": {
30753
30981
  "type": "string",
30754
- "description": "The table or view name to query"
30982
+ "description": "Override the client ID for this request"
30755
30983
  }
30756
30984
  },
30757
30985
  "required": [
30758
- "table"
30986
+ "prompt"
30759
30987
  ],
30760
- "returns": "void"
30761
- },
30762
- "rpc": {
30763
- "description": "Call a Postgres function (RPC).",
30764
- "parameters": {
30765
- "fn": {
30766
- "type": "string",
30767
- "description": "The function name"
30768
- },
30769
- "params": {
30770
- "type": "Record<string, unknown>",
30771
- "description": "Arguments to pass to the function"
30772
- },
30773
- "options": {
30774
- "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
30775
- "description": "Optional settings (head, get, count)"
30988
+ "returns": "Promise<{ prompt_id: string; number: number }>",
30989
+ "examples": [
30990
+ {
30991
+ "language": "ts",
30992
+ "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
30776
30993
  }
30777
- },
30778
- "required": [
30779
- "fn"
30780
- ],
30781
- "returns": "void"
30994
+ ]
30782
30995
  },
30783
- "signInWithPassword": {
30784
- "description": "Sign in with email and password.",
30785
- "parameters": {
30786
- "email": {
30787
- "type": "string",
30788
- "description": "Parameter email"
30789
- },
30790
- "password": {
30791
- "type": "string",
30792
- "description": "Parameter password"
30793
- }
30794
- },
30795
- "required": [
30796
- "email",
30797
- "password"
30798
- ],
30799
- "returns": "void"
30996
+ "getQueue": {
30997
+ "description": "Get the current prompt queue status.",
30998
+ "parameters": {},
30999
+ "required": [],
31000
+ "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
30800
31001
  },
30801
- "signUp": {
30802
- "description": "Create a new user account with email and password.",
31002
+ "getHistory": {
31003
+ "description": "Get execution history, optionally for a specific prompt.",
30803
31004
  "parameters": {
30804
- "email": {
30805
- "type": "string",
30806
- "description": "Parameter email"
30807
- },
30808
- "password": {
31005
+ "promptId": {
30809
31006
  "type": "string",
30810
- "description": "Parameter password"
31007
+ "description": "If provided, returns history for this prompt only"
30811
31008
  }
30812
31009
  },
30813
- "required": [
30814
- "email",
30815
- "password"
30816
- ],
30817
- "returns": "void"
31010
+ "required": [],
31011
+ "returns": "Promise<Record<string, any>>"
30818
31012
  },
30819
- "signOut": {
30820
- "description": "Sign the current user out.",
31013
+ "getSystemStats": {
31014
+ "description": "Get system stats including GPU memory and queue info.",
30821
31015
  "parameters": {},
30822
31016
  "required": [],
30823
- "returns": "void"
31017
+ "returns": "Promise<any>"
30824
31018
  },
30825
- "getSession": {
30826
- "description": "Get the current session, if any.",
30827
- "parameters": {},
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
+ },
30828
31027
  "required": [],
30829
- "returns": "void"
31028
+ "returns": "Promise<any>"
30830
31029
  },
30831
- "getUser": {
30832
- "description": "Get the current user, if any.",
31030
+ "interrupt": {
31031
+ "description": "Interrupt the currently executing prompt.",
30833
31032
  "parameters": {},
30834
31033
  "required": [],
30835
- "returns": "void"
31034
+ "returns": "Promise<void>"
30836
31035
  },
30837
- "invoke": {
30838
- "description": "Invoke a Supabase Edge Function by name.",
31036
+ "getModels": {
31037
+ "description": "List available models, optionally filtered by type.",
30839
31038
  "parameters": {
30840
- "name": {
31039
+ "type": {
30841
31040
  "type": "string",
30842
- "description": "Parameter name"
30843
- },
30844
- "body": {
30845
- "type": "any",
30846
- "description": "Parameter body"
31041
+ "description": "Model type filter (e.g., 'checkpoints', 'loras')"
30847
31042
  }
30848
31043
  },
30849
- "required": [
30850
- "name"
30851
- ],
30852
- "returns": "void"
31044
+ "required": [],
31045
+ "returns": "Promise<string[]>"
30853
31046
  },
30854
- "subscribe": {
30855
- "description": "Subscribe to realtime changes on a Postgres table.",
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.",
30856
31055
  "parameters": {
30857
- "channelName": {
30858
- "type": "string",
30859
- "description": "A name for this subscription channel"
31056
+ "file": {
31057
+ "type": "Buffer | Blob",
31058
+ "description": "The image data as Buffer or Blob"
30860
31059
  },
30861
- "table": {
31060
+ "filename": {
30862
31061
  "type": "string",
30863
- "description": "The table to listen to"
30864
- },
30865
- "callback": {
30866
- "type": "(payload: any) => void",
30867
- "description": "Called with the payload on each change"
31062
+ "description": "File name for the upload"
30868
31063
  },
30869
- "event": {
30870
- "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
30871
- "description": "The event type to listen for (default: all changes)"
31064
+ "opts": {
31065
+ "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
31066
+ "description": "Upload options (subfolder, type, overwrite)"
30872
31067
  }
30873
31068
  },
30874
31069
  "required": [
30875
- "channelName",
30876
- "table",
30877
- "callback"
31070
+ "file",
31071
+ "filename"
30878
31072
  ],
30879
- "returns": "RealtimeChannel"
31073
+ "returns": "Promise<any>"
30880
31074
  },
30881
- "unsubscribe": {
30882
- "description": "Unsubscribe and remove a realtime channel by name.",
31075
+ "viewImage": {
31076
+ "description": "Download a generated image from ComfyUI as a Buffer.",
30883
31077
  "parameters": {
30884
- "channelName": {
31078
+ "filename": {
30885
31079
  "type": "string",
30886
- "description": "The channel name to remove"
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')"
30887
31089
  }
30888
31090
  },
30889
31091
  "required": [
30890
- "channelName"
31092
+ "filename"
30891
31093
  ],
30892
- "returns": "void"
31094
+ "returns": "Promise<Buffer>"
30893
31095
  },
30894
- "unsubscribeAll": {
30895
- "description": "Unsubscribe and remove all realtime channels.",
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`.",
30896
31098
  "parameters": {},
30897
31099
  "required": [],
30898
- "returns": "void"
31100
+ "returns": "Promise<void>"
30899
31101
  },
30900
- "connect": {
30901
- "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
31102
+ "disconnectWs": {
31103
+ "description": "Close the WebSocket connection.",
30902
31104
  "parameters": {},
30903
31105
  "required": [],
30904
31106
  "returns": "void"
30905
31107
  },
30906
- "disconnect": {
30907
- "description": "Disconnect by signing out and removing all realtime channels.",
30908
- "parameters": {},
30909
- "required": [],
30910
- "returns": "void"
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>"
30911
31159
  }
30912
31160
  },
30913
31161
  "getters": {
30914
- "sdk": {
30915
- "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
30916
- "returns": "SupabaseSDKClient<any, any>"
31162
+ "clientId": {
31163
+ "description": "The unique client ID used for WebSocket session tracking.",
31164
+ "returns": "string"
30917
31165
  },
30918
- "storage": {
30919
- "description": "Returns the Supabase Storage client for managing buckets and files.",
30920
- "returns": "any"
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": {}
30921
31176
  },
30922
- "functions": {
30923
- "description": "Returns the Supabase Functions client.",
30924
- "returns": "any"
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": {}
30925
31206
  }
30926
31207
  },
30927
- "events": {},
30928
31208
  "state": {},
30929
31209
  "options": {},
30930
31210
  "envVars": [],
30931
31211
  "examples": [
30932
31212
  {
30933
31213
  "language": "ts",
30934
- "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})"
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)"
30935
31215
  }
30936
- ]
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
+ }
30937
31262
  },
30938
31263
  {
30939
31264
  "id": "clients.elevenlabs",
@@ -31199,300 +31524,199 @@ export const introspectionData = [
31199
31524
  }
31200
31525
  },
31201
31526
  {
31202
- "id": "clients.comfyui",
31203
- "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.",
31204
- "shortcut": "clients.comfyui",
31205
- "className": "ComfyUIClient",
31527
+ "id": "clients.supabase",
31528
+ "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
31529
+ "shortcut": "clients.supabase",
31530
+ "className": "SupabaseClient",
31206
31531
  "methods": {
31207
- "queuePrompt": {
31208
- "description": "Queue a prompt (API-format workflow) for execution.",
31532
+ "from": {
31533
+ "description": "Start a query on a Postgres table or view.",
31209
31534
  "parameters": {
31210
- "prompt": {
31211
- "type": "Record<string, any>",
31212
- "description": "The API-format workflow object"
31535
+ "table": {
31536
+ "type": "string",
31537
+ "description": "The table or view name to query"
31538
+ }
31539
+ },
31540
+ "required": [
31541
+ "table"
31542
+ ],
31543
+ "returns": "void"
31544
+ },
31545
+ "rpc": {
31546
+ "description": "Call a Postgres function (RPC).",
31547
+ "parameters": {
31548
+ "fn": {
31549
+ "type": "string",
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)"
31559
+ }
31560
+ },
31561
+ "required": [
31562
+ "fn"
31563
+ ],
31564
+ "returns": "void"
31565
+ },
31566
+ "signInWithPassword": {
31567
+ "description": "Sign in with email and password.",
31568
+ "parameters": {
31569
+ "email": {
31570
+ "type": "string",
31571
+ "description": "Parameter email"
31572
+ },
31573
+ "password": {
31574
+ "type": "string",
31575
+ "description": "Parameter password"
31576
+ }
31577
+ },
31578
+ "required": [
31579
+ "email",
31580
+ "password"
31581
+ ],
31582
+ "returns": "void"
31583
+ },
31584
+ "signUp": {
31585
+ "description": "Create a new user account with email and password.",
31586
+ "parameters": {
31587
+ "email": {
31588
+ "type": "string",
31589
+ "description": "Parameter email"
31213
31590
  },
31214
- "clientId": {
31591
+ "password": {
31215
31592
  "type": "string",
31216
- "description": "Override the client ID for this request"
31593
+ "description": "Parameter password"
31217
31594
  }
31218
31595
  },
31219
31596
  "required": [
31220
- "prompt"
31597
+ "email",
31598
+ "password"
31221
31599
  ],
31222
- "returns": "Promise<{ prompt_id: string; number: number }>",
31223
- "examples": [
31224
- {
31225
- "language": "ts",
31226
- "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
31227
- }
31228
- ]
31600
+ "returns": "void"
31229
31601
  },
31230
- "getQueue": {
31231
- "description": "Get the current prompt queue status.",
31602
+ "signOut": {
31603
+ "description": "Sign the current user out.",
31232
31604
  "parameters": {},
31233
31605
  "required": [],
31234
- "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
31235
- },
31236
- "getHistory": {
31237
- "description": "Get execution history, optionally for a specific prompt.",
31238
- "parameters": {
31239
- "promptId": {
31240
- "type": "string",
31241
- "description": "If provided, returns history for this prompt only"
31242
- }
31243
- },
31244
- "required": [],
31245
- "returns": "Promise<Record<string, any>>"
31606
+ "returns": "void"
31246
31607
  },
31247
- "getSystemStats": {
31248
- "description": "Get system stats including GPU memory and queue info.",
31608
+ "getSession": {
31609
+ "description": "Get the current session, if any.",
31249
31610
  "parameters": {},
31250
31611
  "required": [],
31251
- "returns": "Promise<any>"
31252
- },
31253
- "getObjectInfo": {
31254
- "description": "Get node type info with input/output schemas.",
31255
- "parameters": {
31256
- "nodeClass": {
31257
- "type": "string",
31258
- "description": "If provided, returns info for this node type only"
31259
- }
31260
- },
31261
- "required": [],
31262
- "returns": "Promise<any>"
31612
+ "returns": "void"
31263
31613
  },
31264
- "interrupt": {
31265
- "description": "Interrupt the currently executing prompt.",
31614
+ "getUser": {
31615
+ "description": "Get the current user, if any.",
31266
31616
  "parameters": {},
31267
31617
  "required": [],
31268
- "returns": "Promise<void>"
31618
+ "returns": "void"
31269
31619
  },
31270
- "getModels": {
31271
- "description": "List available models, optionally filtered by type.",
31620
+ "invoke": {
31621
+ "description": "Invoke a Supabase Edge Function by name.",
31272
31622
  "parameters": {
31273
- "type": {
31623
+ "name": {
31274
31624
  "type": "string",
31275
- "description": "Model type filter (e.g., 'checkpoints', 'loras')"
31625
+ "description": "Parameter name"
31626
+ },
31627
+ "body": {
31628
+ "type": "any",
31629
+ "description": "Parameter body"
31276
31630
  }
31277
31631
  },
31278
- "required": [],
31279
- "returns": "Promise<string[]>"
31280
- },
31281
- "getEmbeddings": {
31282
- "description": "List available embedding models.",
31283
- "parameters": {},
31284
- "required": [],
31285
- "returns": "Promise<string[]>"
31632
+ "required": [
31633
+ "name"
31634
+ ],
31635
+ "returns": "void"
31286
31636
  },
31287
- "uploadImage": {
31288
- "description": "Upload an image to ComfyUI's input directory.",
31637
+ "subscribe": {
31638
+ "description": "Subscribe to realtime changes on a Postgres table.",
31289
31639
  "parameters": {
31290
- "file": {
31291
- "type": "Buffer | Blob",
31292
- "description": "The image data as Buffer or Blob"
31640
+ "channelName": {
31641
+ "type": "string",
31642
+ "description": "A name for this subscription channel"
31293
31643
  },
31294
- "filename": {
31644
+ "table": {
31295
31645
  "type": "string",
31296
- "description": "File name for the upload"
31646
+ "description": "The table to listen to"
31297
31647
  },
31298
- "opts": {
31299
- "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
31300
- "description": "Upload options (subfolder, type, overwrite)"
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)"
31301
31655
  }
31302
31656
  },
31303
31657
  "required": [
31304
- "file",
31305
- "filename"
31658
+ "channelName",
31659
+ "table",
31660
+ "callback"
31306
31661
  ],
31307
- "returns": "Promise<any>"
31662
+ "returns": "RealtimeChannel"
31308
31663
  },
31309
- "viewImage": {
31310
- "description": "Download a generated image from ComfyUI as a Buffer.",
31664
+ "unsubscribe": {
31665
+ "description": "Unsubscribe and remove a realtime channel by name.",
31311
31666
  "parameters": {
31312
- "filename": {
31667
+ "channelName": {
31313
31668
  "type": "string",
31314
- "description": "The image filename"
31315
- },
31316
- "subfolder": {
31317
- "type": "any",
31318
- "description": "Subfolder within the output directory"
31319
- },
31320
- "type": {
31321
- "type": "any",
31322
- "description": "Image type ('output', 'input', 'temp')"
31669
+ "description": "The channel name to remove"
31323
31670
  }
31324
31671
  },
31325
31672
  "required": [
31326
- "filename"
31673
+ "channelName"
31327
31674
  ],
31328
- "returns": "Promise<Buffer>"
31675
+ "returns": "void"
31329
31676
  },
31330
- "connectWs": {
31331
- "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`.",
31677
+ "unsubscribeAll": {
31678
+ "description": "Unsubscribe and remove all realtime channels.",
31332
31679
  "parameters": {},
31333
31680
  "required": [],
31334
- "returns": "Promise<void>"
31681
+ "returns": "void"
31335
31682
  },
31336
- "disconnectWs": {
31337
- "description": "Close the WebSocket connection.",
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.",
31338
31685
  "parameters": {},
31339
31686
  "required": [],
31340
31687
  "returns": "void"
31341
31688
  },
31342
- "toApiFormat": {
31343
- "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.",
31344
- "parameters": {
31345
- "workflow": {
31346
- "type": "Record<string, any>",
31347
- "description": "Parameter workflow"
31348
- }
31349
- },
31350
- "required": [
31351
- "workflow"
31352
- ],
31353
- "returns": "Promise<Record<string, any>>"
31354
- },
31355
- "runWorkflow": {
31356
- "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' } } ```",
31357
- "parameters": {
31358
- "workflow": {
31359
- "type": "Record<string, any>",
31360
- "description": "Parameter workflow"
31361
- },
31362
- "inputs": {
31363
- "type": "Record<string, any>",
31364
- "description": "Parameter inputs"
31365
- },
31366
- "options": {
31367
- "type": "WorkflowRunOptions",
31368
- "description": "Parameter options",
31369
- "properties": {
31370
- "poll": {
31371
- "type": "boolean",
31372
- "description": "Use polling instead of WebSocket for tracking execution"
31373
- },
31374
- "pollInterval": {
31375
- "type": "number",
31376
- "description": "Polling interval in ms (default 1000)"
31377
- },
31378
- "inputMap": {
31379
- "type": "InputMapping",
31380
- "description": "Named input mapping: semantic name -> { nodeId, field }"
31381
- },
31382
- "outputDir": {
31383
- "type": "string",
31384
- "description": "If provided, output images are downloaded to this directory"
31385
- }
31386
- }
31387
- }
31388
- },
31389
- "required": [
31390
- "workflow"
31391
- ],
31392
- "returns": "Promise<WorkflowResult>"
31689
+ "disconnect": {
31690
+ "description": "Disconnect by signing out and removing all realtime channels.",
31691
+ "parameters": {},
31692
+ "required": [],
31693
+ "returns": "void"
31393
31694
  }
31394
31695
  },
31395
31696
  "getters": {
31396
- "clientId": {
31397
- "description": "The unique client ID used for WebSocket session tracking.",
31398
- "returns": "string"
31399
- },
31400
- "wsURL": {
31401
- "description": "The WebSocket URL derived from baseURL or overridden via options.",
31402
- "returns": "string"
31403
- }
31404
- },
31405
- "events": {
31406
- "execution_start": {
31407
- "name": "execution_start",
31408
- "description": "Event emitted by ComfyUIClient",
31409
- "arguments": {}
31410
- },
31411
- "execution_complete": {
31412
- "name": "execution_complete",
31413
- "description": "Event emitted by ComfyUIClient",
31414
- "arguments": {}
31415
- },
31416
- "executing": {
31417
- "name": "executing",
31418
- "description": "Event emitted by ComfyUIClient",
31419
- "arguments": {}
31420
- },
31421
- "progress": {
31422
- "name": "progress",
31423
- "description": "Event emitted by ComfyUIClient",
31424
- "arguments": {}
31425
- },
31426
- "executed": {
31427
- "name": "executed",
31428
- "description": "Event emitted by ComfyUIClient",
31429
- "arguments": {}
31697
+ "sdk": {
31698
+ "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
31699
+ "returns": "SupabaseSDKClient<any, any>"
31430
31700
  },
31431
- "execution_cached": {
31432
- "name": "execution_cached",
31433
- "description": "Event emitted by ComfyUIClient",
31434
- "arguments": {}
31701
+ "storage": {
31702
+ "description": "Returns the Supabase Storage client for managing buckets and files.",
31703
+ "returns": "any"
31435
31704
  },
31436
- "execution_error": {
31437
- "name": "execution_error",
31438
- "description": "Event emitted by ComfyUIClient",
31439
- "arguments": {}
31705
+ "functions": {
31706
+ "description": "Returns the Supabase Functions client.",
31707
+ "returns": "any"
31440
31708
  }
31441
31709
  },
31710
+ "events": {},
31442
31711
  "state": {},
31443
31712
  "options": {},
31444
31713
  "envVars": [],
31445
31714
  "examples": [
31446
31715
  {
31447
31716
  "language": "ts",
31448
- "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)"
31449
- }
31450
- ],
31451
- "types": {
31452
- "WorkflowRunOptions": {
31453
- "description": "",
31454
- "properties": {
31455
- "poll": {
31456
- "type": "boolean",
31457
- "description": "Use polling instead of WebSocket for tracking execution",
31458
- "optional": true
31459
- },
31460
- "pollInterval": {
31461
- "type": "number",
31462
- "description": "Polling interval in ms (default 1000)",
31463
- "optional": true
31464
- },
31465
- "inputMap": {
31466
- "type": "InputMapping",
31467
- "description": "Named input mapping: semantic name -> { nodeId, field }",
31468
- "optional": true
31469
- },
31470
- "outputDir": {
31471
- "type": "string",
31472
- "description": "If provided, output images are downloaded to this directory",
31473
- "optional": true
31474
- }
31475
- }
31476
- },
31477
- "WorkflowResult": {
31478
- "description": "",
31479
- "properties": {
31480
- "promptId": {
31481
- "type": "string",
31482
- "description": ""
31483
- },
31484
- "outputs": {
31485
- "type": "Record<string, any>",
31486
- "description": ""
31487
- },
31488
- "images": {
31489
- "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
31490
- "description": "",
31491
- "optional": true
31492
- }
31493
- }
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})"
31494
31718
  }
31495
- }
31719
+ ]
31496
31720
  },
31497
31721
  {
31498
31722
  "id": "servers.mcp",
@@ -31512,7 +31736,7 @@ export const introspectionData = [
31512
31736
  "description": "Tool schema, description, and handler",
31513
31737
  "properties": {
31514
31738
  "schema": {
31515
- "type": "z.ZodObject<any>",
31739
+ "type": "z.ZodType",
31516
31740
  "description": ""
31517
31741
  },
31518
31742
  "description": {
@@ -31520,7 +31744,7 @@ export const introspectionData = [
31520
31744
  "description": ""
31521
31745
  },
31522
31746
  "handler": {
31523
- "type": "(args: any, ctx: MCPContext) => any",
31747
+ "type": "Function | ((args: any, ctx: any) => any)",
31524
31748
  "description": ""
31525
31749
  }
31526
31750
  }
@@ -31662,7 +31886,7 @@ export const introspectionData = [
31662
31886
  "description": "",
31663
31887
  "properties": {
31664
31888
  "schema": {
31665
- "type": "z.ZodObject<any>",
31889
+ "type": "z.ZodType",
31666
31890
  "description": "",
31667
31891
  "optional": true
31668
31892
  },
@@ -31672,17 +31896,9 @@ export const introspectionData = [
31672
31896
  "optional": true
31673
31897
  },
31674
31898
  "handler": {
31675
- "type": "(args: any, ctx: MCPContext) => any",
31676
- "description": ""
31677
- }
31678
- }
31679
- },
31680
- "MCPContext": {
31681
- "description": "Context object passed to all MCP tool, resource, and prompt handlers.",
31682
- "properties": {
31683
- "container": {
31684
- "type": "NodeContainer",
31685
- "description": ""
31899
+ "type": "Function | ((args: any, ctx: any) => any)",
31900
+ "description": "",
31901
+ "optional": true
31686
31902
  }
31687
31903
  }
31688
31904
  },
@@ -31710,6 +31926,15 @@ export const introspectionData = [
31710
31926
  }
31711
31927
  }
31712
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
+ },
31713
31938
  "PromptRegistrationOptions": {
31714
31939
  "description": "",
31715
31940
  "properties": {
@@ -31998,8 +32223,51 @@ export const introspectionData = [
31998
32223
  "shortcut": "features.assistantsManager",
31999
32224
  "className": "AssistantsManager",
32000
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
+ },
32001
32269
  "discover": {
32002
- "description": "Discovers assistants by listing subdirectories in ~/.luca/assistants/ and cwd/assistants/. Each subdirectory containing a CORE.md is an assistant.",
32270
+ "description": "",
32003
32271
  "parameters": {},
32004
32272
  "required": [],
32005
32273
  "returns": "Promise<this>"
@@ -32242,6 +32510,47 @@ export const introspectionData = [
32242
32510
  ],
32243
32511
  "returns": "this"
32244
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
+ },
32245
32554
  "estimateTokens": {
32246
32555
  "description": "Estimate the input token count for the current messages array using the js-tiktoken tokenizer. Updates state.",
32247
32556
  "parameters": {},
@@ -32420,48 +32729,48 @@ export const introspectionData = [
32420
32729
  "description": "Event emitted by Conversation",
32421
32730
  "arguments": {}
32422
32731
  },
32423
- "rawEvent": {
32424
- "name": "rawEvent",
32732
+ "chunk": {
32733
+ "name": "chunk",
32425
32734
  "description": "Event emitted by Conversation",
32426
32735
  "arguments": {}
32427
32736
  },
32428
- "mcpEvent": {
32429
- "name": "mcpEvent",
32737
+ "preview": {
32738
+ "name": "preview",
32430
32739
  "description": "Event emitted by Conversation",
32431
32740
  "arguments": {}
32432
32741
  },
32433
- "chunk": {
32434
- "name": "chunk",
32742
+ "turnEnd": {
32743
+ "name": "turnEnd",
32435
32744
  "description": "Event emitted by Conversation",
32436
32745
  "arguments": {}
32437
32746
  },
32438
- "preview": {
32439
- "name": "preview",
32747
+ "response": {
32748
+ "name": "response",
32440
32749
  "description": "Event emitted by Conversation",
32441
32750
  "arguments": {}
32442
32751
  },
32443
- "responseCompleted": {
32444
- "name": "responseCompleted",
32752
+ "rawEvent": {
32753
+ "name": "rawEvent",
32445
32754
  "description": "Event emitted by Conversation",
32446
32755
  "arguments": {}
32447
32756
  },
32448
- "toolCallsStart": {
32449
- "name": "toolCallsStart",
32757
+ "mcpEvent": {
32758
+ "name": "mcpEvent",
32450
32759
  "description": "Event emitted by Conversation",
32451
32760
  "arguments": {}
32452
32761
  },
32453
- "toolCallsEnd": {
32454
- "name": "toolCallsEnd",
32762
+ "responseCompleted": {
32763
+ "name": "responseCompleted",
32455
32764
  "description": "Event emitted by Conversation",
32456
32765
  "arguments": {}
32457
32766
  },
32458
- "turnEnd": {
32459
- "name": "turnEnd",
32767
+ "toolCallsStart": {
32768
+ "name": "toolCallsStart",
32460
32769
  "description": "Event emitted by Conversation",
32461
32770
  "arguments": {}
32462
32771
  },
32463
- "response": {
32464
- "name": "response",
32772
+ "toolCallsEnd": {
32773
+ "name": "toolCallsEnd",
32465
32774
  "description": "Event emitted by Conversation",
32466
32775
  "arguments": {}
32467
32776
  }
@@ -32559,7 +32868,7 @@ export const introspectionData = [
32559
32868
  ],
32560
32869
  "returns": "EndpointInfo | undefined"
32561
32870
  },
32562
- "toTools": {
32871
+ "toOpenAITools": {
32563
32872
  "description": "Convert all endpoints into OpenAI-compatible tool definitions.",
32564
32873
  "parameters": {
32565
32874
  "filter": {
@@ -32653,7 +32962,7 @@ export const introspectionData = [
32653
32962
  "examples": [
32654
32963
  {
32655
32964
  "language": "ts",
32656
- "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')"
32657
32966
  }
32658
32967
  ],
32659
32968
  "types": {
@@ -33582,7 +33891,7 @@ export const introspectionData = [
33582
33891
  "description": "",
33583
33892
  "parameters": {
33584
33893
  "assistant": {
33585
- "type": "Assistant",
33894
+ "type": "Feature",
33586
33895
  "description": "Parameter assistant"
33587
33896
  }
33588
33897
  },
@@ -33717,6 +34026,24 @@ export const introspectionData = [
33717
34026
  "{ skillName, question }"
33718
34027
  ],
33719
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[]>"
33720
34047
  }
33721
34048
  },
33722
34049
  "getters": {
@@ -34152,6 +34479,10 @@ export const introspectionData = [
34152
34479
  "description": "Parsed YAML frontmatter from CORE.md, or empty object if none.",
34153
34480
  "returns": "Record<string, any>"
34154
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
+ },
34155
34486
  "paths": {
34156
34487
  "description": "Provides a helper for creating paths off of the assistant's base folder",
34157
34488
  "returns": "any"
@@ -34730,6 +35061,77 @@ export const introspectionData = [
34730
35061
  }
34731
35062
  ]
34732
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
+ },
34733
35135
  "cleanupMcpTempFiles": {
34734
35136
  "description": "Clean up any temp MCP config files created during sessions.",
34735
35137
  "parameters": {},
@@ -36922,7 +37324,7 @@ export const containerIntrospectionData = [
36922
37324
  "description": "The id of the feature to create."
36923
37325
  },
36924
37326
  "options": {
36925
- "type": "ConstructorParameters<Features[T]>[0]",
37327
+ "type": "FeatureInputOptions<Features>[T] | Record<string, unknown>",
36926
37328
  "description": "The options to pass to the feature constructor."
36927
37329
  }
36928
37330
  },
@@ -36931,6 +37333,52 @@ export const containerIntrospectionData = [
36931
37333
  ],
36932
37334
  "returns": "InstanceType<Features[T]>"
36933
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
+ },
36934
37382
  "start": {
36935
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.",
36936
37384
  "parameters": {},
@@ -37236,7 +37684,7 @@ export const containerIntrospectionData = [
37236
37684
  },
37237
37685
  "urlUtils": {
37238
37686
  "description": "Returns URL utility functions for parsing URIs.",
37239
- "returns": "{ parse: (uri: string) => url.URL | null }"
37687
+ "returns": "{ parse: (uri: string) => url.UrlWithStringQuery }"
37240
37688
  },
37241
37689
  "paths": {
37242
37690
  "description": "Returns path utility functions scoped to the current working directory (join, resolve, relative, dirname, parse).",