@koda-sl/baker-cli 0.387.0 → 0.389.0-dev.8065ad8f0

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 (967) hide show
  1. package/README.md +1090 -211
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-CLOKMTTC.js +49 -0
  5. package/dist/account-CLOKMTTC.js.map +1 -0
  6. package/dist/account-V5Y2QHAK.js +79 -0
  7. package/dist/account-V5Y2QHAK.js.map +1 -0
  8. package/dist/account-XFK6VX2R.js +80 -0
  9. package/dist/account-XFK6VX2R.js.map +1 -0
  10. package/dist/account-reads-S5VXX2QU.js +218 -0
  11. package/dist/account-reads-S5VXX2QU.js.map +1 -0
  12. package/dist/account-writes-Y7EQXDXF.js +66 -0
  13. package/dist/account-writes-Y7EQXDXF.js.map +1 -0
  14. package/dist/accounts-7YD457YN.js +114 -0
  15. package/dist/accounts-7YD457YN.js.map +1 -0
  16. package/dist/accounts-BJ3X5JQT.js +115 -0
  17. package/dist/accounts-BJ3X5JQT.js.map +1 -0
  18. package/dist/accounts-LOJ4WLIX.js +77 -0
  19. package/dist/accounts-LOJ4WLIX.js.map +1 -0
  20. package/dist/accounts-RYBDLQ6H.js +75 -0
  21. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  22. package/dist/accounts-UO4XBWM2.js +611 -0
  23. package/dist/accounts-UO4XBWM2.js.map +1 -0
  24. package/dist/actions-3AW3R63U.js +55 -0
  25. package/dist/actions-3AW3R63U.js.map +1 -0
  26. package/dist/active-entities-R6GZIO6Z.js +103 -0
  27. package/dist/active-entities-R6GZIO6Z.js.map +1 -0
  28. package/dist/activities-ESBF3GFS.js +74 -0
  29. package/dist/activities-ESBF3GFS.js.map +1 -0
  30. package/dist/ad-group-writes-I225OYDZ.js +170 -0
  31. package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
  32. package/dist/ad-groups-O35MWNF6.js +68 -0
  33. package/dist/ad-groups-O35MWNF6.js.map +1 -0
  34. package/dist/ad-writes-SS5YZO5W.js +174 -0
  35. package/dist/ad-writes-SS5YZO5W.js.map +1 -0
  36. package/dist/add-43DUOVNR.js +104 -0
  37. package/dist/add-43DUOVNR.js.map +1 -0
  38. package/dist/add-IE5WDELB.js +302 -0
  39. package/dist/add-IE5WDELB.js.map +1 -0
  40. package/dist/add-QZHAWUBA.js +97 -0
  41. package/dist/add-QZHAWUBA.js.map +1 -0
  42. package/dist/add-TGQIVVXH.js +105 -0
  43. package/dist/add-TGQIVVXH.js.map +1 -0
  44. package/dist/add-accounts-6QYPOPR2.js +91 -0
  45. package/dist/add-accounts-6QYPOPR2.js.map +1 -0
  46. package/dist/ads-AUSRB4GU.js +128 -0
  47. package/dist/ads-AUSRB4GU.js.map +1 -0
  48. package/dist/ads-COYOTEKE.js +77 -0
  49. package/dist/ads-COYOTEKE.js.map +1 -0
  50. package/dist/ads-MALHYD2D.js +40 -0
  51. package/dist/ads-MALHYD2D.js.map +1 -0
  52. package/dist/ads-XZCMSPM5.js +113 -0
  53. package/dist/ads-XZCMSPM5.js.map +1 -0
  54. package/dist/adsets-AKR75THA.js +176 -0
  55. package/dist/adsets-AKR75THA.js.map +1 -0
  56. package/dist/advertisers-52FMMBTQ.js +120 -0
  57. package/dist/advertisers-52FMMBTQ.js.map +1 -0
  58. package/dist/advertisers-BCGKUMEH.js +125 -0
  59. package/dist/advertisers-BCGKUMEH.js.map +1 -0
  60. package/dist/analytics-JPDBKETM.js +1980 -0
  61. package/dist/analytics-JPDBKETM.js.map +1 -0
  62. package/dist/analytics-YVQ6H4BG.js +433 -0
  63. package/dist/analytics-YVQ6H4BG.js.map +1 -0
  64. package/dist/animate-JXIT77Y5.js +480 -0
  65. package/dist/animate-JXIT77Y5.js.map +1 -0
  66. package/dist/assign-66NTWTR2.js +77 -0
  67. package/dist/assign-66NTWTR2.js.map +1 -0
  68. package/dist/audience-size-LVQJWQAS.js +94 -0
  69. package/dist/audience-size-LVQJWQAS.js.map +1 -0
  70. package/dist/audiences-DC3IOG34.js +85 -0
  71. package/dist/audiences-DC3IOG34.js.map +1 -0
  72. package/dist/audiences-NEW3LLQR.js +268 -0
  73. package/dist/audiences-NEW3LLQR.js.map +1 -0
  74. package/dist/audiences-NYGMBGQ3.js +79 -0
  75. package/dist/audiences-NYGMBGQ3.js.map +1 -0
  76. package/dist/audit-UIPMTI5C.js +88 -0
  77. package/dist/audit-UIPMTI5C.js.map +1 -0
  78. package/dist/audit-XGN2OFLN.js +151 -0
  79. package/dist/audit-XGN2OFLN.js.map +1 -0
  80. package/dist/autocomplete-LVPDV3JE.js +111 -0
  81. package/dist/autocomplete-LVPDV3JE.js.map +1 -0
  82. package/dist/avatars-S6NSLMJK.js +38 -0
  83. package/dist/avatars-S6NSLMJK.js.map +1 -0
  84. package/dist/bid-pricing-2LYULXU2.js +99 -0
  85. package/dist/bid-pricing-2LYULXU2.js.map +1 -0
  86. package/dist/brand-WWHUZ72R.js +22 -0
  87. package/dist/brand-WWHUZ72R.js.map +1 -0
  88. package/dist/brief-XY3TFWBC.js +492 -0
  89. package/dist/brief-XY3TFWBC.js.map +1 -0
  90. package/dist/businesses-J7OP7MSK.js +53 -0
  91. package/dist/businesses-J7OP7MSK.js.map +1 -0
  92. package/dist/campaign-groups-N4TZ2F3L.js +95 -0
  93. package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
  94. package/dist/campaign-writes-5XA727KI.js +170 -0
  95. package/dist/campaign-writes-5XA727KI.js.map +1 -0
  96. package/dist/campaign-writes-7YFRQIQT.js +165 -0
  97. package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
  98. package/dist/campaigns-JPYNVFQI.js +76 -0
  99. package/dist/campaigns-JPYNVFQI.js.map +1 -0
  100. package/dist/campaigns-L43ZUKAI.js +107 -0
  101. package/dist/campaigns-L43ZUKAI.js.map +1 -0
  102. package/dist/campaigns-OD7Z332M.js +109 -0
  103. package/dist/campaigns-OD7Z332M.js.map +1 -0
  104. package/dist/campaigns-R4DXIR2Q.js +110 -0
  105. package/dist/campaigns-R4DXIR2Q.js.map +1 -0
  106. package/dist/canvas-J7SLIVL7.js +46 -0
  107. package/dist/canvas-J7SLIVL7.js.map +1 -0
  108. package/dist/capabilities-FVTZAFPV.js +144 -0
  109. package/dist/capabilities-FVTZAFPV.js.map +1 -0
  110. package/dist/cards-7H32TNMO.js +85 -0
  111. package/dist/cards-7H32TNMO.js.map +1 -0
  112. package/dist/catalog-OTICZPJA.js +64 -0
  113. package/dist/catalog-OTICZPJA.js.map +1 -0
  114. package/dist/catalogs-ABCQLCDU.js +128 -0
  115. package/dist/catalogs-ABCQLCDU.js.map +1 -0
  116. package/dist/changes-7ZIGNUW6.js +135 -0
  117. package/dist/changes-7ZIGNUW6.js.map +1 -0
  118. package/dist/chatgpt-B3NHRJUE.js +47 -0
  119. package/dist/chatgpt-B3NHRJUE.js.map +1 -0
  120. package/dist/chats-E7DBRHBF.js +262 -0
  121. package/dist/chats-E7DBRHBF.js.map +1 -0
  122. package/dist/chunk-2CV7LX23.js +474 -0
  123. package/dist/chunk-2CV7LX23.js.map +1 -0
  124. package/dist/chunk-2HCI5BXB.js +479 -0
  125. package/dist/chunk-2HCI5BXB.js.map +1 -0
  126. package/dist/chunk-2SQJL7ZN.js +56 -0
  127. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  128. package/dist/chunk-2Y5V23PU.js +29 -0
  129. package/dist/chunk-2Y5V23PU.js.map +1 -0
  130. package/dist/chunk-32CPGJPL.js +149 -0
  131. package/dist/chunk-32CPGJPL.js.map +1 -0
  132. package/dist/chunk-3ACMDRSE.js +39 -0
  133. package/dist/chunk-3ACMDRSE.js.map +1 -0
  134. package/dist/chunk-3CIXGQJS.js +150 -0
  135. package/dist/chunk-3CIXGQJS.js.map +1 -0
  136. package/dist/chunk-3U7TDBIB.js +275 -0
  137. package/dist/chunk-3U7TDBIB.js.map +1 -0
  138. package/dist/chunk-3UDSYYND.js +42 -0
  139. package/dist/chunk-3UDSYYND.js.map +1 -0
  140. package/dist/chunk-3ZWWXAQZ.js +150 -0
  141. package/dist/chunk-3ZWWXAQZ.js.map +1 -0
  142. package/dist/chunk-4MH6LONO.js +274 -0
  143. package/dist/chunk-4MH6LONO.js.map +1 -0
  144. package/dist/chunk-4NZ47VXO.js +137 -0
  145. package/dist/chunk-4NZ47VXO.js.map +1 -0
  146. package/dist/chunk-564AEU2Q.js +541 -0
  147. package/dist/chunk-564AEU2Q.js.map +1 -0
  148. package/dist/chunk-5HYSKH77.js +315 -0
  149. package/dist/chunk-5HYSKH77.js.map +1 -0
  150. package/dist/chunk-5MBPIONY.js +29 -0
  151. package/dist/chunk-5MBPIONY.js.map +1 -0
  152. package/dist/chunk-5OVOLYY3.js +74 -0
  153. package/dist/chunk-5OVOLYY3.js.map +1 -0
  154. package/dist/chunk-66USKCVY.js +4410 -0
  155. package/dist/chunk-66USKCVY.js.map +1 -0
  156. package/dist/chunk-6I7SYEYN.js +166 -0
  157. package/dist/chunk-6I7SYEYN.js.map +1 -0
  158. package/dist/chunk-6O7ISBC7.js +65 -0
  159. package/dist/chunk-6O7ISBC7.js.map +1 -0
  160. package/dist/chunk-752S7JF6.js +35 -0
  161. package/dist/chunk-752S7JF6.js.map +1 -0
  162. package/dist/chunk-77DN7R35.js +228 -0
  163. package/dist/chunk-77DN7R35.js.map +1 -0
  164. package/dist/chunk-7F7MFMLI.js +175 -0
  165. package/dist/chunk-7F7MFMLI.js.map +1 -0
  166. package/dist/chunk-7THBBTJJ.js +183 -0
  167. package/dist/chunk-7THBBTJJ.js.map +1 -0
  168. package/dist/chunk-7XU3HKMX.js +1599 -0
  169. package/dist/chunk-7XU3HKMX.js.map +1 -0
  170. package/dist/chunk-A2CBZLQ6.js +111 -0
  171. package/dist/chunk-A2CBZLQ6.js.map +1 -0
  172. package/dist/chunk-AFJGYJ7Z.js +45 -0
  173. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  174. package/dist/chunk-AR7PU7BB.js +76 -0
  175. package/dist/chunk-AR7PU7BB.js.map +1 -0
  176. package/dist/chunk-ASL7JFBD.js +96 -0
  177. package/dist/chunk-ASL7JFBD.js.map +1 -0
  178. package/dist/chunk-AUSKKFVH.js +84 -0
  179. package/dist/chunk-AUSKKFVH.js.map +1 -0
  180. package/dist/chunk-B52DCYL2.js +159 -0
  181. package/dist/chunk-B52DCYL2.js.map +1 -0
  182. package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
  183. package/dist/chunk-BVM5IRZW.js.map +1 -0
  184. package/dist/chunk-CAMX6OHF.js +3182 -0
  185. package/dist/chunk-CAMX6OHF.js.map +1 -0
  186. package/dist/chunk-CYBLKMXQ.js +310 -0
  187. package/dist/chunk-CYBLKMXQ.js.map +1 -0
  188. package/dist/chunk-CZENWCBS.js +333 -0
  189. package/dist/chunk-CZENWCBS.js.map +1 -0
  190. package/dist/chunk-D5FY4FAK.js +24 -0
  191. package/dist/chunk-D5FY4FAK.js.map +1 -0
  192. package/dist/chunk-DGCUPJZD.js +39 -0
  193. package/dist/chunk-DGCUPJZD.js.map +1 -0
  194. package/dist/chunk-DNCLWSHO.js +41 -0
  195. package/dist/chunk-DNCLWSHO.js.map +1 -0
  196. package/dist/chunk-DX4GIDO7.js +296 -0
  197. package/dist/chunk-DX4GIDO7.js.map +1 -0
  198. package/dist/chunk-EDLZGTGN.js +216 -0
  199. package/dist/chunk-EDLZGTGN.js.map +1 -0
  200. package/dist/chunk-EDNKALM6.js +304 -0
  201. package/dist/chunk-EDNKALM6.js.map +1 -0
  202. package/dist/chunk-EDNX3AOS.js +76 -0
  203. package/dist/chunk-EDNX3AOS.js.map +1 -0
  204. package/dist/chunk-EF5DP6EB.js +52 -0
  205. package/dist/chunk-EF5DP6EB.js.map +1 -0
  206. package/dist/chunk-ERSX3MKH.js +34 -0
  207. package/dist/chunk-ERSX3MKH.js.map +1 -0
  208. package/dist/chunk-F3IJSR7O.js +346 -0
  209. package/dist/chunk-F3IJSR7O.js.map +1 -0
  210. package/dist/chunk-FKOECEVC.js +126 -0
  211. package/dist/chunk-FKOECEVC.js.map +1 -0
  212. package/dist/chunk-FWT55B3O.js +509 -0
  213. package/dist/chunk-FWT55B3O.js.map +1 -0
  214. package/dist/chunk-FYWWTMXP.js +2902 -0
  215. package/dist/chunk-FYWWTMXP.js.map +1 -0
  216. package/dist/chunk-FZGCAW46.js +64 -0
  217. package/dist/chunk-FZGCAW46.js.map +1 -0
  218. package/dist/chunk-G7AFVTUS.js +106 -0
  219. package/dist/chunk-G7AFVTUS.js.map +1 -0
  220. package/dist/chunk-GIW7ABMM.js +74 -0
  221. package/dist/chunk-GIW7ABMM.js.map +1 -0
  222. package/dist/chunk-GIWHHCD6.js +145 -0
  223. package/dist/chunk-GIWHHCD6.js.map +1 -0
  224. package/dist/chunk-GRQ2AXDX.js +9 -0
  225. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  226. package/dist/chunk-GXDLWBOY.js +73 -0
  227. package/dist/chunk-GXDLWBOY.js.map +1 -0
  228. package/dist/chunk-GYABNLWW.js +629 -0
  229. package/dist/chunk-GYABNLWW.js.map +1 -0
  230. package/dist/chunk-H7MLHG2I.js +94 -0
  231. package/dist/chunk-H7MLHG2I.js.map +1 -0
  232. package/dist/chunk-H7XVKLIY.js +206 -0
  233. package/dist/chunk-H7XVKLIY.js.map +1 -0
  234. package/dist/chunk-HAE4WWFQ.js +455 -0
  235. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  236. package/dist/chunk-HDHWIEJJ.js +136 -0
  237. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  238. package/dist/chunk-HJTIBTF7.js +98 -0
  239. package/dist/chunk-HJTIBTF7.js.map +1 -0
  240. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  241. package/dist/chunk-HLXWKMTK.js.map +1 -0
  242. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  243. package/dist/chunk-HREWXNTO.js.map +1 -0
  244. package/dist/chunk-HYXKRNRV.js +176 -0
  245. package/dist/chunk-HYXKRNRV.js.map +1 -0
  246. package/dist/chunk-I3DIZWN5.js +97 -0
  247. package/dist/chunk-I3DIZWN5.js.map +1 -0
  248. package/dist/chunk-IJMWEO4P.js +57 -0
  249. package/dist/chunk-IJMWEO4P.js.map +1 -0
  250. package/dist/chunk-IOCSDFF2.js +23992 -0
  251. package/dist/chunk-IOCSDFF2.js.map +1 -0
  252. package/dist/chunk-IVIJJXXT.js +62 -0
  253. package/dist/chunk-IVIJJXXT.js.map +1 -0
  254. package/dist/chunk-J57GWTPK.js +106 -0
  255. package/dist/chunk-J57GWTPK.js.map +1 -0
  256. package/dist/chunk-JPK34QPS.js +134 -0
  257. package/dist/chunk-JPK34QPS.js.map +1 -0
  258. package/dist/chunk-JRCFCIE3.js +188 -0
  259. package/dist/chunk-JRCFCIE3.js.map +1 -0
  260. package/dist/chunk-JUAIGJ2A.js +76 -0
  261. package/dist/chunk-JUAIGJ2A.js.map +1 -0
  262. package/dist/chunk-K5OQES4V.js +58 -0
  263. package/dist/chunk-K5OQES4V.js.map +1 -0
  264. package/dist/chunk-KBS5GH4T.js +1626 -0
  265. package/dist/chunk-KBS5GH4T.js.map +1 -0
  266. package/dist/chunk-KIGGMKAE.js +66 -0
  267. package/dist/chunk-KIGGMKAE.js.map +1 -0
  268. package/dist/chunk-KKJ4KJCW.js +29 -0
  269. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  270. package/dist/chunk-KLK6KQLQ.js +55 -0
  271. package/dist/chunk-KLK6KQLQ.js.map +1 -0
  272. package/dist/chunk-KXGG6EQM.js +382 -0
  273. package/dist/chunk-KXGG6EQM.js.map +1 -0
  274. package/dist/chunk-KXRKPZZY.js +169 -0
  275. package/dist/chunk-KXRKPZZY.js.map +1 -0
  276. package/dist/chunk-KZUHRZ2C.js +5187 -0
  277. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  278. package/dist/chunk-L45A3IYV.js +1079 -0
  279. package/dist/chunk-L45A3IYV.js.map +1 -0
  280. package/dist/chunk-LA6PPSNA.js +65 -0
  281. package/dist/chunk-LA6PPSNA.js.map +1 -0
  282. package/dist/chunk-LEIQAHWF.js +25 -0
  283. package/dist/chunk-LEIQAHWF.js.map +1 -0
  284. package/dist/chunk-LERWCRY5.js +297 -0
  285. package/dist/chunk-LERWCRY5.js.map +1 -0
  286. package/dist/chunk-LLPFY3NI.js +207 -0
  287. package/dist/chunk-LLPFY3NI.js.map +1 -0
  288. package/dist/chunk-M6UNISGO.js +66 -0
  289. package/dist/chunk-M6UNISGO.js.map +1 -0
  290. package/dist/chunk-MDATIJPM.js +92 -0
  291. package/dist/chunk-MDATIJPM.js.map +1 -0
  292. package/dist/chunk-MGKHFGLV.js +75 -0
  293. package/dist/chunk-MGKHFGLV.js.map +1 -0
  294. package/dist/chunk-MZWC6HHA.js +455 -0
  295. package/dist/chunk-MZWC6HHA.js.map +1 -0
  296. package/dist/chunk-N3XJ434P.js +197 -0
  297. package/dist/chunk-N3XJ434P.js.map +1 -0
  298. package/dist/chunk-NFSLRRIE.js +77 -0
  299. package/dist/chunk-NFSLRRIE.js.map +1 -0
  300. package/dist/chunk-NHU33T2S.js +60 -0
  301. package/dist/chunk-NHU33T2S.js.map +1 -0
  302. package/dist/chunk-NJEZM4OB.js +51 -0
  303. package/dist/chunk-NJEZM4OB.js.map +1 -0
  304. package/dist/chunk-O6QKCJE4.js +455 -0
  305. package/dist/chunk-O6QKCJE4.js.map +1 -0
  306. package/dist/chunk-OFFAMC5H.js +225 -0
  307. package/dist/chunk-OFFAMC5H.js.map +1 -0
  308. package/dist/chunk-OHGTCFFE.js +57 -0
  309. package/dist/chunk-OHGTCFFE.js.map +1 -0
  310. package/dist/chunk-P4NSJS54.js +20 -0
  311. package/dist/chunk-P4NSJS54.js.map +1 -0
  312. package/dist/chunk-P5T7OZKV.js +26 -0
  313. package/dist/chunk-P5T7OZKV.js.map +1 -0
  314. package/dist/chunk-PFBQERWX.js +10 -0
  315. package/dist/chunk-PFBQERWX.js.map +1 -0
  316. package/dist/chunk-PUPEGICD.js +103 -0
  317. package/dist/chunk-PUPEGICD.js.map +1 -0
  318. package/dist/chunk-Q6ULQMWG.js +41 -0
  319. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  320. package/dist/chunk-QO23YHLK.js +84 -0
  321. package/dist/chunk-QO23YHLK.js.map +1 -0
  322. package/dist/chunk-QSGIWV4P.js +337 -0
  323. package/dist/chunk-QSGIWV4P.js.map +1 -0
  324. package/dist/chunk-R4Y5P3PB.js +19 -0
  325. package/dist/chunk-R4Y5P3PB.js.map +1 -0
  326. package/dist/chunk-R5OQM7FF.js +179 -0
  327. package/dist/chunk-R5OQM7FF.js.map +1 -0
  328. package/dist/chunk-RODLBWIR.js +592 -0
  329. package/dist/chunk-RODLBWIR.js.map +1 -0
  330. package/dist/chunk-RY7TYEIX.js +504 -0
  331. package/dist/chunk-RY7TYEIX.js.map +1 -0
  332. package/dist/chunk-S4LZ7KTG.js +160 -0
  333. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  334. package/dist/chunk-SHTESUB6.js +1442 -0
  335. package/dist/chunk-SHTESUB6.js.map +1 -0
  336. package/dist/chunk-SJH4EOZH.js +23 -0
  337. package/dist/chunk-SJH4EOZH.js.map +1 -0
  338. package/dist/chunk-SMIENBNX.js +6212 -0
  339. package/dist/chunk-SMIENBNX.js.map +1 -0
  340. package/dist/chunk-T7GT22KA.js +494 -0
  341. package/dist/chunk-T7GT22KA.js.map +1 -0
  342. package/dist/chunk-T7M4WFNV.js +172 -0
  343. package/dist/chunk-T7M4WFNV.js.map +1 -0
  344. package/dist/chunk-TIFVHGQL.js +6683 -0
  345. package/dist/chunk-TIFVHGQL.js.map +1 -0
  346. package/dist/chunk-TMIDUSOR.js +665 -0
  347. package/dist/chunk-TMIDUSOR.js.map +1 -0
  348. package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
  349. package/dist/chunk-U6VRBDNQ.js +1830 -0
  350. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  351. package/dist/chunk-U7BBXM67.js +1743 -0
  352. package/dist/chunk-U7BBXM67.js.map +1 -0
  353. package/dist/chunk-UI6BKYQD.js +225 -0
  354. package/dist/chunk-UI6BKYQD.js.map +1 -0
  355. package/dist/chunk-UOI5S62H.js +846 -0
  356. package/dist/chunk-UOI5S62H.js.map +1 -0
  357. package/dist/chunk-USL5ARRE.js +26 -0
  358. package/dist/chunk-USL5ARRE.js.map +1 -0
  359. package/dist/chunk-UYC45JNS.js +139 -0
  360. package/dist/chunk-UYC45JNS.js.map +1 -0
  361. package/dist/chunk-VNKVBY54.js +363 -0
  362. package/dist/chunk-VNKVBY54.js.map +1 -0
  363. package/dist/chunk-VS4C7VAR.js +533 -0
  364. package/dist/chunk-VS4C7VAR.js.map +1 -0
  365. package/dist/chunk-VZMDYVNS.js +3151 -0
  366. package/dist/chunk-VZMDYVNS.js.map +1 -0
  367. package/dist/chunk-W4W4ZRBP.js +191 -0
  368. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  369. package/dist/chunk-WN4KX7GE.js +25 -0
  370. package/dist/chunk-WN4KX7GE.js.map +1 -0
  371. package/dist/chunk-WNFTXSGR.js +111 -0
  372. package/dist/chunk-WNFTXSGR.js.map +1 -0
  373. package/dist/chunk-WOTDHRNF.js +2109 -0
  374. package/dist/chunk-WOTDHRNF.js.map +1 -0
  375. package/dist/chunk-XGWKTYXQ.js +67 -0
  376. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  377. package/dist/chunk-XIGIJJSF.js +66 -0
  378. package/dist/chunk-XIGIJJSF.js.map +1 -0
  379. package/dist/chunk-XNUXB63I.js +817 -0
  380. package/dist/chunk-XNUXB63I.js.map +1 -0
  381. package/dist/chunk-XQ3CCNJD.js +610 -0
  382. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  383. package/dist/chunk-XX6ZMCY5.js +4227 -0
  384. package/dist/chunk-XX6ZMCY5.js.map +1 -0
  385. package/dist/chunk-Y362QH54.js +98 -0
  386. package/dist/chunk-Y362QH54.js.map +1 -0
  387. package/dist/chunk-Y4T6ATDQ.js +74 -0
  388. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  389. package/dist/chunk-YQSBHWOI.js +41 -0
  390. package/dist/chunk-YU26SDNT.js +46 -0
  391. package/dist/chunk-YU26SDNT.js.map +1 -0
  392. package/dist/chunk-YULENNA7.js +501 -0
  393. package/dist/chunk-YULENNA7.js.map +1 -0
  394. package/dist/chunk-Z3ENMCFE.js +94 -0
  395. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  396. package/dist/chunk-ZH7ZM3ZM.js +125 -0
  397. package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
  398. package/dist/chunk-ZIXHS6AM.js +42 -0
  399. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  400. package/dist/chunk-ZLLJKSNS.js +96 -0
  401. package/dist/chunk-ZLLJKSNS.js.map +1 -0
  402. package/dist/claim-LF6VQ7OR.js +197 -0
  403. package/dist/claim-LF6VQ7OR.js.map +1 -0
  404. package/dist/cli.js +104 -70041
  405. package/dist/cli.js.map +1 -1
  406. package/dist/client-26SAJ46D.js +19 -0
  407. package/dist/code-MOWYJMDH.js +76 -0
  408. package/dist/code-MOWYJMDH.js.map +1 -0
  409. package/dist/companies-6HSK5BLK.js +195 -0
  410. package/dist/companies-6HSK5BLK.js.map +1 -0
  411. package/dist/complete-2PUAFQEC.js +81 -0
  412. package/dist/complete-2PUAFQEC.js.map +1 -0
  413. package/dist/config-X6GKOVQ6.js +88 -0
  414. package/dist/config-X6GKOVQ6.js.map +1 -0
  415. package/dist/connect-RXPMAJQI.js +42 -0
  416. package/dist/content-UYZC4AKN.js +85 -0
  417. package/dist/content-UYZC4AKN.js.map +1 -0
  418. package/dist/conversation-Y3NB2VDI.js +93 -0
  419. package/dist/conversation-Y3NB2VDI.js.map +1 -0
  420. package/dist/conversion-report-R4GJWWTK.js +125 -0
  421. package/dist/conversion-report-R4GJWWTK.js.map +1 -0
  422. package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
  423. package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
  424. package/dist/conversion-writes-WHFFUWWL.js +120 -0
  425. package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
  426. package/dist/conversions-K7C32DPW.js +135 -0
  427. package/dist/conversions-K7C32DPW.js.map +1 -0
  428. package/dist/conversions-OXJAX5GB.js +76 -0
  429. package/dist/conversions-OXJAX5GB.js.map +1 -0
  430. package/dist/countries-PBXNB3BR.js +82 -0
  431. package/dist/countries-PBXNB3BR.js.map +1 -0
  432. package/dist/create-AJ4KPSJ4.js +59 -0
  433. package/dist/create-AJ4KPSJ4.js.map +1 -0
  434. package/dist/create-ALKOAD5J.js +138 -0
  435. package/dist/create-ALKOAD5J.js.map +1 -0
  436. package/dist/create-HTKZMXKB.js +207 -0
  437. package/dist/create-HTKZMXKB.js.map +1 -0
  438. package/dist/create-TZMAOFBR.js +236 -0
  439. package/dist/create-TZMAOFBR.js.map +1 -0
  440. package/dist/creatives-MBTZTIAA.js +51 -0
  441. package/dist/creatives-MBTZTIAA.js.map +1 -0
  442. package/dist/creatives-OZHVU4WB.js +182 -0
  443. package/dist/creatives-OZHVU4WB.js.map +1 -0
  444. package/dist/creatives-VMGY5SU4.js +87 -0
  445. package/dist/creatives-VMGY5SU4.js.map +1 -0
  446. package/dist/credentials-FY4UH6TF.js +287 -0
  447. package/dist/credentials-FY4UH6TF.js.map +1 -0
  448. package/dist/critique-2UTP4DR3.js +216 -0
  449. package/dist/critique-2UTP4DR3.js.map +1 -0
  450. package/dist/critique-B3H7QFM2.js +1449 -0
  451. package/dist/critique-B3H7QFM2.js.map +1 -0
  452. package/dist/crm-2IBLUHDB.js +318 -0
  453. package/dist/crm-2IBLUHDB.js.map +1 -0
  454. package/dist/crm-YMYO4U53.js +224 -0
  455. package/dist/crm-YMYO4U53.js.map +1 -0
  456. package/dist/crop-U3AD4DDR.js +113 -0
  457. package/dist/crop-U3AD4DDR.js.map +1 -0
  458. package/dist/currency-S6KWZSZ6.js +88 -0
  459. package/dist/currency-S6KWZSZ6.js.map +1 -0
  460. package/dist/custom-conversions-FABS6YVT.js +125 -0
  461. package/dist/custom-conversions-FABS6YVT.js.map +1 -0
  462. package/dist/customers-P6LLLJHK.js +56 -0
  463. package/dist/decide-YTHCBKM6.js +199 -0
  464. package/dist/decide-YTHCBKM6.js.map +1 -0
  465. package/dist/delete-B2TDEW7H.js +63 -0
  466. package/dist/delete-B2TDEW7H.js.map +1 -0
  467. package/dist/delete-DZUDLYPC.js +69 -0
  468. package/dist/delete-DZUDLYPC.js.map +1 -0
  469. package/dist/delete-NZGZP4YP.js +71 -0
  470. package/dist/delete-NZGZP4YP.js.map +1 -0
  471. package/dist/delete-SDOZNDWQ.js +54 -0
  472. package/dist/delete-SDOZNDWQ.js.map +1 -0
  473. package/dist/delete-VQMU56OH.js +71 -0
  474. package/dist/delete-VQMU56OH.js.map +1 -0
  475. package/dist/delete-WKQPMVAM.js +66 -0
  476. package/dist/delete-WKQPMVAM.js.map +1 -0
  477. package/dist/demographics-Q3DCXULY.js +138 -0
  478. package/dist/demographics-Q3DCXULY.js.map +1 -0
  479. package/dist/describe-JNTCQZNL.js +97 -0
  480. package/dist/describe-JNTCQZNL.js.map +1 -0
  481. package/dist/describe-MT4334NG.js +97 -0
  482. package/dist/describe-MT4334NG.js.map +1 -0
  483. package/dist/dimensions-FEZUJRAG.js +101 -0
  484. package/dist/dimensions-FEZUJRAG.js.map +1 -0
  485. package/dist/discard-NEZM5CHF.js +66 -0
  486. package/dist/discard-NEZM5CHF.js.map +1 -0
  487. package/dist/discover-4GD7QSF5.js +93 -0
  488. package/dist/discover-4GD7QSF5.js.map +1 -0
  489. package/dist/discover-6K3IOYXR.js +172 -0
  490. package/dist/discover-6K3IOYXR.js.map +1 -0
  491. package/dist/domain-7Y256IDR.js +98 -0
  492. package/dist/domain-7Y256IDR.js.map +1 -0
  493. package/dist/download-L27HWEOE.js +299 -0
  494. package/dist/download-L27HWEOE.js.map +1 -0
  495. package/dist/draft-25G2P2TE.js +281 -0
  496. package/dist/draft-25G2P2TE.js.map +1 -0
  497. package/dist/draft-F6TUGXAY.js +307 -0
  498. package/dist/draft-F6TUGXAY.js.map +1 -0
  499. package/dist/draft-KLULNBWP.js +233 -0
  500. package/dist/draft-KLULNBWP.js.map +1 -0
  501. package/dist/draft-LY5ZPF73.js +217 -0
  502. package/dist/draft-LY5ZPF73.js.map +1 -0
  503. package/dist/draft-M4ZHDQ46.js +306 -0
  504. package/dist/draft-M4ZHDQ46.js.map +1 -0
  505. package/dist/draft-MI7RWY2K.js +100 -0
  506. package/dist/draft-MI7RWY2K.js.map +1 -0
  507. package/dist/draft-P4IVYTY3.js +103 -0
  508. package/dist/draft-P4IVYTY3.js.map +1 -0
  509. package/dist/draft-QQMCVDDS.js +328 -0
  510. package/dist/draft-QQMCVDDS.js.map +1 -0
  511. package/dist/engine/index.d.ts +213 -127
  512. package/dist/engine/index.js +18 -4
  513. package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
  514. package/dist/env-FBTHZKGN.js.map +1 -0
  515. package/dist/experiment-HDYTJPUY.js +1397 -0
  516. package/dist/experiment-HDYTJPUY.js.map +1 -0
  517. package/dist/export-TS5GYEMA.js +168 -0
  518. package/dist/export-TS5GYEMA.js.map +1 -0
  519. package/dist/extract-QVQFUOIK.js +113 -0
  520. package/dist/extract-QVQFUOIK.js.map +1 -0
  521. package/dist/facets-7MBSM7BP.js +114 -0
  522. package/dist/facets-7MBSM7BP.js.map +1 -0
  523. package/dist/favorites-7QP7BY5K.js +178 -0
  524. package/dist/favorites-7QP7BY5K.js.map +1 -0
  525. package/dist/feed-EETRO2FG.js +177 -0
  526. package/dist/feed-EETRO2FG.js.map +1 -0
  527. package/dist/feedback-PLMFRAQW.js +66 -0
  528. package/dist/feedback-PLMFRAQW.js.map +1 -0
  529. package/dist/feedback-record-QEHHGVYC.js +177 -0
  530. package/dist/feedback-record-QEHHGVYC.js.map +1 -0
  531. package/dist/fetch-QE3EB756.js +176 -0
  532. package/dist/fetch-QE3EB756.js.map +1 -0
  533. package/dist/fetch-Z7O3ZL4D.js +139 -0
  534. package/dist/fetch-Z7O3ZL4D.js.map +1 -0
  535. package/dist/find-KAQ6JDMO.js +134 -0
  536. package/dist/find-KAQ6JDMO.js.map +1 -0
  537. package/dist/fit-MY5GVZZZ.js +45 -0
  538. package/dist/fit-MY5GVZZZ.js.map +1 -0
  539. package/dist/flows-C67KEMDU.js +247 -0
  540. package/dist/flows-C67KEMDU.js.map +1 -0
  541. package/dist/follow-IX4XVK5Y.js +94 -0
  542. package/dist/follow-IX4XVK5Y.js.map +1 -0
  543. package/dist/follow-competitors-UZBUOYTH.js +112 -0
  544. package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
  545. package/dist/following-VGOIUCIZ.js +113 -0
  546. package/dist/following-VGOIUCIZ.js.map +1 -0
  547. package/dist/fonts-UR7XZ5XZ.js +34 -0
  548. package/dist/fonts-UR7XZ5XZ.js.map +1 -0
  549. package/dist/forecast-3F4SZNAK.js +104 -0
  550. package/dist/forecast-3F4SZNAK.js.map +1 -0
  551. package/dist/forecast-K5E7CTKX.js +168 -0
  552. package/dist/forecast-K5E7CTKX.js.map +1 -0
  553. package/dist/funding-H5YO37OW.js +85 -0
  554. package/dist/funding-H5YO37OW.js.map +1 -0
  555. package/dist/funnel-2PPEPAMY.js +394 -0
  556. package/dist/funnel-2PPEPAMY.js.map +1 -0
  557. package/dist/ga4-YHJ2XMLC.js +55 -0
  558. package/dist/ga4-YHJ2XMLC.js.map +1 -0
  559. package/dist/generate-M2ZX5DMI.js +262 -0
  560. package/dist/generate-M2ZX5DMI.js.map +1 -0
  561. package/dist/get-4EYKCZ6F.js +59 -0
  562. package/dist/get-4EYKCZ6F.js.map +1 -0
  563. package/dist/get-637GALM2.js +63 -0
  564. package/dist/get-637GALM2.js.map +1 -0
  565. package/dist/get-AZARFR6O.js +61 -0
  566. package/dist/get-AZARFR6O.js.map +1 -0
  567. package/dist/get-BPMEHRUG.js +56 -0
  568. package/dist/get-BPMEHRUG.js.map +1 -0
  569. package/dist/get-MQ6MMIZ7.js +78 -0
  570. package/dist/get-MQ6MMIZ7.js.map +1 -0
  571. package/dist/get-N4BPOQCB.js +63 -0
  572. package/dist/get-N4BPOQCB.js.map +1 -0
  573. package/dist/get-RPZHLQ56.js +92 -0
  574. package/dist/get-RPZHLQ56.js.map +1 -0
  575. package/dist/gif-6PRTB2VR.js +94 -0
  576. package/dist/gif-6PRTB2VR.js.map +1 -0
  577. package/dist/google-52JRH7X3.js +136 -0
  578. package/dist/google-52JRH7X3.js.map +1 -0
  579. package/dist/google-X2AQR3RB.js +3190 -0
  580. package/dist/google-X2AQR3RB.js.map +1 -0
  581. package/dist/google-ads-PWX7OF5Z.js +195 -0
  582. package/dist/google-ads-PWX7OF5Z.js.map +1 -0
  583. package/dist/group-AAZ5QKC3.js +43 -0
  584. package/dist/group-AAZ5QKC3.js.map +1 -0
  585. package/dist/group-GSYCZORC.js +43 -0
  586. package/dist/group-GSYCZORC.js.map +1 -0
  587. package/dist/gsc-TS5T7ML2.js +30 -0
  588. package/dist/gsc-TS5T7ML2.js.map +1 -0
  589. package/dist/history-EW6LFFCX.js +67 -0
  590. package/dist/history-EW6LFFCX.js.map +1 -0
  591. package/dist/history-XI5ABCFO.js +133 -0
  592. package/dist/history-XI5ABCFO.js.map +1 -0
  593. package/dist/hubspot-AVUOILRE.js +779 -0
  594. package/dist/hubspot-AVUOILRE.js.map +1 -0
  595. package/dist/icon-K75KI6BV.js +137 -0
  596. package/dist/icon-K75KI6BV.js.map +1 -0
  597. package/dist/ideas-L3SZSIZP.js +35 -0
  598. package/dist/ideas-L3SZSIZP.js.map +1 -0
  599. package/dist/images-CD53I2W5.js +90 -0
  600. package/dist/images-CD53I2W5.js.map +1 -0
  601. package/dist/improve-L3BW4EQG.js +86 -0
  602. package/dist/improve-L3BW4EQG.js.map +1 -0
  603. package/dist/ingest-KRJOYTCQ.js +107 -0
  604. package/dist/ingest-KRJOYTCQ.js.map +1 -0
  605. package/dist/ingest-WE3SPPND.js +23 -0
  606. package/dist/ingest-WE3SPPND.js.map +1 -0
  607. package/dist/insights-PELVD4RY.js +122 -0
  608. package/dist/insights-PELVD4RY.js.map +1 -0
  609. package/dist/insights-XCA4BUJW.js +423 -0
  610. package/dist/insights-XCA4BUJW.js.map +1 -0
  611. package/dist/inspect-QKETG5UJ.js +189 -0
  612. package/dist/inspect-QKETG5UJ.js.map +1 -0
  613. package/dist/inspiration-Y2J2PUPC.js +53 -0
  614. package/dist/inspiration-Y2J2PUPC.js.map +1 -0
  615. package/dist/intent-YJOJGNVJ.js +95 -0
  616. package/dist/intent-YJOJGNVJ.js.map +1 -0
  617. package/dist/job-E2U4FS5P.js +202 -0
  618. package/dist/job-E2U4FS5P.js.map +1 -0
  619. package/dist/job-create-DFYCHVQ7.js +109 -0
  620. package/dist/job-create-DFYCHVQ7.js.map +1 -0
  621. package/dist/job-status-FFPMTSHB.js +74 -0
  622. package/dist/job-status-FFPMTSHB.js.map +1 -0
  623. package/dist/keep-GYZS2UTL.js +78 -0
  624. package/dist/keep-GYZS2UTL.js.map +1 -0
  625. package/dist/keyword-gap-QU7O7UKC.js +130 -0
  626. package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
  627. package/dist/keyword-metrics-HLCM3QU7.js +197 -0
  628. package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
  629. package/dist/keywords-for-site-BDKPQKWB.js +128 -0
  630. package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
  631. package/dist/landing-4K6XYNFM.js +28 -0
  632. package/dist/landing-4K6XYNFM.js.map +1 -0
  633. package/dist/landings-F7LOAEJE.js +151 -0
  634. package/dist/landings-F7LOAEJE.js.map +1 -0
  635. package/dist/languages-P3ZM6R2A.js +40 -0
  636. package/dist/languages-P3ZM6R2A.js.map +1 -0
  637. package/dist/languages-XEJKTIFP.js +55 -0
  638. package/dist/languages-XEJKTIFP.js.map +1 -0
  639. package/dist/launches-TCFAYUA5.js +19 -0
  640. package/dist/launches-TCFAYUA5.js.map +1 -0
  641. package/dist/layerize-ZSKFIPZA.js +190 -0
  642. package/dist/layerize-ZSKFIPZA.js.map +1 -0
  643. package/dist/leads-GDF4S2AM.js +90 -0
  644. package/dist/leads-GDF4S2AM.js.map +1 -0
  645. package/dist/leads-TPB5OFSQ.js +293 -0
  646. package/dist/leads-TPB5OFSQ.js.map +1 -0
  647. package/dist/learn-NMFEA5H5.js +203 -0
  648. package/dist/learn-NMFEA5H5.js.map +1 -0
  649. package/dist/library-IP2UKNRU.js +109 -0
  650. package/dist/library-IP2UKNRU.js.map +1 -0
  651. package/dist/lighthouse-57XBJRCO.js +75 -0
  652. package/dist/lighthouse-57XBJRCO.js.map +1 -0
  653. package/dist/line-item-writes-O6SSS5NQ.js +208 -0
  654. package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
  655. package/dist/line-items-ZZAKH3YZ.js +103 -0
  656. package/dist/line-items-ZZAKH3YZ.js.map +1 -0
  657. package/dist/link-CRY57R3E.js +64 -0
  658. package/dist/link-CRY57R3E.js.map +1 -0
  659. package/dist/linkedin-WC7LGYPP.js +1008 -0
  660. package/dist/linkedin-WC7LGYPP.js.map +1 -0
  661. package/dist/list-6IKPWQGG.js +57 -0
  662. package/dist/list-6IKPWQGG.js.map +1 -0
  663. package/dist/list-CAUH3BMG.js +65 -0
  664. package/dist/list-CAUH3BMG.js.map +1 -0
  665. package/dist/list-CWAKX5TH.js +63 -0
  666. package/dist/list-CWAKX5TH.js.map +1 -0
  667. package/dist/list-FJ5FSVL6.js +151 -0
  668. package/dist/list-FJ5FSVL6.js.map +1 -0
  669. package/dist/list-GTOSN7DP.js +50 -0
  670. package/dist/list-GTOSN7DP.js.map +1 -0
  671. package/dist/list-HLJP4NVE.js +51 -0
  672. package/dist/list-HLJP4NVE.js.map +1 -0
  673. package/dist/list-LCUPF7EF.js +76 -0
  674. package/dist/list-LCUPF7EF.js.map +1 -0
  675. package/dist/list-NH4ZRZTL.js +303 -0
  676. package/dist/list-NH4ZRZTL.js.map +1 -0
  677. package/dist/locations-2BYWKIYA.js +67 -0
  678. package/dist/locations-2BYWKIYA.js.map +1 -0
  679. package/dist/locations-LVVDOSXO.js +40 -0
  680. package/dist/locations-LVVDOSXO.js.map +1 -0
  681. package/dist/log-6JOWOY5G.js +92 -0
  682. package/dist/log-6JOWOY5G.js.map +1 -0
  683. package/dist/logo-AJK2TDQU.js +18 -0
  684. package/dist/logo-AJK2TDQU.js.map +1 -0
  685. package/dist/lookup-H5GEM77H.js +22 -0
  686. package/dist/lookup-H5GEM77H.js.map +1 -0
  687. package/dist/make-N3WZ6OSS.js +640 -0
  688. package/dist/make-N3WZ6OSS.js.map +1 -0
  689. package/dist/map-4KOYFHAN.js +404 -0
  690. package/dist/map-4KOYFHAN.js.map +1 -0
  691. package/dist/mcp-LSS2DHYL.js +463 -0
  692. package/dist/mcp-LSS2DHYL.js.map +1 -0
  693. package/dist/media-JBCN6V4X.js +15 -0
  694. package/dist/media-JBCN6V4X.js.map +1 -0
  695. package/dist/media-RAGEJTZX.js +89 -0
  696. package/dist/media-RAGEJTZX.js.map +1 -0
  697. package/dist/media-sources-GSPAV7HT.js +32 -0
  698. package/dist/media-sources-GSPAV7HT.js.map +1 -0
  699. package/dist/members-GUUVEK2Y.js +44 -0
  700. package/dist/members-GUUVEK2Y.js.map +1 -0
  701. package/dist/meta-Z37ZR3PJ.js +69 -0
  702. package/dist/meta-Z37ZR3PJ.js.map +1 -0
  703. package/dist/metrics-KW6SDULI.js +152 -0
  704. package/dist/metrics-KW6SDULI.js.map +1 -0
  705. package/dist/models-5J4WFUD3.js +155 -0
  706. package/dist/models-5J4WFUD3.js.map +1 -0
  707. package/dist/normalize-DSFVTRXN.js +806 -0
  708. package/dist/normalize-DSFVTRXN.js.map +1 -0
  709. package/dist/normalize-EUDI5HEM.js +141 -0
  710. package/dist/normalize-EUDI5HEM.js.map +1 -0
  711. package/dist/options-P4PPJQH4.js +121 -0
  712. package/dist/options-P4PPJQH4.js.map +1 -0
  713. package/dist/output-DTCLVPUF.js +24 -0
  714. package/dist/output-DTCLVPUF.js.map +1 -0
  715. package/dist/page-N2ZO3O7F.js +105 -0
  716. package/dist/page-N2ZO3O7F.js.map +1 -0
  717. package/dist/pages-FQ4CBAJ2.js +66 -0
  718. package/dist/pages-FQ4CBAJ2.js.map +1 -0
  719. package/dist/performance-A66LYIZX.js +24 -0
  720. package/dist/performance-A66LYIZX.js.map +1 -0
  721. package/dist/pinterest-NV5XTNJE.js +96 -0
  722. package/dist/pinterest-NV5XTNJE.js.map +1 -0
  723. package/dist/pixels-CTJ43FZ4.js +108 -0
  724. package/dist/pixels-CTJ43FZ4.js.map +1 -0
  725. package/dist/pixels-HKINGZCH.js +60 -0
  726. package/dist/pixels-HKINGZCH.js.map +1 -0
  727. package/dist/plan-ZYTWLGWK.js +207 -0
  728. package/dist/plan-ZYTWLGWK.js.map +1 -0
  729. package/dist/preview-5ROBOQG7.js +169 -0
  730. package/dist/preview-5ROBOQG7.js.map +1 -0
  731. package/dist/profile-Q3PHR6FU.js +159 -0
  732. package/dist/profile-Q3PHR6FU.js.map +1 -0
  733. package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
  734. package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
  735. package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
  736. package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
  737. package/dist/properties-WLL6M2P6.js +101 -0
  738. package/dist/properties-WLL6M2P6.js.map +1 -0
  739. package/dist/publish-KHNR5ARF.js +322 -0
  740. package/dist/publish-KHNR5ARF.js.map +1 -0
  741. package/dist/query-A34J7BGX.js +61 -0
  742. package/dist/query-A34J7BGX.js.map +1 -0
  743. package/dist/query-IYZN5KHO.js +236 -0
  744. package/dist/query-IYZN5KHO.js.map +1 -0
  745. package/dist/query-UN2P6DBA.js +247 -0
  746. package/dist/query-UN2P6DBA.js.map +1 -0
  747. package/dist/questionnaire-Z2ZIKNBV.js +93 -0
  748. package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
  749. package/dist/read-GM7PQYJA.js +141 -0
  750. package/dist/read-GM7PQYJA.js.map +1 -0
  751. package/dist/reddit-5NPFULGD.js +26 -0
  752. package/dist/reddit-5NPFULGD.js.map +1 -0
  753. package/dist/refresh-FGXW4Y4X.js +94 -0
  754. package/dist/refresh-FGXW4Y4X.js.map +1 -0
  755. package/dist/release-OKZMC73N.js +60 -0
  756. package/dist/release-OKZMC73N.js.map +1 -0
  757. package/dist/relevant-pages-J76ZKNKF.js +99 -0
  758. package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
  759. package/dist/remove-CA2J6ACH.js +50 -0
  760. package/dist/remove-CA2J6ACH.js.map +1 -0
  761. package/dist/remove-GOYW2G4R.js +48 -0
  762. package/dist/remove-GOYW2G4R.js.map +1 -0
  763. package/dist/reopen-XPKSOE6O.js +63 -0
  764. package/dist/reopen-XPKSOE6O.js.map +1 -0
  765. package/dist/rerun-QA6ISKVO.js +86 -0
  766. package/dist/rerun-QA6ISKVO.js.map +1 -0
  767. package/dist/research-FZ63UZTE.js +62 -0
  768. package/dist/research-FZ63UZTE.js.map +1 -0
  769. package/dist/research-YGQQ6CNG.js +262 -0
  770. package/dist/research-YGQQ6CNG.js.map +1 -0
  771. package/dist/reset-BGPZ4HMA.js +54 -0
  772. package/dist/reset-BGPZ4HMA.js.map +1 -0
  773. package/dist/reset-HTD6LCIT.js +54 -0
  774. package/dist/reset-HTD6LCIT.js.map +1 -0
  775. package/dist/resolve-NRDZ6N2B.js +121 -0
  776. package/dist/resolve-NRDZ6N2B.js.map +1 -0
  777. package/dist/retry-PF4BGKJV.js +60 -0
  778. package/dist/retry-PF4BGKJV.js.map +1 -0
  779. package/dist/retry-XL26JDAV.js +62 -0
  780. package/dist/retry-XL26JDAV.js.map +1 -0
  781. package/dist/retry-failed-BEFWRV4Z.js +45 -0
  782. package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
  783. package/dist/run-3ZDGCCTH.js +61 -0
  784. package/dist/run-3ZDGCCTH.js.map +1 -0
  785. package/dist/run-EMJLI7LR.js +65 -0
  786. package/dist/run-EMJLI7LR.js.map +1 -0
  787. package/dist/scaffold-ad-QW75LLYR.js +1550 -0
  788. package/dist/scaffold-ad-QW75LLYR.js.map +1 -0
  789. package/dist/scaffold-static-ad-S3UOKLJ3.js +973 -0
  790. package/dist/scaffold-static-ad-S3UOKLJ3.js.map +1 -0
  791. package/dist/scaffold-video-3BJQOUAA.js +874 -0
  792. package/dist/scaffold-video-3BJQOUAA.js.map +1 -0
  793. package/dist/schedule-KQ7UIR3N.js +66 -0
  794. package/dist/schedule-KQ7UIR3N.js.map +1 -0
  795. package/dist/schedule-PKPNSISL.js +61 -0
  796. package/dist/schedule-PKPNSISL.js.map +1 -0
  797. package/dist/scheduled-agents-LP5LITA3.js +49 -0
  798. package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
  799. package/dist/schema-B6J6VPTO.js +132 -0
  800. package/dist/schema-B6J6VPTO.js.map +1 -0
  801. package/dist/schema-QXTDLZVC.js +63 -0
  802. package/dist/schema-QXTDLZVC.js.map +1 -0
  803. package/dist/scrape-7YKJWFZE.js +2241 -0
  804. package/dist/scrape-7YKJWFZE.js.map +1 -0
  805. package/dist/screenshot-ZHBSG3SI.js +102 -0
  806. package/dist/screenshot-ZHBSG3SI.js.map +1 -0
  807. package/dist/search-332KFYZ6.js +224 -0
  808. package/dist/search-332KFYZ6.js.map +1 -0
  809. package/dist/search-4PBMXXUY.js +91 -0
  810. package/dist/search-4PBMXXUY.js.map +1 -0
  811. package/dist/search-6WNUKCMP.js +174 -0
  812. package/dist/search-6WNUKCMP.js.map +1 -0
  813. package/dist/search-AVNUU6TJ.js +26 -0
  814. package/dist/search-AVNUU6TJ.js.map +1 -0
  815. package/dist/search-F5INRFFK.js +92 -0
  816. package/dist/search-F5INRFFK.js.map +1 -0
  817. package/dist/search-copy-DZVBYG2B.js +168 -0
  818. package/dist/search-copy-DZVBYG2B.js.map +1 -0
  819. package/dist/seeds-5JTQN5WI.js +101 -0
  820. package/dist/seeds-5JTQN5WI.js.map +1 -0
  821. package/dist/select-2V6CHATD.js +96 -0
  822. package/dist/select-2V6CHATD.js.map +1 -0
  823. package/dist/sends-3L6QBS46.js +309 -0
  824. package/dist/sends-3L6QBS46.js.map +1 -0
  825. package/dist/sequences-YKFV7BDH.js +146 -0
  826. package/dist/sequences-YKFV7BDH.js.map +1 -0
  827. package/dist/set-prompt-XGZXW63I.js +188 -0
  828. package/dist/set-prompt-XGZXW63I.js.map +1 -0
  829. package/dist/setup-links-6H5ONDCQ.js +141 -0
  830. package/dist/setup-links-6H5ONDCQ.js.map +1 -0
  831. package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
  832. package/dist/shared-QAMP7FZV.js.map +1 -0
  833. package/dist/shopify-D3GNV5O6.js +3715 -0
  834. package/dist/shopify-D3GNV5O6.js.map +1 -0
  835. package/dist/site-TBPERLY3.js +177 -0
  836. package/dist/site-TBPERLY3.js.map +1 -0
  837. package/dist/sitemaps-XPGLW24S.js +87 -0
  838. package/dist/sitemaps-XPGLW24S.js.map +1 -0
  839. package/dist/sites-WMBY2HJV.js +101 -0
  840. package/dist/sites-WMBY2HJV.js.map +1 -0
  841. package/dist/skills-3HEILQCU.js +47 -0
  842. package/dist/skills-3HEILQCU.js.map +1 -0
  843. package/dist/sources-JFQKTK2L.js +421 -0
  844. package/dist/sources-JFQKTK2L.js.map +1 -0
  845. package/dist/sources-Q3I6DDV7.js +30 -0
  846. package/dist/sources-Q3I6DDV7.js.map +1 -0
  847. package/dist/stale-4SERZW2D.js +66 -0
  848. package/dist/stale-4SERZW2D.js.map +1 -0
  849. package/dist/stats-GNILHSKK.js +34 -0
  850. package/dist/stats-GNILHSKK.js.map +1 -0
  851. package/dist/status-LIZWJYS4.js +62 -0
  852. package/dist/status-LIZWJYS4.js.map +1 -0
  853. package/dist/sticker-KCV3VZHY.js +94 -0
  854. package/dist/sticker-KCV3VZHY.js.map +1 -0
  855. package/dist/stock-VTORKR4C.js +179 -0
  856. package/dist/stock-VTORKR4C.js.map +1 -0
  857. package/dist/studio-QCRA6BY5.js +49 -0
  858. package/dist/studio-QCRA6BY5.js.map +1 -0
  859. package/dist/sync-455DB46Y.js +54 -0
  860. package/dist/sync-455DB46Y.js.map +1 -0
  861. package/dist/sync-A4KKQ3B6.js +265 -0
  862. package/dist/sync-A4KKQ3B6.js.map +1 -0
  863. package/dist/sync-ULKWDFXM.js +54 -0
  864. package/dist/sync-ULKWDFXM.js.map +1 -0
  865. package/dist/sync-definition-YTBLMLX2.js +55 -0
  866. package/dist/sync-definition-YTBLMLX2.js.map +1 -0
  867. package/dist/tag-manager-E7QTXBWQ.js +43 -0
  868. package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
  869. package/dist/tags-4Q4I5GQJ.js +20 -0
  870. package/dist/tags-4Q4I5GQJ.js.map +1 -0
  871. package/dist/tags-AMEVAQZ4.js +26 -0
  872. package/dist/tags-AMEVAQZ4.js.map +1 -0
  873. package/dist/tags-DPLOLH3E.js +20 -0
  874. package/dist/tags-DPLOLH3E.js.map +1 -0
  875. package/dist/tags-LDHXONR3.js +224 -0
  876. package/dist/tags-LDHXONR3.js.map +1 -0
  877. package/dist/tags-UW3WJTAQ.js +20 -0
  878. package/dist/tags-UW3WJTAQ.js.map +1 -0
  879. package/dist/targeting-constants-D64YO3E7.js +118 -0
  880. package/dist/targeting-constants-D64YO3E7.js.map +1 -0
  881. package/dist/targeting-criteria-BP6VJA7X.js +113 -0
  882. package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
  883. package/dist/targets-CQWO2UXD.js +102 -0
  884. package/dist/targets-CQWO2UXD.js.map +1 -0
  885. package/dist/templates-WZSTNRNZ.js +178 -0
  886. package/dist/templates-WZSTNRNZ.js.map +1 -0
  887. package/dist/testimonials-ETHSNWUH.js +32 -0
  888. package/dist/testimonials-ETHSNWUH.js.map +1 -0
  889. package/dist/themes-YU663LQH.js +94 -0
  890. package/dist/themes-YU663LQH.js.map +1 -0
  891. package/dist/top-companies-KTXHS472.js +108 -0
  892. package/dist/top-companies-KTXHS472.js.map +1 -0
  893. package/dist/translate-6QAJ5ZUU.js +600 -0
  894. package/dist/translate-6QAJ5ZUU.js.map +1 -0
  895. package/dist/triggers-4EDFLNGH.js +141 -0
  896. package/dist/triggers-4EDFLNGH.js.map +1 -0
  897. package/dist/tweets-ZUKQAAUQ.js +123 -0
  898. package/dist/tweets-ZUKQAAUQ.js.map +1 -0
  899. package/dist/unfollow-A4JVCJBF.js +46 -0
  900. package/dist/unfollow-A4JVCJBF.js.map +1 -0
  901. package/dist/unlink-KY2OEKMD.js +67 -0
  902. package/dist/unlink-KY2OEKMD.js.map +1 -0
  903. package/dist/unstage-FHUG67RI.js +84 -0
  904. package/dist/unstage-FHUG67RI.js.map +1 -0
  905. package/dist/unstage-ZRLLCSQF.js +95 -0
  906. package/dist/unstage-ZRLLCSQF.js.map +1 -0
  907. package/dist/update-27LGM65V.js +63 -0
  908. package/dist/update-27LGM65V.js.map +1 -0
  909. package/dist/update-AIY46I2Q.js +155 -0
  910. package/dist/update-AIY46I2Q.js.map +1 -0
  911. package/dist/update-QYD2XZFM.js +142 -0
  912. package/dist/update-QYD2XZFM.js.map +1 -0
  913. package/dist/update-W2OSRNFO.js +98 -0
  914. package/dist/update-W2OSRNFO.js.map +1 -0
  915. package/dist/upload-JGBTSKGH.js +126 -0
  916. package/dist/upload-JGBTSKGH.js.map +1 -0
  917. package/dist/upload-XEHWYMJG.js +150 -0
  918. package/dist/upload-XEHWYMJG.js.map +1 -0
  919. package/dist/upscale-I5P2OHTN.js +109 -0
  920. package/dist/upscale-I5P2OHTN.js.map +1 -0
  921. package/dist/url-options-QHGA42RP.js +130 -0
  922. package/dist/url-options-QHGA42RP.js.map +1 -0
  923. package/dist/url-params-NWSUHWRE.js +98 -0
  924. package/dist/url-params-NWSUHWRE.js.map +1 -0
  925. package/dist/use-U4HG2NF3.js +95 -0
  926. package/dist/use-U4HG2NF3.js.map +1 -0
  927. package/dist/validate-DOQ6AI62.js +91 -0
  928. package/dist/validate-DOQ6AI62.js.map +1 -0
  929. package/dist/variant-FOVE6URJ.js +338 -0
  930. package/dist/variant-FOVE6URJ.js.map +1 -0
  931. package/dist/videos-DP3VCSYG.js +39 -0
  932. package/dist/videos-DP3VCSYG.js.map +1 -0
  933. package/dist/view-HRI3FHCH.js +121 -0
  934. package/dist/view-HRI3FHCH.js.map +1 -0
  935. package/dist/viewer-check-JYUE24M6.js +68 -0
  936. package/dist/viewer-check-JYUE24M6.js.map +1 -0
  937. package/dist/web-AFUIWPFU.js +140 -0
  938. package/dist/web-AFUIWPFU.js.map +1 -0
  939. package/dist/winners-SMMDN6LW.js +113 -0
  940. package/dist/winners-SMMDN6LW.js.map +1 -0
  941. package/dist/winning-ads-PCIJUYVA.js +84 -0
  942. package/dist/winning-ads-PCIJUYVA.js.map +1 -0
  943. package/dist/write-commands-7Z34WG2J.js +206 -0
  944. package/dist/write-commands-7Z34WG2J.js.map +1 -0
  945. package/dist/write-commands-BLT2SEC4.js +713 -0
  946. package/dist/write-commands-BLT2SEC4.js.map +1 -0
  947. package/dist/write-commands-N4FSGRVQ.js +743 -0
  948. package/dist/write-commands-N4FSGRVQ.js.map +1 -0
  949. package/dist/write-commands-Q4MQ3BGM.js +1015 -0
  950. package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
  951. package/dist/x-AUOZJNWE.js +47 -0
  952. package/dist/x-AUOZJNWE.js.map +1 -0
  953. package/package.json +9 -2
  954. package/dist/chunk-FGHMWBUD.js +0 -9989
  955. package/dist/chunk-FGHMWBUD.js.map +0 -1
  956. package/dist/chunk-HJEMOSPH.js +0 -1292
  957. package/dist/chunk-HJEMOSPH.js.map +0 -1
  958. package/dist/chunk-MF7YA62W.js.map +0 -1
  959. package/dist/chunk-VZEDAFAR.js.map +0 -1
  960. package/dist/chunk-XHC4LMK4.js.map +0 -1
  961. package/dist/client-GR6YL3YX.js +0 -17
  962. package/dist/output-NMQXZF3Z.js +0 -18
  963. /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
  964. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  965. /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
  966. /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
  967. /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
