@koda-sl/baker-cli 0.448.0-dev.0d67e41b9 → 0.448.0-dev.ccc3c9a37

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 (1388) hide show
  1. package/README.md +229 -40
  2. package/dist/account-JG7QD522.js +79 -0
  3. package/dist/account-V6PB6PA5.js +80 -0
  4. package/dist/account-VLPX7EZT.js +49 -0
  5. package/dist/account-reads-4P5L6CJN.js +218 -0
  6. package/dist/account-reads-4P5L6CJN.js.map +1 -0
  7. package/dist/account-writes-BGREY7ZL.js +66 -0
  8. package/dist/accounts-2FINK5GZ.js +114 -0
  9. package/dist/accounts-2UV5Z3Y6.js +75 -0
  10. package/dist/accounts-3EX2PFJB.js +77 -0
  11. package/dist/accounts-G2QT3ZVP.js +115 -0
  12. package/dist/accounts-N63J5YTK.js +611 -0
  13. package/dist/actions-PA2BPIYO.js +55 -0
  14. package/dist/active-entities-RDXDSMA2.js +103 -0
  15. package/dist/activecampaign-EE5ERO25.js +897 -0
  16. package/dist/activecampaign-EE5ERO25.js.map +1 -0
  17. package/dist/activities-RBTU2Q24.js +74 -0
  18. package/dist/ad-group-writes-5NTRJTVE.js +170 -0
  19. package/dist/ad-groups-4OTAKWUC.js +68 -0
  20. package/dist/ad-writes-T7W3DDKK.js +174 -0
  21. package/dist/add-4VKA4NDH.js +105 -0
  22. package/dist/add-MQO33HL3.js +97 -0
  23. package/dist/add-MYPHHYC4.js +302 -0
  24. package/dist/add-MYPHHYC4.js.map +1 -0
  25. package/dist/add-QM7ANAVG.js +104 -0
  26. package/dist/add-accounts-VDSWHJ4K.js +91 -0
  27. package/dist/add-accounts-VDSWHJ4K.js.map +1 -0
  28. package/dist/ads-HYODBAPV.js +128 -0
  29. package/dist/ads-HYODBAPV.js.map +1 -0
  30. package/dist/ads-IJCFN2N3.js +113 -0
  31. package/dist/ads-QKMLAPZC.js +40 -0
  32. package/dist/ads-XYAWONXR.js +77 -0
  33. package/dist/adsets-DPTIKGTG.js +176 -0
  34. package/dist/advertisers-ITFXIXUW.js +125 -0
  35. package/dist/advertisers-ITFXIXUW.js.map +1 -0
  36. package/dist/advertisers-SZFDOPBQ.js +120 -0
  37. package/dist/analytics-HFBYIPZ7.js +433 -0
  38. package/dist/analytics-NDZR33ZJ.js +1976 -0
  39. package/dist/analytics-NDZR33ZJ.js.map +1 -0
  40. package/dist/animate-LUKNHCF4.js +480 -0
  41. package/dist/assign-QCICUD72.js +77 -0
  42. package/dist/audience-size-HML4BLHJ.js +94 -0
  43. package/dist/audiences-BSABKS5K.js +268 -0
  44. package/dist/audiences-FWOOSUSJ.js +78 -0
  45. package/dist/audiences-VK4M7GLQ.js +85 -0
  46. package/dist/audit-DUM55J5U.js +151 -0
  47. package/dist/audit-JR5R75XK.js +88 -0
  48. package/dist/autocomplete-VX4PMMLR.js +111 -0
  49. package/dist/avatars-5KCRSUJ3.js +38 -0
  50. package/dist/bid-pricing-AIUACXUH.js +99 -0
  51. package/dist/brand-UBTC2WXR.js +22 -0
  52. package/dist/brief-NU7ZGPXO.js +490 -0
  53. package/dist/brief-NU7ZGPXO.js.map +1 -0
  54. package/dist/businesses-P3RX4UXS.js +53 -0
  55. package/dist/campaign-groups-SJZEDIBL.js +95 -0
  56. package/dist/campaign-writes-5BPVXG4C.js +170 -0
  57. package/dist/campaign-writes-VE6QLIDA.js +165 -0
  58. package/dist/campaigns-JEWEDCTC.js +109 -0
  59. package/dist/campaigns-MEIMSHJF.js +110 -0
  60. package/dist/campaigns-NCGJNJKS.js +107 -0
  61. package/dist/campaigns-XY7QWHDN.js +76 -0
  62. package/dist/canvas-DK2DH7BA.js +46 -0
  63. package/dist/canvas-DK2DH7BA.js.map +1 -0
  64. package/dist/capabilities-W6SPXOPF.js +144 -0
  65. package/dist/cards-CLD4WX6G.js +85 -0
  66. package/dist/catalog-W6RBOIOF.js +64 -0
  67. package/dist/catalog-W6RBOIOF.js.map +1 -0
  68. package/dist/catalogs-DINPKQXY.js +128 -0
  69. package/dist/changes-N2YZXAPF.js +135 -0
  70. package/dist/chatgpt-TPAP6BVY.js +47 -0
  71. package/dist/chats-FKVVBXVF.js +262 -0
  72. package/dist/chunk-237WE5LX.js +455 -0
  73. package/dist/chunk-237WE5LX.js.map +1 -0
  74. package/dist/chunk-24IQ6K7K.js +103 -0
  75. package/dist/chunk-2FZG5DD2.js +297 -0
  76. package/dist/chunk-2T3EH2MU.js +363 -0
  77. package/dist/chunk-2Y5UE2CV.js +174 -0
  78. package/dist/chunk-2ZZR2SOF.js +215 -0
  79. package/dist/chunk-2ZZR2SOF.js.map +1 -0
  80. package/dist/chunk-3KPQDXIU.js +1830 -0
  81. package/dist/chunk-4AFGT3L3.js +46 -0
  82. package/dist/chunk-4JKBMKFC.js +225 -0
  83. package/dist/chunk-4KBWL7S4.js +610 -0
  84. package/dist/chunk-4R3QKEDV.js +136 -0
  85. package/dist/chunk-536R4RRM.js +166 -0
  86. package/dist/chunk-536R4RRM.js.map +1 -0
  87. package/dist/chunk-57XJ7QF7.js +65 -0
  88. package/dist/chunk-57XJ7QF7.js.map +1 -0
  89. package/dist/chunk-6AJ6ZD73.js +172 -0
  90. package/dist/chunk-6AJ6ZD73.js.map +1 -0
  91. package/dist/chunk-6SL6463H.js +309 -0
  92. package/dist/chunk-7TRSFEHZ.js +51 -0
  93. package/dist/chunk-AOCG7COT.js +474 -0
  94. package/dist/chunk-AOCG7COT.js.map +1 -0
  95. package/dist/chunk-APNV7FMK.js +191 -0
  96. package/dist/chunk-AR7PU7BB.js +76 -0
  97. package/dist/chunk-AR7PU7BB.js.map +1 -0
  98. package/dist/chunk-B2HLSTK6.js +392 -0
  99. package/dist/chunk-B2HLSTK6.js.map +1 -0
  100. package/dist/chunk-B2VKGTBS.js +3151 -0
  101. package/dist/chunk-B2VKGTBS.js.map +1 -0
  102. package/dist/chunk-BC2BXRXY.js +2887 -0
  103. package/dist/chunk-BC2BXRXY.js.map +1 -0
  104. package/dist/chunk-BC6M5YYV.js +1599 -0
  105. package/dist/chunk-BC6M5YYV.js.map +1 -0
  106. package/dist/chunk-BCSOWRQL.js +76 -0
  107. package/dist/chunk-BIZH3X6P.js +817 -0
  108. package/dist/chunk-BIZH3X6P.js.map +1 -0
  109. package/dist/chunk-BJEW3LST.js +296 -0
  110. package/dist/chunk-BYKUAX26.js +106 -0
  111. package/dist/chunk-C4KJHTQU.js +1079 -0
  112. package/dist/chunk-C4KJHTQU.js.map +1 -0
  113. package/dist/chunk-C7NPNSFO.js +169 -0
  114. package/dist/chunk-CLK2FPAV.js +76 -0
  115. package/dist/chunk-CLK2FPAV.js.map +1 -0
  116. package/dist/chunk-CVIMIOPO.js +94 -0
  117. package/dist/chunk-D3RTGIT4.js +2102 -0
  118. package/dist/chunk-D3RTGIT4.js.map +1 -0
  119. package/dist/chunk-DAKIMGUS.js +74 -0
  120. package/dist/chunk-DCRUGS3G.js +25 -0
  121. package/dist/chunk-DJPCTTUN.js +1743 -0
  122. package/dist/chunk-DJPCTTUN.js.map +1 -0
  123. package/dist/chunk-DJUHGO3O.js +547 -0
  124. package/dist/chunk-DJUHGO3O.js.map +1 -0
  125. package/dist/chunk-DMA77LLI.js +106 -0
  126. package/dist/chunk-EEEAC655.js +45 -0
  127. package/dist/chunk-EEEAC655.js.map +1 -0
  128. package/dist/chunk-EESOZY5S.js +26 -0
  129. package/dist/chunk-EIZMOICE.js +175 -0
  130. package/dist/chunk-F3IVR3V3.js +136 -0
  131. package/dist/chunk-FSX6CQ2Z.js +188 -0
  132. package/dist/chunk-G7LAQE56.js +56 -0
  133. package/dist/chunk-G7QKXFQ2.js +66 -0
  134. package/dist/chunk-G7XY4T6K.js +23 -0
  135. package/dist/chunk-GIWHHCD6.js +145 -0
  136. package/dist/chunk-GIWHHCD6.js.map +1 -0
  137. package/dist/chunk-GRJCZF2H.js +5187 -0
  138. package/dist/chunk-GRJCZF2H.js.map +1 -0
  139. package/dist/chunk-HCDCWXSU.js +346 -0
  140. package/dist/chunk-HKSLIV4T.js +533 -0
  141. package/dist/chunk-HKSLIV4T.js.map +1 -0
  142. package/dist/chunk-I2DNBEV6.js +4227 -0
  143. package/dist/chunk-I2DNBEV6.js.map +1 -0
  144. package/dist/chunk-I4IVUAQN.js +337 -0
  145. package/dist/chunk-ICJFL7DU.js +35 -0
  146. package/dist/chunk-ICJFL7DU.js.map +1 -0
  147. package/dist/chunk-IWNZCYWI.js +74 -0
  148. package/dist/chunk-JF5LNI6O.js +84 -0
  149. package/dist/chunk-JJZBZYNK.js +96 -0
  150. package/dist/chunk-JPK34QPS.js +134 -0
  151. package/dist/chunk-JPK34QPS.js.map +1 -0
  152. package/dist/chunk-JZP5IODJ.js +98 -0
  153. package/dist/chunk-KL5VTXIK.js +149 -0
  154. package/dist/chunk-KL5VTXIK.js.map +1 -0
  155. package/dist/chunk-KWMYTVHI.js +455 -0
  156. package/dist/chunk-LFGCOAB4.js +75 -0
  157. package/dist/chunk-LLN6WTER.js +665 -0
  158. package/dist/chunk-LLN6WTER.js.map +1 -0
  159. package/dist/chunk-LO7OQKUD.js +4410 -0
  160. package/dist/chunk-LO7OQKUD.js.map +1 -0
  161. package/dist/chunk-LPRUP3ZX.js +172 -0
  162. package/dist/chunk-MAGSNHYB.js +6214 -0
  163. package/dist/chunk-MAGSNHYB.js.map +1 -0
  164. package/dist/chunk-MD3VH5UG.js +84 -0
  165. package/dist/chunk-MFORE6F4.js +19 -0
  166. package/dist/chunk-MMBHCAON.js +160 -0
  167. package/dist/chunk-MMOTJIV6.js +216 -0
  168. package/dist/chunk-MMOTJIV6.js.map +1 -0
  169. package/dist/chunk-NIGGMK7L.js +125 -0
  170. package/dist/chunk-NN7A2ILR.js +433 -0
  171. package/dist/chunk-O356YNIW.js +509 -0
  172. package/dist/chunk-OUQMJRH6.js +159 -0
  173. package/dist/chunk-OXKUWTFL.js +494 -0
  174. package/dist/chunk-PAJJXZ3Z.js +170 -0
  175. package/dist/chunk-PC56KVAD.js +74 -0
  176. package/dist/chunk-PEWNEPDR.js +206 -0
  177. package/dist/chunk-PY4FAOW6.js +275 -0
  178. package/dist/chunk-PY4FAOW6.js.map +1 -0
  179. package/dist/chunk-Q2T4XZG4.js +139 -0
  180. package/dist/chunk-QEHICHMP.js +875 -0
  181. package/dist/chunk-QEHICHMP.js.map +1 -0
  182. package/dist/chunk-RCR6RVYE.js +274 -0
  183. package/dist/chunk-RH2H5PBV.js +111 -0
  184. package/dist/chunk-S3L2ITS7.js +111 -0
  185. package/dist/chunk-S3L2ITS7.js.map +1 -0
  186. package/dist/chunk-S3XM4LD3.js +57 -0
  187. package/dist/chunk-SEPPFM5S.js +228 -0
  188. package/dist/chunk-SEPPFM5S.js.map +1 -0
  189. package/dist/chunk-SFHL3KWY.js +96 -0
  190. package/dist/chunk-SQ7DRYCC.js +150 -0
  191. package/dist/chunk-SSVZM3P6.js +333 -0
  192. package/dist/chunk-T64IRDKW.js +52 -0
  193. package/dist/chunk-T64IRDKW.js.map +1 -0
  194. package/dist/chunk-TMNLIA7R.js +60 -0
  195. package/dist/chunk-UF55TADX.js +92 -0
  196. package/dist/chunk-UGI33KTO.js +55 -0
  197. package/dist/chunk-UK2OTLT3.js +197 -0
  198. package/dist/chunk-UU3FGKUW.js +207 -0
  199. package/dist/chunk-UUBHU2TY.js +304 -0
  200. package/dist/chunk-UX7HIGS7.js +67 -0
  201. package/dist/chunk-VDZIGI2C.js +98 -0
  202. package/dist/chunk-VF6JFG27.js +846 -0
  203. package/dist/chunk-VF6JFG27.js.map +1 -0
  204. package/dist/chunk-VKVIBQP3.js +486 -0
  205. package/dist/chunk-VLF2M4GZ.js +592 -0
  206. package/dist/chunk-VTF7XNOP.js +58 -0
  207. package/dist/chunk-WDA3L4NF.js +382 -0
  208. package/dist/chunk-WMN2WKNZ.js +1442 -0
  209. package/dist/chunk-WMN2WKNZ.js.map +1 -0
  210. package/dist/chunk-XDV6Q33B.js +42 -0
  211. package/dist/chunk-XQIOCIDO.js +204 -0
  212. package/dist/chunk-XQIOCIDO.js.map +1 -0
  213. package/dist/chunk-XYC26BDM.js +133 -0
  214. package/dist/chunk-YHQYDNYD.js +23992 -0
  215. package/dist/chunk-YOARYFC2.js +6667 -0
  216. package/dist/chunk-YOARYFC2.js.map +1 -0
  217. package/dist/chunk-YPCVPDU7.js +455 -0
  218. package/dist/chunk-YPCVPDU7.js.map +1 -0
  219. package/dist/chunk-YTWNY3RF.js +97 -0
  220. package/dist/claim-JLVISHS4.js +197 -0
  221. package/dist/cli.js +41 -37
  222. package/dist/cli.js.map +1 -1
  223. package/dist/client-G6DGRGKT.js +19 -0
  224. package/dist/code-AYN42EK7.js +76 -0
  225. package/dist/companies-XDMOP2GL.js +195 -0
  226. package/dist/complete-XM7VLC4F.js +81 -0
  227. package/dist/config-UE7GCROG.js +88 -0
  228. package/dist/connect-VTDKGYP3.js +42 -0
  229. package/dist/content-5LHM4PBE.js +85 -0
  230. package/dist/content-5LHM4PBE.js.map +1 -0
  231. package/dist/conversation-F53OE25Y.js +93 -0
  232. package/dist/conversion-report-35MLL3FA.js +125 -0
  233. package/dist/conversion-upload-command-CV2TA7OV.js +438 -0
  234. package/dist/conversion-writes-NSZPNMPE.js +120 -0
  235. package/dist/conversions-7YO6DDL3.js +135 -0
  236. package/dist/conversions-XNISCCC2.js +76 -0
  237. package/dist/countries-NMWPKFFW.js +82 -0
  238. package/dist/create-ARERZYCL.js +59 -0
  239. package/dist/create-C6ZVYIF5.js +207 -0
  240. package/dist/create-FAPJFCZE.js +235 -0
  241. package/dist/create-M7TUO3XS.js +130 -0
  242. package/dist/creatives-3YIV6IOK.js +182 -0
  243. package/dist/creatives-QZCO6WGH.js +51 -0
  244. package/dist/creatives-WJLJ3NKP.js +87 -0
  245. package/dist/credentials-2DO23MYD.js +287 -0
  246. package/dist/credentials-2DO23MYD.js.map +1 -0
  247. package/dist/critique-56MNXW7R.js +1449 -0
  248. package/dist/critique-KRIKEHF6.js +213 -0
  249. package/dist/crm-OETFQNR3.js +224 -0
  250. package/dist/crm-WXCFB4TU.js +318 -0
  251. package/dist/crop-VCP2JLQL.js +113 -0
  252. package/dist/currency-MNNDKY4Z.js +88 -0
  253. package/dist/custom-conversions-CIU525HM.js +125 -0
  254. package/dist/customers-GTPEABJI.js +56 -0
  255. package/dist/decide-NFTEKQKC.js +199 -0
  256. package/dist/decide-NFTEKQKC.js.map +1 -0
  257. package/dist/delete-5CURRI25.js +71 -0
  258. package/dist/delete-CLC2Q2OE.js +63 -0
  259. package/dist/delete-CQ6Q3URI.js +54 -0
  260. package/dist/delete-JIRZBBDD.js +69 -0
  261. package/dist/delete-LD3F4UIW.js +66 -0
  262. package/dist/delete-LGZ5OI4C.js +71 -0
  263. package/dist/demographics-EK2ZPHWK.js +138 -0
  264. package/dist/describe-BNB6643C.js +97 -0
  265. package/dist/describe-ZXGFTCDR.js +97 -0
  266. package/dist/dimensions-IU4ETG4U.js +101 -0
  267. package/dist/discard-VWCXYJWU.js +66 -0
  268. package/dist/discover-4EQWGIAN.js +172 -0
  269. package/dist/discover-4N3V5K2R.js +93 -0
  270. package/dist/discover-4N3V5K2R.js.map +1 -0
  271. package/dist/domain-I2SAGVAB.js +98 -0
  272. package/dist/download-D7TB4744.js +299 -0
  273. package/dist/draft-4VOOSJQJ.js +233 -0
  274. package/dist/draft-6KG2YFOY.js +328 -0
  275. package/dist/draft-APDGACIC.js +306 -0
  276. package/dist/draft-D76C4JR3.js +103 -0
  277. package/dist/draft-HFH2Y6F5.js +281 -0
  278. package/dist/draft-NLUJX7TA.js +307 -0
  279. package/dist/draft-NLUJX7TA.js.map +1 -0
  280. package/dist/draft-NVVWWQVC.js +217 -0
  281. package/dist/draft-NWLPLTWM.js +100 -0
  282. package/dist/engine/index.js +12 -13
  283. package/dist/env-LHLGM2YJ.js +43 -0
  284. package/dist/experiment-4SUIXVBP.js +1397 -0
  285. package/dist/experiment-4SUIXVBP.js.map +1 -0
  286. package/dist/export-VGCFD7GL.js +168 -0
  287. package/dist/extract-32J7V2RX.js +113 -0
  288. package/dist/facets-WVI6VBDC.js +114 -0
  289. package/dist/favorites-WKV5H5OF.js +178 -0
  290. package/dist/feed-2CRO4HA6.js +177 -0
  291. package/dist/feed-2CRO4HA6.js.map +1 -0
  292. package/dist/feedback-NMNKYEMU.js +66 -0
  293. package/dist/feedback-record-2VYBMWMO.js +175 -0
  294. package/dist/fetch-CENBDLT6.js +176 -0
  295. package/dist/fetch-XQFPE3MI.js +139 -0
  296. package/dist/find-PNDKEOXT.js +134 -0
  297. package/dist/fit-SEWGCEW5.js +45 -0
  298. package/dist/flows-3N4RPGSP.js +247 -0
  299. package/dist/flows-3N4RPGSP.js.map +1 -0
  300. package/dist/follow-BB5KUEXZ.js +94 -0
  301. package/dist/follow-BB5KUEXZ.js.map +1 -0
  302. package/dist/follow-competitors-EURYGGXE.js +112 -0
  303. package/dist/follow-competitors-EURYGGXE.js.map +1 -0
  304. package/dist/following-CA5BQXYB.js +113 -0
  305. package/dist/following-CA5BQXYB.js.map +1 -0
  306. package/dist/fonts-KUCQAR7N.js +34 -0
  307. package/dist/forecast-G5KRTVDM.js +168 -0
  308. package/dist/forecast-G5KRTVDM.js.map +1 -0
  309. package/dist/forecast-PI52G2GL.js +104 -0
  310. package/dist/funding-ZRC25X5I.js +85 -0
  311. package/dist/funnel-WGFMUWQP.js +394 -0
  312. package/dist/funnel-WGFMUWQP.js.map +1 -0
  313. package/dist/ga4-YDKXVJOC.js +55 -0
  314. package/dist/generate-BVMMX3SS.js +262 -0
  315. package/dist/get-7MSF4RVQ.js +59 -0
  316. package/dist/get-FILH7BDT.js +78 -0
  317. package/dist/get-FILH7BDT.js.map +1 -0
  318. package/dist/get-KFVPIDIA.js +61 -0
  319. package/dist/get-NHQ2XYKZ.js +63 -0
  320. package/dist/get-TCDAYTZA.js +56 -0
  321. package/dist/get-UMMTY74K.js +92 -0
  322. package/dist/get-YM77HCL5.js +63 -0
  323. package/dist/gif-X323HXS2.js +94 -0
  324. package/dist/google-76A4MHQH.js +136 -0
  325. package/dist/google-OZTCY7HD.js +3190 -0
  326. package/dist/google-OZTCY7HD.js.map +1 -0
  327. package/dist/google-ads-S6O4MLKA.js +195 -0
  328. package/dist/group-CTIZVYX2.js +43 -0
  329. package/dist/group-HKWQ75CJ.js +43 -0
  330. package/dist/gsc-CORRYJBJ.js +30 -0
  331. package/dist/history-4U7FJGEM.js +133 -0
  332. package/dist/history-BXOMJ5PL.js +67 -0
  333. package/dist/hubspot-I5MFAZ4G.js +779 -0
  334. package/dist/icon-6QW63AHG.js +137 -0
  335. package/dist/ideas-QDS5XA4S.js +32 -0
  336. package/dist/images-NVTA2OHD.js +90 -0
  337. package/dist/improve-WR23CHYH.js +86 -0
  338. package/dist/ingest-QAVJ2J7F.js +107 -0
  339. package/dist/ingest-XJHV3GG6.js +23 -0
  340. package/dist/insights-AW7SOGHI.js +122 -0
  341. package/dist/insights-IJEPLWQH.js +423 -0
  342. package/dist/inspect-7I53PWCF.js +189 -0
  343. package/dist/inspiration-TJJFUVY2.js +53 -0
  344. package/dist/intent-VEUQS34Z.js +95 -0
  345. package/dist/job-K7LAIBYN.js +202 -0
  346. package/dist/job-create-DFZL4CGA.js +109 -0
  347. package/dist/job-status-6Q2TVTEO.js +74 -0
  348. package/dist/keep-XJFCLVCP.js +78 -0
  349. package/dist/keyword-gap-CUOGKUMM.js +130 -0
  350. package/dist/keyword-metrics-LK7FME4N.js +197 -0
  351. package/dist/keywords-for-site-4E7UU44P.js +128 -0
  352. package/dist/landing-I65PFN7H.js +28 -0
  353. package/dist/landings-SQJWZOJR.js +151 -0
  354. package/dist/landings-SQJWZOJR.js.map +1 -0
  355. package/dist/languages-KPPKX3E2.js +40 -0
  356. package/dist/languages-MGEBLO64.js +55 -0
  357. package/dist/launches-E3Y6NCQE.js +19 -0
  358. package/dist/layerize-N4IQ2KE7.js +190 -0
  359. package/dist/leads-PPMOBH7U.js +293 -0
  360. package/dist/leads-TNEQUOUN.js +90 -0
  361. package/dist/learn-QQS323PS.js +203 -0
  362. package/dist/library-4QQAVB6X.js +109 -0
  363. package/dist/lighthouse-CD47CPJM.js +75 -0
  364. package/dist/line-item-writes-QJZQUQ4E.js +208 -0
  365. package/dist/line-items-ESEAXGBV.js +103 -0
  366. package/dist/link-DPJYS4WY.js +64 -0
  367. package/dist/linkedin-EJPNC4VY.js +1008 -0
  368. package/dist/list-A45NTPSJ.js +76 -0
  369. package/dist/list-GNP4GIV2.js +51 -0
  370. package/dist/list-KQFLOVC4.js +57 -0
  371. package/dist/list-MDHK3ENJ.js +50 -0
  372. package/dist/list-PRUFXMXW.js +65 -0
  373. package/dist/list-S3BAQCTL.js +303 -0
  374. package/dist/list-UU5NPLJ7.js +151 -0
  375. package/dist/list-V525A4Z4.js +63 -0
  376. package/dist/locations-J2PVPDZU.js +67 -0
  377. package/dist/locations-TFOYESTF.js +40 -0
  378. package/dist/log-XQBEJOOW.js +92 -0
  379. package/dist/logo-KQD5KUAH.js +18 -0
  380. package/dist/lookup-QCREWUV4.js +22 -0
  381. package/dist/make-NZHJ7ICV.js +633 -0
  382. package/dist/make-NZHJ7ICV.js.map +1 -0
  383. package/dist/map-7SHU5WCJ.js +433 -0
  384. package/dist/map-7SHU5WCJ.js.map +1 -0
  385. package/dist/mcp-GATPHY4D.js +463 -0
  386. package/dist/mcp-GATPHY4D.js.map +1 -0
  387. package/dist/media-2WENMOAA.js +15 -0
  388. package/dist/media-N4C6Q4IV.js +89 -0
  389. package/dist/media-sources-BPOTW6IB.js +32 -0
  390. package/dist/members-BOYZKLNK.js +44 -0
  391. package/dist/meta-PXYHWOOG.js +69 -0
  392. package/dist/metrics-FZANUN7E.js +152 -0
  393. package/dist/models-W6EN3WB7.js +155 -0
  394. package/dist/normalize-LOMDPNFJ.js +806 -0
  395. package/dist/normalize-RP3D7BUT.js +141 -0
  396. package/dist/normalize-RP3D7BUT.js.map +1 -0
  397. package/dist/options-FXND5P2W.js +122 -0
  398. package/dist/options-FXND5P2W.js.map +1 -0
  399. package/dist/output-SR4DN3A4.js +24 -0
  400. package/dist/page-FS76L5WU.js +105 -0
  401. package/dist/pages-INMNJSX2.js +66 -0
  402. package/dist/performance-53D43XVZ.js +24 -0
  403. package/dist/pinterest-JMHFPNVW.js +96 -0
  404. package/dist/pixels-K6ZD7SXV.js +60 -0
  405. package/dist/pixels-XPBBJYE3.js +108 -0
  406. package/dist/plan-45ESBYZA.js +207 -0
  407. package/dist/plan-45ESBYZA.js.map +1 -0
  408. package/dist/preview-KXSNG3BS.js +169 -0
  409. package/dist/profile-I4IXWBAQ.js +159 -0
  410. package/dist/profile-I4IXWBAQ.js.map +1 -0
  411. package/dist/promoted-tweet-writes-I6HVQRDB.js +180 -0
  412. package/dist/promoted-tweets-YAQ5ZUXI.js +119 -0
  413. package/dist/properties-NYNEONHI.js +101 -0
  414. package/dist/publish-Z5DVKZSG.js +322 -0
  415. package/dist/query-MSZPOHFL.js +61 -0
  416. package/dist/query-RK2TFMBI.js +236 -0
  417. package/dist/query-TWNH6GV7.js +247 -0
  418. package/dist/questionnaire-CNXN2TUZ.js +93 -0
  419. package/dist/questionnaire-CNXN2TUZ.js.map +1 -0
  420. package/dist/read-2AGRYWXU.js +141 -0
  421. package/dist/read-2AGRYWXU.js.map +1 -0
  422. package/dist/reddit-6DQTBTO6.js +26 -0
  423. package/dist/refresh-TP2TOGS6.js +94 -0
  424. package/dist/release-PHQEZ2ZX.js +60 -0
  425. package/dist/relevant-pages-ORVFFVAM.js +99 -0
  426. package/dist/remove-ETLMMDEA.js +48 -0
  427. package/dist/remove-KTBM5YSH.js +50 -0
  428. package/dist/reopen-OURQR6U7.js +63 -0
  429. package/dist/rerun-HGCVZ3D4.js +84 -0
  430. package/dist/rerun-HGCVZ3D4.js.map +1 -0
  431. package/dist/research-P23YBKS3.js +62 -0
  432. package/dist/research-WCNWT5Y5.js +262 -0
  433. package/dist/reset-2NCAWWN4.js +54 -0
  434. package/dist/reset-65R2CUB5.js +54 -0
  435. package/dist/resolve-65FKZ23N.js +121 -0
  436. package/dist/retry-P5K6LE6K.js +60 -0
  437. package/dist/retry-UIPDQJ5F.js +62 -0
  438. package/dist/retry-failed-QMWQ6TRL.js +45 -0
  439. package/dist/run-NDMEYUOI.js +59 -0
  440. package/dist/run-OP3T4TCF.js +65 -0
  441. package/dist/scaffold-ad-A5MWIOQJ.js +1548 -0
  442. package/dist/scaffold-ad-A5MWIOQJ.js.map +1 -0
  443. package/dist/scaffold-static-ad-MFPDXR6J.js +971 -0
  444. package/dist/scaffold-static-ad-MFPDXR6J.js.map +1 -0
  445. package/dist/scaffold-video-N6TY36I3.js +872 -0
  446. package/dist/scaffold-video-N6TY36I3.js.map +1 -0
  447. package/dist/schedule-6D667AXB.js +61 -0
  448. package/dist/schedule-KXLQVCZW.js +66 -0
  449. package/dist/scheduled-agents-LYWEX4PU.js +49 -0
  450. package/dist/schema-5HZIAHY3.js +132 -0
  451. package/dist/schema-5HZIAHY3.js.map +1 -0
  452. package/dist/schema-CCFLFAOY.js +63 -0
  453. package/dist/scrape-DBZQFIW7.js +2241 -0
  454. package/dist/screenshot-MPFANYIH.js +102 -0
  455. package/dist/search-4AANIUUL.js +91 -0
  456. package/dist/search-EMJABZYF.js +224 -0
  457. package/dist/search-HQDN7DOF.js +174 -0
  458. package/dist/search-OVHC4CRQ.js +26 -0
  459. package/dist/search-YSGZRANA.js +92 -0
  460. package/dist/search-copy-E3EVO7YT.js +168 -0
  461. package/dist/search-copy-E3EVO7YT.js.map +1 -0
  462. package/dist/seeds-XTBVEHSF.js +101 -0
  463. package/dist/seeds-XTBVEHSF.js.map +1 -0
  464. package/dist/select-C6BKHB4B.js +94 -0
  465. package/dist/sends-HXN5HSF6.js +309 -0
  466. package/dist/sequences-FRK76ZQV.js +146 -0
  467. package/dist/set-prompt-AOSHNBFC.js +185 -0
  468. package/dist/set-prompt-AOSHNBFC.js.map +1 -0
  469. package/dist/setup-links-BM2GLSSO.js +141 -0
  470. package/dist/shared-EH5ZTQXC.js +31 -0
  471. package/dist/site-3PEJYQJW.js +177 -0
  472. package/dist/sitemaps-7KHY2KXI.js +87 -0
  473. package/dist/sites-6B76JW6C.js +101 -0
  474. package/dist/skills-SCTT3LCM.js +47 -0
  475. package/dist/sources-ODJBHNGY.js +30 -0
  476. package/dist/sources-ZTLMXFHK.js +454 -0
  477. package/dist/sources-ZTLMXFHK.js.map +1 -0
  478. package/dist/stale-2O54QXY2.js +63 -0
  479. package/dist/stats-4NBOAOR2.js +34 -0
  480. package/dist/status-NE5OBM4B.js +62 -0
  481. package/dist/sticker-NLXBIOBO.js +94 -0
  482. package/dist/stock-F3SA4VHV.js +179 -0
  483. package/dist/studio-ZPDIOFKL.js +49 -0
  484. package/dist/sync-5GJNZDGZ.js +54 -0
  485. package/dist/sync-FCNFXTFD.js +265 -0
  486. package/dist/sync-YXCZ3DHY.js +54 -0
  487. package/dist/sync-definition-IL6Z4ZI7.js +52 -0
  488. package/dist/sync-definition-IL6Z4ZI7.js.map +1 -0
  489. package/dist/tag-manager-YM4Q3CZT.js +43 -0
  490. package/dist/tags-456UOYJU.js +26 -0
  491. package/dist/tags-5YPYHV5V.js +20 -0
  492. package/dist/tags-HXMHEHG2.js +224 -0
  493. package/dist/tags-K34666RY.js +20 -0
  494. package/dist/tags-NB35ISO3.js +20 -0
  495. package/dist/targeting-constants-3CMGPWRI.js +118 -0
  496. package/dist/targeting-criteria-UKQ4WF5C.js +113 -0
  497. package/dist/targets-VQ4BQ657.js +102 -0
  498. package/dist/templates-PMUIOVDX.js +178 -0
  499. package/dist/testimonials-XZCGVD6V.js +32 -0
  500. package/dist/themes-TVXLYJ7Y.js +94 -0
  501. package/dist/themes-TVXLYJ7Y.js.map +1 -0
  502. package/dist/top-companies-VMRIDOOH.js +108 -0
  503. package/dist/translate-F5KR62LF.js +598 -0
  504. package/dist/triggers-2MZX7W6Y.js +141 -0
  505. package/dist/tweets-XWE3VYQ4.js +123 -0
  506. package/dist/unfollow-7U4UBAJX.js +46 -0
  507. package/dist/unlink-AWSNY3QS.js +67 -0
  508. package/dist/unstage-OGB43ZXO.js +95 -0
  509. package/dist/unstage-RQBOQ4DY.js +84 -0
  510. package/dist/update-4KWYHMLS.js +63 -0
  511. package/dist/update-6DKEWM64.js +142 -0
  512. package/dist/update-G6EKHPIF.js +155 -0
  513. package/dist/update-OFV452AC.js +98 -0
  514. package/dist/upload-6CJWMQ24.js +126 -0
  515. package/dist/upload-GUKMQ5MT.js +150 -0
  516. package/dist/upscale-A456MESF.js +109 -0
  517. package/dist/url-options-FGDOVUSI.js +130 -0
  518. package/dist/url-options-FGDOVUSI.js.map +1 -0
  519. package/dist/url-params-OE3UMYMM.js +98 -0
  520. package/dist/use-HBVKVT5S.js +95 -0
  521. package/dist/validate-ZCUZV3L4.js +88 -0
  522. package/dist/validate-ZCUZV3L4.js.map +1 -0
  523. package/dist/variant-HULP57YI.js +338 -0
  524. package/dist/videos-ION7UT3M.js +39 -0
  525. package/dist/view-GCDEJZII.js +121 -0
  526. package/dist/viewer-check-UKYFBFMY.js +68 -0
  527. package/dist/viewer-check-UKYFBFMY.js.map +1 -0
  528. package/dist/web-CCVD6UZ4.js +140 -0
  529. package/dist/winners-WSMWC4M5.js +113 -0
  530. package/dist/winners-WSMWC4M5.js.map +1 -0
  531. package/dist/winning-ads-UCSSFEXD.js +84 -0
  532. package/dist/winning-ads-UCSSFEXD.js.map +1 -0
  533. package/dist/write-commands-47OP673X.js +713 -0
  534. package/dist/write-commands-IJ5IFHS6.js +737 -0
  535. package/dist/write-commands-NNVDWBLG.js +1015 -0
  536. package/dist/write-commands-OBMIVFZJ.js +206 -0
  537. package/dist/x-U32DT24S.js +47 -0
  538. package/package.json +2 -2
  539. package/dist/account-4H7QVBRK.js +0 -80
  540. package/dist/account-DTHGTZCN.js +0 -79
  541. package/dist/account-IEVEOFIK.js +0 -49
  542. package/dist/account-writes-AK42HGRM.js +0 -66
  543. package/dist/accounts-4CDRK4S4.js +0 -75
  544. package/dist/accounts-5QDKBZMH.js +0 -115
  545. package/dist/accounts-5RLG6BBA.js +0 -77
  546. package/dist/accounts-6LSBBXKA.js +0 -611
  547. package/dist/accounts-KYJO3JC6.js +0 -114
  548. package/dist/actions-WH5C6Q7I.js +0 -55
  549. package/dist/active-entities-YUSOUR5M.js +0 -103
  550. package/dist/activities-ZVQOBHZH.js +0 -74
  551. package/dist/ad-group-writes-QQS4223F.js +0 -170
  552. package/dist/ad-groups-WGPDPUI2.js +0 -68
  553. package/dist/ad-writes-XE2IE4DS.js +0 -174
  554. package/dist/add-577QWMCF.js +0 -97
  555. package/dist/add-BZ4QPLK4.js +0 -104
  556. package/dist/add-CUWAW7KG.js +0 -105
  557. package/dist/add-TRSKOIO6.js +0 -305
  558. package/dist/add-TRSKOIO6.js.map +0 -1
  559. package/dist/ads-6UEDYT3O.js +0 -113
  560. package/dist/ads-6UG66KA5.js +0 -40
  561. package/dist/ads-BCOSQALY.js +0 -77
  562. package/dist/adsets-Q5DWGANV.js +0 -176
  563. package/dist/advertisers-OABQDELT.js +0 -120
  564. package/dist/advertisers-YMHPZYNF.js +0 -111
  565. package/dist/advertisers-YMHPZYNF.js.map +0 -1
  566. package/dist/analytics-3YAWQF5K.js +0 -1958
  567. package/dist/analytics-3YAWQF5K.js.map +0 -1
  568. package/dist/analytics-BCZGSSXP.js +0 -433
  569. package/dist/animate-AIZ3GS4J.js +0 -480
  570. package/dist/assign-O6QNAZD5.js +0 -77
  571. package/dist/audience-size-CXPWERR3.js +0 -94
  572. package/dist/audiences-AMRFZRZ7.js +0 -78
  573. package/dist/audiences-HFRVIE2X.js +0 -85
  574. package/dist/audiences-TGD5US2M.js +0 -268
  575. package/dist/audit-AD4ZZNJN.js +0 -88
  576. package/dist/audit-MNOQK3U4.js +0 -151
  577. package/dist/autocomplete-TRCMPNW4.js +0 -111
  578. package/dist/avatars-P3WX5TQP.js +0 -38
  579. package/dist/bid-pricing-6XXSM7C2.js +0 -99
  580. package/dist/brand-LXU7YNCF.js +0 -22
  581. package/dist/brief-Y4F37TH5.js +0 -477
  582. package/dist/brief-Y4F37TH5.js.map +0 -1
  583. package/dist/businesses-JBDQZZIG.js +0 -53
  584. package/dist/campaign-groups-CEAM3WRO.js +0 -95
  585. package/dist/campaign-writes-D6BJAULL.js +0 -165
  586. package/dist/campaign-writes-SXLZFYF6.js +0 -170
  587. package/dist/campaigns-CXOKBCPS.js +0 -109
  588. package/dist/campaigns-D6B6Z67Y.js +0 -110
  589. package/dist/campaigns-V3SWBM4E.js +0 -107
  590. package/dist/campaigns-YS3OGQXO.js +0 -76
  591. package/dist/canvas-VH3Q26TK.js +0 -46
  592. package/dist/canvas-VH3Q26TK.js.map +0 -1
  593. package/dist/capabilities-NZPSSS6T.js +0 -144
  594. package/dist/cards-4477BFEV.js +0 -85
  595. package/dist/catalog-GWN3WT7J.js +0 -65
  596. package/dist/catalog-GWN3WT7J.js.map +0 -1
  597. package/dist/catalogs-BRXEDE56.js +0 -128
  598. package/dist/changes-TP7ZZHB3.js +0 -135
  599. package/dist/chatgpt-7W75X3ER.js +0 -47
  600. package/dist/chats-GN3PBFX4.js +0 -262
  601. package/dist/chunk-2BKVVCCV.js +0 -133
  602. package/dist/chunk-2GTYAHDN.js +0 -455
  603. package/dist/chunk-2TK4DEOE.js +0 -74
  604. package/dist/chunk-3OFVFHKT.js +0 -622
  605. package/dist/chunk-3OFVFHKT.js.map +0 -1
  606. package/dist/chunk-4NDCTLI5.js +0 -191
  607. package/dist/chunk-4QEY2L6U.js +0 -486
  608. package/dist/chunk-4Z7DEN75.js +0 -57
  609. package/dist/chunk-5ARG3CQG.js +0 -141
  610. package/dist/chunk-5ARG3CQG.js.map +0 -1
  611. package/dist/chunk-5Z2KSVIV.js +0 -67
  612. package/dist/chunk-6B7VKFS4.js +0 -172
  613. package/dist/chunk-6G5K6ZC6.js +0 -46
  614. package/dist/chunk-6Y7SIP2D.js +0 -4383
  615. package/dist/chunk-6Y7SIP2D.js.map +0 -1
  616. package/dist/chunk-75FDTDLH.js +0 -96
  617. package/dist/chunk-7ED5TAFP.js +0 -346
  618. package/dist/chunk-7J6EHOH6.js +0 -274
  619. package/dist/chunk-7OFNN4CT.js +0 -58
  620. package/dist/chunk-BNCW67EM.js +0 -534
  621. package/dist/chunk-BNCW67EM.js.map +0 -1
  622. package/dist/chunk-C6U6UDHJ.js +0 -106
  623. package/dist/chunk-CFHIW5QZ.js +0 -297
  624. package/dist/chunk-CYEO5ZIO.js +0 -133
  625. package/dist/chunk-CYEO5ZIO.js.map +0 -1
  626. package/dist/chunk-D6744YSX.js +0 -440
  627. package/dist/chunk-D6744YSX.js.map +0 -1
  628. package/dist/chunk-DQMZXK27.js +0 -433
  629. package/dist/chunk-DZSIUEGH.js +0 -136
  630. package/dist/chunk-E4NCRGY3.js +0 -494
  631. package/dist/chunk-EAEOPERX.js +0 -6667
  632. package/dist/chunk-EAEOPERX.js.map +0 -1
  633. package/dist/chunk-EFSYTROP.js +0 -94
  634. package/dist/chunk-ESB5DLIP.js +0 -382
  635. package/dist/chunk-F2S5BLPE.js +0 -97
  636. package/dist/chunk-FTWJFDIN.js +0 -23992
  637. package/dist/chunk-FVF5SXTZ.js +0 -19
  638. package/dist/chunk-GX6VAHY7.js +0 -830
  639. package/dist/chunk-GX6VAHY7.js.map +0 -1
  640. package/dist/chunk-GYU7BWEN.js +0 -111
  641. package/dist/chunk-H26L3OQY.js +0 -42
  642. package/dist/chunk-HRYOZUSK.js +0 -1711
  643. package/dist/chunk-HRYOZUSK.js.map +0 -1
  644. package/dist/chunk-HZUDRKGR.js +0 -98
  645. package/dist/chunk-IFWP3ZDO.js +0 -215
  646. package/dist/chunk-IFWP3ZDO.js.map +0 -1
  647. package/dist/chunk-IGQZ5U3C.js +0 -207
  648. package/dist/chunk-IYU4X5A7.js +0 -592
  649. package/dist/chunk-JERXV5A3.js +0 -26
  650. package/dist/chunk-JVLAV62J.js +0 -3147
  651. package/dist/chunk-JVLAV62J.js.map +0 -1
  652. package/dist/chunk-K6WVV74H.js +0 -6178
  653. package/dist/chunk-K6WVV74H.js.map +0 -1
  654. package/dist/chunk-KLNKEVIY.js +0 -136
  655. package/dist/chunk-KNY76UGC.js +0 -84
  656. package/dist/chunk-L27H2R2N.js +0 -174
  657. package/dist/chunk-L5J3S6B6.js +0 -260
  658. package/dist/chunk-L5J3S6B6.js.map +0 -1
  659. package/dist/chunk-LERTEZST.js +0 -28
  660. package/dist/chunk-LERTEZST.js.map +0 -1
  661. package/dist/chunk-LIQ4SQ2T.js +0 -150
  662. package/dist/chunk-LLOOWRBB.js +0 -496
  663. package/dist/chunk-LLOOWRBB.js.map +0 -1
  664. package/dist/chunk-LS5MTRFI.js +0 -106
  665. package/dist/chunk-LZ73CZGP.js +0 -188
  666. package/dist/chunk-MELOSESI.js +0 -20
  667. package/dist/chunk-MELOSESI.js.map +0 -1
  668. package/dist/chunk-MZL4H5PY.js +0 -225
  669. package/dist/chunk-NAWWC5I3.js +0 -454
  670. package/dist/chunk-NAWWC5I3.js.map +0 -1
  671. package/dist/chunk-ND5MJ3AA.js +0 -60
  672. package/dist/chunk-NE4F3FHN.js +0 -1854
  673. package/dist/chunk-NE4F3FHN.js.map +0 -1
  674. package/dist/chunk-NECTN6N7.js +0 -206
  675. package/dist/chunk-NIJSXVFT.js +0 -304
  676. package/dist/chunk-NJXNU2G6.js +0 -819
  677. package/dist/chunk-NJXNU2G6.js.map +0 -1
  678. package/dist/chunk-NU7JSWVA.js +0 -946
  679. package/dist/chunk-NU7JSWVA.js.map +0 -1
  680. package/dist/chunk-OKJWBB2K.js +0 -5189
  681. package/dist/chunk-OKJWBB2K.js.map +0 -1
  682. package/dist/chunk-ORO7VAXB.js +0 -197
  683. package/dist/chunk-OUTF5JFG.js +0 -51
  684. package/dist/chunk-PBA3YCZA.js +0 -76
  685. package/dist/chunk-PTCIM35Y.js +0 -310
  686. package/dist/chunk-PTCIM35Y.js.map +0 -1
  687. package/dist/chunk-PVUZWHNQ.js +0 -509
  688. package/dist/chunk-PWGWMIIJ.js +0 -25
  689. package/dist/chunk-PZXCWSKV.js +0 -1830
  690. package/dist/chunk-QSN5MZGS.js +0 -74
  691. package/dist/chunk-QVJDPOEB.js +0 -175
  692. package/dist/chunk-R5RIH3N5.js +0 -337
  693. package/dist/chunk-RB5CVIK6.js +0 -1079
  694. package/dist/chunk-RB5CVIK6.js.map +0 -1
  695. package/dist/chunk-RPUSTYHL.js +0 -170
  696. package/dist/chunk-RX6F3GEA.js +0 -610
  697. package/dist/chunk-RZT263H7.js +0 -363
  698. package/dist/chunk-SSJK7FEV.js +0 -2886
  699. package/dist/chunk-SSJK7FEV.js.map +0 -1
  700. package/dist/chunk-STIB5DR5.js +0 -56
  701. package/dist/chunk-T4DD5YMP.js +0 -166
  702. package/dist/chunk-T4DD5YMP.js.map +0 -1
  703. package/dist/chunk-TD2P4HBP.js +0 -55
  704. package/dist/chunk-TEINLN64.js +0 -649
  705. package/dist/chunk-TEINLN64.js.map +0 -1
  706. package/dist/chunk-TUB34FVS.js +0 -96
  707. package/dist/chunk-TX7LZWZD.js +0 -1411
  708. package/dist/chunk-TX7LZWZD.js.map +0 -1
  709. package/dist/chunk-V7CTQOHG.js +0 -92
  710. package/dist/chunk-VAJBWA2U.js +0 -75
  711. package/dist/chunk-VFIOJD5M.js +0 -309
  712. package/dist/chunk-VNUNE5AB.js +0 -160
  713. package/dist/chunk-VVZBBKRC.js +0 -296
  714. package/dist/chunk-W3B4BHQU.js +0 -31
  715. package/dist/chunk-W3B4BHQU.js.map +0 -1
  716. package/dist/chunk-W3ZHJJVT.js +0 -139
  717. package/dist/chunk-WNFIJAUO.js +0 -98
  718. package/dist/chunk-WS2GMOSG.js +0 -74
  719. package/dist/chunk-WTOYCUKH.js +0 -84
  720. package/dist/chunk-X7ZODEXJ.js +0 -36
  721. package/dist/chunk-X7ZODEXJ.js.map +0 -1
  722. package/dist/chunk-XBOK23HI.js +0 -214
  723. package/dist/chunk-XBOK23HI.js.map +0 -1
  724. package/dist/chunk-XCM6XWOB.js +0 -417
  725. package/dist/chunk-XCM6XWOB.js.map +0 -1
  726. package/dist/chunk-XFGAUP5B.js +0 -76
  727. package/dist/chunk-XFGAUP5B.js.map +0 -1
  728. package/dist/chunk-XL3BMSYG.js +0 -125
  729. package/dist/chunk-XQIKDODN.js +0 -103
  730. package/dist/chunk-XTRAI6CL.js +0 -23
  731. package/dist/chunk-XVOI4BIS.js +0 -169
  732. package/dist/chunk-YBMVHGY3.js +0 -333
  733. package/dist/chunk-ZDNOCKKY.js +0 -172
  734. package/dist/chunk-ZDNOCKKY.js.map +0 -1
  735. package/dist/chunk-ZGTCZ6H4.js +0 -159
  736. package/dist/chunk-ZJLETAOO.js +0 -484
  737. package/dist/chunk-ZJLETAOO.js.map +0 -1
  738. package/dist/chunk-ZJWUBJYQ.js +0 -204
  739. package/dist/chunk-ZJWUBJYQ.js.map +0 -1
  740. package/dist/chunk-ZZQXVYUY.js +0 -66
  741. package/dist/claim-25JJM4AG.js +0 -197
  742. package/dist/client-VHN32ZRE.js +0 -19
  743. package/dist/code-YS6ZMGX3.js +0 -76
  744. package/dist/companies-VR5M5PAN.js +0 -195
  745. package/dist/complete-DRMOTC2W.js +0 -81
  746. package/dist/config-CQN5FHMZ.js +0 -88
  747. package/dist/connect-WUDJR2GH.js +0 -40
  748. package/dist/content-3ZPP4SW2.js +0 -81
  749. package/dist/content-3ZPP4SW2.js.map +0 -1
  750. package/dist/conversation-K6LYF2ZP.js +0 -93
  751. package/dist/conversion-report-XQBJ6LG4.js +0 -125
  752. package/dist/conversion-upload-command-AUF3LNTH.js +0 -438
  753. package/dist/conversion-writes-UBCVXP2E.js +0 -120
  754. package/dist/conversions-D236RTUK.js +0 -76
  755. package/dist/conversions-GF32XOWY.js +0 -135
  756. package/dist/countries-ESAKTQAE.js +0 -82
  757. package/dist/create-2D7AIFJI.js +0 -235
  758. package/dist/create-4TFAD6HY.js +0 -59
  759. package/dist/create-IXYXYLLE.js +0 -207
  760. package/dist/create-PKJVFJMO.js +0 -130
  761. package/dist/creatives-OHCFHRZ5.js +0 -182
  762. package/dist/creatives-QLSZFOMB.js +0 -51
  763. package/dist/creatives-UEPLNCPN.js +0 -87
  764. package/dist/credentials-WSLR5VU4.js +0 -1055
  765. package/dist/credentials-WSLR5VU4.js.map +0 -1
  766. package/dist/critique-5PCQ2CJH.js +0 -1449
  767. package/dist/critique-WDO6SKK2.js +0 -213
  768. package/dist/crm-HNUOHXAN.js +0 -224
  769. package/dist/crm-SNIUADNK.js +0 -318
  770. package/dist/crop-2J4RKJ6B.js +0 -113
  771. package/dist/currency-XCGKQ7FE.js +0 -88
  772. package/dist/custom-conversions-2VLJGPRV.js +0 -125
  773. package/dist/customers-72L2KZHO.js +0 -56
  774. package/dist/delete-3AV3ARMX.js +0 -71
  775. package/dist/delete-A5XD52K4.js +0 -69
  776. package/dist/delete-EVGM5B36.js +0 -54
  777. package/dist/delete-MRM2S4Z5.js +0 -71
  778. package/dist/delete-PA2GY5EC.js +0 -63
  779. package/dist/delete-YNNFTFYV.js +0 -66
  780. package/dist/demographics-SYS2E7QC.js +0 -138
  781. package/dist/describe-6NVOWIBE.js +0 -97
  782. package/dist/describe-P3PPIQME.js +0 -97
  783. package/dist/dimensions-EYAYO27I.js +0 -101
  784. package/dist/discard-JS2YJUIM.js +0 -66
  785. package/dist/discover-BJPZNXUQ.js +0 -172
  786. package/dist/domain-XKKH5NCL.js +0 -98
  787. package/dist/download-7T6HIJKD.js +0 -299
  788. package/dist/draft-4AO4YH3V.js +0 -306
  789. package/dist/draft-5YAYCEYY.js +0 -107
  790. package/dist/draft-5YAYCEYY.js.map +0 -1
  791. package/dist/draft-BGUJDHXR.js +0 -103
  792. package/dist/draft-GCUXNPVH.js +0 -217
  793. package/dist/draft-KIBMVKSR.js +0 -100
  794. package/dist/draft-MNFJ4G3C.js +0 -281
  795. package/dist/draft-WWWKSEEE.js +0 -328
  796. package/dist/draft-YDY2Q2K6.js +0 -233
  797. package/dist/env-KIP2J2UB.js +0 -43
  798. package/dist/experiment-LKK77YAN.js +0 -1377
  799. package/dist/experiment-LKK77YAN.js.map +0 -1
  800. package/dist/export-JQRMBJ7D.js +0 -168
  801. package/dist/extract-7QKLME7Z.js +0 -113
  802. package/dist/facets-NVBX5WDT.js +0 -114
  803. package/dist/favorites-NSGF4OV5.js +0 -178
  804. package/dist/feed-RV4KPPXM.js +0 -157
  805. package/dist/feed-RV4KPPXM.js.map +0 -1
  806. package/dist/feedback-OGAPR45R.js +0 -66
  807. package/dist/feedback-record-GVXGDY5Y.js +0 -175
  808. package/dist/fetch-U4TJIHZU.js +0 -176
  809. package/dist/fetch-XF76JABV.js +0 -139
  810. package/dist/find-OTDIX6V4.js +0 -134
  811. package/dist/fit-BOQL6OK3.js +0 -45
  812. package/dist/flows-XVZJ6GOI.js +0 -264
  813. package/dist/flows-XVZJ6GOI.js.map +0 -1
  814. package/dist/follow-FN7LV3WV.js +0 -82
  815. package/dist/follow-FN7LV3WV.js.map +0 -1
  816. package/dist/follow-competitors-MKXFHLXB.js +0 -131
  817. package/dist/follow-competitors-MKXFHLXB.js.map +0 -1
  818. package/dist/following-RKC2FLHI.js +0 -109
  819. package/dist/following-RKC2FLHI.js.map +0 -1
  820. package/dist/fonts-64T6KRZS.js +0 -34
  821. package/dist/forecast-YIIGTHRM.js +0 -104
  822. package/dist/funding-NYO65IMT.js +0 -85
  823. package/dist/funnel-XHDCXXQ5.js +0 -837
  824. package/dist/funnel-XHDCXXQ5.js.map +0 -1
  825. package/dist/ga4-UDQ2HA2J.js +0 -55
  826. package/dist/generate-3XYYITU6.js +0 -262
  827. package/dist/get-3L6W3E3T.js +0 -59
  828. package/dist/get-6RQFDAIN.js +0 -56
  829. package/dist/get-6WEYKOY6.js +0 -63
  830. package/dist/get-P743RPSI.js +0 -63
  831. package/dist/get-XJ3AZX35.js +0 -78
  832. package/dist/get-XJ3AZX35.js.map +0 -1
  833. package/dist/get-XN5ZGDIK.js +0 -61
  834. package/dist/get-YIHTAMRT.js +0 -92
  835. package/dist/gif-53ULFVLR.js +0 -94
  836. package/dist/google-KTO3PLEU.js +0 -136
  837. package/dist/google-M7KEXVK5.js +0 -1872
  838. package/dist/google-M7KEXVK5.js.map +0 -1
  839. package/dist/google-ads-7XAGJVNJ.js +0 -195
  840. package/dist/group-EFZ3AJIE.js +0 -43
  841. package/dist/group-GKWCCX66.js +0 -43
  842. package/dist/gsc-P3QYGDV2.js +0 -30
  843. package/dist/history-EUG4LE44.js +0 -133
  844. package/dist/history-Q3QCT64S.js +0 -67
  845. package/dist/hubspot-UULVEYVO.js +0 -779
  846. package/dist/icon-I43F77FV.js +0 -137
  847. package/dist/ideas-7LXYXS5G.js +0 -32
  848. package/dist/images-3SOTFMJV.js +0 -90
  849. package/dist/improve-BCCU5AS6.js +0 -86
  850. package/dist/ingest-HQUXSBWA.js +0 -107
  851. package/dist/ingest-HYSZC3EX.js +0 -23
  852. package/dist/insights-LNAXV2CG.js +0 -122
  853. package/dist/insights-NZWSJKU4.js +0 -423
  854. package/dist/inspect-HZQ7GSVM.js +0 -189
  855. package/dist/inspiration-P265QJ2H.js +0 -53
  856. package/dist/intent-E3UIVZBN.js +0 -95
  857. package/dist/job-L7RJZMSG.js +0 -202
  858. package/dist/job-create-JUDAN52O.js +0 -109
  859. package/dist/job-status-U43WE3RJ.js +0 -74
  860. package/dist/keep-55CPC7DG.js +0 -78
  861. package/dist/keyword-gap-BG6M665A.js +0 -130
  862. package/dist/keyword-metrics-YG3K7MQZ.js +0 -197
  863. package/dist/keywords-for-site-V4K744TF.js +0 -128
  864. package/dist/landing-3SSX6WK6.js +0 -28
  865. package/dist/languages-HORKPDNH.js +0 -40
  866. package/dist/languages-JSGWCC7Z.js +0 -55
  867. package/dist/layerize-RPD6SNP6.js +0 -190
  868. package/dist/leads-ARUWPHBM.js +0 -293
  869. package/dist/leads-FAHQ6KJX.js +0 -90
  870. package/dist/learn-XNHGNQE5.js +0 -203
  871. package/dist/library-ARKRLCNJ.js +0 -109
  872. package/dist/lighthouse-6ZC45E53.js +0 -75
  873. package/dist/line-item-writes-A6BPZQPL.js +0 -208
  874. package/dist/line-items-J7PXJHMD.js +0 -103
  875. package/dist/link-4GGAQAVH.js +0 -64
  876. package/dist/linkedin-I6JDSTRB.js +0 -1008
  877. package/dist/list-22HZ2S4W.js +0 -63
  878. package/dist/list-7MVBXOJT.js +0 -51
  879. package/dist/list-A5UCIR2J.js +0 -65
  880. package/dist/list-AL7N6X2P.js +0 -50
  881. package/dist/list-AQMGXI4N.js +0 -303
  882. package/dist/list-KAJZFHMN.js +0 -151
  883. package/dist/list-LI4OGQFW.js +0 -57
  884. package/dist/list-P7NAFN6J.js +0 -76
  885. package/dist/locations-2NKBJKBT.js +0 -67
  886. package/dist/locations-J4G5RNPH.js +0 -40
  887. package/dist/log-MUPKKYSJ.js +0 -92
  888. package/dist/logo-2IP663QO.js +0 -18
  889. package/dist/lookup-XK45W2SH.js +0 -22
  890. package/dist/make-3FO76LA7.js +0 -593
  891. package/dist/make-3FO76LA7.js.map +0 -1
  892. package/dist/map-F4LXTAJV.js +0 -404
  893. package/dist/map-F4LXTAJV.js.map +0 -1
  894. package/dist/mcp-NLAQJWG6.js +0 -476
  895. package/dist/mcp-NLAQJWG6.js.map +0 -1
  896. package/dist/media-53DJRC4N.js +0 -15
  897. package/dist/media-6CQYG4UY.js +0 -89
  898. package/dist/media-sources-W2CQFSVQ.js +0 -32
  899. package/dist/members-3U6GINDF.js +0 -44
  900. package/dist/meta-A7KM6TF5.js +0 -69
  901. package/dist/metrics-SQDJ5NQO.js +0 -152
  902. package/dist/models-3Z6MDHQW.js +0 -155
  903. package/dist/normalize-FQ6WP5E4.js +0 -138
  904. package/dist/normalize-FQ6WP5E4.js.map +0 -1
  905. package/dist/normalize-ICQF2AST.js +0 -806
  906. package/dist/options-K6FNT5A3.js +0 -121
  907. package/dist/options-K6FNT5A3.js.map +0 -1
  908. package/dist/output-RAH3TSIL.js +0 -24
  909. package/dist/page-GS3WLT2C.js +0 -105
  910. package/dist/pages-FXYQLHSJ.js +0 -66
  911. package/dist/performance-ZA7VCHOU.js +0 -24
  912. package/dist/pinterest-AUH7WBA7.js +0 -96
  913. package/dist/pixels-TZPF746S.js +0 -60
  914. package/dist/pixels-ZFF4BGUH.js +0 -108
  915. package/dist/preview-AD4GKYIA.js +0 -169
  916. package/dist/promoted-tweet-writes-4H3ZFD6O.js +0 -180
  917. package/dist/promoted-tweets-MCMKPIHM.js +0 -119
  918. package/dist/properties-L2XIYQDS.js +0 -101
  919. package/dist/publish-CW5YSAAL.js +0 -322
  920. package/dist/query-IEZRY6HV.js +0 -1341
  921. package/dist/query-IEZRY6HV.js.map +0 -1
  922. package/dist/query-SGGBCHTF.js +0 -236
  923. package/dist/query-VTGVZQIO.js +0 -247
  924. package/dist/read-LSF7DYTG.js +0 -140
  925. package/dist/read-LSF7DYTG.js.map +0 -1
  926. package/dist/reddit-P7LLO4TK.js +0 -26
  927. package/dist/refresh-IGHEOA6Y.js +0 -94
  928. package/dist/release-C74JOYDA.js +0 -60
  929. package/dist/relevant-pages-OWMNUCP7.js +0 -99
  930. package/dist/remove-6LGGKMLJ.js +0 -48
  931. package/dist/remove-HPN62MPQ.js +0 -50
  932. package/dist/reopen-XI53RP7R.js +0 -63
  933. package/dist/rerun-2ITYGAIT.js +0 -85
  934. package/dist/rerun-2ITYGAIT.js.map +0 -1
  935. package/dist/research-HAHUTFVJ.js +0 -262
  936. package/dist/research-O6QXFCD7.js +0 -62
  937. package/dist/reset-BISRUHT4.js +0 -54
  938. package/dist/reset-YMKVEOS4.js +0 -54
  939. package/dist/resolve-D2VESQ45.js +0 -121
  940. package/dist/retry-CGBATPQX.js +0 -62
  941. package/dist/retry-SUKRXBHX.js +0 -60
  942. package/dist/retry-failed-6HXPUVXJ.js +0 -45
  943. package/dist/run-BFERU46Q.js +0 -65
  944. package/dist/run-HSZFWRYZ.js +0 -60
  945. package/dist/scaffold-ad-BYQYVB2C.js +0 -1549
  946. package/dist/scaffold-ad-BYQYVB2C.js.map +0 -1
  947. package/dist/scaffold-static-ad-5MXVTMEE.js +0 -966
  948. package/dist/scaffold-static-ad-5MXVTMEE.js.map +0 -1
  949. package/dist/scaffold-video-KEIHX3UD.js +0 -873
  950. package/dist/scaffold-video-KEIHX3UD.js.map +0 -1
  951. package/dist/schedule-O2K6M43V.js +0 -66
  952. package/dist/schedule-XJ24PL3K.js +0 -61
  953. package/dist/scheduled-agents-HWEKBANT.js +0 -49
  954. package/dist/schema-6GR77VJG.js +0 -63
  955. package/dist/schema-TAAAJHOJ.js +0 -129
  956. package/dist/schema-TAAAJHOJ.js.map +0 -1
  957. package/dist/scrape-ETAMW43A.js +0 -2241
  958. package/dist/screenshot-YCQF25ZB.js +0 -102
  959. package/dist/search-742XSULP.js +0 -224
  960. package/dist/search-MEEM4D3W.js +0 -92
  961. package/dist/search-NVCIIGQS.js +0 -174
  962. package/dist/search-OQNGSMUH.js +0 -91
  963. package/dist/search-UO5KJTYS.js +0 -26
  964. package/dist/seeds-N6FF5S4T.js +0 -101
  965. package/dist/seeds-N6FF5S4T.js.map +0 -1
  966. package/dist/select-K3EMTTI3.js +0 -94
  967. package/dist/sends-WGJVQUMF.js +0 -309
  968. package/dist/sequences-OIPVR7JL.js +0 -146
  969. package/dist/set-prompt-PY7FWYX6.js +0 -186
  970. package/dist/set-prompt-PY7FWYX6.js.map +0 -1
  971. package/dist/setup-links-5ZCASHAL.js +0 -141
  972. package/dist/shared-HJDFNID4.js +0 -31
  973. package/dist/site-7PSCHITE.js +0 -177
  974. package/dist/sitemaps-POPZJTAX.js +0 -87
  975. package/dist/sites-262H6LM4.js +0 -101
  976. package/dist/skills-6TQZLIMP.js +0 -47
  977. package/dist/sources-GEB6OEGY.js +0 -421
  978. package/dist/sources-GEB6OEGY.js.map +0 -1
  979. package/dist/sources-ICMUQMCJ.js +0 -30
  980. package/dist/stale-KBY5WARW.js +0 -63
  981. package/dist/stats-NNXZMPZR.js +0 -34
  982. package/dist/status-ZX5WM5PJ.js +0 -62
  983. package/dist/sticker-4KMBSMP5.js +0 -94
  984. package/dist/stock-2YCDN3N6.js +0 -179
  985. package/dist/studio-RA7QQH4O.js +0 -49
  986. package/dist/sync-CF7FVUQJ.js +0 -54
  987. package/dist/sync-TZNIPZRX.js +0 -54
  988. package/dist/sync-ZSNUBYPM.js +0 -265
  989. package/dist/sync-definition-ADXXWWV5.js +0 -53
  990. package/dist/tag-manager-DYZUOIAS.js +0 -43
  991. package/dist/tags-4OZCALA3.js +0 -20
  992. package/dist/tags-4PXXFIPU.js +0 -26
  993. package/dist/tags-KFVUEPL6.js +0 -20
  994. package/dist/tags-TESETZGC.js +0 -224
  995. package/dist/tags-WIMUIZHU.js +0 -20
  996. package/dist/targeting-constants-XJ2VOW7K.js +0 -118
  997. package/dist/targeting-criteria-VRI7V6C5.js +0 -113
  998. package/dist/targets-ERVS2VEU.js +0 -102
  999. package/dist/templates-TE6LBUIP.js +0 -178
  1000. package/dist/testimonials-FV7KPAPK.js +0 -32
  1001. package/dist/top-companies-B5M43KGJ.js +0 -108
  1002. package/dist/translate-OKADZCBC.js +0 -598
  1003. package/dist/triggers-JLJQOSKI.js +0 -141
  1004. package/dist/tweets-ATP3FQAC.js +0 -123
  1005. package/dist/unfollow-CBVPGPF7.js +0 -46
  1006. package/dist/unlink-KMWDKVIC.js +0 -67
  1007. package/dist/unstage-4ZEULXEQ.js +0 -95
  1008. package/dist/unstage-M4IQKJIO.js +0 -84
  1009. package/dist/update-5MBR4TPK.js +0 -155
  1010. package/dist/update-AHDGHOCP.js +0 -142
  1011. package/dist/update-K6LFJHNI.js +0 -63
  1012. package/dist/update-PNRNYXUW.js +0 -98
  1013. package/dist/upload-KAQC4AH7.js +0 -126
  1014. package/dist/upload-L5SYZB3X.js +0 -150
  1015. package/dist/upscale-YWRLFU22.js +0 -109
  1016. package/dist/url-options-GGXAL3J4.js +0 -127
  1017. package/dist/url-options-GGXAL3J4.js.map +0 -1
  1018. package/dist/url-params-SM32OOXZ.js +0 -98
  1019. package/dist/use-UT2DIZOG.js +0 -95
  1020. package/dist/validate-NCTK5BXD.js +0 -89
  1021. package/dist/validate-NCTK5BXD.js.map +0 -1
  1022. package/dist/variant-FLZJYGYL.js +0 -338
  1023. package/dist/videos-A32DPGHD.js +0 -39
  1024. package/dist/view-NPAG66QK.js +0 -121
  1025. package/dist/viewer-check-L4B4LIAX.js +0 -69
  1026. package/dist/web-TZEIFUYY.js +0 -140
  1027. package/dist/winners-I5BMATJZ.js +0 -79
  1028. package/dist/winners-I5BMATJZ.js.map +0 -1
  1029. package/dist/winning-ads-THIR7E5S.js +0 -62
  1030. package/dist/winning-ads-THIR7E5S.js.map +0 -1
  1031. package/dist/write-commands-CE4FIQ6Y.js +0 -1015
  1032. package/dist/write-commands-CT74VHH6.js +0 -737
  1033. package/dist/write-commands-ERKVRHTC.js +0 -206
  1034. package/dist/write-commands-WTRSOSO3.js +0 -713
  1035. package/dist/x-YXABYM5U.js +0 -47
  1036. /package/dist/{account-DTHGTZCN.js.map → account-JG7QD522.js.map} +0 -0
  1037. /package/dist/{account-4H7QVBRK.js.map → account-V6PB6PA5.js.map} +0 -0
  1038. /package/dist/{account-IEVEOFIK.js.map → account-VLPX7EZT.js.map} +0 -0
  1039. /package/dist/{account-writes-AK42HGRM.js.map → account-writes-BGREY7ZL.js.map} +0 -0
  1040. /package/dist/{accounts-KYJO3JC6.js.map → accounts-2FINK5GZ.js.map} +0 -0
  1041. /package/dist/{accounts-4CDRK4S4.js.map → accounts-2UV5Z3Y6.js.map} +0 -0
  1042. /package/dist/{accounts-5RLG6BBA.js.map → accounts-3EX2PFJB.js.map} +0 -0
  1043. /package/dist/{accounts-5QDKBZMH.js.map → accounts-G2QT3ZVP.js.map} +0 -0
  1044. /package/dist/{accounts-6LSBBXKA.js.map → accounts-N63J5YTK.js.map} +0 -0
  1045. /package/dist/{actions-WH5C6Q7I.js.map → actions-PA2BPIYO.js.map} +0 -0
  1046. /package/dist/{active-entities-YUSOUR5M.js.map → active-entities-RDXDSMA2.js.map} +0 -0
  1047. /package/dist/{activities-ZVQOBHZH.js.map → activities-RBTU2Q24.js.map} +0 -0
  1048. /package/dist/{ad-group-writes-QQS4223F.js.map → ad-group-writes-5NTRJTVE.js.map} +0 -0
  1049. /package/dist/{ad-groups-WGPDPUI2.js.map → ad-groups-4OTAKWUC.js.map} +0 -0
  1050. /package/dist/{ad-writes-XE2IE4DS.js.map → ad-writes-T7W3DDKK.js.map} +0 -0
  1051. /package/dist/{add-CUWAW7KG.js.map → add-4VKA4NDH.js.map} +0 -0
  1052. /package/dist/{add-577QWMCF.js.map → add-MQO33HL3.js.map} +0 -0
  1053. /package/dist/{add-BZ4QPLK4.js.map → add-QM7ANAVG.js.map} +0 -0
  1054. /package/dist/{ads-6UEDYT3O.js.map → ads-IJCFN2N3.js.map} +0 -0
  1055. /package/dist/{ads-6UG66KA5.js.map → ads-QKMLAPZC.js.map} +0 -0
  1056. /package/dist/{ads-BCOSQALY.js.map → ads-XYAWONXR.js.map} +0 -0
  1057. /package/dist/{adsets-Q5DWGANV.js.map → adsets-DPTIKGTG.js.map} +0 -0
  1058. /package/dist/{advertisers-OABQDELT.js.map → advertisers-SZFDOPBQ.js.map} +0 -0
  1059. /package/dist/{analytics-BCZGSSXP.js.map → analytics-HFBYIPZ7.js.map} +0 -0
  1060. /package/dist/{animate-AIZ3GS4J.js.map → animate-LUKNHCF4.js.map} +0 -0
  1061. /package/dist/{assign-O6QNAZD5.js.map → assign-QCICUD72.js.map} +0 -0
  1062. /package/dist/{audience-size-CXPWERR3.js.map → audience-size-HML4BLHJ.js.map} +0 -0
  1063. /package/dist/{audiences-TGD5US2M.js.map → audiences-BSABKS5K.js.map} +0 -0
  1064. /package/dist/{audiences-AMRFZRZ7.js.map → audiences-FWOOSUSJ.js.map} +0 -0
  1065. /package/dist/{audiences-HFRVIE2X.js.map → audiences-VK4M7GLQ.js.map} +0 -0
  1066. /package/dist/{audit-MNOQK3U4.js.map → audit-DUM55J5U.js.map} +0 -0
  1067. /package/dist/{audit-AD4ZZNJN.js.map → audit-JR5R75XK.js.map} +0 -0
  1068. /package/dist/{autocomplete-TRCMPNW4.js.map → autocomplete-VX4PMMLR.js.map} +0 -0
  1069. /package/dist/{avatars-P3WX5TQP.js.map → avatars-5KCRSUJ3.js.map} +0 -0
  1070. /package/dist/{bid-pricing-6XXSM7C2.js.map → bid-pricing-AIUACXUH.js.map} +0 -0
  1071. /package/dist/{brand-LXU7YNCF.js.map → brand-UBTC2WXR.js.map} +0 -0
  1072. /package/dist/{businesses-JBDQZZIG.js.map → businesses-P3RX4UXS.js.map} +0 -0
  1073. /package/dist/{campaign-groups-CEAM3WRO.js.map → campaign-groups-SJZEDIBL.js.map} +0 -0
  1074. /package/dist/{campaign-writes-SXLZFYF6.js.map → campaign-writes-5BPVXG4C.js.map} +0 -0
  1075. /package/dist/{campaign-writes-D6BJAULL.js.map → campaign-writes-VE6QLIDA.js.map} +0 -0
  1076. /package/dist/{campaigns-CXOKBCPS.js.map → campaigns-JEWEDCTC.js.map} +0 -0
  1077. /package/dist/{campaigns-D6B6Z67Y.js.map → campaigns-MEIMSHJF.js.map} +0 -0
  1078. /package/dist/{campaigns-V3SWBM4E.js.map → campaigns-NCGJNJKS.js.map} +0 -0
  1079. /package/dist/{campaigns-YS3OGQXO.js.map → campaigns-XY7QWHDN.js.map} +0 -0
  1080. /package/dist/{capabilities-NZPSSS6T.js.map → capabilities-W6SPXOPF.js.map} +0 -0
  1081. /package/dist/{cards-4477BFEV.js.map → cards-CLD4WX6G.js.map} +0 -0
  1082. /package/dist/{catalogs-BRXEDE56.js.map → catalogs-DINPKQXY.js.map} +0 -0
  1083. /package/dist/{changes-TP7ZZHB3.js.map → changes-N2YZXAPF.js.map} +0 -0
  1084. /package/dist/{chatgpt-7W75X3ER.js.map → chatgpt-TPAP6BVY.js.map} +0 -0
  1085. /package/dist/{chats-GN3PBFX4.js.map → chats-FKVVBXVF.js.map} +0 -0
  1086. /package/dist/{chunk-XQIKDODN.js.map → chunk-24IQ6K7K.js.map} +0 -0
  1087. /package/dist/{chunk-CFHIW5QZ.js.map → chunk-2FZG5DD2.js.map} +0 -0
  1088. /package/dist/{chunk-RZT263H7.js.map → chunk-2T3EH2MU.js.map} +0 -0
  1089. /package/dist/{chunk-L27H2R2N.js.map → chunk-2Y5UE2CV.js.map} +0 -0
  1090. /package/dist/{chunk-PZXCWSKV.js.map → chunk-3KPQDXIU.js.map} +0 -0
  1091. /package/dist/{chunk-6G5K6ZC6.js.map → chunk-4AFGT3L3.js.map} +0 -0
  1092. /package/dist/{chunk-MZL4H5PY.js.map → chunk-4JKBMKFC.js.map} +0 -0
  1093. /package/dist/{chunk-RX6F3GEA.js.map → chunk-4KBWL7S4.js.map} +0 -0
  1094. /package/dist/{chunk-KLNKEVIY.js.map → chunk-4R3QKEDV.js.map} +0 -0
  1095. /package/dist/{chunk-VFIOJD5M.js.map → chunk-6SL6463H.js.map} +0 -0
  1096. /package/dist/{chunk-OUTF5JFG.js.map → chunk-7TRSFEHZ.js.map} +0 -0
  1097. /package/dist/{chunk-4NDCTLI5.js.map → chunk-APNV7FMK.js.map} +0 -0
  1098. /package/dist/{chunk-PBA3YCZA.js.map → chunk-BCSOWRQL.js.map} +0 -0
  1099. /package/dist/{chunk-VVZBBKRC.js.map → chunk-BJEW3LST.js.map} +0 -0
  1100. /package/dist/{chunk-LS5MTRFI.js.map → chunk-BYKUAX26.js.map} +0 -0
  1101. /package/dist/{chunk-XVOI4BIS.js.map → chunk-C7NPNSFO.js.map} +0 -0
  1102. /package/dist/{chunk-EFSYTROP.js.map → chunk-CVIMIOPO.js.map} +0 -0
  1103. /package/dist/{chunk-WS2GMOSG.js.map → chunk-DAKIMGUS.js.map} +0 -0
  1104. /package/dist/{chunk-PWGWMIIJ.js.map → chunk-DCRUGS3G.js.map} +0 -0
  1105. /package/dist/{chunk-C6U6UDHJ.js.map → chunk-DMA77LLI.js.map} +0 -0
  1106. /package/dist/{chunk-JERXV5A3.js.map → chunk-EESOZY5S.js.map} +0 -0
  1107. /package/dist/{chunk-QVJDPOEB.js.map → chunk-EIZMOICE.js.map} +0 -0
  1108. /package/dist/{chunk-DZSIUEGH.js.map → chunk-F3IVR3V3.js.map} +0 -0
  1109. /package/dist/{chunk-LZ73CZGP.js.map → chunk-FSX6CQ2Z.js.map} +0 -0
  1110. /package/dist/{chunk-STIB5DR5.js.map → chunk-G7LAQE56.js.map} +0 -0
  1111. /package/dist/{chunk-ZZQXVYUY.js.map → chunk-G7QKXFQ2.js.map} +0 -0
  1112. /package/dist/{chunk-XTRAI6CL.js.map → chunk-G7XY4T6K.js.map} +0 -0
  1113. /package/dist/{chunk-7ED5TAFP.js.map → chunk-HCDCWXSU.js.map} +0 -0
  1114. /package/dist/{chunk-R5RIH3N5.js.map → chunk-I4IVUAQN.js.map} +0 -0
  1115. /package/dist/{chunk-2TK4DEOE.js.map → chunk-IWNZCYWI.js.map} +0 -0
  1116. /package/dist/{chunk-WTOYCUKH.js.map → chunk-JF5LNI6O.js.map} +0 -0
  1117. /package/dist/{chunk-TUB34FVS.js.map → chunk-JJZBZYNK.js.map} +0 -0
  1118. /package/dist/{chunk-WNFIJAUO.js.map → chunk-JZP5IODJ.js.map} +0 -0
  1119. /package/dist/{chunk-2GTYAHDN.js.map → chunk-KWMYTVHI.js.map} +0 -0
  1120. /package/dist/{chunk-VAJBWA2U.js.map → chunk-LFGCOAB4.js.map} +0 -0
  1121. /package/dist/{chunk-6B7VKFS4.js.map → chunk-LPRUP3ZX.js.map} +0 -0
  1122. /package/dist/{chunk-KNY76UGC.js.map → chunk-MD3VH5UG.js.map} +0 -0
  1123. /package/dist/{chunk-FVF5SXTZ.js.map → chunk-MFORE6F4.js.map} +0 -0
  1124. /package/dist/{chunk-VNUNE5AB.js.map → chunk-MMBHCAON.js.map} +0 -0
  1125. /package/dist/{chunk-XL3BMSYG.js.map → chunk-NIGGMK7L.js.map} +0 -0
  1126. /package/dist/{chunk-DQMZXK27.js.map → chunk-NN7A2ILR.js.map} +0 -0
  1127. /package/dist/{chunk-PVUZWHNQ.js.map → chunk-O356YNIW.js.map} +0 -0
  1128. /package/dist/{chunk-ZGTCZ6H4.js.map → chunk-OUQMJRH6.js.map} +0 -0
  1129. /package/dist/{chunk-E4NCRGY3.js.map → chunk-OXKUWTFL.js.map} +0 -0
  1130. /package/dist/{chunk-RPUSTYHL.js.map → chunk-PAJJXZ3Z.js.map} +0 -0
  1131. /package/dist/{chunk-QSN5MZGS.js.map → chunk-PC56KVAD.js.map} +0 -0
  1132. /package/dist/{chunk-NECTN6N7.js.map → chunk-PEWNEPDR.js.map} +0 -0
  1133. /package/dist/{chunk-W3ZHJJVT.js.map → chunk-Q2T4XZG4.js.map} +0 -0
  1134. /package/dist/{chunk-7J6EHOH6.js.map → chunk-RCR6RVYE.js.map} +0 -0
  1135. /package/dist/{chunk-GYU7BWEN.js.map → chunk-RH2H5PBV.js.map} +0 -0
  1136. /package/dist/{chunk-4Z7DEN75.js.map → chunk-S3XM4LD3.js.map} +0 -0
  1137. /package/dist/{chunk-75FDTDLH.js.map → chunk-SFHL3KWY.js.map} +0 -0
  1138. /package/dist/{chunk-LIQ4SQ2T.js.map → chunk-SQ7DRYCC.js.map} +0 -0
  1139. /package/dist/{chunk-YBMVHGY3.js.map → chunk-SSVZM3P6.js.map} +0 -0
  1140. /package/dist/{chunk-ND5MJ3AA.js.map → chunk-TMNLIA7R.js.map} +0 -0
  1141. /package/dist/{chunk-V7CTQOHG.js.map → chunk-UF55TADX.js.map} +0 -0
  1142. /package/dist/{chunk-TD2P4HBP.js.map → chunk-UGI33KTO.js.map} +0 -0
  1143. /package/dist/{chunk-ORO7VAXB.js.map → chunk-UK2OTLT3.js.map} +0 -0
  1144. /package/dist/{chunk-IGQZ5U3C.js.map → chunk-UU3FGKUW.js.map} +0 -0
  1145. /package/dist/{chunk-NIJSXVFT.js.map → chunk-UUBHU2TY.js.map} +0 -0
  1146. /package/dist/{chunk-5Z2KSVIV.js.map → chunk-UX7HIGS7.js.map} +0 -0
  1147. /package/dist/{chunk-HZUDRKGR.js.map → chunk-VDZIGI2C.js.map} +0 -0
  1148. /package/dist/{chunk-4QEY2L6U.js.map → chunk-VKVIBQP3.js.map} +0 -0
  1149. /package/dist/{chunk-IYU4X5A7.js.map → chunk-VLF2M4GZ.js.map} +0 -0
  1150. /package/dist/{chunk-7OFNN4CT.js.map → chunk-VTF7XNOP.js.map} +0 -0
  1151. /package/dist/{chunk-ESB5DLIP.js.map → chunk-WDA3L4NF.js.map} +0 -0
  1152. /package/dist/{chunk-H26L3OQY.js.map → chunk-XDV6Q33B.js.map} +0 -0
  1153. /package/dist/{chunk-2BKVVCCV.js.map → chunk-XYC26BDM.js.map} +0 -0
  1154. /package/dist/{chunk-FTWJFDIN.js.map → chunk-YHQYDNYD.js.map} +0 -0
  1155. /package/dist/{chunk-F2S5BLPE.js.map → chunk-YTWNY3RF.js.map} +0 -0
  1156. /package/dist/{claim-25JJM4AG.js.map → claim-JLVISHS4.js.map} +0 -0
  1157. /package/dist/{client-VHN32ZRE.js.map → client-G6DGRGKT.js.map} +0 -0
  1158. /package/dist/{code-YS6ZMGX3.js.map → code-AYN42EK7.js.map} +0 -0
  1159. /package/dist/{companies-VR5M5PAN.js.map → companies-XDMOP2GL.js.map} +0 -0
  1160. /package/dist/{complete-DRMOTC2W.js.map → complete-XM7VLC4F.js.map} +0 -0
  1161. /package/dist/{config-CQN5FHMZ.js.map → config-UE7GCROG.js.map} +0 -0
  1162. /package/dist/{connect-WUDJR2GH.js.map → connect-VTDKGYP3.js.map} +0 -0
  1163. /package/dist/{conversation-K6LYF2ZP.js.map → conversation-F53OE25Y.js.map} +0 -0
  1164. /package/dist/{conversion-report-XQBJ6LG4.js.map → conversion-report-35MLL3FA.js.map} +0 -0
  1165. /package/dist/{conversion-upload-command-AUF3LNTH.js.map → conversion-upload-command-CV2TA7OV.js.map} +0 -0
  1166. /package/dist/{conversion-writes-UBCVXP2E.js.map → conversion-writes-NSZPNMPE.js.map} +0 -0
  1167. /package/dist/{conversions-GF32XOWY.js.map → conversions-7YO6DDL3.js.map} +0 -0
  1168. /package/dist/{conversions-D236RTUK.js.map → conversions-XNISCCC2.js.map} +0 -0
  1169. /package/dist/{countries-ESAKTQAE.js.map → countries-NMWPKFFW.js.map} +0 -0
  1170. /package/dist/{create-4TFAD6HY.js.map → create-ARERZYCL.js.map} +0 -0
  1171. /package/dist/{create-IXYXYLLE.js.map → create-C6ZVYIF5.js.map} +0 -0
  1172. /package/dist/{create-2D7AIFJI.js.map → create-FAPJFCZE.js.map} +0 -0
  1173. /package/dist/{create-PKJVFJMO.js.map → create-M7TUO3XS.js.map} +0 -0
  1174. /package/dist/{creatives-OHCFHRZ5.js.map → creatives-3YIV6IOK.js.map} +0 -0
  1175. /package/dist/{creatives-QLSZFOMB.js.map → creatives-QZCO6WGH.js.map} +0 -0
  1176. /package/dist/{creatives-UEPLNCPN.js.map → creatives-WJLJ3NKP.js.map} +0 -0
  1177. /package/dist/{critique-5PCQ2CJH.js.map → critique-56MNXW7R.js.map} +0 -0
  1178. /package/dist/{critique-WDO6SKK2.js.map → critique-KRIKEHF6.js.map} +0 -0
  1179. /package/dist/{crm-HNUOHXAN.js.map → crm-OETFQNR3.js.map} +0 -0
  1180. /package/dist/{crm-SNIUADNK.js.map → crm-WXCFB4TU.js.map} +0 -0
  1181. /package/dist/{crop-2J4RKJ6B.js.map → crop-VCP2JLQL.js.map} +0 -0
  1182. /package/dist/{currency-XCGKQ7FE.js.map → currency-MNNDKY4Z.js.map} +0 -0
  1183. /package/dist/{custom-conversions-2VLJGPRV.js.map → custom-conversions-CIU525HM.js.map} +0 -0
  1184. /package/dist/{customers-72L2KZHO.js.map → customers-GTPEABJI.js.map} +0 -0
  1185. /package/dist/{delete-3AV3ARMX.js.map → delete-5CURRI25.js.map} +0 -0
  1186. /package/dist/{delete-PA2GY5EC.js.map → delete-CLC2Q2OE.js.map} +0 -0
  1187. /package/dist/{delete-EVGM5B36.js.map → delete-CQ6Q3URI.js.map} +0 -0
  1188. /package/dist/{delete-A5XD52K4.js.map → delete-JIRZBBDD.js.map} +0 -0
  1189. /package/dist/{delete-YNNFTFYV.js.map → delete-LD3F4UIW.js.map} +0 -0
  1190. /package/dist/{delete-MRM2S4Z5.js.map → delete-LGZ5OI4C.js.map} +0 -0
  1191. /package/dist/{demographics-SYS2E7QC.js.map → demographics-EK2ZPHWK.js.map} +0 -0
  1192. /package/dist/{describe-6NVOWIBE.js.map → describe-BNB6643C.js.map} +0 -0
  1193. /package/dist/{describe-P3PPIQME.js.map → describe-ZXGFTCDR.js.map} +0 -0
  1194. /package/dist/{dimensions-EYAYO27I.js.map → dimensions-IU4ETG4U.js.map} +0 -0
  1195. /package/dist/{discard-JS2YJUIM.js.map → discard-VWCXYJWU.js.map} +0 -0
  1196. /package/dist/{discover-BJPZNXUQ.js.map → discover-4EQWGIAN.js.map} +0 -0
  1197. /package/dist/{domain-XKKH5NCL.js.map → domain-I2SAGVAB.js.map} +0 -0
  1198. /package/dist/{download-7T6HIJKD.js.map → download-D7TB4744.js.map} +0 -0
  1199. /package/dist/{draft-YDY2Q2K6.js.map → draft-4VOOSJQJ.js.map} +0 -0
  1200. /package/dist/{draft-WWWKSEEE.js.map → draft-6KG2YFOY.js.map} +0 -0
  1201. /package/dist/{draft-4AO4YH3V.js.map → draft-APDGACIC.js.map} +0 -0
  1202. /package/dist/{draft-BGUJDHXR.js.map → draft-D76C4JR3.js.map} +0 -0
  1203. /package/dist/{draft-MNFJ4G3C.js.map → draft-HFH2Y6F5.js.map} +0 -0
  1204. /package/dist/{draft-GCUXNPVH.js.map → draft-NVVWWQVC.js.map} +0 -0
  1205. /package/dist/{draft-KIBMVKSR.js.map → draft-NWLPLTWM.js.map} +0 -0
  1206. /package/dist/{env-KIP2J2UB.js.map → env-LHLGM2YJ.js.map} +0 -0
  1207. /package/dist/{export-JQRMBJ7D.js.map → export-VGCFD7GL.js.map} +0 -0
  1208. /package/dist/{extract-7QKLME7Z.js.map → extract-32J7V2RX.js.map} +0 -0
  1209. /package/dist/{facets-NVBX5WDT.js.map → facets-WVI6VBDC.js.map} +0 -0
  1210. /package/dist/{favorites-NSGF4OV5.js.map → favorites-WKV5H5OF.js.map} +0 -0
  1211. /package/dist/{feedback-OGAPR45R.js.map → feedback-NMNKYEMU.js.map} +0 -0
  1212. /package/dist/{feedback-record-GVXGDY5Y.js.map → feedback-record-2VYBMWMO.js.map} +0 -0
  1213. /package/dist/{fetch-U4TJIHZU.js.map → fetch-CENBDLT6.js.map} +0 -0
  1214. /package/dist/{fetch-XF76JABV.js.map → fetch-XQFPE3MI.js.map} +0 -0
  1215. /package/dist/{find-OTDIX6V4.js.map → find-PNDKEOXT.js.map} +0 -0
  1216. /package/dist/{fit-BOQL6OK3.js.map → fit-SEWGCEW5.js.map} +0 -0
  1217. /package/dist/{fonts-64T6KRZS.js.map → fonts-KUCQAR7N.js.map} +0 -0
  1218. /package/dist/{forecast-YIIGTHRM.js.map → forecast-PI52G2GL.js.map} +0 -0
  1219. /package/dist/{funding-NYO65IMT.js.map → funding-ZRC25X5I.js.map} +0 -0
  1220. /package/dist/{ga4-UDQ2HA2J.js.map → ga4-YDKXVJOC.js.map} +0 -0
  1221. /package/dist/{generate-3XYYITU6.js.map → generate-BVMMX3SS.js.map} +0 -0
  1222. /package/dist/{get-3L6W3E3T.js.map → get-7MSF4RVQ.js.map} +0 -0
  1223. /package/dist/{get-XN5ZGDIK.js.map → get-KFVPIDIA.js.map} +0 -0
  1224. /package/dist/{get-6WEYKOY6.js.map → get-NHQ2XYKZ.js.map} +0 -0
  1225. /package/dist/{get-6RQFDAIN.js.map → get-TCDAYTZA.js.map} +0 -0
  1226. /package/dist/{get-YIHTAMRT.js.map → get-UMMTY74K.js.map} +0 -0
  1227. /package/dist/{get-P743RPSI.js.map → get-YM77HCL5.js.map} +0 -0
  1228. /package/dist/{gif-53ULFVLR.js.map → gif-X323HXS2.js.map} +0 -0
  1229. /package/dist/{google-KTO3PLEU.js.map → google-76A4MHQH.js.map} +0 -0
  1230. /package/dist/{google-ads-7XAGJVNJ.js.map → google-ads-S6O4MLKA.js.map} +0 -0
  1231. /package/dist/{group-GKWCCX66.js.map → group-CTIZVYX2.js.map} +0 -0
  1232. /package/dist/{group-EFZ3AJIE.js.map → group-HKWQ75CJ.js.map} +0 -0
  1233. /package/dist/{gsc-P3QYGDV2.js.map → gsc-CORRYJBJ.js.map} +0 -0
  1234. /package/dist/{history-EUG4LE44.js.map → history-4U7FJGEM.js.map} +0 -0
  1235. /package/dist/{history-Q3QCT64S.js.map → history-BXOMJ5PL.js.map} +0 -0
  1236. /package/dist/{hubspot-UULVEYVO.js.map → hubspot-I5MFAZ4G.js.map} +0 -0
  1237. /package/dist/{icon-I43F77FV.js.map → icon-6QW63AHG.js.map} +0 -0
  1238. /package/dist/{ideas-7LXYXS5G.js.map → ideas-QDS5XA4S.js.map} +0 -0
  1239. /package/dist/{images-3SOTFMJV.js.map → images-NVTA2OHD.js.map} +0 -0
  1240. /package/dist/{improve-BCCU5AS6.js.map → improve-WR23CHYH.js.map} +0 -0
  1241. /package/dist/{ingest-HQUXSBWA.js.map → ingest-QAVJ2J7F.js.map} +0 -0
  1242. /package/dist/{ingest-HYSZC3EX.js.map → ingest-XJHV3GG6.js.map} +0 -0
  1243. /package/dist/{insights-LNAXV2CG.js.map → insights-AW7SOGHI.js.map} +0 -0
  1244. /package/dist/{insights-NZWSJKU4.js.map → insights-IJEPLWQH.js.map} +0 -0
  1245. /package/dist/{inspect-HZQ7GSVM.js.map → inspect-7I53PWCF.js.map} +0 -0
  1246. /package/dist/{inspiration-P265QJ2H.js.map → inspiration-TJJFUVY2.js.map} +0 -0
  1247. /package/dist/{intent-E3UIVZBN.js.map → intent-VEUQS34Z.js.map} +0 -0
  1248. /package/dist/{job-L7RJZMSG.js.map → job-K7LAIBYN.js.map} +0 -0
  1249. /package/dist/{job-create-JUDAN52O.js.map → job-create-DFZL4CGA.js.map} +0 -0
  1250. /package/dist/{job-status-U43WE3RJ.js.map → job-status-6Q2TVTEO.js.map} +0 -0
  1251. /package/dist/{keep-55CPC7DG.js.map → keep-XJFCLVCP.js.map} +0 -0
  1252. /package/dist/{keyword-gap-BG6M665A.js.map → keyword-gap-CUOGKUMM.js.map} +0 -0
  1253. /package/dist/{keyword-metrics-YG3K7MQZ.js.map → keyword-metrics-LK7FME4N.js.map} +0 -0
  1254. /package/dist/{keywords-for-site-V4K744TF.js.map → keywords-for-site-4E7UU44P.js.map} +0 -0
  1255. /package/dist/{landing-3SSX6WK6.js.map → landing-I65PFN7H.js.map} +0 -0
  1256. /package/dist/{languages-HORKPDNH.js.map → languages-KPPKX3E2.js.map} +0 -0
  1257. /package/dist/{languages-JSGWCC7Z.js.map → languages-MGEBLO64.js.map} +0 -0
  1258. /package/dist/{logo-2IP663QO.js.map → launches-E3Y6NCQE.js.map} +0 -0
  1259. /package/dist/{layerize-RPD6SNP6.js.map → layerize-N4IQ2KE7.js.map} +0 -0
  1260. /package/dist/{leads-ARUWPHBM.js.map → leads-PPMOBH7U.js.map} +0 -0
  1261. /package/dist/{leads-FAHQ6KJX.js.map → leads-TNEQUOUN.js.map} +0 -0
  1262. /package/dist/{learn-XNHGNQE5.js.map → learn-QQS323PS.js.map} +0 -0
  1263. /package/dist/{library-ARKRLCNJ.js.map → library-4QQAVB6X.js.map} +0 -0
  1264. /package/dist/{lighthouse-6ZC45E53.js.map → lighthouse-CD47CPJM.js.map} +0 -0
  1265. /package/dist/{line-item-writes-A6BPZQPL.js.map → line-item-writes-QJZQUQ4E.js.map} +0 -0
  1266. /package/dist/{line-items-J7PXJHMD.js.map → line-items-ESEAXGBV.js.map} +0 -0
  1267. /package/dist/{link-4GGAQAVH.js.map → link-DPJYS4WY.js.map} +0 -0
  1268. /package/dist/{linkedin-I6JDSTRB.js.map → linkedin-EJPNC4VY.js.map} +0 -0
  1269. /package/dist/{list-P7NAFN6J.js.map → list-A45NTPSJ.js.map} +0 -0
  1270. /package/dist/{list-7MVBXOJT.js.map → list-GNP4GIV2.js.map} +0 -0
  1271. /package/dist/{list-LI4OGQFW.js.map → list-KQFLOVC4.js.map} +0 -0
  1272. /package/dist/{list-AL7N6X2P.js.map → list-MDHK3ENJ.js.map} +0 -0
  1273. /package/dist/{list-A5UCIR2J.js.map → list-PRUFXMXW.js.map} +0 -0
  1274. /package/dist/{list-AQMGXI4N.js.map → list-S3BAQCTL.js.map} +0 -0
  1275. /package/dist/{list-KAJZFHMN.js.map → list-UU5NPLJ7.js.map} +0 -0
  1276. /package/dist/{list-22HZ2S4W.js.map → list-V525A4Z4.js.map} +0 -0
  1277. /package/dist/{locations-2NKBJKBT.js.map → locations-J2PVPDZU.js.map} +0 -0
  1278. /package/dist/{locations-J4G5RNPH.js.map → locations-TFOYESTF.js.map} +0 -0
  1279. /package/dist/{log-MUPKKYSJ.js.map → log-XQBEJOOW.js.map} +0 -0
  1280. /package/dist/{lookup-XK45W2SH.js.map → logo-KQD5KUAH.js.map} +0 -0
  1281. /package/dist/{output-RAH3TSIL.js.map → lookup-QCREWUV4.js.map} +0 -0
  1282. /package/dist/{media-53DJRC4N.js.map → media-2WENMOAA.js.map} +0 -0
  1283. /package/dist/{media-6CQYG4UY.js.map → media-N4C6Q4IV.js.map} +0 -0
  1284. /package/dist/{media-sources-W2CQFSVQ.js.map → media-sources-BPOTW6IB.js.map} +0 -0
  1285. /package/dist/{members-3U6GINDF.js.map → members-BOYZKLNK.js.map} +0 -0
  1286. /package/dist/{meta-A7KM6TF5.js.map → meta-PXYHWOOG.js.map} +0 -0
  1287. /package/dist/{metrics-SQDJ5NQO.js.map → metrics-FZANUN7E.js.map} +0 -0
  1288. /package/dist/{models-3Z6MDHQW.js.map → models-W6EN3WB7.js.map} +0 -0
  1289. /package/dist/{normalize-ICQF2AST.js.map → normalize-LOMDPNFJ.js.map} +0 -0
  1290. /package/dist/{performance-ZA7VCHOU.js.map → output-SR4DN3A4.js.map} +0 -0
  1291. /package/dist/{page-GS3WLT2C.js.map → page-FS76L5WU.js.map} +0 -0
  1292. /package/dist/{pages-FXYQLHSJ.js.map → pages-INMNJSX2.js.map} +0 -0
  1293. /package/dist/{reddit-P7LLO4TK.js.map → performance-53D43XVZ.js.map} +0 -0
  1294. /package/dist/{pinterest-AUH7WBA7.js.map → pinterest-JMHFPNVW.js.map} +0 -0
  1295. /package/dist/{pixels-TZPF746S.js.map → pixels-K6ZD7SXV.js.map} +0 -0
  1296. /package/dist/{pixels-ZFF4BGUH.js.map → pixels-XPBBJYE3.js.map} +0 -0
  1297. /package/dist/{preview-AD4GKYIA.js.map → preview-KXSNG3BS.js.map} +0 -0
  1298. /package/dist/{promoted-tweet-writes-4H3ZFD6O.js.map → promoted-tweet-writes-I6HVQRDB.js.map} +0 -0
  1299. /package/dist/{promoted-tweets-MCMKPIHM.js.map → promoted-tweets-YAQ5ZUXI.js.map} +0 -0
  1300. /package/dist/{properties-L2XIYQDS.js.map → properties-NYNEONHI.js.map} +0 -0
  1301. /package/dist/{publish-CW5YSAAL.js.map → publish-Z5DVKZSG.js.map} +0 -0
  1302. /package/dist/{run-HSZFWRYZ.js.map → query-MSZPOHFL.js.map} +0 -0
  1303. /package/dist/{query-SGGBCHTF.js.map → query-RK2TFMBI.js.map} +0 -0
  1304. /package/dist/{query-VTGVZQIO.js.map → query-TWNH6GV7.js.map} +0 -0
  1305. /package/dist/{search-UO5KJTYS.js.map → reddit-6DQTBTO6.js.map} +0 -0
  1306. /package/dist/{refresh-IGHEOA6Y.js.map → refresh-TP2TOGS6.js.map} +0 -0
  1307. /package/dist/{release-C74JOYDA.js.map → release-PHQEZ2ZX.js.map} +0 -0
  1308. /package/dist/{relevant-pages-OWMNUCP7.js.map → relevant-pages-ORVFFVAM.js.map} +0 -0
  1309. /package/dist/{remove-6LGGKMLJ.js.map → remove-ETLMMDEA.js.map} +0 -0
  1310. /package/dist/{remove-HPN62MPQ.js.map → remove-KTBM5YSH.js.map} +0 -0
  1311. /package/dist/{reopen-XI53RP7R.js.map → reopen-OURQR6U7.js.map} +0 -0
  1312. /package/dist/{research-O6QXFCD7.js.map → research-P23YBKS3.js.map} +0 -0
  1313. /package/dist/{research-HAHUTFVJ.js.map → research-WCNWT5Y5.js.map} +0 -0
  1314. /package/dist/{reset-BISRUHT4.js.map → reset-2NCAWWN4.js.map} +0 -0
  1315. /package/dist/{reset-YMKVEOS4.js.map → reset-65R2CUB5.js.map} +0 -0
  1316. /package/dist/{resolve-D2VESQ45.js.map → resolve-65FKZ23N.js.map} +0 -0
  1317. /package/dist/{retry-SUKRXBHX.js.map → retry-P5K6LE6K.js.map} +0 -0
  1318. /package/dist/{retry-CGBATPQX.js.map → retry-UIPDQJ5F.js.map} +0 -0
  1319. /package/dist/{retry-failed-6HXPUVXJ.js.map → retry-failed-QMWQ6TRL.js.map} +0 -0
  1320. /package/dist/{shared-HJDFNID4.js.map → run-NDMEYUOI.js.map} +0 -0
  1321. /package/dist/{run-BFERU46Q.js.map → run-OP3T4TCF.js.map} +0 -0
  1322. /package/dist/{schedule-XJ24PL3K.js.map → schedule-6D667AXB.js.map} +0 -0
  1323. /package/dist/{schedule-O2K6M43V.js.map → schedule-KXLQVCZW.js.map} +0 -0
  1324. /package/dist/{scheduled-agents-HWEKBANT.js.map → scheduled-agents-LYWEX4PU.js.map} +0 -0
  1325. /package/dist/{schema-6GR77VJG.js.map → schema-CCFLFAOY.js.map} +0 -0
  1326. /package/dist/{scrape-ETAMW43A.js.map → scrape-DBZQFIW7.js.map} +0 -0
  1327. /package/dist/{screenshot-YCQF25ZB.js.map → screenshot-MPFANYIH.js.map} +0 -0
  1328. /package/dist/{search-OQNGSMUH.js.map → search-4AANIUUL.js.map} +0 -0
  1329. /package/dist/{search-742XSULP.js.map → search-EMJABZYF.js.map} +0 -0
  1330. /package/dist/{search-NVCIIGQS.js.map → search-HQDN7DOF.js.map} +0 -0
  1331. /package/dist/{sync-definition-ADXXWWV5.js.map → search-OVHC4CRQ.js.map} +0 -0
  1332. /package/dist/{search-MEEM4D3W.js.map → search-YSGZRANA.js.map} +0 -0
  1333. /package/dist/{select-K3EMTTI3.js.map → select-C6BKHB4B.js.map} +0 -0
  1334. /package/dist/{sends-WGJVQUMF.js.map → sends-HXN5HSF6.js.map} +0 -0
  1335. /package/dist/{sequences-OIPVR7JL.js.map → sequences-FRK76ZQV.js.map} +0 -0
  1336. /package/dist/{setup-links-5ZCASHAL.js.map → setup-links-BM2GLSSO.js.map} +0 -0
  1337. /package/dist/{viewer-check-L4B4LIAX.js.map → shared-EH5ZTQXC.js.map} +0 -0
  1338. /package/dist/{site-7PSCHITE.js.map → site-3PEJYQJW.js.map} +0 -0
  1339. /package/dist/{sitemaps-POPZJTAX.js.map → sitemaps-7KHY2KXI.js.map} +0 -0
  1340. /package/dist/{sites-262H6LM4.js.map → sites-6B76JW6C.js.map} +0 -0
  1341. /package/dist/{skills-6TQZLIMP.js.map → skills-SCTT3LCM.js.map} +0 -0
  1342. /package/dist/{sources-ICMUQMCJ.js.map → sources-ODJBHNGY.js.map} +0 -0
  1343. /package/dist/{stale-KBY5WARW.js.map → stale-2O54QXY2.js.map} +0 -0
  1344. /package/dist/{stats-NNXZMPZR.js.map → stats-4NBOAOR2.js.map} +0 -0
  1345. /package/dist/{status-ZX5WM5PJ.js.map → status-NE5OBM4B.js.map} +0 -0
  1346. /package/dist/{sticker-4KMBSMP5.js.map → sticker-NLXBIOBO.js.map} +0 -0
  1347. /package/dist/{stock-2YCDN3N6.js.map → stock-F3SA4VHV.js.map} +0 -0
  1348. /package/dist/{studio-RA7QQH4O.js.map → studio-ZPDIOFKL.js.map} +0 -0
  1349. /package/dist/{sync-TZNIPZRX.js.map → sync-5GJNZDGZ.js.map} +0 -0
  1350. /package/dist/{sync-ZSNUBYPM.js.map → sync-FCNFXTFD.js.map} +0 -0
  1351. /package/dist/{sync-CF7FVUQJ.js.map → sync-YXCZ3DHY.js.map} +0 -0
  1352. /package/dist/{tag-manager-DYZUOIAS.js.map → tag-manager-YM4Q3CZT.js.map} +0 -0
  1353. /package/dist/{tags-4PXXFIPU.js.map → tags-456UOYJU.js.map} +0 -0
  1354. /package/dist/{tags-4OZCALA3.js.map → tags-5YPYHV5V.js.map} +0 -0
  1355. /package/dist/{tags-TESETZGC.js.map → tags-HXMHEHG2.js.map} +0 -0
  1356. /package/dist/{tags-WIMUIZHU.js.map → tags-K34666RY.js.map} +0 -0
  1357. /package/dist/{tags-KFVUEPL6.js.map → tags-NB35ISO3.js.map} +0 -0
  1358. /package/dist/{targeting-constants-XJ2VOW7K.js.map → targeting-constants-3CMGPWRI.js.map} +0 -0
  1359. /package/dist/{targeting-criteria-VRI7V6C5.js.map → targeting-criteria-UKQ4WF5C.js.map} +0 -0
  1360. /package/dist/{targets-ERVS2VEU.js.map → targets-VQ4BQ657.js.map} +0 -0
  1361. /package/dist/{templates-TE6LBUIP.js.map → templates-PMUIOVDX.js.map} +0 -0
  1362. /package/dist/{testimonials-FV7KPAPK.js.map → testimonials-XZCGVD6V.js.map} +0 -0
  1363. /package/dist/{top-companies-B5M43KGJ.js.map → top-companies-VMRIDOOH.js.map} +0 -0
  1364. /package/dist/{translate-OKADZCBC.js.map → translate-F5KR62LF.js.map} +0 -0
  1365. /package/dist/{triggers-JLJQOSKI.js.map → triggers-2MZX7W6Y.js.map} +0 -0
  1366. /package/dist/{tweets-ATP3FQAC.js.map → tweets-XWE3VYQ4.js.map} +0 -0
  1367. /package/dist/{unfollow-CBVPGPF7.js.map → unfollow-7U4UBAJX.js.map} +0 -0
  1368. /package/dist/{unlink-KMWDKVIC.js.map → unlink-AWSNY3QS.js.map} +0 -0
  1369. /package/dist/{unstage-4ZEULXEQ.js.map → unstage-OGB43ZXO.js.map} +0 -0
  1370. /package/dist/{unstage-M4IQKJIO.js.map → unstage-RQBOQ4DY.js.map} +0 -0
  1371. /package/dist/{update-K6LFJHNI.js.map → update-4KWYHMLS.js.map} +0 -0
  1372. /package/dist/{update-AHDGHOCP.js.map → update-6DKEWM64.js.map} +0 -0
  1373. /package/dist/{update-5MBR4TPK.js.map → update-G6EKHPIF.js.map} +0 -0
  1374. /package/dist/{update-PNRNYXUW.js.map → update-OFV452AC.js.map} +0 -0
  1375. /package/dist/{upload-KAQC4AH7.js.map → upload-6CJWMQ24.js.map} +0 -0
  1376. /package/dist/{upload-L5SYZB3X.js.map → upload-GUKMQ5MT.js.map} +0 -0
  1377. /package/dist/{upscale-YWRLFU22.js.map → upscale-A456MESF.js.map} +0 -0
  1378. /package/dist/{url-params-SM32OOXZ.js.map → url-params-OE3UMYMM.js.map} +0 -0
  1379. /package/dist/{use-UT2DIZOG.js.map → use-HBVKVT5S.js.map} +0 -0
  1380. /package/dist/{variant-FLZJYGYL.js.map → variant-HULP57YI.js.map} +0 -0
  1381. /package/dist/{videos-A32DPGHD.js.map → videos-ION7UT3M.js.map} +0 -0
  1382. /package/dist/{view-NPAG66QK.js.map → view-GCDEJZII.js.map} +0 -0
  1383. /package/dist/{web-TZEIFUYY.js.map → web-CCVD6UZ4.js.map} +0 -0
  1384. /package/dist/{write-commands-WTRSOSO3.js.map → write-commands-47OP673X.js.map} +0 -0
  1385. /package/dist/{write-commands-CT74VHH6.js.map → write-commands-IJ5IFHS6.js.map} +0 -0
  1386. /package/dist/{write-commands-CE4FIQ6Y.js.map → write-commands-NNVDWBLG.js.map} +0 -0
  1387. /package/dist/{write-commands-ERKVRHTC.js.map → write-commands-OBMIVFZJ.js.map} +0 -0
  1388. /package/dist/{x-YXABYM5U.js.map → x-U32DT24S.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/experiment/index.ts","../src/commands/experiment/composition.ts","../src/commands/experiment/fold.ts","../../api/src/experiments/hypothesis.ts","../../api/src/experiments/wait.ts","../src/commands/experiment/hints.ts","../src/commands/experiment/hypothesis.ts","../src/commands/experiment/identity.ts","../src/commands/experiment/measurement.ts","../src/commands/experiment/readout.ts","../src/commands/experiment/update.ts"],"sourcesContent":["import type {\n ExperimentFinishResponse,\n ExperimentFoldResponse,\n ExperimentHistoryResponse,\n ExperimentPlanResponse,\n ExperimentStatusResponse,\n ExperimentUpdateResponse,\n} from \"@baker/api/experiments\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../ads/output.ts\";\nimport { formsOnlyIn, readComposition, readForms } from \"./composition.ts\";\nimport { type FoldResult, foldExperiment } from \"./fold.ts\";\nimport { buildHistoryHints, buildPlanHints, buildStartHints, buildStatusHints } from \"./hints.ts\";\nimport { parseEvidence } from \"./hypothesis.ts\";\nimport { readPageInternalId } from \"./identity.ts\";\nimport { readMeasurementDrift } from \"./measurement.ts\";\nimport { statusReadout } from \"./readout.ts\";\nimport { buildUpdateRequest } from \"./update.ts\";\n\nconst GOAL_ARG = {\n type: \"string\",\n description:\n \"The ONE event the test is read on, by its key: `form:<flow>:<node>:<trigger>` (a Form reaching a step), `submit:<flow>` (a Form finished), `page:<name>` (a page event or one the client's systems post), `exit:<host>` (a click out). `baker analytics conversions --candidates` lists the keys these pages produce, and `plan` lists the ones this page's visitors went on to do. Fixed for the life of the test. Optional when exactly one of them is a named conversion; otherwise say which. Every conversion the company has named is reported beside the goal and decides nothing.\",\n required: false,\n} as const;\n\nconst VARIANT_GOAL_ARG = {\n type: \"string\",\n description:\n \"The event the NEW version is read on, when it is not the page's — a variant that swaps the Form for a shorter one converts on the new Form's ending (`submit:<new-flow>`, or its confirmation step's `form:` key). Same vocabulary as --goal. Leave it out when both versions convert on the same event, which is the common case.\",\n required: false,\n} as const;\n\nconst LIFT_ARG = {\n type: \"string\",\n description:\n \"The smallest improvement worth detecting, relative — 0.2 is +20% (default). The single most consequential number here: halving it roughly quadruples the traffic needed. Ask for the smallest lift that would actually change what the client does, not the smallest one you would like to see.\",\n required: false,\n} as const;\n\n/**\n * The hypothesis, in parts.\n *\n * Not one `--hypothesis` sentence, and the reason is not tidiness: the change,\n * the metric and the magnitude are already `--variant`, `--goal` and `--lift`\n * on this same command. A sentence restating them can disagree with them and\n * nothing would notice, while the one part with nowhere else to live — what was\n * observed that makes this worth testing — gets buried inside it.\n */\nconst BECAUSE_ARG = {\n type: \"string\",\n description:\n \"What you SAW that makes this worth testing — the observation, not the change. “60% of visitors never scroll past the hero”, “CPL doubled after the new headline”. This is the field that makes a losing test worth something: without it there is no belief for the result to be evidence against, and the next test is no better informed than this one.\",\n required: true,\n} as const;\n\nconst CHANGE_ARG = {\n type: \"string\",\n description:\n \"What is different about the alternative version, in the client's words — “put the booking form in the hero”. One thing. Say it as the reader of the report would.\",\n required: true,\n} as const;\n\nconst EXPECT_ARG = {\n type: \"string\",\n description:\n \"Which way you expect the goal to move: `increase` (default) or `decrease`. This is what lets Baker report whether your hypothesis HELD, rather than only which page won — a test the original page wins is not a win, it is the change having made things worse, and that is the most useful thing a test can tell you.\",\n required: false,\n} as const;\n\nconst EVIDENCE_ARG = {\n type: \"string\",\n description:\n \"Where the observation came from, as `source:what it showed`, optionally `|link`. Repeatable. Sources: baker_analytics, clarity, ads, search_console, research, inspiration, client, hunch. Use `hunch` honestly when there is no data — a stated guess is worth more than a guess dressed as analytics.\",\n required: false,\n} as const;\n\nconst HOLD_ARG = {\n type: \"boolean\",\n required: false,\n description:\n \"Publish both versions with the split off, so the client can look at the new version by its link (`/<page>/?_bkr_preview=b`) before any visitor is sent to it. Switch it on afterwards with `baker experiment resume --id <id>`. Use it whenever somebody has to approve the new version first.\",\n} as const;\n\nconst BASELINE_ARG = {\n type: \"string\",\n description:\n \"The share of visitors you expect to do the goal, as a fraction — 0.05 is 5% — for a page whose history cannot say: a new page, or one about to get its first campaign. Without it a page with no conversions yet is sized on the company-wide rate for the outcome, or on 3%. The sizing is a guide either way: the test runs until the numbers are clear.\",\n required: false,\n} as const;\n\nconst ID_ARG = { type: \"string\", description: \"The test, by its id\", required: true } as const;\n\nconst LEARNING_ARG = {\n type: \"string\",\n description:\n \"What this test taught, in one or two sentences the client should believe about this page from now on — “the price is not the objection, the install date is”. The one part of the record the numbers cannot write, and what `plan` hands the next test on this page. Finished tests only.\",\n required: false,\n} as const;\n\nconst REASON_ARG = {\n type: \"string\",\n description:\n \"Why the test is being ended, as distinct from what the numbers said: `numbers_clear` (the result was clear enough to act on), `not_settling` (too little traffic or too small a difference — waiting would not help), `page_changing` (the page has to change for another reason), `test_flawed` (the wrong goal, a broken variant). Always say — the dashboard asks a person the same question, and the next test on this page is planned differently after each answer.\",\n required: false,\n} as const;\n\nconst LANDING_FILTER_ARG = {\n type: \"string\",\n description: \"Only the tests on one page, by its slug\",\n required: false,\n} as const;\n\n/**\n * The sizing stood on a stand-in. Said at start as well as at plan, because\n * the agent tells the client how long it will take from whichever of the two\n * it read last.\n */\nfunction sizingHints(data: Record<string, unknown>): string[] {\n return typeof data.warning === \"string\" ? [data.warning] : [];\n}\n\nfunction fail(message: string): never {\n writeJsonEnvelope({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\nfunction reportApiError(error: unknown): never {\n if (error instanceof ApiError) {\n writeJsonEnvelope({ ok: false, error: { code: error.code ?? \"ERROR\", message: error.message } });\n process.exit(1);\n }\n throw error;\n}\n\nregisterSchema({\n command: \"experiment.plan\",\n description: \"Whether a page can settle a question, and how long it might take, before anything is built\",\n args: {\n landing: { type: \"string\", description: \"The page under test, by slug\", required: true },\n variant: { type: \"string\", description: \"The new variant's slug, `<page>--<n>`\", required: true },\n goal: GOAL_ARG,\n variantGoal: VARIANT_GOAL_ARG,\n lift: LIFT_ARG,\n baseline: BASELINE_ARG,\n },\n});\n\nconst planCommand = defineCommand({\n meta: {\n name: \"plan\",\n description:\n \"Start here, BEFORE building the alternative page. Says which event the test would be read on, which events the page's visitors actually go on to do (by key, with the conversion name each is counted under), how long it might take at this page's traffic, and what a 14, 28, 56 or 90-day window could settle. The duration is a guide, never a finish line — a test ends when the numbers are clear, and a page with no traffic yet can still be tested (`warning` says what it was sized on). What IS refused is a test that could not be measured: a goal this page has demonstrably never produced.\",\n },\n args: {\n landing: { type: \"string\", description: \"The page under test, by slug\", required: true },\n variant: { type: \"string\", description: \"The new variant's slug, `<page>--<n>`\", required: true },\n goal: GOAL_ARG,\n variantGoal: VARIANT_GOAL_ARG,\n lift: LIFT_ARG,\n baseline: BASELINE_ARG,\n },\n run: async ({ args }) => {\n try {\n const response = await apiPost<{ ok: true; data: ExperimentPlanResponse }>(\"/api/experiments/plan\", {\n landingSlug: String(args.landing),\n variantSlug: String(args.variant),\n ...(args.goal ? { goal: String(args.goal) } : {}),\n ...(args.variantGoal ? { variantGoal: String(args.variantGoal) } : {}),\n ...(args.lift ? { minDetectableRelativeLift: Number(args.lift) } : {}),\n ...(args.baseline ? { baselineRate: Number(args.baseline) } : {}),\n });\n writeJsonEnvelope({ ok: true, data: response.data, hints: buildPlanHints(response.data) });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.start\",\n description: \"Stage an A/B test between a page and a new variant of it\",\n args: {\n landing: { type: \"string\", description: \"The page under test, by slug\", required: true },\n variant: { type: \"string\", description: \"The new variant's slug, `<page>--<n>`\", required: true },\n because: BECAUSE_ARG,\n change: CHANGE_ARG,\n expect: EXPECT_ARG,\n evidence: EVIDENCE_ARG,\n goal: GOAL_ARG,\n variantGoal: VARIANT_GOAL_ARG,\n lift: LIFT_ARG,\n baseline: BASELINE_ARG,\n hold: HOLD_ARG,\n },\n});\n\n/** The optional parts of a start request, present only when asked for. */\nfunction startOptions(args: {\n goal?: unknown;\n variantGoal?: unknown;\n lift?: unknown;\n baseline?: unknown;\n hold?: unknown;\n}) {\n return {\n ...(args.goal ? { goal: String(args.goal) } : {}),\n ...(args.variantGoal ? { variantGoal: String(args.variantGoal) } : {}),\n ...(args.lift ? { minDetectableRelativeLift: Number(args.lift) } : {}),\n ...(args.baseline ? { baselineRate: Number(args.baseline) } : {}),\n ...(args.hold ? { held: true } : {}),\n };\n}\n\n/** What happens at Publish, said once the start is staged. */\nfunction stagedHint(held: boolean, landing: string): string {\n return held\n ? `Staged on hold. Publishing puts both versions live but splits nobody: everyone keeps getting the page, and the new version opens only at /${landing}/?_bkr_preview=b — send that link to whoever has to approve it, and say that anyone with it can open it (it is not a private link). Once they have, \\`baker experiment status --landing ${landing}\\` gives the test's id and \\`baker experiment resume --id <id>\\` switches the split on; the test is dated from then.`\n : \"Staged. The split starts when this session is published — publishing is the review of the new variant.\";\n}\n\nconst startCommand = defineCommand({\n meta: {\n name: \"start\",\n description:\n \"Stage a test between the page and its new variant. Visitors are split between the two versions at the edge, so there is no flicker and nothing for an ad blocker to suppress. Nothing goes live until the session is published — the person publishing is the review of the new variant. Re-runs `plan` first and refuses on the same grounds.\",\n },\n args: {\n landing: { type: \"string\", description: \"The page under test, by slug\", required: true },\n variant: { type: \"string\", description: \"The new variant's slug, `<page>--<n>`\", required: true },\n because: BECAUSE_ARG,\n change: CHANGE_ARG,\n expect: EXPECT_ARG,\n evidence: EVIDENCE_ARG,\n goal: GOAL_ARG,\n variantGoal: VARIANT_GOAL_ARG,\n lift: LIFT_ARG,\n baseline: BASELINE_ARG,\n hold: HOLD_ARG,\n },\n run: async ({ args, rawArgs }) => {\n const expect = args.expect === undefined ? \"increase\" : String(args.expect);\n if (expect !== \"increase\" && expect !== \"decrease\") {\n fail(\"`--expect` is either `increase` or `decrease` — which way should the goal move if you are right?\");\n }\n const evidence = parseEvidence(args.evidence as string | string[] | undefined, rawArgs);\n if (evidence && \"error\" in evidence) fail(evidence.error);\n\n const { composition, newForms, drift, landingInternalId, variantInternalId } = await readStartContext(\n String(args.landing),\n String(args.variant),\n );\n\n try {\n const response = await apiPost<{ ok: true; data: Record<string, unknown> }>(\"/api/experiments/start\", {\n landingSlug: String(args.landing),\n variantSlug: String(args.variant),\n ...(landingInternalId ? { landingInternalId } : {}),\n ...(variantInternalId ? { variantInternalId } : {}),\n hypothesis: {\n because: String(args.because),\n change: String(args.change),\n expect,\n ...(evidence ? { evidence } : {}),\n },\n ...(composition ? { composition } : {}),\n ...startOptions(args),\n });\n writeJsonEnvelope({\n ok: true,\n data: response.data,\n hints: [\n ...sizingHints(response.data),\n ...buildStartHints({\n landing: String(args.landing),\n variant: String(args.variant),\n goal: String(response.data.goal),\n variantGoal: args.variantGoal === undefined ? undefined : String(args.variantGoal),\n composition,\n newForms,\n drift,\n }),\n stagedHint(Boolean(args.hold), String(args.landing)),\n \"Check it as often as you like — `baker experiment status` is safe to read at any moment and holds its error rate however often you ask. What is never safe is reading the numbers instead of the verdict: `keep_running` means this test cannot yet tell the two pages apart, whatever the rates happen to say today.\",\n ],\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.status\",\n description: \"The verdict on every A/B test, running, paused and finished\",\n args: {\n id: { type: \"string\", description: \"One test, by its id\", required: false },\n landing: LANDING_FILTER_ARG,\n full: {\n type: \"boolean\",\n description:\n \"Every field the dashboard reads too — the hypothesis in parts, what each version owns, the preview pictures and the posteriors behind the verdict\",\n required: false,\n },\n },\n});\n\nconst statusCommand = defineCommand({\n meta: {\n name: \"status\",\n description:\n \"The verdict on each test. Read `verdict` and nothing else to decide: keep_running | winner | no_difference | cannot_win | invalid. `cannot_win` means even the best case is under the lift the test was looking for — end it and keep the original. `stillNeeded` is the data (visitors, conversions) the test still needs; a test is gated on data, never on days. `earliestDecisionAt` is the day this page's traffic would get it there (YYYY-MM-DD) and `earliestDecisionIn` how far off that is — say those, never work a date out yourself. `summary` is one sentence you can show the client, and `secondary` lists every other conversion the company counts on the same two arms — context, never a second decision. The numbers under `--full` are for printing, never for deciding — a test that says keep_running has not finished, however good its numbers look.\",\n },\n args: {\n id: { type: \"string\", description: \"One test, by its id\", required: false },\n landing: LANDING_FILTER_ARG,\n full: {\n type: \"boolean\",\n description:\n \"Every field the dashboard reads too — the hypothesis in parts, what each version owns, the preview pictures and the posteriors behind the verdict\",\n required: false,\n },\n },\n run: async ({ args }) => {\n try {\n const response = await apiPost<{ ok: true; data: ExperimentStatusResponse }>(\"/api/experiments/status\", {\n ...(args.id ? { experimentId: String(args.id) } : {}),\n ...(args.landing ? { landingSlug: String(args.landing) } : {}),\n ...(args.full === true ? { full: true } : {}),\n });\n const now = Date.now();\n writeJsonEnvelope({\n ok: true,\n data: {\n experiments: response.data.experiments.map((row) => statusReadout(row, { full: args.full === true, now })),\n },\n hints: buildStatusHints(response.data.experiments, now),\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.history\",\n description:\n \"Every finished A/B test with what it found and what it taught — the record to read before proposing the next one\",\n args: {\n landing: LANDING_FILTER_ARG,\n limit: { type: \"string\", description: \"At most this many, newest first (default all)\", required: false },\n },\n});\n\nconst historyCommand = defineCommand({\n meta: {\n name: \"history\",\n description:\n \"What was tested before and what it taught. Finished tests only, newest first: the claim, what was different, what the numbers said, what was kept and whether that went against them, and the `learning` somebody wrote down. Read it — `--landing <slug>` for one page — BEFORE proposing a test: a refuted idea proposed again spends the page's traffic to return the same answer, and a supported one is what the next test should build on. `plan` hands the same entries back as `pastTests` for the page it sizes.\",\n },\n args: {\n landing: LANDING_FILTER_ARG,\n limit: { type: \"string\", description: \"At most this many, newest first\", required: false },\n },\n run: async ({ args }) => {\n const limit = args.limit === undefined ? undefined : Number(args.limit);\n if (limit !== undefined && !(Number.isInteger(limit) && limit > 0)) fail(\"`--limit` is a whole number above zero\");\n try {\n const response = await apiPost<{ ok: true; data: ExperimentHistoryResponse }>(\"/api/experiments/history\", {\n ...(args.landing ? { landingSlug: String(args.landing) } : {}),\n ...(limit === undefined ? {} : { limit }),\n });\n writeJsonEnvelope({\n ok: true,\n data: response.data,\n hints: buildHistoryHints(response.data.tests, args.landing === undefined ? undefined : String(args.landing)),\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.finish\",\n description: \"End a test now and send all its traffic to the version you name\",\n args: {\n id: ID_ARG,\n keep: {\n type: \"string\",\n description:\n \"Which version stays live: `original` or `variant`. Required — the verdict is a recommendation and this is the decision. A test that has not concluded can be ended too; it is recorded as inconclusive, never as a finding. Going against a verdict is allowed and is recorded as such.\",\n required: true,\n },\n reason: REASON_ARG,\n learning: LEARNING_ARG,\n },\n});\n\nconst END_REASONS = [\"numbers_clear\", \"not_settling\", \"page_changing\", \"test_flawed\"] as const;\n\n/** What to do next, once a test has ended. */\nfunction finishHints(\n data: ExperimentFinishResponse,\n given: { reason: string | undefined; learning: unknown },\n): string[] {\n const { reason } = given;\n const args = { learning: given.learning };\n return [\n `Done. Everyone now sees the ${data.survivor === \"variant\" ? \"new variant\" : \"original\"}.`,\n ...(data.againstVerdict\n ? [\n `You kept the ${data.survivor === \"variant\" ? \"new variant\" : \"original\"} although the numbers favoured the other version (${data.verdict}). That is recorded on the test — say why in the write-up.`,\n ]\n : []),\n ...(data.verdict === \"keep_running\"\n ? [\n \"This test had not concluded, so it is recorded as inconclusive — nobody found out. Never report it as no difference.\",\n ]\n : []),\n ...(data.survivor === \"variant\"\n ? [\n \"Now run `baker experiment fold` — it moves the winning version into the page itself and archives the other one. Until that lands the page is served by a rewrite, and it cannot be tested again.\",\n ]\n : []),\n ...(args.learning || data.verdict === \"keep_running\"\n ? []\n : [\n 'Write down what this taught while it is fresh: `baker experiment update --id <id> --learning \"…\"` — one or two sentences the client should believe about this page now. It is what the next test on this page starts from.',\n ]),\n ...(reason\n ? []\n : [\n \"No `--reason` was given, so the record says what the numbers had reached but not why anyone stopped looking. Next time pass one: numbers_clear, not_settling, page_changing or test_flawed.\",\n ]),\n ];\n}\n\nconst finishCommand = defineCommand({\n meta: {\n name: \"finish\",\n description:\n \"End a test now and send all its traffic to the version you name. Takes effect within seconds — nothing to publish. Read `baker experiment status` first: `winner` says which version the numbers favour, `keep_running` means they have not spoken yet and ending records `inconclusive`. Keeping the variant owes a `fold`. A test staged in this session and not yet published is simply taken back off it.\",\n },\n args: {\n id: ID_ARG,\n keep: {\n type: \"string\",\n description: \"Which version stays live: `original` or `variant`.\",\n required: true,\n },\n reason: REASON_ARG,\n learning: LEARNING_ARG,\n },\n run: async ({ args }) => {\n const keep = String(args.keep);\n if (keep !== \"original\" && keep !== \"variant\") {\n fail(\"`--keep` is either `original` or `variant` — which version should everyone see from now on?\");\n }\n const reason = args.reason === undefined ? undefined : String(args.reason);\n if (reason !== undefined && !END_REASONS.some((known) => known === reason)) {\n fail(`\\`--reason\\` is one of ${END_REASONS.join(\", \")} — why is this test being ended?`);\n }\n try {\n const response = await apiPost<{ ok: true; data: ExperimentFinishResponse | { unstaged: true } }>(\n \"/api/experiments/finish\",\n {\n experimentId: String(args.id),\n keep,\n ...(reason ? { reason } : {}),\n ...(args.learning ? { learning: String(args.learning) } : {}),\n },\n );\n if (\"unstaged\" in response.data) {\n writeJsonEnvelope({\n ok: true,\n data: response.data,\n hints: [\"That test had not been published yet, so it was taken back off this session. Nothing was split.\"],\n });\n return;\n }\n const data = response.data;\n writeJsonEnvelope({ ok: true, data, hints: finishHints(data, { reason, learning: args.learning }) });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.cancel\",\n description: \"Call a test off — take a staged one back off the session, or end a live one keeping the original\",\n args: { id: ID_ARG },\n});\n\nconst cancelCommand = defineCommand({\n meta: {\n name: \"cancel\",\n description:\n \"Call a test off. A test staged in this session and not yet published is simply taken back off it — nothing was split. A test that is live is ended now with everyone sent back to the original: what the numbers had said is recorded as it stood (usually `inconclusive`), and the variant page stays in the workspace, unserved. `finish --keep` is the same act with the choice of version; this is the shortcut for “stop, keep the page as it is”.\",\n },\n args: { id: ID_ARG },\n run: async ({ args }) => {\n try {\n const response = await apiPost<{ ok: true; data: ExperimentFinishResponse | { unstaged: true } }>(\n \"/api/experiments/finish\",\n { experimentId: String(args.id), keep: \"original\" },\n );\n if (\"unstaged\" in response.data) {\n writeJsonEnvelope({\n ok: true,\n data: response.data,\n hints: [\"That test had not been published yet, so it was taken back off this session. Nothing was split.\"],\n });\n return;\n }\n const data = response.data;\n writeJsonEnvelope({\n ok: true,\n data,\n hints: [\n \"Ended. Everyone sees the original page now, and the split stopped within seconds.\",\n ...(data.verdict === \"keep_running\"\n ? [\n \"It had not concluded, so it is recorded as inconclusive — nobody found out. Never report it as no difference.\",\n ]\n : data.againstVerdict\n ? [\n `The numbers favoured the new variant (${data.verdict}), so this is recorded as a decision against them. Say why in the write-up.`,\n ]\n : []),\n \"The variant page is still in the workspace and served to nobody. Run `baker experiment fold` to archive it, or leave it for a later test.\",\n ],\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.update\",\n description:\n \"Change what a test says about itself — its wording always, its measurement only while it is still staged\",\n args: {\n id: ID_ARG,\n because: { ...BECAUSE_ARG, required: false },\n change: { ...CHANGE_ARG, required: false },\n evidence: EVIDENCE_ARG,\n expect: { ...EXPECT_ARG, description: \"Staged tests only. `increase` or `decrease`.\" },\n goal: { ...GOAL_ARG, description: \"Staged tests only. The event the test is read on, by key.\" },\n variantGoal: {\n ...VARIANT_GOAL_ARG,\n description: \"Staged tests only. The new version's own event, when it differs.\",\n },\n lift: { ...LIFT_ARG, description: \"Staged tests only. The smallest lift worth detecting.\" },\n learning: LEARNING_ARG,\n },\n});\n\nconst updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n \"Change what a test says about itself. The observation (`--because`), the change in the client's words (`--change`) and the evidence cited (`--evidence`) can change at any time — they describe the test, and a write-up corrected after the fact is still the write-up of the same test. On a FINISHED test, `--learning` writes down what it taught. What the test MEASURES — `--goal`, `--lift`, `--expect` — can only change while it is still staged in this session: once visitors have been split, moving the goal or the finish line is how a result gets argued into existence. To measure something else on a live test, `finish` it and start a new one.\",\n },\n args: {\n id: ID_ARG,\n because: { ...BECAUSE_ARG, required: false },\n change: { ...CHANGE_ARG, required: false },\n evidence: EVIDENCE_ARG,\n expect: { ...EXPECT_ARG, description: \"Staged tests only. `increase` or `decrease`.\" },\n goal: { ...GOAL_ARG, description: \"Staged tests only. The event the test is read on, by key.\" },\n variantGoal: {\n ...VARIANT_GOAL_ARG,\n description: \"Staged tests only. The new version's own event, when it differs.\",\n },\n lift: { ...LIFT_ARG, description: \"Staged tests only. The smallest lift worth detecting.\" },\n learning: LEARNING_ARG,\n },\n run: async ({ args, rawArgs }) => {\n const request = buildUpdateRequest(args, rawArgs);\n if (\"error\" in request) fail(request.error);\n try {\n const response = await apiPost<{ ok: true; data: ExperimentUpdateResponse }>(\"/api/experiments/update\", request);\n writeJsonEnvelope({\n ok: true,\n data: response.data,\n hints: [\n response.data.staged\n ? \"Updated and re-sized. It still starts when this session is published.\"\n : request.learning !== undefined\n ? \"Updated. What this test taught is on its record now, and `plan` hands it to the next test on this page.\"\n : \"Updated. The test keeps running exactly as it was — only its wording changed.\",\n `It now reads: ${response.data.hypothesisStatement}`,\n ],\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.pause\",\n description: \"Switch a test's split off — everyone sees the original until it is resumed\",\n args: { id: ID_ARG },\n});\n\nconst pauseCommand = defineCommand({\n meta: {\n name: \"pause\",\n description:\n \"Switch the split off now. Everyone sees the original; visitors already assigned keep their side, so resuming continues the same test rather than starting a new one. Use it when the new variant has to come down for a while — a broken price, a campaign that needs the original — without throwing the test away.\",\n },\n args: { id: ID_ARG },\n run: async ({ args }) => {\n try {\n await apiPost(\"/api/experiments/pause\", { experimentId: String(args.id) });\n writeJsonEnvelope({\n ok: true,\n data: { paused: true },\n hints: [\n `Paused. Everyone sees the original page now. \\`baker experiment resume --id ${String(args.id)}\\` restarts the split with the same sides.`,\n ],\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.resume\",\n description:\n \"Switch a paused test's split back on — or, for a test published on hold, switch it on for the first time\",\n args: { id: ID_ARG },\n});\n\nconst resumeCommand = defineCommand({\n meta: {\n name: \"resume\",\n description:\n \"Switch a paused test's split back on. Visitors already assigned see the same side they saw before. A test published on hold (`start --hold`) starts here, and is dated from now.\",\n },\n args: { id: ID_ARG },\n run: async ({ args }) => {\n try {\n await apiPost(\"/api/experiments/resume\", { experimentId: String(args.id) });\n writeJsonEnvelope({\n ok: true,\n data: { resumed: true },\n hints: [\"Resumed. The split is back on, with the same sides.\"],\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nregisterSchema({\n command: \"experiment.fold\",\n description: \"Make the page's own content the version that won, and archive the one that lost\",\n args: {\n id: { type: \"string\", description: \"One test, by its id. Omit to fold every test that owes one\", required: false },\n },\n});\n\nconst foldCommand = defineCommand({\n meta: {\n name: \"fold\",\n description:\n \"Finish the job a finished test started: move the winning version into the page's own folder, archive the version that lost, and delete the extra page. Until this runs, the page is served by a rewrite at the edge while its own source says something else — so the repo does not say what the URL serves, and the page cannot be tested again. Start here: run it with no arguments after any test ends, then publish.\",\n },\n args: {\n id: { type: \"string\", description: \"One test, by its id. Omit to fold every test that owes one\", required: false },\n },\n run: async ({ args }) => {\n try {\n const asked = await apiPost<{ ok: true; data: ExperimentFoldResponse }>(\"/api/experiments/fold\", {\n ...(args.id ? { experimentId: String(args.id) } : {}),\n });\n const owed = asked.data.owed;\n if (owed.length === 0) {\n writeJsonEnvelope({\n ok: true,\n data: { folded: [] },\n hints: [\"Nothing to fold — every finished test's result is already the page's own content.\"],\n });\n return;\n }\n\n const folded: FoldResult[] = [];\n const failures: string[] = [];\n for (const target of owed) {\n const result = await foldExperiment(process.cwd(), target);\n // One page that cannot be folded must not hold back the others: each is\n // an independent test on an independent page, and stopping would leave\n // every later one served by a rewrite for another week.\n if (\"error\" in result) failures.push(`${target.landingSlug}: ${result.error}`);\n else folded.push(result);\n }\n\n if (folded.length > 0) {\n // Name the ones that were written, never \"the company\". A target whose\n // fold failed has to stay owed: recorded, it would lose its promotion\n // when the build lands and the page would serve the version that lost.\n await apiPost(\"/api/experiments/fold\", {\n applied: true,\n experimentIds: folded.map((result) => result.experimentId),\n ...(args.id ? { experimentId: String(args.id) } : {}),\n });\n }\n\n writeJsonEnvelope({\n ok: true,\n data: { folded, failures },\n hints: [\n folded.length > 0\n ? `Publish this session to make it real. Until the build lands, the winning version is still served by a rewrite — Baker drops that by itself once the new pages are live, so there is nothing to do afterwards.`\n : \"Nothing was folded.\",\n ...(failures.length > 0 ? [`Could not fold: ${failures.join(\"; \")}`] : []),\n ...(folded.length > 0\n ? [\n `The version that lost is kept at ${folded.map((f) => f.archivedTo).join(\", \")} — a self-contained copy, so it still shows what was actually measured after the page moves on. Never edit it.`,\n ]\n : []),\n ],\n });\n } catch (error) {\n reportApiError(error);\n }\n },\n});\n\nexport const experimentCommand = defineCommand({\n meta: {\n name: \"experiment\",\n description:\n \"Run an A/B test between a landing page and a new variant of it, and be told which one is better. Always `plan` first: most pages do not get enough traffic to settle most questions, and a test that cannot conclude still produces a number somebody will act on. Nothing ends a test on its own — `finish` does, when you or the client decide.\",\n },\n subCommands: {\n plan: planCommand,\n start: startCommand,\n update: updateCommand,\n status: statusCommand,\n history: historyCommand,\n pause: pauseCommand,\n resume: resumeCommand,\n finish: finishCommand,\n cancel: cancelCommand,\n fold: foldCommand,\n },\n});\n\n/**\n * Everything about this test that only the workspace can answer, read once.\n *\n * All of it is best-effort: a graph that cannot be walked costs the brief its\n * detail, never the test. Gathered here rather than inline so the command's\n * handler stays a request and a response.\n */\nasync function readStartContext(landing: string, variant: string) {\n const root = process.cwd();\n // Read off the workspace's own import graph, so the review says which section\n // is under test rather than only which two pages are.\n const composition = await readComposition(root, landing, variant);\n const [controlForms, variantForms, landingInternalId, variantInternalId] = await Promise.all([\n readForms(root, landing),\n readForms(root, variant),\n // Each page's own identity, so a renamed folder cannot detach the test —\n // the variant has no row in Baker until this session is published.\n readPageInternalId(root, landing),\n readPageInternalId(root, variant),\n ]);\n return {\n composition,\n newForms: formsOnlyIn(variantForms, controlForms),\n // Whether the two versions still fire the company's conversions on the same\n // action. Nothing downstream can ask this — a split can be perfect while the\n // two pages disagree about what an event means — and the only place the\n // answer exists is the workspace this command is already standing in.\n drift: await readMeasurementDrift(root, landing, composition),\n landingInternalId,\n variantInternalId,\n };\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { ExperimentComposition } from \"@baker/api/experiments\";\nimport { landingGraphFiles } from \"../landing/import-graph.ts\";\n\n/**\n * What the two arms of a test are actually made of, read off the real import\n * graph rather than off whatever was typed when the page was built.\n *\n * A variant imports the control's sections and owns a copy of only the one\n * under test. So the split falls straight out of the variant's own transitive\n * graph: a section that lives under the variant's folder is the thing being\n * tested, and one that lives under the control's is shared with it.\n *\n * Computed at the moment the test starts, not passed along from\n * `baker landing variant`, because the page can be edited in between — and a\n * brief that describes the fork as it was when the folder was created would\n * describe a test that is not the one about to run.\n */\n\n/** Sections only. `index.astro` is the page, and every variant owns its own. */\nfunction sectionsUnder(files: readonly string[], slug: string): string[] {\n const prefix = `src/pages/${slug}/`;\n return files.filter((file) => file.startsWith(prefix) && !file.slice(prefix.length).startsWith(\"index.\")).sort();\n}\n\n/**\n * Pure half, so the rule is testable without a fixture tree on disk.\n *\n * `src/layouts/**` and `src/components/**` are deliberately absent from both\n * lists. They reach every page and are force-synced onto every client, so\n * naming them as \"shared with the control\" would bury the one fact this exists\n * to state — that the sections of these two pages are the same files.\n */\nexport function compositionOf(\n controlSlug: string,\n variantSlug: string,\n variantGraph: readonly string[],\n): ExperimentComposition {\n return {\n forked: sectionsUnder(variantGraph, variantSlug),\n shared: sectionsUnder(variantGraph, controlSlug),\n };\n}\n\n/**\n * The same answer, read from the workspace.\n *\n * Returns `undefined` rather than throwing when the graph cannot be walked: a\n * brief without the section names is worse than one with them and much better\n * than a test that could not be started. The backend takes the field as\n * optional for the same reason.\n */\nexport async function readComposition(\n root: string,\n controlSlug: string,\n variantSlug: string,\n): Promise<ExperimentComposition | undefined> {\n try {\n const graph = await landingGraphFiles(root, variantSlug);\n return compositionOf(controlSlug, variantSlug, [...graph]);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Ways a Form is named in source, each anchored to a quoted string so prose\n * cannot match — the same three shapes `detect-landing-flows.mjs` reads in the\n * scaffold: an import of the flow's module, the rendered markup, its selector.\n */\nconst FLOW_REFERENCE_RES = [\n /[\"'][^\"']*flow-engine\\/flows\\/([A-Za-z0-9._-]+)/g,\n /data-flow-form\\s*=\\s*[\"']([^\"']+)[\"']/g,\n /flowName\\s*=\\s*[\"']([^\"']+)[\"']/g,\n];\n\n/** The Forms these sources reference, among the ones that exist. Pure, for the tests. */\nexport function formsReferenced(texts: readonly string[], knownFlows: ReadonlySet<string>): string[] {\n const found = new Set<string>();\n for (const text of texts) {\n for (const re of FLOW_REFERENCE_RES) {\n for (const match of text.matchAll(re)) {\n const flow = match[1];\n if (flow && knownFlows.has(flow)) found.add(flow);\n }\n }\n }\n return [...found].sort();\n}\n\n/** The Forms one version uses that the other does not. */\nexport function formsOnlyIn(these: readonly string[], those: readonly string[]): string[] {\n const other = new Set(those);\n return these.filter((flow) => !other.has(flow));\n}\n\nasync function knownFlows(root: string): Promise<Set<string>> {\n try {\n const entries = await readdir(path.join(root, \"src/lib/flow-engine/flows\"), { withFileTypes: true });\n return new Set(entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name));\n } catch {\n return new Set();\n }\n}\n\n/**\n * The Forms a version of the page renders, read off its import graph.\n *\n * Asked of both versions at `start`, because the goal is a conversion NAME and\n * a name counts only the events named under it: a variant that swaps the\n * page's Form for a new one converts on an event nobody has named yet, and a\n * test read on the old Form's ending would report the new version as harmful\n * for the whole of its run. Best effort — an unreadable tree returns nothing,\n * and the hint simply does not fire.\n */\nexport async function readForms(root: string, slug: string): Promise<string[]> {\n try {\n const [files, flows] = await Promise.all([landingGraphFiles(root, slug), knownFlows(root)]);\n if (flows.size === 0) return [];\n const texts = await Promise.all(\n [...files]\n .filter((file) => /\\.(astro|ts|tsx|js|mjs)$/.test(file))\n .map((file) => readFile(path.join(root, file), \"utf8\")),\n );\n return formsReferenced(texts, flows);\n } catch {\n return [];\n }\n}\n","import { type Dirent, statSync } from \"node:fs\";\nimport { cp, mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { variantNumberOf } from \"@baker/api/experiments/variants\";\nimport { landingGraphFiles } from \"../landing/import-graph.ts\";\nimport { repointMoved } from \"../landing/repoint.ts\";\n\n/**\n * Folding a finished test back into the page it was about.\n *\n * The resting state a test used to leave behind: `/oferta/` served the\n * variant's file through a permanent rewrite at the edge, `/oferta--3/` served\n * the same file at its own indexed URL, and `src/pages/oferta/` was served\n * nowhere. One page with two addresses, one address with no page, and a repo\n * that no longer said what a URL serves.\n *\n * The fold ends that. The page keeps its slug, its `_definition.md` and its\n * `internalId` — so history, leads, `landing_metadata` and every ad pointing at\n * the URL are untouched — and its content becomes whichever variant won. The\n * variant folder stops existing.\n *\n * ## Why the loser is archived rather than deleted\n *\n * A test's whole value is the finding, and the finding is unreadable six months\n * later if the version that lost is gone. The archive lives at\n * `src/_variants/<page internalId>/<n>/`, and every part of that path is a\n * decision:\n *\n * - **Outside `src/pages/`**, because `getLandingsOnRef` does not filter\n * `_`-prefixed folders while `discoverLandings` does — anything under\n * `src/pages/` that classify excludes and `git ls-tree` includes becomes a\n * permanent phantom deleted landing on every sync. And because `walkFiles`\n * recurses into `_`-dirs, so an archive under the page would fold into the\n * page's own import graph, move its source fingerprint, and make the\n * anti-slop gate re-score a page nobody touched.\n * - **Keyed on `internalId`, not the slug**, so renaming the page cannot orphan\n * its own history. Same identity-over-address rule as everything else here.\n * - **Numbered by the test's variant number**, which is never reused.\n * - **No `_definition.md`.** The collection loader's `**\\/_definition.md` glob is\n * depth-agnostic, so one would make the archive a collection entry and a\n * sitemap URL that 404s. It is a record, not a landing.\n *\n * ## Why the archive is self-contained\n *\n * A variant borrows the page's sections and forks only the one under test —\n * that sharing is what makes the test measure one difference. An archive that\n * kept those imports pointing at the live page would silently rewrite itself on\n * the page's next edit, which makes it a record of nothing. So every file the\n * archived arm renders is copied in and repointed to the copy.\n *\n * Self-contained stops at the arm's own folders. The shared library —\n * `src/layouts/**`, `src/components/**`, `src/lib/**` — is referenced rather\n * than copied, because snapshotting the whole scaffold for every test any\n * client ever ran is not affordable. Those references are still rewritten, for\n * the depth reason in `repointIntoArchive`.\n *\n * ## Why the archive is out of the verify gate\n *\n * A record nobody may edit cannot also be something a gate can turn red, and it\n * cannot be something the gate rewrites either — the first leaves destroying\n * the record as the only way past, the second does the destroying itself. Four\n * scopes in the scaffold therefore exclude `src/_variants`, pinned from this\n * side by `archive-scope.parity.test.ts` because the scaffold ships standalone\n * and cannot import this file: typecheck (`tsconfig.json`, and\n * `tsconfig.sandbox.json` separately — `exclude` replaces rather than merges),\n * biome (`_biome.json`) and the CSS import formatter, both of which write.\n *\n * Knip is the fourth and is not an exclusion at all. Dropping the archive from\n * its graph would make a shared component only an archive imports read as\n * unused, and deleting it on knip's word is this file's own \"record of nothing\"\n * arriving quietly instead of loudly. So every archived file is an `entry`: its\n * imports count as used, and `includeEntryExports: false` keeps its own exports\n * out of the report. Making only the arm's `index.astro` an entry does neither\n * — a section's export then reports unused, on a file nobody may edit.\n *\n * What is NOT excluded, deliberately: the validators that walk `src/**` and can\n * only warn (`validate-mux-video-library` and friends). A warning does not\n * block a publish and does not rewrite anything, so it fails neither half of\n * the rule above. It is noise on a file nobody can act on, and worth removing —\n * but not by widening a rule whose whole value is that it is about red gates\n * and writers.\n */\n\n/** Where a page's past versions live. Never built, never served, never synced. */\nexport const ARCHIVE_ROOT = \"src/_variants\";\n\nexport interface FoldTarget {\n readonly experimentId: string;\n readonly landingSlug: string;\n readonly variantSlug: string;\n readonly survivor: \"control\" | \"variant\";\n readonly landingInternalId: string | null;\n}\n\nexport interface FoldResult {\n readonly experimentId: string;\n readonly page: string;\n readonly archivedTo: string;\n readonly written: string[];\n readonly removed: string[];\n}\n\n/** Quoted relative specifiers: imports, and `src=\"./_images/…\"` in markup alike. */\nconst QUOTED_RELATIVE = /(['\"])(\\.\\.?\\/[^'\"]*)\\1/g;\n\nfunction posix(p: string): string {\n return p.split(path.sep).join(\"/\");\n}\n\nasync function isDir(p: string): Promise<boolean> {\n try {\n return (await stat(p)).isDirectory();\n } catch {\n return false;\n }\n}\n\n/** Every file under `dir`, recursively, as paths relative to it. */\nasync function filesUnder(dir: string, prefix = \"\"): Promise<string[]> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const out: string[] = [];\n for (const entry of entries) {\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) out.push(...(await filesUnder(path.join(dir, entry.name), rel)));\n else out.push(rel);\n }\n return out.sort();\n}\n\nconst TEXT_EXT = /\\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte|md|json|css)$/;\n\n/**\n * Where a file lands inside the snapshot, or null when it is not `base`'s.\n *\n * The arm's own files keep their place; the ones it borrowed from the page keep\n * the place they had under the page. Two disjoint trees flattened into one, so\n * a borrowed `_components/Proof.astro` and a forked `_components/Hero.astro`\n * sit side by side exactly as the page rendered them.\n */\nfunction archiveRelPath(abs: string, base: string): string | null {\n if (!abs.startsWith(base + path.sep)) return null;\n return posix(path.relative(base, abs));\n}\n\n/**\n * Copy one arm into an archive that renders the same thing forever.\n *\n * Only the two landing folders are pulled in. `src/components/**` and\n * `src/layouts/**` are the shared library rather than this page's content, and\n * the archive is never built — copying them would snapshot the whole scaffold\n * for every test any client ever ran.\n */\nasync function archiveArm(opts: {\n root: string;\n armDir: string;\n pageDir: string;\n archiveDir: string;\n armSlug: string;\n}): Promise<string[]> {\n const { root, armDir, pageDir, archiveDir, armSlug } = opts;\n const targets = await archiveContents({ root, armDir, pageDir, armSlug });\n const archivedBySource = new Map([...targets].map(([rel, abs]) => [abs, path.join(archiveDir, rel)]));\n const written: string[] = [];\n for (const [rel, abs] of [...targets].sort()) {\n const dest = path.join(archiveDir, rel);\n await mkdir(path.dirname(dest), { recursive: true });\n if (!TEXT_EXT.test(rel)) {\n await cp(abs, dest);\n } else {\n const text = await readFile(abs, \"utf8\");\n await writeFile(dest, repointIntoArchive(text, abs, dest, archivedBySource), \"utf8\");\n }\n written.push(posix(path.relative(root, dest)));\n }\n return written;\n}\n\n/**\n * Every file the archive holds: archive-relative path → where it is copied from.\n *\n * Two passes, so the result does not depend on set iteration order — the page's\n * files first, then the arm's own on top. Where both hold a path the arm's\n * wins, and that fork is the entire difference the test was measuring.\n */\nasync function archiveContents(opts: {\n root: string;\n armDir: string;\n pageDir: string;\n armSlug: string;\n}): Promise<Map<string, string>> {\n const { root, armDir, pageDir, armSlug } = opts;\n const graph = await landingGraphFiles(root, armSlug);\n const reachable = new Set([...graph].map((rel) => path.resolve(root, rel)));\n // Assets are not in the import graph but are part of what the arm was. The\n // graph adds only the files it BORROWED from the page.\n for (const rel of await filesUnder(armDir)) reachable.add(path.join(armDir, rel));\n\n const sorted = [...reachable].sort();\n const targets = new Map<string, string>();\n for (const base of [pageDir, armDir]) {\n for (const abs of sorted) {\n const rel = archiveRelPath(abs, base);\n // Outside this folder, or not a landing — a `_definition.md` here would\n // become a collection entry and therefore a URL that 404s.\n if (rel === null || rel === \"_definition.md\") continue;\n targets.set(rel, abs);\n }\n }\n return targets;\n}\n\n/**\n * Re-aim one archived file's relative paths, so every one of them still names\n * the file it named when this arm was live.\n *\n * Two kinds, and both have to move. A specifier that resolves to something the\n * archive holds points at that copy — that is what makes the snapshot\n * self-contained. A specifier that escapes the arm's folder — the shared\n * layout, a component from `src/components/` — is referenced rather than\n * copied, deliberately: snapshotting `src/components/**` for every test any\n * client ever ran is not affordable.\n *\n * Leaving that second kind exactly as written was the first version of this,\n * and it was wrong for a reason that is pure arithmetic: the archive sits at\n * `src/_variants/<id>/<n>/`, one folder deeper than the `src/pages/<slug>/` it\n * was copied from, so every `../../layouts/Layout.astro` it inherited lands on\n * `src/_variants/layouts/Layout.astro` and names nothing at all. A reference\n * that drifts with the shared library still says which module rendered here; a\n * reference to a path that cannot exist says nothing, and it is what made the\n * first fold any client ever ran fail its own typecheck 16 times over.\n */\nfunction repointIntoArchive(\n text: string,\n sourceAbs: string,\n destAbs: string,\n archivedBySource: ReadonlyMap<string, string>,\n): string {\n const fromDir = path.dirname(sourceAbs);\n const toDir = path.dirname(destAbs);\n return text.replace(QUOTED_RELATIVE, (match, quote: string, spec: string, offset: number) => {\n const [specPath, suffix] = splitSuffix(spec);\n const target = path.resolve(fromDir, specPath);\n const resolved =\n resolveInArchive(target, archivedBySource) ?? resolveOnDisk(target, isImportPosition(text, offset));\n if (resolved === null) return match;\n const rel = posix(path.relative(toDir, resolved));\n return `${quote}${rel.startsWith(\".\") ? rel : `./${rel}`}${suffix}${quote}`;\n });\n}\n\n/**\n * `\"./shot.png?w=800\"` → `[\"./shot.png\", \"?w=800\"]`.\n *\n * A Vite query or a fragment is not part of the filename, and resolving one as\n * if it were is how `./_images/shot.png?w=800` missed the archive's own copy of\n * `shot.png` and got re-aimed at the variant folder the fold then deleted.\n */\nfunction splitSuffix(spec: string): [string, string] {\n const cut = spec.search(/[?#]/);\n return cut === -1 ? [spec, \"\"] : [spec.slice(0, cut), spec.slice(cut)];\n}\n\n/** Spellings of one specifier that name the same file: the path, or an elided extension. */\nconst EXTENSIONS = [\"\", \".astro\", \".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\"];\n\n/**\n * An extensionless specifier still names a file the archive holds.\n *\n * `/index.*` is a candidate here and deliberately not in `resolveOnDisk`: this\n * map holds files the archive really contains, so a hit is proof. On disk it\n * would be a guess, and the wrong one — see below.\n */\nfunction resolveInArchive(base: string, archivedBySource: ReadonlyMap<string, string>): string | null {\n for (const suffix of [...EXTENSIONS, \"/index.astro\", \"/index.ts\"]) {\n const hit = archivedBySource.get(base + suffix);\n if (hit !== undefined) return hit;\n }\n return null;\n}\n\n/**\n * Is the quote at `offset` the start of an import specifier, or of a value?\n *\n * The distinction decides whether `../../components/Widget` may be read as\n * `Widget/index.astro`. Both a directory import and `<a href=\"../gracias/\">`\n * name a directory that exists, so nothing about the path itself separates\n * them — only where it is written does. `import \"./styles.css\"` has no `from`,\n * which is why a bare `import` counts.\n */\nfunction isImportPosition(text: string, offset: number): boolean {\n return /\\b(?:from|import|require)\\s*\\(?\\s*$/.test(text.slice(Math.max(0, offset - 64), offset));\n}\n\n/**\n * The same question asked of the repo, for the references the archive does not\n * hold — the shared layout, a component from `src/components/`.\n *\n * A **file**, never a directory, and that is the whole precision of it.\n * `QUOTED_RELATIVE` matches any quoted relative string, so `<a href=\"../gracias/\">`\n * and `const redirect = \"../thanks\"` arrive here looking exactly like an\n * import. Those are not paths into the source tree, and rewriting one restates\n * the journey the snapshot was measuring as a path through the repo.\n *\n * \"Does something live there\" is too weak to separate them: a link usually\n * points at a sibling page, whose directory exists. `/index.*` is the case\n * where that matters most in both directions — `import X from \"../../components/Widget\"`\n * is a real shape (`landing/import-graph.ts` resolves it, so an arm can hold\n * one), and `href=\"../gracias/\"` resolves to that page's own entry file. So the\n * index candidates are offered only where an import can actually be written,\n * and the `isFile` check governs everywhere.\n */\nfunction resolveOnDisk(base: string, allowDirectoryIndex: boolean): string | null {\n const candidates = allowDirectoryIndex ? [...EXTENSIONS, \"/index.astro\", \"/index.ts\", \"/index.js\"] : EXTENSIONS;\n for (const suffix of candidates) {\n try {\n if (statSync(base + suffix).isFile()) return base + suffix;\n } catch {\n // Nothing at that path. Try the next spelling.\n }\n }\n return null;\n}\n\n/**\n * Move the winning variant's files into the page's own folder.\n *\n * `_definition.md` is deliberately not copied: the page keeps its identity, and\n * that identity is what every analytics row, every lead and every ad already\n * points at. The variant's own definition dies with the folder.\n */\nasync function promoteVariantFiles(opts: { root: string; pageDir: string; variantDir: string }): Promise<string[]> {\n const { root, pageDir, variantDir } = opts;\n const written: string[] = [];\n for (const rel of await filesUnder(variantDir)) {\n if (rel === \"_definition.md\") continue;\n const from = path.join(variantDir, rel);\n const to = path.join(pageDir, rel);\n await mkdir(path.dirname(to), { recursive: true });\n if (!TEXT_EXT.test(rel)) {\n await cp(from, to);\n } else {\n const text = await readFile(from, \"utf8\");\n // A borrowed section written as `../oferta/_components/Proof.astro`\n // becomes `./_components/Proof.astro`; a forked one moves with the file\n // and stays `./_components/Hero.astro`; the shared layout is unchanged.\n await writeFile(\n to,\n repointMoved(text, {\n fromDir: path.dirname(from),\n toDir: path.dirname(to),\n movedFrom: variantDir,\n movedTo: pageDir,\n }),\n \"utf8\",\n );\n }\n written.push(posix(path.relative(root, to)));\n }\n return written;\n}\n\n/**\n * The record beside the snapshot: what this version was and why it stopped\n * being live.\n *\n * JSON rather than markdown with frontmatter, and named `_variant.json` rather\n * than `_definition.md`, for the reason above — a `_definition.md` anywhere\n * under `src/` becomes a landing collection entry and therefore a URL.\n */\nfunction archiveRecord(target: FoldTarget, variantNumber: number): string {\n return `${JSON.stringify(\n {\n experimentId: target.experimentId,\n page: target.landingSlug,\n pageInternalId: target.landingInternalId,\n variant: target.variantSlug,\n variantNumber,\n // Which arm this snapshot is. On a control win the variant lost; on a\n // variant win what lost is the page's own previous content, which never\n // had a number of its own — so it is filed under the test that rejected\n // it, which is the only number that means anything about it.\n arm: target.survivor === \"variant\" ? \"page-before-this-test\" : \"variant\",\n },\n null,\n 2,\n )}\\n`;\n}\n\n/**\n * Fold one finished test in, and report every path touched.\n *\n * Refuses rather than half-applies: a variant folder that is already gone means\n * somebody folded this test by hand, and writing an archive of the page's\n * current content over it would record the wrong thing as the loser.\n */\nexport async function foldExperiment(root: string, target: FoldTarget): Promise<FoldResult | { error: string }> {\n const pageDir = path.resolve(root, \"src/pages\", target.landingSlug);\n const variantDir = path.resolve(root, \"src/pages\", target.variantSlug);\n const variantNumber = variantNumberOf(target.variantSlug);\n\n if (variantNumber === null) {\n return {\n error: `“${target.variantSlug}” is not a variant of “${target.landingSlug}”, so there is nothing to fold`,\n };\n }\n if (!(await isDir(pageDir))) {\n return { error: `There is no page at src/pages/${target.landingSlug}/` };\n }\n if (!(await isDir(variantDir))) {\n return { error: `src/pages/${target.variantSlug}/ is already gone — this test looks folded in already` };\n }\n\n const archiveKey = target.landingInternalId ?? target.landingSlug;\n const archiveDir = path.resolve(root, ARCHIVE_ROOT, archiveKey, String(variantNumber));\n await rm(archiveDir, { recursive: true, force: true });\n await mkdir(archiveDir, { recursive: true });\n\n // The arm that stops being served is the one worth keeping. When the page as\n // it was won, that is the variant; when the new variant won, it is the page's\n // own outgoing content.\n const written = await archiveArm({\n root,\n armDir: target.survivor === \"variant\" ? pageDir : variantDir,\n pageDir,\n archiveDir,\n armSlug: target.survivor === \"variant\" ? target.landingSlug : target.variantSlug,\n });\n await writeFile(path.join(archiveDir, \"_variant.json\"), archiveRecord(target, variantNumber), \"utf8\");\n written.push(posix(path.join(ARCHIVE_ROOT, archiveKey, String(variantNumber), \"_variant.json\")));\n\n if (target.survivor === \"variant\") {\n written.push(...(await promoteVariantFiles({ root, pageDir, variantDir })));\n }\n\n await rm(variantDir, { recursive: true, force: true });\n\n return {\n experimentId: target.experimentId,\n page: target.landingSlug,\n archivedTo: posix(path.join(ARCHIVE_ROOT, archiveKey, String(variantNumber))),\n written,\n removed: [`src/pages/${target.variantSlug}`],\n };\n}\n","/**\n * Why a test is being run, in the shape the rest of the feature can read.\n *\n * ## Why this is not a sentence\n *\n * The canonical hypothesis is \"Because **[observation]**, if we **[change]**,\n * then **[metric]** will **[direction]** by about **[magnitude]**.\" Three of\n * those five parts are already first-class, machine-readable and immutable\n * elsewhere in this feature:\n *\n * - the change → `plan.variantSlug`, and exactly which component was forked\n * - the metric → {@link ExperimentGoal}, fixed at creation and refused if it\n * has never fired\n * - the magnitude → `plan.minDetectableRelativeLift`\n *\n * A free-text sentence therefore restates three stored fields in a worse form —\n * one that can silently disagree with them, because nothing compares the two —\n * while burying the one part that has nowhere else to live. Storing the parts\n * removes the disagreement by construction: {@link renderHypothesis} is the\n * only thing allowed to produce the sentence, and it reads the goal and the\n * lift from the plan rather than from the prose.\n *\n * ## Why `expect` is here\n *\n * It looks like decoration and it is the load-bearing field. A test is not\n * symmetric: \"the new hero converts better\" and \"the new hero converts worse\"\n * are different claims, and the verdict already knows which arm won. Pairing\n * the two gives {@link hypothesisOutcome}, which is derived and never entered —\n * so a `winner` the CONTROL won stops being announced as \"we have a winner\"\n * and starts being reported as what it is, the most useful thing a test can\n * find: the change made it worse.\n *\n * Without `expect` that finding is unreachable, because nothing in the stored\n * plan says which direction was hoped for.\n */\n\nimport { z } from \"zod\";\n\n/**\n * Where the observation came from.\n *\n * A closed set rather than free text, because the point of recording it is to\n * be able to ask later which kinds of evidence produced tests that held. The\n * names are the tools the agent already has (`baker ga4`, `baker gsc`,\n * `baker ads`, the Clarity MCP, the research agents, the inspiration library),\n * plus the two honest non-tool answers.\n *\n * `hunch` is deliberately spellable. A hypothesis with no data behind it is\n * still a hypothesis, and forcing the agent to dress one up as analytics is\n * worse than letting it say so.\n */\nexport const experimentEvidenceSourceSchema = z.enum([\n \"baker_analytics\",\n \"clarity\",\n \"ads\",\n \"search_console\",\n \"research\",\n \"inspiration\",\n \"client\",\n \"hunch\",\n]);\nexport type ExperimentEvidenceSource = z.infer<typeof experimentEvidenceSourceSchema>;\n\nexport const experimentEvidenceSchema = z.object({\n source: experimentEvidenceSourceSchema,\n note: z.string().min(1).max(200),\n /**\n * Where to go and look. Not a `z.url()` — a report inside Baker is reached by\n * a relative path, and rejecting those would push every in-product citation\n * into the note where nothing can link it.\n */\n href: z.string().max(500).optional(),\n});\nexport type ExperimentEvidence = z.infer<typeof experimentEvidenceSchema>;\n\nexport const experimentHypothesisSchema = z.object({\n /**\n * The observation. The one genuinely new field, and the reason for the rest.\n *\n * Without it a lost test teaches nothing, because there is no belief for the\n * result to be evidence against — which is how a testing programme ends up as\n * a list of tests instead of a list of things learned.\n */\n because: z.string().min(1).max(300),\n /**\n * The change, in the client's words.\n *\n * The machine-checkable truth lives in `plan.composition.forked`; this is what\n * a person reads. The two are allowed to differ in wording and cannot differ\n * in fact, because the brief shows both.\n */\n change: z.string().min(1).max(200),\n /** Which way the goal is expected to move. See the note at the top of this file. */\n expect: z.enum([\"increase\", \"decrease\"]).default(\"increase\"),\n evidence: z.array(experimentEvidenceSchema).max(5).optional(),\n});\nexport type ExperimentHypothesis = z.infer<typeof experimentHypothesisSchema>;\n\n/**\n * What the test found out about the belief.\n *\n * Deliberately not the verdict. The verdict says what the numbers did; this\n * says what it meant. They come apart in exactly the case worth catching — a\n * `winner` the control won.\n *\n * `refuted_no_effect` and `unanswered` are kept apart for the same reason\n * `no_difference` and `abandoned` are: \"measured and found alike\" and \"nobody\n * ever found out\" are opposite claims, and collapsing them manufactures a\n * finding that is not there.\n */\nexport const experimentHypothesisOutcomeSchema = z.enum([\n \"supported\",\n \"refuted_opposite\",\n \"refuted_no_effect\",\n \"unanswered\",\n]);\nexport type ExperimentHypothesisOutcome = z.infer<typeof experimentHypothesisOutcomeSchema>;\n\n/**\n * Derived from the verdict and the belief, never entered.\n *\n * **`winner` is the arm the NUMBERS favoured, never the arm that was kept.**\n * The two come apart in exactly the case this function exists for: a client may\n * keep the original after a variant win, and that decision does not make the\n * belief wrong — the belief is about the page, not about what anybody did next.\n * Passing the survivor here would report a supported hypothesis as\n * `refuted_opposite` on the card and in History. `stopped_early_harmful` has no\n * winner and needs none: nothing beat the control, so a rise was not seen.\n *\n * `null` on every verdict that decides nothing, which is why those all fall\n * through to `unanswered`.\n */\nexport function hypothesisOutcome(\n verdict: string,\n winner: \"control\" | \"variant\" | null,\n expect: ExperimentHypothesis[\"expect\"],\n): ExperimentHypothesisOutcome {\n if (verdict === \"no_difference\") {\n return \"refuted_no_effect\";\n }\n // Even its best case is under the lift the test was looking for: a rise did\n // not happen, and a fall may have.\n if (verdict === \"cannot_win\") {\n return expect === \"increase\" ? \"refuted_no_effect\" : \"unanswered\";\n }\n if (verdict !== \"winner\" && verdict !== \"stopped_early_harmful\") {\n return \"unanswered\";\n }\n // The variant is the page the belief is about, so the belief held when the\n // variant won a test that expected a rise, or lost one that expected a fall.\n const variantWon = winner === \"variant\";\n return variantWon === (expect === \"increase\") ? \"supported\" : \"refuted_opposite\";\n}\n\n/**\n * The sentence, built from the parts. Nothing else may store one.\n *\n * `goalLabel` comes from the plan rather than from the hypothesis, so the\n * sentence a person reads cannot disagree with the thing being measured.\n *\n * The lift the test was sized for is deliberately NOT in it. It used to end\n * \"by at least 20%\", and a marketer reading it asked what the 20% meant — it\n * is the sizing parameter, not part of the belief, and the stopping rule is\n * anytime-valid, so the test does not stop at 20% or wait for it. The claim is\n * the direction; the numbers are the evidence.\n */\nexport function renderHypothesis(hypothesis: ExperimentHypothesis, goalLabel: string): string {\n const direction = hypothesis.expect === \"increase\" ? \"go up\" : \"go down\";\n return `Because ${hypothesis.because}, if we ${hypothesis.change}, ${goalLabel} should ${direction}.`;\n}\n","const DAY_MS = 24 * 60 * 60 * 1000;\n\nfunction count(value: number, unit: string): string {\n return `about ${value} ${unit}${value === 1 ? \"\" : \"s\"}`;\n}\n\n/**\n * How long until a running test is expected to have an answer, in the unit a\n * marketer plans in: days under two weeks, weeks under two months, then months.\n *\n * Shared because the card and the agent both say it, and a test \"about 4 weeks\"\n * out on the dashboard and \"2026-10-22\" in chat reads as two different answers.\n * Always \"about\": it is today's traffic projected forward, never a promise.\n */\nexport function describeWait(earliestDecisionAt: number, now: number): string {\n const days = (earliestDecisionAt - now) / DAY_MS;\n if (days <= 0) return \"any moment now\";\n if (days < 1) return \"within a day\";\n if (days < 14) return count(Math.round(days), \"day\");\n if (days < 60) return count(Math.round(days / 7), \"week\");\n return count(Math.round(days / 30), \"month\");\n}\n\n/**\n * `2,115` → `about 2,100`, `38` → `about 40`: a projected count said at the\n * precision it is known to. Shared for the same reason as {@link describeWait}.\n */\nexport function roughCount(count: number): string {\n if (count < 10) return `about ${Math.max(1, Math.round(count)).toLocaleString(\"en-US\")}`;\n const magnitude = 10 ** Math.max(1, Math.floor(Math.log10(count)) - 1);\n return `about ${(Math.round(count / magnitude) * magnitude).toLocaleString(\"en-US\")}`;\n}\n","/**\n * What to do next, given a verdict or a plan.\n *\n * The verdict already decides; these say what the decision means for the work.\n * They exist because the single most likely misuse of this command is an agent\n * reading `keep_running` and going looking for a number that agrees with it.\n *\n * Pure, so the wording is testable and cannot drift from the rules it describes.\n */\n\nimport {\n describeWait as describeWaitFor,\n type ExperimentComposition,\n type ExperimentHistoryEntry,\n type ExperimentPlanResponse,\n type ExperimentStatusRow,\n roughCount,\n} from \"@baker/api/experiments\";\nimport type { MeasurementDrift } from \"./measurement.ts\";\n\n/**\n * The one line to print for a live test, by its verdict.\n *\n * A record rather than a switch so the set stays exhaustive by type: a verdict\n * added upstream without a line here fails to compile, where a switch would\n * quietly print nothing for the very case somebody needs to act on.\n *\n * Nothing ends a test on its own, so every line that has an action names the\n * command that takes it.\n */\nconst LIVE_HINT: Record<ExperimentStatusRow[\"verdict\"], (row: ExperimentStatusRow, now: number) => string> = {\n keep_running: (row, now) =>\n `${row.experimentId} cannot yet tell the two pages apart — do not end it hoping for a result. ${describeWait(row, now)} To the user, say only this in plain words: \"${row.summary}\" plus how much more data it needs and roughly when. Never quote confidence, chance-better or intervals to them — those numbers confuse marketers and decide nothing.`,\n winner: (row) =>\n row.winner === \"variant\"\n ? `${row.experimentId} has a winner: the new variant. Run \\`baker experiment finish --id ${row.experimentId} --keep variant\\` to show it to everyone, then \\`baker experiment fold\\`.`\n : `${row.experimentId}: the new version is proven worse and is STILL being shown to half the visitors. Run \\`baker experiment finish --id ${row.experimentId} --keep original\\` now.`,\n no_difference: (row) =>\n `${row.experimentId} measured the two pages as alike — it collected enough traffic to see the change it was looking for, and there was none. End it with \\`--keep original\\` and test a bigger change — a headline, an offer, the shape of the page, not a button colour.`,\n cannot_win: (row) =>\n `${row.experimentId}: the new version cannot win — even its best case is under the lift this test was looking for, so there is nothing left to find. Run \\`baker experiment finish --id ${row.experimentId} --keep original --reason numbers_clear\\` and write down what it taught.`,\n stopped_early_harmful: (row) =>\n `${row.experimentId} is doing damage and is STILL being shown to visitors. Run \\`baker experiment finish --id ${row.experimentId} --keep original\\` now.`,\n // Unreachable on a live test — only ending one produces it. The Record is\n // exhaustive by type so a verdict added upstream fails to compile here rather\n // than printing nothing.\n inconclusive: (row) => `${row.experimentId} was ended before it concluded and found nothing.`,\n invalid: (row) =>\n `${row.experimentId} cannot be read: ${\n row.invalidReason === \"crossover\" ? \"too many visitors saw both versions\" : \"the traffic did not split evenly\"\n }. End it with \\`--keep original\\` and start again rather than reporting anything from it.`,\n};\n\n/**\n * When a running test could first say something, in one clause.\n *\n * Three states rather than two, because they need different actions: a page\n * that has not been seen yet, a page that will get there, and a page whose\n * traffic never will. The last one used to be indistinguishable from the\n * second, so a hopeless test simply ran forever.\n */\nfunction describeWait(row: ExperimentStatusRow, now: number): string {\n if (row.willNotConclude) {\n return \"This page's traffic will not settle it at any point, so end it with `--keep original` and test a bigger change.\";\n }\n if (row.earliestDecisionAt === null) {\n return \"This page has produced no visitors yet, so there is nothing to project a finish date from.\";\n }\n if (row.stillNeeded === null) {\n return `It already has the data it needs; the verdict waits only until it has seen a full day of visitors — ${describeWaitFor(row.earliestDecisionAt, now)}.`;\n }\n const needed = `It needs ${roughCount(row.stillNeeded.visitors)} more visitors (${roughCount(row.stillNeeded.conversions)} more conversions) for an answer if the gap holds — `;\n return `${needed}${describeWaitFor(row.earliestDecisionAt, now)} at today's traffic (${new Date(row.earliestDecisionAt).toISOString().slice(0, 10)}). A test is gated on this data, never on days.`;\n}\n\n/** A paused test says so first, because nothing else in the row does. */\nfunction pausedNote(row: ExperimentStatusRow): string {\n return row.status === \"paused\"\n ? `${row.experimentId} is paused — everyone sees the original. \\`baker experiment resume --id ${row.experimentId}\\` restarts the split with the same sides. `\n : \"\";\n}\n\n/**\n * A finished test with nothing written down is a result without a conclusion,\n * and the conclusion is the part the next test is built from.\n */\nfunction unlearnedHint(experiments: readonly ExperimentStatusRow[]): string | null {\n const unlearned = experiments.filter(\n (row) => row.status === \"finished\" && row.learning === null && row.verdict !== \"inconclusive\",\n );\n if (unlearned.length === 0) return null;\n const ids = unlearned.map((row) => row.experimentId).join(\", \");\n return `${unlearned.length === 1 ? \"One finished test has\" : `${unlearned.length} finished tests have`} no learning written down yet (${ids}). Say what it taught in one or two sentences — what the client should believe about this page now — with \\`baker experiment update --id <id> --learning \"…\"\\`. It is what \\`plan\\` hands the next test.`;\n}\n\nexport function buildStatusHints(experiments: readonly ExperimentStatusRow[], now = Date.now()): string[] {\n const hints = experiments\n .filter((row) => row.status !== \"finished\")\n .map((row) => pausedNote(row) + LIVE_HINT[row.verdict](row, now));\n const unlearned = unlearnedHint(experiments);\n if (unlearned) hints.push(unlearned);\n\n if (experiments.length === 0) {\n hints.push(\n \"No tests yet. `baker experiment plan --landing <slug> --variant <slug>` says whether a page has enough traffic for one before you build the alternative.\",\n );\n }\n return hints;\n}\n\n/** `+40%`, the way a lift is spoken about. */\nfunction asLift(value: number): string {\n return `+${Math.round(value * 100)}%`;\n}\n\n/**\n * What each fixed window would settle, as one line.\n *\n * The counterpart to a refusal. \"This page cannot settle +20%\" sends somebody\n * away to guess; \"in 28 days it could settle +40% or more\" tells them how big\n * the change has to be, which is a thing they can go and design.\n */\nfunction horizonsHint(plan: Pick<ExperimentPlanResponse, \"horizons\">): string | null {\n const settled = plan.horizons.filter((horizon) => horizon.detectableLift !== null);\n if (settled.length === 0) {\n return \"At this page's traffic no window up to 90 days would gather enough visitors to settle anything, at any size of change. The constraint is the traffic, not the test.\";\n }\n const parts = settled.map((horizon) => `${horizon.days} days → ${asLift(horizon.detectableLift ?? 0)}`);\n return `The smallest change each window could settle on this page's traffic: ${parts.join(\", \")}. Design the alternative to be at least that different.`;\n}\n\n/** The events this page produces, so the goal can be chosen from what is real. */\nfunction conversionsHint(plan: Pick<ExperimentPlanResponse, \"conversions\" | \"goal\">): string | null {\n if (plan.conversions.length <= 1) return null;\n const others = plan.conversions.filter((entry) => entry.eventKey !== plan.goal);\n return `This page's visitors also went on to: ${others\n .map((entry) => `\\`${entry.eventKey}\\`${entry.name ? ` (“${entry.name}”)` : \"\"} — ${entry.convertingVisitors}`)\n .join(\n \", \",\n )}. Any of them can be the goal (--goal <key>); the named ones are reported beside it on every result, and decide nothing.`;\n}\n\n/** One finished test, as a line the next hypothesis has to be chosen against. */\nfunction pastTestLine(test: ExperimentHistoryEntry): string {\n const outcome: Record<ExperimentHistoryEntry[\"hypothesisOutcome\"], string> = {\n supported: \"the idea held\",\n refuted_opposite: \"the idea was WRONG — the change made it worse\",\n refuted_no_effect: \"no difference — the change did not matter\",\n unanswered: \"never answered\",\n };\n const kept = test.survivor === \"variant\" ? \"the new version was kept\" : \"the original was kept\";\n const learning = test.learning ? ` Learning: ${test.learning}` : \"\";\n return `“${test.hypothesis.change}” (${test.experimentId}, ${test.ranForDays} days): ${outcome[test.hypothesisOutcome]}; ${kept}${test.againstVerdict ? \" against the numbers\" : \"\"}.${learning}`;\n}\n\n/**\n * What this page has already taught, before a new hypothesis is chosen.\n *\n * First among the hints because it is the one thing the agent cannot know\n * from the page and cannot recover once it has proposed something: a refuted\n * idea proposed again spends the page's traffic to return the same answer.\n */\nfunction pastTestsHint(plan: Pick<ExperimentPlanResponse, \"pastTests\">): string | null {\n if (plan.pastTests.length === 0) return null;\n const lines = plan.pastTests.slice(0, 5).map(pastTestLine);\n const more =\n plan.pastTests.length > 5\n ? ` …and ${plan.pastTests.length - 5} more — \\`baker experiment history --landing <slug>\\` lists them all.`\n : \"\";\n return `This page has been tested before — read this before choosing what to change, and build on it rather than repeating it: ${lines.join(\" \")}${more}`;\n}\n\nexport function buildPlanHints(plan: ExperimentPlanResponse): string[] {\n const horizons = horizonsHint(plan);\n const past = pastTestsHint(plan);\n if (!plan.canRun) {\n return [\n plan.reason ?? \"This test cannot run on this page.\",\n ...(horizons && plan.visitors > 0 ? [horizons] : []),\n ...(past ? [past] : []),\n \"A test that cannot conclude is worse than no test — it still produces a number, and somebody acts on it.\",\n ];\n }\n const hints = [\n ...(past ? [past] : []),\n // First, because it changes how every number below should be read: a plan\n // sized on a stand-in is a guide, and the agent must say so to the client\n // rather than quote \"about 70 days\" as though it were measured.\n ...(plan.warning ? [plan.warning] : []),\n `This test is read on “${plan.goal}”. That is fixed when it starts and cannot be changed later.`,\n // Fires at the exact moment the hypothesis gets invented, whether or not\n // the agent read the family doc. `plan` says a question CAN be settled here\n // and says nothing about which question is worth asking — and a well-run\n // test of a bad idea spends the page's traffic and returns `no_difference`.\n \"Now decide WHAT to change, from evidence rather than taste. These numbers say which page and which step; they cannot say why. A second opinion answers why — Microsoft Clarity for what visitors actually do on the page, `baker gsc` for what they searched, `baker ads <platform>` for what the ad promised, `baker ga4` for the client's own measurement. `baker capabilities` lists everything this client has in one call. Message match — what the ad or the search promised against what the page opens with — is the cheapest hypothesis worth testing and is wrong surprisingly often.\",\n // The base always works, so a missing integration is never a reason to\n // stop. Naming what it would have shown is worth more to the client than\n // either a silent gap or a run that waited.\n \"If none of that is connected, this page's own drop-off is enough to test on — say which source you lacked and what it would have told you, then run the test anyway. A test never waits on an integration.\",\n ];\n const conversions = conversionsHint(plan);\n if (conversions) hints.push(conversions);\n if (plan.estimatedDays !== null && plan.estimatedDays > 60) {\n hints.push(\n `At this page's recent traffic it would take about ${plan.estimatedDays} days — a guide, not a limit: it ends when the numbers are clear, and more traffic (a campaign, ads) shortens it. If the traffic will stay as it is, test a bigger change, which needs fewer visitors to detect.`,\n );\n }\n if (horizons) hints.push(horizons);\n return hints;\n}\n\n/**\n * What to make of the record, once it has been read.\n *\n * The record is for informing the next hypothesis, so the hints say what it\n * settles: which ideas held and which were refuted on this page, and which\n * tests still have no conclusion written down.\n */\nexport function buildHistoryHints(tests: readonly ExperimentHistoryEntry[], landing: string | undefined): string[] {\n if (tests.length === 0) {\n return [\n landing\n ? `No finished test on “${landing}” yet — nothing to build on, and nothing to avoid repeating. \\`baker experiment plan\\` says whether the page can settle one.`\n : \"No finished tests yet. `baker experiment plan --landing <slug> --variant <slug>` says whether a page can settle one.\",\n ];\n }\n const hints: string[] = [];\n const supported = tests.filter((test) => test.hypothesisOutcome === \"supported\");\n const refuted = tests.filter((test) => test.hypothesisOutcome === \"refuted_opposite\");\n const noEffect = tests.filter((test) => test.hypothesisOutcome === \"refuted_no_effect\");\n if (supported.length > 0) {\n hints.push(\n `Held: ${supported.map((test) => `“${test.hypothesis.change}” on ${test.landingSlug}`).join(\"; \")}. Build on these — the same insight usually has more in it.`,\n );\n }\n if (refuted.length > 0) {\n hints.push(\n `Made it worse: ${refuted.map((test) => `“${test.hypothesis.change}” on ${test.landingSlug}`).join(\"; \")}. Do not propose these again as they were; the observation behind each may still be right, the change was not.`,\n );\n }\n if (noEffect.length > 0) {\n hints.push(\n `Did not matter: ${noEffect.map((test) => `“${test.hypothesis.change}” on ${test.landingSlug}`).join(\"; \")}. The next change on these pages has to be bigger — a headline, an offer, the shape of the page.`,\n );\n }\n const unlearned = tests.filter((test) => test.learning === null && test.verdict !== \"inconclusive\");\n if (unlearned.length > 0) {\n hints.push(\n `${unlearned.length === 1 ? \"One test has\" : `${unlearned.length} tests have`} no learning written down (${unlearned.map((test) => test.experimentId).join(\", \")}). Read its numbers and write one: \\`baker experiment update --id <id> --learning \"…\"\\`.`,\n );\n }\n return hints;\n}\n\n/**\n * What is worth saying about the two versions as staged, before the split.\n *\n * Two things, both read off the workspace rather than off the request: a\n * variant that owns no section renders the page itself, so the test would run\n * for weeks against itself; and a variant that uses a Form the page does not\n * converts on that Form's ending — a different event from the page's — so\n * unless the caller said which event the new version is read on\n * (`--variant-goal`), it would read as never converting for the whole run.\n */\nexport function buildStartHints(staged: {\n landing: string;\n variant: string;\n goal: string;\n /** The new version's own event, when the caller gave one. */\n variantGoal: string | undefined;\n composition: ExperimentComposition | undefined;\n /** Forms the variant renders that the page does not. */\n newForms: readonly string[];\n /** Conversions the two versions may no longer fire on the same action. */\n drift: readonly MeasurementDrift[];\n}): string[] {\n const hints: string[] = [];\n for (const entry of staged.drift) {\n hints.push(driftHint(staged, entry));\n }\n if (staged.composition && staged.composition.forked.length === 0) {\n hints.push(\n `“${staged.variant}” does not have its own copy of any section — it renders exactly the same page as “${staged.landing}”, so this test cannot find anything. Fork the section you want to test (\\`baker landing variant ${staged.landing} --fork Hero.astro\\`) and edit only that file.`,\n );\n }\n if (staged.newForms.length > 0 && staged.variantGoal === undefined) {\n const forms = staged.newForms.map((flow) => `“${flow}”`).join(\", \");\n hints.push(\n `“${staged.variant}” uses ${staged.newForms.length === 1 ? \"a Form\" : \"Forms\"} the page does not: ${forms}. The test reads the new version on \\`${staged.goal}\\`, the page's event — if the new version converts by reaching this Form's ending instead, it can never convert on that key and the test will call it harmful. Say its own event: \\`baker experiment update --id <id> --variant-goal submit:${staged.newForms[0]}\\` (or the confirmation step's \\`form:${staged.newForms[0]}:<node>:<trigger>\\` key, from \\`baker analytics conversions --candidates\\` once the Form has been opened in the preview).`,\n );\n }\n return hints;\n}\n\n/**\n * One conversion the two versions may not be counting the same way.\n *\n * Phrased as a question about one named event rather than as a refusal,\n * because whether the trigger still means the same thing is a judgement about\n * markup that a person makes in a glance and this cannot: a forked section is\n * *supposed* to change, and most of these are harmless. What is not acceptable\n * is nobody looking — the measured cost of not looking was a step that \"won\" by\n * 2.6x on two pages while comparing a click against a scroll.\n *\n * It names `baker analytics conversions` rather than describing the fix,\n * because the answer is in what the two pages actually declare and the command\n * that lists it is one hop away.\n */\nfunction driftHint(staged: { landing: string; variant: string }, entry: MeasurementDrift): string {\n const suffix = ` Check both versions before reading that number, and give the new version's step its own name if it is not the same action (\\`baker analytics conversions --candidates\\`).`;\n if (entry.reason === \"trigger_differs\") {\n return `“${staged.landing}” and “${staged.variant}” both count \\`${entry.name}\\`, but one fires it when the element is **scrolled into view** and the other when the visitor **does something**. Those are two different questions with one answer, and the test will report a difference that is the trigger rather than the page.${suffix}`;\n }\n if (entry.reason === \"variant_only_missing\" || entry.reason === \"control_only_missing\") {\n const missing = entry.reason === \"variant_only_missing\" ? staged.variant : staged.landing;\n return `Only one version fires \\`${entry.name}\\` — “${missing}” does not declare it at all, so it can only ever read zero for that conversion and the comparison will look like a collapse.${suffix}`;\n }\n return `Both versions count \\`${entry.name}\\`, and the section the test changed is what fires it — the markup around it is not the same on the two pages. If the new version fires it on a different action (a block that is visible from the start rather than one the visitor opens), that conversion is comparing two different things.${suffix}`;\n}\n","import { type ExperimentEvidence, experimentEvidenceSourceSchema } from \"@baker/api/experiments\";\nimport { repeatedValues } from \"../../lib/repeatedFlags.ts\";\n\n/**\n * `--evidence` as an agent would type it, into the structured citation.\n *\n * `source:note`, with an optional `|href` on the end:\n *\n * ```\n * --evidence \"baker_analytics:60% of visitors never reach the price\"\n * --evidence \"research:ICP interviews|https://…\"\n * ```\n *\n * Split on the **first** colon only, because a note routinely contains one —\n * \"rage clicks: 18 on the CTA\" — and losing half a citation to a separator is\n * worse than the flag being slightly loose. The link goes after a pipe for the\n * same reason: a URL is mostly colons.\n *\n * The source is a closed set so that \"which kinds of evidence produced tests\n * that held\" is answerable later, and `hunch` is deliberately in it: a belief\n * with no data behind it is still a belief, and forcing the agent to dress one\n * up as analytics is worse than letting it say so.\n */\ntype EvidenceResult = ExperimentEvidence[] | { error: string } | undefined;\n\nconst SOURCES = experimentEvidenceSourceSchema.options.join(\", \");\n\nfunction parseOne(raw: string): ExperimentEvidence | { error: string } {\n const separator = raw.indexOf(\":\");\n if (separator === -1) {\n return { error: `Write the evidence as source:note — for example \\`${raw}:what you saw\\`. Sources: ${SOURCES}` };\n }\n const source = experimentEvidenceSourceSchema.safeParse(raw.slice(0, separator).trim());\n if (!source.success) {\n return { error: `“${raw.slice(0, separator).trim()}” is not one of the evidence sources. Use one of: ${SOURCES}` };\n }\n\n const rest = raw.slice(separator + 1).trim();\n const pipe = rest.lastIndexOf(\"|\");\n const note = (pipe === -1 ? rest : rest.slice(0, pipe)).trim();\n const href = pipe === -1 ? undefined : rest.slice(pipe + 1).trim();\n if (note === \"\") {\n return { error: `Say what ${source.data} showed: --evidence \"${source.data}:what you saw\"` };\n }\n return href ? { source: source.data, note, href } : { source: source.data, note };\n}\n\n/**\n * `rawArgs` rather than the parsed arg, because citty declares no array arg\n * type: a repeated `--evidence` collapses to its LAST value and arrives as a\n * plain string, so `Array.isArray` never fires and\n * `--evidence \"clarity:…\" --evidence \"ads:…\"` records only the second citation,\n * with `ok: true` and nothing saying the first was dropped. The arg\n * description, the family doc and the `ab-test` skill all call it repeatable,\n * and the sources it loses are the whole point of recording evidence at all.\n */\nexport function parseEvidence(raw: string | string[] | undefined, rawArgs?: readonly string[]): EvidenceResult {\n const entries = repeatedValues(rawArgs, \"evidence\", raw)\n .map((entry) => entry.trim())\n .filter((entry) => entry !== \"\");\n if (entries.length === 0) return undefined;\n\n const parsed: ExperimentEvidence[] = [];\n for (const entry of entries) {\n const one = parseOne(entry);\n if (\"error\" in one) return one;\n parsed.push(one);\n }\n return parsed;\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/**\n * A page's own identity, read off its `_definition.md`.\n *\n * `experiment start` sends both pages' identities along with their slugs. The\n * backend prefers the `landings` rows, but the variant has no row until this\n * Session is published — which is after the test is staged — so without this\n * the variant's identity was never recorded: a renamed variant folder detached\n * its running test, and a fold archived the loser under the page's slug rather\n * than its id. Best-effort: a definition that cannot be read costs the test\n * its rename-safety, never the test.\n */\nexport async function readPageInternalId(root: string, slug: string): Promise<string | undefined> {\n try {\n const text = await readFile(path.resolve(root, \"src\", \"pages\", slug, \"_definition.md\"), \"utf8\");\n return /^internalId:\\s*\"?([^\"\\s]+)\"?\\s*$/m.exec(text)?.[1];\n } catch {\n return undefined;\n }\n}\n","/**\n * Do the two versions of a page measure the same thing?\n *\n * Every other validity check a test has asks whether the *split* was sound —\n * that the traffic divided as intended, that nobody saw both pages, that both\n * arms exist. This asks the question underneath all of them, and nothing else\n * asks it: **the two versions agree about what an event means only because a\n * person made them agree.**\n *\n * A conversion is a name the company chose, matched against `data-baker-*`\n * declarations in the page's own source. Move the thing that carries one and\n * the name keeps counting, from a different action, and every number\n * downstream is arithmetic on two incomparable quantities. Nothing detects it:\n * the split is fine, there is no crossover, both arms are counted the same way,\n * and the defect is entirely in what the two pages chose to call the same.\n *\n * Found on a live test, which is why this exists. The page fired\n * `data-baker-view=\"checkout_popup\"` from inside a modal that starts `hidden`,\n * so it counted a visitor who **opened** the purchase form. The new version\n * moved that form inline and kept the name, so the same attribute fired when\n * the block **scrolled into view**. The new version \"won\" that step by 2.6x on\n * two separate pages, and the comparison was between a click and a scroll. The\n * source comment on the variant said the name was kept \"so they can be\n * compared\": the intent was right and nobody could see the result was not.\n *\n * ## Only the sections the two arms do not share\n *\n * A shared section is literally the same file — the variant imports it out of\n * the page's folder — so an event declared there cannot differ, by\n * construction. The comparison is between the sections the variant **forked**\n * and the sections of the page they replaced. That is also what keeps this\n * quiet: it can only fire on markup the test itself changed.\n *\n * ## Declarative triggers only\n *\n * It reads `data-baker-view=\"x\"` and `data-baker-event=\"x\"` out of the source.\n * An event fired from script, or named by an expression rather than a literal,\n * is invisible to it — so a clean result is \"nothing declared differs\", never\n * \"the two versions measure the same thing\". That is worth knowing and does not\n * make the declarative half less worth catching: the defect above was\n * declarative, and so is every trigger the scaffold's own components emit.\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { ExperimentComposition } from \"@baker/api/experiments\";\nimport { landingGraphFiles } from \"../landing/import-graph.ts\";\n\n/** One `data-baker-*` declaration, as the page's source carries it. */\nexport interface EventDeclaration {\n /** The event name a conversion is matched on — `page:<name>` once counted. */\n readonly name: string;\n /** `data-baker-view` (scrolled into view) or `data-baker-event` (did something). */\n readonly attribute: string;\n /** The opening tag that carries it — what actually decides when the event fires. */\n readonly markup: string;\n}\n\n/**\n * Why two versions may not be measuring the same thing, worst first.\n *\n * - `trigger_differs` — one version fires the name on a view and the other on\n * an action. Two different questions with one answer.\n * - `markup_differs` — the same kind of trigger on an element the test changed.\n * Often harmless and never safe to assume so: whether it still fires on the\n * same action is a question about the surrounding markup, which a person can\n * answer in a glance and this cannot.\n * - `variant_only_missing` / `control_only_missing` — only one version fires\n * the name at all, so the other can only ever read zero for it.\n */\nexport type MeasurementDriftReason =\n | \"trigger_differs\"\n | \"markup_differs\"\n | \"variant_only_missing\"\n | \"control_only_missing\";\n\nexport interface MeasurementDrift {\n readonly name: string;\n readonly reason: MeasurementDriftReason;\n}\n\n/**\n * `data-baker-view=\"x\"` and `data-baker-event=\"x\"`, with the tag around them.\n *\n * The tag is taken by scanning back to the `<` that opens it and forward to the\n * `>` that closes it, rather than by parsing: these are Astro files, so any\n * parser would have to understand the template syntax too, and the opening tag\n * is the whole of what this needs.\n */\nexport function eventDeclarationsIn(source: string): EventDeclaration[] {\n const found: EventDeclaration[] = [];\n const pattern = /\\b(data-baker-(?:view|event))\\s*=\\s*[\"']([^\"']+)[\"']/g;\n for (const match of source.matchAll(pattern)) {\n const at = match.index;\n const opens = source.lastIndexOf(\"<\", at);\n const closes = source.indexOf(\">\", at);\n found.push({\n name: match[2] as string,\n attribute: match[1] as string,\n markup: normalise(source.slice(opens < 0 ? at : opens, closes < 0 ? at + match[0].length : closes + 1)),\n });\n }\n return found;\n}\n\n/** Whitespace is layout, not meaning: a reflowed attribute list is the same element. */\nfunction normalise(markup: string): string {\n return markup.replace(/\\s+/g, \" \").trim();\n}\n\n/**\n * Every event name the two versions might not agree about.\n *\n * A name declared identically on both sides is left out — the point of this is\n * to be worth reading, and a warning on every event a forked section happens to\n * carry is a warning nobody reads.\n */\nexport function measurementDrift(\n control: readonly EventDeclaration[],\n variant: readonly EventDeclaration[],\n): MeasurementDrift[] {\n const names = [...new Set([...control, ...variant].map((entry) => entry.name))].sort();\n return names.flatMap((name): MeasurementDrift[] => {\n const left = control.filter((entry) => entry.name === name);\n const right = variant.filter((entry) => entry.name === name);\n if (right.length === 0) return [{ name, reason: \"variant_only_missing\" }];\n if (left.length === 0) return [{ name, reason: \"control_only_missing\" }];\n if (setOf(left, (entry) => entry.attribute) !== setOf(right, (entry) => entry.attribute)) {\n return [{ name, reason: \"trigger_differs\" }];\n }\n if (setOf(left, (entry) => entry.markup) !== setOf(right, (entry) => entry.markup)) {\n return [{ name, reason: \"markup_differs\" }];\n }\n return [];\n });\n}\n\n/**\n * Two sets of declarations, compared as one string. Joined on a newline because\n * {@link normalise} has already collapsed every run of whitespace, so no member\n * can contain one and no two different sets can join to the same value.\n */\nfunction setOf(entries: readonly EventDeclaration[], of: (entry: EventDeclaration) => string): string {\n return [...new Set(entries.map(of))].sort().join(\"\\n\");\n}\n\n/**\n * The same answer, read from the workspace.\n *\n * Compares only what the two arms do not share: the sections the variant owns\n * (`composition.forked`), against the sections of the page they replaced. The\n * variant's slug is not needed — the composition already names its files. Returns an empty list rather\n * than throwing when the files cannot be read — a brief without this warning is\n * worse than one with it and much better than a test that could not be started,\n * which is the same trade `readComposition` makes beside it.\n */\nexport async function readMeasurementDrift(\n root: string,\n controlSlug: string,\n composition: ExperimentComposition | undefined,\n): Promise<MeasurementDrift[]> {\n if (!composition) return [];\n try {\n const pageSections = sectionsOf([...(await landingGraphFiles(root, controlSlug))], controlSlug);\n const shared = new Set(composition.shared);\n const [control, variant] = await Promise.all([\n declarationsOf(\n root,\n pageSections.filter((file) => !shared.has(file)),\n ),\n declarationsOf(root, composition.forked),\n ]);\n return measurementDrift(control, variant);\n } catch {\n return [];\n }\n}\n\n/** Sections only. `index.astro` is the page, and every arm owns its own. */\nfunction sectionsOf(files: readonly string[], slug: string): string[] {\n const prefix = `src/pages/${slug}/`;\n return files.filter((file) => file.startsWith(prefix) && !file.slice(prefix.length).startsWith(\"index.\"));\n}\n\nasync function declarationsOf(root: string, files: readonly string[]): Promise<EventDeclaration[]> {\n const sources = await Promise.all(files.map((file) => readFile(path.join(root, file), \"utf8\").catch(() => \"\")));\n return sources.flatMap(eventDeclarationsIn);\n}\n","/**\n * One test's status row, as the agent reads it.\n *\n * The wire row is shaped for the dashboard, which formats its own dates and\n * draws its own pictures: epoch milliseconds (a projection is fractional),\n * preview and snapshot URLs, the hypothesis in parts. Printed as-is it cost an\n * agent three calls to find one date, and a hand-converted epoch once told a\n * client a test needed ten more months.\n *\n * So every moment is a date a reader can say aloud, the projection says how\n * far off it is in the same words the hint and the card use, and the fields\n * that decide come first. `--full` keeps every field the server sent, with the\n * same dates.\n */\n\nimport {\n describeWait,\n type ExperimentArm,\n type ExperimentMetric,\n type ExperimentStatusRow,\n} from \"@baker/api/experiments\";\n\ninterface ReadoutOptions {\n readonly full: boolean;\n readonly now: number;\n}\n\nfunction isoMoment(ms: number): string;\nfunction isoMoment(ms: number | null): string | null;\nfunction isoMoment(ms: number | null): string | null {\n return ms === null ? null : new Date(ms).toISOString();\n}\n\n/**\n * A projection from today's traffic is known to the day, never to the millisecond.\n * The day is UTC's: a company has no timezone to read it in, and a projection is\n * not precise enough for the hour to matter.\n */\nfunction isoDay(ms: number | null): string | null {\n return ms === null ? null : new Date(ms).toISOString().slice(0, 10);\n}\n\n/** A rate to the precision anyone reads one at: 4.61%, not 4.611650485436893%. */\nfunction compactArm(arm: ExperimentArm) {\n return { visitors: arm.visitors, conversions: arm.conversions, rate: Math.round(arm.rate * 10_000) / 10_000 };\n}\n\n/** A secondary is context, read by its one word; its rates, lift and interval are for --full. */\nfunction compactMetric(metric: ExperimentMetric) {\n return {\n name: metric.name,\n reading: metric.reading,\n control: metric.control.conversions,\n variant: metric.variant.conversions,\n };\n}\n\nfunction fullArm(arm: ExperimentArm) {\n return {\n ...arm,\n ...(arm.snapshotCapturedAt === undefined ? {} : { snapshotCapturedAt: isoMoment(arm.snapshotCapturedAt) }),\n };\n}\n\nexport function statusReadout(row: ExperimentStatusRow, { full, now }: ReadoutOptions): Record<string, unknown> {\n const decisionWhen = {\n earliestDecisionAt: isoDay(row.earliestDecisionAt),\n ...(row.earliestDecisionAt === null ? {} : { earliestDecisionIn: describeWait(row.earliestDecisionAt, now) }),\n };\n const moments = {\n // A held test has not started; its `startedAt` is a placeholder the first\n // resume replaces, and `pausedAt` already dates the hold.\n ...(row.onHold ? {} : { startedAt: isoMoment(row.startedAt) }),\n pausedAt: isoMoment(row.pausedAt),\n finishedAt: isoMoment(row.finishedAt),\n };\n\n if (full) {\n return {\n ...row,\n ...moments,\n ...decisionWhen,\n control: fullArm(row.control),\n variant: fullArm(row.variant),\n };\n }\n\n return {\n experimentId: row.experimentId,\n landingSlug: row.landingSlug,\n variantSlug: row.variantSlug,\n status: row.status,\n // Published with the split off: `resume` is what starts it, not what restarts it.\n ...(row.onHold ? { onHold: true } : {}),\n verdict: row.verdict,\n summary: row.summary,\n ...(row.winner === null ? {} : { winner: row.winner }),\n ...(row.invalidReason === null ? {} : { invalidReason: row.invalidReason }),\n stillNeeded: row.stillNeeded,\n ...decisionWhen,\n willNotConclude: row.willNotConclude,\n control: compactArm(row.control),\n variant: compactArm(row.variant),\n secondary: row.secondary.map(compactMetric),\n hypothesisStatement: row.hypothesisStatement,\n minDetectableRelativeLift: row.minDetectableRelativeLift,\n goal: row.goal,\n ...(row.variantGoal === null ? {} : { variantGoal: row.variantGoal }),\n goalLabel: row.goalLabel,\n ...moments,\n ...(row.status === \"finished\"\n ? {\n survivor: row.survivor,\n hypothesisOutcome: row.hypothesisOutcome,\n fold: row.fold,\n learning: row.learning,\n endReason: row.endReason,\n }\n : {}),\n };\n}\n","import type { ExperimentUpdateRequest } from \"@baker/api/experiments\";\nimport { parseEvidence } from \"./hypothesis.ts\";\n\n/**\n * `baker experiment update`'s flags, into the request — or the reason they\n * cannot be.\n *\n * Pure so the two rules that matter are pinned: a call that changes nothing is\n * refused before it reaches the network, and `--expect` is checked here for the\n * same two values `start` accepts. Which fields a *live* test may change is\n * decided by the backend, which knows whether the test has started; this only\n * shapes what was typed.\n */\nexport function buildUpdateRequest(\n args: {\n id: unknown;\n because?: unknown;\n change?: unknown;\n expect?: unknown;\n evidence?: unknown;\n goal?: unknown;\n variantGoal?: unknown;\n lift?: unknown;\n learning?: unknown;\n },\n /** The command line, so a repeated `--evidence` keeps every citation. */\n rawArgs?: readonly string[],\n): ExperimentUpdateRequest | { error: string } {\n const expect = args.expect === undefined ? undefined : String(args.expect);\n if (expect !== undefined && expect !== \"increase\" && expect !== \"decrease\") {\n return {\n error: \"`--expect` is either `increase` or `decrease` — which way should the goal move if you are right?\",\n };\n }\n const evidence = parseEvidence(args.evidence as string | string[] | undefined, rawArgs);\n if (evidence && \"error\" in evidence) return evidence;\n\n const lift = args.lift === undefined ? undefined : Number(args.lift);\n if (lift !== undefined && !(lift > 0)) {\n return {\n error: \"`--lift` is the smallest improvement worth detecting, relative — 0.2 is +20%. It must be above zero.\",\n };\n }\n\n const request: ExperimentUpdateRequest = {\n experimentId: String(args.id),\n ...typed(\"because\", args.because),\n ...typed(\"change\", args.change),\n ...typed(\"goal\", args.goal),\n ...typed(\"variantGoal\", args.variantGoal),\n ...typed(\"learning\", args.learning),\n ...(expect === undefined ? {} : { expect }),\n ...(evidence ? { evidence } : {}),\n ...(lift === undefined ? {} : { minDetectableRelativeLift: lift }),\n };\n if (Object.keys(request).length === 1) {\n return {\n error:\n \"Nothing to change. Pass --because, --change or --evidence; on a finished test, --learning; on a test that has not been published yet, also --expect, --goal, --variant-goal or --lift\",\n };\n }\n return request;\n}\n\n/** The flag as typed, or nothing at all — so an absent flag never blanks a field. */\nfunction typed<K extends \"because\" | \"change\" | \"goal\" | \"variantGoal\" | \"learning\">(\n key: K,\n value: unknown,\n): { [P in K]?: string } {\n return value === undefined ? {} : ({ [key]: String(value) } as { [P in K]: string });\n}\n"],"mappings":"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","names":["knownFlows","readdir","readFile","path","path","readdir","readFile","count","describeWait","readFile","path","readFile","path","readFile","path"]}
