@koda-sl/baker-cli 0.442.0 → 0.443.0-dev.043c1d4ac

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 (1581) hide show
  1. package/README.md +38 -23
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-4H7QVBRK.js +80 -0
  5. package/dist/account-4H7QVBRK.js.map +1 -0
  6. package/dist/account-IEVEOFIK.js +49 -0
  7. package/dist/account-IEVEOFIK.js.map +1 -0
  8. package/dist/account-RDRK7NOE.js +79 -0
  9. package/dist/account-RDRK7NOE.js.map +1 -0
  10. package/dist/account-writes-AK42HGRM.js +66 -0
  11. package/dist/account-writes-AK42HGRM.js.map +1 -0
  12. package/dist/accounts-4CDRK4S4.js +75 -0
  13. package/dist/accounts-4CDRK4S4.js.map +1 -0
  14. package/dist/accounts-4TYIUVWY.js +77 -0
  15. package/dist/accounts-4TYIUVWY.js.map +1 -0
  16. package/dist/accounts-5QDKBZMH.js +115 -0
  17. package/dist/accounts-5QDKBZMH.js.map +1 -0
  18. package/dist/accounts-6COLJJHM.js +611 -0
  19. package/dist/accounts-6COLJJHM.js.map +1 -0
  20. package/dist/accounts-KYJO3JC6.js +114 -0
  21. package/dist/accounts-KYJO3JC6.js.map +1 -0
  22. package/dist/actions-PEI6ZQAG.js +55 -0
  23. package/dist/active-entities-YUSOUR5M.js +103 -0
  24. package/dist/active-entities-YUSOUR5M.js.map +1 -0
  25. package/dist/activities-ZVQOBHZH.js +74 -0
  26. package/dist/activities-ZVQOBHZH.js.map +1 -0
  27. package/dist/ad-group-writes-QQS4223F.js +170 -0
  28. package/dist/ad-group-writes-QQS4223F.js.map +1 -0
  29. package/dist/ad-groups-WGPDPUI2.js +68 -0
  30. package/dist/ad-groups-WGPDPUI2.js.map +1 -0
  31. package/dist/ad-writes-XE2IE4DS.js +174 -0
  32. package/dist/ad-writes-XE2IE4DS.js.map +1 -0
  33. package/dist/add-577QWMCF.js +97 -0
  34. package/dist/add-577QWMCF.js.map +1 -0
  35. package/dist/add-CUWAW7KG.js +105 -0
  36. package/dist/add-CUWAW7KG.js.map +1 -0
  37. package/dist/add-XDOQQCHS.js +104 -0
  38. package/dist/add-XDOQQCHS.js.map +1 -0
  39. package/dist/add-XEDSBYLM.js +280 -0
  40. package/dist/add-XEDSBYLM.js.map +1 -0
  41. package/dist/ads-BCOSQALY.js +77 -0
  42. package/dist/ads-BCOSQALY.js.map +1 -0
  43. package/dist/ads-H7GH7A26.js +113 -0
  44. package/dist/ads-H7GH7A26.js.map +1 -0
  45. package/dist/ads-TJ7ACFHG.js +40 -0
  46. package/dist/adsets-H7QT42U6.js +176 -0
  47. package/dist/adsets-H7QT42U6.js.map +1 -0
  48. package/dist/advertisers-WSNHNCBQ.js +116 -0
  49. package/dist/advertisers-WSNHNCBQ.js.map +1 -0
  50. package/dist/advertisers-YMHPZYNF.js +111 -0
  51. package/dist/advertisers-YMHPZYNF.js.map +1 -0
  52. package/dist/analytics-PT2GKCFU.js +1958 -0
  53. package/dist/analytics-PT2GKCFU.js.map +1 -0
  54. package/dist/analytics-ZVWUY66X.js +433 -0
  55. package/dist/analytics-ZVWUY66X.js.map +1 -0
  56. package/dist/animate-3Z7HXOLE.js +480 -0
  57. package/dist/animate-3Z7HXOLE.js.map +1 -0
  58. package/dist/assign-B26AJLGN.js +77 -0
  59. package/dist/assign-B26AJLGN.js.map +1 -0
  60. package/dist/audience-size-ZX565D5P.js +94 -0
  61. package/dist/audience-size-ZX565D5P.js.map +1 -0
  62. package/dist/audiences-HFRVIE2X.js +85 -0
  63. package/dist/audiences-HFRVIE2X.js.map +1 -0
  64. package/dist/audiences-JACGRBNN.js +78 -0
  65. package/dist/audiences-JACGRBNN.js.map +1 -0
  66. package/dist/audiences-TGD5US2M.js +268 -0
  67. package/dist/audiences-TGD5US2M.js.map +1 -0
  68. package/dist/audit-AD4ZZNJN.js +88 -0
  69. package/dist/audit-AD4ZZNJN.js.map +1 -0
  70. package/dist/audit-SAXVPGWS.js +151 -0
  71. package/dist/audit-SAXVPGWS.js.map +1 -0
  72. package/dist/autocomplete-6PYFCOMX.js +107 -0
  73. package/dist/autocomplete-6PYFCOMX.js.map +1 -0
  74. package/dist/avatars-2UQJXHPV.js +38 -0
  75. package/dist/bid-pricing-WSHACGX4.js +99 -0
  76. package/dist/bid-pricing-WSHACGX4.js.map +1 -0
  77. package/dist/brand-XBABUT52.js +22 -0
  78. package/dist/brief-KKNC32TA.js +478 -0
  79. package/dist/brief-KKNC32TA.js.map +1 -0
  80. package/dist/businesses-JBDQZZIG.js +53 -0
  81. package/dist/businesses-JBDQZZIG.js.map +1 -0
  82. package/dist/campaign-groups-G35366AW.js +95 -0
  83. package/dist/campaign-groups-G35366AW.js.map +1 -0
  84. package/dist/campaign-writes-SXLZFYF6.js +170 -0
  85. package/dist/campaign-writes-SXLZFYF6.js.map +1 -0
  86. package/dist/campaign-writes-ZQGN7FQ3.js +165 -0
  87. package/dist/campaign-writes-ZQGN7FQ3.js.map +1 -0
  88. package/dist/campaigns-GXUCHQ2S.js +109 -0
  89. package/dist/campaigns-GXUCHQ2S.js.map +1 -0
  90. package/dist/campaigns-WBEG5QA4.js +110 -0
  91. package/dist/campaigns-WBEG5QA4.js.map +1 -0
  92. package/dist/campaigns-WECN54WV.js +107 -0
  93. package/dist/campaigns-WECN54WV.js.map +1 -0
  94. package/dist/campaigns-YS3OGQXO.js +76 -0
  95. package/dist/campaigns-YS3OGQXO.js.map +1 -0
  96. package/dist/canvas-KEXE5P6S.js +46 -0
  97. package/dist/capabilities-74I5AQ36.js +144 -0
  98. package/dist/capabilities-74I5AQ36.js.map +1 -0
  99. package/dist/cards-4477BFEV.js +85 -0
  100. package/dist/cards-4477BFEV.js.map +1 -0
  101. package/dist/catalog-IQEQ5TGQ.js +66 -0
  102. package/dist/catalog-IQEQ5TGQ.js.map +1 -0
  103. package/dist/catalogs-BRXEDE56.js +128 -0
  104. package/dist/catalogs-BRXEDE56.js.map +1 -0
  105. package/dist/changes-6QBJMGJC.js +135 -0
  106. package/dist/changes-6QBJMGJC.js.map +1 -0
  107. package/dist/chatgpt-7W75X3ER.js +47 -0
  108. package/dist/chats-DWHF64IU.js +262 -0
  109. package/dist/chats-DWHF64IU.js.map +1 -0
  110. package/dist/chunk-27NMXSC3.js +486 -0
  111. package/dist/chunk-27NMXSC3.js.map +1 -0
  112. package/dist/chunk-2CD5ZP7M.js +6659 -0
  113. package/dist/chunk-2CD5ZP7M.js.map +1 -0
  114. package/dist/chunk-2TK4DEOE.js +74 -0
  115. package/dist/chunk-3RJ3VGJP.js +197 -0
  116. package/dist/chunk-3RJ3VGJP.js.map +1 -0
  117. package/dist/chunk-4NDCTLI5.js +191 -0
  118. package/dist/chunk-4NZ47VXO.js +137 -0
  119. package/dist/chunk-4NZ47VXO.js.map +1 -0
  120. package/dist/chunk-4SJDDGPV.js +1411 -0
  121. package/dist/chunk-4SJDDGPV.js.map +1 -0
  122. package/dist/chunk-5ARG3CQG.js +141 -0
  123. package/dist/chunk-5HYSKH77.js +315 -0
  124. package/dist/chunk-5HYSKH77.js.map +1 -0
  125. package/dist/chunk-5Z2KSVIV.js +67 -0
  126. package/dist/chunk-654U6NU6.js +534 -0
  127. package/dist/chunk-654U6NU6.js.map +1 -0
  128. package/dist/chunk-6B7VKFS4.js +172 -0
  129. package/dist/chunk-6G5K6ZC6.js +46 -0
  130. package/dist/chunk-73QKIIIR.js +23 -0
  131. package/dist/chunk-75FDTDLH.js +96 -0
  132. package/dist/chunk-75VNSKS3.js +455 -0
  133. package/dist/chunk-75VNSKS3.js.map +1 -0
  134. package/dist/chunk-7GPDUS3P.js +494 -0
  135. package/dist/chunk-7GPDUS3P.js.map +1 -0
  136. package/dist/chunk-7J6EHOH6.js +274 -0
  137. package/dist/chunk-7OFNN4CT.js +58 -0
  138. package/dist/chunk-7QJVPMVB.js +592 -0
  139. package/dist/chunk-7QJVPMVB.js.map +1 -0
  140. package/dist/chunk-AN447DQB.js +159 -0
  141. package/dist/chunk-AN447DQB.js.map +1 -0
  142. package/dist/chunk-BYDF22T4.js +346 -0
  143. package/dist/chunk-BYDF22T4.js.map +1 -0
  144. package/dist/chunk-C6U6UDHJ.js +106 -0
  145. package/dist/chunk-CLMM6P6B.js +1751 -0
  146. package/dist/chunk-CLMM6P6B.js.map +1 -0
  147. package/dist/chunk-DIY6QR3E.js +96 -0
  148. package/dist/chunk-EFSYTROP.js +94 -0
  149. package/dist/chunk-EIP4PYCL.js +496 -0
  150. package/dist/chunk-EIP4PYCL.js.map +1 -0
  151. package/dist/chunk-EZUG6WE2.js +60 -0
  152. package/dist/chunk-EZUG6WE2.js.map +1 -0
  153. package/dist/chunk-F2S5BLPE.js +97 -0
  154. package/dist/chunk-F2S5BLPE.js.map +1 -0
  155. package/dist/chunk-FEXDI4NM.js +103 -0
  156. package/dist/chunk-FHXIEMCG.js +382 -0
  157. package/dist/chunk-FTWJFDIN.js +23992 -0
  158. package/dist/chunk-FTWJFDIN.js.map +1 -0
  159. package/dist/chunk-FXED3VZK.js +174 -0
  160. package/dist/chunk-FXED3VZK.js.map +1 -0
  161. package/dist/chunk-GIJT3A5U.js +166 -0
  162. package/dist/chunk-GIJT3A5U.js.map +1 -0
  163. package/dist/chunk-H26L3OQY.js +42 -0
  164. package/dist/chunk-HIPDMQZ6.js +136 -0
  165. package/dist/chunk-HMEFD2CG.js +5163 -0
  166. package/dist/chunk-HMEFD2CG.js.map +1 -0
  167. package/dist/chunk-HO3IUJ4K.js +70 -0
  168. package/dist/chunk-HO3IUJ4K.js.map +1 -0
  169. package/dist/chunk-HXTGYOQC.js +813 -0
  170. package/dist/chunk-HXTGYOQC.js.map +1 -0
  171. package/dist/chunk-HYCIBVDW.js +98 -0
  172. package/dist/chunk-ICM2OXZV.js +304 -0
  173. package/dist/chunk-ICM2OXZV.js.map +1 -0
  174. package/dist/chunk-IFWP3ZDO.js +215 -0
  175. package/dist/chunk-IKGWQBKJ.js +422 -0
  176. package/dist/chunk-IKGWQBKJ.js.map +1 -0
  177. package/dist/chunk-IXKEWS7X.js +433 -0
  178. package/dist/chunk-JERXV5A3.js +26 -0
  179. package/dist/chunk-JM73NDCM.js +163 -0
  180. package/dist/chunk-JM73NDCM.js.map +1 -0
  181. package/dist/chunk-K3PN7TN5.js +84 -0
  182. package/dist/chunk-K3PN7TN5.js.map +1 -0
  183. package/dist/chunk-KLNKEVIY.js +136 -0
  184. package/dist/chunk-KNY76UGC.js +84 -0
  185. package/dist/chunk-KWAOTV7F.js +830 -0
  186. package/dist/chunk-L3OLEAJN.js +92 -0
  187. package/dist/chunk-L3OLEAJN.js.map +1 -0
  188. package/dist/chunk-LERTEZST.js +28 -0
  189. package/dist/chunk-LL2CD5WU.js +310 -0
  190. package/dist/chunk-LO6GEJ4Z.js +51 -0
  191. package/dist/chunk-LS5MTRFI.js +106 -0
  192. package/dist/chunk-LZ73CZGP.js +188 -0
  193. package/dist/chunk-MELOSESI.js +20 -0
  194. package/dist/chunk-MLU6STIN.js +66 -0
  195. package/dist/chunk-MLU6STIN.js.map +1 -0
  196. package/dist/chunk-MZL4H5PY.js +225 -0
  197. package/dist/chunk-MZL4H5PY.js.map +1 -0
  198. package/dist/chunk-NAWWC5I3.js +454 -0
  199. package/dist/chunk-NFSLRRIE.js +77 -0
  200. package/dist/chunk-NFSLRRIE.js.map +1 -0
  201. package/dist/chunk-NPE7EWBE.js +297 -0
  202. package/dist/chunk-NU7JSWVA.js +946 -0
  203. package/dist/chunk-NU7JSWVA.js.map +1 -0
  204. package/dist/chunk-OBDAYP2P.js +3155 -0
  205. package/dist/chunk-OBDAYP2P.js.map +1 -0
  206. package/dist/chunk-OC5IJSIW.js +420 -0
  207. package/dist/chunk-OC5IJSIW.js.map +1 -0
  208. package/dist/chunk-OKG6GX2F.js +169 -0
  209. package/dist/chunk-OTFHEHIU.js +1706 -0
  210. package/dist/chunk-OTFHEHIU.js.map +1 -0
  211. package/dist/chunk-PBA3YCZA.js +76 -0
  212. package/dist/chunk-PWGWMIIJ.js +25 -0
  213. package/dist/chunk-QHLB5V7J.js +19 -0
  214. package/dist/chunk-QJE6ZYGI.js +131 -0
  215. package/dist/chunk-QSN5MZGS.js +74 -0
  216. package/dist/chunk-QXZYAIWS.js +390 -0
  217. package/dist/chunk-QXZYAIWS.js.map +1 -0
  218. package/dist/chunk-RRUJQVWA.js +4372 -0
  219. package/dist/chunk-RRUJQVWA.js.map +1 -0
  220. package/dist/chunk-RSW6QJPH.js +217 -0
  221. package/dist/chunk-RX6F3GEA.js +610 -0
  222. package/dist/chunk-RX6F3GEA.js.map +1 -0
  223. package/dist/chunk-SBMIQDCX.js +175 -0
  224. package/dist/chunk-SJDPHVGE.js +363 -0
  225. package/dist/chunk-SJDPHVGE.js.map +1 -0
  226. package/dist/chunk-STIB5DR5.js +56 -0
  227. package/dist/chunk-TBEUMOEL.js +95 -0
  228. package/dist/chunk-TCNNOLVZ.js +207 -0
  229. package/dist/chunk-TCNNOLVZ.js.map +1 -0
  230. package/dist/chunk-TD2P4HBP.js +55 -0
  231. package/dist/chunk-URIYUZIN.js +111 -0
  232. package/dist/chunk-URIYUZIN.js.map +1 -0
  233. package/dist/chunk-VAJBWA2U.js +75 -0
  234. package/dist/chunk-VAJBWA2U.js.map +1 -0
  235. package/dist/chunk-VBHDZSI5.js +57 -0
  236. package/dist/chunk-VFIOJD5M.js +309 -0
  237. package/dist/chunk-VVZBBKRC.js +296 -0
  238. package/dist/chunk-VWCELTQE.js +1079 -0
  239. package/dist/chunk-VWCELTQE.js.map +1 -0
  240. package/dist/chunk-W3B4BHQU.js +31 -0
  241. package/dist/chunk-W3ZHJJVT.js +139 -0
  242. package/dist/chunk-W3ZHJJVT.js.map +1 -0
  243. package/dist/chunk-WS2GMOSG.js +74 -0
  244. package/dist/chunk-XBOK23HI.js +214 -0
  245. package/dist/chunk-XG3XCHN6.js +26 -0
  246. package/dist/chunk-XL3BMSYG.js +125 -0
  247. package/dist/chunk-XWH7CCBL.js +6065 -0
  248. package/dist/chunk-XWH7CCBL.js.map +1 -0
  249. package/dist/chunk-XYMPS526.js +622 -0
  250. package/dist/chunk-Y5ZGWLWP.js +2882 -0
  251. package/dist/chunk-Y5ZGWLWP.js.map +1 -0
  252. package/dist/chunk-YBMVHGY3.js +333 -0
  253. package/dist/chunk-ZJ47BR6X.js +337 -0
  254. package/dist/chunk-ZJ47BR6X.js.map +1 -0
  255. package/dist/chunk-ZNBDKK4Y.js +76 -0
  256. package/dist/chunk-ZNBDKK4Y.js.map +1 -0
  257. package/dist/chunk-ZXTW3TXY.js +133 -0
  258. package/dist/chunk-ZXTW3TXY.js.map +1 -0
  259. package/dist/claim-EIL4ZBSN.js +197 -0
  260. package/dist/claim-EIL4ZBSN.js.map +1 -0
  261. package/dist/cli.js +36 -37
  262. package/dist/cli.js.map +1 -1
  263. package/dist/client-VHN32ZRE.js +19 -0
  264. package/dist/code-YS6ZMGX3.js +76 -0
  265. package/dist/code-YS6ZMGX3.js.map +1 -0
  266. package/dist/companies-2UG7RDYN.js +195 -0
  267. package/dist/companies-2UG7RDYN.js.map +1 -0
  268. package/dist/complete-I4KRFYMD.js +81 -0
  269. package/dist/complete-I4KRFYMD.js.map +1 -0
  270. package/dist/config-CQN5FHMZ.js +88 -0
  271. package/dist/config-CQN5FHMZ.js.map +1 -0
  272. package/dist/connect-TA5W6YGW.js +36 -0
  273. package/dist/content-3ZPP4SW2.js +81 -0
  274. package/dist/content-3ZPP4SW2.js.map +1 -0
  275. package/dist/conversation-BJI54MI6.js +93 -0
  276. package/dist/conversation-BJI54MI6.js.map +1 -0
  277. package/dist/conversion-report-XQBJ6LG4.js +125 -0
  278. package/dist/conversion-report-XQBJ6LG4.js.map +1 -0
  279. package/dist/conversion-upload-command-JULHGVIR.js +438 -0
  280. package/dist/conversion-upload-command-JULHGVIR.js.map +1 -0
  281. package/dist/conversion-writes-UBCVXP2E.js +120 -0
  282. package/dist/conversion-writes-UBCVXP2E.js.map +1 -0
  283. package/dist/conversions-D236RTUK.js +76 -0
  284. package/dist/conversions-D236RTUK.js.map +1 -0
  285. package/dist/conversions-VJOJ5S4U.js +135 -0
  286. package/dist/conversions-VJOJ5S4U.js.map +1 -0
  287. package/dist/countries-FYHM3IMJ.js +82 -0
  288. package/dist/countries-FYHM3IMJ.js.map +1 -0
  289. package/dist/create-E7BIZNUC.js +130 -0
  290. package/dist/create-E7BIZNUC.js.map +1 -0
  291. package/dist/create-HKOO7O5L.js +59 -0
  292. package/dist/create-HKOO7O5L.js.map +1 -0
  293. package/dist/create-JLQCXAT2.js +207 -0
  294. package/dist/create-JLQCXAT2.js.map +1 -0
  295. package/dist/create-VY3RQXOY.js +235 -0
  296. package/dist/create-VY3RQXOY.js.map +1 -0
  297. package/dist/creatives-PSWCNY7U.js +87 -0
  298. package/dist/creatives-PSWCNY7U.js.map +1 -0
  299. package/dist/creatives-QXMBEA2V.js +51 -0
  300. package/dist/creatives-QXMBEA2V.js.map +1 -0
  301. package/dist/creatives-VXQQUH2F.js +182 -0
  302. package/dist/creatives-VXQQUH2F.js.map +1 -0
  303. package/dist/credentials-G5BJK7OR.js +1055 -0
  304. package/dist/credentials-G5BJK7OR.js.map +1 -0
  305. package/dist/critique-CMLAPVUB.js +1449 -0
  306. package/dist/critique-CMLAPVUB.js.map +1 -0
  307. package/dist/critique-O5VNNBPB.js +214 -0
  308. package/dist/critique-O5VNNBPB.js.map +1 -0
  309. package/dist/crm-CL7R67FT.js +224 -0
  310. package/dist/crm-CL7R67FT.js.map +1 -0
  311. package/dist/crm-GJCAM3DI.js +318 -0
  312. package/dist/crm-GJCAM3DI.js.map +1 -0
  313. package/dist/crop-2J4RKJ6B.js +113 -0
  314. package/dist/crop-2J4RKJ6B.js.map +1 -0
  315. package/dist/currency-DJDVIR3C.js +88 -0
  316. package/dist/currency-DJDVIR3C.js.map +1 -0
  317. package/dist/custom-conversions-6P555U2K.js +125 -0
  318. package/dist/custom-conversions-6P555U2K.js.map +1 -0
  319. package/dist/customers-4RJGRR2Y.js +56 -0
  320. package/dist/delete-3AV3ARMX.js +71 -0
  321. package/dist/delete-3AV3ARMX.js.map +1 -0
  322. package/dist/delete-4QXLTL24.js +63 -0
  323. package/dist/delete-4QXLTL24.js.map +1 -0
  324. package/dist/delete-A5XD52K4.js +69 -0
  325. package/dist/delete-A5XD52K4.js.map +1 -0
  326. package/dist/delete-IJNJTAGW.js +54 -0
  327. package/dist/delete-IJNJTAGW.js.map +1 -0
  328. package/dist/delete-MRM2S4Z5.js +71 -0
  329. package/dist/delete-MRM2S4Z5.js.map +1 -0
  330. package/dist/delete-R57JFJ3A.js +66 -0
  331. package/dist/delete-R57JFJ3A.js.map +1 -0
  332. package/dist/demographics-VMARSTTE.js +138 -0
  333. package/dist/demographics-VMARSTTE.js.map +1 -0
  334. package/dist/describe-6NVOWIBE.js +97 -0
  335. package/dist/describe-6NVOWIBE.js.map +1 -0
  336. package/dist/describe-P3PPIQME.js +97 -0
  337. package/dist/describe-P3PPIQME.js.map +1 -0
  338. package/dist/dimensions-EYAYO27I.js +101 -0
  339. package/dist/dimensions-EYAYO27I.js.map +1 -0
  340. package/dist/discard-Y2BKPW4Z.js +66 -0
  341. package/dist/discard-Y2BKPW4Z.js.map +1 -0
  342. package/dist/discover-M3ZKKFEL.js +172 -0
  343. package/dist/discover-M3ZKKFEL.js.map +1 -0
  344. package/dist/domain-YTHDTRWN.js +98 -0
  345. package/dist/domain-YTHDTRWN.js.map +1 -0
  346. package/dist/download-7T6HIJKD.js +299 -0
  347. package/dist/download-7T6HIJKD.js.map +1 -0
  348. package/dist/draft-ABGQYDHP.js +328 -0
  349. package/dist/draft-ABGQYDHP.js.map +1 -0
  350. package/dist/draft-BGUJDHXR.js +103 -0
  351. package/dist/draft-BGUJDHXR.js.map +1 -0
  352. package/dist/draft-KIBMVKSR.js +100 -0
  353. package/dist/draft-KIBMVKSR.js.map +1 -0
  354. package/dist/draft-KOLU5BRR.js +217 -0
  355. package/dist/draft-KOLU5BRR.js.map +1 -0
  356. package/dist/draft-MNFJ4G3C.js +281 -0
  357. package/dist/draft-MNFJ4G3C.js.map +1 -0
  358. package/dist/draft-U6CT6LCC.js +107 -0
  359. package/dist/draft-U6CT6LCC.js.map +1 -0
  360. package/dist/draft-YDY2Q2K6.js +233 -0
  361. package/dist/draft-YDY2Q2K6.js.map +1 -0
  362. package/dist/draft-ZVVUAMMQ.js +306 -0
  363. package/dist/draft-ZVVUAMMQ.js.map +1 -0
  364. package/dist/engine/index.d.ts +10 -0
  365. package/dist/engine/index.js +16 -17
  366. package/dist/env-KIP2J2UB.js +43 -0
  367. package/dist/experiment-LKK77YAN.js +1377 -0
  368. package/dist/experiment-LKK77YAN.js.map +1 -0
  369. package/dist/export-JQRMBJ7D.js +168 -0
  370. package/dist/export-JQRMBJ7D.js.map +1 -0
  371. package/dist/extract-7QKLME7Z.js +113 -0
  372. package/dist/extract-7QKLME7Z.js.map +1 -0
  373. package/dist/facets-UXN4MYPO.js +114 -0
  374. package/dist/facets-UXN4MYPO.js.map +1 -0
  375. package/dist/favorites-NSGF4OV5.js +178 -0
  376. package/dist/favorites-NSGF4OV5.js.map +1 -0
  377. package/dist/feed-RV4KPPXM.js +157 -0
  378. package/dist/feed-RV4KPPXM.js.map +1 -0
  379. package/dist/feedback-3FQYLADC.js +66 -0
  380. package/dist/feedback-3FQYLADC.js.map +1 -0
  381. package/dist/feedback-record-DTRZC73R.js +176 -0
  382. package/dist/feedback-record-DTRZC73R.js.map +1 -0
  383. package/dist/fetch-UTTJAOLC.js +171 -0
  384. package/dist/fetch-UTTJAOLC.js.map +1 -0
  385. package/dist/fetch-XF76JABV.js +139 -0
  386. package/dist/fetch-XF76JABV.js.map +1 -0
  387. package/dist/find-OTDIX6V4.js +134 -0
  388. package/dist/find-OTDIX6V4.js.map +1 -0
  389. package/dist/fit-KXHYKIA4.js +43 -0
  390. package/dist/flows-PB4K66NJ.js +244 -0
  391. package/dist/flows-PB4K66NJ.js.map +1 -0
  392. package/dist/follow-DUIEGDVK.js +82 -0
  393. package/dist/follow-DUIEGDVK.js.map +1 -0
  394. package/dist/follow-competitors-IT5ZVJPE.js +131 -0
  395. package/dist/follow-competitors-IT5ZVJPE.js.map +1 -0
  396. package/dist/following-RKC2FLHI.js +109 -0
  397. package/dist/following-RKC2FLHI.js.map +1 -0
  398. package/dist/fonts-NTOQS2KU.js +34 -0
  399. package/dist/forecast-RWDIDDWP.js +104 -0
  400. package/dist/forecast-RWDIDDWP.js.map +1 -0
  401. package/dist/funding-NYO65IMT.js +85 -0
  402. package/dist/funding-NYO65IMT.js.map +1 -0
  403. package/dist/funnel-XCKPRYTV.js +837 -0
  404. package/dist/funnel-XCKPRYTV.js.map +1 -0
  405. package/dist/ga4-UDQ2HA2J.js +55 -0
  406. package/dist/generate-DMQUS665.js +262 -0
  407. package/dist/generate-DMQUS665.js.map +1 -0
  408. package/dist/get-3L6W3E3T.js +59 -0
  409. package/dist/get-3L6W3E3T.js.map +1 -0
  410. package/dist/get-67IG7SZI.js +78 -0
  411. package/dist/get-67IG7SZI.js.map +1 -0
  412. package/dist/get-6WEYKOY6.js +63 -0
  413. package/dist/get-6WEYKOY6.js.map +1 -0
  414. package/dist/get-P743RPSI.js +63 -0
  415. package/dist/get-P743RPSI.js.map +1 -0
  416. package/dist/get-WO22OCMZ.js +54 -0
  417. package/dist/get-WO22OCMZ.js.map +1 -0
  418. package/dist/get-XN5ZGDIK.js +61 -0
  419. package/dist/get-XN5ZGDIK.js.map +1 -0
  420. package/dist/get-YIHTAMRT.js +92 -0
  421. package/dist/get-YIHTAMRT.js.map +1 -0
  422. package/dist/gif-53ULFVLR.js +94 -0
  423. package/dist/gif-53ULFVLR.js.map +1 -0
  424. package/dist/google-KIBLORXX.js +1872 -0
  425. package/dist/google-KIBLORXX.js.map +1 -0
  426. package/dist/google-KTO3PLEU.js +136 -0
  427. package/dist/google-KTO3PLEU.js.map +1 -0
  428. package/dist/group-EFZ3AJIE.js +43 -0
  429. package/dist/group-EFZ3AJIE.js.map +1 -0
  430. package/dist/group-GKWCCX66.js +43 -0
  431. package/dist/group-GKWCCX66.js.map +1 -0
  432. package/dist/gsc-P3QYGDV2.js +30 -0
  433. package/dist/history-PBFRKLU6.js +133 -0
  434. package/dist/history-PBFRKLU6.js.map +1 -0
  435. package/dist/history-Q3QCT64S.js +67 -0
  436. package/dist/history-Q3QCT64S.js.map +1 -0
  437. package/dist/hubspot-PMOZST7W.js +779 -0
  438. package/dist/hubspot-PMOZST7W.js.map +1 -0
  439. package/dist/icon-I43F77FV.js +137 -0
  440. package/dist/icon-I43F77FV.js.map +1 -0
  441. package/dist/ideas-PU7IAX6F.js +32 -0
  442. package/dist/images-QI2HTX6B.js +90 -0
  443. package/dist/improve-BCCU5AS6.js +86 -0
  444. package/dist/improve-BCCU5AS6.js.map +1 -0
  445. package/dist/ingest-BYJNFOOT.js +23 -0
  446. package/dist/ingest-ZQM47NVZ.js +107 -0
  447. package/dist/ingest-ZQM47NVZ.js.map +1 -0
  448. package/dist/insights-LNAXV2CG.js +122 -0
  449. package/dist/insights-LNAXV2CG.js.map +1 -0
  450. package/dist/insights-NZWSJKU4.js +423 -0
  451. package/dist/insights-NZWSJKU4.js.map +1 -0
  452. package/dist/inspect-CQH55Q6G.js +189 -0
  453. package/dist/inspect-CQH55Q6G.js.map +1 -0
  454. package/dist/inspiration-I4MMKAWA.js +53 -0
  455. package/dist/intent-ICKFJRT2.js +95 -0
  456. package/dist/intent-ICKFJRT2.js.map +1 -0
  457. package/dist/job-L7RJZMSG.js +202 -0
  458. package/dist/job-L7RJZMSG.js.map +1 -0
  459. package/dist/job-create-JUDAN52O.js +109 -0
  460. package/dist/job-create-JUDAN52O.js.map +1 -0
  461. package/dist/job-status-U43WE3RJ.js +74 -0
  462. package/dist/job-status-U43WE3RJ.js.map +1 -0
  463. package/dist/keep-55CPC7DG.js +78 -0
  464. package/dist/keep-55CPC7DG.js.map +1 -0
  465. package/dist/keyword-gap-NGPH32FN.js +130 -0
  466. package/dist/keyword-gap-NGPH32FN.js.map +1 -0
  467. package/dist/keyword-metrics-E3NJUSEQ.js +197 -0
  468. package/dist/keyword-metrics-E3NJUSEQ.js.map +1 -0
  469. package/dist/keywords-for-site-RH47P4GJ.js +124 -0
  470. package/dist/keywords-for-site-RH47P4GJ.js.map +1 -0
  471. package/dist/landing-4PA7GCPM.js +28 -0
  472. package/dist/landing-4PA7GCPM.js.map +1 -0
  473. package/dist/languages-JDYL2N5F.js +40 -0
  474. package/dist/languages-JDYL2N5F.js.map +1 -0
  475. package/dist/languages-JMVNOHMG.js +55 -0
  476. package/dist/languages-JMVNOHMG.js.map +1 -0
  477. package/dist/layerize-RPD6SNP6.js +190 -0
  478. package/dist/layerize-RPD6SNP6.js.map +1 -0
  479. package/dist/leads-7EVHMNUF.js +293 -0
  480. package/dist/leads-7EVHMNUF.js.map +1 -0
  481. package/dist/leads-I7BO5V7P.js +90 -0
  482. package/dist/leads-I7BO5V7P.js.map +1 -0
  483. package/dist/learn-HZU3QWNN.js +204 -0
  484. package/dist/library-ARKRLCNJ.js +109 -0
  485. package/dist/library-ARKRLCNJ.js.map +1 -0
  486. package/dist/lighthouse-NQBUCHTW.js +75 -0
  487. package/dist/lighthouse-NQBUCHTW.js.map +1 -0
  488. package/dist/line-item-writes-JSR53MID.js +208 -0
  489. package/dist/line-item-writes-JSR53MID.js.map +1 -0
  490. package/dist/line-items-2WFLKOOR.js +103 -0
  491. package/dist/line-items-2WFLKOOR.js.map +1 -0
  492. package/dist/link-AYXOJQDV.js +64 -0
  493. package/dist/link-AYXOJQDV.js.map +1 -0
  494. package/dist/linkedin-M2PVZYLV.js +1008 -0
  495. package/dist/linkedin-M2PVZYLV.js.map +1 -0
  496. package/dist/list-3OKEMUFD.js +151 -0
  497. package/dist/list-3OKEMUFD.js.map +1 -0
  498. package/dist/list-4MQC23JH.js +63 -0
  499. package/dist/list-4MQC23JH.js.map +1 -0
  500. package/dist/list-7MVBXOJT.js +51 -0
  501. package/dist/list-7MVBXOJT.js.map +1 -0
  502. package/dist/list-A5UCIR2J.js +65 -0
  503. package/dist/list-A5UCIR2J.js.map +1 -0
  504. package/dist/list-AL7N6X2P.js +50 -0
  505. package/dist/list-AL7N6X2P.js.map +1 -0
  506. package/dist/list-LI4OGQFW.js +57 -0
  507. package/dist/list-LI4OGQFW.js.map +1 -0
  508. package/dist/list-P7NAFN6J.js +76 -0
  509. package/dist/list-P7NAFN6J.js.map +1 -0
  510. package/dist/list-QGLIL7J6.js +303 -0
  511. package/dist/list-QGLIL7J6.js.map +1 -0
  512. package/dist/locations-2NKBJKBT.js +67 -0
  513. package/dist/locations-2NKBJKBT.js.map +1 -0
  514. package/dist/locations-S4U6IJIS.js +40 -0
  515. package/dist/locations-S4U6IJIS.js.map +1 -0
  516. package/dist/log-QHR2JNKW.js +92 -0
  517. package/dist/log-QHR2JNKW.js.map +1 -0
  518. package/dist/logo-2IP663QO.js +18 -0
  519. package/dist/lookup-XK45W2SH.js +22 -0
  520. package/dist/make-ANPR2D2L.js +516 -0
  521. package/dist/make-ANPR2D2L.js.map +1 -0
  522. package/dist/map-3BVFAP33.js +404 -0
  523. package/dist/map-3BVFAP33.js.map +1 -0
  524. package/dist/mcp-LH5KR6RO.js +476 -0
  525. package/dist/mcp-LH5KR6RO.js.map +1 -0
  526. package/dist/media-6CQYG4UY.js +89 -0
  527. package/dist/media-6CQYG4UY.js.map +1 -0
  528. package/dist/media-M7E6V2XU.js +15 -0
  529. package/dist/media-sources-3D246I3O.js +32 -0
  530. package/dist/members-4DUQHLZH.js +44 -0
  531. package/dist/members-4DUQHLZH.js.map +1 -0
  532. package/dist/meta-EZ4SY25M.js +69 -0
  533. package/dist/metrics-AY4RP54F.js +152 -0
  534. package/dist/metrics-AY4RP54F.js.map +1 -0
  535. package/dist/models-5NTC7A5G.js +155 -0
  536. package/dist/models-5NTC7A5G.js.map +1 -0
  537. package/dist/normalize-CD4PQRYY.js +138 -0
  538. package/dist/normalize-CD4PQRYY.js.map +1 -0
  539. package/dist/normalize-ICQF2AST.js +806 -0
  540. package/dist/normalize-ICQF2AST.js.map +1 -0
  541. package/dist/options-6TE5E34Z.js +121 -0
  542. package/dist/options-6TE5E34Z.js.map +1 -0
  543. package/dist/output-RAH3TSIL.js +24 -0
  544. package/dist/page-GS3WLT2C.js +105 -0
  545. package/dist/page-GS3WLT2C.js.map +1 -0
  546. package/dist/pages-FXYQLHSJ.js +66 -0
  547. package/dist/pages-FXYQLHSJ.js.map +1 -0
  548. package/dist/performance-7LQQCEAW.js +24 -0
  549. package/dist/pinterest-AUH7WBA7.js +96 -0
  550. package/dist/pinterest-AUH7WBA7.js.map +1 -0
  551. package/dist/pixels-TZPF746S.js +60 -0
  552. package/dist/pixels-TZPF746S.js.map +1 -0
  553. package/dist/pixels-ZFF4BGUH.js +108 -0
  554. package/dist/pixels-ZFF4BGUH.js.map +1 -0
  555. package/dist/preview-AD4GKYIA.js +169 -0
  556. package/dist/preview-AD4GKYIA.js.map +1 -0
  557. package/dist/promoted-tweet-writes-F76YIMB6.js +180 -0
  558. package/dist/promoted-tweet-writes-F76YIMB6.js.map +1 -0
  559. package/dist/promoted-tweets-EJL37P7K.js +119 -0
  560. package/dist/promoted-tweets-EJL37P7K.js.map +1 -0
  561. package/dist/properties-L2XIYQDS.js +101 -0
  562. package/dist/properties-L2XIYQDS.js.map +1 -0
  563. package/dist/publish-H5S2IKZP.js +322 -0
  564. package/dist/publish-H5S2IKZP.js.map +1 -0
  565. package/dist/query-CPZZNMDY.js +1341 -0
  566. package/dist/query-CPZZNMDY.js.map +1 -0
  567. package/dist/query-SGGBCHTF.js +236 -0
  568. package/dist/query-SGGBCHTF.js.map +1 -0
  569. package/dist/query-VTGVZQIO.js +247 -0
  570. package/dist/query-VTGVZQIO.js.map +1 -0
  571. package/dist/read-LSF7DYTG.js +140 -0
  572. package/dist/read-LSF7DYTG.js.map +1 -0
  573. package/dist/reddit-INGPFGP4.js +26 -0
  574. package/dist/refresh-MKSKISPX.js +94 -0
  575. package/dist/refresh-MKSKISPX.js.map +1 -0
  576. package/dist/release-J5LIAIZT.js +60 -0
  577. package/dist/release-J5LIAIZT.js.map +1 -0
  578. package/dist/relevant-pages-MTMFMBPD.js +99 -0
  579. package/dist/relevant-pages-MTMFMBPD.js.map +1 -0
  580. package/dist/remove-6LGGKMLJ.js +48 -0
  581. package/dist/remove-6LGGKMLJ.js.map +1 -0
  582. package/dist/remove-LYEK7VFV.js +50 -0
  583. package/dist/remove-LYEK7VFV.js.map +1 -0
  584. package/dist/reopen-FR4UBOG7.js +63 -0
  585. package/dist/reopen-FR4UBOG7.js.map +1 -0
  586. package/dist/rerun-3FEOYNG2.js +86 -0
  587. package/dist/rerun-3FEOYNG2.js.map +1 -0
  588. package/dist/research-PA53M335.js +59 -0
  589. package/dist/research-RPJSOWPT.js +226 -0
  590. package/dist/research-RPJSOWPT.js.map +1 -0
  591. package/dist/reset-H3ES4WV5.js +54 -0
  592. package/dist/reset-H3ES4WV5.js.map +1 -0
  593. package/dist/reset-RCYRE5WO.js +54 -0
  594. package/dist/reset-RCYRE5WO.js.map +1 -0
  595. package/dist/resolve-QIDQJCE6.js +121 -0
  596. package/dist/resolve-QIDQJCE6.js.map +1 -0
  597. package/dist/retry-PLLCFOJW.js +60 -0
  598. package/dist/retry-PLLCFOJW.js.map +1 -0
  599. package/dist/retry-WLVMR7XP.js +62 -0
  600. package/dist/retry-WLVMR7XP.js.map +1 -0
  601. package/dist/retry-failed-6HXPUVXJ.js +45 -0
  602. package/dist/retry-failed-6HXPUVXJ.js.map +1 -0
  603. package/dist/run-2IM2QOCI.js +61 -0
  604. package/dist/run-4D7ZCLMF.js +65 -0
  605. package/dist/run-4D7ZCLMF.js.map +1 -0
  606. package/dist/scaffold-ad-YYUVL4IP.js +1550 -0
  607. package/dist/scaffold-ad-YYUVL4IP.js.map +1 -0
  608. package/dist/scaffold-static-ad-SUEYXLOR.js +948 -0
  609. package/dist/scaffold-static-ad-SUEYXLOR.js.map +1 -0
  610. package/dist/scaffold-video-IBH2YJZD.js +874 -0
  611. package/dist/scaffold-video-IBH2YJZD.js.map +1 -0
  612. package/dist/schedule-O2K6M43V.js +66 -0
  613. package/dist/schedule-O2K6M43V.js.map +1 -0
  614. package/dist/schedule-RXUUCNNI.js +61 -0
  615. package/dist/schedule-RXUUCNNI.js.map +1 -0
  616. package/dist/scheduled-agents-2NCGSD76.js +49 -0
  617. package/dist/schema-6GR77VJG.js +63 -0
  618. package/dist/schema-6GR77VJG.js.map +1 -0
  619. package/dist/schema-SFODURN7.js +129 -0
  620. package/dist/schema-SFODURN7.js.map +1 -0
  621. package/dist/scrape-ETAMW43A.js +2241 -0
  622. package/dist/scrape-ETAMW43A.js.map +1 -0
  623. package/dist/screenshot-YCQF25ZB.js +102 -0
  624. package/dist/screenshot-YCQF25ZB.js.map +1 -0
  625. package/dist/search-742XSULP.js +224 -0
  626. package/dist/search-742XSULP.js.map +1 -0
  627. package/dist/search-7QVZOWSI.js +174 -0
  628. package/dist/search-7QVZOWSI.js.map +1 -0
  629. package/dist/search-MEEM4D3W.js +92 -0
  630. package/dist/search-MEEM4D3W.js.map +1 -0
  631. package/dist/search-OQNGSMUH.js +91 -0
  632. package/dist/search-OQNGSMUH.js.map +1 -0
  633. package/dist/search-XUIVHGAY.js +26 -0
  634. package/dist/seeds-N6FF5S4T.js +101 -0
  635. package/dist/seeds-N6FF5S4T.js.map +1 -0
  636. package/dist/select-ZWDEVAH2.js +95 -0
  637. package/dist/sends-WGJVQUMF.js +309 -0
  638. package/dist/sends-WGJVQUMF.js.map +1 -0
  639. package/dist/sequences-OIPVR7JL.js +146 -0
  640. package/dist/sequences-OIPVR7JL.js.map +1 -0
  641. package/dist/set-prompt-SBEOQGCF.js +187 -0
  642. package/dist/set-prompt-SBEOQGCF.js.map +1 -0
  643. package/dist/setup-links-XW4A6L2I.js +141 -0
  644. package/dist/setup-links-XW4A6L2I.js.map +1 -0
  645. package/dist/shared-HJDFNID4.js +31 -0
  646. package/dist/site-6UTQSYIK.js +177 -0
  647. package/dist/site-6UTQSYIK.js.map +1 -0
  648. package/dist/sitemaps-POPZJTAX.js +87 -0
  649. package/dist/sitemaps-POPZJTAX.js.map +1 -0
  650. package/dist/sites-262H6LM4.js +101 -0
  651. package/dist/sites-262H6LM4.js.map +1 -0
  652. package/dist/skills-6TQZLIMP.js +47 -0
  653. package/dist/skills-6TQZLIMP.js.map +1 -0
  654. package/dist/sources-QQNWQLUM.js +421 -0
  655. package/dist/sources-QQNWQLUM.js.map +1 -0
  656. package/dist/sources-UGMZFZ2E.js +30 -0
  657. package/dist/stale-QRO3M5R2.js +64 -0
  658. package/dist/stale-QRO3M5R2.js.map +1 -0
  659. package/dist/stats-NNXZMPZR.js +34 -0
  660. package/dist/status-NXGKJGH7.js +62 -0
  661. package/dist/status-NXGKJGH7.js.map +1 -0
  662. package/dist/sticker-4KMBSMP5.js +94 -0
  663. package/dist/sticker-4KMBSMP5.js.map +1 -0
  664. package/dist/stock-2YCDN3N6.js +179 -0
  665. package/dist/stock-2YCDN3N6.js.map +1 -0
  666. package/dist/studio-HUEBE6DS.js +49 -0
  667. package/dist/sync-CF7FVUQJ.js +54 -0
  668. package/dist/sync-CF7FVUQJ.js.map +1 -0
  669. package/dist/sync-RXS6BPLM.js +54 -0
  670. package/dist/sync-RXS6BPLM.js.map +1 -0
  671. package/dist/sync-ZSNUBYPM.js +265 -0
  672. package/dist/sync-ZSNUBYPM.js.map +1 -0
  673. package/dist/sync-definition-YBDM7D4M.js +54 -0
  674. package/dist/tag-manager-HREEYGVM.js +43 -0
  675. package/dist/tags-C65JB762.js +224 -0
  676. package/dist/tags-C65JB762.js.map +1 -0
  677. package/dist/tags-CMBKEXIZ.js +20 -0
  678. package/dist/tags-CMBKEXIZ.js.map +1 -0
  679. package/dist/tags-GFFQLLG2.js +20 -0
  680. package/dist/tags-GFFQLLG2.js.map +1 -0
  681. package/dist/tags-IJN2SPSM.js +20 -0
  682. package/dist/tags-IJN2SPSM.js.map +1 -0
  683. package/dist/tags-R3K35KTL.js +26 -0
  684. package/dist/targeting-constants-XJ2VOW7K.js +118 -0
  685. package/dist/targeting-constants-XJ2VOW7K.js.map +1 -0
  686. package/dist/targeting-criteria-IHBPLHSX.js +113 -0
  687. package/dist/targeting-criteria-IHBPLHSX.js.map +1 -0
  688. package/dist/targets-JH37NVJF.js +102 -0
  689. package/dist/targets-JH37NVJF.js.map +1 -0
  690. package/dist/templates-HXSHQ23T.js +178 -0
  691. package/dist/templates-HXSHQ23T.js.map +1 -0
  692. package/dist/testimonials-5QGCPZ6K.js +32 -0
  693. package/dist/top-companies-FJEFKVI7.js +108 -0
  694. package/dist/top-companies-FJEFKVI7.js.map +1 -0
  695. package/dist/translate-H7O5K3RC.js +457 -0
  696. package/dist/translate-H7O5K3RC.js.map +1 -0
  697. package/dist/triggers-SEOAAJSS.js +141 -0
  698. package/dist/triggers-SEOAAJSS.js.map +1 -0
  699. package/dist/tweets-ATP3FQAC.js +123 -0
  700. package/dist/tweets-ATP3FQAC.js.map +1 -0
  701. package/dist/unfollow-CBVPGPF7.js +46 -0
  702. package/dist/unfollow-CBVPGPF7.js.map +1 -0
  703. package/dist/unlink-UZDVSHBO.js +67 -0
  704. package/dist/unlink-UZDVSHBO.js.map +1 -0
  705. package/dist/unstage-4ZEULXEQ.js +95 -0
  706. package/dist/unstage-4ZEULXEQ.js.map +1 -0
  707. package/dist/unstage-CE5RRGM5.js +84 -0
  708. package/dist/unstage-CE5RRGM5.js.map +1 -0
  709. package/dist/update-DGZKEP6T.js +63 -0
  710. package/dist/update-DGZKEP6T.js.map +1 -0
  711. package/dist/update-JOS4ITAV.js +142 -0
  712. package/dist/update-JOS4ITAV.js.map +1 -0
  713. package/dist/update-JZ4I6WW7.js +98 -0
  714. package/dist/update-JZ4I6WW7.js.map +1 -0
  715. package/dist/update-ZXOG2V34.js +155 -0
  716. package/dist/update-ZXOG2V34.js.map +1 -0
  717. package/dist/upload-L5SYZB3X.js +150 -0
  718. package/dist/upload-L5SYZB3X.js.map +1 -0
  719. package/dist/upload-SSOPA7ZT.js +126 -0
  720. package/dist/upload-SSOPA7ZT.js.map +1 -0
  721. package/dist/upscale-YWRLFU22.js +109 -0
  722. package/dist/upscale-YWRLFU22.js.map +1 -0
  723. package/dist/url-options-QEWKRKZ3.js +127 -0
  724. package/dist/url-options-QEWKRKZ3.js.map +1 -0
  725. package/dist/url-params-OR5N5EWT.js +98 -0
  726. package/dist/url-params-OR5N5EWT.js.map +1 -0
  727. package/dist/use-UT2DIZOG.js +95 -0
  728. package/dist/use-UT2DIZOG.js.map +1 -0
  729. package/dist/validate-2PLHIP6I.js +90 -0
  730. package/dist/validate-2PLHIP6I.js.map +1 -0
  731. package/dist/variant-FLZJYGYL.js +338 -0
  732. package/dist/variant-FLZJYGYL.js.map +1 -0
  733. package/dist/videos-GIYDCCKR.js +39 -0
  734. package/dist/view-NPAG66QK.js +121 -0
  735. package/dist/view-NPAG66QK.js.map +1 -0
  736. package/dist/viewer-check-VN2JK2LW.js +70 -0
  737. package/dist/web-WUGLSULO.js +135 -0
  738. package/dist/web-WUGLSULO.js.map +1 -0
  739. package/dist/winners-I5BMATJZ.js +79 -0
  740. package/dist/winners-I5BMATJZ.js.map +1 -0
  741. package/dist/winning-ads-7QWEIMRU.js +62 -0
  742. package/dist/write-commands-ERKVRHTC.js +206 -0
  743. package/dist/write-commands-ERKVRHTC.js.map +1 -0
  744. package/dist/write-commands-SVJ43D7G.js +1015 -0
  745. package/dist/write-commands-SVJ43D7G.js.map +1 -0
  746. package/dist/write-commands-TAYGTJEZ.js +737 -0
  747. package/dist/write-commands-TAYGTJEZ.js.map +1 -0
  748. package/dist/write-commands-WTRSOSO3.js +713 -0
  749. package/dist/write-commands-WTRSOSO3.js.map +1 -0
  750. package/dist/x-OEAKQBB7.js +47 -0
  751. package/package.json +1 -1
  752. package/dist/account-5GT2BEST.js +0 -80
  753. package/dist/account-5GT2BEST.js.map +0 -1
  754. package/dist/account-S2RDGMMM.js +0 -81
  755. package/dist/account-S2RDGMMM.js.map +0 -1
  756. package/dist/account-YLZAL6W7.js +0 -50
  757. package/dist/account-YLZAL6W7.js.map +0 -1
  758. package/dist/account-writes-VBY7FJ7C.js +0 -67
  759. package/dist/account-writes-VBY7FJ7C.js.map +0 -1
  760. package/dist/accounts-4IIHAQGS.js +0 -116
  761. package/dist/accounts-4IIHAQGS.js.map +0 -1
  762. package/dist/accounts-E7TRNPFA.js +0 -115
  763. package/dist/accounts-E7TRNPFA.js.map +0 -1
  764. package/dist/accounts-GFJOGX7J.js +0 -613
  765. package/dist/accounts-GFJOGX7J.js.map +0 -1
  766. package/dist/accounts-INB4Z4LZ.js +0 -76
  767. package/dist/accounts-INB4Z4LZ.js.map +0 -1
  768. package/dist/accounts-NLL4QWKY.js +0 -78
  769. package/dist/accounts-NLL4QWKY.js.map +0 -1
  770. package/dist/actions-7XF5L4U3.js +0 -55
  771. package/dist/active-entities-IGQG5EZO.js +0 -104
  772. package/dist/active-entities-IGQG5EZO.js.map +0 -1
  773. package/dist/activities-MH4C4IVV.js +0 -75
  774. package/dist/activities-MH4C4IVV.js.map +0 -1
  775. package/dist/ad-group-writes-B64OBHQ4.js +0 -171
  776. package/dist/ad-group-writes-B64OBHQ4.js.map +0 -1
  777. package/dist/ad-groups-APCFB6SI.js +0 -69
  778. package/dist/ad-groups-APCFB6SI.js.map +0 -1
  779. package/dist/ad-writes-A7P772KD.js +0 -175
  780. package/dist/ad-writes-A7P772KD.js.map +0 -1
  781. package/dist/add-33WQDKGF.js +0 -106
  782. package/dist/add-33WQDKGF.js.map +0 -1
  783. package/dist/add-65OIGMD7.js +0 -99
  784. package/dist/add-65OIGMD7.js.map +0 -1
  785. package/dist/add-EW276CKL.js +0 -282
  786. package/dist/add-EW276CKL.js.map +0 -1
  787. package/dist/add-EXKVB5KR.js +0 -107
  788. package/dist/add-EXKVB5KR.js.map +0 -1
  789. package/dist/ads-A2HP6UVG.js +0 -114
  790. package/dist/ads-A2HP6UVG.js.map +0 -1
  791. package/dist/ads-H6NPLMNX.js +0 -78
  792. package/dist/ads-H6NPLMNX.js.map +0 -1
  793. package/dist/ads-IRE5RZCS.js +0 -40
  794. package/dist/adsets-UZJTGQQM.js +0 -153
  795. package/dist/adsets-UZJTGQQM.js.map +0 -1
  796. package/dist/advertisers-CFS2JAYJ.js +0 -113
  797. package/dist/advertisers-CFS2JAYJ.js.map +0 -1
  798. package/dist/advertisers-WQBPBK4D.js +0 -117
  799. package/dist/advertisers-WQBPBK4D.js.map +0 -1
  800. package/dist/analytics-L46XME7Y.js +0 -434
  801. package/dist/analytics-L46XME7Y.js.map +0 -1
  802. package/dist/analytics-UT7FQ6XA.js +0 -1959
  803. package/dist/analytics-UT7FQ6XA.js.map +0 -1
  804. package/dist/animate-S6ZU3723.js +0 -482
  805. package/dist/animate-S6ZU3723.js.map +0 -1
  806. package/dist/assign-XHHVXXOL.js +0 -79
  807. package/dist/assign-XHHVXXOL.js.map +0 -1
  808. package/dist/audience-size-6FR7WFVU.js +0 -95
  809. package/dist/audience-size-6FR7WFVU.js.map +0 -1
  810. package/dist/audiences-BN2LT7E6.js +0 -86
  811. package/dist/audiences-BN2LT7E6.js.map +0 -1
  812. package/dist/audiences-HQS6V7EV.js +0 -269
  813. package/dist/audiences-HQS6V7EV.js.map +0 -1
  814. package/dist/audiences-JVEXHN67.js +0 -79
  815. package/dist/audiences-JVEXHN67.js.map +0 -1
  816. package/dist/audit-7UDFEGZV.js +0 -152
  817. package/dist/audit-7UDFEGZV.js.map +0 -1
  818. package/dist/audit-YTRTNTAK.js +0 -89
  819. package/dist/audit-YTRTNTAK.js.map +0 -1
  820. package/dist/autocomplete-LAZ6FFG6.js +0 -108
  821. package/dist/autocomplete-LAZ6FFG6.js.map +0 -1
  822. package/dist/avatars-G54K55J3.js +0 -38
  823. package/dist/bid-pricing-EQKORHAA.js +0 -100
  824. package/dist/bid-pricing-EQKORHAA.js.map +0 -1
  825. package/dist/brand-ODTHWWFL.js +0 -22
  826. package/dist/brief-EA4DWOJW.js +0 -479
  827. package/dist/brief-EA4DWOJW.js.map +0 -1
  828. package/dist/businesses-QHNI7MSK.js +0 -54
  829. package/dist/businesses-QHNI7MSK.js.map +0 -1
  830. package/dist/campaign-groups-EJEGKHQD.js +0 -96
  831. package/dist/campaign-groups-EJEGKHQD.js.map +0 -1
  832. package/dist/campaign-writes-DZE43ZOC.js +0 -166
  833. package/dist/campaign-writes-DZE43ZOC.js.map +0 -1
  834. package/dist/campaign-writes-OX62FCEH.js +0 -171
  835. package/dist/campaign-writes-OX62FCEH.js.map +0 -1
  836. package/dist/campaigns-APRWHCGF.js +0 -111
  837. package/dist/campaigns-APRWHCGF.js.map +0 -1
  838. package/dist/campaigns-D2LYKUO2.js +0 -108
  839. package/dist/campaigns-D2LYKUO2.js.map +0 -1
  840. package/dist/campaigns-E3H4POUU.js +0 -77
  841. package/dist/campaigns-E3H4POUU.js.map +0 -1
  842. package/dist/campaigns-OPLRDMJW.js +0 -110
  843. package/dist/campaigns-OPLRDMJW.js.map +0 -1
  844. package/dist/canvas-M5HAG7VA.js +0 -46
  845. package/dist/capabilities-4Q4CMVIE.js +0 -146
  846. package/dist/capabilities-4Q4CMVIE.js.map +0 -1
  847. package/dist/cards-L37M7Q3L.js +0 -86
  848. package/dist/cards-L37M7Q3L.js.map +0 -1
  849. package/dist/catalog-HOWAUW2V.js +0 -67
  850. package/dist/catalog-HOWAUW2V.js.map +0 -1
  851. package/dist/catalogs-XBIQ4PNK.js +0 -129
  852. package/dist/catalogs-XBIQ4PNK.js.map +0 -1
  853. package/dist/changes-HCOPS4FF.js +0 -136
  854. package/dist/changes-HCOPS4FF.js.map +0 -1
  855. package/dist/chatgpt-PLKNBNVL.js +0 -47
  856. package/dist/chats-HELZHJO4.js +0 -264
  857. package/dist/chats-HELZHJO4.js.map +0 -1
  858. package/dist/chunk-3KQ5R3H7.js +0 -45
  859. package/dist/chunk-3KQ5R3H7.js.map +0 -1
  860. package/dist/chunk-4MU3U3SO.js +0 -103
  861. package/dist/chunk-4VKV3DNC.js +0 -23992
  862. package/dist/chunk-4VKV3DNC.js.map +0 -1
  863. package/dist/chunk-5HH4RGC4.js +0 -136
  864. package/dist/chunk-5HH4RGC4.js.map +0 -1
  865. package/dist/chunk-5NQIFCNX.js +0 -141
  866. package/dist/chunk-6CCDQO2F.js +0 -225
  867. package/dist/chunk-6CCDQO2F.js.map +0 -1
  868. package/dist/chunk-6FBZ5E6L.js +0 -96
  869. package/dist/chunk-6YWRJMGR.js +0 -309
  870. package/dist/chunk-73MCYA5Z.js +0 -310
  871. package/dist/chunk-7DQAVVUA.js +0 -130
  872. package/dist/chunk-7DQAVVUA.js.map +0 -1
  873. package/dist/chunk-A3PEJ3V3.js +0 -95
  874. package/dist/chunk-A57AHUNA.js +0 -28
  875. package/dist/chunk-ABELDLY3.js +0 -594
  876. package/dist/chunk-ABELDLY3.js.map +0 -1
  877. package/dist/chunk-AWICKT2B.js +0 -25
  878. package/dist/chunk-AYC2WM4P.js +0 -106
  879. package/dist/chunk-AYC2WM4P.js.map +0 -1
  880. package/dist/chunk-BDD2ILIT.js +0 -56
  881. package/dist/chunk-BSFTG66P.js +0 -2743
  882. package/dist/chunk-BSFTG66P.js.map +0 -1
  883. package/dist/chunk-BSUN6JMU.js +0 -215
  884. package/dist/chunk-CBEL3P22.js +0 -57
  885. package/dist/chunk-CSADPKPC.js +0 -161
  886. package/dist/chunk-CSADPKPC.js.map +0 -1
  887. package/dist/chunk-DPEQVHTX.js +0 -26
  888. package/dist/chunk-DQLBKU7G.js +0 -469
  889. package/dist/chunk-DQLBKU7G.js.map +0 -1
  890. package/dist/chunk-ECXNE6RJ.js +0 -622
  891. package/dist/chunk-EDFVATFW.js +0 -211
  892. package/dist/chunk-EDFVATFW.js.map +0 -1
  893. package/dist/chunk-EPK2GYLV.js +0 -214
  894. package/dist/chunk-EYO62URT.js +0 -172
  895. package/dist/chunk-F3WFP75M.js +0 -94
  896. package/dist/chunk-F6NJAHAZ.js +0 -19
  897. package/dist/chunk-F7HBCFUA.js +0 -188
  898. package/dist/chunk-FCTWXNRC.js +0 -365
  899. package/dist/chunk-FCTWXNRC.js.map +0 -1
  900. package/dist/chunk-FFZBW4CC.js +0 -297
  901. package/dist/chunk-FR345TDN.js +0 -577
  902. package/dist/chunk-FR345TDN.js.map +0 -1
  903. package/dist/chunk-FRVROFI6.js +0 -98
  904. package/dist/chunk-G32FXVQ6.js +0 -31
  905. package/dist/chunk-HA5D6US2.js +0 -26
  906. package/dist/chunk-HWWPDUZM.js +0 -217
  907. package/dist/chunk-IEULFYA2.js +0 -174
  908. package/dist/chunk-IEULFYA2.js.map +0 -1
  909. package/dist/chunk-IMZIECST.js +0 -830
  910. package/dist/chunk-IPF4P6ZQ.js +0 -392
  911. package/dist/chunk-IPF4P6ZQ.js.map +0 -1
  912. package/dist/chunk-IRHNWYDT.js +0 -106
  913. package/dist/chunk-JH7NHC5W.js +0 -169
  914. package/dist/chunk-JIHG6K7N.js +0 -30
  915. package/dist/chunk-JIHG6K7N.js.map +0 -1
  916. package/dist/chunk-JKDITP62.js +0 -1380
  917. package/dist/chunk-JKDITP62.js.map +0 -1
  918. package/dist/chunk-JMXBUIVI.js +0 -84
  919. package/dist/chunk-KHCN2QXV.js +0 -346
  920. package/dist/chunk-KHCN2QXV.js.map +0 -1
  921. package/dist/chunk-KY4MPR6R.js +0 -3155
  922. package/dist/chunk-KY4MPR6R.js.map +0 -1
  923. package/dist/chunk-L4DOL7L7.js +0 -125
  924. package/dist/chunk-L6PDFIND.js +0 -496
  925. package/dist/chunk-L6PDFIND.js.map +0 -1
  926. package/dist/chunk-L7HPNEKW.js +0 -304
  927. package/dist/chunk-L7HPNEKW.js.map +0 -1
  928. package/dist/chunk-LB3VYIS2.js +0 -141
  929. package/dist/chunk-LB3VYIS2.js.map +0 -1
  930. package/dist/chunk-LDVMMLRA.js +0 -106
  931. package/dist/chunk-LQ4HBQ2B.js +0 -433
  932. package/dist/chunk-LXUEWTHJ.js +0 -788
  933. package/dist/chunk-LXUEWTHJ.js.map +0 -1
  934. package/dist/chunk-LYZVLKRA.js +0 -175
  935. package/dist/chunk-MBKCUSMR.js +0 -6078
  936. package/dist/chunk-MBKCUSMR.js.map +0 -1
  937. package/dist/chunk-MPI3SWIT.js +0 -536
  938. package/dist/chunk-MPI3SWIT.js.map +0 -1
  939. package/dist/chunk-MXPFUDFR.js +0 -1024
  940. package/dist/chunk-MXPFUDFR.js.map +0 -1
  941. package/dist/chunk-N5SQSMMR.js +0 -229
  942. package/dist/chunk-N5SQSMMR.js.map +0 -1
  943. package/dist/chunk-NEONVKMJ.js +0 -455
  944. package/dist/chunk-NEONVKMJ.js.map +0 -1
  945. package/dist/chunk-NFSV3CDO.js +0 -6198
  946. package/dist/chunk-NFSV3CDO.js.map +0 -1
  947. package/dist/chunk-NGT6MARJ.js +0 -274
  948. package/dist/chunk-NGYKF4T6.js +0 -20
  949. package/dist/chunk-NMMKTPGI.js +0 -136
  950. package/dist/chunk-O4AXPEOE.js +0 -923
  951. package/dist/chunk-O4AXPEOE.js.map +0 -1
  952. package/dist/chunk-OPEMWO6C.js +0 -5096
  953. package/dist/chunk-OPEMWO6C.js.map +0 -1
  954. package/dist/chunk-OZLBLXTK.js +0 -74
  955. package/dist/chunk-PB4LQHL2.js +0 -4341
  956. package/dist/chunk-PB4LQHL2.js.map +0 -1
  957. package/dist/chunk-PDJZMQ7F.js +0 -316
  958. package/dist/chunk-PDJZMQ7F.js.map +0 -1
  959. package/dist/chunk-PNHDM76R.js +0 -74
  960. package/dist/chunk-PNHDM76R.js.map +0 -1
  961. package/dist/chunk-Q7UF4ERB.js +0 -74
  962. package/dist/chunk-QRXTDXMX.js +0 -129
  963. package/dist/chunk-QRXTDXMX.js.map +0 -1
  964. package/dist/chunk-QTERC4PG.js +0 -1700
  965. package/dist/chunk-QTERC4PG.js.map +0 -1
  966. package/dist/chunk-QYOPQRLI.js +0 -296
  967. package/dist/chunk-R34LJSPM.js +0 -42
  968. package/dist/chunk-R4ODZS43.js +0 -492
  969. package/dist/chunk-R4ODZS43.js.map +0 -1
  970. package/dist/chunk-RJAQEZVD.js +0 -23
  971. package/dist/chunk-RPFBZHHE.js +0 -55
  972. package/dist/chunk-SXRSLUW7.js +0 -454
  973. package/dist/chunk-T5RKIWPQ.js +0 -352
  974. package/dist/chunk-T5RKIWPQ.js.map +0 -1
  975. package/dist/chunk-TCSPJQ2X.js +0 -136
  976. package/dist/chunk-TD44SXQX.js +0 -58
  977. package/dist/chunk-TQAXOBKJ.js +0 -364
  978. package/dist/chunk-TQAXOBKJ.js.map +0 -1
  979. package/dist/chunk-TTFTS2SO.js +0 -131
  980. package/dist/chunk-UA5EUJXV.js +0 -51
  981. package/dist/chunk-W7OFLOZB.js +0 -46
  982. package/dist/chunk-WAQYXH2U.js +0 -76
  983. package/dist/chunk-WWD4PITU.js +0 -333
  984. package/dist/chunk-WZ5YRUQU.js +0 -12
  985. package/dist/chunk-WZ5YRUQU.js.map +0 -1
  986. package/dist/chunk-XEVVAGAG.js +0 -422
  987. package/dist/chunk-XEVVAGAG.js.map +0 -1
  988. package/dist/chunk-Y4JR4RDM.js +0 -74
  989. package/dist/chunk-YMOVI3WT.js +0 -382
  990. package/dist/chunk-YS6PCTPS.js +0 -96
  991. package/dist/chunk-YUP46PWY.js +0 -199
  992. package/dist/chunk-YUP46PWY.js.map +0 -1
  993. package/dist/chunk-Z4NYXXTP.js +0 -42
  994. package/dist/chunk-Z4NYXXTP.js.map +0 -1
  995. package/dist/chunk-Z5AUNK6P.js +0 -1709
  996. package/dist/chunk-Z5AUNK6P.js.map +0 -1
  997. package/dist/chunk-ZAFR46HG.js +0 -67
  998. package/dist/chunk-ZHW3O25C.js +0 -191
  999. package/dist/claim-CG2IMTHK.js +0 -199
  1000. package/dist/claim-CG2IMTHK.js.map +0 -1
  1001. package/dist/client-XKDFFS7O.js +0 -20
  1002. package/dist/code-JWIOO2AJ.js +0 -78
  1003. package/dist/code-JWIOO2AJ.js.map +0 -1
  1004. package/dist/companies-LQN4HUUH.js +0 -196
  1005. package/dist/companies-LQN4HUUH.js.map +0 -1
  1006. package/dist/complete-MKB27QP7.js +0 -82
  1007. package/dist/complete-MKB27QP7.js.map +0 -1
  1008. package/dist/config-LJOEAYFZ.js +0 -89
  1009. package/dist/config-LJOEAYFZ.js.map +0 -1
  1010. package/dist/connect-ATGYJNG4.js +0 -37
  1011. package/dist/content-Y2BJSXG6.js +0 -83
  1012. package/dist/content-Y2BJSXG6.js.map +0 -1
  1013. package/dist/conversation-EFNQM435.js +0 -94
  1014. package/dist/conversation-EFNQM435.js.map +0 -1
  1015. package/dist/conversion-report-EUSTSHPV.js +0 -126
  1016. package/dist/conversion-report-EUSTSHPV.js.map +0 -1
  1017. package/dist/conversion-upload-command-677OT5NZ.js +0 -432
  1018. package/dist/conversion-upload-command-677OT5NZ.js.map +0 -1
  1019. package/dist/conversion-writes-E7M6VHGB.js +0 -121
  1020. package/dist/conversion-writes-E7M6VHGB.js.map +0 -1
  1021. package/dist/conversions-BXZLEXHU.js +0 -136
  1022. package/dist/conversions-BXZLEXHU.js.map +0 -1
  1023. package/dist/conversions-FERAOXWG.js +0 -77
  1024. package/dist/conversions-FERAOXWG.js.map +0 -1
  1025. package/dist/countries-TKPX2GDH.js +0 -83
  1026. package/dist/countries-TKPX2GDH.js.map +0 -1
  1027. package/dist/create-HGMIWFVX.js +0 -132
  1028. package/dist/create-HGMIWFVX.js.map +0 -1
  1029. package/dist/create-LBJV3NPD.js +0 -209
  1030. package/dist/create-LBJV3NPD.js.map +0 -1
  1031. package/dist/create-QTPZ7PP7.js +0 -117
  1032. package/dist/create-QTPZ7PP7.js.map +0 -1
  1033. package/dist/create-SBIHEG25.js +0 -60
  1034. package/dist/create-SBIHEG25.js.map +0 -1
  1035. package/dist/creatives-CIOOFE3T.js +0 -88
  1036. package/dist/creatives-CIOOFE3T.js.map +0 -1
  1037. package/dist/creatives-MIUJAK4E.js +0 -49
  1038. package/dist/creatives-MIUJAK4E.js.map +0 -1
  1039. package/dist/creatives-QXR7QDXM.js +0 -183
  1040. package/dist/creatives-QXR7QDXM.js.map +0 -1
  1041. package/dist/credentials-CMVAKAUL.js +0 -1057
  1042. package/dist/credentials-CMVAKAUL.js.map +0 -1
  1043. package/dist/critique-LUB35ORK.js +0 -213
  1044. package/dist/critique-LUB35ORK.js.map +0 -1
  1045. package/dist/critique-XXCM7YAV.js +0 -1477
  1046. package/dist/critique-XXCM7YAV.js.map +0 -1
  1047. package/dist/crm-EGNVKQHB.js +0 -279
  1048. package/dist/crm-EGNVKQHB.js.map +0 -1
  1049. package/dist/crm-I6IQ5M55.js +0 -226
  1050. package/dist/crm-I6IQ5M55.js.map +0 -1
  1051. package/dist/crop-ES2IDPUL.js +0 -115
  1052. package/dist/crop-ES2IDPUL.js.map +0 -1
  1053. package/dist/currency-VFKYXFBM.js +0 -89
  1054. package/dist/currency-VFKYXFBM.js.map +0 -1
  1055. package/dist/custom-conversions-WPTEXOWR.js +0 -126
  1056. package/dist/custom-conversions-WPTEXOWR.js.map +0 -1
  1057. package/dist/customers-ACRYXALZ.js +0 -58
  1058. package/dist/delete-3AHBFPQJ.js +0 -68
  1059. package/dist/delete-3AHBFPQJ.js.map +0 -1
  1060. package/dist/delete-E7WYQN2L.js +0 -73
  1061. package/dist/delete-E7WYQN2L.js.map +0 -1
  1062. package/dist/delete-EJCB5MHV.js +0 -71
  1063. package/dist/delete-EJCB5MHV.js.map +0 -1
  1064. package/dist/delete-J677F4BG.js +0 -64
  1065. package/dist/delete-J677F4BG.js.map +0 -1
  1066. package/dist/delete-LVQ7R6DI.js +0 -73
  1067. package/dist/delete-LVQ7R6DI.js.map +0 -1
  1068. package/dist/delete-U4K6NIOE.js +0 -55
  1069. package/dist/delete-U4K6NIOE.js.map +0 -1
  1070. package/dist/demographics-RY6R6VWA.js +0 -139
  1071. package/dist/demographics-RY6R6VWA.js.map +0 -1
  1072. package/dist/describe-N36XDO4P.js +0 -99
  1073. package/dist/describe-N36XDO4P.js.map +0 -1
  1074. package/dist/describe-Q5OAJDYH.js +0 -99
  1075. package/dist/describe-Q5OAJDYH.js.map +0 -1
  1076. package/dist/dimensions-YIWQVFTO.js +0 -103
  1077. package/dist/dimensions-YIWQVFTO.js.map +0 -1
  1078. package/dist/discard-UO4DJNP3.js +0 -67
  1079. package/dist/discard-UO4DJNP3.js.map +0 -1
  1080. package/dist/discover-IASOLBUQ.js +0 -173
  1081. package/dist/discover-IASOLBUQ.js.map +0 -1
  1082. package/dist/domain-QBF4TBGL.js +0 -100
  1083. package/dist/domain-QBF4TBGL.js.map +0 -1
  1084. package/dist/download-DKFYGXEH.js +0 -301
  1085. package/dist/download-DKFYGXEH.js.map +0 -1
  1086. package/dist/draft-5ZZOTJZR.js +0 -282
  1087. package/dist/draft-5ZZOTJZR.js.map +0 -1
  1088. package/dist/draft-DKMUTG4F.js +0 -104
  1089. package/dist/draft-DKMUTG4F.js.map +0 -1
  1090. package/dist/draft-FMOQUVPP.js +0 -219
  1091. package/dist/draft-FMOQUVPP.js.map +0 -1
  1092. package/dist/draft-KFXJCKCH.js +0 -234
  1093. package/dist/draft-KFXJCKCH.js.map +0 -1
  1094. package/dist/draft-KJ6SH67P.js +0 -101
  1095. package/dist/draft-KJ6SH67P.js.map +0 -1
  1096. package/dist/draft-QW7EYFFU.js +0 -329
  1097. package/dist/draft-QW7EYFFU.js.map +0 -1
  1098. package/dist/draft-URMXE4U4.js +0 -101
  1099. package/dist/draft-URMXE4U4.js.map +0 -1
  1100. package/dist/draft-ZU7MZLIT.js +0 -300
  1101. package/dist/draft-ZU7MZLIT.js.map +0 -1
  1102. package/dist/env-ODWJOKNV.js +0 -44
  1103. package/dist/experiment-TUKKH6UJ.js +0 -1378
  1104. package/dist/experiment-TUKKH6UJ.js.map +0 -1
  1105. package/dist/export-WXFUVX6F.js +0 -170
  1106. package/dist/export-WXFUVX6F.js.map +0 -1
  1107. package/dist/extract-PY3J3WVF.js +0 -115
  1108. package/dist/extract-PY3J3WVF.js.map +0 -1
  1109. package/dist/facets-NUEIHCKA.js +0 -115
  1110. package/dist/facets-NUEIHCKA.js.map +0 -1
  1111. package/dist/favorites-JDFIYSV2.js +0 -180
  1112. package/dist/favorites-JDFIYSV2.js.map +0 -1
  1113. package/dist/feed-CYFNDBJS.js +0 -159
  1114. package/dist/feed-CYFNDBJS.js.map +0 -1
  1115. package/dist/feedback-E2P3NB7H.js +0 -68
  1116. package/dist/feedback-E2P3NB7H.js.map +0 -1
  1117. package/dist/feedback-record-IMCTEDOX.js +0 -137
  1118. package/dist/feedback-record-IMCTEDOX.js.map +0 -1
  1119. package/dist/fetch-ELSDT3NZ.js +0 -141
  1120. package/dist/fetch-ELSDT3NZ.js.map +0 -1
  1121. package/dist/fetch-NM7MD3CN.js +0 -172
  1122. package/dist/fetch-NM7MD3CN.js.map +0 -1
  1123. package/dist/find-HYMLZCKA.js +0 -136
  1124. package/dist/find-HYMLZCKA.js.map +0 -1
  1125. package/dist/fit-5WZ6NVSF.js +0 -44
  1126. package/dist/flows-ZEUUIXCS.js +0 -246
  1127. package/dist/flows-ZEUUIXCS.js.map +0 -1
  1128. package/dist/follow-RGJ76HHD.js +0 -84
  1129. package/dist/follow-RGJ76HHD.js.map +0 -1
  1130. package/dist/follow-competitors-JMNOP2ZT.js +0 -133
  1131. package/dist/follow-competitors-JMNOP2ZT.js.map +0 -1
  1132. package/dist/following-5GINRDTL.js +0 -111
  1133. package/dist/following-5GINRDTL.js.map +0 -1
  1134. package/dist/fonts-7U7I2TWV.js +0 -27
  1135. package/dist/forecast-PGDYFFKQ.js +0 -105
  1136. package/dist/forecast-PGDYFFKQ.js.map +0 -1
  1137. package/dist/funding-ED6PDKJF.js +0 -86
  1138. package/dist/funding-ED6PDKJF.js.map +0 -1
  1139. package/dist/funnel-IML4F5ZP.js +0 -838
  1140. package/dist/funnel-IML4F5ZP.js.map +0 -1
  1141. package/dist/ga4-QPEXE6YG.js +0 -55
  1142. package/dist/generate-VVTQCJRI.js +0 -264
  1143. package/dist/generate-VVTQCJRI.js.map +0 -1
  1144. package/dist/get-CZSESEHU.js +0 -61
  1145. package/dist/get-CZSESEHU.js.map +0 -1
  1146. package/dist/get-DEGOS3R6.js +0 -63
  1147. package/dist/get-DEGOS3R6.js.map +0 -1
  1148. package/dist/get-L3ZGUJJB.js +0 -65
  1149. package/dist/get-L3ZGUJJB.js.map +0 -1
  1150. package/dist/get-NX5DGSRP.js +0 -65
  1151. package/dist/get-NX5DGSRP.js.map +0 -1
  1152. package/dist/get-TL6UET23.js +0 -56
  1153. package/dist/get-TL6UET23.js.map +0 -1
  1154. package/dist/get-UNZMYRB6.js +0 -80
  1155. package/dist/get-UNZMYRB6.js.map +0 -1
  1156. package/dist/get-ZVRRZDUU.js +0 -94
  1157. package/dist/get-ZVRRZDUU.js.map +0 -1
  1158. package/dist/gif-MNBSPA64.js +0 -96
  1159. package/dist/gif-MNBSPA64.js.map +0 -1
  1160. package/dist/google-C2Z4XWRL.js +0 -1866
  1161. package/dist/google-C2Z4XWRL.js.map +0 -1
  1162. package/dist/google-LJSSLBP3.js +0 -138
  1163. package/dist/google-LJSSLBP3.js.map +0 -1
  1164. package/dist/group-7BGYA6LK.js +0 -44
  1165. package/dist/group-7BGYA6LK.js.map +0 -1
  1166. package/dist/group-MPYAKBH5.js +0 -44
  1167. package/dist/group-MPYAKBH5.js.map +0 -1
  1168. package/dist/gsc-LC5ADBA3.js +0 -30
  1169. package/dist/history-GPQE2ZYR.js +0 -68
  1170. package/dist/history-GPQE2ZYR.js.map +0 -1
  1171. package/dist/history-XTSLGMK6.js +0 -135
  1172. package/dist/history-XTSLGMK6.js.map +0 -1
  1173. package/dist/hubspot-GPTEZD3A.js +0 -781
  1174. package/dist/hubspot-GPTEZD3A.js.map +0 -1
  1175. package/dist/icon-YKMRIU7A.js +0 -139
  1176. package/dist/icon-YKMRIU7A.js.map +0 -1
  1177. package/dist/ideas-NEBJBIBM.js +0 -31
  1178. package/dist/images-ASWWS5TH.js +0 -90
  1179. package/dist/improve-VXDJGXTG.js +0 -88
  1180. package/dist/improve-VXDJGXTG.js.map +0 -1
  1181. package/dist/ingest-AW37RWJN.js +0 -109
  1182. package/dist/ingest-AW37RWJN.js.map +0 -1
  1183. package/dist/ingest-X7UPOCKP.js +0 -24
  1184. package/dist/insights-MHUV75RQ.js +0 -424
  1185. package/dist/insights-MHUV75RQ.js.map +0 -1
  1186. package/dist/insights-NLQXAW3F.js +0 -123
  1187. package/dist/insights-NLQXAW3F.js.map +0 -1
  1188. package/dist/inspect-TXVKPBAR.js +0 -191
  1189. package/dist/inspect-TXVKPBAR.js.map +0 -1
  1190. package/dist/inspiration-64DY3QWN.js +0 -53
  1191. package/dist/intent-3HY6DRHW.js +0 -96
  1192. package/dist/intent-3HY6DRHW.js.map +0 -1
  1193. package/dist/job-L73KC4TC.js +0 -203
  1194. package/dist/job-L73KC4TC.js.map +0 -1
  1195. package/dist/job-create-LR3EHWKO.js +0 -110
  1196. package/dist/job-create-LR3EHWKO.js.map +0 -1
  1197. package/dist/job-status-MSL4EAJT.js +0 -75
  1198. package/dist/job-status-MSL4EAJT.js.map +0 -1
  1199. package/dist/keep-XUATLR5B.js +0 -80
  1200. package/dist/keep-XUATLR5B.js.map +0 -1
  1201. package/dist/keyword-gap-DJAYVD4U.js +0 -131
  1202. package/dist/keyword-gap-DJAYVD4U.js.map +0 -1
  1203. package/dist/keyword-metrics-4FEFFTQO.js +0 -198
  1204. package/dist/keyword-metrics-4FEFFTQO.js.map +0 -1
  1205. package/dist/keywords-for-site-HIMEQY63.js +0 -125
  1206. package/dist/keywords-for-site-HIMEQY63.js.map +0 -1
  1207. package/dist/landing-KU3ILVB3.js +0 -28
  1208. package/dist/landing-KU3ILVB3.js.map +0 -1
  1209. package/dist/languages-4QYK5DMW.js +0 -56
  1210. package/dist/languages-4QYK5DMW.js.map +0 -1
  1211. package/dist/languages-L5E7WS77.js +0 -41
  1212. package/dist/languages-L5E7WS77.js.map +0 -1
  1213. package/dist/layerize-YAVLAXYM.js +0 -192
  1214. package/dist/layerize-YAVLAXYM.js.map +0 -1
  1215. package/dist/leads-DR3EK77T.js +0 -91
  1216. package/dist/leads-DR3EK77T.js.map +0 -1
  1217. package/dist/leads-PFPQOCBR.js +0 -286
  1218. package/dist/leads-PFPQOCBR.js.map +0 -1
  1219. package/dist/learn-D4D75X2Y.js +0 -204
  1220. package/dist/library-E2SJS7PT.js +0 -111
  1221. package/dist/library-E2SJS7PT.js.map +0 -1
  1222. package/dist/lighthouse-QMECKX4R.js +0 -76
  1223. package/dist/lighthouse-QMECKX4R.js.map +0 -1
  1224. package/dist/line-item-writes-XMDA7AZQ.js +0 -209
  1225. package/dist/line-item-writes-XMDA7AZQ.js.map +0 -1
  1226. package/dist/line-items-YGKTYKVE.js +0 -104
  1227. package/dist/line-items-YGKTYKVE.js.map +0 -1
  1228. package/dist/link-AOB3WGGN.js +0 -65
  1229. package/dist/link-AOB3WGGN.js.map +0 -1
  1230. package/dist/linkedin-WRJNY6NY.js +0 -1002
  1231. package/dist/linkedin-WRJNY6NY.js.map +0 -1
  1232. package/dist/list-66VKYGKM.js +0 -52
  1233. package/dist/list-66VKYGKM.js.map +0 -1
  1234. package/dist/list-6DZWRLDN.js +0 -59
  1235. package/dist/list-6DZWRLDN.js.map +0 -1
  1236. package/dist/list-6KJWGPPS.js +0 -67
  1237. package/dist/list-6KJWGPPS.js.map +0 -1
  1238. package/dist/list-GXCKA2AN.js +0 -153
  1239. package/dist/list-GXCKA2AN.js.map +0 -1
  1240. package/dist/list-KNHZPT7L.js +0 -65
  1241. package/dist/list-KNHZPT7L.js.map +0 -1
  1242. package/dist/list-LPETG6A6.js +0 -78
  1243. package/dist/list-LPETG6A6.js.map +0 -1
  1244. package/dist/list-WHJNWHSZ.js +0 -53
  1245. package/dist/list-WHJNWHSZ.js.map +0 -1
  1246. package/dist/list-YV5Z2J6U.js +0 -305
  1247. package/dist/list-YV5Z2J6U.js.map +0 -1
  1248. package/dist/locations-4FZYKG2A.js +0 -68
  1249. package/dist/locations-4FZYKG2A.js.map +0 -1
  1250. package/dist/locations-W32YE2KS.js +0 -41
  1251. package/dist/locations-W32YE2KS.js.map +0 -1
  1252. package/dist/log-YVW46HL7.js +0 -94
  1253. package/dist/log-YVW46HL7.js.map +0 -1
  1254. package/dist/logo-7O7VW5R3.js +0 -19
  1255. package/dist/lookup-Z2X5WAO6.js +0 -23
  1256. package/dist/make-Q6BQ7LNT.js +0 -505
  1257. package/dist/make-Q6BQ7LNT.js.map +0 -1
  1258. package/dist/map-VZM5C6DA.js +0 -406
  1259. package/dist/map-VZM5C6DA.js.map +0 -1
  1260. package/dist/mcp-KSJDALG6.js +0 -478
  1261. package/dist/mcp-KSJDALG6.js.map +0 -1
  1262. package/dist/media-7P66TUIR.js +0 -15
  1263. package/dist/media-JBQKYSRQ.js +0 -90
  1264. package/dist/media-JBQKYSRQ.js.map +0 -1
  1265. package/dist/media-sources-427U333M.js +0 -32
  1266. package/dist/members-ABGEFALK.js +0 -46
  1267. package/dist/members-ABGEFALK.js.map +0 -1
  1268. package/dist/meta-JH4FHVNX.js +0 -69
  1269. package/dist/metrics-ALSPX6EQ.js +0 -153
  1270. package/dist/metrics-ALSPX6EQ.js.map +0 -1
  1271. package/dist/models-7BM5BKXX.js +0 -157
  1272. package/dist/models-7BM5BKXX.js.map +0 -1
  1273. package/dist/normalize-DFK3DGGZ.js +0 -808
  1274. package/dist/normalize-DFK3DGGZ.js.map +0 -1
  1275. package/dist/normalize-NDR7YEQE.js +0 -140
  1276. package/dist/normalize-NDR7YEQE.js.map +0 -1
  1277. package/dist/options-G5VGH22X.js +0 -123
  1278. package/dist/options-G5VGH22X.js.map +0 -1
  1279. package/dist/output-ZLXBAA4O.js +0 -25
  1280. package/dist/page-L7BBMINT.js +0 -107
  1281. package/dist/page-L7BBMINT.js.map +0 -1
  1282. package/dist/pages-NBV35ECG.js +0 -67
  1283. package/dist/pages-NBV35ECG.js.map +0 -1
  1284. package/dist/performance-SOMZNPIG.js +0 -25
  1285. package/dist/pinterest-KXAZTRDP.js +0 -98
  1286. package/dist/pinterest-KXAZTRDP.js.map +0 -1
  1287. package/dist/pixels-DYWHXAJT.js +0 -109
  1288. package/dist/pixels-DYWHXAJT.js.map +0 -1
  1289. package/dist/pixels-UMS2QBUG.js +0 -61
  1290. package/dist/pixels-UMS2QBUG.js.map +0 -1
  1291. package/dist/preview-C5FER5SU.js +0 -170
  1292. package/dist/preview-C5FER5SU.js.map +0 -1
  1293. package/dist/promoted-tweet-writes-3PECZLQA.js +0 -181
  1294. package/dist/promoted-tweet-writes-3PECZLQA.js.map +0 -1
  1295. package/dist/promoted-tweets-GMV6WIWV.js +0 -120
  1296. package/dist/promoted-tweets-GMV6WIWV.js.map +0 -1
  1297. package/dist/properties-YAJQF577.js +0 -102
  1298. package/dist/properties-YAJQF577.js.map +0 -1
  1299. package/dist/publish-5WDUTTG5.js +0 -355
  1300. package/dist/publish-5WDUTTG5.js.map +0 -1
  1301. package/dist/query-TBWL52JI.js +0 -1342
  1302. package/dist/query-TBWL52JI.js.map +0 -1
  1303. package/dist/query-VESQSTQI.js +0 -237
  1304. package/dist/query-VESQSTQI.js.map +0 -1
  1305. package/dist/query-XZQSY62P.js +0 -248
  1306. package/dist/query-XZQSY62P.js.map +0 -1
  1307. package/dist/read-UMAWDVKX.js +0 -141
  1308. package/dist/read-UMAWDVKX.js.map +0 -1
  1309. package/dist/reddit-OPHQFRRC.js +0 -27
  1310. package/dist/refresh-U56RE7DI.js +0 -96
  1311. package/dist/refresh-U56RE7DI.js.map +0 -1
  1312. package/dist/release-P66DYNKQ.js +0 -61
  1313. package/dist/release-P66DYNKQ.js.map +0 -1
  1314. package/dist/relevant-pages-DSQQU6F7.js +0 -100
  1315. package/dist/relevant-pages-DSQQU6F7.js.map +0 -1
  1316. package/dist/remove-GRLXSDZC.js +0 -50
  1317. package/dist/remove-GRLXSDZC.js.map +0 -1
  1318. package/dist/remove-IRIP4OKM.js +0 -52
  1319. package/dist/remove-IRIP4OKM.js.map +0 -1
  1320. package/dist/reopen-PMIO7NJJ.js +0 -65
  1321. package/dist/reopen-PMIO7NJJ.js.map +0 -1
  1322. package/dist/rerun-V4O6TKBY.js +0 -84
  1323. package/dist/rerun-V4O6TKBY.js.map +0 -1
  1324. package/dist/research-MG3MESKH.js +0 -59
  1325. package/dist/research-RFPBKIVP.js +0 -228
  1326. package/dist/research-RFPBKIVP.js.map +0 -1
  1327. package/dist/reset-3HKXFAV7.js +0 -56
  1328. package/dist/reset-3HKXFAV7.js.map +0 -1
  1329. package/dist/reset-LQZA3CIB.js +0 -56
  1330. package/dist/reset-LQZA3CIB.js.map +0 -1
  1331. package/dist/resolve-H33CQAY4.js +0 -122
  1332. package/dist/resolve-H33CQAY4.js.map +0 -1
  1333. package/dist/retry-6F3YAVYQ.js +0 -64
  1334. package/dist/retry-6F3YAVYQ.js.map +0 -1
  1335. package/dist/retry-QWD3HWFP.js +0 -62
  1336. package/dist/retry-QWD3HWFP.js.map +0 -1
  1337. package/dist/retry-failed-7OAJ5TMD.js +0 -47
  1338. package/dist/retry-failed-7OAJ5TMD.js.map +0 -1
  1339. package/dist/run-CGZIVYLV.js +0 -67
  1340. package/dist/run-CGZIVYLV.js.map +0 -1
  1341. package/dist/run-PZF26R6H.js +0 -59
  1342. package/dist/scaffold-ad-AI6R4GDU.js +0 -1458
  1343. package/dist/scaffold-ad-AI6R4GDU.js.map +0 -1
  1344. package/dist/scaffold-static-ad-T7ZDHRB3.js +0 -944
  1345. package/dist/scaffold-static-ad-T7ZDHRB3.js.map +0 -1
  1346. package/dist/scaffold-video-R24U2WC7.js +0 -840
  1347. package/dist/scaffold-video-R24U2WC7.js.map +0 -1
  1348. package/dist/schedule-BK44B77G.js +0 -68
  1349. package/dist/schedule-BK44B77G.js.map +0 -1
  1350. package/dist/schedule-F2EEY4UK.js +0 -63
  1351. package/dist/schedule-F2EEY4UK.js.map +0 -1
  1352. package/dist/scheduled-agents-CIEAOWM6.js +0 -49
  1353. package/dist/schema-3B6FDPBF.js +0 -131
  1354. package/dist/schema-3B6FDPBF.js.map +0 -1
  1355. package/dist/schema-4FOZ5W35.js +0 -65
  1356. package/dist/schema-4FOZ5W35.js.map +0 -1
  1357. package/dist/scrape-P46M2J43.js +0 -2243
  1358. package/dist/scrape-P46M2J43.js.map +0 -1
  1359. package/dist/screenshot-6F7G3LN5.js +0 -104
  1360. package/dist/screenshot-6F7G3LN5.js.map +0 -1
  1361. package/dist/search-23LREBOG.js +0 -94
  1362. package/dist/search-23LREBOG.js.map +0 -1
  1363. package/dist/search-DNYAA6TT.js +0 -176
  1364. package/dist/search-DNYAA6TT.js.map +0 -1
  1365. package/dist/search-FORHMB7P.js +0 -27
  1366. package/dist/search-KQMPPO3X.js +0 -226
  1367. package/dist/search-KQMPPO3X.js.map +0 -1
  1368. package/dist/search-X4AKUB2K.js +0 -93
  1369. package/dist/search-X4AKUB2K.js.map +0 -1
  1370. package/dist/seeds-K4CHZ2HU.js +0 -103
  1371. package/dist/seeds-K4CHZ2HU.js.map +0 -1
  1372. package/dist/select-52K6KZGY.js +0 -95
  1373. package/dist/sends-UH2MZGCD.js +0 -310
  1374. package/dist/sends-UH2MZGCD.js.map +0 -1
  1375. package/dist/sequences-BXGO3NPA.js +0 -148
  1376. package/dist/sequences-BXGO3NPA.js.map +0 -1
  1377. package/dist/set-prompt-3IXP42AK.js +0 -186
  1378. package/dist/set-prompt-3IXP42AK.js.map +0 -1
  1379. package/dist/setup-links-OV6ALAUU.js +0 -143
  1380. package/dist/setup-links-OV6ALAUU.js.map +0 -1
  1381. package/dist/shared-VMV44VPB.js +0 -32
  1382. package/dist/site-MQ5ORTKV.js +0 -179
  1383. package/dist/site-MQ5ORTKV.js.map +0 -1
  1384. package/dist/sitemaps-LKCTG2WM.js +0 -88
  1385. package/dist/sitemaps-LKCTG2WM.js.map +0 -1
  1386. package/dist/sites-YHUF7G4Z.js +0 -102
  1387. package/dist/sites-YHUF7G4Z.js.map +0 -1
  1388. package/dist/skills-CG674XHN.js +0 -49
  1389. package/dist/skills-CG674XHN.js.map +0 -1
  1390. package/dist/sources-44THTN2Y.js +0 -422
  1391. package/dist/sources-44THTN2Y.js.map +0 -1
  1392. package/dist/sources-BQNCLGWT.js +0 -30
  1393. package/dist/stale-JGLP7BAC.js +0 -63
  1394. package/dist/stale-JGLP7BAC.js.map +0 -1
  1395. package/dist/stats-TO3J2FU6.js +0 -34
  1396. package/dist/status-NJ3SMBGS.js +0 -64
  1397. package/dist/status-NJ3SMBGS.js.map +0 -1
  1398. package/dist/sticker-YBOWSWMR.js +0 -96
  1399. package/dist/sticker-YBOWSWMR.js.map +0 -1
  1400. package/dist/stock-E6NMDSVI.js +0 -181
  1401. package/dist/stock-E6NMDSVI.js.map +0 -1
  1402. package/dist/studio-LHH62SZC.js +0 -49
  1403. package/dist/sync-2R5UKTHN.js +0 -56
  1404. package/dist/sync-2R5UKTHN.js.map +0 -1
  1405. package/dist/sync-AZRR5JNS.js +0 -266
  1406. package/dist/sync-AZRR5JNS.js.map +0 -1
  1407. package/dist/sync-ML7E5J22.js +0 -56
  1408. package/dist/sync-ML7E5J22.js.map +0 -1
  1409. package/dist/sync-definition-LBPI7P5F.js +0 -48
  1410. package/dist/tag-manager-D3YNI7JG.js +0 -43
  1411. package/dist/tags-BYGKXDDS.js +0 -21
  1412. package/dist/tags-BYGKXDDS.js.map +0 -1
  1413. package/dist/tags-OOQV4G2Y.js +0 -26
  1414. package/dist/tags-TKYXWGN4.js +0 -21
  1415. package/dist/tags-TKYXWGN4.js.map +0 -1
  1416. package/dist/tags-V732MEES.js +0 -226
  1417. package/dist/tags-V732MEES.js.map +0 -1
  1418. package/dist/tags-YLC46IXM.js +0 -21
  1419. package/dist/tags-YLC46IXM.js.map +0 -1
  1420. package/dist/targeting-constants-XT56MOGP.js +0 -119
  1421. package/dist/targeting-constants-XT56MOGP.js.map +0 -1
  1422. package/dist/targeting-criteria-24X3IIJS.js +0 -114
  1423. package/dist/targeting-criteria-24X3IIJS.js.map +0 -1
  1424. package/dist/targets-AKAN2HFY.js +0 -104
  1425. package/dist/targets-AKAN2HFY.js.map +0 -1
  1426. package/dist/templates-7MRVQTB2.js +0 -180
  1427. package/dist/templates-7MRVQTB2.js.map +0 -1
  1428. package/dist/testimonials-OIZMXEYZ.js +0 -32
  1429. package/dist/top-companies-3IG5FRQ2.js +0 -109
  1430. package/dist/top-companies-3IG5FRQ2.js.map +0 -1
  1431. package/dist/triggers-ZHNWHJG4.js +0 -143
  1432. package/dist/triggers-ZHNWHJG4.js.map +0 -1
  1433. package/dist/tweets-V5R5DUA2.js +0 -124
  1434. package/dist/tweets-V5R5DUA2.js.map +0 -1
  1435. package/dist/unfollow-RYDJDDAV.js +0 -48
  1436. package/dist/unfollow-RYDJDDAV.js.map +0 -1
  1437. package/dist/unlink-CS7QNOU2.js +0 -68
  1438. package/dist/unlink-CS7QNOU2.js.map +0 -1
  1439. package/dist/unstage-DDZ5F2Z6.js +0 -86
  1440. package/dist/unstage-DDZ5F2Z6.js.map +0 -1
  1441. package/dist/unstage-KPLOFKU5.js +0 -96
  1442. package/dist/unstage-KPLOFKU5.js.map +0 -1
  1443. package/dist/update-ASY63WIK.js +0 -157
  1444. package/dist/update-ASY63WIK.js.map +0 -1
  1445. package/dist/update-HA5IQCJ2.js +0 -99
  1446. package/dist/update-HA5IQCJ2.js.map +0 -1
  1447. package/dist/update-R3VD5DC3.js +0 -143
  1448. package/dist/update-R3VD5DC3.js.map +0 -1
  1449. package/dist/update-WMCBSNSD.js +0 -64
  1450. package/dist/update-WMCBSNSD.js.map +0 -1
  1451. package/dist/upload-ADEYBWTV.js +0 -152
  1452. package/dist/upload-ADEYBWTV.js.map +0 -1
  1453. package/dist/upload-WBNPIOVR.js +0 -128
  1454. package/dist/upload-WBNPIOVR.js.map +0 -1
  1455. package/dist/upscale-WYTZPUIA.js +0 -111
  1456. package/dist/upscale-WYTZPUIA.js.map +0 -1
  1457. package/dist/url-options-DOCH5AWX.js +0 -128
  1458. package/dist/url-options-DOCH5AWX.js.map +0 -1
  1459. package/dist/url-params-IYTU3MVV.js +0 -99
  1460. package/dist/url-params-IYTU3MVV.js.map +0 -1
  1461. package/dist/use-RGJMULXG.js +0 -97
  1462. package/dist/use-RGJMULXG.js.map +0 -1
  1463. package/dist/validate-T22BKIFK.js +0 -89
  1464. package/dist/validate-T22BKIFK.js.map +0 -1
  1465. package/dist/variant-3DBL2RDV.js +0 -339
  1466. package/dist/variant-3DBL2RDV.js.map +0 -1
  1467. package/dist/videos-7SB2CLZW.js +0 -39
  1468. package/dist/view-5QDCP7HF.js +0 -123
  1469. package/dist/view-5QDCP7HF.js.map +0 -1
  1470. package/dist/viewer-check-NGIMC2BR.js +0 -66
  1471. package/dist/web-IRWXTGE2.js +0 -136
  1472. package/dist/web-IRWXTGE2.js.map +0 -1
  1473. package/dist/winners-JSI4N26Y.js +0 -81
  1474. package/dist/winners-JSI4N26Y.js.map +0 -1
  1475. package/dist/winning-ads-XQZ6HEX5.js +0 -62
  1476. package/dist/write-commands-3C3TV2YC.js +0 -714
  1477. package/dist/write-commands-3C3TV2YC.js.map +0 -1
  1478. package/dist/write-commands-7WIG5UDU.js +0 -731
  1479. package/dist/write-commands-7WIG5UDU.js.map +0 -1
  1480. package/dist/write-commands-G7HHGAEE.js +0 -1009
  1481. package/dist/write-commands-G7HHGAEE.js.map +0 -1
  1482. package/dist/write-commands-ROQSZFXR.js +0 -207
  1483. package/dist/write-commands-ROQSZFXR.js.map +0 -1
  1484. package/dist/x-BLTCL6L3.js +0 -47
  1485. /package/dist/{actions-7XF5L4U3.js.map → actions-PEI6ZQAG.js.map} +0 -0
  1486. /package/dist/{ads-IRE5RZCS.js.map → ads-TJ7ACFHG.js.map} +0 -0
  1487. /package/dist/{avatars-G54K55J3.js.map → avatars-2UQJXHPV.js.map} +0 -0
  1488. /package/dist/{brand-ODTHWWFL.js.map → brand-XBABUT52.js.map} +0 -0
  1489. /package/dist/{canvas-M5HAG7VA.js.map → canvas-KEXE5P6S.js.map} +0 -0
  1490. /package/dist/{chatgpt-PLKNBNVL.js.map → chatgpt-7W75X3ER.js.map} +0 -0
  1491. /package/dist/{chunk-OZLBLXTK.js.map → chunk-2TK4DEOE.js.map} +0 -0
  1492. /package/dist/{chunk-ZHW3O25C.js.map → chunk-4NDCTLI5.js.map} +0 -0
  1493. /package/dist/{chunk-5NQIFCNX.js.map → chunk-5ARG3CQG.js.map} +0 -0
  1494. /package/dist/{chunk-ZAFR46HG.js.map → chunk-5Z2KSVIV.js.map} +0 -0
  1495. /package/dist/{chunk-EYO62URT.js.map → chunk-6B7VKFS4.js.map} +0 -0
  1496. /package/dist/{chunk-W7OFLOZB.js.map → chunk-6G5K6ZC6.js.map} +0 -0
  1497. /package/dist/{chunk-RJAQEZVD.js.map → chunk-73QKIIIR.js.map} +0 -0
  1498. /package/dist/{chunk-YS6PCTPS.js.map → chunk-75FDTDLH.js.map} +0 -0
  1499. /package/dist/{chunk-NGT6MARJ.js.map → chunk-7J6EHOH6.js.map} +0 -0
  1500. /package/dist/{chunk-TD44SXQX.js.map → chunk-7OFNN4CT.js.map} +0 -0
  1501. /package/dist/{chunk-LDVMMLRA.js.map → chunk-C6U6UDHJ.js.map} +0 -0
  1502. /package/dist/{chunk-6FBZ5E6L.js.map → chunk-DIY6QR3E.js.map} +0 -0
  1503. /package/dist/{chunk-F3WFP75M.js.map → chunk-EFSYTROP.js.map} +0 -0
  1504. /package/dist/{chunk-4MU3U3SO.js.map → chunk-FEXDI4NM.js.map} +0 -0
  1505. /package/dist/{chunk-YMOVI3WT.js.map → chunk-FHXIEMCG.js.map} +0 -0
  1506. /package/dist/{chunk-R34LJSPM.js.map → chunk-H26L3OQY.js.map} +0 -0
  1507. /package/dist/{chunk-NMMKTPGI.js.map → chunk-HIPDMQZ6.js.map} +0 -0
  1508. /package/dist/{chunk-FRVROFI6.js.map → chunk-HYCIBVDW.js.map} +0 -0
  1509. /package/dist/{chunk-BSUN6JMU.js.map → chunk-IFWP3ZDO.js.map} +0 -0
  1510. /package/dist/{chunk-LQ4HBQ2B.js.map → chunk-IXKEWS7X.js.map} +0 -0
  1511. /package/dist/{chunk-DPEQVHTX.js.map → chunk-JERXV5A3.js.map} +0 -0
  1512. /package/dist/{chunk-TCSPJQ2X.js.map → chunk-KLNKEVIY.js.map} +0 -0
  1513. /package/dist/{chunk-JMXBUIVI.js.map → chunk-KNY76UGC.js.map} +0 -0
  1514. /package/dist/{chunk-IMZIECST.js.map → chunk-KWAOTV7F.js.map} +0 -0
  1515. /package/dist/{chunk-A57AHUNA.js.map → chunk-LERTEZST.js.map} +0 -0
  1516. /package/dist/{chunk-73MCYA5Z.js.map → chunk-LL2CD5WU.js.map} +0 -0
  1517. /package/dist/{chunk-UA5EUJXV.js.map → chunk-LO6GEJ4Z.js.map} +0 -0
  1518. /package/dist/{chunk-IRHNWYDT.js.map → chunk-LS5MTRFI.js.map} +0 -0
  1519. /package/dist/{chunk-F7HBCFUA.js.map → chunk-LZ73CZGP.js.map} +0 -0
  1520. /package/dist/{chunk-NGYKF4T6.js.map → chunk-MELOSESI.js.map} +0 -0
  1521. /package/dist/{chunk-SXRSLUW7.js.map → chunk-NAWWC5I3.js.map} +0 -0
  1522. /package/dist/{chunk-FFZBW4CC.js.map → chunk-NPE7EWBE.js.map} +0 -0
  1523. /package/dist/{chunk-JH7NHC5W.js.map → chunk-OKG6GX2F.js.map} +0 -0
  1524. /package/dist/{chunk-WAQYXH2U.js.map → chunk-PBA3YCZA.js.map} +0 -0
  1525. /package/dist/{chunk-AWICKT2B.js.map → chunk-PWGWMIIJ.js.map} +0 -0
  1526. /package/dist/{chunk-F6NJAHAZ.js.map → chunk-QHLB5V7J.js.map} +0 -0
  1527. /package/dist/{chunk-TTFTS2SO.js.map → chunk-QJE6ZYGI.js.map} +0 -0
  1528. /package/dist/{chunk-Y4JR4RDM.js.map → chunk-QSN5MZGS.js.map} +0 -0
  1529. /package/dist/{chunk-HWWPDUZM.js.map → chunk-RSW6QJPH.js.map} +0 -0
  1530. /package/dist/{chunk-LYZVLKRA.js.map → chunk-SBMIQDCX.js.map} +0 -0
  1531. /package/dist/{chunk-BDD2ILIT.js.map → chunk-STIB5DR5.js.map} +0 -0
  1532. /package/dist/{chunk-A3PEJ3V3.js.map → chunk-TBEUMOEL.js.map} +0 -0
  1533. /package/dist/{chunk-RPFBZHHE.js.map → chunk-TD2P4HBP.js.map} +0 -0
  1534. /package/dist/{chunk-CBEL3P22.js.map → chunk-VBHDZSI5.js.map} +0 -0
  1535. /package/dist/{chunk-6YWRJMGR.js.map → chunk-VFIOJD5M.js.map} +0 -0
  1536. /package/dist/{chunk-QYOPQRLI.js.map → chunk-VVZBBKRC.js.map} +0 -0
  1537. /package/dist/{chunk-G32FXVQ6.js.map → chunk-W3B4BHQU.js.map} +0 -0
  1538. /package/dist/{chunk-Q7UF4ERB.js.map → chunk-WS2GMOSG.js.map} +0 -0
  1539. /package/dist/{chunk-EPK2GYLV.js.map → chunk-XBOK23HI.js.map} +0 -0
  1540. /package/dist/{chunk-HA5D6US2.js.map → chunk-XG3XCHN6.js.map} +0 -0
  1541. /package/dist/{chunk-L4DOL7L7.js.map → chunk-XL3BMSYG.js.map} +0 -0
  1542. /package/dist/{chunk-ECXNE6RJ.js.map → chunk-XYMPS526.js.map} +0 -0
  1543. /package/dist/{chunk-WWD4PITU.js.map → chunk-YBMVHGY3.js.map} +0 -0
  1544. /package/dist/{client-XKDFFS7O.js.map → client-VHN32ZRE.js.map} +0 -0
  1545. /package/dist/{connect-ATGYJNG4.js.map → connect-TA5W6YGW.js.map} +0 -0
  1546. /package/dist/{customers-ACRYXALZ.js.map → customers-4RJGRR2Y.js.map} +0 -0
  1547. /package/dist/{env-ODWJOKNV.js.map → env-KIP2J2UB.js.map} +0 -0
  1548. /package/dist/{fit-5WZ6NVSF.js.map → fit-KXHYKIA4.js.map} +0 -0
  1549. /package/dist/{fonts-7U7I2TWV.js.map → fonts-NTOQS2KU.js.map} +0 -0
  1550. /package/dist/{ga4-QPEXE6YG.js.map → ga4-UDQ2HA2J.js.map} +0 -0
  1551. /package/dist/{gsc-LC5ADBA3.js.map → gsc-P3QYGDV2.js.map} +0 -0
  1552. /package/dist/{ideas-NEBJBIBM.js.map → ideas-PU7IAX6F.js.map} +0 -0
  1553. /package/dist/{images-ASWWS5TH.js.map → images-QI2HTX6B.js.map} +0 -0
  1554. /package/dist/{ingest-X7UPOCKP.js.map → ingest-BYJNFOOT.js.map} +0 -0
  1555. /package/dist/{inspiration-64DY3QWN.js.map → inspiration-I4MMKAWA.js.map} +0 -0
  1556. /package/dist/{learn-D4D75X2Y.js.map → learn-HZU3QWNN.js.map} +0 -0
  1557. /package/dist/{logo-7O7VW5R3.js.map → logo-2IP663QO.js.map} +0 -0
  1558. /package/dist/{lookup-Z2X5WAO6.js.map → lookup-XK45W2SH.js.map} +0 -0
  1559. /package/dist/{media-7P66TUIR.js.map → media-M7E6V2XU.js.map} +0 -0
  1560. /package/dist/{media-sources-427U333M.js.map → media-sources-3D246I3O.js.map} +0 -0
  1561. /package/dist/{meta-JH4FHVNX.js.map → meta-EZ4SY25M.js.map} +0 -0
  1562. /package/dist/{output-ZLXBAA4O.js.map → output-RAH3TSIL.js.map} +0 -0
  1563. /package/dist/{performance-SOMZNPIG.js.map → performance-7LQQCEAW.js.map} +0 -0
  1564. /package/dist/{reddit-OPHQFRRC.js.map → reddit-INGPFGP4.js.map} +0 -0
  1565. /package/dist/{research-MG3MESKH.js.map → research-PA53M335.js.map} +0 -0
  1566. /package/dist/{run-PZF26R6H.js.map → run-2IM2QOCI.js.map} +0 -0
  1567. /package/dist/{scheduled-agents-CIEAOWM6.js.map → scheduled-agents-2NCGSD76.js.map} +0 -0
  1568. /package/dist/{search-FORHMB7P.js.map → search-XUIVHGAY.js.map} +0 -0
  1569. /package/dist/{select-52K6KZGY.js.map → select-ZWDEVAH2.js.map} +0 -0
  1570. /package/dist/{shared-VMV44VPB.js.map → shared-HJDFNID4.js.map} +0 -0
  1571. /package/dist/{sources-BQNCLGWT.js.map → sources-UGMZFZ2E.js.map} +0 -0
  1572. /package/dist/{stats-TO3J2FU6.js.map → stats-NNXZMPZR.js.map} +0 -0
  1573. /package/dist/{studio-LHH62SZC.js.map → studio-HUEBE6DS.js.map} +0 -0
  1574. /package/dist/{sync-definition-LBPI7P5F.js.map → sync-definition-YBDM7D4M.js.map} +0 -0
  1575. /package/dist/{tag-manager-D3YNI7JG.js.map → tag-manager-HREEYGVM.js.map} +0 -0
  1576. /package/dist/{tags-OOQV4G2Y.js.map → tags-R3K35KTL.js.map} +0 -0
  1577. /package/dist/{testimonials-OIZMXEYZ.js.map → testimonials-5QGCPZ6K.js.map} +0 -0
  1578. /package/dist/{videos-7SB2CLZW.js.map → videos-GIYDCCKR.js.map} +0 -0
  1579. /package/dist/{viewer-check-NGIMC2BR.js.map → viewer-check-VN2JK2LW.js.map} +0 -0
  1580. /package/dist/{winning-ads-XQZ6HEX5.js.map → winning-ads-7QWEIMRU.js.map} +0 -0
  1581. /package/dist/{x-BLTCL6L3.js.map → x-OEAKQBB7.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 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 },\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 },\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 ...(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({\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 \"Staged. The split starts when this session is published — publishing is the review of the new variant.\",\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: \"Switch a paused test's split back on\",\n args: { id: ID_ARG },\n});\n\nconst resumeCommand = defineCommand({\n meta: {\n name: \"resume\",\n description: \"Switch a paused test's split back on. Visitors already assigned see the same side they saw before.\",\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 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 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":";;;;;;;;;;;;;;;;;;;;;;;;;AAQA,SAAS,qBAAqB;;;ACR9B,SAAS,SAAS,gBAAgB;AAClC,OAAO,UAAU;AAoBjB,SAAS,cAAc,OAA0B,MAAwB;AACvE,QAAM,SAAS,aAAa,IAAI;AAChC,SAAO,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,MAAM,KAAK,CAAC,KAAK,MAAM,OAAO,MAAM,EAAE,WAAW,QAAQ,CAAC,EAAE,KAAK;AACjH;AAUO,SAAS,cACd,aACA,aACA,cACuB;AACvB,SAAO;AAAA,IACL,QAAQ,cAAc,cAAc,WAAW;AAAA,IAC/C,QAAQ,cAAc,cAAc,WAAW;AAAA,EACjD;AACF;AAUA,eAAsB,gBACpB,MACA,aACA,aAC4C;AAC5C,MAAI;AACF,UAAM,QAAQ,MAAM,kBAAkB,MAAM,WAAW;AACvD,WAAO,cAAc,aAAa,aAAa,CAAC,GAAG,KAAK,CAAC;AAAA,EAC3D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAOA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF;AAGO,SAAS,gBAAgB,OAA0BA,aAA2C;AACnG,QAAM,QAAQ,oBAAI,IAAY;AAC9B,aAAW,QAAQ,OAAO;AACxB,eAAW,MAAM,oBAAoB;AACnC,iBAAW,SAAS,KAAK,SAAS,EAAE,GAAG;AACrC,cAAM,OAAO,MAAM,CAAC;AACpB,YAAI,QAAQA,YAAW,IAAI,IAAI,EAAG,OAAM,IAAI,IAAI;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK;AACzB;AAGO,SAAS,YAAY,OAA0B,OAAoC;AACxF,QAAM,QAAQ,IAAI,IAAI,KAAK;AAC3B,SAAO,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC;AAChD;AAEA,eAAe,WAAW,MAAoC;AAC5D,MAAI;AACF,UAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,MAAM,2BAA2B,GAAG,EAAE,eAAe,KAAK,CAAC;AACnG,WAAO,IAAI,IAAI,QAAQ,OAAO,CAAC,UAAU,MAAM,YAAY,CAAC,EAAE,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC;AAAA,EAC1F,QAAQ;AACN,WAAO,oBAAI,IAAI;AAAA,EACjB;AACF;AAYA,eAAsB,UAAU,MAAc,MAAiC;AAC7E,MAAI;AACF,UAAM,CAAC,OAAO,KAAK,IAAI,MAAM,QAAQ,IAAI,CAAC,kBAAkB,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,CAAC;AAC1F,QAAI,MAAM,SAAS,EAAG,QAAO,CAAC;AAC9B,UAAM,QAAQ,MAAM,QAAQ;AAAA,MAC1B,CAAC,GAAG,KAAK,EACN,OAAO,CAAC,SAAS,2BAA2B,KAAK,IAAI,CAAC,EACtD,IAAI,CAAC,SAAS,SAAS,KAAK,KAAK,MAAM,IAAI,GAAG,MAAM,CAAC;AAAA,IAC1D;AACA,WAAO,gBAAgB,OAAO,KAAK;AAAA,EACrC,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;;;ACjIA,SAAsB,gBAAgB;AACtC,SAAS,IAAI,OAAO,WAAAC,UAAS,YAAAC,WAAU,IAAI,MAAM,iBAAiB;AAClE,OAAOC,WAAU;AAkFV,IAAM,eAAe;AAmB5B,IAAM,kBAAkB;AAExB,SAAS,MAAM,GAAmB;AAChC,SAAO,EAAE,MAAMC,MAAK,GAAG,EAAE,KAAK,GAAG;AACnC;AAEA,eAAe,MAAM,GAA6B;AAChD,MAAI;AACF,YAAQ,MAAM,KAAK,CAAC,GAAG,YAAY;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAe,WAAW,KAAa,SAAS,IAAuB;AACrE,MAAI;AACJ,MAAI;AACF,cAAU,MAAMC,SAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,EACtD,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,SAAS;AAC3B,UAAM,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,IAAI,KAAK,MAAM;AACvD,QAAI,MAAM,YAAY,EAAG,KAAI,KAAK,GAAI,MAAM,WAAWD,MAAK,KAAK,KAAK,MAAM,IAAI,GAAG,GAAG,CAAE;AAAA,QACnF,KAAI,KAAK,GAAG;AAAA,EACnB;AACA,SAAO,IAAI,KAAK;AAClB;AAEA,IAAM,WAAW;AAUjB,SAAS,eAAe,KAAa,MAA6B;AAChE,MAAI,CAAC,IAAI,WAAW,OAAOA,MAAK,GAAG,EAAG,QAAO;AAC7C,SAAO,MAAMA,MAAK,SAAS,MAAM,GAAG,CAAC;AACvC;AAUA,eAAe,WAAW,MAMJ;AACpB,QAAM,EAAE,MAAM,QAAQ,SAAS,YAAY,QAAQ,IAAI;AACvD,QAAM,UAAU,MAAM,gBAAgB,EAAE,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACxE,QAAM,mBAAmB,IAAI,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAKA,MAAK,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC;AACpG,QAAM,UAAoB,CAAC;AAC3B,aAAW,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,EAAE,KAAK,GAAG;AAC5C,UAAM,OAAOA,MAAK,KAAK,YAAY,GAAG;AACtC,UAAM,MAAMA,MAAK,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,QAAI,CAAC,SAAS,KAAK,GAAG,GAAG;AACvB,YAAM,GAAG,KAAK,IAAI;AAAA,IACpB,OAAO;AACL,YAAM,OAAO,MAAME,UAAS,KAAK,MAAM;AACvC,YAAM,UAAU,MAAM,mBAAmB,MAAM,KAAK,MAAM,gBAAgB,GAAG,MAAM;AAAA,IACrF;AACA,YAAQ,KAAK,MAAMF,MAAK,SAAS,MAAM,IAAI,CAAC,CAAC;AAAA,EAC/C;AACA,SAAO;AACT;AASA,eAAe,gBAAgB,MAKE;AAC/B,QAAM,EAAE,MAAM,QAAQ,SAAS,QAAQ,IAAI;AAC3C,QAAM,QAAQ,MAAM,kBAAkB,MAAM,OAAO;AACnD,QAAM,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQA,MAAK,QAAQ,MAAM,GAAG,CAAC,CAAC;AAG1E,aAAW,OAAO,MAAM,WAAW,MAAM,EAAG,WAAU,IAAIA,MAAK,KAAK,QAAQ,GAAG,CAAC;AAEhF,QAAM,SAAS,CAAC,GAAG,SAAS,EAAE,KAAK;AACnC,QAAM,UAAU,oBAAI,IAAoB;AACxC,aAAW,QAAQ,CAAC,SAAS,MAAM,GAAG;AACpC,eAAW,OAAO,QAAQ;AACxB,YAAM,MAAM,eAAe,KAAK,IAAI;AAGpC,UAAI,QAAQ,QAAQ,QAAQ,iBAAkB;AAC9C,cAAQ,IAAI,KAAK,GAAG;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;AAsBA,SAAS,mBACP,MACA,WACA,SACA,kBACQ;AACR,QAAM,UAAUA,MAAK,QAAQ,SAAS;AACtC,QAAM,QAAQA,MAAK,QAAQ,OAAO;AAClC,SAAO,KAAK,QAAQ,iBAAiB,CAAC,OAAO,OAAe,MAAc,WAAmB;AAC3F,UAAM,CAAC,UAAU,MAAM,IAAI,YAAY,IAAI;AAC3C,UAAM,SAASA,MAAK,QAAQ,SAAS,QAAQ;AAC7C,UAAM,WACJ,iBAAiB,QAAQ,gBAAgB,KAAK,cAAc,QAAQ,iBAAiB,MAAM,MAAM,CAAC;AACpG,QAAI,aAAa,KAAM,QAAO;AAC9B,UAAM,MAAM,MAAMA,MAAK,SAAS,OAAO,QAAQ,CAAC;AAChD,WAAO,GAAG,KAAK,GAAG,IAAI,WAAW,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,EAC3E,CAAC;AACH;AASA,SAAS,YAAY,MAAgC;AACnD,QAAM,MAAM,KAAK,OAAO,MAAM;AAC9B,SAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,GAAG,GAAG,GAAG,KAAK,MAAM,GAAG,CAAC;AACvE;AAGA,IAAM,aAAa,CAAC,IAAI,UAAU,OAAO,QAAQ,OAAO,QAAQ,MAAM;AAStE,SAAS,iBAAiB,MAAc,kBAA8D;AACpG,aAAW,UAAU,CAAC,GAAG,YAAY,gBAAgB,WAAW,GAAG;AACjE,UAAM,MAAM,iBAAiB,IAAI,OAAO,MAAM;AAC9C,QAAI,QAAQ,OAAW,QAAO;AAAA,EAChC;AACA,SAAO;AACT;AAWA,SAAS,iBAAiB,MAAc,QAAyB;AAC/D,SAAO,sCAAsC,KAAK,KAAK,MAAM,KAAK,IAAI,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;AAChG;AAoBA,SAAS,cAAc,MAAc,qBAA6C;AAChF,QAAM,aAAa,sBAAsB,CAAC,GAAG,YAAY,gBAAgB,aAAa,WAAW,IAAI;AACrG,aAAW,UAAU,YAAY;AAC/B,QAAI;AACF,UAAI,SAAS,OAAO,MAAM,EAAE,OAAO,EAAG,QAAO,OAAO;AAAA,IACtD,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;AASA,eAAe,oBAAoB,MAAgF;AACjH,QAAM,EAAE,MAAM,SAAS,WAAW,IAAI;AACtC,QAAM,UAAoB,CAAC;AAC3B,aAAW,OAAO,MAAM,WAAW,UAAU,GAAG;AAC9C,QAAI,QAAQ,iBAAkB;AAC9B,UAAM,OAAOA,MAAK,KAAK,YAAY,GAAG;AACtC,UAAM,KAAKA,MAAK,KAAK,SAAS,GAAG;AACjC,UAAM,MAAMA,MAAK,QAAQ,EAAE,GAAG,EAAE,WAAW,KAAK,CAAC;AACjD,QAAI,CAAC,SAAS,KAAK,GAAG,GAAG;AACvB,YAAM,GAAG,MAAM,EAAE;AAAA,IACnB,OAAO;AACL,YAAM,OAAO,MAAME,UAAS,MAAM,MAAM;AAIxC,YAAM;AAAA,QACJ;AAAA,QACA,aAAa,MAAM;AAAA,UACjB,SAASF,MAAK,QAAQ,IAAI;AAAA,UAC1B,OAAOA,MAAK,QAAQ,EAAE;AAAA,UACtB,WAAW;AAAA,UACX,SAAS;AAAA,QACX,CAAC;AAAA,QACD;AAAA,MACF;AAAA,IACF;AACA,YAAQ,KAAK,MAAMA,MAAK,SAAS,MAAM,EAAE,CAAC,CAAC;AAAA,EAC7C;AACA,SAAO;AACT;AAUA,SAAS,cAAc,QAAoB,eAA+B;AACxE,SAAO,GAAG,KAAK;AAAA,IACb;AAAA,MACE,cAAc,OAAO;AAAA,MACrB,MAAM,OAAO;AAAA,MACb,gBAAgB,OAAO;AAAA,MACvB,SAAS,OAAO;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,OAAO,aAAa,YAAY,0BAA0B;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AACH;AASA,eAAsB,eAAe,MAAc,QAA6D;AAC9G,QAAM,UAAUA,MAAK,QAAQ,MAAM,aAAa,OAAO,WAAW;AAClE,QAAM,aAAaA,MAAK,QAAQ,MAAM,aAAa,OAAO,WAAW;AACrE,QAAM,gBAAgB,gBAAgB,OAAO,WAAW;AAExD,MAAI,kBAAkB,MAAM;AAC1B,WAAO;AAAA,MACL,OAAO,SAAI,OAAO,WAAW,oCAA0B,OAAO,WAAW;AAAA,IAC3E;AAAA,EACF;AACA,MAAI,CAAE,MAAM,MAAM,OAAO,GAAI;AAC3B,WAAO,EAAE,OAAO,iCAAiC,OAAO,WAAW,IAAI;AAAA,EACzE;AACA,MAAI,CAAE,MAAM,MAAM,UAAU,GAAI;AAC9B,WAAO,EAAE,OAAO,aAAa,OAAO,WAAW,6DAAwD;AAAA,EACzG;AAEA,QAAM,aAAa,OAAO,qBAAqB,OAAO;AACtD,QAAM,aAAaA,MAAK,QAAQ,MAAM,cAAc,YAAY,OAAO,aAAa,CAAC;AACrF,QAAM,GAAG,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACrD,QAAM,MAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAK3C,QAAM,UAAU,MAAM,WAAW;AAAA,IAC/B;AAAA,IACA,QAAQ,OAAO,aAAa,YAAY,UAAU;AAAA,IAClD;AAAA,IACA;AAAA,IACA,SAAS,OAAO,aAAa,YAAY,OAAO,cAAc,OAAO;AAAA,EACvE,CAAC;AACD,QAAM,UAAUA,MAAK,KAAK,YAAY,eAAe,GAAG,cAAc,QAAQ,aAAa,GAAG,MAAM;AACpG,UAAQ,KAAK,MAAMA,MAAK,KAAK,cAAc,YAAY,OAAO,aAAa,GAAG,eAAe,CAAC,CAAC;AAE/F,MAAI,OAAO,aAAa,WAAW;AACjC,YAAQ,KAAK,GAAI,MAAM,oBAAoB,EAAE,MAAM,SAAS,WAAW,CAAC,CAAE;AAAA,EAC5E;AAEA,QAAM,GAAG,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAErD,SAAO;AAAA,IACL,cAAc,OAAO;AAAA,IACrB,MAAM,OAAO;AAAA,IACb,YAAY,MAAMA,MAAK,KAAK,cAAc,YAAY,OAAO,aAAa,CAAC,CAAC;AAAA,IAC5E;AAAA,IACA,SAAS,CAAC,aAAa,OAAO,WAAW,EAAE;AAAA,EAC7C;AACF;;;AC5ZA,SAAS,SAAS;AAeX,IAAM,iCAAiC,EAAE,KAAK;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,QAAQ;AAAA,EACR,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/B,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACrC,CAAC;AAGM,IAAM,6BAA6B,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjD,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA;AAAA,EAEjC,QAAQ,EAAE,KAAK,CAAC,YAAY,UAAU,CAAC,EAAE,QAAQ,UAAU;AAAA,EAC3D,UAAU,EAAE,MAAM,wBAAwB,EAAE,IAAI,CAAC,EAAE,SAAS;AAC9D,CAAC;AAeM,IAAM,oCAAoC,EAAE,KAAK;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACnHD,IAAM,SAAS,KAAK,KAAK,KAAK;AAE9B,SAAS,MAAM,OAAe,MAAsB;AAClD,SAAO,SAAS,KAAK,IAAI,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG;AACxD;AAUO,SAAS,aAAa,oBAA4B,KAAqB;AAC5E,QAAM,QAAQ,qBAAqB,OAAO;AAC1C,MAAI,QAAQ,EAAG,QAAO;AACtB,MAAI,OAAO,EAAG,QAAO;AACrB,MAAI,OAAO,GAAI,QAAO,MAAM,KAAK,MAAM,IAAI,GAAG,KAAK;AACnD,MAAI,OAAO,GAAI,QAAO,MAAM,KAAK,MAAM,OAAO,CAAC,GAAG,MAAM;AACxD,SAAO,MAAM,KAAK,MAAM,OAAO,EAAE,GAAG,OAAO;AAC7C;AAMO,SAAS,WAAWG,QAAuB;AAChD,MAAIA,SAAQ,GAAI,QAAO,SAAS,KAAK,IAAI,GAAG,KAAK,MAAMA,MAAK,CAAC,EAAE,eAAe,OAAO,CAAC;AACtF,QAAM,YAAY,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,MAAMA,MAAK,CAAC,IAAI,CAAC;AACrE,SAAO,UAAU,KAAK,MAAMA,SAAQ,SAAS,IAAI,WAAW,eAAe,OAAO,CAAC;AACrF;;;ACDA,IAAM,YAAuG;AAAA,EAC3G,cAAc,CAAC,KAAK,QAClB,GAAG,IAAI,YAAY,kFAA6EC,cAAa,KAAK,GAAG,CAAC,gDAAgD,IAAI,OAAO;AAAA,EACnL,QAAQ,CAAC,QACP,IAAI,WAAW,YACX,GAAG,IAAI,YAAY,sEAAsE,IAAI,YAAY,8EACzG,GAAG,IAAI,YAAY,uHAAuH,IAAI,YAAY;AAAA,EAChK,eAAe,CAAC,QACd,GAAG,IAAI,YAAY;AAAA,EACrB,YAAY,CAAC,QACX,GAAG,IAAI,YAAY,4KAAuK,IAAI,YAAY;AAAA,EAC5M,uBAAuB,CAAC,QACtB,GAAG,IAAI,YAAY,6FAA6F,IAAI,YAAY;AAAA;AAAA;AAAA;AAAA,EAIlI,cAAc,CAAC,QAAQ,GAAG,IAAI,YAAY;AAAA,EAC1C,SAAS,CAAC,QACR,GAAG,IAAI,YAAY,oBACjB,IAAI,kBAAkB,cAAc,wCAAwC,kCAC9E;AACJ;AAUA,SAASA,cAAa,KAA0B,KAAqB;AACnE,MAAI,IAAI,iBAAiB;AACvB,WAAO;AAAA,EACT;AACA,MAAI,IAAI,uBAAuB,MAAM;AACnC,WAAO;AAAA,EACT;AACA,MAAI,IAAI,gBAAgB,MAAM;AAC5B,WAAO,4GAAuG,aAAgB,IAAI,oBAAoB,GAAG,CAAC;AAAA,EAC5J;AACA,QAAM,SAAS,YAAY,WAAW,IAAI,YAAY,QAAQ,CAAC,mBAAmB,WAAW,IAAI,YAAY,WAAW,CAAC;AACzH,SAAO,GAAG,MAAM,GAAG,aAAgB,IAAI,oBAAoB,GAAG,CAAC,wBAAwB,IAAI,KAAK,IAAI,kBAAkB,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACpJ;AAGA,SAAS,WAAW,KAAkC;AACpD,SAAO,IAAI,WAAW,WAClB,GAAG,IAAI,YAAY,gFAA2E,IAAI,YAAY,gDAC9G;AACN;AAMA,SAAS,cAAc,aAA4D;AACjF,QAAM,YAAY,YAAY;AAAA,IAC5B,CAAC,QAAQ,IAAI,WAAW,cAAc,IAAI,aAAa,QAAQ,IAAI,YAAY;AAAA,EACjF;AACA,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,QAAM,MAAM,UAAU,IAAI,CAAC,QAAQ,IAAI,YAAY,EAAE,KAAK,IAAI;AAC9D,SAAO,GAAG,UAAU,WAAW,IAAI,0BAA0B,GAAG,UAAU,MAAM,sBAAsB,kCAAkC,GAAG;AAC7I;AAEO,SAAS,iBAAiB,aAA6C,MAAM,KAAK,IAAI,GAAa;AACxG,QAAM,QAAQ,YACX,OAAO,CAAC,QAAQ,IAAI,WAAW,UAAU,EACzC,IAAI,CAAC,QAAQ,WAAW,GAAG,IAAI,UAAU,IAAI,OAAO,EAAE,KAAK,GAAG,CAAC;AAClE,QAAM,YAAY,cAAc,WAAW;AAC3C,MAAI,UAAW,OAAM,KAAK,SAAS;AAEnC,MAAI,YAAY,WAAW,GAAG;AAC5B,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,OAAO,OAAuB;AACrC,SAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AACpC;AASA,SAAS,aAAa,MAA+D;AACnF,QAAM,UAAU,KAAK,SAAS,OAAO,CAAC,YAAY,QAAQ,mBAAmB,IAAI;AACjF,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ,IAAI,gBAAW,OAAO,QAAQ,kBAAkB,CAAC,CAAC,EAAE;AACtG,SAAO,wEAAwE,MAAM,KAAK,IAAI,CAAC;AACjG;AAGA,SAAS,gBAAgB,MAA2E;AAClG,MAAI,KAAK,YAAY,UAAU,EAAG,QAAO;AACzC,QAAM,SAAS,KAAK,YAAY,OAAO,CAAC,UAAU,MAAM,aAAa,KAAK,IAAI;AAC9E,SAAO,yCAAyC,OAC7C,IAAI,CAAC,UAAU,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,WAAM,MAAM,IAAI,YAAO,EAAE,WAAM,MAAM,kBAAkB,EAAE,EAC7G;AAAA,IACC;AAAA,EACF,CAAC;AACL;AAGA,SAAS,aAAa,MAAsC;AAC1D,QAAM,UAAuE;AAAA,IAC3E,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,YAAY;AAAA,EACd;AACA,QAAM,OAAO,KAAK,aAAa,YAAY,6BAA6B;AACxE,QAAM,WAAW,KAAK,WAAW,cAAc,KAAK,QAAQ,KAAK;AACjE,SAAO,SAAI,KAAK,WAAW,MAAM,WAAM,KAAK,YAAY,KAAK,KAAK,UAAU,WAAW,QAAQ,KAAK,iBAAiB,CAAC,KAAK,IAAI,GAAG,KAAK,iBAAiB,yBAAyB,EAAE,IAAI,QAAQ;AACjM;AASA,SAAS,cAAc,MAAgE;AACrF,MAAI,KAAK,UAAU,WAAW,EAAG,QAAO;AACxC,QAAM,QAAQ,KAAK,UAAU,MAAM,GAAG,CAAC,EAAE,IAAI,YAAY;AACzD,QAAM,OACJ,KAAK,UAAU,SAAS,IACpB,cAAS,KAAK,UAAU,SAAS,CAAC,+EAClC;AACN,SAAO,+HAA0H,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI;AACzJ;AAEO,SAAS,eAAe,MAAwC;AACrE,QAAM,WAAW,aAAa,IAAI;AAClC,QAAM,OAAO,cAAc,IAAI;AAC/B,MAAI,CAAC,KAAK,QAAQ;AAChB,WAAO;AAAA,MACL,KAAK,UAAU;AAAA,MACf,GAAI,YAAY,KAAK,WAAW,IAAI,CAAC,QAAQ,IAAI,CAAC;AAAA,MAClD,GAAI,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ;AAAA,IACZ,GAAI,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,IAIrB,GAAI,KAAK,UAAU,CAAC,KAAK,OAAO,IAAI,CAAC;AAAA,IACrC,8BAAyB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlC;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,EACF;AACA,QAAM,cAAc,gBAAgB,IAAI;AACxC,MAAI,YAAa,OAAM,KAAK,WAAW;AACvC,MAAI,KAAK,kBAAkB,QAAQ,KAAK,gBAAgB,IAAI;AAC1D,UAAM;AAAA,MACJ,qDAAqD,KAAK,aAAa;AAAA,IACzE;AAAA,EACF;AACA,MAAI,SAAU,OAAM,KAAK,QAAQ;AACjC,SAAO;AACT;AASO,SAAS,kBAAkB,OAA0C,SAAuC;AACjH,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,MACL,UACI,6BAAwB,OAAO,2IAC/B;AAAA,IACN;AAAA,EACF;AACA,QAAM,QAAkB,CAAC;AACzB,QAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,sBAAsB,WAAW;AAC/E,QAAM,UAAU,MAAM,OAAO,CAAC,SAAS,KAAK,sBAAsB,kBAAkB;AACpF,QAAM,WAAW,MAAM,OAAO,CAAC,SAAS,KAAK,sBAAsB,mBAAmB;AACtF,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM;AAAA,MACJ,SAAS,UAAU,IAAI,CAAC,SAAS,SAAI,KAAK,WAAW,MAAM,aAAQ,KAAK,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,IACnG;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM;AAAA,MACJ,kBAAkB,QAAQ,IAAI,CAAC,SAAS,SAAI,KAAK,WAAW,MAAM,aAAQ,KAAK,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,IAC1G;AAAA,EACF;AACA,MAAI,SAAS,SAAS,GAAG;AACvB,UAAM;AAAA,MACJ,mBAAmB,SAAS,IAAI,CAAC,SAAS,SAAI,KAAK,WAAW,MAAM,aAAQ,KAAK,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,IAC5G;AAAA,EACF;AACA,QAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,QAAQ,KAAK,YAAY,cAAc;AAClG,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM;AAAA,MACJ,GAAG,UAAU,WAAW,IAAI,iBAAiB,GAAG,UAAU,MAAM,aAAa,8BAA8B,UAAU,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE,KAAK,IAAI,CAAC;AAAA,IAClK;AAAA,EACF;AACA,SAAO;AACT;AAYO,SAAS,gBAAgB,QAWnB;AACX,QAAM,QAAkB,CAAC;AACzB,aAAW,SAAS,OAAO,OAAO;AAChC,UAAM,KAAK,UAAU,QAAQ,KAAK,CAAC;AAAA,EACrC;AACA,MAAI,OAAO,eAAe,OAAO,YAAY,OAAO,WAAW,GAAG;AAChE,UAAM;AAAA,MACJ,SAAI,OAAO,OAAO,qGAAsF,OAAO,OAAO,yGAAoG,OAAO,OAAO;AAAA,IAC1O;AAAA,EACF;AACA,MAAI,OAAO,SAAS,SAAS,KAAK,OAAO,gBAAgB,QAAW;AAClE,UAAM,QAAQ,OAAO,SAAS,IAAI,CAAC,SAAS,SAAI,IAAI,QAAG,EAAE,KAAK,IAAI;AAClE,UAAM;AAAA,MACJ,SAAI,OAAO,OAAO,eAAU,OAAO,SAAS,WAAW,IAAI,WAAW,OAAO,uBAAuB,KAAK,yCAAyC,OAAO,IAAI,oPAA+O,OAAO,SAAS,CAAC,CAAC,yCAAyC,OAAO,SAAS,CAAC,CAAC;AAAA,IAC3d;AAAA,EACF;AACA,SAAO;AACT;AAgBA,SAAS,UAAU,QAA8C,OAAiC;AAChG,QAAM,SAAS;AACf,MAAI,MAAM,WAAW,mBAAmB;AACtC,WAAO,SAAI,OAAO,OAAO,oBAAU,OAAO,OAAO,uBAAkB,MAAM,IAAI,wPAAwP,MAAM;AAAA,EAC7U;AACA,MAAI,MAAM,WAAW,0BAA0B,MAAM,WAAW,wBAAwB;AACtF,UAAM,UAAU,MAAM,WAAW,yBAAyB,OAAO,UAAU,OAAO;AAClF,WAAO,4BAA4B,MAAM,IAAI,mBAAS,OAAO,qIAAgI,MAAM;AAAA,EACrM;AACA,SAAO,yBAAyB,MAAM,IAAI,uSAAkS,MAAM;AACpV;;;ACrSA,IAAM,UAAU,+BAA+B,QAAQ,KAAK,IAAI;AAEhE,SAAS,SAAS,KAAqD;AACrE,QAAM,YAAY,IAAI,QAAQ,GAAG;AACjC,MAAI,cAAc,IAAI;AACpB,WAAO,EAAE,OAAO,0DAAqD,GAAG,6BAA6B,OAAO,GAAG;AAAA,EACjH;AACA,QAAM,SAAS,+BAA+B,UAAU,IAAI,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC;AACtF,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,EAAE,OAAO,SAAI,IAAI,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,0DAAqD,OAAO,GAAG;AAAA,EACnH;AAEA,QAAM,OAAO,IAAI,MAAM,YAAY,CAAC,EAAE,KAAK;AAC3C,QAAM,OAAO,KAAK,YAAY,GAAG;AACjC,QAAM,QAAQ,SAAS,KAAK,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK;AAC7D,QAAM,OAAO,SAAS,KAAK,SAAY,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK;AACjE,MAAI,SAAS,IAAI;AACf,WAAO,EAAE,OAAO,YAAY,OAAO,IAAI,wBAAwB,OAAO,IAAI,iBAAiB;AAAA,EAC7F;AACA,SAAO,OAAO,EAAE,QAAQ,OAAO,MAAM,MAAM,KAAK,IAAI,EAAE,QAAQ,OAAO,MAAM,KAAK;AAClF;AAWO,SAAS,cAAc,KAAoC,SAA6C;AAC7G,QAAM,UAAU,eAAe,SAAS,YAAY,GAAG,EACpD,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,CAAC,UAAU,UAAU,EAAE;AACjC,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,QAAM,SAA+B,CAAC;AACtC,aAAW,SAAS,SAAS;AAC3B,UAAM,MAAM,SAAS,KAAK;AAC1B,QAAI,WAAW,IAAK,QAAO;AAC3B,WAAO,KAAK,GAAG;AAAA,EACjB;AACA,SAAO;AACT;;;ACrEA,SAAS,YAAAC,iBAAgB;AACzB,OAAOC,WAAU;AAajB,eAAsB,mBAAmB,MAAc,MAA2C;AAChG,MAAI;AACF,UAAM,OAAO,MAAMD,UAASC,MAAK,QAAQ,MAAM,OAAO,SAAS,MAAM,gBAAgB,GAAG,MAAM;AAC9F,WAAO,oCAAoC,KAAK,IAAI,IAAI,CAAC;AAAA,EAC3D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACsBA,SAAS,YAAAC,iBAAgB;AACzB,OAAOC,WAAU;AA6CV,SAAS,oBAAoB,QAAoC;AACtE,QAAM,QAA4B,CAAC;AACnC,QAAM,UAAU;AAChB,aAAW,SAAS,OAAO,SAAS,OAAO,GAAG;AAC5C,UAAM,KAAK,MAAM;AACjB,UAAM,QAAQ,OAAO,YAAY,KAAK,EAAE;AACxC,UAAM,SAAS,OAAO,QAAQ,KAAK,EAAE;AACrC,UAAM,KAAK;AAAA,MACT,MAAM,MAAM,CAAC;AAAA,MACb,WAAW,MAAM,CAAC;AAAA,MAClB,QAAQ,UAAU,OAAO,MAAM,QAAQ,IAAI,KAAK,OAAO,SAAS,IAAI,KAAK,MAAM,CAAC,EAAE,SAAS,SAAS,CAAC,CAAC;AAAA,IACxG,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAGA,SAAS,UAAU,QAAwB;AACzC,SAAO,OAAO,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAC1C;AASO,SAAS,iBACd,SACA,SACoB;AACpB,QAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,SAAS,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK;AACrF,SAAO,MAAM,QAAQ,CAAC,SAA6B;AACjD,UAAM,OAAO,QAAQ,OAAO,CAAC,UAAU,MAAM,SAAS,IAAI;AAC1D,UAAM,QAAQ,QAAQ,OAAO,CAAC,UAAU,MAAM,SAAS,IAAI;AAC3D,QAAI,MAAM,WAAW,EAAG,QAAO,CAAC,EAAE,MAAM,QAAQ,uBAAuB,CAAC;AACxE,QAAI,KAAK,WAAW,EAAG,QAAO,CAAC,EAAE,MAAM,QAAQ,uBAAuB,CAAC;AACvE,QAAI,MAAM,MAAM,CAAC,UAAU,MAAM,SAAS,MAAM,MAAM,OAAO,CAAC,UAAU,MAAM,SAAS,GAAG;AACxF,aAAO,CAAC,EAAE,MAAM,QAAQ,kBAAkB,CAAC;AAAA,IAC7C;AACA,QAAI,MAAM,MAAM,CAAC,UAAU,MAAM,MAAM,MAAM,MAAM,OAAO,CAAC,UAAU,MAAM,MAAM,GAAG;AAClF,aAAO,CAAC,EAAE,MAAM,QAAQ,iBAAiB,CAAC;AAAA,IAC5C;AACA,WAAO,CAAC;AAAA,EACV,CAAC;AACH;AAOA,SAAS,MAAM,SAAsC,IAAiD;AACpG,SAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI;AACvD;AAYA,eAAsB,qBACpB,MACA,aACA,aAC6B;AAC7B,MAAI,CAAC,YAAa,QAAO,CAAC;AAC1B,MAAI;AACF,UAAM,eAAe,WAAW,CAAC,GAAI,MAAM,kBAAkB,MAAM,WAAW,CAAE,GAAG,WAAW;AAC9F,UAAM,SAAS,IAAI,IAAI,YAAY,MAAM;AACzC,UAAM,CAAC,SAAS,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC3C;AAAA,QACE;AAAA,QACA,aAAa,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC;AAAA,MACjD;AAAA,MACA,eAAe,MAAM,YAAY,MAAM;AAAA,IACzC,CAAC;AACD,WAAO,iBAAiB,SAAS,OAAO;AAAA,EAC1C,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAGA,SAAS,WAAW,OAA0B,MAAwB;AACpE,QAAM,SAAS,aAAa,IAAI;AAChC,SAAO,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,MAAM,KAAK,CAAC,KAAK,MAAM,OAAO,MAAM,EAAE,WAAW,QAAQ,CAAC;AAC1G;AAEA,eAAe,eAAe,MAAc,OAAuD;AACjG,QAAM,UAAU,MAAM,QAAQ,IAAI,MAAM,IAAI,CAAC,SAASC,UAASC,MAAK,KAAK,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC,CAAC;AAC9G,SAAO,QAAQ,QAAQ,mBAAmB;AAC5C;;;AC9JA,SAAS,UAAU,IAAkC;AACnD,SAAO,OAAO,OAAO,OAAO,IAAI,KAAK,EAAE,EAAE,YAAY;AACvD;AAOA,SAAS,OAAO,IAAkC;AAChD,SAAO,OAAO,OAAO,OAAO,IAAI,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACpE;AAGA,SAAS,WAAW,KAAoB;AACtC,SAAO,EAAE,UAAU,IAAI,UAAU,aAAa,IAAI,aAAa,MAAM,KAAK,MAAM,IAAI,OAAO,GAAM,IAAI,IAAO;AAC9G;AAGA,SAAS,cAAc,QAA0B;AAC/C,SAAO;AAAA,IACL,MAAM,OAAO;AAAA,IACb,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO,QAAQ;AAAA,IACxB,SAAS,OAAO,QAAQ;AAAA,EAC1B;AACF;AAEA,SAAS,QAAQ,KAAoB;AACnC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,IAAI,uBAAuB,SAAY,CAAC,IAAI,EAAE,oBAAoB,UAAU,IAAI,kBAAkB,EAAE;AAAA,EAC1G;AACF;AAEO,SAAS,cAAc,KAA0B,EAAE,MAAM,IAAI,GAA4C;AAC9G,QAAM,eAAe;AAAA,IACnB,oBAAoB,OAAO,IAAI,kBAAkB;AAAA,IACjD,GAAI,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,oBAAoB,aAAa,IAAI,oBAAoB,GAAG,EAAE;AAAA,EAC7G;AACA,QAAM,UAAU;AAAA,IACd,WAAW,UAAU,IAAI,SAAS;AAAA,IAClC,UAAU,UAAU,IAAI,QAAQ;AAAA,IAChC,YAAY,UAAU,IAAI,UAAU;AAAA,EACtC;AAEA,MAAI,MAAM;AACR,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,SAAS,QAAQ,IAAI,OAAO;AAAA,MAC5B,SAAS,QAAQ,IAAI,OAAO;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,IAAI;AAAA,IAClB,aAAa,IAAI;AAAA,IACjB,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,SAAS,IAAI;AAAA,IACb,GAAI,IAAI,WAAW,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO;AAAA,IACpD,GAAI,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,eAAe,IAAI,cAAc;AAAA,IACzE,aAAa,IAAI;AAAA,IACjB,GAAG;AAAA,IACH,iBAAiB,IAAI;AAAA,IACrB,SAAS,WAAW,IAAI,OAAO;AAAA,IAC/B,SAAS,WAAW,IAAI,OAAO;AAAA,IAC/B,WAAW,IAAI,UAAU,IAAI,aAAa;AAAA,IAC1C,qBAAqB,IAAI;AAAA,IACzB,2BAA2B,IAAI;AAAA,IAC/B,MAAM,IAAI;AAAA,IACV,GAAI,IAAI,gBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,YAAY;AAAA,IACnE,WAAW,IAAI;AAAA,IACf,GAAG;AAAA,IACH,GAAI,IAAI,WAAW,aACf;AAAA,MACE,UAAU,IAAI;AAAA,MACd,mBAAmB,IAAI;AAAA,MACvB,MAAM,IAAI;AAAA,MACV,UAAU,IAAI;AAAA,MACd,WAAW,IAAI;AAAA,IACjB,IACA,CAAC;AAAA,EACP;AACF;;;ACvGO,SAAS,mBACd,MAYA,SAC6C;AAC7C,QAAM,SAAS,KAAK,WAAW,SAAY,SAAY,OAAO,KAAK,MAAM;AACzE,MAAI,WAAW,UAAa,WAAW,cAAc,WAAW,YAAY;AAC1E,WAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,WAAW,cAAc,KAAK,UAA2C,OAAO;AACtF,MAAI,YAAY,WAAW,SAAU,QAAO;AAE5C,QAAM,OAAO,KAAK,SAAS,SAAY,SAAY,OAAO,KAAK,IAAI;AACnE,MAAI,SAAS,UAAa,EAAE,OAAO,IAAI;AACrC,WAAO;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,UAAmC;AAAA,IACvC,cAAc,OAAO,KAAK,EAAE;AAAA,IAC5B,GAAG,MAAM,WAAW,KAAK,OAAO;AAAA,IAChC,GAAG,MAAM,UAAU,KAAK,MAAM;AAAA,IAC9B,GAAG,MAAM,QAAQ,KAAK,IAAI;AAAA,IAC1B,GAAG,MAAM,eAAe,KAAK,WAAW;AAAA,IACxC,GAAG,MAAM,YAAY,KAAK,QAAQ;AAAA,IAClC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,IACzC,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,2BAA2B,KAAK;AAAA,EAClE;AACA,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,WAAO;AAAA,MACL,OACE;AAAA,IACJ;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,MACP,KACA,OACuB;AACvB,SAAO,UAAU,SAAY,CAAC,IAAK,EAAE,CAAC,GAAG,GAAG,OAAO,KAAK,EAAE;AAC5D;;;AVjDA,IAAM,WAAW;AAAA,EACf,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,mBAAmB;AAAA,EACvB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,WAAW;AAAA,EACf,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAWA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,SAAS,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,KAAK;AAEpF,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU;AACZ;AAEA,IAAM,qBAAqB;AAAA,EACzB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACZ;AAOA,SAAS,YAAY,MAAyC;AAC5D,SAAO,OAAO,KAAK,YAAY,WAAW,CAAC,KAAK,OAAO,IAAI,CAAC;AAC9D;AAEA,SAAS,KAAK,SAAwB;AACpC,oBAAkB,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,oBAAoB,QAAQ,EAAE,CAAC;AAC7E,UAAQ,KAAK,CAAC;AAChB;AAEA,SAAS,eAAe,OAAuB;AAC7C,MAAI,iBAAiB,UAAU;AAC7B,sBAAkB,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,EAAE,CAAC;AAC/F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,QAAM;AACR;AAEA,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,KAAK;AAAA,IACvF,SAAS,EAAE,MAAM,UAAU,aAAa,yCAAyC,UAAU,KAAK;AAAA,IAChG,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF,CAAC;AAED,IAAM,cAAc,cAAc;AAAA,EAChC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,KAAK;AAAA,IACvF,SAAS,EAAE,MAAM,UAAU,aAAa,yCAAyC,UAAU,KAAK;AAAA,IAChG,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,WAAW,MAAM,QAAoD,yBAAyB;AAAA,QAClG,aAAa,OAAO,KAAK,OAAO;AAAA,QAChC,aAAa,OAAO,KAAK,OAAO;AAAA,QAChC,GAAI,KAAK,OAAO,EAAE,MAAM,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QAC/C,GAAI,KAAK,cAAc,EAAE,aAAa,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,QACpE,GAAI,KAAK,OAAO,EAAE,2BAA2B,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QACpE,GAAI,KAAK,WAAW,EAAE,cAAc,OAAO,KAAK,QAAQ,EAAE,IAAI,CAAC;AAAA,MACjE,CAAC;AACD,wBAAkB,EAAE,IAAI,MAAM,MAAM,SAAS,MAAM,OAAO,eAAe,SAAS,IAAI,EAAE,CAAC;AAAA,IAC3F,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,KAAK;AAAA,IACvF,SAAS,EAAE,MAAM,UAAU,aAAa,yCAAyC,UAAU,KAAK;AAAA,IAChG,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF,CAAC;AAED,IAAM,eAAe,cAAc;AAAA,EACjC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,KAAK;AAAA,IACvF,SAAS,EAAE,MAAM,UAAU,aAAa,yCAAyC,UAAU,KAAK;AAAA,IAChG,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,KAAK,OAAO,EAAE,MAAM,QAAQ,MAAM;AAChC,UAAM,SAAS,KAAK,WAAW,SAAY,aAAa,OAAO,KAAK,MAAM;AAC1E,QAAI,WAAW,cAAc,WAAW,YAAY;AAClD,WAAK,uGAAkG;AAAA,IACzG;AACA,UAAM,WAAW,cAAc,KAAK,UAA2C,OAAO;AACtF,QAAI,YAAY,WAAW,SAAU,MAAK,SAAS,KAAK;AAExD,UAAM,EAAE,aAAa,UAAU,OAAO,mBAAmB,kBAAkB,IAAI,MAAM;AAAA,MACnF,OAAO,KAAK,OAAO;AAAA,MACnB,OAAO,KAAK,OAAO;AAAA,IACrB;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,QAAqD,0BAA0B;AAAA,QACpG,aAAa,OAAO,KAAK,OAAO;AAAA,QAChC,aAAa,OAAO,KAAK,OAAO;AAAA,QAChC,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,QACjD,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,QACjD,YAAY;AAAA,UACV,SAAS,OAAO,KAAK,OAAO;AAAA,UAC5B,QAAQ,OAAO,KAAK,MAAM;AAAA,UAC1B;AAAA,UACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,QACjC;AAAA,QACA,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,QACrC,GAAI,KAAK,OAAO,EAAE,MAAM,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QAC/C,GAAI,KAAK,cAAc,EAAE,aAAa,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,QACpE,GAAI,KAAK,OAAO,EAAE,2BAA2B,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QACpE,GAAI,KAAK,WAAW,EAAE,cAAc,OAAO,KAAK,QAAQ,EAAE,IAAI,CAAC;AAAA,MACjE,CAAC;AACD,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM,SAAS;AAAA,QACf,OAAO;AAAA,UACL,GAAG,YAAY,SAAS,IAAI;AAAA,UAC5B,GAAG,gBAAgB;AAAA,YACjB,SAAS,OAAO,KAAK,OAAO;AAAA,YAC5B,SAAS,OAAO,KAAK,OAAO;AAAA,YAC5B,MAAM,OAAO,SAAS,KAAK,IAAI;AAAA,YAC/B,aAAa,KAAK,gBAAgB,SAAY,SAAY,OAAO,KAAK,WAAW;AAAA,YACjF;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UACD;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,MAAM;AAAA,IAC1E,SAAS;AAAA,IACT,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,EACF;AACF,CAAC;AAED,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,MAAM;AAAA,IAC1E,SAAS;AAAA,IACT,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,WAAW,MAAM,QAAsD,2BAA2B;AAAA,QACtG,GAAI,KAAK,KAAK,EAAE,cAAc,OAAO,KAAK,EAAE,EAAE,IAAI,CAAC;AAAA,QACnD,GAAI,KAAK,UAAU,EAAE,aAAa,OAAO,KAAK,OAAO,EAAE,IAAI,CAAC;AAAA,QAC5D,GAAI,KAAK,SAAS,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAAA,MAC7C,CAAC;AACD,YAAM,MAAM,KAAK,IAAI;AACrB,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM;AAAA,UACJ,aAAa,SAAS,KAAK,YAAY,IAAI,CAAC,QAAQ,cAAc,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,IAAI,CAAC,CAAC;AAAA,QAC3G;AAAA,QACA,OAAO,iBAAiB,SAAS,KAAK,aAAa,GAAG;AAAA,MACxD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,OAAO,EAAE,MAAM,UAAU,aAAa,iDAAiD,UAAU,MAAM;AAAA,EACzG;AACF,CAAC;AAED,IAAM,iBAAiB,cAAc;AAAA,EACnC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,OAAO,EAAE,MAAM,UAAU,aAAa,mCAAmC,UAAU,MAAM;AAAA,EAC3F;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,QAAQ,KAAK,UAAU,SAAY,SAAY,OAAO,KAAK,KAAK;AACtE,QAAI,UAAU,UAAa,EAAE,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAI,MAAK,wCAAwC;AACjH,QAAI;AACF,YAAM,WAAW,MAAM,QAAuD,4BAA4B;AAAA,QACxG,GAAI,KAAK,UAAU,EAAE,aAAa,OAAO,KAAK,OAAO,EAAE,IAAI,CAAC;AAAA,QAC5D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM,SAAS;AAAA,QACf,OAAO,kBAAkB,SAAS,KAAK,OAAO,KAAK,YAAY,SAAY,SAAY,OAAO,KAAK,OAAO,CAAC;AAAA,MAC7G,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AACF,CAAC;AAED,IAAM,cAAc,CAAC,iBAAiB,gBAAgB,iBAAiB,aAAa;AAGpF,SAAS,YACP,MACA,OACU;AACV,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,OAAO,EAAE,UAAU,MAAM,SAAS;AACxC,SAAO;AAAA,IACL,+BAA+B,KAAK,aAAa,YAAY,gBAAgB,UAAU;AAAA,IACvF,GAAI,KAAK,iBACL;AAAA,MACE,gBAAgB,KAAK,aAAa,YAAY,gBAAgB,UAAU,qDAAqD,KAAK,OAAO;AAAA,IAC3I,IACA,CAAC;AAAA,IACL,GAAI,KAAK,YAAY,iBACjB;AAAA,MACE;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,KAAK,aAAa,YAClB;AAAA,MACE;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,KAAK,YAAY,KAAK,YAAY,iBAClC,CAAC,IACD;AAAA,MACE;AAAA,IACF;AAAA,IACJ,GAAI,SACA,CAAC,IACD;AAAA,MACE;AAAA,IACF;AAAA,EACN;AACF;AAEA,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,QAAI,SAAS,cAAc,SAAS,WAAW;AAC7C,WAAK,kGAA6F;AAAA,IACpG;AACA,UAAM,SAAS,KAAK,WAAW,SAAY,SAAY,OAAO,KAAK,MAAM;AACzE,QAAI,WAAW,UAAa,CAAC,YAAY,KAAK,CAAC,UAAU,UAAU,MAAM,GAAG;AAC1E,WAAK,0BAA0B,YAAY,KAAK,IAAI,CAAC,uCAAkC;AAAA,IACzF;AACA,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,UACE,cAAc,OAAO,KAAK,EAAE;AAAA,UAC5B;AAAA,UACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,UAC3B,GAAI,KAAK,WAAW,EAAE,UAAU,OAAO,KAAK,QAAQ,EAAE,IAAI,CAAC;AAAA,QAC7D;AAAA,MACF;AACA,UAAI,cAAc,SAAS,MAAM;AAC/B,0BAAkB;AAAA,UAChB,IAAI;AAAA,UACJ,MAAM,SAAS;AAAA,UACf,OAAO,CAAC,iGAAiG;AAAA,QAC3G,CAAC;AACD;AAAA,MACF;AACA,YAAM,OAAO,SAAS;AACtB,wBAAkB,EAAE,IAAI,MAAM,MAAM,OAAO,YAAY,MAAM,EAAE,QAAQ,UAAU,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,IACrG,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,EAAE,IAAI,OAAO;AACrB,CAAC;AAED,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM,EAAE,IAAI,OAAO;AAAA,EACnB,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA,EAAE,cAAc,OAAO,KAAK,EAAE,GAAG,MAAM,WAAW;AAAA,MACpD;AACA,UAAI,cAAc,SAAS,MAAM;AAC/B,0BAAkB;AAAA,UAChB,IAAI;AAAA,UACJ,MAAM,SAAS;AAAA,UACf,OAAO,CAAC,iGAAiG;AAAA,QAC3G,CAAC;AACD;AAAA,MACF;AACA,YAAM,OAAO,SAAS;AACtB,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA,GAAI,KAAK,YAAY,iBACjB;AAAA,YACE;AAAA,UACF,IACA,KAAK,iBACH;AAAA,YACE,yCAAyC,KAAK,OAAO;AAAA,UACvD,IACA,CAAC;AAAA,UACP;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS,EAAE,GAAG,aAAa,UAAU,MAAM;AAAA,IAC3C,QAAQ,EAAE,GAAG,YAAY,UAAU,MAAM;AAAA,IACzC,UAAU;AAAA,IACV,QAAQ,EAAE,GAAG,YAAY,aAAa,+CAA+C;AAAA,IACrF,MAAM,EAAE,GAAG,UAAU,aAAa,4DAA4D;AAAA,IAC9F,aAAa;AAAA,MACX,GAAG;AAAA,MACH,aAAa;AAAA,IACf;AAAA,IACA,MAAM,EAAE,GAAG,UAAU,aAAa,wDAAwD;AAAA,IAC1F,UAAU;AAAA,EACZ;AACF,CAAC;AAED,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS,EAAE,GAAG,aAAa,UAAU,MAAM;AAAA,IAC3C,QAAQ,EAAE,GAAG,YAAY,UAAU,MAAM;AAAA,IACzC,UAAU;AAAA,IACV,QAAQ,EAAE,GAAG,YAAY,aAAa,+CAA+C;AAAA,IACrF,MAAM,EAAE,GAAG,UAAU,aAAa,4DAA4D;AAAA,IAC9F,aAAa;AAAA,MACX,GAAG;AAAA,MACH,aAAa;AAAA,IACf;AAAA,IACA,MAAM,EAAE,GAAG,UAAU,aAAa,wDAAwD;AAAA,IAC1F,UAAU;AAAA,EACZ;AAAA,EACA,KAAK,OAAO,EAAE,MAAM,QAAQ,MAAM;AAChC,UAAM,UAAU,mBAAmB,MAAM,OAAO;AAChD,QAAI,WAAW,QAAS,MAAK,QAAQ,KAAK;AAC1C,QAAI;AACF,YAAM,WAAW,MAAM,QAAsD,2BAA2B,OAAO;AAC/G,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM,SAAS;AAAA,QACf,OAAO;AAAA,UACL,SAAS,KAAK,SACV,0EACA,QAAQ,aAAa,SACnB,4GACA;AAAA,UACN,iBAAiB,SAAS,KAAK,mBAAmB;AAAA,QACpD;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,EAAE,IAAI,OAAO;AACrB,CAAC;AAED,IAAM,eAAe,cAAc;AAAA,EACjC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM,EAAE,IAAI,OAAO;AAAA,EACnB,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,QAAQ,0BAA0B,EAAE,cAAc,OAAO,KAAK,EAAE,EAAE,CAAC;AACzE,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM,EAAE,QAAQ,KAAK;AAAA,QACrB,OAAO;AAAA,UACL,+EAA+E,OAAO,KAAK,EAAE,CAAC;AAAA,QAChG;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,EAAE,IAAI,OAAO;AACrB,CAAC;AAED,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,EAAE,IAAI,OAAO;AAAA,EACnB,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,QAAQ,2BAA2B,EAAE,cAAc,OAAO,KAAK,EAAE,EAAE,CAAC;AAC1E,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM,EAAE,SAAS,KAAK;AAAA,QACtB,OAAO,CAAC,qDAAqD;AAAA,MAC/D,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,8DAA8D,UAAU,MAAM;AAAA,EACnH;AACF,CAAC;AAED,IAAM,cAAc,cAAc;AAAA,EAChC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,8DAA8D,UAAU,MAAM;AAAA,EACnH;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,QAAQ,MAAM,QAAoD,yBAAyB;AAAA,QAC/F,GAAI,KAAK,KAAK,EAAE,cAAc,OAAO,KAAK,EAAE,EAAE,IAAI,CAAC;AAAA,MACrD,CAAC;AACD,YAAM,OAAO,MAAM,KAAK;AACxB,UAAI,KAAK,WAAW,GAAG;AACrB,0BAAkB;AAAA,UAChB,IAAI;AAAA,UACJ,MAAM,EAAE,QAAQ,CAAC,EAAE;AAAA,UACnB,OAAO,CAAC,wFAAmF;AAAA,QAC7F,CAAC;AACD;AAAA,MACF;AAEA,YAAM,SAAuB,CAAC;AAC9B,YAAM,WAAqB,CAAC;AAC5B,iBAAW,UAAU,MAAM;AACzB,cAAM,SAAS,MAAM,eAAe,QAAQ,IAAI,GAAG,MAAM;AAIzD,YAAI,WAAW,OAAQ,UAAS,KAAK,GAAG,OAAO,WAAW,KAAK,OAAO,KAAK,EAAE;AAAA,YACxE,QAAO,KAAK,MAAM;AAAA,MACzB;AAEA,UAAI,OAAO,SAAS,GAAG;AAIrB,cAAM,QAAQ,yBAAyB;AAAA,UACrC,SAAS;AAAA,UACT,eAAe,OAAO,IAAI,CAAC,WAAW,OAAO,YAAY;AAAA,UACzD,GAAI,KAAK,KAAK,EAAE,cAAc,OAAO,KAAK,EAAE,EAAE,IAAI,CAAC;AAAA,QACrD,CAAC;AAAA,MACH;AAEA,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,MAAM,EAAE,QAAQ,SAAS;AAAA,QACzB,OAAO;AAAA,UACL,OAAO,SAAS,IACZ,uNACA;AAAA,UACJ,GAAI,SAAS,SAAS,IAAI,CAAC,mBAAmB,SAAS,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,UACxE,GAAI,OAAO,SAAS,IAChB;AAAA,YACE,oCAAoC,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;AAAA,UAChF,IACA,CAAC;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAEM,IAAM,oBAAoB,cAAc;AAAA,EAC7C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF,CAAC;AASD,eAAe,iBAAiB,SAAiB,SAAiB;AAChE,QAAM,OAAO,QAAQ,IAAI;AAGzB,QAAM,cAAc,MAAM,gBAAgB,MAAM,SAAS,OAAO;AAChE,QAAM,CAAC,cAAc,cAAc,mBAAmB,iBAAiB,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC3F,UAAU,MAAM,OAAO;AAAA,IACvB,UAAU,MAAM,OAAO;AAAA;AAAA;AAAA,IAGvB,mBAAmB,MAAM,OAAO;AAAA,IAChC,mBAAmB,MAAM,OAAO;AAAA,EAClC,CAAC;AACD,SAAO;AAAA,IACL;AAAA,IACA,UAAU,YAAY,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhD,OAAO,MAAM,qBAAqB,MAAM,SAAS,WAAW;AAAA,IAC5D;AAAA,IACA;AAAA,EACF;AACF;","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-EFSYTROP.js";
4
+ import {
5
+ apiGet,
6
+ apiPost
7
+ } from "./chunk-XBOK23HI.js";
8
+ import "./chunk-IFWP3ZDO.js";
9
+ import "./chunk-NAWWC5I3.js";
10
+ import {
11
+ registerSchema,
12
+ writeJson
13
+ } from "./chunk-NU7JSWVA.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-JQRMBJ7D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/landing/export.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type {\n LandingExportListResponse,\n LandingExportStartRequest,\n LandingExportStartResponse,\n LandingExportStatusResponse,\n LandingExportView,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiGet, apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError } from \"./inspiration/shared.ts\";\n\n/** What the agent is told after starting an export. */\nexport function exportStartHints(args: { stagedProfilePending: boolean; profileOverridden: boolean }): string[] {\n const hints = [\n \"This downloads the PUBLISHED site — landings changed in this chat and not yet published are not included. Publish first if the user wants them in it.\",\n \"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.\",\n ];\n if (args.stagedProfilePending && !args.profileOverridden) {\n hints.push(\n \"This chat has a download-format change waiting on Publish; this export uses the saved format. The staged format applies after publish — pass `--profile` to try it now.\",\n );\n }\n return hints;\n}\n\n/** What the agent is told about one export, by where it got to. */\nexport function exportStatusHints(view: Pick<LandingExportView, \"status\" | \"downloadUrl\">): string[] {\n if (view.status === \"ready\") {\n return view.downloadUrl\n ? [\"Give the user this link to download the ZIP — it is also on this chat's changes.\"]\n : [\"This export is ready but its file is gone. Start a new one with `baker landing export start`.\"];\n }\n if (view.status === \"error\") {\n return [\n \"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.\",\n ];\n }\n return [\"Still being prepared. Carry on with other work and check again in a minute — never sleep-loop on it.\"];\n}\n\n/** `--profile '{\"htmlOutput\":\"fragment\"}'` or `--profile @profile.json`. */\nexport function parseProfileFlag(\n raw: string,\n readFile: (path: string) => string = (path) => readFileSync(path, \"utf8\"),\n): { ok: true; profile: Record<string, unknown> } | { ok: false; message: string } {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw.startsWith(\"@\") ? readFile(raw.slice(1)) : raw);\n } catch (error) {\n return {\n ok: false,\n message: `--profile must be a JSON object or @<file> holding one: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return { ok: false, message: '--profile must be a JSON object, e.g. \\'{\"htmlOutput\":\"fragment\"}\\'.' };\n }\n return { ok: true, profile: parsed as Record<string, unknown> };\n}\n\nfunction failValidation(message: string): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\nregisterSchema({\n command: \"landing.export.start\",\n description:\n \"Start a download (ZIP of plain HTML) of the company's PUBLISHED landings — the same pack Landings → 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.\",\n args: {\n profile: {\n type: \"string\",\n description:\n 'Download-format fields for this export only, on top of the saved format: a JSON object or @<file>. Example: \\'{\"htmlOutput\":\"fragment\",\"inlineCss\":true}\\'',\n required: false,\n },\n },\n});\n\nregisterSchema({\n command: \"landing.export.status\",\n description: \"Where one download got to, and its link once it is ready.\",\n args: { id: { type: \"string\", description: \"Export id from `start` or `list`\", required: true } },\n});\n\nregisterSchema({\n command: \"landing.export.list\",\n description: \"The company's last 10 downloads, newest first, with their status. `status <id>` gives the link.\",\n args: {},\n});\n\nconst startCommand = defineCommand({\n meta: {\n name: \"start\",\n description:\n \"Start a download of the published landings. Examples: baker landing export start | baker landing export start --profile @export-profile.json\",\n },\n args: {\n profile: {\n type: \"string\",\n description: \"Download-format fields for this export only (JSON object or @file)\",\n required: false,\n },\n },\n run: async ({ args }) => {\n const rawProfile = typeof args.profile === \"string\" ? args.profile : undefined;\n const body: LandingExportStartRequest = {};\n if (rawProfile !== undefined) {\n const parsed = parseProfileFlag(rawProfile);\n if (!parsed.ok) failValidation(parsed.message);\n body.profile = parsed.profile;\n }\n try {\n const response = await apiPost<LandingExportStartResponse>(\"/api/landings/export/start\", body);\n writeJson({\n ok: true,\n data: { exportId: response.data.exportId },\n hints: exportStartHints({\n stagedProfilePending: response.data.stagedProfilePending,\n profileOverridden: rawProfile !== undefined,\n }),\n });\n } catch (error) {\n reportError(error);\n }\n },\n});\n\nconst statusCommand = defineCommand({\n meta: {\n name: \"status\",\n description: \"Where a download got to, and its link once ready. Example: baker landing export status <id>\",\n },\n args: { id: { type: \"positional\", description: \"Export id\", required: true } },\n run: async ({ args }) => {\n try {\n const response = await apiGet<LandingExportStatusResponse>(\"/api/landings/export/status\", {\n id: String(args.id),\n });\n writeJson({ ok: true, data: response.data, hints: exportStatusHints(response.data) });\n } catch (error) {\n reportError(error);\n }\n },\n});\n\nconst listCommand = defineCommand({\n meta: { name: \"list\", description: \"The company's last 10 downloads. Example: baker landing export list\" },\n args: {},\n run: async () => {\n try {\n const response = await apiGet<LandingExportListResponse>(\"/api/landings/export/list\");\n writeJson({ ok: true, data: response.data });\n } catch (error) {\n reportError(error);\n }\n },\n});\n\nexport const exportCommand = defineCommand({\n meta: {\n name: \"export\",\n description: `Download the company's published landings as a ZIP of plain HTML.\n\nStart here: \\`baker landing export start\\`, then \\`baker landing export status <id>\\` for the link.\n\nSubcommands:\n baker landing export start [--profile <json|@file>] — start a download (returns at once)\n baker landing export status <id> — progress, and the link once ready\n baker landing export list — the last 10 downloads\n\nFull guide: __tooling__/docs/tools/baker/landing.md`,\n },\n subCommands: { start: startCommand, status: statusCommand, list: listCommand },\n});\n"],"mappings":"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","names":[]}