@koda-sl/baker-cli 0.495.0 → 0.497.0

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 (848) hide show
  1. package/README.md +25 -4
  2. package/dist/account-ZKJFX2GK.js +80 -0
  3. package/dist/account-ZKJFX2GK.js.map +1 -0
  4. package/dist/account-users-SZCYHVBM.js +62 -0
  5. package/dist/account-users-SZCYHVBM.js.map +1 -0
  6. package/dist/accounts-5DFYKYSM.js +78 -0
  7. package/dist/accounts-5DFYKYSM.js.map +1 -0
  8. package/dist/accounts-OGAIQNE6.js +612 -0
  9. package/dist/accounts-OGAIQNE6.js.map +1 -0
  10. package/dist/actions-FMNJSOBA.js +55 -0
  11. package/dist/activecampaign-LYYYH6XD.js +936 -0
  12. package/dist/activecampaign-LYYYH6XD.js.map +1 -0
  13. package/dist/add-AOQLZRPC.js +80 -0
  14. package/dist/add-AOQLZRPC.js.map +1 -0
  15. package/dist/add-HWXEPSZF.js +105 -0
  16. package/dist/add-HWXEPSZF.js.map +1 -0
  17. package/dist/add-VDZPGZF5.js +148 -0
  18. package/dist/add-VDZPGZF5.js.map +1 -0
  19. package/dist/add-YYP3O536.js +303 -0
  20. package/dist/add-YYP3O536.js.map +1 -0
  21. package/dist/ads-OLXSDPD6.js +40 -0
  22. package/dist/advertisers-STYAIX72.js +121 -0
  23. package/dist/advertisers-STYAIX72.js.map +1 -0
  24. package/dist/analytics-6WBK4VFO.js +1977 -0
  25. package/dist/analytics-6WBK4VFO.js.map +1 -0
  26. package/dist/analytics-DHB325DM.js +434 -0
  27. package/dist/analytics-DHB325DM.js.map +1 -0
  28. package/dist/assign-BFXHYTMF.js +78 -0
  29. package/dist/assign-BFXHYTMF.js.map +1 -0
  30. package/dist/audience-size-XWHZV2GH.js +74 -0
  31. package/dist/audience-size-XWHZV2GH.js.map +1 -0
  32. package/dist/audit-IYGRU7LD.js +152 -0
  33. package/dist/audit-IYGRU7LD.js.map +1 -0
  34. package/dist/autocomplete-SDDSJTAF.js +112 -0
  35. package/dist/autocomplete-SDDSJTAF.js.map +1 -0
  36. package/dist/avatars-I4H3NMEJ.js +38 -0
  37. package/dist/bid-pricing-OVYBDRMV.js +101 -0
  38. package/dist/bid-pricing-OVYBDRMV.js.map +1 -0
  39. package/dist/brand-3V7ECY7D.js +22 -0
  40. package/dist/brief-U2W7KMFC.js +539 -0
  41. package/dist/brief-U2W7KMFC.js.map +1 -0
  42. package/dist/campaign-groups-FJHBVUA3.js +97 -0
  43. package/dist/campaign-groups-FJHBVUA3.js.map +1 -0
  44. package/dist/campaign-writes-XKYYMZML.js +166 -0
  45. package/dist/campaign-writes-XKYYMZML.js.map +1 -0
  46. package/dist/campaigns-E5UW4I3X.js +111 -0
  47. package/dist/campaigns-E5UW4I3X.js.map +1 -0
  48. package/dist/campaigns-MCB76NPQ.js +107 -0
  49. package/dist/canvas-JCNKMGCG.js +46 -0
  50. package/dist/capabilities-CLTZCXCZ.js +145 -0
  51. package/dist/capabilities-CLTZCXCZ.js.map +1 -0
  52. package/dist/chatgpt-XFZ42NXC.js +47 -0
  53. package/dist/chats-DTJSBDWO.js +277 -0
  54. package/dist/chats-DTJSBDWO.js.map +1 -0
  55. package/dist/check-CZTS64AW.js +105 -0
  56. package/dist/check-CZTS64AW.js.map +1 -0
  57. package/dist/chunk-2YTBPRRG.js +207 -0
  58. package/dist/chunk-3SNCMEJB.js +97 -0
  59. package/dist/chunk-7QGFO35A.js +23 -0
  60. package/dist/chunk-AV7ALENU.js +191 -0
  61. package/dist/chunk-BRLFQ4VX.js +604 -0
  62. package/dist/chunk-CAZGM2NX.js +92 -0
  63. package/dist/chunk-CAZGM2NX.js.map +1 -0
  64. package/dist/chunk-DJE7UXYT.js +831 -0
  65. package/dist/chunk-EFWXYUSK.js +139 -0
  66. package/dist/chunk-EONSZAZB.js +3868 -0
  67. package/dist/chunk-FALJQCWL.js +661 -0
  68. package/dist/chunk-FALJQCWL.js.map +1 -0
  69. package/dist/chunk-FG3MV2XM.js +89 -0
  70. package/dist/chunk-FKG476GH.js +392 -0
  71. package/dist/chunk-FUGQSIYG.js +297 -0
  72. package/dist/chunk-G4OFH3MX.js +455 -0
  73. package/dist/chunk-G4OFH3MX.js.map +1 -0
  74. package/dist/chunk-GZ4A2VYW.js +39 -0
  75. package/dist/chunk-GZ4A2VYW.js.map +1 -0
  76. package/dist/chunk-HPLHAHG5.js +275 -0
  77. package/dist/chunk-I24YT2KG.js +122 -0
  78. package/dist/chunk-IFDZZOUC.js +903 -0
  79. package/dist/chunk-JVVUI55M.js +455 -0
  80. package/dist/chunk-KKSHEPBY.js +363 -0
  81. package/dist/chunk-KQ7RCLGC.js +547 -0
  82. package/dist/chunk-L7WMS5PW.js +172 -0
  83. package/dist/chunk-LBRO4MTL.js +19 -0
  84. package/dist/chunk-LNRPOULW.js +224 -0
  85. package/dist/chunk-LX6WC2XZ.js +942 -0
  86. package/dist/chunk-MMGTJBM6.js +142 -0
  87. package/dist/chunk-NZS3KEQ2.js +97 -0
  88. package/dist/chunk-NZS3KEQ2.js.map +1 -0
  89. package/dist/chunk-O37VU7FG.js +6799 -0
  90. package/dist/chunk-O37VU7FG.js.map +1 -0
  91. package/dist/chunk-OEZYSL3U.js +51 -0
  92. package/dist/chunk-OOVHBMQB.js +103 -0
  93. package/dist/chunk-PTH7VWKK.js +159 -0
  94. package/dist/chunk-PYD6IGW6.js +401 -0
  95. package/dist/chunk-PYD6IGW6.js.map +1 -0
  96. package/dist/chunk-QE2E4EYJ.js +349 -0
  97. package/dist/chunk-QE2E4EYJ.js.map +1 -0
  98. package/dist/chunk-QZF4BVKL.js +66 -0
  99. package/dist/chunk-RITUSBYO.js +61 -0
  100. package/dist/chunk-SSTL3A7Z.js +206 -0
  101. package/dist/chunk-SZNGQ2GF.js +64 -0
  102. package/dist/chunk-SZNGQ2GF.js.map +1 -0
  103. package/dist/chunk-TD4SO6TR.js +169 -0
  104. package/dist/chunk-UZ4RTOFG.js +91 -0
  105. package/dist/chunk-VAX7PFQV.js +592 -0
  106. package/dist/chunk-VDRSZK4P.js +494 -0
  107. package/dist/chunk-VNU2EYD4.js +344 -0
  108. package/dist/chunk-WT4WDIXA.js +156 -0
  109. package/dist/chunk-XEX23CIB.js +160 -0
  110. package/dist/chunk-XXDF25BW.js +8939 -0
  111. package/dist/chunk-YJ3LSFMX.js +249 -0
  112. package/dist/chunk-YVK5RT3B.js +197 -0
  113. package/dist/chunk-YWWRLZUR.js +433 -0
  114. package/dist/chunk-Z4S5BCVZ.js +57 -0
  115. package/dist/chunk-ZYGK7GAK.js +1079 -0
  116. package/dist/claim-TSFPWTQY.js +198 -0
  117. package/dist/claim-TSFPWTQY.js.map +1 -0
  118. package/dist/cli.js +38 -37
  119. package/dist/cli.js.map +1 -1
  120. package/dist/companies-P7FZNJQV.js +196 -0
  121. package/dist/companies-P7FZNJQV.js.map +1 -0
  122. package/dist/complete-SYDIHMD5.js +82 -0
  123. package/dist/complete-SYDIHMD5.js.map +1 -0
  124. package/dist/connect-COS6G45S.js +43 -0
  125. package/dist/conversation-UJOWMJRH.js +94 -0
  126. package/dist/conversation-UJOWMJRH.js.map +1 -0
  127. package/dist/conversions-ONOIEILU.js +138 -0
  128. package/dist/conversions-ONOIEILU.js.map +1 -0
  129. package/dist/create-DPQRYQXK.js +208 -0
  130. package/dist/create-DPQRYQXK.js.map +1 -0
  131. package/dist/create-JD76Z4A4.js +60 -0
  132. package/dist/create-JD76Z4A4.js.map +1 -0
  133. package/dist/create-NOT3HGP2.js +133 -0
  134. package/dist/create-NOT3HGP2.js.map +1 -0
  135. package/dist/create-ZYEB7SHF.js +236 -0
  136. package/dist/create-ZYEB7SHF.js.map +1 -0
  137. package/dist/creatives-LRSELC7Y.js +221 -0
  138. package/dist/creatives-LRSELC7Y.js.map +1 -0
  139. package/dist/creatives-SEQHJD2M.js +58 -0
  140. package/dist/credentials-LHPTUVVA.js +288 -0
  141. package/dist/credentials-LHPTUVVA.js.map +1 -0
  142. package/dist/critique-Q7GSZ5RP.js +1459 -0
  143. package/dist/critique-Q7GSZ5RP.js.map +1 -0
  144. package/dist/critique-RR2XOQCE.js +228 -0
  145. package/dist/critique-RR2XOQCE.js.map +1 -0
  146. package/dist/crm-J7EU32PL.js +319 -0
  147. package/dist/crm-J7EU32PL.js.map +1 -0
  148. package/dist/crm-MC444ZVU.js +225 -0
  149. package/dist/crm-MC444ZVU.js.map +1 -0
  150. package/dist/customers-LMSX33FO.js +57 -0
  151. package/dist/delete-BQBVATMF.js +55 -0
  152. package/dist/delete-BQBVATMF.js.map +1 -0
  153. package/dist/delete-K7A3AUPH.js +65 -0
  154. package/dist/delete-K7A3AUPH.js.map +1 -0
  155. package/dist/delete-VV2ICIHF.js +67 -0
  156. package/dist/delete-VV2ICIHF.js.map +1 -0
  157. package/dist/demographics-7GWUXXS6.js +139 -0
  158. package/dist/demographics-7GWUXXS6.js.map +1 -0
  159. package/dist/discard-3CLZ4DPD.js +67 -0
  160. package/dist/discard-3CLZ4DPD.js.map +1 -0
  161. package/dist/domain-ZS74BSE6.js +99 -0
  162. package/dist/domain-ZS74BSE6.js.map +1 -0
  163. package/dist/draft-J3B33RAZ.js +308 -0
  164. package/dist/draft-J3B33RAZ.js.map +1 -0
  165. package/dist/draft-MZLWVX3D.js +218 -0
  166. package/dist/draft-MZLWVX3D.js.map +1 -0
  167. package/dist/draft-R56PIXCV.js +333 -0
  168. package/dist/draft-R56PIXCV.js.map +1 -0
  169. package/dist/experiment-7RJ5X2LL.js +1397 -0
  170. package/dist/experiments-NOSJJMYI.js +234 -0
  171. package/dist/experiments-NOSJJMYI.js.map +1 -0
  172. package/dist/facets-E6SHYUAI.js +115 -0
  173. package/dist/facets-E6SHYUAI.js.map +1 -0
  174. package/dist/feedback-HXCQBV7S.js +107 -0
  175. package/dist/feedback-HXCQBV7S.js.map +1 -0
  176. package/dist/feedback-record-GXPYXNT6.js +261 -0
  177. package/dist/feedback-record-GXPYXNT6.js.map +1 -0
  178. package/dist/fetch-HMUGSRE4.js +177 -0
  179. package/dist/fetch-HMUGSRE4.js.map +1 -0
  180. package/dist/find-2EPXK5RF.js +134 -0
  181. package/dist/fit-W7UNFZT5.js +63 -0
  182. package/dist/flows-SO5J3M3X.js +248 -0
  183. package/dist/flows-SO5J3M3X.js.map +1 -0
  184. package/dist/fonts-N42UYWTX.js +37 -0
  185. package/dist/forecast-24LGJVLC.js +119 -0
  186. package/dist/forecast-24LGJVLC.js.map +1 -0
  187. package/dist/funnel-NYT36B3C.js +395 -0
  188. package/dist/funnel-NYT36B3C.js.map +1 -0
  189. package/dist/ga4-6EIQC2TG.js +55 -0
  190. package/dist/get-KAGO4EC5.js +80 -0
  191. package/dist/get-KAGO4EC5.js.map +1 -0
  192. package/dist/get-PZX27LQY.js +38 -0
  193. package/dist/get-PZX27LQY.js.map +1 -0
  194. package/dist/get-R5JAFHTH.js +57 -0
  195. package/dist/get-R5JAFHTH.js.map +1 -0
  196. package/dist/google-O5OI6QFU.js +136 -0
  197. package/dist/google-ads-6X4BHGUR.js +196 -0
  198. package/dist/google-ads-6X4BHGUR.js.map +1 -0
  199. package/dist/gsc-BM3T2GDL.js +30 -0
  200. package/dist/history-LGOWYLBE.js +134 -0
  201. package/dist/history-LGOWYLBE.js.map +1 -0
  202. package/dist/hubspot-LJB3ETUT.js +780 -0
  203. package/dist/hubspot-LJB3ETUT.js.map +1 -0
  204. package/dist/icon-B7DG53S5.js +137 -0
  205. package/dist/ideas-DYN2DMFN.js +41 -0
  206. package/dist/images-EQCUXEHF.js +92 -0
  207. package/dist/ingest-B46AY3QU.js +24 -0
  208. package/dist/ingest-T7ZS2R4U.js +108 -0
  209. package/dist/ingest-T7ZS2R4U.js.map +1 -0
  210. package/dist/inspect-BSNGAT2S.js +190 -0
  211. package/dist/inspect-BSNGAT2S.js.map +1 -0
  212. package/dist/inspiration-TCCKM4R7.js +53 -0
  213. package/dist/keyword-metrics-KNTIN4ZK.js +198 -0
  214. package/dist/keyword-metrics-KNTIN4ZK.js.map +1 -0
  215. package/dist/keywords-for-site-S4MXGXWR.js +129 -0
  216. package/dist/keywords-for-site-S4MXGXWR.js.map +1 -0
  217. package/dist/landing-WVPA7NBR.js +28 -0
  218. package/dist/leads-EINV5FK3.js +113 -0
  219. package/dist/leads-EINV5FK3.js.map +1 -0
  220. package/dist/learn-7Z2VR6MS.js +205 -0
  221. package/dist/learn-7Z2VR6MS.js.map +1 -0
  222. package/dist/line-item-writes-Z3TIB5KZ.js +209 -0
  223. package/dist/line-item-writes-Z3TIB5KZ.js.map +1 -0
  224. package/dist/line-items-OEWYOPFP.js +103 -0
  225. package/dist/link-KYHUIPJE.js +65 -0
  226. package/dist/link-KYHUIPJE.js.map +1 -0
  227. package/dist/linkedin-JVB4HXJC.js +1314 -0
  228. package/dist/linkedin-JVB4HXJC.js.map +1 -0
  229. package/dist/list-EORTO73V.js +93 -0
  230. package/dist/list-EORTO73V.js.map +1 -0
  231. package/dist/list-QQVLURKH.js +152 -0
  232. package/dist/list-QQVLURKH.js.map +1 -0
  233. package/dist/list-QWGKRUSM.js +65 -0
  234. package/dist/list-QWGKRUSM.js.map +1 -0
  235. package/dist/list-WRBWQASJ.js +50 -0
  236. package/dist/list-Z6NMNK3T.js +304 -0
  237. package/dist/list-Z6NMNK3T.js.map +1 -0
  238. package/dist/log-RUMKYPYK.js +93 -0
  239. package/dist/log-RUMKYPYK.js.map +1 -0
  240. package/dist/logo-QTSBKP2J.js +18 -0
  241. package/dist/make-IJGCQA7C.js +1354 -0
  242. package/dist/make-IJGCQA7C.js.map +1 -0
  243. package/dist/map-QZHIJFQT.js +434 -0
  244. package/dist/map-QZHIJFQT.js.map +1 -0
  245. package/dist/mcp-ZH2XDV5P.js +715 -0
  246. package/dist/mcp-ZH2XDV5P.js.map +1 -0
  247. package/dist/media-sources-SQ2RPDBO.js +35 -0
  248. package/dist/media-sources-SQ2RPDBO.js.map +1 -0
  249. package/dist/members-4YX7JEZM.js +45 -0
  250. package/dist/members-4YX7JEZM.js.map +1 -0
  251. package/dist/normalize-ABIWLRIT.js +142 -0
  252. package/dist/normalize-ABIWLRIT.js.map +1 -0
  253. package/dist/options-SVCQVTNE.js +123 -0
  254. package/dist/options-SVCQVTNE.js.map +1 -0
  255. package/dist/organization-FNKDC742.js +947 -0
  256. package/dist/organization-FNKDC742.js.map +1 -0
  257. package/dist/performance-HTU5FR2K.js +25 -0
  258. package/dist/plan-W2K45F7K.js +207 -0
  259. package/dist/posts-3DAPTBH2.js +34 -0
  260. package/dist/posts-3DAPTBH2.js.map +1 -0
  261. package/dist/promoted-tweet-writes-DD3CJNWW.js +181 -0
  262. package/dist/promoted-tweet-writes-DD3CJNWW.js.map +1 -0
  263. package/dist/promoted-tweets-TTWN5OMW.js +119 -0
  264. package/dist/publish-Z62KGDJ2.js +342 -0
  265. package/dist/publish-Z62KGDJ2.js.map +1 -0
  266. package/dist/reddit-6C3PT5CT.js +27 -0
  267. package/dist/refresh-HCQXVFVR.js +95 -0
  268. package/dist/refresh-HCQXVFVR.js.map +1 -0
  269. package/dist/refresh-ZCGH64OZ.js +42 -0
  270. package/dist/refresh-ZCGH64OZ.js.map +1 -0
  271. package/dist/release-FIHW2HCH.js +61 -0
  272. package/dist/release-FIHW2HCH.js.map +1 -0
  273. package/dist/remove-CBR7NVMI.js +51 -0
  274. package/dist/remove-CBR7NVMI.js.map +1 -0
  275. package/dist/remove-PUZP5GWN.js +49 -0
  276. package/dist/remove-PUZP5GWN.js.map +1 -0
  277. package/dist/reopen-EJGLRQWR.js +64 -0
  278. package/dist/reopen-EJGLRQWR.js.map +1 -0
  279. package/dist/rerun-TVBZXASH.js +91 -0
  280. package/dist/rerun-TVBZXASH.js.map +1 -0
  281. package/dist/research-L25D4WHQ.js +263 -0
  282. package/dist/research-L25D4WHQ.js.map +1 -0
  283. package/dist/research-YCMMQVK6.js +62 -0
  284. package/dist/reset-HKKCWKZ7.js +55 -0
  285. package/dist/reset-HKKCWKZ7.js.map +1 -0
  286. package/dist/reset-SRL6I6GP.js +55 -0
  287. package/dist/reset-SRL6I6GP.js.map +1 -0
  288. package/dist/resolve-POMTTAFR.js +122 -0
  289. package/dist/resolve-POMTTAFR.js.map +1 -0
  290. package/dist/retry-MEPTOAV2.js +61 -0
  291. package/dist/retry-MEPTOAV2.js.map +1 -0
  292. package/dist/retry-RNGM3KKA.js +63 -0
  293. package/dist/retry-RNGM3KKA.js.map +1 -0
  294. package/dist/revenue-X4KPTSAM.js +89 -0
  295. package/dist/revenue-X4KPTSAM.js.map +1 -0
  296. package/dist/rules-VK7YA23Q.js +97 -0
  297. package/dist/rules-VK7YA23Q.js.map +1 -0
  298. package/dist/rules-add-VG7AT6EG.js +463 -0
  299. package/dist/rules-add-VG7AT6EG.js.map +1 -0
  300. package/dist/run-DIDQSZU7.js +67 -0
  301. package/dist/run-DIDQSZU7.js.map +1 -0
  302. package/dist/run-SR7DJ7M5.js +66 -0
  303. package/dist/scaffold-ad-46GTFUMP.js +1512 -0
  304. package/dist/scaffold-ad-46GTFUMP.js.map +1 -0
  305. package/dist/scaffold-static-ad-U63V4UHR.js +1006 -0
  306. package/dist/scaffold-static-ad-U63V4UHR.js.map +1 -0
  307. package/dist/scaffold-video-4DNTURH6.js +884 -0
  308. package/dist/scaffold-video-4DNTURH6.js.map +1 -0
  309. package/dist/schedule-JO66N7XO.js +62 -0
  310. package/dist/schedule-JO66N7XO.js.map +1 -0
  311. package/dist/schedule-JZBIX6LH.js +67 -0
  312. package/dist/schedule-JZBIX6LH.js.map +1 -0
  313. package/dist/scheduled-agents-N63EZNY6.js +50 -0
  314. package/dist/schema-B2XANMEY.js +133 -0
  315. package/dist/schema-B2XANMEY.js.map +1 -0
  316. package/dist/schema-C6SGBNA6.js +69 -0
  317. package/dist/search-7GHS3OUZ.js +51 -0
  318. package/dist/search-7GHS3OUZ.js.map +1 -0
  319. package/dist/search-W5HZUJA2.js +175 -0
  320. package/dist/search-W5HZUJA2.js.map +1 -0
  321. package/dist/select-LMGLNFWB.js +102 -0
  322. package/dist/select-LMGLNFWB.js.map +1 -0
  323. package/dist/set-prompt-M5E3UZDM.js +194 -0
  324. package/dist/set-prompt-M5E3UZDM.js.map +1 -0
  325. package/dist/setup-links-ERBQSKAB.js +142 -0
  326. package/dist/setup-links-ERBQSKAB.js.map +1 -0
  327. package/dist/site-PNVFJRYK.js +178 -0
  328. package/dist/site-PNVFJRYK.js.map +1 -0
  329. package/dist/sources-DMZJPLKC.js +455 -0
  330. package/dist/sources-DMZJPLKC.js.map +1 -0
  331. package/dist/sources-HN3GCEDX.js +30 -0
  332. package/dist/stale-VWN25WTL.js +72 -0
  333. package/dist/stale-VWN25WTL.js.map +1 -0
  334. package/dist/stats-CVF6AC7R.js +34 -0
  335. package/dist/status-SF7DTPCJ.js +63 -0
  336. package/dist/status-SF7DTPCJ.js.map +1 -0
  337. package/dist/stock-4LPQ6SM7.js +179 -0
  338. package/dist/studio-NZ6WQ7OE.js +49 -0
  339. package/dist/suggest-WMMEQCUH.js +66 -0
  340. package/dist/suggest-WMMEQCUH.js.map +1 -0
  341. package/dist/sync-F7VNZLWY.js +55 -0
  342. package/dist/sync-F7VNZLWY.js.map +1 -0
  343. package/dist/sync-HVNDPBOD.js +55 -0
  344. package/dist/sync-HVNDPBOD.js.map +1 -0
  345. package/dist/sync-definition-CKEUYKWN.js +65 -0
  346. package/dist/tag-KTQ2FV5C.js +57 -0
  347. package/dist/tag-KTQ2FV5C.js.map +1 -0
  348. package/dist/tag-manager-FLXXLNKP.js +43 -0
  349. package/dist/tags-EUOOSAKN.js +26 -0
  350. package/dist/tags-KOMAP2G5.js +21 -0
  351. package/dist/tags-KOMAP2G5.js.map +1 -0
  352. package/dist/tags-TKXJGTR3.js +21 -0
  353. package/dist/tags-TKXJGTR3.js.map +1 -0
  354. package/dist/tags-VWIPDCUA.js +225 -0
  355. package/dist/tags-VWIPDCUA.js.map +1 -0
  356. package/dist/tags-XAB4HWGW.js +21 -0
  357. package/dist/tags-XAB4HWGW.js.map +1 -0
  358. package/dist/targeting-criteria-HE7K52WN.js +113 -0
  359. package/dist/targets-NA4XPDBF.js +104 -0
  360. package/dist/targets-NA4XPDBF.js.map +1 -0
  361. package/dist/testimonials-3Q5XM7JD.js +32 -0
  362. package/dist/top-companies-TKO4QGPJ.js +109 -0
  363. package/dist/top-companies-TKO4QGPJ.js.map +1 -0
  364. package/dist/translate-YVIZ5T44.js +605 -0
  365. package/dist/translate-YVIZ5T44.js.map +1 -0
  366. package/dist/triggers-QX7VW7UO.js +143 -0
  367. package/dist/triggers-QX7VW7UO.js.map +1 -0
  368. package/dist/unlink-64SRPUNG.js +68 -0
  369. package/dist/unlink-64SRPUNG.js.map +1 -0
  370. package/dist/unstage-5X2MOUMF.js +86 -0
  371. package/dist/unstage-5X2MOUMF.js.map +1 -0
  372. package/dist/update-22ZBHURE.js +81 -0
  373. package/dist/update-22ZBHURE.js.map +1 -0
  374. package/dist/update-2LTPSGWT.js +99 -0
  375. package/dist/update-2LTPSGWT.js.map +1 -0
  376. package/dist/update-DOKS7ATM.js +189 -0
  377. package/dist/update-DOKS7ATM.js.map +1 -0
  378. package/dist/update-FB6X463M.js +64 -0
  379. package/dist/update-FB6X463M.js.map +1 -0
  380. package/dist/update-QIZ7XFAM.js +153 -0
  381. package/dist/update-QIZ7XFAM.js.map +1 -0
  382. package/dist/upload-XJ7TUVIK.js +127 -0
  383. package/dist/upload-XJ7TUVIK.js.map +1 -0
  384. package/dist/url-params-KLQOLNPS.js +99 -0
  385. package/dist/url-params-KLQOLNPS.js.map +1 -0
  386. package/dist/validate-YTBJBG44.js +118 -0
  387. package/dist/validate-YTBJBG44.js.map +1 -0
  388. package/dist/videos-WAPUPJVT.js +39 -0
  389. package/dist/viewer-check-GHQA3UY2.js +81 -0
  390. package/dist/web-6JMWERTT.js +141 -0
  391. package/dist/web-6JMWERTT.js.map +1 -0
  392. package/dist/winning-ads-XCVUAIOU.js +86 -0
  393. package/dist/write-commands-N74CDMQM.js +1493 -0
  394. package/dist/write-commands-N74CDMQM.js.map +1 -0
  395. package/dist/x-SI4KYDEY.js +47 -0
  396. package/package.json +1 -1
  397. package/dist/account-UHNR5KTE.js +0 -79
  398. package/dist/account-UHNR5KTE.js.map +0 -1
  399. package/dist/accounts-KMLXHADA.js +0 -77
  400. package/dist/accounts-KMLXHADA.js.map +0 -1
  401. package/dist/accounts-QDGNTSTV.js +0 -611
  402. package/dist/accounts-QDGNTSTV.js.map +0 -1
  403. package/dist/actions-QL5UD2W4.js +0 -55
  404. package/dist/activecampaign-5OD45ROS.js +0 -935
  405. package/dist/activecampaign-5OD45ROS.js.map +0 -1
  406. package/dist/add-2F7BEVYD.js +0 -105
  407. package/dist/add-2F7BEVYD.js.map +0 -1
  408. package/dist/add-6K6LO7CM.js +0 -104
  409. package/dist/add-6K6LO7CM.js.map +0 -1
  410. package/dist/add-LYDJZDGO.js +0 -302
  411. package/dist/add-LYDJZDGO.js.map +0 -1
  412. package/dist/ads-DHPJFU52.js +0 -40
  413. package/dist/advertisers-23LU7GTV.js +0 -120
  414. package/dist/advertisers-23LU7GTV.js.map +0 -1
  415. package/dist/analytics-DVD4OBBR.js +0 -1976
  416. package/dist/analytics-DVD4OBBR.js.map +0 -1
  417. package/dist/analytics-HO2SLL4W.js +0 -433
  418. package/dist/analytics-HO2SLL4W.js.map +0 -1
  419. package/dist/assign-CLKJKH2B.js +0 -77
  420. package/dist/assign-CLKJKH2B.js.map +0 -1
  421. package/dist/audience-size-NNYYXODL.js +0 -73
  422. package/dist/audience-size-NNYYXODL.js.map +0 -1
  423. package/dist/audit-KB4P2XGS.js +0 -151
  424. package/dist/audit-KB4P2XGS.js.map +0 -1
  425. package/dist/autocomplete-VZD2SMTE.js +0 -111
  426. package/dist/autocomplete-VZD2SMTE.js.map +0 -1
  427. package/dist/avatars-FKOO6VZ2.js +0 -38
  428. package/dist/bid-pricing-6LLXOLLI.js +0 -100
  429. package/dist/bid-pricing-6LLXOLLI.js.map +0 -1
  430. package/dist/brand-NNWHBIAX.js +0 -22
  431. package/dist/brief-CPJQWT6W.js +0 -538
  432. package/dist/brief-CPJQWT6W.js.map +0 -1
  433. package/dist/campaign-groups-YPYNXOWU.js +0 -95
  434. package/dist/campaign-groups-YPYNXOWU.js.map +0 -1
  435. package/dist/campaign-writes-UJ4L2O6G.js +0 -165
  436. package/dist/campaign-writes-UJ4L2O6G.js.map +0 -1
  437. package/dist/campaigns-HLBZRH5A.js +0 -107
  438. package/dist/campaigns-N44ZDGB5.js +0 -109
  439. package/dist/campaigns-N44ZDGB5.js.map +0 -1
  440. package/dist/canvas-D64GLWUO.js +0 -46
  441. package/dist/capabilities-LWXCWMIY.js +0 -144
  442. package/dist/capabilities-LWXCWMIY.js.map +0 -1
  443. package/dist/chatgpt-YI6YNACI.js +0 -47
  444. package/dist/chats-7WGC2CVW.js +0 -276
  445. package/dist/chats-7WGC2CVW.js.map +0 -1
  446. package/dist/check-EH6BXWWL.js +0 -104
  447. package/dist/check-EH6BXWWL.js.map +0 -1
  448. package/dist/chunk-237WE5LX.js +0 -455
  449. package/dist/chunk-237WE5LX.js.map +0 -1
  450. package/dist/chunk-2B772ZEA.js +0 -169
  451. package/dist/chunk-2KRK667G.js +0 -51
  452. package/dist/chunk-2TVXJPGR.js +0 -103
  453. package/dist/chunk-3AMLOCXY.js +0 -392
  454. package/dist/chunk-3B5LPK6D.js +0 -658
  455. package/dist/chunk-3B5LPK6D.js.map +0 -1
  456. package/dist/chunk-3N5A44NQ.js +0 -122
  457. package/dist/chunk-3WAYZQNV.js +0 -61
  458. package/dist/chunk-5A257KJA.js +0 -160
  459. package/dist/chunk-6QGS3RQP.js +0 -363
  460. package/dist/chunk-AFD32O4A.js +0 -494
  461. package/dist/chunk-AW2GKIGS.js +0 -433
  462. package/dist/chunk-CYSBNCPX.js +0 -55
  463. package/dist/chunk-CYSBNCPX.js.map +0 -1
  464. package/dist/chunk-DAO63OOP.js +0 -6352
  465. package/dist/chunk-DAO63OOP.js.map +0 -1
  466. package/dist/chunk-EMQUW6JB.js +0 -942
  467. package/dist/chunk-EW3JEKIV.js +0 -139
  468. package/dist/chunk-FBFWMTOP.js +0 -19
  469. package/dist/chunk-GXDLWBOY.js +0 -73
  470. package/dist/chunk-GXDLWBOY.js.map +0 -1
  471. package/dist/chunk-GXGYTFZA.js +0 -8939
  472. package/dist/chunk-I7J7YQXZ.js +0 -142
  473. package/dist/chunk-IBY44U2M.js +0 -1079
  474. package/dist/chunk-IFXGCI33.js +0 -297
  475. package/dist/chunk-IKLHXGMF.js +0 -91
  476. package/dist/chunk-IYTPWAN3.js +0 -604
  477. package/dist/chunk-J3CWAERS.js +0 -3868
  478. package/dist/chunk-JH2L5CQD.js +0 -206
  479. package/dist/chunk-JUVVCA7B.js +0 -97
  480. package/dist/chunk-MK6XJUCQ.js +0 -197
  481. package/dist/chunk-N3I6ZXR7.js +0 -66
  482. package/dist/chunk-NBO2NSAW.js +0 -592
  483. package/dist/chunk-NEU5QD2C.js +0 -249
  484. package/dist/chunk-NKIBXOHT.js +0 -344
  485. package/dist/chunk-OE3MIV4F.js +0 -547
  486. package/dist/chunk-P2MFWJR3.js +0 -903
  487. package/dist/chunk-PHCIFBP3.js +0 -89
  488. package/dist/chunk-PTUXBO5O.js +0 -224
  489. package/dist/chunk-Q3LXLWZY.js +0 -275
  490. package/dist/chunk-Q5WBTVA7.js +0 -455
  491. package/dist/chunk-RDEAVCMF.js +0 -399
  492. package/dist/chunk-RDEAVCMF.js.map +0 -1
  493. package/dist/chunk-RGMKXNQP.js +0 -23
  494. package/dist/chunk-RZTKCCUL.js +0 -831
  495. package/dist/chunk-TTKBNBQF.js +0 -156
  496. package/dist/chunk-VB3XUR6A.js +0 -207
  497. package/dist/chunk-XCKINS7K.js +0 -57
  498. package/dist/chunk-Y6GKV7CU.js +0 -346
  499. package/dist/chunk-Y6GKV7CU.js.map +0 -1
  500. package/dist/chunk-Z2GQREJY.js +0 -159
  501. package/dist/chunk-ZDAVSTEE.js +0 -172
  502. package/dist/chunk-ZXCSOVS5.js +0 -191
  503. package/dist/claim-SVDCQ2AI.js +0 -197
  504. package/dist/claim-SVDCQ2AI.js.map +0 -1
  505. package/dist/companies-BYMYQK6A.js +0 -195
  506. package/dist/companies-BYMYQK6A.js.map +0 -1
  507. package/dist/complete-NEH3MWRI.js +0 -81
  508. package/dist/complete-NEH3MWRI.js.map +0 -1
  509. package/dist/connect-5PGL7ZOM.js +0 -42
  510. package/dist/conversation-CSOKJXDW.js +0 -93
  511. package/dist/conversation-CSOKJXDW.js.map +0 -1
  512. package/dist/conversions-4JOTTFEH.js +0 -135
  513. package/dist/conversions-4JOTTFEH.js.map +0 -1
  514. package/dist/create-2XYMBULY.js +0 -207
  515. package/dist/create-2XYMBULY.js.map +0 -1
  516. package/dist/create-56PTZABQ.js +0 -235
  517. package/dist/create-56PTZABQ.js.map +0 -1
  518. package/dist/create-D6S6TGWY.js +0 -59
  519. package/dist/create-D6S6TGWY.js.map +0 -1
  520. package/dist/create-SMW4O5PC.js +0 -132
  521. package/dist/create-SMW4O5PC.js.map +0 -1
  522. package/dist/creatives-OO76DAFS.js +0 -58
  523. package/dist/creatives-VJUYWJL6.js +0 -182
  524. package/dist/creatives-VJUYWJL6.js.map +0 -1
  525. package/dist/credentials-2ONYUJW6.js +0 -287
  526. package/dist/credentials-2ONYUJW6.js.map +0 -1
  527. package/dist/critique-NDDFSGPE.js +0 -1458
  528. package/dist/critique-NDDFSGPE.js.map +0 -1
  529. package/dist/critique-YXZVMLZ4.js +0 -227
  530. package/dist/critique-YXZVMLZ4.js.map +0 -1
  531. package/dist/crm-Q6CEP5XV.js +0 -224
  532. package/dist/crm-Q6CEP5XV.js.map +0 -1
  533. package/dist/crm-WRONZYDH.js +0 -318
  534. package/dist/crm-WRONZYDH.js.map +0 -1
  535. package/dist/customers-2EFYSCU2.js +0 -56
  536. package/dist/delete-7WEVC3FS.js +0 -66
  537. package/dist/delete-7WEVC3FS.js.map +0 -1
  538. package/dist/delete-RBWK255M.js +0 -54
  539. package/dist/delete-RBWK255M.js.map +0 -1
  540. package/dist/delete-VN4WWMQF.js +0 -64
  541. package/dist/delete-VN4WWMQF.js.map +0 -1
  542. package/dist/demographics-I5XZ435C.js +0 -138
  543. package/dist/demographics-I5XZ435C.js.map +0 -1
  544. package/dist/discard-XJLIXTNM.js +0 -66
  545. package/dist/discard-XJLIXTNM.js.map +0 -1
  546. package/dist/domain-M7AEGAYI.js +0 -98
  547. package/dist/domain-M7AEGAYI.js.map +0 -1
  548. package/dist/draft-5DQI4W5F.js +0 -306
  549. package/dist/draft-5DQI4W5F.js.map +0 -1
  550. package/dist/draft-7IIYHSY2.js +0 -332
  551. package/dist/draft-7IIYHSY2.js.map +0 -1
  552. package/dist/draft-CN6GKVBF.js +0 -217
  553. package/dist/draft-CN6GKVBF.js.map +0 -1
  554. package/dist/experiment-IDDWRCJ7.js +0 -1397
  555. package/dist/facets-ZLZ6LIHN.js +0 -114
  556. package/dist/facets-ZLZ6LIHN.js.map +0 -1
  557. package/dist/feedback-7LEX2P5Q.js +0 -106
  558. package/dist/feedback-7LEX2P5Q.js.map +0 -1
  559. package/dist/feedback-record-P4JJ63KA.js +0 -260
  560. package/dist/feedback-record-P4JJ63KA.js.map +0 -1
  561. package/dist/fetch-MIVCEHXZ.js +0 -176
  562. package/dist/fetch-MIVCEHXZ.js.map +0 -1
  563. package/dist/find-VHN34MWL.js +0 -134
  564. package/dist/fit-SS6HSZPU.js +0 -62
  565. package/dist/flows-UTIIHDNE.js +0 -247
  566. package/dist/flows-UTIIHDNE.js.map +0 -1
  567. package/dist/fonts-YPNN7ZJP.js +0 -36
  568. package/dist/forecast-OBSHG2GJ.js +0 -118
  569. package/dist/forecast-OBSHG2GJ.js.map +0 -1
  570. package/dist/funnel-Z2VLXUEQ.js +0 -394
  571. package/dist/funnel-Z2VLXUEQ.js.map +0 -1
  572. package/dist/ga4-ZPAEF2G2.js +0 -55
  573. package/dist/get-MDAO6I7T.js +0 -56
  574. package/dist/get-MDAO6I7T.js.map +0 -1
  575. package/dist/get-ZB553BSH.js +0 -79
  576. package/dist/get-ZB553BSH.js.map +0 -1
  577. package/dist/google-C3X7O2UO.js +0 -136
  578. package/dist/google-ads-FTWL772L.js +0 -195
  579. package/dist/google-ads-FTWL772L.js.map +0 -1
  580. package/dist/gsc-SDDHGTZK.js +0 -30
  581. package/dist/history-WKJYKDMG.js +0 -133
  582. package/dist/history-WKJYKDMG.js.map +0 -1
  583. package/dist/hubspot-EPHVEPOO.js +0 -779
  584. package/dist/hubspot-EPHVEPOO.js.map +0 -1
  585. package/dist/icon-MYPDC6FM.js +0 -137
  586. package/dist/ideas-3PBH7VEX.js +0 -40
  587. package/dist/images-J35C3WG4.js +0 -92
  588. package/dist/ingest-5QOPUKFE.js +0 -107
  589. package/dist/ingest-5QOPUKFE.js.map +0 -1
  590. package/dist/ingest-OKUYP632.js +0 -23
  591. package/dist/inspect-PMNCP6MV.js +0 -189
  592. package/dist/inspect-PMNCP6MV.js.map +0 -1
  593. package/dist/inspiration-QAL7NS7G.js +0 -53
  594. package/dist/keyword-metrics-R752SJIT.js +0 -197
  595. package/dist/keyword-metrics-R752SJIT.js.map +0 -1
  596. package/dist/keywords-for-site-7UWPJYQF.js +0 -128
  597. package/dist/keywords-for-site-7UWPJYQF.js.map +0 -1
  598. package/dist/landing-CBVIOGJ5.js +0 -28
  599. package/dist/leads-LIJS6Y5W.js +0 -90
  600. package/dist/leads-LIJS6Y5W.js.map +0 -1
  601. package/dist/learn-N6QV7GXA.js +0 -204
  602. package/dist/learn-N6QV7GXA.js.map +0 -1
  603. package/dist/line-item-writes-3WPJXKIL.js +0 -208
  604. package/dist/line-item-writes-3WPJXKIL.js.map +0 -1
  605. package/dist/line-items-ZOFKOGAA.js +0 -103
  606. package/dist/link-DDRQKOUL.js +0 -64
  607. package/dist/link-DDRQKOUL.js.map +0 -1
  608. package/dist/linkedin-UWZCF66X.js +0 -1057
  609. package/dist/linkedin-UWZCF66X.js.map +0 -1
  610. package/dist/list-5PLXVPLB.js +0 -151
  611. package/dist/list-5PLXVPLB.js.map +0 -1
  612. package/dist/list-RC2NX6AX.js +0 -50
  613. package/dist/list-VSJISE7U.js +0 -303
  614. package/dist/list-VSJISE7U.js.map +0 -1
  615. package/dist/list-WTVOBQYX.js +0 -64
  616. package/dist/list-WTVOBQYX.js.map +0 -1
  617. package/dist/log-YKKPROLZ.js +0 -92
  618. package/dist/log-YKKPROLZ.js.map +0 -1
  619. package/dist/logo-WE2UELX6.js +0 -18
  620. package/dist/make-RNOWBLZQ.js +0 -1353
  621. package/dist/make-RNOWBLZQ.js.map +0 -1
  622. package/dist/map-WTDPQLVO.js +0 -433
  623. package/dist/map-WTDPQLVO.js.map +0 -1
  624. package/dist/mcp-XJNSCPP3.js +0 -714
  625. package/dist/mcp-XJNSCPP3.js.map +0 -1
  626. package/dist/media-sources-JGBDDXZ5.js +0 -32
  627. package/dist/media-sources-JGBDDXZ5.js.map +0 -1
  628. package/dist/members-O3BTMRXX.js +0 -44
  629. package/dist/members-O3BTMRXX.js.map +0 -1
  630. package/dist/normalize-R5AYLA2J.js +0 -141
  631. package/dist/normalize-R5AYLA2J.js.map +0 -1
  632. package/dist/options-AILRY7JY.js +0 -122
  633. package/dist/options-AILRY7JY.js.map +0 -1
  634. package/dist/organization-KJJXZLVK.js +0 -946
  635. package/dist/organization-KJJXZLVK.js.map +0 -1
  636. package/dist/performance-7YU4HOGH.js +0 -24
  637. package/dist/plan-ZC4JY4IG.js +0 -207
  638. package/dist/promoted-tweet-writes-TNELWPVG.js +0 -180
  639. package/dist/promoted-tweet-writes-TNELWPVG.js.map +0 -1
  640. package/dist/promoted-tweets-76WKUFJQ.js +0 -119
  641. package/dist/publish-BKLHCKHB.js +0 -341
  642. package/dist/publish-BKLHCKHB.js.map +0 -1
  643. package/dist/reddit-YK3YUZEI.js +0 -26
  644. package/dist/refresh-WIII7KXB.js +0 -94
  645. package/dist/refresh-WIII7KXB.js.map +0 -1
  646. package/dist/release-ZHXYQI7G.js +0 -60
  647. package/dist/release-ZHXYQI7G.js.map +0 -1
  648. package/dist/remove-NOX4BXWK.js +0 -50
  649. package/dist/remove-NOX4BXWK.js.map +0 -1
  650. package/dist/remove-VLWRCOEZ.js +0 -48
  651. package/dist/remove-VLWRCOEZ.js.map +0 -1
  652. package/dist/reopen-NLWKK5HB.js +0 -63
  653. package/dist/reopen-NLWKK5HB.js.map +0 -1
  654. package/dist/rerun-DZWQNMZQ.js +0 -90
  655. package/dist/rerun-DZWQNMZQ.js.map +0 -1
  656. package/dist/research-Q3P76RHN.js +0 -62
  657. package/dist/research-UDZBCDNX.js +0 -262
  658. package/dist/research-UDZBCDNX.js.map +0 -1
  659. package/dist/reset-5UHFX7QY.js +0 -54
  660. package/dist/reset-5UHFX7QY.js.map +0 -1
  661. package/dist/reset-MTRJQUP7.js +0 -54
  662. package/dist/reset-MTRJQUP7.js.map +0 -1
  663. package/dist/resolve-DA72VT7Q.js +0 -121
  664. package/dist/resolve-DA72VT7Q.js.map +0 -1
  665. package/dist/retry-LQUBX5TK.js +0 -62
  666. package/dist/retry-LQUBX5TK.js.map +0 -1
  667. package/dist/retry-U6F4CS6O.js +0 -60
  668. package/dist/retry-U6F4CS6O.js.map +0 -1
  669. package/dist/rules-VS5PZ7VO.js +0 -96
  670. package/dist/rules-VS5PZ7VO.js.map +0 -1
  671. package/dist/rules-add-LMVZYDXE.js +0 -462
  672. package/dist/rules-add-LMVZYDXE.js.map +0 -1
  673. package/dist/run-6PRA2YSD.js +0 -65
  674. package/dist/run-R6COFNOR.js +0 -66
  675. package/dist/run-R6COFNOR.js.map +0 -1
  676. package/dist/scaffold-ad-3OVJ7VZQ.js +0 -1511
  677. package/dist/scaffold-ad-3OVJ7VZQ.js.map +0 -1
  678. package/dist/scaffold-static-ad-DDRA3Q5I.js +0 -1005
  679. package/dist/scaffold-static-ad-DDRA3Q5I.js.map +0 -1
  680. package/dist/scaffold-video-3JZYFYFU.js +0 -883
  681. package/dist/scaffold-video-3JZYFYFU.js.map +0 -1
  682. package/dist/schedule-BRSYHMKR.js +0 -66
  683. package/dist/schedule-BRSYHMKR.js.map +0 -1
  684. package/dist/schedule-ED2YDUPY.js +0 -61
  685. package/dist/schedule-ED2YDUPY.js.map +0 -1
  686. package/dist/scheduled-agents-5P67MVGX.js +0 -50
  687. package/dist/schema-4XVKERSA.js +0 -132
  688. package/dist/schema-4XVKERSA.js.map +0 -1
  689. package/dist/schema-RRAQW3OS.js +0 -69
  690. package/dist/search-Y2UMIQ57.js +0 -174
  691. package/dist/search-Y2UMIQ57.js.map +0 -1
  692. package/dist/select-OZ4E6VLF.js +0 -101
  693. package/dist/select-OZ4E6VLF.js.map +0 -1
  694. package/dist/set-prompt-O4YAE4CE.js +0 -193
  695. package/dist/set-prompt-O4YAE4CE.js.map +0 -1
  696. package/dist/setup-links-2GJYCV2A.js +0 -141
  697. package/dist/setup-links-2GJYCV2A.js.map +0 -1
  698. package/dist/site-47B6V2UX.js +0 -177
  699. package/dist/site-47B6V2UX.js.map +0 -1
  700. package/dist/sources-DXPZAPQ7.js +0 -454
  701. package/dist/sources-DXPZAPQ7.js.map +0 -1
  702. package/dist/sources-NDXYTASG.js +0 -30
  703. package/dist/stale-VLVBO2L6.js +0 -71
  704. package/dist/stale-VLVBO2L6.js.map +0 -1
  705. package/dist/stats-37OFAMPW.js +0 -34
  706. package/dist/status-4ODD46XY.js +0 -62
  707. package/dist/status-4ODD46XY.js.map +0 -1
  708. package/dist/stock-6R5E7MJX.js +0 -179
  709. package/dist/studio-LEIGL3Q7.js +0 -49
  710. package/dist/sync-EKGEWE53.js +0 -54
  711. package/dist/sync-EKGEWE53.js.map +0 -1
  712. package/dist/sync-TKNVBUDM.js +0 -54
  713. package/dist/sync-TKNVBUDM.js.map +0 -1
  714. package/dist/sync-definition-M5R3H3TP.js +0 -64
  715. package/dist/tag-manager-3Q55PBEW.js +0 -43
  716. package/dist/tags-4N5UUUN6.js +0 -26
  717. package/dist/tags-5NHIAD5A.js +0 -20
  718. package/dist/tags-5NHIAD5A.js.map +0 -1
  719. package/dist/tags-UUKWSWCN.js +0 -20
  720. package/dist/tags-UUKWSWCN.js.map +0 -1
  721. package/dist/tags-VK7B5DJF.js +0 -20
  722. package/dist/tags-VK7B5DJF.js.map +0 -1
  723. package/dist/tags-XAHIB3WA.js +0 -224
  724. package/dist/tags-XAHIB3WA.js.map +0 -1
  725. package/dist/targeting-criteria-AVARWV2G.js +0 -113
  726. package/dist/targets-6RYLQRID.js +0 -103
  727. package/dist/targets-6RYLQRID.js.map +0 -1
  728. package/dist/testimonials-6TF6BOFN.js +0 -32
  729. package/dist/top-companies-45EHRCJD.js +0 -108
  730. package/dist/top-companies-45EHRCJD.js.map +0 -1
  731. package/dist/translate-VHLBACCE.js +0 -604
  732. package/dist/translate-VHLBACCE.js.map +0 -1
  733. package/dist/triggers-ERQONJNO.js +0 -142
  734. package/dist/triggers-ERQONJNO.js.map +0 -1
  735. package/dist/unlink-TPDO6JNF.js +0 -67
  736. package/dist/unlink-TPDO6JNF.js.map +0 -1
  737. package/dist/unstage-YKKQQ7LW.js +0 -85
  738. package/dist/unstage-YKKQQ7LW.js.map +0 -1
  739. package/dist/update-43WU6X7R.js +0 -63
  740. package/dist/update-43WU6X7R.js.map +0 -1
  741. package/dist/update-CAHLAXWO.js +0 -98
  742. package/dist/update-CAHLAXWO.js.map +0 -1
  743. package/dist/update-NGH6YADN.js +0 -152
  744. package/dist/update-NGH6YADN.js.map +0 -1
  745. package/dist/update-SPJIHHLE.js +0 -188
  746. package/dist/update-SPJIHHLE.js.map +0 -1
  747. package/dist/upload-ACESIZIZ.js +0 -126
  748. package/dist/upload-ACESIZIZ.js.map +0 -1
  749. package/dist/url-params-MIXEDBF7.js +0 -98
  750. package/dist/url-params-MIXEDBF7.js.map +0 -1
  751. package/dist/validate-XJJA7ULE.js +0 -117
  752. package/dist/validate-XJJA7ULE.js.map +0 -1
  753. package/dist/videos-LBXPG7WC.js +0 -39
  754. package/dist/viewer-check-7VJ3GUZX.js +0 -80
  755. package/dist/web-EWQJC2SD.js +0 -140
  756. package/dist/web-EWQJC2SD.js.map +0 -1
  757. package/dist/winning-ads-SAOJAKEQ.js +0 -86
  758. package/dist/write-commands-QPDE4GWW.js +0 -1024
  759. package/dist/write-commands-QPDE4GWW.js.map +0 -1
  760. package/dist/x-LXOJPCRF.js +0 -47
  761. /package/dist/{actions-QL5UD2W4.js.map → actions-FMNJSOBA.js.map} +0 -0
  762. /package/dist/{ads-DHPJFU52.js.map → ads-OLXSDPD6.js.map} +0 -0
  763. /package/dist/{avatars-FKOO6VZ2.js.map → avatars-I4H3NMEJ.js.map} +0 -0
  764. /package/dist/{brand-NNWHBIAX.js.map → brand-3V7ECY7D.js.map} +0 -0
  765. /package/dist/{campaigns-HLBZRH5A.js.map → campaigns-MCB76NPQ.js.map} +0 -0
  766. /package/dist/{canvas-D64GLWUO.js.map → canvas-JCNKMGCG.js.map} +0 -0
  767. /package/dist/{chatgpt-YI6YNACI.js.map → chatgpt-XFZ42NXC.js.map} +0 -0
  768. /package/dist/{chunk-VB3XUR6A.js.map → chunk-2YTBPRRG.js.map} +0 -0
  769. /package/dist/{chunk-JUVVCA7B.js.map → chunk-3SNCMEJB.js.map} +0 -0
  770. /package/dist/{chunk-RGMKXNQP.js.map → chunk-7QGFO35A.js.map} +0 -0
  771. /package/dist/{chunk-ZXCSOVS5.js.map → chunk-AV7ALENU.js.map} +0 -0
  772. /package/dist/{chunk-IYTPWAN3.js.map → chunk-BRLFQ4VX.js.map} +0 -0
  773. /package/dist/{chunk-RZTKCCUL.js.map → chunk-DJE7UXYT.js.map} +0 -0
  774. /package/dist/{chunk-EW3JEKIV.js.map → chunk-EFWXYUSK.js.map} +0 -0
  775. /package/dist/{chunk-J3CWAERS.js.map → chunk-EONSZAZB.js.map} +0 -0
  776. /package/dist/{chunk-PHCIFBP3.js.map → chunk-FG3MV2XM.js.map} +0 -0
  777. /package/dist/{chunk-3AMLOCXY.js.map → chunk-FKG476GH.js.map} +0 -0
  778. /package/dist/{chunk-IFXGCI33.js.map → chunk-FUGQSIYG.js.map} +0 -0
  779. /package/dist/{chunk-Q3LXLWZY.js.map → chunk-HPLHAHG5.js.map} +0 -0
  780. /package/dist/{chunk-3N5A44NQ.js.map → chunk-I24YT2KG.js.map} +0 -0
  781. /package/dist/{chunk-P2MFWJR3.js.map → chunk-IFDZZOUC.js.map} +0 -0
  782. /package/dist/{chunk-Q5WBTVA7.js.map → chunk-JVVUI55M.js.map} +0 -0
  783. /package/dist/{chunk-6QGS3RQP.js.map → chunk-KKSHEPBY.js.map} +0 -0
  784. /package/dist/{chunk-OE3MIV4F.js.map → chunk-KQ7RCLGC.js.map} +0 -0
  785. /package/dist/{chunk-ZDAVSTEE.js.map → chunk-L7WMS5PW.js.map} +0 -0
  786. /package/dist/{chunk-FBFWMTOP.js.map → chunk-LBRO4MTL.js.map} +0 -0
  787. /package/dist/{chunk-PTUXBO5O.js.map → chunk-LNRPOULW.js.map} +0 -0
  788. /package/dist/{chunk-EMQUW6JB.js.map → chunk-LX6WC2XZ.js.map} +0 -0
  789. /package/dist/{chunk-I7J7YQXZ.js.map → chunk-MMGTJBM6.js.map} +0 -0
  790. /package/dist/{chunk-2KRK667G.js.map → chunk-OEZYSL3U.js.map} +0 -0
  791. /package/dist/{chunk-2TVXJPGR.js.map → chunk-OOVHBMQB.js.map} +0 -0
  792. /package/dist/{chunk-Z2GQREJY.js.map → chunk-PTH7VWKK.js.map} +0 -0
  793. /package/dist/{chunk-N3I6ZXR7.js.map → chunk-QZF4BVKL.js.map} +0 -0
  794. /package/dist/{chunk-3WAYZQNV.js.map → chunk-RITUSBYO.js.map} +0 -0
  795. /package/dist/{chunk-JH2L5CQD.js.map → chunk-SSTL3A7Z.js.map} +0 -0
  796. /package/dist/{chunk-2B772ZEA.js.map → chunk-TD4SO6TR.js.map} +0 -0
  797. /package/dist/{chunk-IKLHXGMF.js.map → chunk-UZ4RTOFG.js.map} +0 -0
  798. /package/dist/{chunk-NBO2NSAW.js.map → chunk-VAX7PFQV.js.map} +0 -0
  799. /package/dist/{chunk-AFD32O4A.js.map → chunk-VDRSZK4P.js.map} +0 -0
  800. /package/dist/{chunk-NKIBXOHT.js.map → chunk-VNU2EYD4.js.map} +0 -0
  801. /package/dist/{chunk-TTKBNBQF.js.map → chunk-WT4WDIXA.js.map} +0 -0
  802. /package/dist/{chunk-5A257KJA.js.map → chunk-XEX23CIB.js.map} +0 -0
  803. /package/dist/{chunk-GXGYTFZA.js.map → chunk-XXDF25BW.js.map} +0 -0
  804. /package/dist/{chunk-NEU5QD2C.js.map → chunk-YJ3LSFMX.js.map} +0 -0
  805. /package/dist/{chunk-MK6XJUCQ.js.map → chunk-YVK5RT3B.js.map} +0 -0
  806. /package/dist/{chunk-AW2GKIGS.js.map → chunk-YWWRLZUR.js.map} +0 -0
  807. /package/dist/{chunk-XCKINS7K.js.map → chunk-Z4S5BCVZ.js.map} +0 -0
  808. /package/dist/{chunk-IBY44U2M.js.map → chunk-ZYGK7GAK.js.map} +0 -0
  809. /package/dist/{connect-5PGL7ZOM.js.map → connect-COS6G45S.js.map} +0 -0
  810. /package/dist/{creatives-OO76DAFS.js.map → creatives-SEQHJD2M.js.map} +0 -0
  811. /package/dist/{customers-2EFYSCU2.js.map → customers-LMSX33FO.js.map} +0 -0
  812. /package/dist/{experiment-IDDWRCJ7.js.map → experiment-7RJ5X2LL.js.map} +0 -0
  813. /package/dist/{find-VHN34MWL.js.map → find-2EPXK5RF.js.map} +0 -0
  814. /package/dist/{fit-SS6HSZPU.js.map → fit-W7UNFZT5.js.map} +0 -0
  815. /package/dist/{fonts-YPNN7ZJP.js.map → fonts-N42UYWTX.js.map} +0 -0
  816. /package/dist/{ga4-ZPAEF2G2.js.map → ga4-6EIQC2TG.js.map} +0 -0
  817. /package/dist/{google-C3X7O2UO.js.map → google-O5OI6QFU.js.map} +0 -0
  818. /package/dist/{gsc-SDDHGTZK.js.map → gsc-BM3T2GDL.js.map} +0 -0
  819. /package/dist/{icon-MYPDC6FM.js.map → icon-B7DG53S5.js.map} +0 -0
  820. /package/dist/{ideas-3PBH7VEX.js.map → ideas-DYN2DMFN.js.map} +0 -0
  821. /package/dist/{images-J35C3WG4.js.map → images-EQCUXEHF.js.map} +0 -0
  822. /package/dist/{ingest-OKUYP632.js.map → ingest-B46AY3QU.js.map} +0 -0
  823. /package/dist/{inspiration-QAL7NS7G.js.map → inspiration-TCCKM4R7.js.map} +0 -0
  824. /package/dist/{landing-CBVIOGJ5.js.map → landing-WVPA7NBR.js.map} +0 -0
  825. /package/dist/{line-items-ZOFKOGAA.js.map → line-items-OEWYOPFP.js.map} +0 -0
  826. /package/dist/{list-RC2NX6AX.js.map → list-WRBWQASJ.js.map} +0 -0
  827. /package/dist/{logo-WE2UELX6.js.map → logo-QTSBKP2J.js.map} +0 -0
  828. /package/dist/{performance-7YU4HOGH.js.map → performance-HTU5FR2K.js.map} +0 -0
  829. /package/dist/{plan-ZC4JY4IG.js.map → plan-W2K45F7K.js.map} +0 -0
  830. /package/dist/{promoted-tweets-76WKUFJQ.js.map → promoted-tweets-TTWN5OMW.js.map} +0 -0
  831. /package/dist/{reddit-YK3YUZEI.js.map → reddit-6C3PT5CT.js.map} +0 -0
  832. /package/dist/{research-Q3P76RHN.js.map → research-YCMMQVK6.js.map} +0 -0
  833. /package/dist/{run-6PRA2YSD.js.map → run-SR7DJ7M5.js.map} +0 -0
  834. /package/dist/{scheduled-agents-5P67MVGX.js.map → scheduled-agents-N63EZNY6.js.map} +0 -0
  835. /package/dist/{schema-RRAQW3OS.js.map → schema-C6SGBNA6.js.map} +0 -0
  836. /package/dist/{sources-NDXYTASG.js.map → sources-HN3GCEDX.js.map} +0 -0
  837. /package/dist/{stats-37OFAMPW.js.map → stats-CVF6AC7R.js.map} +0 -0
  838. /package/dist/{stock-6R5E7MJX.js.map → stock-4LPQ6SM7.js.map} +0 -0
  839. /package/dist/{studio-LEIGL3Q7.js.map → studio-NZ6WQ7OE.js.map} +0 -0
  840. /package/dist/{sync-definition-M5R3H3TP.js.map → sync-definition-CKEUYKWN.js.map} +0 -0
  841. /package/dist/{tag-manager-3Q55PBEW.js.map → tag-manager-FLXXLNKP.js.map} +0 -0
  842. /package/dist/{tags-4N5UUUN6.js.map → tags-EUOOSAKN.js.map} +0 -0
  843. /package/dist/{targeting-criteria-AVARWV2G.js.map → targeting-criteria-HE7K52WN.js.map} +0 -0
  844. /package/dist/{testimonials-6TF6BOFN.js.map → testimonials-3Q5XM7JD.js.map} +0 -0
  845. /package/dist/{videos-LBXPG7WC.js.map → videos-WAPUPJVT.js.map} +0 -0
  846. /package/dist/{viewer-check-7VJ3GUZX.js.map → viewer-check-GHQA3UY2.js.map} +0 -0
  847. /package/dist/{winning-ads-SAOJAKEQ.js.map → winning-ads-XCVUAIOU.js.map} +0 -0
  848. /package/dist/{x-LXOJPCRF.js.map → x-SI4KYDEY.js.map} +0 -0