@@ -0,0 +1,168 @@
1
+ import {
2
+ reportError
3
+ } from "./chunk-CVIMIOPO.js";
4
+ import {
5
+ apiGet,
6
+ apiPost
7
+ } from "./chunk-MMOTJIV6.js";
8
+ import "./chunk-2ZZR2SOF.js";
9
+ import "./chunk-YPCVPDU7.js";
10
+ import {
11
+ registerSchema,
12
+ writeJson
13
+ } from "./chunk-D3RTGIT4.js";
14
+ import "./chunk-YQSBHWOI.js";
15
+
16
+ // src/commands/landing/export.ts
17
+ import { readFileSync } from "fs";
18
+ import { defineCommand } from "citty";
19
+ function exportStartHints(args) {
20
+ const hints = [
21
+ "This downloads the PUBLISHED site \u2014 landings changed in this chat and not yet published are not included. Publish first if the user wants them in it.",
22
+ "It takes a few minutes. Don't wait on it: carry on, then run `baker landing export status <id>` for the link. The user also sees it in this chat's changes, with a download button once it is ready."
23
+ ];
24
+ if (args.stagedProfilePending && !args.profileOverridden) {
25
+ hints.push(
26
+ "This chat has a download-format change waiting on Publish; this export uses the saved format. The staged format applies after publish \u2014 pass `--profile` to try it now."
27
+ );
28
+ }
29
+ return hints;
30
+ }
31
+ function exportStatusHints(view) {
32
+ if (view.status === "ready") {
33
+ return view.downloadUrl ? ["Give the user this link to download the ZIP \u2014 it is also on this chat's changes."] : ["This export is ready but its file is gone. Start a new one with `baker landing export start`."];
34
+ }
35
+ if (view.status === "error") {
36
+ return [
37
+ "This export failed. Tell the user it could not be prepared and start a new one with `baker landing export start`; if it fails again, they can export from Landings."
38
+ ];
39
+ }
40
+ return ["Still being prepared. Carry on with other work and check again in a minute \u2014 never sleep-loop on it."];
41
+ }
42
+ function parseProfileFlag(raw, readFile = (path) => readFileSync(path, "utf8")) {
43
+ let parsed;
44
+ try {
45
+ parsed = JSON.parse(raw.startsWith("@") ? readFile(raw.slice(1)) : raw);
46
+ } catch (error) {
47
+ return {
48
+ ok: false,
49
+ message: `--profile must be a JSON object or @<file> holding one: ${error instanceof Error ? error.message : String(error)}`
50
+ };
51
+ }
52
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
53
+ return { ok: false, message: `--profile must be a JSON object, e.g. '{"htmlOutput":"fragment"}'.` };
54
+ }
55
+ return { ok: true, profile: parsed };
56
+ }
57
+ function failValidation(message) {
58
+ writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message } });
59
+ process.exit(1);
60
+ }
61
+ registerSchema({
62
+ command: "landing.export.start",
63
+ description: "Start a download (ZIP of plain HTML) of the company's PUBLISHED landings \u2014 the same pack Landings \u2192 Export makes. Returns at once with an id; the pack takes a few minutes. Unpublished changes in this chat are not in it. No password option: a protected pack is made from the dashboard.",
64
+ args: {
65
+ profile: {
66
+ type: "string",
67
+ description: `Download-format fields for this export only, on top of the saved format: a JSON object or @<file>. Example: '{"htmlOutput":"fragment","inlineCss":true}'`,
68
+ required: false
69
+ }
70
+ }
71
+ });
72
+ registerSchema({
73
+ command: "landing.export.status",
74
+ description: "Where one download got to, and its link once it is ready.",
75
+ args: { id: { type: "string", description: "Export id from `start` or `list`", required: true } }
76
+ });
77
+ registerSchema({
78
+ command: "landing.export.list",
79
+ description: "The company's last 10 downloads, newest first, with their status. `status <id>` gives the link.",
80
+ args: {}
81
+ });
82
+ var startCommand = defineCommand({
83
+ meta: {
84
+ name: "start",
85
+ description: "Start a download of the published landings. Examples: baker landing export start | baker landing export start --profile @export-profile.json"
86
+ },
87
+ args: {
88
+ profile: {
89
+ type: "string",
90
+ description: "Download-format fields for this export only (JSON object or @file)",
91
+ required: false
92
+ }
93
+ },
94
+ run: async ({ args }) => {
95
+ const rawProfile = typeof args.profile === "string" ? args.profile : void 0;
96
+ const body = {};
97
+ if (rawProfile !== void 0) {
98
+ const parsed = parseProfileFlag(rawProfile);
99
+ if (!parsed.ok) failValidation(parsed.message);
100
+ body.profile = parsed.profile;
101
+ }
102
+ try {
103
+ const response = await apiPost("/api/landings/export/start", body);
104
+ writeJson({
105
+ ok: true,
106
+ data: { exportId: response.data.exportId },
107
+ hints: exportStartHints({
108
+ stagedProfilePending: response.data.stagedProfilePending,
109
+ profileOverridden: rawProfile !== void 0
110
+ })
111
+ });
112
+ } catch (error) {
113
+ reportError(error);
114
+ }
115
+ }
116
+ });
117
+ var statusCommand = defineCommand({
118
+ meta: {
119
+ name: "status",
120
+ description: "Where a download got to, and its link once ready. Example: baker landing export status <id>"
121
+ },
122
+ args: { id: { type: "positional", description: "Export id", required: true } },
123
+ run: async ({ args }) => {
124
+ try {
125
+ const response = await apiGet("/api/landings/export/status", {
126
+ id: String(args.id)
127
+ });
128
+ writeJson({ ok: true, data: response.data, hints: exportStatusHints(response.data) });
129
+ } catch (error) {
130
+ reportError(error);
131
+ }
132
+ }
133
+ });
134
+ var listCommand = defineCommand({
135
+ meta: { name: "list", description: "The company's last 10 downloads. Example: baker landing export list" },
136
+ args: {},
137
+ run: async () => {
138
+ try {
139
+ const response = await apiGet("/api/landings/export/list");
140
+ writeJson({ ok: true, data: response.data });
141
+ } catch (error) {
142
+ reportError(error);
143
+ }
144
+ }
145
+ });
146
+ var exportCommand = defineCommand({
147
+ meta: {
148
+ name: "export",
149
+ description: `Download the company's published landings as a ZIP of plain HTML.
150
+
151
+ Start here: \`baker landing export start\`, then \`baker landing export status <id>\` for the link.
152
+
153
+ Subcommands:
154
+ baker landing export start [--profile <json|@file>] \u2014 start a download (returns at once)
155
+ baker landing export status <id> \u2014 progress, and the link once ready
156
+ baker landing export list \u2014 the last 10 downloads
157
+
158
+ Full guide: __tooling__/docs/tools/baker/landing.md`
159
+ },
160
+ subCommands: { start: startCommand, status: statusCommand, list: listCommand }
161
+ });
162
+ export {
163
+ exportCommand,
164
+ exportStartHints,
165
+ exportStatusHints,
166
+ parseProfileFlag
167
+ };
168
+ //# sourceMappingURL=export-VGCFD7GL.js.map
@@ -0,0 +1,113 @@
1
+ import {
2
+ AUTO_INGEST_MAX,
3
+ parseAutoIngest
4
+ } from "./chunk-KKJ4KJCW.js";
5
+ import {
6
+ ApiError,
7
+ apiPost
8
+ } from "./chunk-MMOTJIV6.js";
9
+ import "./chunk-2ZZR2SOF.js";
10
+ import "./chunk-YPCVPDU7.js";
11
+ import {
12
+ registerSchema,
13
+ writeJson
14
+ } from "./chunk-D3RTGIT4.js";
15
+ import "./chunk-YQSBHWOI.js";
16
+
17
+ // src/commands/images/extract.ts
18
+ import { defineCommand } from "citty";
19
+
20
+ // src/commands/images/extractErrors.ts
21
+ var RETRYABLE = /* @__PURE__ */ new Set(["UNAVAILABLE", "RATE_LIMITED", "TIMEOUT", "NETWORK_ERROR"]);
22
+ function extractErrorEnvelope(err, url) {
23
+ const retryable = RETRYABLE.has(err.code);
24
+ const fallback = `use \`baker images screenshot ${url}\` to capture the page as one image, or \`baker images logo <domain>\` for the brand's mark, and carry on with the rest of the job.`;
25
+ return {
26
+ ok: false,
27
+ error: {
28
+ code: err.code,
29
+ message: err.message,
30
+ retryable,
31
+ fix: retryable ? { action: "retry_once", explanation: `Run the same command once more. If it fails again, ${fallback}` } : { action: "use_fallback", explanation: `Retrying the same address will fail the same way \u2014 ${fallback}` }
32
+ }
33
+ };
34
+ }
35
+
36
+ // src/commands/images/extract.ts
37
+ registerSchema({
38
+ command: "images.extract",
39
+ description: "Extract images from a URL via Firecrawl (formats: images).",
40
+ args: {
41
+ url: { type: "string", description: "URL to scrape", required: true },
42
+ "wait-for": { type: "number", description: "JS render wait ms", required: false },
43
+ limit: { type: "number", description: "Limit returned images", required: false, default: 50 },
44
+ "auto-ingest": {
45
+ type: "number",
46
+ description: `Auto-ingest top N (0-${AUTO_INGEST_MAX.extract}, default 0)`,
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
+ }
56
+ });
57
+ var extractCommand = defineCommand({
58
+ meta: {
59
+ name: "extract",
60
+ description: "Pull every image from a single URL via Firecrawl. ~$0.001/scrape. Cap auto-ingest at 20.\n\nExample: baker images extract https://stripe.com --auto-ingest 5"
61
+ },
62
+ args: {
63
+ url: { type: "positional", description: "URL to scrape", required: false },
64
+ "wait-for": { type: "string", description: "JS render wait ms", required: false },
65
+ limit: { type: "string", description: "Max returned images", required: false },
66
+ "auto-ingest": { type: "string", description: `Auto-ingest top N (0-${AUTO_INGEST_MAX.extract})`, required: false },
67
+ context: { type: "string", description: "Description context hint applied to auto-ingested hits", required: false }
68
+ },
69
+ run: async ({ args }) => {
70
+ try {
71
+ const url = args.url;
72
+ if (!url) {
73
+ writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "URL is required" } });
74
+ process.exit(1);
75
+ }
76
+ const body = { url };
77
+ if (args["wait-for"]) body.waitFor = Number(args["wait-for"]);
78
+ if (args.limit) body.limit = Number(args.limit);
79
+ if (args["auto-ingest"] !== void 0) {
80
+ const parsed = parseAutoIngest(args["auto-ingest"], AUTO_INGEST_MAX.extract);
81
+ if (!parsed.ok) {
82
+ writeJson({
83
+ ok: false,
84
+ error: {
85
+ code: "VALIDATION_ERROR",
86
+ message: parsed.message,
87
+ fix: {
88
+ action: "retry_with_changes",
89
+ explanation: `Re-run with --auto-ingest in 0-${AUTO_INGEST_MAX.extract}.`
90
+ }
91
+ }
92
+ });
93
+ process.exit(1);
94
+ }
95
+ body.autoIngest = parsed.value;
96
+ }
97
+ if (args.context) body.descriptionContext = args.context;
98
+ const data = await apiPost("/api/images/extract", body);
99
+ writeJson({ ok: true, data });
100
+ } catch (err) {
101
+ if (err instanceof ApiError) {
102
+ writeJson(extractErrorEnvelope(err, String(args.url)));
103
+ process.exit(1);
104
+ }
105
+ writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
106
+ process.exit(1);
107
+ }
108
+ }
109
+ });
110
+ export {
111
+ extractCommand
112
+ };
113
+ //# sourceMappingURL=extract-32J7V2RX.js.map