@w3kits-com/plugin-opendesign 0.1.8 → 0.1.10

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 (1712) hide show
  1. package/dist/404/index.html +1 -1
  2. package/dist/404.html +1 -1
  3. package/dist/__next.$oc$slug.__PAGE__.txt +3 -3
  4. package/dist/__next.$oc$slug.txt +3 -3
  5. package/dist/__next._full.txt +11 -11
  6. package/dist/__next._head.txt +4 -4
  7. package/dist/__next._index.txt +5 -5
  8. package/dist/__next._tree.txt +1 -1
  9. package/dist/__w3kits/assets/design-systems/README.md +103 -0
  10. package/dist/__w3kits/assets/design-systems/_schema/AGENTS.md +179 -0
  11. package/dist/__w3kits/assets/design-systems/_schema/defaults.css +100 -0
  12. package/dist/__w3kits/assets/design-systems/_schema/tokens.schema.ts +275 -0
  13. package/dist/__w3kits/assets/design-systems/agentic/DESIGN.md +71 -0
  14. package/dist/__w3kits/assets/design-systems/airbnb/DESIGN.md +393 -0
  15. package/dist/__w3kits/assets/design-systems/airbnb/components.html +1373 -0
  16. package/dist/__w3kits/assets/design-systems/airbnb/tokens.css +261 -0
  17. package/dist/__w3kits/assets/design-systems/airtable/DESIGN.md +92 -0
  18. package/dist/__w3kits/assets/design-systems/ant/DESIGN.md +71 -0
  19. package/dist/__w3kits/assets/design-systems/apple/DESIGN.md +250 -0
  20. package/dist/__w3kits/assets/design-systems/apple/components.html +749 -0
  21. package/dist/__w3kits/assets/design-systems/apple/tokens.css +286 -0
  22. package/dist/__w3kits/assets/design-systems/application/DESIGN.md +71 -0
  23. package/dist/__w3kits/assets/design-systems/arc/DESIGN.md +152 -0
  24. package/dist/__w3kits/assets/design-systems/artistic/DESIGN.md +71 -0
  25. package/dist/__w3kits/assets/design-systems/atelier-zero/DESIGN.md +316 -0
  26. package/dist/__w3kits/assets/design-systems/bento/DESIGN.md +71 -0
  27. package/dist/__w3kits/assets/design-systems/binance/DESIGN.md +348 -0
  28. package/dist/__w3kits/assets/design-systems/bmw/DESIGN.md +183 -0
  29. package/dist/__w3kits/assets/design-systems/bmw-m/DESIGN.md +246 -0
  30. package/dist/__w3kits/assets/design-systems/bold/DESIGN.md +71 -0
  31. package/dist/__w3kits/assets/design-systems/brutalism/DESIGN.md +71 -0
  32. package/dist/__w3kits/assets/design-systems/bugatti/DESIGN.md +271 -0
  33. package/dist/__w3kits/assets/design-systems/cafe/DESIGN.md +71 -0
  34. package/dist/__w3kits/assets/design-systems/cal/DESIGN.md +262 -0
  35. package/dist/__w3kits/assets/design-systems/canva/DESIGN.md +157 -0
  36. package/dist/__w3kits/assets/design-systems/cisco/DESIGN.md +201 -0
  37. package/dist/__w3kits/assets/design-systems/claude/DESIGN.md +315 -0
  38. package/dist/__w3kits/assets/design-systems/clay/DESIGN.md +307 -0
  39. package/dist/__w3kits/assets/design-systems/claymorphism/DESIGN.md +71 -0
  40. package/dist/__w3kits/assets/design-systems/clean/DESIGN.md +71 -0
  41. package/dist/__w3kits/assets/design-systems/clickhouse/DESIGN.md +284 -0
  42. package/dist/__w3kits/assets/design-systems/cohere/DESIGN.md +269 -0
  43. package/dist/__w3kits/assets/design-systems/coinbase/DESIGN.md +132 -0
  44. package/dist/__w3kits/assets/design-systems/colorful/DESIGN.md +71 -0
  45. package/dist/__w3kits/assets/design-systems/composio/DESIGN.md +310 -0
  46. package/dist/__w3kits/assets/design-systems/contemporary/DESIGN.md +71 -0
  47. package/dist/__w3kits/assets/design-systems/corporate/DESIGN.md +71 -0
  48. package/dist/__w3kits/assets/design-systems/cosmic/DESIGN.md +71 -0
  49. package/dist/__w3kits/assets/design-systems/creative/DESIGN.md +71 -0
  50. package/dist/__w3kits/assets/design-systems/cursor/DESIGN.md +312 -0
  51. package/dist/__w3kits/assets/design-systems/cursor/components.html +654 -0
  52. package/dist/__w3kits/assets/design-systems/cursor/tokens.css +218 -0
  53. package/dist/__w3kits/assets/design-systems/dashboard/DESIGN.md +71 -0
  54. package/dist/__w3kits/assets/design-systems/default/DESIGN.md +62 -0
  55. package/dist/__w3kits/assets/design-systems/default/components.html +523 -0
  56. package/dist/__w3kits/assets/design-systems/default/tokens.css +200 -0
  57. package/dist/__w3kits/assets/design-systems/discord/DESIGN.md +162 -0
  58. package/dist/__w3kits/assets/design-systems/discord/components.html +359 -0
  59. package/dist/__w3kits/assets/design-systems/discord/tokens.css +125 -0
  60. package/dist/__w3kits/assets/design-systems/dithered/DESIGN.md +71 -0
  61. package/dist/__w3kits/assets/design-systems/doodle/DESIGN.md +71 -0
  62. package/dist/__w3kits/assets/design-systems/dramatic/DESIGN.md +71 -0
  63. package/dist/__w3kits/assets/design-systems/duolingo/DESIGN.md +154 -0
  64. package/dist/__w3kits/assets/design-systems/editorial/DESIGN.md +71 -0
  65. package/dist/__w3kits/assets/design-systems/elegant/DESIGN.md +71 -0
  66. package/dist/__w3kits/assets/design-systems/elevenlabs/DESIGN.md +268 -0
  67. package/dist/__w3kits/assets/design-systems/energetic/DESIGN.md +72 -0
  68. package/dist/__w3kits/assets/design-systems/enterprise/DESIGN.md +71 -0
  69. package/dist/__w3kits/assets/design-systems/expo/DESIGN.md +284 -0
  70. package/dist/__w3kits/assets/design-systems/expressive/DESIGN.md +71 -0
  71. package/dist/__w3kits/assets/design-systems/fantasy/DESIGN.md +71 -0
  72. package/dist/__w3kits/assets/design-systems/ferrari/DESIGN.md +317 -0
  73. package/dist/__w3kits/assets/design-systems/figma/DESIGN.md +223 -0
  74. package/dist/__w3kits/assets/design-systems/figma/components.html +344 -0
  75. package/dist/__w3kits/assets/design-systems/figma/tokens.css +126 -0
  76. package/dist/__w3kits/assets/design-systems/flat/DESIGN.md +71 -0
  77. package/dist/__w3kits/assets/design-systems/framer/DESIGN.md +249 -0
  78. package/dist/__w3kits/assets/design-systems/friendly/DESIGN.md +71 -0
  79. package/dist/__w3kits/assets/design-systems/futuristic/DESIGN.md +71 -0
  80. package/dist/__w3kits/assets/design-systems/github/DESIGN.md +155 -0
  81. package/dist/__w3kits/assets/design-systems/github/components.html +383 -0
  82. package/dist/__w3kits/assets/design-systems/github/tokens.css +125 -0
  83. package/dist/__w3kits/assets/design-systems/glassmorphism/DESIGN.md +71 -0
  84. package/dist/__w3kits/assets/design-systems/gradient/DESIGN.md +71 -0
  85. package/dist/__w3kits/assets/design-systems/hashicorp/DESIGN.md +281 -0
  86. package/dist/__w3kits/assets/design-systems/hud/DESIGN.md +173 -0
  87. package/dist/__w3kits/assets/design-systems/huggingface/DESIGN.md +149 -0
  88. package/dist/__w3kits/assets/design-systems/ibm/DESIGN.md +335 -0
  89. package/dist/__w3kits/assets/design-systems/intercom/DESIGN.md +149 -0
  90. package/dist/__w3kits/assets/design-systems/kami/DESIGN.md +410 -0
  91. package/dist/__w3kits/assets/design-systems/kami/components.html +601 -0
  92. package/dist/__w3kits/assets/design-systems/kami/tokens.css +272 -0
  93. package/dist/__w3kits/assets/design-systems/kraken/DESIGN.md +128 -0
  94. package/dist/__w3kits/assets/design-systems/lamborghini/DESIGN.md +291 -0
  95. package/dist/__w3kits/assets/design-systems/levels/DESIGN.md +71 -0
  96. package/dist/__w3kits/assets/design-systems/linear-app/DESIGN.md +370 -0
  97. package/dist/__w3kits/assets/design-systems/linear-app/components.html +370 -0
  98. package/dist/__w3kits/assets/design-systems/linear-app/tokens.css +130 -0
  99. package/dist/__w3kits/assets/design-systems/lingo/DESIGN.md +71 -0
  100. package/dist/__w3kits/assets/design-systems/loom/DESIGN.md +201 -0
  101. package/dist/__w3kits/assets/design-systems/lovable/DESIGN.md +301 -0
  102. package/dist/__w3kits/assets/design-systems/luxury/DESIGN.md +71 -0
  103. package/dist/__w3kits/assets/design-systems/mastercard/DESIGN.md +368 -0
  104. package/dist/__w3kits/assets/design-systems/material/DESIGN.md +71 -0
  105. package/dist/__w3kits/assets/design-systems/meta/DESIGN.md +369 -0
  106. package/dist/__w3kits/assets/design-systems/minimal/DESIGN.md +71 -0
  107. package/dist/__w3kits/assets/design-systems/minimax/DESIGN.md +260 -0
  108. package/dist/__w3kits/assets/design-systems/mintlify/DESIGN.md +329 -0
  109. package/dist/__w3kits/assets/design-systems/miro/DESIGN.md +111 -0
  110. package/dist/__w3kits/assets/design-systems/mission-control/DESIGN.md +474 -0
  111. package/dist/__w3kits/assets/design-systems/mistral-ai/DESIGN.md +264 -0
  112. package/dist/__w3kits/assets/design-systems/modern/DESIGN.md +71 -0
  113. package/dist/__w3kits/assets/design-systems/mongodb/DESIGN.md +269 -0
  114. package/dist/__w3kits/assets/design-systems/mono/DESIGN.md +71 -0
  115. package/dist/__w3kits/assets/design-systems/neobrutalism/DESIGN.md +71 -0
  116. package/dist/__w3kits/assets/design-systems/neon/DESIGN.md +71 -0
  117. package/dist/__w3kits/assets/design-systems/neumorphism/DESIGN.md +71 -0
  118. package/dist/__w3kits/assets/design-systems/nike/DESIGN.md +366 -0
  119. package/dist/__w3kits/assets/design-systems/notion/DESIGN.md +312 -0
  120. package/dist/__w3kits/assets/design-systems/notion/components.html +413 -0
  121. package/dist/__w3kits/assets/design-systems/notion/tokens.css +130 -0
  122. package/dist/__w3kits/assets/design-systems/nvidia/DESIGN.md +296 -0
  123. package/dist/__w3kits/assets/design-systems/ollama/DESIGN.md +270 -0
  124. package/dist/__w3kits/assets/design-systems/openai/DESIGN.md +140 -0
  125. package/dist/__w3kits/assets/design-systems/openai/components.html +382 -0
  126. package/dist/__w3kits/assets/design-systems/openai/tokens.css +133 -0
  127. package/dist/__w3kits/assets/design-systems/opencode-ai/DESIGN.md +284 -0
  128. package/dist/__w3kits/assets/design-systems/pacman/DESIGN.md +71 -0
  129. package/dist/__w3kits/assets/design-systems/paper/DESIGN.md +71 -0
  130. package/dist/__w3kits/assets/design-systems/perspective/DESIGN.md +71 -0
  131. package/dist/__w3kits/assets/design-systems/pinterest/DESIGN.md +233 -0
  132. package/dist/__w3kits/assets/design-systems/playstation/DESIGN.md +367 -0
  133. package/dist/__w3kits/assets/design-systems/posthog/DESIGN.md +259 -0
  134. package/dist/__w3kits/assets/design-systems/premium/DESIGN.md +71 -0
  135. package/dist/__w3kits/assets/design-systems/professional/DESIGN.md +71 -0
  136. package/dist/__w3kits/assets/design-systems/publication/DESIGN.md +71 -0
  137. package/dist/__w3kits/assets/design-systems/raycast/DESIGN.md +271 -0
  138. package/dist/__w3kits/assets/design-systems/refined/DESIGN.md +71 -0
  139. package/dist/__w3kits/assets/design-systems/renault/DESIGN.md +314 -0
  140. package/dist/__w3kits/assets/design-systems/replicate/DESIGN.md +264 -0
  141. package/dist/__w3kits/assets/design-systems/resend/DESIGN.md +306 -0
  142. package/dist/__w3kits/assets/design-systems/retro/DESIGN.md +71 -0
  143. package/dist/__w3kits/assets/design-systems/revolut/DESIGN.md +188 -0
  144. package/dist/__w3kits/assets/design-systems/runwayml/DESIGN.md +247 -0
  145. package/dist/__w3kits/assets/design-systems/sanity/DESIGN.md +360 -0
  146. package/dist/__w3kits/assets/design-systems/sentry/DESIGN.md +265 -0
  147. package/dist/__w3kits/assets/design-systems/shadcn/DESIGN.md +71 -0
  148. package/dist/__w3kits/assets/design-systems/shopify/DESIGN.md +353 -0
  149. package/dist/__w3kits/assets/design-systems/shopify/components.html +342 -0
  150. package/dist/__w3kits/assets/design-systems/shopify/tokens.css +141 -0
  151. package/dist/__w3kits/assets/design-systems/simple/DESIGN.md +71 -0
  152. package/dist/__w3kits/assets/design-systems/skeumorphism/DESIGN.md +71 -0
  153. package/dist/__w3kits/assets/design-systems/slack/DESIGN.md +363 -0
  154. package/dist/__w3kits/assets/design-systems/slack/components.html +387 -0
  155. package/dist/__w3kits/assets/design-systems/slack/tokens.css +127 -0
  156. package/dist/__w3kits/assets/design-systems/sleek/DESIGN.md +71 -0
  157. package/dist/__w3kits/assets/design-systems/spacex/DESIGN.md +197 -0
  158. package/dist/__w3kits/assets/design-systems/spacious/DESIGN.md +71 -0
  159. package/dist/__w3kits/assets/design-systems/spotify/DESIGN.md +249 -0
  160. package/dist/__w3kits/assets/design-systems/spotify/components.html +365 -0
  161. package/dist/__w3kits/assets/design-systems/spotify/tokens.css +127 -0
  162. package/dist/__w3kits/assets/design-systems/starbucks/DESIGN.md +583 -0
  163. package/dist/__w3kits/assets/design-systems/storytelling/DESIGN.md +71 -0
  164. package/dist/__w3kits/assets/design-systems/stripe/DESIGN.md +325 -0
  165. package/dist/__w3kits/assets/design-systems/stripe/components.html +1018 -0
  166. package/dist/__w3kits/assets/design-systems/stripe/tokens.css +295 -0
  167. package/dist/__w3kits/assets/design-systems/supabase/DESIGN.md +258 -0
  168. package/dist/__w3kits/assets/design-systems/superhuman/DESIGN.md +255 -0
  169. package/dist/__w3kits/assets/design-systems/tesla/DESIGN.md +289 -0
  170. package/dist/__w3kits/assets/design-systems/tetris/DESIGN.md +71 -0
  171. package/dist/__w3kits/assets/design-systems/theverge/DESIGN.md +342 -0
  172. package/dist/__w3kits/assets/design-systems/together-ai/DESIGN.md +266 -0
  173. package/dist/__w3kits/assets/design-systems/totality-festival/DESIGN.md +206 -0
  174. package/dist/__w3kits/assets/design-systems/trading-terminal/DESIGN.md +178 -0
  175. package/dist/__w3kits/assets/design-systems/uber/DESIGN.md +298 -0
  176. package/dist/__w3kits/assets/design-systems/uber/components.html +347 -0
  177. package/dist/__w3kits/assets/design-systems/uber/tokens.css +131 -0
  178. package/dist/__w3kits/assets/design-systems/urdu/DESIGN.md +1002 -0
  179. package/dist/__w3kits/assets/design-systems/vercel/DESIGN.md +313 -0
  180. package/dist/__w3kits/assets/design-systems/vercel/components.html +839 -0
  181. package/dist/__w3kits/assets/design-systems/vercel/tokens.css +270 -0
  182. package/dist/__w3kits/assets/design-systems/vibrant/DESIGN.md +71 -0
  183. package/dist/__w3kits/assets/design-systems/vintage/DESIGN.md +71 -0
  184. package/dist/__w3kits/assets/design-systems/vodafone/DESIGN.md +426 -0
  185. package/dist/__w3kits/assets/design-systems/voltagent/DESIGN.md +326 -0
  186. package/dist/__w3kits/assets/design-systems/warm-editorial/DESIGN.md +65 -0
  187. package/dist/__w3kits/assets/design-systems/warp/DESIGN.md +256 -0
  188. package/dist/__w3kits/assets/design-systems/webex/DESIGN.md +207 -0
  189. package/dist/__w3kits/assets/design-systems/webflow/DESIGN.md +95 -0
  190. package/dist/__w3kits/assets/design-systems/wechat/DESIGN.md +302 -0
  191. package/dist/__w3kits/assets/design-systems/wired/DESIGN.md +281 -0
  192. package/dist/__w3kits/assets/design-systems/wise/DESIGN.md +176 -0
  193. package/dist/__w3kits/assets/design-systems/x-ai/DESIGN.md +260 -0
  194. package/dist/__w3kits/assets/design-systems/xiaohongshu/DESIGN.md +402 -0
  195. package/dist/__w3kits/assets/design-systems/zapier/DESIGN.md +331 -0
  196. package/dist/__w3kits/assets/design-templates/AGENTS.md +34 -0
  197. package/dist/__w3kits/assets/design-templates/audio-jingle/SKILL.md +132 -0
  198. package/dist/__w3kits/assets/design-templates/audio-jingle/example.html +128 -0
  199. package/dist/__w3kits/assets/design-templates/blog-post/SKILL.md +81 -0
  200. package/dist/__w3kits/assets/design-templates/blog-post/example.html +80 -0
  201. package/dist/__w3kits/assets/design-templates/clinical-case-report/SKILL.md +209 -0
  202. package/dist/__w3kits/assets/design-templates/clinical-case-report/example.html +698 -0
  203. package/dist/__w3kits/assets/design-templates/clinical-case-report/examples/example-stemi.html +698 -0
  204. package/dist/__w3kits/assets/design-templates/clinical-case-report/references/case-formats.md +94 -0
  205. package/dist/__w3kits/assets/design-templates/clinical-case-report/references/checklist.md +41 -0
  206. package/dist/__w3kits/assets/design-templates/critique/SKILL.md +258 -0
  207. package/dist/__w3kits/assets/design-templates/critique/example.html +671 -0
  208. package/dist/__w3kits/assets/design-templates/dashboard/SKILL.md +76 -0
  209. package/dist/__w3kits/assets/design-templates/dashboard/example.html +118 -0
  210. package/dist/__w3kits/assets/design-templates/dating-web/SKILL.md +93 -0
  211. package/dist/__w3kits/assets/design-templates/dating-web/example.html +265 -0
  212. package/dist/__w3kits/assets/design-templates/dcf-valuation/SKILL.md +140 -0
  213. package/dist/__w3kits/assets/design-templates/dcf-valuation/references/sector-wacc.md +42 -0
  214. package/dist/__w3kits/assets/design-templates/digital-eguide/SKILL.md +95 -0
  215. package/dist/__w3kits/assets/design-templates/digital-eguide/example.html +204 -0
  216. package/dist/__w3kits/assets/design-templates/docs-page/SKILL.md +80 -0
  217. package/dist/__w3kits/assets/design-templates/docs-page/example.html +122 -0
  218. package/dist/__w3kits/assets/design-templates/email-marketing/SKILL.md +85 -0
  219. package/dist/__w3kits/assets/design-templates/email-marketing/example.html +159 -0
  220. package/dist/__w3kits/assets/design-templates/eng-runbook/SKILL.md +51 -0
  221. package/dist/__w3kits/assets/design-templates/eng-runbook/example.html +250 -0
  222. package/dist/__w3kits/assets/design-templates/finance-report/SKILL.md +62 -0
  223. package/dist/__w3kits/assets/design-templates/finance-report/example.html +242 -0
  224. package/dist/__w3kits/assets/design-templates/flowai-live-dashboard-template/SKILL.md +87 -0
  225. package/dist/__w3kits/assets/design-templates/flowai-live-dashboard-template/assets/template.html +387 -0
  226. package/dist/__w3kits/assets/design-templates/flowai-live-dashboard-template/example.html +13 -0
  227. package/dist/__w3kits/assets/design-templates/flowai-live-dashboard-template/references/checklist.md +35 -0
  228. package/dist/__w3kits/assets/design-templates/gamified-app/SKILL.md +109 -0
  229. package/dist/__w3kits/assets/design-templates/gamified-app/example.html +292 -0
  230. package/dist/__w3kits/assets/design-templates/github-dashboard/SKILL.md +130 -0
  231. package/dist/__w3kits/assets/design-templates/github-dashboard/example.html +473 -0
  232. package/dist/__w3kits/assets/design-templates/github-dashboard/references/README.md +10 -0
  233. package/dist/__w3kits/assets/design-templates/github-dashboard/references/artifact-example.json +15 -0
  234. package/dist/__w3kits/assets/design-templates/github-dashboard/references/example-data.json +138 -0
  235. package/dist/__w3kits/assets/design-templates/github-dashboard/references/provenance-example.json +92 -0
  236. package/dist/__w3kits/assets/design-templates/github-dashboard/references/template.html +473 -0
  237. package/dist/__w3kits/assets/design-templates/guizang-ppt/LICENSE +21 -0
  238. package/dist/__w3kits/assets/design-templates/guizang-ppt/README.en.md +119 -0
  239. package/dist/__w3kits/assets/design-templates/guizang-ppt/README.md +120 -0
  240. package/dist/__w3kits/assets/design-templates/guizang-ppt/README.pt-BR.md +121 -0
  241. package/dist/__w3kits/assets/design-templates/guizang-ppt/SKILL.md +314 -0
  242. package/dist/__w3kits/assets/design-templates/guizang-ppt/assets/example-slides.html +318 -0
  243. package/dist/__w3kits/assets/design-templates/guizang-ppt/assets/template.html +647 -0
  244. package/dist/__w3kits/assets/design-templates/guizang-ppt/references/checklist.md +265 -0
  245. package/dist/__w3kits/assets/design-templates/guizang-ppt/references/components.md +363 -0
  246. package/dist/__w3kits/assets/design-templates/guizang-ppt/references/layouts.md +630 -0
  247. package/dist/__w3kits/assets/design-templates/guizang-ppt/references/styles.md +195 -0
  248. package/dist/__w3kits/assets/design-templates/guizang-ppt/references/themes.md +122 -0
  249. package/dist/__w3kits/assets/design-templates/hr-onboarding/SKILL.md +52 -0
  250. package/dist/__w3kits/assets/design-templates/hr-onboarding/example.html +219 -0
  251. package/dist/__w3kits/assets/design-templates/html-ppt/.clawscan-allow +12 -0
  252. package/dist/__w3kits/assets/design-templates/html-ppt/LICENSE +21 -0
  253. package/dist/__w3kits/assets/design-templates/html-ppt/README.md +234 -0
  254. package/dist/__w3kits/assets/design-templates/html-ppt/README.pt-BR.md +239 -0
  255. package/dist/__w3kits/assets/design-templates/html-ppt/README.zh-CN.md +238 -0
  256. package/dist/__w3kits/assets/design-templates/html-ppt/SKILL.md +251 -0
  257. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/animations.css +138 -0
  258. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/_util.js +63 -0
  259. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/chain-react.js +41 -0
  260. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/confetti-cannon.js +49 -0
  261. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/constellation.js +44 -0
  262. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/counter-explosion.js +58 -0
  263. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/data-stream.js +45 -0
  264. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/firework.js +51 -0
  265. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/galaxy-swirl.js +33 -0
  266. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/gradient-blob.js +39 -0
  267. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/knowledge-graph.js +69 -0
  268. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/letter-explode.js +50 -0
  269. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/magnetic-field.js +40 -0
  270. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/matrix-rain.js +33 -0
  271. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/neural-net.js +75 -0
  272. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/orbit-ring.js +38 -0
  273. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/particle-burst.js +42 -0
  274. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/shockwave.js +39 -0
  275. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/sparkle-trail.js +62 -0
  276. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/starfield.js +30 -0
  277. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/typewriter-multi.js +51 -0
  278. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx/word-cascade.js +47 -0
  279. package/dist/__w3kits/assets/design-templates/html-ppt/assets/animations/fx-runtime.js +99 -0
  280. package/dist/__w3kits/assets/design-templates/html-ppt/assets/base.css +150 -0
  281. package/dist/__w3kits/assets/design-templates/html-ppt/assets/fonts.css +9 -0
  282. package/dist/__w3kits/assets/design-templates/html-ppt/assets/runtime.js +960 -0
  283. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/academic-paper.css +23 -0
  284. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/arctic-cool.css +14 -0
  285. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/aurora.css +20 -0
  286. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/bauhaus.css +16 -0
  287. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/blueprint.css +19 -0
  288. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/catppuccin-latte.css +14 -0
  289. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/catppuccin-mocha.css +14 -0
  290. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/corporate-clean.css +19 -0
  291. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/cyberpunk-neon.css +23 -0
  292. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/dracula.css +14 -0
  293. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/editorial-serif.css +18 -0
  294. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/engineering-whiteprint.css +26 -0
  295. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/glassmorphism.css +21 -0
  296. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/gruvbox-dark.css +14 -0
  297. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/japanese-minimal.css +21 -0
  298. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/magazine-bold.css +21 -0
  299. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/memphis-pop.css +20 -0
  300. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/midcentury.css +19 -0
  301. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/minimal-white.css +16 -0
  302. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/neo-brutalism.css +17 -0
  303. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/news-broadcast.css +20 -0
  304. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/nord.css +14 -0
  305. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/pitch-deck-vc.css +21 -0
  306. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/rainbow-gradient.css +16 -0
  307. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/retro-tv.css +22 -0
  308. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/rose-pine.css +14 -0
  309. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/sharp-mono.css +17 -0
  310. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/soft-pastel.css +14 -0
  311. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/solarized-light.css +14 -0
  312. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/sunset-warm.css +14 -0
  313. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/swiss-grid.css +17 -0
  314. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/terminal-green.css +18 -0
  315. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/tokyo-night.css +14 -0
  316. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/vaporwave.css +21 -0
  317. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/xiaohongshu-white.css +16 -0
  318. package/dist/__w3kits/assets/design-templates/html-ppt/assets/themes/y2k-chrome.css +20 -0
  319. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/_theme-cell.html +56 -0
  320. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/animations.png +0 -0
  321. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/hero.gif +0 -0
  322. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/layouts-live.gif +0 -0
  323. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/layouts.png +0 -0
  324. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/montage-animations.html +61 -0
  325. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/montage-layouts.html +72 -0
  326. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/montage-templates.html +72 -0
  327. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/montage-themes.html +38 -0
  328. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/presenter-mode.png +0 -0
  329. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/templates.png +0 -0
  330. package/dist/__w3kits/assets/design-templates/html-ppt/docs/readme/themes.png +0 -0
  331. package/dist/__w3kits/assets/design-templates/html-ppt/examples/demo-deck/index.html +161 -0
  332. package/dist/__w3kits/assets/design-templates/html-ppt/references/animations.md +147 -0
  333. package/dist/__w3kits/assets/design-templates/html-ppt/references/authoring-guide.md +141 -0
  334. package/dist/__w3kits/assets/design-templates/html-ppt/references/full-decks.md +98 -0
  335. package/dist/__w3kits/assets/design-templates/html-ppt/references/layouts.md +103 -0
  336. package/dist/__w3kits/assets/design-templates/html-ppt/references/presenter-mode.md +240 -0
  337. package/dist/__w3kits/assets/design-templates/html-ppt/references/themes.md +107 -0
  338. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/new-deck.sh +46 -0
  339. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/render.sh +71 -0
  340. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_01.png +0 -0
  341. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_02.png +0 -0
  342. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_03.png +0 -0
  343. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_04.png +0 -0
  344. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_05.png +0 -0
  345. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_06.png +0 -0
  346. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_07.png +0 -0
  347. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_08.png +0 -0
  348. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_09.png +0 -0
  349. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_10.png +0 -0
  350. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_11.png +0 -0
  351. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_12.png +0 -0
  352. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_13.png +0 -0
  353. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_14.png +0 -0
  354. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_15.png +0 -0
  355. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_16.png +0 -0
  356. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_17.png +0 -0
  357. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_18.png +0 -0
  358. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_19.png +0 -0
  359. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_20.png +0 -0
  360. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_01.png +0 -0
  361. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_02.png +0 -0
  362. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_03.png +0 -0
  363. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_04.png +0 -0
  364. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_05.png +0 -0
  365. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_06.png +0 -0
  366. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_07.png +0 -0
  367. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_08.png +0 -0
  368. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_09.png +0 -0
  369. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_10.png +0 -0
  370. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_11.png +0 -0
  371. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_12.png +0 -0
  372. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_13.png +0 -0
  373. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_14.png +0 -0
  374. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_15.png +0 -0
  375. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_16.png +0 -0
  376. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_17.png +0 -0
  377. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_18.png +0 -0
  378. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_19.png +0 -0
  379. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_20.png +0 -0
  380. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_21.png +0 -0
  381. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_22.png +0 -0
  382. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_23.png +0 -0
  383. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_24.png +0 -0
  384. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_25.png +0 -0
  385. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_26.png +0 -0
  386. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_27.png +0 -0
  387. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_28.png +0 -0
  388. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_29.png +0 -0
  389. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_30.png +0 -0
  390. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_31.png +0 -0
  391. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_32.png +0 -0
  392. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_33.png +0 -0
  393. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_34.png +0 -0
  394. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_35.png +0 -0
  395. package/dist/__w3kits/assets/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_36.png +0 -0
  396. package/dist/__w3kits/assets/design-templates/html-ppt/templates/animation-showcase.html +172 -0
  397. package/dist/__w3kits/assets/design-templates/html-ppt/templates/deck.html +69 -0
  398. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/course-module/README.md +8 -0
  399. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/course-module/index.html +189 -0
  400. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/course-module/style.css +46 -0
  401. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/README.md +11 -0
  402. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/index.html +138 -0
  403. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/style.css +60 -0
  404. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/README.md +11 -0
  405. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/index.html +180 -0
  406. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/style.css +54 -0
  407. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/README.md +11 -0
  408. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/index.html +199 -0
  409. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/style.css +55 -0
  410. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/README.md +11 -0
  411. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/index.html +190 -0
  412. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/style.css +49 -0
  413. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/README.md +11 -0
  414. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/index.html +144 -0
  415. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/style.css +59 -0
  416. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/pitch-deck/README.md +9 -0
  417. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/pitch-deck/index.html +148 -0
  418. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/pitch-deck/style.css +40 -0
  419. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/README.md +102 -0
  420. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/index.html +187 -0
  421. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/style.css +216 -0
  422. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/product-launch/README.md +8 -0
  423. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/product-launch/index.html +121 -0
  424. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/product-launch/style.css +39 -0
  425. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/tech-sharing/README.md +8 -0
  426. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/tech-sharing/index.html +156 -0
  427. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/tech-sharing/style.css +49 -0
  428. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/testing-safety-alert/README.md +11 -0
  429. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/testing-safety-alert/index.html +183 -0
  430. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/testing-safety-alert/style.css +62 -0
  431. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/weekly-report/README.md +8 -0
  432. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/weekly-report/index.html +127 -0
  433. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/weekly-report/style.css +55 -0
  434. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/README.md +11 -0
  435. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/index.html +147 -0
  436. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/style.css +66 -0
  437. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-post/README.md +9 -0
  438. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-post/index.html +133 -0
  439. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-post/style.css +47 -0
  440. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/README.md +11 -0
  441. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/index.html +187 -0
  442. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/style.css +63 -0
  443. package/dist/__w3kits/assets/design-templates/html-ppt/templates/full-decks-index.html +82 -0
  444. package/dist/__w3kits/assets/design-templates/html-ppt/templates/layout-showcase.html +47 -0
  445. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/arch-diagram.html +46 -0
  446. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/big-quote.html +18 -0
  447. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/bullets.html +19 -0
  448. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/chart-bar.html +30 -0
  449. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/chart-line.html +35 -0
  450. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/chart-pie.html +36 -0
  451. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/chart-radar.html +31 -0
  452. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/code.html +33 -0
  453. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/comparison.html +47 -0
  454. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/cover.html +32 -0
  455. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/cta.html +27 -0
  456. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/diff.html +35 -0
  457. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/flow-diagram.html +33 -0
  458. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/gantt.html +29 -0
  459. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/image-grid.html +34 -0
  460. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/image-hero.html +33 -0
  461. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/kpi-grid.html +19 -0
  462. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/mindmap.html +38 -0
  463. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/process-steps.html +27 -0
  464. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/pros-cons.html +31 -0
  465. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/roadmap.html +46 -0
  466. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/section-divider.html +17 -0
  467. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/stat-highlight.html +17 -0
  468. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/table.html +33 -0
  469. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/terminal.html +35 -0
  470. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/thanks.html +21 -0
  471. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/three-column.html +18 -0
  472. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/timeline.html +32 -0
  473. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/toc.html +26 -0
  474. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/todo-checklist.html +33 -0
  475. package/dist/__w3kits/assets/design-templates/html-ppt/templates/single-page/two-column.html +39 -0
  476. package/dist/__w3kits/assets/design-templates/html-ppt/templates/theme-showcase.html +151 -0
  477. package/dist/__w3kits/assets/design-templates/html-ppt-course-module/SKILL.md +79 -0
  478. package/dist/__w3kits/assets/design-templates/html-ppt-course-module/example.html +542 -0
  479. package/dist/__w3kits/assets/design-templates/html-ppt-dir-key-nav-minimal/SKILL.md +78 -0
  480. package/dist/__w3kits/assets/design-templates/html-ppt-dir-key-nav-minimal/example.html +366 -0
  481. package/dist/__w3kits/assets/design-templates/html-ppt-graphify-dark-graph/SKILL.md +78 -0
  482. package/dist/__w3kits/assets/design-templates/html-ppt-graphify-dark-graph/example.html +402 -0
  483. package/dist/__w3kits/assets/design-templates/html-ppt-hermes-cyber-terminal/SKILL.md +78 -0
  484. package/dist/__w3kits/assets/design-templates/html-ppt-hermes-cyber-terminal/example.html +422 -0
  485. package/dist/__w3kits/assets/design-templates/html-ppt-knowledge-arch-blueprint/SKILL.md +78 -0
  486. package/dist/__w3kits/assets/design-templates/html-ppt-knowledge-arch-blueprint/example.html +407 -0
  487. package/dist/__w3kits/assets/design-templates/html-ppt-obsidian-claude-gradient/SKILL.md +78 -0
  488. package/dist/__w3kits/assets/design-templates/html-ppt-obsidian-claude-gradient/example.html +371 -0
  489. package/dist/__w3kits/assets/design-templates/html-ppt-pitch-deck/SKILL.md +79 -0
  490. package/dist/__w3kits/assets/design-templates/html-ppt-pitch-deck/example.html +495 -0
  491. package/dist/__w3kits/assets/design-templates/html-ppt-presenter-mode-reveal/SKILL.md +79 -0
  492. package/dist/__w3kits/assets/design-templates/html-ppt-presenter-mode-reveal/example.html +725 -0
  493. package/dist/__w3kits/assets/design-templates/html-ppt-product-launch/SKILL.md +78 -0
  494. package/dist/__w3kits/assets/design-templates/html-ppt-product-launch/example.html +467 -0
  495. package/dist/__w3kits/assets/design-templates/html-ppt-taste-brutalist/SKILL.md +70 -0
  496. package/dist/__w3kits/assets/design-templates/html-ppt-taste-brutalist/example.html +774 -0
  497. package/dist/__w3kits/assets/design-templates/html-ppt-taste-editorial/SKILL.md +60 -0
  498. package/dist/__w3kits/assets/design-templates/html-ppt-taste-editorial/example.html +490 -0
  499. package/dist/__w3kits/assets/design-templates/html-ppt-tech-sharing/SKILL.md +78 -0
  500. package/dist/__w3kits/assets/design-templates/html-ppt-tech-sharing/example.html +512 -0
  501. package/dist/__w3kits/assets/design-templates/html-ppt-testing-safety-alert/SKILL.md +79 -0
  502. package/dist/__w3kits/assets/design-templates/html-ppt-testing-safety-alert/example.html +413 -0
  503. package/dist/__w3kits/assets/design-templates/html-ppt-weekly-report/SKILL.md +78 -0
  504. package/dist/__w3kits/assets/design-templates/html-ppt-weekly-report/example.html +489 -0
  505. package/dist/__w3kits/assets/design-templates/html-ppt-xhs-pastel-card/SKILL.md +79 -0
  506. package/dist/__w3kits/assets/design-templates/html-ppt-xhs-pastel-card/example.html +381 -0
  507. package/dist/__w3kits/assets/design-templates/html-ppt-xhs-post/SKILL.md +79 -0
  508. package/dist/__w3kits/assets/design-templates/html-ppt-xhs-post/example.html +487 -0
  509. package/dist/__w3kits/assets/design-templates/html-ppt-xhs-white-editorial/SKILL.md +78 -0
  510. package/dist/__w3kits/assets/design-templates/html-ppt-xhs-white-editorial/example.html +418 -0
  511. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-8-bit-orbit/LICENSE +21 -0
  512. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-8-bit-orbit/SKILL.md +93 -0
  513. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-8-bit-orbit/example.html +1640 -0
  514. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-8-bit-orbit/template.json +48 -0
  515. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-biennale-yellow/LICENSE +21 -0
  516. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-biennale-yellow/SKILL.md +93 -0
  517. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-biennale-yellow/example.html +833 -0
  518. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-biennale-yellow/template.json +49 -0
  519. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-block-frame/LICENSE +21 -0
  520. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-block-frame/SKILL.md +93 -0
  521. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-block-frame/example.html +1453 -0
  522. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-block-frame/template.json +47 -0
  523. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-blue-professional/LICENSE +21 -0
  524. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-blue-professional/SKILL.md +93 -0
  525. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-blue-professional/example.html +1423 -0
  526. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-blue-professional/template.json +44 -0
  527. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-bold-poster/LICENSE +21 -0
  528. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-bold-poster/SKILL.md +93 -0
  529. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-bold-poster/example.html +876 -0
  530. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-bold-poster/template.json +45 -0
  531. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-broadside/LICENSE +21 -0
  532. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-broadside/SKILL.md +92 -0
  533. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-broadside/example.html +2144 -0
  534. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-broadside/template.json +49 -0
  535. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-capsule/LICENSE +21 -0
  536. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-capsule/SKILL.md +92 -0
  537. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-capsule/example.html +1413 -0
  538. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-capsule/template.json +51 -0
  539. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cartesian/LICENSE +21 -0
  540. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cartesian/SKILL.md +92 -0
  541. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cartesian/example.html +1136 -0
  542. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cartesian/template.json +47 -0
  543. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cobalt-grid/LICENSE +21 -0
  544. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cobalt-grid/SKILL.md +93 -0
  545. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cobalt-grid/example.html +1205 -0
  546. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-cobalt-grid/template.json +49 -0
  547. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-coral/LICENSE +21 -0
  548. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-coral/SKILL.md +92 -0
  549. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-coral/example.html +1487 -0
  550. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-coral/template.json +45 -0
  551. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-creative-mode/LICENSE +21 -0
  552. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-creative-mode/SKILL.md +99 -0
  553. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-creative-mode/assets/deck-stage.js +619 -0
  554. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-creative-mode/example.html +636 -0
  555. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-creative-mode/template.json +47 -0
  556. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-daisy-days/LICENSE +21 -0
  557. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-daisy-days/SKILL.md +93 -0
  558. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-daisy-days/example.html +469 -0
  559. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-daisy-days/template.json +54 -0
  560. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-editorial-tri-tone/LICENSE +21 -0
  561. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-editorial-tri-tone/SKILL.md +98 -0
  562. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-editorial-tri-tone/assets/deck-stage.js +619 -0
  563. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-editorial-tri-tone/example.html +737 -0
  564. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-editorial-tri-tone/template.json +44 -0
  565. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-grove/LICENSE +21 -0
  566. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-grove/SKILL.md +92 -0
  567. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-grove/example.html +1676 -0
  568. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-grove/template.json +51 -0
  569. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-long-table/LICENSE +21 -0
  570. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-long-table/SKILL.md +92 -0
  571. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-long-table/example.html +1192 -0
  572. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-long-table/template.json +50 -0
  573. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-mat/LICENSE +21 -0
  574. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-mat/SKILL.md +92 -0
  575. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-mat/example.html +1372 -0
  576. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-mat/template.json +49 -0
  577. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-monochrome/LICENSE +21 -0
  578. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-monochrome/SKILL.md +91 -0
  579. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-monochrome/example.html +2596 -0
  580. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-monochrome/template.json +50 -0
  581. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-neo-grid-bold/LICENSE +21 -0
  582. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-neo-grid-bold/SKILL.md +99 -0
  583. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-neo-grid-bold/assets/deck-stage.js +619 -0
  584. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-neo-grid-bold/example.html +865 -0
  585. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-neo-grid-bold/template.json +47 -0
  586. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-peoples-platform/LICENSE +21 -0
  587. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-peoples-platform/SKILL.md +99 -0
  588. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-peoples-platform/assets/deck-stage.js +619 -0
  589. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-peoples-platform/example.html +825 -0
  590. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-peoples-platform/template.json +48 -0
  591. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pin-and-paper/LICENSE +21 -0
  592. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pin-and-paper/SKILL.md +100 -0
  593. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pin-and-paper/assets/deck-stage.js +619 -0
  594. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pin-and-paper/assets/styles.css +668 -0
  595. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pin-and-paper/example.html +443 -0
  596. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pin-and-paper/template.json +46 -0
  597. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pink-script/LICENSE +21 -0
  598. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pink-script/SKILL.md +99 -0
  599. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pink-script/assets/deck-stage.js +619 -0
  600. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pink-script/example.html +658 -0
  601. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-pink-script/template.json +47 -0
  602. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-playful/LICENSE +21 -0
  603. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-playful/SKILL.md +92 -0
  604. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-playful/example.html +1355 -0
  605. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-playful/template.json +43 -0
  606. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-raw-grid/LICENSE +21 -0
  607. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-raw-grid/SKILL.md +93 -0
  608. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-raw-grid/example.html +1121 -0
  609. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-raw-grid/template.json +46 -0
  610. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-windows/LICENSE +21 -0
  611. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-windows/SKILL.md +92 -0
  612. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-windows/example.html +1287 -0
  613. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-windows/template.json +47 -0
  614. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-zine/LICENSE +21 -0
  615. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-zine/SKILL.md +93 -0
  616. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-zine/example.html +1058 -0
  617. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-retro-zine/template.json +47 -0
  618. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-sakura-chroma/LICENSE +21 -0
  619. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-sakura-chroma/SKILL.md +92 -0
  620. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-sakura-chroma/example.html +1405 -0
  621. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-sakura-chroma/template.json +54 -0
  622. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-scatterbrain/LICENSE +21 -0
  623. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-scatterbrain/SKILL.md +92 -0
  624. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-scatterbrain/example.html +1320 -0
  625. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-scatterbrain/template.json +50 -0
  626. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-signal/LICENSE +21 -0
  627. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-signal/SKILL.md +92 -0
  628. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-signal/example.html +2558 -0
  629. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-signal/template.json +50 -0
  630. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-soft-editorial/LICENSE +21 -0
  631. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-soft-editorial/SKILL.md +98 -0
  632. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-soft-editorial/assets/deck-stage.js +619 -0
  633. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-soft-editorial/example.html +1183 -0
  634. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-soft-editorial/template.json +47 -0
  635. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-stencil-tablet/LICENSE +21 -0
  636. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-stencil-tablet/SKILL.md +99 -0
  637. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-stencil-tablet/assets/deck-stage.js +619 -0
  638. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-stencil-tablet/example.html +954 -0
  639. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-stencil-tablet/template.json +52 -0
  640. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-studio/LICENSE +21 -0
  641. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-studio/SKILL.md +92 -0
  642. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-studio/example.html +1606 -0
  643. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-studio/template.json +49 -0
  644. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-vellum/LICENSE +21 -0
  645. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-vellum/SKILL.md +91 -0
  646. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-vellum/example.html +1091 -0
  647. package/dist/__w3kits/assets/design-templates/html-ppt-zhangzara-vellum/template.json +50 -0
  648. package/dist/__w3kits/assets/design-templates/hyperframes/SKILL.md +500 -0
  649. package/dist/__w3kits/assets/design-templates/hyperframes/data-in-motion.md +19 -0
  650. package/dist/__w3kits/assets/design-templates/hyperframes/house-style.md +71 -0
  651. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/bold-energetic.md +14 -0
  652. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/clean-corporate.md +14 -0
  653. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/dark-premium.md +14 -0
  654. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/jewel-rich.md +14 -0
  655. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/monochrome.md +14 -0
  656. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/nature-earth.md +14 -0
  657. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/neon-electric.md +14 -0
  658. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/pastel-soft.md +14 -0
  659. package/dist/__w3kits/assets/design-templates/hyperframes/palettes/warm-editorial.md +14 -0
  660. package/dist/__w3kits/assets/design-templates/hyperframes/patterns.md +118 -0
  661. package/dist/__w3kits/assets/design-templates/hyperframes/references/audio-reactive.md +76 -0
  662. package/dist/__w3kits/assets/design-templates/hyperframes/references/captions.md +132 -0
  663. package/dist/__w3kits/assets/design-templates/hyperframes/references/css-patterns.md +373 -0
  664. package/dist/__w3kits/assets/design-templates/hyperframes/references/dynamic-techniques.md +90 -0
  665. package/dist/__w3kits/assets/design-templates/hyperframes/references/html-in-canvas.md +146 -0
  666. package/dist/__w3kits/assets/design-templates/hyperframes/references/motion-principles.md +69 -0
  667. package/dist/__w3kits/assets/design-templates/hyperframes/references/transcript-guide.md +151 -0
  668. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/catalog.md +117 -0
  669. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-3d.md +12 -0
  670. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-blur.md +51 -0
  671. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-cover.md +43 -0
  672. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-destruction.md +95 -0
  673. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-dissolve.md +66 -0
  674. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-distortion.md +45 -0
  675. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-grid.md +10 -0
  676. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-light.md +49 -0
  677. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-mechanical.md +30 -0
  678. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-other.md +25 -0
  679. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-push.md +41 -0
  680. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-radial.md +37 -0
  681. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions/css-scale.md +24 -0
  682. package/dist/__w3kits/assets/design-templates/hyperframes/references/transitions.md +112 -0
  683. package/dist/__w3kits/assets/design-templates/hyperframes/references/tts.md +75 -0
  684. package/dist/__w3kits/assets/design-templates/hyperframes/references/typography.md +175 -0
  685. package/dist/__w3kits/assets/design-templates/hyperframes/scripts/animation-map.mjs +601 -0
  686. package/dist/__w3kits/assets/design-templates/hyperframes/scripts/contrast-report.mjs +338 -0
  687. package/dist/__w3kits/assets/design-templates/hyperframes/scripts/package-loader.mjs +269 -0
  688. package/dist/__w3kits/assets/design-templates/hyperframes/visual-styles.md +211 -0
  689. package/dist/__w3kits/assets/design-templates/ib-pitch-book/SKILL.md +161 -0
  690. package/dist/__w3kits/assets/design-templates/ib-pitch-book/assets/template.html +436 -0
  691. package/dist/__w3kits/assets/design-templates/ib-pitch-book/example.html +1181 -0
  692. package/dist/__w3kits/assets/design-templates/ib-pitch-book/references/attribution.md +35 -0
  693. package/dist/__w3kits/assets/design-templates/ib-pitch-book/references/checklist.md +39 -0
  694. package/dist/__w3kits/assets/design-templates/ib-pitch-book/references/compliance.md +60 -0
  695. package/dist/__w3kits/assets/design-templates/ib-pitch-book/references/conventions.md +36 -0
  696. package/dist/__w3kits/assets/design-templates/image-poster/SKILL.md +104 -0
  697. package/dist/__w3kits/assets/design-templates/image-poster/example.html +113 -0
  698. package/dist/__w3kits/assets/design-templates/invoice/SKILL.md +48 -0
  699. package/dist/__w3kits/assets/design-templates/invoice/example.html +214 -0
  700. package/dist/__w3kits/assets/design-templates/kami-deck/README.md +72 -0
  701. package/dist/__w3kits/assets/design-templates/kami-deck/SKILL.md +196 -0
  702. package/dist/__w3kits/assets/design-templates/kami-deck/example.html +1101 -0
  703. package/dist/__w3kits/assets/design-templates/kami-landing/README.md +69 -0
  704. package/dist/__w3kits/assets/design-templates/kami-landing/SKILL.md +234 -0
  705. package/dist/__w3kits/assets/design-templates/kami-landing/example.html +673 -0
  706. package/dist/__w3kits/assets/design-templates/kanban-board/SKILL.md +50 -0
  707. package/dist/__w3kits/assets/design-templates/kanban-board/example.html +270 -0
  708. package/dist/__w3kits/assets/design-templates/last30days/LICENSE +21 -0
  709. package/dist/__w3kits/assets/design-templates/last30days/SKILL.md +142 -0
  710. package/dist/__w3kits/assets/design-templates/last30days/references/save-html-brief.md +50 -0
  711. package/dist/__w3kits/assets/design-templates/last30days/scripts/briefing.py +264 -0
  712. package/dist/__w3kits/assets/design-templates/last30days/scripts/last30days.py +938 -0
  713. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/__init__.py +1 -0
  714. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/bird_x.py +443 -0
  715. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/bluesky.py +249 -0
  716. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/categories.py +283 -0
  717. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/chrome_cookies.py +265 -0
  718. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/cluster.py +271 -0
  719. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/competitors.py +199 -0
  720. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/cookie_extract.py +379 -0
  721. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/dates.py +120 -0
  722. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/dedupe.py +130 -0
  723. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/entity_extract.py +127 -0
  724. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/env.py +650 -0
  725. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/fanout.py +85 -0
  726. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/fusion.py +207 -0
  727. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/github.py +921 -0
  728. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/grounding.py +259 -0
  729. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/hackernews.py +301 -0
  730. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/html_render.py +674 -0
  731. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/http.py +204 -0
  732. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/instagram.py +500 -0
  733. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/log.py +28 -0
  734. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/normalize.py +499 -0
  735. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/perplexity.py +164 -0
  736. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/pinterest.py +182 -0
  737. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/pipeline.py +1069 -0
  738. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/planner.py +712 -0
  739. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/polymarket.py +786 -0
  740. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/preflight.py +119 -0
  741. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/providers.py +464 -0
  742. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/quality_nudge.py +190 -0
  743. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/query.py +117 -0
  744. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/reddit.py +703 -0
  745. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/reddit_enrich.py +322 -0
  746. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/reddit_public.py +377 -0
  747. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/relevance.py +168 -0
  748. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/render.py +1722 -0
  749. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/rerank.py +425 -0
  750. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/resolve.py +258 -0
  751. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/safari_cookies.py +182 -0
  752. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/schema.py +319 -0
  753. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/setup_wizard.py +535 -0
  754. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/signals.py +251 -0
  755. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/snippet.py +51 -0
  756. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/subproc.py +94 -0
  757. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/threads.py +224 -0
  758. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/tiktok.py +677 -0
  759. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/truthsocial.py +168 -0
  760. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/ui.py +610 -0
  761. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/LICENSE +21 -0
  762. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/bird-search.mjs +147 -0
  763. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/cookies.js +220 -0
  764. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/features.json +17 -0
  765. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/paginate-cursor.js +37 -0
  766. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/query-ids.json +20 -0
  767. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/runtime-features.js +151 -0
  768. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/runtime-query-ids.js +264 -0
  769. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-base.js +129 -0
  770. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-constants.js +50 -0
  771. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-features.js +347 -0
  772. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-search.js +157 -0
  773. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-types.js +2 -0
  774. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-utils.js +511 -0
  775. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/vendor/bird-search/package.json +13 -0
  776. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/xai_x.py +228 -0
  777. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/xiaohongshu_api.py +162 -0
  778. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/xquik.py +227 -0
  779. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/xurl_x.py +172 -0
  780. package/dist/__w3kits/assets/design-templates/last30days/scripts/lib/youtube_yt.py +967 -0
  781. package/dist/__w3kits/assets/design-templates/last30days/scripts/store.py +787 -0
  782. package/dist/__w3kits/assets/design-templates/last30days/scripts/watchlist.py +299 -0
  783. package/dist/__w3kits/assets/design-templates/live-artifact/SKILL.md +136 -0
  784. package/dist/__w3kits/assets/design-templates/live-artifact/assets/templates/clinic-console/README.md +342 -0
  785. package/dist/__w3kits/assets/design-templates/live-artifact/assets/templates/clinic-console/data.json +165 -0
  786. package/dist/__w3kits/assets/design-templates/live-artifact/assets/templates/clinic-console/template.html +548 -0
  787. package/dist/__w3kits/assets/design-templates/live-artifact/examples/baby-health-live.html +761 -0
  788. package/dist/__w3kits/assets/design-templates/live-artifact/examples/competitor-radar-live.html +1006 -0
  789. package/dist/__w3kits/assets/design-templates/live-artifact/examples/crm-table-live.html +1174 -0
  790. package/dist/__w3kits/assets/design-templates/live-artifact/examples/crypto-dashboard.html +2316 -0
  791. package/dist/__w3kits/assets/design-templates/live-artifact/examples/monday-operator-live.html +919 -0
  792. package/dist/__w3kits/assets/design-templates/live-artifact/examples/stock-dashboard.html +2246 -0
  793. package/dist/__w3kits/assets/design-templates/live-artifact/examples/stock-portfolio-live/artifact.json +16 -0
  794. package/dist/__w3kits/assets/design-templates/live-artifact/examples/stock-portfolio-live/data.json +453 -0
  795. package/dist/__w3kits/assets/design-templates/live-artifact/examples/stock-portfolio-live/provenance.json +19 -0
  796. package/dist/__w3kits/assets/design-templates/live-artifact/examples/stock-portfolio-live/template.html +1071 -0
  797. package/dist/__w3kits/assets/design-templates/live-artifact/references/artifact-schema.md +99 -0
  798. package/dist/__w3kits/assets/design-templates/live-artifact/references/connector-policy.md +119 -0
  799. package/dist/__w3kits/assets/design-templates/live-artifact/references/refresh-contract.md +78 -0
  800. package/dist/__w3kits/assets/design-templates/live-dashboard/SKILL.md +203 -0
  801. package/dist/__w3kits/assets/design-templates/live-dashboard/assets/template.html +643 -0
  802. package/dist/__w3kits/assets/design-templates/live-dashboard/example.html +946 -0
  803. package/dist/__w3kits/assets/design-templates/live-dashboard/references/checklist.md +83 -0
  804. package/dist/__w3kits/assets/design-templates/live-dashboard/references/components.md +212 -0
  805. package/dist/__w3kits/assets/design-templates/live-dashboard/references/connectors.md +171 -0
  806. package/dist/__w3kits/assets/design-templates/live-dashboard/references/layouts.md +92 -0
  807. package/dist/__w3kits/assets/design-templates/magazine-poster/SKILL.md +88 -0
  808. package/dist/__w3kits/assets/design-templates/magazine-poster/example.html +207 -0
  809. package/dist/__w3kits/assets/design-templates/meeting-notes/SKILL.md +47 -0
  810. package/dist/__w3kits/assets/design-templates/meeting-notes/example.html +234 -0
  811. package/dist/__w3kits/assets/design-templates/mobile-app/SKILL.md +102 -0
  812. package/dist/__w3kits/assets/design-templates/mobile-app/assets/template.html +442 -0
  813. package/dist/__w3kits/assets/design-templates/mobile-app/example.html +92 -0
  814. package/dist/__w3kits/assets/design-templates/mobile-app/references/checklist.md +46 -0
  815. package/dist/__w3kits/assets/design-templates/mobile-app/references/layouts.md +312 -0
  816. package/dist/__w3kits/assets/design-templates/mobile-onboarding/SKILL.md +54 -0
  817. package/dist/__w3kits/assets/design-templates/mobile-onboarding/example.html +206 -0
  818. package/dist/__w3kits/assets/design-templates/motion-frames/SKILL.md +90 -0
  819. package/dist/__w3kits/assets/design-templates/motion-frames/example.html +221 -0
  820. package/dist/__w3kits/assets/design-templates/open-design-landing/README.md +119 -0
  821. package/dist/__w3kits/assets/design-templates/open-design-landing/SKILL.md +321 -0
  822. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/about.png +0 -0
  823. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/capabilities.png +0 -0
  824. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/cta.png +0 -0
  825. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/hero.png +0 -0
  826. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/image-manifest.json +168 -0
  827. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/imagegen-prompts.md +246 -0
  828. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/lab-1.png +0 -0
  829. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/lab-2.png +0 -0
  830. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/lab-3.png +0 -0
  831. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/lab-4.png +0 -0
  832. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/lab-5.png +0 -0
  833. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/method-1.png +0 -0
  834. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/method-2.png +0 -0
  835. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/method-3.png +0 -0
  836. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/method-4.png +0 -0
  837. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/testimonial.png +0 -0
  838. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/work-1.png +0 -0
  839. package/dist/__w3kits/assets/design-templates/open-design-landing/assets/work-2.png +0 -0
  840. package/dist/__w3kits/assets/design-templates/open-design-landing/example.html +2645 -0
  841. package/dist/__w3kits/assets/design-templates/open-design-landing/inputs.example.json +365 -0
  842. package/dist/__w3kits/assets/design-templates/open-design-landing/schema.ts +447 -0
  843. package/dist/__w3kits/assets/design-templates/open-design-landing/scripts/compose.ts +821 -0
  844. package/dist/__w3kits/assets/design-templates/open-design-landing/scripts/imagegen.ts +325 -0
  845. package/dist/__w3kits/assets/design-templates/open-design-landing/scripts/placeholder.ts +174 -0
  846. package/dist/__w3kits/assets/design-templates/open-design-landing/styles.css +1858 -0
  847. package/dist/__w3kits/assets/design-templates/open-design-landing-deck/README.md +118 -0
  848. package/dist/__w3kits/assets/design-templates/open-design-landing-deck/SKILL.md +222 -0
  849. package/dist/__w3kits/assets/design-templates/open-design-landing-deck/example.html +2900 -0
  850. package/dist/__w3kits/assets/design-templates/open-design-landing-deck/inputs.example.json +210 -0
  851. package/dist/__w3kits/assets/design-templates/open-design-landing-deck/schema.ts +128 -0
  852. package/dist/__w3kits/assets/design-templates/open-design-landing-deck/scripts/compose.ts +1056 -0
  853. package/dist/__w3kits/assets/design-templates/orbit-general/SKILL.md +203 -0
  854. package/dist/__w3kits/assets/design-templates/orbit-general/example.html +1302 -0
  855. package/dist/__w3kits/assets/design-templates/orbit-github/SKILL.md +167 -0
  856. package/dist/__w3kits/assets/design-templates/orbit-github/example.html +770 -0
  857. package/dist/__w3kits/assets/design-templates/orbit-gmail/SKILL.md +170 -0
  858. package/dist/__w3kits/assets/design-templates/orbit-gmail/example.html +643 -0
  859. package/dist/__w3kits/assets/design-templates/orbit-linear/SKILL.md +177 -0
  860. package/dist/__w3kits/assets/design-templates/orbit-linear/example.html +571 -0
  861. package/dist/__w3kits/assets/design-templates/orbit-notion/SKILL.md +186 -0
  862. package/dist/__w3kits/assets/design-templates/orbit-notion/example.html +529 -0
  863. package/dist/__w3kits/assets/design-templates/pm-spec/SKILL.md +52 -0
  864. package/dist/__w3kits/assets/design-templates/pm-spec/example.html +248 -0
  865. package/dist/__w3kits/assets/design-templates/pricing-page/SKILL.md +79 -0
  866. package/dist/__w3kits/assets/design-templates/pricing-page/example.html +127 -0
  867. package/dist/__w3kits/assets/design-templates/replit-deck/SKILL.md +233 -0
  868. package/dist/__w3kits/assets/design-templates/replit-deck/assets/template.html +488 -0
  869. package/dist/__w3kits/assets/design-templates/replit-deck/examples/README.md +18 -0
  870. package/dist/__w3kits/assets/design-templates/replit-deck/examples/example-atlas.html +499 -0
  871. package/dist/__w3kits/assets/design-templates/replit-deck/examples/example-bluehouse.html +495 -0
  872. package/dist/__w3kits/assets/design-templates/replit-deck/examples/example-helix.html +480 -0
  873. package/dist/__w3kits/assets/design-templates/replit-deck/examples/example-holm.html +513 -0
  874. package/dist/__w3kits/assets/design-templates/replit-deck/references/checklist.md +112 -0
  875. package/dist/__w3kits/assets/design-templates/replit-deck/references/components.md +143 -0
  876. package/dist/__w3kits/assets/design-templates/replit-deck/references/layouts.md +457 -0
  877. package/dist/__w3kits/assets/design-templates/replit-deck/references/themes.md +326 -0
  878. package/dist/__w3kits/assets/design-templates/saas-landing/SKILL.md +124 -0
  879. package/dist/__w3kits/assets/design-templates/saas-landing/example.html +153 -0
  880. package/dist/__w3kits/assets/design-templates/simple-deck/SKILL.md +120 -0
  881. package/dist/__w3kits/assets/design-templates/simple-deck/assets/template.html +353 -0
  882. package/dist/__w3kits/assets/design-templates/simple-deck/example.html +141 -0
  883. package/dist/__w3kits/assets/design-templates/simple-deck/references/checklist.md +55 -0
  884. package/dist/__w3kits/assets/design-templates/simple-deck/references/layouts.md +201 -0
  885. package/dist/__w3kits/assets/design-templates/social-carousel/SKILL.md +92 -0
  886. package/dist/__w3kits/assets/design-templates/social-carousel/example.html +219 -0
  887. package/dist/__w3kits/assets/design-templates/social-media-dashboard/.preview/hero.png +0 -0
  888. package/dist/__w3kits/assets/design-templates/social-media-dashboard/SKILL.md +118 -0
  889. package/dist/__w3kits/assets/design-templates/social-media-dashboard/example.html +1534 -0
  890. package/dist/__w3kits/assets/design-templates/social-media-matrix-tracker-template/SKILL.md +107 -0
  891. package/dist/__w3kits/assets/design-templates/social-media-matrix-tracker-template/assets/template.html +1258 -0
  892. package/dist/__w3kits/assets/design-templates/social-media-matrix-tracker-template/example.html +1258 -0
  893. package/dist/__w3kits/assets/design-templates/social-media-matrix-tracker-template/references/checklist.md +25 -0
  894. package/dist/__w3kits/assets/design-templates/sprite-animation/SKILL.md +95 -0
  895. package/dist/__w3kits/assets/design-templates/sprite-animation/example.html +271 -0
  896. package/dist/__w3kits/assets/design-templates/team-okrs/SKILL.md +47 -0
  897. package/dist/__w3kits/assets/design-templates/team-okrs/example.html +207 -0
  898. package/dist/__w3kits/assets/design-templates/trading-analysis-dashboard-template/SKILL.md +78 -0
  899. package/dist/__w3kits/assets/design-templates/trading-analysis-dashboard-template/assets/template.html +284 -0
  900. package/dist/__w3kits/assets/design-templates/trading-analysis-dashboard-template/example.html +22 -0
  901. package/dist/__w3kits/assets/design-templates/trading-analysis-dashboard-template/references/checklist.md +32 -0
  902. package/dist/__w3kits/assets/design-templates/tweaks/SKILL.md +240 -0
  903. package/dist/__w3kits/assets/design-templates/tweaks/assets/wrap.html +437 -0
  904. package/dist/__w3kits/assets/design-templates/tweaks/example.html +750 -0
  905. package/dist/__w3kits/assets/design-templates/video-shortform/SKILL.md +128 -0
  906. package/dist/__w3kits/assets/design-templates/video-shortform/example.html +90 -0
  907. package/dist/__w3kits/assets/design-templates/waitlist-page/SKILL.md +229 -0
  908. package/dist/__w3kits/assets/design-templates/waitlist-page/assets/template.html +457 -0
  909. package/dist/__w3kits/assets/design-templates/waitlist-page/example.html +400 -0
  910. package/dist/__w3kits/assets/design-templates/waitlist-page/references/checklist.md +42 -0
  911. package/dist/__w3kits/assets/design-templates/web-prototype/SKILL.md +97 -0
  912. package/dist/__w3kits/assets/design-templates/web-prototype/assets/template.html +338 -0
  913. package/dist/__w3kits/assets/design-templates/web-prototype/example.html +81 -0
  914. package/dist/__w3kits/assets/design-templates/web-prototype/references/checklist.md +44 -0
  915. package/dist/__w3kits/assets/design-templates/web-prototype/references/layouts.md +247 -0
  916. package/dist/__w3kits/assets/design-templates/web-prototype-taste-brutalist/SKILL.md +61 -0
  917. package/dist/__w3kits/assets/design-templates/web-prototype-taste-brutalist/example.html +449 -0
  918. package/dist/__w3kits/assets/design-templates/web-prototype-taste-editorial/SKILL.md +60 -0
  919. package/dist/__w3kits/assets/design-templates/web-prototype-taste-editorial/example.html +392 -0
  920. package/dist/__w3kits/assets/design-templates/web-prototype-taste-soft/SKILL.md +63 -0
  921. package/dist/__w3kits/assets/design-templates/web-prototype-taste-soft/example.html +542 -0
  922. package/dist/__w3kits/assets/design-templates/weekly-update/SKILL.md +50 -0
  923. package/dist/__w3kits/assets/design-templates/weekly-update/example.html +320 -0
  924. package/dist/__w3kits/assets/design-templates/wireframe-sketch/SKILL.md +97 -0
  925. package/dist/__w3kits/assets/design-templates/wireframe-sketch/example.html +256 -0
  926. package/dist/__w3kits/assets/design-templates/x-research/SKILL.md +116 -0
  927. package/dist/__w3kits/assets/skills/8-bit-orbit-video-template/SKILL.md +73 -0
  928. package/dist/__w3kits/assets/skills/8-bit-orbit-video-template/assets/default-showcase.mp4 +0 -0
  929. package/dist/__w3kits/assets/skills/8-bit-orbit-video-template/assets/template.html +506 -0
  930. package/dist/__w3kits/assets/skills/8-bit-orbit-video-template/example.html +43 -0
  931. package/dist/__w3kits/assets/skills/8-bit-orbit-video-template/references/checklist.md +21 -0
  932. package/dist/__w3kits/assets/skills/AGENTS.md +54 -0
  933. package/dist/__w3kits/assets/skills/README.md +25 -0
  934. package/dist/__w3kits/assets/skills/ad-creative/SKILL.md +43 -0
  935. package/dist/__w3kits/assets/skills/after-hours-editorial-template/SKILL.md +79 -0
  936. package/dist/__w3kits/assets/skills/after-hours-editorial-template/assets/template.html +173 -0
  937. package/dist/__w3kits/assets/skills/after-hours-editorial-template/example.html +12 -0
  938. package/dist/__w3kits/assets/skills/after-hours-editorial-template/references/checklist.md +25 -0
  939. package/dist/__w3kits/assets/skills/agent-browser/SKILL.md +193 -0
  940. package/dist/__w3kits/assets/skills/ai-music-album/SKILL.md +43 -0
  941. package/dist/__w3kits/assets/skills/algorithmic-art/SKILL.md +44 -0
  942. package/dist/__w3kits/assets/skills/apple-hig/SKILL.md +43 -0
  943. package/dist/__w3kits/assets/skills/artifacts-builder/SKILL.md +42 -0
  944. package/dist/__w3kits/assets/skills/brainstorming/SKILL.md +43 -0
  945. package/dist/__w3kits/assets/skills/brand-guidelines/SKILL.md +42 -0
  946. package/dist/__w3kits/assets/skills/canvas-design/SKILL.md +45 -0
  947. package/dist/__w3kits/assets/skills/color-expert/SKILL.md +43 -0
  948. package/dist/__w3kits/assets/skills/competitive-ads-extractor/SKILL.md +42 -0
  949. package/dist/__w3kits/assets/skills/copywriting/SKILL.md +43 -0
  950. package/dist/__w3kits/assets/skills/creative-director/SKILL.md +43 -0
  951. package/dist/__w3kits/assets/skills/d3-visualization/SKILL.md +43 -0
  952. package/dist/__w3kits/assets/skills/design-brief/SKILL.md +252 -0
  953. package/dist/__w3kits/assets/skills/design-consultation/SKILL.md +42 -0
  954. package/dist/__w3kits/assets/skills/design-md/SKILL.md +42 -0
  955. package/dist/__w3kits/assets/skills/design-review/SKILL.md +42 -0
  956. package/dist/__w3kits/assets/skills/digits-fintech-swiss-template/SKILL.md +68 -0
  957. package/dist/__w3kits/assets/skills/digits-fintech-swiss-template/assets/template.html +111 -0
  958. package/dist/__w3kits/assets/skills/digits-fintech-swiss-template/example.html +44 -0
  959. package/dist/__w3kits/assets/skills/digits-fintech-swiss-template/references/checklist.md +23 -0
  960. package/dist/__w3kits/assets/skills/doc/SKILL.md +42 -0
  961. package/dist/__w3kits/assets/skills/docx/SKILL.md +43 -0
  962. package/dist/__w3kits/assets/skills/domain-name-brainstormer/SKILL.md +43 -0
  963. package/dist/__w3kits/assets/skills/editorial-burgundy-principles-template/SKILL.md +71 -0
  964. package/dist/__w3kits/assets/skills/editorial-burgundy-principles-template/assets/template.html +94 -0
  965. package/dist/__w3kits/assets/skills/editorial-burgundy-principles-template/example.html +49 -0
  966. package/dist/__w3kits/assets/skills/editorial-burgundy-principles-template/references/checklist.md +22 -0
  967. package/dist/__w3kits/assets/skills/enhance-prompt/SKILL.md +42 -0
  968. package/dist/__w3kits/assets/skills/fal-3d/SKILL.md +43 -0
  969. package/dist/__w3kits/assets/skills/fal-generate/SKILL.md +43 -0
  970. package/dist/__w3kits/assets/skills/fal-image-edit/SKILL.md +43 -0
  971. package/dist/__w3kits/assets/skills/fal-kling-o3/SKILL.md +42 -0
  972. package/dist/__w3kits/assets/skills/fal-lip-sync/SKILL.md +43 -0
  973. package/dist/__w3kits/assets/skills/fal-realtime/SKILL.md +42 -0
  974. package/dist/__w3kits/assets/skills/fal-restore/SKILL.md +44 -0
  975. package/dist/__w3kits/assets/skills/fal-train/SKILL.md +43 -0
  976. package/dist/__w3kits/assets/skills/fal-tryon/SKILL.md +43 -0
  977. package/dist/__w3kits/assets/skills/fal-upscale/SKILL.md +43 -0
  978. package/dist/__w3kits/assets/skills/fal-video-edit/SKILL.md +43 -0
  979. package/dist/__w3kits/assets/skills/fal-vision/SKILL.md +44 -0
  980. package/dist/__w3kits/assets/skills/faq-page/SKILL.md +113 -0
  981. package/dist/__w3kits/assets/skills/faq-page/example.html +517 -0
  982. package/dist/__w3kits/assets/skills/field-notes-editorial-template/SKILL.md +78 -0
  983. package/dist/__w3kits/assets/skills/field-notes-editorial-template/assets/template.html +287 -0
  984. package/dist/__w3kits/assets/skills/field-notes-editorial-template/example.html +138 -0
  985. package/dist/__w3kits/assets/skills/field-notes-editorial-template/references/checklist.md +28 -0
  986. package/dist/__w3kits/assets/skills/figma-code-connect-components/SKILL.md +42 -0
  987. package/dist/__w3kits/assets/skills/figma-create-design-system-rules/SKILL.md +42 -0
  988. package/dist/__w3kits/assets/skills/figma-create-new-file/SKILL.md +41 -0
  989. package/dist/__w3kits/assets/skills/figma-generate-design/SKILL.md +42 -0
  990. package/dist/__w3kits/assets/skills/figma-generate-library/SKILL.md +42 -0
  991. package/dist/__w3kits/assets/skills/figma-implement-design/SKILL.md +42 -0
  992. package/dist/__w3kits/assets/skills/figma-use/SKILL.md +42 -0
  993. package/dist/__w3kits/assets/skills/flutter-animating-apps/SKILL.md +42 -0
  994. package/dist/__w3kits/assets/skills/frontend-design/SKILL.md +43 -0
  995. package/dist/__w3kits/assets/skills/frontend-dev/SKILL.md +43 -0
  996. package/dist/__w3kits/assets/skills/frontend-skill/SKILL.md +42 -0
  997. package/dist/__w3kits/assets/skills/frontend-slides/SKILL.md +43 -0
  998. package/dist/__w3kits/assets/skills/full-page-screenshot/SKILL.md +42 -0
  999. package/dist/__w3kits/assets/skills/gif-sticker-maker/SKILL.md +43 -0
  1000. package/dist/__w3kits/assets/skills/gsap-core/SKILL.md +43 -0
  1001. package/dist/__w3kits/assets/skills/gsap-react/SKILL.md +43 -0
  1002. package/dist/__w3kits/assets/skills/gsap-scrolltrigger/SKILL.md +43 -0
  1003. package/dist/__w3kits/assets/skills/gsap-timeline/SKILL.md +42 -0
  1004. package/dist/__w3kits/assets/skills/hand-drawn-diagrams/SKILL.md +42 -0
  1005. package/dist/__w3kits/assets/skills/hatch-pet/LICENSE.txt +201 -0
  1006. package/dist/__w3kits/assets/skills/hatch-pet/README.md +56 -0
  1007. package/dist/__w3kits/assets/skills/hatch-pet/SKILL.md +355 -0
  1008. package/dist/__w3kits/assets/skills/hatch-pet/agents/openai.yaml +4 -0
  1009. package/dist/__w3kits/assets/skills/hatch-pet/references/animation-rows.md +29 -0
  1010. package/dist/__w3kits/assets/skills/hatch-pet/references/codex-pet-contract.md +35 -0
  1011. package/dist/__w3kits/assets/skills/hatch-pet/references/qa-rubric.md +60 -0
  1012. package/dist/__w3kits/assets/skills/hatch-pet/scripts/compose_atlas.py +150 -0
  1013. package/dist/__w3kits/assets/skills/hatch-pet/scripts/derive_running_left_from_running_right.py +143 -0
  1014. package/dist/__w3kits/assets/skills/hatch-pet/scripts/extract_strip_frames.py +323 -0
  1015. package/dist/__w3kits/assets/skills/hatch-pet/scripts/finalize_pet_run.py +382 -0
  1016. package/dist/__w3kits/assets/skills/hatch-pet/scripts/generate_pet_images.py +295 -0
  1017. package/dist/__w3kits/assets/skills/hatch-pet/scripts/inspect_frames.py +246 -0
  1018. package/dist/__w3kits/assets/skills/hatch-pet/scripts/make_contact_sheet.py +96 -0
  1019. package/dist/__w3kits/assets/skills/hatch-pet/scripts/package_custom_pet.py +108 -0
  1020. package/dist/__w3kits/assets/skills/hatch-pet/scripts/pet_job_status.py +117 -0
  1021. package/dist/__w3kits/assets/skills/hatch-pet/scripts/prepare_pet_run.py +674 -0
  1022. package/dist/__w3kits/assets/skills/hatch-pet/scripts/queue_pet_repairs.py +172 -0
  1023. package/dist/__w3kits/assets/skills/hatch-pet/scripts/record_imagegen_result.py +250 -0
  1024. package/dist/__w3kits/assets/skills/hatch-pet/scripts/render_animation_videos.py +134 -0
  1025. package/dist/__w3kits/assets/skills/hatch-pet/scripts/render_animation_videos.sh +5 -0
  1026. package/dist/__w3kits/assets/skills/hatch-pet/scripts/test_generate_pet_images.py +136 -0
  1027. package/dist/__w3kits/assets/skills/hatch-pet/scripts/validate_atlas.py +139 -0
  1028. package/dist/__w3kits/assets/skills/html-ppt-retro-quarterly-review/SKILL.md +79 -0
  1029. package/dist/__w3kits/assets/skills/html-ppt-retro-quarterly-review/assets/template.html +164 -0
  1030. package/dist/__w3kits/assets/skills/html-ppt-retro-quarterly-review/example.html +139 -0
  1031. package/dist/__w3kits/assets/skills/html-ppt-retro-quarterly-review/references/checklist.md +23 -0
  1032. package/dist/__w3kits/assets/skills/image-enhancer/SKILL.md +43 -0
  1033. package/dist/__w3kits/assets/skills/imagegen/SKILL.md +44 -0
  1034. package/dist/__w3kits/assets/skills/imagen/SKILL.md +43 -0
  1035. package/dist/__w3kits/assets/skills/login-flow/SKILL.md +48 -0
  1036. package/dist/__w3kits/assets/skills/login-flow/example.html +362 -0
  1037. package/dist/__w3kits/assets/skills/login-flow/references/checklist.md +19 -0
  1038. package/dist/__w3kits/assets/skills/marketing-psychology/SKILL.md +43 -0
  1039. package/dist/__w3kits/assets/skills/minimax-docx/SKILL.md +43 -0
  1040. package/dist/__w3kits/assets/skills/minimax-pdf/SKILL.md +43 -0
  1041. package/dist/__w3kits/assets/skills/nanobanana-ppt/SKILL.md +43 -0
  1042. package/dist/__w3kits/assets/skills/paywall-upgrade-cro/SKILL.md +43 -0
  1043. package/dist/__w3kits/assets/skills/pdf/SKILL.md +43 -0
  1044. package/dist/__w3kits/assets/skills/pixelbin-media/SKILL.md +43 -0
  1045. package/dist/__w3kits/assets/skills/plan-design-review/SKILL.md +42 -0
  1046. package/dist/__w3kits/assets/skills/platform-design/SKILL.md +43 -0
  1047. package/dist/__w3kits/assets/skills/pptx/SKILL.md +43 -0
  1048. package/dist/__w3kits/assets/skills/pptx-generator/SKILL.md +42 -0
  1049. package/dist/__w3kits/assets/skills/pptx-html-fidelity-audit/SKILL.md +254 -0
  1050. package/dist/__w3kits/assets/skills/pptx-html-fidelity-audit/references/audit-table-template.md +58 -0
  1051. package/dist/__w3kits/assets/skills/pptx-html-fidelity-audit/references/font-discipline.md +363 -0
  1052. package/dist/__w3kits/assets/skills/pptx-html-fidelity-audit/references/layout-discipline.md +371 -0
  1053. package/dist/__w3kits/assets/skills/pptx-html-fidelity-audit/scripts/extract_pptx.py +134 -0
  1054. package/dist/__w3kits/assets/skills/pptx-html-fidelity-audit/scripts/verify_layout.py +144 -0
  1055. package/dist/__w3kits/assets/skills/release-notes-one-pager/SKILL.md +107 -0
  1056. package/dist/__w3kits/assets/skills/release-notes-one-pager/assets/template.html +342 -0
  1057. package/dist/__w3kits/assets/skills/release-notes-one-pager/example.html +156 -0
  1058. package/dist/__w3kits/assets/skills/release-notes-one-pager/references/checklist.md +41 -0
  1059. package/dist/__w3kits/assets/skills/release-notes-one-pager/references/layouts.md +299 -0
  1060. package/dist/__w3kits/assets/skills/remotion/SKILL.md +43 -0
  1061. package/dist/__w3kits/assets/skills/replicate/SKILL.md +42 -0
  1062. package/dist/__w3kits/assets/skills/screenshot/SKILL.md +42 -0
  1063. package/dist/__w3kits/assets/skills/screenshots-marketing/SKILL.md +42 -0
  1064. package/dist/__w3kits/assets/skills/shadcn-ui/SKILL.md +42 -0
  1065. package/dist/__w3kits/assets/skills/shader-dev/SKILL.md +43 -0
  1066. package/dist/__w3kits/assets/skills/slack-gif-creator/SKILL.md +42 -0
  1067. package/dist/__w3kits/assets/skills/slides/SKILL.md +42 -0
  1068. package/dist/__w3kits/assets/skills/sora/SKILL.md +43 -0
  1069. package/dist/__w3kits/assets/skills/speech/SKILL.md +42 -0
  1070. package/dist/__w3kits/assets/skills/stitch-loop/SKILL.md +42 -0
  1071. package/dist/__w3kits/assets/skills/swiftui-design/SKILL.md +43 -0
  1072. package/dist/__w3kits/assets/skills/swiss-creative-mode-template/SKILL.md +79 -0
  1073. package/dist/__w3kits/assets/skills/swiss-creative-mode-template/assets/template.html +375 -0
  1074. package/dist/__w3kits/assets/skills/swiss-creative-mode-template/example.html +70 -0
  1075. package/dist/__w3kits/assets/skills/swiss-creative-mode-template/references/checklist.md +33 -0
  1076. package/dist/__w3kits/assets/skills/swiss-user-research-video-template/SKILL.md +81 -0
  1077. package/dist/__w3kits/assets/skills/swiss-user-research-video-template/assets/template.html +265 -0
  1078. package/dist/__w3kits/assets/skills/swiss-user-research-video-template/example.html +265 -0
  1079. package/dist/__w3kits/assets/skills/swiss-user-research-video-template/references/checklist.md +24 -0
  1080. package/dist/__w3kits/assets/skills/taste-skill/SKILL.md +43 -0
  1081. package/dist/__w3kits/assets/skills/theme-factory/SKILL.md +43 -0
  1082. package/dist/__w3kits/assets/skills/threejs/SKILL.md +43 -0
  1083. package/dist/__w3kits/assets/skills/ui-skills/SKILL.md +42 -0
  1084. package/dist/__w3kits/assets/skills/ui-ux-pro-max/SKILL.md +42 -0
  1085. package/dist/__w3kits/assets/skills/venice-audio-music/SKILL.md +43 -0
  1086. package/dist/__w3kits/assets/skills/venice-audio-speech/SKILL.md +43 -0
  1087. package/dist/__w3kits/assets/skills/venice-image-edit/SKILL.md +41 -0
  1088. package/dist/__w3kits/assets/skills/venice-image-generate/SKILL.md +41 -0
  1089. package/dist/__w3kits/assets/skills/venice-video/SKILL.md +41 -0
  1090. package/dist/__w3kits/assets/skills/video-downloader/SKILL.md +42 -0
  1091. package/dist/__w3kits/assets/skills/web-artifacts-builder/SKILL.md +42 -0
  1092. package/dist/__w3kits/assets/skills/web-design-guidelines/SKILL.md +42 -0
  1093. package/dist/__w3kits/assets/skills/wpds/SKILL.md +42 -0
  1094. package/dist/__w3kits/assets/skills/youtube-clipper/SKILL.md +42 -0
  1095. package/dist/__w3kits/daemon-proxy-sw.js +45 -0
  1096. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/acp.d.ts +59 -0
  1097. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/acp.js +595 -0
  1098. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/acp.js.map +1 -0
  1099. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/active-context-routes.d.ts +5 -0
  1100. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/active-context-routes.js +64 -0
  1101. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/active-context-routes.js.map +1 -0
  1102. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/agents.d.ts +9 -0
  1103. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/agents.js +11 -0
  1104. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/agents.js.map +1 -0
  1105. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/analytics.d.ts +32 -0
  1106. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/analytics.js +140 -0
  1107. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/analytics.js.map +1 -0
  1108. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/app-config.d.ts +34 -0
  1109. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/app-config.js +305 -0
  1110. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/app-config.js.map +1 -0
  1111. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/app-version.d.ts +26 -0
  1112. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/app-version.js +94 -0
  1113. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/app-version.js.map +1 -0
  1114. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/artifact-manifest.d.ts +13 -0
  1115. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/artifact-manifest.js +244 -0
  1116. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/artifact-manifest.js.map +1 -0
  1117. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/artifact-stub-guard.d.ts +50 -0
  1118. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/artifact-stub-guard.js +252 -0
  1119. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/artifact-stub-guard.js.map +1 -0
  1120. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/browser-open.d.ts +16 -0
  1121. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/browser-open.js +57 -0
  1122. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/browser-open.js.map +1 -0
  1123. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/chat-routes.d.ts +5 -0
  1124. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/chat-routes.js +983 -0
  1125. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/chat-routes.js.map +1 -0
  1126. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-design-import.d.ts +4 -0
  1127. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-design-import.js +217 -0
  1128. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-design-import.js.map +1 -0
  1129. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-diagnostics.d.ts +14 -0
  1130. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-diagnostics.js +96 -0
  1131. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-diagnostics.js.map +1 -0
  1132. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-stream.d.ts +27 -0
  1133. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-stream.js +255 -0
  1134. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/claude-stream.js.map +1 -0
  1135. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/cli.d.ts +2 -0
  1136. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/cli.js +681 -0
  1137. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/cli.js.map +1 -0
  1138. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/codex-pets.d.ts +26 -0
  1139. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/codex-pets.js +234 -0
  1140. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/codex-pets.js.map +1 -0
  1141. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/community-pets-sync.d.ts +15 -0
  1142. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/community-pets-sync.js +233 -0
  1143. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/community-pets-sync.js.map +1 -0
  1144. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectionTest.d.ts +31 -0
  1145. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectionTest.js +1252 -0
  1146. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectionTest.js.map +1 -0
  1147. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/catalog.d.ts +121 -0
  1148. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/catalog.js +102 -0
  1149. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/catalog.js.map +1 -0
  1150. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-config.d.ts +14 -0
  1151. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-config.js +101 -0
  1152. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-config.js.map +1 -0
  1153. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-curation.d.ts +2 -0
  1154. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-curation.js +120 -0
  1155. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-curation.js.map +1 -0
  1156. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-descriptions.d.ts +15 -0
  1157. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-descriptions.js +765 -0
  1158. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio-descriptions.js.map +1 -0
  1159. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio.d.ts +114 -0
  1160. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio.js +1328 -0
  1161. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/composio.js.map +1 -0
  1162. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/routes.d.ts +23 -0
  1163. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/routes.js +735 -0
  1164. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/routes.js.map +1 -0
  1165. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/service.d.ts +173 -0
  1166. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/service.js +714 -0
  1167. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/connectors/service.js.map +1 -0
  1168. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/constants.d.ts +1 -0
  1169. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/constants.js +2 -0
  1170. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/constants.js.map +1 -0
  1171. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/copilot-stream.d.ts +29 -0
  1172. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/copilot-stream.js +129 -0
  1173. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/copilot-stream.js.map +1 -0
  1174. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/craft.d.ts +11 -0
  1175. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/craft.js +47 -0
  1176. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/craft.js.map +1 -0
  1177. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/adapters/synthetic-bad.d.ts +20 -0
  1178. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/adapters/synthetic-bad.js +30 -0
  1179. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/adapters/synthetic-bad.js.map +1 -0
  1180. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/adapters/synthetic-good.d.ts +42 -0
  1181. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/adapters/synthetic-good.js +52 -0
  1182. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/adapters/synthetic-good.js.map +1 -0
  1183. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/run-nightly.d.ts +24 -0
  1184. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/run-nightly.js +90 -0
  1185. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/__fixtures__/run-nightly.js.map +1 -0
  1186. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/adapter-degraded.d.ts +69 -0
  1187. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/adapter-degraded.js +110 -0
  1188. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/adapter-degraded.js.map +1 -0
  1189. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/artifact-handler.d.ts +24 -0
  1190. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/artifact-handler.js +195 -0
  1191. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/artifact-handler.js.map +1 -0
  1192. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/artifact-writer.d.ts +79 -0
  1193. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/artifact-writer.js +142 -0
  1194. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/artifact-writer.js.map +1 -0
  1195. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/config.d.ts +10 -0
  1196. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/config.js +72 -0
  1197. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/config.js.map +1 -0
  1198. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/conformance-history.d.ts +48 -0
  1199. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/conformance-history.js +119 -0
  1200. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/conformance-history.js.map +1 -0
  1201. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/conformance.d.ts +103 -0
  1202. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/conformance.js +190 -0
  1203. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/conformance.js.map +1 -0
  1204. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/errors.d.ts +11 -0
  1205. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/errors.js +23 -0
  1206. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/errors.js.map +1 -0
  1207. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/interrupt-handler.d.ts +20 -0
  1208. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/interrupt-handler.js +110 -0
  1209. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/interrupt-handler.js.map +1 -0
  1210. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/orchestrator.d.ts +72 -0
  1211. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/orchestrator.js +806 -0
  1212. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/orchestrator.js.map +1 -0
  1213. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/parser.d.ts +34 -0
  1214. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/parser.js +7 -0
  1215. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/parser.js.map +1 -0
  1216. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/parsers/v1.d.ts +48 -0
  1217. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/parsers/v1.js +526 -0
  1218. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/parsers/v1.js.map +1 -0
  1219. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/persistence.d.ts +101 -0
  1220. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/persistence.js +238 -0
  1221. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/persistence.js.map +1 -0
  1222. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/ratchet.d.ts +100 -0
  1223. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/ratchet.js +192 -0
  1224. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/ratchet.js.map +1 -0
  1225. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/rollout.d.ts +93 -0
  1226. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/rollout.js +125 -0
  1227. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/rollout.js.map +1 -0
  1228. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/run-registry.d.ts +59 -0
  1229. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/run-registry.js +58 -0
  1230. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/run-registry.js.map +1 -0
  1231. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/scoreboard.d.ts +39 -0
  1232. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/scoreboard.js +62 -0
  1233. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/scoreboard.js.map +1 -0
  1234. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/spawn-inputs.d.ts +33 -0
  1235. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/spawn-inputs.js +40 -0
  1236. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/spawn-inputs.js.map +1 -0
  1237. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/transcript.d.ts +30 -0
  1238. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/transcript.js +153 -0
  1239. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/critique/transcript.js.map +1 -0
  1240. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/cwd-aliases.d.ts +22 -0
  1241. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/cwd-aliases.js +131 -0
  1242. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/cwd-aliases.js.map +1 -0
  1243. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/db.d.ts +449 -0
  1244. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/db.js +1142 -0
  1245. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/db.js.map +1 -0
  1246. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/deploy-routes.d.ts +8 -0
  1247. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/deploy-routes.js +201 -0
  1248. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/deploy-routes.js.map +1 -0
  1249. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/deploy.d.ts +288 -0
  1250. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/deploy.js +1816 -0
  1251. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/deploy.js.map +1 -0
  1252. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-system-preview.d.ts +12 -0
  1253. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-system-preview.js +603 -0
  1254. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-system-preview.js.map +1 -0
  1255. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-system-showcase.d.ts +18 -0
  1256. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-system-showcase.js +844 -0
  1257. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-system-showcase.js.map +1 -0
  1258. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-systems.d.ts +73 -0
  1259. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-systems.js +266 -0
  1260. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/design-systems.js.map +1 -0
  1261. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/document-preview.d.ts +26 -0
  1262. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/document-preview.js +286 -0
  1263. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/document-preview.js.map +1 -0
  1264. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/elevenlabs-voices.d.ts +10 -0
  1265. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/elevenlabs-voices.js +108 -0
  1266. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/elevenlabs-voices.js.map +1 -0
  1267. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/finalize-design.d.ts +151 -0
  1268. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/finalize-design.js +547 -0
  1269. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/finalize-design.js.map +1 -0
  1270. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/frontmatter.d.ts +10 -0
  1271. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/frontmatter.js +155 -0
  1272. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/frontmatter.js.map +1 -0
  1273. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/home-expansion.d.ts +2 -0
  1274. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/home-expansion.js +39 -0
  1275. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/home-expansion.js.map +1 -0
  1276. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/import-export-routes.d.ts +11 -0
  1277. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/import-export-routes.js +482 -0
  1278. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/import-export-routes.js.map +1 -0
  1279. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/inline-assets.d.ts +50 -0
  1280. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/inline-assets.js +332 -0
  1281. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/inline-assets.js.map +1 -0
  1282. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/json-event-stream.d.ts +8 -0
  1283. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/json-event-stream.js +405 -0
  1284. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/json-event-stream.js.map +1 -0
  1285. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/langfuse-bridge.d.ts +35 -0
  1286. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/langfuse-bridge.js +273 -0
  1287. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/langfuse-bridge.js.map +1 -0
  1288. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/langfuse-trace.d.ts +110 -0
  1289. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/langfuse-trace.js +479 -0
  1290. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/langfuse-trace.js.map +1 -0
  1291. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/legacy-data-migrator.d.ts +90 -0
  1292. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/legacy-data-migrator.js +340 -0
  1293. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/legacy-data-migrator.js.map +1 -0
  1294. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/library-install.d.ts +36 -0
  1295. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/library-install.js +174 -0
  1296. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/library-install.js.map +1 -0
  1297. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/linked-dirs.d.ts +8 -0
  1298. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/linked-dirs.js +62 -0
  1299. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/linked-dirs.js.map +1 -0
  1300. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/lint-artifact.d.ts +44 -0
  1301. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/lint-artifact.js +952 -0
  1302. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/lint-artifact.js.map +1 -0
  1303. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifact-routes.d.ts +5 -0
  1304. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifact-routes.js +305 -0
  1305. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifact-routes.js.map +1 -0
  1306. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/refresh-service.d.ts +23 -0
  1307. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/refresh-service.js +178 -0
  1308. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/refresh-service.js.map +1 -0
  1309. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/refresh.d.ts +92 -0
  1310. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/refresh.js +641 -0
  1311. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/refresh.js.map +1 -0
  1312. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/render.d.ts +15 -0
  1313. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/render.js +68 -0
  1314. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/render.js.map +1 -0
  1315. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/schema.d.ts +144 -0
  1316. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/schema.js +702 -0
  1317. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/schema.js.map +1 -0
  1318. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/store.d.ts +214 -0
  1319. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/store.js +1002 -0
  1320. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/live-artifacts/store.js.map +1 -0
  1321. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/logging/critique.d.ts +57 -0
  1322. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/logging/critique.js +30 -0
  1323. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/logging/critique.js.map +1 -0
  1324. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-config.d.ts +88 -0
  1325. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-config.js +878 -0
  1326. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-config.js.map +1 -0
  1327. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-daemon-url.d.ts +22 -0
  1328. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-daemon-url.js +44 -0
  1329. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-daemon-url.js.map +1 -0
  1330. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-install-info.d.ts +29 -0
  1331. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-install-info.js +60 -0
  1332. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-install-info.js.map +1 -0
  1333. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-live-artifacts-server.d.ts +19 -0
  1334. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-live-artifacts-server.js +238 -0
  1335. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-live-artifacts-server.js.map +1 -0
  1336. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-oauth.d.ts +155 -0
  1337. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-oauth.js +412 -0
  1338. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-oauth.js.map +1 -0
  1339. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-routes.d.ts +5 -0
  1340. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-routes.js +365 -0
  1341. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-routes.js.map +1 -0
  1342. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-tokens.d.ts +59 -0
  1343. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-tokens.js +189 -0
  1344. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp-tokens.js.map +1 -0
  1345. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp.d.ts +52 -0
  1346. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp.js +847 -0
  1347. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/mcp.js.map +1 -0
  1348. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-config.d.ts +69 -0
  1349. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-config.js +408 -0
  1350. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-config.js.map +1 -0
  1351. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-models.d.ts +31 -0
  1352. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-models.js +136 -0
  1353. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-models.js.map +1 -0
  1354. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-routes.d.ts +5 -0
  1355. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-routes.js +316 -0
  1356. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-routes.js.map +1 -0
  1357. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-tasks.d.ts +65 -0
  1358. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-tasks.js +199 -0
  1359. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media-tasks.js.map +1 -0
  1360. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media.d.ts +56 -0
  1361. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media.js +2065 -0
  1362. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/media.js.map +1 -0
  1363. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory-extractions.d.ts +26 -0
  1364. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory-extractions.js +233 -0
  1365. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory-extractions.js.map +1 -0
  1366. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory-llm.d.ts +7 -0
  1367. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory-llm.js +809 -0
  1368. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory-llm.js.map +1 -0
  1369. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory.d.ts +70 -0
  1370. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory.js +654 -0
  1371. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/memory.js.map +1 -0
  1372. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/metrics/index.d.ts +51 -0
  1373. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/metrics/index.js +111 -0
  1374. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/metrics/index.js.map +1 -0
  1375. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/native-folder-dialog.d.ts +6 -0
  1376. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/native-folder-dialog.js +32 -0
  1377. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/native-folder-dialog.js.map +1 -0
  1378. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/orbit-agent-summary.d.ts +7 -0
  1379. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/orbit-agent-summary.js +34 -0
  1380. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/orbit-agent-summary.js.map +1 -0
  1381. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/orbit.d.ts +93 -0
  1382. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/orbit.js +400 -0
  1383. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/orbit.js.map +1 -0
  1384. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/origin-validation.d.ts +21 -0
  1385. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/origin-validation.js +149 -0
  1386. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/origin-validation.js.map +1 -0
  1387. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/pdf-export.d.ts +10 -0
  1388. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/pdf-export.js +43 -0
  1389. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/pdf-export.js.map +1 -0
  1390. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/pi-rpc.d.ts +93 -0
  1391. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/pi-rpc.js +475 -0
  1392. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/pi-rpc.js.map +1 -0
  1393. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/project-routes.d.ts +14 -0
  1394. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/project-routes.js +867 -0
  1395. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/project-routes.js.map +1 -0
  1396. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/project-watchers.d.ts +52 -0
  1397. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/project-watchers.js +162 -0
  1398. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/project-watchers.js.map +1 -0
  1399. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/projects.d.ts +90 -0
  1400. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/projects.js +1186 -0
  1401. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/projects.js.map +1 -0
  1402. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompt-templates.d.ts +24 -0
  1403. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompt-templates.js +122 -0
  1404. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompt-templates.js.map +1 -0
  1405. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/deck-framework.d.ts +38 -0
  1406. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/deck-framework.js +373 -0
  1407. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/deck-framework.js.map +1 -0
  1408. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/directions.d.ts +68 -0
  1409. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/directions.js +237 -0
  1410. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/directions.js.map +1 -0
  1411. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/discovery.d.ts +1 -0
  1412. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/discovery.js +262 -0
  1413. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/discovery.js.map +1 -0
  1414. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/media-contract.d.ts +1 -0
  1415. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/media-contract.js +359 -0
  1416. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/media-contract.js.map +1 -0
  1417. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/official-system.d.ts +11 -0
  1418. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/official-system.js +124 -0
  1419. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/official-system.js.map +1 -0
  1420. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/panel.d.ts +48 -0
  1421. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/panel.js +196 -0
  1422. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/panel.js.map +1 -0
  1423. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/research-contract.d.ts +5 -0
  1424. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/research-contract.js +52 -0
  1425. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/research-contract.js.map +1 -0
  1426. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/system.d.ts +97 -0
  1427. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/system.js +598 -0
  1428. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/prompts/system.js.map +1 -0
  1429. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/providerModels.d.ts +6 -0
  1430. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/providerModels.js +284 -0
  1431. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/providerModels.js.map +1 -0
  1432. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/qoder-stream.d.ts +13 -0
  1433. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/qoder-stream.js +162 -0
  1434. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/qoder-stream.js.map +1 -0
  1435. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/redact.d.ts +18 -0
  1436. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/redact.js +179 -0
  1437. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/redact.js.map +1 -0
  1438. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/cli-args.d.ts +5 -0
  1439. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/cli-args.js +11 -0
  1440. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/cli-args.js.map +1 -0
  1441. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/index.d.ts +14 -0
  1442. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/index.js +78 -0
  1443. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/index.js.map +1 -0
  1444. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/tavily.d.ts +19 -0
  1445. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/tavily.js +78 -0
  1446. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/research/tavily.js.map +1 -0
  1447. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/route-context-contract.d.ts +16 -0
  1448. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/route-context-contract.js +4 -0
  1449. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/route-context-contract.js.map +1 -0
  1450. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/routine-routes.d.ts +37 -0
  1451. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/routine-routes.js +212 -0
  1452. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/routine-routes.js.map +1 -0
  1453. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/routines.d.ts +100 -0
  1454. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/routines.js +390 -0
  1455. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/routines.js.map +1 -0
  1456. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runs.d.ts +59 -0
  1457. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runs.js +217 -0
  1458. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runs.js.map +1 -0
  1459. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/auth.d.ts +9 -0
  1460. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/auth.js +58 -0
  1461. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/auth.js.map +1 -0
  1462. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/capabilities.d.ts +2 -0
  1463. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/capabilities.js +2 -0
  1464. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/capabilities.js.map +1 -0
  1465. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/claude.d.ts +17 -0
  1466. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/claude.js +75 -0
  1467. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/claude.js.map +1 -0
  1468. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/codex.d.ts +15 -0
  1469. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/codex.js +82 -0
  1470. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/codex.js.map +1 -0
  1471. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/copilot.d.ts +10 -0
  1472. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/copilot.js +68 -0
  1473. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/copilot.js.map +1 -0
  1474. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/cursor-agent.d.ts +16 -0
  1475. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/cursor-agent.js +46 -0
  1476. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/cursor-agent.js.map +1 -0
  1477. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/deepseek.d.ts +10 -0
  1478. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/deepseek.js +54 -0
  1479. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/deepseek.js.map +1 -0
  1480. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/devin.d.ts +10 -0
  1481. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/devin.js +43 -0
  1482. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/devin.js.map +1 -0
  1483. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/gemini.d.ts +14 -0
  1484. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/gemini.js +37 -0
  1485. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/gemini.js.map +1 -0
  1486. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/hermes.d.ts +11 -0
  1487. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/hermes.js +27 -0
  1488. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/hermes.js.map +1 -0
  1489. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kilo.d.ts +10 -0
  1490. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kilo.js +18 -0
  1491. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kilo.js.map +1 -0
  1492. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kimi.d.ts +11 -0
  1493. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kimi.js +24 -0
  1494. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kimi.js.map +1 -0
  1495. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kiro.d.ts +10 -0
  1496. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kiro.js +18 -0
  1497. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/kiro.js.map +1 -0
  1498. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/opencode.d.ts +18 -0
  1499. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/opencode.js +43 -0
  1500. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/opencode.js.map +1 -0
  1501. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/pi.d.ts +19 -0
  1502. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/pi.js +88 -0
  1503. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/pi.js.map +1 -0
  1504. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/qoder.d.ts +10 -0
  1505. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/qoder.js +49 -0
  1506. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/qoder.js.map +1 -0
  1507. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/qwen.d.ts +10 -0
  1508. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/qwen.js +26 -0
  1509. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/qwen.js.map +1 -0
  1510. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/shared.d.ts +8 -0
  1511. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/shared.js +44 -0
  1512. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/shared.js.map +1 -0
  1513. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/vibe.d.ts +10 -0
  1514. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/vibe.js +18 -0
  1515. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/defs/vibe.js.map +1 -0
  1516. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/detection.d.ts +9 -0
  1517. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/detection.js +180 -0
  1518. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/detection.js.map +1 -0
  1519. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/env.d.ts +3 -0
  1520. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/env.js +38 -0
  1521. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/env.js.map +1 -0
  1522. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/executables.d.ts +8 -0
  1523. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/executables.js +155 -0
  1524. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/executables.js.map +1 -0
  1525. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/invocation.d.ts +5 -0
  1526. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/invocation.js +21 -0
  1527. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/invocation.js.map +1 -0
  1528. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/launch.d.ts +11 -0
  1529. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/launch.js +147 -0
  1530. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/launch.js.map +1 -0
  1531. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/mcp.d.ts +13 -0
  1532. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/mcp.js +13 -0
  1533. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/mcp.js.map +1 -0
  1534. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/metadata.d.ts +4 -0
  1535. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/metadata.js +90 -0
  1536. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/metadata.js.map +1 -0
  1537. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/models.d.ts +5 -0
  1538. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/models.js +43 -0
  1539. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/models.js.map +1 -0
  1540. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/paths.d.ts +2 -0
  1541. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/paths.js +22 -0
  1542. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/paths.js.map +1 -0
  1543. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/prompt-budget.d.ts +4 -0
  1544. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/prompt-budget.js +202 -0
  1545. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/prompt-budget.js.map +1 -0
  1546. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/registry.d.ts +3 -0
  1547. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/registry.js +45 -0
  1548. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/registry.js.map +1 -0
  1549. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/resolution.d.ts +1 -0
  1550. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/resolution.js +13 -0
  1551. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/resolution.js.map +1 -0
  1552. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/types.d.ts +62 -0
  1553. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/types.js +2 -0
  1554. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/runtimes/types.js.map +1 -0
  1555. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/server-context.d.ts +93 -0
  1556. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/server-context.js +2 -0
  1557. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/server-context.js.map +1 -0
  1558. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/server.d.ts +160 -0
  1559. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/server.js +4384 -0
  1560. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/server.js.map +1 -0
  1561. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/sidecar/index.d.ts +1 -0
  1562. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/sidecar/index.js +21 -0
  1563. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/sidecar/index.js.map +1 -0
  1564. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/sidecar/server.d.ts +23 -0
  1565. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/sidecar/server.js +175 -0
  1566. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/sidecar/server.js.map +1 -0
  1567. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/skills.d.ts +100 -0
  1568. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/skills.js +836 -0
  1569. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/skills.js.map +1 -0
  1570. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/static-resource-routes.d.ts +5 -0
  1571. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/static-resource-routes.js +593 -0
  1572. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/static-resource-routes.js.map +1 -0
  1573. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tool-tokens.d.ts +47 -0
  1574. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tool-tokens.js +131 -0
  1575. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tool-tokens.js.map +1 -0
  1576. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools/connectors.d.ts +12 -0
  1577. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools/connectors.js +124 -0
  1578. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools/connectors.js.map +1 -0
  1579. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools-connectors-cli.d.ts +5 -0
  1580. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools-connectors-cli.js +270 -0
  1581. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools-connectors-cli.js.map +1 -0
  1582. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools-live-artifacts-cli.d.ts +5 -0
  1583. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools-live-artifacts-cli.js +282 -0
  1584. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/tools-live-artifacts-cli.js.map +1 -0
  1585. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/transcript-export.d.ts +16 -0
  1586. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/transcript-export.js +388 -0
  1587. package/dist/__w3kits/webcontainer-runtime/apps/daemon/dist/transcript-export.js.map +1 -0
  1588. package/dist/__w3kits/webcontainer-runtime/apps/daemon/package.json +62 -0
  1589. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/browser-vfs/dist/index.d.ts +108 -0
  1590. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/browser-vfs/dist/index.d.ts.map +1 -0
  1591. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/browser-vfs/dist/index.mjs +413 -0
  1592. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/browser-vfs/package.json +12 -0
  1593. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/artifact-id.d.ts +5 -0
  1594. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/artifact-id.d.ts.map +1 -0
  1595. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/events.d.ts +250 -0
  1596. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/events.d.ts.map +1 -0
  1597. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/index.d.ts +4 -0
  1598. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/index.d.ts.map +1 -0
  1599. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/index.mjs +186 -0
  1600. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/public-params.d.ts +26 -0
  1601. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/analytics/public-params.d.ts.map +1 -0
  1602. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/app-config.d.ts +44 -0
  1603. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/app-config.d.ts.map +1 -0
  1604. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/artifacts.d.ts +34 -0
  1605. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/artifacts.d.ts.map +1 -0
  1606. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/chat.d.ts +158 -0
  1607. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/chat.d.ts.map +1 -0
  1608. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/comments.d.ts +65 -0
  1609. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/comments.d.ts.map +1 -0
  1610. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/connectionTest.d.ts +49 -0
  1611. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/connectionTest.d.ts.map +1 -0
  1612. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/connectionTest.mjs +83 -0
  1613. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/connectors.d.ts +133 -0
  1614. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/connectors.d.ts.map +1 -0
  1615. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/files.d.ts +43 -0
  1616. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/files.d.ts.map +1 -0
  1617. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/finalize.d.ts +50 -0
  1618. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/finalize.d.ts.map +1 -0
  1619. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/finalize.mjs +5 -0
  1620. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/live-artifacts.d.ts +151 -0
  1621. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/live-artifacts.d.ts.map +1 -0
  1622. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/mcp.d.ts +117 -0
  1623. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/mcp.d.ts.map +1 -0
  1624. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/memory.d.ts +233 -0
  1625. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/memory.d.ts.map +1 -0
  1626. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/orbit.d.ts +22 -0
  1627. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/orbit.d.ts.map +1 -0
  1628. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/orbit.mjs +0 -0
  1629. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/projects.d.ts +286 -0
  1630. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/projects.d.ts.map +1 -0
  1631. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/providerModels.d.ts +19 -0
  1632. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/providerModels.d.ts.map +1 -0
  1633. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/providerModels.mjs +0 -0
  1634. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/proxy.d.ts +24 -0
  1635. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/proxy.d.ts.map +1 -0
  1636. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/registry.d.ts +156 -0
  1637. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/registry.d.ts.map +1 -0
  1638. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/research.d.ts +35 -0
  1639. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/research.d.ts.map +1 -0
  1640. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/research.mjs +9 -0
  1641. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/routines.d.ts +104 -0
  1642. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/routines.d.ts.map +1 -0
  1643. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/version.d.ts +11 -0
  1644. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/api/version.d.ts.map +1 -0
  1645. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/common.d.ts +33 -0
  1646. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/common.d.ts.map +1 -0
  1647. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/critique.d.ts +344 -0
  1648. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/critique.d.ts.map +1 -0
  1649. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/critique.mjs +182 -0
  1650. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/errors.d.ts +40 -0
  1651. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/errors.d.ts.map +1 -0
  1652. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/examples.d.ts +20 -0
  1653. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/examples.d.ts.map +1 -0
  1654. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/index.d.ts +31 -0
  1655. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/index.d.ts.map +1 -0
  1656. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/index.mjs +2072 -0
  1657. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/deck-framework.d.ts +39 -0
  1658. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/deck-framework.d.ts.map +1 -0
  1659. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/directions.d.ts +69 -0
  1660. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/directions.d.ts.map +1 -0
  1661. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/discovery.d.ts +2 -0
  1662. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/discovery.d.ts.map +1 -0
  1663. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/media-contract.d.ts +2 -0
  1664. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/media-contract.d.ts.map +1 -0
  1665. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/official-system.d.ts +12 -0
  1666. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/official-system.d.ts.map +1 -0
  1667. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/system.d.ts +58 -0
  1668. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/prompts/system.d.ts.map +1 -0
  1669. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/sse/chat.d.ts +96 -0
  1670. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/sse/chat.d.ts.map +1 -0
  1671. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/sse/common.d.ts +8 -0
  1672. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/sse/common.d.ts.map +1 -0
  1673. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/sse/proxy.d.ts +6 -0
  1674. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/sse/proxy.d.ts.map +1 -0
  1675. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/tasks.d.ts +12 -0
  1676. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/dist/tasks.d.ts.map +1 -0
  1677. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/contracts/package.json +40 -0
  1678. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/platform/dist/index.d.ts +68 -0
  1679. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/platform/dist/index.d.ts.map +1 -0
  1680. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/platform/dist/index.mjs +397 -0
  1681. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/platform/package.json +12 -0
  1682. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar/dist/index.d.ts +144 -0
  1683. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar/dist/index.d.ts.map +1 -0
  1684. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar/dist/index.mjs +412 -0
  1685. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar/package.json +12 -0
  1686. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar-proto/dist/index.d.ts +291 -0
  1687. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar-proto/dist/index.d.ts.map +1 -0
  1688. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar-proto/dist/index.mjs +315 -0
  1689. package/dist/__w3kits/webcontainer-runtime/node_modules/@open-design/sidecar-proto/package.json +12 -0
  1690. package/dist/__w3kits/webcontainer-runtime/package.json +20 -0
  1691. package/dist/__w3kits/webcontainer-runtime.json +68 -0
  1692. package/dist/_next/static/chunks/0axqck9-llseo.js +1 -0
  1693. package/dist/_next/static/chunks/0xl644~f.h0hd.js +1 -0
  1694. package/dist/_next/static/chunks/{0kf4c9h~6b0ok.js → 0xykzmwq7w9.b.js} +1 -1
  1695. package/dist/_not-found/__next._full.txt +10 -10
  1696. package/dist/_not-found/__next._head.txt +4 -4
  1697. package/dist/_not-found/__next._index.txt +5 -5
  1698. package/dist/_not-found/__next._not-found.__PAGE__.txt +2 -2
  1699. package/dist/_not-found/__next._not-found.txt +3 -3
  1700. package/dist/_not-found/__next._tree.txt +1 -1
  1701. package/dist/_not-found/index.html +1 -1
  1702. package/dist/_not-found/index.txt +10 -10
  1703. package/dist/browser-daemon.js +113 -7
  1704. package/dist/index.html +1 -1
  1705. package/dist/index.txt +11 -11
  1706. package/package.json +3 -2
  1707. package/dist/_next/static/chunks/04x4~r_ltq17a.js +0 -1
  1708. package/dist/_next/static/chunks/05_595ph9d4yp.js +0 -1
  1709. package/dist/w3kits-daemon-sw.js +0 -77
  1710. /package/dist/_next/static/{ptaOAJFvinIcai1ShQRcW → zDhAhlvmD2uhNsdWY6CQB}/_buildManifest.js +0 -0
  1711. /package/dist/_next/static/{ptaOAJFvinIcai1ShQRcW → zDhAhlvmD2uhNsdWY6CQB}/_clientMiddlewareManifest.js +0 -0
  1712. /package/dist/_next/static/{ptaOAJFvinIcai1ShQRcW → zDhAhlvmD2uhNsdWY6CQB}/_ssgManifest.js +0 -0
