@koda-sl/baker-cli 0.452.0 → 0.453.0-dev.914a088e4

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 (1279) hide show
  1. package/README.md +17 -17
  2. package/dist/account-6P3XK5ZJ.js +79 -0
  3. package/dist/account-IVVLUX4B.js +80 -0
  4. package/dist/account-VBI3KT3Y.js +49 -0
  5. package/dist/account-writes-TQOVHHB6.js +66 -0
  6. package/dist/accounts-3MWSJX54.js +611 -0
  7. package/dist/accounts-DJW5PRSE.js +115 -0
  8. package/dist/accounts-L7GABKXD.js +77 -0
  9. package/dist/accounts-TVKG5H7H.js +114 -0
  10. package/dist/accounts-X2CYWEHN.js +75 -0
  11. package/dist/actions-HTMV22XX.js +55 -0
  12. package/dist/active-entities-HFBJWW5X.js +103 -0
  13. package/dist/activities-IRKTG2P4.js +74 -0
  14. package/dist/ad-group-writes-4OIJFZFS.js +170 -0
  15. package/dist/ad-groups-OCQ4UNHN.js +68 -0
  16. package/dist/ad-writes-XZEKXPP2.js +174 -0
  17. package/dist/add-JWYHFZBE.js +97 -0
  18. package/dist/add-LZ2NEYLU.js +105 -0
  19. package/dist/add-PEWOKKO4.js +302 -0
  20. package/dist/add-TPPJVWCA.js +104 -0
  21. package/dist/ads-IVGQFY6E.js +113 -0
  22. package/dist/ads-ODTIC6AO.js +77 -0
  23. package/dist/ads-XDBIPFUZ.js +40 -0
  24. package/dist/adsets-3EW7RTJM.js +176 -0
  25. package/dist/advertisers-DIMYL7SK.js +111 -0
  26. package/dist/advertisers-MCX3X3WO.js +120 -0
  27. package/dist/analytics-OYIDTPMT.js +1958 -0
  28. package/dist/analytics-OYIDTPMT.js.map +1 -0
  29. package/dist/analytics-TRQZDEPE.js +433 -0
  30. package/dist/animate-VOXMU24L.js +480 -0
  31. package/dist/assign-GD7BO66P.js +77 -0
  32. package/dist/audience-size-I6EXVPBZ.js +94 -0
  33. package/dist/audiences-7A2YNNTW.js +85 -0
  34. package/dist/audiences-P4HMEMPG.js +268 -0
  35. package/dist/audiences-XC2WSLHB.js +78 -0
  36. package/dist/audit-F5SYOLIW.js +88 -0
  37. package/dist/audit-O3BADU7Y.js +151 -0
  38. package/dist/autocomplete-YFHEMCTY.js +111 -0
  39. package/dist/avatars-BGGZRJG4.js +38 -0
  40. package/dist/bid-pricing-ZIGVTGHM.js +99 -0
  41. package/dist/brand-IMFVQDP5.js +22 -0
  42. package/dist/brief-Y7SQ2YOI.js +477 -0
  43. package/dist/businesses-PDLCA772.js +53 -0
  44. package/dist/campaign-groups-XOALBRM2.js +95 -0
  45. package/dist/campaign-writes-CCTLEII5.js +170 -0
  46. package/dist/campaign-writes-FBOAHTFD.js +165 -0
  47. package/dist/campaigns-BPXWPYXC.js +107 -0
  48. package/dist/campaigns-D4JI7FK2.js +109 -0
  49. package/dist/campaigns-MHSOY47R.js +110 -0
  50. package/dist/campaigns-TUO2Q3KY.js +76 -0
  51. package/dist/canvas-35RT76HI.js +46 -0
  52. package/dist/canvas-35RT76HI.js.map +1 -0
  53. package/dist/capabilities-IT3U6F2M.js +144 -0
  54. package/dist/cards-JSVWNMHT.js +85 -0
  55. package/dist/catalog-2PCXGJGR.js +65 -0
  56. package/dist/catalogs-7WNGKUTF.js +128 -0
  57. package/dist/changes-EWN2P6S4.js +135 -0
  58. package/dist/chatgpt-UDAIH7QY.js +47 -0
  59. package/dist/chats-KL2GH666.js +262 -0
  60. package/dist/chunk-2AFIXLB2.js +96 -0
  61. package/dist/chunk-34HEETBK.js +382 -0
  62. package/dist/chunk-3J62OINP.js +310 -0
  63. package/dist/chunk-4L3IZCFL.js +830 -0
  64. package/dist/chunk-4LDMAYGM.js +55 -0
  65. package/dist/chunk-5DBZDAY3.js +207 -0
  66. package/dist/chunk-5EEWYHOR.js +28 -0
  67. package/dist/chunk-5GRB5QUI.js +46 -0
  68. package/dist/chunk-5HWY4R7Y.js +6667 -0
  69. package/dist/chunk-5HWY4R7Y.js.map +1 -0
  70. package/dist/chunk-5QD2THAH.js +67 -0
  71. package/dist/chunk-65D4T7N7.js +188 -0
  72. package/dist/chunk-6QGUMZSJ.js +31 -0
  73. package/dist/chunk-6RPA3YQB.js +66 -0
  74. package/dist/chunk-7WULQUTE.js +346 -0
  75. package/dist/chunk-7ZZ7AHVM.js +111 -0
  76. package/dist/chunk-AE3Q6E3R.js +133 -0
  77. package/dist/chunk-B65HDBBU.js +297 -0
  78. package/dist/chunk-B6KFPCGF.js +75 -0
  79. package/dist/chunk-BNMRSDKY.js +174 -0
  80. package/dist/chunk-BW4ZFBYI.js +1441 -0
  81. package/dist/chunk-BWKTZPBQ.js +191 -0
  82. package/dist/chunk-C7EABFTU.js +42 -0
  83. package/dist/chunk-CAMX6OHF.js +3182 -0
  84. package/dist/chunk-CAMX6OHF.js.map +1 -0
  85. package/dist/chunk-CRX5XO4W.js +296 -0
  86. package/dist/chunk-CZQSIGYU.js +84 -0
  87. package/dist/chunk-D2XZUIPA.js +26 -0
  88. package/dist/chunk-DARR7VGA.js +51 -0
  89. package/dist/chunk-DIJBHIII.js +1711 -0
  90. package/dist/chunk-DMEGESTD.js +76 -0
  91. package/dist/chunk-E7XNUDS5.js +172 -0
  92. package/dist/chunk-EA5DXYCF.js +304 -0
  93. package/dist/chunk-EARZMCDM.js +440 -0
  94. package/dist/chunk-EDU6N5NY.js +57 -0
  95. package/dist/chunk-ERVDEVLC.js +4383 -0
  96. package/dist/chunk-ERVDEVLC.js.map +1 -0
  97. package/dist/chunk-ESBAGB53.js +103 -0
  98. package/dist/chunk-FMMXUEDL.js +610 -0
  99. package/dist/chunk-FSLFQHWG.js +172 -0
  100. package/dist/chunk-FUQOBYFX.js +225 -0
  101. package/dist/chunk-FVQYZCJY.js +337 -0
  102. package/dist/chunk-HVXY4XHT.js +541 -0
  103. package/dist/chunk-IARJS3IB.js +74 -0
  104. package/dist/chunk-IDYAVGCS.js +6291 -0
  105. package/dist/chunk-IDYAVGCS.js.map +1 -0
  106. package/dist/chunk-IFD5LJWU.js +136 -0
  107. package/dist/chunk-ILBL7RHT.js +275 -0
  108. package/dist/chunk-ILBL7RHT.js.map +1 -0
  109. package/dist/chunk-IRNEFZUU.js +363 -0
  110. package/dist/chunk-ITQWQINC.js +206 -0
  111. package/dist/chunk-JIKXDLUC.js +175 -0
  112. package/dist/chunk-K3SS7PNM.js +819 -0
  113. package/dist/chunk-KAY5TRAH.js +139 -0
  114. package/dist/chunk-KYN5OIXU.js +98 -0
  115. package/dist/chunk-LHCOWIGI.js +23992 -0
  116. package/dist/chunk-LHCOWIGI.js.map +1 -0
  117. package/dist/chunk-LSEYIZ5K.js +56 -0
  118. package/dist/chunk-MCM3HMNZ.js +215 -0
  119. package/dist/chunk-MCM3HMNZ.js.map +1 -0
  120. package/dist/chunk-NDQTB6OU.js +20 -0
  121. package/dist/chunk-NDQTB6OU.js.map +1 -0
  122. package/dist/chunk-O2THKWAY.js +98 -0
  123. package/dist/chunk-O4HREVZO.js +509 -0
  124. package/dist/chunk-OOAOUO4Q.js +455 -0
  125. package/dist/chunk-OTDNDPWZ.js +19 -0
  126. package/dist/chunk-P5T7OZKV.js +26 -0
  127. package/dist/chunk-PCKVSSVT.js +214 -0
  128. package/dist/chunk-PQ7YMQ2U.js +486 -0
  129. package/dist/chunk-Q3RKWCVL.js +23 -0
  130. package/dist/chunk-QCPZVAKJ.js +106 -0
  131. package/dist/chunk-QPZNLG7Y.js +96 -0
  132. package/dist/chunk-QSQGGONQ.js +94 -0
  133. package/dist/chunk-QTXJHQSI.js +60 -0
  134. package/dist/chunk-QW53AQYB.js +274 -0
  135. package/dist/chunk-RAVSEXEL.js +125 -0
  136. package/dist/chunk-RH6LHGRM.js +622 -0
  137. package/dist/chunk-S5RZPWJJ.js +3147 -0
  138. package/dist/chunk-S5RZPWJJ.js.map +1 -0
  139. package/dist/chunk-SDVJFN5Q.js +5189 -0
  140. package/dist/chunk-SGFJ4VXB.js +97 -0
  141. package/dist/chunk-SJFI2VEQ.js +92 -0
  142. package/dist/chunk-SZ2LLYSO.js +141 -0
  143. package/dist/chunk-SZ2LLYSO.js.map +1 -0
  144. package/dist/chunk-UBEBUUTQ.js +159 -0
  145. package/dist/chunk-UMT4Z3PT.js +160 -0
  146. package/dist/chunk-UOFHTLPD.js +433 -0
  147. package/dist/chunk-UW36KPPH.js +454 -0
  148. package/dist/chunk-UW36KPPH.js.map +1 -0
  149. package/dist/chunk-V4YMBLWX.js +1079 -0
  150. package/dist/chunk-V4YMBLWX.js.map +1 -0
  151. package/dist/chunk-VSA63D2N.js +136 -0
  152. package/dist/chunk-VVS5TLDG.js +333 -0
  153. package/dist/chunk-W4FBKS72.js +494 -0
  154. package/dist/chunk-XFGAUP5B.js +76 -0
  155. package/dist/chunk-XNLCAM4S.js +534 -0
  156. package/dist/chunk-XNMSJP2X.js +309 -0
  157. package/dist/chunk-XR7TMGYY.js +1830 -0
  158. package/dist/chunk-XUOZ6VAL.js +496 -0
  159. package/dist/chunk-YFVLKU4A.js +197 -0
  160. package/dist/chunk-YI4644DL.js +25 -0
  161. package/dist/chunk-YJKJW7DR.js +58 -0
  162. package/dist/chunk-YSW3BBNR.js +166 -0
  163. package/dist/chunk-YUNATR3I.js +74 -0
  164. package/dist/chunk-Z5YZTHKW.js +592 -0
  165. package/dist/chunk-Z6JUXGJ3.js +84 -0
  166. package/dist/chunk-ZC3NWFUK.js +169 -0
  167. package/dist/chunk-ZLZWMWB7.js +106 -0
  168. package/dist/claim-ISW656WA.js +197 -0
  169. package/dist/cli.js +35 -34
  170. package/dist/cli.js.map +1 -1
  171. package/dist/client-BNOZZLGA.js +19 -0
  172. package/dist/code-NT75YZHM.js +76 -0
  173. package/dist/companies-VMMYMGBF.js +195 -0
  174. package/dist/complete-AODPD4CH.js +81 -0
  175. package/dist/config-RHWFL6FM.js +88 -0
  176. package/dist/connect-Y2I3AV5Z.js +42 -0
  177. package/dist/content-2SVLCO7B.js +81 -0
  178. package/dist/conversation-YSYKTMLB.js +93 -0
  179. package/dist/conversion-report-WEW6RNDA.js +125 -0
  180. package/dist/conversion-upload-command-KLPIIBFE.js +438 -0
  181. package/dist/conversion-writes-2Z3ACFUD.js +120 -0
  182. package/dist/conversions-EX7BSSKG.js +135 -0
  183. package/dist/conversions-GNXBFAB6.js +76 -0
  184. package/dist/countries-EGWRXMAX.js +82 -0
  185. package/dist/create-EUXRRR2M.js +130 -0
  186. package/dist/create-OT6ZNVXP.js +207 -0
  187. package/dist/create-RIL7BAAG.js +235 -0
  188. package/dist/create-TGUCKYYQ.js +59 -0
  189. package/dist/creatives-CKZJ6NXP.js +87 -0
  190. package/dist/creatives-ED7ES72F.js +51 -0
  191. package/dist/creatives-HO6CM3HB.js +182 -0
  192. package/dist/credentials-T6AVK7BE.js +1055 -0
  193. package/dist/credentials-T6AVK7BE.js.map +1 -0
  194. package/dist/critique-7W7OYROK.js +1449 -0
  195. package/dist/critique-FHD32QR2.js +213 -0
  196. package/dist/crm-A7PLCRES.js +224 -0
  197. package/dist/crm-JBQUHCWQ.js +318 -0
  198. package/dist/crop-VHSEIFDS.js +113 -0
  199. package/dist/currency-NF2FU3CC.js +88 -0
  200. package/dist/custom-conversions-7U726B5N.js +125 -0
  201. package/dist/customers-2ZNAE3XD.js +56 -0
  202. package/dist/decide-HIVTPT5G.js +204 -0
  203. package/dist/decide-HIVTPT5G.js.map +1 -0
  204. package/dist/delete-7QGELVP7.js +69 -0
  205. package/dist/delete-FWK5IEB3.js +71 -0
  206. package/dist/delete-GGAYVQCP.js +71 -0
  207. package/dist/delete-KO3PCION.js +54 -0
  208. package/dist/delete-M2K5AWGM.js +66 -0
  209. package/dist/delete-YOJZBQV3.js +63 -0
  210. package/dist/demographics-BRUMJFVE.js +138 -0
  211. package/dist/describe-AMZJUZC2.js +97 -0
  212. package/dist/describe-X2AGFNQV.js +97 -0
  213. package/dist/dimensions-S4TU2CRM.js +101 -0
  214. package/dist/discard-5SAMGVIJ.js +66 -0
  215. package/dist/discover-KBRWN46M.js +172 -0
  216. package/dist/domain-CZEVXW44.js +98 -0
  217. package/dist/download-PQHC35HZ.js +299 -0
  218. package/dist/draft-3QBNYCLN.js +100 -0
  219. package/dist/draft-BT5ROZHA.js +233 -0
  220. package/dist/draft-CQFIWAI4.js +103 -0
  221. package/dist/draft-WJTBY4G5.js +217 -0
  222. package/dist/draft-XCUSRRIJ.js +328 -0
  223. package/dist/draft-XTIQKIGE.js +306 -0
  224. package/dist/draft-Y54L37PP.js +281 -0
  225. package/dist/draft-YEKM5KO2.js +107 -0
  226. package/dist/engine/index.js +13 -13
  227. package/dist/env-XRUPKGOS.js +43 -0
  228. package/dist/experiment-NUPKG3KS.js +1377 -0
  229. package/dist/export-UIJHWCH7.js +168 -0
  230. package/dist/extract-Q7JADPFT.js +113 -0
  231. package/dist/facets-HOFSG5J5.js +114 -0
  232. package/dist/favorites-4B45JSTO.js +178 -0
  233. package/dist/feed-LWG4ES53.js +157 -0
  234. package/dist/feedback-BU6DY5QF.js +66 -0
  235. package/dist/feedback-record-M6CWGNW2.js +175 -0
  236. package/dist/fetch-AQRP3LVM.js +176 -0
  237. package/dist/fetch-U5RT2UTZ.js +139 -0
  238. package/dist/find-LXEB42QE.js +134 -0
  239. package/dist/fit-RLJDK3MJ.js +45 -0
  240. package/dist/flows-IXPBLJ5E.js +247 -0
  241. package/dist/follow-KYCYT2NK.js +82 -0
  242. package/dist/follow-competitors-ZNK4UOQU.js +131 -0
  243. package/dist/following-KCGR4Q75.js +109 -0
  244. package/dist/fonts-YFVT63KS.js +34 -0
  245. package/dist/forecast-I26P25FD.js +104 -0
  246. package/dist/funding-IIKMIHNO.js +85 -0
  247. package/dist/funnel-MQ2QSCXI.js +837 -0
  248. package/dist/funnel-MQ2QSCXI.js.map +1 -0
  249. package/dist/ga4-JYOR334L.js +55 -0
  250. package/dist/generate-EO6M7ELE.js +262 -0
  251. package/dist/get-344XATNV.js +56 -0
  252. package/dist/get-44PLK3ST.js +78 -0
  253. package/dist/get-ETRXKZD2.js +63 -0
  254. package/dist/get-IOGKAJO3.js +92 -0
  255. package/dist/get-P6LWZNIO.js +63 -0
  256. package/dist/get-ZAAD2UDM.js +59 -0
  257. package/dist/get-ZELEFTHV.js +61 -0
  258. package/dist/gif-2QSZZ7ZI.js +94 -0
  259. package/dist/google-LA42DKVM.js +1872 -0
  260. package/dist/google-T7OTO7EZ.js +136 -0
  261. package/dist/google-ads-4NQD2UZA.js +195 -0
  262. package/dist/group-3ESILU6L.js +43 -0
  263. package/dist/group-XNALPNXP.js +43 -0
  264. package/dist/gsc-TD33QG2D.js +30 -0
  265. package/dist/history-HCH26IOQ.js +67 -0
  266. package/dist/history-UDQOSO7E.js +133 -0
  267. package/dist/hubspot-MDZZPW4H.js +779 -0
  268. package/dist/icon-KSVSTMTA.js +137 -0
  269. package/dist/ideas-2VNE6IYF.js +32 -0
  270. package/dist/images-QTIIQOXK.js +90 -0
  271. package/dist/improve-HTJ6A7IL.js +86 -0
  272. package/dist/ingest-2SE7CH6U.js +107 -0
  273. package/dist/ingest-Y3C6CH7L.js +23 -0
  274. package/dist/insights-EKN46CXG.js +122 -0
  275. package/dist/insights-NI3HRT4O.js +423 -0
  276. package/dist/inspect-53E7NEBK.js +189 -0
  277. package/dist/inspiration-EX6UV2LZ.js +53 -0
  278. package/dist/intent-RM42YHRD.js +95 -0
  279. package/dist/job-YXFA4UYV.js +202 -0
  280. package/dist/job-create-OIC733SD.js +109 -0
  281. package/dist/job-status-K5SQTOXG.js +74 -0
  282. package/dist/keep-DMS273WJ.js +78 -0
  283. package/dist/keyword-gap-P3BHIOM6.js +130 -0
  284. package/dist/keyword-metrics-LK6OFJEP.js +197 -0
  285. package/dist/keywords-for-site-5BH4POVL.js +128 -0
  286. package/dist/landing-L6JJMOO2.js +28 -0
  287. package/dist/languages-OOIWLDQL.js +40 -0
  288. package/dist/languages-ZDXMFCYA.js +55 -0
  289. package/dist/layerize-FFHYHOTJ.js +190 -0
  290. package/dist/leads-6OZFFNI7.js +293 -0
  291. package/dist/leads-JNQWEI5W.js +90 -0
  292. package/dist/learn-IWVCOQS5.js +203 -0
  293. package/dist/library-3BT6LOX6.js +109 -0
  294. package/dist/lighthouse-OHDSS52L.js +75 -0
  295. package/dist/line-item-writes-EWEXCS5G.js +208 -0
  296. package/dist/line-items-MKUPHVZO.js +103 -0
  297. package/dist/link-EL4YH33K.js +64 -0
  298. package/dist/linkedin-MOMJDDEV.js +1008 -0
  299. package/dist/list-2KLD6BIX.js +76 -0
  300. package/dist/list-3SAEFSKF.js +303 -0
  301. package/dist/list-ASFE2LDI.js +50 -0
  302. package/dist/list-CC3JYNAS.js +63 -0
  303. package/dist/list-CPW5FSK5.js +57 -0
  304. package/dist/list-EAINFLTT.js +151 -0
  305. package/dist/list-SUKMTIFM.js +51 -0
  306. package/dist/list-VWYUWMV2.js +65 -0
  307. package/dist/locations-F6AAOSLI.js +67 -0
  308. package/dist/locations-KZVEW7J6.js +40 -0
  309. package/dist/log-NYUNVNFS.js +92 -0
  310. package/dist/logo-JUQJUHN2.js +18 -0
  311. package/dist/lookup-ZEFRWV2U.js +22 -0
  312. package/dist/make-QY47MH47.js +593 -0
  313. package/dist/make-QY47MH47.js.map +1 -0
  314. package/dist/map-CWEEPZ2W.js +404 -0
  315. package/dist/map-CWEEPZ2W.js.map +1 -0
  316. package/dist/mcp-ODBWLJ2K.js +476 -0
  317. package/dist/media-KD3BLQZO.js +15 -0
  318. package/dist/media-P7U5M4RS.js +89 -0
  319. package/dist/media-sources-VJKKZOEO.js +32 -0
  320. package/dist/members-CN62S46M.js +44 -0
  321. package/dist/meta-NJTTWKGW.js +69 -0
  322. package/dist/metrics-3JRK2F5K.js +152 -0
  323. package/dist/models-3Z6MDHQW.js +155 -0
  324. package/dist/normalize-EJPZ6OSV.js +806 -0
  325. package/dist/normalize-L2YLADVY.js +141 -0
  326. package/dist/options-4E7HRXDT.js +121 -0
  327. package/dist/output-5NZNSC3O.js +24 -0
  328. package/dist/page-YWEDNDHD.js +105 -0
  329. package/dist/pages-WHX335W4.js +66 -0
  330. package/dist/performance-GUKG5TIN.js +24 -0
  331. package/dist/pinterest-BRDL2KLT.js +96 -0
  332. package/dist/pixels-3LBWIFAX.js +108 -0
  333. package/dist/pixels-CUTHLKU7.js +60 -0
  334. package/dist/preview-PNCYU3AK.js +169 -0
  335. package/dist/promoted-tweet-writes-4FSH2DJI.js +180 -0
  336. package/dist/promoted-tweets-U34XJO2F.js +119 -0
  337. package/dist/properties-HSFPVQS5.js +101 -0
  338. package/dist/publish-LIDGOWAY.js +322 -0
  339. package/dist/query-3YAOEQVH.js +1341 -0
  340. package/dist/query-GBQF5CI4.js +247 -0
  341. package/dist/query-RZNLSJZE.js +236 -0
  342. package/dist/read-TH7KVFRW.js +140 -0
  343. package/dist/read-TH7KVFRW.js.map +1 -0
  344. package/dist/reddit-7VZUTFLR.js +26 -0
  345. package/dist/refresh-GINEAS2M.js +94 -0
  346. package/dist/release-S5SW35Q6.js +60 -0
  347. package/dist/relevant-pages-OML2QKYB.js +99 -0
  348. package/dist/remove-2453OBHV.js +48 -0
  349. package/dist/remove-CFL37X6A.js +50 -0
  350. package/dist/reopen-4PJZSLEW.js +63 -0
  351. package/dist/rerun-34U26US4.js +85 -0
  352. package/dist/research-OD4645BP.js +62 -0
  353. package/dist/research-OWVVDV23.js +262 -0
  354. package/dist/reset-7QJ5W7TB.js +54 -0
  355. package/dist/reset-RXPYH3YY.js +54 -0
  356. package/dist/resolve-JJXXGSC7.js +121 -0
  357. package/dist/retry-MVTQJ5X4.js +62 -0
  358. package/dist/retry-PRPZHGTY.js +60 -0
  359. package/dist/retry-failed-NPAQ3FLC.js +45 -0
  360. package/dist/run-FT3Z525N.js +60 -0
  361. package/dist/run-JXCOCQGL.js +65 -0
  362. package/dist/scaffold-ad-V2ISBE7J.js +1549 -0
  363. package/dist/scaffold-static-ad-EOMITDJ4.js +966 -0
  364. package/dist/scaffold-static-ad-EOMITDJ4.js.map +1 -0
  365. package/dist/scaffold-video-QBWCDUPX.js +873 -0
  366. package/dist/schedule-PBU6YW7M.js +66 -0
  367. package/dist/schedule-PWDP5KDO.js +61 -0
  368. package/dist/scheduled-agents-5LL2SKH4.js +49 -0
  369. package/dist/schema-5QUV5GNS.js +132 -0
  370. package/dist/scrape-3KXWYD6G.js +2241 -0
  371. package/dist/screenshot-GQLSIFZM.js +102 -0
  372. package/dist/search-ESWPECSE.js +92 -0
  373. package/dist/search-KAADJZP6.js +224 -0
  374. package/dist/search-LOWGEYYA.js +26 -0
  375. package/dist/search-TKWNJIW3.js +174 -0
  376. package/dist/search-TL3FSB4K.js +91 -0
  377. package/dist/seeds-OXKHZSF7.js +101 -0
  378. package/dist/select-XKOZHYDU.js +94 -0
  379. package/dist/sends-DBJJS6CF.js +309 -0
  380. package/dist/sequences-AULXZXNG.js +146 -0
  381. package/dist/set-prompt-5DDSFV2T.js +186 -0
  382. package/dist/setup-links-FQ6UEVEZ.js +141 -0
  383. package/dist/shared-CBVZOAC6.js +31 -0
  384. package/dist/site-PMQXZYF5.js +177 -0
  385. package/dist/sitemaps-Q5OL766P.js +87 -0
  386. package/dist/sites-LBB7FYB7.js +101 -0
  387. package/dist/skills-AFGQPAJM.js +47 -0
  388. package/dist/sources-D525IRPK.js +421 -0
  389. package/dist/sources-FGNVY6LF.js +30 -0
  390. package/dist/stale-7GH2DXNR.js +63 -0
  391. package/dist/stats-TBSQYXYQ.js +34 -0
  392. package/dist/status-Y22TTH2D.js +62 -0
  393. package/dist/sticker-FWUSN6JM.js +94 -0
  394. package/dist/stock-YDKCFK2T.js +179 -0
  395. package/dist/studio-F73JWPSU.js +49 -0
  396. package/dist/sync-F4PVZ7CW.js +54 -0
  397. package/dist/sync-HTZY6NTC.js +265 -0
  398. package/dist/sync-X2FS4M77.js +54 -0
  399. package/dist/sync-definition-2LDSD7NA.js +53 -0
  400. package/dist/tag-manager-PA7WVPSI.js +43 -0
  401. package/dist/tags-A7REX52N.js +20 -0
  402. package/dist/tags-BWCI5TGE.js +26 -0
  403. package/dist/tags-FDZXGLD6.js +224 -0
  404. package/dist/tags-NJWIDX7V.js +20 -0
  405. package/dist/tags-PLJSEVIZ.js +20 -0
  406. package/dist/targeting-constants-6LYEQCAL.js +118 -0
  407. package/dist/targeting-criteria-ML4VY3TR.js +113 -0
  408. package/dist/targets-QVPB5S2T.js +102 -0
  409. package/dist/templates-OBUK5LJE.js +178 -0
  410. package/dist/testimonials-MJNPCXIB.js +32 -0
  411. package/dist/top-companies-URS3UFIR.js +108 -0
  412. package/dist/translate-UJZHXVJW.js +598 -0
  413. package/dist/triggers-LBHIINAB.js +141 -0
  414. package/dist/tweets-DUZH63HH.js +123 -0
  415. package/dist/unfollow-YCU6FTS7.js +46 -0
  416. package/dist/unlink-ANJYTNU4.js +67 -0
  417. package/dist/unstage-CLWNA4FZ.js +95 -0
  418. package/dist/unstage-X4MLF3ZB.js +84 -0
  419. package/dist/update-2HULG6HK.js +63 -0
  420. package/dist/update-K47MDJKP.js +98 -0
  421. package/dist/update-OBY7RNZV.js +142 -0
  422. package/dist/update-UZ43L5K3.js +155 -0
  423. package/dist/upload-2MGQVTU4.js +150 -0
  424. package/dist/upload-R7F44B4J.js +126 -0
  425. package/dist/upscale-P7B4CAR7.js +109 -0
  426. package/dist/url-options-HH5BLRTO.js +127 -0
  427. package/dist/url-params-MR2RPMOQ.js +98 -0
  428. package/dist/use-USVRQKJC.js +95 -0
  429. package/dist/validate-4AIFDNMQ.js +89 -0
  430. package/dist/variant-UFUGNBV3.js +338 -0
  431. package/dist/videos-K2MGLKWT.js +39 -0
  432. package/dist/view-HMNRFBZM.js +121 -0
  433. package/dist/viewer-check-JRSF6SOO.js +69 -0
  434. package/dist/web-T4625NNK.js +140 -0
  435. package/dist/winners-S75G5IY6.js +79 -0
  436. package/dist/winning-ads-QMR5GOZG.js +62 -0
  437. package/dist/winning-ads-QMR5GOZG.js.map +1 -0
  438. package/dist/write-commands-4TNOL7RI.js +206 -0
  439. package/dist/write-commands-BSZS43RX.js +1015 -0
  440. package/dist/write-commands-FRH4UWLN.js +737 -0
  441. package/dist/write-commands-NVWMNI2Q.js +713 -0
  442. package/dist/x-A7Z42KMP.js +47 -0
  443. package/package.json +1 -1
  444. package/dist/account-F6MHQ64I.js +0 -80
  445. package/dist/account-HS7SDSEB.js +0 -79
  446. package/dist/account-IEVEOFIK.js +0 -49
  447. package/dist/account-writes-ISE4U2FQ.js +0 -66
  448. package/dist/accounts-3JKABIGU.js +0 -77
  449. package/dist/accounts-4CDRK4S4.js +0 -75
  450. package/dist/accounts-5QDKBZMH.js +0 -115
  451. package/dist/accounts-KYJO3JC6.js +0 -114
  452. package/dist/accounts-ZZONEKPU.js +0 -611
  453. package/dist/actions-VKHKHUUC.js +0 -55
  454. package/dist/active-entities-YUSOUR5M.js +0 -103
  455. package/dist/activities-ZVQOBHZH.js +0 -74
  456. package/dist/ad-group-writes-UU5NNKSO.js +0 -170
  457. package/dist/ad-groups-CGFXZNIA.js +0 -68
  458. package/dist/ad-writes-NALDYWOR.js +0 -174
  459. package/dist/add-53DDLTVG.js +0 -104
  460. package/dist/add-577QWMCF.js +0 -97
  461. package/dist/add-ATD4MBOO.js +0 -302
  462. package/dist/add-CUWAW7KG.js +0 -105
  463. package/dist/ads-6UEDYT3O.js +0 -113
  464. package/dist/ads-PV7GZXPR.js +0 -77
  465. package/dist/ads-QFAUJCWM.js +0 -40
  466. package/dist/adsets-Q5DWGANV.js +0 -176
  467. package/dist/advertisers-HYUASJAS.js +0 -120
  468. package/dist/advertisers-YMHPZYNF.js +0 -111
  469. package/dist/analytics-RQROMSQ3.js +0 -433
  470. package/dist/analytics-WLYXY5OT.js +0 -1976
  471. package/dist/analytics-WLYXY5OT.js.map +0 -1
  472. package/dist/animate-FWWHSYPL.js +0 -480
  473. package/dist/assign-7332DMG5.js +0 -77
  474. package/dist/audience-size-UYX5RPTA.js +0 -94
  475. package/dist/audiences-AMRFZRZ7.js +0 -78
  476. package/dist/audiences-HFRVIE2X.js +0 -85
  477. package/dist/audiences-VEKGLWBG.js +0 -268
  478. package/dist/audit-AD4ZZNJN.js +0 -88
  479. package/dist/audit-ZGTG7VRD.js +0 -151
  480. package/dist/autocomplete-LPG4WWTY.js +0 -111
  481. package/dist/avatars-HTQMIA2F.js +0 -38
  482. package/dist/bid-pricing-IK2C2IKE.js +0 -99
  483. package/dist/brand-3WCTQWWX.js +0 -22
  484. package/dist/brief-WDKTAKVA.js +0 -477
  485. package/dist/businesses-JBDQZZIG.js +0 -53
  486. package/dist/campaign-groups-6CJ45XMO.js +0 -95
  487. package/dist/campaign-writes-2MLRVFJK.js +0 -165
  488. package/dist/campaign-writes-SX52CJYW.js +0 -170
  489. package/dist/campaigns-D6B6Z67Y.js +0 -110
  490. package/dist/campaigns-DTH5ADA7.js +0 -107
  491. package/dist/campaigns-X3DPCCSN.js +0 -76
  492. package/dist/campaigns-ZVA7SUNN.js +0 -109
  493. package/dist/canvas-EJLQ27CK.js +0 -46
  494. package/dist/canvas-EJLQ27CK.js.map +0 -1
  495. package/dist/capabilities-VWJGP43K.js +0 -144
  496. package/dist/cards-4477BFEV.js +0 -85
  497. package/dist/catalog-BKQOAVR2.js +0 -65
  498. package/dist/catalogs-G3YEVG6S.js +0 -128
  499. package/dist/changes-TP7ZZHB3.js +0 -135
  500. package/dist/chatgpt-QNUN63YS.js +0 -47
  501. package/dist/chats-JOZKLOFU.js +0 -262
  502. package/dist/chunk-237WE5LX.js +0 -455
  503. package/dist/chunk-237WE5LX.js.map +0 -1
  504. package/dist/chunk-2BKVVCCV.js +0 -133
  505. package/dist/chunk-2TK4DEOE.js +0 -74
  506. package/dist/chunk-35XWJEWH.js +0 -274
  507. package/dist/chunk-3EUFAONS.js +0 -5189
  508. package/dist/chunk-3JCF3NK6.js +0 -57
  509. package/dist/chunk-3XPFBSD7.js +0 -275
  510. package/dist/chunk-3XPFBSD7.js.map +0 -1
  511. package/dist/chunk-4GOS37IA.js +0 -382
  512. package/dist/chunk-4JHUG6Y3.js +0 -172
  513. package/dist/chunk-4NDCTLI5.js +0 -191
  514. package/dist/chunk-4QEY2L6U.js +0 -486
  515. package/dist/chunk-54UVGFX3.js +0 -440
  516. package/dist/chunk-5PKB7LNI.js +0 -23
  517. package/dist/chunk-5RPU6KG5.js +0 -6667
  518. package/dist/chunk-5RPU6KG5.js.map +0 -1
  519. package/dist/chunk-5YGBRHO6.js +0 -96
  520. package/dist/chunk-5Z2KSVIV.js +0 -67
  521. package/dist/chunk-6B7VKFS4.js +0 -172
  522. package/dist/chunk-6G5K6ZC6.js +0 -46
  523. package/dist/chunk-6QJLVNGU.js +0 -541
  524. package/dist/chunk-75FDTDLH.js +0 -96
  525. package/dist/chunk-7OFNN4CT.js +0 -58
  526. package/dist/chunk-7ZHMGXE2.js +0 -819
  527. package/dist/chunk-BBDAVFTG.js +0 -3153
  528. package/dist/chunk-BBDAVFTG.js.map +0 -1
  529. package/dist/chunk-BNCW67EM.js +0 -534
  530. package/dist/chunk-C6U6UDHJ.js +0 -106
  531. package/dist/chunk-CHSNHVYF.js +0 -3182
  532. package/dist/chunk-CHSNHVYF.js.map +0 -1
  533. package/dist/chunk-D76QEIFG.js +0 -207
  534. package/dist/chunk-DGPLXY37.js +0 -103
  535. package/dist/chunk-DTD2IRDA.js +0 -149
  536. package/dist/chunk-DTD2IRDA.js.map +0 -1
  537. package/dist/chunk-DZSIUEGH.js +0 -136
  538. package/dist/chunk-E6KL5ZRN.js +0 -455
  539. package/dist/chunk-EFSYTROP.js +0 -94
  540. package/dist/chunk-EKCPMVZ3.js +0 -175
  541. package/dist/chunk-EUFCY63X.js +0 -6178
  542. package/dist/chunk-EUFCY63X.js.map +0 -1
  543. package/dist/chunk-F2S5BLPE.js +0 -97
  544. package/dist/chunk-F4CUV4FV.js +0 -509
  545. package/dist/chunk-G7HYW5TH.js +0 -304
  546. package/dist/chunk-GX6VAHY7.js +0 -830
  547. package/dist/chunk-H26L3OQY.js +0 -42
  548. package/dist/chunk-HQSCJYZO.js +0 -26
  549. package/dist/chunk-HRYOZUSK.js +0 -1711
  550. package/dist/chunk-HTW7FTP4.js +0 -45
  551. package/dist/chunk-HTW7FTP4.js.map +0 -1
  552. package/dist/chunk-IFWP3ZDO.js +0 -215
  553. package/dist/chunk-IFWP3ZDO.js.map +0 -1
  554. package/dist/chunk-JERXV5A3.js +0 -26
  555. package/dist/chunk-JYWZRDLZ.js +0 -297
  556. package/dist/chunk-K46X77UI.js +0 -51
  557. package/dist/chunk-KFE3S63W.js +0 -1441
  558. package/dist/chunk-KLBTXETO.js +0 -23992
  559. package/dist/chunk-KLBTXETO.js.map +0 -1
  560. package/dist/chunk-KLNKEVIY.js +0 -136
  561. package/dist/chunk-KNY76UGC.js +0 -84
  562. package/dist/chunk-KQTYTCKQ.js +0 -98
  563. package/dist/chunk-KRZV6VS2.js +0 -19
  564. package/dist/chunk-KS2QY6MK.js +0 -139
  565. package/dist/chunk-L27H2R2N.js +0 -174
  566. package/dist/chunk-LERTEZST.js +0 -28
  567. package/dist/chunk-LF2PIA67.js +0 -159
  568. package/dist/chunk-LLOOWRBB.js +0 -496
  569. package/dist/chunk-LS5MTRFI.js +0 -106
  570. package/dist/chunk-LYBXCXJB.js +0 -160
  571. package/dist/chunk-M4G3NKDB.js +0 -197
  572. package/dist/chunk-MM22NUA6.js +0 -169
  573. package/dist/chunk-MM5XO4MP.js +0 -433
  574. package/dist/chunk-MZ3SJ6FV.js +0 -310
  575. package/dist/chunk-MZL4H5PY.js +0 -225
  576. package/dist/chunk-NAWWC5I3.js +0 -454
  577. package/dist/chunk-NAWWC5I3.js.map +0 -1
  578. package/dist/chunk-PBA3YCZA.js +0 -76
  579. package/dist/chunk-PROV2XDR.js +0 -592
  580. package/dist/chunk-PWGWMIIJ.js +0 -25
  581. package/dist/chunk-PZ7EPJRF.js +0 -60
  582. package/dist/chunk-QSN5MZGS.js +0 -74
  583. package/dist/chunk-QZOS6FXW.js +0 -206
  584. package/dist/chunk-RNDPEHCH.js +0 -337
  585. package/dist/chunk-RX6F3GEA.js +0 -610
  586. package/dist/chunk-STIB5DR5.js +0 -56
  587. package/dist/chunk-T4DD5YMP.js +0 -166
  588. package/dist/chunk-TD2P4HBP.js +0 -55
  589. package/dist/chunk-TJFELVYS.js +0 -92
  590. package/dist/chunk-ULJ5RFOV.js +0 -76
  591. package/dist/chunk-VAJBWA2U.js +0 -75
  592. package/dist/chunk-VB6WJJR3.js +0 -1830
  593. package/dist/chunk-VFIOJD5M.js +0 -309
  594. package/dist/chunk-VVZBBKRC.js +0 -296
  595. package/dist/chunk-W3B4BHQU.js +0 -31
  596. package/dist/chunk-WNFIJAUO.js +0 -98
  597. package/dist/chunk-WTOYCUKH.js +0 -84
  598. package/dist/chunk-XBOK23HI.js +0 -214
  599. package/dist/chunk-XL3BMSYG.js +0 -125
  600. package/dist/chunk-XX53CHKP.js +0 -346
  601. package/dist/chunk-XXHMVDLL.js +0 -1079
  602. package/dist/chunk-XXHMVDLL.js.map +0 -1
  603. package/dist/chunk-YBMVHGY3.js +0 -333
  604. package/dist/chunk-YIWXHIVZ.js +0 -111
  605. package/dist/chunk-YKFEHWHC.js +0 -188
  606. package/dist/chunk-YTNJODFK.js +0 -494
  607. package/dist/chunk-Z6XEMPOZ.js +0 -363
  608. package/dist/chunk-ZIHEIVJC.js +0 -4410
  609. package/dist/chunk-ZIHEIVJC.js.map +0 -1
  610. package/dist/chunk-ZWKPXWS5.js +0 -622
  611. package/dist/chunk-ZZQXVYUY.js +0 -66
  612. package/dist/claim-ITPOQ2I7.js +0 -197
  613. package/dist/client-VHN32ZRE.js +0 -19
  614. package/dist/code-YS6ZMGX3.js +0 -76
  615. package/dist/companies-Y5HPLJF5.js +0 -195
  616. package/dist/complete-SRXMUS4R.js +0 -81
  617. package/dist/config-CQN5FHMZ.js +0 -88
  618. package/dist/connect-CRHMP3NK.js +0 -42
  619. package/dist/content-3ZPP4SW2.js +0 -81
  620. package/dist/conversation-BBOPGOMH.js +0 -93
  621. package/dist/conversion-report-N4HANYOB.js +0 -125
  622. package/dist/conversion-upload-command-AUF3LNTH.js +0 -438
  623. package/dist/conversion-writes-LW4HQKK5.js +0 -120
  624. package/dist/conversions-DH3Q6UTJ.js +0 -135
  625. package/dist/conversions-TS723AZV.js +0 -76
  626. package/dist/countries-ESAKTQAE.js +0 -82
  627. package/dist/create-CW5E5Y2S.js +0 -59
  628. package/dist/create-HOIUANHB.js +0 -207
  629. package/dist/create-M7TK4QUC.js +0 -235
  630. package/dist/create-ZWSKHSPD.js +0 -130
  631. package/dist/creatives-LLWNKS47.js +0 -51
  632. package/dist/creatives-QQZNCA6V.js +0 -182
  633. package/dist/creatives-UEPLNCPN.js +0 -87
  634. package/dist/credentials-CFKCUDES.js +0 -1055
  635. package/dist/credentials-CFKCUDES.js.map +0 -1
  636. package/dist/critique-AQDXRULE.js +0 -213
  637. package/dist/critique-ORSUUTHE.js +0 -1449
  638. package/dist/crm-EPSZEOD2.js +0 -318
  639. package/dist/crm-WNFEWAAM.js +0 -224
  640. package/dist/crop-2J4RKJ6B.js +0 -113
  641. package/dist/currency-XCGKQ7FE.js +0 -88
  642. package/dist/custom-conversions-2VLJGPRV.js +0 -125
  643. package/dist/customers-NZDE7V3P.js +0 -56
  644. package/dist/delete-3AV3ARMX.js +0 -71
  645. package/dist/delete-6RAKC62Z.js +0 -66
  646. package/dist/delete-7HMQBDFC.js +0 -54
  647. package/dist/delete-A5XD52K4.js +0 -69
  648. package/dist/delete-FKXR5ZOP.js +0 -63
  649. package/dist/delete-MRM2S4Z5.js +0 -71
  650. package/dist/demographics-PRZS2ZC4.js +0 -138
  651. package/dist/describe-6NVOWIBE.js +0 -97
  652. package/dist/describe-P3PPIQME.js +0 -97
  653. package/dist/dimensions-EYAYO27I.js +0 -101
  654. package/dist/discard-YLTMCFE6.js +0 -66
  655. package/dist/discover-BJPZNXUQ.js +0 -172
  656. package/dist/domain-Z533IR5M.js +0 -98
  657. package/dist/download-7T6HIJKD.js +0 -299
  658. package/dist/draft-3ZVCQSAG.js +0 -103
  659. package/dist/draft-4PURIMDM.js +0 -217
  660. package/dist/draft-5YAYCEYY.js +0 -107
  661. package/dist/draft-7ZWPABVG.js +0 -306
  662. package/dist/draft-KIBMVKSR.js +0 -100
  663. package/dist/draft-THPZFASM.js +0 -281
  664. package/dist/draft-YDY2Q2K6.js +0 -233
  665. package/dist/draft-ZXZEQRCL.js +0 -328
  666. package/dist/env-KIP2J2UB.js +0 -43
  667. package/dist/experiment-LKK77YAN.js +0 -1377
  668. package/dist/export-JQRMBJ7D.js +0 -168
  669. package/dist/extract-7QKLME7Z.js +0 -113
  670. package/dist/facets-453OFMAM.js +0 -114
  671. package/dist/favorites-NSGF4OV5.js +0 -178
  672. package/dist/feed-RV4KPPXM.js +0 -157
  673. package/dist/feedback-JFV6BMJW.js +0 -66
  674. package/dist/feedback-record-HCOBRTY2.js +0 -175
  675. package/dist/fetch-44PPB6UO.js +0 -176
  676. package/dist/fetch-XF76JABV.js +0 -139
  677. package/dist/find-FRRHAPWX.js +0 -134
  678. package/dist/fit-7237F5EB.js +0 -45
  679. package/dist/flows-N7UZ4ZO5.js +0 -247
  680. package/dist/follow-FN7LV3WV.js +0 -82
  681. package/dist/follow-competitors-MKXFHLXB.js +0 -131
  682. package/dist/following-RKC2FLHI.js +0 -109
  683. package/dist/fonts-YW7SU5EY.js +0 -34
  684. package/dist/forecast-W57WFVDL.js +0 -104
  685. package/dist/funding-NYO65IMT.js +0 -85
  686. package/dist/funnel-VW542JTE.js +0 -394
  687. package/dist/funnel-VW542JTE.js.map +0 -1
  688. package/dist/ga4-DV2AXCSL.js +0 -55
  689. package/dist/generate-MMBYB44G.js +0 -262
  690. package/dist/get-2NA3LPCN.js +0 -78
  691. package/dist/get-3L6W3E3T.js +0 -59
  692. package/dist/get-6WEYKOY6.js +0 -63
  693. package/dist/get-MEGPYKQR.js +0 -56
  694. package/dist/get-P743RPSI.js +0 -63
  695. package/dist/get-XN5ZGDIK.js +0 -61
  696. package/dist/get-YIHTAMRT.js +0 -92
  697. package/dist/gif-53ULFVLR.js +0 -94
  698. package/dist/google-M7KEXVK5.js +0 -1872
  699. package/dist/google-QYYYSSXI.js +0 -136
  700. package/dist/google-ads-G2XD4RMT.js +0 -195
  701. package/dist/group-EFZ3AJIE.js +0 -43
  702. package/dist/group-GKWCCX66.js +0 -43
  703. package/dist/gsc-TAKOF7J5.js +0 -30
  704. package/dist/history-DBIEYQHY.js +0 -67
  705. package/dist/history-RCKMMUWI.js +0 -133
  706. package/dist/hubspot-CKS7F77W.js +0 -779
  707. package/dist/icon-L4RSS6PZ.js +0 -137
  708. package/dist/ideas-EYC6K33G.js +0 -32
  709. package/dist/images-2HJ7YKTH.js +0 -90
  710. package/dist/improve-BCCU5AS6.js +0 -86
  711. package/dist/ingest-26O5Q462.js +0 -23
  712. package/dist/ingest-RR5GAX3G.js +0 -107
  713. package/dist/insights-NZWSJKU4.js +0 -423
  714. package/dist/insights-ZIU6FJMS.js +0 -122
  715. package/dist/inspect-XPDUPSUP.js +0 -189
  716. package/dist/inspiration-S3DU4CMQ.js +0 -53
  717. package/dist/intent-E3UIVZBN.js +0 -95
  718. package/dist/job-L7RJZMSG.js +0 -202
  719. package/dist/job-create-JUDAN52O.js +0 -109
  720. package/dist/job-status-U43WE3RJ.js +0 -74
  721. package/dist/keep-55CPC7DG.js +0 -78
  722. package/dist/keyword-gap-BG6M665A.js +0 -130
  723. package/dist/keyword-metrics-KOPXTILA.js +0 -197
  724. package/dist/keywords-for-site-PONNELI5.js +0 -128
  725. package/dist/landing-RYRZ5VZ2.js +0 -28
  726. package/dist/languages-HORKPDNH.js +0 -40
  727. package/dist/languages-JSGWCC7Z.js +0 -55
  728. package/dist/layerize-RPD6SNP6.js +0 -190
  729. package/dist/leads-ARUWPHBM.js +0 -293
  730. package/dist/leads-R7YSJDIG.js +0 -90
  731. package/dist/learn-IZ6QKTCX.js +0 -203
  732. package/dist/library-ARKRLCNJ.js +0 -109
  733. package/dist/lighthouse-6ZC45E53.js +0 -75
  734. package/dist/line-item-writes-25FE22UX.js +0 -208
  735. package/dist/line-items-V522VKSU.js +0 -103
  736. package/dist/link-ZZZVDSUP.js +0 -64
  737. package/dist/linkedin-HXLYJVGI.js +0 -1008
  738. package/dist/list-7MVBXOJT.js +0 -51
  739. package/dist/list-A5UCIR2J.js +0 -65
  740. package/dist/list-AL7N6X2P.js +0 -50
  741. package/dist/list-HSXOTG5R.js +0 -151
  742. package/dist/list-KYEK3N34.js +0 -303
  743. package/dist/list-LI4OGQFW.js +0 -57
  744. package/dist/list-LKHHCQZU.js +0 -63
  745. package/dist/list-P7NAFN6J.js +0 -76
  746. package/dist/locations-74TPQWAT.js +0 -67
  747. package/dist/locations-J4G5RNPH.js +0 -40
  748. package/dist/log-6ELXS5EJ.js +0 -92
  749. package/dist/logo-Q5D7PZY6.js +0 -18
  750. package/dist/lookup-TCU2ZEZW.js +0 -22
  751. package/dist/make-2PV4B2TT.js +0 -596
  752. package/dist/make-2PV4B2TT.js.map +0 -1
  753. package/dist/map-SJLRAB5X.js +0 -404
  754. package/dist/map-SJLRAB5X.js.map +0 -1
  755. package/dist/mcp-W7DBSUF7.js +0 -476
  756. package/dist/media-53DJRC4N.js +0 -15
  757. package/dist/media-6CQYG4UY.js +0 -89
  758. package/dist/media-sources-M35YZQY5.js +0 -32
  759. package/dist/members-QXYMJQWU.js +0 -44
  760. package/dist/meta-A7KM6TF5.js +0 -69
  761. package/dist/metrics-SQDJ5NQO.js +0 -152
  762. package/dist/models-7U3GRYHF.js +0 -155
  763. package/dist/normalize-DYJLUBQP.js +0 -141
  764. package/dist/normalize-ICQF2AST.js +0 -806
  765. package/dist/options-77SHB5KA.js +0 -121
  766. package/dist/output-RAH3TSIL.js +0 -24
  767. package/dist/page-GS3WLT2C.js +0 -105
  768. package/dist/pages-FXYQLHSJ.js +0 -66
  769. package/dist/performance-VVTYUSTW.js +0 -24
  770. package/dist/pinterest-AUH7WBA7.js +0 -96
  771. package/dist/pixels-45A55MOP.js +0 -60
  772. package/dist/pixels-ZFF4BGUH.js +0 -108
  773. package/dist/plan-4QP2G7GV.js +0 -207
  774. package/dist/plan-4QP2G7GV.js.map +0 -1
  775. package/dist/preview-AD4GKYIA.js +0 -169
  776. package/dist/promoted-tweet-writes-QP37NMQC.js +0 -180
  777. package/dist/promoted-tweets-WPSM6MGX.js +0 -119
  778. package/dist/properties-L2XIYQDS.js +0 -101
  779. package/dist/publish-YF6ESBGQ.js +0 -322
  780. package/dist/query-IEZRY6HV.js +0 -1341
  781. package/dist/query-SGGBCHTF.js +0 -236
  782. package/dist/query-VTGVZQIO.js +0 -247
  783. package/dist/questionnaire-J56AATOX.js +0 -93
  784. package/dist/questionnaire-J56AATOX.js.map +0 -1
  785. package/dist/read-G5AC332V.js +0 -141
  786. package/dist/read-G5AC332V.js.map +0 -1
  787. package/dist/reddit-VC3IOFNC.js +0 -26
  788. package/dist/refresh-UXBCTVCG.js +0 -94
  789. package/dist/release-PP5S5QHD.js +0 -60
  790. package/dist/relevant-pages-OWMNUCP7.js +0 -99
  791. package/dist/remove-6LGGKMLJ.js +0 -48
  792. package/dist/remove-OUWQ7NPN.js +0 -50
  793. package/dist/reopen-KXAM5LVX.js +0 -63
  794. package/dist/rerun-ZVFP4FNN.js +0 -85
  795. package/dist/research-52CURSLR.js +0 -262
  796. package/dist/research-WEW3TISC.js +0 -62
  797. package/dist/reset-MVLV7GEB.js +0 -54
  798. package/dist/reset-RBL2NSDV.js +0 -54
  799. package/dist/resolve-JG3TGLCR.js +0 -121
  800. package/dist/retry-2B3V4CJO.js +0 -60
  801. package/dist/retry-Y3VUKOZ3.js +0 -62
  802. package/dist/retry-failed-6HXPUVXJ.js +0 -45
  803. package/dist/run-3BCAHPCW.js +0 -65
  804. package/dist/run-FZL7FYTL.js +0 -60
  805. package/dist/scaffold-ad-TL5URKZF.js +0 -1549
  806. package/dist/scaffold-static-ad-PN6RR3IP.js +0 -966
  807. package/dist/scaffold-static-ad-PN6RR3IP.js.map +0 -1
  808. package/dist/scaffold-video-LRTELU5X.js +0 -873
  809. package/dist/schedule-7QLWW5HA.js +0 -61
  810. package/dist/schedule-O2K6M43V.js +0 -66
  811. package/dist/scheduled-agents-HDALX27W.js +0 -49
  812. package/dist/schema-EY3Y3KFB.js +0 -132
  813. package/dist/scrape-ETAMW43A.js +0 -2241
  814. package/dist/screenshot-YCQF25ZB.js +0 -102
  815. package/dist/search-4XS7AO5R.js +0 -174
  816. package/dist/search-742XSULP.js +0 -224
  817. package/dist/search-MEEM4D3W.js +0 -92
  818. package/dist/search-OQNGSMUH.js +0 -91
  819. package/dist/search-UO5KJTYS.js +0 -26
  820. package/dist/seeds-N6FF5S4T.js +0 -101
  821. package/dist/select-J3QVFWVE.js +0 -94
  822. package/dist/sends-WGJVQUMF.js +0 -309
  823. package/dist/sequences-OIPVR7JL.js +0 -146
  824. package/dist/set-prompt-MEMSZEZK.js +0 -186
  825. package/dist/setup-links-4PCSBEJD.js +0 -141
  826. package/dist/shared-HJDFNID4.js +0 -31
  827. package/dist/site-IG62FRYT.js +0 -177
  828. package/dist/sitemaps-POPZJTAX.js +0 -87
  829. package/dist/sites-262H6LM4.js +0 -101
  830. package/dist/skills-6TQZLIMP.js +0 -47
  831. package/dist/sources-5YFONIJP.js +0 -30
  832. package/dist/sources-AM7SIZUY.js +0 -421
  833. package/dist/stale-UMI4XCKX.js +0 -63
  834. package/dist/stats-NNXZMPZR.js +0 -34
  835. package/dist/status-F4XMET7U.js +0 -62
  836. package/dist/sticker-4KMBSMP5.js +0 -94
  837. package/dist/stock-KXJ26BY4.js +0 -179
  838. package/dist/studio-EKIPLLHD.js +0 -49
  839. package/dist/sync-CF7FVUQJ.js +0 -54
  840. package/dist/sync-LXYAJ7SU.js +0 -54
  841. package/dist/sync-ZSNUBYPM.js +0 -265
  842. package/dist/sync-definition-WU6V5245.js +0 -53
  843. package/dist/tag-manager-JAAMOUGB.js +0 -43
  844. package/dist/tags-6WV3PQH5.js +0 -20
  845. package/dist/tags-FTOD6CYS.js +0 -20
  846. package/dist/tags-KXNOWUMN.js +0 -224
  847. package/dist/tags-PJRNCPQJ.js +0 -20
  848. package/dist/tags-R5JCZRAV.js +0 -26
  849. package/dist/targeting-constants-XJ2VOW7K.js +0 -118
  850. package/dist/targeting-criteria-HJ7YFAB2.js +0 -113
  851. package/dist/targets-RLZSBUCI.js +0 -102
  852. package/dist/templates-4SWUBLOC.js +0 -178
  853. package/dist/testimonials-YYLALSV4.js +0 -32
  854. package/dist/top-companies-SNOQQFUS.js +0 -108
  855. package/dist/translate-CZRVAEUQ.js +0 -598
  856. package/dist/triggers-MFDFO2Y4.js +0 -141
  857. package/dist/tweets-ATP3FQAC.js +0 -123
  858. package/dist/unfollow-CBVPGPF7.js +0 -46
  859. package/dist/unlink-BVDKP7VQ.js +0 -67
  860. package/dist/unstage-V7GMMOWR.js +0 -95
  861. package/dist/unstage-ZTOQEWRC.js +0 -84
  862. package/dist/update-R46SJ55S.js +0 -155
  863. package/dist/update-R572VWKO.js +0 -142
  864. package/dist/update-SQEWFFFG.js +0 -98
  865. package/dist/update-VVK6SWSI.js +0 -63
  866. package/dist/upload-L5SYZB3X.js +0 -150
  867. package/dist/upload-TUYWMS6E.js +0 -126
  868. package/dist/upscale-YWRLFU22.js +0 -109
  869. package/dist/url-options-GGXAL3J4.js +0 -127
  870. package/dist/url-params-CU3KVLI5.js +0 -98
  871. package/dist/use-UT2DIZOG.js +0 -95
  872. package/dist/validate-WPJXPGWS.js +0 -89
  873. package/dist/variant-FLZJYGYL.js +0 -338
  874. package/dist/videos-KGNLYRUS.js +0 -39
  875. package/dist/view-NPAG66QK.js +0 -121
  876. package/dist/viewer-check-45T2HLAH.js +0 -69
  877. package/dist/web-IEJBIF7U.js +0 -140
  878. package/dist/winners-I5BMATJZ.js +0 -79
  879. package/dist/winning-ads-GGQ3DZXX.js +0 -62
  880. package/dist/winning-ads-GGQ3DZXX.js.map +0 -1
  881. package/dist/write-commands-CT74VHH6.js +0 -737
  882. package/dist/write-commands-CXRXLXX2.js +0 -1015
  883. package/dist/write-commands-VWSLDBPT.js +0 -206
  884. package/dist/write-commands-WTRSOSO3.js +0 -713
  885. package/dist/x-WHE6PSDD.js +0 -47
  886. /package/dist/{account-HS7SDSEB.js.map → account-6P3XK5ZJ.js.map} +0 -0
  887. /package/dist/{account-F6MHQ64I.js.map → account-IVVLUX4B.js.map} +0 -0
  888. /package/dist/{account-IEVEOFIK.js.map → account-VBI3KT3Y.js.map} +0 -0
  889. /package/dist/{account-writes-ISE4U2FQ.js.map → account-writes-TQOVHHB6.js.map} +0 -0
  890. /package/dist/{accounts-ZZONEKPU.js.map → accounts-3MWSJX54.js.map} +0 -0
  891. /package/dist/{accounts-5QDKBZMH.js.map → accounts-DJW5PRSE.js.map} +0 -0
  892. /package/dist/{accounts-3JKABIGU.js.map → accounts-L7GABKXD.js.map} +0 -0
  893. /package/dist/{accounts-KYJO3JC6.js.map → accounts-TVKG5H7H.js.map} +0 -0
  894. /package/dist/{accounts-4CDRK4S4.js.map → accounts-X2CYWEHN.js.map} +0 -0
  895. /package/dist/{actions-VKHKHUUC.js.map → actions-HTMV22XX.js.map} +0 -0
  896. /package/dist/{active-entities-YUSOUR5M.js.map → active-entities-HFBJWW5X.js.map} +0 -0
  897. /package/dist/{activities-ZVQOBHZH.js.map → activities-IRKTG2P4.js.map} +0 -0
  898. /package/dist/{ad-group-writes-UU5NNKSO.js.map → ad-group-writes-4OIJFZFS.js.map} +0 -0
  899. /package/dist/{ad-groups-CGFXZNIA.js.map → ad-groups-OCQ4UNHN.js.map} +0 -0
  900. /package/dist/{ad-writes-NALDYWOR.js.map → ad-writes-XZEKXPP2.js.map} +0 -0
  901. /package/dist/{add-577QWMCF.js.map → add-JWYHFZBE.js.map} +0 -0
  902. /package/dist/{add-CUWAW7KG.js.map → add-LZ2NEYLU.js.map} +0 -0
  903. /package/dist/{add-ATD4MBOO.js.map → add-PEWOKKO4.js.map} +0 -0
  904. /package/dist/{add-53DDLTVG.js.map → add-TPPJVWCA.js.map} +0 -0
  905. /package/dist/{ads-6UEDYT3O.js.map → ads-IVGQFY6E.js.map} +0 -0
  906. /package/dist/{ads-PV7GZXPR.js.map → ads-ODTIC6AO.js.map} +0 -0
  907. /package/dist/{ads-QFAUJCWM.js.map → ads-XDBIPFUZ.js.map} +0 -0
  908. /package/dist/{adsets-Q5DWGANV.js.map → adsets-3EW7RTJM.js.map} +0 -0
  909. /package/dist/{advertisers-YMHPZYNF.js.map → advertisers-DIMYL7SK.js.map} +0 -0
  910. /package/dist/{advertisers-HYUASJAS.js.map → advertisers-MCX3X3WO.js.map} +0 -0
  911. /package/dist/{analytics-RQROMSQ3.js.map → analytics-TRQZDEPE.js.map} +0 -0
  912. /package/dist/{animate-FWWHSYPL.js.map → animate-VOXMU24L.js.map} +0 -0
  913. /package/dist/{assign-7332DMG5.js.map → assign-GD7BO66P.js.map} +0 -0
  914. /package/dist/{audience-size-UYX5RPTA.js.map → audience-size-I6EXVPBZ.js.map} +0 -0
  915. /package/dist/{audiences-HFRVIE2X.js.map → audiences-7A2YNNTW.js.map} +0 -0
  916. /package/dist/{audiences-VEKGLWBG.js.map → audiences-P4HMEMPG.js.map} +0 -0
  917. /package/dist/{audiences-AMRFZRZ7.js.map → audiences-XC2WSLHB.js.map} +0 -0
  918. /package/dist/{audit-AD4ZZNJN.js.map → audit-F5SYOLIW.js.map} +0 -0
  919. /package/dist/{audit-ZGTG7VRD.js.map → audit-O3BADU7Y.js.map} +0 -0
  920. /package/dist/{autocomplete-LPG4WWTY.js.map → autocomplete-YFHEMCTY.js.map} +0 -0
  921. /package/dist/{avatars-HTQMIA2F.js.map → avatars-BGGZRJG4.js.map} +0 -0
  922. /package/dist/{bid-pricing-IK2C2IKE.js.map → bid-pricing-ZIGVTGHM.js.map} +0 -0
  923. /package/dist/{brand-3WCTQWWX.js.map → brand-IMFVQDP5.js.map} +0 -0
  924. /package/dist/{brief-WDKTAKVA.js.map → brief-Y7SQ2YOI.js.map} +0 -0
  925. /package/dist/{businesses-JBDQZZIG.js.map → businesses-PDLCA772.js.map} +0 -0
  926. /package/dist/{campaign-groups-6CJ45XMO.js.map → campaign-groups-XOALBRM2.js.map} +0 -0
  927. /package/dist/{campaign-writes-SX52CJYW.js.map → campaign-writes-CCTLEII5.js.map} +0 -0
  928. /package/dist/{campaign-writes-2MLRVFJK.js.map → campaign-writes-FBOAHTFD.js.map} +0 -0
  929. /package/dist/{campaigns-DTH5ADA7.js.map → campaigns-BPXWPYXC.js.map} +0 -0
  930. /package/dist/{campaigns-ZVA7SUNN.js.map → campaigns-D4JI7FK2.js.map} +0 -0
  931. /package/dist/{campaigns-D6B6Z67Y.js.map → campaigns-MHSOY47R.js.map} +0 -0
  932. /package/dist/{campaigns-X3DPCCSN.js.map → campaigns-TUO2Q3KY.js.map} +0 -0
  933. /package/dist/{capabilities-VWJGP43K.js.map → capabilities-IT3U6F2M.js.map} +0 -0
  934. /package/dist/{cards-4477BFEV.js.map → cards-JSVWNMHT.js.map} +0 -0
  935. /package/dist/{catalog-BKQOAVR2.js.map → catalog-2PCXGJGR.js.map} +0 -0
  936. /package/dist/{catalogs-G3YEVG6S.js.map → catalogs-7WNGKUTF.js.map} +0 -0
  937. /package/dist/{changes-TP7ZZHB3.js.map → changes-EWN2P6S4.js.map} +0 -0
  938. /package/dist/{chatgpt-QNUN63YS.js.map → chatgpt-UDAIH7QY.js.map} +0 -0
  939. /package/dist/{chats-JOZKLOFU.js.map → chats-KL2GH666.js.map} +0 -0
  940. /package/dist/{chunk-75FDTDLH.js.map → chunk-2AFIXLB2.js.map} +0 -0
  941. /package/dist/{chunk-4GOS37IA.js.map → chunk-34HEETBK.js.map} +0 -0
  942. /package/dist/{chunk-MZ3SJ6FV.js.map → chunk-3J62OINP.js.map} +0 -0
  943. /package/dist/{chunk-GX6VAHY7.js.map → chunk-4L3IZCFL.js.map} +0 -0
  944. /package/dist/{chunk-TD2P4HBP.js.map → chunk-4LDMAYGM.js.map} +0 -0
  945. /package/dist/{chunk-D76QEIFG.js.map → chunk-5DBZDAY3.js.map} +0 -0
  946. /package/dist/{chunk-LERTEZST.js.map → chunk-5EEWYHOR.js.map} +0 -0
  947. /package/dist/{chunk-6G5K6ZC6.js.map → chunk-5GRB5QUI.js.map} +0 -0
  948. /package/dist/{chunk-5Z2KSVIV.js.map → chunk-5QD2THAH.js.map} +0 -0
  949. /package/dist/{chunk-YKFEHWHC.js.map → chunk-65D4T7N7.js.map} +0 -0
  950. /package/dist/{chunk-W3B4BHQU.js.map → chunk-6QGUMZSJ.js.map} +0 -0
  951. /package/dist/{chunk-ZZQXVYUY.js.map → chunk-6RPA3YQB.js.map} +0 -0
  952. /package/dist/{chunk-XX53CHKP.js.map → chunk-7WULQUTE.js.map} +0 -0
  953. /package/dist/{chunk-YIWXHIVZ.js.map → chunk-7ZZ7AHVM.js.map} +0 -0
  954. /package/dist/{chunk-2BKVVCCV.js.map → chunk-AE3Q6E3R.js.map} +0 -0
  955. /package/dist/{chunk-JYWZRDLZ.js.map → chunk-B65HDBBU.js.map} +0 -0
  956. /package/dist/{chunk-VAJBWA2U.js.map → chunk-B6KFPCGF.js.map} +0 -0
  957. /package/dist/{chunk-L27H2R2N.js.map → chunk-BNMRSDKY.js.map} +0 -0
  958. /package/dist/{chunk-KFE3S63W.js.map → chunk-BW4ZFBYI.js.map} +0 -0
  959. /package/dist/{chunk-4NDCTLI5.js.map → chunk-BWKTZPBQ.js.map} +0 -0
  960. /package/dist/{chunk-H26L3OQY.js.map → chunk-C7EABFTU.js.map} +0 -0
  961. /package/dist/{chunk-VVZBBKRC.js.map → chunk-CRX5XO4W.js.map} +0 -0
  962. /package/dist/{chunk-KNY76UGC.js.map → chunk-CZQSIGYU.js.map} +0 -0
  963. /package/dist/{chunk-JERXV5A3.js.map → chunk-D2XZUIPA.js.map} +0 -0
  964. /package/dist/{chunk-K46X77UI.js.map → chunk-DARR7VGA.js.map} +0 -0
  965. /package/dist/{chunk-HRYOZUSK.js.map → chunk-DIJBHIII.js.map} +0 -0
  966. /package/dist/{chunk-PBA3YCZA.js.map → chunk-DMEGESTD.js.map} +0 -0
  967. /package/dist/{chunk-6B7VKFS4.js.map → chunk-E7XNUDS5.js.map} +0 -0
  968. /package/dist/{chunk-G7HYW5TH.js.map → chunk-EA5DXYCF.js.map} +0 -0
  969. /package/dist/{chunk-54UVGFX3.js.map → chunk-EARZMCDM.js.map} +0 -0
  970. /package/dist/{chunk-3JCF3NK6.js.map → chunk-EDU6N5NY.js.map} +0 -0
  971. /package/dist/{chunk-DGPLXY37.js.map → chunk-ESBAGB53.js.map} +0 -0
  972. /package/dist/{chunk-RX6F3GEA.js.map → chunk-FMMXUEDL.js.map} +0 -0
  973. /package/dist/{chunk-4JHUG6Y3.js.map → chunk-FSLFQHWG.js.map} +0 -0
  974. /package/dist/{chunk-MZL4H5PY.js.map → chunk-FUQOBYFX.js.map} +0 -0
  975. /package/dist/{chunk-RNDPEHCH.js.map → chunk-FVQYZCJY.js.map} +0 -0
  976. /package/dist/{chunk-6QJLVNGU.js.map → chunk-HVXY4XHT.js.map} +0 -0
  977. /package/dist/{chunk-2TK4DEOE.js.map → chunk-IARJS3IB.js.map} +0 -0
  978. /package/dist/{chunk-DZSIUEGH.js.map → chunk-IFD5LJWU.js.map} +0 -0
  979. /package/dist/{chunk-Z6XEMPOZ.js.map → chunk-IRNEFZUU.js.map} +0 -0
  980. /package/dist/{chunk-QZOS6FXW.js.map → chunk-ITQWQINC.js.map} +0 -0
  981. /package/dist/{chunk-EKCPMVZ3.js.map → chunk-JIKXDLUC.js.map} +0 -0
  982. /package/dist/{chunk-7ZHMGXE2.js.map → chunk-K3SS7PNM.js.map} +0 -0
  983. /package/dist/{chunk-KS2QY6MK.js.map → chunk-KAY5TRAH.js.map} +0 -0
  984. /package/dist/{chunk-WNFIJAUO.js.map → chunk-KYN5OIXU.js.map} +0 -0
  985. /package/dist/{chunk-STIB5DR5.js.map → chunk-LSEYIZ5K.js.map} +0 -0
  986. /package/dist/{chunk-KQTYTCKQ.js.map → chunk-O2THKWAY.js.map} +0 -0
  987. /package/dist/{chunk-F4CUV4FV.js.map → chunk-O4HREVZO.js.map} +0 -0
  988. /package/dist/{chunk-E6KL5ZRN.js.map → chunk-OOAOUO4Q.js.map} +0 -0
  989. /package/dist/{chunk-KRZV6VS2.js.map → chunk-OTDNDPWZ.js.map} +0 -0
  990. /package/dist/{chunk-HQSCJYZO.js.map → chunk-P5T7OZKV.js.map} +0 -0
  991. /package/dist/{chunk-XBOK23HI.js.map → chunk-PCKVSSVT.js.map} +0 -0
  992. /package/dist/{chunk-4QEY2L6U.js.map → chunk-PQ7YMQ2U.js.map} +0 -0
  993. /package/dist/{chunk-5PKB7LNI.js.map → chunk-Q3RKWCVL.js.map} +0 -0
  994. /package/dist/{chunk-LS5MTRFI.js.map → chunk-QCPZVAKJ.js.map} +0 -0
  995. /package/dist/{chunk-5YGBRHO6.js.map → chunk-QPZNLG7Y.js.map} +0 -0
  996. /package/dist/{chunk-EFSYTROP.js.map → chunk-QSQGGONQ.js.map} +0 -0
  997. /package/dist/{chunk-PZ7EPJRF.js.map → chunk-QTXJHQSI.js.map} +0 -0
  998. /package/dist/{chunk-35XWJEWH.js.map → chunk-QW53AQYB.js.map} +0 -0
  999. /package/dist/{chunk-XL3BMSYG.js.map → chunk-RAVSEXEL.js.map} +0 -0
  1000. /package/dist/{chunk-ZWKPXWS5.js.map → chunk-RH6LHGRM.js.map} +0 -0
  1001. /package/dist/{chunk-3EUFAONS.js.map → chunk-SDVJFN5Q.js.map} +0 -0
  1002. /package/dist/{chunk-F2S5BLPE.js.map → chunk-SGFJ4VXB.js.map} +0 -0
  1003. /package/dist/{chunk-TJFELVYS.js.map → chunk-SJFI2VEQ.js.map} +0 -0
  1004. /package/dist/{chunk-LF2PIA67.js.map → chunk-UBEBUUTQ.js.map} +0 -0
  1005. /package/dist/{chunk-LYBXCXJB.js.map → chunk-UMT4Z3PT.js.map} +0 -0
  1006. /package/dist/{chunk-MM5XO4MP.js.map → chunk-UOFHTLPD.js.map} +0 -0
  1007. /package/dist/{chunk-KLNKEVIY.js.map → chunk-VSA63D2N.js.map} +0 -0
  1008. /package/dist/{chunk-YBMVHGY3.js.map → chunk-VVS5TLDG.js.map} +0 -0
  1009. /package/dist/{chunk-YTNJODFK.js.map → chunk-W4FBKS72.js.map} +0 -0
  1010. /package/dist/{chunk-ULJ5RFOV.js.map → chunk-XFGAUP5B.js.map} +0 -0
  1011. /package/dist/{chunk-BNCW67EM.js.map → chunk-XNLCAM4S.js.map} +0 -0
  1012. /package/dist/{chunk-VFIOJD5M.js.map → chunk-XNMSJP2X.js.map} +0 -0
  1013. /package/dist/{chunk-VB6WJJR3.js.map → chunk-XR7TMGYY.js.map} +0 -0
  1014. /package/dist/{chunk-LLOOWRBB.js.map → chunk-XUOZ6VAL.js.map} +0 -0
  1015. /package/dist/{chunk-M4G3NKDB.js.map → chunk-YFVLKU4A.js.map} +0 -0
  1016. /package/dist/{chunk-PWGWMIIJ.js.map → chunk-YI4644DL.js.map} +0 -0
  1017. /package/dist/{chunk-7OFNN4CT.js.map → chunk-YJKJW7DR.js.map} +0 -0
  1018. /package/dist/{chunk-T4DD5YMP.js.map → chunk-YSW3BBNR.js.map} +0 -0
  1019. /package/dist/{chunk-QSN5MZGS.js.map → chunk-YUNATR3I.js.map} +0 -0
  1020. /package/dist/{chunk-PROV2XDR.js.map → chunk-Z5YZTHKW.js.map} +0 -0
  1021. /package/dist/{chunk-WTOYCUKH.js.map → chunk-Z6JUXGJ3.js.map} +0 -0
  1022. /package/dist/{chunk-MM22NUA6.js.map → chunk-ZC3NWFUK.js.map} +0 -0
  1023. /package/dist/{chunk-C6U6UDHJ.js.map → chunk-ZLZWMWB7.js.map} +0 -0
  1024. /package/dist/{claim-ITPOQ2I7.js.map → claim-ISW656WA.js.map} +0 -0
  1025. /package/dist/{client-VHN32ZRE.js.map → client-BNOZZLGA.js.map} +0 -0
  1026. /package/dist/{code-YS6ZMGX3.js.map → code-NT75YZHM.js.map} +0 -0
  1027. /package/dist/{companies-Y5HPLJF5.js.map → companies-VMMYMGBF.js.map} +0 -0
  1028. /package/dist/{complete-SRXMUS4R.js.map → complete-AODPD4CH.js.map} +0 -0
  1029. /package/dist/{config-CQN5FHMZ.js.map → config-RHWFL6FM.js.map} +0 -0
  1030. /package/dist/{connect-CRHMP3NK.js.map → connect-Y2I3AV5Z.js.map} +0 -0
  1031. /package/dist/{content-3ZPP4SW2.js.map → content-2SVLCO7B.js.map} +0 -0
  1032. /package/dist/{conversation-BBOPGOMH.js.map → conversation-YSYKTMLB.js.map} +0 -0
  1033. /package/dist/{conversion-report-N4HANYOB.js.map → conversion-report-WEW6RNDA.js.map} +0 -0
  1034. /package/dist/{conversion-upload-command-AUF3LNTH.js.map → conversion-upload-command-KLPIIBFE.js.map} +0 -0
  1035. /package/dist/{conversion-writes-LW4HQKK5.js.map → conversion-writes-2Z3ACFUD.js.map} +0 -0
  1036. /package/dist/{conversions-DH3Q6UTJ.js.map → conversions-EX7BSSKG.js.map} +0 -0
  1037. /package/dist/{conversions-TS723AZV.js.map → conversions-GNXBFAB6.js.map} +0 -0
  1038. /package/dist/{countries-ESAKTQAE.js.map → countries-EGWRXMAX.js.map} +0 -0
  1039. /package/dist/{create-ZWSKHSPD.js.map → create-EUXRRR2M.js.map} +0 -0
  1040. /package/dist/{create-HOIUANHB.js.map → create-OT6ZNVXP.js.map} +0 -0
  1041. /package/dist/{create-M7TK4QUC.js.map → create-RIL7BAAG.js.map} +0 -0
  1042. /package/dist/{create-CW5E5Y2S.js.map → create-TGUCKYYQ.js.map} +0 -0
  1043. /package/dist/{creatives-UEPLNCPN.js.map → creatives-CKZJ6NXP.js.map} +0 -0
  1044. /package/dist/{creatives-LLWNKS47.js.map → creatives-ED7ES72F.js.map} +0 -0
  1045. /package/dist/{creatives-QQZNCA6V.js.map → creatives-HO6CM3HB.js.map} +0 -0
  1046. /package/dist/{critique-ORSUUTHE.js.map → critique-7W7OYROK.js.map} +0 -0
  1047. /package/dist/{critique-AQDXRULE.js.map → critique-FHD32QR2.js.map} +0 -0
  1048. /package/dist/{crm-WNFEWAAM.js.map → crm-A7PLCRES.js.map} +0 -0
  1049. /package/dist/{crm-EPSZEOD2.js.map → crm-JBQUHCWQ.js.map} +0 -0
  1050. /package/dist/{crop-2J4RKJ6B.js.map → crop-VHSEIFDS.js.map} +0 -0
  1051. /package/dist/{currency-XCGKQ7FE.js.map → currency-NF2FU3CC.js.map} +0 -0
  1052. /package/dist/{custom-conversions-2VLJGPRV.js.map → custom-conversions-7U726B5N.js.map} +0 -0
  1053. /package/dist/{customers-NZDE7V3P.js.map → customers-2ZNAE3XD.js.map} +0 -0
  1054. /package/dist/{delete-A5XD52K4.js.map → delete-7QGELVP7.js.map} +0 -0
  1055. /package/dist/{delete-MRM2S4Z5.js.map → delete-FWK5IEB3.js.map} +0 -0
  1056. /package/dist/{delete-3AV3ARMX.js.map → delete-GGAYVQCP.js.map} +0 -0
  1057. /package/dist/{delete-7HMQBDFC.js.map → delete-KO3PCION.js.map} +0 -0
  1058. /package/dist/{delete-6RAKC62Z.js.map → delete-M2K5AWGM.js.map} +0 -0
  1059. /package/dist/{delete-FKXR5ZOP.js.map → delete-YOJZBQV3.js.map} +0 -0
  1060. /package/dist/{demographics-PRZS2ZC4.js.map → demographics-BRUMJFVE.js.map} +0 -0
  1061. /package/dist/{describe-6NVOWIBE.js.map → describe-AMZJUZC2.js.map} +0 -0
  1062. /package/dist/{describe-P3PPIQME.js.map → describe-X2AGFNQV.js.map} +0 -0
  1063. /package/dist/{dimensions-EYAYO27I.js.map → dimensions-S4TU2CRM.js.map} +0 -0
  1064. /package/dist/{discard-YLTMCFE6.js.map → discard-5SAMGVIJ.js.map} +0 -0
  1065. /package/dist/{discover-BJPZNXUQ.js.map → discover-KBRWN46M.js.map} +0 -0
  1066. /package/dist/{domain-Z533IR5M.js.map → domain-CZEVXW44.js.map} +0 -0
  1067. /package/dist/{download-7T6HIJKD.js.map → download-PQHC35HZ.js.map} +0 -0
  1068. /package/dist/{draft-KIBMVKSR.js.map → draft-3QBNYCLN.js.map} +0 -0
  1069. /package/dist/{draft-YDY2Q2K6.js.map → draft-BT5ROZHA.js.map} +0 -0
  1070. /package/dist/{draft-3ZVCQSAG.js.map → draft-CQFIWAI4.js.map} +0 -0
  1071. /package/dist/{draft-4PURIMDM.js.map → draft-WJTBY4G5.js.map} +0 -0
  1072. /package/dist/{draft-ZXZEQRCL.js.map → draft-XCUSRRIJ.js.map} +0 -0
  1073. /package/dist/{draft-7ZWPABVG.js.map → draft-XTIQKIGE.js.map} +0 -0
  1074. /package/dist/{draft-THPZFASM.js.map → draft-Y54L37PP.js.map} +0 -0
  1075. /package/dist/{draft-5YAYCEYY.js.map → draft-YEKM5KO2.js.map} +0 -0
  1076. /package/dist/{env-KIP2J2UB.js.map → env-XRUPKGOS.js.map} +0 -0
  1077. /package/dist/{experiment-LKK77YAN.js.map → experiment-NUPKG3KS.js.map} +0 -0
  1078. /package/dist/{export-JQRMBJ7D.js.map → export-UIJHWCH7.js.map} +0 -0
  1079. /package/dist/{extract-7QKLME7Z.js.map → extract-Q7JADPFT.js.map} +0 -0
  1080. /package/dist/{facets-453OFMAM.js.map → facets-HOFSG5J5.js.map} +0 -0
  1081. /package/dist/{favorites-NSGF4OV5.js.map → favorites-4B45JSTO.js.map} +0 -0
  1082. /package/dist/{feed-RV4KPPXM.js.map → feed-LWG4ES53.js.map} +0 -0
  1083. /package/dist/{feedback-JFV6BMJW.js.map → feedback-BU6DY5QF.js.map} +0 -0
  1084. /package/dist/{feedback-record-HCOBRTY2.js.map → feedback-record-M6CWGNW2.js.map} +0 -0
  1085. /package/dist/{fetch-44PPB6UO.js.map → fetch-AQRP3LVM.js.map} +0 -0
  1086. /package/dist/{fetch-XF76JABV.js.map → fetch-U5RT2UTZ.js.map} +0 -0
  1087. /package/dist/{find-FRRHAPWX.js.map → find-LXEB42QE.js.map} +0 -0
  1088. /package/dist/{fit-7237F5EB.js.map → fit-RLJDK3MJ.js.map} +0 -0
  1089. /package/dist/{flows-N7UZ4ZO5.js.map → flows-IXPBLJ5E.js.map} +0 -0
  1090. /package/dist/{follow-FN7LV3WV.js.map → follow-KYCYT2NK.js.map} +0 -0
  1091. /package/dist/{follow-competitors-MKXFHLXB.js.map → follow-competitors-ZNK4UOQU.js.map} +0 -0
  1092. /package/dist/{following-RKC2FLHI.js.map → following-KCGR4Q75.js.map} +0 -0
  1093. /package/dist/{fonts-YW7SU5EY.js.map → fonts-YFVT63KS.js.map} +0 -0
  1094. /package/dist/{forecast-W57WFVDL.js.map → forecast-I26P25FD.js.map} +0 -0
  1095. /package/dist/{funding-NYO65IMT.js.map → funding-IIKMIHNO.js.map} +0 -0
  1096. /package/dist/{ga4-DV2AXCSL.js.map → ga4-JYOR334L.js.map} +0 -0
  1097. /package/dist/{generate-MMBYB44G.js.map → generate-EO6M7ELE.js.map} +0 -0
  1098. /package/dist/{get-MEGPYKQR.js.map → get-344XATNV.js.map} +0 -0
  1099. /package/dist/{get-2NA3LPCN.js.map → get-44PLK3ST.js.map} +0 -0
  1100. /package/dist/{get-P743RPSI.js.map → get-ETRXKZD2.js.map} +0 -0
  1101. /package/dist/{get-YIHTAMRT.js.map → get-IOGKAJO3.js.map} +0 -0
  1102. /package/dist/{get-6WEYKOY6.js.map → get-P6LWZNIO.js.map} +0 -0
  1103. /package/dist/{get-3L6W3E3T.js.map → get-ZAAD2UDM.js.map} +0 -0
  1104. /package/dist/{get-XN5ZGDIK.js.map → get-ZELEFTHV.js.map} +0 -0
  1105. /package/dist/{gif-53ULFVLR.js.map → gif-2QSZZ7ZI.js.map} +0 -0
  1106. /package/dist/{google-M7KEXVK5.js.map → google-LA42DKVM.js.map} +0 -0
  1107. /package/dist/{google-QYYYSSXI.js.map → google-T7OTO7EZ.js.map} +0 -0
  1108. /package/dist/{google-ads-G2XD4RMT.js.map → google-ads-4NQD2UZA.js.map} +0 -0
  1109. /package/dist/{group-EFZ3AJIE.js.map → group-3ESILU6L.js.map} +0 -0
  1110. /package/dist/{group-GKWCCX66.js.map → group-XNALPNXP.js.map} +0 -0
  1111. /package/dist/{gsc-TAKOF7J5.js.map → gsc-TD33QG2D.js.map} +0 -0
  1112. /package/dist/{history-DBIEYQHY.js.map → history-HCH26IOQ.js.map} +0 -0
  1113. /package/dist/{history-RCKMMUWI.js.map → history-UDQOSO7E.js.map} +0 -0
  1114. /package/dist/{hubspot-CKS7F77W.js.map → hubspot-MDZZPW4H.js.map} +0 -0
  1115. /package/dist/{icon-L4RSS6PZ.js.map → icon-KSVSTMTA.js.map} +0 -0
  1116. /package/dist/{ideas-EYC6K33G.js.map → ideas-2VNE6IYF.js.map} +0 -0
  1117. /package/dist/{images-2HJ7YKTH.js.map → images-QTIIQOXK.js.map} +0 -0
  1118. /package/dist/{improve-BCCU5AS6.js.map → improve-HTJ6A7IL.js.map} +0 -0
  1119. /package/dist/{ingest-RR5GAX3G.js.map → ingest-2SE7CH6U.js.map} +0 -0
  1120. /package/dist/{ingest-26O5Q462.js.map → ingest-Y3C6CH7L.js.map} +0 -0
  1121. /package/dist/{insights-ZIU6FJMS.js.map → insights-EKN46CXG.js.map} +0 -0
  1122. /package/dist/{insights-NZWSJKU4.js.map → insights-NI3HRT4O.js.map} +0 -0
  1123. /package/dist/{inspect-XPDUPSUP.js.map → inspect-53E7NEBK.js.map} +0 -0
  1124. /package/dist/{inspiration-S3DU4CMQ.js.map → inspiration-EX6UV2LZ.js.map} +0 -0
  1125. /package/dist/{intent-E3UIVZBN.js.map → intent-RM42YHRD.js.map} +0 -0
  1126. /package/dist/{job-L7RJZMSG.js.map → job-YXFA4UYV.js.map} +0 -0
  1127. /package/dist/{job-create-JUDAN52O.js.map → job-create-OIC733SD.js.map} +0 -0
  1128. /package/dist/{job-status-U43WE3RJ.js.map → job-status-K5SQTOXG.js.map} +0 -0
  1129. /package/dist/{keep-55CPC7DG.js.map → keep-DMS273WJ.js.map} +0 -0
  1130. /package/dist/{keyword-gap-BG6M665A.js.map → keyword-gap-P3BHIOM6.js.map} +0 -0
  1131. /package/dist/{keyword-metrics-KOPXTILA.js.map → keyword-metrics-LK6OFJEP.js.map} +0 -0
  1132. /package/dist/{keywords-for-site-PONNELI5.js.map → keywords-for-site-5BH4POVL.js.map} +0 -0
  1133. /package/dist/{landing-RYRZ5VZ2.js.map → landing-L6JJMOO2.js.map} +0 -0
  1134. /package/dist/{languages-HORKPDNH.js.map → languages-OOIWLDQL.js.map} +0 -0
  1135. /package/dist/{languages-JSGWCC7Z.js.map → languages-ZDXMFCYA.js.map} +0 -0
  1136. /package/dist/{layerize-RPD6SNP6.js.map → layerize-FFHYHOTJ.js.map} +0 -0
  1137. /package/dist/{leads-ARUWPHBM.js.map → leads-6OZFFNI7.js.map} +0 -0
  1138. /package/dist/{leads-R7YSJDIG.js.map → leads-JNQWEI5W.js.map} +0 -0
  1139. /package/dist/{learn-IZ6QKTCX.js.map → learn-IWVCOQS5.js.map} +0 -0
  1140. /package/dist/{library-ARKRLCNJ.js.map → library-3BT6LOX6.js.map} +0 -0
  1141. /package/dist/{lighthouse-6ZC45E53.js.map → lighthouse-OHDSS52L.js.map} +0 -0
  1142. /package/dist/{line-item-writes-25FE22UX.js.map → line-item-writes-EWEXCS5G.js.map} +0 -0
  1143. /package/dist/{line-items-V522VKSU.js.map → line-items-MKUPHVZO.js.map} +0 -0
  1144. /package/dist/{link-ZZZVDSUP.js.map → link-EL4YH33K.js.map} +0 -0
  1145. /package/dist/{linkedin-HXLYJVGI.js.map → linkedin-MOMJDDEV.js.map} +0 -0
  1146. /package/dist/{list-P7NAFN6J.js.map → list-2KLD6BIX.js.map} +0 -0
  1147. /package/dist/{list-KYEK3N34.js.map → list-3SAEFSKF.js.map} +0 -0
  1148. /package/dist/{list-AL7N6X2P.js.map → list-ASFE2LDI.js.map} +0 -0
  1149. /package/dist/{list-LKHHCQZU.js.map → list-CC3JYNAS.js.map} +0 -0
  1150. /package/dist/{list-LI4OGQFW.js.map → list-CPW5FSK5.js.map} +0 -0
  1151. /package/dist/{list-HSXOTG5R.js.map → list-EAINFLTT.js.map} +0 -0
  1152. /package/dist/{list-7MVBXOJT.js.map → list-SUKMTIFM.js.map} +0 -0
  1153. /package/dist/{list-A5UCIR2J.js.map → list-VWYUWMV2.js.map} +0 -0
  1154. /package/dist/{locations-74TPQWAT.js.map → locations-F6AAOSLI.js.map} +0 -0
  1155. /package/dist/{locations-J4G5RNPH.js.map → locations-KZVEW7J6.js.map} +0 -0
  1156. /package/dist/{log-6ELXS5EJ.js.map → log-NYUNVNFS.js.map} +0 -0
  1157. /package/dist/{logo-Q5D7PZY6.js.map → logo-JUQJUHN2.js.map} +0 -0
  1158. /package/dist/{lookup-TCU2ZEZW.js.map → lookup-ZEFRWV2U.js.map} +0 -0
  1159. /package/dist/{mcp-W7DBSUF7.js.map → mcp-ODBWLJ2K.js.map} +0 -0
  1160. /package/dist/{media-53DJRC4N.js.map → media-KD3BLQZO.js.map} +0 -0
  1161. /package/dist/{media-6CQYG4UY.js.map → media-P7U5M4RS.js.map} +0 -0
  1162. /package/dist/{media-sources-M35YZQY5.js.map → media-sources-VJKKZOEO.js.map} +0 -0
  1163. /package/dist/{members-QXYMJQWU.js.map → members-CN62S46M.js.map} +0 -0
  1164. /package/dist/{meta-A7KM6TF5.js.map → meta-NJTTWKGW.js.map} +0 -0
  1165. /package/dist/{metrics-SQDJ5NQO.js.map → metrics-3JRK2F5K.js.map} +0 -0
  1166. /package/dist/{models-7U3GRYHF.js.map → models-3Z6MDHQW.js.map} +0 -0
  1167. /package/dist/{normalize-ICQF2AST.js.map → normalize-EJPZ6OSV.js.map} +0 -0
  1168. /package/dist/{normalize-DYJLUBQP.js.map → normalize-L2YLADVY.js.map} +0 -0
  1169. /package/dist/{options-77SHB5KA.js.map → options-4E7HRXDT.js.map} +0 -0
  1170. /package/dist/{output-RAH3TSIL.js.map → output-5NZNSC3O.js.map} +0 -0
  1171. /package/dist/{page-GS3WLT2C.js.map → page-YWEDNDHD.js.map} +0 -0
  1172. /package/dist/{pages-FXYQLHSJ.js.map → pages-WHX335W4.js.map} +0 -0
  1173. /package/dist/{performance-VVTYUSTW.js.map → performance-GUKG5TIN.js.map} +0 -0
  1174. /package/dist/{pinterest-AUH7WBA7.js.map → pinterest-BRDL2KLT.js.map} +0 -0
  1175. /package/dist/{pixels-ZFF4BGUH.js.map → pixels-3LBWIFAX.js.map} +0 -0
  1176. /package/dist/{pixels-45A55MOP.js.map → pixels-CUTHLKU7.js.map} +0 -0
  1177. /package/dist/{preview-AD4GKYIA.js.map → preview-PNCYU3AK.js.map} +0 -0
  1178. /package/dist/{promoted-tweet-writes-QP37NMQC.js.map → promoted-tweet-writes-4FSH2DJI.js.map} +0 -0
  1179. /package/dist/{promoted-tweets-WPSM6MGX.js.map → promoted-tweets-U34XJO2F.js.map} +0 -0
  1180. /package/dist/{properties-L2XIYQDS.js.map → properties-HSFPVQS5.js.map} +0 -0
  1181. /package/dist/{publish-YF6ESBGQ.js.map → publish-LIDGOWAY.js.map} +0 -0
  1182. /package/dist/{query-IEZRY6HV.js.map → query-3YAOEQVH.js.map} +0 -0
  1183. /package/dist/{query-VTGVZQIO.js.map → query-GBQF5CI4.js.map} +0 -0
  1184. /package/dist/{query-SGGBCHTF.js.map → query-RZNLSJZE.js.map} +0 -0
  1185. /package/dist/{reddit-VC3IOFNC.js.map → reddit-7VZUTFLR.js.map} +0 -0
  1186. /package/dist/{refresh-UXBCTVCG.js.map → refresh-GINEAS2M.js.map} +0 -0
  1187. /package/dist/{release-PP5S5QHD.js.map → release-S5SW35Q6.js.map} +0 -0
  1188. /package/dist/{relevant-pages-OWMNUCP7.js.map → relevant-pages-OML2QKYB.js.map} +0 -0
  1189. /package/dist/{remove-6LGGKMLJ.js.map → remove-2453OBHV.js.map} +0 -0
  1190. /package/dist/{remove-OUWQ7NPN.js.map → remove-CFL37X6A.js.map} +0 -0
  1191. /package/dist/{reopen-KXAM5LVX.js.map → reopen-4PJZSLEW.js.map} +0 -0
  1192. /package/dist/{rerun-ZVFP4FNN.js.map → rerun-34U26US4.js.map} +0 -0
  1193. /package/dist/{research-WEW3TISC.js.map → research-OD4645BP.js.map} +0 -0
  1194. /package/dist/{research-52CURSLR.js.map → research-OWVVDV23.js.map} +0 -0
  1195. /package/dist/{reset-MVLV7GEB.js.map → reset-7QJ5W7TB.js.map} +0 -0
  1196. /package/dist/{reset-RBL2NSDV.js.map → reset-RXPYH3YY.js.map} +0 -0
  1197. /package/dist/{resolve-JG3TGLCR.js.map → resolve-JJXXGSC7.js.map} +0 -0
  1198. /package/dist/{retry-Y3VUKOZ3.js.map → retry-MVTQJ5X4.js.map} +0 -0
  1199. /package/dist/{retry-2B3V4CJO.js.map → retry-PRPZHGTY.js.map} +0 -0
  1200. /package/dist/{retry-failed-6HXPUVXJ.js.map → retry-failed-NPAQ3FLC.js.map} +0 -0
  1201. /package/dist/{run-FZL7FYTL.js.map → run-FT3Z525N.js.map} +0 -0
  1202. /package/dist/{run-3BCAHPCW.js.map → run-JXCOCQGL.js.map} +0 -0
  1203. /package/dist/{scaffold-ad-TL5URKZF.js.map → scaffold-ad-V2ISBE7J.js.map} +0 -0
  1204. /package/dist/{scaffold-video-LRTELU5X.js.map → scaffold-video-QBWCDUPX.js.map} +0 -0
  1205. /package/dist/{schedule-O2K6M43V.js.map → schedule-PBU6YW7M.js.map} +0 -0
  1206. /package/dist/{schedule-7QLWW5HA.js.map → schedule-PWDP5KDO.js.map} +0 -0
  1207. /package/dist/{scheduled-agents-HDALX27W.js.map → scheduled-agents-5LL2SKH4.js.map} +0 -0
  1208. /package/dist/{schema-EY3Y3KFB.js.map → schema-5QUV5GNS.js.map} +0 -0
  1209. /package/dist/{scrape-ETAMW43A.js.map → scrape-3KXWYD6G.js.map} +0 -0
  1210. /package/dist/{screenshot-YCQF25ZB.js.map → screenshot-GQLSIFZM.js.map} +0 -0
  1211. /package/dist/{search-MEEM4D3W.js.map → search-ESWPECSE.js.map} +0 -0
  1212. /package/dist/{search-742XSULP.js.map → search-KAADJZP6.js.map} +0 -0
  1213. /package/dist/{search-UO5KJTYS.js.map → search-LOWGEYYA.js.map} +0 -0
  1214. /package/dist/{search-4XS7AO5R.js.map → search-TKWNJIW3.js.map} +0 -0
  1215. /package/dist/{search-OQNGSMUH.js.map → search-TL3FSB4K.js.map} +0 -0
  1216. /package/dist/{seeds-N6FF5S4T.js.map → seeds-OXKHZSF7.js.map} +0 -0
  1217. /package/dist/{select-J3QVFWVE.js.map → select-XKOZHYDU.js.map} +0 -0
  1218. /package/dist/{sends-WGJVQUMF.js.map → sends-DBJJS6CF.js.map} +0 -0
  1219. /package/dist/{sequences-OIPVR7JL.js.map → sequences-AULXZXNG.js.map} +0 -0
  1220. /package/dist/{set-prompt-MEMSZEZK.js.map → set-prompt-5DDSFV2T.js.map} +0 -0
  1221. /package/dist/{setup-links-4PCSBEJD.js.map → setup-links-FQ6UEVEZ.js.map} +0 -0
  1222. /package/dist/{shared-HJDFNID4.js.map → shared-CBVZOAC6.js.map} +0 -0
  1223. /package/dist/{site-IG62FRYT.js.map → site-PMQXZYF5.js.map} +0 -0
  1224. /package/dist/{sitemaps-POPZJTAX.js.map → sitemaps-Q5OL766P.js.map} +0 -0
  1225. /package/dist/{sites-262H6LM4.js.map → sites-LBB7FYB7.js.map} +0 -0
  1226. /package/dist/{skills-6TQZLIMP.js.map → skills-AFGQPAJM.js.map} +0 -0
  1227. /package/dist/{sources-AM7SIZUY.js.map → sources-D525IRPK.js.map} +0 -0
  1228. /package/dist/{sources-5YFONIJP.js.map → sources-FGNVY6LF.js.map} +0 -0
  1229. /package/dist/{stale-UMI4XCKX.js.map → stale-7GH2DXNR.js.map} +0 -0
  1230. /package/dist/{stats-NNXZMPZR.js.map → stats-TBSQYXYQ.js.map} +0 -0
  1231. /package/dist/{status-F4XMET7U.js.map → status-Y22TTH2D.js.map} +0 -0
  1232. /package/dist/{sticker-4KMBSMP5.js.map → sticker-FWUSN6JM.js.map} +0 -0
  1233. /package/dist/{stock-KXJ26BY4.js.map → stock-YDKCFK2T.js.map} +0 -0
  1234. /package/dist/{studio-EKIPLLHD.js.map → studio-F73JWPSU.js.map} +0 -0
  1235. /package/dist/{sync-CF7FVUQJ.js.map → sync-F4PVZ7CW.js.map} +0 -0
  1236. /package/dist/{sync-ZSNUBYPM.js.map → sync-HTZY6NTC.js.map} +0 -0
  1237. /package/dist/{sync-LXYAJ7SU.js.map → sync-X2FS4M77.js.map} +0 -0
  1238. /package/dist/{sync-definition-WU6V5245.js.map → sync-definition-2LDSD7NA.js.map} +0 -0
  1239. /package/dist/{tag-manager-JAAMOUGB.js.map → tag-manager-PA7WVPSI.js.map} +0 -0
  1240. /package/dist/{tags-6WV3PQH5.js.map → tags-A7REX52N.js.map} +0 -0
  1241. /package/dist/{tags-R5JCZRAV.js.map → tags-BWCI5TGE.js.map} +0 -0
  1242. /package/dist/{tags-KXNOWUMN.js.map → tags-FDZXGLD6.js.map} +0 -0
  1243. /package/dist/{tags-FTOD6CYS.js.map → tags-NJWIDX7V.js.map} +0 -0
  1244. /package/dist/{tags-PJRNCPQJ.js.map → tags-PLJSEVIZ.js.map} +0 -0
  1245. /package/dist/{targeting-constants-XJ2VOW7K.js.map → targeting-constants-6LYEQCAL.js.map} +0 -0
  1246. /package/dist/{targeting-criteria-HJ7YFAB2.js.map → targeting-criteria-ML4VY3TR.js.map} +0 -0
  1247. /package/dist/{targets-RLZSBUCI.js.map → targets-QVPB5S2T.js.map} +0 -0
  1248. /package/dist/{templates-4SWUBLOC.js.map → templates-OBUK5LJE.js.map} +0 -0
  1249. /package/dist/{testimonials-YYLALSV4.js.map → testimonials-MJNPCXIB.js.map} +0 -0
  1250. /package/dist/{top-companies-SNOQQFUS.js.map → top-companies-URS3UFIR.js.map} +0 -0
  1251. /package/dist/{translate-CZRVAEUQ.js.map → translate-UJZHXVJW.js.map} +0 -0
  1252. /package/dist/{triggers-MFDFO2Y4.js.map → triggers-LBHIINAB.js.map} +0 -0
  1253. /package/dist/{tweets-ATP3FQAC.js.map → tweets-DUZH63HH.js.map} +0 -0
  1254. /package/dist/{unfollow-CBVPGPF7.js.map → unfollow-YCU6FTS7.js.map} +0 -0
  1255. /package/dist/{unlink-BVDKP7VQ.js.map → unlink-ANJYTNU4.js.map} +0 -0
  1256. /package/dist/{unstage-V7GMMOWR.js.map → unstage-CLWNA4FZ.js.map} +0 -0
  1257. /package/dist/{unstage-ZTOQEWRC.js.map → unstage-X4MLF3ZB.js.map} +0 -0
  1258. /package/dist/{update-VVK6SWSI.js.map → update-2HULG6HK.js.map} +0 -0
  1259. /package/dist/{update-SQEWFFFG.js.map → update-K47MDJKP.js.map} +0 -0
  1260. /package/dist/{update-R572VWKO.js.map → update-OBY7RNZV.js.map} +0 -0
  1261. /package/dist/{update-R46SJ55S.js.map → update-UZ43L5K3.js.map} +0 -0
  1262. /package/dist/{upload-L5SYZB3X.js.map → upload-2MGQVTU4.js.map} +0 -0
  1263. /package/dist/{upload-TUYWMS6E.js.map → upload-R7F44B4J.js.map} +0 -0
  1264. /package/dist/{upscale-YWRLFU22.js.map → upscale-P7B4CAR7.js.map} +0 -0
  1265. /package/dist/{url-options-GGXAL3J4.js.map → url-options-HH5BLRTO.js.map} +0 -0
  1266. /package/dist/{url-params-CU3KVLI5.js.map → url-params-MR2RPMOQ.js.map} +0 -0
  1267. /package/dist/{use-UT2DIZOG.js.map → use-USVRQKJC.js.map} +0 -0
  1268. /package/dist/{validate-WPJXPGWS.js.map → validate-4AIFDNMQ.js.map} +0 -0
  1269. /package/dist/{variant-FLZJYGYL.js.map → variant-UFUGNBV3.js.map} +0 -0
  1270. /package/dist/{videos-KGNLYRUS.js.map → videos-K2MGLKWT.js.map} +0 -0
  1271. /package/dist/{view-NPAG66QK.js.map → view-HMNRFBZM.js.map} +0 -0
  1272. /package/dist/{viewer-check-45T2HLAH.js.map → viewer-check-JRSF6SOO.js.map} +0 -0
  1273. /package/dist/{web-IEJBIF7U.js.map → web-T4625NNK.js.map} +0 -0
  1274. /package/dist/{winners-I5BMATJZ.js.map → winners-S75G5IY6.js.map} +0 -0
  1275. /package/dist/{write-commands-VWSLDBPT.js.map → write-commands-4TNOL7RI.js.map} +0 -0
  1276. /package/dist/{write-commands-CXRXLXX2.js.map → write-commands-BSZS43RX.js.map} +0 -0
  1277. /package/dist/{write-commands-CT74VHH6.js.map → write-commands-FRH4UWLN.js.map} +0 -0
  1278. /package/dist/{write-commands-WTRSOSO3.js.map → write-commands-NVWMNI2Q.js.map} +0 -0
  1279. /package/dist/{x-WHE6PSDD.js.map → x-A7Z42KMP.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/funnel/index.ts","../src/commands/funnel/formMoments.ts","../../api/src/funnel/vocabulary.ts","../../api/src/funnel/stepTemplates.ts","../../api/src/funnel/wire.ts","../src/commands/funnel/funnelArgs.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { FunnelRequest, FunnelResponse } from \"@baker/api/funnel\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../ads/output.ts\";\nimport { flowDataPath, listFlowSlugs } from \"../flows/shared.ts\";\nimport { formsNamedHere, unplacedFormHints, type WorkspaceForm, withFormMoments } from \"./formMoments.ts\";\nimport { FunnelArgsError, funnelWrite, parseFunnelArgs } from \"./funnelArgs.ts\";\n\n/**\n * `baker funnel` — the company's own funnel: the steps it has, in its own\n * words, wired the way its business actually runs.\n *\n * One command rather than a family, because there is one thing to say: this is\n * the funnel. A read with no flags, a write that restates the whole graph. It\n * is the only staged write in the CLI that does not take operations, and the\n * reason is in `@baker/api/funnel/wire.ts`: a funnel is a graph of a handful of\n * steps, so restating it costs nothing and the person reviewing it sees the\n * funnel they will get rather than a list of edits.\n */\nconst args = {\n steps: {\n type: \"string\",\n description:\n 'The WHOLE funnel, as a JSON array. One object per step: {\"key\":\"meeting_held\",\"displayName\":\"Demo held\",\"stepClass\":\"engaged\",\"after\":[\"lead\"],\"triggers\":[{\"id\":\"t1\",\"kind\":\"event\",\"eventKey\":\"page:demo_held\"}]}. It REPLACES the funnel rather than adding to it, so read first and restate everything you want to keep. `key` is permanent and reaches reporting and URLs (lowercase, digits, underscores); `displayName` is the client\\'s own words and can be anything. `stepClass` is the stage, one of visited, lead, engaged, customer, repeat, lost — six plain words every business has, used to compare one company\\'s funnel with another\\'s. `after` is a LIST, so two ways into one step is expressible and normal. `triggers` is what MOVES somebody onto the step, any one of them being enough, and there are three kinds: `{\"id\":\"t1\",\"kind\":\"event\",\"eventKey\":\"submit:contact\"}` for anything the company\\'s Forms, pages or systems produced, used by its own key with nothing named first; `{\"id\":\"t2\",\"kind\":\"landing\",\"landingId\":\"<from --moments>\"}` for one landing page being viewed; `{\"id\":\"t3\",\"kind\":\"any_landing\"}` for any landing being viewed. Take every key and id from `--moments`. A trigger carries no amount: an event is worth what it says, and a step is worth the sum. Where a step SENDS its people is not written here: a send belongs to the system\\'s event (`baker analytics sends`), and the step reads it back as `sends[]`',\n required: false,\n },\n step: {\n type: \"string\",\n description:\n 'ONE step as a JSON object, in the same shape as an entry of --steps. It is added to the funnel as it now stands, or replaces the step with the same `key`, and every other step is left exactly as it is — the door for adding or changing a stage without restating the rest. Example: --step \\'{\"key\":\"demo\",\"displayName\":\"Demo held\",\"stepClass\":\"engaged\",\"after\":[\"lead\"],\"triggers\":[{\"id\":\"t1\",\"kind\":\"event\",\"eventKey\":\"page:demo_held\"}]}\\'',\n required: false,\n },\n \"add-trigger\": {\n type: \"string\",\n description:\n 'The key of ONE step to add a way in to, with `--event` naming what gets somebody there: `--add-trigger lead --event \"submit:contact\"`. Start here for \"this Form should count as a lead\" — it adds that one way in and leaves the step\\'s name, stage, `after[]` and every other trigger exactly as they are. Prefer it to `--step`, which takes a WHOLE step and therefore silently removes any trigger the restatement forgets. Adding a key the step already listens for changes nothing. Take the key from `--moments`, never from memory',\n required: false,\n },\n \"remove-trigger\": {\n type: \"string\",\n description:\n 'The key of ONE step to take a way in OFF, with `--event` naming which: `--remove-trigger lead --event \"submit:contact\"`. By event key rather than by trigger id, because the id is not something you ever saw. Everything else about the step is untouched',\n required: false,\n },\n event: {\n type: \"string\",\n description:\n \"The event key `--add-trigger` or `--remove-trigger` acts on — an `events[].eventKey` from `--moments`, never invented. Every Form's endings are listed there by the step each happens on, at zero before anybody has filled the Form in; which one means the step is your decision\",\n required: false,\n },\n \"remove-step\": {\n type: \"string\",\n description:\n \"The key of one step to take off the funnel. Whatever came after it moves up to whatever came before it, so the chain stays joined. The response lists it under `removed`\",\n required: false,\n },\n preset: {\n type: \"string\",\n description:\n \"Draw one of the ready-made graphs instead of stating steps: b2b_sales, b2b_inbound, saas_self_serve, saas_sales_assisted, ecommerce_purchase. It draws over the whole funnel — every company already has one, so prefer --step to change a step. Run --templates first to see what each one contains\",\n required: false,\n },\n moments: {\n type: \"boolean\",\n description:\n \"Also return everything a trigger can name, so a trigger is PICKED rather than invented: `events` (every event this company's Forms, pages and systems produced in the window, with volume, the Form it belongs to, `origin` — `site` for a page or Form, `systems` for the client's own server, `both` — and `countedAs` when the company also counts it as a page conversion, which a trigger does not need; PLUS **every workspace Form's endings** — each step's completion and its `submit:` — with the `step` each happens on, at zero and `seen: false` until somebody fires one, so a Form built minutes ago is pickable with nothing set up first, and `countedAs` when the company already counts it. Nothing is marked as the outcome: which ending means a step is YOUR decision — read the step names, and ask the person when they do not make it obvious (a Form that branches into “Not a fit” and “Quote confirmed”). If the Form is already counted, use that same key, so the step and the conversion agree. `baker analytics conversions --flow <slug>` also lists a widget's housekeeping), `sources` (the client's own systems that post events to Baker, by the `page:<name>` key each raises, pickable before its first send arrives) and `landings` (its pages, by the id a `landing` trigger takes). Use this before writing any `triggers`: a key typed from memory saves, publishes and counts nobody forever. A Form's events need NOTHING set up first — no Source, no conversion: a Baker page raises them by itself\",\n required: false,\n },\n days: {\n type: \"string\",\n description:\n \"How many days the counts beside each step cover (default 30, up to 400). Every step comes back with `people` (reached it), `atLeast` (reached it or anything after it), `before` (got as far as the step before) and `share` (atLeast / before) — counted in PEOPLE across visits and devices, not in visits\",\n required: false,\n },\n templates: {\n type: \"boolean\",\n description:\n \"Also return the libraries: the suggested steps with their stages, the presets, and `stages[]` (the six stages with the test to apply). Where a step can be sent is not here — a send belongs to the system's event, and `baker analytics sends` lists the platforms and the tags that can send\",\n required: false,\n },\n} as const;\n\nregisterSchema({\n command: \"funnel\",\n description: \"Read the company's funnel, or draw one\",\n args,\n});\n\nexport const funnelCommand = defineCommand({\n meta: {\n name: \"funnel\",\n description:\n 'Start here: run with no flags to see the funnel this company has, with the last 30 days of PEOPLE counted beside every step — `people` reached it, `atLeast` got at least that far, `before` got as far as the step before, `share` is the ratio, and `worstStep` names where the most people are lost. Every company has one from the day it exists: Visited (any landing) → Became a lead → Became a customer, the last two with no way in until somebody gives them one. Then `--moments` for everything a trigger can name (every event the company\\'s Forms, pages and systems produced, its sources, its landings, plus each Form\\'s own outcome at zero). **To make an event count on a step — the usual job — use `--add-trigger <step> --event <key>`:** it adds that one way in and touches nothing else about the step. `--step \\'<json>\\'` is for adding or renaming a STEP; it replaces the step with that key, so it means restating its `after` and every trigger it keeps, and one left out is gone. A step is reached by three kinds of thing and nothing else: an event by its own key (`{\"id\":\"t1\",\"kind\":\"event\",\"eventKey\":\"<from moments.events or moments.sources>\"}`), one landing being viewed (`{\"id\":\"t2\",\"kind\":\"landing\",\"landingId\":\"<from moments.landings>\"}`) or any landing (`{\"id\":\"t3\",\"kind\":\"any_landing\"}`). Nothing has to be named first. Pick every trigger from `--moments`, never from memory. A step with no `triggers` advances NOBODY and reports zero forever without warning — that is what the hints keep pointing at. There is no default door: a Form is only counted where a trigger names it. Keep it true: a chat that adds a Form, a Source or an event that moves people forward places it on its step in the same chat. Each step comes back with `sends[]`, read-only: where the people who reach it are sent and what happened, read off the system events behind its ways in. A send is set on the event with `baker analytics sends`, never on a step, and once published it spends ad budget — a failed one is named in the hints. Everything here is STAGED: it becomes the company\\'s funnel in one piece when the chat is published — the client sees it on the canvas in this chat and can edit it there too — and the previous version stays on file so what was already measured under it is not lost.',\n },\n args,\n run: async ({ args: raw }) => {\n try {\n const parsed = parseFunnelArgs(raw as Record<string, unknown>);\n // Read once: every Form in this workspace, including the one built in\n // this Session that the backend has never seen.\n const forms = workspaceForms();\n const namedByCaller = formsNamedHere(forms);\n const request: FunnelRequest = {\n ...funnelWrite(parsed),\n ...(namedByCaller.length === 0 ? {} : { namedByCaller }),\n };\n const response = await apiPost<FunnelResponse>(\"/api/funnel\", request);\n // What the company already counts, so a Form's ending can say so: the\n // agent choosing a way in should put the same key on the step.\n const counted = new Map((response.data.counted ?? []).map((row) => [row.eventKey, row.name] as const));\n const data =\n response.data.moments === undefined\n ? response.data\n : { ...response.data, moments: withFormMoments(response.data.moments, forms, counted) };\n const hints = [...(response.hints ?? []), ...unplacedFormHints(response.data.steps ?? [], forms, counted)];\n writeJsonEnvelope({\n ok: true,\n data,\n ...(hints.length > 0 ? { hints } : {}),\n });\n } catch (err) {\n handleError(err);\n }\n },\n});\n\n/**\n * A malformed `--steps` is the caller's own JSON, so it comes back as a\n * validation error carrying the parser's own sentence and its `fix` — the\n * request was never made, and \"that did not parse\" is something the agent can\n * act on in the same turn.\n */\nfunction handleError(err: unknown): never {\n if (err instanceof FunnelArgsError) {\n writeJsonEnvelope({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: err.message, ...(err.fix ? { fix: err.fix } : {}) },\n });\n process.exit(1);\n }\n if (err instanceof ApiError) {\n writeJsonEnvelope({ ok: false, error: { code: err.code, message: err.message } });\n process.exit(1);\n }\n writeJsonEnvelope({\n ok: false,\n error: { code: \"NETWORK_ERROR\", message: err instanceof Error ? err.message : \"Unexpected error\" },\n });\n process.exit(1);\n}\n\n/**\n * Every Form in this workspace with its tree, skipping whatever cannot be read.\n *\n * Skipping rather than failing: `baker funnel` is one of the commands reached\n * for while a Form is half-written, and a flow-builder loop that has created\n * the folder but not yet the file would otherwise take the whole funnel down\n * with it. A Form left out costs one unfired ending in a list; a throw costs\n * the command.\n */\nfunction workspaceForms(): WorkspaceForm[] {\n const forms: WorkspaceForm[] = [];\n for (const slug of listFlowSlugs()) {\n try {\n forms.push({ slug, tree: JSON.parse(readFileSync(flowDataPath(slug), \"utf-8\")) });\n } catch {\n // Unreadable or not yet written.\n }\n }\n return forms;\n}\n","import { type FlowEventKey, flowEventKeys } from \"@baker/api/analytics/flowEventKeys\";\nimport type { FunnelResponse } from \"@baker/api/funnel\";\n\n/**\n * A Form's endings, added to `--moments` before any of them has fired.\n *\n * `moments.events` is built from the event store, so it knows an event only\n * once somebody has produced one. A Form published this morning offered\n * nothing, and the picker's remaining affordances — type the key by hand, or\n * add a Source — are both wrong: a Source is a door for the company's own\n * systems, and a Baker page already raises its events natively. That is how a\n * funnel step ends up naming a key nothing produces, which never errors and\n * counts zero forever.\n *\n * Facts only. Which ending is the point of a Form is the agent's decision:\n * it is a reading of what the steps mean — \"Quote confirmed\" against \"Not a\n * fit\" — and a rule over the tree's shape picked the step both branches pass\n * through, which would have counted every rejected visitor as a lead. So\n * nothing here is marked as the outcome; each ending says the step it happens\n * on and whether the company already counts it, and the agent chooses.\n *\n * Pure, and the reading of the trees is the caller's: a half-written\n * `_data.json` under a flow-builder loop must not take out `baker funnel`.\n */\n\ntype Moments = NonNullable<FunnelResponse[\"data\"][\"moments\"]>;\ntype MomentEvent = Moments[\"events\"][number];\n\nexport interface WorkspaceForm {\n slug: string;\n tree: unknown;\n}\n\n/** Event key → the name the company counts it under, this chat's staged counts included. */\nexport type CountedNames = ReadonlyMap<string, string>;\n\n/**\n * Each step's completion and the Form's own submit — the endings a step could\n * mean. A widget's housekeeping (\"the booking page was viewed\") is left out:\n * it is never what a person means by reaching a step, it roughly doubled the\n * list, and `baker analytics conversions --flow <slug>` still has it.\n */\nfunction offeredEndings(form: WorkspaceForm): FlowEventKey[] {\n return flowEventKeys(form.tree, form.slug).filter((ending) => ending.isCompletion || ending.nodeId === null);\n}\n\n/**\n * The store's events plus every workspace Form's endings, each with its step.\n *\n * An ending that has fired stays the store's own row, never replaced: it\n * carries a real volume, and a zero in its place would say the opposite of\n * what is true. It gains the step it happens on, which only the Form knows. An\n * ending nothing has fired yet is appended at zero, `seen: false`, with the\n * name the company counts it under when it counts it.\n */\nexport function formMoments(\n events: readonly MomentEvent[],\n forms: readonly WorkspaceForm[],\n counted: CountedNames,\n): MomentEvent[] {\n const endings = new Map<string, { slug: string; ending: FlowEventKey }>();\n for (const form of forms) {\n for (const ending of offeredEndings(form)) endings.set(ending.eventKey, { slug: form.slug, ending });\n }\n\n const known = events.map((event) => {\n const found = endings.get(event.eventKey);\n if (found === undefined) return event;\n endings.delete(event.eventKey);\n return { ...event, step: found.ending.nodeName };\n });\n const unfired = [...endings.values()].map(({ slug, ending }): MomentEvent => {\n const countedAs = counted.get(ending.eventKey);\n return {\n eventKey: ending.eventKey,\n origin: \"site\",\n flowSlug: slug,\n ...(ending.nodeType === null ? {} : { nodeType: ending.nodeType }),\n events: 0,\n sessions: 0,\n step: ending.nodeName,\n seen: false,\n ...(countedAs === undefined ? {} : { countedAs }),\n };\n });\n return [...known, ...unfired];\n}\n\n/** The moments as answered, with every workspace Form's endings alongside. */\nexport function withFormMoments(moments: Moments, forms: readonly WorkspaceForm[], counted: CountedNames): Moments {\n return { ...moments, events: formMoments(moments.events, forms, counted) };\n}\n\n/**\n * The Forms {@link unplacedFormHints} speaks for, by slug — every one that\n * raises an ending at all.\n *\n * Sent with the request so the backend leaves them out of its own \"on no step\"\n * hint, and every unplaced Form is named once. A Form whose tree holds no step\n * is left to the backend, so it is still named.\n */\nexport function formsNamedHere(forms: readonly WorkspaceForm[]): string[] {\n return forms.filter((form) => flowEventKeys(form.tree, form.slug).length > 0).map((form) => form.slug);\n}\n\n/**\n * The Forms in this workspace that no step counts, as ONE hint.\n *\n * The backend knows only PUBLISHED Forms, so a Form built in this Session was\n * named by nobody — on the one turn where the reminder is worth most. So this\n * owns the reminder for every Form in the workspace ({@link formsNamedHere})\n * and the backend's hint covers only the rest.\n *\n * It names Forms and never a key to place: the key is the agent's decision.\n * The one key it does print is a fact — the ending the company already counts\n * — because a step on a different ending of the same Form saves, publishes and\n * disagrees with the conversion for ever.\n *\n * One hint rather than one per Form, measured: a 27-Form client got 27\n * near-identical paragraphs, which is how an agent learns to skip the hints.\n * But every Form is named in it: the backend leaves all of them to this hint,\n * so a Form cut from the list here is named nowhere.\n */\nexport function unplacedFormHints(\n steps: readonly { key: string; triggers?: readonly { eventKey?: string }[] }[],\n forms: readonly WorkspaceForm[],\n counted: CountedNames,\n): string[] {\n const onAStep = new Set(\n steps.flatMap((step) => (step.triggers ?? []).flatMap((trigger) => (trigger.eventKey ? [trigger.eventKey] : []))),\n );\n const unplaced: string[] = [];\n for (const form of forms) {\n const endings = flowEventKeys(form.tree, form.slug);\n if (endings.length === 0 || endings.some((ending) => onAStep.has(ending.eventKey))) continue;\n const countedOn = endings.filter((ending) => counted.has(ending.eventKey));\n unplaced.push(\n countedOn.length === 0\n ? form.slug\n : `${form.slug} (counted as ${countedOn.map((ending) => `\"${counted.get(ending.eventKey)}\" on \\`${ending.eventKey}\\``).join(\", \")})`,\n );\n }\n if (unplaced.length === 0) return [];\n\n return [\n `${unplaced.length} Form(s) in this workspace reach no funnel step, so they move nobody along it however many people finish them: ${unplaced.join(\"; \")}. Which ending moves somebody to which step is your call: \\`baker funnel --moments\\` lists every Form's endings by the step each happens on, and when the step names do not make it obvious — a Form that branches into a rejection and a confirmation — ask the person which one means a lead or a customer. Place it with \\`baker funnel --add-trigger <step> --event <key>\\`. A Form already counted as a page conversion goes on the funnel by THAT SAME key, or the two numbers disagree for ever.`,\n ];\n}\n","/**\n * The one closed vocabulary in a funnel that is otherwise the company's own.\n *\n * A company invents its own steps, in its own words, wired its own way\n * (`graph.ts`). What it cannot invent is the *stage* a step stands for: the\n * six words below are what keeps one company's funnel comparable with\n * another's, and they can stay closed because they describe the shape every\n * business has — somebody saw the offer, told you who they are, did something\n * real with you, paid, paid again, or went away — rather than any one sector's\n * name for a rung on it.\n *\n * Six, down from eight. The old list split \"qualified\", \"engaged\" and\n * \"committed\" apart, and \"lost\" from \"disqualified\", which read as a sales\n * team's pipeline and meant nothing to a shop, a clinic or a course. Every\n * step that was one of those three is a real forward interaction and is\n * `engaged`; every step that ends the journey without money is `lost`.\n *\n * These lists are mirrored from `packages/backend/convex/lib/validators.ts`,\n * which is the source of truth for what can be stored. They are re-declared\n * here rather than imported because `@baker/api` must not depend on `convex`;\n * `vocabulary.parity.test.ts` reads that file and fails if the two ever drift.\n */\n\n/**\n * The stage a funnel step stands for, never the step itself.\n *\n * Ordered as a journey runs, and **the order is meaningful**: it is the\n * fallback for comparing one company's funnel against another's when their\n * graphs cannot be laid over each other, and the tie-break for \"how far did\n * this person get\" between two steps at the same depth.\n *\n * Where a step is sent is never derived from this list — that lives per step\n * — which is exactly why it does not have to be exhaustive.\n */\nexport const FUNNEL_STEP_CLASSES = [\n /** Saw the offer: a landing opened, an ad clicked through. */\n \"visited\",\n /** We know who they are: a form sent, an account created. */\n \"lead\",\n /** Something real happened: a call booked, a trial started, a quote asked for, a cart filled. */\n \"engaged\",\n /** Paid, or signed. */\n \"customer\",\n /** Paid again, renewed, or grew. */\n \"repeat\",\n /** Terminal. Did not go ahead, or was never a fit. */\n \"lost\",\n] as const;\nexport type FunnelStepClass = (typeof FUNNEL_STEP_CLASSES)[number];\n\n/**\n * Each stage in plain words, with an example from three shapes of business.\n *\n * The stage is the only thing in a funnel a company does not get to invent, so\n * it is the only thing anybody has to be *taught* — and it was taught in five\n * words on a `<select>`: \"Engaged — did something real with you\". A marketer\n * setting up a demo-led funnel, a self-serve trial and a shop cannot tell from\n * that whether a trial is engaged or customer, and getting it wrong is\n * invisible: nothing on their own reports changes, and the cross-company\n * comparison this list exists for quietly stops working.\n *\n * So each one says what it means in a sentence a child could follow, and then\n * shows the same stage in three businesses that look nothing like each other.\n * Three, because that is the range that makes the rule legible — a shop has no\n * demo and a self-serve product has no salesperson, and a stage that survives\n * all three is a stage somebody can place their own step into.\n *\n * Here rather than in the dashboard because the agent needs the same words:\n * `baker funnel --templates` returns it, the stage picker renders it, and\n * `docs/product-model.md` quotes it.\n */\nexport interface FunnelStageGuide {\n /** One word for the chip on a card. */\n title: string;\n /** What it means, said once, plainly. */\n meaning: string;\n /** The test somebody applies to their own step to decide if it belongs here. */\n test: string;\n /** The same stage in three businesses: an online shop, a self-serve product, a sales-led business. */\n examples: { shop: string; selfServe: string; salesLed: string };\n}\n\nexport const FUNNEL_STAGE_GUIDE: Readonly<Record<FunnelStepClass, FunnelStageGuide>> = {\n visited: {\n title: \"Visited\",\n meaning: \"They looked, and that is all. You still have no idea who they are.\",\n test: \"Could this have happened without them telling you anything about themselves?\",\n examples: {\n shop: \"Opened a product page\",\n selfServe: \"Read the pricing page\",\n salesLed: \"Read a case study\",\n },\n },\n lead: {\n title: \"Lead\",\n meaning: \"Now you know who they are. They handed over a way to reach them.\",\n test: \"Do you have their email, their phone, or an account in their name?\",\n examples: {\n shop: \"Joined the newsletter\",\n selfServe: \"Created a free account\",\n salesLed: \"Asked for a demo\",\n },\n },\n engaged: {\n title: \"Engaged\",\n meaning: \"They did something real — more than reading, not yet paying.\",\n test: \"Did they spend effort or time on you, without any money changing hands?\",\n examples: {\n shop: \"Put something in the basket\",\n selfServe: \"Started a trial, or invited a colleague\",\n salesLed: \"Turned up to the demo, or asked for a quote\",\n },\n },\n customer: {\n title: \"Customer\",\n meaning: \"Money. They paid, or they signed something that means they will.\",\n test: \"Is there a first payment or a signed contract behind this?\",\n examples: {\n shop: \"Placed their first order\",\n selfServe: \"Started paying for a plan\",\n salesLed: \"Signed the contract\",\n },\n },\n repeat: {\n title: \"Repeat\",\n meaning: \"Money again. They came back, renewed, or bought more.\",\n test: \"Had they already paid you once before this happened?\",\n examples: {\n shop: \"Ordered a second time\",\n selfServe: \"Renewed, or moved to a bigger plan\",\n salesLed: \"Renewed the contract, or added seats\",\n },\n },\n lost: {\n title: \"Lost\",\n meaning: \"It ended, and no money came. Nothing comes after this step.\",\n test: \"Is this journey over without a sale — for now or for good?\",\n examples: {\n shop: \"Left the basket and never came back\",\n selfServe: \"The trial ran out unused\",\n salesLed: \"They went with somebody else\",\n },\n },\n};\n\n/**\n * The stages that end a journey without money. One word now: the old split\n * between \"it was real and did not close\" and \"it never was real\" is a\n * judgement a sales team makes and nobody else does, and the two read as one\n * loss rate on every report anyway.\n */\nexport const TERMINAL_NEGATIVE_CLASSES = [\"lost\"] as const;\n\nexport function isTerminalNegative(stepClass: FunnelStepClass): boolean {\n return (TERMINAL_NEGATIVE_CLASSES as readonly string[]).includes(stepClass);\n}\n\n/** The stages that mean money arrived: where a funnel is expected to end. */\nexport const MONEY_CLASSES = [\"customer\", \"repeat\"] as const;\n\nexport function isMoneyClass(stepClass: FunnelStepClass): boolean {\n return (MONEY_CLASSES as readonly string[]).includes(stepClass);\n}\n\n/** Where a stage sits in the journey's order — the cross-company fallback. */\nexport function stepClassRank(stepClass: FunnelStepClass): number {\n return FUNNEL_STEP_CLASSES.indexOf(stepClass);\n}\n\n/**\n * A company step key: lowercase letters, digits and underscores, 1–64\n * characters, no leading or trailing underscore.\n *\n * Constrained on purpose even though the vocabulary is open. The key is the\n * stable identifier for the step — it ends up in reporting arguments, CLI\n * arguments and URLs — so it must not be able to be `\"Deal — won (EU)\"`. The\n * client's own words live in `displayName`, which has no constraint at all,\n * and renaming a step never touches its key.\n */\nconst STEP_KEY = /^[a-z0-9](?:[a-z0-9_]{0,62}[a-z0-9])?$/;\n\nexport function isFunnelStepKey(value: string): boolean {\n return STEP_KEY.test(value);\n}\n\nexport function isFunnelStepClass(value: string): value is FunnelStepClass {\n return (FUNNEL_STEP_CLASSES as readonly string[]).includes(value);\n}\n","/**\n * Step templates — a curated library of steps most funnels have, kept as\n * suggestions and never as law.\n *\n * The vocabulary is the company's: it invents its own steps, in its own words.\n * That does not mean everybody should have to invent \"Meeting booked\" from\n * nothing at kickoff, and it does not mean the research behind what each of\n * these moments means, whether it carries money, and what it becomes on Meta,\n * Google Ads and LinkedIn has to be re-derived per client.\n *\n * So the tables live here, as suggestion rather than schema:\n *\n * - **Nothing validates against this file.** A company step needs a class and a\n * graph, and neither has to come from a template. `graph.ts` never reads this\n * module.\n * - The funnel canvas offers templates when a step is created, and\n * `VERTICAL_PRESETS` offers four small ready-made graphs for the cold start.\n * - `platformDefaults` is the **prefill** for an offline conversion added to a\n * templated step — \"send this one to Meta\" on a won-like step should propose\n * `Purchase`, not an empty box (`defaultOfflineEvent`). Every value is\n * overridable; it is a default, not a mapping, and it is deliberately per\n * template rather than per class, so that where a conversion is sent never\n * becomes something the class decides.\n *\n * Pure data plus two derivations, tier-1 tested.\n */\n\nimport type { FunnelStepDefinition } from \"./graph\";\nimport type { FunnelStepClass } from \"./vocabulary\";\n\n/**\n * What a step usually becomes on Meta. The event name travels in the payload,\n * so anything goes — but a standard event optimizes better than a custom one,\n * which is why `standard` is recorded rather than left to be guessed from the\n * name.\n */\nexport interface MetaEventDefault {\n eventName: string;\n standard: boolean;\n}\n\n/**\n * The category Google Ads makes you pick when the conversion action is created.\n * `alternative` exists for the one genuine fork: a closed deal is \"Converted\n * lead\" in the lead funnel and \"Purchase\" once a revenue amount is reported,\n * and only the company knows which it is reporting.\n */\nexport interface GoogleAdsConversionDefault {\n category: string;\n alternative?: string;\n}\n\n/**\n * The `type` LinkedIn makes you pick when the conversion rule is created.\n *\n * `verified: false` carries a type taken from the documentation and never\n * checked against the live enum, so a creation attempt has to fall back to\n * `fallback` instead of failing.\n */\nexport interface LinkedinConversionDefault {\n type: string;\n verified: boolean;\n fallback?: string;\n}\n\nexport interface FunnelPlatformDefaults {\n meta?: MetaEventDefault;\n googleAds?: GoogleAdsConversionDefault;\n linkedin?: LinkedinConversionDefault;\n}\n\nexport interface FunnelStepTemplate {\n /** Suggested key. A company may rename it; nothing here is a stable identifier. */\n key: string;\n /** Suggested name, in a marketer's words. The company's own name wins. */\n displayName: string;\n /** One line, shown next to the suggestion so nobody has to guess what it covers. */\n meaning: string;\n stepClass: FunnelStepClass;\n /**\n * Other names for the same moment, lowercase and in English.\n *\n * Read only by `suggestStepForName`, which guesses a step for a name that has\n * arrived from somewhere else — a CRM stage, a spreadsheet column, whatever a\n * later source turns out to speak. Nothing validates against them and a match\n * is never applied on its own; a person still confirms it.\n */\n aliases: readonly string[];\n /**\n * Prefill for a destination created on a step made from this template.\n * Absent per platform where the old table said \"never sent\".\n */\n platformDefaults: FunnelPlatformDefaults;\n /** Why this class, where the answer is not obvious. Shown to nobody; read by whoever edits this file. */\n classNote?: string;\n}\n\n/**\n * Sixteen steps, each with the stage it belongs to.\n *\n * On the stage mapping, where it took a decision rather than a lookup:\n *\n * - **`lead` is \"we know who they are\", not \"they did something small\".**\n * `lead` and `signed_up` are the same fact reached two ways, so both are\n * `lead` even though one is a form and the other an account.\n * - **`engaged` is the wide one, and that is deliberate.** Qualified, cart,\n * checkout, trial, outreach, meeting booked, meeting held and an open\n * opportunity are all \"something real happened\" before any money. Splitting\n * them further is what the old eight-word list did, and it read as a sales\n * team's pipeline to everybody who was not one.\n * - **`customer` is the first money, `repeat` is the money after it.**\n * `subscribed` is therefore `customer`, not `repeat`: it is the moment a\n * subscription starts paying. `renewed` is what `repeat` is for.\n */\nexport const FUNNEL_STEP_TEMPLATES: readonly FunnelStepTemplate[] = [\n {\n key: \"saw_offer\",\n displayName: \"Saw the offer\",\n meaning: \"Someone opened one of your landing pages — where most journeys start\",\n stepClass: \"visited\",\n classNote: \"The only `visited` template: a landing being viewed is a step, never an outcome.\",\n aliases: [\"saw the offer\", \"visited\", \"landing viewed\", \"page viewed\", \"visit\", \"visitor\"],\n // Never sent anywhere: every platform already counts its own page views,\n // and uploading a view as a conversion would teach it to optimise for\n // nothing.\n platformDefaults: {},\n },\n {\n key: \"lead\",\n displayName: \"Lead\",\n meaning: \"Someone left their details — the starting point of most journeys\",\n stepClass: \"lead\",\n aliases: [\"lead\", \"new lead\", \"inbound lead\", \"enquiry\", \"inquiry\", \"form submission\"],\n platformDefaults: {\n meta: { eventName: \"Lead\", standard: true },\n googleAds: { category: \"Submit lead form\" },\n linkedin: { type: \"LEAD\", verified: true },\n },\n },\n {\n key: \"signed_up\",\n displayName: \"Signed up\",\n meaning: \"Someone created an account\",\n stepClass: \"lead\",\n classNote: \"Same fact as a lead reached a different way — we now know who they are.\",\n aliases: [\"signed up\", \"sign up\", \"registered\", \"registration\", \"account created\", \"new user\"],\n platformDefaults: {\n meta: { eventName: \"CompleteRegistration\", standard: true },\n googleAds: { category: \"Sign-up\" },\n linkedin: { type: \"SIGN_UP\", verified: true },\n },\n },\n {\n key: \"add_to_cart\",\n displayName: \"Added to cart\",\n meaning: \"Something went into the cart\",\n stepClass: \"engaged\",\n aliases: [\"added to cart\", \"add to cart\", \"cart\"],\n platformDefaults: {\n meta: { eventName: \"AddToCart\", standard: true },\n googleAds: { category: \"Add to cart\" },\n linkedin: { type: \"ADD_TO_CART\", verified: true },\n },\n },\n {\n key: \"checkout_started\",\n displayName: \"Started checkout\",\n meaning: \"The checkout began\",\n stepClass: \"engaged\",\n aliases: [\"started checkout\", \"checkout started\", \"checkout\", \"begin checkout\"],\n platformDefaults: {\n meta: { eventName: \"InitiateCheckout\", standard: true },\n googleAds: { category: \"Begin checkout\" },\n // Written from the documentation and never checked against the live\n // enum, which is what `verified: false` is for — carried as a caveat\n // rather than quietly resolved.\n linkedin: { type: \"START_CHECKOUT\", verified: false, fallback: \"OTHER\" },\n },\n },\n {\n key: \"trial_started\",\n displayName: \"Trial started\",\n meaning: \"A free trial began\",\n stepClass: \"engaged\",\n classNote: \"A trial is use, not payment — engaged, never customer.\",\n aliases: [\"trial\", \"trial started\", \"free trial\", \"in trial\"],\n platformDefaults: {\n meta: { eventName: \"StartTrial\", standard: true },\n googleAds: { category: \"Sign-up\" },\n linkedin: { type: \"OTHER\", verified: true },\n },\n },\n {\n key: \"qualified_lead\",\n displayName: \"Qualified lead\",\n meaning: \"The lead matches who you sell to\",\n stepClass: \"engaged\",\n aliases: [\"qualified lead\", \"qualified\", \"mql\", \"sql\", \"sales qualified lead\", \"marketing qualified lead\"],\n platformDefaults: {\n meta: { eventName: \"QualifiedLead\", standard: false },\n googleAds: { category: \"Qualified lead\" },\n linkedin: { type: \"QUALIFIED_LEAD\", verified: true },\n },\n },\n {\n key: \"contacted\",\n displayName: \"Contacted\",\n meaning: \"Your team reached out\",\n stepClass: \"engaged\",\n classNote: \"Engaged even though the move came from the seller: it is a real forward interaction.\",\n aliases: [\"contacted\", \"contact\", \"outreach\", \"follow up\", \"first contact\", \"attempting contact\"],\n platformDefaults: {\n meta: { eventName: \"Contact\", standard: true },\n googleAds: { category: \"Contact\" },\n linkedin: { type: \"CONTACT\", verified: true },\n },\n },\n {\n key: \"meeting_scheduled\",\n displayName: \"Meeting booked\",\n meaning: \"A meeting is on the calendar\",\n stepClass: \"engaged\",\n aliases: [\n \"meeting booked\",\n \"meeting scheduled\",\n \"demo scheduled\",\n \"demo booked\",\n \"appointment booked\",\n \"call booked\",\n ],\n platformDefaults: {\n meta: { eventName: \"Schedule\", standard: true },\n googleAds: { category: \"Book appointment\" },\n // LinkedIn has SCHEDULE and BOOK_APPOINTMENT separately; the second is the\n // one that means a reservation.\n linkedin: { type: \"BOOK_APPOINTMENT\", verified: true },\n },\n },\n {\n key: \"meeting_held\",\n displayName: \"Meeting held\",\n meaning: \"The meeting actually happened — kept apart from booking because no-show is a real number\",\n stepClass: \"engaged\",\n aliases: [\"meeting held\", \"meeting done\", \"demo held\", \"demo done\", \"demo completed\", \"call held\"],\n platformDefaults: {\n meta: { eventName: \"MeetingHeld\", standard: false },\n googleAds: { category: \"Other\" },\n linkedin: { type: \"OTHER\", verified: true },\n },\n },\n {\n key: \"opportunity\",\n displayName: \"Opportunity open\",\n meaning: \"A deal is open — send the estimated value if you have one\",\n stepClass: \"engaged\",\n classNote: \"A number behind an intention is still no money, so engaged rather than customer.\",\n aliases: [\"opportunity\", \"proposal sent\", \"proposal\", \"negotiation\", \"in negotiation\", \"quote sent\", \"deal open\"],\n platformDefaults: {\n meta: { eventName: \"Opportunity\", standard: false },\n googleAds: { category: \"Request quote\" },\n linkedin: { type: \"REQUEST_QUOTE\", verified: true },\n },\n },\n {\n key: \"won\",\n displayName: \"Deal won\",\n meaning: \"The deal closed — the amount is required here\",\n stepClass: \"customer\",\n aliases: [\"won\", \"closed won\", \"deal won\", \"purchase\", \"sale\"],\n platformDefaults: {\n meta: { eventName: \"Purchase\", standard: true },\n // Which of the two depends on whether the company reports a revenue\n // amount. It is a per-company answer, so it stays a fork, not a constant.\n googleAds: { category: \"Purchase\", alternative: \"Converted lead\" },\n linkedin: { type: \"PURCHASE\", verified: true },\n },\n },\n {\n key: \"subscribed\",\n displayName: \"Subscription started\",\n meaning: \"A paying subscription began — the amount is the recurring one\",\n stepClass: \"customer\",\n classNote: \"Customer, not repeat: it is the first money. Repeat is what happens after — see the renewed template.\",\n aliases: [\"subscribed\", \"subscription started\", \"new subscription\", \"paying\"],\n platformDefaults: {\n meta: { eventName: \"Subscribe\", standard: true },\n googleAds: { category: \"Purchase\" },\n linkedin: { type: \"PURCHASE\", verified: true },\n },\n },\n {\n key: \"renewed\",\n displayName: \"Subscription renewed\",\n meaning: \"An existing customer paid again or expanded — the amount is what they paid this time\",\n stepClass: \"repeat\",\n classNote:\n \"The smallest honest member of `repeat`. Without it every SaaS funnel drawn from this library ends at `subscribed` and the stage has nothing to hold. The recurring lifecycle beyond renewal — upgrades, churn, refunds — is a bigger conversation than a template.\",\n aliases: [\"renewed\", \"renewal\", \"subscription renewed\", \"expansion\", \"upsell\"],\n platformDefaults: {\n meta: { eventName: \"Renewed\", standard: false },\n googleAds: { category: \"Purchase\" },\n linkedin: { type: \"PURCHASE\", verified: true },\n },\n },\n {\n key: \"application_submitted\",\n displayName: \"Application submitted\",\n meaning: \"Someone submitted an application — a course, a policy, a credit line\",\n stepClass: \"engaged\",\n classNote: \"For education, events, fintech and insurance. Strong intent, no money yet.\",\n aliases: [\"application submitted\", \"application\", \"applied\", \"application received\"],\n platformDefaults: {\n meta: { eventName: \"SubmitApplication\", standard: true },\n googleAds: { category: \"Submit lead form\" },\n linkedin: { type: \"SUBMIT_APPLICATION\", verified: true },\n },\n },\n {\n key: \"lost\",\n displayName: \"Lost\",\n meaning: \"It did not go ahead — the deal fell through, or the lead was never a fit\",\n stepClass: \"lost\",\n classNote:\n \"Terminal and never sent anywhere. It can happen at any depth, which is why the order check leaves it alone.\",\n aliases: [\n \"lost\",\n \"closed lost\",\n \"deal lost\",\n \"no budget\",\n \"not interested\",\n \"disqualified\",\n \"unqualified\",\n \"not a fit\",\n \"spam\",\n \"duplicate\",\n \"junk\",\n ],\n platformDefaults: {},\n },\n];\n\nconst TEMPLATES_BY_KEY: ReadonlyMap<string, FunnelStepTemplate> = new Map(\n FUNNEL_STEP_TEMPLATES.map((template) => [template.key, template] as const),\n);\n\n/**\n * A name reduced to comparable words: lowercase, no separators, single spaces.\n * \"Won - Closed\", \"won_closed\" and \"WON / CLOSED\" all become the same two\n * words, which is the whole trick — every system writes the same moment its own\n * way.\n */\nfunction nameWords(value: string): string[] {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \" \")\n .split(\" \")\n .filter((word) => word !== \"\");\n}\n\n/** Whether `needle`'s words appear, in order and adjacent, inside `haystack`. */\nfunction containsWords(haystack: readonly string[], needle: readonly string[]): boolean {\n if (needle.length === 0 || needle.length > haystack.length) {\n return false;\n }\n for (let start = 0; start <= haystack.length - needle.length; start++) {\n if (needle.every((word, offset) => haystack[start + offset] === word)) {\n return true;\n }\n }\n return false;\n}\n\ninterface NameCandidate {\n stepKey: string;\n phrases: readonly string[];\n}\n\n/** The longest phrase that matches wins — \"closed won\" beats a bare \"won\". */\nfunction bestCandidate(subject: readonly string[], candidates: readonly NameCandidate[]): string | null {\n let best: string | null = null;\n let bestLength = 0;\n for (const candidate of candidates) {\n for (const phrase of candidate.phrases) {\n const words = nameWords(phrase);\n const matches = containsWords(subject, words) || containsWords(words, subject);\n if (matches && words.length > bestLength) {\n best = candidate.stepKey;\n bestLength = words.length;\n }\n }\n }\n return best;\n}\n\n/**\n * A guess at which of *this company's* steps some other system's name means.\n *\n * The company's own names are tried first, because a company that calls a step\n * \"Lead that fits\" has already said what its words are and no library should\n * talk over it. Only then do the template aliases get a turn, and only for\n * templates whose key the funnel actually contains — a suggestion has to be a\n * step the person can pick, so an alias of a step they never drew is no match\n * at all.\n *\n * `null` means \"no idea\", which is a fine answer: the picker just opens empty.\n */\nexport function suggestStepForName(\n incomingName: string,\n steps: readonly { key: string; displayName: string }[],\n templates: readonly FunnelStepTemplate[] = FUNNEL_STEP_TEMPLATES,\n): string | null {\n const subject = nameWords(incomingName);\n if (subject.length === 0) {\n return null;\n }\n const own = bestCandidate(\n subject,\n steps.map((step) => ({ stepKey: step.key, phrases: [step.displayName] })),\n );\n if (own !== null) {\n return own;\n }\n const drawn = new Set(steps.map((step) => step.key));\n return bestCandidate(\n subject,\n templates.filter((t) => drawn.has(t.key)).map((t) => ({ stepKey: t.key, phrases: t.aliases })),\n );\n}\n\n/** `undefined` rather than a throw: a caller offering suggestions can simply offer fewer. */\nexport function stepTemplate(key: string): FunnelStepTemplate | undefined {\n return TEMPLATES_BY_KEY.get(key);\n}\n\n/**\n * The preset a company picks once, at the cold start, to get a graph instead of\n * a blank canvas.\n *\n * **Two families, because that is who Baker sells to today.** There is no\n * e-commerce preset: no client runs that funnel and none is on the way, and a\n * preset nobody picks is a graph nobody checks. The e-commerce *templates* stay\n * in the library above — `add_to_cart`, `checkout_started`, `signed_up` are\n * offered one by one on the canvas like any other suggestion, and the day an\n * e-commerce client arrives the preset is four lines here, not new research.\n *\n * Within each family there are variants rather than one average funnel, because\n * the difference between the two B2B shapes — whether a human runs meetings —\n * changes almost every node, and a preset that splits the difference fits\n * neither.\n */\nexport const FUNNEL_PRESET_FAMILIES = [\"b2b\", \"saas\", \"ecommerce\"] as const;\nexport type FunnelPresetFamily = (typeof FUNNEL_PRESET_FAMILIES)[number];\n\nexport const FUNNEL_VERTICALS = [\n \"b2b_sales\",\n \"b2b_inbound\",\n \"saas_self_serve\",\n \"saas_sales_assisted\",\n \"ecommerce_purchase\",\n] as const;\nexport type FunnelVertical = (typeof FUNNEL_VERTICALS)[number];\n\nexport interface FunnelPresetStep {\n templateKey: string;\n /** Predecessors, by template key. Empty means the funnel starts here. */\n after: readonly string[];\n /** Overrides the template's name where the vertical says it differently — \"Purchase\", not \"Deal won\". */\n displayName?: string;\n}\n\nexport interface FunnelVerticalPreset {\n vertical: FunnelVertical;\n family: FunnelPresetFamily;\n label: string;\n /** One line for the picker, in the company's language rather than ours. */\n description: string;\n steps: readonly FunnelPresetStep[];\n}\n\n/**\n * Four small graphs — two shapes of B2B, two of SaaS — each the shortest funnel\n * of its kind that is still honest, not the fullest.\n *\n * Small on purpose. A preset is the first thing a company sees on the canvas,\n * and a fourteen-node suggestion invites deleting rather than editing; a step\n * that exists because a preset put it there and that nothing ever reaches shows\n * up as a gap in the funnel forever after.\n */\nexport const VERTICAL_PRESETS: readonly FunnelVerticalPreset[] = [\n {\n vertical: \"b2b_sales\",\n family: \"b2b\",\n label: \"B2B sales team\",\n description: \"Leads a salesperson qualifies, meets, quotes and closes.\",\n steps: [\n { templateKey: \"lead\", after: [] },\n { templateKey: \"qualified_lead\", after: [\"lead\"] },\n { templateKey: \"meeting_scheduled\", after: [\"qualified_lead\"] },\n // Booked and held stay apart because the gap between them is the no-show\n // rate, which is a number this kind of team actually manages.\n { templateKey: \"meeting_held\", after: [\"meeting_scheduled\"] },\n { templateKey: \"opportunity\", after: [\"meeting_held\"] },\n { templateKey: \"won\", after: [\"opportunity\"] },\n // The end hangs off the earliest step at which it becomes possible; the\n // order check ignores it anyway (`isOutOfOrder`), so the edge is there to\n // be drawn, not to be enforced.\n { templateKey: \"lost\", after: [\"opportunity\"] },\n ],\n },\n {\n vertical: \"b2b_inbound\",\n family: \"b2b\",\n label: \"B2B inbound, no meetings\",\n description: \"Enquiries answered and closed without a meeting stage.\",\n steps: [\n { templateKey: \"lead\", after: [] },\n { templateKey: \"qualified_lead\", after: [\"lead\"] },\n { templateKey: \"contacted\", after: [\"qualified_lead\"] },\n { templateKey: \"won\", after: [\"contacted\"] },\n { templateKey: \"lost\", after: [\"contacted\"] },\n ],\n },\n {\n vertical: \"saas_self_serve\",\n family: \"saas\",\n label: \"SaaS, self-serve\",\n description: \"People who sign up, trial the product and start paying on their own.\",\n steps: [\n { templateKey: \"signed_up\", after: [] },\n { templateKey: \"trial_started\", after: [\"signed_up\"] },\n { templateKey: \"subscribed\", after: [\"trial_started\"] },\n { templateKey: \"renewed\", after: [\"subscribed\"] },\n { templateKey: \"lost\", after: [\"trial_started\"], displayName: \"Trial expired\" },\n ],\n },\n {\n vertical: \"saas_sales_assisted\",\n family: \"saas\",\n label: \"SaaS, sales-assisted\",\n description: \"Sign-ups and demo requests, with a salesperson in the middle of the bigger ones.\",\n steps: [\n // Two entry points, which is the whole reason `after` is a list: people\n // arrive by signing up or by asking for a demo, never both, and a single\n // position integer calls that ordinary path an anomaly.\n { templateKey: \"signed_up\", after: [] },\n { templateKey: \"lead\", after: [], displayName: \"Demo requested\" },\n { templateKey: \"meeting_held\", after: [\"lead\"], displayName: \"Demo held\" },\n { templateKey: \"trial_started\", after: [\"signed_up\", \"meeting_held\"] },\n { templateKey: \"subscribed\", after: [\"trial_started\", \"meeting_held\"] },\n { templateKey: \"renewed\", after: [\"subscribed\"] },\n ],\n },\n {\n vertical: \"ecommerce_purchase\",\n family: \"ecommerce\",\n label: \"Online shop\",\n description: \"People who browse, fill a basket, check out and come back for a second order.\",\n steps: [\n { templateKey: \"saw_offer\", after: [], displayName: \"Viewed a product\" },\n { templateKey: \"add_to_cart\", after: [\"saw_offer\"] },\n { templateKey: \"checkout_started\", after: [\"add_to_cart\"] },\n // A shop's \"customer\" is the order, and its \"repeat\" is the next one —\n // the same two stages every other preset ends on, in a shop's words.\n { templateKey: \"won\", after: [\"checkout_started\"], displayName: \"Order placed\" },\n { templateKey: \"renewed\", after: [\"won\"], displayName: \"Ordered again\" },\n ],\n },\n];\n\n/**\n * The funnel every company starts with.\n *\n * Every company has a funnel from the day it exists — \"no funnel\" was a real\n * state, and it meant every \"how far did they get\" question had no answer\n * until somebody drew one. The default is the smallest honest journey: seeing\n * the offer, becoming a lead, becoming a customer. The first step listens for\n * any landing being viewed, so it counts from the first visit; the other two\n * start unwired and the canvas says so, because what a lead IS is the\n * company's to say.\n */\nexport function defaultFunnelSteps(): FunnelStepDefinition[] {\n return [\n {\n key: \"visited\",\n displayName: \"Visited\",\n stepClass: \"visited\",\n after: [],\n triggers: [{ id: \"t1\", kind: \"any_landing\" }],\n },\n { key: \"lead\", displayName: \"Became a lead\", stepClass: \"lead\", after: [\"visited\"], triggers: [] },\n { key: \"customer\", displayName: \"Became a customer\", stepClass: \"customer\", after: [\"lead\"], triggers: [] },\n ];\n}\n\nexport function verticalPreset(vertical: FunnelVertical): FunnelVerticalPreset | undefined {\n return VERTICAL_PRESETS.find((preset) => preset.vertical === vertical);\n}\n\n/**\n * A template turned into a real step of a company's funnel.\n *\n * The template stops existing at this point: what comes out is an ordinary\n * `FunnelStepDefinition` the company owns and can rename, reclassify or rewire,\n * with no link back. That is what makes this a suggestion library and not a\n * second schema.\n */\nexport function stepFromTemplate(\n template: FunnelStepTemplate,\n after: readonly string[],\n displayName?: string,\n): FunnelStepDefinition {\n return {\n key: template.key,\n displayName: displayName ?? template.displayName,\n stepClass: template.stepClass,\n after: [...after],\n // A template says what a moment IS, never which of this company's events\n // announces it — that is a per-company answer, and prefilling a guess would\n // make a step look wired when it advances nobody.\n triggers: [],\n };\n}\n\n/**\n * The steps a preset produces, ready to hand to `validateDefinition` or draw.\n *\n * A preset step whose template does not exist is dropped rather than faked: the\n * pair is checked by a test, so a miss here is a bug in this file and a\n * half-invented step would hide it.\n */\nexport function presetDefinition(preset: FunnelVerticalPreset): FunnelStepDefinition[] {\n return preset.steps.flatMap((step) => {\n const template = stepTemplate(step.templateKey);\n return template ? [stepFromTemplate(template, step.after, step.displayName)] : [];\n });\n}\n","/**\n * The request and response `baker funnel` and its Convex route both speak.\n *\n * One schema, used by both sides, because the funnel is the one payload in this\n * feature that is a graph rather than a list of fields: a shape the CLI and the\n * backend agreed on separately would disagree about a predecessor naming a step\n * that does not exist, and that disagreement is invisible until a client's\n * funnel comes back drawn wrong.\n */\n\nimport { z } from \"zod\";\nimport { FUNNEL_VERTICALS } from \"./stepTemplates\";\nimport { FUNNEL_STEP_CLASSES } from \"./vocabulary\";\n\n/** How many steps one funnel may have. */\nconst MAX_STEPS = 40;\n/** How many triggers one step may have. */\nconst MAX_PER_STEP = 20;\n\n/**\n * One trigger: an event, by its key, a landing page being viewed, or any\n * landing being viewed.\n */\nexport const funnelTriggerSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n id: z.string().min(1).max(64),\n kind: z.literal(\"event\"),\n /** The event's key, from `--moments`: `form:…`, `submit:…`, `page:…`, `exit:…`. */\n eventKey: z.string().min(1).max(320),\n }),\n z.object({\n id: z.string().min(1).max(64),\n kind: z.literal(\"landing\"),\n /** The landing's internal id — what the page stamps on its rows, never its slug. */\n landingId: z.string().min(1).max(120),\n }),\n /** Any landing being viewed — what a funnel's first step usually listens for. */\n z.object({\n id: z.string().min(1).max(64),\n kind: z.literal(\"any_landing\"),\n }),\n]);\n\nexport const funnelStepSchema = z.object({\n /** Lowercase letters, digits and underscores. Stable — renaming never changes it. */\n key: z.string().min(1).max(64),\n /** The client's own words for this step. Shown everywhere; unconstrained. */\n displayName: z.string().min(1).max(120),\n stepClass: z.enum(FUNNEL_STEP_CLASSES),\n /** Predecessor keys. Empty means people come in here. */\n after: z.array(z.string().max(64)).max(MAX_STEPS).default([]),\n /** What moves somebody onto this step. Any one of them is enough. */\n triggers: z.array(funnelTriggerSchema).max(MAX_PER_STEP).default([]),\n});\nexport type FunnelStepWire = z.infer<typeof funnelStepSchema>;\n\n/**\n * With none of `steps`, `preset`, `step`, `removeStep`, `addTrigger` and\n * `removeTrigger` this is a read, which is what makes `baker funnel` with no\n * flags show the funnel rather than erroring.\n *\n * `steps` restates the WHOLE funnel, and the review screen shows the funnel\n * the client will get rather than a set of edits whose result has to be\n * computed. `step` and `removeStep` change one step and leave the rest as it\n * stands — the door for an agent that wants to add a stage without restating\n * six others, because a restatement that forgot one removed it. Whichever\n * door is used, the response names every step the proposal dropped.\n */\nexport const funnelRequestSchema = z.object({\n steps: z.array(funnelStepSchema).max(MAX_STEPS).optional(),\n /** One step, added or replaced by its key. Everything else is untouched. */\n step: funnelStepSchema.optional(),\n /** One step taken out by key; whatever came after it moves up to whatever came before it. */\n removeStep: z.string().min(1).max(64).optional(),\n /**\n * ONE way in added to a step, leaving the rest of that step alone.\n *\n * `step` takes a whole step, so adding a way in through it means restating\n * the step's name, stage, `after[]` and every trigger it already had — and a\n * trigger left out of that restatement is silently removed. This is the door\n * for the thing that is actually being asked (\"this Form's booking should\n * count here\"), and it cannot drop anything.\n */\n addTrigger: z.object({ stepKey: z.string().min(1).max(64), eventKey: z.string().min(1).max(320) }).optional(),\n /** ONE way in taken off a step, by the event key it listens for. */\n removeTrigger: z.object({ stepKey: z.string().min(1).max(64), eventKey: z.string().min(1).max(320) }).optional(),\n /** One of the ready-made graphs, instead of stating steps. */\n preset: z.enum(FUNNEL_VERTICALS).optional(),\n /** Also return the suggestion library and the presets. */\n templates: z.boolean().optional(),\n /**\n * Also return everything a trigger can name: every event this company's\n * Forms, pages and systems have actually produced, its sources, and its\n * landings. The list to pick a trigger FROM, so nobody has to guess.\n */\n moments: z.boolean().optional(),\n /** How many days the counts beside each step cover. Default 30. */\n days: z.number().int().min(1).max(400).optional(),\n /**\n * The Forms, by slug, the caller names itself when no step counts them —\n * `baker funnel` reads its own workspace and names each with the key that\n * places it. The backend leaves them out of its own hint, so no Form is\n * named twice.\n */\n namedByCaller: z.array(z.string().min(1).max(200)).max(1000).optional(),\n});\nexport type FunnelRequest = z.infer<typeof funnelRequestSchema>;\n\n/**\n * What comes back is loosely typed on purpose.\n *\n * The response is read by an agent and by a person, never re-submitted, so a\n * strict mirror of the request would only make the route fail on a field the\n * store has and this file has not caught up with. The request is where the\n * shape is enforced.\n */\nexport const funnelResponseSchema = z.object({\n ok: z.literal(true),\n data: z.object({\n /** The published version, or 0 when this company has never drawn a funnel. */\n version: z.number(),\n /** Whether `steps` is a proposal waiting on this chat's publish rather than what is live. */\n staged: z.boolean(),\n steps: z.array(\n z.object({\n key: z.string(),\n displayName: z.string(),\n stepClass: z.string(),\n after: z.array(z.string()),\n triggers: z.array(z.record(z.string(), z.unknown())),\n /**\n * Where the people who reach this step are sent: the sends of every\n * system event among its triggers. Read-only here — a send belongs to\n * the event and is set with `baker analytics sends`.\n */\n sends: z.array(\n z.object({\n id: z.string(),\n eventKey: z.string(),\n platform: z.string(),\n event: z.string(),\n /** What happened to it in the window, in one line. */\n outcome: z.string().optional(),\n }),\n ),\n /** How many people reached this step in the window. Counted in people, across visits and devices. */\n people: z.number().optional(),\n /** How many reached this step or any step after it. */\n atLeast: z.number().optional(),\n /** How many got as far as the step before it. Absent for a way in. */\n before: z.number().optional(),\n /** `atLeast / before`, 0–1. Absent where there is no before. */\n share: z.number().optional(),\n events: z.number().optional(),\n money: z.record(z.string(), z.number()).optional(),\n }),\n ),\n /** The window `people` and friends were counted over. */\n window: z.object({ startDate: z.string(), endDate: z.string(), days: z.number() }).optional(),\n /** The step that loses the most people, by key. Absent while nothing is lost. */\n worstStep: z.string().optional(),\n /**\n * The steps this write took off the funnel, by key. Present on every write,\n * empty when nothing was dropped — the answer to \"did my restatement forget\n * one\", given in the same turn.\n */\n removed: z.array(z.string()).optional(),\n /**\n * What this company counts as page conversions, this chat's staged counts\n * included, by event key and name. Here so a Form's ending can say it is\n * already counted — the agent choosing a step's way in should use that\n * same key — and outside `moments` because the plain read's hints say it too.\n */\n counted: z.array(z.object({ eventKey: z.string(), name: z.string() })).optional(),\n /** Everything a trigger can name, when asked for with `moments`. */\n moments: z\n .object({\n events: z.array(\n z.object({\n eventKey: z.string(),\n /** `site` for a page or Form, `systems` for the client's own server, `both` when both sent it. */\n origin: z.string().optional(),\n /** The Form it belongs to, when it belongs to one. */\n flowSlug: z.string().optional(),\n nodeType: z.string().optional(),\n events: z.number(),\n sessions: z.number(),\n /** The name it is counted under as a page conversion, when the company counts it. Informational. */\n countedAs: z.string().optional(),\n /**\n * The step of the Form this happens on, in the Form's own words —\n * never a node id. Present on a Form's ending read from the Form\n * itself, which is the only place the name is known.\n */\n step: z.string().optional(),\n /**\n * `false` on an ending a Form raises natively but nobody has fired\n * yet — derived from the Form, offered at zero, exactly as a\n * Source is offered before its first send. Absent means it came\n * from the event store and therefore happened.\n */\n seen: z.boolean().optional(),\n }),\n ),\n /** The company's sources: a system of theirs that posts events to Baker, by the event name it raises. */\n sources: z.array(z.object({ eventKey: z.string(), name: z.string(), status: z.string() })),\n landings: z.array(z.object({ landingId: z.string(), title: z.string(), slug: z.string() })),\n })\n .optional(),\n templates: z\n .array(\n z.object({\n key: z.string(),\n displayName: z.string(),\n meaning: z.string(),\n stepClass: z.string(),\n }),\n )\n .optional(),\n presets: z\n .array(z.object({ vertical: z.string(), label: z.string(), description: z.string(), steps: z.array(z.string()) }))\n .optional(),\n /**\n * What each stage means, the test to apply, and the same stage in three\n * shapes of business.\n *\n * The stage is the one thing in a funnel a company does not invent, so it\n * is the one thing the agent has to get right on the company's behalf —\n * and \"engaged: did something real\" cannot settle whether a trial is\n * engaged or customer. Same source as the dashboard's stage picker, so the\n * two cannot teach it differently.\n */\n stages: z\n .array(\n z.object({\n stepClass: z.string(),\n title: z.string(),\n meaning: z.string(),\n test: z.string(),\n examples: z.object({ shop: z.string(), selfServe: z.string(), salesLed: z.string() }),\n }),\n )\n .optional(),\n }),\n hints: z.array(z.string()).optional(),\n});\nexport type FunnelResponse = z.infer<typeof funnelResponseSchema>;\n","import { parseEventKey } from \"@baker/api/analytics\";\nimport { FUNNEL_VERTICALS, type FunnelRequest, funnelRequestSchema } from \"@baker/api/funnel\";\n\n/**\n * `baker funnel`'s flags, turned into the one request the route takes.\n *\n * Pure and tier-1 tested, because everything that can go wrong with this\n * command goes wrong here: hand-written JSON, a preset spelled from memory, and\n * a step whose ways in are half-written. Each of those has to come back as a\n * sentence the agent can act on in the same turn rather than as a request that\n * failed for a reason only the server can see.\n *\n * There is no `--forms` any more. It used to say which step each Form's\n * submissions entered, alongside a rule that dropped an unplaced Form on the\n * funnel's first step — so a funnel that measured a client's Forms\n * by accident was indistinguishable from one that measured them deliberately.\n * A Form reaches a step because a trigger on that step names it, and `baker\n * funnel`'s hints name every Form no step counts.\n */\n\nexport class FunnelArgsError extends Error {\n /** Structured remediation, in the shape the CLI's error envelope carries. */\n readonly fix?: { action: string; explanation: string };\n\n constructor(message: string, fix?: { action: string; explanation: string }) {\n super(message);\n this.name = \"FunnelArgsError\";\n if (fix) {\n this.fix = fix;\n }\n }\n}\n\nexport interface FunnelArgs {\n steps?: unknown[];\n /** One step, added or replaced by key; the rest of the funnel is left as it stands. */\n step?: unknown;\n /** One step taken off by key. */\n removeStep?: string;\n /** One way in added to a step, by the event key it listens for. */\n addTrigger?: { stepKey: string; eventKey: string };\n /** One way in taken off a step. */\n removeTrigger?: { stepKey: string; eventKey: string };\n preset?: string;\n templates: boolean;\n moments: boolean;\n days?: number;\n}\n\nexport function parseFunnelArgs(raw: Record<string, unknown>): FunnelArgs {\n const steps = parseSteps(raw.steps);\n const step = parseStep(raw.step);\n const removeStep = parseRemoveStep(raw[\"remove-step\"] ?? raw.removeStep);\n const preset = parsePreset(raw.preset);\n const addTrigger = parseWayIn(raw[\"add-trigger\"] ?? raw.addTrigger, raw.event, \"--add-trigger\");\n const removeTrigger = parseWayIn(raw[\"remove-trigger\"] ?? raw.removeTrigger, raw.event, \"--remove-trigger\");\n\n const doors = [steps, step, removeStep, preset, addTrigger, removeTrigger].filter(\n (door) => door !== undefined,\n ).length;\n if (doors > 1) {\n throw new FunnelArgsError(\n \"Give one of --steps, --step, --remove-step, --preset, --add-trigger or --remove-trigger, not two.\",\n );\n }\n\n const days = raw.days === undefined ? undefined : Number(raw.days);\n if (days !== undefined && (!Number.isInteger(days) || days <= 0 || days > 400)) {\n throw new FunnelArgsError(\"--days must be a whole number of days, from 1 to 400.\");\n }\n\n return {\n ...(steps === undefined ? {} : { steps }),\n ...(step === undefined ? {} : { step }),\n ...(removeStep === undefined ? {} : { removeStep }),\n ...(preset === undefined ? {} : { preset }),\n ...(addTrigger === undefined ? {} : { addTrigger }),\n ...(removeTrigger === undefined ? {} : { removeTrigger }),\n templates: raw.templates === true,\n moments: raw.moments === true,\n ...(days === undefined ? {} : { days }),\n };\n}\n\n/**\n * The request body. Validated against the shared schema here rather than only\n * on the server, so a malformed step is named before a round trip — and named\n * as the step it is, which the server's first-issue message cannot always do.\n */\nexport function funnelWrite(args: FunnelArgs): FunnelRequest {\n const body = {\n ...(args.steps === undefined ? {} : { steps: args.steps }),\n ...(args.step === undefined ? {} : { step: args.step }),\n ...(args.removeStep === undefined ? {} : { removeStep: args.removeStep }),\n ...(args.preset === undefined ? {} : { preset: args.preset }),\n ...(args.addTrigger === undefined ? {} : { addTrigger: args.addTrigger }),\n ...(args.removeTrigger === undefined ? {} : { removeTrigger: args.removeTrigger }),\n ...(args.templates ? { templates: true } : {}),\n ...(args.moments ? { moments: true } : {}),\n ...(args.days === undefined ? {} : { days: args.days }),\n };\n const parsed = funnelRequestSchema.safeParse(body);\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n throw new FunnelArgsError(\n `That funnel cannot be sent — ${issue?.path.join(\".\") || \"steps\"}: ${issue?.message ?? \"invalid\"}`,\n {\n action: \"read_the_schema\",\n explanation:\n \"Run `baker schema funnel` for the exact shape of one step, or `baker funnel --templates` for sixteen worked examples plus every field an event carries.\",\n },\n );\n }\n return parsed.data;\n}\n\nfunction parseSteps(raw: unknown): unknown[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n if (typeof raw !== \"string\") {\n throw new FunnelArgsError(\"--steps takes a JSON array of steps.\");\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (cause) {\n throw new FunnelArgsError(`--steps is not valid JSON: ${cause instanceof Error ? cause.message : \"parse failed\"}`, {\n action: \"quote_the_json\",\n explanation:\n 'Wrap the whole array in single quotes so the shell leaves the double quotes alone: --steps \\'[{\"key\":\"lead\",...}]\\'.',\n });\n }\n if (!Array.isArray(parsed)) {\n throw new FunnelArgsError(\"--steps takes an ARRAY of steps, even when the funnel has one step.\");\n }\n refuseRetiredShapes(parsed);\n return parsed;\n}\n\n/**\n * One step, as JSON. The same shape one entry of `--steps` takes, and the same\n * refusals — a step written the old way is refused here too.\n */\nfunction parseStep(raw: unknown): unknown | undefined {\n if (raw === undefined) {\n return undefined;\n }\n if (typeof raw !== \"string\") {\n throw new FunnelArgsError(\"--step takes one step as a JSON object.\");\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (cause) {\n throw new FunnelArgsError(`--step is not valid JSON: ${cause instanceof Error ? cause.message : \"parse failed\"}`, {\n action: \"quote_the_json\",\n explanation:\n 'Wrap the object in single quotes so the shell leaves the double quotes alone: --step \\'{\"key\":\"demo\",...}\\'.',\n });\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new FunnelArgsError(\"--step takes ONE step as an object. To restate several, use --steps with an array.\");\n }\n refuseRetiredShapes([parsed]);\n return parsed;\n}\n\nfunction parseRemoveStep(raw: unknown): string | undefined {\n if (raw === undefined) {\n return undefined;\n }\n if (typeof raw !== \"string\" || raw.trim() === \"\") {\n throw new FunnelArgsError(\"--remove-step takes the key of the step to take off, as `baker funnel` lists it.\");\n }\n return raw.trim();\n}\n\n/**\n * The shapes a step used to have and no longer does, refused by name.\n *\n * The wire schema would strip them silently: a step written with\n * `offlineConversions` would be stored without them and answer `ok`, and an\n * `analytics` or `conversion` trigger would be refused with zod's generic\n * discriminator message. Each has a home now — a send is set on the event, and\n * a way in is an event by its key with nothing to name first — so the refusal\n * says where.\n */\nfunction refuseRetiredShapes(steps: readonly unknown[]): void {\n for (const step of steps) {\n if (typeof step !== \"object\" || step === null) continue;\n const key = String((step as { key?: unknown }).key ?? \"?\");\n if (\"offlineConversions\" in step) {\n throw new FunnelArgsError(`Step \"${key}\" puts sends on the step, and a send belongs to the conversion.`, {\n action: \"set_sends_on_the_conversion\",\n explanation:\n \"Drop `offlineConversions`. Name the outcome with `baker analytics conversions`, then `baker analytics sends --set --conversion <name> --platform <p> --tag <tagId> --event <e>`; the step reads its conversions' sends back as `sends[]`.\",\n });\n }\n const triggers = (step as { triggers?: unknown }).triggers;\n if (!Array.isArray(triggers)) continue;\n const kinds = triggers.map((trigger) =>\n typeof trigger === \"object\" && trigger !== null ? (trigger as { kind?: unknown }).kind : undefined,\n );\n if (kinds.includes(\"analytics\") || kinds.includes(\"conversion\")) {\n const word = kinds.includes(\"analytics\") ? \"analytics\" : \"conversion\";\n throw new FunnelArgsError(\n `Step \"${key}\" has a \\`${word}\\` trigger, and a step is reached by an event or a landing only.`,\n {\n action: \"use_an_event_trigger\",\n explanation:\n 'Pick the moment from `baker funnel --moments` and write it as `{\"kind\":\"event\",\"eventKey\":\"<from moments.events or moments.sources>\"}` — nothing has to be named first. A landing is `{\"kind\":\"landing\",\"landingId\":\"<from moments.landings>\"}`.',\n },\n );\n }\n }\n}\n\nfunction parsePreset(raw: unknown): string | undefined {\n if (raw === undefined) {\n return undefined;\n }\n if (typeof raw !== \"string\" || !(FUNNEL_VERTICALS as readonly string[]).includes(raw)) {\n throw new FunnelArgsError(`--preset must be one of: ${FUNNEL_VERTICALS.join(\", \")}`, {\n action: \"list_the_presets\",\n explanation: \"Run `baker funnel --templates` to see what each preset contains before picking one.\",\n });\n }\n return raw;\n}\n\n/**\n * `--add-trigger <step> --event <key>`, or a refusal naming the missing half.\n *\n * Two flags rather than one JSON object, because that is the whole point of\n * this door: the thing being asked is \"this event should count on that step\",\n * and asking for JSON here would put the caller back in the business of\n * hand-writing a shape. The event key is still never invented — `--moments`\n * is where it comes from, and the refusal says so.\n */\nfunction parseWayIn(\n stepKey: unknown,\n eventKey: unknown,\n flag: string,\n): { stepKey: string; eventKey: string } | undefined {\n if (stepKey === undefined) return undefined;\n if (typeof stepKey !== \"string\" || stepKey.trim() === \"\") {\n throw new FunnelArgsError(`${flag} takes the key of the step to change: \\`${flag} lead\\`.`);\n }\n if (typeof eventKey !== \"string\" || eventKey.trim() === \"\") {\n throw new FunnelArgsError(`${flag} needs --event, naming what gets somebody there.`, {\n action: \"read_the_moments\",\n explanation: `Run \\`baker funnel --moments\\` and copy an \\`events[].eventKey\\` — a Form's own outcome is listed there at zero before anybody has filled it in. Then: \\`${flag} ${stepKey.trim()} --event \"<key>\"\\`.`,\n });\n }\n const key = eventKey.trim();\n // Refused here rather than at the backend, and only when ADDING: a key\n // nothing can produce does not error downstream, it counts zero for ever.\n // Removing is the opposite case — a key already on a step precisely because\n // it was wrong has to stay removable, whatever it parses as.\n if (flag === \"--add-trigger\" && parseEventKey(key) === null) {\n throw new FunnelArgsError(`\"${key}\" is not an event key, so nothing would ever reach that step through it.`, {\n action: \"read_the_moments\",\n explanation:\n \"Run `baker funnel --moments` and copy an `events[].eventKey`. They look like form:<form>:<step>:<trigger>, submit:<form>, page:<name> or view:<landing>.\",\n });\n }\n return { stepKey: stepKey.trim(), eventKey: key };\n}\n"],"mappings":"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","names":["args"]}