@@ -0,0 +1,190 @@
1
+ import {
2
+ fetchRunRecord
3
+ } from "./chunk-7QGFO35A.js";
4
+ import {
5
+ findWorkspaceRoot
6
+ } from "./chunk-XRIM7NYV.js";
7
+ import "./chunk-U7YR5CZL.js";
8
+ import "./chunk-VI5YQQ63.js";
9
+ import "./chunk-JX7BX2NB.js";
10
+ import "./chunk-O37VU7FG.js";
11
+ import "./chunk-CAZGM2NX.js";
12
+ import "./chunk-NZS3KEQ2.js";
13
+ import "./chunk-GIWHHCD6.js";
14
+ import "./chunk-XQIOCIDO.js";
15
+ import "./chunk-WTJSMYY2.js";
16
+ import {
17
+ ApiError
18
+ } from "./chunk-6YLNY6CK.js";
19
+ import "./chunk-D5NEIESR.js";
20
+ import "./chunk-57KKVDDR.js";
21
+ import "./chunk-QANGHND7.js";
22
+ import "./chunk-YQSBHWOI.js";
23
+
24
+ // src/commands/canvas/inspect.ts
25
+ import { execFile } from "child_process";
26
+ import { readdir, readFile, stat } from "fs/promises";
27
+ import path from "path";
28
+ import { promisify } from "util";
29
+ import { defineCommand } from "citty";
30
+ var execFileAsync = promisify(execFile);
31
+ var inspectCommand = defineCommand({
32
+ meta: {
33
+ name: "inspect",
34
+ 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."
35
+ },
36
+ args: {
37
+ run: { type: "positional", required: true, description: "Run id (e.g. r_01K...) or absolute run directory" },
38
+ "outputs-dir": { type: "string", description: "Per-run outputs root (default <workspace root>/canvas, where `canvas run` writes)" },
39
+ thumbnails: {
40
+ type: "boolean",
41
+ description: "Extract start/middle/end frames from every video output in the local run folder (requires ffmpeg)"
42
+ }
43
+ },
44
+ async run({ args }) {
45
+ const cwd = process.cwd();
46
+ const outputsDir = args["outputs-dir"] ? path.resolve(String(args["outputs-dir"])) : path.join(findWorkspaceRoot(cwd) ?? cwd, "canvas");
47
+ const runArg = String(args.run);
48
+ const runDir = await localRunDir(runArg, outputsDir);
49
+ if (!runDir) {
50
+ if (path.isAbsolute(runArg)) fail("not_found", `${runArg} is not a run directory`);
51
+ await inspectFromHistory(runArg, path.join(outputsDir, runArg));
52
+ return;
53
+ }
54
+ const manifest = await loadManifest(runDir);
55
+ const files = await listRunFiles(runDir);
56
+ const videos = files.filter((f) => isVideoFile(f.path));
57
+ let thumbnails = [];
58
+ if (args.thumbnails) {
59
+ thumbnails = await extractThumbnails(videos.map((v) => v.path));
60
+ }
61
+ const summary = {
62
+ ok: true,
63
+ source: "local",
64
+ run_id: manifest.run_id ?? path.basename(runDir),
65
+ run_dir: runDir,
66
+ stats: manifest.stats ?? null,
67
+ output: manifest.output ?? null,
68
+ node_runs: manifest.node_runs ?? [],
69
+ files: files.map((f) => ({ name: f.name, path: f.path, size_bytes: f.size })),
70
+ thumbnails
71
+ };
72
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}
73
+ `);
74
+ }
75
+ });
76
+ async function localRunDir(run, outputsDir) {
77
+ const candidate = path.isAbsolute(run) ? run : path.join(outputsDir, run);
78
+ const s = await stat(candidate).catch(() => null);
79
+ return s?.isDirectory() ? candidate : null;
80
+ }
81
+ async function inspectFromHistory(runId, expectedDir) {
82
+ let run;
83
+ try {
84
+ run = await fetchRunRecord(runId);
85
+ } catch (e) {
86
+ const reason = e instanceof ApiError ? e.message : e instanceof Error ? e.message : String(e);
87
+ fail("unavailable", `No run folder at ${expectedDir}, and the run history could not be read (${reason}).`);
88
+ }
89
+ if (!run) {
90
+ fail(
91
+ "not_found",
92
+ `No run "${runId}": there is no folder at ${expectedDir} and the company's run history has no run by that id.`
93
+ );
94
+ }
95
+ const summary = {
96
+ ok: true,
97
+ source: "run_history",
98
+ run_id: run.runId,
99
+ creative: run.creativeSlug ?? null,
100
+ status: run.status,
101
+ ...run.errorMessage ? { error: run.errorMessage } : {},
102
+ stats: {
103
+ total_nodes: run.stats.totalNodes,
104
+ cached_nodes: run.stats.cachedNodes,
105
+ total_credits: run.stats.totalCredits,
106
+ duration_ms: run.stats.durationMs
107
+ },
108
+ outputs: run.finalOutputs,
109
+ node_runs: run.nodes.map((node) => ({
110
+ node_id: node.nodeId,
111
+ node_type: node.nodeType,
112
+ cached: node.cached,
113
+ duration_ms: node.durationMs,
114
+ credits: node.credits,
115
+ ...node.status ? { status: node.status } : {},
116
+ outputs: node.outputs
117
+ })),
118
+ ...run.review ? { review: run.review } : {},
119
+ hints: [
120
+ "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>`."
121
+ ]
122
+ };
123
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}
124
+ `);
125
+ }
126
+ function fail(code, message) {
127
+ process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message } }, null, 2)}
128
+ `);
129
+ process.exit(2);
130
+ }
131
+ async function loadManifest(runDir) {
132
+ const manifestPath = path.join(runDir, "manifest.json");
133
+ try {
134
+ const raw = await readFile(manifestPath, "utf-8");
135
+ return JSON.parse(raw);
136
+ } catch {
137
+ return {};
138
+ }
139
+ }
140
+ async function listRunFiles(runDir) {
141
+ const out = [];
142
+ const names = await readdir(runDir);
143
+ for (const name of names) {
144
+ const abs = path.join(runDir, name);
145
+ const s = await stat(abs).catch(() => null);
146
+ if (!s?.isFile()) continue;
147
+ out.push({ name, path: abs, size: s.size });
148
+ }
149
+ out.sort((a, b) => a.name.localeCompare(b.name));
150
+ return out;
151
+ }
152
+ function isVideoFile(p) {
153
+ return /\.(mp4|webm|mov)$/i.test(p);
154
+ }
155
+ async function extractThumbnails(videoPaths) {
156
+ const out = [];
157
+ for (const v of videoPaths) {
158
+ const duration = await probeDuration(v).catch(() => null);
159
+ if (duration === null) {
160
+ out.push({ video: v, frames: [] });
161
+ continue;
162
+ }
163
+ const frames = [];
164
+ const checkpoints = [0.05, 0.5, 0.95];
165
+ const base = v.replace(/\.[^.]+$/, "");
166
+ for (const ratio of checkpoints) {
167
+ const at = Math.max(0, Math.min(duration * ratio, duration - 0.01));
168
+ const dest = `${base}__frame_${Math.round(ratio * 100).toString().padStart(2, "0")}.png`;
169
+ try {
170
+ await execFileAsync("ffmpeg", ["-ss", at.toFixed(3), "-i", v, "-frames:v", "1", "-y", dest]);
171
+ frames.push(dest);
172
+ } catch {
173
+ }
174
+ }
175
+ out.push({ video: v, frames });
176
+ }
177
+ return out;
178
+ }
179
+ async function probeDuration(filePath) {
180
+ const { stdout } = await execFileAsync(
181
+ "ffprobe",
182
+ ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", filePath],
183
+ { encoding: "utf-8" }
184
+ );
185
+ return Number.parseFloat(stdout.trim());
186
+ }
187
+ export {
188
+ inspectCommand
189
+ };
190
+ //# sourceMappingURL=inspect-BSNGAT2S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/canvas/inspect.ts"],"sourcesContent":["import { execFile } from \"node:child_process\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { defineCommand } from \"citty\";\nimport { ApiError } from \"../../client.ts\";\nimport { findWorkspaceRoot } from \"./normalize-paths.ts\";\nimport { fetchRunRecord } from \"./run-history.ts\";\n\nconst execFileAsync = promisify(execFile);\n\ntype ManifestNodeRun = {\n node_id: string;\n node_type: string;\n cached: boolean;\n duration_ms: number;\n credits: number;\n};\n\ntype Manifest = {\n run_id: string;\n output?: unknown;\n stats?: { total_nodes: number; cached_nodes: number; total_credits: number; duration_ms: number };\n node_runs?: ManifestNodeRun[];\n};\n\nexport const inspectCommand = defineCommand({\n meta: {\n name: \"inspect\",\n description:\n \"Dump a one-page summary of a canvas run: per-node duration + cache status, the run's outputs, and optionally three thumbnail frames per video output. Pass a run_id (r_…) or an absolute run directory. A run whose folder is not in this workspace (an older version, or one rendered in another chat) is read from the company's run history instead: its status, stats, per-node results and the durable URL of every output.\",\n },\n args: {\n run: { type: \"positional\", required: true, description: \"Run id (e.g. r_01K...) or absolute run directory\" },\n \"outputs-dir\": { type: \"string\", description: \"Per-run outputs root (default <workspace root>/canvas, where `canvas run` writes)\" },\n thumbnails: {\n type: \"boolean\",\n description: \"Extract start/middle/end frames from every video output in the local run folder (requires ffmpeg)\",\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const outputsDir = args[\"outputs-dir\"]\n ? path.resolve(String(args[\"outputs-dir\"]))\n : path.join(findWorkspaceRoot(cwd) ?? cwd, \"canvas\");\n const runArg = String(args.run);\n const runDir = await localRunDir(runArg, outputsDir);\n if (!runDir) {\n if (path.isAbsolute(runArg)) fail(\"not_found\", `${runArg} is not a run directory`);\n await inspectFromHistory(runArg, path.join(outputsDir, runArg));\n return;\n }\n\n const manifest = await loadManifest(runDir);\n const files = await listRunFiles(runDir);\n const videos = files.filter((f) => isVideoFile(f.path));\n let thumbnails: Array<{ video: string; frames: string[] }> = [];\n if (args.thumbnails) {\n thumbnails = await extractThumbnails(videos.map((v) => v.path));\n }\n\n const summary = {\n ok: true,\n source: \"local\",\n run_id: manifest.run_id ?? path.basename(runDir),\n run_dir: runDir,\n stats: manifest.stats ?? null,\n output: manifest.output ?? null,\n node_runs: manifest.node_runs ?? [],\n files: files.map((f) => ({ name: f.name, path: f.path, size_bytes: f.size })),\n thumbnails,\n };\n\n process.stdout.write(`${JSON.stringify(summary, null, 2)}\\n`);\n },\n});\n\n/** The run's local folder, or null when this workspace does not have it. */\nasync function localRunDir(run: string, outputsDir: string): Promise<string | null> {\n const candidate = path.isAbsolute(run) ? run : path.join(outputsDir, run);\n const s = await stat(candidate).catch(() => null);\n return s?.isDirectory() ? candidate : null;\n}\n\n/** The run as the company's run history keeps it: no local files, durable output URLs. */\nasync function inspectFromHistory(runId: string, expectedDir: string): Promise<void> {\n let run: Awaited<ReturnType<typeof fetchRunRecord>>;\n try {\n run = await fetchRunRecord(runId);\n } catch (e) {\n const reason = e instanceof ApiError ? e.message : e instanceof Error ? e.message : String(e);\n fail(\"unavailable\", `No run folder at ${expectedDir}, and the run history could not be read (${reason}).`);\n }\n if (!run) {\n fail(\n \"not_found\",\n `No run \"${runId}\": there is no folder at ${expectedDir} and the company's run history has no run by that id.`,\n );\n }\n const summary = {\n ok: true,\n source: \"run_history\",\n run_id: run.runId,\n creative: run.creativeSlug ?? null,\n status: run.status,\n ...(run.errorMessage ? { error: run.errorMessage } : {}),\n stats: {\n total_nodes: run.stats.totalNodes,\n cached_nodes: run.stats.cachedNodes,\n total_credits: run.stats.totalCredits,\n duration_ms: run.stats.durationMs,\n },\n outputs: run.finalOutputs,\n node_runs: run.nodes.map((node) => ({\n node_id: node.nodeId,\n node_type: node.nodeType,\n cached: node.cached,\n duration_ms: node.durationMs,\n credits: node.credits,\n ...(node.status ? { status: node.status } : {}),\n outputs: node.outputs,\n })),\n ...(run.review ? { review: run.review } : {}),\n hints: [\n \"This run's folder is not in this workspace, so there are no local files: every output above is a durable URL. To render it again here, run `baker canvas run --slug <creative>`.\",\n ],\n };\n process.stdout.write(`${JSON.stringify(summary, null, 2)}\\n`);\n}\n\nfunction fail(code: string, message: string): never {\n process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message } }, null, 2)}\\n`);\n process.exit(2);\n}\n\nasync function loadManifest(runDir: string): Promise<Manifest> {\n const manifestPath = path.join(runDir, \"manifest.json\");\n try {\n const raw = await readFile(manifestPath, \"utf-8\");\n return JSON.parse(raw) as Manifest;\n } catch {\n return {} as Manifest;\n }\n}\n\ntype RunFile = { name: string; path: string; size: number };\nasync function listRunFiles(runDir: string): Promise<RunFile[]> {\n const out: RunFile[] = [];\n const names = await readdir(runDir);\n for (const name of names) {\n const abs = path.join(runDir, name);\n const s = await stat(abs).catch(() => null);\n if (!s?.isFile()) continue;\n out.push({ name, path: abs, size: s.size });\n }\n out.sort((a, b) => a.name.localeCompare(b.name));\n return out;\n}\n\nfunction isVideoFile(p: string): boolean {\n return /\\.(mp4|webm|mov)$/i.test(p);\n}\n\nasync function extractThumbnails(videoPaths: string[]): Promise<Array<{ video: string; frames: string[] }>> {\n const out: Array<{ video: string; frames: string[] }> = [];\n for (const v of videoPaths) {\n const duration = await probeDuration(v).catch(() => null);\n if (duration === null) {\n out.push({ video: v, frames: [] });\n continue;\n }\n const frames: string[] = [];\n const checkpoints = [0.05, 0.5, 0.95];\n const base = v.replace(/\\.[^.]+$/, \"\");\n for (const ratio of checkpoints) {\n const at = Math.max(0, Math.min(duration * ratio, duration - 0.01));\n const dest = `${base}__frame_${Math.round(ratio * 100)\n .toString()\n .padStart(2, \"0\")}.png`;\n try {\n await execFileAsync(\"ffmpeg\", [\"-ss\", at.toFixed(3), \"-i\", v, \"-frames:v\", \"1\", \"-y\", dest]);\n frames.push(dest);\n } catch {\n // skip — best-effort; thumbnail extraction is non-fatal.\n }\n }\n out.push({ video: v, frames });\n }\n return out;\n}\n\nasync function probeDuration(filePath: string): Promise<number> {\n const { stdout } = await execFileAsync(\n \"ffprobe\",\n [\"-v\", \"error\", \"-show_entries\", \"format=duration\", \"-of\", \"csv=p=0\", filePath],\n { encoding: \"utf-8\" },\n );\n return Number.parseFloat(stdout.trim());\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,53 @@
1
+ import "./chunk-YQSBHWOI.js";
2
+
3
+ // src/commands/landing/inspiration/index.ts
4
+ import { defineCommand } from "citty";
5
+ var inspirationCommand = defineCommand({
6
+ meta: {
7
+ name: "inspiration",
8
+ description: `Reference library of real landing-page sections \u2014 look at how good pages actually solve a problem before you design one.
9
+
10
+ Start here: \`baker landing inspiration search "<what you want to see>"\` during research, BEFORE you write the Direction Contract.
11
+
12
+ This is inspiration, never a clipboard. Take the mechanism \u2014 what the eye hits first, what proof arrives before the ask, how the grid is split. The words are never yours to reuse: shipping a reference's headline is a Tier 0 message-match failure.
13
+
14
+ Subcommands:
15
+ baker landing inspiration search "<query>" \u2014 search by look, section type, composition, register or motion; saves screenshots you can Read
16
+ baker landing inspiration view <id> \u2014 one section in full: tokens, motion filmstrip, why it works, what to change
17
+ baker landing inspiration code <id> \u2014 its standalone HTML+CSS, for structure only
18
+ baker landing inspiration page <id> \u2014 a whole page as a sequence: how it orders its sections
19
+ baker landing inspiration sequences "<q>" \u2014 what follows what across MANY pages: openers, transitions, closers
20
+ baker landing inspiration add <url> \u2014 add a page to the library and save it to this company (returns immediately); --refresh re-studies a page that changed
21
+ baker landing inspiration favorites \u2014 what this company has saved; the default search scope
22
+ baker landing inspiration favorite <id> \u2014 save a section
23
+ baker landing inspiration unfavorite <id> \u2014 unsave a section
24
+ baker landing inspiration retry-failed \u2014 study again every saved page that failed
25
+ baker landing inspiration scrape <url> \u2014 internal/ops: run the capture locally
26
+
27
+ Examples:
28
+ baker landing inspiration search "pricing with a monthly/annual toggle" --max-rank 3
29
+ baker landing inspiration search "dark developer hero with a terminal" --register dev-tool-minimal --scope all
30
+ baker landing inspiration search "testimonial wall with faces and company logos" --motion scroll-reveal
31
+ baker landing inspiration sequences "b2b saas pricing page" --scope all
32
+ baker landing inspiration add https://linear.app
33
+
34
+ Full guide: __tooling__/docs/tools/baker/landing.md`
35
+ },
36
+ subCommands: {
37
+ search: () => import("./search-6X7EVOSI.js").then((m) => m.searchCommand),
38
+ view: () => import("./view-Z5JEMRNU.js").then((m) => m.viewCommand),
39
+ code: () => import("./code-OF7NV2EG.js").then((m) => m.codeCommand),
40
+ page: () => import("./page-QQD5IFO6.js").then((m) => m.pageCommand),
41
+ sequences: () => import("./sequences-UP4ESMFI.js").then((m) => m.sequencesCommand),
42
+ add: () => import("./add-44SGKTS4.js").then((m) => m.addCommand),
43
+ favorites: () => import("./favorites-XHY64GCM.js").then((m) => m.favoritesCommand),
44
+ favorite: () => import("./favorites-XHY64GCM.js").then((m) => m.favoriteCommand),
45
+ unfavorite: () => import("./favorites-XHY64GCM.js").then((m) => m.unfavoriteCommand),
46
+ "retry-failed": () => import("./retry-failed-5EWFM364.js").then((m) => m.retryFailedCommand),
47
+ scrape: () => import("./scrape-XRTWSSPE.js").then((m) => m.scrapeCommand)
48
+ }
49
+ });
50
+ export {
51
+ inspirationCommand
52
+ };
53
+ //# sourceMappingURL=inspiration-TCCKM4R7.js.map
@@ -0,0 +1,198 @@
1
+ import {
2
+ keywordMetricsHints
3
+ } from "./chunk-SSTL3A7Z.js";
4
+ import {
5
+ RESEARCH_DATA_NOTE,
6
+ handleResearchError,
7
+ writeResearchHints,
8
+ writeResearchJson,
9
+ writeResearchOutput
10
+ } from "./chunk-EGPYWJGZ.js";
11
+ import {
12
+ buildResearchQueryContext,
13
+ warnDefaults
14
+ } from "./chunk-BDYLILMW.js";
15
+ import "./chunk-SVM3DGAQ.js";
16
+ import {
17
+ RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS
18
+ } from "./chunk-O37VU7FG.js";
19
+ import "./chunk-CAZGM2NX.js";
20
+ import "./chunk-NZS3KEQ2.js";
21
+ import "./chunk-GIWHHCD6.js";
22
+ import "./chunk-XQIOCIDO.js";
23
+ import "./chunk-WTJSMYY2.js";
24
+ import {
25
+ apiPost
26
+ } from "./chunk-6YLNY6CK.js";
27
+ import "./chunk-D5NEIESR.js";
28
+ import "./chunk-57KKVDDR.js";
29
+ import {
30
+ registerSchema
31
+ } from "./chunk-QANGHND7.js";
32
+ import "./chunk-YQSBHWOI.js";
33
+
34
+ // src/commands/research/keyword-metrics.ts
35
+ import { defineCommand } from "citty";
36
+
37
+ // src/commands/research/keyword-metrics-rows.ts
38
+ var KEYWORD_METRICS_SOURCE = "keyword_planner_estimate_via_dataforseo";
39
+ function toOutputRow(row, options) {
40
+ const out = {
41
+ source: KEYWORD_METRICS_SOURCE,
42
+ keyword: row.keyword,
43
+ planner_search_volume: row.search_volume,
44
+ planner_cpc: row.cpc,
45
+ planner_low_top_of_page_bid: row.low_top_of_page_bid,
46
+ planner_high_top_of_page_bid: row.high_top_of_page_bid,
47
+ planner_competition: row.competition,
48
+ planner_competition_index: row.competition_index
49
+ };
50
+ if (options.clickstream) {
51
+ out.clickstream_search_volume = row.clickstream_search_volume;
52
+ }
53
+ if (options.full) {
54
+ out.keyword_difficulty = row.keyword_difficulty;
55
+ out.main_intent = row.main_intent;
56
+ out.planner_monthly_searches = row.monthly_searches;
57
+ }
58
+ return out;
59
+ }
60
+ function keywordMetricsFields(options) {
61
+ const fields = {
62
+ source: `Always "${KEYWORD_METRICS_SOURCE}". Every planner_ column below is Google's Keyword Planner ESTIMATE of total market volume, resold by DataForSEO \u2014 the same number \`baker ads google keywords metrics\` returns, not an independent measurement of it. Columns without the planner_ prefix are DataForSEO's own.`,
63
+ keyword: "The keyword asked for. A row with every metric null means DataForSEO holds no data on it \u2014 not that nobody searches it.",
64
+ planner_search_volume: "ESTIMATE: average monthly searches across the whole market, last 12 months",
65
+ planner_cpc: "ESTIMATE: average cost per click in USD (a single blended figure, not a top-of-page range)",
66
+ planner_low_top_of_page_bid: "ESTIMATE: low-range top-of-page bid in USD",
67
+ planner_high_top_of_page_bid: "ESTIMATE: high-range top-of-page bid in USD",
68
+ planner_competition: "ESTIMATE: competition level \u2014 LOW, MEDIUM or HIGH",
69
+ planner_competition_index: "ESTIMATE: competition index 0-100 (higher = more advertisers)"
70
+ };
71
+ if (options.clickstream) {
72
+ fields.clickstream_search_volume = "DataForSEO's OWN volume estimate, from clickstream panels \u2014 not Google's, and the only number here that is a genuine second opinion on demand. Expect it to differ from planner_search_volume; that is the point.";
73
+ }
74
+ if (options.full) {
75
+ fields.keyword_difficulty = "DataForSEO's 0-100 estimate of how hard ranking in the organic top 10 would be";
76
+ fields.main_intent = "DataForSEO's intent classification: informational, navigational, commercial or transactional";
77
+ fields.planner_monthly_searches = "ESTIMATE: 12-month volume breakdown ({year, month, search_volume})";
78
+ }
79
+ return fields;
80
+ }
81
+
82
+ // src/commands/research/keyword-metrics.ts
83
+ registerSchema({
84
+ command: "research.keyword-metrics",
85
+ description: "Search volume, CPC, top-of-page bids and competition for a list of keywords you name \u2014 no domain needed. This is the command for sizing a market you have keywords for; the domain-bound ones (keywords-for-site, keyword-gap) answer a different question and should not be used as a workaround for this one. The volume is Google's Keyword Planner figure resold by DataForSEO, so it is not a second opinion on `baker ads google keywords metrics` \u2014 for that, pass --clickstream. If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.",
86
+ args: {
87
+ keywords: {
88
+ type: "string",
89
+ description: `Comma-separated keywords (max ${RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS}, 80 chars each)`,
90
+ required: true
91
+ },
92
+ location: {
93
+ type: "string",
94
+ description: "Country code (us, mx, br, es...) or DataForSEO location code. Defaults to us (United States) if omitted \u2014 always set this for non-US markets",
95
+ required: false
96
+ },
97
+ language: {
98
+ type: "string",
99
+ description: "Language code or name. Defaults to en (English) if omitted \u2014 always set this for non-English markets",
100
+ required: false
101
+ },
102
+ clickstream: {
103
+ type: "boolean",
104
+ description: "Also return DataForSEO's own panel-derived volume (clickstream_search_volume), the only genuinely independent estimate of demand available here. Costs 2x.",
105
+ required: false
106
+ },
107
+ full: {
108
+ type: "boolean",
109
+ description: "Add keyword difficulty, search intent and the 12-month volume trend to each row",
110
+ required: false
111
+ },
112
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false }
113
+ }
114
+ });
115
+ var keywordMetricsCommand = defineCommand({
116
+ meta: {
117
+ name: "keyword-metrics",
118
+ description: `Volume, CPC and competition for keywords you name. No domain required.
119
+
120
+ Numbers are Keyword Planner ESTIMATES of total market volume, resold by DataForSEO \u2014 every column carrying one is named planner_. Pass --clickstream for DataForSEO's own independent estimate alongside.
121
+
122
+ Examples:
123
+ baker research keyword-metrics "chatbot whatsapp,agente whatsapp ecommerce" --location mx --language es
124
+ baker research keyword-metrics "chatbot whatsapp" --location br --language pt --clickstream
125
+ baker research keyword-metrics "crm software,best crm" --full --output md`
126
+ },
127
+ args: {
128
+ keywords: { type: "positional", description: "Comma-separated keywords", required: true },
129
+ location: { type: "string", description: "Country code or location code (default: us)", required: false },
130
+ language: { type: "string", description: "Language code or name (default: en)", required: false },
131
+ clickstream: { type: "boolean", description: "Add DataForSEO's own volume estimate (costs 2x)", required: false },
132
+ full: { type: "boolean", description: "Add difficulty, intent and the 12-month trend", required: false },
133
+ output: { type: "string", description: "Format: json|csv|md|jsonl", required: false, default: "json" },
134
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false }
135
+ },
136
+ run: async ({ args }) => {
137
+ const keywords = args.keywords.split(",").map((k) => k.trim()).filter(Boolean);
138
+ if (keywords.length === 0) {
139
+ writeResearchJson({
140
+ ok: false,
141
+ error: { code: "VALIDATION_ERROR", message: "Provide at least one keyword" }
142
+ });
143
+ process.exit(1);
144
+ }
145
+ if (keywords.length > RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS) {
146
+ writeResearchJson({
147
+ ok: false,
148
+ error: {
149
+ code: "VALIDATION_ERROR",
150
+ message: `Maximum ${RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS} keywords per request`,
151
+ fix: {
152
+ action: "retry_with_changes",
153
+ explanation: `You sent ${keywords.length}. Split the list into batches of ${RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS} and run the command once per batch \u2014 each batch is a separate charge, so batch by priority.`
154
+ }
155
+ }
156
+ });
157
+ process.exit(1);
158
+ }
159
+ const location = args.location || void 0;
160
+ const language = args.language || void 0;
161
+ const clickstream = Boolean(args.clickstream);
162
+ const full = Boolean(args.full);
163
+ const queryContext = buildResearchQueryContext(location, language);
164
+ try {
165
+ const result = await apiPost("/api/research/keyword-metrics", {
166
+ keywords,
167
+ location,
168
+ language,
169
+ includeClickstream: clickstream,
170
+ skipCache: args["no-cache"] ? true : void 0
171
+ });
172
+ const columns = { clickstream, full };
173
+ const rows = result.data.map((row) => toOutputRow(row, columns));
174
+ const hints = keywordMetricsHints({ rows: result.data, asked: keywords, clickstream, queryContext });
175
+ warnDefaults(queryContext);
176
+ const format = args.output || "json";
177
+ if (format !== "json") {
178
+ writeResearchOutput(rows, format);
179
+ writeResearchHints([...hints, RESEARCH_DATA_NOTE], format);
180
+ return;
181
+ }
182
+ writeResearchJson({
183
+ ok: true,
184
+ data: rows,
185
+ fields: keywordMetricsFields(columns),
186
+ note: RESEARCH_DATA_NOTE,
187
+ hints,
188
+ query_context: queryContext
189
+ });
190
+ } catch (err) {
191
+ handleResearchError(err);
192
+ }
193
+ }
194
+ });
195
+ export {
196
+ keywordMetricsCommand
197
+ };
198
+ //# sourceMappingURL=keyword-metrics-KNTIN4ZK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/research/keyword-metrics.ts","../src/commands/research/keyword-metrics-rows.ts"],"sourcesContent":["import { RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS, type ResearchKeywordMetricsRow } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { buildResearchQueryContext, warnDefaults } from \"../../geo-context.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { keywordMetricsHints } from \"./hints.ts\";\nimport { keywordMetricsFields, toOutputRow } from \"./keyword-metrics-rows.ts\";\nimport {\n handleResearchError,\n RESEARCH_DATA_NOTE,\n writeResearchHints,\n writeResearchJson,\n writeResearchOutput,\n} from \"./output.ts\";\n\nregisterSchema({\n command: \"research.keyword-metrics\",\n description:\n \"Search volume, CPC, top-of-page bids and competition for a list of keywords you name — no domain needed. This is the command for sizing a market you have keywords for; the domain-bound ones (keywords-for-site, keyword-gap) answer a different question and should not be used as a workaround for this one. The volume is Google's Keyword Planner figure resold by DataForSEO, so it is not a second opinion on `baker ads google keywords metrics` — for that, pass --clickstream. If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.\",\n args: {\n keywords: {\n type: \"string\",\n description: `Comma-separated keywords (max ${RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS}, 80 chars each)`,\n required: true,\n },\n location: {\n type: \"string\",\n description:\n \"Country code (us, mx, br, es...) or DataForSEO location code. Defaults to us (United States) if omitted — always set this for non-US markets\",\n required: false,\n },\n language: {\n type: \"string\",\n description:\n \"Language code or name. Defaults to en (English) if omitted — always set this for non-English markets\",\n required: false,\n },\n clickstream: {\n type: \"boolean\",\n description:\n \"Also return DataForSEO's own panel-derived volume (clickstream_search_volume), the only genuinely independent estimate of demand available here. Costs 2x.\",\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"Add keyword difficulty, search intent and the 12-month volume trend to each row\",\n required: false,\n },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n});\n\nexport const keywordMetricsCommand = defineCommand({\n meta: {\n name: \"keyword-metrics\",\n description: `Volume, CPC and competition for keywords you name. No domain required.\n\nNumbers are Keyword Planner ESTIMATES of total market volume, resold by DataForSEO — every column carrying one is named planner_. Pass --clickstream for DataForSEO's own independent estimate alongside.\n\nExamples:\n baker research keyword-metrics \"chatbot whatsapp,agente whatsapp ecommerce\" --location mx --language es\n baker research keyword-metrics \"chatbot whatsapp\" --location br --language pt --clickstream\n baker research keyword-metrics \"crm software,best crm\" --full --output md`,\n },\n args: {\n keywords: { type: \"positional\", description: \"Comma-separated keywords\", required: true },\n location: { type: \"string\", description: \"Country code or location code (default: us)\", required: false },\n language: { type: \"string\", description: \"Language code or name (default: en)\", required: false },\n clickstream: { type: \"boolean\", description: \"Add DataForSEO's own volume estimate (costs 2x)\", required: false },\n full: { type: \"boolean\", description: \"Add difficulty, intent and the 12-month trend\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|md|jsonl\", required: false, default: \"json\" },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n run: async ({ args }) => {\n const keywords = (args.keywords as string)\n .split(\",\")\n .map((k) => k.trim())\n .filter(Boolean);\n\n if (keywords.length === 0) {\n writeResearchJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Provide at least one keyword\" },\n });\n process.exit(1);\n }\n if (keywords.length > RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS) {\n writeResearchJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: `Maximum ${RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS} keywords per request`,\n fix: {\n action: \"retry_with_changes\",\n explanation: `You sent ${keywords.length}. Split the list into batches of ${RESEARCH_KEYWORD_METRICS_MAX_KEYWORDS} and run the command once per batch — each batch is a separate charge, so batch by priority.`,\n },\n },\n });\n process.exit(1);\n }\n\n const location = (args.location as string) || undefined;\n const language = (args.language as string) || undefined;\n const clickstream = Boolean(args.clickstream);\n const full = Boolean(args.full);\n const queryContext = buildResearchQueryContext(location, language);\n\n try {\n const result = await apiPost<{ data: ResearchKeywordMetricsRow[] }>(\"/api/research/keyword-metrics\", {\n keywords,\n location,\n language,\n includeClickstream: clickstream,\n skipCache: args[\"no-cache\"] ? true : undefined,\n });\n\n const columns = { clickstream, full };\n const rows = result.data.map((row) => toOutputRow(row, columns));\n const hints = keywordMetricsHints({ rows: result.data, asked: keywords, clickstream, queryContext });\n\n warnDefaults(queryContext);\n const format = (args.output as string) || \"json\";\n if (format !== \"json\") {\n writeResearchOutput(rows, format);\n writeResearchHints([...hints, RESEARCH_DATA_NOTE], format);\n return;\n }\n writeResearchJson({\n ok: true,\n data: rows,\n fields: keywordMetricsFields(columns),\n note: RESEARCH_DATA_NOTE,\n hints,\n query_context: queryContext,\n });\n } catch (err) {\n handleResearchError(err);\n }\n },\n});\n","/**\n * Naming the rows of `baker research keyword-metrics` after where each number\n * came from.\n *\n * DataForSEO does not measure Google's search volume — it resells the Keyword\n * Planner figure, so `search_volume` here and `planner_avg_monthly_searches`\n * from `baker ads google keywords metrics` are one number with two names. A run\n * that did not know that presented the two side by side as agreeing sources and\n * reported the agreement as validation; they matched to the digit in all seven\n * rows because they are the same row. The only defence that survives a CSV in\n * /tmp is the column name, which is the same conclusion `ads/google/keywords/\n * provenance.ts` reached for the other half of the pair — so the same prefix is\n * used deliberately.\n *\n * The exception is clickstream: `clickstream_search_volume` is DataForSEO's own\n * panel-derived estimate and genuinely is a second opinion. It keeps its own\n * prefix so it can never be read as Google's, or Google's as it.\n */\nimport type { ResearchKeywordMetricsRow } from \"@baker/api\";\n\nexport const KEYWORD_METRICS_SOURCE = \"keyword_planner_estimate_via_dataforseo\";\n\nexport type KeywordMetricsOutputRow = Record<string, unknown>;\n\nexport interface KeywordMetricsColumnOptions {\n /** The request asked for DataForSEO's panel volume alongside Google's. */\n clickstream: boolean;\n /** Add difficulty, intent and the 12-month trend. */\n full: boolean;\n}\n\nexport function toOutputRow(\n row: ResearchKeywordMetricsRow,\n options: KeywordMetricsColumnOptions,\n): KeywordMetricsOutputRow {\n const out: KeywordMetricsOutputRow = {\n source: KEYWORD_METRICS_SOURCE,\n keyword: row.keyword,\n planner_search_volume: row.search_volume,\n planner_cpc: row.cpc,\n planner_low_top_of_page_bid: row.low_top_of_page_bid,\n planner_high_top_of_page_bid: row.high_top_of_page_bid,\n planner_competition: row.competition,\n planner_competition_index: row.competition_index,\n };\n if (options.clickstream) {\n out.clickstream_search_volume = row.clickstream_search_volume;\n }\n if (options.full) {\n out.keyword_difficulty = row.keyword_difficulty;\n out.main_intent = row.main_intent;\n out.planner_monthly_searches = row.monthly_searches;\n }\n return out;\n}\n\nexport function keywordMetricsFields(options: KeywordMetricsColumnOptions): Record<string, string> {\n const fields: Record<string, string> = {\n source: `Always \"${KEYWORD_METRICS_SOURCE}\". Every planner_ column below is Google's Keyword Planner ESTIMATE of total market volume, resold by DataForSEO — the same number \\`baker ads google keywords metrics\\` returns, not an independent measurement of it. Columns without the planner_ prefix are DataForSEO's own.`,\n keyword:\n \"The keyword asked for. A row with every metric null means DataForSEO holds no data on it — not that nobody searches it.\",\n planner_search_volume: \"ESTIMATE: average monthly searches across the whole market, last 12 months\",\n planner_cpc: \"ESTIMATE: average cost per click in USD (a single blended figure, not a top-of-page range)\",\n planner_low_top_of_page_bid: \"ESTIMATE: low-range top-of-page bid in USD\",\n planner_high_top_of_page_bid: \"ESTIMATE: high-range top-of-page bid in USD\",\n planner_competition: \"ESTIMATE: competition level — LOW, MEDIUM or HIGH\",\n planner_competition_index: \"ESTIMATE: competition index 0-100 (higher = more advertisers)\",\n };\n if (options.clickstream) {\n fields.clickstream_search_volume =\n \"DataForSEO's OWN volume estimate, from clickstream panels — not Google's, and the only number here that is a genuine second opinion on demand. Expect it to differ from planner_search_volume; that is the point.\";\n }\n if (options.full) {\n fields.keyword_difficulty = \"DataForSEO's 0-100 estimate of how hard ranking in the organic top 10 would be\";\n fields.main_intent = \"DataForSEO's intent classification: informational, navigational, commercial or transactional\";\n fields.planner_monthly_searches = \"ESTIMATE: 12-month volume breakdown ({year, month, search_volume})\";\n }\n return fields;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,129 @@
1
+ import {
2
+ keywordsForSiteHints
3
+ } from "./chunk-SSTL3A7Z.js";
4
+ import {
5
+ RESEARCH_DATA_NOTE,
6
+ handleResearchError,
7
+ writeResearchHints,
8
+ writeResearchJson,
9
+ writeResearchOutput
10
+ } from "./chunk-EGPYWJGZ.js";
11
+ import {
12
+ buildResearchQueryContext,
13
+ warnDefaults
14
+ } from "./chunk-BDYLILMW.js";
15
+ import "./chunk-SVM3DGAQ.js";
16
+ import "./chunk-O37VU7FG.js";
17
+ import "./chunk-CAZGM2NX.js";
18
+ import "./chunk-NZS3KEQ2.js";
19
+ import "./chunk-GIWHHCD6.js";
20
+ import "./chunk-XQIOCIDO.js";
21
+ import "./chunk-WTJSMYY2.js";
22
+ import {
23
+ apiPost
24
+ } from "./chunk-6YLNY6CK.js";
25
+ import "./chunk-D5NEIESR.js";
26
+ import "./chunk-57KKVDDR.js";
27
+ import {
28
+ registerSchema
29
+ } from "./chunk-QANGHND7.js";
30
+ import "./chunk-YQSBHWOI.js";
31
+
32
+ // src/commands/research/keywords-for-site.ts
33
+ import { defineCommand } from "citty";
34
+ registerSchema({
35
+ command: "research.keywords-for-site",
36
+ description: "Get keywords a competitor targets in Google. Use --type paid to see only paid keywords, --type organic for organic only. If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.",
37
+ args: {
38
+ target: { type: "string", description: "Domain or URL to analyze (positional)", required: true },
39
+ location: {
40
+ type: "string",
41
+ description: "Country code (us, uk, es, de...) or DataForSEO location code. Defaults to us (United States) if omitted \u2014 always set this for non-US markets",
42
+ required: false
43
+ },
44
+ language: {
45
+ type: "string",
46
+ description: "Language code or name. Defaults to en (English) if omitted \u2014 always set this for non-English markets",
47
+ required: false
48
+ },
49
+ sort: {
50
+ type: "string",
51
+ description: "Sort: search_volume, competition, cpc (default: search_volume)",
52
+ required: false
53
+ },
54
+ type: { type: "string", description: "Filter: paid, organic, all (default: all)", required: false },
55
+ limit: { type: "string", description: "Max results (default: 50, max: 1000)", required: false },
56
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false }
57
+ }
58
+ });
59
+ var FIELDS = {
60
+ keyword: "Keyword the site targets",
61
+ search_volume: "Monthly search volume",
62
+ cpc: "Cost per click in USD",
63
+ competition: "LOW, MEDIUM, or HIGH",
64
+ competition_index: "Competition score 0-100"
65
+ };
66
+ var keywordsForSiteCommand = defineCommand({
67
+ meta: {
68
+ name: "keywords-for-site",
69
+ description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
70
+
71
+ Examples:
72
+ baker research keywords-for-site "competitor.com"
73
+ baker research keywords-for-site "competitor.com" --type paid --limit 20
74
+ baker research keywords-for-site "competitor.com" --type organic --location uk`
75
+ },
76
+ args: {
77
+ target: { type: "positional", description: "Domain or URL to analyze", required: true },
78
+ location: { type: "string", description: "Country code or location code (default: us)", required: false },
79
+ language: { type: "string", description: "Language code or name (default: en)", required: false },
80
+ sort: { type: "string", description: "Sort: search_volume, competition, cpc", required: false },
81
+ type: { type: "string", description: "Filter: paid, organic, all (default: all)", required: false },
82
+ limit: { type: "string", description: "Max results (default: 50, max: 1000)", required: false },
83
+ output: { type: "string", description: "Format: json|csv|md|jsonl", required: false, default: "json" },
84
+ "no-cache": { type: "boolean", description: "Skip server cache, hit API directly", required: false }
85
+ },
86
+ run: async ({ args }) => {
87
+ const target = args.target;
88
+ const location = args.location || void 0;
89
+ const language = args.language || void 0;
90
+ const sort = args.sort || void 0;
91
+ const type = args.type || void 0;
92
+ const limit = args.limit ? Number(args.limit) : void 0;
93
+ const skipCache = args["no-cache"] ? true : void 0;
94
+ const queryContext = buildResearchQueryContext(location, language);
95
+ try {
96
+ const data = await apiPost("/api/research/keywords-for-site", {
97
+ target,
98
+ location,
99
+ language,
100
+ sort,
101
+ type,
102
+ limit,
103
+ skipCache
104
+ });
105
+ warnDefaults(queryContext);
106
+ const format = args.output || "json";
107
+ const hints = keywordsForSiteHints(data.length, queryContext, type);
108
+ if (format !== "json") {
109
+ writeResearchOutput(data, format);
110
+ writeResearchHints(hints, format);
111
+ return;
112
+ }
113
+ writeResearchJson({
114
+ ok: true,
115
+ data,
116
+ fields: FIELDS,
117
+ note: RESEARCH_DATA_NOTE,
118
+ query_context: queryContext,
119
+ hints
120
+ });
121
+ } catch (err) {
122
+ handleResearchError(err);
123
+ }
124
+ }
125
+ });
126
+ export {
127
+ keywordsForSiteCommand
128
+ };
129
+ //# sourceMappingURL=keywords-for-site-S4MXGXWR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/research/keywords-for-site.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { buildResearchQueryContext, warnDefaults } from \"../../geo-context.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { keywordsForSiteHints } from \"./hints.ts\";\nimport {\n handleResearchError,\n RESEARCH_DATA_NOTE,\n writeResearchHints,\n writeResearchJson,\n writeResearchOutput,\n} from \"./output.ts\";\n\nregisterSchema({\n command: \"research.keywords-for-site\",\n description:\n \"Get keywords a competitor targets in Google. Use --type paid to see only paid keywords, --type organic for organic only. If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.\",\n args: {\n target: { type: \"string\", description: \"Domain or URL to analyze (positional)\", required: true },\n location: {\n type: \"string\",\n description:\n \"Country code (us, uk, es, de...) or DataForSEO location code. Defaults to us (United States) if omitted — always set this for non-US markets\",\n required: false,\n },\n language: {\n type: \"string\",\n description:\n \"Language code or name. Defaults to en (English) if omitted — always set this for non-English markets\",\n required: false,\n },\n sort: {\n type: \"string\",\n description: \"Sort: search_volume, competition, cpc (default: search_volume)\",\n required: false,\n },\n type: { type: \"string\", description: \"Filter: paid, organic, all (default: all)\", required: false },\n limit: { type: \"string\", description: \"Max results (default: 50, max: 1000)\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n});\n\ninterface KeywordForSite {\n keyword: string;\n search_volume: number;\n cpc: number;\n competition: string;\n competition_index: number;\n}\n\nconst FIELDS: Record<string, string> = {\n keyword: \"Keyword the site targets\",\n search_volume: \"Monthly search volume\",\n cpc: \"Cost per click in USD\",\n competition: \"LOW, MEDIUM, or HIGH\",\n competition_index: \"Competition score 0-100\",\n};\n\nexport const keywordsForSiteCommand = defineCommand({\n meta: {\n name: \"keywords-for-site\",\n description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.\n\nExamples:\n baker research keywords-for-site \"competitor.com\"\n baker research keywords-for-site \"competitor.com\" --type paid --limit 20\n baker research keywords-for-site \"competitor.com\" --type organic --location uk`,\n },\n args: {\n target: { type: \"positional\", description: \"Domain or URL to analyze\", required: true },\n location: { type: \"string\", description: \"Country code or location code (default: us)\", required: false },\n language: { type: \"string\", description: \"Language code or name (default: en)\", required: false },\n sort: { type: \"string\", description: \"Sort: search_volume, competition, cpc\", required: false },\n type: { type: \"string\", description: \"Filter: paid, organic, all (default: all)\", required: false },\n limit: { type: \"string\", description: \"Max results (default: 50, max: 1000)\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|md|jsonl\", required: false, default: \"json\" },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n run: async ({ args }) => {\n const target = args.target as string;\n const location = (args.location as string) || undefined;\n const language = (args.language as string) || undefined;\n const sort = (args.sort as string) || undefined;\n const type = (args.type as string) || undefined;\n const limit = args.limit ? Number(args.limit) : undefined;\n const skipCache = args[\"no-cache\"] ? true : undefined;\n const queryContext = buildResearchQueryContext(location, language);\n\n try {\n const data = await apiPost<KeywordForSite[]>(\"/api/research/keywords-for-site\", {\n target,\n location,\n language,\n sort,\n type,\n limit,\n skipCache,\n });\n\n warnDefaults(queryContext);\n const format = (args.output as string) || \"json\";\n const hints = keywordsForSiteHints(data.length, queryContext, type);\n if (format !== \"json\") {\n writeResearchOutput(data as unknown as Array<Record<string, unknown>>, format);\n writeResearchHints(hints, format);\n return;\n }\n writeResearchJson({\n ok: true,\n data,\n fields: FIELDS,\n note: RESEARCH_DATA_NOTE,\n query_context: queryContext,\n hints,\n });\n } catch (err) {\n handleResearchError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAa9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,QAAQ,EAAE,MAAM,UAAU,aAAa,yCAAyC,UAAU,KAAK;AAAA,IAC/F,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,MAAM,EAAE,MAAM,UAAU,aAAa,6CAA6C,UAAU,MAAM;AAAA,IAClG,OAAO,EAAE,MAAM,UAAU,aAAa,wCAAwC,UAAU,MAAM;AAAA,IAC9F,YAAY,EAAE,MAAM,WAAW,aAAa,uCAAuC,UAAU,MAAM;AAAA,EACrG;AACF,CAAC;AAUD,IAAM,SAAiC;AAAA,EACrC,SAAS;AAAA,EACT,eAAe;AAAA,EACf,KAAK;AAAA,EACL,aAAa;AAAA,EACb,mBAAmB;AACrB;AAEO,IAAM,yBAAyB,cAAc;AAAA,EAClD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ,EAAE,MAAM,cAAc,aAAa,4BAA4B,UAAU,KAAK;AAAA,IACtF,UAAU,EAAE,MAAM,UAAU,aAAa,+CAA+C,UAAU,MAAM;AAAA,IACxG,UAAU,EAAE,MAAM,UAAU,aAAa,uCAAuC,UAAU,MAAM;AAAA,IAChG,MAAM,EAAE,MAAM,UAAU,aAAa,yCAAyC,UAAU,MAAM;AAAA,IAC9F,MAAM,EAAE,MAAM,UAAU,aAAa,6CAA6C,UAAU,MAAM;AAAA,IAClG,OAAO,EAAE,MAAM,UAAU,aAAa,wCAAwC,UAAU,MAAM;AAAA,IAC9F,QAAQ,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,OAAO,SAAS,OAAO;AAAA,IACrG,YAAY,EAAE,MAAM,WAAW,aAAa,uCAAuC,UAAU,MAAM;AAAA,EACrG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,SAAS,KAAK;AACpB,UAAM,WAAY,KAAK,YAAuB;AAC9C,UAAM,WAAY,KAAK,YAAuB;AAC9C,UAAM,OAAQ,KAAK,QAAmB;AACtC,UAAM,OAAQ,KAAK,QAAmB;AACtC,UAAM,QAAQ,KAAK,QAAQ,OAAO,KAAK,KAAK,IAAI;AAChD,UAAM,YAAY,KAAK,UAAU,IAAI,OAAO;AAC5C,UAAM,eAAe,0BAA0B,UAAU,QAAQ;AAEjE,QAAI;AACF,YAAM,OAAO,MAAM,QAA0B,mCAAmC;AAAA,QAC9E;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,mBAAa,YAAY;AACzB,YAAM,SAAU,KAAK,UAAqB;AAC1C,YAAM,QAAQ,qBAAqB,KAAK,QAAQ,cAAc,IAAI;AAClE,UAAI,WAAW,QAAQ;AACrB,4BAAoB,MAAmD,MAAM;AAC7E,2BAAmB,OAAO,MAAM;AAChC;AAAA,MACF;AACA,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ;AAAA,QACA,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,eAAe;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}