@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,261 @@
1
+ import {
2
+ readCreativeIdea,
3
+ withAnchor
4
+ } from "./chunk-QZF4BVKL.js";
5
+ import {
6
+ modelRuleDrafter,
7
+ repeatedReasons,
8
+ ruleCandidateHints,
9
+ ruleCandidates,
10
+ saveCandidates
11
+ } from "./chunk-WT4WDIXA.js";
12
+ import {
13
+ versionOf
14
+ } from "./chunk-LBRO4MTL.js";
15
+ import "./chunk-I24YT2KG.js";
16
+ import "./chunk-XXDF25BW.js";
17
+ import "./chunk-MOFMOYUA.js";
18
+ import "./chunk-MMGTJBM6.js";
19
+ import "./chunk-FG3MV2XM.js";
20
+ import "./chunk-QG4MW2V4.js";
21
+ import "./chunk-VNU2EYD4.js";
22
+ import {
23
+ frontmatterOf
24
+ } from "./chunk-Y46FE75E.js";
25
+ import "./chunk-JVVUI55M.js";
26
+ import "./chunk-YJ3LSFMX.js";
27
+ import "./chunk-3S274625.js";
28
+ import "./chunk-6UNOK7WV.js";
29
+ import {
30
+ holdWorkspaceSpend
31
+ } from "./chunk-UFKO626N.js";
32
+ import {
33
+ findWorkspaceRoot
34
+ } from "./chunk-XRIM7NYV.js";
35
+ import "./chunk-OL7JS4NG.js";
36
+ import "./chunk-7KHTJQGV.js";
37
+ import "./chunk-DGCUPJZD.js";
38
+ import "./chunk-QMOYQJIN.js";
39
+ import "./chunk-FKYPAGKK.js";
40
+ import "./chunk-S4VLLGTW.js";
41
+ import "./chunk-MCJ5I5LR.js";
42
+ import "./chunk-2WZI36D3.js";
43
+ import "./chunk-65Y3RCWP.js";
44
+ import {
45
+ askJev
46
+ } from "./chunk-A6WKCV3V.js";
47
+ import "./chunk-U7YR5CZL.js";
48
+ import "./chunk-VI5YQQ63.js";
49
+ import "./chunk-JX7BX2NB.js";
50
+ import {
51
+ CREATIVE_FEEDBACK_REASONS,
52
+ creativesFeedbackRecordRequestSchema
53
+ } from "./chunk-O37VU7FG.js";
54
+ import "./chunk-CAZGM2NX.js";
55
+ import "./chunk-NZS3KEQ2.js";
56
+ import "./chunk-GIWHHCD6.js";
57
+ import "./chunk-XQIOCIDO.js";
58
+ import "./chunk-WTJSMYY2.js";
59
+ import {
60
+ ApiError,
61
+ apiPost
62
+ } from "./chunk-6YLNY6CK.js";
63
+ import "./chunk-D5NEIESR.js";
64
+ import "./chunk-57KKVDDR.js";
65
+ import {
66
+ registerSchema,
67
+ writeJson
68
+ } from "./chunk-QANGHND7.js";
69
+ import "./chunk-YQSBHWOI.js";
70
+
71
+ // src/commands/creatives/feedback-record.ts
72
+ import { readFile } from "fs/promises";
73
+ import path from "path";
74
+ import { defineCommand } from "citty";
75
+
76
+ // src/commands/creatives/agent-option-note.ts
77
+ var NOTE_BANDS = { tagged: 0.5, bareFix: 0.45, namesProblem: 0.5 };
78
+ var TAGGED = "Does `note` end with a tag marking it as the recommended option, like (Recommended), in any language?";
79
+ var BARE_FIX = 'Is `note` a bare yes to an offer to fix things, like "fix everything" or "fix what is pending", naming no particular problem? A note that names what is wrong or what to change (the typos, the price, cut-off text, redo the pieces) is not.';
80
+ var NAMES_PROBLEM = "Does `note` name a particular problem, element or part of an ad (a typo, the price, the logo, the audio, the text, the colours, a person), apart from a whole format or size?";
81
+ var jevNoteJudge = async (note) => {
82
+ const spent = [];
83
+ const answers = await askJev(
84
+ [TAGGED, BARE_FIX, NAMES_PROBLEM].map((question) => ({ instructions: { note, question } })),
85
+ (usage) => spent.push(usage)
86
+ );
87
+ await holdWorkspaceSpend(spent);
88
+ if (answers === null) return null;
89
+ const [tagged = 0, bareFix = 0, namesProblem = 1] = answers;
90
+ return { tagged, bareFix, namesProblem };
91
+ };
92
+ function readsAsAgentOption(reading) {
93
+ if (reading.tagged >= NOTE_BANDS.tagged) return true;
94
+ return reading.bareFix >= NOTE_BANDS.bareFix && reading.namesProblem < NOTE_BANDS.namesProblem;
95
+ }
96
+ async function readNoteAuthor(note, judge) {
97
+ const text = note.trim();
98
+ if (!text) return "person";
99
+ const reading = await judge(text).catch(() => null);
100
+ if (reading === null) return "unconfirmed";
101
+ return readsAsAgentOption(reading) ? "agent_option" : "person";
102
+ }
103
+
104
+ // src/commands/creatives/feedback-record.ts
105
+ var DESCRIPTION = `Record what the user said about one version of a creative in this chat: an approval, or a rejection with reasons. Saved as their verdict (the person who wrote the latest message here) and read back by baker creatives feedback. One verdict per person per version or option: a later one replaces it.
106
+ Start here: baker creatives feedback record --slug spring-offer --verdict rejected --reasons text_mistakes --note "<their words>"
107
+ Only record what the user said, never your own judgment. Picking one of several concepts is not a rejection of the others.
108
+ When their words state a rule for every ad, the answer carries ruleCandidates: ask them once, and only on yes run baker creatives rules add --candidate <id>.
109
+ A rejection's answer carries the creative's idea as data.anchor (its message, reference and language), restated first in hints: the edit keeps it, changing only what they named.`;
110
+ var ARGS = {
111
+ slug: { type: "string", description: "The creative: its folder name under src/creatives/.", required: true },
112
+ run: {
113
+ type: "string",
114
+ description: "The version: its canvas run id (r_\u2026) Left out, the version the creative shows now (its last render).",
115
+ required: false
116
+ },
117
+ option: {
118
+ type: "string",
119
+ description: 'One option of a version that made several: its label ("ugc"), its number ("2") or its slot. Left out, the whole version.',
120
+ required: false
121
+ },
122
+ verdict: { type: "string", description: "approved | rejected", required: true },
123
+ reasons: {
124
+ type: "string",
125
+ description: `Why it was rejected, comma-separated: ${CREATIVE_FEEDBACK_REASONS.join(", ")}. Map the user's words to these; "other" when none fits. On a video, voice_or_sound covers the voiceover, music and mix ("the voice sounds robotic", "music too loud") and pacing covers the timing ("too slow", "the hook comes too late").`,
126
+ required: false
127
+ },
128
+ note: {
129
+ type: "string",
130
+ description: "The user's own words, verbatim (not your summary). Up to 1000 characters.",
131
+ required: false
132
+ }
133
+ };
134
+ registerSchema({ command: "creatives.feedback.record", description: DESCRIPTION, args: ARGS });
135
+ function splitList(value) {
136
+ if (typeof value !== "string" || value.trim() === "") return void 0;
137
+ return value.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
138
+ }
139
+ function fail(code, message) {
140
+ writeJson({ ok: false, error: { code, message } });
141
+ process.exit(1);
142
+ }
143
+ async function refuseNotFeedback(body) {
144
+ if (body.verdict === "rejected" && !body.reasons?.length && !body.note) {
145
+ fail(
146
+ "VALIDATION_ERROR",
147
+ "A rejection needs --reasons or --note (the user's words), so the next version knows what to change."
148
+ );
149
+ }
150
+ if (body.verdict !== "rejected" || !body.note) return false;
151
+ const author = await readNoteAuthor(body.note, jevNoteJudge);
152
+ if (author === "agent_option") {
153
+ fail(
154
+ "AGENT_OPTION_NOT_FEEDBACK",
155
+ `"${body.note}" is the answer to your own question, not the person's taste: a defect the checks found is yours to fix inside this version (\`baker canvas run --fix\`), never feedback to record. Record only what the person says about the ad in their own words.`
156
+ );
157
+ }
158
+ return author === "unconfirmed";
159
+ }
160
+ async function writeBack(body) {
161
+ const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
162
+ const cacheDir = path.join(root, "canvas", ".cache");
163
+ const definition = frontmatterOf(
164
+ await readFile(path.join(root, "src", "creatives", body.slug, "_definition.md"), "utf8").catch(() => "")
165
+ );
166
+ const kind = definition?.kind === "video" || definition?.kind === "static" ? definition.kind : void 0;
167
+ const platform = typeof definition?.platform === "string" ? definition.platform : void 0;
168
+ const [drafts, company] = await Promise.all([
169
+ ruleCandidates(
170
+ body.note,
171
+ { ...kind ? { kind } : {}, ...platform ? { platform } : {} },
172
+ modelRuleDrafter(cacheDir)
173
+ ),
174
+ // Every recent verdict, notes whole: the distinct-notes summary counts a note given on five ads once.
175
+ apiPost("/api/creatives/feedback", { full: true }).catch(() => null)
176
+ ]);
177
+ const saved = drafts.map((d) => ({
178
+ ...d,
179
+ source: { slug: body.slug, runId: body.runId, ...body.note ? { quote: body.note } : {} }
180
+ }));
181
+ const ids = await saveCandidates(cacheDir, saved).catch(() => []);
182
+ const offered = drafts.flatMap((d, i) => ids[i] ? [{ id: ids[i], draft: d }] : []);
183
+ const rejections = (company?.data.recent ?? []).flatMap(
184
+ (e) => e.verdict === "rejected" && e.note ? [{ creative: e.creative, reasons: e.reasons, note: e.note }] : []
185
+ );
186
+ const repeated = repeatedReasons(rejections, body.reasons ?? [], body.slug);
187
+ return {
188
+ candidates: offered.map(({ id, draft }) => ({
189
+ candidate: id,
190
+ rule: draft.text,
191
+ strength: draft.strength,
192
+ applies: draft.applies,
193
+ ...draft.forbid ? { forbid: draft.forbid } : {},
194
+ ...draft.platforms ? { platforms: draft.platforms } : {}
195
+ })),
196
+ hints: ruleCandidateHints(
197
+ offered.map(({ id, draft }) => ({ id, text: draft.text })),
198
+ repeated
199
+ )
200
+ };
201
+ }
202
+ async function withRules(response, body, noteUnconfirmed) {
203
+ if (body.verdict !== "rejected" || !body.note || noteUnconfirmed) return response;
204
+ const rule = await writeBack(body);
205
+ return {
206
+ ...response,
207
+ data: { ...response.data, ...rule.candidates.length > 0 ? { ruleCandidates: rule.candidates } : {} },
208
+ hints: [...response.hints ?? [], ...rule.hints]
209
+ };
210
+ }
211
+ function ideaToKeep(body) {
212
+ return body.verdict === "rejected" ? readCreativeIdea(body.slug).catch(() => null) : Promise.resolve(null);
213
+ }
214
+ async function withIdea(recorded, idea) {
215
+ const view = await idea;
216
+ return view ? withAnchor(recorded, view, { full: false }) : recorded;
217
+ }
218
+ var feedbackRecordCommand = defineCommand({
219
+ meta: { name: "record", description: DESCRIPTION },
220
+ args: ARGS,
221
+ run: async ({ args }) => {
222
+ const reasons = splitList(args.reasons);
223
+ const unknown = (reasons ?? []).filter(
224
+ (reason) => !CREATIVE_FEEDBACK_REASONS.includes(reason)
225
+ );
226
+ if (unknown.length > 0) {
227
+ fail("VALIDATION_ERROR", `Unknown reason ${unknown.join(", ")}. Use: ${CREATIVE_FEEDBACK_REASONS.join(", ")}.`);
228
+ }
229
+ const parsed = creativesFeedbackRecordRequestSchema.safeParse({
230
+ slug: args.slug,
231
+ runId: await versionOf(String(args.slug), args.run).then(
232
+ (run) => run ?? fail("VALIDATION_ERROR", "--run: this creative has no rendered version here; name one (r_\u2026).")
233
+ ),
234
+ ...typeof args.option === "string" && args.option.trim() ? { option: args.option.trim() } : {},
235
+ verdict: args.verdict,
236
+ ...reasons ? { reasons } : {},
237
+ ...typeof args.note === "string" && args.note.trim() ? { note: args.note } : {}
238
+ });
239
+ if (!parsed.success) {
240
+ const issue = parsed.error.issues[0];
241
+ fail("VALIDATION_ERROR", `--${String(issue?.path[0] ?? "args")}: ${issue?.message ?? "invalid"}`);
242
+ }
243
+ const body = parsed.data;
244
+ const noteUnconfirmed = await refuseNotFeedback(body);
245
+ const idea = ideaToKeep(body);
246
+ try {
247
+ const response = await apiPost(
248
+ "/api/creatives/feedback/record",
249
+ noteUnconfirmed ? { ...body, noteUnconfirmed } : body
250
+ );
251
+ writeJson(await withIdea(await withRules(response, body, noteUnconfirmed), idea));
252
+ } catch (err) {
253
+ if (err instanceof ApiError) fail(err.code, err.message);
254
+ fail("INTERNAL_ERROR", "Unexpected error");
255
+ }
256
+ }
257
+ });
258
+ export {
259
+ feedbackRecordCommand
260
+ };
261
+ //# sourceMappingURL=feedback-record-GXPYXNT6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/creatives/feedback-record.ts","../src/commands/creatives/agent-option-note.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n CREATIVE_FEEDBACK_REASONS,\n type CreativeFeedbackReason,\n type CreativesFeedbackRecordResponse,\n type CreativesFeedbackResponse,\n creativesFeedbackRecordRequestSchema,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport type { IdeaView } from \"../../engine/creative-context/anchor.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { jevNoteJudge, readNoteAuthor } from \"./agent-option-note.ts\";\nimport { readCreativeIdea, withAnchor } from \"./idea-hint.ts\";\nimport { frontmatterOf } from \"./ideas-model.ts\";\nimport {\n modelRuleDrafter,\n repeatedReasons,\n ruleCandidateHints,\n ruleCandidates,\n type SavedCandidate,\n saveCandidates,\n} from \"./rule-candidate.ts\";\nimport { versionOf } from \"./version-of.ts\";\n\nconst DESCRIPTION = `Record what the user said about one version of a creative in this chat: an approval, or a rejection with reasons. Saved as their verdict (the person who wrote the latest message here) and read back by baker creatives feedback. One verdict per person per version or option: a later one replaces it.\nStart here: baker creatives feedback record --slug spring-offer --verdict rejected --reasons text_mistakes --note \"<their words>\"\nOnly record what the user said, never your own judgment. Picking one of several concepts is not a rejection of the others.\nWhen their words state a rule for every ad, the answer carries ruleCandidates: ask them once, and only on yes run baker creatives rules add --candidate <id>.\nA rejection's answer carries the creative's idea as data.anchor (its message, reference and language), restated first in hints: the edit keeps it, changing only what they named.`;\n\nconst ARGS = {\n slug: { type: \"string\", description: \"The creative: its folder name under src/creatives/.\", required: true },\n run: {\n type: \"string\",\n description: \"The version: its canvas run id (r_…) Left out, the version the creative shows now (its last render).\",\n required: false,\n },\n option: {\n type: \"string\",\n description:\n 'One option of a version that made several: its label (\"ugc\"), its number (\"2\") or its slot. Left out, the whole version.',\n required: false,\n },\n verdict: { type: \"string\", description: \"approved | rejected\", required: true },\n reasons: {\n type: \"string\",\n description: `Why it was rejected, comma-separated: ${CREATIVE_FEEDBACK_REASONS.join(\", \")}. Map the user's words to these; \"other\" when none fits. On a video, voice_or_sound covers the voiceover, music and mix (\"the voice sounds robotic\", \"music too loud\") and pacing covers the timing (\"too slow\", \"the hook comes too late\").`,\n required: false,\n },\n note: {\n type: \"string\",\n description: \"The user's own words, verbatim (not your summary). Up to 1000 characters.\",\n required: false,\n },\n} as const;\n\nregisterSchema({ command: \"creatives.feedback.record\", description: DESCRIPTION, args: ARGS });\n\nfunction splitList(value: unknown): string[] | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nfunction fail(code: string, message: string): never {\n writeJson({ ok: false, error: { code, message } });\n process.exit(1);\n}\n\n/**\n * A rejection whose note only answers the agent's own question, or that says nothing, is not the\n * person's feedback. Returns whether the note could not be confirmed as the person's words.\n */\nasync function refuseNotFeedback(body: {\n verdict: string;\n reasons?: readonly string[];\n note?: string;\n}): Promise<boolean> {\n if (body.verdict === \"rejected\" && !body.reasons?.length && !body.note) {\n fail(\n \"VALIDATION_ERROR\",\n \"A rejection needs --reasons or --note (the user's words), so the next version knows what to change.\",\n );\n }\n if (body.verdict !== \"rejected\" || !body.note) return false;\n const author = await readNoteAuthor(body.note, jevNoteJudge);\n if (author === \"agent_option\") {\n fail(\n \"AGENT_OPTION_NOT_FEEDBACK\",\n `\"${body.note}\" is the answer to your own question, not the person's taste: a defect the checks found is yours to fix inside this version (\\`baker canvas run --fix\\`), never feedback to record. Record only what the person says about the ad in their own words.`,\n );\n }\n return author === \"unconfirmed\";\n}\n\n/**\n * The rules a rejection's note states for every ad (`ruleCandidates`), kept for `rules add\n * --candidate`, and the reasons the company already gave on other ads (`repeatedReasons`). Never\n * throws: a draft nobody could make is no candidate, and the verdict is recorded either way.\n */\nasync function writeBack(body: { slug: string; runId: string; note?: string; reasons?: CreativeFeedbackReason[] }) {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const cacheDir = path.join(root, \"canvas\", \".cache\");\n const definition = frontmatterOf(\n await readFile(path.join(root, \"src\", \"creatives\", body.slug, \"_definition.md\"), \"utf8\").catch(() => \"\"),\n );\n const kind = definition?.kind === \"video\" || definition?.kind === \"static\" ? definition.kind : undefined;\n const platform = typeof definition?.platform === \"string\" ? definition.platform : undefined;\n const [drafts, company] = await Promise.all([\n ruleCandidates(\n body.note,\n { ...(kind ? { kind } : {}), ...(platform ? { platform } : {}) },\n modelRuleDrafter(cacheDir),\n ),\n // Every recent verdict, notes whole: the distinct-notes summary counts a note given on five ads once.\n apiPost<CreativesFeedbackResponse>(\"/api/creatives/feedback\", { full: true }).catch(() => null),\n ]);\n const saved: SavedCandidate[] = drafts.map((d) => ({\n ...d,\n source: { slug: body.slug, runId: body.runId, ...(body.note ? { quote: body.note } : {}) },\n }));\n const ids = await saveCandidates(cacheDir, saved).catch(() => [] as string[]);\n const offered = drafts.flatMap((d, i) => (ids[i] ? [{ id: ids[i] as string, draft: d }] : []));\n const rejections = (company?.data.recent ?? []).flatMap((e) =>\n e.verdict === \"rejected\" && e.note ? [{ creative: e.creative, reasons: e.reasons, note: e.note }] : [],\n );\n const repeated = repeatedReasons(rejections, body.reasons ?? [], body.slug);\n return {\n candidates: offered.map(({ id, draft }) => ({\n candidate: id,\n rule: draft.text,\n strength: draft.strength,\n applies: draft.applies,\n ...(draft.forbid ? { forbid: draft.forbid } : {}),\n ...(draft.platforms ? { platforms: draft.platforms } : {}),\n })),\n hints: ruleCandidateHints(\n offered.map(({ id, draft }) => ({ id, text: draft.text })),\n repeated,\n ),\n };\n}\n\n/** The recorded verdict, with the rules a rejection in the person's own words states for every ad. */\nasync function withRules(\n response: CreativesFeedbackRecordResponse,\n body: { verdict: string; slug: string; runId: string; note?: string; reasons?: CreativeFeedbackReason[] },\n noteUnconfirmed: boolean,\n) {\n if (body.verdict !== \"rejected\" || !body.note || noteUnconfirmed) return response;\n const rule = await writeBack(body);\n return {\n ...response,\n data: { ...response.data, ...(rule.candidates.length > 0 ? { ruleCandidates: rule.candidates } : {}) },\n hints: [...(response.hints ?? []), ...rule.hints],\n };\n}\n\n/** A rejection is followed by an edit: the idea it keeps, read while the verdict is recorded. */\nfunction ideaToKeep(body: { verdict: string; slug: string }): Promise<IdeaView | null> {\n return body.verdict === \"rejected\" ? readCreativeIdea(body.slug).catch(() => null) : Promise.resolve(null);\n}\n\n/** The answer with the idea the edit keeps, restated first; as it is without one. */\nasync function withIdea<R extends { data: object; hints?: string[] }>(recorded: R, idea: Promise<IdeaView | null>) {\n const view = await idea;\n return view ? withAnchor(recorded, view, { full: false }) : recorded;\n}\n\nexport const feedbackRecordCommand = defineCommand({\n meta: { name: \"record\", description: DESCRIPTION },\n args: ARGS,\n run: async ({ args }) => {\n const reasons = splitList(args.reasons);\n const unknown = (reasons ?? []).filter(\n (reason) => !(CREATIVE_FEEDBACK_REASONS as readonly string[]).includes(reason),\n );\n if (unknown.length > 0) {\n fail(\"VALIDATION_ERROR\", `Unknown reason ${unknown.join(\", \")}. Use: ${CREATIVE_FEEDBACK_REASONS.join(\", \")}.`);\n }\n const parsed = creativesFeedbackRecordRequestSchema.safeParse({\n slug: args.slug,\n runId: await versionOf(String(args.slug), args.run).then(\n (run) => run ?? fail(\"VALIDATION_ERROR\", \"--run: this creative has no rendered version here; name one (r_…).\"),\n ),\n ...(typeof args.option === \"string\" && args.option.trim() ? { option: args.option.trim() } : {}),\n verdict: args.verdict,\n ...(reasons ? { reasons } : {}),\n ...(typeof args.note === \"string\" && args.note.trim() ? { note: args.note } : {}),\n });\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n fail(\"VALIDATION_ERROR\", `--${String(issue?.path[0] ?? \"args\")}: ${issue?.message ?? \"invalid\"}`);\n }\n const body = parsed.data;\n const noteUnconfirmed = await refuseNotFeedback(body);\n const idea = ideaToKeep(body);\n try {\n const response = await apiPost<CreativesFeedbackRecordResponse>(\n \"/api/creatives/feedback/record\",\n noteUnconfirmed ? { ...body, noteUnconfirmed } : body,\n );\n writeJson(await withIdea(await withRules(response, body, noteUnconfirmed), idea));\n } catch (err) {\n if (err instanceof ApiError) fail(err.code, err.message);\n fail(\"INTERNAL_ERROR\", \"Unexpected error\");\n }\n },\n});\n","/**\n * Whether a rejection's note is the agent's own words rather than the person's taste: the label\n * of an option the agent offered (\"Sí, corrige todo (Recomendado)\") or the answer to its own\n * \"fix what is pending?\" (\"Fix everything\"). Production Oct 2026: both were recorded as\n * rejections, so every fix became a new version and later chats read the agent's own defects as\n * the company's taste. The agent writes those options in the marketer's language, so the decision\n * model reads the note in whatever language it is in (docs/decision-model.md).\n */\nimport { askJev } from \"../../engine/nodes/local/lib/jev.ts\";\nimport type { ReviewUsage } from \"../../engine/nodes/local/lib/render-review.ts\";\nimport { holdWorkspaceSpend } from \"../canvas/unbilled-spend.ts\";\n\n/**\n * The bands, measured 2026-10-07 on 30 notes in 8 languages (scripts/agent-option-note-evals,\n * three runs). A recommended tag scored 0.92 or more on the agent's labels and 0.03 or less on\n * people's notes. A bare yes to fixing scored 0.59 or more on the agent's untagged answers and\n * 0.31 or less on people's, except \"fix all the typos\" (0.52-0.56), which names its problem\n * (0.86; the agent's answers 0.12 or less).\n */\nexport const NOTE_BANDS = { tagged: 0.5, bareFix: 0.45, namesProblem: 0.5 } as const;\n\nconst TAGGED = \"Does `note` end with a tag marking it as the recommended option, like (Recommended), in any language?\";\nconst BARE_FIX =\n 'Is `note` a bare yes to an offer to fix things, like \"fix everything\" or \"fix what is pending\", naming no particular problem? A note that names what is wrong or what to change (the typos, the price, cut-off text, redo the pieces) is not.';\nconst NAMES_PROBLEM =\n \"Does `note` name a particular problem, element or part of an ad (a typo, the price, the logo, the audio, the text, the colours, a person), apart from a whole format or size?\";\n\n/** Three judgments about one note, each a probability; one judgment per question, combined in code. */\nexport type NoteReading = { tagged: number; bareFix: number; namesProblem: number };\n\n/** The decision model's reading of `note`; null when no judgment came back. */\nexport type NoteJudge = (note: string) => Promise<NoteReading | null>;\n\n/** The decision model as the judge: three Nouls in one request. */\nexport const jevNoteJudge: NoteJudge = async (note) => {\n const spent: ReviewUsage[] = [];\n const answers = await askJev(\n [TAGGED, BARE_FIX, NAMES_PROBLEM].map((question) => ({ instructions: { note, question } })),\n (usage) => spent.push(usage),\n );\n await holdWorkspaceSpend(spent);\n if (answers === null) return null;\n const [tagged = 0, bareFix = 0, namesProblem = 1] = answers;\n return { tagged, bareFix, namesProblem };\n};\n\n/** The agent's option label, or its bare fix answer naming nothing of the ad. Pure. */\nexport function readsAsAgentOption(reading: NoteReading): boolean {\n if (reading.tagged >= NOTE_BANDS.tagged) return true;\n return reading.bareFix >= NOTE_BANDS.bareFix && reading.namesProblem < NOTE_BANDS.namesProblem;\n}\n\n/** Whose words a note is: the agent's own option, the person's, or unconfirmed when no judgment came back. */\nexport type NoteAuthor = \"agent_option\" | \"person\" | \"unconfirmed\";\n\n/**\n * Who wrote `note`, as the decision model reads it. No judgment (no key, a timeout, an outage) is\n * \"unconfirmed\", never the person's: Baker keeps that note but does not read it as taste (B5).\n */\nexport async function readNoteAuthor(note: string, judge: NoteJudge): Promise<NoteAuthor> {\n const text = note.trim();\n if (!text) return \"person\";\n const reading = await judge(text).catch(() => null);\n if (reading === null) return \"unconfirmed\";\n return readsAsAgentOption(reading) ? \"agent_option\" : \"person\";\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,177 @@
1
+ import {
2
+ fetchHints,
3
+ redditPageFix
4
+ } from "./chunk-SSTL3A7Z.js";
5
+ import {
6
+ handleResearchError,
7
+ writeResearchJson
8
+ } from "./chunk-EGPYWJGZ.js";
9
+ import "./chunk-O37VU7FG.js";
10
+ import "./chunk-CAZGM2NX.js";
11
+ import "./chunk-NZS3KEQ2.js";
12
+ import "./chunk-GIWHHCD6.js";
13
+ import "./chunk-XQIOCIDO.js";
14
+ import "./chunk-WTJSMYY2.js";
15
+ import {
16
+ apiPost
17
+ } from "./chunk-6YLNY6CK.js";
18
+ import "./chunk-D5NEIESR.js";
19
+ import "./chunk-57KKVDDR.js";
20
+ import {
21
+ registerSchema
22
+ } from "./chunk-QANGHND7.js";
23
+ import "./chunk-YQSBHWOI.js";
24
+
25
+ // src/commands/research/fetch.ts
26
+ import { defineCommand } from "citty";
27
+ var CONTENT_PREVIEW_CHARS = 2e4;
28
+ var TIMEOUT_MS = 18e4;
29
+ registerSchema({
30
+ command: "research.fetch",
31
+ description: "Read a page an ordinary web fetch could not \u2014 bot walls and JavaScript-rendered pages are resolved for you. Use it when your normal page read came back with a security check, an error page, or an empty shell.",
32
+ args: {
33
+ url: { type: "string", description: "Full URL of the page to read", required: true },
34
+ format: {
35
+ type: "string",
36
+ description: "markdown (default, best for reading) or html (when you need the markup)",
37
+ required: false,
38
+ enum: ["markdown", "html"]
39
+ },
40
+ "wait-for": {
41
+ type: "number",
42
+ description: "Extra ms to let late content settle (0-30000). Only for pages that fill in after load",
43
+ required: false
44
+ },
45
+ "whole-page": {
46
+ type: "boolean",
47
+ description: "Include nav, footer and sidebars (default: main content only)",
48
+ required: false,
49
+ default: false
50
+ },
51
+ full: {
52
+ type: "boolean",
53
+ description: `Return the whole page instead of the first ${CONTENT_PREVIEW_CHARS} characters`,
54
+ required: false,
55
+ default: false
56
+ }
57
+ }
58
+ });
59
+ var FIELDS = {
60
+ url: "The URL as asked for",
61
+ final_url: "Where the read landed after redirects",
62
+ title: "Page title, or null when the page declares none",
63
+ content: "The page text (markdown by default)",
64
+ content_chars: "Length of the full page available on the server",
65
+ content_shown: "Characters in `content` \u2014 below content_chars unless --full",
66
+ truncated: "The page was longer than one read returns, so the tail is missing",
67
+ provider: "Who resolved the read"
68
+ };
69
+ function fetchFix(code) {
70
+ if (code === "VALIDATION_ERROR") {
71
+ return {
72
+ action: "retry_with_changes",
73
+ explanation: "Re-run with a complete address, including https://."
74
+ };
75
+ }
76
+ if (code === "TIMEOUT") {
77
+ return {
78
+ action: "retry_with_changes",
79
+ explanation: "The page never settled. Retry this URL once with `--wait-for 10000`; if that fails too, carry on with the rest of the job and say this page couldn't be read."
80
+ };
81
+ }
82
+ if (code === "RATE_LIMITED") {
83
+ return {
84
+ action: "continue_without",
85
+ explanation: "The page reader is busy. Do the rest of the job first and come back to this URL once, later \u2014 don't loop on it."
86
+ };
87
+ }
88
+ if (code === "FORBIDDEN" || code === "NOT_FOUND") {
89
+ return {
90
+ action: "continue_without",
91
+ explanation: "This page will not open for us, and retrying will not change that. Carry on with the sources you can reach and say plainly which page you couldn't read."
92
+ };
93
+ }
94
+ return {
95
+ action: "continue_without",
96
+ explanation: "This read failed. Don't build a retry ladder around it \u2014 finish the rest of the job with what you can reach and name this page as a gap."
97
+ };
98
+ }
99
+ var fetchCommand = defineCommand({
100
+ meta: {
101
+ name: "fetch",
102
+ description: `Read a page an ordinary web fetch could not. Bot walls and JavaScript-rendered pages are resolved for you \u2014 you never have to retry, wait, or drive a browser yourself.
103
+
104
+ Reach for this the moment a normal page read comes back with a security check, an error page, or an empty shell. One call, no escalation ladder.
105
+
106
+ Examples:
107
+ baker research fetch "https://competitor.com/pricing"
108
+ baker research fetch "https://competitor.com/pricing" --full
109
+ baker research fetch "https://app.competitor.com/blog/post" --wait-for 5000
110
+ baker research fetch "https://competitor.com" --format html --whole-page`
111
+ },
112
+ args: {
113
+ url: { type: "positional", description: "URL of the page to read", required: false },
114
+ format: { type: "string", description: "markdown (default) or html", required: false },
115
+ "wait-for": { type: "string", description: "Extra ms to let late content settle (0-30000)", required: false },
116
+ "whole-page": { type: "boolean", description: "Include nav, footer and sidebars", required: false },
117
+ full: { type: "boolean", description: "Return the whole page, not just the first chunk", required: false }
118
+ },
119
+ run: async ({ args }) => {
120
+ const url = args.url;
121
+ if (!url) {
122
+ writeResearchJson({
123
+ ok: false,
124
+ error: {
125
+ code: "VALIDATION_ERROR",
126
+ message: "A URL is required",
127
+ fix: fetchFix("VALIDATION_ERROR")
128
+ }
129
+ });
130
+ process.exit(1);
131
+ }
132
+ const format = args.format ?? "markdown";
133
+ if (format !== "markdown" && format !== "html") {
134
+ writeResearchJson({
135
+ ok: false,
136
+ error: {
137
+ code: "VALIDATION_ERROR",
138
+ message: "Format must be markdown or html",
139
+ fix: { action: "retry_with_changes", explanation: "Re-run with --format markdown or --format html." }
140
+ }
141
+ });
142
+ process.exit(1);
143
+ }
144
+ const body = { url, format };
145
+ if (args["wait-for"]) body.waitFor = Number(args["wait-for"]);
146
+ if (args["whole-page"]) body.onlyMainContent = false;
147
+ try {
148
+ const page = await apiPost("/api/research/fetch", body, { timeoutMs: TIMEOUT_MS });
149
+ const content = args.full ? page.content : page.content.slice(0, CONTENT_PREVIEW_CHARS);
150
+ writeResearchJson({
151
+ ok: true,
152
+ data: {
153
+ url: page.url,
154
+ final_url: page.finalUrl,
155
+ title: page.title,
156
+ content_chars: page.contentChars,
157
+ content_shown: content.length,
158
+ truncated: page.truncated,
159
+ provider: page.provider,
160
+ content
161
+ },
162
+ fields: FIELDS,
163
+ hints: fetchHints({
164
+ truncated: page.truncated,
165
+ contentChars: page.contentChars,
166
+ shownChars: content.length
167
+ })
168
+ });
169
+ } catch (err) {
170
+ handleResearchError(err, (code) => redditPageFix(url, code) ?? fetchFix(code));
171
+ }
172
+ }
173
+ });
174
+ export {
175
+ fetchCommand
176
+ };
177
+ //# sourceMappingURL=fetch-HMUGSRE4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/research/fetch.ts"],"sourcesContent":["import type { ResearchFetchRequest, ResearchFetchResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { fetchHints, redditPageFix } from \"./hints.ts\";\nimport { handleResearchError, type ResearchFix, writeResearchJson } from \"./output.ts\";\n\n/**\n * A page big enough to matter is bigger than a turn wants to carry, and the\n * read is cached — so the default shows the top of it and `--full` returns for\n * the rest at no extra cost.\n */\nconst CONTENT_PREVIEW_CHARS = 20_000;\n\n/** A page behind a bot wall can take a while to clear; the default 60s is not enough. */\nconst TIMEOUT_MS = 180_000;\n\nregisterSchema({\n command: \"research.fetch\",\n description:\n \"Read a page an ordinary web fetch could not — bot walls and JavaScript-rendered pages are resolved for you. Use it when your normal page read came back with a security check, an error page, or an empty shell.\",\n args: {\n url: { type: \"string\", description: \"Full URL of the page to read\", required: true },\n format: {\n type: \"string\",\n description: \"markdown (default, best for reading) or html (when you need the markup)\",\n required: false,\n enum: [\"markdown\", \"html\"],\n },\n \"wait-for\": {\n type: \"number\",\n description: \"Extra ms to let late content settle (0-30000). Only for pages that fill in after load\",\n required: false,\n },\n \"whole-page\": {\n type: \"boolean\",\n description: \"Include nav, footer and sidebars (default: main content only)\",\n required: false,\n default: false,\n },\n full: {\n type: \"boolean\",\n description: `Return the whole page instead of the first ${CONTENT_PREVIEW_CHARS} characters`,\n required: false,\n default: false,\n },\n },\n});\n\nconst FIELDS: Record<string, string> = {\n url: \"The URL as asked for\",\n final_url: \"Where the read landed after redirects\",\n title: \"Page title, or null when the page declares none\",\n content: \"The page text (markdown by default)\",\n content_chars: \"Length of the full page available on the server\",\n content_shown: \"Characters in `content` — below content_chars unless --full\",\n truncated: \"The page was longer than one read returns, so the tail is missing\",\n provider: \"Who resolved the read\",\n};\n\n/**\n * Every failure here is one source out of a larger job, so the remediation is\n * about finishing the job: name the gap, keep going. The only case worth a\n * second attempt is a page that never settled.\n */\nfunction fetchFix(code: string): ResearchFix {\n if (code === \"VALIDATION_ERROR\") {\n return {\n action: \"retry_with_changes\",\n explanation: \"Re-run with a complete address, including https://.\",\n };\n }\n if (code === \"TIMEOUT\") {\n return {\n action: \"retry_with_changes\",\n explanation:\n \"The page never settled. Retry this URL once with `--wait-for 10000`; if that fails too, carry on with the rest of the job and say this page couldn't be read.\",\n };\n }\n if (code === \"RATE_LIMITED\") {\n return {\n action: \"continue_without\",\n explanation:\n \"The page reader is busy. Do the rest of the job first and come back to this URL once, later — don't loop on it.\",\n };\n }\n if (code === \"FORBIDDEN\" || code === \"NOT_FOUND\") {\n return {\n action: \"continue_without\",\n explanation:\n \"This page will not open for us, and retrying will not change that. Carry on with the sources you can reach and say plainly which page you couldn't read.\",\n };\n }\n return {\n action: \"continue_without\",\n explanation:\n \"This read failed. Don't build a retry ladder around it — finish the rest of the job with what you can reach and name this page as a gap.\",\n };\n}\n\nexport const fetchCommand = defineCommand({\n meta: {\n name: \"fetch\",\n description: `Read a page an ordinary web fetch could not. Bot walls and JavaScript-rendered pages are resolved for you — you never have to retry, wait, or drive a browser yourself.\n\nReach for this the moment a normal page read comes back with a security check, an error page, or an empty shell. One call, no escalation ladder.\n\nExamples:\n baker research fetch \"https://competitor.com/pricing\"\n baker research fetch \"https://competitor.com/pricing\" --full\n baker research fetch \"https://app.competitor.com/blog/post\" --wait-for 5000\n baker research fetch \"https://competitor.com\" --format html --whole-page`,\n },\n args: {\n url: { type: \"positional\", description: \"URL of the page to read\", required: false },\n format: { type: \"string\", description: \"markdown (default) or html\", required: false },\n \"wait-for\": { type: \"string\", description: \"Extra ms to let late content settle (0-30000)\", required: false },\n \"whole-page\": { type: \"boolean\", description: \"Include nav, footer and sidebars\", required: false },\n full: { type: \"boolean\", description: \"Return the whole page, not just the first chunk\", required: false },\n },\n run: async ({ args }) => {\n const url = args.url as string | undefined;\n if (!url) {\n writeResearchJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: \"A URL is required\",\n fix: fetchFix(\"VALIDATION_ERROR\"),\n },\n });\n process.exit(1);\n }\n\n const format = (args.format as string | undefined) ?? \"markdown\";\n if (format !== \"markdown\" && format !== \"html\") {\n writeResearchJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: \"Format must be markdown or html\",\n fix: { action: \"retry_with_changes\", explanation: \"Re-run with --format markdown or --format html.\" },\n },\n });\n process.exit(1);\n }\n\n const body: ResearchFetchRequest = { url, format };\n if (args[\"wait-for\"]) body.waitFor = Number(args[\"wait-for\"]);\n if (args[\"whole-page\"]) body.onlyMainContent = false;\n\n try {\n const page = await apiPost<ResearchFetchResponse>(\"/api/research/fetch\", body, { timeoutMs: TIMEOUT_MS });\n const content = args.full ? page.content : page.content.slice(0, CONTENT_PREVIEW_CHARS);\n\n writeResearchJson({\n ok: true,\n data: {\n url: page.url,\n final_url: page.finalUrl,\n title: page.title,\n content_chars: page.contentChars,\n content_shown: content.length,\n truncated: page.truncated,\n provider: page.provider,\n content,\n },\n fields: FIELDS,\n hints: fetchHints({\n truncated: page.truncated,\n contentChars: page.contentChars,\n shownChars: content.length,\n }),\n });\n } catch (err) {\n handleResearchError(err, (code) => redditPageFix(url, code) ?? fetchFix(code));\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,134 @@
1
+ import {
2
+ OUTPUT_ARGS,
3
+ writeProviderHits
4
+ } from "./chunk-IBTSIPYA.js";
5
+ import {
6
+ emptyResultHints
7
+ } from "./chunk-Q6ULQMWG.js";
8
+ import {
9
+ AUTO_INGEST_MAX,
10
+ parseAutoIngest
11
+ } from "./chunk-KKJ4KJCW.js";
12
+ import {
13
+ ApiError,
14
+ apiPost
15
+ } from "./chunk-6YLNY6CK.js";
16
+ import "./chunk-D5NEIESR.js";
17
+ import "./chunk-57KKVDDR.js";
18
+ import {
19
+ registerSchema,
20
+ writeJson
21
+ } from "./chunk-QANGHND7.js";
22
+ import "./chunk-YQSBHWOI.js";
23
+
24
+ // src/commands/images/find.ts
25
+ import { defineCommand } from "citty";
26
+ registerSchema({
27
+ command: "images.find",
28
+ description: "Fanout image search: library first, then opted-in external providers.",
29
+ args: {
30
+ query: { type: "string", description: "Search query", required: true },
31
+ sources: {
32
+ type: "string",
33
+ description: "Comma-separated providers: library,pexels,pixabay,google,iconify,giphy,pinterest (brandfetch lives at `baker images logo`)",
34
+ required: false
35
+ },
36
+ limit: { type: "number", description: "Max results per group", required: false, default: 20 },
37
+ fallback: {
38
+ type: "boolean",
39
+ description: "Only cascade to externals when top library score < threshold",
40
+ required: false,
41
+ default: false
42
+ },
43
+ threshold: { type: "number", description: "Fallback threshold (0-1)", required: false, default: 0.6 },
44
+ "auto-ingest": {
45
+ type: "number",
46
+ description: `Auto-ingest top N external hits (0-${AUTO_INGEST_MAX.find}, default 0) and return Baker-owned URLs on ingested hits`,
47
+ required: false,
48
+ default: 0
49
+ },
50
+ context: {
51
+ type: "string",
52
+ description: "Free-text hint applied to every auto-ingested hit (overrides provider-derived context)",
53
+ required: false
54
+ },
55
+ output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
56
+ fields: { type: "string", description: "Comma-separated field names to include", required: false },
57
+ full: { type: "boolean", description: "Include full metadata", required: false, default: false }
58
+ }
59
+ });
60
+ var findCommand = defineCommand({
61
+ meta: {
62
+ name: "find",
63
+ description: "Library-first fanout image search. Opt in to providers with --sources. `--fallback` short-circuits to externals only when library is thin. With --auto-ingest, ingested external hits return Baker-owned URLs.\n\nExample: baker images find 'office' --sources library,pexels --limit 20"
64
+ },
65
+ args: {
66
+ query: { type: "positional", description: "Search query", required: false },
67
+ sources: { type: "string", description: "Comma-separated providers", required: false },
68
+ limit: { type: "string", description: "Max results per group (default 20)", required: false },
69
+ fallback: { type: "boolean", description: "Cascade to externals only when library thin", required: false },
70
+ threshold: { type: "string", description: "Fallback threshold (default 0.6)", required: false },
71
+ "auto-ingest": {
72
+ type: "string",
73
+ description: `Auto-ingest top N external hits (0-${AUTO_INGEST_MAX.find}) and return Baker-owned URLs on ingested hits`,
74
+ required: false
75
+ },
76
+ context: { type: "string", description: "Description context hint applied to auto-ingested hits", required: false },
77
+ ...OUTPUT_ARGS
78
+ },
79
+ run: async ({ args }) => {
80
+ try {
81
+ const query = args.query;
82
+ if (!query) {
83
+ writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Query is required" } });
84
+ process.exit(1);
85
+ }
86
+ const body = { query };
87
+ if (args.sources) {
88
+ body.sources = args.sources.split(",").filter(Boolean);
89
+ }
90
+ if (args.limit) body.limit = Number(args.limit);
91
+ if (args.fallback) body.fallback = true;
92
+ if (args.threshold) body.threshold = Number(args.threshold);
93
+ if (args["auto-ingest"] !== void 0) {
94
+ const parsed = parseAutoIngest(args["auto-ingest"], AUTO_INGEST_MAX.find);
95
+ if (!parsed.ok) {
96
+ writeJson({
97
+ ok: false,
98
+ error: {
99
+ code: "VALIDATION_ERROR",
100
+ message: parsed.message,
101
+ fix: {
102
+ action: "retry_with_changes",
103
+ explanation: `Re-run with --auto-ingest in 0-${AUTO_INGEST_MAX.find}.`
104
+ }
105
+ }
106
+ });
107
+ process.exit(1);
108
+ }
109
+ body.autoIngest = parsed.value;
110
+ }
111
+ if (args.context) body.descriptionContext = args.context;
112
+ const data = await apiPost("/api/images/find", body);
113
+ const hits = [...data.groups.library, ...data.groups.external];
114
+ const hints = emptyResultHints({
115
+ provider: "find",
116
+ hitCount: hits.length,
117
+ activeFilters: args.fallback ? ["--fallback"] : [],
118
+ subject: query
119
+ });
120
+ writeProviderHits(data, hits, args, hints);
121
+ } catch (err) {
122
+ if (err instanceof ApiError) {
123
+ writeJson({ ok: false, error: { code: err.code, message: err.message } });
124
+ process.exit(1);
125
+ }
126
+ writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
127
+ process.exit(1);
128
+ }
129
+ }
130
+ });
131
+ export {
132
+ findCommand
133
+ };
134
+ //# sourceMappingURL=find-2EPXK5RF.js.map