@koda-sl/baker-cli 0.532.0 → 0.534.0-dev.911a80433

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 (863) hide show
  1. package/README.md +1 -1
  2. package/dist/account-BRRFMDXZ.js +82 -0
  3. package/dist/account-MQI7EZBH.js +82 -0
  4. package/dist/account-reads-K6YDAOHX.js +219 -0
  5. package/dist/account-users-QS54ZEOD.js +64 -0
  6. package/dist/account-writes-PGGGP26M.js +68 -0
  7. package/dist/accounts-H3U7LARM.js +80 -0
  8. package/dist/accounts-IW62WBX5.js +701 -0
  9. package/dist/actions-2CUQFZNA.js +55 -0
  10. package/dist/activecampaign-WAMDVBUO.js +938 -0
  11. package/dist/ad-group-writes-ROUU6BHU.js +172 -0
  12. package/dist/ad-groups-Y2BSRLIN.js +70 -0
  13. package/dist/ad-writes-NF4LCGVP.js +176 -0
  14. package/dist/add-4P3CUHAN.js +305 -0
  15. package/dist/add-UHWRBSFE.js +107 -0
  16. package/dist/ads-CPMX3L4A.js +79 -0
  17. package/dist/ads-TDN7OYSU.js +48 -0
  18. package/dist/advertisers-6CHV5N2V.js +123 -0
  19. package/dist/analytics-4GTUW42V.js +2437 -0
  20. package/dist/analytics-MV2RQ6KR.js +447 -0
  21. package/dist/animate-EOSLSA7F.js +480 -0
  22. package/dist/assign-RN5DGDS2.js +80 -0
  23. package/dist/audience-size-7DYMCXDM.js +76 -0
  24. package/dist/audiences-VMGB2JZG.js +280 -0
  25. package/dist/audit-7U7G2JKS.js +154 -0
  26. package/dist/autocomplete-E6YHJ3HH.js +114 -0
  27. package/dist/avatars-6JHVTSXH.js +38 -0
  28. package/dist/bid-pricing-J3OJK4J3.js +103 -0
  29. package/dist/brand-3EAQFDYN.js +22 -0
  30. package/dist/brief-ADGCGC3H.js +543 -0
  31. package/dist/campaign-groups-GN7D5UXE.js +99 -0
  32. package/dist/campaign-writes-HKWI6GYU.js +168 -0
  33. package/dist/campaign-writes-UORRIIWY.js +176 -0
  34. package/dist/campaigns-5I76AV7F.js +113 -0
  35. package/dist/campaigns-BEXDLBT3.js +111 -0
  36. package/dist/campaigns-GONROKTU.js +78 -0
  37. package/dist/canvas-CHV34G62.js +46 -0
  38. package/dist/capabilities-VKBIQ2BR.js +147 -0
  39. package/dist/catalog-VXANSX2O.js +66 -0
  40. package/dist/catalog-VXANSX2O.js.map +1 -0
  41. package/dist/catalogs-LXEM7NNC.js +130 -0
  42. package/dist/changes-4OYC4NMW.js +135 -0
  43. package/dist/chatgpt-XV6CVKLN.js +47 -0
  44. package/dist/chats-W35ZPZEW.js +279 -0
  45. package/dist/check-3D63D4ZT.js +107 -0
  46. package/dist/chunk-2PC26XRF.js +592 -0
  47. package/dist/chunk-2UZHRLLO.js +148 -0
  48. package/dist/chunk-45EERHDB.js +783 -0
  49. package/dist/chunk-55B4AJY3.js +249 -0
  50. package/dist/chunk-56UWXQEN.js +392 -0
  51. package/dist/chunk-5G5QFFJY.js +275 -0
  52. package/dist/chunk-5GHKZLID.js +438 -0
  53. package/dist/chunk-5HGAO4ZI.js +89 -0
  54. package/dist/chunk-5YN53OAA.js +61 -0
  55. package/dist/chunk-6CCEEVXJ.js +285 -0
  56. package/dist/chunk-6HGLQJ6A.js +638 -0
  57. package/dist/chunk-6OIKNJ7G.js +26 -0
  58. package/dist/chunk-6QGBBX7F.js +46 -0
  59. package/dist/chunk-6RTZPBAT.js +19 -0
  60. package/dist/chunk-7MY3QHGA.js +203 -0
  61. package/dist/chunk-AH6TDWYS.js +3510 -0
  62. package/dist/chunk-AH6TDWYS.js.map +1 -0
  63. package/dist/chunk-BKOUVU6X.js +547 -0
  64. package/dist/chunk-CBQPKCFE.js +170 -0
  65. package/dist/chunk-CWZ2ODJQ.js +57 -0
  66. package/dist/chunk-DBPPTM3W.js +24026 -0
  67. package/dist/chunk-DBPPTM3W.js.map +1 -0
  68. package/dist/chunk-DGZYZWMK.js +843 -0
  69. package/dist/chunk-DMA67YC3.js +344 -0
  70. package/dist/chunk-DT3V5EGL.js +2209 -0
  71. package/dist/chunk-DT3V5EGL.js.map +1 -0
  72. package/dist/chunk-DYOUJERF.js +7234 -0
  73. package/dist/chunk-E3FMS5DA.js +297 -0
  74. package/dist/chunk-EIRGJD3Q.js +167 -0
  75. package/dist/chunk-F3CZFUXZ.js +3187 -0
  76. package/dist/chunk-F3CZFUXZ.js.map +1 -0
  77. package/dist/chunk-G3MEYGXC.js +1518 -0
  78. package/dist/chunk-G3MN4HIX.js +831 -0
  79. package/dist/chunk-G53CUQZV.js +207 -0
  80. package/dist/chunk-GPZVYXJZ.js +455 -0
  81. package/dist/chunk-HGHVNUJT.js +156 -0
  82. package/dist/chunk-IZABTTW5.js +228 -0
  83. package/dist/chunk-J3HA4RFY.js +51 -0
  84. package/dist/chunk-JGOYO7I2.js +103 -0
  85. package/dist/chunk-JUF6Q5X7.js +8954 -0
  86. package/dist/chunk-KAAYVKBH.js +479 -0
  87. package/dist/chunk-KUM36NSV.js +429 -0
  88. package/dist/chunk-MHSVWQK6.js +91 -0
  89. package/dist/chunk-MTV2RSGY.js +63 -0
  90. package/dist/chunk-MUS2UTWU.js +4254 -0
  91. package/dist/chunk-MUS2UTWU.js.map +1 -0
  92. package/dist/chunk-N4BK6OKX.js +91 -0
  93. package/dist/chunk-NP3FPCPN.js +377 -0
  94. package/dist/chunk-OAXQPLTG.js +604 -0
  95. package/dist/chunk-OI2CKYAQ.js +846 -0
  96. package/dist/chunk-QUYDMAQN.js +169 -0
  97. package/dist/chunk-RIA5RXPL.js +387 -0
  98. package/dist/chunk-S556LOAP.js +930 -0
  99. package/dist/chunk-S556LOAP.js.map +1 -0
  100. package/dist/chunk-SIKCVWM3.js +76 -0
  101. package/dist/chunk-SOS4QFLE.js +5471 -0
  102. package/dist/chunk-SOS4QFLE.js.map +1 -0
  103. package/dist/chunk-T65Y7N7H.js +225 -0
  104. package/dist/chunk-T75WL56Z.js +224 -0
  105. package/dist/chunk-TGCDXZ5X.js +910 -0
  106. package/dist/chunk-TOUF5ME6.js +1646 -0
  107. package/dist/chunk-TWCS6FSC.js +191 -0
  108. package/dist/chunk-UPXPBA4W.js +676 -0
  109. package/dist/chunk-URMAEVZO.js +150 -0
  110. package/dist/chunk-UUWUJ64R.js +197 -0
  111. package/dist/chunk-VGUGFRWF.js +494 -0
  112. package/dist/chunk-VYJLS64A.js +1902 -0
  113. package/dist/chunk-VYJLS64A.js.map +1 -0
  114. package/dist/chunk-WEQZ563U.js +319 -0
  115. package/dist/chunk-WUCTGDV7.js +163 -0
  116. package/dist/chunk-XCRYRVKK.js +5368 -0
  117. package/dist/chunk-XJ5TX772.js +131 -0
  118. package/dist/chunk-XPIBSDG4.js +274 -0
  119. package/dist/chunk-Y6MLSN6W.js +1919 -0
  120. package/dist/chunk-YBFZJ5EB.js +66 -0
  121. package/dist/chunk-YR3OPPUE.js +142 -0
  122. package/dist/chunk-YXQFCQX2.js +64 -0
  123. package/dist/chunk-Z3Y67AH6.js +98 -0
  124. package/dist/chunk-ZKRRYVDG.js +23 -0
  125. package/dist/claim-DWGPEVJN.js +200 -0
  126. package/dist/cli.js +31 -31
  127. package/dist/companies-3VT7OJAA.js +198 -0
  128. package/dist/company-XEPW45AT.js +308 -0
  129. package/dist/complete-AEX34ICU.js +84 -0
  130. package/dist/connect-TF4FCXDV.js +45 -0
  131. package/dist/conversation-6WWZMPAB.js +96 -0
  132. package/dist/conversion-report-I6R2FDCD.js +127 -0
  133. package/dist/conversion-upload-command-QD6MGLY4.js +439 -0
  134. package/dist/conversion-writes-H2JOAORW.js +122 -0
  135. package/dist/conversions-D46PQRWF.js +140 -0
  136. package/dist/conversions-WGW43FUE.js +78 -0
  137. package/dist/create-7WV7XWZV.js +62 -0
  138. package/dist/create-OUZZLPQK.js +210 -0
  139. package/dist/create-QRT6O5PN.js +135 -0
  140. package/dist/create-WSEYNFTP.js +239 -0
  141. package/dist/creatives-BSZY7VDQ.js +223 -0
  142. package/dist/creatives-DBDFDHX7.js +58 -0
  143. package/dist/credentials-P7GQYIE3.js +290 -0
  144. package/dist/critique-6F4FWQN5.js +232 -0
  145. package/dist/critique-X2YDOMON.js +1451 -0
  146. package/dist/crm-O6YG6777.js +227 -0
  147. package/dist/crm-VNAUSVC5.js +323 -0
  148. package/dist/currency-UVT3HEZT.js +88 -0
  149. package/dist/customers-VJ3TXILQ.js +59 -0
  150. package/dist/delete-3H377GOM.js +67 -0
  151. package/dist/delete-EH3XL26Z.js +57 -0
  152. package/dist/delete-QYSOAVP4.js +69 -0
  153. package/dist/demographics-GKJZ5PV2.js +141 -0
  154. package/dist/discard-46RALLBO.js +69 -0
  155. package/dist/discover-C4TG7JP7.js +172 -0
  156. package/dist/domain-JNNWJNQE.js +101 -0
  157. package/dist/download-3R5IHN5F.js +172 -0
  158. package/dist/draft-3L4SNDGO.js +283 -0
  159. package/dist/draft-EADHX7XL.js +335 -0
  160. package/dist/draft-TAM7IUPH.js +220 -0
  161. package/dist/draft-VSXBSXSX.js +308 -0
  162. package/dist/draft-XCYSZWA6.js +310 -0
  163. package/dist/engine/index.js +8 -7
  164. package/dist/experiments-JVGAKWFA.js +236 -0
  165. package/dist/facets-JG44XXAT.js +117 -0
  166. package/dist/feedback-3JCNU6MT.js +115 -0
  167. package/dist/feedback-3JCNU6MT.js.map +1 -0
  168. package/dist/feedback-record-7WXGKXNS.js +269 -0
  169. package/dist/feedback-record-7WXGKXNS.js.map +1 -0
  170. package/dist/fetch-SLDDORH4.js +179 -0
  171. package/dist/fit-GNQHRKP7.js +65 -0
  172. package/dist/flows-NRPABVUJ.js +250 -0
  173. package/dist/fonts-VN2QXPAQ.js +39 -0
  174. package/dist/forecast-SIX6AAVX.js +121 -0
  175. package/dist/forecast-ZXOSLITM.js +169 -0
  176. package/dist/funnel-QEZWKSFR.js +397 -0
  177. package/dist/generate-HOMLLUCN.js +263 -0
  178. package/dist/get-BXMLPLIC.js +82 -0
  179. package/dist/get-NF3SPPVX.js +59 -0
  180. package/dist/google-XVSL3XAB.js +3267 -0
  181. package/dist/google-ads-5NBAMFPB.js +198 -0
  182. package/dist/history-2U5OXDV7.js +102 -0
  183. package/dist/history-A6KMJRPZ.js +69 -0
  184. package/dist/history-IDVWUSYU.js +136 -0
  185. package/dist/hubspot-YPBNNVHC.js +782 -0
  186. package/dist/ideas-4Q7YBUGC.js +45 -0
  187. package/dist/images-BRBSRYEX.js +92 -0
  188. package/dist/ingest-AIOFOAQE.js +27 -0
  189. package/dist/ingest-HPEBFXCP.js +123 -0
  190. package/dist/insights-TR5EQAMA.js +132 -0
  191. package/dist/inspect-ITKB2QT3.js +192 -0
  192. package/dist/intent-E6HKRMNE.js +95 -0
  193. package/dist/keyword-gap-D4WAEJAH.js +130 -0
  194. package/dist/keyword-metrics-4UDT5GNW.js +200 -0
  195. package/dist/keywords-for-site-YQAQQIHJ.js +131 -0
  196. package/dist/landing-6JAIZH4H.js +28 -0
  197. package/dist/languages-AUAZIVL4.js +40 -0
  198. package/dist/leads-6XZRTPJL.js +115 -0
  199. package/dist/learn-VQGATNB4.js +207 -0
  200. package/dist/line-item-writes-TRTDQ55N.js +211 -0
  201. package/dist/line-items-SC73GQLQ.js +107 -0
  202. package/dist/link-ODLNZTZC.js +67 -0
  203. package/dist/linkedin-HPZP4MGS.js +1328 -0
  204. package/dist/linkedin-person-ELEPEST5.js +139 -0
  205. package/dist/list-26EOYW37.js +154 -0
  206. package/dist/list-GLN62MRB.js +67 -0
  207. package/dist/list-YLPOXOCI.js +306 -0
  208. package/dist/locations-D5N75BUK.js +69 -0
  209. package/dist/locations-P5PTCRSF.js +40 -0
  210. package/dist/log-66XLWNCD.js +95 -0
  211. package/dist/make-3ADCSNFC.js +1367 -0
  212. package/dist/make-3ADCSNFC.js.map +1 -0
  213. package/dist/map-3SGKGWSY.js +436 -0
  214. package/dist/mcp-ZSPJE3Y6.js +729 -0
  215. package/dist/media-sources-UBQCVRGK.js +35 -0
  216. package/dist/members-76XFDSMX.js +47 -0
  217. package/dist/metrics-XCD3IJSM.js +152 -0
  218. package/dist/models-WNK7Z6TR.js +155 -0
  219. package/dist/normalize-VC7HUODA.js +144 -0
  220. package/dist/options-5BPPM5N3.js +125 -0
  221. package/dist/organization-PXND43LQ.js +949 -0
  222. package/dist/performance-DDZOJ5GD.js +5565 -0
  223. package/dist/performance-Q25RDNM6.js +27 -0
  224. package/dist/pixels-KRK2B7M3.js +62 -0
  225. package/dist/promoted-tweet-writes-LIFJFF7N.js +183 -0
  226. package/dist/promoted-tweets-H5RMRQD2.js +119 -0
  227. package/dist/publish-LBHYEZW3.js +344 -0
  228. package/dist/query-A53T6QJF.js +62 -0
  229. package/dist/reddit-H4R23K27.js +29 -0
  230. package/dist/refresh-3QKUSERK.js +97 -0
  231. package/dist/release-JMYTQZLK.js +63 -0
  232. package/dist/relevant-pages-DOCKQEMZ.js +99 -0
  233. package/dist/remove-F7GEZMKB.js +53 -0
  234. package/dist/reopen-Y557X6IX.js +66 -0
  235. package/dist/rerun-RWBKQGVF.js +96 -0
  236. package/dist/rerun-RWBKQGVF.js.map +1 -0
  237. package/dist/research-3OJ5UZER.js +265 -0
  238. package/dist/research-AYO522XS.js +72 -0
  239. package/dist/reset-BL7M4LL7.js +57 -0
  240. package/dist/reset-PMVUQTYU.js +57 -0
  241. package/dist/resolve-CSWSGGK6.js +124 -0
  242. package/dist/retry-MVOPE2O2.js +65 -0
  243. package/dist/retry-WT46B5SC.js +63 -0
  244. package/dist/revenue-ZLE645Z5.js +91 -0
  245. package/dist/rules-Q6HWHFVU.js +99 -0
  246. package/dist/rules-add-7EPXWSQV.js +465 -0
  247. package/dist/run-4DE5XUVB.js +71 -0
  248. package/dist/run-PAND6N4V.js +69 -0
  249. package/dist/scaffold-ad-44INCR5V.js +1513 -0
  250. package/dist/scaffold-ad-44INCR5V.js.map +1 -0
  251. package/dist/scaffold-static-ad-ATXP44TE.js +1011 -0
  252. package/dist/scaffold-static-ad-ATXP44TE.js.map +1 -0
  253. package/dist/scaffold-video-L4FQWQ5A.js +885 -0
  254. package/dist/scaffold-video-L4FQWQ5A.js.map +1 -0
  255. package/dist/schedule-CSE2XFFF.js +64 -0
  256. package/dist/scheduled-agents-NXHXQZBO.js +55 -0
  257. package/dist/schema-QITMY7ZE.js +135 -0
  258. package/dist/search-HOYOSX2H.js +177 -0
  259. package/dist/select-E5TP7JR6.js +110 -0
  260. package/dist/select-E5TP7JR6.js.map +1 -0
  261. package/dist/set-prompt-QGV3IUIP.js +199 -0
  262. package/dist/set-prompt-QGV3IUIP.js.map +1 -0
  263. package/dist/setup-links-HQ6WVKEP.js +144 -0
  264. package/dist/shopify-6MLRXSC2.js +3958 -0
  265. package/dist/site-5B44TV46.js +180 -0
  266. package/dist/sources-OMINR6RG.js +30 -0
  267. package/dist/sources-PNEWSEBG.js +457 -0
  268. package/dist/stale-G2BPCBYZ.js +90 -0
  269. package/dist/stale-G2BPCBYZ.js.map +1 -0
  270. package/dist/status-QNXQNAKH.js +65 -0
  271. package/dist/studio-BNYFU6ZH.js +49 -0
  272. package/dist/sync-OYOS7HQL.js +57 -0
  273. package/dist/sync-definition-2VEFGHYK.js +70 -0
  274. package/dist/tags-56H6O7ZL.js +26 -0
  275. package/dist/tags-CYR2IPEJ.js +23 -0
  276. package/dist/tags-RBUYBAA6.js +227 -0
  277. package/dist/tags-WVJNOATS.js +23 -0
  278. package/dist/tags-ZTVOZOYP.js +23 -0
  279. package/dist/targeting-criteria-EZNZOUAE.js +113 -0
  280. package/dist/targets-CU7IUPV2.js +106 -0
  281. package/dist/testimonials-THJJYQ42.js +32 -0
  282. package/dist/themes-TSEMQ4EJ.js +95 -0
  283. package/dist/top-companies-W6DA3MZQ.js +111 -0
  284. package/dist/transcript-KZ74PK23.js +165 -0
  285. package/dist/translate-FQOYDETZ.js +603 -0
  286. package/dist/translate-FQOYDETZ.js.map +1 -0
  287. package/dist/triggers-OJKTDJSV.js +144 -0
  288. package/dist/unlink-ZE7464NK.js +70 -0
  289. package/dist/unstage-RGIPGM3E.js +88 -0
  290. package/dist/update-2VYVJCY2.js +192 -0
  291. package/dist/update-63MMKPHI.js +155 -0
  292. package/dist/update-JHWPEJN7.js +66 -0
  293. package/dist/update-WHHAH4IE.js +101 -0
  294. package/dist/upload-7XG5LU7C.js +130 -0
  295. package/dist/url-options-2BGF2D5E.js +131 -0
  296. package/dist/url-params-FBDTXQGY.js +101 -0
  297. package/dist/validate-Z3SRQKSO.js +125 -0
  298. package/dist/validate-Z3SRQKSO.js.map +1 -0
  299. package/dist/videos-4TLBI3E3.js +41 -0
  300. package/dist/viewer-check-ELVSS3DM.js +83 -0
  301. package/dist/web-LDR6HO5M.js +143 -0
  302. package/dist/winning-ads-7SWUVUDA.js +86 -0
  303. package/dist/write-commands-24FRMQW4.js +1525 -0
  304. package/dist/x-UOGRWXET.js +47 -0
  305. package/package.json +1 -1
  306. package/dist/account-2UXZ6CZJ.js +0 -82
  307. package/dist/account-OWMJG4IW.js +0 -82
  308. package/dist/account-reads-W2GAN335.js +0 -219
  309. package/dist/account-users-WLTQNPL7.js +0 -64
  310. package/dist/account-writes-TNADUSHW.js +0 -68
  311. package/dist/accounts-D3SQTZB7.js +0 -701
  312. package/dist/accounts-HRQFOTBJ.js +0 -80
  313. package/dist/actions-VJXED57L.js +0 -55
  314. package/dist/activecampaign-TNJIQA4C.js +0 -938
  315. package/dist/ad-group-writes-7BGCZA3M.js +0 -172
  316. package/dist/ad-groups-A6GU6EW5.js +0 -70
  317. package/dist/ad-writes-CEMCUDU2.js +0 -176
  318. package/dist/add-DRTKSLEQ.js +0 -107
  319. package/dist/add-LBHISK44.js +0 -305
  320. package/dist/ads-4EVKVAMR.js +0 -48
  321. package/dist/ads-OY455VCX.js +0 -79
  322. package/dist/advertisers-G6DZRBOK.js +0 -123
  323. package/dist/analytics-ANG42PKM.js +0 -2437
  324. package/dist/analytics-UI4AKUSF.js +0 -447
  325. package/dist/animate-KCSICY2N.js +0 -480
  326. package/dist/assign-5DFH6HBV.js +0 -80
  327. package/dist/audience-size-P6WIXOB3.js +0 -76
  328. package/dist/audiences-4ASLCNOF.js +0 -280
  329. package/dist/audit-LA4BSLXV.js +0 -154
  330. package/dist/autocomplete-XMG6E7TG.js +0 -114
  331. package/dist/avatars-4IFN4GZD.js +0 -38
  332. package/dist/bid-pricing-JEOG2Q3L.js +0 -103
  333. package/dist/brand-C6HUAK74.js +0 -22
  334. package/dist/brief-5BCPPBU3.js +0 -543
  335. package/dist/campaign-groups-IYQZSICZ.js +0 -99
  336. package/dist/campaign-writes-CVOOPZ35.js +0 -176
  337. package/dist/campaign-writes-YXI5UOPH.js +0 -168
  338. package/dist/campaigns-FW4WVD25.js +0 -113
  339. package/dist/campaigns-QMFHNG3N.js +0 -111
  340. package/dist/campaigns-TX37WHVL.js +0 -78
  341. package/dist/canvas-G4QXNPPE.js +0 -46
  342. package/dist/capabilities-7643Y2HU.js +0 -147
  343. package/dist/catalog-PTVQSATT.js +0 -65
  344. package/dist/catalog-PTVQSATT.js.map +0 -1
  345. package/dist/catalogs-YNIUP2AH.js +0 -130
  346. package/dist/changes-QUKBZVB3.js +0 -135
  347. package/dist/chatgpt-TIUBMATF.js +0 -47
  348. package/dist/chats-BGLAG4Q7.js +0 -279
  349. package/dist/check-MN5ZQ7RX.js +0 -107
  350. package/dist/chunk-2UJ5ABI6.js +0 -604
  351. package/dist/chunk-2XRFWXSA.js +0 -103
  352. package/dist/chunk-3OSBCYKA.js +0 -8954
  353. package/dist/chunk-3QQHPRRB.js +0 -89
  354. package/dist/chunk-3WTCMBDC.js +0 -1518
  355. package/dist/chunk-44ZRCSR7.js +0 -228
  356. package/dist/chunk-46YLDIQG.js +0 -4254
  357. package/dist/chunk-46YLDIQG.js.map +0 -1
  358. package/dist/chunk-4QITYZUH.js +0 -163
  359. package/dist/chunk-4XNF52NU.js +0 -429
  360. package/dist/chunk-4Y7IJ2PU.js +0 -5368
  361. package/dist/chunk-53BTYIMJ.js +0 -91
  362. package/dist/chunk-56OEYUJU.js +0 -61
  363. package/dist/chunk-5N47LB7X.js +0 -285
  364. package/dist/chunk-5UBFYJHF.js +0 -170
  365. package/dist/chunk-6PMJU7IU.js +0 -169
  366. package/dist/chunk-7GGLZOQN.js +0 -91
  367. package/dist/chunk-7I65KXU7.js +0 -98
  368. package/dist/chunk-BXUUKRMM.js +0 -46
  369. package/dist/chunk-BZTAEZLT.js +0 -51
  370. package/dist/chunk-CJQ77HO5.js +0 -1646
  371. package/dist/chunk-CKTVRR3D.js +0 -57
  372. package/dist/chunk-COS3TPHX.js +0 -377
  373. package/dist/chunk-CQ6HBFOB.js +0 -23
  374. package/dist/chunk-DJTWY7GL.js +0 -942
  375. package/dist/chunk-DJTWY7GL.js.map +0 -1
  376. package/dist/chunk-DWW5QSUF.js +0 -638
  377. package/dist/chunk-ENUCJ6AO.js +0 -148
  378. package/dist/chunk-ES3PWGS3.js +0 -438
  379. package/dist/chunk-FJDSL4O5.js +0 -910
  380. package/dist/chunk-FSTDWVXG.js +0 -455
  381. package/dist/chunk-FUR7R4D7.js +0 -249
  382. package/dist/chunk-HTT7RBRC.js +0 -846
  383. package/dist/chunk-HVJJEQDQ.js +0 -7234
  384. package/dist/chunk-I7AYMJZA.js +0 -783
  385. package/dist/chunk-IU5K42Q3.js +0 -831
  386. package/dist/chunk-JAC6JVCI.js +0 -26
  387. package/dist/chunk-JARRF5VX.js +0 -66
  388. package/dist/chunk-JEUFRIYS.js +0 -297
  389. package/dist/chunk-KITVYLEX.js +0 -843
  390. package/dist/chunk-L5VVKIMB.js +0 -203
  391. package/dist/chunk-M2MJ52HS.js +0 -676
  392. package/dist/chunk-MBSAHNMJ.js +0 -547
  393. package/dist/chunk-MCJ5I5LR.js +0 -3187
  394. package/dist/chunk-MCJ5I5LR.js.map +0 -1
  395. package/dist/chunk-MHZIOOT5.js +0 -197
  396. package/dist/chunk-MNOCC5AL.js +0 -207
  397. package/dist/chunk-MZPS46OR.js +0 -76
  398. package/dist/chunk-N6WHUUFH.js +0 -19
  399. package/dist/chunk-NA5Q473J.js +0 -3868
  400. package/dist/chunk-NA5Q473J.js.map +0 -1
  401. package/dist/chunk-OPUEQSKM.js +0 -122
  402. package/dist/chunk-OPUEQSKM.js.map +0 -1
  403. package/dist/chunk-OXLB5M5M.js +0 -592
  404. package/dist/chunk-OYNBUT5X.js +0 -479
  405. package/dist/chunk-PE4ZP7MX.js +0 -8914
  406. package/dist/chunk-PE4ZP7MX.js.map +0 -1
  407. package/dist/chunk-PIAG4UJT.js +0 -274
  408. package/dist/chunk-QKNPF6ZD.js +0 -24026
  409. package/dist/chunk-QKNPF6ZD.js.map +0 -1
  410. package/dist/chunk-QOBA6PHB.js +0 -131
  411. package/dist/chunk-RRC7F3QQ.js +0 -1919
  412. package/dist/chunk-S6VFDNSQ.js +0 -63
  413. package/dist/chunk-SEYCF446.js +0 -191
  414. package/dist/chunk-SF52UGHZ.js +0 -225
  415. package/dist/chunk-SG2TDQEE.js +0 -150
  416. package/dist/chunk-SWFZJROM.js +0 -64
  417. package/dist/chunk-UBDY5RE4.js +0 -387
  418. package/dist/chunk-UCNIJ2IW.js +0 -494
  419. package/dist/chunk-UFUYTWEF.js +0 -344
  420. package/dist/chunk-UROKPFIS.js +0 -142
  421. package/dist/chunk-VP4PO7FW.js +0 -392
  422. package/dist/chunk-VV6FDIP5.js +0 -224
  423. package/dist/chunk-WRTG3KXU.js +0 -156
  424. package/dist/chunk-WWLZ5RRU.js +0 -319
  425. package/dist/chunk-YE4RCEEJ.js +0 -167
  426. package/dist/chunk-YO54MA7R.js +0 -275
  427. package/dist/claim-2JNNC66N.js +0 -200
  428. package/dist/companies-4NJU5TLU.js +0 -198
  429. package/dist/company-QOYWS4W6.js +0 -308
  430. package/dist/complete-7FX2K3PV.js +0 -84
  431. package/dist/connect-H2HSPMRT.js +0 -45
  432. package/dist/conversation-4M7YMQOL.js +0 -96
  433. package/dist/conversion-report-G5JMZNYV.js +0 -127
  434. package/dist/conversion-upload-command-43PZFYT7.js +0 -439
  435. package/dist/conversion-writes-JQQCCGPO.js +0 -122
  436. package/dist/conversions-UO4CQNF6.js +0 -78
  437. package/dist/conversions-Z7FW7CFT.js +0 -140
  438. package/dist/create-4SFO4AQZ.js +0 -62
  439. package/dist/create-D5MA64KL.js +0 -239
  440. package/dist/create-GJ4ZMY3A.js +0 -210
  441. package/dist/create-QVY6DSYM.js +0 -135
  442. package/dist/creatives-ADH6HCCA.js +0 -58
  443. package/dist/creatives-R3XILT6D.js +0 -223
  444. package/dist/credentials-EQRB6XGZ.js +0 -290
  445. package/dist/critique-4YRRUNAU.js +0 -1451
  446. package/dist/critique-JCU2ATT6.js +0 -232
  447. package/dist/crm-AF6XOOSF.js +0 -323
  448. package/dist/crm-LSMFGR6R.js +0 -227
  449. package/dist/currency-4KNOOZUU.js +0 -88
  450. package/dist/customers-MM3VIZNA.js +0 -59
  451. package/dist/delete-CO2YBPTI.js +0 -67
  452. package/dist/delete-D7HTW32U.js +0 -57
  453. package/dist/delete-JUPBYK3H.js +0 -69
  454. package/dist/demographics-DK5JDY6M.js +0 -141
  455. package/dist/discard-DEJOM62Y.js +0 -69
  456. package/dist/discover-U6YLVLTF.js +0 -172
  457. package/dist/domain-MBOMV3CQ.js +0 -101
  458. package/dist/download-KN2I55SA.js +0 -172
  459. package/dist/draft-BMNBT37B.js +0 -283
  460. package/dist/draft-CGPVRRKC.js +0 -335
  461. package/dist/draft-F74OIT5O.js +0 -310
  462. package/dist/draft-FIEZWBIX.js +0 -308
  463. package/dist/draft-HZ5T6NOI.js +0 -220
  464. package/dist/experiments-YNJZCMQM.js +0 -236
  465. package/dist/facets-Y4OACBMC.js +0 -117
  466. package/dist/feedback-MORAVN52.js +0 -111
  467. package/dist/feedback-MORAVN52.js.map +0 -1
  468. package/dist/feedback-record-M3RB7H2C.js +0 -265
  469. package/dist/feedback-record-M3RB7H2C.js.map +0 -1
  470. package/dist/fetch-XU6QVWMS.js +0 -179
  471. package/dist/fit-IHUUFCGI.js +0 -65
  472. package/dist/flows-WSCIMXQX.js +0 -250
  473. package/dist/fonts-3QW7EDHE.js +0 -39
  474. package/dist/forecast-2WVHMSZP.js +0 -169
  475. package/dist/forecast-F25LSCM5.js +0 -121
  476. package/dist/funnel-35DYDBJH.js +0 -397
  477. package/dist/generate-Z7AROAES.js +0 -263
  478. package/dist/get-4CAX33L2.js +0 -59
  479. package/dist/get-N7X75ZJO.js +0 -82
  480. package/dist/google-M6XR7YGT.js +0 -3267
  481. package/dist/google-ads-NCSMNNND.js +0 -198
  482. package/dist/history-FGQ2H7XH.js +0 -69
  483. package/dist/history-LTOFKBMJ.js +0 -136
  484. package/dist/history-VJ254UXF.js +0 -102
  485. package/dist/hubspot-W2NM75YK.js +0 -782
  486. package/dist/ideas-54KFDNDM.js +0 -45
  487. package/dist/images-JOEVCCP6.js +0 -92
  488. package/dist/ingest-6R7XUL46.js +0 -27
  489. package/dist/ingest-VCIH5QDR.js +0 -123
  490. package/dist/insights-UXUUOQB7.js +0 -132
  491. package/dist/inspect-MGOR77FP.js +0 -192
  492. package/dist/intent-FZWPRUCI.js +0 -95
  493. package/dist/keyword-gap-4ECYPWXJ.js +0 -130
  494. package/dist/keyword-metrics-SBIRN5KC.js +0 -200
  495. package/dist/keywords-for-site-TLNPJHT2.js +0 -131
  496. package/dist/landing-ZICSVWKF.js +0 -28
  497. package/dist/languages-VNZQ5USL.js +0 -40
  498. package/dist/leads-JUQFNK55.js +0 -115
  499. package/dist/learn-A6BT25LQ.js +0 -207
  500. package/dist/line-item-writes-NW7A6HNH.js +0 -211
  501. package/dist/line-items-OAG3QMDE.js +0 -107
  502. package/dist/link-4VJ7FSOA.js +0 -67
  503. package/dist/linkedin-CKOWKD4M.js +0 -1328
  504. package/dist/linkedin-person-C22IDK7S.js +0 -139
  505. package/dist/list-2DKLO6AO.js +0 -67
  506. package/dist/list-CDDXHMJQ.js +0 -306
  507. package/dist/list-ZORO7PFP.js +0 -154
  508. package/dist/locations-4RDUHKVR.js +0 -69
  509. package/dist/locations-HATR6PSC.js +0 -40
  510. package/dist/log-OSJHKHPV.js +0 -95
  511. package/dist/make-7CIVNW77.js +0 -1366
  512. package/dist/make-7CIVNW77.js.map +0 -1
  513. package/dist/map-PMGZDXAN.js +0 -436
  514. package/dist/mcp-MOOOTRYG.js +0 -729
  515. package/dist/media-sources-5OYCKQ5J.js +0 -35
  516. package/dist/members-QG5IP5HM.js +0 -47
  517. package/dist/metrics-R4YS2JL6.js +0 -152
  518. package/dist/models-RJMZV5SH.js +0 -155
  519. package/dist/normalize-LATTXSL3.js +0 -144
  520. package/dist/options-KALH5TB7.js +0 -125
  521. package/dist/organization-AGCF7DUJ.js +0 -949
  522. package/dist/performance-SITVZQWX.js +0 -5565
  523. package/dist/performance-YNXPUSGJ.js +0 -27
  524. package/dist/pixels-TYJVE377.js +0 -62
  525. package/dist/promoted-tweet-writes-NAHPJ3VD.js +0 -183
  526. package/dist/promoted-tweets-2XQ4MWAC.js +0 -119
  527. package/dist/publish-UITYPUBD.js +0 -344
  528. package/dist/query-RE7NB2BK.js +0 -62
  529. package/dist/reddit-6XIARCTX.js +0 -29
  530. package/dist/refresh-6UCN7PDX.js +0 -97
  531. package/dist/release-IN65L23O.js +0 -63
  532. package/dist/relevant-pages-W7IM6YQW.js +0 -99
  533. package/dist/remove-X3XWVE2M.js +0 -53
  534. package/dist/reopen-RMMQ55CH.js +0 -66
  535. package/dist/rerun-ON6YCJAL.js +0 -95
  536. package/dist/rerun-ON6YCJAL.js.map +0 -1
  537. package/dist/research-LZBPCXIW.js +0 -72
  538. package/dist/research-W5KUOBXZ.js +0 -265
  539. package/dist/reset-MUWXTLIB.js +0 -57
  540. package/dist/reset-VQNKXFAF.js +0 -57
  541. package/dist/resolve-DMGWLMTC.js +0 -124
  542. package/dist/retry-YI4YLYTQ.js +0 -63
  543. package/dist/retry-ZQUJPKQH.js +0 -65
  544. package/dist/revenue-6YZAOMF6.js +0 -91
  545. package/dist/rules-FHVZEN4D.js +0 -99
  546. package/dist/rules-add-7X46VTIJ.js +0 -465
  547. package/dist/run-TA6HYFKZ.js +0 -69
  548. package/dist/run-YORKHK6S.js +0 -70
  549. package/dist/scaffold-ad-RHSHBCVV.js +0 -1512
  550. package/dist/scaffold-ad-RHSHBCVV.js.map +0 -1
  551. package/dist/scaffold-static-ad-XNOGCMPF.js +0 -1010
  552. package/dist/scaffold-static-ad-XNOGCMPF.js.map +0 -1
  553. package/dist/scaffold-video-XEVJQ7QZ.js +0 -884
  554. package/dist/scaffold-video-XEVJQ7QZ.js.map +0 -1
  555. package/dist/schedule-TMTLYULK.js +0 -64
  556. package/dist/scheduled-agents-TS3WLRCM.js +0 -55
  557. package/dist/schema-6S5ZEPBS.js +0 -135
  558. package/dist/search-LTUUAGZG.js +0 -177
  559. package/dist/select-BXBNFGVL.js +0 -106
  560. package/dist/select-BXBNFGVL.js.map +0 -1
  561. package/dist/set-prompt-JJWBB23C.js +0 -198
  562. package/dist/set-prompt-JJWBB23C.js.map +0 -1
  563. package/dist/setup-links-6ANVKZCE.js +0 -144
  564. package/dist/shopify-6ISTKZCA.js +0 -3958
  565. package/dist/site-OIV55MGO.js +0 -180
  566. package/dist/sources-5L4S5BQV.js +0 -457
  567. package/dist/sources-GLJWZFHZ.js +0 -30
  568. package/dist/stale-SK2SDGOT.js +0 -76
  569. package/dist/stale-SK2SDGOT.js.map +0 -1
  570. package/dist/status-TD7ISXC5.js +0 -65
  571. package/dist/studio-IDNM42JP.js +0 -49
  572. package/dist/sync-PVIFUXX3.js +0 -57
  573. package/dist/sync-definition-7NBT6LTK.js +0 -69
  574. package/dist/tags-3HB7N5WB.js +0 -23
  575. package/dist/tags-DG3XQ4SF.js +0 -227
  576. package/dist/tags-T4EN6XYE.js +0 -23
  577. package/dist/tags-T6THTVNP.js +0 -26
  578. package/dist/tags-XY6R2VJ6.js +0 -23
  579. package/dist/targeting-criteria-CL472KJO.js +0 -113
  580. package/dist/targets-7AQMSO6H.js +0 -106
  581. package/dist/testimonials-4QWVSEPU.js +0 -32
  582. package/dist/themes-ZTM4OVGK.js +0 -95
  583. package/dist/top-companies-PMFYOAFK.js +0 -111
  584. package/dist/transcript-YWFYNFWX.js +0 -165
  585. package/dist/translate-VMQHPX4B.js +0 -600
  586. package/dist/translate-VMQHPX4B.js.map +0 -1
  587. package/dist/triggers-JKXISN45.js +0 -144
  588. package/dist/unlink-IUAFDLBT.js +0 -70
  589. package/dist/unstage-ZYT5RNLK.js +0 -88
  590. package/dist/update-23Q4T2J5.js +0 -155
  591. package/dist/update-74VME6PN.js +0 -66
  592. package/dist/update-O22DAZVX.js +0 -192
  593. package/dist/update-QAWK3O7L.js +0 -101
  594. package/dist/upload-WASRCKS4.js +0 -130
  595. package/dist/url-options-M7RX2TD4.js +0 -131
  596. package/dist/url-params-E5ON6W2N.js +0 -101
  597. package/dist/validate-NB6PS5PF.js +0 -122
  598. package/dist/validate-NB6PS5PF.js.map +0 -1
  599. package/dist/videos-SS2Y6FJF.js +0 -41
  600. package/dist/viewer-check-CWS6OVM7.js +0 -83
  601. package/dist/web-HT22JFQR.js +0 -143
  602. package/dist/winning-ads-FXTP4PWZ.js +0 -86
  603. package/dist/write-commands-5YVQKO7E.js +0 -1525
  604. package/dist/x-KEMAY75C.js +0 -47
  605. /package/dist/{account-2UXZ6CZJ.js.map → account-BRRFMDXZ.js.map} +0 -0
  606. /package/dist/{account-OWMJG4IW.js.map → account-MQI7EZBH.js.map} +0 -0
  607. /package/dist/{account-reads-W2GAN335.js.map → account-reads-K6YDAOHX.js.map} +0 -0
  608. /package/dist/{account-users-WLTQNPL7.js.map → account-users-QS54ZEOD.js.map} +0 -0
  609. /package/dist/{account-writes-TNADUSHW.js.map → account-writes-PGGGP26M.js.map} +0 -0
  610. /package/dist/{accounts-HRQFOTBJ.js.map → accounts-H3U7LARM.js.map} +0 -0
  611. /package/dist/{accounts-D3SQTZB7.js.map → accounts-IW62WBX5.js.map} +0 -0
  612. /package/dist/{actions-VJXED57L.js.map → actions-2CUQFZNA.js.map} +0 -0
  613. /package/dist/{activecampaign-TNJIQA4C.js.map → activecampaign-WAMDVBUO.js.map} +0 -0
  614. /package/dist/{ad-group-writes-7BGCZA3M.js.map → ad-group-writes-ROUU6BHU.js.map} +0 -0
  615. /package/dist/{ad-groups-A6GU6EW5.js.map → ad-groups-Y2BSRLIN.js.map} +0 -0
  616. /package/dist/{ad-writes-CEMCUDU2.js.map → ad-writes-NF4LCGVP.js.map} +0 -0
  617. /package/dist/{add-LBHISK44.js.map → add-4P3CUHAN.js.map} +0 -0
  618. /package/dist/{add-DRTKSLEQ.js.map → add-UHWRBSFE.js.map} +0 -0
  619. /package/dist/{ads-OY455VCX.js.map → ads-CPMX3L4A.js.map} +0 -0
  620. /package/dist/{ads-4EVKVAMR.js.map → ads-TDN7OYSU.js.map} +0 -0
  621. /package/dist/{advertisers-G6DZRBOK.js.map → advertisers-6CHV5N2V.js.map} +0 -0
  622. /package/dist/{analytics-ANG42PKM.js.map → analytics-4GTUW42V.js.map} +0 -0
  623. /package/dist/{analytics-UI4AKUSF.js.map → analytics-MV2RQ6KR.js.map} +0 -0
  624. /package/dist/{animate-KCSICY2N.js.map → animate-EOSLSA7F.js.map} +0 -0
  625. /package/dist/{assign-5DFH6HBV.js.map → assign-RN5DGDS2.js.map} +0 -0
  626. /package/dist/{audience-size-P6WIXOB3.js.map → audience-size-7DYMCXDM.js.map} +0 -0
  627. /package/dist/{audiences-4ASLCNOF.js.map → audiences-VMGB2JZG.js.map} +0 -0
  628. /package/dist/{audit-LA4BSLXV.js.map → audit-7U7G2JKS.js.map} +0 -0
  629. /package/dist/{autocomplete-XMG6E7TG.js.map → autocomplete-E6YHJ3HH.js.map} +0 -0
  630. /package/dist/{avatars-4IFN4GZD.js.map → avatars-6JHVTSXH.js.map} +0 -0
  631. /package/dist/{bid-pricing-JEOG2Q3L.js.map → bid-pricing-J3OJK4J3.js.map} +0 -0
  632. /package/dist/{brand-C6HUAK74.js.map → brand-3EAQFDYN.js.map} +0 -0
  633. /package/dist/{brief-5BCPPBU3.js.map → brief-ADGCGC3H.js.map} +0 -0
  634. /package/dist/{campaign-groups-IYQZSICZ.js.map → campaign-groups-GN7D5UXE.js.map} +0 -0
  635. /package/dist/{campaign-writes-YXI5UOPH.js.map → campaign-writes-HKWI6GYU.js.map} +0 -0
  636. /package/dist/{campaign-writes-CVOOPZ35.js.map → campaign-writes-UORRIIWY.js.map} +0 -0
  637. /package/dist/{campaigns-FW4WVD25.js.map → campaigns-5I76AV7F.js.map} +0 -0
  638. /package/dist/{campaigns-QMFHNG3N.js.map → campaigns-BEXDLBT3.js.map} +0 -0
  639. /package/dist/{campaigns-TX37WHVL.js.map → campaigns-GONROKTU.js.map} +0 -0
  640. /package/dist/{canvas-G4QXNPPE.js.map → canvas-CHV34G62.js.map} +0 -0
  641. /package/dist/{capabilities-7643Y2HU.js.map → capabilities-VKBIQ2BR.js.map} +0 -0
  642. /package/dist/{catalogs-YNIUP2AH.js.map → catalogs-LXEM7NNC.js.map} +0 -0
  643. /package/dist/{changes-QUKBZVB3.js.map → changes-4OYC4NMW.js.map} +0 -0
  644. /package/dist/{chatgpt-TIUBMATF.js.map → chatgpt-XV6CVKLN.js.map} +0 -0
  645. /package/dist/{chats-BGLAG4Q7.js.map → chats-W35ZPZEW.js.map} +0 -0
  646. /package/dist/{check-MN5ZQ7RX.js.map → check-3D63D4ZT.js.map} +0 -0
  647. /package/dist/{chunk-OXLB5M5M.js.map → chunk-2PC26XRF.js.map} +0 -0
  648. /package/dist/{chunk-ENUCJ6AO.js.map → chunk-2UZHRLLO.js.map} +0 -0
  649. /package/dist/{chunk-I7AYMJZA.js.map → chunk-45EERHDB.js.map} +0 -0
  650. /package/dist/{chunk-FUR7R4D7.js.map → chunk-55B4AJY3.js.map} +0 -0
  651. /package/dist/{chunk-VP4PO7FW.js.map → chunk-56UWXQEN.js.map} +0 -0
  652. /package/dist/{chunk-YO54MA7R.js.map → chunk-5G5QFFJY.js.map} +0 -0
  653. /package/dist/{chunk-ES3PWGS3.js.map → chunk-5GHKZLID.js.map} +0 -0
  654. /package/dist/{chunk-3QQHPRRB.js.map → chunk-5HGAO4ZI.js.map} +0 -0
  655. /package/dist/{chunk-56OEYUJU.js.map → chunk-5YN53OAA.js.map} +0 -0
  656. /package/dist/{chunk-5N47LB7X.js.map → chunk-6CCEEVXJ.js.map} +0 -0
  657. /package/dist/{chunk-DWW5QSUF.js.map → chunk-6HGLQJ6A.js.map} +0 -0
  658. /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
  659. /package/dist/{chunk-BXUUKRMM.js.map → chunk-6QGBBX7F.js.map} +0 -0
  660. /package/dist/{chunk-N6WHUUFH.js.map → chunk-6RTZPBAT.js.map} +0 -0
  661. /package/dist/{chunk-L5VVKIMB.js.map → chunk-7MY3QHGA.js.map} +0 -0
  662. /package/dist/{chunk-MBSAHNMJ.js.map → chunk-BKOUVU6X.js.map} +0 -0
  663. /package/dist/{chunk-5UBFYJHF.js.map → chunk-CBQPKCFE.js.map} +0 -0
  664. /package/dist/{chunk-CKTVRR3D.js.map → chunk-CWZ2ODJQ.js.map} +0 -0
  665. /package/dist/{chunk-KITVYLEX.js.map → chunk-DGZYZWMK.js.map} +0 -0
  666. /package/dist/{chunk-UFUYTWEF.js.map → chunk-DMA67YC3.js.map} +0 -0
  667. /package/dist/{chunk-HVJJEQDQ.js.map → chunk-DYOUJERF.js.map} +0 -0
  668. /package/dist/{chunk-JEUFRIYS.js.map → chunk-E3FMS5DA.js.map} +0 -0
  669. /package/dist/{chunk-YE4RCEEJ.js.map → chunk-EIRGJD3Q.js.map} +0 -0
  670. /package/dist/{chunk-3WTCMBDC.js.map → chunk-G3MEYGXC.js.map} +0 -0
  671. /package/dist/{chunk-IU5K42Q3.js.map → chunk-G3MN4HIX.js.map} +0 -0
  672. /package/dist/{chunk-MNOCC5AL.js.map → chunk-G53CUQZV.js.map} +0 -0
  673. /package/dist/{chunk-FSTDWVXG.js.map → chunk-GPZVYXJZ.js.map} +0 -0
  674. /package/dist/{chunk-WRTG3KXU.js.map → chunk-HGHVNUJT.js.map} +0 -0
  675. /package/dist/{chunk-44ZRCSR7.js.map → chunk-IZABTTW5.js.map} +0 -0
  676. /package/dist/{chunk-BZTAEZLT.js.map → chunk-J3HA4RFY.js.map} +0 -0
  677. /package/dist/{chunk-2XRFWXSA.js.map → chunk-JGOYO7I2.js.map} +0 -0
  678. /package/dist/{chunk-3OSBCYKA.js.map → chunk-JUF6Q5X7.js.map} +0 -0
  679. /package/dist/{chunk-OYNBUT5X.js.map → chunk-KAAYVKBH.js.map} +0 -0
  680. /package/dist/{chunk-4XNF52NU.js.map → chunk-KUM36NSV.js.map} +0 -0
  681. /package/dist/{chunk-53BTYIMJ.js.map → chunk-MHSVWQK6.js.map} +0 -0
  682. /package/dist/{chunk-S6VFDNSQ.js.map → chunk-MTV2RSGY.js.map} +0 -0
  683. /package/dist/{chunk-7GGLZOQN.js.map → chunk-N4BK6OKX.js.map} +0 -0
  684. /package/dist/{chunk-COS3TPHX.js.map → chunk-NP3FPCPN.js.map} +0 -0
  685. /package/dist/{chunk-2UJ5ABI6.js.map → chunk-OAXQPLTG.js.map} +0 -0
  686. /package/dist/{chunk-HTT7RBRC.js.map → chunk-OI2CKYAQ.js.map} +0 -0
  687. /package/dist/{chunk-6PMJU7IU.js.map → chunk-QUYDMAQN.js.map} +0 -0
  688. /package/dist/{chunk-UBDY5RE4.js.map → chunk-RIA5RXPL.js.map} +0 -0
  689. /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
  690. /package/dist/{chunk-SF52UGHZ.js.map → chunk-T65Y7N7H.js.map} +0 -0
  691. /package/dist/{chunk-VV6FDIP5.js.map → chunk-T75WL56Z.js.map} +0 -0
  692. /package/dist/{chunk-FJDSL4O5.js.map → chunk-TGCDXZ5X.js.map} +0 -0
  693. /package/dist/{chunk-CJQ77HO5.js.map → chunk-TOUF5ME6.js.map} +0 -0
  694. /package/dist/{chunk-SEYCF446.js.map → chunk-TWCS6FSC.js.map} +0 -0
  695. /package/dist/{chunk-M2MJ52HS.js.map → chunk-UPXPBA4W.js.map} +0 -0
  696. /package/dist/{chunk-SG2TDQEE.js.map → chunk-URMAEVZO.js.map} +0 -0
  697. /package/dist/{chunk-MHZIOOT5.js.map → chunk-UUWUJ64R.js.map} +0 -0
  698. /package/dist/{chunk-UCNIJ2IW.js.map → chunk-VGUGFRWF.js.map} +0 -0
  699. /package/dist/{chunk-WWLZ5RRU.js.map → chunk-WEQZ563U.js.map} +0 -0
  700. /package/dist/{chunk-4QITYZUH.js.map → chunk-WUCTGDV7.js.map} +0 -0
  701. /package/dist/{chunk-4Y7IJ2PU.js.map → chunk-XCRYRVKK.js.map} +0 -0
  702. /package/dist/{chunk-QOBA6PHB.js.map → chunk-XJ5TX772.js.map} +0 -0
  703. /package/dist/{chunk-PIAG4UJT.js.map → chunk-XPIBSDG4.js.map} +0 -0
  704. /package/dist/{chunk-RRC7F3QQ.js.map → chunk-Y6MLSN6W.js.map} +0 -0
  705. /package/dist/{chunk-JARRF5VX.js.map → chunk-YBFZJ5EB.js.map} +0 -0
  706. /package/dist/{chunk-UROKPFIS.js.map → chunk-YR3OPPUE.js.map} +0 -0
  707. /package/dist/{chunk-SWFZJROM.js.map → chunk-YXQFCQX2.js.map} +0 -0
  708. /package/dist/{chunk-7I65KXU7.js.map → chunk-Z3Y67AH6.js.map} +0 -0
  709. /package/dist/{chunk-CQ6HBFOB.js.map → chunk-ZKRRYVDG.js.map} +0 -0
  710. /package/dist/{claim-2JNNC66N.js.map → claim-DWGPEVJN.js.map} +0 -0
  711. /package/dist/{companies-4NJU5TLU.js.map → companies-3VT7OJAA.js.map} +0 -0
  712. /package/dist/{company-QOYWS4W6.js.map → company-XEPW45AT.js.map} +0 -0
  713. /package/dist/{complete-7FX2K3PV.js.map → complete-AEX34ICU.js.map} +0 -0
  714. /package/dist/{connect-H2HSPMRT.js.map → connect-TF4FCXDV.js.map} +0 -0
  715. /package/dist/{conversation-4M7YMQOL.js.map → conversation-6WWZMPAB.js.map} +0 -0
  716. /package/dist/{conversion-report-G5JMZNYV.js.map → conversion-report-I6R2FDCD.js.map} +0 -0
  717. /package/dist/{conversion-upload-command-43PZFYT7.js.map → conversion-upload-command-QD6MGLY4.js.map} +0 -0
  718. /package/dist/{conversion-writes-JQQCCGPO.js.map → conversion-writes-H2JOAORW.js.map} +0 -0
  719. /package/dist/{conversions-Z7FW7CFT.js.map → conversions-D46PQRWF.js.map} +0 -0
  720. /package/dist/{conversions-UO4CQNF6.js.map → conversions-WGW43FUE.js.map} +0 -0
  721. /package/dist/{create-4SFO4AQZ.js.map → create-7WV7XWZV.js.map} +0 -0
  722. /package/dist/{create-GJ4ZMY3A.js.map → create-OUZZLPQK.js.map} +0 -0
  723. /package/dist/{create-QVY6DSYM.js.map → create-QRT6O5PN.js.map} +0 -0
  724. /package/dist/{create-D5MA64KL.js.map → create-WSEYNFTP.js.map} +0 -0
  725. /package/dist/{creatives-R3XILT6D.js.map → creatives-BSZY7VDQ.js.map} +0 -0
  726. /package/dist/{creatives-ADH6HCCA.js.map → creatives-DBDFDHX7.js.map} +0 -0
  727. /package/dist/{credentials-EQRB6XGZ.js.map → credentials-P7GQYIE3.js.map} +0 -0
  728. /package/dist/{critique-JCU2ATT6.js.map → critique-6F4FWQN5.js.map} +0 -0
  729. /package/dist/{critique-4YRRUNAU.js.map → critique-X2YDOMON.js.map} +0 -0
  730. /package/dist/{crm-LSMFGR6R.js.map → crm-O6YG6777.js.map} +0 -0
  731. /package/dist/{crm-AF6XOOSF.js.map → crm-VNAUSVC5.js.map} +0 -0
  732. /package/dist/{currency-4KNOOZUU.js.map → currency-UVT3HEZT.js.map} +0 -0
  733. /package/dist/{customers-MM3VIZNA.js.map → customers-VJ3TXILQ.js.map} +0 -0
  734. /package/dist/{delete-CO2YBPTI.js.map → delete-3H377GOM.js.map} +0 -0
  735. /package/dist/{delete-D7HTW32U.js.map → delete-EH3XL26Z.js.map} +0 -0
  736. /package/dist/{delete-JUPBYK3H.js.map → delete-QYSOAVP4.js.map} +0 -0
  737. /package/dist/{demographics-DK5JDY6M.js.map → demographics-GKJZ5PV2.js.map} +0 -0
  738. /package/dist/{discard-DEJOM62Y.js.map → discard-46RALLBO.js.map} +0 -0
  739. /package/dist/{discover-U6YLVLTF.js.map → discover-C4TG7JP7.js.map} +0 -0
  740. /package/dist/{domain-MBOMV3CQ.js.map → domain-JNNWJNQE.js.map} +0 -0
  741. /package/dist/{download-KN2I55SA.js.map → download-3R5IHN5F.js.map} +0 -0
  742. /package/dist/{draft-BMNBT37B.js.map → draft-3L4SNDGO.js.map} +0 -0
  743. /package/dist/{draft-CGPVRRKC.js.map → draft-EADHX7XL.js.map} +0 -0
  744. /package/dist/{draft-HZ5T6NOI.js.map → draft-TAM7IUPH.js.map} +0 -0
  745. /package/dist/{draft-FIEZWBIX.js.map → draft-VSXBSXSX.js.map} +0 -0
  746. /package/dist/{draft-F74OIT5O.js.map → draft-XCYSZWA6.js.map} +0 -0
  747. /package/dist/{experiments-YNJZCMQM.js.map → experiments-JVGAKWFA.js.map} +0 -0
  748. /package/dist/{facets-Y4OACBMC.js.map → facets-JG44XXAT.js.map} +0 -0
  749. /package/dist/{fetch-XU6QVWMS.js.map → fetch-SLDDORH4.js.map} +0 -0
  750. /package/dist/{fit-IHUUFCGI.js.map → fit-GNQHRKP7.js.map} +0 -0
  751. /package/dist/{flows-WSCIMXQX.js.map → flows-NRPABVUJ.js.map} +0 -0
  752. /package/dist/{fonts-3QW7EDHE.js.map → fonts-VN2QXPAQ.js.map} +0 -0
  753. /package/dist/{forecast-F25LSCM5.js.map → forecast-SIX6AAVX.js.map} +0 -0
  754. /package/dist/{forecast-2WVHMSZP.js.map → forecast-ZXOSLITM.js.map} +0 -0
  755. /package/dist/{funnel-35DYDBJH.js.map → funnel-QEZWKSFR.js.map} +0 -0
  756. /package/dist/{generate-Z7AROAES.js.map → generate-HOMLLUCN.js.map} +0 -0
  757. /package/dist/{get-N7X75ZJO.js.map → get-BXMLPLIC.js.map} +0 -0
  758. /package/dist/{get-4CAX33L2.js.map → get-NF3SPPVX.js.map} +0 -0
  759. /package/dist/{google-M6XR7YGT.js.map → google-XVSL3XAB.js.map} +0 -0
  760. /package/dist/{google-ads-NCSMNNND.js.map → google-ads-5NBAMFPB.js.map} +0 -0
  761. /package/dist/{history-VJ254UXF.js.map → history-2U5OXDV7.js.map} +0 -0
  762. /package/dist/{history-FGQ2H7XH.js.map → history-A6KMJRPZ.js.map} +0 -0
  763. /package/dist/{history-LTOFKBMJ.js.map → history-IDVWUSYU.js.map} +0 -0
  764. /package/dist/{hubspot-W2NM75YK.js.map → hubspot-YPBNNVHC.js.map} +0 -0
  765. /package/dist/{ideas-54KFDNDM.js.map → ideas-4Q7YBUGC.js.map} +0 -0
  766. /package/dist/{images-JOEVCCP6.js.map → images-BRBSRYEX.js.map} +0 -0
  767. /package/dist/{ingest-6R7XUL46.js.map → ingest-AIOFOAQE.js.map} +0 -0
  768. /package/dist/{ingest-VCIH5QDR.js.map → ingest-HPEBFXCP.js.map} +0 -0
  769. /package/dist/{insights-UXUUOQB7.js.map → insights-TR5EQAMA.js.map} +0 -0
  770. /package/dist/{inspect-MGOR77FP.js.map → inspect-ITKB2QT3.js.map} +0 -0
  771. /package/dist/{intent-FZWPRUCI.js.map → intent-E6HKRMNE.js.map} +0 -0
  772. /package/dist/{keyword-gap-4ECYPWXJ.js.map → keyword-gap-D4WAEJAH.js.map} +0 -0
  773. /package/dist/{keyword-metrics-SBIRN5KC.js.map → keyword-metrics-4UDT5GNW.js.map} +0 -0
  774. /package/dist/{keywords-for-site-TLNPJHT2.js.map → keywords-for-site-YQAQQIHJ.js.map} +0 -0
  775. /package/dist/{landing-ZICSVWKF.js.map → landing-6JAIZH4H.js.map} +0 -0
  776. /package/dist/{languages-VNZQ5USL.js.map → languages-AUAZIVL4.js.map} +0 -0
  777. /package/dist/{leads-JUQFNK55.js.map → leads-6XZRTPJL.js.map} +0 -0
  778. /package/dist/{learn-A6BT25LQ.js.map → learn-VQGATNB4.js.map} +0 -0
  779. /package/dist/{line-item-writes-NW7A6HNH.js.map → line-item-writes-TRTDQ55N.js.map} +0 -0
  780. /package/dist/{line-items-OAG3QMDE.js.map → line-items-SC73GQLQ.js.map} +0 -0
  781. /package/dist/{link-4VJ7FSOA.js.map → link-ODLNZTZC.js.map} +0 -0
  782. /package/dist/{linkedin-CKOWKD4M.js.map → linkedin-HPZP4MGS.js.map} +0 -0
  783. /package/dist/{linkedin-person-C22IDK7S.js.map → linkedin-person-ELEPEST5.js.map} +0 -0
  784. /package/dist/{list-ZORO7PFP.js.map → list-26EOYW37.js.map} +0 -0
  785. /package/dist/{list-2DKLO6AO.js.map → list-GLN62MRB.js.map} +0 -0
  786. /package/dist/{list-CDDXHMJQ.js.map → list-YLPOXOCI.js.map} +0 -0
  787. /package/dist/{locations-4RDUHKVR.js.map → locations-D5N75BUK.js.map} +0 -0
  788. /package/dist/{locations-HATR6PSC.js.map → locations-P5PTCRSF.js.map} +0 -0
  789. /package/dist/{log-OSJHKHPV.js.map → log-66XLWNCD.js.map} +0 -0
  790. /package/dist/{map-PMGZDXAN.js.map → map-3SGKGWSY.js.map} +0 -0
  791. /package/dist/{mcp-MOOOTRYG.js.map → mcp-ZSPJE3Y6.js.map} +0 -0
  792. /package/dist/{media-sources-5OYCKQ5J.js.map → media-sources-UBQCVRGK.js.map} +0 -0
  793. /package/dist/{members-QG5IP5HM.js.map → members-76XFDSMX.js.map} +0 -0
  794. /package/dist/{metrics-R4YS2JL6.js.map → metrics-XCD3IJSM.js.map} +0 -0
  795. /package/dist/{models-RJMZV5SH.js.map → models-WNK7Z6TR.js.map} +0 -0
  796. /package/dist/{normalize-LATTXSL3.js.map → normalize-VC7HUODA.js.map} +0 -0
  797. /package/dist/{options-KALH5TB7.js.map → options-5BPPM5N3.js.map} +0 -0
  798. /package/dist/{organization-AGCF7DUJ.js.map → organization-PXND43LQ.js.map} +0 -0
  799. /package/dist/{performance-SITVZQWX.js.map → performance-DDZOJ5GD.js.map} +0 -0
  800. /package/dist/{performance-YNXPUSGJ.js.map → performance-Q25RDNM6.js.map} +0 -0
  801. /package/dist/{pixels-TYJVE377.js.map → pixels-KRK2B7M3.js.map} +0 -0
  802. /package/dist/{promoted-tweet-writes-NAHPJ3VD.js.map → promoted-tweet-writes-LIFJFF7N.js.map} +0 -0
  803. /package/dist/{promoted-tweets-2XQ4MWAC.js.map → promoted-tweets-H5RMRQD2.js.map} +0 -0
  804. /package/dist/{publish-UITYPUBD.js.map → publish-LBHYEZW3.js.map} +0 -0
  805. /package/dist/{query-RE7NB2BK.js.map → query-A53T6QJF.js.map} +0 -0
  806. /package/dist/{reddit-6XIARCTX.js.map → reddit-H4R23K27.js.map} +0 -0
  807. /package/dist/{refresh-6UCN7PDX.js.map → refresh-3QKUSERK.js.map} +0 -0
  808. /package/dist/{release-IN65L23O.js.map → release-JMYTQZLK.js.map} +0 -0
  809. /package/dist/{relevant-pages-W7IM6YQW.js.map → relevant-pages-DOCKQEMZ.js.map} +0 -0
  810. /package/dist/{remove-X3XWVE2M.js.map → remove-F7GEZMKB.js.map} +0 -0
  811. /package/dist/{reopen-RMMQ55CH.js.map → reopen-Y557X6IX.js.map} +0 -0
  812. /package/dist/{research-W5KUOBXZ.js.map → research-3OJ5UZER.js.map} +0 -0
  813. /package/dist/{research-LZBPCXIW.js.map → research-AYO522XS.js.map} +0 -0
  814. /package/dist/{reset-MUWXTLIB.js.map → reset-BL7M4LL7.js.map} +0 -0
  815. /package/dist/{reset-VQNKXFAF.js.map → reset-PMVUQTYU.js.map} +0 -0
  816. /package/dist/{resolve-DMGWLMTC.js.map → resolve-CSWSGGK6.js.map} +0 -0
  817. /package/dist/{retry-ZQUJPKQH.js.map → retry-MVOPE2O2.js.map} +0 -0
  818. /package/dist/{retry-YI4YLYTQ.js.map → retry-WT46B5SC.js.map} +0 -0
  819. /package/dist/{revenue-6YZAOMF6.js.map → revenue-ZLE645Z5.js.map} +0 -0
  820. /package/dist/{rules-FHVZEN4D.js.map → rules-Q6HWHFVU.js.map} +0 -0
  821. /package/dist/{rules-add-7X46VTIJ.js.map → rules-add-7EPXWSQV.js.map} +0 -0
  822. /package/dist/{run-YORKHK6S.js.map → run-4DE5XUVB.js.map} +0 -0
  823. /package/dist/{run-TA6HYFKZ.js.map → run-PAND6N4V.js.map} +0 -0
  824. /package/dist/{schedule-TMTLYULK.js.map → schedule-CSE2XFFF.js.map} +0 -0
  825. /package/dist/{scheduled-agents-TS3WLRCM.js.map → scheduled-agents-NXHXQZBO.js.map} +0 -0
  826. /package/dist/{schema-6S5ZEPBS.js.map → schema-QITMY7ZE.js.map} +0 -0
  827. /package/dist/{search-LTUUAGZG.js.map → search-HOYOSX2H.js.map} +0 -0
  828. /package/dist/{setup-links-6ANVKZCE.js.map → setup-links-HQ6WVKEP.js.map} +0 -0
  829. /package/dist/{shopify-6ISTKZCA.js.map → shopify-6MLRXSC2.js.map} +0 -0
  830. /package/dist/{site-OIV55MGO.js.map → site-5B44TV46.js.map} +0 -0
  831. /package/dist/{sources-GLJWZFHZ.js.map → sources-OMINR6RG.js.map} +0 -0
  832. /package/dist/{sources-5L4S5BQV.js.map → sources-PNEWSEBG.js.map} +0 -0
  833. /package/dist/{status-TD7ISXC5.js.map → status-QNXQNAKH.js.map} +0 -0
  834. /package/dist/{studio-IDNM42JP.js.map → studio-BNYFU6ZH.js.map} +0 -0
  835. /package/dist/{sync-PVIFUXX3.js.map → sync-OYOS7HQL.js.map} +0 -0
  836. /package/dist/{sync-definition-7NBT6LTK.js.map → sync-definition-2VEFGHYK.js.map} +0 -0
  837. /package/dist/{tags-T6THTVNP.js.map → tags-56H6O7ZL.js.map} +0 -0
  838. /package/dist/{tags-3HB7N5WB.js.map → tags-CYR2IPEJ.js.map} +0 -0
  839. /package/dist/{tags-DG3XQ4SF.js.map → tags-RBUYBAA6.js.map} +0 -0
  840. /package/dist/{tags-XY6R2VJ6.js.map → tags-WVJNOATS.js.map} +0 -0
  841. /package/dist/{tags-T4EN6XYE.js.map → tags-ZTVOZOYP.js.map} +0 -0
  842. /package/dist/{targeting-criteria-CL472KJO.js.map → targeting-criteria-EZNZOUAE.js.map} +0 -0
  843. /package/dist/{targets-7AQMSO6H.js.map → targets-CU7IUPV2.js.map} +0 -0
  844. /package/dist/{testimonials-4QWVSEPU.js.map → testimonials-THJJYQ42.js.map} +0 -0
  845. /package/dist/{themes-ZTM4OVGK.js.map → themes-TSEMQ4EJ.js.map} +0 -0
  846. /package/dist/{top-companies-PMFYOAFK.js.map → top-companies-W6DA3MZQ.js.map} +0 -0
  847. /package/dist/{transcript-YWFYNFWX.js.map → transcript-KZ74PK23.js.map} +0 -0
  848. /package/dist/{triggers-JKXISN45.js.map → triggers-OJKTDJSV.js.map} +0 -0
  849. /package/dist/{unlink-IUAFDLBT.js.map → unlink-ZE7464NK.js.map} +0 -0
  850. /package/dist/{unstage-ZYT5RNLK.js.map → unstage-RGIPGM3E.js.map} +0 -0
  851. /package/dist/{update-O22DAZVX.js.map → update-2VYVJCY2.js.map} +0 -0
  852. /package/dist/{update-23Q4T2J5.js.map → update-63MMKPHI.js.map} +0 -0
  853. /package/dist/{update-74VME6PN.js.map → update-JHWPEJN7.js.map} +0 -0
  854. /package/dist/{update-QAWK3O7L.js.map → update-WHHAH4IE.js.map} +0 -0
  855. /package/dist/{upload-WASRCKS4.js.map → upload-7XG5LU7C.js.map} +0 -0
  856. /package/dist/{url-options-M7RX2TD4.js.map → url-options-2BGF2D5E.js.map} +0 -0
  857. /package/dist/{url-params-E5ON6W2N.js.map → url-params-FBDTXQGY.js.map} +0 -0
  858. /package/dist/{videos-SS2Y6FJF.js.map → videos-4TLBI3E3.js.map} +0 -0
  859. /package/dist/{viewer-check-CWS6OVM7.js.map → viewer-check-ELVSS3DM.js.map} +0 -0
  860. /package/dist/{web-HT22JFQR.js.map → web-LDR6HO5M.js.map} +0 -0
  861. /package/dist/{winning-ads-FXTP4PWZ.js.map → winning-ads-7SWUVUDA.js.map} +0 -0
  862. /package/dist/{write-commands-5YVQKO7E.js.map → write-commands-24FRMQW4.js.map} +0 -0
  863. /package/dist/{x-KEMAY75C.js.map → x-UOGRWXET.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/canvas/scaffold-video.ts","../src/engine/scaffold/lib/model-router.ts","../src/engine/nodes/local/lib/sceneDetect.ts","../src/commands/canvas/gitignore.ts"],"sourcesContent":["import { cp, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport {\n AD_IMAGE_MODEL,\n BLUEPRINT_ANALYSIS_MODEL,\n DEFAULT_VIDEO_GENERATE_MODEL,\n SEEDANCE_DURATIONS,\n VIDEO_DECONSTRUCT_MODEL,\n} from \"@baker/canvas-contract\";\nimport { defineCommand } from \"citty\";\nimport { fetchExternalBytes } from \"../../lib/externalFetch.ts\";\nimport { MAX_ASSET_BYTES } from \"../../engine/storage/asset-store.ts\";\nimport { routeVideoModel, type VideoBudget } from \"../../engine/scaffold/lib/model-router.ts\";\nimport { sha256Hex } from \"../../engine/storage/sha256.ts\";\nimport { createEngineFromEnv, defaultRegistry, ValidationError, validateCanvasDeep } from \"../../engine/index.ts\";\nimport { detectSceneCutsPySceneDetect } from \"../../engine/nodes/local/lib/sceneDetect.ts\";\nimport {\n annotateBlueprintWithElements,\n avatarsNotCast,\n buildOverlayHtml,\n canvasDims,\n castAvatarsOnElements,\n genAspectsFor,\n resolveAspect,\n type ScaffoldVideoOpts,\n scaffoldVideoCanvas,\n slimBlueprintForSelection,\n videoReport,\n} from \"../../engine/scaffold/video.ts\";\nimport { stampCompositionDims } from \"./composition-dims.ts\";\nimport {\n fail,\n fileExists,\n loadAssetText,\n parseElements,\n resolveModel,\n SHIPPED_CAPTIONS_DIR,\n SHIPPED_OVERLAY_COMPOSITION_DIR,\n} from \"./scaffold-common.ts\";\nimport { REBUILD_FILE, writeSceneFiles } from \"./scene-files.ts\";\nimport { renderStyleProjectionFromValue } from \"./style-projection.ts\";\nimport { buildCreativeDefinition, definitionPlatformsOf, resolveFormats, titleFromSlug } from \"./creative-definition.ts\";\nimport { ensureGitignore } from \"./gitignore.ts\";\nimport { computeSourceSha } from \"./source-version.ts\";\nimport { readDefinitionPlatforms, syncCreativeDefinitionBestEffort } from \"./sync-definition.ts\";\nimport { resolveRelativeCanvasPaths } from \"./resolve-paths.ts\";\nimport { isValidScaffoldSlug } from \"./scaffold-static-ad-paths.ts\";\nimport { resolveCastAvatars } from \"../avatars/resolveCast.ts\";\nimport { askJevQuestions } from \"../../engine/nodes/local/lib/jev.ts\";\nimport { cachedJev } from \"../../engine/nodes/local/lib/jev-cache.ts\";\nimport { voiceGenderModel } from \"../../engine/scaffold/video/dialogue/voice-gender.ts\";\nimport type { ReviewUsage } from \"../../engine/nodes/local/lib/render-review.ts\";\nimport { languageCodeNamed, spokenLanguage } from \"../../engine/scaffold/lib/language.ts\";\nimport { readBlueprintSpeech } from \"../../engine/scaffold/video/speech-reading.ts\";\nimport { findWorkspaceRoot } from \"./normalize-paths.ts\";\nimport { holdUnbilledSpend } from \"./unbilled-spend.ts\";\n\nconst SELECT_SYSTEM =\n \"You identify the RECURRING, identity-critical visual elements of a video ad from its deconstruction blueprint — \" +\n \"the people, animals, products, and logos that must stay consistent every time they appear, so a faithful \" +\n \"reproduction grounds each in ONE real reference image reused across every frame it appears in. Output ONLY a JSON \" +\n 'object of the form { \"elements\": [ ... ] }, no prose.';\n\nconst SELECT_PROMPT =\n \"VIDEO DECONSTRUCTION BLUEPRINT (video-deconstruct/1):\\n{{blueprint}}\\n\\n\" +\n \"List ONLY the elements worth keeping consistent across frames — the ones a reproduction must ground in a real asset:\\n\" +\n '- each recurring person from global.cast (a presenter/actor/persona) -> type \"person\"\\n' +\n '- a recurring animal/pet/character with a stable identity -> type \"animal\"\\n' +\n '- a showcased product, package, card, or device the ad sells or demonstrates -> type \"product\"\\n' +\n '- the advertiser brand logo/wordmark (from global.branding) -> type \"logo\"\\n' +\n '- a recurring trust/rating/certification badge -> type \"badge\"\\n' +\n '- the dominant recording set/location the scenes share (e.g. the same living room, car interior, kitchen) -> type \"location\"\\n\\n' +\n \"DROP one-off background extras and incidental props — but the shared set/location is NOT generic scenery: pin it as ONE \" +\n '\"location\" element so the room stays identical across scenes. A person in global.cast is almost always recurring. Keep at most ~8.\\n\\n' +\n \"ONE PERSON, MULTIPLE LOOKS: if a single individual plays MULTIPLE personas or wardrobes (e.g. a creator as a skeptic in \" +\n \"one outfit and a believer in another, or a before/after), emit ONE element PER look (so each outfit gets its own real \" +\n 'reference image) and link the extra looks to the first via \"same_as\" — they are the SAME person, only the wardrobe/state ' +\n \"differs, so the face must stay identical.\\n\\n\" +\n 'For each kept element return: { \"type\": one of person|animal|product|logo|badge|location, \"label\": a short ' +\n 'UPPER_SNAKE_CASE name (e.g. HERO, CREATOR_SKEPTIC, INSURANCE_CARD, LOGO), \"description\": a concrete reusable ' +\n \"description to source/shoot the real asset — for a person/animal give a NEUTRAL castable role (e.g. \" +\n '\"hero pet-owner, woman in her 30s\" or \"a small beagle\"), NOT the original individual\\'s literal face/identity: ' +\n \"we RECAST with a FRESH person/animal, so never tell the agent to reuse the original. \" +\n '\"expression\": a living subject\\'s typical expression or null, \"cast_id\": the global.cast id if it maps to one else ' +\n 'null, \"same_as\": the label of another element this is the SAME individual as (different wardrobe/persona) else null, ' +\n '\"scenes\": the 0-based indices of ONLY the scenes where the element is ACTUALLY VISIBLE ON SCREEN — judged from ' +\n \"that scene's start_frame_prompt / end_frame_prompt subjects and its action_detail, NOT from who is merely \" +\n \"speaking. A narrator heard over b-roll is NOT present in that b-roll scene; a dog-running cutaway does NOT \" +\n \"contain the couch creator just because she talks across it. Do NOT pad the list — an element wrongly listed in a \" +\n \"scene makes the reproduction render the wrong subject there (e.g. the creator appearing in a pure-dog b-roll). \" +\n \"When in doubt, leave a scene OUT. Output ONLY the JSON object.\";\n\n/** Load the deconstruct's word-level transcript as text; a missing/unreadable one just\n * means no caption track is wired (best-effort — never fails the scaffold). */\nasync function loadTranscriptBestEffort(ref: unknown): Promise<string | undefined> {\n if (!ref) return undefined;\n try {\n return await loadAssetText(ref, \"deconstruct transcript\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Stage the burned-in caption track next to the canvas: copy the TikTok caption\n * composition. The caption TEXT is transcribed from the rendered audio at run time\n * (`video_transcribe`, wired by the scaffolder) — not the source transcript — so we don't\n * persist the deconstruct transcript here; we only use its presence to decide whether the\n * ad has speech worth captioning. Returns `compositionPath` (undefined ⇒ no caption track).\n */\nasync function stageCaptions(outDir: string, transcript: string | undefined): Promise<{ compositionPath?: string }> {\n const text = transcript?.trim();\n if (!text || text === \"[]\") return {};\n const compositionPath = path.join(outDir, \"tiktok-captions-composition\");\n await cp(SHIPPED_CAPTIONS_DIR, compositionPath, { recursive: true });\n return { compositionPath };\n}\n\n/**\n * Detect hard shot cuts in the local video with PySceneDetect (`scenedetect`, installed\n * in the canvas sandbox). Best-effort: a detection failure just falls back to LLM-only\n * scene boundaries, so a transient `scenedetect` error never blocks the scaffold.\n */\nasync function detectShotCutsBestEffort(videoPath: string, threshold?: number): Promise<number[] | undefined> {\n try {\n const cuts = await detectSceneCutsPySceneDetect(videoPath, threshold ? { threshold } : {});\n if (cuts.length > 0) {\n process.stderr.write(`Detected ${cuts.length} shot cut(s) via PySceneDetect: ${cuts.join(\", \")}s\\n`);\n } else {\n process.stderr.write(\"PySceneDetect ran but found no hard cuts; using LLM scene boundaries.\\n\");\n }\n return cuts;\n } catch (e) {\n // Stay non-fatal (the deconstruct can still segment with LLM-only boundaries),\n // but a MISSING `scenedetect` binary is an actionable setup gap, not a transient\n // blip — without cuts the segmentation tends to be too coarse, so shout LOUDLY\n // and tell the operator how to fix it instead of degrading silently.\n const msg = e instanceof Error ? e.message : String(e);\n const code = (e as { code?: unknown })?.code;\n const missing = code === \"ENOENT\" || /ENOENT|not found|command not found/i.test(msg);\n if (missing) {\n process.stderr.write(\n \"WARNING: `scenedetect` (PySceneDetect) is NOT installed — falling back to LLM-only scene boundaries, \" +\n \"which under-segments (coarse 9-15s scenes instead of the real 1-4s cuts). \" +\n \"Install it (`pipx install scenedetect[opencv]` or `pip install scenedetect[opencv]`) for accurate shot-cut detection.\\n\",\n );\n } else {\n process.stderr.write(`Shot-cut detection skipped (${msg}); using LLM boundaries.\\n`);\n }\n // Detection FAILED (vs \"ran and found none\") — undefined tells the deconstruct\n // it cannot treat the video as verified cut-less.\n return undefined;\n }\n}\n\nconst VIDEO_EXT_BY_MIME: Record<string, string> = {\n \"video/mp4\": \".mp4\",\n \"video/quicktime\": \".mov\",\n \"video/webm\": \".webm\",\n \"video/x-matroska\": \".mkv\",\n};\n\n/** Extension for a downloaded reference: URL pathname first, then content-type, else .mp4. */\nexport function referenceVideoExt(url: string, contentType: string | null): string {\n const fromPath = path.extname(new URL(url).pathname).toLowerCase();\n if (fromPath && fromPath.length <= 5) return fromPath;\n const mime = (contentType ?? \"\").split(\";\")[0]?.trim().toLowerCase();\n return (mime && VIDEO_EXT_BY_MIME[mime]) || \".mp4\";\n}\n\n/**\n * The reference the scaffold reproduces. Accept a URL (e.g. a `baker winning-ads`\n * presigned link) directly and download it once to a temp file — the local bytes\n * are needed anyway for PySceneDetect shot-cut detection before the billed\n * deconstruct — so the caller never has to `curl` it first. A local path passes\n * straight through.\n */\n/**\n * The INSPIRATION video's provenance for the creative's `_definition.md` + dashboard: the\n * durable, content-addressed R2 URL the deconstruct already uploaded the source to\n * (`blueprint.source.url` — survives even after a presigned winning-ads URL expires),\n * falling back to the original URL argument; plus the advertiser the deconstruct identified.\n * We record the URL rather than committing the file: a reference video can be up to 2 GiB\n * and the video canvas never re-ingests the source at run time (it uses the extracted frame\n * URLs), so a git copy would be pure bloat with no re-run benefit.\n */\nfunction videoSourceReference(blueprint: unknown, fileArg: string): { url?: string; advertiser?: string } {\n const bp = (blueprint ?? {}) as { source?: { url?: unknown }; global?: { branding?: { brand_name?: unknown } } };\n const durable = typeof bp.source?.url === \"string\" ? bp.source.url : undefined;\n const original = /^https?:\\/\\//i.test(fileArg) ? fileArg : undefined;\n const brand = bp.global?.branding?.brand_name;\n return { url: durable ?? original, advertiser: typeof brand === \"string\" && brand.trim() ? brand.trim() : undefined };\n}\n\n/** A short human summary for the video creative's `_definition.md` body (deconstruct-derived). */\nfunction videoDefinitionDescription(blueprint: unknown): string | undefined {\n const g = ((blueprint ?? {}) as { global?: Record<string, unknown> }).global ?? {};\n const notes = g.reproduction_notes;\n if (typeof notes === \"string\" && notes.trim()) return notes.trim();\n const product = (g.branding as { product?: unknown } | undefined)?.product;\n return typeof product === \"string\" && product.trim() ? product.trim() : undefined;\n}\n\n/**\n * The frames mode the canvas actually uses. `--frames reuse` on a video with people in it\n * is refused by the scaffold (their faces would reach our ad), so report that and why\n * rather than echo the flag back.\n */\nfunction framesModeReport(\n canvas: { metadata?: unknown },\n requested: \"generate\" | \"reuse\",\n): { frames_mode: string; frames_reuse_refused?: string } {\n const todo = (canvas.metadata as { todo?: { frames_mode?: unknown; frames_reuse_refused?: unknown } } | undefined)\n ?.todo;\n const mode = typeof todo?.frames_mode === \"string\" ? todo.frames_mode : requested;\n const refused = typeof todo?.frames_reuse_refused === \"string\" ? todo.frames_reuse_refused : undefined;\n return { frames_mode: mode, ...(refused ? { frames_reuse_refused: refused } : {}) };\n}\n\nasync function materializeReferenceVideo(fileArg: string): Promise<string> {\n if (!/^https?:\\/\\//i.test(fileArg)) return path.resolve(fileArg);\n let bytes: Buffer;\n let contentType: string | null;\n try {\n // No challenge sniff: this is definitionally a video file, and decoding the\n // first 64 KB of one as text to look for a bot wall is waste, not caution.\n // The canvas asset ceiling, not the image one: this is a reference video,\n // and it is the surface most likely to meet a limit at all.\n ({ buffer: bytes, contentType } = await fetchExternalBytes(fileArg, {\n sniffChallenge: false,\n maxBytes: MAX_ASSET_BYTES,\n }));\n } catch (e) {\n throw new Error(`failed to download reference video: ${e instanceof Error ? e.message : String(e)}`);\n }\n if (bytes.length === 0) throw new Error(\"reference video download was empty\");\n const dest = path.join(\n tmpdir(),\n `baker-ref-${sha256Hex(bytes).slice(0, 16)}${referenceVideoExt(fileArg, contentType)}`,\n );\n await writeFile(dest, bytes);\n return dest;\n}\n\n/** Parse the `--seam-dedup` flag; defaults to \"head\". Rejects any other value so a typo fails loud. */\nfunction resolveSeamDedup(raw: unknown): ScaffoldVideoOpts[\"seamDedup\"] {\n if (raw === undefined) return \"head\";\n const v = String(raw);\n if (v === \"head\" || v === \"tail\" || v === \"off\") return v;\n throw new Error(`--seam-dedup must be \"head\", \"tail\", or \"off\" (got \"${v}\")`);\n}\n\nconst VIDEO_BUDGETS: readonly VideoBudget[] = [\"economy\", \"standard\", \"premium\"];\nfunction parseBudget(raw: unknown): VideoBudget {\n const v = raw === undefined ? \"standard\" : String(raw);\n if ((VIDEO_BUDGETS as readonly string[]).includes(v)) return v as VideoBudget;\n throw new Error(`--budget must be one of ${VIDEO_BUDGETS.join(\", \")} (got \"${v}\")`);\n}\n\n/** Resolve the model ids that DON'T depend on the deconstruct output. The video\n * model is resolved separately (`resolveVideoModel`) once the cast is known. */\nfunction resolveModels(args: Record<string, unknown>): {\n deconstructModel: string;\n selectModel: string;\n imageModel: string;\n} {\n return {\n // Flash by default (the `videoDeconstruct` role). Override with --deconstruct-model\n // ~google/gemini-pro-latest for the densest extraction when speed matters less.\n deconstructModel: resolveModel(\"video_deconstruct\", args[\"deconstruct-model\"], VIDEO_DECONSTRUCT_MODEL),\n selectModel: resolveModel(\"text_generate\", args[\"select-model\"], BLUEPRINT_ANALYSIS_MODEL),\n // The ad-frame model (matches the static-ad scaffold); the frame generators need the\n // most faithful text/identity reproduction. Override with --image-model for a\n // cheaper/faster pass.\n imageModel: resolveModel(\"image_generate\", args[\"image-model\"], AD_IMAGE_MODEL),\n };\n}\n\n/** True when the deconstruct surfaced a photoreal on-camera person/animal cast —\n * exactly the frames ByteDance's real-person filter blocks on Seedance. */\nexport function hasPhotorealCast(elements: unknown): boolean {\n return (\n Array.isArray(elements) &&\n elements.some((e) => {\n const type = typeof e === \"object\" && e !== null ? (e as { type?: unknown }).type : undefined;\n return type === \"person\" || type === \"animal\";\n })\n );\n}\n\n/** Resolve the video model once the cast is known. An explicit --video-model\n * always wins. Otherwise the scored router picks from the curated roster — and a\n * detected photoreal on-camera cast counts as a real-face brief, so it routes to\n * Veo up front. That cast WOULD be blocked on Seedance by ByteDance's real-person\n * filter, and a blocked frame-started clip is not moved to another model at run\n * time, so picking Seedance burns an attempt and dead-ends. Mirrors Higgsfield's models_explore\n * and explains its pick via the returned reason. */\nexport function resolveVideoModel(\n args: Record<string, unknown>,\n elements: unknown,\n): { videoModel: string; videoRouteReason?: string } {\n if (args[\"video-model\"]) {\n return { videoModel: resolveModel(\"video_generate\", args[\"video-model\"], DEFAULT_VIDEO_GENERATE_MODEL) };\n }\n const photorealCast = hasPhotorealCast(elements);\n const route = routeVideoModel({\n hasRealFace: Boolean(args[\"real-face\"]) || photorealCast,\n needsIdentity: Boolean(args.identity),\n needsMotionTransfer: Boolean(args[\"motion-transfer\"]),\n budget: parseBudget(args.budget),\n });\n // Make the auto-detection legible when it (not an explicit flag) drove the pick.\n const reason =\n photorealCast && !args[\"real-face\"]\n ? `${route.reason} — detected a photoreal on-camera cast, which Seedance's real-person filter would block`\n : route.reason;\n return {\n videoModel: resolveModel(\"video_generate\", route.model, DEFAULT_VIDEO_GENERATE_MODEL),\n videoRouteReason: reason,\n };\n}\n\n/** The deconstruct canvas: ingest → full scene-by-scene blueprint. Run first, on its own. */\nfunction buildDeconstructCanvas(\n videoPath: string,\n deconstructModel: string,\n opts: { maxScenes?: number; language?: string; focus?: string; shotCuts?: number[] },\n) {\n const deconstructParams: Record<string, unknown> = { model: deconstructModel, mode: \"full\" };\n if (typeof opts.maxScenes === \"number\") deconstructParams.max_scenes = opts.maxScenes;\n if (opts.language) deconstructParams.language = opts.language;\n if (opts.focus) deconstructParams.focus = opts.focus;\n // Real visual shot cuts (detected locally with PySceneDetect) so the deconstruct\n // snaps scene boundaries onto them and never lets a scene span a hard cut. An\n // EMPTY list is meaningful (detection ran, the video is verified cut-less — every\n // LLM boundary is a same-take beat); only a failed detection omits the param.\n if (opts.shotCuts) deconstructParams.shot_cuts = opts.shotCuts;\n // The Seedance per-clip ceiling: a shot longer than this is split into seamless\n // continuation sub-scenes (shared splice frame) instead of being truncated.\n deconstructParams.max_clip_s = SEEDANCE_DURATIONS[SEEDANCE_DURATIONS.length - 1];\n return {\n schema: \"baker-canvas/1\" as const,\n metadata: { name: \"video deconstruct pass\" },\n nodes: [\n { id: \"src\", type: \"ingest\", params: { source: \"path\", path: videoPath, expect: \"video\" } },\n { id: \"deconstruct\", type: \"video_deconstruct\", inputs: { video: \"$ref:src.asset\" }, params: deconstructParams },\n ],\n output: { node: \"deconstruct\", output: \"analysis\" },\n };\n}\n\n/**\n * The element-selection canvas: a single text_generate over a SLIMMED blueprint. The slim\n * is inlined into the prompt as a literal STRING (no `$ref` slot), so it never trips the\n * engine's 256KB inline-slot limit no matter how long the ad — a full 42-scene blueprint\n * inlined as a slot blew past it. A function replacer keeps `$`/`{{` in the JSON literal.\n */\nfunction buildSelectCanvas(selectModel: string, slimmedBlueprintJson: string) {\n return {\n schema: \"baker-canvas/1\" as const,\n metadata: { name: \"element selection pass\" },\n nodes: [\n {\n id: \"select\",\n type: \"text_generate\",\n params: {\n model: selectModel,\n max_tokens: 6000,\n temperature: 0,\n response_format: \"json_object\",\n system: SELECT_SYSTEM,\n prompt: SELECT_PROMPT.replace(\"{{blueprint}}\", () => slimmedBlueprintJson),\n },\n },\n ],\n output: { node: \"select\", output: \"text\" },\n };\n}\n\n/**\n * Run the deconstruct pass, then the element-selection pass over a SLIMMED blueprint.\n * Two passes (not one chained canvas) so the CLI can slim the blueprint between them —\n * the selector only reads cast/branding + a few per-scene prompt fields, and inlining the\n * full blueprint busts the engine's inline-prompt limit on long ads. The FULL blueprint is\n * still returned (the source of truth for prompt.json + scaffolding). Credits sum both runs.\n */\nasync function runAnalysisPasses(\n deconstructCanvas: ReturnType<typeof buildDeconstructCanvas>,\n selectModel: string,\n): Promise<{\n blueprint: unknown;\n elements: unknown[];\n transcript: string | undefined;\n /** The language the deconstruct's transcriber heard, as it named it (\"es\", or \"spanish\"). */\n detectedLanguage: string | undefined;\n creditsSpent: number | undefined;\n}> {\n const engine = createEngineFromEnv({ log: (line) => process.stderr.write(`${line}\\n`) });\n let credits = 0;\n let sawCredits = false;\n const addCredits = (stats: unknown) => {\n const c = (stats as { total_credits?: number })?.total_credits;\n if (typeof c === \"number\") {\n credits += c;\n sawCredits = true;\n }\n };\n\n // Pass 1: the full deconstruct blueprint (+ its word-level transcript, used to drive\n // the burned-in caption track).\n let blueprint: unknown;\n let transcript: string | undefined;\n let detectedLanguage: string | undefined;\n try {\n const r1 = await engine.run(deconstructCanvas, {});\n addCredits(r1.stats);\n blueprint = JSON.parse(await loadAssetText(r1.outputs_by_node.deconstruct?.analysis, \"deconstruct output\"));\n transcript = await loadTranscriptBestEffort(r1.outputs_by_node.deconstruct?.transcript);\n const heard = (r1.outputs_by_node.deconstruct?.transcript as { metadata?: { detected_language?: unknown } } | undefined)\n ?.metadata?.detected_language;\n detectedLanguage = typeof heard === \"string\" && heard.trim() ? heard.trim() : undefined;\n } catch (e) {\n if (e instanceof ValidationError) return fail(\"validation\", JSON.stringify(e.issues));\n if (e instanceof SyntaxError) return fail(\"read_outputs\", e.message);\n return fail(\"deconstruct\", e instanceof Error ? e.message : String(e));\n }\n\n // Pass 2: element selection over the slimmed blueprint (inlined as a literal prompt).\n const slimJson = JSON.stringify(slimBlueprintForSelection(blueprint));\n try {\n const r2 = await engine.run(buildSelectCanvas(selectModel, slimJson), {});\n addCredits(r2.stats);\n const elements = parseElements(await loadAssetText(r2.outputs_by_node.select?.text, \"selection output\"));\n return { blueprint, elements, transcript, detectedLanguage, creditsSpent: sawCredits ? credits : undefined };\n } catch (e) {\n if (e instanceof ValidationError) return fail(\"validation\", JSON.stringify(e.issues));\n if (e instanceof SyntaxError) return fail(\"read_outputs\", e.message);\n return fail(\"deconstruct\", e instanceof Error ? e.message : String(e));\n }\n}\n\nexport const scaffoldVideoCommand = defineCommand({\n meta: {\n name: \"scaffold-video\",\n description:\n \"Turn a reference video into a runnable reproduction canvas in one command. Runs billed passes — video_deconstruct \" +\n \"(the full scene-by-scene blueprint + transcript, baked to a split, editable blueprint: a global prompt.json plus one \" +\n \"small scenes/sNN.json per scene) and an AI selection \" +\n \"of the video's RECURRING identity elements (person/animal/product/logo) — then scaffolds a pipeline where every \" +\n \"scene boundary is a static-ad-grade frame (the blueprint as target_blueprint, a reference legend, the real frame as \" +\n \"anchor) and each recurring element gets ONE shared [TODO] ingest slot wired into every frame it appears in. The \" +\n \"clips feed Seedance an ultra-detailed motion brief (action, camera, dialogue, transcript). Edit a scene's \" +\n \"scenes/sNN.json (or prompt.json for global cast/palette/brand), fill the remaining [TODO] images, then `baker canvas run`. \" +\n \"A person in the reference is played by an invented, realistic person generated from their description — never the \" +\n \"source actor and never a photo of anyone real; pass `--avatar <handle>` (`baker avatars list`) when the same actor \" +\n \"has to recur across the company's ads.\",\n },\n args: {\n file: {\n type: \"positional\",\n required: true,\n description:\n \"Reference video — a local path OR an http(s) URL (e.g. a winning-ads link). A URL is downloaded for you; pass --slug or --out with it.\",\n },\n out: { type: \"string\", description: \"Output canvas path (default <video-dir>/<name>.video.canvas.json)\" },\n slug: {\n type: \"string\",\n description: \"Creative slug — writes the canvas to src/creatives/<slug>/<slug>.canvas.json (repo convention)\",\n },\n frames: {\n type: \"string\",\n description:\n '\"generate\" (default, every frame regenerated for our ad) or \"reuse\" (wire the source\\'s real frames in). Reuse applies only to a video with nobody in it — on a video showing people it is refused and every frame is generated, so the source\\'s actors never reach our ad.',\n },\n ambient: {\n type: \"boolean\",\n description: \"Give silent b-roll scenes native diegetic ambient mixed deep under the music bed (off by default)\",\n },\n \"seam-dedup\": {\n type: \"string\",\n description:\n 'How to dedup the frame two clips SHARE when a long shot is split for length: \"head\" (default, drop the second clip\\'s first frame), \"tail\" (drop the first clip\\'s last frame), or \"off\" (keep both).',\n },\n \"max-scenes\": { type: \"string\", description: \"Cap the number of scenes the deconstruct emits\" },\n \"shot-threshold\": {\n type: \"string\",\n description:\n \"PySceneDetect content threshold. Default is adaptive (18, auto re-checked at 27 when a continuous shot looks over-segmented); pinning a value disables the re-check. Lower = more/softer cuts, higher = fewer.\",\n },\n language: { type: \"string\", description: \"Transcript/dialogue language hint (e.g. fr, en)\" },\n focus: { type: \"string\", description: \"Known provenance/emphasis to ground the deconstruct\" },\n advertiser: {\n type: \"string\",\n description: \"Source advertiser recorded in _definition.md (default: the brand the deconstruct identified)\",\n },\n platforms: {\n type: \"string\",\n description:\n \"Where the ad runs, the main platform first (meta, linkedin, tiktok, …): recorded in _definition.md. Take it from the person's request or the idea.\",\n },\n platform: { type: \"string\", description: \"Retired: use --platforms. Still recorded in _definition.md.\" },\n \"deconstruct-model\": { type: \"string\", description: \"Override the video_deconstruct model id\" },\n \"select-model\": { type: \"string\", description: \"Override the text_generate model id for element selection\" },\n \"image-model\": { type: \"string\", description: \"Override the image_generate model id for frames\" },\n \"video-model\": { type: \"string\", description: \"Override the video_generate model id for clips (skips the scored router)\" },\n \"real-face\": {\n type: \"boolean\",\n description:\n \"The ad has a photoreal human face on camera → the router picks Veo (dodges the ByteDance real-person filter). Set this for ANY photoreal presenter/creator/testimonial cast — the filter blocks AI-GENERATED photoreal faces too, not just real ones.\",\n },\n \"motion-transfer\": {\n type: \"boolean\",\n description: \"Motion driven from a reference video / deliberately hyper-dynamic → the router picks Kling.\",\n },\n identity: {\n type: \"boolean\",\n description: \"The same character/product must stay consistent across clips → the router picks the Seedance workhorse.\",\n },\n budget: {\n type: \"string\",\n description: 'Cost posture for the router: \"economy\" | \"standard\" | \"premium\" (default standard).',\n },\n aspect: {\n type: \"string\",\n description:\n 'Output aspect ratio (e.g. \"4:5\"). Default: the source video\\'s detected ratio. When the video model ' +\n \"can't generate the ratio (Seedance has no 4:5) clips generate at the nearest supported ratio and are \" +\n \"center-cropped onto the output canvas.\",\n },\n resolution: {\n type: \"string\",\n description:\n 'Output resolution for generated clips (e.g. \"1080p\"). Default 1080p — the highest the video model supports — so clips keep the keyframe sharpness instead of the model\\'s low default.',\n },\n avatar: {\n type: \"string\",\n description:\n \"Cast company avatars as the reference's people — pass this when the same actor has to recur across ads (without it, \" +\n \"each person is invented from their description). \" +\n 'One handle, or several comma-separated in the order the people appear (`--avatar marta` / `--avatar marta,joan`). ' +\n \"Each recurring person grounds on that avatar's identity sheet, so the ad shows the company's own cast instead of \" +\n \"the source ad's actors. `baker avatars list` shows who there is; checked before anything is billed.\",\n },\n },\n async run({ args }) {\n const fileArg = String(args.file);\n const slug = args.slug ? String(args.slug) : undefined;\n if (slug && !isValidScaffoldSlug(slug)) {\n process.stderr.write(\n `${JSON.stringify({ ok: false, error: { code: \"invalid_slug\", message: \"--slug must be lowercase kebab (a-z, 0-9, hyphens), max 100 chars\" } }, null, 2)}\\n`,\n );\n process.exit(2);\n }\n // A URL is downloaded to a temp file, which is no sensible home for the output\n // canvas — require an explicit target so the reproduction lands in the repo.\n const isUrl = /^https?:\\/\\//i.test(fileArg);\n if (isUrl && !slug && !args.out) {\n return fail(\n \"missing_output_target\",\n \"When the reference is a URL, pass --slug (writes src/creatives/<slug>/) or --out <path> so the scaffolded canvas has a home in the repo.\",\n );\n }\n let videoPath: string;\n try {\n videoPath = await materializeReferenceVideo(fileArg);\n } catch (e) {\n return fail(\"download\", e instanceof Error ? e.message : String(e));\n }\n const base = path.basename(videoPath, path.extname(videoPath));\n const outPath = args.out\n ? path.resolve(String(args.out))\n : slug\n ? path.join(process.cwd(), \"src\", \"creatives\", slug, `${slug}.canvas.json`)\n : path.join(path.dirname(videoPath), `${base}.video.canvas.json`);\n const outDir = path.dirname(outPath);\n const blueprintPath = path.join(outDir, \"prompt.json\");\n // The slim style projection every frame's target_blueprint reads (global cast/palette/\n // brand only). Written alongside prompt.json so the full blueprint stays hand-editable.\n const blueprintStylePath = path.join(outDir, \"prompt.style.json\");\n const frames = args.frames === \"reuse\" ? \"reuse\" : \"generate\";\n const maxScenes = args[\"max-scenes\"] ? Number(args[\"max-scenes\"]) : undefined;\n\n // A faithful reproduction defaults to ALL source scenes. Capping is a cost\n // lever that silently DROPS scenes (the deconstruct merges everything past the\n // cap into the last kept scene), so make it a loud, explicit operator choice.\n if (Number.isFinite(maxScenes)) {\n process.stderr.write(\n `⚠️ --max-scenes ${maxScenes} caps the deconstruct: any scenes beyond ${maxScenes} are MERGED away, ` +\n `reducing fidelity (fewer cuts, lost beats). Omit it to reproduce every scene.\\n`,\n );\n }\n\n let models: ReturnType<typeof resolveModels>;\n try {\n models = resolveModels(args);\n // Checked now, before the billed passes, although the video model is only\n // routed once the cast is known.\n if (args[\"video-model\"]) resolveModel(\"video_generate\", args[\"video-model\"], DEFAULT_VIDEO_GENERATE_MODEL);\n } catch (e) {\n return fail(\"unknown_model\", e instanceof Error ? e.message : String(e));\n }\n const { deconstructModel, selectModel, imageModel } = models;\n\n // Resolved before the billed passes: a handle that cannot be cast fails for free.\n const cast = await resolveCastAvatars(args.avatar);\n if (\"error\" in cast) return fail(\"avatar\", cast.error);\n const { handles: avatarHandles, avatars } = cast;\n\n // Detect real visual shot cuts locally with PySceneDetect so the deconstruct can\n // snap scene boundaries onto them (a scene must never span a hard cut). Lower\n // `--shot-threshold` to catch more (softer) cuts on a fast-cut ad; higher to catch\n // fewer.\n const shotThreshold = args[\"shot-threshold\"] ? Number(args[\"shot-threshold\"]) : undefined;\n const shotCuts = await detectShotCutsBestEffort(videoPath, shotThreshold);\n\n // Two passes: ingest → video_deconstruct, then element selection over a SLIMMED\n // blueprint (so a long ad's blueprint never busts the inline-prompt limit).\n const deconstructCanvas = buildDeconstructCanvas(videoPath, deconstructModel, {\n maxScenes: Number.isFinite(maxScenes) ? maxScenes : undefined,\n language: args.language ? String(args.language) : undefined,\n focus: args.focus ? String(args.focus) : undefined,\n shotCuts,\n });\n const analysis = await runAnalysisPasses(deconstructCanvas, selectModel);\n const { blueprint, transcript, creditsSpent } = analysis;\n // The language the lines are spoken in: `--language` when given, else what the transcriber\n // heard, else Jev's reading of the lines. Read with each voice's gender and the words a\n // caption card may not end on, in one request, kept in the workspace's cache.\n const heard = analysis.detectedLanguage;\n const declaredLanguage =\n (args.language ? spokenLanguage(String(args.language))?.tag : undefined) ??\n (heard ? (spokenLanguage(heard)?.tag ?? languageCodeNamed(heard)) : undefined);\n const speechCache = path.join(findWorkspaceRoot(outDir) ?? process.cwd(), \"canvas\", \".cache\");\n const speechSpent: ReviewUsage[] = [];\n const speech = await readBlueprintSpeech(\n blueprint,\n declaredLanguage ? { declaredLanguage } : {},\n {\n ask: cachedJev(speechCache, (questions) => askJevQuestions(questions, (u) => speechSpent.push(u))),\n genders: voiceGenderModel(speechCache, (u) => speechSpent.push(u)),\n },\n );\n await holdUnbilledSpend(speechCache, speechSpent).catch(() => {});\n const elements = castAvatarsOnElements(analysis.elements, avatars);\n const uncast = avatarsNotCast(analysis.elements, avatarHandles);\n const uncastHint = uncast.length\n ? {\n hints: [\n `NOT CAST: ${uncast.map((h) => `\\`${h}\\``).join(\", \")} — the element selection found no more recurring people than it cast, so ${uncast.length === 1 ? \"this avatar plays\" : \"these avatars play\"} nobody in this canvas. A person shown in only one scene is not a recurring element, so those frames render whoever their scene file describes — tell the user who is cast and who is not.`,\n ],\n }\n : {};\n\n // Route the video model now that the cast is known: a photoreal on-camera\n // person/animal is auto-routed to Veo (Seedance's real-person filter would\n // block it — no point burning a wasted attempt before the runtime fallback).\n let routed: ReturnType<typeof resolveVideoModel>;\n try {\n routed = resolveVideoModel(args, elements);\n } catch (e) {\n return fail(\"unknown_model\", e instanceof Error ? e.message : String(e));\n }\n const { videoModel, videoRouteReason } = routed;\n if (videoRouteReason && !args[\"video-model\"] && !args[\"real-face\"] && hasPhotorealCast(elements)) {\n process.stderr.write(`🎬 Photoreal on-camera cast detected → generating clips on ${videoModel} (dodges Seedance's real-person filter).\\n`);\n }\n\n // Bake the deconstruct blueprint as the editable prompt, annotated so the human\n // editing it sees which wired slot grounds which recurring element.\n await mkdir(outDir, { recursive: true });\n const annotated = annotateBlueprintWithElements(blueprint, elements);\n // Split the blueprint into the global slice (`prompt.json`) + one `scenes/sNN.json`\n // per scene. An agent edits ONE small scene file at a time instead of a 2000-line\n // monolith; `run`/`validate` re-assemble and re-flow each scene into the graph\n // (see scene-projection.ts). blueprintPath still names prompt.json — now scene-less.\n await writeSceneFiles(outDir, annotated);\n // The slim style projection frames actually read via target_blueprint (no per-scene\n // array), derived from the SAME annotated blueprint so brand/cast/palette stay in\n // sync. Written through the ONE renderer `validate`/`run` also use to re-derive it\n // from an edited prompt.json — byte-identical formatting is what makes their\n // \"already up to date\" comparison (and the ingest cache) work.\n await writeFile(blueprintStylePath, renderStyleProjectionFromValue(annotated), \"utf8\");\n\n // Copy the overlay composition next to the canvas, then BAKE the reference's\n // overlays into its index.html as real, editable HTML at the <!--OVERLAYS-->\n // marker. The operator edits that HTML to paint the broadcast look — overlays\n // are authored markup, never props fed to a styling engine.\n // Resolve the output vs generation aspect up front: the overlay/caption composition\n // dims, the ffmpeg canvas, and the clip/frame generation params must all agree.\n let aspect: ReturnType<typeof resolveAspect>;\n try {\n aspect = resolveAspect(\n (blueprint as { source?: { aspect_ratio?: string } }).source?.aspect_ratio,\n args.aspect ? String(args.aspect) : undefined,\n genAspectsFor(videoModel),\n );\n } catch (e) {\n return fail(\"aspect\", e instanceof Error ? e.message : String(e));\n }\n const outDims = canvasDims(aspect.outAr);\n if (aspect.remapped) {\n process.stderr.write(\n `⚠️ ${aspect.outAr} output → clips generate at ${aspect.genAr} (the video model's nearest ratio) and are ` +\n `center-cropped to ${aspect.outAr} (${outDims.w}×${outDims.h}) — keep subjects centered in frame prompts.\\n`,\n );\n }\n\n const compositionDest = path.join(outDir, \"video-overlay-composition\");\n await cp(SHIPPED_OVERLAY_COMPOSITION_DIR, compositionDest, { recursive: true });\n await stampCompositionDims(compositionDest, outDims);\n const indexPath = path.join(compositionDest, \"index.html\");\n // With a transcript the scaffold wires a word-synced caption track (stageCaptions\n // below) — the reference's caption-role overlay fragments must then NOT also seed\n // as frozen static overlays (they'd double the same words on screen).\n const overlayHtml = buildOverlayHtml(blueprint, { captionsActive: Boolean(transcript), videoModel });\n const indexHtml = await readFile(indexPath, \"utf8\");\n // Function replacer (not the string form) so `$`-sequences in overlay copy\n // (e.g. `save $$$!`, a literal `$&`) are inserted verbatim, not interpreted as\n // replacement patterns by String.prototype.replace.\n const injected = indexHtml.replace(\"<!--OVERLAYS-->\", () => overlayHtml);\n // replace() returns the string unchanged when the marker is absent — fail loud\n // rather than silently shipping a composition with no overlay layer.\n if (injected === indexHtml && overlayHtml.trim()) {\n fail(\n \"composition_marker_missing\",\n `video-overlay-composition/index.html is missing the <!--OVERLAYS--> marker — cannot inject the overlay layer`,\n );\n }\n await writeFile(indexPath, injected, \"utf8\");\n\n // Burned-in caption track: a sound-off feed needs the spoken words on screen, so the\n // scaffold wires a word-synced TikTok track by default whenever the deconstruct\n // returned a transcript (staged below). No transcript ⇒ no caption track.\n const captions = await stageCaptions(outDir, transcript);\n if (captions.compositionPath) await stampCompositionDims(captions.compositionPath, outDims);\n\n // Embed paths RELATIVE to the canvas file so the written canvas is portable —\n // `run`/`validate` resolve them against the canvas dir at load time. Baking\n // absolutes here is what made a moved/renamed workspace read a sibling's stale\n // composition + assets (the `memphis` cross-workspace bug).\n const opts: ScaffoldVideoOpts = {\n imageModel,\n videoModel,\n overlayCompositionPath: path.relative(outDir, compositionDest),\n captionsCompositionPath: captions.compositionPath\n ? path.relative(outDir, captions.compositionPath)\n : undefined,\n blueprintPath: path.relative(outDir, blueprintPath),\n blueprintStylePath: path.relative(outDir, blueprintStylePath),\n frames,\n ambient: Boolean(args.ambient),\n seamDedup: resolveSeamDedup(args[\"seam-dedup\"]),\n ...(speech.spokenLanguage ? { spokenLanguage: speech.spokenLanguage } : {}),\n voiceGenders: speech.voiceGenders,\n ...(speech.captionCarriesOn.length ? { captionCarriesOn: speech.captionCarriesOn } : {}),\n ...(args.aspect ? { aspect: String(args.aspect) } : {}),\n ...(args.resolution ? { resolution: String(args.resolution) } : {}),\n };\n\n let canvas: ReturnType<typeof scaffoldVideoCanvas>;\n let report: ReturnType<typeof videoReport>;\n try {\n canvas = scaffoldVideoCanvas(blueprint, elements, opts);\n report = videoReport(blueprint, elements, videoModel);\n } catch (e) {\n return fail(\"scaffold\", e instanceof Error ? e.message : String(e));\n }\n\n // MERGED overlay+captions pass: when the scaffold rendered the caption track\n // inside the overlay composition (no standalone `captions` node), the staged\n // TikTok caption dir is unused — remove it so the workspace holds no dead\n // composition an operator would edit to zero effect.\n if (captions.compositionPath && !canvas.nodes.some((n) => n.id === \"captions\")) {\n await rm(captions.compositionPath, { recursive: true, force: true });\n }\n\n // Validate against a copy whose relative paths are resolved to the output dir\n // (the on-disk canvas keeps the portable relatives).\n const validation = await validateCanvasDeep(resolveRelativeCanvasPaths(canvas, outDir), defaultRegistry());\n\n // ALWAYS write the canvas — the deconstruct behind it is already paid for. A\n // blocking validation issue becomes part of the operator's checklist (fix, then\n // `baker canvas validate`), never a hard exit that discards the artifact.\n if (!validation.ok) {\n const meta = canvas.metadata as Record<string, unknown>;\n const todo = (meta.todo ?? {}) as Record<string, unknown>;\n todo.blocking_validation_issues = validation.issues;\n meta.todo = todo;\n }\n await writeFile(outPath, `${JSON.stringify(canvas, null, 2)}\\n`, \"utf8\");\n // The frozen rebuild context the scene sync feeds back into scaffoldVideoCanvas to\n // regenerate scene prompts deterministically (NO model call): the element-selection\n // artifact + the exact scaffold opts. Written once, never hand-edited. Its absence\n // (an old canvas) makes the sync degrade to legacy behavior, never fail.\n await writeFile(\n path.join(outDir, REBUILD_FILE),\n `${JSON.stringify({ elements, opts }, null, 2)}\\n`,\n \"utf8\",\n );\n if (!validation.ok) {\n process.stderr.write(\n `${JSON.stringify(\n {\n ok: false,\n error: { code: \"validation\", issues: validation.issues },\n canvas_path: outPath,\n prompt_path: blueprintPath,\n ...framesModeReport(canvas, frames),\n note: \"The canvas WAS written despite the blocking issue(s) — fix them in place, then `baker canvas validate` before running.\",\n ...uncastHint,\n },\n null,\n 2,\n )}\\n`,\n );\n process.exit(2);\n }\n\n // Keep the engine's run cache + the scaffold's working files out of git.\n await ensureGitignore(process.cwd(), [\"canvas/\", \".context/\"]);\n\n // Preserve the INSPIRATION video the same way the static flow preserves its reference\n // image — so the creative (and the dashboard) shows what it was built from. We record the\n // durable R2 URL the deconstruct already produced, not a committed copy (see helper).\n const sourceRef = videoSourceReference(blueprint, fileArg);\n if (slug) {\n // Auto-write _definition.md so the video creative joins the content collection with its\n // source provenance (the video command never wrote one before). Preserve on re-scaffold.\n const definitionPath = path.join(outDir, \"_definition.md\");\n if (!(await fileExists(definitionPath))) {\n await writeFile(\n definitionPath,\n buildCreativeDefinition({\n title: titleFromSlug(slug),\n kind: \"video\",\n ...definitionPlatformsOf(\n args.platforms ? String(args.platforms) : undefined,\n args.platform ? String(args.platform) : undefined,\n ),\n formats: resolveFormats(aspect.outAr),\n sourceReferenceUrl: sourceRef.url,\n sourceAdvertiser: args.advertiser ? String(args.advertiser) : sourceRef.advertiser,\n sourceKind: \"video\",\n description: videoDefinitionDescription(blueprint),\n }),\n \"utf8\",\n );\n }\n }\n\n // Push the parsed node-graph so the dashboard can draw this video's full\n // workflow immediately — before spending any of the ~200-credit render. Best-effort.\n if (slug) {\n await syncCreativeDefinitionBestEffort({\n slug,\n title: titleFromSlug(slug),\n ...(await readDefinitionPlatforms(outPath)),\n formats: [aspect.outAr],\n canvas,\n sourceReferenceUrl: sourceRef.url,\n sourceSha: await computeSourceSha(outPath),\n });\n }\n\n process.stdout.write(\n `${JSON.stringify(\n {\n ok: true,\n canvas_path: outPath,\n prompt_path: blueprintPath,\n source_reference: sourceRef.url,\n composition_dir: compositionDest,\n output: canvas.output,\n ...uncastHint,\n ...framesModeReport(canvas, frames),\n models: {\n deconstruct: deconstructModel,\n select: selectModel,\n image: imageModel,\n video: videoModel,\n ...(videoRouteReason ? { video_route_reason: videoRouteReason } : {}),\n },\n stats: {\n scene_count: report.scene_count,\n total_nodes: canvas.nodes.length,\n analysis_credits_spent: creditsSpent,\n run_estimated_credits: validation.estimatedCredits,\n // WHY the graph has its nodes: per-scene routes + the node-type histogram\n // (mirrors metadata.video.graph_stats in the canvas).\n graph: (canvas.metadata as { video?: { graph_stats?: unknown } })?.video?.graph_stats,\n },\n checklist: {\n edit_prompt: `The blueprint is split so you edit ONE small file at a time — never a giant one. Per-scene content (a scene's dialogue, action, frame prompts, overlays) lives in \\`scenes/sNN.json\\` — edit the single scene you want to change. Global cast/palette/brand/copy lives in \\`${path.basename(blueprintPath)}\\`. \\`baker canvas validate\\`/\\`run\\` re-assemble the blueprint and re-flow every edited scene back into the render (and regenerate ${path.basename(blueprintStylePath)}, the projection each frame's target_blueprint reads) — so your scene edits reach the render automatically. Never hand-edit the inlined node prompts in the canvas or the derived ${path.basename(blueprintStylePath)}; both are regenerated.`,\n recurring_elements_to_supply: report.elements,\n voices_to_confirm: report.dialogue.map((d) => ({\n scene: d.scene,\n speaker: d.speaker,\n voice_description: d.voice_description,\n line: d.line,\n })),\n sfx_count: report.sfx_count,\n overlay_count: report.overlay_count,\n has_music: report.has_music,\n scenes_clamped_to_clip_max: report.clamped_scenes,\n oversize_scenes: report.oversize_scenes,\n overstuffed_scenes: report.overstuffed_scenes,\n // Steer the edit toward disciplined prompting + on-brand MOTION, not just\n // on-brand color. The overlays inherit the reference's motion unless the\n // operator restyles easing/transition/accent from the brand's motion language.\n prompt_discipline:\n \"Rewrite each scene with the six-decision structure (Route / Spec / Beats / Copy / Technique / Negatives): quote exact copy, give every beat a timestamp, and name the moves. Pull easing, transition (cut vs fade), pacing, and the accent moment from BRAND.md § Brand in Motion so the overlays move like THIS brand — not the reference's. If BRAND.md has no Brand-in-Motion section, seed it with brand-build first. See the creative-canvas-ads skill: references/prompt-anatomy.md + references/hyperframes/.\",\n // Photoreal on-camera casts auto-route to Veo above, so this only fires\n // when `--video-model bytedance/seedance-2.0` was EXPLICITLY forced despite\n // a person/animal cast — overriding that safety route. Warn that every such\n // clip will hit ByteDance's real-person filter and burn a wasted attempt.\n ...(report.elements.some((e) => e.type === \"person\" || e.type === \"animal\") && /seedance/i.test(videoModel)\n ? {\n content_policy_risk:\n \"You FORCED Seedance (`--video-model bytedance/seedance-2.0`) on an ad with a photoreal on-camera cast. ByteDance's real-person filter will reject those clips (content_policy_blocked, E005) — no prompt change clears it. Each clip auto-recovers on Veo at render time so the run still completes, but you burn a wasted Seedance attempt per clip. Drop `--video-model` to let the scaffold route the cast to Veo up front, or make the frames less photorealistic.\",\n }\n : {}),\n note: \"Fill each el_* [TODO] — a person needs none (invented from their description, or cast with `--avatar <handle>`), never a photo of a real person; anything else with ONE real source image (reused across every frame that element appears in) — confirm each voice_select casting, then `baker canvas validate` and `baker canvas run`. Running generates many billed image/video/audio assets — it is not free.\",\n },\n },\n null,\n 2,\n )}\\n`,\n );\n },\n});\n","/**\n * A SCORED video-model router — the curated-and-explainable answer to\n * Higgsfield's `models_explore(recommend)`. Instead of a single hardcoded\n * default, a small weighted scorer picks between five curated video models (the\n * `videoRouter*` and `videoDefault` roles in the contract's `MODEL_ROLES`) and\n * returns a human-readable `reason` (mirroring Higgsfield's `match_reason`).\n *\n * The roster stays deliberately tiny (curation over breadth); this only makes the\n * pick correct and transparent:\n * - a real human likeness → Veo (the ONLY model that dodges ByteDance's\n * real-person filter), so a real-face brief never wastes a billed Seedance 422.\n * - motion-transfer / deliberately dynamic multi-shot beats → Kling.\n * - identity/product consistency → Seedance, the workhorse.\n * - anything else → the default video model (Gemini Omni 1.1).\n * - budget \"economy\" prefers the cheap Veo-fast tier over the 3.1 ceiling.\n *\n * Pure function, no I/O — tier-1 unit-testable per `.claude/rules/tdd.md`.\n */\n\nimport { MODEL_ROLES } from \"@baker/canvas-contract\";\n\nexport type VideoBudget = \"economy\" | \"standard\" | \"premium\";\n\nexport type VideoRouterInput = {\n /** The brief needs a real human likeness preserved (from a real reference face). */\n hasRealFace?: boolean;\n /** The same character/product must stay consistent across clips. */\n needsIdentity?: boolean;\n /** Motion is driven from a reference video, or the ad is deliberately hyper-dynamic. */\n needsMotionTransfer?: boolean;\n /** Cost posture. `economy` favors the cheap iteration tier. */\n budget?: VideoBudget;\n};\n\nexport type VideoRoute = {\n model: string;\n reason: string;\n /** Per-candidate score, exposed so the pick is fully auditable. */\n scores: Record<string, number>;\n};\n\nconst SEEDANCE = MODEL_ROLES.videoRouterWorkhorse.model;\nconst VEO = MODEL_ROLES.videoRouterRealFace.model;\nconst VEO_FAST = MODEL_ROLES.videoRouterRealFaceEconomy.model;\nconst KLING = MODEL_ROLES.videoRouterMotion.model;\n// The default video model (Omni 1.1, never the legacy preview): the router picks for\n// NEW work, and the preview exists only so stored canvases re-run verbatim.\nconst GEMINI_OMNI = MODEL_ROLES.videoDefault.model;\n\n/** A single weighted contribution to a candidate's score, with the reason it fired. */\ntype Signal = { model: string; weight: number; because: string };\n\n/**\n * Score every curated video model against the brief and return the winner plus\n * the dominant reason. Weights are intentionally coarse and readable — the goal\n * is a correct, explainable pick, not a tuned ML score.\n */\nexport function routeVideoModel(input: VideoRouterInput): VideoRoute {\n const budget = input.budget ?? \"standard\";\n const signals: Signal[] = [];\n\n // Hard rule: a real face MUST route to Veo — Seedance/Kling hit ByteDance-style\n // real-person filters. This dominates everything else.\n if (input.hasRealFace) {\n signals.push({ model: VEO, weight: 1200, because: \"real human likeness → Veo (dodges the real-person filter)\" });\n }\n\n // Motion transfer / hyper-dynamic multi-shot beats are Kling's lane.\n if (input.needsMotionTransfer) {\n signals.push({ model: KLING, weight: 800, because: \"motion-transfer / dynamic multi-shot → Kling\" });\n }\n\n // Identity/product consistency is the Seedance workhorse's strength (cheap, strong i2v).\n if (input.needsIdentity && !input.hasRealFace) {\n signals.push({ model: SEEDANCE, weight: 300, because: \"identity/product consistency → Seedance workhorse\" });\n }\n\n // Baseline preference so a signal-free brief still has a sensible default.\n // Omni wins the default because it renders picture + synchronized audio in one\n // call. It is deliberately a WEAK signal: it loses to every specific need above,\n // and it should: it stops at 10s and takes only 16:9 or 9:16, so any brief with a\n // real requirement is better served elsewhere.\n signals.push({ model: GEMINI_OMNI, weight: 100, because: \"default — native audio in one call\" });\n\n // Budget nudges: economy shifts a Veo pick to the cheap iteration tier; premium\n // keeps the 3.1 ceiling. Applied as a swap, not a competing candidate.\n const scores: Record<string, number> = { [SEEDANCE]: 0, [VEO]: 0, [VEO_FAST]: 0, [KLING]: 0, [GEMINI_OMNI]: 0 };\n let top: Signal = signals[0] as Signal;\n for (const s of signals) {\n scores[s.model] = (scores[s.model] ?? 0) + s.weight;\n if ((scores[s.model] ?? 0) >= (scores[top.model] ?? 0)) top = s;\n }\n\n let model = top.model;\n let reason = top.because;\n if (model === VEO && budget === \"economy\") {\n model = VEO_FAST;\n reason = `${reason}, on the economy fast tier`;\n scores[VEO_FAST] = scores[VEO] ?? 0;\n }\n\n return { model, reason, scores };\n}\n","import { execFile } from \"node:child_process\";\nimport { mkdtemp, readdir, readFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * PySceneDetect `detect-content` threshold (HSV per-frame content difference, 0–255\n * scale; NOT comparable to ffmpeg's `scene` luma score). PySceneDetect's own default is\n * 27, but social ads cut fast and often on SOFT reframes (same set, slight angle change)\n * that 27 misses — leaving the deconstruct under-segmented. 18 recovers those soft cuts\n * while staying clear of motion-driven false positives; tune per video with\n * `--shot-threshold` (lower = more cuts).\n */\nconst PYSCENEDETECT_THRESHOLD = 18;\n/**\n * Minimum scene length (seconds) for PySceneDetect. Its own default is ~0.6s, which\n * merges away rapid montage flashes; 0.25 matches the backend's `snapAndSplitToCuts`\n * minimum scene duration so fast cuts survive end-to-end (and sub-2s silent beats become\n * cheap still-holds). Below ~0.2s is single-frame flicker, not a real cut.\n */\nconst PYSCENEDETECT_MIN_SCENE_LEN_S = 0.25;\n/**\n * Adaptive re-check threshold. The low default (18) recovers soft reframes on montage\n * ads, but on a CONTINUOUS talking-head selfie (no real cuts) the creator's motion and\n * the held subject trip it dozens of times — shredding one shot into 20+ micro-scenes.\n * PySceneDetect's own default (27) is the discriminator: a real montage's cuts are\n * genuine HSV jumps that SURVIVE 27, while a continuous shot's motion artifacts VANISH.\n * So when the first pass looks over-segmented we re-run at 27 and trust that result —\n * it keeps real cuts and drops false ones. Paired with a longer min-scene-len.\n */\nconst PYSCENEDETECT_RECHECK_THRESHOLD = 27;\nconst PYSCENEDETECT_RECHECK_MIN_SCENE_LEN_S = 0.6;\n\n/**\n * Does a cut list look like a continuous shot shredded by motion rather than a real\n * montage? True when there are many cuts packed close together — the MEDIAN gap between\n * consecutive boundaries (counting 0 → first cut) is short. This is only a TRIGGER to\n * re-check at a higher threshold; the re-check itself is what decides montage vs\n * continuous, so a false trigger on a genuinely fast montage is harmless (its real cuts\n * survive the re-check). Pure + deterministic.\n */\nexport function isLikelyOverSegmented(cuts: number[], opts: { minCuts?: number; medianGapS?: number } = {}): boolean {\n const minCuts = opts.minCuts ?? 6;\n const maxMedianGap = opts.medianGapS ?? 2.0;\n const sorted = [...cuts].filter((c) => Number.isFinite(c) && c > 0).sort((a, b) => a - b);\n if (sorted.length < minCuts) return false;\n const gaps: number[] = [];\n let prev = 0;\n for (const c of sorted) {\n gaps.push(c - prev);\n prev = c;\n }\n gaps.sort((a, b) => a - b);\n const mid = Math.floor(gaps.length / 2);\n const median = gaps.length % 2 ? (gaps[mid] as number) : ((gaps[mid - 1] as number) + (gaps[mid] as number)) / 2;\n return median < maxMedianGap;\n}\n\n/**\n * Merge the over-segmentation re-check with the first pass instead of discarding it\n * wholesale. The high-threshold set is the base (it dropped the motion shred), but the\n * low pass ALSO found real SOFT transitions (blur-morphs, gradual reframes) that vanish\n * at 27 — losing them chains scenes across real shot changes. An extra is added back\n * only when it is ISOLATED: ≥ `isolationS` from every kept cut and from every other\n * extra. Motion shred clusters (sub-second neighbors); genuine soft cuts stand alone.\n * Pure + deterministic.\n */\nexport function mergeRecheckCuts(firstPass: number[], recheck: number[], isolationS = 0.75): number[] {\n const kept = [...new Set(recheck)].sort((a, b) => a - b);\n const extras = [...new Set(firstPass)]\n .filter((c) => kept.every((k) => Math.abs(k - c) >= isolationS))\n .sort((a, b) => a - b);\n const isolated = extras.filter((c, i) => {\n const prev = extras[i - 1];\n const next = extras[i + 1];\n return (prev === undefined || c - prev >= isolationS) && (next === undefined || next - c >= isolationS);\n });\n return [...new Set([...kept, ...isolated])].sort((a, b) => a - b);\n}\n\n/** Parse an `HH:MM:SS.mmm` PySceneDetect timecode into seconds, or null if malformed. */\nexport function timecodeToSeconds(tc: string): number | null {\n const m = tc.trim().match(/^(\\d+):(\\d{1,2}):(\\d{1,2}(?:\\.\\d+)?)$/);\n if (!m) return null;\n const h = Number.parseInt(m[1] ?? \"\", 10);\n const min = Number.parseInt(m[2] ?? \"\", 10);\n const s = Number.parseFloat(m[3] ?? \"\");\n if (!Number.isFinite(h) || !Number.isFinite(min) || !Number.isFinite(s)) return null;\n return h * 3600 + min * 60 + s;\n}\n\n/**\n * Parse hard-cut timestamps (seconds) out of a PySceneDetect `*-Scenes.csv`. The\n * first CSV row is the cutting list: `Timecode List:,00:00:08.900,00:00:11.333,…`\n * — each entry is a scene boundary (internal hard cut). Sorted, deduped, positive. Pure.\n */\nexport function parsePySceneDetectCsvCuts(csv: string): number[] {\n const firstLine = csv.split(/\\r?\\n/, 1)[0] ?? \"\";\n if (!/^\\s*Timecode List:/i.test(firstLine)) return [];\n const cuts: number[] = [];\n for (const cell of firstLine.split(\",\").slice(1)) {\n const t = timecodeToSeconds(cell);\n if (t !== null && t > 0) cuts.push(Math.round(t * 1000) / 1000);\n }\n return [...new Set(cuts)].sort((a, b) => a - b);\n}\n\n/**\n * Detect hard visual shot cuts with PySceneDetect's `scenedetect` CLI (battle-tested\n * ContentDetector: RGB→HSV per-frame average difference, default threshold 27). Writes\n * the scene CSV to a temp dir, parses the cutting list, then cleans up. Returns the cut\n * timestamps in seconds. Throws if `scenedetect` is missing or fails (caller falls back).\n */\n/** One `scenedetect detect-content` invocation at a fixed threshold; returns the cuts. */\nasync function runSceneDetectOnce(\n filePath: string,\n threshold: number,\n minSceneLenS: number,\n timeoutMs: number,\n): Promise<number[]> {\n const outDir = await mkdtemp(join(tmpdir(), \"baker-scenedetect-\"));\n try {\n await execFileAsync(\n \"scenedetect\",\n [\n \"--input\",\n filePath,\n \"--output\",\n outDir,\n \"detect-content\",\n \"--threshold\",\n String(threshold),\n \"--min-scene-len\",\n String(minSceneLenS),\n \"list-scenes\",\n \"--quiet\",\n ],\n { encoding: \"utf-8\", maxBuffer: 32 * 1024 * 1024, timeout: timeoutMs },\n );\n const csvName = (await readdir(outDir)).find((f) => f.toLowerCase().endsWith(\".csv\"));\n if (!csvName) return [];\n return parsePySceneDetectCsvCuts(await readFile(join(outDir, csvName), \"utf-8\"));\n } finally {\n await rm(outDir, { recursive: true, force: true });\n }\n}\n\nexport async function detectSceneCutsPySceneDetect(\n filePath: string,\n opts: { threshold?: number; minSceneLenS?: number; timeout_ms?: number } = {},\n): Promise<number[]> {\n // An operator-pinned threshold disables the adaptive re-check (they know best).\n const pinned = opts.threshold !== undefined;\n const threshold = opts.threshold ?? PYSCENEDETECT_THRESHOLD;\n // Minimum scene length (seconds). PySceneDetect's default (~0.6s) MERGES cuts closer\n // than that, silently dropping super-fast montage flashes. We floor it at the backend's\n // own minimum scene duration so genuine sub-second flashes survive as their own scenes\n // (then become cheap still-holds downstream). A float string is parsed as seconds.\n const minSceneLenS = opts.minSceneLenS ?? PYSCENEDETECT_MIN_SCENE_LEN_S;\n const timeoutMs = opts.timeout_ms ?? 120_000;\n const cuts = await runSceneDetectOnce(filePath, threshold, minSceneLenS, timeoutMs);\n // Adaptive guard: if the first pass shredded a continuous shot into many micro-cuts,\n // re-run at PySceneDetect's own (higher) default and trust THAT — real montage cuts\n // survive it, motion artifacts don't. Only when the operator didn't pin a threshold.\n if (!pinned && isLikelyOverSegmented(cuts)) {\n const rechecked = await runSceneDetectOnce(\n filePath,\n PYSCENEDETECT_RECHECK_THRESHOLD,\n PYSCENEDETECT_RECHECK_MIN_SCENE_LEN_S,\n timeoutMs,\n );\n // Merge instead of replace: the re-check drops the motion shred, but the low pass\n // also caught real SOFT transitions invisible at 27 — keep its isolated extras.\n return mergeRecheckCuts(cuts, rechecked);\n }\n return cuts;\n}\n","import { appendFile, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/**\n * Which of `entries` are not already ignored by `existing` .gitignore content.\n * Matches a whole non-comment line (trimmed, optional trailing slash) so `canvas`\n * and `canvas/` both count as present. Pure — unit-tested without the filesystem.\n */\nexport function missingGitignoreEntries(existing: string, entries: string[]): string[] {\n const present = new Set(\n existing\n .split(\"\\n\")\n .map((l) => l.trim().replace(/\\/+$/, \"\"))\n .filter((l) => l.length > 0 && !l.startsWith(\"#\")),\n );\n return entries.filter((e) => !present.has(e.trim().replace(/\\/+$/, \"\")));\n}\n\n/**\n * Append any missing `entries` to `<dir>/.gitignore`. The canvas engine writes a\n * content-addressed cache + per-run dirs under `canvas/`, and the scaffold writes\n * working files under `.context/` — committing either would bloat the repo. Only\n * touches an EXISTING .gitignore (never creates surprise files); best-effort.\n */\nexport async function ensureGitignore(dir: string, entries: string[]): Promise<void> {\n const file = path.join(dir, \".gitignore\");\n let existing: string;\n try {\n existing = await readFile(file, \"utf8\");\n } catch {\n return; // no .gitignore here — don't conjure one\n }\n const missing = missingGitignoreEntries(existing, entries);\n if (missing.length === 0) return;\n const prefix = existing.endsWith(\"\\n\") || existing.length === 0 ? \"\" : \"\\n\";\n await appendFile(file, `${prefix}\\n# Baker canvas (engine cache + scaffold working files)\\n${missing.join(\"\\n\")}\\n`);\n}\n"],"mappings":"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","names":["readFile","rm","tmpdir","path","readFile","path","tmpdir","readFile","rm"]}
