@koda-sl/baker-cli 0.540.0 → 0.541.0-dev.b27330e67

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 (855) hide show
  1. package/README.md +11 -3
  2. package/dist/account-LKIEXMSK.js +82 -0
  3. package/dist/account-T26J6HSJ.js +82 -0
  4. package/dist/account-reads-P2WXB3NZ.js +219 -0
  5. package/dist/account-users-HB5DPMF4.js +64 -0
  6. package/dist/account-writes-QEZQCU46.js +68 -0
  7. package/dist/accounts-7D4O5QMV.js +80 -0
  8. package/dist/accounts-AOVLG52F.js +701 -0
  9. package/dist/actions-CMHAY6P5.js +55 -0
  10. package/dist/activecampaign-U65MB4UD.js +938 -0
  11. package/dist/ad-group-writes-MVQKICSC.js +172 -0
  12. package/dist/ad-groups-5OGD7PJ7.js +70 -0
  13. package/dist/ad-writes-OVD6EESQ.js +176 -0
  14. package/dist/add-AHRTXSBZ.js +107 -0
  15. package/dist/add-HGR6XPCB.js +305 -0
  16. package/dist/ads-BHZLZT3C.js +48 -0
  17. package/dist/ads-SCWCG2YI.js +79 -0
  18. package/dist/advertisers-KJDYCVU7.js +123 -0
  19. package/dist/analytics-2QTC4ZJT.js +2437 -0
  20. package/dist/analytics-RSCTSZPC.js +447 -0
  21. package/dist/animate-HV2QJWVE.js +480 -0
  22. package/dist/assign-RKN3XDEA.js +80 -0
  23. package/dist/audience-size-J5T2SOWX.js +76 -0
  24. package/dist/audiences-6N5B7CA2.js +280 -0
  25. package/dist/audit-O2R2R3BH.js +154 -0
  26. package/dist/autocomplete-7R5TRWE3.js +114 -0
  27. package/dist/avatars-URGC2PRJ.js +38 -0
  28. package/dist/bid-pricing-ZIGIQLKJ.js +103 -0
  29. package/dist/brand-7MLMDFLT.js +22 -0
  30. package/dist/brief-ZWIEUGIJ.js +543 -0
  31. package/dist/campaign-groups-Z6LNJMHY.js +99 -0
  32. package/dist/campaign-writes-EOFSYPW4.js +168 -0
  33. package/dist/campaign-writes-TFRV62VN.js +176 -0
  34. package/dist/campaigns-FHD3KMLV.js +111 -0
  35. package/dist/campaigns-KPUA4GP2.js +78 -0
  36. package/dist/campaigns-SIJKAEFM.js +113 -0
  37. package/dist/canvas-PHUXBTDM.js +46 -0
  38. package/dist/capabilities-MVOMUZVT.js +147 -0
  39. package/dist/catalog-JVBRY2U6.js +66 -0
  40. package/dist/catalogs-QYAAPTMV.js +130 -0
  41. package/dist/changes-2UFWG4T3.js +143 -0
  42. package/dist/chatgpt-KJAUJBRK.js +47 -0
  43. package/dist/chats-ETYNGJ3D.js +449 -0
  44. package/dist/chats-ETYNGJ3D.js.map +1 -0
  45. package/dist/check-G6IGCJKG.js +107 -0
  46. package/dist/chunk-274UO7N7.js +344 -0
  47. package/dist/chunk-27KV27F6.js +169 -0
  48. package/dist/chunk-2OCUXPWT.js +1919 -0
  49. package/dist/chunk-3N7YWOTX.js +438 -0
  50. package/dist/chunk-4L4SG26L.js +429 -0
  51. package/dist/chunk-6OIKNJ7G.js +26 -0
  52. package/dist/chunk-7OLJBIKI.js +494 -0
  53. package/dist/chunk-7XSVJFA3.js +170 -0
  54. package/dist/chunk-AHN5UNQP.js +910 -0
  55. package/dist/chunk-AQBJ3XRD.js +1902 -0
  56. package/dist/chunk-AUO4QNMI.js +148 -0
  57. package/dist/chunk-B5MJXVBP.js +66 -0
  58. package/dist/chunk-B6WOWVAA.js +285 -0
  59. package/dist/chunk-BF32BRMX.js +98 -0
  60. package/dist/chunk-BNO3EFGR.js +4266 -0
  61. package/dist/chunk-BNO3EFGR.js.map +1 -0
  62. package/dist/chunk-CATPBEZ3.js +51 -0
  63. package/dist/chunk-DBLOEIJ2.js +5368 -0
  64. package/dist/chunk-DQIPDAPH.js +274 -0
  65. package/dist/chunk-E4JZV7ZY.js +455 -0
  66. package/dist/chunk-F3CZFUXZ.js +3187 -0
  67. package/dist/chunk-F3CZFUXZ.js.map +1 -0
  68. package/dist/chunk-FPS7WKLY.js +207 -0
  69. package/dist/chunk-FSHIEGAY.js +7725 -0
  70. package/dist/chunk-FY6CMZDG.js +831 -0
  71. package/dist/chunk-GCFC2MNR.js +228 -0
  72. package/dist/chunk-H5P4XNTR.js +1646 -0
  73. package/dist/chunk-H7TJX6MJ.js +19 -0
  74. package/dist/chunk-HMFIOE4P.js +63 -0
  75. package/dist/chunk-HMZ6FUXY.js +61 -0
  76. package/dist/chunk-HN2W55DC.js +156 -0
  77. package/dist/chunk-HPS7HLN4.js +930 -0
  78. package/dist/chunk-HXLCETLB.js +3510 -0
  79. package/dist/chunk-HZQ64QEY.js +479 -0
  80. package/dist/chunk-I62QW2UL.js +197 -0
  81. package/dist/chunk-KAUW3OFC.js +843 -0
  82. package/dist/chunk-KFHW5TCM.js +167 -0
  83. package/dist/chunk-KT2YKHCH.js +319 -0
  84. package/dist/chunk-LFWGMR3F.js +91 -0
  85. package/dist/chunk-LNEUE4BR.js +592 -0
  86. package/dist/chunk-MDBRRR3J.js +191 -0
  87. package/dist/chunk-MHRFRSQ6.js +676 -0
  88. package/dist/chunk-N26ZASAC.js +275 -0
  89. package/dist/chunk-NPGI5DXP.js +89 -0
  90. package/dist/chunk-NQF5U6FX.js +150 -0
  91. package/dist/chunk-NTOCO72A.js +297 -0
  92. package/dist/chunk-OATKGUUI.js +103 -0
  93. package/dist/chunk-P2C6X574.js +163 -0
  94. package/dist/chunk-POI76GQV.js +57 -0
  95. package/dist/chunk-PZ3EFXL7.js +203 -0
  96. package/dist/chunk-QCONJUK6.js +387 -0
  97. package/dist/chunk-RAO7FTMY.js +64 -0
  98. package/dist/chunk-RM5T4MA6.js +783 -0
  99. package/dist/chunk-RRH5QWVS.js +91 -0
  100. package/dist/chunk-SIKCVWM3.js +76 -0
  101. package/dist/chunk-SPBUHC2K.js +224 -0
  102. package/dist/chunk-VAWAFQW3.js +142 -0
  103. package/dist/chunk-VFESCAO4.js +249 -0
  104. package/dist/chunk-VLE433LA.js +547 -0
  105. package/dist/chunk-W2MHGOUZ.js +2209 -0
  106. package/dist/chunk-WM6JHUPY.js +5471 -0
  107. package/dist/chunk-XAHY53IO.js +857 -0
  108. package/dist/chunk-XJ62F6EA.js +392 -0
  109. package/dist/chunk-XMHTLWWE.js +225 -0
  110. package/dist/chunk-XPXHJ6EP.js +24026 -0
  111. package/dist/chunk-XPXHJ6EP.js.map +1 -0
  112. package/dist/chunk-Y3ESEQRI.js +46 -0
  113. package/dist/chunk-YAX5CGUY.js +638 -0
  114. package/dist/chunk-YPYI3YBK.js +377 -0
  115. package/dist/chunk-YXCSJQKQ.js +23 -0
  116. package/dist/chunk-Z6ZYGDCQ.js +8954 -0
  117. package/dist/chunk-ZJOXRK2G.js +1518 -0
  118. package/dist/chunk-ZPHHJPDG.js +131 -0
  119. package/dist/chunk-ZV4K6E3S.js +604 -0
  120. package/dist/claim-VN6RHORQ.js +200 -0
  121. package/dist/cli.js +31 -31
  122. package/dist/companies-UNXZLC4T.js +198 -0
  123. package/dist/company-E7J2I4B5.js +308 -0
  124. package/dist/complete-TI6ME7P2.js +84 -0
  125. package/dist/connect-VYCZ7APH.js +45 -0
  126. package/dist/conversation-AVJMT6NK.js +96 -0
  127. package/dist/conversion-report-GK2FUT2R.js +127 -0
  128. package/dist/conversion-upload-command-Q7LZFFZL.js +439 -0
  129. package/dist/conversion-writes-STESFLTB.js +122 -0
  130. package/dist/conversions-6KDF5AVY.js +140 -0
  131. package/dist/conversions-JBRU7CGB.js +78 -0
  132. package/dist/create-7R5HTOI2.js +135 -0
  133. package/dist/create-BGIE2YTE.js +239 -0
  134. package/dist/create-HI53LEYE.js +62 -0
  135. package/dist/create-YVKJC5IT.js +210 -0
  136. package/dist/creatives-ACU2HGZW.js +223 -0
  137. package/dist/creatives-ISYALGKS.js +58 -0
  138. package/dist/credentials-UCROYYPD.js +290 -0
  139. package/dist/critique-SGEKRORA.js +232 -0
  140. package/dist/critique-SJLBIGD2.js +1451 -0
  141. package/dist/crm-OZ626TTR.js +227 -0
  142. package/dist/crm-X7FX34QY.js +323 -0
  143. package/dist/currency-HB3MFXLJ.js +88 -0
  144. package/dist/customers-I3T6HJD4.js +59 -0
  145. package/dist/delete-24S5ICGH.js +67 -0
  146. package/dist/delete-ICXIKJZF.js +69 -0
  147. package/dist/delete-RWZCVPYV.js +57 -0
  148. package/dist/demographics-PUJKNWCF.js +141 -0
  149. package/dist/discard-4GLM3TVC.js +69 -0
  150. package/dist/discover-DLGO3VW6.js +172 -0
  151. package/dist/domain-A4IVVFI6.js +101 -0
  152. package/dist/download-KIOTQW3Z.js +172 -0
  153. package/dist/draft-4MKYX4VU.js +396 -0
  154. package/dist/draft-6QUGODCB.js +310 -0
  155. package/dist/draft-AMSBOSM2.js +335 -0
  156. package/dist/draft-I7HIRQ6F.js +283 -0
  157. package/dist/draft-IB5A3RFD.js +220 -0
  158. package/dist/engine/index.js +8 -8
  159. package/dist/experiments-NW4GVPAF.js +236 -0
  160. package/dist/facets-SIY7OICY.js +117 -0
  161. package/dist/feedback-LUNPSQEO.js +115 -0
  162. package/dist/feedback-record-ML67WVIX.js +269 -0
  163. package/dist/fetch-T7OO6FDT.js +179 -0
  164. package/dist/fit-63FKT2JJ.js +65 -0
  165. package/dist/flows-RWQSQKUL.js +250 -0
  166. package/dist/fonts-UQ6ISHO3.js +39 -0
  167. package/dist/forecast-AODSMD7S.js +169 -0
  168. package/dist/forecast-JTKQQYMN.js +121 -0
  169. package/dist/funnel-J5IJQPUP.js +397 -0
  170. package/dist/generate-HSDSCKDW.js +263 -0
  171. package/dist/get-VLS22SZR.js +82 -0
  172. package/dist/get-X6TC6UBK.js +59 -0
  173. package/dist/google-FOZYYKNY.js +3267 -0
  174. package/dist/google-ads-HBNPBUR4.js +198 -0
  175. package/dist/history-E25YCUQO.js +153 -0
  176. package/dist/history-SHQVK5I7.js +69 -0
  177. package/dist/history-ZNPAN36E.js +102 -0
  178. package/dist/hubspot-WFJ22XGN.js +782 -0
  179. package/dist/ideas-FCL5SDI4.js +45 -0
  180. package/dist/images-SXBR3MLH.js +92 -0
  181. package/dist/ingest-UJBMV7PZ.js +27 -0
  182. package/dist/ingest-YRWIO6DV.js +123 -0
  183. package/dist/insights-7NC2JFXU.js +658 -0
  184. package/dist/insights-7NC2JFXU.js.map +1 -0
  185. package/dist/insights-UMPXHRKD.js +132 -0
  186. package/dist/inspect-I2CJDQSA.js +192 -0
  187. package/dist/intent-NBP5IDND.js +95 -0
  188. package/dist/keyword-gap-67UJ2LDD.js +130 -0
  189. package/dist/keyword-metrics-U6IWGT4N.js +200 -0
  190. package/dist/keywords-for-site-PXID3WEP.js +131 -0
  191. package/dist/landing-PIQYR6XI.js +28 -0
  192. package/dist/languages-TM7SHGRO.js +40 -0
  193. package/dist/leads-DOFRCD7J.js +115 -0
  194. package/dist/learn-VMNUQL6D.js +207 -0
  195. package/dist/line-item-writes-6MCXCXYM.js +211 -0
  196. package/dist/line-items-X3GEB5P7.js +107 -0
  197. package/dist/link-TX5PWJBH.js +67 -0
  198. package/dist/linkedin-3DYXRHL7.js +1328 -0
  199. package/dist/linkedin-person-TP7DAJST.js +139 -0
  200. package/dist/list-2WFSHJ2I.js +154 -0
  201. package/dist/list-GMMNLVCA.js +306 -0
  202. package/dist/list-I77SLBPO.js +67 -0
  203. package/dist/locations-HAXZUHJP.js +40 -0
  204. package/dist/locations-JFBM4XBL.js +69 -0
  205. package/dist/log-3HSJ3RYY.js +95 -0
  206. package/dist/make-OKIBB4LM.js +1367 -0
  207. package/dist/map-O63QGACI.js +436 -0
  208. package/dist/mcp-GJEZ37AM.js +729 -0
  209. package/dist/media-sources-KE6XXCTY.js +35 -0
  210. package/dist/members-WF453RSC.js +47 -0
  211. package/dist/meta-6IFYEOZL.js +122 -0
  212. package/dist/metrics-XWHE4LYQ.js +152 -0
  213. package/dist/models-3C6BWHEC.js +155 -0
  214. package/dist/normalize-HWMMP6LX.js +144 -0
  215. package/dist/options-XGYNQCQM.js +125 -0
  216. package/dist/organization-X27LDCZU.js +949 -0
  217. package/dist/performance-JLQIJK4V.js +27 -0
  218. package/dist/performance-XYGEV4TX.js +5565 -0
  219. package/dist/pixels-PMPL63ON.js +62 -0
  220. package/dist/promoted-tweet-writes-7DGO5Z2G.js +183 -0
  221. package/dist/promoted-tweets-SPBZXSYI.js +119 -0
  222. package/dist/publish-RRJRO5DC.js +344 -0
  223. package/dist/query-CTQGGPXW.js +62 -0
  224. package/dist/reddit-OCRVXWJC.js +29 -0
  225. package/dist/refresh-M6BXIMQD.js +97 -0
  226. package/dist/release-ZRKZEBEB.js +63 -0
  227. package/dist/relevant-pages-NPUSAV3K.js +99 -0
  228. package/dist/remove-JW3RRNB6.js +53 -0
  229. package/dist/reopen-G6ZE5YNP.js +66 -0
  230. package/dist/rerun-OKOYKQXC.js +96 -0
  231. package/dist/research-DZZBRX4V.js +265 -0
  232. package/dist/research-NLZ34525.js +72 -0
  233. package/dist/reset-ABZVGJE6.js +57 -0
  234. package/dist/reset-JYER2WPC.js +57 -0
  235. package/dist/resolve-EH3ONOYE.js +124 -0
  236. package/dist/retry-LKJWY5BC.js +63 -0
  237. package/dist/retry-VY76DPS5.js +65 -0
  238. package/dist/revenue-7GIOE3TG.js +91 -0
  239. package/dist/rules-NUNJBT6R.js +99 -0
  240. package/dist/rules-add-7FB67IDD.js +465 -0
  241. package/dist/run-3GV2FYWG.js +71 -0
  242. package/dist/run-OVOXZUXN.js +69 -0
  243. package/dist/scaffold-ad-7D5EUDU7.js +1513 -0
  244. package/dist/scaffold-static-ad-TWF2RRM2.js +1011 -0
  245. package/dist/scaffold-video-4P2ONEQV.js +885 -0
  246. package/dist/schedule-XQ725JG6.js +64 -0
  247. package/dist/scheduled-agents-KBSD55GW.js +55 -0
  248. package/dist/schema-WJVWY4IA.js +135 -0
  249. package/dist/search-KQGMLU2Z.js +177 -0
  250. package/dist/select-CLD5MFCK.js +110 -0
  251. package/dist/set-prompt-COD76I6E.js +199 -0
  252. package/dist/setup-links-H5L5CJJN.js +144 -0
  253. package/dist/shopify-M2I65ZB5.js +3958 -0
  254. package/dist/site-AIJK3MNO.js +180 -0
  255. package/dist/sources-JRMCBVLK.js +457 -0
  256. package/dist/sources-YVDTULK6.js +30 -0
  257. package/dist/stale-AVBULN3A.js +90 -0
  258. package/dist/status-RXA4BBXZ.js +65 -0
  259. package/dist/studio-C2UVCTDD.js +49 -0
  260. package/dist/sync-CMYHAJSZ.js +57 -0
  261. package/dist/sync-definition-IKI2NFUO.js +70 -0
  262. package/dist/tags-5IVIDOPC.js +26 -0
  263. package/dist/tags-5L5MV6XZ.js +23 -0
  264. package/dist/tags-LIG4SXDB.js +23 -0
  265. package/dist/tags-LRFFVAZ3.js +227 -0
  266. package/dist/tags-VMMVSG6J.js +23 -0
  267. package/dist/targeting-criteria-AMVFYZ2H.js +113 -0
  268. package/dist/targets-RE24B2LL.js +106 -0
  269. package/dist/testimonials-FWJRO4MB.js +32 -0
  270. package/dist/themes-32CUPT4M.js +95 -0
  271. package/dist/top-companies-6GI6AWGA.js +111 -0
  272. package/dist/transcript-XMWBCLQO.js +165 -0
  273. package/dist/translate-2UYIIMEG.js +603 -0
  274. package/dist/triggers-WCI5DERM.js +144 -0
  275. package/dist/unlink-MM23NOTI.js +70 -0
  276. package/dist/unstage-YQXFED4J.js +88 -0
  277. package/dist/update-3BGBYU5R.js +155 -0
  278. package/dist/update-A53QG3XM.js +66 -0
  279. package/dist/update-S2CJ5FNS.js +192 -0
  280. package/dist/update-VMN5BHTP.js +101 -0
  281. package/dist/upload-VT7NPRAM.js +130 -0
  282. package/dist/url-options-JJIA77MZ.js +131 -0
  283. package/dist/url-params-RFMWR2PZ.js +101 -0
  284. package/dist/validate-KMY5ZVQX.js +125 -0
  285. package/dist/videos-DZT3TMKO.js +41 -0
  286. package/dist/viewer-check-QHXKGGH2.js +83 -0
  287. package/dist/web-HP45GOIL.js +143 -0
  288. package/dist/winning-ads-ZJVGEPZ7.js +86 -0
  289. package/dist/write-commands-YKWSFUO5.js +1525 -0
  290. package/dist/x-V76UQMEM.js +47 -0
  291. package/package.json +1 -1
  292. package/dist/account-JT5DRUNO.js +0 -82
  293. package/dist/account-V5XHQY2D.js +0 -82
  294. package/dist/account-reads-CPL3HLZ5.js +0 -219
  295. package/dist/account-users-AZBPCE3S.js +0 -64
  296. package/dist/account-writes-MFKCVMMV.js +0 -68
  297. package/dist/accounts-CZOZDD5I.js +0 -701
  298. package/dist/accounts-PQZRFWGU.js +0 -80
  299. package/dist/actions-7ELREPKR.js +0 -55
  300. package/dist/activecampaign-VOKDHWP7.js +0 -938
  301. package/dist/ad-group-writes-WFYPFO7R.js +0 -172
  302. package/dist/ad-groups-IPY3TJUX.js +0 -70
  303. package/dist/ad-writes-LDNNN72V.js +0 -176
  304. package/dist/add-NZE6J7AI.js +0 -107
  305. package/dist/add-RMKXE2ZO.js +0 -305
  306. package/dist/ads-NTDJRTEG.js +0 -79
  307. package/dist/ads-SJ6T366Q.js +0 -48
  308. package/dist/advertisers-E27BJ2FV.js +0 -123
  309. package/dist/analytics-PJ7JR4VU.js +0 -447
  310. package/dist/analytics-TBEIK33Y.js +0 -2437
  311. package/dist/animate-CQON6SZE.js +0 -480
  312. package/dist/assign-MTHCAP54.js +0 -80
  313. package/dist/audience-size-AXULID2E.js +0 -76
  314. package/dist/audiences-KRI7E7FY.js +0 -280
  315. package/dist/audit-YQIL6UGM.js +0 -154
  316. package/dist/autocomplete-S2WRGXOM.js +0 -114
  317. package/dist/avatars-H5RIENFM.js +0 -38
  318. package/dist/bid-pricing-5RTQDTK3.js +0 -103
  319. package/dist/brand-YCYKIUIL.js +0 -22
  320. package/dist/brief-AEICFSR7.js +0 -543
  321. package/dist/campaign-groups-PZ4J25O5.js +0 -99
  322. package/dist/campaign-writes-2OSYV72Z.js +0 -168
  323. package/dist/campaign-writes-DAL4EFIV.js +0 -176
  324. package/dist/campaigns-CDPQ2RDY.js +0 -111
  325. package/dist/campaigns-TKQDXU5H.js +0 -78
  326. package/dist/campaigns-XFIW7ODL.js +0 -113
  327. package/dist/canvas-FWG5JGG4.js +0 -46
  328. package/dist/capabilities-Y2UYDZZO.js +0 -147
  329. package/dist/catalog-6CXOEKBI.js +0 -66
  330. package/dist/catalogs-ETVY5OZ5.js +0 -130
  331. package/dist/changes-2P2P4LAU.js +0 -143
  332. package/dist/chatgpt-GINMQJBI.js +0 -47
  333. package/dist/chats-HNOUUEII.js +0 -442
  334. package/dist/chats-HNOUUEII.js.map +0 -1
  335. package/dist/check-UHV27GZU.js +0 -107
  336. package/dist/chunk-24SPBLU4.js +0 -1646
  337. package/dist/chunk-2AJ5UNOF.js +0 -131
  338. package/dist/chunk-2OEECI2R.js +0 -51
  339. package/dist/chunk-2Y3VZILY.js +0 -98
  340. package/dist/chunk-337ZJ3PX.js +0 -377
  341. package/dist/chunk-35T6LCB2.js +0 -197
  342. package/dist/chunk-3RWSYI6N.js +0 -63
  343. package/dist/chunk-3V4R55B4.js +0 -163
  344. package/dist/chunk-3YHOU5IA.js +0 -169
  345. package/dist/chunk-4KGQZHCV.js +0 -224
  346. package/dist/chunk-4PWC4KAK.js +0 -843
  347. package/dist/chunk-5VVXF3OS.js +0 -676
  348. package/dist/chunk-7E4S2NBD.js +0 -170
  349. package/dist/chunk-7Y6CPXM5.js +0 -2209
  350. package/dist/chunk-A4TWHQEF.js +0 -191
  351. package/dist/chunk-AMHVCMBW.js +0 -3510
  352. package/dist/chunk-AUGAC2OT.js +0 -319
  353. package/dist/chunk-BQSDW6FT.js +0 -344
  354. package/dist/chunk-C54JXXV3.js +0 -24026
  355. package/dist/chunk-C54JXXV3.js.map +0 -1
  356. package/dist/chunk-C6CWI43A.js +0 -392
  357. package/dist/chunk-CISJ7CUA.js +0 -207
  358. package/dist/chunk-CKT5SR7F.js +0 -103
  359. package/dist/chunk-CTBDVZ5E.js +0 -274
  360. package/dist/chunk-DR7PLON5.js +0 -1902
  361. package/dist/chunk-EPW33OQJ.js +0 -203
  362. package/dist/chunk-F4QYUDXE.js +0 -91
  363. package/dist/chunk-FKGYEK54.js +0 -387
  364. package/dist/chunk-FSLSISPI.js +0 -46
  365. package/dist/chunk-GT76FWES.js +0 -1919
  366. package/dist/chunk-GTIQUOYC.js +0 -148
  367. package/dist/chunk-GZN2RP7D.js +0 -494
  368. package/dist/chunk-H23Q55DS.js +0 -604
  369. package/dist/chunk-H27R5IVQ.js +0 -64
  370. package/dist/chunk-HDYJ6YVI.js +0 -930
  371. package/dist/chunk-HHQYP6RM.js +0 -783
  372. package/dist/chunk-HOZI7GOT.js +0 -66
  373. package/dist/chunk-IJ5DWALA.js +0 -225
  374. package/dist/chunk-JAC6JVCI.js +0 -26
  375. package/dist/chunk-JEMYDBKC.js +0 -547
  376. package/dist/chunk-KGZXQIM5.js +0 -19
  377. package/dist/chunk-KSECMOHE.js +0 -857
  378. package/dist/chunk-LE33VXJV.js +0 -831
  379. package/dist/chunk-LE6VTYWQ.js +0 -910
  380. package/dist/chunk-MCJ5I5LR.js +0 -3187
  381. package/dist/chunk-MCJ5I5LR.js.map +0 -1
  382. package/dist/chunk-MI3J4O42.js +0 -297
  383. package/dist/chunk-MIOE5IN3.js +0 -479
  384. package/dist/chunk-MMUT4W5L.js +0 -438
  385. package/dist/chunk-MZPS46OR.js +0 -76
  386. package/dist/chunk-N3T4ALXV.js +0 -8954
  387. package/dist/chunk-NGXZQESA.js +0 -5471
  388. package/dist/chunk-NPZ5VWFE.js +0 -592
  389. package/dist/chunk-NQ5O2NCJ.js +0 -5368
  390. package/dist/chunk-OQGE5GSP.js +0 -429
  391. package/dist/chunk-QIZY55Z6.js +0 -89
  392. package/dist/chunk-RD63FPG6.js +0 -150
  393. package/dist/chunk-RW32BYY3.js +0 -1518
  394. package/dist/chunk-RZUXHIRN.js +0 -23
  395. package/dist/chunk-S4PK55OH.js +0 -156
  396. package/dist/chunk-T2JHHSPI.js +0 -142
  397. package/dist/chunk-TFCZOTQ5.js +0 -249
  398. package/dist/chunk-TI4UL56R.js +0 -4266
  399. package/dist/chunk-TI4UL56R.js.map +0 -1
  400. package/dist/chunk-TML65SGQ.js +0 -455
  401. package/dist/chunk-TP6QJATO.js +0 -57
  402. package/dist/chunk-TQDZQT6U.js +0 -167
  403. package/dist/chunk-UIPSSTMA.js +0 -228
  404. package/dist/chunk-UREDSNQS.js +0 -7725
  405. package/dist/chunk-VWKFQ4ZY.js +0 -285
  406. package/dist/chunk-WDPOXO34.js +0 -91
  407. package/dist/chunk-YFIWCMVC.js +0 -638
  408. package/dist/chunk-YFRNONXL.js +0 -275
  409. package/dist/chunk-ZBP735CV.js +0 -61
  410. package/dist/claim-65UCFSNU.js +0 -200
  411. package/dist/companies-PUU5HQPO.js +0 -198
  412. package/dist/company-P64YHCCF.js +0 -308
  413. package/dist/complete-D7LIEFAQ.js +0 -84
  414. package/dist/connect-OJEK3NSN.js +0 -45
  415. package/dist/conversation-S2I75E4X.js +0 -96
  416. package/dist/conversion-report-JNWBTLA5.js +0 -127
  417. package/dist/conversion-upload-command-6OKMSO2T.js +0 -439
  418. package/dist/conversion-writes-2VOWP4RD.js +0 -122
  419. package/dist/conversions-JGIBYLK5.js +0 -78
  420. package/dist/conversions-XQLNBKCS.js +0 -140
  421. package/dist/create-DXRRIN2L.js +0 -210
  422. package/dist/create-UBQF3F43.js +0 -239
  423. package/dist/create-URSL4J7P.js +0 -62
  424. package/dist/create-WTG4PLR7.js +0 -135
  425. package/dist/creatives-KHU3PAMN.js +0 -223
  426. package/dist/creatives-MXMQDNL6.js +0 -58
  427. package/dist/credentials-CMOO7W6D.js +0 -290
  428. package/dist/critique-455CFJQ2.js +0 -1451
  429. package/dist/critique-MABDKWHC.js +0 -232
  430. package/dist/crm-LKQBWL7L.js +0 -227
  431. package/dist/crm-YAFF2LM2.js +0 -323
  432. package/dist/currency-JDAVYMD3.js +0 -88
  433. package/dist/customers-XQJTF7HT.js +0 -59
  434. package/dist/delete-7OTBPZGJ.js +0 -67
  435. package/dist/delete-ROD2G6IL.js +0 -57
  436. package/dist/delete-ZRMD5TG4.js +0 -69
  437. package/dist/demographics-HM2TV4T2.js +0 -141
  438. package/dist/discard-55OBCTIR.js +0 -69
  439. package/dist/discover-VEHKBNCY.js +0 -172
  440. package/dist/domain-226C6VIF.js +0 -101
  441. package/dist/download-UMEQIQKE.js +0 -172
  442. package/dist/draft-DUAFRL2G.js +0 -283
  443. package/dist/draft-MPSQIDMM.js +0 -310
  444. package/dist/draft-S2QTWVIA.js +0 -220
  445. package/dist/draft-TUTXQNHP.js +0 -335
  446. package/dist/draft-V7VGPJK4.js +0 -396
  447. package/dist/experiments-6UHDVVII.js +0 -236
  448. package/dist/facets-BZ5AFGHD.js +0 -117
  449. package/dist/feedback-A5DR3IMR.js +0 -115
  450. package/dist/feedback-record-KABFVNHS.js +0 -269
  451. package/dist/fetch-XNE63FNS.js +0 -179
  452. package/dist/fit-T2D4E52B.js +0 -65
  453. package/dist/flows-P5T4LNJ2.js +0 -250
  454. package/dist/fonts-U3NGQYJN.js +0 -39
  455. package/dist/forecast-TG5RS5DG.js +0 -121
  456. package/dist/forecast-UYBYSH3Y.js +0 -169
  457. package/dist/funnel-D6YXU7C4.js +0 -397
  458. package/dist/generate-QG7GX6WO.js +0 -263
  459. package/dist/get-E4VOTCE6.js +0 -59
  460. package/dist/get-TISXCTDV.js +0 -82
  461. package/dist/google-UQLYCYSX.js +0 -3267
  462. package/dist/google-ads-GBX5YHPT.js +0 -198
  463. package/dist/history-BRWYSJQL.js +0 -153
  464. package/dist/history-M2KVZ2E7.js +0 -102
  465. package/dist/history-XOB23MLX.js +0 -69
  466. package/dist/hubspot-YEZGTOM2.js +0 -782
  467. package/dist/ideas-J6GCTQ6U.js +0 -45
  468. package/dist/images-55KBTRVO.js +0 -92
  469. package/dist/ingest-LKGF5E5V.js +0 -27
  470. package/dist/ingest-QNV3B2ST.js +0 -123
  471. package/dist/insights-7CQJOBWX.js +0 -132
  472. package/dist/insights-UOO6OK3U.js +0 -439
  473. package/dist/insights-UOO6OK3U.js.map +0 -1
  474. package/dist/inspect-WNPQXU4H.js +0 -192
  475. package/dist/intent-P75BDP4H.js +0 -95
  476. package/dist/keyword-gap-54F6CZLM.js +0 -130
  477. package/dist/keyword-metrics-SJLYED7I.js +0 -200
  478. package/dist/keywords-for-site-CY2XUFR4.js +0 -131
  479. package/dist/landing-DZLICA3P.js +0 -28
  480. package/dist/languages-PEGOE365.js +0 -40
  481. package/dist/leads-WBZP37CG.js +0 -115
  482. package/dist/learn-QNOTY4JA.js +0 -207
  483. package/dist/line-item-writes-6RNUOFKK.js +0 -211
  484. package/dist/line-items-YOBU6DYQ.js +0 -107
  485. package/dist/link-7PEVIIUA.js +0 -67
  486. package/dist/linkedin-YYNBLBM3.js +0 -1328
  487. package/dist/linkedin-person-JGQTT54I.js +0 -139
  488. package/dist/list-H2XBHKQK.js +0 -154
  489. package/dist/list-IFVBO2E2.js +0 -306
  490. package/dist/list-N5FHLG2Z.js +0 -67
  491. package/dist/locations-MXWGZIGU.js +0 -69
  492. package/dist/locations-SHYN5J4Q.js +0 -40
  493. package/dist/log-HCWZ6C4R.js +0 -95
  494. package/dist/make-VZKIB23N.js +0 -1367
  495. package/dist/map-RFMJ4AF7.js +0 -436
  496. package/dist/mcp-VRFT3QJW.js +0 -729
  497. package/dist/media-sources-NTZRJGFU.js +0 -35
  498. package/dist/members-EOIF2XN3.js +0 -47
  499. package/dist/meta-MBW5LM5V.js +0 -122
  500. package/dist/metrics-25LYUEB7.js +0 -152
  501. package/dist/models-EU3NO4IY.js +0 -155
  502. package/dist/normalize-UQIZEJHT.js +0 -144
  503. package/dist/options-Y6JI2ZVZ.js +0 -125
  504. package/dist/organization-TO2V7AWX.js +0 -949
  505. package/dist/performance-V26JUNGC.js +0 -27
  506. package/dist/performance-YAUOH75F.js +0 -5565
  507. package/dist/pixels-NLH2PN6Q.js +0 -62
  508. package/dist/promoted-tweet-writes-3SLFZQDA.js +0 -183
  509. package/dist/promoted-tweets-3WRSJYKK.js +0 -119
  510. package/dist/publish-T6ITLSJA.js +0 -344
  511. package/dist/query-SRJXJVDY.js +0 -62
  512. package/dist/reddit-O2TNBMD6.js +0 -29
  513. package/dist/refresh-N726O36Z.js +0 -97
  514. package/dist/release-A5HKTUMV.js +0 -63
  515. package/dist/relevant-pages-VJHTUJMB.js +0 -99
  516. package/dist/remove-BHUYRNRU.js +0 -53
  517. package/dist/reopen-TTDYNANZ.js +0 -66
  518. package/dist/rerun-KFTQ6Y64.js +0 -96
  519. package/dist/research-FISSUVIK.js +0 -72
  520. package/dist/research-YWON4E4H.js +0 -265
  521. package/dist/reset-SSNHRP5C.js +0 -57
  522. package/dist/reset-VTNVCE23.js +0 -57
  523. package/dist/resolve-375FALNN.js +0 -124
  524. package/dist/retry-PNS6RWJ6.js +0 -63
  525. package/dist/retry-TLGYZ6RJ.js +0 -65
  526. package/dist/revenue-6L2AY7L7.js +0 -91
  527. package/dist/rules-F6J4V7PZ.js +0 -99
  528. package/dist/rules-add-7UI5A3MJ.js +0 -465
  529. package/dist/run-B77D2TGX.js +0 -71
  530. package/dist/run-UN4HXEGZ.js +0 -69
  531. package/dist/scaffold-ad-74CEBCRR.js +0 -1513
  532. package/dist/scaffold-static-ad-2IMVWNYB.js +0 -1011
  533. package/dist/scaffold-video-JDCX3BIT.js +0 -885
  534. package/dist/schedule-WK5MRYCJ.js +0 -64
  535. package/dist/scheduled-agents-2NTFBABN.js +0 -55
  536. package/dist/schema-BBC6AARZ.js +0 -135
  537. package/dist/search-KC4QRMU2.js +0 -177
  538. package/dist/select-SZAJR4QY.js +0 -110
  539. package/dist/set-prompt-KHB4JJV2.js +0 -199
  540. package/dist/setup-links-SJVDPNOF.js +0 -144
  541. package/dist/shopify-MODNP6LT.js +0 -3958
  542. package/dist/site-5K73B2MI.js +0 -180
  543. package/dist/sources-2E6EK6YK.js +0 -457
  544. package/dist/sources-S7LAV2EP.js +0 -30
  545. package/dist/stale-3IPYZ7BI.js +0 -90
  546. package/dist/status-6QTJSJN7.js +0 -65
  547. package/dist/studio-4QOFG7MQ.js +0 -49
  548. package/dist/sync-37P7TZQH.js +0 -57
  549. package/dist/sync-definition-CDQCNCU2.js +0 -70
  550. package/dist/tags-2VZUCNNH.js +0 -26
  551. package/dist/tags-CBINFGAN.js +0 -227
  552. package/dist/tags-FVRIF3XS.js +0 -23
  553. package/dist/tags-OB24PQKE.js +0 -23
  554. package/dist/tags-SS7FE52N.js +0 -23
  555. package/dist/targeting-criteria-ECC662DL.js +0 -113
  556. package/dist/targets-GIRHNZ4W.js +0 -106
  557. package/dist/testimonials-IEJ24MH7.js +0 -32
  558. package/dist/themes-JBX6W4SP.js +0 -95
  559. package/dist/top-companies-POSJMWSB.js +0 -111
  560. package/dist/transcript-FCKURXTT.js +0 -165
  561. package/dist/translate-F4B3WEJO.js +0 -603
  562. package/dist/triggers-DRAKT5QB.js +0 -144
  563. package/dist/unlink-OEUJXG64.js +0 -70
  564. package/dist/unstage-F362CYM7.js +0 -88
  565. package/dist/update-4CVNP3B5.js +0 -66
  566. package/dist/update-BAE3BEEW.js +0 -155
  567. package/dist/update-UME7HHOC.js +0 -101
  568. package/dist/update-XOSKQEMK.js +0 -192
  569. package/dist/upload-BABKWQIN.js +0 -130
  570. package/dist/url-options-JSRAMMEM.js +0 -131
  571. package/dist/url-params-ZVIYOHM2.js +0 -101
  572. package/dist/validate-DN44TVXS.js +0 -125
  573. package/dist/videos-OVVH4LC2.js +0 -41
  574. package/dist/viewer-check-SOPRTRNX.js +0 -83
  575. package/dist/web-PLEFETCJ.js +0 -143
  576. package/dist/winning-ads-HIP6PWPL.js +0 -86
  577. package/dist/write-commands-U3JZ6UHG.js +0 -1525
  578. package/dist/x-ROOD4SQH.js +0 -47
  579. /package/dist/{account-JT5DRUNO.js.map → account-LKIEXMSK.js.map} +0 -0
  580. /package/dist/{account-V5XHQY2D.js.map → account-T26J6HSJ.js.map} +0 -0
  581. /package/dist/{account-reads-CPL3HLZ5.js.map → account-reads-P2WXB3NZ.js.map} +0 -0
  582. /package/dist/{account-users-AZBPCE3S.js.map → account-users-HB5DPMF4.js.map} +0 -0
  583. /package/dist/{account-writes-MFKCVMMV.js.map → account-writes-QEZQCU46.js.map} +0 -0
  584. /package/dist/{accounts-PQZRFWGU.js.map → accounts-7D4O5QMV.js.map} +0 -0
  585. /package/dist/{accounts-CZOZDD5I.js.map → accounts-AOVLG52F.js.map} +0 -0
  586. /package/dist/{actions-7ELREPKR.js.map → actions-CMHAY6P5.js.map} +0 -0
  587. /package/dist/{activecampaign-VOKDHWP7.js.map → activecampaign-U65MB4UD.js.map} +0 -0
  588. /package/dist/{ad-group-writes-WFYPFO7R.js.map → ad-group-writes-MVQKICSC.js.map} +0 -0
  589. /package/dist/{ad-groups-IPY3TJUX.js.map → ad-groups-5OGD7PJ7.js.map} +0 -0
  590. /package/dist/{ad-writes-LDNNN72V.js.map → ad-writes-OVD6EESQ.js.map} +0 -0
  591. /package/dist/{add-NZE6J7AI.js.map → add-AHRTXSBZ.js.map} +0 -0
  592. /package/dist/{add-RMKXE2ZO.js.map → add-HGR6XPCB.js.map} +0 -0
  593. /package/dist/{ads-SJ6T366Q.js.map → ads-BHZLZT3C.js.map} +0 -0
  594. /package/dist/{ads-NTDJRTEG.js.map → ads-SCWCG2YI.js.map} +0 -0
  595. /package/dist/{advertisers-E27BJ2FV.js.map → advertisers-KJDYCVU7.js.map} +0 -0
  596. /package/dist/{analytics-TBEIK33Y.js.map → analytics-2QTC4ZJT.js.map} +0 -0
  597. /package/dist/{analytics-PJ7JR4VU.js.map → analytics-RSCTSZPC.js.map} +0 -0
  598. /package/dist/{animate-CQON6SZE.js.map → animate-HV2QJWVE.js.map} +0 -0
  599. /package/dist/{assign-MTHCAP54.js.map → assign-RKN3XDEA.js.map} +0 -0
  600. /package/dist/{audience-size-AXULID2E.js.map → audience-size-J5T2SOWX.js.map} +0 -0
  601. /package/dist/{audiences-KRI7E7FY.js.map → audiences-6N5B7CA2.js.map} +0 -0
  602. /package/dist/{audit-YQIL6UGM.js.map → audit-O2R2R3BH.js.map} +0 -0
  603. /package/dist/{autocomplete-S2WRGXOM.js.map → autocomplete-7R5TRWE3.js.map} +0 -0
  604. /package/dist/{avatars-H5RIENFM.js.map → avatars-URGC2PRJ.js.map} +0 -0
  605. /package/dist/{bid-pricing-5RTQDTK3.js.map → bid-pricing-ZIGIQLKJ.js.map} +0 -0
  606. /package/dist/{brand-YCYKIUIL.js.map → brand-7MLMDFLT.js.map} +0 -0
  607. /package/dist/{brief-AEICFSR7.js.map → brief-ZWIEUGIJ.js.map} +0 -0
  608. /package/dist/{campaign-groups-PZ4J25O5.js.map → campaign-groups-Z6LNJMHY.js.map} +0 -0
  609. /package/dist/{campaign-writes-2OSYV72Z.js.map → campaign-writes-EOFSYPW4.js.map} +0 -0
  610. /package/dist/{campaign-writes-DAL4EFIV.js.map → campaign-writes-TFRV62VN.js.map} +0 -0
  611. /package/dist/{campaigns-CDPQ2RDY.js.map → campaigns-FHD3KMLV.js.map} +0 -0
  612. /package/dist/{campaigns-TKQDXU5H.js.map → campaigns-KPUA4GP2.js.map} +0 -0
  613. /package/dist/{campaigns-XFIW7ODL.js.map → campaigns-SIJKAEFM.js.map} +0 -0
  614. /package/dist/{canvas-FWG5JGG4.js.map → canvas-PHUXBTDM.js.map} +0 -0
  615. /package/dist/{capabilities-Y2UYDZZO.js.map → capabilities-MVOMUZVT.js.map} +0 -0
  616. /package/dist/{catalog-6CXOEKBI.js.map → catalog-JVBRY2U6.js.map} +0 -0
  617. /package/dist/{catalogs-ETVY5OZ5.js.map → catalogs-QYAAPTMV.js.map} +0 -0
  618. /package/dist/{changes-2P2P4LAU.js.map → changes-2UFWG4T3.js.map} +0 -0
  619. /package/dist/{chatgpt-GINMQJBI.js.map → chatgpt-KJAUJBRK.js.map} +0 -0
  620. /package/dist/{check-UHV27GZU.js.map → check-G6IGCJKG.js.map} +0 -0
  621. /package/dist/{chunk-BQSDW6FT.js.map → chunk-274UO7N7.js.map} +0 -0
  622. /package/dist/{chunk-3YHOU5IA.js.map → chunk-27KV27F6.js.map} +0 -0
  623. /package/dist/{chunk-GT76FWES.js.map → chunk-2OCUXPWT.js.map} +0 -0
  624. /package/dist/{chunk-MMUT4W5L.js.map → chunk-3N7YWOTX.js.map} +0 -0
  625. /package/dist/{chunk-OQGE5GSP.js.map → chunk-4L4SG26L.js.map} +0 -0
  626. /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
  627. /package/dist/{chunk-GZN2RP7D.js.map → chunk-7OLJBIKI.js.map} +0 -0
  628. /package/dist/{chunk-7E4S2NBD.js.map → chunk-7XSVJFA3.js.map} +0 -0
  629. /package/dist/{chunk-LE6VTYWQ.js.map → chunk-AHN5UNQP.js.map} +0 -0
  630. /package/dist/{chunk-DR7PLON5.js.map → chunk-AQBJ3XRD.js.map} +0 -0
  631. /package/dist/{chunk-GTIQUOYC.js.map → chunk-AUO4QNMI.js.map} +0 -0
  632. /package/dist/{chunk-HOZI7GOT.js.map → chunk-B5MJXVBP.js.map} +0 -0
  633. /package/dist/{chunk-VWKFQ4ZY.js.map → chunk-B6WOWVAA.js.map} +0 -0
  634. /package/dist/{chunk-2Y3VZILY.js.map → chunk-BF32BRMX.js.map} +0 -0
  635. /package/dist/{chunk-2OEECI2R.js.map → chunk-CATPBEZ3.js.map} +0 -0
  636. /package/dist/{chunk-NQ5O2NCJ.js.map → chunk-DBLOEIJ2.js.map} +0 -0
  637. /package/dist/{chunk-CTBDVZ5E.js.map → chunk-DQIPDAPH.js.map} +0 -0
  638. /package/dist/{chunk-TML65SGQ.js.map → chunk-E4JZV7ZY.js.map} +0 -0
  639. /package/dist/{chunk-CISJ7CUA.js.map → chunk-FPS7WKLY.js.map} +0 -0
  640. /package/dist/{chunk-UREDSNQS.js.map → chunk-FSHIEGAY.js.map} +0 -0
  641. /package/dist/{chunk-LE33VXJV.js.map → chunk-FY6CMZDG.js.map} +0 -0
  642. /package/dist/{chunk-UIPSSTMA.js.map → chunk-GCFC2MNR.js.map} +0 -0
  643. /package/dist/{chunk-24SPBLU4.js.map → chunk-H5P4XNTR.js.map} +0 -0
  644. /package/dist/{chunk-KGZXQIM5.js.map → chunk-H7TJX6MJ.js.map} +0 -0
  645. /package/dist/{chunk-3RWSYI6N.js.map → chunk-HMFIOE4P.js.map} +0 -0
  646. /package/dist/{chunk-ZBP735CV.js.map → chunk-HMZ6FUXY.js.map} +0 -0
  647. /package/dist/{chunk-S4PK55OH.js.map → chunk-HN2W55DC.js.map} +0 -0
  648. /package/dist/{chunk-HDYJ6YVI.js.map → chunk-HPS7HLN4.js.map} +0 -0
  649. /package/dist/{chunk-AMHVCMBW.js.map → chunk-HXLCETLB.js.map} +0 -0
  650. /package/dist/{chunk-MIOE5IN3.js.map → chunk-HZQ64QEY.js.map} +0 -0
  651. /package/dist/{chunk-35T6LCB2.js.map → chunk-I62QW2UL.js.map} +0 -0
  652. /package/dist/{chunk-4PWC4KAK.js.map → chunk-KAUW3OFC.js.map} +0 -0
  653. /package/dist/{chunk-TQDZQT6U.js.map → chunk-KFHW5TCM.js.map} +0 -0
  654. /package/dist/{chunk-AUGAC2OT.js.map → chunk-KT2YKHCH.js.map} +0 -0
  655. /package/dist/{chunk-F4QYUDXE.js.map → chunk-LFWGMR3F.js.map} +0 -0
  656. /package/dist/{chunk-NPZ5VWFE.js.map → chunk-LNEUE4BR.js.map} +0 -0
  657. /package/dist/{chunk-A4TWHQEF.js.map → chunk-MDBRRR3J.js.map} +0 -0
  658. /package/dist/{chunk-5VVXF3OS.js.map → chunk-MHRFRSQ6.js.map} +0 -0
  659. /package/dist/{chunk-YFRNONXL.js.map → chunk-N26ZASAC.js.map} +0 -0
  660. /package/dist/{chunk-QIZY55Z6.js.map → chunk-NPGI5DXP.js.map} +0 -0
  661. /package/dist/{chunk-RD63FPG6.js.map → chunk-NQF5U6FX.js.map} +0 -0
  662. /package/dist/{chunk-MI3J4O42.js.map → chunk-NTOCO72A.js.map} +0 -0
  663. /package/dist/{chunk-CKT5SR7F.js.map → chunk-OATKGUUI.js.map} +0 -0
  664. /package/dist/{chunk-3V4R55B4.js.map → chunk-P2C6X574.js.map} +0 -0
  665. /package/dist/{chunk-TP6QJATO.js.map → chunk-POI76GQV.js.map} +0 -0
  666. /package/dist/{chunk-EPW33OQJ.js.map → chunk-PZ3EFXL7.js.map} +0 -0
  667. /package/dist/{chunk-FKGYEK54.js.map → chunk-QCONJUK6.js.map} +0 -0
  668. /package/dist/{chunk-H27R5IVQ.js.map → chunk-RAO7FTMY.js.map} +0 -0
  669. /package/dist/{chunk-HHQYP6RM.js.map → chunk-RM5T4MA6.js.map} +0 -0
  670. /package/dist/{chunk-WDPOXO34.js.map → chunk-RRH5QWVS.js.map} +0 -0
  671. /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
  672. /package/dist/{chunk-4KGQZHCV.js.map → chunk-SPBUHC2K.js.map} +0 -0
  673. /package/dist/{chunk-T2JHHSPI.js.map → chunk-VAWAFQW3.js.map} +0 -0
  674. /package/dist/{chunk-TFCZOTQ5.js.map → chunk-VFESCAO4.js.map} +0 -0
  675. /package/dist/{chunk-JEMYDBKC.js.map → chunk-VLE433LA.js.map} +0 -0
  676. /package/dist/{chunk-7Y6CPXM5.js.map → chunk-W2MHGOUZ.js.map} +0 -0
  677. /package/dist/{chunk-NGXZQESA.js.map → chunk-WM6JHUPY.js.map} +0 -0
  678. /package/dist/{chunk-KSECMOHE.js.map → chunk-XAHY53IO.js.map} +0 -0
  679. /package/dist/{chunk-C6CWI43A.js.map → chunk-XJ62F6EA.js.map} +0 -0
  680. /package/dist/{chunk-IJ5DWALA.js.map → chunk-XMHTLWWE.js.map} +0 -0
  681. /package/dist/{chunk-FSLSISPI.js.map → chunk-Y3ESEQRI.js.map} +0 -0
  682. /package/dist/{chunk-YFIWCMVC.js.map → chunk-YAX5CGUY.js.map} +0 -0
  683. /package/dist/{chunk-337ZJ3PX.js.map → chunk-YPYI3YBK.js.map} +0 -0
  684. /package/dist/{chunk-RZUXHIRN.js.map → chunk-YXCSJQKQ.js.map} +0 -0
  685. /package/dist/{chunk-N3T4ALXV.js.map → chunk-Z6ZYGDCQ.js.map} +0 -0
  686. /package/dist/{chunk-RW32BYY3.js.map → chunk-ZJOXRK2G.js.map} +0 -0
  687. /package/dist/{chunk-2AJ5UNOF.js.map → chunk-ZPHHJPDG.js.map} +0 -0
  688. /package/dist/{chunk-H23Q55DS.js.map → chunk-ZV4K6E3S.js.map} +0 -0
  689. /package/dist/{claim-65UCFSNU.js.map → claim-VN6RHORQ.js.map} +0 -0
  690. /package/dist/{companies-PUU5HQPO.js.map → companies-UNXZLC4T.js.map} +0 -0
  691. /package/dist/{company-P64YHCCF.js.map → company-E7J2I4B5.js.map} +0 -0
  692. /package/dist/{complete-D7LIEFAQ.js.map → complete-TI6ME7P2.js.map} +0 -0
  693. /package/dist/{connect-OJEK3NSN.js.map → connect-VYCZ7APH.js.map} +0 -0
  694. /package/dist/{conversation-S2I75E4X.js.map → conversation-AVJMT6NK.js.map} +0 -0
  695. /package/dist/{conversion-report-JNWBTLA5.js.map → conversion-report-GK2FUT2R.js.map} +0 -0
  696. /package/dist/{conversion-upload-command-6OKMSO2T.js.map → conversion-upload-command-Q7LZFFZL.js.map} +0 -0
  697. /package/dist/{conversion-writes-2VOWP4RD.js.map → conversion-writes-STESFLTB.js.map} +0 -0
  698. /package/dist/{conversions-XQLNBKCS.js.map → conversions-6KDF5AVY.js.map} +0 -0
  699. /package/dist/{conversions-JGIBYLK5.js.map → conversions-JBRU7CGB.js.map} +0 -0
  700. /package/dist/{create-WTG4PLR7.js.map → create-7R5HTOI2.js.map} +0 -0
  701. /package/dist/{create-UBQF3F43.js.map → create-BGIE2YTE.js.map} +0 -0
  702. /package/dist/{create-URSL4J7P.js.map → create-HI53LEYE.js.map} +0 -0
  703. /package/dist/{create-DXRRIN2L.js.map → create-YVKJC5IT.js.map} +0 -0
  704. /package/dist/{creatives-KHU3PAMN.js.map → creatives-ACU2HGZW.js.map} +0 -0
  705. /package/dist/{creatives-MXMQDNL6.js.map → creatives-ISYALGKS.js.map} +0 -0
  706. /package/dist/{credentials-CMOO7W6D.js.map → credentials-UCROYYPD.js.map} +0 -0
  707. /package/dist/{critique-MABDKWHC.js.map → critique-SGEKRORA.js.map} +0 -0
  708. /package/dist/{critique-455CFJQ2.js.map → critique-SJLBIGD2.js.map} +0 -0
  709. /package/dist/{crm-LKQBWL7L.js.map → crm-OZ626TTR.js.map} +0 -0
  710. /package/dist/{crm-YAFF2LM2.js.map → crm-X7FX34QY.js.map} +0 -0
  711. /package/dist/{currency-JDAVYMD3.js.map → currency-HB3MFXLJ.js.map} +0 -0
  712. /package/dist/{customers-XQJTF7HT.js.map → customers-I3T6HJD4.js.map} +0 -0
  713. /package/dist/{delete-7OTBPZGJ.js.map → delete-24S5ICGH.js.map} +0 -0
  714. /package/dist/{delete-ZRMD5TG4.js.map → delete-ICXIKJZF.js.map} +0 -0
  715. /package/dist/{delete-ROD2G6IL.js.map → delete-RWZCVPYV.js.map} +0 -0
  716. /package/dist/{demographics-HM2TV4T2.js.map → demographics-PUJKNWCF.js.map} +0 -0
  717. /package/dist/{discard-55OBCTIR.js.map → discard-4GLM3TVC.js.map} +0 -0
  718. /package/dist/{discover-VEHKBNCY.js.map → discover-DLGO3VW6.js.map} +0 -0
  719. /package/dist/{domain-226C6VIF.js.map → domain-A4IVVFI6.js.map} +0 -0
  720. /package/dist/{download-UMEQIQKE.js.map → download-KIOTQW3Z.js.map} +0 -0
  721. /package/dist/{draft-V7VGPJK4.js.map → draft-4MKYX4VU.js.map} +0 -0
  722. /package/dist/{draft-MPSQIDMM.js.map → draft-6QUGODCB.js.map} +0 -0
  723. /package/dist/{draft-TUTXQNHP.js.map → draft-AMSBOSM2.js.map} +0 -0
  724. /package/dist/{draft-DUAFRL2G.js.map → draft-I7HIRQ6F.js.map} +0 -0
  725. /package/dist/{draft-S2QTWVIA.js.map → draft-IB5A3RFD.js.map} +0 -0
  726. /package/dist/{experiments-6UHDVVII.js.map → experiments-NW4GVPAF.js.map} +0 -0
  727. /package/dist/{facets-BZ5AFGHD.js.map → facets-SIY7OICY.js.map} +0 -0
  728. /package/dist/{feedback-A5DR3IMR.js.map → feedback-LUNPSQEO.js.map} +0 -0
  729. /package/dist/{feedback-record-KABFVNHS.js.map → feedback-record-ML67WVIX.js.map} +0 -0
  730. /package/dist/{fetch-XNE63FNS.js.map → fetch-T7OO6FDT.js.map} +0 -0
  731. /package/dist/{fit-T2D4E52B.js.map → fit-63FKT2JJ.js.map} +0 -0
  732. /package/dist/{flows-P5T4LNJ2.js.map → flows-RWQSQKUL.js.map} +0 -0
  733. /package/dist/{fonts-U3NGQYJN.js.map → fonts-UQ6ISHO3.js.map} +0 -0
  734. /package/dist/{forecast-UYBYSH3Y.js.map → forecast-AODSMD7S.js.map} +0 -0
  735. /package/dist/{forecast-TG5RS5DG.js.map → forecast-JTKQQYMN.js.map} +0 -0
  736. /package/dist/{funnel-D6YXU7C4.js.map → funnel-J5IJQPUP.js.map} +0 -0
  737. /package/dist/{generate-QG7GX6WO.js.map → generate-HSDSCKDW.js.map} +0 -0
  738. /package/dist/{get-TISXCTDV.js.map → get-VLS22SZR.js.map} +0 -0
  739. /package/dist/{get-E4VOTCE6.js.map → get-X6TC6UBK.js.map} +0 -0
  740. /package/dist/{google-UQLYCYSX.js.map → google-FOZYYKNY.js.map} +0 -0
  741. /package/dist/{google-ads-GBX5YHPT.js.map → google-ads-HBNPBUR4.js.map} +0 -0
  742. /package/dist/{history-BRWYSJQL.js.map → history-E25YCUQO.js.map} +0 -0
  743. /package/dist/{history-XOB23MLX.js.map → history-SHQVK5I7.js.map} +0 -0
  744. /package/dist/{history-M2KVZ2E7.js.map → history-ZNPAN36E.js.map} +0 -0
  745. /package/dist/{hubspot-YEZGTOM2.js.map → hubspot-WFJ22XGN.js.map} +0 -0
  746. /package/dist/{ideas-J6GCTQ6U.js.map → ideas-FCL5SDI4.js.map} +0 -0
  747. /package/dist/{images-55KBTRVO.js.map → images-SXBR3MLH.js.map} +0 -0
  748. /package/dist/{ingest-LKGF5E5V.js.map → ingest-UJBMV7PZ.js.map} +0 -0
  749. /package/dist/{ingest-QNV3B2ST.js.map → ingest-YRWIO6DV.js.map} +0 -0
  750. /package/dist/{insights-7CQJOBWX.js.map → insights-UMPXHRKD.js.map} +0 -0
  751. /package/dist/{inspect-WNPQXU4H.js.map → inspect-I2CJDQSA.js.map} +0 -0
  752. /package/dist/{intent-P75BDP4H.js.map → intent-NBP5IDND.js.map} +0 -0
  753. /package/dist/{keyword-gap-54F6CZLM.js.map → keyword-gap-67UJ2LDD.js.map} +0 -0
  754. /package/dist/{keyword-metrics-SJLYED7I.js.map → keyword-metrics-U6IWGT4N.js.map} +0 -0
  755. /package/dist/{keywords-for-site-CY2XUFR4.js.map → keywords-for-site-PXID3WEP.js.map} +0 -0
  756. /package/dist/{landing-DZLICA3P.js.map → landing-PIQYR6XI.js.map} +0 -0
  757. /package/dist/{languages-PEGOE365.js.map → languages-TM7SHGRO.js.map} +0 -0
  758. /package/dist/{leads-WBZP37CG.js.map → leads-DOFRCD7J.js.map} +0 -0
  759. /package/dist/{learn-QNOTY4JA.js.map → learn-VMNUQL6D.js.map} +0 -0
  760. /package/dist/{line-item-writes-6RNUOFKK.js.map → line-item-writes-6MCXCXYM.js.map} +0 -0
  761. /package/dist/{line-items-YOBU6DYQ.js.map → line-items-X3GEB5P7.js.map} +0 -0
  762. /package/dist/{link-7PEVIIUA.js.map → link-TX5PWJBH.js.map} +0 -0
  763. /package/dist/{linkedin-YYNBLBM3.js.map → linkedin-3DYXRHL7.js.map} +0 -0
  764. /package/dist/{linkedin-person-JGQTT54I.js.map → linkedin-person-TP7DAJST.js.map} +0 -0
  765. /package/dist/{list-H2XBHKQK.js.map → list-2WFSHJ2I.js.map} +0 -0
  766. /package/dist/{list-IFVBO2E2.js.map → list-GMMNLVCA.js.map} +0 -0
  767. /package/dist/{list-N5FHLG2Z.js.map → list-I77SLBPO.js.map} +0 -0
  768. /package/dist/{locations-SHYN5J4Q.js.map → locations-HAXZUHJP.js.map} +0 -0
  769. /package/dist/{locations-MXWGZIGU.js.map → locations-JFBM4XBL.js.map} +0 -0
  770. /package/dist/{log-HCWZ6C4R.js.map → log-3HSJ3RYY.js.map} +0 -0
  771. /package/dist/{make-VZKIB23N.js.map → make-OKIBB4LM.js.map} +0 -0
  772. /package/dist/{map-RFMJ4AF7.js.map → map-O63QGACI.js.map} +0 -0
  773. /package/dist/{mcp-VRFT3QJW.js.map → mcp-GJEZ37AM.js.map} +0 -0
  774. /package/dist/{media-sources-NTZRJGFU.js.map → media-sources-KE6XXCTY.js.map} +0 -0
  775. /package/dist/{members-EOIF2XN3.js.map → members-WF453RSC.js.map} +0 -0
  776. /package/dist/{meta-MBW5LM5V.js.map → meta-6IFYEOZL.js.map} +0 -0
  777. /package/dist/{metrics-25LYUEB7.js.map → metrics-XWHE4LYQ.js.map} +0 -0
  778. /package/dist/{models-EU3NO4IY.js.map → models-3C6BWHEC.js.map} +0 -0
  779. /package/dist/{normalize-UQIZEJHT.js.map → normalize-HWMMP6LX.js.map} +0 -0
  780. /package/dist/{options-Y6JI2ZVZ.js.map → options-XGYNQCQM.js.map} +0 -0
  781. /package/dist/{organization-TO2V7AWX.js.map → organization-X27LDCZU.js.map} +0 -0
  782. /package/dist/{performance-V26JUNGC.js.map → performance-JLQIJK4V.js.map} +0 -0
  783. /package/dist/{performance-YAUOH75F.js.map → performance-XYGEV4TX.js.map} +0 -0
  784. /package/dist/{pixels-NLH2PN6Q.js.map → pixels-PMPL63ON.js.map} +0 -0
  785. /package/dist/{promoted-tweet-writes-3SLFZQDA.js.map → promoted-tweet-writes-7DGO5Z2G.js.map} +0 -0
  786. /package/dist/{promoted-tweets-3WRSJYKK.js.map → promoted-tweets-SPBZXSYI.js.map} +0 -0
  787. /package/dist/{publish-T6ITLSJA.js.map → publish-RRJRO5DC.js.map} +0 -0
  788. /package/dist/{query-SRJXJVDY.js.map → query-CTQGGPXW.js.map} +0 -0
  789. /package/dist/{reddit-O2TNBMD6.js.map → reddit-OCRVXWJC.js.map} +0 -0
  790. /package/dist/{refresh-N726O36Z.js.map → refresh-M6BXIMQD.js.map} +0 -0
  791. /package/dist/{release-A5HKTUMV.js.map → release-ZRKZEBEB.js.map} +0 -0
  792. /package/dist/{relevant-pages-VJHTUJMB.js.map → relevant-pages-NPUSAV3K.js.map} +0 -0
  793. /package/dist/{remove-BHUYRNRU.js.map → remove-JW3RRNB6.js.map} +0 -0
  794. /package/dist/{reopen-TTDYNANZ.js.map → reopen-G6ZE5YNP.js.map} +0 -0
  795. /package/dist/{rerun-KFTQ6Y64.js.map → rerun-OKOYKQXC.js.map} +0 -0
  796. /package/dist/{research-YWON4E4H.js.map → research-DZZBRX4V.js.map} +0 -0
  797. /package/dist/{research-FISSUVIK.js.map → research-NLZ34525.js.map} +0 -0
  798. /package/dist/{reset-SSNHRP5C.js.map → reset-ABZVGJE6.js.map} +0 -0
  799. /package/dist/{reset-VTNVCE23.js.map → reset-JYER2WPC.js.map} +0 -0
  800. /package/dist/{resolve-375FALNN.js.map → resolve-EH3ONOYE.js.map} +0 -0
  801. /package/dist/{retry-PNS6RWJ6.js.map → retry-LKJWY5BC.js.map} +0 -0
  802. /package/dist/{retry-TLGYZ6RJ.js.map → retry-VY76DPS5.js.map} +0 -0
  803. /package/dist/{revenue-6L2AY7L7.js.map → revenue-7GIOE3TG.js.map} +0 -0
  804. /package/dist/{rules-F6J4V7PZ.js.map → rules-NUNJBT6R.js.map} +0 -0
  805. /package/dist/{rules-add-7UI5A3MJ.js.map → rules-add-7FB67IDD.js.map} +0 -0
  806. /package/dist/{run-B77D2TGX.js.map → run-3GV2FYWG.js.map} +0 -0
  807. /package/dist/{run-UN4HXEGZ.js.map → run-OVOXZUXN.js.map} +0 -0
  808. /package/dist/{scaffold-ad-74CEBCRR.js.map → scaffold-ad-7D5EUDU7.js.map} +0 -0
  809. /package/dist/{scaffold-static-ad-2IMVWNYB.js.map → scaffold-static-ad-TWF2RRM2.js.map} +0 -0
  810. /package/dist/{scaffold-video-JDCX3BIT.js.map → scaffold-video-4P2ONEQV.js.map} +0 -0
  811. /package/dist/{schedule-WK5MRYCJ.js.map → schedule-XQ725JG6.js.map} +0 -0
  812. /package/dist/{scheduled-agents-2NTFBABN.js.map → scheduled-agents-KBSD55GW.js.map} +0 -0
  813. /package/dist/{schema-BBC6AARZ.js.map → schema-WJVWY4IA.js.map} +0 -0
  814. /package/dist/{search-KC4QRMU2.js.map → search-KQGMLU2Z.js.map} +0 -0
  815. /package/dist/{select-SZAJR4QY.js.map → select-CLD5MFCK.js.map} +0 -0
  816. /package/dist/{set-prompt-KHB4JJV2.js.map → set-prompt-COD76I6E.js.map} +0 -0
  817. /package/dist/{setup-links-SJVDPNOF.js.map → setup-links-H5L5CJJN.js.map} +0 -0
  818. /package/dist/{shopify-MODNP6LT.js.map → shopify-M2I65ZB5.js.map} +0 -0
  819. /package/dist/{site-5K73B2MI.js.map → site-AIJK3MNO.js.map} +0 -0
  820. /package/dist/{sources-2E6EK6YK.js.map → sources-JRMCBVLK.js.map} +0 -0
  821. /package/dist/{sources-S7LAV2EP.js.map → sources-YVDTULK6.js.map} +0 -0
  822. /package/dist/{stale-3IPYZ7BI.js.map → stale-AVBULN3A.js.map} +0 -0
  823. /package/dist/{status-6QTJSJN7.js.map → status-RXA4BBXZ.js.map} +0 -0
  824. /package/dist/{studio-4QOFG7MQ.js.map → studio-C2UVCTDD.js.map} +0 -0
  825. /package/dist/{sync-37P7TZQH.js.map → sync-CMYHAJSZ.js.map} +0 -0
  826. /package/dist/{sync-definition-CDQCNCU2.js.map → sync-definition-IKI2NFUO.js.map} +0 -0
  827. /package/dist/{tags-2VZUCNNH.js.map → tags-5IVIDOPC.js.map} +0 -0
  828. /package/dist/{tags-FVRIF3XS.js.map → tags-5L5MV6XZ.js.map} +0 -0
  829. /package/dist/{tags-SS7FE52N.js.map → tags-LIG4SXDB.js.map} +0 -0
  830. /package/dist/{tags-CBINFGAN.js.map → tags-LRFFVAZ3.js.map} +0 -0
  831. /package/dist/{tags-OB24PQKE.js.map → tags-VMMVSG6J.js.map} +0 -0
  832. /package/dist/{targeting-criteria-ECC662DL.js.map → targeting-criteria-AMVFYZ2H.js.map} +0 -0
  833. /package/dist/{targets-GIRHNZ4W.js.map → targets-RE24B2LL.js.map} +0 -0
  834. /package/dist/{testimonials-IEJ24MH7.js.map → testimonials-FWJRO4MB.js.map} +0 -0
  835. /package/dist/{themes-JBX6W4SP.js.map → themes-32CUPT4M.js.map} +0 -0
  836. /package/dist/{top-companies-POSJMWSB.js.map → top-companies-6GI6AWGA.js.map} +0 -0
  837. /package/dist/{transcript-FCKURXTT.js.map → transcript-XMWBCLQO.js.map} +0 -0
  838. /package/dist/{translate-F4B3WEJO.js.map → translate-2UYIIMEG.js.map} +0 -0
  839. /package/dist/{triggers-DRAKT5QB.js.map → triggers-WCI5DERM.js.map} +0 -0
  840. /package/dist/{unlink-OEUJXG64.js.map → unlink-MM23NOTI.js.map} +0 -0
  841. /package/dist/{unstage-F362CYM7.js.map → unstage-YQXFED4J.js.map} +0 -0
  842. /package/dist/{update-BAE3BEEW.js.map → update-3BGBYU5R.js.map} +0 -0
  843. /package/dist/{update-4CVNP3B5.js.map → update-A53QG3XM.js.map} +0 -0
  844. /package/dist/{update-XOSKQEMK.js.map → update-S2CJ5FNS.js.map} +0 -0
  845. /package/dist/{update-UME7HHOC.js.map → update-VMN5BHTP.js.map} +0 -0
  846. /package/dist/{upload-BABKWQIN.js.map → upload-VT7NPRAM.js.map} +0 -0
  847. /package/dist/{url-options-JSRAMMEM.js.map → url-options-JJIA77MZ.js.map} +0 -0
  848. /package/dist/{url-params-ZVIYOHM2.js.map → url-params-RFMWR2PZ.js.map} +0 -0
  849. /package/dist/{validate-DN44TVXS.js.map → validate-KMY5ZVQX.js.map} +0 -0
  850. /package/dist/{videos-OVVH4LC2.js.map → videos-DZT3TMKO.js.map} +0 -0
  851. /package/dist/{viewer-check-SOPRTRNX.js.map → viewer-check-QHXKGGH2.js.map} +0 -0
  852. /package/dist/{web-PLEFETCJ.js.map → web-HP45GOIL.js.map} +0 -0
  853. /package/dist/{winning-ads-HIP6PWPL.js.map → winning-ads-ZJVGEPZ7.js.map} +0 -0
  854. /package/dist/{write-commands-U3JZ6UHG.js.map → write-commands-YKWSFUO5.js.map} +0 -0
  855. /package/dist/{x-ROOD4SQH.js.map → x-V76UQMEM.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/insights.ts","../src/commands/ads/meta/insights-actions.ts","../src/commands/ads/meta/placement-delivery.ts","../src/commands/ads/meta/presets.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet, apiPost } from \"../../../client.ts\";\nimport { writeAdsJson, writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport { metaBreakdownSyncedHint, type SyncedLevel, syncedFirstHint } from \"../synced-first.ts\";\nimport { compactInsightsRows, FUNNEL_COLUMNS, insightsTable, withFunnelResults } from \"./insights-actions.ts\";\nimport { placementDeliveryHints } from \"./placement-delivery.ts\";\nimport { composeFields, getIntent, type InsightsIntent, type InsightsLevel, listIntents } from \"./presets.ts\";\nimport { csvOrJson, getDateRange, handleMetaError } from \"./shared.ts\";\n\nconst POLL_FIRST_MS = 5_000;\nconst POLL_LONGEST_MS = 30_000;\nconst POLL_MAX_MS = 10 * 60_000;\n\n/**\n * The wait before status poll `attempt` (0-based): 5s, growing by half each\n * poll, at most 30s. Every poll is a read from the ad account's hourly Meta\n * budget, and a long report gains nothing from being asked every 5 seconds.\n */\nexport function asyncPollDelayMs(attempt: number): number {\n return Math.min(Math.round(POLL_FIRST_MS * 1.5 ** attempt), POLL_LONGEST_MS);\n}\n\n/** Default attribution windows — only these still work as of Jan 2026 (1d_view + 28d_click also valid but rarely used). */\nconst DEFAULT_ATTRIBUTION_WINDOWS = [\"7d_click\", \"1d_view\"];\n\n/** Default filter — strip rows that didn't deliver. Almost always what we want. */\nconst DEFAULT_FILTERING = [{ field: \"impressions\", operator: \"GREATER_THAN\", value: 0 }];\n\nexport interface InsightsBody {\n object: string;\n level: InsightsLevel;\n fields: string[];\n datePreset?: string;\n since?: string;\n until?: string;\n timeIncrement?: string;\n breakdowns?: string[];\n actionBreakdowns?: string[];\n filtering?: Array<{ field: string; operator: string; value: string | number | string[] }>;\n attributionWindows?: string[];\n useAccountAttributionSetting?: boolean;\n useUnifiedAttributionSetting?: boolean;\n limit?: number;\n skipCache?: boolean;\n}\n\nfunction commaSplit(input: string | undefined): string[] | undefined {\n if (!input) return undefined;\n return input\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\nfunction parseFiltering(raw: string | undefined): InsightsBody[\"filtering\"] {\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as InsightsBody[\"filtering\"];\n } catch {\n handleMetaError(new Error(\"Invalid --filtering JSON\"));\n }\n}\n\nfunction pickIntent(name: string | undefined): InsightsIntent {\n if (!name) return \"baseline\";\n const found = getIntent(name);\n if (!found) {\n handleMetaError(new Error(`Unknown --intent: ${name}. Use --list-intents to see options.`));\n }\n return found.name;\n}\n\nfunction pickLevel(args: Record<string, unknown>): InsightsLevel {\n const raw = args.level as string | undefined;\n if (!raw) return \"account\";\n if (raw !== \"account\" && raw !== \"campaign\" && raw !== \"adset\" && raw !== \"ad\") {\n handleMetaError(new Error(\"--level must be one of: account|campaign|adset|ad\"));\n }\n return raw;\n}\n\n/**\n * Auto-async heuristic. Heavy queries that would time out as sync go async\n * automatically — the user shouldn't have to think about it.\n *\n * - level=ad with breakdowns\n * - >2 breakdowns at any level\n * - explicit time range > 90 days\n * - level=ad over an account-level object with a wide window\n */\nfunction shouldAutoAsync(body: InsightsBody): boolean {\n const breakdownCount = (body.breakdowns ?? []).length;\n if (body.level === \"ad\" && breakdownCount > 0 && body.object.startsWith(\"act_\")) {\n return true;\n }\n if (breakdownCount > 2) {\n return true;\n }\n if (body.since && body.until) {\n const days = (Date.parse(body.until) - Date.parse(body.since)) / 86_400_000;\n if (days > 90) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Whether to take the async path — three states, not two.\n *\n * citty resolves `--no-async` to `async: false` rather than filling a separate\n * `no-async` arg, so reading `args[\"no-async\"]` (as this did) always saw\n * undefined and the documented refusal never applied: a heavy query went async\n * no matter what the caller asked for.\n */\nexport function wantsAsync(asyncFlag: unknown, body: InsightsBody): boolean {\n if (asyncFlag === true) return true;\n if (asyncFlag === false) return false;\n return shouldAutoAsync(body);\n}\n\nfunction applyDateRange(body: InsightsBody, args: Record<string, unknown>): void {\n const range = getDateRange(args);\n if (range.datePreset) body.datePreset = range.datePreset;\n if (range.since) body.since = range.since;\n if (range.until) body.until = range.until;\n if (!body.datePreset && !(body.since && body.until)) {\n body.datePreset = \"last_7d\";\n }\n}\n\nfunction buildFiltering(args: Record<string, unknown>): InsightsBody[\"filtering\"] {\n const explicit = parseFiltering(args.filtering as string | undefined);\n if (explicit) return explicit;\n if (args[\"include-undelivered\"]) return undefined;\n return DEFAULT_FILTERING;\n}\n\nfunction buildAttributionWindows(args: Record<string, unknown>): string[] | undefined {\n const explicit = commaSplit(args[\"attribution-windows\"] as string | undefined);\n if (explicit) return explicit;\n return DEFAULT_ATTRIBUTION_WINDOWS;\n}\n\nfunction buildBody(args: Record<string, unknown>): InsightsBody {\n const intent = pickIntent(args.intent as string | undefined);\n const level = pickLevel(args);\n const intentDef = getIntent(intent);\n const explicitFields = commaSplit(args.fields as string | undefined);\n const fields = explicitFields ?? composeFields(intent, level);\n const breakdowns = commaSplit(args.breakdowns as string | undefined);\n const actionBreakdowns = commaSplit(args[\"action-breakdowns\"] as string | undefined) ?? intentDef?.actionBreakdowns;\n\n const body: InsightsBody = {\n object: args.object as string,\n level,\n fields,\n timeIncrement: args[\"time-increment\"] as string | undefined,\n breakdowns,\n actionBreakdowns,\n filtering: buildFiltering(args),\n attributionWindows: buildAttributionWindows(args),\n useAccountAttributionSetting: Boolean(args[\"use-account-attribution\"]),\n useUnifiedAttributionSetting: Boolean(args[\"use-unified-attribution\"]),\n limit: args.limit ? Number(args.limit) : 1000,\n skipCache: Boolean(args[\"no-cache\"]),\n };\n applyDateRange(body, args);\n return body;\n}\n\nasync function pollAsync(reportRunId: string): Promise<void> {\n const start = Date.now();\n for (let attempt = 0; Date.now() - start < POLL_MAX_MS; attempt++) {\n // The status route is a GET reading `report-run-id` from the query string.\n // Posting to it matched no route at all, so every heavy query died on a\n // bare 404 the moment it went async.\n const status = await apiGet<{ async_status?: string; async_percent_completion?: number }>(\n \"/api/ads/meta/insights/async/status\",\n { \"report-run-id\": reportRunId },\n );\n if (status.async_status === \"Job Completed\") return;\n if (status.async_status === \"Job Failed\" || status.async_status === \"Job Skipped\") {\n handleMetaError(new Error(`Async insights job ${status.async_status}`));\n }\n process.stderr.write(\n `Async insights ${status.async_status ?? \"queued\"} (${Math.round(status.async_percent_completion ?? 0)}%)…\\n`,\n );\n await new Promise((resolve) => setTimeout(resolve, asyncPollDelayMs(attempt)));\n }\n handleMetaError(new Error(\"Async insights polling timed out after 10 minutes\"));\n}\n\nasync function runAsync(body: InsightsBody): Promise<Array<Record<string, unknown>>> {\n const submit = await apiPost<{ reportRunId: string }>(\"/api/ads/meta/insights/async\", body);\n process.stderr.write(`Async insights job: ${submit.reportRunId}\\n`);\n await pollAsync(submit.reportRunId);\n return apiPost<Array<Record<string, unknown>>>(\"/api/ads/meta/insights/async/result\", {\n reportRunId: submit.reportRunId,\n fields: body.fields,\n limit: body.limit,\n });\n}\n\n/** Insights rows have nested `actions[]` arrays. Sort by the named action_type's value descending. */\nfunction sortRowsBySpendDesc(rows: Array<Record<string, unknown>>): Array<Record<string, unknown>> {\n return [...rows].sort((a, b) => {\n const sa = Number(a.spend ?? 0);\n const sb = Number(b.spend ?? 0);\n if (Number.isNaN(sa) || Number.isNaN(sb)) return 0;\n return sb - sa;\n });\n}\n\n/** The `baker ads performance` read that answers the same insights read; null when the synced copy cannot. */\nfunction syncedHintOf(body: InsightsBody): string | null {\n const breakdowns = body.breakdowns ?? [];\n if (breakdowns.length > 0) return metaBreakdownSyncedHint(breakdowns);\n const level: SyncedLevel = body.level === \"adset\" ? \"ad_group\" : body.level;\n return syncedFirstHint(\"meta\", level);\n}\n\n/** The compact rows, or Meta's own with --full, and the hint naming what the compact view dropped. */\nfunction shapeRows(\n rows: Array<Record<string, unknown>>,\n args: Record<string, unknown>,\n): { rows: Array<Record<string, unknown>>; hints: string[] } {\n if (args.full) return { rows, hints: [] };\n const actionTypes = commaSplit(args[\"action-types\"] as string | undefined);\n const { rows: compacted, dropped } = compactInsightsRows(rows, { actionTypes });\n const compact = args.intent === \"funnel\" ? withFunnelResults(compacted, { actionTypes }) : compacted;\n if (dropped.length === 0) return { rows: compact, hints: [] };\n const named = dropped.slice(0, 4).join(\", \");\n const more = dropped.length > 4 ? ` and ${dropped.length - 4} more` : \"\";\n return {\n rows: compact,\n hints: [\n `Engagement and combined action types were left out (${named}${more}); --action-types <type> keeps one, --full returns every raw action.`,\n ],\n };\n}\n\nexport const insightsCommand = defineCommand({\n meta: {\n name: \"insights\",\n description: `Performance reporting — the main Meta tool for AI agents.\n\nSmart defaults so the AI doesn't have to remember every flag:\n --level account (set --level campaign|adset|ad to drill in)\n --intent baseline (or revenue|funnel|ranking|video|identity)\n --date-preset last_7d (override with --since/--until)\n --attribution-windows 7d_click,1d_view (the only ones still working post Jan 2026)\n filter: impressions > 0 (skip undelivered rows; --include-undelivered to keep)\n sort: spend descending (when result fits in memory)\n auto-async when query is heavy (level=ad + breakdowns, big date ranges, etc.)\n\nIdentity fields (campaign_name, ad_name etc.) are appended automatically based on --level so rows\nare self-describing.\n\nExamples — common AI questions:\n # \"How is GreenLeaf doing this week?\"\n baker ads meta insights --object act_123\n\n # \"Which campaigns are profitable?\"\n baker ads meta insights --object act_123 --level campaign --intent revenue --date-preset last_28d\n\n # \"Which creatives need a refresh?\"\n baker ads meta insights --object act_123 --level ad --intent ranking --date-preset last_14d\n\n # \"Where do users drop off the funnel?\"\n baker ads meta insights --object act_123 --intent funnel\n\n # \"Should we shift budget to Instagram?\"\n baker ads meta insights --object act_123 --level adset --breakdowns publisher_platform,platform_position\n\n # \"How many sign-ups and leads per month?\" — one call, one row per month\n baker ads meta insights --object act_123 --intent revenue --action-types complete_registration,lead --time-increment monthly --since 2026-01-01 --until 2026-03-31\n\n # Custom field set (escape hatch)\n baker ads meta insights --object act_123 --fields impressions,spend,actions\n\nAction arrays (actions, cost_per_action_type, conversions, …) are compact: Meta's aliases of one conversion\n(omni_, offsite_conversion.fb_pixel_, onsite_web_ …) collapse to one entry under its plain name\n(complete_registration, lead, purchase), and engagement counts (likes, saves, video views) are left out.\n--action-types keeps only the named types; --full returns Meta's raw arrays. --output md|csv gives each\naction type its own column (actions.lead, cost_per_action_type.lead); a custom event, or every type --action-types\nnames, also gets its cost (cost_per.conversions.<type> = spend / count). --intent funnel adds result_type, results,\ncvr (% of link clicks) and cost_per_result to each row; --action-types <type> picks which action is the result.\n\nAsync is automatic for heavy queries; pass --async to force it, or --no-async to refuse fallback.`,\n },\n args: {\n object: {\n type: \"string\",\n description: \"Object ID — act_<id> for account, or a campaign/adset/ad ID\",\n },\n level: { type: \"string\", description: \"account|campaign|adset|ad (default: account)\" },\n intent: { type: \"string\", description: \"baseline|revenue|funnel|ranking|video|identity (default: baseline)\" },\n fields: { type: \"string\", description: \"Comma-separated field list (overrides --intent bundle)\" },\n \"list-intents\": { type: \"boolean\", description: \"Print available intents and exit\" },\n \"date-preset\": { type: \"string\", description: \"Meta date preset (last_7d, last_28d, today, ...)\" },\n since: { type: \"string\", description: \"Custom start date YYYY-MM-DD\" },\n until: { type: \"string\", description: \"Custom end date YYYY-MM-DD\" },\n \"time-increment\": { type: \"string\", description: \"1 (day) | monthly | all_days\" },\n breakdowns: { type: \"string\", description: \"Comma-separated breakdowns (e.g. publisher_platform,age)\" },\n \"action-types\": {\n type: \"string\",\n description:\n \"Keep only these action types in actions/cost_per_action_type/conversions — plain names (complete_registration,lead,purchase), a raw Meta name, or a custom event's name\",\n },\n full: { type: \"boolean\", description: \"Return Meta's raw action arrays: every alias and engagement type\" },\n \"action-breakdowns\": {\n type: \"string\",\n description: \"Slice the actions[] array (default: action_type for revenue/funnel)\",\n },\n filtering: { type: \"string\", description: \"Override default filter — JSON array of {field,operator,value}\" },\n \"include-undelivered\": { type: \"boolean\", description: \"Keep rows where impressions=0 (off by default)\" },\n \"attribution-windows\": {\n type: \"string\",\n description: \"Override default 7d_click,1d_view (only 1d_view, 1d_click, 7d_click, 28d_click work post Jan 2026)\",\n },\n \"use-account-attribution\": { type: \"boolean\", description: \"Use account-saved attribution setting\" },\n \"use-unified-attribution\": { type: \"boolean\", description: \"Use ad-set unified attribution setting\" },\n limit: { type: \"string\", description: \"Max rows (default 1000)\" },\n // Declaring `no-async` too would be a trap: citty resolves it to `async: false`\n // and never fills an arg of that name, so the declaration reads as supported\n // while nothing consumes it.\n async: { type: \"boolean\", description: \"Force the async submit-and-poll path (--no-async refuses it)\" },\n \"no-sort\": { type: \"boolean\", description: \"Skip default spend-desc sort\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"Output format: json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n if (args[\"list-intents\"]) {\n writeAdsJson({ ok: true, data: listIntents() });\n return;\n }\n\n if (!args.object) {\n writeAdsJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Missing required argument: --object\" },\n });\n process.exit(1);\n }\n\n const body = buildBody(args);\n const fmt = csvOrJson(args);\n const wantAsync = wantsAsync(args.async, body);\n\n try {\n const rows = wantAsync\n ? await runAsync(body)\n : await apiPost<Array<Record<string, unknown>>>(\"/api/ads/meta/insights\", body);\n const shaped = shapeRows(args[\"no-sort\"] ? rows : sortRowsBySpendDesc(rows), args);\n const sorted = shaped.rows;\n\n if (fmt !== \"json\") {\n const fields = args.intent === \"funnel\" && !args.full ? [...body.fields, ...FUNNEL_COLUMNS] : body.fields;\n const table =\n args.full || fmt === \"jsonl\"\n ? { rows: sorted, columns: fields }\n : insightsTable(sorted, fields, { priceAll: args[\"action-types\"] !== undefined });\n writeAdsOutput(table.rows, fmt, table.columns, shaped.hints);\n return;\n }\n const synced = syncedHintOf(body);\n const hints = [...placementDeliveryHints(sorted), ...shaped.hints, ...(synced === null ? [] : [synced])];\n writeJsonEnvelope({ ok: true, data: sorted, hints });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n","/**\n * The compact view of Meta's insights action arrays (`actions`,\n * `cost_per_action_type`, `conversions`, …).\n *\n * Meta returns one conversion under up to six names — `complete_registration`,\n * `omni_complete_registration`, `offsite_conversion.fb_pixel_complete_registration`,\n * `onsite_web_…` — with the same count, beside every engagement count the\n * account ever had (likes, saves, unlikes, video views). A one-month revenue\n * read ran to ~35 entries per row and 3.7 KB, and agents cut it with `head -c`\n * past the spend figure (BAKER-855). So by default each alias family becomes one\n * entry under its plain name, and engagement and Meta's combined \"+ 20s calls\" /\n * \"+ Meta leads\" restatements are dropped from the mixed arrays. `--action-types`\n * keeps only the named ones; `--full` skips this module.\n */\n\ntype InsightsRow = Record<string, unknown>;\ntype ActionEntry = Record<string, unknown> & { action_type: string };\n\n/** Arrays that mix every action type; single-purpose arrays (video watch, outbound clicks) are only de-aliased. */\nconst MIXED_ACTION_FIELDS = new Set([\n \"actions\",\n \"unique_actions\",\n \"action_values\",\n \"cost_per_action_type\",\n \"cost_per_unique_action_type\",\n \"conversions\",\n \"conversion_values\",\n \"cost_per_conversion\",\n]);\n\nconst ENGAGEMENT_TYPES = new Set([\n \"page_engagement\",\n \"post_engagement\",\n \"post\",\n \"comment\",\n \"like\",\n \"photo_view\",\n \"video_view\",\n \"post_reaction\",\n \"post_interaction_gross\",\n \"post_interaction_net\",\n]);\n\n/** `onsite_conversion.post_save`, `…post_net_like`, `…post_unlike` and the rest of the post counters. */\nconst ENGAGEMENT_PREFIX = \"onsite_conversion.post_\";\n\n/** Meta's sums of a conversion with another result (`offsite_lead_add_20_s_calls`), each already its own entry. */\nconst COMBINED_TYPE = /_add_(?:\\d+_s_calls|meta_leads)$/;\n\n/** The channel prefixes Meta puts in front of one conversion's name; `omni_` is the cross-channel total. */\nconst ALIAS_PREFIXES = [\n \"omni_\",\n \"offsite_conversion.fb_pixel_\",\n \"onsite_web_app_\",\n \"onsite_web_\",\n \"app_custom_event.fb_mobile_\",\n];\n\n/** On-Facebook lead forms report under their own names; `lead` is the total that includes them. */\nconst LEAD_ALIASES = new Set([\"onsite_conversion.lead_grouped\", \"leadgen_grouped\"]);\n\n/** A custom event (`offsite_conversion.fb_pixel_custom.<Name>`) keeps its full name: it has no alias. */\nfunction canonicalType(type: string): string {\n if (LEAD_ALIASES.has(type)) return \"lead\";\n if (type.startsWith(\"offsite_conversion.fb_pixel_custom\")) return type;\n const prefix = ALIAS_PREFIXES.find((p) => type.startsWith(p));\n return prefix ? type.slice(prefix.length) : type;\n}\n\nfunction isNoise(type: string): boolean {\n return ENGAGEMENT_TYPES.has(type) || type.startsWith(ENGAGEMENT_PREFIX) || COMBINED_TYPE.test(type);\n}\n\nfunction isActionArray(value: unknown): value is ActionEntry[] {\n return (\n Array.isArray(value) &&\n value.every((entry) => typeof entry === \"object\" && entry !== null && typeof entry.action_type === \"string\")\n );\n}\n\n/** The cross-channel `omni_` entry, else the plain name, else the largest alias: never a sum, the aliases overlap. */\nfunction representative(canonical: string, family: ActionEntry[]): ActionEntry {\n const pick =\n family.find((entry) => entry.action_type === `omni_${canonical}`) ??\n family.find((entry) => entry.action_type === canonical) ??\n family.reduce((best, entry) => (Number(entry.value) > Number(best.value) ? entry : best));\n return { ...pick, action_type: canonical };\n}\n\n/** The `--action-breakdowns` dimensions an entry is sliced by (`action_device: \"iphone\"`), beyond its type. */\nfunction sliceOf(entry: ActionEntry): Array<[string, unknown]> {\n return Object.entries(entry).filter(([key]) => key.startsWith(\"action_\") && key !== \"action_type\");\n}\n\n/** Aliases collapse within one breakdown slice: an iPhone and a desktop count of one conversion are two entries. */\nfunction collapse(entries: ActionEntry[]): ActionEntry[] {\n const families = new Map<string, ActionEntry[]>();\n for (const entry of entries) {\n const key = JSON.stringify([canonicalType(entry.action_type), sliceOf(entry)]);\n families.set(key, [...(families.get(key) ?? []), entry]);\n }\n return [...families.values()].map((family) => representative(canonicalType(family[0]?.action_type ?? \"\"), family));\n}\n\n/** `--action-types`: a plain name (its aliases collapsed), an exact raw name, or a custom event's own name. */\nfunction keepNamed(entries: ActionEntry[], wanted: string[]): ActionEntry[] {\n const raw = entries.filter(\n (entry) =>\n (wanted.includes(entry.action_type) && canonicalType(entry.action_type) !== entry.action_type) ||\n wanted.some((name) => entry.action_type.endsWith(`.${name}`)),\n );\n const named = collapse(entries).filter((entry) => wanted.includes(entry.action_type));\n return [...named, ...raw.filter((entry) => !named.some((kept) => kept.action_type === entry.action_type))];\n}\n\nfunction compactArray(field: string, entries: ActionEntry[], wanted: string[] | undefined, dropped: Set<string>) {\n if (!MIXED_ACTION_FIELDS.has(field)) return collapse(entries);\n if (wanted) return keepNamed(entries, wanted);\n const kept = entries.filter((entry) => {\n if (!isNoise(entry.action_type)) return true;\n dropped.add(entry.action_type);\n return false;\n });\n return collapse(kept);\n}\n\n/** Every row with its action arrays compacted, and the engagement or combined types that were dropped. */\nexport function compactInsightsRows(\n rows: InsightsRow[],\n options: { actionTypes?: string[] },\n): { rows: InsightsRow[]; dropped: string[] } {\n const dropped = new Set<string>();\n const compacted = rows.map((row) =>\n Object.fromEntries(\n Object.entries(row).map(([field, value]) => [\n field,\n isActionArray(value) ? compactArray(field, value, options.actionTypes, dropped) : value,\n ]),\n ),\n );\n return { rows: compacted, dropped: [...dropped] };\n}\n\n/** Arrays that count actions; their entries can be priced from the row's spend. */\nconst COUNT_FIELDS = new Set([\"actions\", \"unique_actions\", \"conversions\"]);\n\nconst CUSTOM_EVENT_PREFIX = \"offsite_conversion.fb_pixel_custom\";\n\n/** `actions.lead`, or `actions.lead[iphone]` for an `--action-breakdowns` slice. */\nfunction columnOf(field: string, entry: ActionEntry): string {\n const slice = sliceOf(entry).map(([, value]) => String(value));\n return slice.length === 0 ? `${field}.${entry.action_type}` : `${field}.${entry.action_type}[${slice.join(\",\")}]`;\n}\n\nfunction round2(value: number): number {\n return Math.round(value * 100) / 100;\n}\n\n/** Spend over count, for an unsliced count entry that is priced: spend is per row, never per breakdown slice. */\nfunction pricedEntry(field: string, entry: ActionEntry, priceAll: boolean): boolean {\n if (!COUNT_FIELDS.has(field) || sliceOf(entry).length > 0) return false;\n return priceAll || entry.action_type.startsWith(CUSTOM_EVENT_PREFIX);\n}\n\n/**\n * Rows for `--output md|csv`: each action array becomes one `<field>.<action_type>`\n * column holding its total, in place of the array as JSON in one cell. The\n * click/view split stays in `--output json|jsonl`. Meta adds each row's period\n * (`date_start`, `date_stop`) outside the requested fields; it leads the table.\n * A custom event (a CRM stage), or every type `--action-types` named\n * (`priceAll`), gets a `cost_per.<field>.<action_type>` column: the row's spend\n * over that count, in the requested attribution windows.\n */\nexport function insightsTable(\n rows: InsightsRow[],\n fields: string[],\n options: { priceAll?: boolean } = {},\n): { rows: InsightsRow[]; columns: string[] } {\n const priceAll = options.priceAll ?? false;\n const period = [\"date_start\", \"date_stop\"].filter(\n (field) => !fields.includes(field) && rows.some((row) => row[field] !== undefined),\n );\n const columns = [...period, ...fields].flatMap((field) => {\n const counts = new Set<string>();\n const costs = new Set<string>();\n for (const row of rows) {\n const value = row[field];\n if (!isActionArray(value)) continue;\n for (const entry of value) {\n counts.add(columnOf(field, entry));\n if (pricedEntry(field, entry, priceAll) && row.spend !== undefined)\n costs.add(`cost_per.${columnOf(field, entry)}`);\n }\n }\n return counts.size === 0 ? [field] : [...counts, ...costs];\n });\n const flat = rows.map((row) => {\n const out: InsightsRow = {};\n const spend = Number(row.spend);\n for (const [field, value] of Object.entries(row)) {\n if (!isActionArray(value)) {\n out[field] = value;\n continue;\n }\n for (const entry of value) {\n const column = columnOf(field, entry);\n out[column] = entry.value;\n const count = Number(entry.value);\n if (pricedEntry(field, entry, priceAll) && Number.isFinite(spend) && count > 0) {\n out[`cost_per.${column}`] = round2(spend / count);\n }\n }\n }\n return out;\n });\n return { rows: flat, columns };\n}\n\n/** The columns `--intent funnel` adds to every row. */\nexport const FUNNEL_COLUMNS = [\"result_type\", \"results\", \"cvr\", \"cost_per_result\"];\n\n/** The conversions a funnel ends in, deepest first: the first one an ad reports is its result. */\nconst RESULT_PRIORITY = [\n \"purchase\",\n \"complete_registration\",\n \"lead\",\n \"submit_application\",\n \"subscribe\",\n \"start_trial\",\n \"schedule\",\n \"contact\",\n \"initiate_checkout\",\n \"add_payment_info\",\n \"add_to_cart\",\n];\n\nfunction countOf(actions: ActionEntry[], type: string): number {\n return actions.filter((entry) => entry.action_type === type).reduce((sum, entry) => sum + Number(entry.value), 0);\n}\n\nfunction resultTypeOf(actions: ActionEntry[], wanted: string[] | undefined): string | null {\n const present = new Set(actions.map((entry) => entry.action_type));\n const named = (wanted ?? []).find((name) => [...present].some((type) => type === name || type.endsWith(`.${name}`)));\n if (named) return [...present].find((type) => type === named || type.endsWith(`.${named}`)) ?? null;\n const standard = RESULT_PRIORITY.find((type) => present.has(type));\n if (standard) return standard;\n const custom = actions\n .filter((entry) => entry.action_type.startsWith(CUSTOM_EVENT_PREFIX))\n .sort((a, b) => Number(b.value) - Number(a.value));\n return custom[0]?.action_type ?? null;\n}\n\n/**\n * `--intent funnel` rows with the figures the intent exists for: the ad's\n * result (the first `--action-types` name it reports, else its deepest standard\n * conversion, else its largest custom event), `cvr` as the percent of link\n * clicks that became one, and `cost_per_result` as spend over results. Reads\n * compacted rows, where each conversion sits under its plain name.\n */\nexport function withFunnelResults(rows: InsightsRow[], options: { actionTypes?: string[] }): InsightsRow[] {\n return rows.map((row) => {\n const actions = isActionArray(row.actions) ? row.actions : [];\n const resultType = resultTypeOf(actions, options.actionTypes);\n const results = resultType === null ? null : countOf(actions, resultType);\n const linkClicks =\n row.inline_link_clicks !== undefined ? Number(row.inline_link_clicks) : countOf(actions, \"link_click\");\n const spend = Number(row.spend);\n return {\n ...row,\n result_type: resultType,\n results,\n cvr: results !== null && linkClicks > 0 ? round2((results / linkClicks) * 100) : null,\n cost_per_result: results !== null && results > 0 && Number.isFinite(spend) ? round2(spend / results) : null,\n };\n });\n}\n","import { placementFormatNote, previewFormatForPosition } from \"@baker/api/ads-meta\";\n\n/**\n * Reads a placement breakdown the way the question \"why does my video show as a\n * still image?\" actually needs to be answered: with this account's own numbers.\n *\n * The failure this replaces is an agent recalling a list of \"image-only\n * placements\" (most of it wrong) and inventing a mechanism Meta does not\n * document. Impressions against video plays, per placement, is the cheap\n * empirical check — it costs one query the agent already ran, and it is\n * account evidence rather than a rule. So the hints below name a suspect and\n * hand over the command that confirms it; they never conclude.\n */\n\n/**\n * Below this, a placement's play rate is arithmetic on too few impressions to\n * carry a claim. Set against a 90%-ish reference rate, seeing no plays in 20\n * impressions is not something chance produces — so this is low enough to reach\n * the long tail where format problems actually live, and the placements it\n * excludes are the ones nobody could have concluded anything from anyway.\n */\nconst MIN_IMPRESSIONS = 20;\n\n/**\n * How far below the ad's own play rate counts as \"this placement is not playing\".\n *\n * Judged against the ad, not against zero. The account this was built from is\n * the reason: it plays at 93% overall, and the one placement carrying a\n * documented format constraint played at 3.85% — 24x worse, and still above any\n * absolute \"under 2%\" bar. An absolute rule cannot see that at any impression\n * threshold; a relative one calibrates itself per creative and per account.\n */\nconst SILENT_FRACTION_OF_REFERENCE = 0.1;\n\n/** Proof the creative plays at all somewhere, so a flagged placement means something. */\nconst PLAYING_REFERENCE_RATE = 0.5;\n\ninterface PlacementDelivery {\n platform: string;\n position: string;\n impressions: number;\n plays: number;\n playRate: number;\n share: number;\n}\n\nfunction toNumber(value: unknown): number {\n const n = Number(value);\n return Number.isFinite(n) ? n : 0;\n}\n\n/** Meta returns action metrics as `[{ action_type, value }]`; the total is what matters here. */\nfunction sumActionValues(value: unknown): number {\n if (!Array.isArray(value)) return 0;\n return value.reduce<number>((total, entry) => {\n const item = entry as { value?: unknown };\n return total + toNumber(item?.value);\n }, 0);\n}\n\nfunction aggregate(rows: Array<Record<string, unknown>>): PlacementDelivery[] {\n const byPlacement = new Map<string, PlacementDelivery>();\n let totalImpressions = 0;\n\n for (const row of rows) {\n const position = row.platform_position;\n if (typeof position !== \"string\" || position.length === 0) continue;\n const platform = typeof row.publisher_platform === \"string\" ? row.publisher_platform : \"\";\n const impressions = toNumber(row.impressions);\n totalImpressions += impressions;\n const key = `${platform}/${position}`;\n const current = byPlacement.get(key) ?? { platform, position, impressions: 0, plays: 0, playRate: 0, share: 0 };\n current.impressions += impressions;\n current.plays += sumActionValues(row.video_play_actions);\n byPlacement.set(key, current);\n }\n\n return [...byPlacement.values()].map((placement) => ({\n ...placement,\n playRate: placement.impressions > 0 ? placement.plays / placement.impressions : 0,\n share: totalImpressions > 0 ? placement.impressions / totalImpressions : 0,\n }));\n}\n\nfunction previewCommand(placement: PlacementDelivery): string {\n const format = previewFormatForPosition(placement.position, placement.platform);\n return format\n ? `\\`baker ads meta preview --creative-id <id> --placement ${placement.position} --platform ${placement.platform}\\``\n : `no preview format is known for ${placement.position}, so Meta's renderer cannot confirm it — say the placement is unverified rather than filling the gap`;\n}\n\n/**\n * The play rate only means something when every row describes the same\n * creative. Aggregating placements across ads puts an image ad's impressions in\n * the same bucket as a video's plays, which reads as \"this placement doesn't\n * render video\" when it only means \"an image ad ran there\" — the exact wrong\n * conclusion this module exists to prevent. So a query that does not pin one ad\n * (`--level ad --object <adId>`) gets no hint rather than a confounded one.\n */\nfunction isSingleAdQuery(rows: Array<Record<string, unknown>>): boolean {\n const adIds = new Set<string>();\n for (const row of rows) {\n if (typeof row.ad_id !== \"string\" || row.ad_id.length === 0) return false;\n adIds.add(row.ad_id);\n }\n return adIds.size === 1;\n}\n\n/**\n * Placements this account delivered into without the video ever playing.\n *\n * Silent unless the query carried video metrics AND the creative demonstrably\n * plays somewhere else: without a playing reference, a zero everywhere means\n * \"not a video query\", not \"the placement is broken\".\n */\nexport function placementDeliveryHints(rows: Array<Record<string, unknown>>): string[] {\n const carriesVideoMetrics = rows.some((row) => Array.isArray(row.video_play_actions));\n if (!carriesVideoMetrics || !isSingleAdQuery(rows)) return [];\n\n const placements = aggregate(rows);\n const judgeable = placements.filter((p) => p.impressions >= MIN_IMPRESSIONS);\n const impressions = judgeable.reduce((total, p) => total + p.impressions, 0);\n const reference = impressions > 0 ? judgeable.reduce((total, p) => total + p.plays, 0) / impressions : 0;\n if (reference < PLAYING_REFERENCE_RATE) return [];\n\n const silent = judgeable\n .filter((p) => p.playRate < reference * SILENT_FRACTION_OF_REFERENCE)\n .sort((a, b) => b.impressions - a.impressions);\n\n // Never go quiet on a video placement query. Silence is what the agent fills\n // in with a remembered rule, and \"every placement plays\" is the answer to\n // \"why does it show as a still image\" far more often than a placement is.\n if (silent.length === 0) {\n const worst = [...judgeable].sort((a, b) => a.playRate - b.playRate)[0];\n return [\n `Checked every placement above ${MIN_IMPRESSIONS} impressions against this ad's own play rate (${(reference * 100).toFixed(0)}%): no placement is failing to play the video${worst ? `, the lowest being ${worst.platform}/${worst.position} at ${(worst.playRate * 100).toFixed(0)}%` : \"\"}. So placements do not explain a \"it shows as a still image\" report — rule out autoplay off or data saver in the viewer's own app, which renders every video as its cover frame account-wide.`,\n ];\n }\n\n const hints = silent.map((placement) => {\n const note = placementFormatNote(placement.position);\n const documented = note ? ` Meta documents this placement: ${note.note}` : \"\";\n return `${placement.platform}/${placement.position} delivered ${placement.impressions.toLocaleString(\"en-US\")} impressions (${(placement.share * 100).toFixed(1)}% of the total) and ${placement.plays.toLocaleString(\"en-US\")} video plays — it may not be rendering the video. This is account evidence, not a rule: confirm what Meta renders there with ${previewCommand(placement)} before you say anything about it.${documented}`;\n });\n\n const combinedShare = silent.reduce((total, placement) => total + placement.share, 0) * 100;\n hints.push(\n `Those placements are ${combinedShare.toFixed(1)}% of delivery in this query. State that share before proposing to remove them — and note that removing placements from a live ad set is a targeting change, which Meta counts as a significant edit that re-enters the learning phase.`,\n );\n return hints;\n}\n","/**\n * Insights field bundles. Picked for AI agent ergonomics: small, focused field\n * lists that answer one specific question without forcing the AI to enumerate\n * Meta's 500+ insights fields.\n *\n * Two-axis design:\n * --intent (field bundle, default: baseline) — what data to ask for\n * --level (object granularity, default: account) — at what granularity\n *\n * Intents are independent of level — pass `--intent ranking --level ad` to flag\n * creatives, or `--intent revenue --level campaign` for ROAS by campaign.\n *\n * Identity fields (campaign_name etc.) are appended automatically based on\n * level so the AI can read rows without joining.\n */\n\nexport type InsightsLevel = \"account\" | \"campaign\" | \"adset\" | \"ad\";\n\nexport type InsightsIntent = \"baseline\" | \"revenue\" | \"funnel\" | \"ranking\" | \"video\" | \"identity\";\n\ninterface IntentDefinition {\n name: InsightsIntent;\n description: string;\n fields: string[];\n /** Action breakdowns to slice the actions[] array — empty if not needed. */\n actionBreakdowns?: string[];\n}\n\nconst INSIGHTS_INTENTS: Record<InsightsIntent, IntentDefinition> = {\n baseline: {\n name: \"baseline\",\n description: \"Spend, impressions, clicks, CTR, CPC, CPM. The default question: 'how is delivery?'\",\n fields: [\"impressions\", \"reach\", \"frequency\", \"spend\", \"clicks\", \"ctr\", \"cpc\", \"cpm\"],\n },\n revenue: {\n name: \"revenue\",\n description: \"Spend, conversions, action_values, purchase_roas. 'How much money are we making?'\",\n fields: [\"spend\", \"actions\", \"action_values\", \"conversions\", \"conversion_values\", \"purchase_roas\"],\n actionBreakdowns: [\"action_type\"],\n },\n funnel: {\n name: \"funnel\",\n description: \"Impression → click → landing page → action. 'Where do users drop off?'\",\n fields: [\"impressions\", \"clicks\", \"inline_link_clicks\", \"outbound_clicks\", \"actions\", \"spend\"],\n actionBreakdowns: [\"action_type\"],\n },\n ranking: {\n name: \"ranking\",\n description: \"Quality, engagement, conversion-rate rankings. 'Which creatives need a refresh?'\",\n fields: [\"impressions\", \"spend\", \"ctr\", \"quality_ranking\", \"engagement_rate_ranking\", \"conversion_rate_ranking\"],\n },\n video: {\n name: \"video\",\n description: \"Watch funnel, thruplay cost. 'How are video creatives holding attention?'\",\n fields: [\n \"impressions\",\n \"spend\",\n \"video_play_actions\",\n \"video_p25_watched_actions\",\n \"video_p50_watched_actions\",\n \"video_p75_watched_actions\",\n \"video_p100_watched_actions\",\n \"video_thruplay_watched_actions\",\n \"cost_per_thruplay\",\n ],\n },\n identity: {\n name: \"identity\",\n description: \"Just the names + spend — for cheap roll-up summaries.\",\n fields: [\"spend\", \"impressions\"],\n },\n};\n\nconst IDENTITY_FIELDS_BY_LEVEL: Record<InsightsLevel, string[]> = {\n account: [\"account_id\", \"account_name\", \"account_currency\"],\n campaign: [\"campaign_id\", \"campaign_name\", \"objective\"],\n adset: [\"adset_id\", \"adset_name\", \"campaign_id\", \"campaign_name\"],\n ad: [\"ad_id\", \"ad_name\", \"adset_id\", \"adset_name\", \"campaign_id\", \"campaign_name\"],\n};\n\n/** Compose final field list: intent metrics + level-specific identity fields, deduplicated. */\nexport function composeFields(intent: InsightsIntent, level: InsightsLevel): string[] {\n const intentFields = INSIGHTS_INTENTS[intent].fields;\n const identity = IDENTITY_FIELDS_BY_LEVEL[level];\n const seen = new Set<string>();\n const out: string[] = [];\n for (const f of [...identity, ...intentFields]) {\n if (!seen.has(f)) {\n seen.add(f);\n out.push(f);\n }\n }\n return out;\n}\n\nexport function getIntent(name: string): IntentDefinition | undefined {\n return INSIGHTS_INTENTS[name as InsightsIntent];\n}\n\nexport function listIntents(): IntentDefinition[] {\n return Object.values(INSIGHTS_INTENTS);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,132 @@
1
+ import {
2
+ CHATGPT_ADS_GRANULARITIES,
3
+ CHATGPT_ADS_LEVELS,
4
+ CHATGPT_ADS_METRICS,
5
+ CHATGPT_ADS_REFERENCE,
6
+ CHATGPT_ADS_SEGMENTS,
7
+ chatgptAdsInsightsRequestSchema,
8
+ insightsRequestFromArgs,
9
+ runChatgptRead
10
+ } from "./chunk-XPXHJ6EP.js";
11
+ import {
12
+ syncedFirstHint
13
+ } from "./chunk-Y2FAUFWK.js";
14
+ import {
15
+ writeJsonEnvelope
16
+ } from "./chunk-EAHBTBVR.js";
17
+ import "./chunk-SOPVIIUW.js";
18
+ import "./chunk-G4FG5EQO.js";
19
+ import {
20
+ apiPost
21
+ } from "./chunk-C35UMKYG.js";
22
+ import "./chunk-ELAYD7O3.js";
23
+ import "./chunk-LBIF6FJY.js";
24
+ import {
25
+ registerSchema
26
+ } from "./chunk-TRXGJZDL.js";
27
+ import "./chunk-YQSBHWOI.js";
28
+
29
+ // src/commands/ads/chatgpt/insights.ts
30
+ import { defineCommand } from "citty";
31
+ var args = {
32
+ level: {
33
+ type: "string",
34
+ description: `What one row is: ${CHATGPT_ADS_LEVELS.join("|")} (default campaign)`,
35
+ required: false
36
+ },
37
+ "campaign-id": { type: "string", description: "Report on one campaign (cmpn_\u2026)", required: false },
38
+ "ad-group-id": { type: "string", description: "Report on one ad group (adgrp_\u2026)", required: false },
39
+ "ad-id": { type: "string", description: "Report on one ad (ad_\u2026)", required: false },
40
+ days: {
41
+ type: "string",
42
+ description: "Last N complete days, ending the account's yesterday (default 7)",
43
+ required: false
44
+ },
45
+ since: {
46
+ type: "string",
47
+ description: "First day, YYYY-MM-DD, account timezone (instead of --days)",
48
+ required: false
49
+ },
50
+ until: { type: "string", description: "Last day, inclusive, YYYY-MM-DD", required: false },
51
+ granularity: {
52
+ type: "string",
53
+ description: `${CHATGPT_ADS_GRANULARITIES.join("|")} (default none: one total per row)`,
54
+ required: false
55
+ },
56
+ segment: {
57
+ type: "string",
58
+ description: `Break rows down by one of ${CHATGPT_ADS_SEGMENTS.join("|")}`,
59
+ required: false
60
+ },
61
+ metrics: {
62
+ type: "string",
63
+ description: `CSV of ${CHATGPT_ADS_METRICS.join(",")} (default impressions,clicks,spend,ctr,cpc,conversions,cpa)`,
64
+ required: false
65
+ },
66
+ sort: { type: "string", description: "Metric to rank rows by, highest first", required: false },
67
+ limit: { type: "string", description: "Rows, 1-2000 (default 200)", required: false }
68
+ };
69
+ registerSchema({
70
+ command: "ads.chatgpt.insights",
71
+ description: "Performance of the connected ChatGPT Ads account: impressions, clicks, spend, CTR, CPC, CPM, conversions, CPA, attributed sales and ROAS, per account, campaign, ad group or ad, over a window, optionally per day and broken down by country, device, platform or product. Spend and costs are in the account currency; null means not reported, not zero.",
72
+ args
73
+ });
74
+ function insightsHints(report) {
75
+ const hints = [];
76
+ if (report.rows.length === 0) {
77
+ hints.push(
78
+ "No delivery in this window. Check `baker ads chatgpt campaigns` for serving issues before concluding the ads do not work."
79
+ );
80
+ }
81
+ if (report.truncated) {
82
+ hints.push("More rows matched than --limit allowed. Narrow the report or raise --limit (max 2000).");
83
+ }
84
+ hints.push(
85
+ "Conversions come from ChatGPT Ads' own pixel or Conversions API and take at least a day to appear; the most recent days are still filling in."
86
+ );
87
+ return hints;
88
+ }
89
+ function chatgptInsightsHints(report, request) {
90
+ const hints = insightsHints(report);
91
+ return request.segment ? hints : [...hints, syncedFirstHint("chatgpt", request.level)];
92
+ }
93
+ var insightsCommand = defineCommand({
94
+ meta: {
95
+ name: "insights",
96
+ description: `How a ChatGPT Ads account performs. Start here for "how are the ChatGPT campaigns doing".
97
+
98
+ Examples:
99
+ baker ads chatgpt insights # last 7 days, one row per campaign
100
+ baker ads chatgpt insights --days 30 --granularity daily --level account
101
+ baker ads chatgpt insights --campaign-id cmpn_123 --level ad --sort spend
102
+ baker ads chatgpt insights --segment country --metrics spend,clicks,conversions
103
+ baker ads chatgpt insights --since 2026-09-01 --until 2026-09-07 --metrics spend,order_created_roas`
104
+ },
105
+ args,
106
+ run: async ({ args: input }) => {
107
+ const parsed = chatgptAdsInsightsRequestSchema.safeParse(insightsRequestFromArgs(input));
108
+ if (!parsed.success) {
109
+ const message = parsed.error.issues[0]?.message ?? "Invalid report request";
110
+ writeJsonEnvelope({
111
+ ok: false,
112
+ error: {
113
+ code: "VALIDATION_ERROR",
114
+ message,
115
+ fix: { action: "retry_with_modified_query", explanation: message },
116
+ retryable: false
117
+ }
118
+ });
119
+ process.exit(1);
120
+ }
121
+ await runChatgptRead(
122
+ CHATGPT_ADS_REFERENCE.insights,
123
+ () => apiPost("/api/ads/chatgpt/insights", parsed.data),
124
+ (report) => chatgptInsightsHints(report, parsed.data)
125
+ );
126
+ }
127
+ });
128
+ export {
129
+ chatgptInsightsHints,
130
+ insightsCommand
131
+ };
132
+ //# sourceMappingURL=insights-UMPXHRKD.js.map
@@ -0,0 +1,192 @@
1
+ import {
2
+ fetchRunRecord
3
+ } from "./chunk-YXCSJQKQ.js";
4
+ import {
5
+ findWorkspaceRoot
6
+ } from "./chunk-CM2LECNX.js";
7
+ import "./chunk-AXSSATJW.js";
8
+ import "./chunk-DNRXEP4A.js";
9
+ import "./chunk-OYYAR5TD.js";
10
+ import "./chunk-FSHIEGAY.js";
11
+ import "./chunk-QV6AST5T.js";
12
+ import "./chunk-WCU362Z6.js";
13
+ import "./chunk-GIWHHCD6.js";
14
+ import "./chunk-SOPVIIUW.js";
15
+ import "./chunk-G4FG5EQO.js";
16
+ import "./chunk-NSBNIPIW.js";
17
+ import "./chunk-BNO3EFGR.js";
18
+ import {
19
+ ApiError
20
+ } from "./chunk-C35UMKYG.js";
21
+ import "./chunk-ELAYD7O3.js";
22
+ import "./chunk-LBIF6FJY.js";
23
+ import "./chunk-TRXGJZDL.js";
24
+ import "./chunk-YQSBHWOI.js";
25
+
26
+ // src/commands/canvas/inspect.ts
27
+ import { execFile } from "child_process";
28
+ import { readdir, readFile, stat } from "fs/promises";
29
+ import path from "path";
30
+ import { promisify } from "util";
31
+ import { defineCommand } from "citty";
32
+ var execFileAsync = promisify(execFile);
33
+ var inspectCommand = defineCommand({
34
+ meta: {
35
+ name: "inspect",
36
+ 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."
37
+ },
38
+ args: {
39
+ run: { type: "positional", required: true, description: "Run id (e.g. r_01K...) or absolute run directory" },
40
+ "outputs-dir": { type: "string", description: "Per-run outputs root (default <workspace root>/canvas, where `canvas run` writes)" },
41
+ thumbnails: {
42
+ type: "boolean",
43
+ description: "Extract start/middle/end frames from every video output in the local run folder (requires ffmpeg)"
44
+ }
45
+ },
46
+ async run({ args }) {
47
+ const cwd = process.cwd();
48
+ const outputsDir = args["outputs-dir"] ? path.resolve(String(args["outputs-dir"])) : path.join(findWorkspaceRoot(cwd) ?? cwd, "canvas");
49
+ const runArg = String(args.run);
50
+ const runDir = await localRunDir(runArg, outputsDir);
51
+ if (!runDir) {
52
+ if (path.isAbsolute(runArg)) fail("not_found", `${runArg} is not a run directory`);
53
+ await inspectFromHistory(runArg, path.join(outputsDir, runArg));
54
+ return;
55
+ }
56
+ const manifest = await loadManifest(runDir);
57
+ const files = await listRunFiles(runDir);
58
+ const videos = files.filter((f) => isVideoFile(f.path));
59
+ let thumbnails = [];
60
+ if (args.thumbnails) {
61
+ thumbnails = await extractThumbnails(videos.map((v) => v.path));
62
+ }
63
+ const summary = {
64
+ ok: true,
65
+ source: "local",
66
+ run_id: manifest.run_id ?? path.basename(runDir),
67
+ run_dir: runDir,
68
+ stats: manifest.stats ?? null,
69
+ output: manifest.output ?? null,
70
+ node_runs: manifest.node_runs ?? [],
71
+ files: files.map((f) => ({ name: f.name, path: f.path, size_bytes: f.size })),
72
+ thumbnails
73
+ };
74
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}
75
+ `);
76
+ }
77
+ });
78
+ async function localRunDir(run, outputsDir) {
79
+ const candidate = path.isAbsolute(run) ? run : path.join(outputsDir, run);
80
+ const s = await stat(candidate).catch(() => null);
81
+ return s?.isDirectory() ? candidate : null;
82
+ }
83
+ async function inspectFromHistory(runId, expectedDir) {
84
+ let run;
85
+ try {
86
+ run = await fetchRunRecord(runId);
87
+ } catch (e) {
88
+ const reason = e instanceof ApiError ? e.message : e instanceof Error ? e.message : String(e);
89
+ fail("unavailable", `No run folder at ${expectedDir}, and the run history could not be read (${reason}).`);
90
+ }
91
+ if (!run) {
92
+ fail(
93
+ "not_found",
94
+ `No run "${runId}": there is no folder at ${expectedDir} and the company's run history has no run by that id.`
95
+ );
96
+ }
97
+ const summary = {
98
+ ok: true,
99
+ source: "run_history",
100
+ run_id: run.runId,
101
+ creative: run.creativeSlug ?? null,
102
+ status: run.status,
103
+ ...run.errorMessage ? { error: run.errorMessage } : {},
104
+ stats: {
105
+ total_nodes: run.stats.totalNodes,
106
+ cached_nodes: run.stats.cachedNodes,
107
+ total_credits: run.stats.totalCredits,
108
+ duration_ms: run.stats.durationMs
109
+ },
110
+ outputs: run.finalOutputs,
111
+ node_runs: run.nodes.map((node) => ({
112
+ node_id: node.nodeId,
113
+ node_type: node.nodeType,
114
+ cached: node.cached,
115
+ duration_ms: node.durationMs,
116
+ credits: node.credits,
117
+ ...node.status ? { status: node.status } : {},
118
+ outputs: node.outputs
119
+ })),
120
+ ...run.review ? { review: run.review } : {},
121
+ hints: [
122
+ "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>`."
123
+ ]
124
+ };
125
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}
126
+ `);
127
+ }
128
+ function fail(code, message) {
129
+ process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message } }, null, 2)}
130
+ `);
131
+ process.exit(2);
132
+ }
133
+ async function loadManifest(runDir) {
134
+ const manifestPath = path.join(runDir, "manifest.json");
135
+ try {
136
+ const raw = await readFile(manifestPath, "utf-8");
137
+ return JSON.parse(raw);
138
+ } catch {
139
+ return {};
140
+ }
141
+ }
142
+ async function listRunFiles(runDir) {
143
+ const out = [];
144
+ const names = await readdir(runDir);
145
+ for (const name of names) {
146
+ const abs = path.join(runDir, name);
147
+ const s = await stat(abs).catch(() => null);
148
+ if (!s?.isFile()) continue;
149
+ out.push({ name, path: abs, size: s.size });
150
+ }
151
+ out.sort((a, b) => a.name.localeCompare(b.name));
152
+ return out;
153
+ }
154
+ function isVideoFile(p) {
155
+ return /\.(mp4|webm|mov)$/i.test(p);
156
+ }
157
+ async function extractThumbnails(videoPaths) {
158
+ const out = [];
159
+ for (const v of videoPaths) {
160
+ const duration = await probeDuration(v).catch(() => null);
161
+ if (duration === null) {
162
+ out.push({ video: v, frames: [] });
163
+ continue;
164
+ }
165
+ const frames = [];
166
+ const checkpoints = [0.05, 0.5, 0.95];
167
+ const base = v.replace(/\.[^.]+$/, "");
168
+ for (const ratio of checkpoints) {
169
+ const at = Math.max(0, Math.min(duration * ratio, duration - 0.01));
170
+ const dest = `${base}__frame_${Math.round(ratio * 100).toString().padStart(2, "0")}.png`;
171
+ try {
172
+ await execFileAsync("ffmpeg", ["-ss", at.toFixed(3), "-i", v, "-frames:v", "1", "-y", dest]);
173
+ frames.push(dest);
174
+ } catch {
175
+ }
176
+ }
177
+ out.push({ video: v, frames });
178
+ }
179
+ return out;
180
+ }
181
+ async function probeDuration(filePath) {
182
+ const { stdout } = await execFileAsync(
183
+ "ffprobe",
184
+ ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", filePath],
185
+ { encoding: "utf-8" }
186
+ );
187
+ return Number.parseFloat(stdout.trim());
188
+ }
189
+ export {
190
+ inspectCommand
191
+ };
192
+ //# sourceMappingURL=inspect-I2CJDQSA.js.map
@@ -0,0 +1,95 @@
1
+ import {
2
+ handleResearchError,
3
+ writeResearchJson,
4
+ writeResearchOutput
5
+ } from "./chunk-UMQCYEAL.js";
6
+ import {
7
+ buildResearchQueryContext,
8
+ warnDefaults
9
+ } from "./chunk-NQF5U6FX.js";
10
+ import "./chunk-GCFC2MNR.js";
11
+ import "./chunk-BNO3EFGR.js";
12
+ import {
13
+ apiPost
14
+ } from "./chunk-C35UMKYG.js";
15
+ import "./chunk-ELAYD7O3.js";
16
+ import "./chunk-LBIF6FJY.js";
17
+ import {
18
+ registerSchema
19
+ } from "./chunk-TRXGJZDL.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-NBP5IDND.js.map