luca 2.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. package/.github/workflows/release.yaml +170 -0
  2. package/AGENTS.md +99 -0
  3. package/CLAUDE.md +123 -0
  4. package/CNAME +1 -0
  5. package/README.md +275 -9
  6. package/RUNME.md +56 -0
  7. package/assistants/codingAssistant/ABOUT.md +5 -0
  8. package/assistants/codingAssistant/CORE.md +33 -0
  9. package/assistants/codingAssistant/hooks.ts +21 -0
  10. package/assistants/codingAssistant/tools.ts +12 -0
  11. package/assistants/inkbot/ABOUT.md +16 -0
  12. package/assistants/inkbot/CORE.md +330 -0
  13. package/assistants/inkbot/hooks.ts +6 -0
  14. package/assistants/inkbot/tools.ts +53 -0
  15. package/assistants/researcher/ABOUT.md +5 -0
  16. package/assistants/researcher/CORE.md +46 -0
  17. package/assistants/researcher/hooks.ts +16 -0
  18. package/assistants/researcher/tools.ts +237 -0
  19. package/bun.lock +2667 -0
  20. package/bunfig.toml +3 -0
  21. package/commands/audit-docs.ts +740 -0
  22. package/commands/build-bootstrap.ts +117 -0
  23. package/commands/build-python-bridge.ts +42 -0
  24. package/commands/build-scaffolds.ts +175 -0
  25. package/commands/bundle-consumer-project.ts +521 -0
  26. package/commands/generate-api-docs.ts +114 -0
  27. package/commands/inkbot.ts +874 -0
  28. package/commands/release.ts +80 -0
  29. package/commands/try-all-challenges.ts +543 -0
  30. package/commands/try-challenge.ts +100 -0
  31. package/dist/agi/container.server.d.ts +63 -0
  32. package/dist/agi/container.server.d.ts.map +1 -0
  33. package/dist/agi/endpoints/ask.d.ts +20 -0
  34. package/dist/agi/endpoints/ask.d.ts.map +1 -0
  35. package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
  36. package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
  37. package/dist/agi/endpoints/conversations.d.ts +18 -0
  38. package/dist/agi/endpoints/conversations.d.ts.map +1 -0
  39. package/dist/agi/endpoints/experts.d.ts +8 -0
  40. package/dist/agi/endpoints/experts.d.ts.map +1 -0
  41. package/dist/agi/feature.d.ts +9 -0
  42. package/dist/agi/feature.d.ts.map +1 -0
  43. package/dist/agi/features/assistant.d.ts +509 -0
  44. package/dist/agi/features/assistant.d.ts.map +1 -0
  45. package/dist/agi/features/assistants-manager.d.ts +236 -0
  46. package/dist/agi/features/assistants-manager.d.ts.map +1 -0
  47. package/dist/agi/features/autonomous-assistant.d.ts +281 -0
  48. package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
  49. package/dist/agi/features/browser-use.d.ts +479 -0
  50. package/dist/agi/features/browser-use.d.ts.map +1 -0
  51. package/dist/agi/features/claude-code.d.ts +824 -0
  52. package/dist/agi/features/claude-code.d.ts.map +1 -0
  53. package/dist/agi/features/conversation-history.d.ts +245 -0
  54. package/dist/agi/features/conversation-history.d.ts.map +1 -0
  55. package/dist/agi/features/conversation.d.ts +464 -0
  56. package/dist/agi/features/conversation.d.ts.map +1 -0
  57. package/dist/agi/features/docs-reader.d.ts +72 -0
  58. package/dist/agi/features/docs-reader.d.ts.map +1 -0
  59. package/dist/agi/features/file-tools.d.ts +110 -0
  60. package/dist/agi/features/file-tools.d.ts.map +1 -0
  61. package/dist/agi/features/luca-coder.d.ts +323 -0
  62. package/dist/agi/features/luca-coder.d.ts.map +1 -0
  63. package/dist/agi/features/openai-codex.d.ts +381 -0
  64. package/dist/agi/features/openai-codex.d.ts.map +1 -0
  65. package/dist/agi/features/openapi.d.ts +200 -0
  66. package/dist/agi/features/openapi.d.ts.map +1 -0
  67. package/dist/agi/features/skills-library.d.ts +167 -0
  68. package/dist/agi/features/skills-library.d.ts.map +1 -0
  69. package/dist/agi/index.d.ts +5 -0
  70. package/dist/agi/index.d.ts.map +1 -0
  71. package/dist/agi/lib/interceptor-chain.d.ts +44 -0
  72. package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
  73. package/dist/agi/lib/token-counter.d.ts +13 -0
  74. package/dist/agi/lib/token-counter.d.ts.map +1 -0
  75. package/dist/bootstrap/generated.d.ts +5 -0
  76. package/dist/bootstrap/generated.d.ts.map +1 -0
  77. package/dist/browser.d.ts +12 -0
  78. package/dist/browser.d.ts.map +1 -0
  79. package/dist/bus.d.ts +29 -0
  80. package/dist/bus.d.ts.map +1 -0
  81. package/dist/cli/build-info.d.ts +4 -0
  82. package/dist/cli/build-info.d.ts.map +1 -0
  83. package/dist/cli/cli.d.ts +3 -12
  84. package/dist/cli/cli.d.ts.map +1 -0
  85. package/dist/client.d.ts +60 -0
  86. package/dist/client.d.ts.map +1 -0
  87. package/dist/clients/civitai/index.d.ts +472 -0
  88. package/dist/clients/civitai/index.d.ts.map +1 -0
  89. package/dist/clients/client-template.d.ts +30 -0
  90. package/dist/clients/client-template.d.ts.map +1 -0
  91. package/dist/clients/comfyui/index.d.ts +281 -0
  92. package/dist/clients/comfyui/index.d.ts.map +1 -0
  93. package/dist/clients/elevenlabs/index.d.ts +197 -0
  94. package/dist/clients/elevenlabs/index.d.ts.map +1 -0
  95. package/dist/clients/graph.d.ts +64 -0
  96. package/dist/clients/graph.d.ts.map +1 -0
  97. package/dist/clients/openai/index.d.ts +247 -0
  98. package/dist/clients/openai/index.d.ts.map +1 -0
  99. package/dist/clients/rest.d.ts +92 -0
  100. package/dist/clients/rest.d.ts.map +1 -0
  101. package/dist/clients/supabase/index.d.ts +176 -0
  102. package/dist/clients/supabase/index.d.ts.map +1 -0
  103. package/dist/clients/websocket.d.ts +127 -0
  104. package/dist/clients/websocket.d.ts.map +1 -0
  105. package/dist/command.d.ts +163 -0
  106. package/dist/command.d.ts.map +1 -0
  107. package/dist/commands/bootstrap.d.ts +20 -0
  108. package/dist/commands/bootstrap.d.ts.map +1 -0
  109. package/dist/commands/chat.d.ts +37 -0
  110. package/dist/commands/chat.d.ts.map +1 -0
  111. package/dist/commands/code.d.ts +28 -0
  112. package/dist/commands/code.d.ts.map +1 -0
  113. package/dist/commands/console.d.ts +22 -0
  114. package/dist/commands/console.d.ts.map +1 -0
  115. package/dist/commands/describe.d.ts +50 -0
  116. package/dist/commands/describe.d.ts.map +1 -0
  117. package/dist/commands/eval.d.ts +23 -0
  118. package/dist/commands/eval.d.ts.map +1 -0
  119. package/dist/commands/help.d.ts +25 -0
  120. package/dist/commands/help.d.ts.map +1 -0
  121. package/dist/commands/index.d.ts +18 -0
  122. package/dist/commands/index.d.ts.map +1 -0
  123. package/dist/commands/introspect.d.ts +24 -0
  124. package/dist/commands/introspect.d.ts.map +1 -0
  125. package/dist/commands/mcp.d.ts +35 -0
  126. package/dist/commands/mcp.d.ts.map +1 -0
  127. package/dist/commands/prompt.d.ts +38 -0
  128. package/dist/commands/prompt.d.ts.map +1 -0
  129. package/dist/commands/run.d.ts +24 -0
  130. package/dist/commands/run.d.ts.map +1 -0
  131. package/dist/commands/sandbox-mcp.d.ts +34 -0
  132. package/dist/commands/sandbox-mcp.d.ts.map +1 -0
  133. package/dist/commands/save-api-docs.d.ts +21 -0
  134. package/dist/commands/save-api-docs.d.ts.map +1 -0
  135. package/dist/commands/scaffold.d.ts +24 -0
  136. package/dist/commands/scaffold.d.ts.map +1 -0
  137. package/dist/commands/select.d.ts +22 -0
  138. package/dist/commands/select.d.ts.map +1 -0
  139. package/dist/commands/serve.d.ts +29 -0
  140. package/dist/commands/serve.d.ts.map +1 -0
  141. package/dist/container-describer.d.ts +144 -0
  142. package/dist/container-describer.d.ts.map +1 -0
  143. package/dist/container.d.ts +451 -0
  144. package/dist/container.d.ts.map +1 -0
  145. package/dist/endpoint.d.ts +113 -0
  146. package/dist/endpoint.d.ts.map +1 -0
  147. package/dist/feature.d.ts +47 -0
  148. package/dist/feature.d.ts.map +1 -0
  149. package/dist/graft.d.ts +29 -0
  150. package/dist/graft.d.ts.map +1 -0
  151. package/dist/hash-object.d.ts +8 -0
  152. package/dist/hash-object.d.ts.map +1 -0
  153. package/dist/helper.d.ts +209 -0
  154. package/dist/helper.d.ts.map +1 -0
  155. package/dist/introspection/generated.node.d.ts +44623 -0
  156. package/dist/introspection/generated.node.d.ts.map +1 -0
  157. package/dist/introspection/generated.web.d.ts +1412 -0
  158. package/dist/introspection/generated.web.d.ts.map +1 -0
  159. package/dist/introspection/index.d.ts +156 -0
  160. package/dist/introspection/index.d.ts.map +1 -0
  161. package/dist/introspection/scan.d.ts +147 -0
  162. package/dist/introspection/scan.d.ts.map +1 -0
  163. package/dist/node/container.d.ts +256 -0
  164. package/dist/node/container.d.ts.map +1 -0
  165. package/dist/node/feature.d.ts +9 -0
  166. package/dist/node/feature.d.ts.map +1 -0
  167. package/dist/node/features/container-link.d.ts +213 -0
  168. package/dist/node/features/container-link.d.ts.map +1 -0
  169. package/dist/node/features/content-db.d.ts +354 -0
  170. package/dist/node/features/content-db.d.ts.map +1 -0
  171. package/dist/node/features/disk-cache.d.ts +236 -0
  172. package/dist/node/features/disk-cache.d.ts.map +1 -0
  173. package/dist/node/features/dns.d.ts +511 -0
  174. package/dist/node/features/dns.d.ts.map +1 -0
  175. package/dist/node/features/docker.d.ts +485 -0
  176. package/dist/node/features/docker.d.ts.map +1 -0
  177. package/dist/node/features/downloader.d.ts +73 -0
  178. package/dist/node/features/downloader.d.ts.map +1 -0
  179. package/dist/node/features/figlet-fonts.d.ts +4 -0
  180. package/dist/node/features/figlet-fonts.d.ts.map +1 -0
  181. package/dist/node/features/file-manager.d.ts +177 -0
  182. package/dist/node/features/file-manager.d.ts.map +1 -0
  183. package/dist/node/features/fs.d.ts +635 -0
  184. package/dist/node/features/fs.d.ts.map +1 -0
  185. package/dist/node/features/git.d.ts +329 -0
  186. package/dist/node/features/git.d.ts.map +1 -0
  187. package/dist/node/features/google-auth.d.ts +200 -0
  188. package/dist/node/features/google-auth.d.ts.map +1 -0
  189. package/dist/node/features/google-calendar.d.ts +194 -0
  190. package/dist/node/features/google-calendar.d.ts.map +1 -0
  191. package/dist/node/features/google-docs.d.ts +138 -0
  192. package/dist/node/features/google-docs.d.ts.map +1 -0
  193. package/dist/node/features/google-drive.d.ts +202 -0
  194. package/dist/node/features/google-drive.d.ts.map +1 -0
  195. package/dist/node/features/google-mail.d.ts +221 -0
  196. package/dist/node/features/google-mail.d.ts.map +1 -0
  197. package/dist/node/features/google-sheets.d.ts +157 -0
  198. package/dist/node/features/google-sheets.d.ts.map +1 -0
  199. package/dist/node/features/grep.d.ts +207 -0
  200. package/dist/node/features/grep.d.ts.map +1 -0
  201. package/dist/node/features/helpers.d.ts +236 -0
  202. package/dist/node/features/helpers.d.ts.map +1 -0
  203. package/dist/node/features/ink.d.ts +332 -0
  204. package/dist/node/features/ink.d.ts.map +1 -0
  205. package/dist/node/features/ipc-socket.d.ts +298 -0
  206. package/dist/node/features/ipc-socket.d.ts.map +1 -0
  207. package/dist/node/features/json-tree.d.ts +140 -0
  208. package/dist/node/features/json-tree.d.ts.map +1 -0
  209. package/dist/node/features/networking.d.ts +373 -0
  210. package/dist/node/features/networking.d.ts.map +1 -0
  211. package/dist/node/features/nlp.d.ts +125 -0
  212. package/dist/node/features/nlp.d.ts.map +1 -0
  213. package/dist/node/features/opener.d.ts +93 -0
  214. package/dist/node/features/opener.d.ts.map +1 -0
  215. package/dist/node/features/os.d.ts +168 -0
  216. package/dist/node/features/os.d.ts.map +1 -0
  217. package/dist/node/features/package-finder.d.ts +419 -0
  218. package/dist/node/features/package-finder.d.ts.map +1 -0
  219. package/dist/node/features/postgres.d.ts +173 -0
  220. package/dist/node/features/postgres.d.ts.map +1 -0
  221. package/dist/node/features/proc.d.ts +285 -0
  222. package/dist/node/features/proc.d.ts.map +1 -0
  223. package/dist/node/features/process-manager.d.ts +427 -0
  224. package/dist/node/features/process-manager.d.ts.map +1 -0
  225. package/dist/node/features/python.d.ts +477 -0
  226. package/dist/node/features/python.d.ts.map +1 -0
  227. package/dist/node/features/redis.d.ts +247 -0
  228. package/dist/node/features/redis.d.ts.map +1 -0
  229. package/dist/node/features/repl.d.ts +84 -0
  230. package/dist/node/features/repl.d.ts.map +1 -0
  231. package/dist/node/features/runpod.d.ts +527 -0
  232. package/dist/node/features/runpod.d.ts.map +1 -0
  233. package/dist/node/features/secure-shell.d.ts +145 -0
  234. package/dist/node/features/secure-shell.d.ts.map +1 -0
  235. package/dist/node/features/semantic-search.d.ts +207 -0
  236. package/dist/node/features/semantic-search.d.ts.map +1 -0
  237. package/dist/node/features/sqlite.d.ts +180 -0
  238. package/dist/node/features/sqlite.d.ts.map +1 -0
  239. package/dist/node/features/telegram.d.ts +173 -0
  240. package/dist/node/features/telegram.d.ts.map +1 -0
  241. package/dist/node/features/transpiler.d.ts +51 -0
  242. package/dist/node/features/transpiler.d.ts.map +1 -0
  243. package/dist/node/features/tts.d.ts +108 -0
  244. package/dist/node/features/tts.d.ts.map +1 -0
  245. package/dist/node/features/ui.d.ts +562 -0
  246. package/dist/node/features/ui.d.ts.map +1 -0
  247. package/dist/node/features/vault.d.ts +90 -0
  248. package/dist/node/features/vault.d.ts.map +1 -0
  249. package/dist/node/features/vm.d.ts +285 -0
  250. package/dist/node/features/vm.d.ts.map +1 -0
  251. package/dist/node/features/yaml-tree.d.ts +118 -0
  252. package/dist/node/features/yaml-tree.d.ts.map +1 -0
  253. package/dist/node/features/yaml.d.ts +127 -0
  254. package/dist/node/features/yaml.d.ts.map +1 -0
  255. package/dist/node.d.ts +67 -0
  256. package/dist/node.d.ts.map +1 -0
  257. package/dist/python/generated.d.ts +2 -0
  258. package/dist/python/generated.d.ts.map +1 -0
  259. package/dist/react/index.d.ts +36 -0
  260. package/dist/react/index.d.ts.map +1 -0
  261. package/dist/registry.d.ts +97 -0
  262. package/dist/registry.d.ts.map +1 -0
  263. package/dist/scaffolds/generated.d.ts +13 -0
  264. package/dist/scaffolds/generated.d.ts.map +1 -0
  265. package/dist/scaffolds/template.d.ts +11 -0
  266. package/dist/scaffolds/template.d.ts.map +1 -0
  267. package/dist/schemas/base.d.ts +254 -0
  268. package/dist/schemas/base.d.ts.map +1 -0
  269. package/dist/selector.d.ts +130 -0
  270. package/dist/selector.d.ts.map +1 -0
  271. package/dist/server.d.ts +89 -0
  272. package/dist/server.d.ts.map +1 -0
  273. package/dist/servers/express.d.ts +104 -0
  274. package/dist/servers/express.d.ts.map +1 -0
  275. package/dist/servers/mcp.d.ts +201 -0
  276. package/dist/servers/mcp.d.ts.map +1 -0
  277. package/dist/servers/socket.d.ts +121 -0
  278. package/dist/servers/socket.d.ts.map +1 -0
  279. package/dist/state.d.ts +24 -0
  280. package/dist/state.d.ts.map +1 -0
  281. package/dist/web/clients/socket.d.ts +37 -0
  282. package/dist/web/clients/socket.d.ts.map +1 -0
  283. package/dist/web/container.d.ts +55 -0
  284. package/dist/web/container.d.ts.map +1 -0
  285. package/dist/web/extension.d.ts +4 -0
  286. package/dist/web/extension.d.ts.map +1 -0
  287. package/dist/web/feature.d.ts +8 -0
  288. package/dist/web/feature.d.ts.map +1 -0
  289. package/dist/web/features/asset-loader.d.ts +35 -0
  290. package/dist/web/features/asset-loader.d.ts.map +1 -0
  291. package/dist/web/features/container-link.d.ts +167 -0
  292. package/dist/web/features/container-link.d.ts.map +1 -0
  293. package/dist/web/features/esbuild.d.ts +51 -0
  294. package/dist/web/features/esbuild.d.ts.map +1 -0
  295. package/dist/web/features/helpers.d.ts +140 -0
  296. package/dist/web/features/helpers.d.ts.map +1 -0
  297. package/dist/web/features/network.d.ts +69 -0
  298. package/dist/web/features/network.d.ts.map +1 -0
  299. package/dist/web/features/speech.d.ts +71 -0
  300. package/dist/web/features/speech.d.ts.map +1 -0
  301. package/dist/web/features/vault.d.ts +62 -0
  302. package/dist/web/features/vault.d.ts.map +1 -0
  303. package/dist/web/features/vm.d.ts +48 -0
  304. package/dist/web/features/vm.d.ts.map +1 -0
  305. package/dist/web/features/voice-recognition.d.ts +96 -0
  306. package/dist/web/features/voice-recognition.d.ts.map +1 -0
  307. package/dist/web/shims/isomorphic-vm.d.ts +22 -0
  308. package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
  309. package/index.html +1457 -0
  310. package/index.ts +1 -0
  311. package/install.sh +84 -0
  312. package/luca.cli.ts +16 -0
  313. package/luca.console.ts +9 -0
  314. package/main.py +6 -0
  315. package/package.json +219 -58
  316. package/public/index.html +1457 -0
  317. package/public/slides-ai-native.html +902 -0
  318. package/public/slides-intro.html +974 -0
  319. package/pyproject.toml +7 -0
  320. package/scripts/build-web.ts +28 -0
  321. package/scripts/examples/ask-luca-expert.ts +42 -0
  322. package/scripts/examples/assistant-questions.ts +12 -0
  323. package/scripts/examples/excalidraw-expert.ts +75 -0
  324. package/scripts/examples/expert-chat.ts +0 -0
  325. package/scripts/examples/file-manager.ts +14 -0
  326. package/scripts/examples/ideas.ts +12 -0
  327. package/scripts/examples/interactive-chat.ts +20 -0
  328. package/scripts/examples/openai-tool-calls.ts +113 -0
  329. package/scripts/examples/opening-a-web-browser.ts +5 -0
  330. package/scripts/examples/telegram-bot.ts +79 -0
  331. package/scripts/examples/using-assistant-with-mcp.ts +555 -0
  332. package/scripts/examples/using-claude-code.ts +10 -0
  333. package/scripts/examples/using-contentdb.ts +35 -0
  334. package/scripts/examples/using-conversations.ts +35 -0
  335. package/scripts/examples/using-disk-cache.ts +10 -0
  336. package/scripts/examples/using-docker-shell.ts +75 -0
  337. package/scripts/examples/using-elevenlabs.ts +25 -0
  338. package/scripts/examples/using-google-calendar.ts +57 -0
  339. package/scripts/examples/using-google-docs.ts +74 -0
  340. package/scripts/examples/using-google-drive.ts +74 -0
  341. package/scripts/examples/using-google-sheets.ts +89 -0
  342. package/scripts/examples/using-nlp.ts +55 -0
  343. package/scripts/examples/using-ollama.ts +11 -0
  344. package/scripts/examples/using-postgres.ts +55 -0
  345. package/scripts/examples/using-runpod.ts +32 -0
  346. package/scripts/examples/using-tts.ts +40 -0
  347. package/scripts/scaffold.ts +391 -0
  348. package/scripts/scratch.ts +15 -0
  349. package/scripts/stamp-build.sh +12 -0
  350. package/scripts/test-assistant-hooks.ts +13 -0
  351. package/scripts/test-docs-reader.ts +10 -0
  352. package/scripts/test-linux-binary.sh +80 -0
  353. package/scripts/update-introspection-data.ts +58 -0
  354. package/src/agi/README.md +14 -0
  355. package/src/agi/container.server.ts +156 -0
  356. package/src/agi/feature.ts +13 -0
  357. package/src/agi/features/agent-memory.ts +694 -0
  358. package/src/agi/features/assistant.ts +1653 -0
  359. package/src/agi/features/assistants-manager.ts +534 -0
  360. package/src/agi/features/autonomous-assistant.ts +431 -0
  361. package/src/agi/features/browser-use.ts +672 -0
  362. package/src/agi/features/claude-code.ts +1584 -0
  363. package/src/agi/features/coding-tools.ts +175 -0
  364. package/src/agi/features/conversation-history.ts +672 -0
  365. package/src/agi/features/conversation.ts +1494 -0
  366. package/src/agi/features/docs-reader.ts +167 -0
  367. package/src/agi/features/file-tools.ts +340 -0
  368. package/src/agi/features/luca-coder.ts +641 -0
  369. package/src/agi/features/mcp-bridge.ts +532 -0
  370. package/src/agi/features/openai-codex.ts +651 -0
  371. package/src/agi/features/openapi.ts +445 -0
  372. package/src/agi/features/skills-library.ts +557 -0
  373. package/src/agi/index.ts +6 -0
  374. package/src/agi/lib/interceptor-chain.ts +89 -0
  375. package/src/agi/lib/token-counter.ts +202 -0
  376. package/src/bootstrap/generated.ts +9791 -0
  377. package/src/browser.ts +25 -0
  378. package/src/bus.ts +122 -0
  379. package/src/cli/build-info.ts +4 -0
  380. package/src/cli/cli.ts +355 -0
  381. package/src/client.ts +170 -0
  382. package/src/clients/civitai/index.ts +537 -0
  383. package/src/clients/client-template.ts +41 -0
  384. package/src/clients/comfyui/index.ts +604 -0
  385. package/src/clients/elevenlabs/index.ts +317 -0
  386. package/src/clients/graph.ts +87 -0
  387. package/src/clients/openai/index.ts +456 -0
  388. package/src/clients/rest.ts +207 -0
  389. package/src/clients/supabase/index.ts +357 -0
  390. package/src/clients/voicebox/index.ts +300 -0
  391. package/src/clients/websocket.ts +251 -0
  392. package/src/command.ts +506 -0
  393. package/src/commands/bootstrap.ts +244 -0
  394. package/src/commands/chat.ts +309 -0
  395. package/src/commands/code.ts +371 -0
  396. package/src/commands/console.ts +189 -0
  397. package/src/commands/describe.ts +243 -0
  398. package/src/commands/eval.ts +67 -0
  399. package/src/commands/help.ts +240 -0
  400. package/src/commands/index.ts +19 -0
  401. package/src/commands/introspect.ts +218 -0
  402. package/src/commands/mcp.ts +64 -0
  403. package/src/commands/prompt.ts +1014 -0
  404. package/src/commands/run.ts +278 -0
  405. package/src/commands/sandbox-mcp.ts +343 -0
  406. package/src/commands/save-api-docs.ts +51 -0
  407. package/src/commands/scaffold.ts +225 -0
  408. package/src/commands/select.ts +99 -0
  409. package/src/commands/serve.ts +208 -0
  410. package/src/container-describer.ts +1091 -0
  411. package/src/container.ts +1199 -0
  412. package/src/endpoint.ts +365 -0
  413. package/src/entity.ts +173 -0
  414. package/src/feature.ts +118 -0
  415. package/src/graft.ts +181 -0
  416. package/src/hash-object.ts +97 -0
  417. package/src/helper.ts +849 -0
  418. package/src/introspection/generated.agi.ts +41200 -0
  419. package/src/introspection/generated.node.ts +28773 -0
  420. package/src/introspection/generated.web.ts +2272 -0
  421. package/src/introspection/index.ts +296 -0
  422. package/src/introspection/scan.ts +1136 -0
  423. package/src/node/container.ts +409 -0
  424. package/src/node/feature.ts +13 -0
  425. package/src/node/features/container-link.ts +559 -0
  426. package/src/node/features/content-db.ts +849 -0
  427. package/src/node/features/disk-cache.ts +388 -0
  428. package/src/node/features/display-result.ts +57 -0
  429. package/src/node/features/dns.ts +669 -0
  430. package/src/node/features/docker.ts +921 -0
  431. package/src/node/features/downloader.ts +79 -0
  432. package/src/node/features/figlet-fonts.ts +600 -0
  433. package/src/node/features/file-manager.ts +535 -0
  434. package/src/node/features/fs.ts +1050 -0
  435. package/src/node/features/git.ts +592 -0
  436. package/src/node/features/google-auth.ts +504 -0
  437. package/src/node/features/google-calendar.ts +306 -0
  438. package/src/node/features/google-docs.ts +412 -0
  439. package/src/node/features/google-drive.ts +346 -0
  440. package/src/node/features/google-mail.ts +540 -0
  441. package/src/node/features/google-sheets.ts +286 -0
  442. package/src/node/features/grep.ts +427 -0
  443. package/src/node/features/helpers.ts +762 -0
  444. package/src/node/features/ink.ts +490 -0
  445. package/src/node/features/ipc-socket.ts +649 -0
  446. package/src/node/features/json-tree.ts +170 -0
  447. package/src/node/features/networking.ts +961 -0
  448. package/src/node/features/nlp.ts +212 -0
  449. package/src/node/features/opener.ts +180 -0
  450. package/src/node/features/os.ts +403 -0
  451. package/src/node/features/package-finder.ts +540 -0
  452. package/src/node/features/postgres.ts +289 -0
  453. package/src/node/features/proc.ts +503 -0
  454. package/src/node/features/process-manager.ts +844 -0
  455. package/src/node/features/python.ts +912 -0
  456. package/src/node/features/redis.ts +446 -0
  457. package/src/node/features/repl.ts +212 -0
  458. package/src/node/features/runpod.ts +811 -0
  459. package/src/node/features/secure-shell.ts +261 -0
  460. package/src/node/features/semantic-search.ts +935 -0
  461. package/src/node/features/sqlite.ts +289 -0
  462. package/src/node/features/telegram.ts +343 -0
  463. package/src/node/features/transpiler.ts +160 -0
  464. package/src/node/features/tts.ts +185 -0
  465. package/src/node/features/ui.ts +791 -0
  466. package/src/node/features/vault.ts +153 -0
  467. package/src/node/features/vm.ts +462 -0
  468. package/src/node/features/yaml-tree.ts +148 -0
  469. package/src/node/features/yaml.ts +133 -0
  470. package/src/node.ts +76 -0
  471. package/src/python/bridge.py +220 -0
  472. package/src/python/generated.ts +226 -0
  473. package/src/react/index.ts +175 -0
  474. package/src/registry.ts +210 -0
  475. package/src/scaffolds/generated.ts +1814 -0
  476. package/src/scaffolds/template.ts +46 -0
  477. package/src/schemas/base.ts +296 -0
  478. package/src/selector.ts +352 -0
  479. package/src/server.ts +229 -0
  480. package/src/servers/express.ts +283 -0
  481. package/src/servers/mcp.ts +802 -0
  482. package/src/servers/socket.ts +258 -0
  483. package/src/state.ts +101 -0
  484. package/src/web/clients/socket.ts +99 -0
  485. package/src/web/container.ts +75 -0
  486. package/src/web/extension.ts +30 -0
  487. package/src/web/feature.ts +12 -0
  488. package/src/web/features/asset-loader.ts +72 -0
  489. package/src/web/features/container-link.ts +382 -0
  490. package/src/web/features/esbuild.ts +93 -0
  491. package/src/web/features/helpers.ts +291 -0
  492. package/src/web/features/network.ts +85 -0
  493. package/src/web/features/speech.ts +104 -0
  494. package/src/web/features/vault.ts +207 -0
  495. package/src/web/features/vm.ts +85 -0
  496. package/src/web/features/voice-recognition.ts +161 -0
  497. package/src/web/shims/isomorphic-vm.ts +149 -0
  498. package/tsconfig.build.json +12 -0
  499. package/tsconfig.json +58 -0
  500. package/uv.lock +8 -0
  501. package/LICENSE +0 -21
  502. package/dist/cli/cli.js +0 -48
  503. package/dist/cli/common.d.ts +0 -2
  504. package/dist/cli/common.js +0 -6
  505. package/dist/cli/index.d.ts +0 -2
  506. package/dist/cli/index.js +0 -5
  507. package/dist/cli/run.d.ts +0 -1
  508. package/dist/cli/run.js +0 -38
  509. package/dist/core/index.d.ts +0 -4
  510. package/dist/core/index.js +0 -32
  511. package/dist/core/read.d.ts +0 -2
  512. package/dist/core/read.js +0 -29
  513. package/dist/core/request.d.ts +0 -1
  514. package/dist/core/request.js +0 -2
  515. package/dist/core/write.d.ts +0 -2
  516. package/dist/core/write.js +0 -21
  517. package/dist/index.d.ts +0 -1
  518. package/dist/index.js +0 -5
  519. package/dist/utils/common.d.ts +0 -9
  520. package/dist/utils/common.js +0 -57
  521. package/dist/utils/consts.d.ts +0 -3
  522. package/dist/utils/consts.js +0 -11
  523. package/dist/utils/dict.d.ts +0 -1
  524. package/dist/utils/dict.js +0 -7
  525. package/dist/utils/index.d.ts +0 -5
  526. package/dist/utils/index.js +0 -21
  527. package/dist/utils/log.d.ts +0 -1
  528. package/dist/utils/log.js +0 -5
  529. package/dist/utils/types.d.ts +0 -1
  530. package/dist/utils/types.js +0 -2
  531. package/dist/utils/utils.test.d.ts +0 -1
  532. package/dist/utils/utils.test.js +0 -7