@@ -0,0 +1,55 @@
1
+ import "./chunk-YQSBHWOI.js";
2
+
3
+ // src/commands/ga4/index.ts
4
+ import { defineCommand } from "citty";
5
+ var ga4Command = defineCommand({
6
+ meta: {
7
+ name: "ga4",
8
+ description: `Google Analytics 4. Report on a property, audit its config, and change what it measures.
9
+
10
+ Start here:
11
+ baker ga4 properties \u2014 list accessible properties
12
+ baker ga4 config \u2014 what the property measures today (and whether Baker may change it)
13
+ baker ga4 query --list-presets \u2014 see available report presets
14
+
15
+ Report:
16
+ baker ga4 audit \u2014 full property health check
17
+ baker ga4 query --preset tracking-health \u2014 compare GA4 vs GAds data
18
+ baker ga4 query --dimensions "date" --metrics "sessions" --days 7 \u2014 free-form query
19
+
20
+ Then stage changes (nothing is sent to Google Analytics until the chat completes):
21
+ baker ga4 key-event create --json '{"eventName":"generate_lead","countingMethod":"ONCE_PER_EVENT"}'
22
+ baker ga4 custom-event create --json '{"destinationEvent":"quote_request","eventConditions":[...]}'
23
+ baker ga4 custom-dimension create --json '{"parameterName":"plan_tier","displayName":"Plan tier","scope":"EVENT"}'
24
+ baker ga4 audience create --json '{"displayName":"Visited without demo", \u2026}' \u2014 a group to retarget
25
+ baker ga4 property set --industry TECHNOLOGY \u2014 benchmarking cohort
26
+ baker ga4 ads-link create --customer-id 123-456-7890 \u2014 what makes audiences targetable
27
+ baker ga4 enhanced-measurement set --scrolls true --outbound-clicks true \u2014 automatic events, no tag needed
28
+ baker ga4 draft list \u2014 review everything staged
29
+
30
+ An applied change takes effect on the property immediately \u2014 there is no version to publish afterwards
31
+ and no undo. Agree the changes with the user before the chat completes, not after.
32
+
33
+ Full guide: __tooling__/docs/tools/baker/ga4.md`
34
+ },
35
+ subCommands: {
36
+ properties: () => import("./properties-HSFPVQS5.js").then((m) => m.propertiesCommand),
37
+ config: () => import("./config-RHWFL6FM.js").then((m) => m.configCommand),
38
+ audit: () => import("./audit-F5SYOLIW.js").then((m) => m.auditCommand),
39
+ query: () => import("./query-RZNLSJZE.js").then((m) => m.queryCommand),
40
+ "key-event": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.keyEventCommand),
41
+ "custom-dimension": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.customDimensionCommand),
42
+ "custom-metric": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.customMetricCommand),
43
+ "custom-event": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.customEventCommand),
44
+ "data-retention": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.dataRetentionCommand),
45
+ audience: () => import("./write-commands-NVWMNI2Q.js").then((m) => m.audienceCommand),
46
+ property: () => import("./write-commands-NVWMNI2Q.js").then((m) => m.propertyCommand),
47
+ "ads-link": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.adsLinkCommand),
48
+ "enhanced-measurement": () => import("./write-commands-NVWMNI2Q.js").then((m) => m.enhancedMeasurementCommand),
49
+ draft: () => import("./draft-3QBNYCLN.js").then((m) => m.draftCommand)
50
+ }
51
+ });
52
+ export {
53
+ ga4Command
54
+ };
55
+ //# sourceMappingURL=ga4-JYOR334L.js.map
@@ -0,0 +1,262 @@
1
+ import {
2
+ IMAGE_MODEL_IDS,
3
+ IMAGE_QUALITIES,
4
+ IMAGE_SIZES,
5
+ resolveLibraryImageIds
6
+ } from "./chunk-O2THKWAY.js";
7
+ import {
8
+ awaitBatch,
9
+ batchHints,
10
+ projectBatch,
11
+ resolveMaxWaitMs,
12
+ waitingHint
13
+ } from "./chunk-RAVSEXEL.js";
14
+ import {
15
+ failStudioCommand
16
+ } from "./chunk-C7EABFTU.js";
17
+ import "./chunk-DMEGESTD.js";
18
+ import "./chunk-2AFIXLB2.js";
19
+ import {
20
+ DEFAULT_IMAGE_GENERATE_MODEL,
21
+ MODEL_REGISTRY,
22
+ maxInputReferences
23
+ } from "./chunk-CAMX6OHF.js";
24
+ import "./chunk-VVS5TLDG.js";
25
+ import {
26
+ ApiError,
27
+ apiGet,
28
+ apiPost
29
+ } from "./chunk-PCKVSSVT.js";
30
+ import "./chunk-MCM3HMNZ.js";
31
+ import "./chunk-UW36KPPH.js";
32
+ import {
33
+ registerSchema,
34
+ writeJson
35
+ } from "./chunk-NU7JSWVA.js";
36
+ import "./chunk-YQSBHWOI.js";
37
+
38
+ // src/commands/studio/generate.ts
39
+ import { defineCommand } from "citty";
40
+ var MODEL_LIST = IMAGE_MODEL_IDS;
41
+ var DEFAULT_MAX_WAIT_MS = 24e4;
42
+ registerSchema({
43
+ command: "studio.generate",
44
+ description: "Start here to make an image. Opens a Studio batch: the images are ingested into the media library as they render and the whole batch shows up in the dashboard Studio for the client, labelled with this conversation. Default model google/gemini-3.1-flash-image \u2014 fast, reference editing, extreme aspect ratios. --reference is the biggest quality lever: pass library image ids, local file paths, and/or image URLs to ground the render in real imagery.",
45
+ args: {
46
+ prompt: {
47
+ type: "string",
48
+ description: "What to generate \u2014 full art direction, not a keyword. Length caps are per model (Recraft 10,000 characters, gpt-image 32,000, Gemini publishes none) and a --skill or --brand block counts toward them; `baker studio models` has the number.",
49
+ required: true
50
+ },
51
+ model: {
52
+ type: "string",
53
+ description: `Model (default google/gemini-3.1-flash-image). They accept genuinely different things \u2014 check with \`baker studio models\` rather than assuming. One of: ${MODEL_LIST.join(", ")}`,
54
+ required: false,
55
+ enum: MODEL_LIST
56
+ },
57
+ "aspect-ratio": {
58
+ type: "string",
59
+ // Snapped, not refused: ask for the ad shape you want and the backend
60
+ // moves it to the nearest one the chosen model renders (gpt-image-2 has no
61
+ // 4:5, so a 4:5 request becomes 3:4 rather than failing).
62
+ description: "Aspect ratio, e.g. 1:1 (default), 16:9, 9:16, 4:5, 3:2 \u2014 Gemini flash also does 1:4 / 8:1. Snapped to the nearest shape the chosen model renders, so ask for the ad format you want (4:5 on gpt-image-2 or Recraft becomes 3:4, neither renders it). Must be width:height.",
63
+ required: false
64
+ },
65
+ count: { type: "number", description: "Takes to render, 1-8 (default 1)", required: false, default: 1 },
66
+ avatar: {
67
+ type: "string",
68
+ description: "Cast one of the company's avatars by short name (e.g. marta). Grounds the render on their identity sheet and reuses their subject description verbatim \u2014 do this instead of passing the sheet through --reference, which skips both and leaves the batch unattributed. `baker avatars list` shows who there is.",
69
+ required: false
70
+ },
71
+ reference: {
72
+ type: "string",
73
+ description: "Comma-separated visual references, in order: library image ids, local file paths, and/or image URLs. Paths and URLs are added to the media library first, so the reference is reusable and the client can see what grounded the render. How many are allowed is per model \u2014 Gemini takes 14, gpt-image 16, Recraft exactly 1.",
74
+ required: false
75
+ },
76
+ skill: {
77
+ type: "string",
78
+ description: "Craft direction by id (run `baker studio skills`), e.g. product-pack-shot, ugc-selfie-hook",
79
+ required: false
80
+ },
81
+ brand: {
82
+ type: "boolean",
83
+ description: "Append the company palette and visual style. Off by default \u2014 you are writing the art direction yourself and a brand block appended after it fights what you just specified.",
84
+ required: false,
85
+ default: false
86
+ },
87
+ "image-size": {
88
+ type: "string",
89
+ // No default: left unset the provider picks the pixels from the ratio.
90
+ // gpt-image-2 has no resolution setting at all and REFUSES this flag.
91
+ description: `Output resolution \u2014 only on models that have one (gpt-image-2 and Recraft have none and REFUSE this). The tiers differ per model: Lite renders 1K only, Pro 1K-4K, Gemini flash also 0.5K. One of: ${IMAGE_SIZES.join(", ")}`,
92
+ required: false,
93
+ enum: IMAGE_SIZES
94
+ },
95
+ quality: {
96
+ type: "string",
97
+ description: `Rendering quality \u2014 the OpenAI models only; every Gemini tier and Recraft REFUSE it. One of: ${IMAGE_QUALITIES.join(", ")}`,
98
+ required: false,
99
+ enum: IMAGE_QUALITIES
100
+ },
101
+ strength: { type: "number", description: "Recraft vector only: vectorization strength 0-1", required: false },
102
+ "rgb-colors": {
103
+ type: "string",
104
+ description: 'Recraft only: JSON array of [r,g,b] palette triples, each channel a whole number 0-255, e.g. "[[10,10,10],[255,80,0]]"',
105
+ required: false
106
+ },
107
+ "bg-rgb": {
108
+ type: "string",
109
+ description: 'Recraft only: JSON [r,g,b] background colour, e.g. "[255,255,255]"',
110
+ required: false
111
+ },
112
+ wait: {
113
+ type: "string",
114
+ description: "Pass false to get the batch id back immediately instead of waiting for the takes",
115
+ required: false,
116
+ default: "true"
117
+ },
118
+ "max-wait": {
119
+ type: "number",
120
+ description: "Max ms to wait for the takes (default 240000). 0 returns the id immediately.",
121
+ required: false,
122
+ default: DEFAULT_MAX_WAIT_MS
123
+ },
124
+ full: { type: "boolean", description: "Include settings, references and attribution", required: false }
125
+ }
126
+ });
127
+ function parseJsonArg(raw, flag) {
128
+ try {
129
+ return JSON.parse(raw);
130
+ } catch {
131
+ throw new ApiError("VALIDATION_ERROR", `--${flag} must be valid JSON (got: ${raw})`);
132
+ }
133
+ }
134
+ function referenceLimitFor(model) {
135
+ const chosen = model ?? DEFAULT_IMAGE_GENERATE_MODEL;
136
+ const max = maxInputReferences("image_generate", chosen);
137
+ if (max === void 0) return void 0;
138
+ const label = MODEL_REGISTRY.image_generate[chosen]?.label ?? chosen;
139
+ return {
140
+ max,
141
+ refuse: (count) => max === 1 ? `${label} takes exactly one reference image \u2014 you passed ${count}. Pick the one that matters, or switch to a model that reads several.` : `${label} takes up to ${max} reference images \u2014 you passed ${count}. Drop the weakest ones.`
142
+ };
143
+ }
144
+ async function effectiveModel(pinned, skillId, fetchSkills = () => apiGet("/api/studio/skills")) {
145
+ if (pinned || !skillId) return pinned;
146
+ try {
147
+ const { skills } = await fetchSkills();
148
+ return skills.find((skill) => skill.id === skillId)?.defaults.model;
149
+ } catch {
150
+ return void 0;
151
+ }
152
+ }
153
+ function buildGenerateBody(args, prompt) {
154
+ const body = { prompt };
155
+ if (args.model) body.model = args.model;
156
+ if (args["aspect-ratio"]) body.aspectRatio = args["aspect-ratio"];
157
+ if (args.count !== void 0 && args.count !== "") body.count = Number(args.count);
158
+ if (args.avatar) body.avatar = args.avatar;
159
+ if (args.skill) body.skillId = args.skill;
160
+ if (args.brand) body.useBrand = true;
161
+ if (args["image-size"]) body.imageSize = args["image-size"];
162
+ if (args.quality) body.quality = args.quality;
163
+ if (args.strength !== void 0 && args.strength !== "") body.strength = Number(args.strength);
164
+ if (args["rgb-colors"]) {
165
+ body.rgbColors = parseJsonArg(args["rgb-colors"], "rgb-colors");
166
+ }
167
+ if (args["bg-rgb"]) {
168
+ body.backgroundRgbColor = parseJsonArg(
169
+ args["bg-rgb"],
170
+ "bg-rgb"
171
+ );
172
+ }
173
+ return body;
174
+ }
175
+ var generateCommand = defineCommand({
176
+ meta: {
177
+ name: "generate",
178
+ description: "Start here to make an image. Renders 1-8 takes of one brief, ingests each into the media library as it lands, and shows the batch in the dashboard Studio next to the ones the client ran.\n\nModel choice: google/gemini-3.1-flash-image (default \u2014 fast, best at editing a reference and at extreme ratios), google/gemini-3-pro-image (highest fidelity, slower), openai/gpt-image-2 (photoreal and the cleanest in-image text \u2014 no --image-size, no 4:5 / 5:4), recraft/recraft-v4.1-pro-vector (vector/flat marks with palette control).\n\n--reference is the biggest quality lever there is: a real logo, product shot, Pinterest pin or sandbox screenshot beats any amount of adjectives.\n\nExamples:\n baker studio generate 'matte black bottle on wet marble, hard studio light, 35mm' --aspect-ratio 3:2 --count 3\n baker studio generate 'this bottle on a sunlit kitchen counter' --reference './src/brand/product.png,https://\u2026/kitchen.jpg'\n baker studio generate 'founder-style selfie, kitchen background, natural light' --skill ugc-selfie-hook\n baker studio generate 'flat geometric mascot, brand palette' --model recraft/recraft-v4.1-pro-vector --rgb-colors '[[10,10,10],[255,80,0]]'"
179
+ },
180
+ args: {
181
+ avatar: {
182
+ type: "string",
183
+ description: "Cast an avatar by short name \u2014 grounds the image on their identity sheet",
184
+ required: false
185
+ },
186
+ prompt: { type: "positional", description: "What to generate", required: false },
187
+ model: { type: "string", description: "Model id (default google/gemini-3.1-flash-image)", required: false },
188
+ "aspect-ratio": { type: "string", description: "Aspect ratio (default 1:1)", required: false },
189
+ count: { type: "string", description: "Takes to render, 1-8 (default 1)", required: false },
190
+ reference: {
191
+ type: "string",
192
+ description: "Comma-separated library image ids, local file paths, and/or image URLs",
193
+ required: false
194
+ },
195
+ skill: { type: "string", description: "Craft direction id (`baker studio skills`)", required: false },
196
+ brand: { type: "boolean", description: "Append the company palette and style", required: false },
197
+ "image-size": {
198
+ type: "string",
199
+ description: `Output resolution, models that have one only: ${IMAGE_SIZES.join(" | ")}`,
200
+ required: false
201
+ },
202
+ quality: {
203
+ type: "string",
204
+ description: `Rendering quality, models that honour it only: ${IMAGE_QUALITIES.join(" | ")}`,
205
+ required: false
206
+ },
207
+ strength: { type: "string", description: "Recraft vectorization strength 0-1", required: false },
208
+ "rgb-colors": { type: "string", description: "Recraft palette JSON", required: false },
209
+ "bg-rgb": { type: "string", description: "Recraft background JSON", required: false },
210
+ wait: { type: "string", description: "false to return the batch id immediately", required: false },
211
+ "max-wait": { type: "string", description: "Max ms to wait (default 240000, 0 = no wait)", required: false },
212
+ full: { type: "boolean", description: "Include settings, references and attribution", required: false }
213
+ },
214
+ run: async ({ args }) => {
215
+ try {
216
+ const prompt = args.prompt;
217
+ if (!prompt) {
218
+ writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "A prompt is required" } });
219
+ process.exit(1);
220
+ }
221
+ const body = buildGenerateBody(args, prompt);
222
+ if (args.reference) {
223
+ const model = await effectiveModel(body.model, body.skillId);
224
+ const { imageIds } = await resolveLibraryImageIds(args.reference, referenceLimitFor(model));
225
+ if (imageIds.length > 0) body.referenceImageIds = imageIds;
226
+ }
227
+ const start = await apiPost("/api/studio/generate", body);
228
+ const maxWaitMs = resolveMaxWaitMs(args.wait, args["max-wait"], DEFAULT_MAX_WAIT_MS);
229
+ if (maxWaitMs === 0) {
230
+ writeJson({
231
+ ok: true,
232
+ data: start,
233
+ hints: [`Rendering ${start.count} take(s). Read them with \`baker studio get ${start.generationId}\`.`]
234
+ });
235
+ return;
236
+ }
237
+ const outcome = await awaitBatch(start.generationId, maxWaitMs);
238
+ if (outcome.kind !== "settled") {
239
+ writeJson({
240
+ ok: true,
241
+ data: { ...start, status: "running" },
242
+ hints: [waitingHint(outcome, start.generationId, maxWaitMs)]
243
+ });
244
+ return;
245
+ }
246
+ writeJson({
247
+ ok: true,
248
+ data: projectBatch(outcome.generation, args.full === true),
249
+ hints: batchHints(outcome.generation)
250
+ });
251
+ } catch (error) {
252
+ failStudioCommand(error, { withFix: true });
253
+ }
254
+ }
255
+ });
256
+ export {
257
+ buildGenerateBody,
258
+ effectiveModel,
259
+ generateCommand,
260
+ referenceLimitFor
261
+ };
262
+ //# sourceMappingURL=generate-EO6M7ELE.js.map
@@ -0,0 +1,56 @@
1
+ import {
2
+ buildGetHints,
3
+ failApi,
4
+ failValidation
5
+ } from "./chunk-FSLFQHWG.js";
6
+ import "./chunk-IDYAVGCS.js";
7
+ import "./chunk-GXDLWBOY.js";
8
+ import "./chunk-TEINLN64.js";
9
+ import "./chunk-ZJWUBJYQ.js";
10
+ import "./chunk-NE4F3FHN.js";
11
+ import {
12
+ apiPost,
13
+ validateConvexId
14
+ } from "./chunk-PCKVSSVT.js";
15
+ import "./chunk-MCM3HMNZ.js";
16
+ import "./chunk-UW36KPPH.js";
17
+ import {
18
+ registerSchema,
19
+ writeJson
20
+ } from "./chunk-NU7JSWVA.js";
21
+ import "./chunk-YQSBHWOI.js";
22
+
23
+ // src/commands/actions/get.ts
24
+ import { defineCommand } from "citty";
25
+ registerSchema({
26
+ command: "actions.get",
27
+ description: "Get a single action with tags, blockers, blocked-by, and active-chat info.",
28
+ args: {
29
+ id: { type: "string", description: "Action ID", required: true }
30
+ }
31
+ });
32
+ var getCommand = defineCommand({
33
+ meta: { name: "get", description: "Get a single action by ID. Example: baker actions get <action-id>" },
34
+ args: {
35
+ id: { type: "positional", description: "Action ID", required: false },
36
+ "action-id": { type: "string", description: "Action ID (alternative to positional)", required: false }
37
+ },
38
+ run: async ({ args }) => {
39
+ try {
40
+ const id = args.id || args["action-id"];
41
+ if (!id) {
42
+ failValidation("Action ID is required.");
43
+ }
44
+ validateConvexId(id);
45
+ const response = await apiPost("/api/actions/get", { actionId: id });
46
+ const hints = buildGetHints(response.data);
47
+ writeJson(hints.length > 0 ? { ...response, hints } : response);
48
+ } catch (err) {
49
+ failApi(err);
50
+ }
51
+ }
52
+ });
53
+ export {
54
+ getCommand
55
+ };
56
+ //# sourceMappingURL=get-344XATNV.js.map