@@ -0,0 +1,189 @@
1
+ import {
2
+ fetchRunRecord
3
+ } from "./chunk-SJH4EOZH.js";
4
+ import {
5
+ findWorkspaceRoot
6
+ } from "./chunk-HDHWIEJJ.js";
7
+ import "./chunk-U7BBXM67.js";
8
+ import "./chunk-DX4GIDO7.js";
9
+ import "./chunk-CZENWCBS.js";
10
+ import "./chunk-SMIENBNX.js";
11
+ import "./chunk-GXDLWBOY.js";
12
+ import "./chunk-GIWHHCD6.js";
13
+ import "./chunk-UI6BKYQD.js";
14
+ import "./chunk-XX6ZMCY5.js";
15
+ import {
16
+ ApiError
17
+ } from "./chunk-HREWXNTO.js";
18
+ import "./chunk-HLXWKMTK.js";
19
+ import "./chunk-O6QKCJE4.js";
20
+ import "./chunk-WOTDHRNF.js";
21
+ import "./chunk-YQSBHWOI.js";
22
+
23
+ // src/commands/canvas/inspect.ts
24
+ import { execFile } from "child_process";
25
+ import { readdir, readFile, stat } from "fs/promises";
26
+ import path from "path";
27
+ import { promisify } from "util";
28
+ import { defineCommand } from "citty";
29
+ var execFileAsync = promisify(execFile);
30
+ var inspectCommand = defineCommand({
31
+ meta: {
32
+ name: "inspect",
33
+ description: "Dump a one-page summary of a canvas run: per-node duration + cache status, the run's outputs, and optionally three thumbnail frames per video output. Pass a run_id (r_\u2026) or an absolute run directory. A run whose folder is not in this workspace (an older version, or one rendered in another chat) is read from the company's run history instead: its status, stats, per-node results and the durable URL of every output."
34
+ },
35
+ args: {
36
+ run: { type: "positional", required: true, description: "Run id (e.g. r_01K...) or absolute run directory" },
37
+ "outputs-dir": { type: "string", description: "Per-run outputs root (default <workspace root>/canvas, where `canvas run` writes)" },
38
+ thumbnails: {
39
+ type: "boolean",
40
+ description: "Extract start/middle/end frames from every video output in the local run folder (requires ffmpeg)"
41
+ }
42
+ },
43
+ async run({ args }) {
44
+ const cwd = process.cwd();
45
+ const outputsDir = args["outputs-dir"] ? path.resolve(String(args["outputs-dir"])) : path.join(findWorkspaceRoot(cwd) ?? cwd, "canvas");
46
+ const runArg = String(args.run);
47
+ const runDir = await localRunDir(runArg, outputsDir);
48
+ if (!runDir) {
49
+ if (path.isAbsolute(runArg)) fail("not_found", `${runArg} is not a run directory`);
50
+ await inspectFromHistory(runArg, path.join(outputsDir, runArg));
51
+ return;
52
+ }
53
+ const manifest = await loadManifest(runDir);
54
+ const files = await listRunFiles(runDir);
55
+ const videos = files.filter((f) => isVideoFile(f.path));
56
+ let thumbnails = [];
57
+ if (args.thumbnails) {
58
+ thumbnails = await extractThumbnails(videos.map((v) => v.path));
59
+ }
60
+ const summary = {
61
+ ok: true,
62
+ source: "local",
63
+ run_id: manifest.run_id ?? path.basename(runDir),
64
+ run_dir: runDir,
65
+ stats: manifest.stats ?? null,
66
+ output: manifest.output ?? null,
67
+ node_runs: manifest.node_runs ?? [],
68
+ files: files.map((f) => ({ name: f.name, path: f.path, size_bytes: f.size })),
69
+ thumbnails
70
+ };
71
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}
72
+ `);
73
+ }
74
+ });
75
+ async function localRunDir(run, outputsDir) {
76
+ const candidate = path.isAbsolute(run) ? run : path.join(outputsDir, run);
77
+ const s = await stat(candidate).catch(() => null);
78
+ return s?.isDirectory() ? candidate : null;
79
+ }
80
+ async function inspectFromHistory(runId, expectedDir) {
81
+ let run;
82
+ try {
83
+ run = await fetchRunRecord(runId);
84
+ } catch (e) {
85
+ const reason = e instanceof ApiError ? e.message : e instanceof Error ? e.message : String(e);
86
+ fail("unavailable", `No run folder at ${expectedDir}, and the run history could not be read (${reason}).`);
87
+ }
88
+ if (!run) {
89
+ fail(
90
+ "not_found",
91
+ `No run "${runId}": there is no folder at ${expectedDir} and the company's run history has no run by that id.`
92
+ );
93
+ }
94
+ const summary = {
95
+ ok: true,
96
+ source: "run_history",
97
+ run_id: run.runId,
98
+ creative: run.creativeSlug ?? null,
99
+ status: run.status,
100
+ ...run.errorMessage ? { error: run.errorMessage } : {},
101
+ stats: {
102
+ total_nodes: run.stats.totalNodes,
103
+ cached_nodes: run.stats.cachedNodes,
104
+ total_credits: run.stats.totalCredits,
105
+ duration_ms: run.stats.durationMs
106
+ },
107
+ outputs: run.finalOutputs,
108
+ node_runs: run.nodes.map((node) => ({
109
+ node_id: node.nodeId,
110
+ node_type: node.nodeType,
111
+ cached: node.cached,
112
+ duration_ms: node.durationMs,
113
+ credits: node.credits,
114
+ ...node.status ? { status: node.status } : {},
115
+ outputs: node.outputs
116
+ })),
117
+ ...run.review ? { review: run.review } : {},
118
+ hints: [
119
+ "This run's folder is not in this workspace, so there are no local files: every output above is a durable URL. To render it again here, run `baker canvas run --slug <creative>`."
120
+ ]
121
+ };
122
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}
123
+ `);
124
+ }
125
+ function fail(code, message) {
126
+ process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message } }, null, 2)}
127
+ `);
128
+ process.exit(2);
129
+ }
130
+ async function loadManifest(runDir) {
131
+ const manifestPath = path.join(runDir, "manifest.json");
132
+ try {
133
+ const raw = await readFile(manifestPath, "utf-8");
134
+ return JSON.parse(raw);
135
+ } catch {
136
+ return {};
137
+ }
138
+ }
139
+ async function listRunFiles(runDir) {
140
+ const out = [];
141
+ const names = await readdir(runDir);
142
+ for (const name of names) {
143
+ const abs = path.join(runDir, name);
144
+ const s = await stat(abs).catch(() => null);
145
+ if (!s?.isFile()) continue;
146
+ out.push({ name, path: abs, size: s.size });
147
+ }
148
+ out.sort((a, b) => a.name.localeCompare(b.name));
149
+ return out;
150
+ }
151
+ function isVideoFile(p) {
152
+ return /\.(mp4|webm|mov)$/i.test(p);
153
+ }
154
+ async function extractThumbnails(videoPaths) {
155
+ const out = [];
156
+ for (const v of videoPaths) {
157
+ const duration = await probeDuration(v).catch(() => null);
158
+ if (duration === null) {
159
+ out.push({ video: v, frames: [] });
160
+ continue;
161
+ }
162
+ const frames = [];
163
+ const checkpoints = [0.05, 0.5, 0.95];
164
+ const base = v.replace(/\.[^.]+$/, "");
165
+ for (const ratio of checkpoints) {
166
+ const at = Math.max(0, Math.min(duration * ratio, duration - 0.01));
167
+ const dest = `${base}__frame_${Math.round(ratio * 100).toString().padStart(2, "0")}.png`;
168
+ try {
169
+ await execFileAsync("ffmpeg", ["-ss", at.toFixed(3), "-i", v, "-frames:v", "1", "-y", dest]);
170
+ frames.push(dest);
171
+ } catch {
172
+ }
173
+ }
174
+ out.push({ video: v, frames });
175
+ }
176
+ return out;
177
+ }
178
+ async function probeDuration(filePath) {
179
+ const { stdout } = await execFileAsync(
180
+ "ffprobe",
181
+ ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", filePath],
182
+ { encoding: "utf-8" }
183
+ );
184
+ return Number.parseFloat(stdout.trim());
185
+ }
186
+ export {
187
+ inspectCommand
188
+ };
189
+ //# sourceMappingURL=inspect-QKETG5UJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/canvas/inspect.ts"],"sourcesContent":["import { execFile } from \"node:child_process\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { defineCommand } from \"citty\";\nimport { ApiError } from \"../../client.ts\";\nimport { findWorkspaceRoot } from \"./normalize-paths.ts\";\nimport { fetchRunRecord } from \"./run-history.ts\";\n\nconst execFileAsync = promisify(execFile);\n\ntype ManifestNodeRun = {\n node_id: string;\n node_type: string;\n cached: boolean;\n duration_ms: number;\n credits: number;\n};\n\ntype Manifest = {\n run_id: string;\n output?: unknown;\n stats?: { total_nodes: number; cached_nodes: number; total_credits: number; duration_ms: number };\n node_runs?: ManifestNodeRun[];\n};\n\nexport const inspectCommand = defineCommand({\n meta: {\n name: \"inspect\",\n description:\n \"Dump a one-page summary of a canvas run: per-node duration + cache status, the run's outputs, and optionally three thumbnail frames per video output. Pass a run_id (r_…) or an absolute run directory. A run whose folder is not in this workspace (an older version, or one rendered in another chat) is read from the company's run history instead: its status, stats, per-node results and the durable URL of every output.\",\n },\n args: {\n run: { type: \"positional\", required: true, description: \"Run id (e.g. r_01K...) or absolute run directory\" },\n \"outputs-dir\": { type: \"string\", description: \"Per-run outputs root (default <workspace root>/canvas, where `canvas run` writes)\" },\n thumbnails: {\n type: \"boolean\",\n description: \"Extract start/middle/end frames from every video output in the local run folder (requires ffmpeg)\",\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const outputsDir = args[\"outputs-dir\"]\n ? path.resolve(String(args[\"outputs-dir\"]))\n : path.join(findWorkspaceRoot(cwd) ?? cwd, \"canvas\");\n const runArg = String(args.run);\n const runDir = await localRunDir(runArg, outputsDir);\n if (!runDir) {\n if (path.isAbsolute(runArg)) fail(\"not_found\", `${runArg} is not a run directory`);\n await inspectFromHistory(runArg, path.join(outputsDir, runArg));\n return;\n }\n\n const manifest = await loadManifest(runDir);\n const files = await listRunFiles(runDir);\n const videos = files.filter((f) => isVideoFile(f.path));\n let thumbnails: Array<{ video: string; frames: string[] }> = [];\n if (args.thumbnails) {\n thumbnails = await extractThumbnails(videos.map((v) => v.path));\n }\n\n const summary = {\n ok: true,\n source: \"local\",\n run_id: manifest.run_id ?? path.basename(runDir),\n run_dir: runDir,\n stats: manifest.stats ?? null,\n output: manifest.output ?? null,\n node_runs: manifest.node_runs ?? [],\n files: files.map((f) => ({ name: f.name, path: f.path, size_bytes: f.size })),\n thumbnails,\n };\n\n process.stdout.write(`${JSON.stringify(summary, null, 2)}\\n`);\n },\n});\n\n/** The run's local folder, or null when this workspace does not have it. */\nasync function localRunDir(run: string, outputsDir: string): Promise<string | null> {\n const candidate = path.isAbsolute(run) ? run : path.join(outputsDir, run);\n const s = await stat(candidate).catch(() => null);\n return s?.isDirectory() ? candidate : null;\n}\n\n/** The run as the company's run history keeps it: no local files, durable output URLs. */\nasync function inspectFromHistory(runId: string, expectedDir: string): Promise<void> {\n let run: Awaited<ReturnType<typeof fetchRunRecord>>;\n try {\n run = await fetchRunRecord(runId);\n } catch (e) {\n const reason = e instanceof ApiError ? e.message : e instanceof Error ? e.message : String(e);\n fail(\"unavailable\", `No run folder at ${expectedDir}, and the run history could not be read (${reason}).`);\n }\n if (!run) {\n fail(\n \"not_found\",\n `No run \"${runId}\": there is no folder at ${expectedDir} and the company's run history has no run by that id.`,\n );\n }\n const summary = {\n ok: true,\n source: \"run_history\",\n run_id: run.runId,\n creative: run.creativeSlug ?? null,\n status: run.status,\n ...(run.errorMessage ? { error: run.errorMessage } : {}),\n stats: {\n total_nodes: run.stats.totalNodes,\n cached_nodes: run.stats.cachedNodes,\n total_credits: run.stats.totalCredits,\n duration_ms: run.stats.durationMs,\n },\n outputs: run.finalOutputs,\n node_runs: run.nodes.map((node) => ({\n node_id: node.nodeId,\n node_type: node.nodeType,\n cached: node.cached,\n duration_ms: node.durationMs,\n credits: node.credits,\n ...(node.status ? { status: node.status } : {}),\n outputs: node.outputs,\n })),\n ...(run.review ? { review: run.review } : {}),\n hints: [\n \"This run's folder is not in this workspace, so there are no local files: every output above is a durable URL. To render it again here, run `baker canvas run --slug <creative>`.\",\n ],\n };\n process.stdout.write(`${JSON.stringify(summary, null, 2)}\\n`);\n}\n\nfunction fail(code: string, message: string): never {\n process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message } }, null, 2)}\\n`);\n process.exit(2);\n}\n\nasync function loadManifest(runDir: string): Promise<Manifest> {\n const manifestPath = path.join(runDir, \"manifest.json\");\n try {\n const raw = await readFile(manifestPath, \"utf-8\");\n return JSON.parse(raw) as Manifest;\n } catch {\n return {} as Manifest;\n }\n}\n\ntype RunFile = { name: string; path: string; size: number };\nasync function listRunFiles(runDir: string): Promise<RunFile[]> {\n const out: RunFile[] = [];\n const names = await readdir(runDir);\n for (const name of names) {\n const abs = path.join(runDir, name);\n const s = await stat(abs).catch(() => null);\n if (!s?.isFile()) continue;\n out.push({ name, path: abs, size: s.size });\n }\n out.sort((a, b) => a.name.localeCompare(b.name));\n return out;\n}\n\nfunction isVideoFile(p: string): boolean {\n return /\\.(mp4|webm|mov)$/i.test(p);\n}\n\nasync function extractThumbnails(videoPaths: string[]): Promise<Array<{ video: string; frames: string[] }>> {\n const out: Array<{ video: string; frames: string[] }> = [];\n for (const v of videoPaths) {\n const duration = await probeDuration(v).catch(() => null);\n if (duration === null) {\n out.push({ video: v, frames: [] });\n continue;\n }\n const frames: string[] = [];\n const checkpoints = [0.05, 0.5, 0.95];\n const base = v.replace(/\\.[^.]+$/, \"\");\n for (const ratio of checkpoints) {\n const at = Math.max(0, Math.min(duration * ratio, duration - 0.01));\n const dest = `${base}__frame_${Math.round(ratio * 100)\n .toString()\n .padStart(2, \"0\")}.png`;\n try {\n await execFileAsync(\"ffmpeg\", [\"-ss\", at.toFixed(3), \"-i\", v, \"-frames:v\", \"1\", \"-y\", dest]);\n frames.push(dest);\n } catch {\n // skip — best-effort; thumbnail extraction is non-fatal.\n }\n }\n out.push({ video: v, frames });\n }\n return out;\n}\n\nasync function probeDuration(filePath: string): Promise<number> {\n const { stdout } = await execFileAsync(\n \"ffprobe\",\n [\"-v\", \"error\", \"-show_entries\", \"format=duration\", \"-of\", \"csv=p=0\", filePath],\n { encoding: \"utf-8\" },\n );\n return Number.parseFloat(stdout.trim());\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,53 @@
1
+ import "./chunk-YQSBHWOI.js";
2
+
3
+ // src/commands/landing/inspiration/index.ts
4
+ import { defineCommand } from "citty";
5
+ var inspirationCommand = defineCommand({
6
+ meta: {
7
+ name: "inspiration",
8
+ description: `Reference library of real landing-page sections \u2014 look at how good pages actually solve a problem before you design one.
9
+
10
+ Start here: \`baker landing inspiration search "<what you want to see>"\` during research, BEFORE you write the Direction Contract.
11
+
12
+ This is inspiration, never a clipboard. Take the mechanism \u2014 what the eye hits first, what proof arrives before the ask, how the grid is split. The words are never yours to reuse: shipping a reference's headline is a Tier 0 message-match failure.
13
+
14
+ Subcommands:
15
+ baker landing inspiration search "<query>" \u2014 search by look, section type, composition, register or motion; saves screenshots you can Read
16
+ baker landing inspiration view <id> \u2014 one section in full: tokens, motion filmstrip, why it works, what to change
17
+ baker landing inspiration code <id> \u2014 its standalone HTML+CSS, for structure only
18
+ baker landing inspiration page <id> \u2014 a whole page as a sequence: how it orders its sections
19
+ baker landing inspiration sequences "<q>" \u2014 what follows what across MANY pages: openers, transitions, closers
20
+ baker landing inspiration add <url> \u2014 add a page to the library and save it to this company (returns immediately); --refresh re-studies a page that changed
21
+ baker landing inspiration favorites \u2014 what this company has saved; the default search scope
22
+ baker landing inspiration favorite <id> \u2014 save a section
23
+ baker landing inspiration unfavorite <id> \u2014 unsave a section
24
+ baker landing inspiration retry-failed \u2014 study again every saved page that failed
25
+ baker landing inspiration scrape <url> \u2014 internal/ops: run the capture locally
26
+
27
+ Examples:
28
+ baker landing inspiration search "pricing with a monthly/annual toggle" --max-rank 3
29
+ baker landing inspiration search "dark developer hero with a terminal" --register dev-tool-minimal --scope all
30
+ baker landing inspiration search "testimonial wall with faces and company logos" --motion scroll-reveal
31
+ baker landing inspiration sequences "b2b saas pricing page" --scope all
32
+ baker landing inspiration add https://linear.app
33
+
34
+ Full guide: __tooling__/docs/tools/baker/landing.md`
35
+ },
36
+ subCommands: {
37
+ search: () => import("./search-332KFYZ6.js").then((m) => m.searchCommand),
38
+ view: () => import("./view-HRI3FHCH.js").then((m) => m.viewCommand),
39
+ code: () => import("./code-MOWYJMDH.js").then((m) => m.codeCommand),
40
+ page: () => import("./page-N2ZO3O7F.js").then((m) => m.pageCommand),
41
+ sequences: () => import("./sequences-YKFV7BDH.js").then((m) => m.sequencesCommand),
42
+ add: () => import("./add-QZHAWUBA.js").then((m) => m.addCommand),
43
+ favorites: () => import("./favorites-7QP7BY5K.js").then((m) => m.favoritesCommand),
44
+ favorite: () => import("./favorites-7QP7BY5K.js").then((m) => m.favoriteCommand),
45
+ unfavorite: () => import("./favorites-7QP7BY5K.js").then((m) => m.unfavoriteCommand),
46
+ "retry-failed": () => import("./retry-failed-BEFWRV4Z.js").then((m) => m.retryFailedCommand),
47
+ scrape: () => import("./scrape-7YKJWFZE.js").then((m) => m.scrapeCommand)
48
+ }
49
+ });
50
+ export {
51
+ inspirationCommand
52
+ };
53
+ //# sourceMappingURL=inspiration-Y2J2PUPC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/landing/inspiration/index.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\n\nexport const inspirationCommand = defineCommand({\n meta: {\n name: \"inspiration\",\n description: `Reference library of real landing-page sections — look at how good pages actually solve a problem before you design one.\n\nStart here: \\`baker landing inspiration search \"<what you want to see>\"\\` during research, BEFORE you write the Direction Contract.\n\nThis is inspiration, never a clipboard. Take the mechanism — what the eye hits first, what proof arrives before the ask, how the grid is split. The words are never yours to reuse: shipping a reference's headline is a Tier 0 message-match failure.\n\nSubcommands:\n baker landing inspiration search \"<query>\" — search by look, section type, composition, register or motion; saves screenshots you can Read\n baker landing inspiration view <id> — one section in full: tokens, motion filmstrip, why it works, what to change\n baker landing inspiration code <id> — its standalone HTML+CSS, for structure only\n baker landing inspiration page <id> — a whole page as a sequence: how it orders its sections\n baker landing inspiration sequences \"<q>\" — what follows what across MANY pages: openers, transitions, closers\n baker landing inspiration add <url> — add a page to the library and save it to this company (returns immediately); --refresh re-studies a page that changed\n baker landing inspiration favorites — what this company has saved; the default search scope\n baker landing inspiration favorite <id> — save a section\n baker landing inspiration unfavorite <id> — unsave a section\n baker landing inspiration retry-failed — study again every saved page that failed\n baker landing inspiration scrape <url> — internal/ops: run the capture locally\n\nExamples:\n baker landing inspiration search \"pricing with a monthly/annual toggle\" --max-rank 3\n baker landing inspiration search \"dark developer hero with a terminal\" --register dev-tool-minimal --scope all\n baker landing inspiration search \"testimonial wall with faces and company logos\" --motion scroll-reveal\n baker landing inspiration sequences \"b2b saas pricing page\" --scope all\n baker landing inspiration add https://linear.app\n\nFull guide: __tooling__/docs/tools/baker/landing.md`,\n },\n subCommands: {\n search: () => import(\"./search.ts\").then((m) => m.searchCommand),\n view: () => import(\"./view.ts\").then((m) => m.viewCommand),\n code: () => import(\"./code.ts\").then((m) => m.codeCommand),\n page: () => import(\"./page.ts\").then((m) => m.pageCommand),\n sequences: () => import(\"./sequences.ts\").then((m) => m.sequencesCommand),\n add: () => import(\"./add.ts\").then((m) => m.addCommand),\n favorites: () => import(\"./favorites.ts\").then((m) => m.favoritesCommand),\n favorite: () => import(\"./favorites.ts\").then((m) => m.favoriteCommand),\n unfavorite: () => import(\"./favorites.ts\").then((m) => m.unfavoriteCommand),\n \"retry-failed\": () => import(\"./retry-failed.ts\").then((m) => m.retryFailedCommand),\n scrape: () => import(\"./scrape.ts\").then((m) => m.scrapeCommand),\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAEvB,IAAM,qBAAqB,cAAc;AAAA,EAC9C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2Bf;AAAA,EACA,aAAa;AAAA,IACX,QAAQ,MAAM,OAAO,sBAAa,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa;AAAA,IAC/D,MAAM,MAAM,OAAO,oBAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW;AAAA,IACzD,MAAM,MAAM,OAAO,oBAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW;AAAA,IACzD,MAAM,MAAM,OAAO,oBAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW;AAAA,IACzD,WAAW,MAAM,OAAO,yBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB;AAAA,IACxE,KAAK,MAAM,OAAO,mBAAU,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU;AAAA,IACtD,WAAW,MAAM,OAAO,yBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB;AAAA,IACxE,UAAU,MAAM,OAAO,yBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe;AAAA,IACtE,YAAY,MAAM,OAAO,yBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,iBAAiB;AAAA,IAC1E,gBAAgB,MAAM,OAAO,4BAAmB,EAAE,KAAK,CAAC,MAAM,EAAE,kBAAkB;AAAA,IAClF,QAAQ,MAAM,OAAO,sBAAa,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa;AAAA,EACjE;AACF,CAAC;","names":[]}
@@ -0,0 +1,95 @@
1
+ import {
2
+ handleResearchError,
3
+ writeResearchJson,
4
+ writeResearchOutput
5
+ } from "./chunk-Y362QH54.js";
6
+ import {
7
+ buildResearchQueryContext,
8
+ warnDefaults
9
+ } from "./chunk-3ZWWXAQZ.js";
10
+ import "./chunk-77DN7R35.js";
11
+ import "./chunk-XX6ZMCY5.js";
12
+ import {
13
+ apiPost
14
+ } from "./chunk-HREWXNTO.js";
15
+ import "./chunk-HLXWKMTK.js";
16
+ import "./chunk-O6QKCJE4.js";
17
+ import {
18
+ registerSchema
19
+ } from "./chunk-WOTDHRNF.js";
20
+ import "./chunk-YQSBHWOI.js";
21
+
22
+ // src/commands/research/intent.ts
23
+ import { defineCommand } from "citty";
24
+ registerSchema({
25
+ command: "research.intent",
26
+ description: "Classify Google Search intent for keywords. Determines if someone searching is looking to buy, research, or navigate. If --language is omitted, defaults to English (en). The response includes a query_context object showing which language was used.",
27
+ args: {
28
+ keywords: {
29
+ type: "string",
30
+ description: "Comma-separated keywords (min 3 chars each, max 1000 keywords)",
31
+ required: true
32
+ },
33
+ language: {
34
+ type: "string",
35
+ description: "Language code or name. Defaults to en (English) if omitted \u2014 always set this for non-English keywords",
36
+ required: false
37
+ },
38
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false }
39
+ }
40
+ });
41
+ var FIELDS = {
42
+ keyword: "The keyword analyzed",
43
+ intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
44
+ probability: "Confidence score 0.0-1.0"
45
+ };
46
+ var intentCommand = defineCommand({
47
+ meta: {
48
+ name: "intent",
49
+ description: `Classify Google Search intent for keywords. Returns intent type and confidence.
50
+
51
+ Examples:
52
+ baker research intent "buy running shoes,best running shoes 2026,how to tie running shoes"
53
+ baker research intent "crm software" --language spanish`
54
+ },
55
+ args: {
56
+ keywords: { type: "positional", description: "Comma-separated keywords", required: true },
57
+ language: { type: "string", description: "Language code or name (default: en)", required: false },
58
+ output: { type: "string", description: "Format: json|csv|md|jsonl", required: false, default: "json" },
59
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false }
60
+ },
61
+ run: async ({ args }) => {
62
+ const rawKeywords = args.keywords;
63
+ const keywords = rawKeywords.split(",").map((k) => k.trim()).filter((k) => k.length >= 3);
64
+ if (keywords.length === 0) {
65
+ writeResearchJson({
66
+ ok: false,
67
+ error: { code: "VALIDATION_ERROR", message: "Provide at least one keyword (min 3 chars each)" }
68
+ });
69
+ process.exit(1);
70
+ }
71
+ const language = args.language || void 0;
72
+ const skipCache = args["no-cache"] ? true : void 0;
73
+ const queryContext = buildResearchQueryContext(void 0, language, { skipLocation: true });
74
+ try {
75
+ const data = await apiPost("/api/research/intent", {
76
+ keywords,
77
+ language,
78
+ skipCache
79
+ });
80
+ warnDefaults(queryContext);
81
+ const format = args.output || "json";
82
+ if (format !== "json") {
83
+ writeResearchOutput(data, format);
84
+ return;
85
+ }
86
+ writeResearchJson({ ok: true, data, fields: FIELDS, query_context: queryContext });
87
+ } catch (err) {
88
+ handleResearchError(err);
89
+ }
90
+ }
91
+ });
92
+ export {
93
+ intentCommand
94
+ };
95
+ //# sourceMappingURL=intent-YJOJGNVJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/research/intent.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { buildResearchQueryContext, warnDefaults } from \"../../geo-context.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { handleResearchError, writeResearchJson, writeResearchOutput } from \"./output.ts\";\n\nregisterSchema({\n command: \"research.intent\",\n description:\n \"Classify Google Search intent for keywords. Determines if someone searching is looking to buy, research, or navigate. If --language is omitted, defaults to English (en). The response includes a query_context object showing which language was used.\",\n args: {\n keywords: {\n type: \"string\",\n description: \"Comma-separated keywords (min 3 chars each, max 1000 keywords)\",\n required: true,\n },\n language: {\n type: \"string\",\n description:\n \"Language code or name. Defaults to en (English) if omitted — always set this for non-English keywords\",\n required: false,\n },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n});\n\ninterface IntentResult {\n keyword: string;\n intent: string;\n probability: number;\n}\n\nconst FIELDS: Record<string, string> = {\n keyword: \"The keyword analyzed\",\n intent: \"Primary Google Search intent: informational, navigational, commercial, transactional\",\n probability: \"Confidence score 0.0-1.0\",\n};\n\nexport const intentCommand = defineCommand({\n meta: {\n name: \"intent\",\n description: `Classify Google Search intent for keywords. Returns intent type and confidence.\n\nExamples:\n baker research intent \"buy running shoes,best running shoes 2026,how to tie running shoes\"\n baker research intent \"crm software\" --language spanish`,\n },\n args: {\n keywords: { type: \"positional\", description: \"Comma-separated keywords\", required: true },\n language: { type: \"string\", description: \"Language code or name (default: en)\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|md|jsonl\", required: false, default: \"json\" },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n run: async ({ args }) => {\n const rawKeywords = args.keywords as string;\n const keywords = rawKeywords\n .split(\",\")\n .map((k) => k.trim())\n .filter((k) => k.length >= 3);\n\n if (keywords.length === 0) {\n writeResearchJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Provide at least one keyword (min 3 chars each)\" },\n });\n process.exit(1);\n }\n\n const language = (args.language as string) || undefined;\n const skipCache = args[\"no-cache\"] ? true : undefined;\n const queryContext = buildResearchQueryContext(undefined, language, { skipLocation: true });\n\n try {\n const data = await apiPost<IntentResult[]>(\"/api/research/intent\", {\n keywords,\n language,\n skipCache,\n });\n\n warnDefaults(queryContext);\n const format = (args.output as string) || \"json\";\n if (format !== \"json\") {\n writeResearchOutput(data as unknown as Array<Record<string, unknown>>, format);\n return;\n }\n writeResearchJson({ ok: true, data, fields: FIELDS, query_context: queryContext });\n } catch (err) {\n handleResearchError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAM9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,YAAY,EAAE,MAAM,WAAW,aAAa,uCAAuC,UAAU,MAAM;AAAA,EACrG;AACF,CAAC;AAQD,IAAM,SAAiC;AAAA,EACrC,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,aAAa;AACf;AAEO,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf;AAAA,EACA,MAAM;AAAA,IACJ,UAAU,EAAE,MAAM,cAAc,aAAa,4BAA4B,UAAU,KAAK;AAAA,IACxF,UAAU,EAAE,MAAM,UAAU,aAAa,uCAAuC,UAAU,MAAM;AAAA,IAChG,QAAQ,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,OAAO,SAAS,OAAO;AAAA,IACrG,YAAY,EAAE,MAAM,WAAW,aAAa,uCAAuC,UAAU,MAAM;AAAA,EACrG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,cAAc,KAAK;AACzB,UAAM,WAAW,YACd,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;AAE9B,QAAI,SAAS,WAAW,GAAG;AACzB,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,kDAAkD;AAAA,MAChG,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,WAAY,KAAK,YAAuB;AAC9C,UAAM,YAAY,KAAK,UAAU,IAAI,OAAO;AAC5C,UAAM,eAAe,0BAA0B,QAAW,UAAU,EAAE,cAAc,KAAK,CAAC;AAE1F,QAAI;AACF,YAAM,OAAO,MAAM,QAAwB,wBAAwB;AAAA,QACjE;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,mBAAa,YAAY;AACzB,YAAM,SAAU,KAAK,UAAqB;AAC1C,UAAI,WAAW,QAAQ;AACrB,4BAAoB,MAAmD,MAAM;AAC7E;AAAA,MACF;AACA,wBAAkB,EAAE,IAAI,MAAM,MAAM,QAAQ,QAAQ,eAAe,aAAa,CAAC;AAAA,IACnF,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,202 @@
1
+ import {
2
+ parseXApiError
3
+ } from "./chunk-M6UNISGO.js";
4
+ import {
5
+ resolveXAccountId
6
+ } from "./chunk-G7AFVTUS.js";
7
+ import {
8
+ cacheGet,
9
+ cacheSet,
10
+ writeAdsJson
11
+ } from "./chunk-BVM5IRZW.js";
12
+ import {
13
+ ApiError,
14
+ apiGet,
15
+ apiPost
16
+ } from "./chunk-HREWXNTO.js";
17
+ import "./chunk-HLXWKMTK.js";
18
+ import "./chunk-O6QKCJE4.js";
19
+ import {
20
+ registerSchema
21
+ } from "./chunk-WOTDHRNF.js";
22
+ import "./chunk-YQSBHWOI.js";
23
+
24
+ // src/commands/ads/x/stats/job.ts
25
+ import { gunzipSync } from "zlib";
26
+ import { defineCommand } from "citty";
27
+ var POLL_INTERVAL_MS = 1e4;
28
+ var DEADLINE_MS = 12 * 60 * 1e3;
29
+ var RESULT_CACHE_TTL_MS = 6 * 60 * 60 * 1e3;
30
+ registerSchema({
31
+ command: "ads.x.statsJob",
32
+ description: "Asynchronous X Ads stats job, fully synchronous from the CLI's perspective. Creates the job, polls every 10s, downloads + decompresses the gzip result, returns inline JSON. Hard deadline 12 min \u2014 must run in the background. Use this for ranges >7 days, segmented stats, or any query that hits sync limits. For fine-grained control, use `stats job-create` + `stats job-status` separately.",
33
+ args: {
34
+ "account-id": { type: "string", description: "X Ads account ID", required: false },
35
+ entity: { type: "string", description: "CAMPAIGN | LINE_ITEM | PROMOTED_TWEET | ...", required: true },
36
+ "entity-ids": { type: "string", description: "CSV of entity IDs (max 20)", required: true },
37
+ "start-time": { type: "string", description: "ISO 8601 hour-aligned start", required: true },
38
+ "end-time": { type: "string", description: "ISO 8601 hour-aligned end", required: true },
39
+ granularity: { type: "string", description: "TOTAL | DAY | HOUR", required: false },
40
+ "metric-groups": { type: "string", description: "CSV of metric groups", required: true },
41
+ placement: { type: "string", description: "ALL_ON_TWITTER | PUBLISHER_NETWORK", required: false },
42
+ "segmentation-type": { type: "string", description: "Segmentation (e.g. AGE, GENDER, LOCATIONS)", required: false },
43
+ country: { type: "string", description: "Country filter", required: false },
44
+ platform: { type: "string", description: "Platform filter", required: false },
45
+ "no-cache": { type: "boolean", description: "Skip result cache (still does the live job)", required: false }
46
+ }
47
+ });
48
+ function parseCsv(v) {
49
+ if (typeof v !== "string" || v.length === 0) return void 0;
50
+ const parts = v.split(",").map((s) => s.trim()).filter(Boolean);
51
+ return parts.length > 0 ? parts : void 0;
52
+ }
53
+ function sleep(ms) {
54
+ return new Promise((resolve) => setTimeout(resolve, ms));
55
+ }
56
+ async function downloadAndDecompress(url) {
57
+ const res = await fetch(url, { signal: AbortSignal.timeout(6e4) });
58
+ if (!res.ok) {
59
+ throw new ApiError("INTERNAL_ERROR", `Stats job download failed (${res.status})`);
60
+ }
61
+ const buf = Buffer.from(await res.arrayBuffer());
62
+ const decompressed = gunzipSync(buf);
63
+ return JSON.parse(decompressed.toString("utf-8"));
64
+ }
65
+ async function pollUntilDone(accountId, jobId) {
66
+ const deadline = Date.now() + DEADLINE_MS;
67
+ let lastLog = 0;
68
+ while (Date.now() < deadline) {
69
+ await sleep(POLL_INTERVAL_MS);
70
+ const jobs = await apiGet("/api/ads/x/stats/jobs", {
71
+ "account-id": accountId,
72
+ "job-id": jobId
73
+ });
74
+ const job = jobs[0];
75
+ if (!job) {
76
+ throw new ApiError("NOT_FOUND", `Stats job ${jobId} not found`);
77
+ }
78
+ if (job.status === "SUCCESS") {
79
+ return job;
80
+ }
81
+ if (job.status === "FAILED" || job.status === "CANCELLED") {
82
+ throw new ApiError("INTERNAL_ERROR", `Stats job ${jobId} ended in status ${job.status}`);
83
+ }
84
+ const elapsed = DEADLINE_MS - (deadline - Date.now());
85
+ if (elapsed - lastLog > 3e4) {
86
+ process.stderr.write(` polling... (${job.status}, ${Math.round(elapsed / 1e3)}s elapsed)
87
+ `);
88
+ lastLog = elapsed;
89
+ }
90
+ }
91
+ throw new ApiError("TIMEOUT", `Stats job ${jobId} did not complete within ${DEADLINE_MS / 6e4} minutes`);
92
+ }
93
+ function buildCacheKey(body) {
94
+ return `stats-job:${JSON.stringify(body)}`;
95
+ }
96
+ var statsJobCommand = defineCommand({
97
+ meta: {
98
+ name: "job",
99
+ description: `Async X Ads stats job, sync from the CLI's perspective. Creates \u2192 polls \u2192 downloads \u2192 returns.
100
+
101
+ Must run in the background (the harness enforces this).
102
+
103
+ Use this when:
104
+ \u2022 Date range > 7 days
105
+ \u2022 Need segmentation (AGE, GENDER, LOCATIONS, ...)
106
+ \u2022 Sync stats hit a limit
107
+
108
+ Examples:
109
+ baker ads x stats job --account-id 18ce53xyz --entity CAMPAIGN \\
110
+ --entity-ids abc,def --start-time 2026-04-01T00:00:00Z \\
111
+ --end-time 2026-05-01T00:00:00Z --metric-groups ENGAGEMENT,BILLING
112
+
113
+ baker ads x stats job --account-id 18ce53xyz --entity LINE_ITEM \\
114
+ --entity-ids abc --start-time 2026-04-01T00:00:00Z \\
115
+ --end-time 2026-05-01T00:00:00Z --metric-groups ENGAGEMENT \\
116
+ --segmentation-type LOCATIONS
117
+
118
+ For fine-grained control (don't wait, poll yourself), use:
119
+ baker ads x stats job-create \u2014 create + return job ID immediately
120
+ baker ads x stats job-status \u2014 poll job status / get download URL`
121
+ },
122
+ args: {
123
+ "account-id": { type: "string", description: "X Ads account ID", required: false },
124
+ entity: { type: "string", description: "Entity type", required: true },
125
+ "entity-ids": { type: "string", description: "CSV of entity IDs", required: true },
126
+ "start-time": { type: "string", description: "ISO start", required: true },
127
+ "end-time": { type: "string", description: "ISO end", required: true },
128
+ granularity: { type: "string", description: "Granularity", required: false },
129
+ "metric-groups": { type: "string", description: "Metric groups CSV", required: true },
130
+ placement: { type: "string", description: "Placement", required: false },
131
+ "segmentation-type": { type: "string", description: "Segmentation type", required: false },
132
+ country: { type: "string", description: "Country filter", required: false },
133
+ platform: { type: "string", description: "Platform filter", required: false },
134
+ "no-cache": { type: "boolean", description: "Skip result cache", required: false }
135
+ },
136
+ run: async ({ args }) => {
137
+ const accountId = await resolveXAccountId(args);
138
+ const entityIds = parseCsv(args["entity-ids"]);
139
+ const metricGroups = parseCsv(args["metric-groups"]);
140
+ if (!entityIds || !metricGroups) {
141
+ writeAdsJson({
142
+ ok: false,
143
+ error: { code: "MISSING_PARAMETER", message: "entity-ids and metric-groups are required" }
144
+ });
145
+ process.exit(1);
146
+ }
147
+ const body = {
148
+ accountId,
149
+ entity: args.entity,
150
+ entityIds,
151
+ startTime: args["start-time"],
152
+ endTime: args["end-time"],
153
+ granularity: args.granularity ?? "DAY",
154
+ metricGroups,
155
+ placement: args.placement ?? "ALL_ON_TWITTER",
156
+ segmentationType: args["segmentation-type"],
157
+ country: args.country,
158
+ platform: args.platform
159
+ };
160
+ const useCache = !args["no-cache"];
161
+ const cacheKey = buildCacheKey(body);
162
+ if (useCache) {
163
+ const cached = cacheGet("x-stats", cacheKey);
164
+ if (cached) {
165
+ process.stderr.write("Result served from cache.\n");
166
+ writeAdsJson({ ok: true, data: cached.data, cached: true });
167
+ return;
168
+ }
169
+ }
170
+ try {
171
+ process.stderr.write(`Creating X Ads stats job for entity=${body.entity}, ${entityIds.length} IDs...
172
+ `);
173
+ const job = await apiPost("/api/ads/x/stats/jobs", body);
174
+ process.stderr.write(`Job ${job.id} queued. Polling every ${POLL_INTERVAL_MS / 1e3}s...
175
+ `);
176
+ const finished = await pollUntilDone(accountId, job.id);
177
+ if (!finished.url) {
178
+ throw new ApiError("INTERNAL_ERROR", `Stats job ${job.id} succeeded but returned no download URL`);
179
+ }
180
+ process.stderr.write("Job complete. Downloading + decompressing results...\n");
181
+ const data = await downloadAndDecompress(finished.url);
182
+ if (useCache) {
183
+ cacheSet("x-stats", cacheKey, data, RESULT_CACHE_TTL_MS);
184
+ }
185
+ writeAdsJson({ ok: true, data });
186
+ } catch (err) {
187
+ if (err instanceof ApiError) {
188
+ writeAdsJson(parseXApiError(err.message, accountId));
189
+ process.exit(1);
190
+ }
191
+ writeAdsJson({
192
+ ok: false,
193
+ error: { code: "NETWORK_ERROR", message: err instanceof Error ? err.message : "Unexpected error" }
194
+ });
195
+ process.exit(1);
196
+ }
197
+ }
198
+ });
199
+ export {
200
+ statsJobCommand
201
+ };
202
+ //# sourceMappingURL=job-E2U4FS5P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/x/stats/job.ts"],"sourcesContent":["import { gunzipSync } from \"node:zlib\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet, apiPost } from \"../../../../client.ts\";\nimport { registerSchema } from \"../../../../schemas.ts\";\nimport { cacheGet, cacheSet } from \"../../cache.ts\";\nimport { writeAdsJson } from \"../../output.ts\";\nimport { parseXApiError } from \"../error-parser.ts\";\nimport { resolveXAccountId } from \"../output.ts\";\n\nconst POLL_INTERVAL_MS = 10_000;\nconst DEADLINE_MS = 12 * 60 * 1000;\nconst RESULT_CACHE_TTL_MS = 6 * 60 * 60 * 1000;\n\nregisterSchema({\n command: \"ads.x.statsJob\",\n description:\n \"Asynchronous X Ads stats job, fully synchronous from the CLI's perspective. Creates the job, polls every 10s, downloads + decompresses the gzip result, returns inline JSON. Hard deadline 12 min — must run in the background. Use this for ranges >7 days, segmented stats, or any query that hits sync limits. For fine-grained control, use `stats job-create` + `stats job-status` separately.\",\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n entity: { type: \"string\", description: \"CAMPAIGN | LINE_ITEM | PROMOTED_TWEET | ...\", required: true },\n \"entity-ids\": { type: \"string\", description: \"CSV of entity IDs (max 20)\", required: true },\n \"start-time\": { type: \"string\", description: \"ISO 8601 hour-aligned start\", required: true },\n \"end-time\": { type: \"string\", description: \"ISO 8601 hour-aligned end\", required: true },\n granularity: { type: \"string\", description: \"TOTAL | DAY | HOUR\", required: false },\n \"metric-groups\": { type: \"string\", description: \"CSV of metric groups\", required: true },\n placement: { type: \"string\", description: \"ALL_ON_TWITTER | PUBLISHER_NETWORK\", required: false },\n \"segmentation-type\": { type: \"string\", description: \"Segmentation (e.g. AGE, GENDER, LOCATIONS)\", required: false },\n country: { type: \"string\", description: \"Country filter\", required: false },\n platform: { type: \"string\", description: \"Platform filter\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip result cache (still does the live job)\", required: false },\n },\n});\n\ninterface XStatsJobShape {\n id: string;\n status: string;\n url?: string;\n expires_at?: string;\n}\n\nfunction parseCsv(v: unknown): string[] | undefined {\n if (typeof v !== \"string\" || v.length === 0) return undefined;\n const parts = v\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n return parts.length > 0 ? parts : undefined;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function downloadAndDecompress(url: string): Promise<unknown> {\n const res = await fetch(url, { signal: AbortSignal.timeout(60_000) });\n if (!res.ok) {\n throw new ApiError(\"INTERNAL_ERROR\", `Stats job download failed (${res.status})`);\n }\n const buf = Buffer.from(await res.arrayBuffer());\n const decompressed = gunzipSync(buf);\n return JSON.parse(decompressed.toString(\"utf-8\"));\n}\n\nasync function pollUntilDone(accountId: string, jobId: string): Promise<XStatsJobShape> {\n const deadline = Date.now() + DEADLINE_MS;\n let lastLog = 0;\n while (Date.now() < deadline) {\n await sleep(POLL_INTERVAL_MS);\n const jobs = await apiGet<XStatsJobShape[]>(\"/api/ads/x/stats/jobs\", {\n \"account-id\": accountId,\n \"job-id\": jobId,\n });\n const job = jobs[0];\n if (!job) {\n throw new ApiError(\"NOT_FOUND\", `Stats job ${jobId} not found`);\n }\n if (job.status === \"SUCCESS\") {\n return job;\n }\n if (job.status === \"FAILED\" || job.status === \"CANCELLED\") {\n throw new ApiError(\"INTERNAL_ERROR\", `Stats job ${jobId} ended in status ${job.status}`);\n }\n const elapsed = DEADLINE_MS - (deadline - Date.now());\n if (elapsed - lastLog > 30_000) {\n process.stderr.write(` polling... (${job.status}, ${Math.round(elapsed / 1000)}s elapsed)\\n`);\n lastLog = elapsed;\n }\n }\n throw new ApiError(\"TIMEOUT\", `Stats job ${jobId} did not complete within ${DEADLINE_MS / 60_000} minutes`);\n}\n\nfunction buildCacheKey(body: Record<string, unknown>): string {\n return `stats-job:${JSON.stringify(body)}`;\n}\n\nexport const statsJobCommand = defineCommand({\n meta: {\n name: \"job\",\n description: `Async X Ads stats job, sync from the CLI's perspective. Creates → polls → downloads → returns.\n\nMust run in the background (the harness enforces this).\n\nUse this when:\n • Date range > 7 days\n • Need segmentation (AGE, GENDER, LOCATIONS, ...)\n • Sync stats hit a limit\n\nExamples:\n baker ads x stats job --account-id 18ce53xyz --entity CAMPAIGN \\\\\n --entity-ids abc,def --start-time 2026-04-01T00:00:00Z \\\\\n --end-time 2026-05-01T00:00:00Z --metric-groups ENGAGEMENT,BILLING\n\n baker ads x stats job --account-id 18ce53xyz --entity LINE_ITEM \\\\\n --entity-ids abc --start-time 2026-04-01T00:00:00Z \\\\\n --end-time 2026-05-01T00:00:00Z --metric-groups ENGAGEMENT \\\\\n --segmentation-type LOCATIONS\n\nFor fine-grained control (don't wait, poll yourself), use:\n baker ads x stats job-create — create + return job ID immediately\n baker ads x stats job-status — poll job status / get download URL`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n entity: { type: \"string\", description: \"Entity type\", required: true },\n \"entity-ids\": { type: \"string\", description: \"CSV of entity IDs\", required: true },\n \"start-time\": { type: \"string\", description: \"ISO start\", required: true },\n \"end-time\": { type: \"string\", description: \"ISO end\", required: true },\n granularity: { type: \"string\", description: \"Granularity\", required: false },\n \"metric-groups\": { type: \"string\", description: \"Metric groups CSV\", required: true },\n placement: { type: \"string\", description: \"Placement\", required: false },\n \"segmentation-type\": { type: \"string\", description: \"Segmentation type\", required: false },\n country: { type: \"string\", description: \"Country filter\", required: false },\n platform: { type: \"string\", description: \"Platform filter\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip result cache\", required: false },\n },\n run: async ({ args }) => {\n const accountId = await resolveXAccountId(args);\n const entityIds = parseCsv(args[\"entity-ids\"]);\n const metricGroups = parseCsv(args[\"metric-groups\"]);\n if (!entityIds || !metricGroups) {\n writeAdsJson({\n ok: false,\n error: { code: \"MISSING_PARAMETER\", message: \"entity-ids and metric-groups are required\" },\n });\n process.exit(1);\n }\n\n const body = {\n accountId,\n entity: args.entity as string,\n entityIds,\n startTime: args[\"start-time\"] as string,\n endTime: args[\"end-time\"] as string,\n granularity: (args.granularity as string | undefined) ?? \"DAY\",\n metricGroups,\n placement: (args.placement as string | undefined) ?? \"ALL_ON_TWITTER\",\n segmentationType: args[\"segmentation-type\"] as string | undefined,\n country: args.country as string | undefined,\n platform: args.platform as string | undefined,\n };\n\n const useCache = !args[\"no-cache\"];\n const cacheKey = buildCacheKey(body);\n if (useCache) {\n const cached = cacheGet<unknown>(\"x-stats\", cacheKey);\n if (cached) {\n process.stderr.write(\"Result served from cache.\\n\");\n writeAdsJson({ ok: true, data: cached.data, cached: true });\n return;\n }\n }\n\n try {\n process.stderr.write(`Creating X Ads stats job for entity=${body.entity}, ${entityIds.length} IDs...\\n`);\n const job = await apiPost<XStatsJobShape>(\"/api/ads/x/stats/jobs\", body);\n process.stderr.write(`Job ${job.id} queued. Polling every ${POLL_INTERVAL_MS / 1000}s...\\n`);\n\n const finished = await pollUntilDone(accountId, job.id);\n if (!finished.url) {\n throw new ApiError(\"INTERNAL_ERROR\", `Stats job ${job.id} succeeded but returned no download URL`);\n }\n\n process.stderr.write(\"Job complete. Downloading + decompressing results...\\n\");\n const data = await downloadAndDecompress(finished.url);\n\n if (useCache) {\n cacheSet(\"x-stats\", cacheKey, data, RESULT_CACHE_TTL_MS);\n }\n\n writeAdsJson({ ok: true, data });\n } catch (err) {\n if (err instanceof ApiError) {\n writeAdsJson(parseXApiError(err.message, accountId));\n process.exit(1);\n }\n writeAdsJson({\n ok: false,\n error: { code: \"NETWORK_ERROR\", message: err instanceof Error ? err.message : \"Unexpected error\" },\n });\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}