@@ -0,0 +1,537 @@
1
+ import {
2
+ Client,
3
+ type ClientOptions,
4
+ } from "luca/client";
5
+ import { RestClient } from "../rest";
6
+ import { type ContainerContext } from "luca/container";
7
+ import { isEmpty, maxBy, omitBy } from "lodash-es";
8
+ import { NodeContainer } from "luca/node/container";
9
+ import { z } from 'zod'
10
+ import { ClientStateSchema } from 'luca/schemas/base.js'
11
+
12
+ declare module "luca/client" {
13
+ interface AvailableClients {
14
+ civitai: typeof CivitaiClient;
15
+ }
16
+ }
17
+
18
+ export const CivitaiClientStateSchema = ClientStateSchema.extend({
19
+ checkpoints: z.array(z.string()).default([]).describe('List of downloaded checkpoint file IDs'),
20
+ })
21
+
22
+ export type CivitaiClientState = z.infer<typeof CivitaiClientStateSchema>
23
+
24
+ /**
25
+ * Civitai client — search, browse, and download AI models from civitai.com.
26
+ *
27
+ * Wraps the Civitai REST API to search for checkpoints, LoRA models, embeddings,
28
+ * and other model types. Supports downloading models directly to disk with
29
+ * metadata extraction.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const civitai = container.client('civitai')
34
+ * const results = await civitai.search({ query: 'anime', type: 'Checkpoint' })
35
+ * console.log(results.items.map(m => m.name))
36
+ * ```
37
+ */
38
+ export class CivitaiClient<T extends CivitaiClientState> extends RestClient<T> {
39
+ static override stateSchema = CivitaiClientStateSchema;
40
+
41
+ static { Client.register(this, 'civitai') }
42
+
43
+ constructor(options: ClientOptions, context: ContainerContext) {
44
+ options = {
45
+ ...options,
46
+ baseURL: "https://civitai.com",
47
+ };
48
+
49
+ super(options, context);
50
+ }
51
+
52
+ types = [
53
+ "Checkpoint",
54
+ "TextualInversion",
55
+ "Hypernetwork",
56
+ "AestheticGradient",
57
+ "LORA",
58
+ "Controlnet",
59
+ "Poses",
60
+ ];
61
+
62
+ /**
63
+ * Search models by tag.
64
+ *
65
+ * @param tag - The tag to search for
66
+ * @param options - Additional search filters
67
+ * @returns Search results with items array
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const results = await civitai.searchByTag('anime')
72
+ * ```
73
+ */
74
+ async searchByTag(
75
+ tag: string,
76
+ { limit = 100, page = 1, query, type, username }: any = {}
77
+ ): Promise<{ items: ModelInfo[] }> {
78
+ return this.search({ tag, limit, page, type, username, query });
79
+ }
80
+
81
+ /**
82
+ * Search models by creator username.
83
+ *
84
+ * @param username - The creator's username
85
+ * @param options - Additional search filters
86
+ * @returns Search results with items array
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * const results = await civitai.searchByUsername('stabilityai')
91
+ * ```
92
+ */
93
+ async searchByUsername(
94
+ username: string,
95
+ { limit = 100, page = 1, type, query }: any = {}
96
+ ): Promise<{ items: ModelInfo[] }> {
97
+ return this.search({ username, limit, page, type, query });
98
+ }
99
+
100
+ /**
101
+ * Search for models with full filter support.
102
+ *
103
+ * @param options - Search parameters (query, tag, username, type, sorting, pagination)
104
+ * @returns Search results with items array
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * const results = await civitai.search({ query: 'portrait', type: 'LORA', newest: true })
109
+ * ```
110
+ */
111
+ async search({
112
+ limit = 100,
113
+ page = 1,
114
+ query = "",
115
+ newest = false,
116
+ best = true,
117
+ popular = false,
118
+ tag,
119
+ username,
120
+ type,
121
+ }: any = {}): Promise<{ items: ModelInfo[] }> {
122
+ const params = omitBy({ limit, page, query, tag, username }, (v,k) => typeof v === 'undefined');
123
+
124
+ let sort = 'Highest Rated'
125
+
126
+ if (newest) {
127
+ sort = 'Newest'
128
+ } else if (popular) {
129
+ sort = 'Most Downloaded'
130
+ }
131
+
132
+ return this.get("/api/v1/models", {
133
+ ...params,
134
+ sort,
135
+ types: type
136
+ });
137
+ }
138
+
139
+ /**
140
+ * Get full model details by ID.
141
+ *
142
+ * @param modelId - The Civitai model ID
143
+ * @returns Complete model info including versions and files
144
+ *
145
+ * @example
146
+ * ```typescript
147
+ * const model = await civitai.getModel('12345')
148
+ * console.log(model.name, model.type)
149
+ * ```
150
+ */
151
+ async getModel(modelId: string): Promise<ModelInfo> {
152
+ return this.get(`/api/v1/models/${modelId}`);
153
+ }
154
+
155
+ override get container() {
156
+ return this.context.container as NodeContainer;
157
+ }
158
+
159
+ /**
160
+ * Download a checkpoint model to a local folder.
161
+ *
162
+ * Fetches model info, saves metadata as YAML, and optionally downloads the safetensors file.
163
+ *
164
+ * @param modelId - The Civitai model ID
165
+ * @param destinationFolder - Local folder path to download into
166
+ * @param skipDownloadFile - If true, only save metadata without downloading the file
167
+ * @returns Model info with downloadPath
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * const result = await civitai.downloadCheckpoint('12345', '/models/checkpoints')
172
+ * console.log(`Downloaded to: ${result.downloadPath}`)
173
+ * ```
174
+ */
175
+ async downloadCheckpoint(modelId: string, destinationFolder: string, skipDownloadFile = false) {
176
+ const { paths, utils } = this.container;
177
+ const { stringUtils } = utils;
178
+ const downloader = this.container.feature("downloader");
179
+ const yaml = this.container.feature("yaml");
180
+
181
+ const info = await this.getCheckpointInfo(modelId);
182
+ const { downloadUrl, fileName } = info;
183
+
184
+ const destinationPath = paths.resolve(destinationFolder, fileName.replace(/\s/g, "_"))
185
+
186
+ const metaName = info.fileId;
187
+
188
+ await this.container.fs.ensureFolder(paths.resolve("checkpoints"));
189
+ const checkpointMetaPath = paths.resolve("checkpoints", metaName);
190
+ await this.container.fs.writeFileAsync(
191
+ checkpointMetaPath,
192
+ yaml.stringify(info)
193
+ );
194
+
195
+ if (skipDownloadFile) {
196
+ return {
197
+ ...info,
198
+ downloadPath: destinationPath,
199
+ };
200
+ } else {
201
+ const downloadPath = await downloader.download(
202
+ downloadUrl,
203
+ destinationPath
204
+ );
205
+
206
+ return {
207
+ ...info,
208
+ downloadPath,
209
+ };
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Download a textual inversion / embedding model to a local folder.
215
+ *
216
+ * @param modelId - The Civitai model ID
217
+ * @param destinationFolder - Local folder path to download into
218
+ * @param skipDownloadFile - If true, only save metadata without downloading
219
+ * @param modelFileId - Specific version ID to download
220
+ * @returns Model info with downloadPath
221
+ *
222
+ * @example
223
+ * ```typescript
224
+ * const result = await civitai.downloadEmbedding('67890', '/models/embeddings')
225
+ * ```
226
+ */
227
+ async downloadEmbedding(modelId: string, destinationFolder: string,skipDownloadFile = false, modelFileId?: string) {
228
+ const { paths, utils } = this.container;
229
+ const downloader = this.container.feature("downloader");
230
+ const yaml = this.container.feature("yaml");
231
+
232
+ const info = await this.getEmbeddingModelInfo(modelId);
233
+ const { downloadUrl, fileName } = info;
234
+
235
+ const destinationPath = paths.resolve(
236
+ destinationFolder,
237
+ fileName
238
+ );
239
+
240
+ const embeddingPath = paths.resolve(
241
+ "embeddings",
242
+ `${utils.stringUtils.camelCase(
243
+ utils.stringUtils.kebabCase(info.name)
244
+ )}.yml`
245
+ );
246
+
247
+ await this.container.fs.writeFileAsync(embeddingPath, yaml.stringify(info));
248
+
249
+ if (!skipDownloadFile) {
250
+ const downloadPath = await downloader.download(
251
+ downloadUrl,
252
+ destinationPath
253
+ );
254
+ return {
255
+ ...info,
256
+ downloadPath,
257
+ };
258
+ }
259
+
260
+ return {
261
+ ...info,
262
+ downloadPath: destinationPath,
263
+ };
264
+ }
265
+
266
+
267
+ /**
268
+ * Download a LoRA model to a local folder.
269
+ *
270
+ * @param modelId - The Civitai model ID
271
+ * @param fileId - The specific file/version ID to download
272
+ * @param destinationFolder - Local folder path to download into
273
+ * @param skipDownloadFile - If true, only return info without downloading
274
+ * @returns Model info with downloadPath and LoRA tag
275
+ *
276
+ * @example
277
+ * ```typescript
278
+ * const result = await civitai.downloadLoraModel('12345', '67890', '/models/loras')
279
+ * console.log(result.tag) // '<lora:model_name:1>'
280
+ * ```
281
+ */
282
+ async downloadLoraModel(modelId: string, fileId: string | number, destinationFolder: string, skipDownloadFile = false) {
283
+ const { paths } = this.container;
284
+ const downloader = this.container.feature("downloader");
285
+
286
+ const info = await this.getLoraModelInfo(modelId, fileId);
287
+ const { downloadUrl, fileName } = info;
288
+
289
+ const destinationPath = paths.resolve(
290
+ destinationFolder,
291
+ fileName
292
+ );
293
+
294
+ if (!skipDownloadFile) {
295
+ const downloadPath = await downloader.download(
296
+ downloadUrl,
297
+ destinationPath
298
+ );
299
+ return {
300
+ ...info,
301
+ downloadPath,
302
+ };
303
+ }
304
+
305
+ return {
306
+ ...info,
307
+ downloadPath: destinationPath,
308
+ };
309
+ }
310
+
311
+ /**
312
+ * Get metadata for the latest checkpoint version of a model.
313
+ *
314
+ * @param modelId - The Civitai model ID
315
+ * @returns Checkpoint info with download URL, file name, and image URLs
316
+ *
317
+ * @example
318
+ * ```typescript
319
+ * const info = await civitai.getCheckpointInfo('12345')
320
+ * console.log(info.fileName, info.downloadUrl)
321
+ * ```
322
+ */
323
+ async getCheckpointInfo(modelId: string) {
324
+ const { utils } = this.container;
325
+ const model = await this.getModel(modelId);
326
+ const { modelVersions = [] } = model;
327
+ const latest = maxBy(modelVersions, "createdAt")!;
328
+ const primaryFile =
329
+ latest?.files?.find((f) => f.primary)! || latest?.files[0]!;
330
+ const fileId = `${utils.stringUtils.camelCase(
331
+ utils.stringUtils.kebabCase(model.name)
332
+ )}.yml`;
333
+
334
+ if (!primaryFile) {
335
+ console.log(latest);
336
+ throw new Error(`Can not find primary file for ${modelId}`);
337
+ }
338
+
339
+ return {
340
+ modelId: model.id,
341
+ name: model.name,
342
+ fileId,
343
+ fileName: primaryFile.name,
344
+ downloadUrl: primaryFile.downloadUrl,
345
+ imageUrls: latest.images.map((i) => i.url),
346
+ imageInfo: latest.images.map((i) => ({
347
+ url: i.url,
348
+ prompt: i.meta?.prompt || "",
349
+ negativePrompt: i.meta?.negativePrompt || "",
350
+ })),
351
+ };
352
+ }
353
+
354
+ /**
355
+ * Get metadata for a LoRA model including trained words and LoRA tag.
356
+ *
357
+ * @param modelId - The Civitai model ID
358
+ * @param downloadFileId - Specific version ID (defaults to latest)
359
+ * @returns LoRA info with download URL, tag, trained words, and images
360
+ *
361
+ * @example
362
+ * ```typescript
363
+ * const info = await civitai.getLoraModelInfo('12345')
364
+ * console.log(info.tag, info.words)
365
+ * ```
366
+ */
367
+ async getLoraModelInfo(modelId: string, downloadFileId?: string | number) {
368
+ const { utils } = this.container;
369
+
370
+ const model = await this.getModel(modelId);
371
+ const { modelVersions = [] } = model;
372
+ const latest = maxBy(modelVersions, "createdAt")!;
373
+ const primaryFile = downloadFileId ? modelVersions.find(m => String(m.id) === String(downloadFileId))! : latest?.files?.find((f) => f.primary)! || modelVersions[0]!;
374
+ let fileId = `${utils.stringUtils.camelCase(
375
+ utils.stringUtils.kebabCase(model.name)
376
+ )}.yml`.replace(/\W/g, "_");
377
+
378
+ if (downloadFileId) {
379
+ fileId = [downloadFileId, fileId].join("_")
380
+ }
381
+
382
+ // @ts-ignore-next-line
383
+ if (!primaryFile?.downloadUrl) {
384
+ throw new Error(`No primary file found for ${modelId} ${model.name}`);
385
+ }
386
+
387
+ return {
388
+ modelId: model.id,
389
+ name: model.name,
390
+ fileId,
391
+ fileName: primaryFile.name,
392
+ modelVersions,
393
+ // @ts-ignore-next-line
394
+ downloadUrl: primaryFile.downloadUrl,
395
+ tag: `<lora:${primaryFile.name.replace(".safetensors", "")}:1>`,
396
+ words: latest.trainedWords,
397
+ imageUrls: latest.images.map((i) => i.url),
398
+ imageInfo: latest.images.map((i) => ({
399
+ url: i.url,
400
+ prompt: i.meta?.prompt || "",
401
+ negativePrompt: i.meta?.negativePrompt || "",
402
+ })),
403
+ };
404
+ }
405
+
406
+ /**
407
+ * Get metadata for an embedding model including trained words.
408
+ *
409
+ * @param modelId - The Civitai model ID
410
+ * @param modelFileId - Specific version ID (defaults to latest)
411
+ * @returns Embedding info with download URL, trained words, and images
412
+ *
413
+ * @example
414
+ * ```typescript
415
+ * const info = await civitai.getEmbeddingModelInfo('12345')
416
+ * console.log(info.words)
417
+ * ```
418
+ */
419
+ async getEmbeddingModelInfo(modelId: string, modelFileId?: string) {
420
+ const { utils } = this.container;
421
+
422
+ const model = await this.getModel(modelId);
423
+ const { modelVersions = [] } = model;
424
+ const latest = modelVersions.find(i => i.id.toString() === String(modelFileId)) || maxBy(modelVersions, "createdAt")!;
425
+ const primaryFile = latest?.files?.find((f) => f.primary)!;
426
+ const fileId = `${utils.stringUtils.camelCase(
427
+ utils.stringUtils.kebabCase(model.name)
428
+ )}.yml`;
429
+
430
+ if (!primaryFile) {
431
+ throw new Error(`No primary file found for ${modelId} ${model.name}`);
432
+ }
433
+
434
+ return {
435
+ modelId: model.id,
436
+ name: model.name,
437
+ fileId,
438
+ fileName: primaryFile.name,
439
+ downloadUrl: primaryFile.downloadUrl,
440
+ words: latest.trainedWords,
441
+ imageUrls: latest.images.map((i) => i.url),
442
+ imageInfo: latest.images.map((i) => ({
443
+ url: i.url,
444
+ prompt: i.meta?.prompt || "",
445
+ negativePrompt: i.meta?.negativePrompt || "",
446
+ })),
447
+ };
448
+ }
449
+
450
+ }
451
+
452
+ export type ModelInfo = {
453
+ id: number;
454
+ name: string;
455
+ description: string;
456
+ type: string;
457
+ poi: boolean;
458
+ nsfw: boolean;
459
+ allowNoCredit: boolean;
460
+ allowCommercialUse: string;
461
+ allowDerivatives: boolean;
462
+ allowDifferentLicense: boolean;
463
+ stats: {
464
+ downloadCount: number;
465
+ favoriteCount: number;
466
+ commentCount: number;
467
+ ratingCount: number;
468
+ rating: number;
469
+ };
470
+ creator: {
471
+ username: string;
472
+ image: string;
473
+ };
474
+ tags: {
475
+ name: string;
476
+ }[];
477
+ modelVersions: {
478
+ id: number;
479
+ modelId: number;
480
+ name: string;
481
+ createdAt: string;
482
+ updatedAt: string;
483
+ trainedWords: string[];
484
+ baseModel: string;
485
+ earlyAccessTimeFrame: number;
486
+ description: string;
487
+ stats: {
488
+ downloadCount: number;
489
+ ratingCount: number;
490
+ rating: number;
491
+ };
492
+ files: {
493
+ name: string;
494
+ id: number;
495
+ sizeKB: number;
496
+ type: string;
497
+ metadata: {
498
+ fp: string;
499
+ size: string | number;
500
+ format: string;
501
+ };
502
+ pickleScanResult: string;
503
+ pickleScanMessage: string;
504
+ virusScanResult: string;
505
+ scannedAt: string;
506
+ hashes: {
507
+ AutoV1: string;
508
+ AutoV2: string;
509
+ SHA256: string;
510
+ CRC32: string;
511
+ BLAKE3: string;
512
+ };
513
+ downloadUrl: string;
514
+ primary: boolean;
515
+ }[];
516
+ images: {
517
+ url: string;
518
+ nsfw: boolean | string;
519
+ width: number;
520
+ height: number;
521
+ hash: string;
522
+ meta: {
523
+ Size: string;
524
+ seed: number;
525
+ steps: number;
526
+ prompt: string;
527
+ sampler: string;
528
+ cfgScale: number;
529
+ resources: any[];
530
+ Model_hash: string;
531
+ Variation_seed: string;
532
+ negativePrompt: string;
533
+ Variation_seed_strength: string;
534
+ };
535
+ }[];
536
+ }[];
537
+ };
@@ -0,0 +1,41 @@
1
+ import {
2
+ type ClientOptions,
3
+ type ClientsInterface,
4
+ clients,
5
+ } from "luca/client";
6
+ import { RestClient } from "./rest";
7
+ import { type ContainerContext } from "luca/container";
8
+ import { z } from 'zod'
9
+ import { ClientStateSchema } from 'luca/schemas/base.js'
10
+
11
+ declare module "luca/client" {
12
+ interface AvailableClients {
13
+ myClient: typeof MyClient;
14
+ }
15
+ }
16
+
17
+ export const MyClientStateSchema = ClientStateSchema.extend({
18
+ checkpoints: z.array(z.string()).default([]),
19
+ })
20
+
21
+ export type MyClientState = z.infer<typeof MyClientStateSchema>
22
+
23
+ export class MyClient<T extends MyClientState> extends RestClient<T> {
24
+ static override stateSchema = MyClientStateSchema;
25
+ // @ts-ignore
26
+ static attach(container: Container & ClientsInterface, options?: any) {
27
+ container.clients.register("civitai", MyClient);
28
+ return container
29
+ }
30
+
31
+ constructor(options: ClientOptions, context: ContainerContext) {
32
+ options = {
33
+ ...options,
34
+ baseURL: "https://platform.cloud.coveo.com/rest/search/v2",
35
+ };
36
+
37
+ super(options, context);
38
+ }
39
+ }
40
+
41
+ export default clients.register('civitai', MyClient)