@@ -1,64 +0,0 @@
1
- import {
2
- reportError,
3
- reportInvalid
4
- } from "./chunk-QTLIXCVN.js";
5
- import {
6
- testimonialSourceRefreshIntervalSchema,
7
- testimonialSourcesScheduleRequestSchema
8
- } from "./chunk-HVJJEQDQ.js";
9
- import "./chunk-QV6AST5T.js";
10
- import "./chunk-WCU362Z6.js";
11
- import "./chunk-GIWHHCD6.js";
12
- import "./chunk-SOPVIIUW.js";
13
- import "./chunk-G4FG5EQO.js";
14
- import "./chunk-NSBNIPIW.js";
15
- import "./chunk-46YLDIQG.js";
16
- import {
17
- apiPost
18
- } from "./chunk-CIW3Q7B2.js";
19
- import "./chunk-O7AMKMII.js";
20
- import "./chunk-VPF5A7CM.js";
21
- import {
22
- registerSchema,
23
- writeJson
24
- } from "./chunk-HZPTQRX6.js";
25
- import "./chunk-YQSBHWOI.js";
26
-
27
- // src/commands/testimonials/sources/schedule.ts
28
- import { defineCommand } from "citty";
29
- var INTERVALS = testimonialSourceRefreshIntervalSchema.options.join("|");
30
- registerSchema({
31
- command: "testimonials.sources.schedule",
32
- description: "Set how often a review source imports its new reviews on its own.",
33
- args: {
34
- id: { type: "string", description: "Source id from `testimonials sources list`", required: true },
35
- every: { type: "string", description: `Auto-sync cadence: ${INTERVALS}`, required: true }
36
- }
37
- });
38
- var scheduleCommand = defineCommand({
39
- meta: {
40
- name: "schedule",
41
- description: "Set a review source's auto-sync cadence.\n\nExample: baker testimonials sources schedule <source-id> --every monthly"
42
- },
43
- args: {
44
- id: { type: "positional", description: "Source id from `testimonials sources list`", required: true },
45
- every: { type: "string", description: INTERVALS, required: true }
46
- },
47
- run: async ({ args }) => {
48
- const parsed = testimonialSourcesScheduleRequestSchema.safeParse({
49
- id: String(args.id ?? ""),
50
- every: String(args.every ?? "").toLowerCase()
51
- });
52
- if (!parsed.success) reportInvalid(parsed.error.issues[0]);
53
- try {
54
- const data = await apiPost("/api/testimonials/sources/schedule", parsed.data);
55
- writeJson({ ok: true, data: { id: data.id, autoSync: parsed.data.every } });
56
- } catch (err) {
57
- reportError(err);
58
- }
59
- }
60
- });
61
- export {
62
- scheduleCommand
63
- };
64
- //# sourceMappingURL=schedule-TMTLYULK.js.map
@@ -1,55 +0,0 @@
1
- import "./chunk-YQSBHWOI.js";
2
-
3
- // src/commands/scheduled-agents/index.ts
4
- import { defineCommand } from "citty";
5
- var scheduledAgentsCommand = defineCommand({
6
- meta: {
7
- name: "scheduled-agents",
8
- description: `Manage Scheduled agents. Subcommands: list, get, history, triggers, targets, create, update, delete, unstage, run.
9
-
10
- A scheduled agent is a **trigger** and a **prompt**, and nothing else. The trigger is the whole of the "when" \u2014 a time, a cadence, a call-in from another tool, an event arriving, a Form being submitted, an A/B test finishing, a Task closing. The prompt is the whole of the "what": when the trigger fires, a Session opens with that prompt and does the job. There is no Task in between.
11
-
12
- Keep the prompt short: the outcome, the exact \`baker\` commands (or tools) to run with their flags, and what to report. A few lines, not an essay \u2014 the run already knows how to work.
13
-
14
- Start with \`triggers\`: a time of day is only the most obvious way to start one, and most of what a marketer actually wants is a reaction to something. Then \`targets\` to point it at one thing \u2014 this Task, that agent's publish, one competitor \u2014 rather than every one.
15
-
16
- Drafts: create/update/delete stage changes on BAKER_CHAT_ID and apply when the chat is published; \`unstage\` takes one back before then. \`run\` fires a published item immediately. \`get\` on a published item says who its runs act as and which tools they load (runsAs). \`history\` lists every time it was triggered \u2014 the runs, and the firings that did not run and why.
17
-
18
- For a condition no field rule can express ("only leads from real companies"), add \`--ai-check "<condition in plain words>"\`: AI judges what arrived against it, after the --when rules.
19
-
20
- Publishing every run's work unreviewed is the user's switch, on the item \u2014 not a flag. Ask them to turn it on after this chat is published.
21
-
22
- Examples:
23
- baker scheduled-agents triggers
24
- baker scheduled-agents targets --trigger task.claimed --field taskId
25
- baker scheduled-agents list
26
- baker scheduled-agents get <id-or-temp_agent_id>
27
- baker scheduled-agents history <id> --only skipped --full
28
- baker scheduled-agents create --name "Weekly search check" --description "..." --prompt "Run \`baker gsc query --preset top-queries --days 28\`. Report the five queries that lost the most clicks and the page each ranks with." --cron "0 9 * * MON"
29
- baker scheduled-agents create --name "Chase a new lead" --description "..." --prompt "..." --trigger form.submitted --form quote
30
- baker scheduled-agents create --name "Chase company leads" --description "..." --prompt "..." --trigger form.submitted --form demo --ai-check "the person writes on behalf of a company, not as a student or for personal use"
31
- baker scheduled-agents create --name "Welcome the first signup" --description "..." --prompt "..." --trigger event.received --event signup --occurrences 1
32
- baker scheduled-agents create --name "Check the SEO agent's work" --description "..." --prompt "..." --trigger session.published --agent <id>
33
- baker scheduled-agents update <id-or-temp_agent_id> --enabled false
34
- baker scheduled-agents delete <id-or-temp_agent_id>
35
- baker scheduled-agents unstage <id-or-temp_agent_id> [--index <n>]
36
- baker scheduled-agents run <id>
37
- Full guide: __tooling__/docs/tools/baker/scheduled-agents.md`
38
- },
39
- subCommands: {
40
- list: () => import("./list-2DKLO6AO.js").then((m) => m.listCommand),
41
- get: () => import("./get-N7X75ZJO.js").then((m) => m.getCommand),
42
- history: () => import("./history-VJ254UXF.js").then((m) => m.historyCommand),
43
- triggers: () => import("./triggers-JKXISN45.js").then((m) => m.triggersCommand),
44
- targets: () => import("./targets-7AQMSO6H.js").then((m) => m.targetsCommand),
45
- create: () => import("./create-QVY6DSYM.js").then((m) => m.createCommand),
46
- update: () => import("./update-23Q4T2J5.js").then((m) => m.updateCommand),
47
- delete: () => import("./delete-CO2YBPTI.js").then((m) => m.deleteCommand),
48
- unstage: () => import("./unstage-ZYT5RNLK.js").then((m) => m.unstageCommand),
49
- run: () => import("./run-TA6HYFKZ.js").then((m) => m.runCommand)
50
- }
51
- });
52
- export {
53
- scheduledAgentsCommand
54
- };
55
- //# sourceMappingURL=scheduled-agents-TS3WLRCM.js.map
@@ -1,135 +0,0 @@
1
- import {
2
- describeSlots
3
- } from "./chunk-FJDSL4O5.js";
4
- import "./chunk-YO54MA7R.js";
5
- import {
6
- FLOW_CATALOG,
7
- FLOW_FORM_FIELD_TYPES,
8
- flowCatalogEntry,
9
- flowCatalogTypes,
10
- flowNodeTriggers
11
- } from "./chunk-HVJJEQDQ.js";
12
- import "./chunk-QV6AST5T.js";
13
- import "./chunk-WCU362Z6.js";
14
- import "./chunk-GIWHHCD6.js";
15
- import "./chunk-SOPVIIUW.js";
16
- import "./chunk-G4FG5EQO.js";
17
- import "./chunk-NSBNIPIW.js";
18
- import "./chunk-46YLDIQG.js";
19
- import "./chunk-CIW3Q7B2.js";
20
- import "./chunk-O7AMKMII.js";
21
- import "./chunk-VPF5A7CM.js";
22
- import {
23
- registerSchema,
24
- writeJson
25
- } from "./chunk-HZPTQRX6.js";
26
- import "./chunk-YQSBHWOI.js";
27
-
28
- // src/commands/flows/schema.ts
29
- import { defineCommand } from "citty";
30
- registerSchema({
31
- command: "flows.schema",
32
- description: "The shape of one node or side-effect type: a pasteable skeleton, who fills each part, and the reference file with the craft. Start here before authoring anything in a form's _data.json.",
33
- args: {
34
- kind: { type: "positional", description: "node | side-effect. Omit to list both vocabularies.", required: false },
35
- type: { type: "positional", description: "The type, e.g. customForm or googleSpreadsheet", required: false }
36
- }
37
- });
38
- var KINDS = ["node", "side-effect"];
39
- function triggerReport(triggers) {
40
- return {
41
- fires: triggers.completion,
42
- available: triggers.available,
43
- ...triggers.why ? { why: triggers.why } : {}
44
- };
45
- }
46
- function triggerHints(triggers) {
47
- if (!triggers) return [];
48
- if (!triggers.completion) return [`No side effect can be added to this step as it stands: ${triggers.why}`];
49
- const others = triggers.available.filter((id) => id !== triggers.completion);
50
- return [
51
- `A side effect on this step carries \`triggerId: "${triggers.completion}"\`, and \`baker flows add-side-effect\` writes it for you. The trigger belongs to the STEP, not to the side-effect type: one that does not match is valid, ships, and never runs.` + (others.length > 0 ? ` Other moments this step raises: ${others.join(", ")}.` : "")
52
- ];
53
- }
54
- var schemaCommand = defineCommand({
55
- meta: {
56
- name: "schema",
57
- description: "Show a node or side-effect type's shape. Start here: baker flows schema node customForm \xB7 baker flows schema side-effect googleSpreadsheet \xB7 baker flows schema (lists both)"
58
- },
59
- args: {
60
- kind: { type: "positional", description: "node | side-effect", required: false },
61
- type: { type: "positional", description: "The type name", required: false }
62
- },
63
- run: ({ args }) => {
64
- const kind = args.kind ? String(args.kind) : void 0;
65
- const type = args.type ? String(args.type) : void 0;
66
- if (!kind) {
67
- writeJson({
68
- ok: true,
69
- data: {
70
- node: flowCatalogTypes("node"),
71
- "side-effect": flowCatalogTypes("side-effect"),
72
- formFieldTypes: FLOW_FORM_FIELD_TYPES
73
- },
74
- hints: [
75
- "baker flows schema node <type> \xB7 baker flows schema side-effect <type>",
76
- "`hubspot` is in both lists and they are different things: the node embeds a form on the page, the side effect fires a behavioural event.",
77
- "formFieldTypes are the `fieldtype` values INSIDE a customForm \u2014 a third vocabulary, not node types."
78
- ]
79
- });
80
- return;
81
- }
82
- if (!KINDS.includes(kind)) {
83
- writeJson({
84
- ok: false,
85
- error: { code: "VALIDATION_ERROR", message: `Unknown kind "${kind}".`, fix: `Expected: ${KINDS.join(" | ")}` }
86
- });
87
- process.exit(1);
88
- }
89
- if (!type) {
90
- writeJson({
91
- ok: true,
92
- data: { kind, types: flowCatalogTypes(kind) },
93
- hints: [`baker flows schema ${kind} <type>`]
94
- });
95
- return;
96
- }
97
- const entry = flowCatalogEntry(kind, type);
98
- if (!entry) {
99
- const alternate = FLOW_CATALOG.find((candidate) => candidate.type === type);
100
- writeJson({
101
- ok: false,
102
- error: {
103
- code: "NOT_FOUND",
104
- message: `No ${kind} type "${type}".`,
105
- fix: alternate ? `"${type}" is a ${alternate.kind} type, not a ${kind} type. Try: baker flows schema ${alternate.kind} ${type}` : `Known ${kind} types: ${flowCatalogTypes(kind).join(", ")}`
106
- }
107
- });
108
- process.exit(1);
109
- }
110
- const mappable = kind === "side-effect" ? describeSlots(type) : [];
111
- const triggers = kind === "node" ? flowNodeTriggers(entry.skeleton.nodeData) : null;
112
- writeJson({
113
- ok: true,
114
- data: {
115
- ...entry,
116
- ...mappable.length > 0 ? { mappable } : {},
117
- ...triggers ? { triggers: triggerReport(triggers) } : {}
118
- },
119
- hints: [
120
- `Full schema, gotchas and a worked example: ${entry.reference}`,
121
- ...triggerHints(triggers),
122
- ...mappable.length > 0 ? [
123
- `Mappable with \`baker flows map\`: ${mappable.map((slot) => slot.slot).join(", ")}. Run \`baker flows map <slug> --side-effect <id>\` with no --map to see the legal keys for one you already have.`
124
- ] : [],
125
- ...entry.owners ? [
126
- `You author everything except: ${Object.entries(entry.owners).filter(([, owner]) => owner !== "agent").map(([key, owner]) => `${key} (${owner})`).join(", ")}`
127
- ] : []
128
- ].filter(Boolean)
129
- });
130
- }
131
- });
132
- export {
133
- schemaCommand
134
- };
135
- //# sourceMappingURL=schema-6S5ZEPBS.js.map