@@ -0,0 +1,2065 @@
1
+ // Media-generation dispatcher. The unifying contract is:
2
+ //
3
+ // skills + metadata + system-prompt
4
+ // ↓ (the code agent decides what to make)
5
+ // `od media generate --surface … --model … --output … --prompt …`
6
+ // ↓ (this module routes to a provider)
7
+ // bytes written to <projectsRoot>/<projectId>/<output>
8
+ // ↓
9
+ // FileViewer renders it.
10
+ //
11
+ // Every surface (image / video / audio) flows through this single
12
+ // entrypoint. Providers live behind the `provider` field on each model
13
+ // entry in media-models.js — when a real integration ships we route to
14
+ // it; otherwise we emit a deterministic, lightweight placeholder
15
+ // (labelled SVG-PNG, silent WAV/MP3, blank MP4) so the framework works
16
+ // without API keys.
17
+ //
18
+ // Today we ship real integrations for:
19
+ // * provider 'openai' → OpenAI Images API (gpt-image-* / dall-e-*),
20
+ // plus text-to-speech via /v1/audio/speech,
21
+ // with auto-detection for Azure OpenAI
22
+ // deployments based on the configured base URL
23
+ // * provider 'volcengine' → Volcengine Ark async tasks API for
24
+ // Doubao Seedance 2.0 (video) and Seedream
25
+ // (image)
26
+ // * provider 'grok' → xAI Imagine API: synchronous
27
+ // /v1/images/generations for grok-imagine-image
28
+ // and async /v1/videos/generations + GET poll
29
+ // for grok-imagine-video (t2v + i2v + audio)
30
+ //
31
+ // The fallback stub handlers are gated behind OD_MEDIA_ALLOW_STUBS=1; in
32
+ // release builds they throw StubProviderDisabledError (mapped to HTTP
33
+ // 503) instead of writing placeholder bytes that look like a successful
34
+ // generation. Real-provider failures still produce a stub byte payload
35
+ // when stubs are allowed, but they tag the response with providerError
36
+ // so the CLI can exit non-zero and the agent can't silently narrate the
37
+ // placeholder as the final result.
38
+ import { mkdir, mkdtemp, readFile, rm, stat, writeFile } from 'node:fs/promises';
39
+ import { execFile as execFileCb, spawn } from 'node:child_process';
40
+ import os from 'node:os';
41
+ import path from 'node:path';
42
+ import { promisify } from 'node:util';
43
+ import { Agent as UndiciAgent } from 'undici';
44
+ import { AUDIO_DURATIONS_SEC, VIDEO_LENGTHS_SEC, findMediaModel, findProvider, modelsForSurface, } from './media-models.js';
45
+ import { resolveModelAlias, resolveProviderConfig } from './media-config.js';
46
+ import { ensureProject, kindFor, mimeFor, sanitizeName, } from './projects.js';
47
+ const execFile = promisify(execFileCb);
48
+ function isRecord(value) {
49
+ return value !== null && typeof value === 'object';
50
+ }
51
+ function errorMessage(err) {
52
+ return err instanceof Error ? err.message : String(err);
53
+ }
54
+ function errorStringProp(err, key) {
55
+ return isRecord(err) && typeof err[key] === 'string' ? err[key] : '';
56
+ }
57
+ const NANOBANANA_DEFAULT_BASE_URL = 'https://generativelanguage.googleapis.com';
58
+ // Verify the current Nano Banana / Gemini image model name against:
59
+ // https://ai.google.dev/gemini-api/docs/models
60
+ const NANOBANANA_DEFAULT_MODEL = 'gemini-3.1-flash-image-preview';
61
+ const NANOBANANA_DEFAULT_IMAGE_SIZE = '1K';
62
+ const DEFAULT_OUTPUT_BY_SURFACE = {
63
+ image: 'image.png',
64
+ video: 'video.mp4',
65
+ audio: 'audio.mp3',
66
+ };
67
+ const SURFACES = new Set(['image', 'video', 'audio']);
68
+ const AUDIO_KINDS = new Set(['music', 'speech', 'sfx']);
69
+ // Stubs ship a 1×1 PNG / ~24-byte mp4 / silent WAV / single-frame mp3 so
70
+ // the dispatch path is exercisable before real provider integrations
71
+ // land. On a release build that lands as "successful" but functionally
72
+ // empty bytes — confusing to users. We therefore gate the stub renderers
73
+ // behind OD_MEDIA_ALLOW_STUBS=1 and otherwise return a 503 (mapped from
74
+ // the StubProviderDisabledError thrown below) with a clear message.
75
+ class StubProviderDisabledError extends Error {
76
+ code = 'STUB_PROVIDER_DISABLED';
77
+ status = 503;
78
+ constructor(model) {
79
+ super(`provider not configured: ${model}. Add your API key in Settings -> Media Providers to enable real generation.`);
80
+ this.name = 'StubProviderDisabledError';
81
+ }
82
+ }
83
+ function stubsAllowed() {
84
+ const v = process.env.OD_MEDIA_ALLOW_STUBS;
85
+ return v === '1' || v === 'true';
86
+ }
87
+ /**
88
+ * Resolve a project-relative `--image` path into a base64 data URL the
89
+ * upstream model APIs (Volcengine i2v, OpenAI image-edit, etc.) accept
90
+ * directly. Returns null when no path was supplied.
91
+ *
92
+ * Security: refuses anything that escapes the project directory.
93
+ * Without this guard, an agent (or a hallucinated arg) could ask the
94
+ * daemon to upload `/etc/passwd` to a paid model.
95
+ */
96
+ async function resolveProjectImage(rel, projectDir) {
97
+ if (typeof rel !== 'string' || !rel.trim())
98
+ return null;
99
+ const projectRootResolved = path.resolve(projectDir);
100
+ const abs = path.resolve(projectRootResolved, rel.trim());
101
+ if (abs !== projectRootResolved &&
102
+ !abs.startsWith(projectRootResolved + path.sep)) {
103
+ throw new Error(`--image path "${rel}" resolves outside the project directory.`);
104
+ }
105
+ let info;
106
+ try {
107
+ info = await stat(abs);
108
+ }
109
+ catch {
110
+ throw new Error(`--image not found: ${rel}`);
111
+ }
112
+ if (!info.isFile()) {
113
+ throw new Error(`--image is not a regular file: ${rel}`);
114
+ }
115
+ // Cap at 16 MB. Beyond this, base64 inflation alone (≈4/3) starts
116
+ // hitting body-size limits at the upstream APIs and our own express
117
+ // 4mb body cap on inbound requests; bigger payloads should travel
118
+ // via the dedicated upload endpoint, not the dispatcher.
119
+ const MAX_IMAGE_BYTES = 16 * 1024 * 1024;
120
+ if (info.size > MAX_IMAGE_BYTES) {
121
+ throw new Error(`--image too large (${info.size} bytes; max ${MAX_IMAGE_BYTES}).`);
122
+ }
123
+ const bytes = await readFile(abs);
124
+ const ext = path.extname(abs).toLowerCase();
125
+ // Tight allowlist: only what i2v / image-edit endpoints actually
126
+ // consume. Avoids smuggling arbitrary content through as data URLs.
127
+ const mime = ({
128
+ '.png': 'image/png',
129
+ '.jpg': 'image/jpeg',
130
+ '.jpeg': 'image/jpeg',
131
+ '.webp': 'image/webp',
132
+ '.gif': 'image/gif',
133
+ })[ext];
134
+ if (!mime) {
135
+ throw new Error(`--image has unsupported extension "${ext}". Use png, jpg, jpeg, webp, or gif.`);
136
+ }
137
+ return {
138
+ path: rel.trim(),
139
+ abs,
140
+ mime,
141
+ size: bytes.length,
142
+ dataUrl: `data:${mime};base64,${bytes.toString('base64')}`,
143
+ };
144
+ }
145
+ function clampNumber(value, allowed) {
146
+ // Accept exact registry values; otherwise snap to the nearest allowed
147
+ // bucket so a hallucinated `Number.MAX_SAFE_INTEGER` can't bill an
148
+ // entire month of credits when real providers plug in.
149
+ if (typeof value !== 'number' || !Number.isFinite(value))
150
+ return undefined;
151
+ if (allowed.length === 0)
152
+ return undefined;
153
+ if (allowed.includes(value))
154
+ return value;
155
+ let best = allowed[0];
156
+ let bestDiff = Math.abs(value - best);
157
+ for (const a of allowed) {
158
+ const d = Math.abs(value - a);
159
+ if (d < bestDiff) {
160
+ best = a;
161
+ bestDiff = d;
162
+ }
163
+ }
164
+ return best;
165
+ }
166
+ function clampWithWarning(value, allowed, flagName) {
167
+ const clamped = clampNumber(value, allowed);
168
+ if (typeof value === 'number'
169
+ && Number.isFinite(value)
170
+ && typeof clamped === 'number'
171
+ && clamped !== value) {
172
+ return {
173
+ value: clamped,
174
+ warning: `--${flagName} ${value} clamped to ${clamped} (allowed: ${allowed.join(', ')})`,
175
+ };
176
+ }
177
+ return { value: clamped, warning: null };
178
+ }
179
+ /**
180
+ * Generate a media artifact and write it into the project's files dir.
181
+ *
182
+ * @param {Object} args
183
+ * @param {string} args.projectRoot - Repo root (.od/ lives directly under).
184
+ * @param {string} args.projectsRoot - Absolute path to <repo>/.od/projects.
185
+ * @param {string} args.projectId
186
+ * @param {'image'|'video'|'audio'} args.surface
187
+ * @param {string} args.model
188
+ * @param {string} [args.prompt]
189
+ * @param {string} [args.output]
190
+ * @param {string} [args.aspect]
191
+ * @param {number} [args.length]
192
+ * @param {number} [args.duration]
193
+ * @param {string} [args.voice]
194
+ * @param {string} [args.audioKind]
195
+ * @param {string} [args.language]
196
+ * @returns {Promise<{ name: string, size: number, mtime: number, kind: string, mime: string, model: string, surface: string, providerNote: string, providerId: string }>}
197
+ */
198
+ export async function generateMedia(args) {
199
+ const { projectRoot, projectsRoot, projectId, surface, model, prompt, output, aspect, length, duration, voice, audioKind, language, loop, promptInfluence, compositionDir, image, } = args;
200
+ if (!projectRoot)
201
+ throw new Error('projectRoot required');
202
+ if (!projectsRoot)
203
+ throw new Error('projectsRoot required');
204
+ if (typeof projectId !== 'string' || !projectId) {
205
+ throw new Error('projectId required');
206
+ }
207
+ if (!SURFACES.has(surface)) {
208
+ throw new Error(`unsupported surface: ${surface}`);
209
+ }
210
+ if (typeof model !== 'string' || !model) {
211
+ throw new Error('model required');
212
+ }
213
+ if (surface === 'audio' && audioKind && !AUDIO_KINDS.has(audioKind)) {
214
+ throw new Error(`unsupported audioKind: ${audioKind}. Allowed: music | speech | sfx.`);
215
+ }
216
+ const def = findMediaModel(model);
217
+ if (!def) {
218
+ throw new Error(`unknown model: ${model}. Pass --model from the registered list (see /api/media/models).`);
219
+ }
220
+ // Reject cross-surface combinations (e.g. surface=image + model=seedance-2)
221
+ // here so the dispatcher never silently routes a video model id through
222
+ // the image renderer. We compare against the surface-specific list — for
223
+ // audio we further restrict to the kind-specific bucket so a `music`
224
+ // surface can't bill an `elevenlabs-v3` (speech) call.
225
+ const resolvedAudioKind = surface === 'audio' ? audioKind || 'music' : undefined;
226
+ const allowed = modelsForSurface(surface, resolvedAudioKind);
227
+ if (!allowed.some((m) => m.id === model)) {
228
+ const ids = allowed.map((m) => m.id).join(', ');
229
+ const where = surface === 'audio' ? `audio · ${resolvedAudioKind}` : surface;
230
+ throw new Error(`model "${model}" is not registered for surface "${where}". Allowed: ${ids}.`);
231
+ }
232
+ // Clamp registry-bound numeric inputs to their allowed buckets so a
233
+ // hallucinated --length 9999999 doesn't reach a real provider as-is
234
+ // when stubs are swapped for paid integrations.
235
+ const lengthClamp = surface === 'video'
236
+ ? clampWithWarning(length, VIDEO_LENGTHS_SEC, 'length')
237
+ : { value: undefined, warning: null };
238
+ const usesProviderSpecificAudioDuration = def.provider === 'elevenlabs'
239
+ && surface === 'audio'
240
+ && resolvedAudioKind === 'sfx';
241
+ const durationClamp = surface === 'audio' && !usesProviderSpecificAudioDuration
242
+ ? clampWithWarning(duration, AUDIO_DURATIONS_SEC, 'duration')
243
+ : { value: undefined, warning: null };
244
+ const clampedLength = lengthClamp.value;
245
+ const clampedDuration = usesProviderSpecificAudioDuration
246
+ ? duration
247
+ : durationClamp.value;
248
+ const warnings = [lengthClamp.warning, durationClamp.warning].filter(Boolean);
249
+ const dir = await ensureProject(projectsRoot, projectId);
250
+ const safeOut = sanitizeName(output || autoOutputName(surface, model, resolvedAudioKind));
251
+ const target = path.join(dir, safeOut);
252
+ await mkdir(path.dirname(target), { recursive: true });
253
+ // Reference image for image-to-video / image-edit flows. The agent
254
+ // passes a project-relative path; we read it once here, validate it
255
+ // stays inside the project, and turn it into a base64 data URL the
256
+ // upstream APIs accept directly. Renderers consume `ctx.imageRef`
257
+ // and decide how to splice the data URL into their request.
258
+ const imageRef = await resolveProjectImage(image, dir);
259
+ // Resolve any user-configured model alias BEFORE we hand the id to a
260
+ // dispatcher (issue #1277). Catalog lookup + surface validation above
261
+ // ran against the original id so we still enforce the registered
262
+ // catalog; the alias only changes what the provider receives on the
263
+ // wire. lefarcen + codex P2 on PR #1309: keep BOTH values on ctx so
264
+ // capability branches (DALL-E sizing, gpt-image quality, gpt-4o-mini-tts
265
+ // instructions, MINIMAX/FISHAUDIO TTS map) continue to key off the
266
+ // catalog id while the provider's request body carries the alias.
267
+ const wireModel = await resolveModelAlias(projectRoot, model);
268
+ const ctx = {
269
+ surface,
270
+ model,
271
+ wireModel,
272
+ modelDef: def,
273
+ provider: findProvider(def.provider),
274
+ prompt: prompt || '',
275
+ aspect: aspect || defaultAspectFor(surface),
276
+ length: clampedLength,
277
+ duration: clampedDuration,
278
+ voice: voice || '',
279
+ audioKind: resolvedAudioKind,
280
+ language: language || '',
281
+ loop: loop === true,
282
+ promptInfluence: typeof promptInfluence === 'number' && Number.isFinite(promptInfluence)
283
+ ? promptInfluence
284
+ : undefined,
285
+ // Project-relative path to the directory the agent scaffolded with
286
+ // hyperframes.json / meta.json / index.html. Only consumed by the
287
+ // hyperframes renderer; null/empty for every other provider.
288
+ compositionDir: typeof compositionDir === 'string' ? compositionDir : null,
289
+ // Resolved reference image for i2v / image-edit flows. `null` when
290
+ // the agent didn't pass --image. See resolveProjectImage below.
291
+ imageRef,
292
+ };
293
+ const credentials = await resolveProviderConfig(projectRoot, def.provider);
294
+ let bytes;
295
+ let providerNote;
296
+ let suggestedExt;
297
+ // Tracks whether the bytes came from a real provider call or from the
298
+ // stub fallback. Surfaces in the response so the CLI/agent can tell a
299
+ // legitimate placeholder ("provider not integrated yet") apart from a
300
+ // silent failure ("API call blew up, here's a 67-byte PNG"). Without
301
+ // this flag the chat agent narrates the stub as if it's the expected
302
+ // output, and the user sees a blank file.
303
+ let providerError = null;
304
+ let usedStubFallback = false;
305
+ // True only when the dispatcher intentionally returned a stub because
306
+ // no real renderer is wired up for this (provider, surface) pair.
307
+ let intentionalStub = false;
308
+ try {
309
+ if (def.provider === 'openai' && surface === 'image') {
310
+ const result = await renderOpenAIImage(ctx, credentials);
311
+ bytes = result.bytes;
312
+ providerNote = result.providerNote;
313
+ suggestedExt = result.suggestedExt;
314
+ }
315
+ else if (def.provider === 'openai'
316
+ && surface === 'audio'
317
+ && ctx.audioKind === 'speech') {
318
+ const result = await renderOpenAISpeech(ctx, credentials, safeOut);
319
+ bytes = result.bytes;
320
+ providerNote = result.providerNote;
321
+ suggestedExt = result.suggestedExt;
322
+ }
323
+ else if (def.provider === 'volcengine' && surface === 'video') {
324
+ const result = await renderVolcengineVideo(ctx, credentials, args.onProgress);
325
+ bytes = result.bytes;
326
+ providerNote = result.providerNote;
327
+ suggestedExt = result.suggestedExt;
328
+ }
329
+ else if (def.provider === 'volcengine' && surface === 'image') {
330
+ const result = await renderVolcengineImage(ctx, credentials);
331
+ bytes = result.bytes;
332
+ providerNote = result.providerNote;
333
+ suggestedExt = result.suggestedExt;
334
+ }
335
+ else if (def.provider === 'grok' && surface === 'image') {
336
+ const result = await renderGrokImage(ctx, credentials);
337
+ bytes = result.bytes;
338
+ providerNote = result.providerNote;
339
+ suggestedExt = result.suggestedExt;
340
+ }
341
+ else if (def.provider === 'grok' && surface === 'video') {
342
+ const result = await renderGrokVideo(ctx, credentials, args.onProgress);
343
+ bytes = result.bytes;
344
+ providerNote = result.providerNote;
345
+ suggestedExt = result.suggestedExt;
346
+ }
347
+ else if (def.provider === 'nanobanana' && surface === 'image') {
348
+ const result = await renderNanoBananaImage(ctx, credentials);
349
+ bytes = result.bytes;
350
+ providerNote = result.providerNote;
351
+ suggestedExt = result.suggestedExt;
352
+ }
353
+ else if (def.provider === 'leonardo' && surface === 'image') {
354
+ const result = await renderLeonardoImage(ctx, credentials);
355
+ bytes = result.bytes;
356
+ providerNote = result.providerNote;
357
+ suggestedExt = result.suggestedExt;
358
+ }
359
+ else if (def.provider === 'elevenlabs'
360
+ && surface === 'audio'
361
+ && ctx.audioKind === 'speech') {
362
+ const result = await renderElevenLabsTTS(ctx, credentials);
363
+ bytes = result.bytes;
364
+ providerNote = result.providerNote;
365
+ suggestedExt = result.suggestedExt;
366
+ }
367
+ else if (def.provider === 'elevenlabs'
368
+ && surface === 'audio'
369
+ && ctx.audioKind === 'sfx') {
370
+ const result = await renderElevenLabsSfx(ctx, credentials);
371
+ bytes = result.bytes;
372
+ providerNote = result.providerNote;
373
+ suggestedExt = result.suggestedExt;
374
+ }
375
+ else if (def.provider === 'hyperframes' && surface === 'video') {
376
+ // HyperFrames is templated by the agent (it reads the vendored
377
+ // skill at skills/hyperframes/SKILL.md and writes a composition
378
+ // HTML based on the user's prompt). But the actual `npx
379
+ // hyperframes render` step runs HERE in the daemon process, not
380
+ // in the agent's shell. Reason: the agent's shell on macOS
381
+ // (Claude Code in particular) is wrapped in `sandbox-exec`, and
382
+ // puppeteer's Chrome subprocess hangs partway through frame
383
+ // capture under that sandbox. The daemon process is unsandboxed,
384
+ // so puppeteer behaves correctly. Agent-side npx is reserved for
385
+ // the lighter HF subcommands (lint, transcribe, tts) that don't
386
+ // need to spawn Chrome.
387
+ const result = await renderHyperFramesViaCli(ctx, dir, args.onProgress);
388
+ bytes = result.bytes;
389
+ providerNote = result.providerNote;
390
+ suggestedExt = result.suggestedExt;
391
+ }
392
+ else if (def.provider === 'minimax' && surface === 'audio') {
393
+ const result = await renderMinimaxTTS(ctx, credentials);
394
+ bytes = result.bytes;
395
+ providerNote = result.providerNote;
396
+ suggestedExt = result.suggestedExt;
397
+ }
398
+ else if (def.provider === 'senseaudio' && surface === 'audio') {
399
+ const result = await renderSenseAudioTTS(ctx, credentials);
400
+ bytes = result.bytes;
401
+ providerNote = result.providerNote;
402
+ suggestedExt = result.suggestedExt;
403
+ }
404
+ else if (def.provider === 'fishaudio' && surface === 'audio') {
405
+ const result = await renderFishAudioTTS(ctx, credentials);
406
+ bytes = result.bytes;
407
+ providerNote = result.providerNote;
408
+ suggestedExt = result.suggestedExt;
409
+ }
410
+ else {
411
+ // No real renderer wired up for this (provider, surface). Gate the
412
+ // stub fallback behind OD_MEDIA_ALLOW_STUBS so release builds don't
413
+ // silently write placeholder bytes to disk and confuse the user.
414
+ if (!stubsAllowed()) {
415
+ throw new StubProviderDisabledError(model);
416
+ }
417
+ const result = await renderStub(ctx, safeOut);
418
+ bytes = result.bytes;
419
+ providerNote = result.providerNote;
420
+ intentionalStub = true;
421
+ }
422
+ }
423
+ catch (err) {
424
+ // Stub-disabled errors are intentional — propagate so the daemon
425
+ // maps them to 503 and the CLI surfaces a clear "configure a real
426
+ // provider" message rather than writing fake bytes.
427
+ if (err instanceof StubProviderDisabledError) {
428
+ throw err;
429
+ }
430
+ // A real provider failed (network blip, 4xx, missing key, …). We
431
+ // still want to fall back to a stub so the agent's chat loop
432
+ // doesn't dead-end — but only when stubs are allowed for this
433
+ // build. Otherwise re-throw so the CLI exits non-zero with the
434
+ // real upstream message.
435
+ if (!stubsAllowed()) {
436
+ throw err;
437
+ }
438
+ const stub = await renderStub(ctx, safeOut);
439
+ bytes = stub.bytes;
440
+ const msg = errorMessage(err);
441
+ providerNote = `[${def.provider} error → stub] ${msg}`;
442
+ providerError = msg;
443
+ usedStubFallback = true;
444
+ // Also log to daemon stderr so the failure is visible in the daemon
445
+ // terminal — easiest place for the developer/operator to spot it.
446
+ try {
447
+ console.error(`[media] ${def.provider}/${surface}/${model} failed: ${msg}`);
448
+ }
449
+ catch {
450
+ // best-effort logging only
451
+ }
452
+ }
453
+ // Tag the providerNote with `[stub]` only when the bytes actually came
454
+ // from the stub renderer — either as the intentional fallback for an
455
+ // unintegrated (provider, surface) pair, or because a real-provider
456
+ // call failed and we wrote a placeholder. Real-provider successes keep
457
+ // the renderer's own note (e.g. "openai/gpt-image-2 · 1:1 · 1.2 MB")
458
+ // untouched so the FileViewer toolbar shows the truth.
459
+ if (intentionalStub || usedStubFallback) {
460
+ providerNote = `[stub] ${providerNote}`;
461
+ }
462
+ // If the real provider returned a different extension than the
463
+ // requested filename, swap it. Saves the agent from having to guess
464
+ // (.png vs .jpg vs .webp) before it knows what the model emits.
465
+ let finalOut = safeOut;
466
+ if (suggestedExt) {
467
+ const dot = safeOut.lastIndexOf('.');
468
+ const stem = dot > 0 ? safeOut.slice(0, dot) : safeOut;
469
+ finalOut = `${stem}${suggestedExt}`;
470
+ }
471
+ const finalTarget = path.join(dir, finalOut);
472
+ await writeFile(finalTarget, bytes);
473
+ const st = await stat(finalTarget);
474
+ return {
475
+ name: finalOut,
476
+ size: st.size,
477
+ mtime: st.mtimeMs,
478
+ kind: kindFor(finalOut),
479
+ mime: mimeFor(finalOut),
480
+ model,
481
+ surface,
482
+ providerNote,
483
+ providerId: def.provider,
484
+ providerError,
485
+ usedStubFallback,
486
+ intentionalStub,
487
+ warnings,
488
+ };
489
+ }
490
+ function autoOutputName(surface, model, audioKind) {
491
+ const base = DEFAULT_OUTPUT_BY_SURFACE[surface] || 'artifact.bin';
492
+ const stamp = Date.now().toString(36);
493
+ // Slug the model id so the filename stays short and shell-safe.
494
+ const slug = String(model).toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 32);
495
+ const tag = surface === 'audio' && audioKind ? `${audioKind}-${slug}` : slug;
496
+ const dot = base.lastIndexOf('.');
497
+ const stem = dot > 0 ? base.slice(0, dot) : base;
498
+ const ext = dot > 0 ? base.slice(dot) : '';
499
+ return `${stem}-${tag}-${stamp}${ext}`;
500
+ }
501
+ function defaultAspectFor(surface) {
502
+ if (surface === 'image')
503
+ return '1:1';
504
+ if (surface === 'video')
505
+ return '16:9';
506
+ return undefined;
507
+ }
508
+ // ---------------------------------------------------------------------------
509
+ // Provider: OpenAI Images API (gpt-image-2, gpt-image-1.5, dall-e-3 …)
510
+ //
511
+ // We support both the canonical OpenAI endpoint AND Azure-hosted
512
+ // OpenAI deployments behind the same provider slot — Azure is detected
513
+ // from the base URL (`*.azure.com` host or a `/deployments/<name>`
514
+ // segment in the path). For Azure we additionally:
515
+ // * append `?api-version=…` (default 2024-02-01, unless the user has
516
+ // already encoded one into the base URL),
517
+ // * send the api-key header in addition to Authorization (Azure
518
+ // accepts either; some setups only honor api-key),
519
+ // * drop the `model` field from the body since the deployment in the
520
+ // path already names the model.
521
+ // ---------------------------------------------------------------------------
522
+ const AZURE_DEFAULT_API_VERSION = '2024-02-01';
523
+ const OPENAI_IMAGE_HEADERS_TIMEOUT_MS = 10 * 60 * 1000;
524
+ const OPENAI_IMAGE_BODY_TIMEOUT_MS = 10 * 60 * 1000;
525
+ const openAIImageDispatcher = new UndiciAgent({
526
+ headersTimeout: OPENAI_IMAGE_HEADERS_TIMEOUT_MS,
527
+ bodyTimeout: OPENAI_IMAGE_BODY_TIMEOUT_MS,
528
+ });
529
+ async function renderOpenAIImage(ctx, credentials) {
530
+ if (!credentials.apiKey) {
531
+ throw new Error('no OpenAI credential — configure an API key in Settings, set OPENAI_API_KEY, or refresh Codex/Hermes OAuth');
532
+ }
533
+ const rawBase = credentials.baseUrl || 'https://api.openai.com/v1';
534
+ const azure = detectAzureEndpoint(rawBase);
535
+ const url = buildOpenAIImageUrl(rawBase, azure);
536
+ const body = {
537
+ prompt: ctx.prompt || 'A high-quality reference image.',
538
+ n: 1,
539
+ size: openaiSizeFor(ctx.model, ctx.aspect),
540
+ };
541
+ // For non-Azure calls, include `model` in the body. Azure infers it
542
+ // from the deployment in the path so omitting it keeps payloads
543
+ // compatible across both flavors. The wire-name (post-alias) goes
544
+ // on the body so the user's alias from issue #1277 reaches the API.
545
+ if (!azure) {
546
+ body.model = ctx.wireModel;
547
+ }
548
+ // Capability branches key off the CATALOG id (not the alias) so a
549
+ // user who aliased `dall-e-3` to a custom Azure / proxy deployment
550
+ // still gets the DALL-E-specific quality + response_format flags
551
+ // (lefarcen + codex P2 on PR #1309).
552
+ if (ctx.model.startsWith('dall-e-')) {
553
+ body.response_format = 'b64_json';
554
+ body.quality = ctx.model === 'dall-e-3' ? 'hd' : 'standard';
555
+ }
556
+ else {
557
+ // gpt-image-* accepts quality 'high' | 'medium' | 'low'.
558
+ body.quality = 'high';
559
+ }
560
+ const headers = {
561
+ 'authorization': `Bearer ${credentials.apiKey}`,
562
+ 'content-type': 'application/json',
563
+ };
564
+ if (azure) {
565
+ // Azure's canonical auth header. Some deployments accept Bearer
566
+ // (the curl example we tested against does) but api-key is what
567
+ // their docs document, so send both. OpenAI ignores unknown
568
+ // headers, so this is harmless on the standard endpoint too.
569
+ headers['api-key'] = credentials.apiKey;
570
+ }
571
+ const resp = await fetch(url, {
572
+ method: 'POST',
573
+ headers,
574
+ body: JSON.stringify(body),
575
+ dispatcher: openAIImageDispatcher,
576
+ });
577
+ const text = await resp.text();
578
+ if (!resp.ok) {
579
+ const tag = azure ? 'azure-openai' : 'openai';
580
+ throw new Error(`${tag} ${resp.status}: ${truncate(text, 240)}`);
581
+ }
582
+ let data;
583
+ try {
584
+ data = JSON.parse(text);
585
+ }
586
+ catch {
587
+ throw new Error(`openai non-JSON response: ${truncate(text, 200)}`);
588
+ }
589
+ const entry = data && Array.isArray(data.data) ? data.data[0] : null;
590
+ if (!entry)
591
+ throw new Error('openai response had no data[0]');
592
+ let bytes;
593
+ if (entry.b64_json) {
594
+ bytes = Buffer.from(entry.b64_json, 'base64');
595
+ }
596
+ else if (entry.url) {
597
+ const imgResp = await fetch(entry.url);
598
+ if (!imgResp.ok)
599
+ throw new Error(`openai image fetch ${imgResp.status}`);
600
+ const arr = await imgResp.arrayBuffer();
601
+ bytes = Buffer.from(arr);
602
+ }
603
+ else {
604
+ throw new Error('openai response had neither b64_json nor url');
605
+ }
606
+ const tag = azure ? 'azure-openai' : 'openai';
607
+ return {
608
+ bytes,
609
+ providerNote: `${tag}/${ctx.wireModel} · ${ctx.aspect} · ${bytes.length} bytes`,
610
+ suggestedExt: '.png',
611
+ };
612
+ }
613
+ /**
614
+ * Heuristic: do we think this base URL points at an Azure OpenAI
615
+ * deployment rather than the public OpenAI API?
616
+ *
617
+ * true examples
618
+ * https://x.cognitiveservices.azure.com/openai/deployments/gpt-image-2
619
+ * https://x.openai.azure.com/openai/deployments/foo
620
+ * /openai/deployments/foo?api-version=2024-02-01
621
+ * false examples
622
+ * https://api.openai.com/v1
623
+ * http://localhost:8080/v1
624
+ */
625
+ function detectAzureEndpoint(baseUrl) {
626
+ if (typeof baseUrl !== 'string' || !baseUrl)
627
+ return false;
628
+ if (/\.azure\.com\b/i.test(baseUrl))
629
+ return true;
630
+ if (/\/openai\/deployments\//i.test(baseUrl))
631
+ return true;
632
+ return false;
633
+ }
634
+ /**
635
+ * Build the full /images/generations URL, preserving any user-supplied
636
+ * query string (e.g. an explicit `?api-version=2024-12-01`) and
637
+ * appending the default api-version for Azure when the user didn't
638
+ * specify one. Returns a string ready for `fetch`.
639
+ */
640
+ function buildOpenAIImageUrl(baseUrl, isAzure) {
641
+ let parsed;
642
+ try {
643
+ parsed = new URL(baseUrl);
644
+ }
645
+ catch {
646
+ // Bad URL — fall back to naive concat so the upstream error is
647
+ // surfaced through the normal HTTP path rather than a parse crash.
648
+ const stripped = baseUrl.replace(/\/$/, '');
649
+ return `${stripped}/images/generations`;
650
+ }
651
+ parsed.pathname = parsed.pathname.replace(/\/+$/, '') + '/images/generations';
652
+ if (isAzure && !parsed.searchParams.has('api-version')) {
653
+ parsed.searchParams.set('api-version', AZURE_DEFAULT_API_VERSION);
654
+ }
655
+ return parsed.toString();
656
+ }
657
+ function openaiSizeFor(model, aspect) {
658
+ // gpt-image-1.5 / gpt-image-2 accept arbitrary sizes up to 4096; we
659
+ // pick concrete ones tuned to common aspects so the API never
660
+ // negotiates them down silently.
661
+ if (model.startsWith('gpt-image-')) {
662
+ if (aspect === '16:9')
663
+ return '1792x1024';
664
+ if (aspect === '9:16')
665
+ return '1024x1792';
666
+ if (aspect === '4:3')
667
+ return '1408x1056';
668
+ if (aspect === '3:4')
669
+ return '1056x1408';
670
+ return '1024x1024';
671
+ }
672
+ if (model === 'dall-e-3') {
673
+ if (aspect === '16:9')
674
+ return '1792x1024';
675
+ if (aspect === '9:16')
676
+ return '1024x1792';
677
+ return '1024x1024';
678
+ }
679
+ // dall-e-2 only supports 256/512/1024 squares.
680
+ return '1024x1024';
681
+ }
682
+ const OPENAI_TTS_VOICES = new Set([
683
+ 'alloy',
684
+ 'ash',
685
+ 'ballad',
686
+ 'coral',
687
+ 'echo',
688
+ 'fable',
689
+ 'onyx',
690
+ 'nova',
691
+ 'sage',
692
+ 'shimmer',
693
+ 'verse',
694
+ ]);
695
+ function buildOpenAISpeechUrl(baseUrl, isAzure) {
696
+ let parsed;
697
+ try {
698
+ parsed = new URL(baseUrl);
699
+ }
700
+ catch {
701
+ const stripped = baseUrl.replace(/\/$/, '');
702
+ return `${stripped}/audio/speech`;
703
+ }
704
+ parsed.pathname = parsed.pathname.replace(/\/+$/, '') + '/audio/speech';
705
+ if (isAzure && !parsed.searchParams.has('api-version')) {
706
+ parsed.searchParams.set('api-version', AZURE_DEFAULT_API_VERSION);
707
+ }
708
+ return parsed.toString();
709
+ }
710
+ function openaiSpeechFormatFor(fileName) {
711
+ const ext = path.extname(fileName).toLowerCase();
712
+ if (ext === '.wav')
713
+ return 'wav';
714
+ if (ext === '.flac')
715
+ return 'flac';
716
+ if (ext === '.aac')
717
+ return 'aac';
718
+ if (ext === '.opus' || ext === '.ogg' || ext === '.oga')
719
+ return 'opus';
720
+ return 'mp3';
721
+ }
722
+ async function renderOpenAISpeech(ctx, credentials, fileName) {
723
+ if (!credentials.apiKey) {
724
+ throw new Error('no OpenAI credential — configure an API key in Settings, set OPENAI_API_KEY, or refresh Codex/Hermes OAuth');
725
+ }
726
+ const rawBase = credentials.baseUrl || 'https://api.openai.com/v1';
727
+ const azure = detectAzureEndpoint(rawBase);
728
+ const url = buildOpenAISpeechUrl(rawBase, azure);
729
+ const format = openaiSpeechFormatFor(fileName);
730
+ const text = (ctx.prompt && ctx.prompt.trim()) || 'This is a test.';
731
+ let voiceId = 'alloy';
732
+ let instructions = '';
733
+ const requestedVoice = (ctx.voice && ctx.voice.trim()) || '';
734
+ if (requestedVoice) {
735
+ if (OPENAI_TTS_VOICES.has(requestedVoice)) {
736
+ voiceId = requestedVoice;
737
+ }
738
+ else {
739
+ // gpt-4o-mini-tts accepts free-form speaking style instructions.
740
+ // If the UI metadata carries prose rather than a concrete voice id,
741
+ // preserve it here instead of surfacing a provider error.
742
+ instructions = requestedVoice;
743
+ }
744
+ }
745
+ const body = {
746
+ input: text,
747
+ voice: voiceId,
748
+ response_format: format,
749
+ };
750
+ if (!azure) {
751
+ body.model = ctx.wireModel;
752
+ }
753
+ if (instructions && ctx.model === 'gpt-4o-mini-tts') {
754
+ body.instructions = instructions;
755
+ }
756
+ const headers = {
757
+ authorization: `Bearer ${credentials.apiKey}`,
758
+ 'content-type': 'application/json',
759
+ };
760
+ if (azure) {
761
+ headers['api-key'] = credentials.apiKey;
762
+ }
763
+ const resp = await fetch(url, {
764
+ method: 'POST',
765
+ headers,
766
+ body: JSON.stringify(body),
767
+ });
768
+ if (!resp.ok) {
769
+ const text = await resp.text();
770
+ const tag = azure ? 'azure-openai' : 'openai';
771
+ throw new Error(`${tag} speech ${resp.status}: ${truncate(text, 240)}`);
772
+ }
773
+ const arr = await resp.arrayBuffer();
774
+ const bytes = Buffer.from(arr);
775
+ if (bytes.length === 0) {
776
+ throw new Error('openai speech returned zero bytes');
777
+ }
778
+ const tag = azure ? 'azure-openai' : 'openai';
779
+ const noteBits = [`${tag}/${ctx.wireModel}`, voiceId, `${format}`, `${bytes.length} bytes`];
780
+ if (instructions)
781
+ noteBits.splice(2, 0, 'styled');
782
+ return {
783
+ bytes,
784
+ providerNote: noteBits.join(' · '),
785
+ suggestedExt: format === 'opus' ? '.ogg' : `.${format}`,
786
+ };
787
+ }
788
+ // ---------------------------------------------------------------------------
789
+ // Provider: Volcengine Ark — Doubao Seedance 2.0 video.
790
+ //
791
+ // Docs:
792
+ // POST /api/v3/contents/generations/tasks → { id }
793
+ // GET /api/v3/contents/generations/tasks/{id} → { status, content: { video_url } }
794
+ // We submit, poll until succeeded/failed, then fetch the produced
795
+ // video_url and return the raw bytes. The temporary URL Volcengine
796
+ // returns is only valid for ~24h, so streaming the bytes into the
797
+ // project folder is required to keep them addressable.
798
+ // ---------------------------------------------------------------------------
799
+ async function renderVolcengineVideo(ctx, credentials, onProgress) {
800
+ if (!credentials.apiKey) {
801
+ throw new Error('no Volcengine Ark API key — configure it in Settings or set ARK_API_KEY');
802
+ }
803
+ const baseUrl = (credentials.baseUrl || 'https://ark.cn-beijing.volces.com/api/v3').replace(/\/$/, '');
804
+ // Seedance accepts inline `--resolution`, `--duration`, `--ratio` and
805
+ // `--camerafixed` flags inside the prompt text. We append a flags
806
+ // suffix so user prompts that already contain them still win.
807
+ const ratio = volcengineRatioFor(ctx.aspect);
808
+ const durationSec = ctx.length || 5;
809
+ const resolution = '720p';
810
+ const promptText = (ctx.prompt && ctx.prompt.trim()) || 'A short cinematic clip.';
811
+ const suffixFlags = [];
812
+ if (!/--resolution\b/.test(promptText))
813
+ suffixFlags.push(`--resolution ${resolution}`);
814
+ if (!/--duration\b/.test(promptText))
815
+ suffixFlags.push(`--duration ${durationSec}`);
816
+ if (!/--ratio\b/.test(promptText))
817
+ suffixFlags.push(`--ratio ${ratio}`);
818
+ const fullText = suffixFlags.length
819
+ ? `${promptText} ${suffixFlags.join(' ')}`
820
+ : promptText;
821
+ // Seedance i2v (and seedance-2.0/-fast which support both modes)
822
+ // accept an additional `image_url` content entry — Volcengine treats
823
+ // it as the first frame and animates from there. We pass the data
824
+ // URL directly; the API does not require a public URL. When no
825
+ // image is provided, this is a regular t2v call.
826
+ const content = [{ type: 'text', text: fullText }];
827
+ if (ctx.imageRef && ctx.imageRef.dataUrl) {
828
+ content.push({
829
+ type: 'image_url',
830
+ image_url: { url: ctx.imageRef.dataUrl },
831
+ });
832
+ }
833
+ const taskBody = {
834
+ model: ctx.wireModel,
835
+ content,
836
+ };
837
+ const taskResp = await fetch(`${baseUrl}/contents/generations/tasks`, {
838
+ method: 'POST',
839
+ headers: {
840
+ 'authorization': `Bearer ${credentials.apiKey}`,
841
+ 'content-type': 'application/json',
842
+ },
843
+ body: JSON.stringify(taskBody),
844
+ });
845
+ const taskText = await taskResp.text();
846
+ if (!taskResp.ok) {
847
+ throw new Error(`volcengine task create ${taskResp.status}: ${truncate(taskText, 240)}`);
848
+ }
849
+ let taskData;
850
+ try {
851
+ taskData = JSON.parse(taskText);
852
+ }
853
+ catch {
854
+ throw new Error(`volcengine non-JSON: ${truncate(taskText, 200)}`);
855
+ }
856
+ const taskId = taskData && taskData.id;
857
+ if (!taskId)
858
+ throw new Error('volcengine task response missing id');
859
+ // Poll until succeeded/failed. Keep a hard cap, but make it long
860
+ // enough for real Seedance queues: fast t2v often returns in 30-120s,
861
+ // while i2v and busy-region t2v can exceed the old 6-minute ceiling.
862
+ const startedAt = Date.now();
863
+ const configuredMaxMs = Number(process.env.OD_VOLCENGINE_VIDEO_MAX_POLL_MS);
864
+ const maxMs = Number.isFinite(configuredMaxMs) && configuredMaxMs >= 60_000
865
+ ? configuredMaxMs
866
+ : 12 * 60 * 1000;
867
+ let videoUrl = null;
868
+ let lastStatus = '';
869
+ // Emit a "task accepted" line right away so the agent's chat shows
870
+ // something within the first second instead of going silent for the
871
+ // full poll loop. cc's Bash tool considers a long-quiet pipe stuck
872
+ // and times out at ~2 minutes — Volcengine i2v routinely takes
873
+ // 3-5 minutes, so without this stream, every i2v dispatch dies
874
+ // mid-flight.
875
+ if (typeof onProgress === 'function') {
876
+ const mode = ctx.imageRef ? 'i2v' : 't2v';
877
+ onProgress(`volcengine ${mode} task ${taskId} accepted; polling status…`);
878
+ }
879
+ while (Date.now() - startedAt < maxMs) {
880
+ await sleep(4000);
881
+ const pollResp = await fetch(`${baseUrl}/contents/generations/tasks/${encodeURIComponent(taskId)}`, {
882
+ headers: { 'authorization': `Bearer ${credentials.apiKey}` },
883
+ });
884
+ const pollText = await pollResp.text();
885
+ if (!pollResp.ok) {
886
+ throw new Error(`volcengine poll ${pollResp.status}: ${truncate(pollText, 240)}`);
887
+ }
888
+ let pollData;
889
+ try {
890
+ pollData = JSON.parse(pollText);
891
+ }
892
+ catch {
893
+ throw new Error(`volcengine poll non-JSON: ${truncate(pollText, 200)}`);
894
+ }
895
+ lastStatus = pollData.status || '';
896
+ // Forward each poll tick. Heartbeat doubles as a "command is alive"
897
+ // signal for the agent's bash tool — the daemon's SSE stream emits
898
+ // an event for every line, which cc renders into the chat as live
899
+ // output so its watchdog never marks the call as hung.
900
+ if (typeof onProgress === 'function') {
901
+ const elapsedSec = Math.round((Date.now() - startedAt) / 1000);
902
+ onProgress(`volcengine task ${taskId} status=${lastStatus || 'pending'} (elapsed ${elapsedSec}s)`);
903
+ }
904
+ if (lastStatus === 'succeeded') {
905
+ videoUrl = pollData?.content?.video_url || null;
906
+ break;
907
+ }
908
+ if (lastStatus === 'failed' || lastStatus === 'cancelled') {
909
+ const reason = pollData?.error?.message || lastStatus;
910
+ throw new Error(`volcengine task ${lastStatus}: ${reason}`);
911
+ }
912
+ }
913
+ if (!videoUrl) {
914
+ throw new Error(`volcengine task did not finish in time (last status: ${lastStatus || 'unknown'})`);
915
+ }
916
+ const dlResp = await fetch(videoUrl);
917
+ if (!dlResp.ok)
918
+ throw new Error(`volcengine video fetch ${dlResp.status}`);
919
+ const arr = await dlResp.arrayBuffer();
920
+ const bytes = Buffer.from(arr);
921
+ return {
922
+ bytes,
923
+ providerNote: `volcengine/${ctx.wireModel} · ${ratio} · ${durationSec}s · ${bytes.length} bytes`,
924
+ suggestedExt: '.mp4',
925
+ };
926
+ }
927
+ function volcengineRatioFor(aspect) {
928
+ // Seedance accepts a fixed list of ratios; map the OD vocabulary to
929
+ // its canonical strings.
930
+ if (!aspect)
931
+ return '16:9';
932
+ if (aspect === '1:1' || aspect === '16:9' || aspect === '9:16' || aspect === '4:3' || aspect === '3:4') {
933
+ return aspect;
934
+ }
935
+ return '16:9';
936
+ }
937
+ // Volcengine Seedream / Seededit images. Same auth, different endpoint:
938
+ // POST /api/v3/images/generations (OpenAI-compatible payload).
939
+ async function renderVolcengineImage(ctx, credentials) {
940
+ if (!credentials.apiKey) {
941
+ throw new Error('no Volcengine Ark API key — configure it in Settings or set ARK_API_KEY');
942
+ }
943
+ const baseUrl = (credentials.baseUrl || 'https://ark.cn-beijing.volces.com/api/v3').replace(/\/$/, '');
944
+ const body = {
945
+ model: ctx.wireModel,
946
+ prompt: ctx.prompt || 'A high-quality reference image.',
947
+ response_format: 'b64_json',
948
+ // openaiSizeFor branches on the catalog id (gpt-image-* vs dall-e-*
949
+ // accept different size enums), so it must NOT see the post-alias
950
+ // wire name. lefarcen + codex P2 on PR #1309.
951
+ size: openaiSizeFor(ctx.model, ctx.aspect),
952
+ };
953
+ const resp = await fetch(`${baseUrl}/images/generations`, {
954
+ method: 'POST',
955
+ headers: {
956
+ 'authorization': `Bearer ${credentials.apiKey}`,
957
+ 'content-type': 'application/json',
958
+ },
959
+ body: JSON.stringify(body),
960
+ });
961
+ const text = await resp.text();
962
+ if (!resp.ok) {
963
+ throw new Error(`volcengine image ${resp.status}: ${truncate(text, 240)}`);
964
+ }
965
+ let data;
966
+ try {
967
+ data = JSON.parse(text);
968
+ }
969
+ catch {
970
+ throw new Error(`volcengine image non-JSON: ${truncate(text, 200)}`);
971
+ }
972
+ const entry = data && Array.isArray(data.data) ? data.data[0] : null;
973
+ if (!entry)
974
+ throw new Error('volcengine image response had no data[0]');
975
+ let bytes;
976
+ if (entry.b64_json) {
977
+ bytes = Buffer.from(entry.b64_json, 'base64');
978
+ }
979
+ else if (entry.url) {
980
+ const imgResp = await fetch(entry.url);
981
+ if (!imgResp.ok)
982
+ throw new Error(`volcengine image fetch ${imgResp.status}`);
983
+ bytes = Buffer.from(await imgResp.arrayBuffer());
984
+ }
985
+ else {
986
+ throw new Error('volcengine image response missing b64_json/url');
987
+ }
988
+ return {
989
+ bytes,
990
+ providerNote: `volcengine/${ctx.wireModel} · ${ctx.aspect} · ${bytes.length} bytes`,
991
+ suggestedExt: '.png',
992
+ };
993
+ }
994
+ // ---------------------------------------------------------------------------
995
+ // Provider: xAI Grok Imagine.
996
+ //
997
+ // Docs: https://docs.x.ai/developers/model-capabilities/{images,video}/generation
998
+ // * Image: POST /v1/images/generations — synchronous, returns
999
+ // {data:[{b64_json|url}]}; we ask for b64_json so the bytes
1000
+ // arrive in one round-trip.
1001
+ // * Video: POST /v1/videos/generations — may return the finished video
1002
+ // inline ({status:'done', video:{url}}) or an async stub
1003
+ // ({id, status:'pending'}); in the async case we poll
1004
+ // GET /v1/videos/{id} until status flips to done/failed.
1005
+ //
1006
+ // xAI's video model produces native audio (background music + SFX +
1007
+ // ambient) synchronised with the visual; that's the headline
1008
+ // differentiator vs Seedance and Sora and is why grok-imagine-video
1009
+ // declares the `audio` capability.
1010
+ // ---------------------------------------------------------------------------
1011
+ async function renderGrokImage(ctx, credentials) {
1012
+ if (!credentials.apiKey) {
1013
+ throw new Error('no xAI API key — configure it in Settings or set XAI_API_KEY');
1014
+ }
1015
+ const baseUrl = (credentials.baseUrl || 'https://api.x.ai/v1').replace(/\/$/, '');
1016
+ const aspectRatio = grokAspectFor(ctx.aspect);
1017
+ const body = {
1018
+ model: ctx.wireModel,
1019
+ prompt: ctx.prompt || 'A high-quality reference image.',
1020
+ n: 1,
1021
+ aspect_ratio: aspectRatio,
1022
+ response_format: 'b64_json',
1023
+ };
1024
+ const resp = await fetch(`${baseUrl}/images/generations`, {
1025
+ method: 'POST',
1026
+ headers: {
1027
+ 'authorization': `Bearer ${credentials.apiKey}`,
1028
+ 'content-type': 'application/json',
1029
+ },
1030
+ body: JSON.stringify(body),
1031
+ });
1032
+ const text = await resp.text();
1033
+ if (!resp.ok) {
1034
+ throw new Error(`grok image ${resp.status}: ${truncate(text, 240)}`);
1035
+ }
1036
+ let data;
1037
+ try {
1038
+ data = JSON.parse(text);
1039
+ }
1040
+ catch {
1041
+ throw new Error(`grok image non-JSON: ${truncate(text, 200)}`);
1042
+ }
1043
+ const entry = data && Array.isArray(data.data) ? data.data[0] : null;
1044
+ if (!entry)
1045
+ throw new Error('grok image response had no data[0]');
1046
+ let bytes;
1047
+ if (entry.b64_json) {
1048
+ bytes = Buffer.from(entry.b64_json, 'base64');
1049
+ }
1050
+ else if (entry.url) {
1051
+ const imgResp = await fetch(entry.url);
1052
+ if (!imgResp.ok)
1053
+ throw new Error(`grok image fetch ${imgResp.status}`);
1054
+ bytes = Buffer.from(await imgResp.arrayBuffer());
1055
+ }
1056
+ else {
1057
+ throw new Error('grok image response missing b64_json/url');
1058
+ }
1059
+ // xAI's Imagine returns JPEG by default (no format option in the API
1060
+ // surface), but PNG/WebP are technically possible. Sniff the magic
1061
+ // bytes so the on-disk extension matches reality — saving JPEG bytes
1062
+ // as `.png` confuses Finder previews and any downstream consumer that
1063
+ // trusts the extension.
1064
+ return {
1065
+ bytes,
1066
+ providerNote: `grok/${ctx.wireModel} · ${aspectRatio} · ${bytes.length} bytes`,
1067
+ suggestedExt: sniffImageExt(bytes),
1068
+ };
1069
+ }
1070
+ async function renderNanoBananaImage(ctx, credentials) {
1071
+ if (!credentials.apiKey) {
1072
+ throw new Error('no Nano Banana API key — configure it in Settings or set OD_NANOBANANA_API_KEY');
1073
+ }
1074
+ const baseUrl = (credentials.baseUrl || NANOBANANA_DEFAULT_BASE_URL).replace(/\/$/, '');
1075
+ const wireModel = (credentials.model || ctx.wireModel || NANOBANANA_DEFAULT_MODEL).trim();
1076
+ const body = {
1077
+ contents: [{
1078
+ parts: [{
1079
+ text: ctx.prompt || 'A high-quality reference image.',
1080
+ }],
1081
+ }],
1082
+ generationConfig: {
1083
+ responseModalities: ['IMAGE'],
1084
+ imageConfig: {
1085
+ aspectRatio: nanoBananaAspectFor(ctx.aspect),
1086
+ imageSize: NANOBANANA_DEFAULT_IMAGE_SIZE,
1087
+ },
1088
+ },
1089
+ };
1090
+ const resp = await fetch(`${baseUrl}/v1beta/models/${encodeURIComponent(wireModel)}:generateContent`, {
1091
+ method: 'POST',
1092
+ headers: nanoBananaHeaders(baseUrl, credentials.apiKey),
1093
+ body: JSON.stringify(body),
1094
+ });
1095
+ const text = await resp.text();
1096
+ if (!resp.ok) {
1097
+ throw new Error(`nano-banana image ${resp.status}: ${truncate(text, 240)}`);
1098
+ }
1099
+ let data;
1100
+ try {
1101
+ data = JSON.parse(text);
1102
+ }
1103
+ catch {
1104
+ throw new Error(`nano-banana image non-JSON: ${truncate(text, 200)}`);
1105
+ }
1106
+ const bytes = inlineImageBytesFromGenerateContent(data);
1107
+ return {
1108
+ bytes,
1109
+ providerNote: `nano-banana/${wireModel} · ${nanoBananaAspectFor(ctx.aspect)} · ${NANOBANANA_DEFAULT_IMAGE_SIZE} · ${bytes.length} bytes`,
1110
+ suggestedExt: sniffImageExt(bytes),
1111
+ };
1112
+ }
1113
+ function nanoBananaHeaders(baseUrl, apiKey) {
1114
+ const headers = {
1115
+ 'content-type': 'application/json',
1116
+ };
1117
+ if (usesOfficialGoogleApiKeyHeader(baseUrl)) {
1118
+ headers['x-goog-api-key'] = apiKey;
1119
+ return headers;
1120
+ }
1121
+ headers.authorization = `Bearer ${apiKey}`;
1122
+ return headers;
1123
+ }
1124
+ function usesOfficialGoogleApiKeyHeader(baseUrl) {
1125
+ try {
1126
+ const url = new URL(baseUrl);
1127
+ return url.hostname === 'generativelanguage.googleapis.com';
1128
+ }
1129
+ catch {
1130
+ return false;
1131
+ }
1132
+ }
1133
+ function nanoBananaAspectFor(aspect) {
1134
+ if (aspect === '1:1'
1135
+ || aspect === '16:9'
1136
+ || aspect === '9:16'
1137
+ || aspect === '4:3'
1138
+ || aspect === '3:4') {
1139
+ return aspect;
1140
+ }
1141
+ return '1:1';
1142
+ }
1143
+ function inlineImageBytesFromGenerateContent(data) {
1144
+ const candidates = Array.isArray(data?.candidates) ? data.candidates : [];
1145
+ for (const candidate of candidates) {
1146
+ const parts = Array.isArray(candidate?.content?.parts) ? candidate.content.parts : [];
1147
+ for (const part of parts) {
1148
+ const inline = part?.inlineData;
1149
+ if (typeof inline?.data === 'string' && inline.data) {
1150
+ return Buffer.from(inline.data, 'base64');
1151
+ }
1152
+ }
1153
+ }
1154
+ throw new Error('nano-banana image response missing candidates[].content.parts[].inlineData.data');
1155
+ }
1156
+ function sniffImageExt(bytes) {
1157
+ if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {
1158
+ return '.jpg';
1159
+ }
1160
+ if (bytes.length >= 8
1161
+ && bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) {
1162
+ return '.png';
1163
+ }
1164
+ if (bytes.length >= 12
1165
+ && bytes[0] === 0x52 && bytes[1] === 0x49 && bytes[2] === 0x46 && bytes[3] === 0x46
1166
+ && bytes[8] === 0x57 && bytes[9] === 0x45 && bytes[10] === 0x42 && bytes[11] === 0x50) {
1167
+ return '.webp';
1168
+ }
1169
+ return '.png';
1170
+ }
1171
+ async function renderLeonardoImage(ctx, credentials) {
1172
+ if (!credentials.apiKey) {
1173
+ throw new Error('no Leonardo.ai API key — configure it in Settings or set LEONARDO_API_KEY');
1174
+ }
1175
+ const baseUrl = (credentials.baseUrl || 'https://cloud.leonardo.ai/api/rest/v1').replace(/\/$/, '');
1176
+ // Map model IDs to Leonardo.ai platform model IDs
1177
+ const modelMap = {
1178
+ 'leonardo-phoenix': '6b645e3a-d64f-4341-a6d8-7a3690fbf042', // Phoenix
1179
+ 'leonardo-kino-xl': 'aa77f04e-3eec-4034-9c07-d0f619684628', // Kino XL
1180
+ 'leonardo-flux-dev': 'b2614463-296c-462a-9586-aafdb8f00e36', // FLUX.1 [dev]
1181
+ 'leonardo-flux-schnell': '1dd50843-d653-4516-a8e3-f0238ee453ff', // FLUX.1 [schnell]
1182
+ 'leonardo-anime-pastel': '1e60896f-3c26-4296-8ecc-53e2afecc132', // Anime Pastel Dream
1183
+ };
1184
+ const platformModelId = modelMap[ctx.model];
1185
+ if (!platformModelId) {
1186
+ throw new Error(`unsupported leonardo.ai model: ${ctx.model}`);
1187
+ }
1188
+ // Map aspect ratios to Leonardo.ai dimensions
1189
+ const aspectMap = {
1190
+ '1:1': { width: 1024, height: 1024 },
1191
+ '16:9': { width: 1344, height: 768 },
1192
+ '9:16': { width: 768, height: 1344 },
1193
+ '4:3': { width: 1152, height: 896 },
1194
+ '3:4': { width: 896, height: 1152 },
1195
+ };
1196
+ const size = (ctx.aspect ? aspectMap[ctx.aspect] : undefined) || { width: 1024, height: 1024 };
1197
+ // Submit generation request. Phoenix and the FLUX family require the
1198
+ // `contrast` field per Leonardo's API reference; valid values are
1199
+ // 3 (Low) / 3.5 (Medium) / 4 (High). Default to 3.5 so prompts that
1200
+ // omit a contrast hint fall in the middle of the supported range.
1201
+ const requiresContrast = ctx.model === 'leonardo-phoenix'
1202
+ || ctx.model === 'leonardo-flux-dev'
1203
+ || ctx.model === 'leonardo-flux-schnell';
1204
+ const body = {
1205
+ prompt: ctx.prompt || 'A high-quality reference image.',
1206
+ modelId: platformModelId,
1207
+ width: size.width,
1208
+ height: size.height,
1209
+ num_images: 1,
1210
+ ...(requiresContrast ? { contrast: 3.5 } : {}),
1211
+ };
1212
+ const submitResp = await fetch(`${baseUrl}/generations`, {
1213
+ method: 'POST',
1214
+ headers: {
1215
+ 'authorization': `Bearer ${credentials.apiKey}`,
1216
+ 'content-type': 'application/json',
1217
+ },
1218
+ body: JSON.stringify(body),
1219
+ });
1220
+ const submitText = await submitResp.text();
1221
+ if (!submitResp.ok) {
1222
+ throw new Error(`leonardo.ai submit ${submitResp.status}: ${truncate(submitText, 240)}`);
1223
+ }
1224
+ let submitData;
1225
+ try {
1226
+ submitData = JSON.parse(submitText);
1227
+ }
1228
+ catch {
1229
+ throw new Error(`leonardo.ai non-JSON: ${truncate(submitText, 200)}`);
1230
+ }
1231
+ const generationId = submitData?.sdGenerationJob?.generationId;
1232
+ if (!generationId) {
1233
+ throw new Error('leonardo.ai response missing generationId');
1234
+ }
1235
+ // Poll for completion
1236
+ const maxPollMs = 120000; // 2 minutes
1237
+ const pollIntervalMs = 2000; // 2 seconds
1238
+ const startedAt = Date.now();
1239
+ let imageUrl = null;
1240
+ while (Date.now() - startedAt < maxPollMs) {
1241
+ await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
1242
+ const pollResp = await fetch(`${baseUrl}/generations/${generationId}`, {
1243
+ headers: {
1244
+ 'authorization': `Bearer ${credentials.apiKey}`,
1245
+ },
1246
+ });
1247
+ if (!pollResp.ok) {
1248
+ throw new Error(`leonardo.ai poll ${pollResp.status}`);
1249
+ }
1250
+ const pollData = (await pollResp.json());
1251
+ const generation = pollData?.generations_by_pk;
1252
+ if (generation?.status === 'COMPLETE') {
1253
+ const images = generation?.generated_images;
1254
+ if (Array.isArray(images) && images.length > 0) {
1255
+ imageUrl = images[0]?.url;
1256
+ break;
1257
+ }
1258
+ }
1259
+ else if (generation?.status === 'FAILED') {
1260
+ throw new Error('leonardo.ai generation failed');
1261
+ }
1262
+ }
1263
+ if (!imageUrl) {
1264
+ throw new Error('leonardo.ai generation timed out after 2 minutes');
1265
+ }
1266
+ // Fetch the generated image
1267
+ const imgResp = await fetch(imageUrl);
1268
+ if (!imgResp.ok) {
1269
+ throw new Error(`leonardo.ai image fetch ${imgResp.status}`);
1270
+ }
1271
+ const bytes = Buffer.from(await imgResp.arrayBuffer());
1272
+ return {
1273
+ bytes,
1274
+ providerNote: `leonardo.ai/${ctx.model} · ${ctx.aspect} · ${bytes.length} bytes`,
1275
+ suggestedExt: sniffImageExt(bytes),
1276
+ };
1277
+ }
1278
+ async function renderGrokVideo(ctx, credentials, onProgress) {
1279
+ if (!credentials.apiKey) {
1280
+ throw new Error('no xAI API key — configure it in Settings or set XAI_API_KEY');
1281
+ }
1282
+ const baseUrl = (credentials.baseUrl || 'https://api.x.ai/v1').replace(/\/$/, '');
1283
+ // Grok caps duration at 15s. The dispatcher already clamps to
1284
+ // VIDEO_LENGTHS_SEC (which goes up to 30) — re-clamp here so a user
1285
+ // who picked 30 doesn't bounce off the upstream API with a 4xx.
1286
+ const requested = ctx.length || 5;
1287
+ const durationSec = Math.min(Math.max(requested, 1), 15);
1288
+ const aspectRatio = grokAspectFor(ctx.aspect);
1289
+ const body = {
1290
+ model: ctx.wireModel,
1291
+ prompt: ctx.prompt || 'A short cinematic clip.',
1292
+ duration: durationSec,
1293
+ aspect_ratio: aspectRatio,
1294
+ resolution: '720p',
1295
+ };
1296
+ if (ctx.imageRef && ctx.imageRef.dataUrl) {
1297
+ // grok-imagine-video accepts a base64 data URI in `image` for i2v.
1298
+ // Same surface as Seedance — the dispatcher already produced the
1299
+ // data URL via resolveProjectImage, so we just hand it through.
1300
+ body.image = ctx.imageRef.dataUrl;
1301
+ }
1302
+ const submitResp = await fetch(`${baseUrl}/videos/generations`, {
1303
+ method: 'POST',
1304
+ headers: {
1305
+ 'authorization': `Bearer ${credentials.apiKey}`,
1306
+ 'content-type': 'application/json',
1307
+ },
1308
+ body: JSON.stringify(body),
1309
+ });
1310
+ const submitText = await submitResp.text();
1311
+ if (!submitResp.ok) {
1312
+ throw new Error(`grok video submit ${submitResp.status}: ${truncate(submitText, 240)}`);
1313
+ }
1314
+ let submitData;
1315
+ try {
1316
+ submitData = JSON.parse(submitText);
1317
+ }
1318
+ catch {
1319
+ throw new Error(`grok video non-JSON: ${truncate(submitText, 200)}`);
1320
+ }
1321
+ // Two paths: (a) the API returned the finished video synchronously
1322
+ // (cached/short jobs), in which case we skip polling; (b) we got an
1323
+ // {id, status:'pending'} stub and need to poll GET /videos/{id}
1324
+ // until status flips to done/failed/expired.
1325
+ let videoUrl = submitData?.video?.url || null;
1326
+ let lastStatus = submitData?.status || '';
1327
+ const requestId = submitData?.id || submitData?.request_id || null;
1328
+ if (!videoUrl && requestId) {
1329
+ const startedAt = Date.now();
1330
+ const configuredMaxMs = Number(process.env.OD_GROK_VIDEO_MAX_POLL_MS);
1331
+ const maxMs = Number.isFinite(configuredMaxMs) && configuredMaxMs >= 60_000
1332
+ ? configuredMaxMs
1333
+ : 8 * 60 * 1000;
1334
+ if (typeof onProgress === 'function') {
1335
+ const mode = ctx.imageRef ? 'i2v' : 't2v';
1336
+ onProgress(`grok ${mode} task ${requestId} accepted; polling status…`);
1337
+ }
1338
+ while (Date.now() - startedAt < maxMs) {
1339
+ await sleep(4000);
1340
+ const pollResp = await fetch(`${baseUrl}/videos/${encodeURIComponent(requestId)}`, {
1341
+ headers: { 'authorization': `Bearer ${credentials.apiKey}` },
1342
+ });
1343
+ const pollText = await pollResp.text();
1344
+ if (!pollResp.ok) {
1345
+ throw new Error(`grok poll ${pollResp.status}: ${truncate(pollText, 240)}`);
1346
+ }
1347
+ let pollData;
1348
+ try {
1349
+ pollData = JSON.parse(pollText);
1350
+ }
1351
+ catch {
1352
+ throw new Error(`grok poll non-JSON: ${truncate(pollText, 200)}`);
1353
+ }
1354
+ lastStatus = pollData.status || '';
1355
+ if (typeof onProgress === 'function') {
1356
+ const elapsedSec = Math.round((Date.now() - startedAt) / 1000);
1357
+ onProgress(`grok task ${requestId} status=${lastStatus || 'pending'} (elapsed ${elapsedSec}s)`);
1358
+ }
1359
+ if (lastStatus === 'done' || lastStatus === 'succeeded') {
1360
+ videoUrl = pollData?.video?.url || null;
1361
+ break;
1362
+ }
1363
+ if (lastStatus === 'failed' || lastStatus === 'expired') {
1364
+ const reasonRaw = pollData?.error?.message || pollData?.error || lastStatus;
1365
+ const reason = typeof reasonRaw === 'string' ? reasonRaw : JSON.stringify(reasonRaw);
1366
+ throw new Error(`grok task ${lastStatus}: ${reason}`);
1367
+ }
1368
+ }
1369
+ // Loop exited without a videoUrl. Distinguish the two reachable
1370
+ // cases so operators know which lever to pull: bumping the poll
1371
+ // ceiling (timeout) vs filing a bug against the upstream contract
1372
+ // (status=done but no video.url).
1373
+ if (!videoUrl) {
1374
+ const elapsedSec = Math.round((Date.now() - startedAt) / 1000);
1375
+ const ceilingSec = Math.round(maxMs / 1000);
1376
+ throw new Error(`grok video timed out after ${elapsedSec}s waiting for status=done `
1377
+ + `(last status: ${lastStatus || 'pending'}, ceiling ${ceilingSec}s). `
1378
+ + `If your jobs legitimately need longer, raise OD_GROK_VIDEO_MAX_POLL_MS.`);
1379
+ }
1380
+ }
1381
+ if (!videoUrl) {
1382
+ // Submit returned neither an inline video.url nor a request_id —
1383
+ // upstream broke its own contract. Surfacing the last status helps
1384
+ // pinpoint whether it was a transient API blip or a malformed
1385
+ // response we should add a parser branch for.
1386
+ throw new Error(`grok video submit returned no inline video and no request_id to poll `
1387
+ + `(status=${lastStatus || 'unknown'})`);
1388
+ }
1389
+ const dlResp = await fetch(videoUrl);
1390
+ if (!dlResp.ok)
1391
+ throw new Error(`grok video fetch ${dlResp.status}`);
1392
+ const arr = await dlResp.arrayBuffer();
1393
+ const bytes = Buffer.from(arr);
1394
+ return {
1395
+ bytes,
1396
+ providerNote: `grok/${ctx.wireModel} · ${aspectRatio} · ${durationSec}s · ${bytes.length} bytes`,
1397
+ suggestedExt: '.mp4',
1398
+ };
1399
+ }
1400
+ function grokAspectFor(aspect) {
1401
+ // xAI accepts a wide list (1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 2:1,
1402
+ // 1:2, 19.5:9, 9:19.5, 20:9, 9:20, auto). Our MEDIA_ASPECTS subset
1403
+ // is a strict subset — pass through known values, otherwise 16:9.
1404
+ if (aspect === '1:1'
1405
+ || aspect === '16:9'
1406
+ || aspect === '9:16'
1407
+ || aspect === '4:3'
1408
+ || aspect === '3:4') {
1409
+ return aspect;
1410
+ }
1411
+ return '16:9';
1412
+ }
1413
+ // ---------------------------------------------------------------------------
1414
+ // Provider: ElevenLabs — v3 text-to-speech (synchronous).
1415
+ //
1416
+ // Docs: https://elevenlabs.io/docs/api-reference/text-to-speech/convert
1417
+ // The API returns MP3 bytes directly. The catalogue id `elevenlabs-v3`
1418
+ // maps to the wire model `eleven_v3`, while `--voice` selects the
1419
+ // voice id in the path.
1420
+ // ---------------------------------------------------------------------------
1421
+ const ELEVENLABS_DEFAULT_BASE_URL = 'https://api.elevenlabs.io';
1422
+ const ELEVENLABS_DEFAULT_VOICE_ID = '21m00Tcm4TlvDq8ikWAM';
1423
+ const ELEVENLABS_TTS_MODEL_MAP = {
1424
+ 'elevenlabs-v3': 'eleven_v3',
1425
+ };
1426
+ const ELEVENLABS_SFX_MODEL_MAP = {
1427
+ 'elevenlabs-sfx': 'eleven_text_to_sound_v2',
1428
+ };
1429
+ const ELEVENLABS_SFX_MAX_PROMPT_CHARS = 450;
1430
+ const ELEVENLABS_SFX_DEFAULT_PROMPT_INFLUENCE = 0.3;
1431
+ function clampElevenLabsSfxDuration(value) {
1432
+ if (typeof value !== 'number' || !Number.isFinite(value))
1433
+ return 5;
1434
+ return Math.min(30, Math.max(0.5, value));
1435
+ }
1436
+ function clampElevenLabsSfxPromptInfluence(value) {
1437
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
1438
+ return ELEVENLABS_SFX_DEFAULT_PROMPT_INFLUENCE;
1439
+ }
1440
+ return Math.min(1, Math.max(0, value));
1441
+ }
1442
+ function requireElevenLabsPrompt(text, kind) {
1443
+ const trimmed = text.trim();
1444
+ if (!trimmed) {
1445
+ throw new Error(`ElevenLabs ${kind} prompt must not be empty. Pass --prompt before retrying.`);
1446
+ }
1447
+ return trimmed;
1448
+ }
1449
+ function assertElevenLabsSfxPromptLength(text) {
1450
+ const promptChars = Array.from(text).length;
1451
+ if (promptChars > ELEVENLABS_SFX_MAX_PROMPT_CHARS) {
1452
+ throw new Error(`ElevenLabs SFX prompt exceeds ${ELEVENLABS_SFX_MAX_PROMPT_CHARS} characters (${promptChars}). Shorten --prompt before retrying.`);
1453
+ }
1454
+ }
1455
+ async function renderElevenLabsTTS(ctx, credentials) {
1456
+ if (!credentials.apiKey) {
1457
+ throw new Error('no ElevenLabs API key - configure it in Settings or set OD_ELEVENLABS_API_KEY');
1458
+ }
1459
+ const baseUrl = (credentials.baseUrl || ELEVENLABS_DEFAULT_BASE_URL).replace(/\/$/, '');
1460
+ const wireModel = ELEVENLABS_TTS_MODEL_MAP[ctx.model] || ctx.model;
1461
+ const text = requireElevenLabsPrompt(ctx.prompt ?? '', 'TTS');
1462
+ const voiceId = (ctx.voice && ctx.voice.trim()) || ELEVENLABS_DEFAULT_VOICE_ID;
1463
+ const body = {
1464
+ text,
1465
+ model_id: wireModel,
1466
+ voice_settings: {
1467
+ stability: 1,
1468
+ similarity_boost: 1,
1469
+ style: 0,
1470
+ speed: 1,
1471
+ use_speaker_boost: true,
1472
+ },
1473
+ };
1474
+ const resp = await fetch(`${baseUrl}/v1/text-to-speech/${encodeURIComponent(voiceId)}?output_format=mp3_44100_128`, {
1475
+ method: 'POST',
1476
+ headers: {
1477
+ 'xi-api-key': credentials.apiKey,
1478
+ 'content-type': 'application/json',
1479
+ },
1480
+ body: JSON.stringify(body),
1481
+ });
1482
+ if (!resp.ok) {
1483
+ const errText = await resp.text();
1484
+ throw new Error(`elevenlabs tts ${resp.status}: ${truncate(errText, 240)}`);
1485
+ }
1486
+ const arr = await resp.arrayBuffer();
1487
+ const bytes = Buffer.from(arr);
1488
+ if (bytes.length === 0) {
1489
+ throw new Error('elevenlabs tts returned zero bytes');
1490
+ }
1491
+ return {
1492
+ bytes,
1493
+ providerNote: `elevenlabs/${wireModel} · ${voiceId} · ${bytes.length} bytes`,
1494
+ suggestedExt: '.mp3',
1495
+ };
1496
+ }
1497
+ async function renderElevenLabsSfx(ctx, credentials) {
1498
+ if (!credentials.apiKey) {
1499
+ throw new Error('no ElevenLabs API key - configure it in Settings or set OD_ELEVENLABS_API_KEY');
1500
+ }
1501
+ const baseUrl = (credentials.baseUrl || ELEVENLABS_DEFAULT_BASE_URL).replace(/\/$/, '');
1502
+ const wireModel = ELEVENLABS_SFX_MODEL_MAP[ctx.model] || ctx.model;
1503
+ const text = requireElevenLabsPrompt(ctx.prompt ?? '', 'SFX');
1504
+ assertElevenLabsSfxPromptLength(text);
1505
+ const durationSeconds = clampElevenLabsSfxDuration(ctx.duration);
1506
+ const promptInfluence = clampElevenLabsSfxPromptInfluence(ctx.promptInfluence);
1507
+ const body = {
1508
+ text,
1509
+ duration_seconds: durationSeconds,
1510
+ prompt_influence: promptInfluence,
1511
+ ...(ctx.loop ? { loop: true } : {}),
1512
+ model_id: wireModel,
1513
+ };
1514
+ const resp = await fetch(`${baseUrl}/v1/sound-generation?output_format=mp3_44100_128`, {
1515
+ method: 'POST',
1516
+ headers: {
1517
+ 'xi-api-key': credentials.apiKey,
1518
+ 'content-type': 'application/json',
1519
+ },
1520
+ body: JSON.stringify(body),
1521
+ });
1522
+ if (!resp.ok) {
1523
+ const errText = await resp.text();
1524
+ throw new Error(`elevenlabs sfx ${resp.status}: ${truncate(errText, 240)}`);
1525
+ }
1526
+ const arr = await resp.arrayBuffer();
1527
+ const bytes = Buffer.from(arr);
1528
+ if (bytes.length === 0) {
1529
+ throw new Error('elevenlabs sfx returned zero bytes');
1530
+ }
1531
+ return {
1532
+ bytes,
1533
+ providerNote: `elevenlabs/${wireModel} · ${durationSeconds}s${ctx.loop ? ' · loop' : ''} · ${bytes.length} bytes`,
1534
+ suggestedExt: '.mp3',
1535
+ };
1536
+ }
1537
+ // ---------------------------------------------------------------------------
1538
+ // Provider: MiniMax — Speech-02 family text-to-speech (synchronous).
1539
+ //
1540
+ // Docs: https://platform.minimaxi.com — POST /t2a_v2 with a JSON body
1541
+ // describing the voice + audio settings. Response is JSON with the
1542
+ // audio bytes hex-encoded under `data.audio`. The MiniMax catalogue we
1543
+ // surface as the generic id `minimax-tts` resolves to `speech-02-turbo`
1544
+ // (their fast tier). Voice id defaults to a neutral Mandarin voice but
1545
+ // the agent can override via the model registry's `voice` slot.
1546
+ // ---------------------------------------------------------------------------
1547
+ const MINIMAX_DEFAULT_BASE_URL = 'https://api.minimaxi.chat/v1';
1548
+ // Map our generic catalogue ids onto MiniMax's actual model ids. The
1549
+ // `minimax-tts` slot in src/media/models.ts is shorthand for "their
1550
+ // fast TTS tier"; we substitute the real model name on the wire so
1551
+ // MiniMax accepts the request without exposing the user to their
1552
+ // internal naming.
1553
+ const MINIMAX_TTS_MODEL_MAP = {
1554
+ 'minimax-tts': 'speech-02-turbo',
1555
+ };
1556
+ async function renderMinimaxTTS(ctx, credentials) {
1557
+ if (!credentials.apiKey) {
1558
+ throw new Error('no MiniMax API key — configure it in Settings or set OD_MINIMAX_API_KEY');
1559
+ }
1560
+ const baseUrl = (credentials.baseUrl || MINIMAX_DEFAULT_BASE_URL).replace(/\/$/, '');
1561
+ // Precedence: user alias from #1277 (when set) -> project's known
1562
+ // MINIMAX legacy rename map -> catalog id. The user knows their
1563
+ // deployment name better than our hardcoded table, so an explicit
1564
+ // alias trumps the legacy mapping.
1565
+ const wireModel = ctx.wireModel !== ctx.model
1566
+ ? ctx.wireModel
1567
+ : (MINIMAX_TTS_MODEL_MAP[ctx.model] || ctx.model);
1568
+ const text = (ctx.prompt && ctx.prompt.trim()) || 'This is a test.';
1569
+ // Voice id picks: the agent can pass --voice to choose, otherwise we
1570
+ // default to a neutral Mandarin male voice that handles both Chinese
1571
+ // and English text reasonably. MiniMax's voice catalogue is large
1572
+ // (`male-qn-qingse`, `female-shaonv`, etc.) — listed at
1573
+ // platform.minimaxi.com under voice management.
1574
+ const voiceId = (ctx.voice && ctx.voice.trim()) || 'male-qn-qingse';
1575
+ const languageBoost = typeof ctx.language === 'string' ? ctx.language.trim() : '';
1576
+ const body = {
1577
+ model: wireModel,
1578
+ text,
1579
+ stream: false,
1580
+ ...(languageBoost ? { language_boost: languageBoost } : {}),
1581
+ voice_setting: {
1582
+ voice_id: voiceId,
1583
+ speed: 1.0,
1584
+ vol: 1.0,
1585
+ pitch: 0,
1586
+ },
1587
+ audio_setting: {
1588
+ sample_rate: 32000,
1589
+ format: 'mp3',
1590
+ },
1591
+ };
1592
+ const resp = await fetch(`${baseUrl}/t2a_v2`, {
1593
+ method: 'POST',
1594
+ headers: {
1595
+ authorization: `Bearer ${credentials.apiKey}`,
1596
+ 'content-type': 'application/json',
1597
+ },
1598
+ body: JSON.stringify(body),
1599
+ });
1600
+ const respText = await resp.text();
1601
+ if (!resp.ok) {
1602
+ throw new Error(`minimax tts ${resp.status}: ${truncate(respText, 240)}`);
1603
+ }
1604
+ let data;
1605
+ try {
1606
+ data = JSON.parse(respText);
1607
+ }
1608
+ catch {
1609
+ throw new Error(`minimax tts non-JSON: ${truncate(respText, 200)}`);
1610
+ }
1611
+ // MiniMax wraps every response in `base_resp`; even an HTTP 200 can
1612
+ // be a logical failure (`status_code !== 0`). Surface that distinct
1613
+ // class of error so the user knows it's an auth / params issue, not
1614
+ // a network blip.
1615
+ if (data?.base_resp && data.base_resp.status_code !== 0) {
1616
+ throw new Error(`minimax tts api error ${data.base_resp.status_code}: ${data.base_resp.status_msg || 'unknown'}`);
1617
+ }
1618
+ const hex = data?.data?.audio;
1619
+ if (typeof hex !== 'string' || !hex) {
1620
+ throw new Error('minimax tts response missing data.audio');
1621
+ }
1622
+ const bytes = Buffer.from(hex, 'hex');
1623
+ if (bytes.length === 0) {
1624
+ throw new Error('minimax tts decoded zero bytes');
1625
+ }
1626
+ // Pull a few useful descriptors from extra_info for the providerNote
1627
+ // so the FileViewer toolbar tells the truth about what was generated.
1628
+ const xi = data?.extra_info || {};
1629
+ const seconds = xi.audio_length ? Math.round(xi.audio_length / 100) / 10 : '?';
1630
+ return {
1631
+ bytes,
1632
+ providerNote: `minimax/${wireModel} · ${voiceId} · ${seconds}s · ${bytes.length} bytes`,
1633
+ suggestedExt: '.mp3',
1634
+ };
1635
+ }
1636
+ // ---------------------------------------------------------------------------
1637
+ // Provider: SenseAudio — senseaudio-tts-1.5 text-to-speech (synchronous).
1638
+ //
1639
+ // Docs: https://docs.senseaudio.cn — POST /v1/t2a_v2 with a JSON body
1640
+ // shaped like MiniMax's (voice_setting / audio_setting). The response is
1641
+ // JSON with hex-encoded audio under `data.audio` and a `base_resp`
1642
+ // envelope that distinguishes HTTP-level from API-level failures, again
1643
+ // mirroring MiniMax. The catalogue id we surface as `senseaudio-tts`
1644
+ // resolves to `senseaudio-tts-1.5-260319` on the wire — SenseAudio's
1645
+ // recommended flagship model (supports emotion control, polyphonic
1646
+ // characters, LaTeX formula reading, voice cloning, and text-generated
1647
+ // voices). Default voice is `female_0033_b` per the official example; the agent
1648
+ // can override via the model registry's `voice` slot with any system,
1649
+ // cloned, or text-generated voice id from the customer's catalogue.
1650
+ // Audio shape is hard-coded to mp3 / 32kHz / 128kbps / stereo for parity
1651
+ // with the other TTS providers; SenseAudio supports wav/pcm/flac and
1652
+ // other sample rates but we don't expose them through MediaContext yet.
1653
+ // ---------------------------------------------------------------------------
1654
+ const SENSEAUDIO_DEFAULT_BASE_URL = 'https://api.senseaudio.cn';
1655
+ const SENSEAUDIO_DEFAULT_VOICE_ID = 'female_0033_b';
1656
+ const SENSEAUDIO_TTS_MODEL_MAP = {
1657
+ 'senseaudio-tts': 'senseaudio-tts-1.5-260319',
1658
+ };
1659
+ async function renderSenseAudioTTS(ctx, credentials) {
1660
+ if (!credentials.apiKey) {
1661
+ throw new Error('no SenseAudio API key — configure it in Settings or set OD_SENSEAUDIO_API_KEY');
1662
+ }
1663
+ const baseUrl = (credentials.baseUrl || SENSEAUDIO_DEFAULT_BASE_URL).replace(/\/$/, '');
1664
+ const wireModel = SENSEAUDIO_TTS_MODEL_MAP[ctx.model] || ctx.model;
1665
+ const text = (ctx.prompt && ctx.prompt.trim()) || 'This is a test.';
1666
+ const voiceId = (ctx.voice && ctx.voice.trim()) || SENSEAUDIO_DEFAULT_VOICE_ID;
1667
+ const body = {
1668
+ model: wireModel,
1669
+ text,
1670
+ stream: false,
1671
+ voice_setting: {
1672
+ voice_id: voiceId,
1673
+ speed: 1,
1674
+ vol: 1,
1675
+ pitch: 0,
1676
+ },
1677
+ audio_setting: {
1678
+ format: 'mp3',
1679
+ sample_rate: 32000,
1680
+ bitrate: 128000,
1681
+ channel: 2,
1682
+ },
1683
+ };
1684
+ const resp = await fetch(`${baseUrl}/v1/t2a_v2`, {
1685
+ method: 'POST',
1686
+ headers: {
1687
+ authorization: `Bearer ${credentials.apiKey}`,
1688
+ 'content-type': 'application/json',
1689
+ },
1690
+ body: JSON.stringify(body),
1691
+ });
1692
+ const respText = await resp.text();
1693
+ if (!resp.ok) {
1694
+ throw new Error(`senseaudio tts ${resp.status}: ${truncate(respText, 240)}`);
1695
+ }
1696
+ let data;
1697
+ try {
1698
+ data = JSON.parse(respText);
1699
+ }
1700
+ catch {
1701
+ throw new Error(`senseaudio tts non-JSON: ${truncate(respText, 200)}`);
1702
+ }
1703
+ // SenseAudio mirrors MiniMax's base_resp envelope: HTTP 200 can still
1704
+ // be a logical failure (auth, quota, voice not on this account, …).
1705
+ // Surface the upstream status_code/status_msg so users see the real
1706
+ // cause instead of a downstream "missing data.audio" red herring.
1707
+ if (data?.base_resp && data.base_resp.status_code !== 0) {
1708
+ throw new Error(`senseaudio tts api error ${data.base_resp.status_code}: ${data.base_resp.status_msg || 'unknown'}`);
1709
+ }
1710
+ const hex = data?.data?.audio;
1711
+ if (typeof hex !== 'string' || !hex) {
1712
+ throw new Error('senseaudio tts response missing data.audio');
1713
+ }
1714
+ const bytes = Buffer.from(hex, 'hex');
1715
+ if (bytes.length === 0) {
1716
+ throw new Error('senseaudio tts decoded zero bytes');
1717
+ }
1718
+ const xi = data?.extra_info || {};
1719
+ const seconds = xi.audio_length ? Math.round(xi.audio_length / 100) / 10 : '?';
1720
+ return {
1721
+ bytes,
1722
+ providerNote: `senseaudio/${wireModel} · ${voiceId} · ${seconds}s · ${bytes.length} bytes`,
1723
+ suggestedExt: '.mp3',
1724
+ };
1725
+ }
1726
+ // ---------------------------------------------------------------------------
1727
+ // Provider: FishAudio — Speech-1.x family text-to-speech (synchronous).
1728
+ //
1729
+ // Docs: https://docs.fish.audio — POST /v1/tts with a JSON body.
1730
+ // FishAudio returns the audio bytes directly (Content-Type: audio/mpeg
1731
+ // for mp3, audio/wav for wav) rather than wrapping them in JSON, so we
1732
+ // stream the body straight into a Buffer. The catalogue id we expose
1733
+ // as `fish-speech-2` resolves to `speech-1.6` (their newer model) on
1734
+ // the wire; older builds can paste `speech-1.5` via the model picker
1735
+ // once arbitrary model ids are accepted.
1736
+ // ---------------------------------------------------------------------------
1737
+ const FISHAUDIO_DEFAULT_BASE_URL = 'https://api.fish.audio';
1738
+ const FISHAUDIO_TTS_MODEL_MAP = {
1739
+ 'fish-speech-2': 'speech-1.6',
1740
+ };
1741
+ async function renderFishAudioTTS(ctx, credentials) {
1742
+ if (!credentials.apiKey) {
1743
+ throw new Error('no FishAudio API key — configure it in Settings or set OD_FISHAUDIO_API_KEY');
1744
+ }
1745
+ const baseUrl = (credentials.baseUrl || FISHAUDIO_DEFAULT_BASE_URL).replace(/\/$/, '');
1746
+ // Same precedence as the MINIMAX TTS path: user alias wins, then
1747
+ // the project's hardcoded fishaudio map, then catalog id.
1748
+ const wireModel = ctx.wireModel !== ctx.model
1749
+ ? ctx.wireModel
1750
+ : (FISHAUDIO_TTS_MODEL_MAP[ctx.model] || ctx.model);
1751
+ const text = (ctx.prompt && ctx.prompt.trim()) || 'This is a test.';
1752
+ // FishAudio's `reference_id` slot pins which voice the synth uses.
1753
+ // The agent passes it via --voice (carried in ctx.voice). Empty means
1754
+ // FishAudio falls back to its default voice for the chosen model.
1755
+ const body = {
1756
+ text,
1757
+ format: 'mp3',
1758
+ mp3_bitrate: 128,
1759
+ model: wireModel,
1760
+ normalize: true,
1761
+ latency: 'normal',
1762
+ };
1763
+ if (ctx.voice && ctx.voice.trim()) {
1764
+ body.reference_id = ctx.voice.trim();
1765
+ }
1766
+ const resp = await fetch(`${baseUrl}/v1/tts`, {
1767
+ method: 'POST',
1768
+ headers: {
1769
+ authorization: `Bearer ${credentials.apiKey}`,
1770
+ 'content-type': 'application/json',
1771
+ },
1772
+ body: JSON.stringify(body),
1773
+ });
1774
+ if (!resp.ok) {
1775
+ const errText = await resp.text();
1776
+ throw new Error(`fishaudio tts ${resp.status}: ${truncate(errText, 240)}`);
1777
+ }
1778
+ const arr = await resp.arrayBuffer();
1779
+ const bytes = Buffer.from(arr);
1780
+ if (bytes.length === 0) {
1781
+ throw new Error('fishaudio tts returned zero bytes');
1782
+ }
1783
+ return {
1784
+ bytes,
1785
+ providerNote: `fishaudio/${wireModel} · ${bytes.length} bytes`,
1786
+ suggestedExt: '.mp3',
1787
+ };
1788
+ }
1789
+ // ---------------------------------------------------------------------------
1790
+ // Provider: HyperFrames — local HTML→MP4 renderer (heygen-com/hyperframes).
1791
+ //
1792
+ // The agent does the creative work: it reads skills/hyperframes/SKILL.md,
1793
+ // writes a composition (`hyperframes.json` + `meta.json` + `index.html`,
1794
+ // with a GSAP timeline) into a hidden cache dir under the project, then
1795
+ // dispatches here with `--composition-dir <relative-path>`.
1796
+ //
1797
+ // We run `npx hyperframes render <absolutePath> --output <tmp>/render.mp4`
1798
+ // from the daemon process (NOT the agent's shell) for two reasons:
1799
+ // 1. HyperFrames spawns a puppeteer-controlled Chrome to capture frames.
1800
+ // Claude Code's Bash tool wraps subprocesses in macOS sandbox-exec,
1801
+ // under which Chrome hangs partway through frame capture.
1802
+ // 2. Pointing --output at a temp dir keeps HF's auto-created
1803
+ // `work-<uuid>/` (per-frame jpegs + intermediate compiled HTML)
1804
+ // OUT of the project folder. We delete the temp tree in the
1805
+ // `finally` block; only the final mp4 bytes are returned to the
1806
+ // generic dispatcher flow, which writes them into the project dir
1807
+ // under the user-supplied filename.
1808
+ // ---------------------------------------------------------------------------
1809
+ const HYPERFRAMES_RENDER_TIMEOUT_MS = 5 * 60 * 1000;
1810
+ async function renderHyperFramesViaCli(ctx, projectDir, onProgress) {
1811
+ const compRel = ctx.compositionDir;
1812
+ if (typeof compRel !== 'string' || !compRel.trim()) {
1813
+ throw new Error('hyperframes-html requires --composition-dir <project-relative-path> ' +
1814
+ 'pointing at the directory the agent scaffolded with hyperframes.json / ' +
1815
+ 'meta.json / index.html. The agent should write the composition into ' +
1816
+ '$OD_PROJECT_DIR/.hyperframes-cache/<id>/ and pass that path here.');
1817
+ }
1818
+ // Resolve compositionDir against projectDir and refuse anything that
1819
+ // escapes — the agent has free file access to the project but the
1820
+ // dispatcher must not let a bad relative path render an arbitrary
1821
+ // directory on the host.
1822
+ const projectRootResolved = path.resolve(projectDir);
1823
+ const compAbs = path.resolve(projectRootResolved, compRel);
1824
+ if (compAbs !== projectRootResolved &&
1825
+ !compAbs.startsWith(projectRootResolved + path.sep)) {
1826
+ throw new Error(`compositionDir "${compRel}" resolves outside the project directory. ` +
1827
+ 'Pass a path relative to the project (e.g. ".hyperframes-cache/abc").');
1828
+ }
1829
+ // Existence check — render against a missing directory hangs HF for
1830
+ // a while before failing, so short-circuit with a clear error.
1831
+ let compStat;
1832
+ try {
1833
+ compStat = await stat(compAbs);
1834
+ }
1835
+ catch {
1836
+ throw new Error(`compositionDir not found: ${compRel} (resolved to ${compAbs})`);
1837
+ }
1838
+ if (!compStat.isDirectory()) {
1839
+ throw new Error(`compositionDir is not a directory: ${compRel}`);
1840
+ }
1841
+ const indexStat = await stat(path.join(compAbs, 'index.html')).catch(() => null);
1842
+ if (!indexStat || !indexStat.isFile()) {
1843
+ throw new Error(`compositionDir is missing index.html: ${compRel}. The agent must ` +
1844
+ 'write index.html (with window.__timelines registration) before dispatch.');
1845
+ }
1846
+ const tmpRoot = await mkdtemp(path.join(os.tmpdir(), 'open-design-hf-'));
1847
+ const tmpOutput = path.join(tmpRoot, 'render.mp4');
1848
+ try {
1849
+ // Pin --workers 1 to keep memory bounded (each worker is a Chrome
1850
+ // process at ~256 MB). standard quality matches HF's default. We
1851
+ // do NOT pass --quiet so progress lines stream out and the agent
1852
+ // (and the user reading the chat in real time) can see frame-by-
1853
+ // frame capture status instead of staring at a hung pipe.
1854
+ await runHyperFramesRender(compAbs, tmpOutput, onProgress);
1855
+ const bytes = await readFile(tmpOutput);
1856
+ return {
1857
+ bytes,
1858
+ providerNote: `hyperframes/local-html · ${ctx.aspect} · ${bytes.length} bytes`,
1859
+ suggestedExt: '.mp4',
1860
+ };
1861
+ }
1862
+ catch (err) {
1863
+ const stderr = errorStringProp(err, 'stderr').trim();
1864
+ const message = stderr || errorMessage(err);
1865
+ throw new Error(`hyperframes render failed: ${truncate(message, 480)}`);
1866
+ }
1867
+ finally {
1868
+ await rm(tmpRoot, { recursive: true, force: true });
1869
+ }
1870
+ }
1871
+ /**
1872
+ * Run `npx hyperframes render` and stream every line of stdout/stderr
1873
+ * through `onProgress`. Resolves on a clean exit, rejects on non-zero
1874
+ * exit (with the stderr tail attached so the dispatcher can surface it).
1875
+ *
1876
+ * Streaming matters for UX: the render typically takes 60–120s and
1877
+ * HF prints "Capturing frame N/M" as it goes. Without piping these
1878
+ * lines back to the caller, the HTTP request looks hung and the
1879
+ * agent's chat tool shows a long quiet spinner — users can't tell
1880
+ * whether anything is happening.
1881
+ */
1882
+ function runHyperFramesRender(compAbs, tmpOutput, onProgress) {
1883
+ return new Promise((resolve, reject) => {
1884
+ const child = spawn('npx', [
1885
+ '-y',
1886
+ 'hyperframes',
1887
+ 'render',
1888
+ compAbs,
1889
+ '--output',
1890
+ tmpOutput,
1891
+ '--workers',
1892
+ '1',
1893
+ ], {
1894
+ // Inherit env so npx can find the cached hyperframes install
1895
+ // and any user-level node config. stdin closed (HF doesn't
1896
+ // read from it), stdout/stderr piped so we can stream.
1897
+ env: process.env,
1898
+ stdio: ['ignore', 'pipe', 'pipe'],
1899
+ });
1900
+ // HF uses ANSI escape sequences (cursor moves, color codes, line
1901
+ // erases) for its pretty progress bar. Strip those before
1902
+ // forwarding so the agent's chat doesn't render a wall of `[2K`.
1903
+ // The regex covers CSI sequences (most of what HF emits).
1904
+ const stripAnsi = (s) => s.replace(/\x1b\[[0-9;?]*[A-Za-z]/g, '').replace(/\x1b\[\?[0-9]+[hl]/g, '');
1905
+ const emit = (chunk) => {
1906
+ if (typeof onProgress !== 'function')
1907
+ return;
1908
+ const text = stripAnsi(chunk.toString('utf8'));
1909
+ // HF refreshes a single progress line many times per second; split
1910
+ // on \r and \n so each "Capturing frame X/Y" update reaches the
1911
+ // caller as its own line. Drop empty/duplicate lines so the
1912
+ // SSE stream stays compact.
1913
+ const lines = text.split(/[\r\n]+/);
1914
+ for (const line of lines) {
1915
+ const trimmed = line.trim();
1916
+ if (!trimmed)
1917
+ continue;
1918
+ try {
1919
+ onProgress(trimmed);
1920
+ }
1921
+ catch {
1922
+ // best-effort: never let an emitter throw kill the render
1923
+ }
1924
+ }
1925
+ };
1926
+ let stderrTail = '';
1927
+ child.stdout.on('data', emit);
1928
+ child.stderr.on('data', (chunk) => {
1929
+ stderrTail += chunk.toString('utf8');
1930
+ if (stderrTail.length > 8000)
1931
+ stderrTail = stderrTail.slice(-8000);
1932
+ emit(chunk);
1933
+ });
1934
+ const timer = setTimeout(() => {
1935
+ try {
1936
+ child.kill('SIGKILL');
1937
+ }
1938
+ catch {
1939
+ // ignore
1940
+ }
1941
+ reject(new Error(`hyperframes render timed out after ${Math.round(HYPERFRAMES_RENDER_TIMEOUT_MS / 1000)}s`));
1942
+ }, HYPERFRAMES_RENDER_TIMEOUT_MS);
1943
+ child.on('error', (err) => {
1944
+ clearTimeout(timer);
1945
+ reject(err);
1946
+ });
1947
+ child.on('close', (code, signal) => {
1948
+ clearTimeout(timer);
1949
+ if (code === 0)
1950
+ return resolve();
1951
+ const reason = signal ? `signal ${signal}` : `exit ${code}`;
1952
+ const tail = stderrTail.trim().split('\n').slice(-12).join('\n');
1953
+ const err = new Error(`hyperframes render exited ${reason}` + (tail ? `\n${tail}` : ''));
1954
+ err.stderr = tail;
1955
+ reject(err);
1956
+ });
1957
+ });
1958
+ }
1959
+ // ---------------------------------------------------------------------------
1960
+ // Stub renderer.
1961
+ //
1962
+ // Used when no real provider integration ships for (provider, surface)
1963
+ // or when the real one fails. Produces small but valid bytes so the
1964
+ // downstream FileViewer round-trip works while the backend matures.
1965
+ // ---------------------------------------------------------------------------
1966
+ async function renderStub(ctx, fileName) {
1967
+ const note = ctx.provider && !ctx.provider.integrated
1968
+ ? `stub-${ctx.surface} · provider '${ctx.provider.id}' integration pending`
1969
+ : `stub-${ctx.surface} · model=${ctx.model}`;
1970
+ if (ctx.surface === 'image') {
1971
+ const ext = path.extname(fileName).toLowerCase();
1972
+ if (ext === '.svg') {
1973
+ return { bytes: Buffer.from(svgPlaceholder(ctx), 'utf8'), providerNote: note };
1974
+ }
1975
+ const png = Buffer.from([
1976
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
1977
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
1978
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x15, 0xc4, 0x89, 0x00, 0x00, 0x00,
1979
+ 0x0d, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x63, 0x00, 0x01, 0x00, 0x00,
1980
+ 0x05, 0x00, 0x01, 0x0d, 0x0a, 0x2d, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x49,
1981
+ 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
1982
+ ]);
1983
+ return {
1984
+ bytes: png,
1985
+ providerNote: `${note} · aspect=${ctx.aspect} · prompt=${truncate(ctx.prompt, 60)}`,
1986
+ };
1987
+ }
1988
+ if (ctx.surface === 'video') {
1989
+ const ftyp = Buffer.from([
1990
+ 0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d,
1991
+ 0x00, 0x00, 0x02, 0x00, 0x69, 0x73, 0x6f, 0x6d, 0x69, 0x73, 0x6f, 0x32,
1992
+ ]);
1993
+ const mdat = Buffer.from([0x00, 0x00, 0x00, 0x08, 0x6d, 0x64, 0x61, 0x74]);
1994
+ return {
1995
+ bytes: Buffer.concat([ftyp, mdat]),
1996
+ providerNote: `${note} · aspect=${ctx.aspect} · length=${ctx.length ?? '?'}s · prompt=${truncate(ctx.prompt, 60)}`,
1997
+ };
1998
+ }
1999
+ // Audio
2000
+ const ext = path.extname(fileName).toLowerCase();
2001
+ if (ext === '.wav') {
2002
+ return {
2003
+ bytes: silentWav(0.5),
2004
+ providerNote: `${note} · kind=${ctx.audioKind} · duration=${ctx.duration ?? '?'}s`,
2005
+ };
2006
+ }
2007
+ const mp3 = Buffer.from([
2008
+ 0xff, 0xfb, 0x90, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2009
+ ]);
2010
+ return {
2011
+ bytes: mp3,
2012
+ providerNote: `${note} · kind=${ctx.audioKind} · voice=${ctx.voice || '-'} · duration=${ctx.duration ?? '?'}s`,
2013
+ };
2014
+ }
2015
+ function svgPlaceholder(ctx) {
2016
+ const [w, h] = aspectToBox(ctx.aspect, 800);
2017
+ const safe = (s) => String(s || '')
2018
+ .replace(/&/g, '&amp;')
2019
+ .replace(/</g, '&lt;')
2020
+ .replace(/>/g, '&gt;');
2021
+ return [
2022
+ `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${w} ${h}" width="${w}" height="${h}">`,
2023
+ `<rect width="${w}" height="${h}" fill="#0f1424"/>`,
2024
+ `<text x="50%" y="50%" fill="#7da4ff" font-family="ui-sans-serif" font-size="20" text-anchor="middle">${safe(ctx.model)} — ${safe(ctx.prompt).slice(0, 60)}</text>`,
2025
+ '</svg>',
2026
+ ].join('');
2027
+ }
2028
+ function aspectToBox(aspect, base) {
2029
+ const [a, b] = String(aspect || '1:1').split(':').map(Number);
2030
+ if (!a || !b)
2031
+ return [base, base];
2032
+ if (a >= b)
2033
+ return [base, Math.round((base * b) / a)];
2034
+ return [Math.round((base * a) / b), base];
2035
+ }
2036
+ function silentWav(seconds) {
2037
+ const sampleRate = 8000;
2038
+ const numSamples = Math.max(1, Math.round(sampleRate * seconds));
2039
+ const dataSize = numSamples * 2;
2040
+ const buf = Buffer.alloc(44 + dataSize);
2041
+ buf.write('RIFF', 0, 'ascii');
2042
+ buf.writeUInt32LE(36 + dataSize, 4);
2043
+ buf.write('WAVE', 8, 'ascii');
2044
+ buf.write('fmt ', 12, 'ascii');
2045
+ buf.writeUInt32LE(16, 16);
2046
+ buf.writeUInt16LE(1, 20);
2047
+ buf.writeUInt16LE(1, 22);
2048
+ buf.writeUInt32LE(sampleRate, 24);
2049
+ buf.writeUInt32LE(sampleRate * 2, 28);
2050
+ buf.writeUInt16LE(2, 32);
2051
+ buf.writeUInt16LE(16, 34);
2052
+ buf.write('data', 36, 'ascii');
2053
+ buf.writeUInt32LE(dataSize, 40);
2054
+ return buf;
2055
+ }
2056
+ function truncate(s, n) {
2057
+ const v = String(s || '');
2058
+ if (v.length <= n)
2059
+ return v;
2060
+ return v.slice(0, n - 1) + '…';
2061
+ }
2062
+ function sleep(ms) {
2063
+ return new Promise((resolve) => setTimeout(resolve, ms));
2064
+ }
2065
+ //# sourceMappingURL=media.js.map