@koda-sl/baker-cli 0.386.0 → 0.387.0-dev.3bafd569e

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 (967) hide show
  1. package/README.md +1090 -211
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-CLOKMTTC.js +49 -0
  5. package/dist/account-CLOKMTTC.js.map +1 -0
  6. package/dist/account-V5Y2QHAK.js +79 -0
  7. package/dist/account-V5Y2QHAK.js.map +1 -0
  8. package/dist/account-XFK6VX2R.js +80 -0
  9. package/dist/account-XFK6VX2R.js.map +1 -0
  10. package/dist/account-reads-S5VXX2QU.js +218 -0
  11. package/dist/account-reads-S5VXX2QU.js.map +1 -0
  12. package/dist/account-writes-Y7EQXDXF.js +66 -0
  13. package/dist/account-writes-Y7EQXDXF.js.map +1 -0
  14. package/dist/accounts-7YD457YN.js +114 -0
  15. package/dist/accounts-7YD457YN.js.map +1 -0
  16. package/dist/accounts-BJ3X5JQT.js +115 -0
  17. package/dist/accounts-BJ3X5JQT.js.map +1 -0
  18. package/dist/accounts-LOJ4WLIX.js +77 -0
  19. package/dist/accounts-LOJ4WLIX.js.map +1 -0
  20. package/dist/accounts-RYBDLQ6H.js +75 -0
  21. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  22. package/dist/accounts-UO4XBWM2.js +611 -0
  23. package/dist/accounts-UO4XBWM2.js.map +1 -0
  24. package/dist/actions-3AW3R63U.js +55 -0
  25. package/dist/actions-3AW3R63U.js.map +1 -0
  26. package/dist/active-entities-R6GZIO6Z.js +103 -0
  27. package/dist/active-entities-R6GZIO6Z.js.map +1 -0
  28. package/dist/activities-ESBF3GFS.js +74 -0
  29. package/dist/activities-ESBF3GFS.js.map +1 -0
  30. package/dist/ad-group-writes-I225OYDZ.js +170 -0
  31. package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
  32. package/dist/ad-groups-O35MWNF6.js +68 -0
  33. package/dist/ad-groups-O35MWNF6.js.map +1 -0
  34. package/dist/ad-writes-SS5YZO5W.js +174 -0
  35. package/dist/ad-writes-SS5YZO5W.js.map +1 -0
  36. package/dist/add-43DUOVNR.js +104 -0
  37. package/dist/add-43DUOVNR.js.map +1 -0
  38. package/dist/add-IE5WDELB.js +302 -0
  39. package/dist/add-IE5WDELB.js.map +1 -0
  40. package/dist/add-QZHAWUBA.js +97 -0
  41. package/dist/add-QZHAWUBA.js.map +1 -0
  42. package/dist/add-TGQIVVXH.js +105 -0
  43. package/dist/add-TGQIVVXH.js.map +1 -0
  44. package/dist/add-accounts-6QYPOPR2.js +91 -0
  45. package/dist/add-accounts-6QYPOPR2.js.map +1 -0
  46. package/dist/ads-AUSRB4GU.js +128 -0
  47. package/dist/ads-AUSRB4GU.js.map +1 -0
  48. package/dist/ads-COYOTEKE.js +77 -0
  49. package/dist/ads-COYOTEKE.js.map +1 -0
  50. package/dist/ads-DZ4N5INZ.js +40 -0
  51. package/dist/ads-DZ4N5INZ.js.map +1 -0
  52. package/dist/ads-XZCMSPM5.js +113 -0
  53. package/dist/ads-XZCMSPM5.js.map +1 -0
  54. package/dist/adsets-AKR75THA.js +176 -0
  55. package/dist/adsets-AKR75THA.js.map +1 -0
  56. package/dist/advertisers-52FMMBTQ.js +120 -0
  57. package/dist/advertisers-52FMMBTQ.js.map +1 -0
  58. package/dist/advertisers-BCGKUMEH.js +125 -0
  59. package/dist/advertisers-BCGKUMEH.js.map +1 -0
  60. package/dist/analytics-JPDBKETM.js +1980 -0
  61. package/dist/analytics-JPDBKETM.js.map +1 -0
  62. package/dist/analytics-YVQ6H4BG.js +433 -0
  63. package/dist/analytics-YVQ6H4BG.js.map +1 -0
  64. package/dist/animate-JXIT77Y5.js +480 -0
  65. package/dist/animate-JXIT77Y5.js.map +1 -0
  66. package/dist/assign-66NTWTR2.js +77 -0
  67. package/dist/assign-66NTWTR2.js.map +1 -0
  68. package/dist/audience-size-LVQJWQAS.js +94 -0
  69. package/dist/audience-size-LVQJWQAS.js.map +1 -0
  70. package/dist/audiences-DC3IOG34.js +85 -0
  71. package/dist/audiences-DC3IOG34.js.map +1 -0
  72. package/dist/audiences-NEW3LLQR.js +268 -0
  73. package/dist/audiences-NEW3LLQR.js.map +1 -0
  74. package/dist/audiences-NYGMBGQ3.js +79 -0
  75. package/dist/audiences-NYGMBGQ3.js.map +1 -0
  76. package/dist/audit-UIPMTI5C.js +88 -0
  77. package/dist/audit-UIPMTI5C.js.map +1 -0
  78. package/dist/audit-XGN2OFLN.js +151 -0
  79. package/dist/audit-XGN2OFLN.js.map +1 -0
  80. package/dist/autocomplete-LVPDV3JE.js +111 -0
  81. package/dist/autocomplete-LVPDV3JE.js.map +1 -0
  82. package/dist/avatars-S6NSLMJK.js +38 -0
  83. package/dist/avatars-S6NSLMJK.js.map +1 -0
  84. package/dist/bid-pricing-2LYULXU2.js +99 -0
  85. package/dist/bid-pricing-2LYULXU2.js.map +1 -0
  86. package/dist/brand-WWHUZ72R.js +22 -0
  87. package/dist/brand-WWHUZ72R.js.map +1 -0
  88. package/dist/brief-K3FILESK.js +492 -0
  89. package/dist/brief-K3FILESK.js.map +1 -0
  90. package/dist/businesses-J7OP7MSK.js +53 -0
  91. package/dist/businesses-J7OP7MSK.js.map +1 -0
  92. package/dist/campaign-groups-N4TZ2F3L.js +95 -0
  93. package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
  94. package/dist/campaign-writes-5XA727KI.js +170 -0
  95. package/dist/campaign-writes-5XA727KI.js.map +1 -0
  96. package/dist/campaign-writes-7YFRQIQT.js +165 -0
  97. package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
  98. package/dist/campaigns-JPYNVFQI.js +76 -0
  99. package/dist/campaigns-JPYNVFQI.js.map +1 -0
  100. package/dist/campaigns-L43ZUKAI.js +107 -0
  101. package/dist/campaigns-L43ZUKAI.js.map +1 -0
  102. package/dist/campaigns-OD7Z332M.js +109 -0
  103. package/dist/campaigns-OD7Z332M.js.map +1 -0
  104. package/dist/campaigns-R4DXIR2Q.js +110 -0
  105. package/dist/campaigns-R4DXIR2Q.js.map +1 -0
  106. package/dist/canvas-57K7AGAP.js +46 -0
  107. package/dist/canvas-57K7AGAP.js.map +1 -0
  108. package/dist/capabilities-FVTZAFPV.js +144 -0
  109. package/dist/capabilities-FVTZAFPV.js.map +1 -0
  110. package/dist/cards-7H32TNMO.js +85 -0
  111. package/dist/cards-7H32TNMO.js.map +1 -0
  112. package/dist/catalog-OTICZPJA.js +64 -0
  113. package/dist/catalog-OTICZPJA.js.map +1 -0
  114. package/dist/catalogs-ABCQLCDU.js +128 -0
  115. package/dist/catalogs-ABCQLCDU.js.map +1 -0
  116. package/dist/changes-7ZIGNUW6.js +135 -0
  117. package/dist/changes-7ZIGNUW6.js.map +1 -0
  118. package/dist/chatgpt-B3NHRJUE.js +47 -0
  119. package/dist/chatgpt-B3NHRJUE.js.map +1 -0
  120. package/dist/chats-E7DBRHBF.js +262 -0
  121. package/dist/chats-E7DBRHBF.js.map +1 -0
  122. package/dist/chunk-2CV7LX23.js +474 -0
  123. package/dist/chunk-2CV7LX23.js.map +1 -0
  124. package/dist/chunk-2HCI5BXB.js +479 -0
  125. package/dist/chunk-2HCI5BXB.js.map +1 -0
  126. package/dist/chunk-2SQJL7ZN.js +56 -0
  127. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  128. package/dist/chunk-2Y5V23PU.js +29 -0
  129. package/dist/chunk-2Y5V23PU.js.map +1 -0
  130. package/dist/chunk-32CPGJPL.js +149 -0
  131. package/dist/chunk-32CPGJPL.js.map +1 -0
  132. package/dist/chunk-3ACMDRSE.js +39 -0
  133. package/dist/chunk-3ACMDRSE.js.map +1 -0
  134. package/dist/chunk-3N4PZIIV.js +304 -0
  135. package/dist/chunk-3N4PZIIV.js.map +1 -0
  136. package/dist/chunk-3U7TDBIB.js +275 -0
  137. package/dist/chunk-3U7TDBIB.js.map +1 -0
  138. package/dist/chunk-3UDSYYND.js +42 -0
  139. package/dist/chunk-3UDSYYND.js.map +1 -0
  140. package/dist/chunk-3ZWWXAQZ.js +150 -0
  141. package/dist/chunk-3ZWWXAQZ.js.map +1 -0
  142. package/dist/chunk-4MH6LONO.js +274 -0
  143. package/dist/chunk-4MH6LONO.js.map +1 -0
  144. package/dist/chunk-4NZ47VXO.js +137 -0
  145. package/dist/chunk-4NZ47VXO.js.map +1 -0
  146. package/dist/chunk-564AEU2Q.js +541 -0
  147. package/dist/chunk-564AEU2Q.js.map +1 -0
  148. package/dist/chunk-5HYSKH77.js +315 -0
  149. package/dist/chunk-5HYSKH77.js.map +1 -0
  150. package/dist/chunk-5MBPIONY.js +29 -0
  151. package/dist/chunk-5MBPIONY.js.map +1 -0
  152. package/dist/chunk-5OVOLYY3.js +74 -0
  153. package/dist/chunk-5OVOLYY3.js.map +1 -0
  154. package/dist/chunk-5SJ3JNNY.js +6683 -0
  155. package/dist/chunk-5SJ3JNNY.js.map +1 -0
  156. package/dist/chunk-66USKCVY.js +4410 -0
  157. package/dist/chunk-66USKCVY.js.map +1 -0
  158. package/dist/chunk-6I7SYEYN.js +166 -0
  159. package/dist/chunk-6I7SYEYN.js.map +1 -0
  160. package/dist/chunk-6O7ISBC7.js +65 -0
  161. package/dist/chunk-6O7ISBC7.js.map +1 -0
  162. package/dist/chunk-752S7JF6.js +35 -0
  163. package/dist/chunk-752S7JF6.js.map +1 -0
  164. package/dist/chunk-77DN7R35.js +228 -0
  165. package/dist/chunk-77DN7R35.js.map +1 -0
  166. package/dist/chunk-7F7MFMLI.js +175 -0
  167. package/dist/chunk-7F7MFMLI.js.map +1 -0
  168. package/dist/chunk-7THBBTJJ.js +183 -0
  169. package/dist/chunk-7THBBTJJ.js.map +1 -0
  170. package/dist/chunk-7XU3HKMX.js +1599 -0
  171. package/dist/chunk-7XU3HKMX.js.map +1 -0
  172. package/dist/chunk-AEA5JV2X.js +92 -0
  173. package/dist/chunk-AEA5JV2X.js.map +1 -0
  174. package/dist/chunk-AFJGYJ7Z.js +45 -0
  175. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  176. package/dist/chunk-AR7PU7BB.js +76 -0
  177. package/dist/chunk-AR7PU7BB.js.map +1 -0
  178. package/dist/chunk-ASL7JFBD.js +96 -0
  179. package/dist/chunk-ASL7JFBD.js.map +1 -0
  180. package/dist/chunk-AUSKKFVH.js +84 -0
  181. package/dist/chunk-AUSKKFVH.js.map +1 -0
  182. package/dist/chunk-B52DCYL2.js +159 -0
  183. package/dist/chunk-B52DCYL2.js.map +1 -0
  184. package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
  185. package/dist/chunk-BVM5IRZW.js.map +1 -0
  186. package/dist/chunk-CAMX6OHF.js +3182 -0
  187. package/dist/chunk-CAMX6OHF.js.map +1 -0
  188. package/dist/chunk-CYBLKMXQ.js +310 -0
  189. package/dist/chunk-CYBLKMXQ.js.map +1 -0
  190. package/dist/chunk-CZENWCBS.js +333 -0
  191. package/dist/chunk-CZENWCBS.js.map +1 -0
  192. package/dist/chunk-D5FY4FAK.js +24 -0
  193. package/dist/chunk-D5FY4FAK.js.map +1 -0
  194. package/dist/chunk-DGCUPJZD.js +39 -0
  195. package/dist/chunk-DGCUPJZD.js.map +1 -0
  196. package/dist/chunk-DNCLWSHO.js +41 -0
  197. package/dist/chunk-DNCLWSHO.js.map +1 -0
  198. package/dist/chunk-DX4GIDO7.js +296 -0
  199. package/dist/chunk-DX4GIDO7.js.map +1 -0
  200. package/dist/chunk-EDLZGTGN.js +216 -0
  201. package/dist/chunk-EDLZGTGN.js.map +1 -0
  202. package/dist/chunk-EDNX3AOS.js +76 -0
  203. package/dist/chunk-EDNX3AOS.js.map +1 -0
  204. package/dist/chunk-EF5DP6EB.js +52 -0
  205. package/dist/chunk-EF5DP6EB.js.map +1 -0
  206. package/dist/chunk-ERSX3MKH.js +34 -0
  207. package/dist/chunk-ERSX3MKH.js.map +1 -0
  208. package/dist/chunk-F3IJSR7O.js +346 -0
  209. package/dist/chunk-F3IJSR7O.js.map +1 -0
  210. package/dist/chunk-FKOECEVC.js +126 -0
  211. package/dist/chunk-FKOECEVC.js.map +1 -0
  212. package/dist/chunk-FYWWTMXP.js +2902 -0
  213. package/dist/chunk-FYWWTMXP.js.map +1 -0
  214. package/dist/chunk-G7AFVTUS.js +106 -0
  215. package/dist/chunk-G7AFVTUS.js.map +1 -0
  216. package/dist/chunk-GIW7ABMM.js +74 -0
  217. package/dist/chunk-GIW7ABMM.js.map +1 -0
  218. package/dist/chunk-GIWHHCD6.js +145 -0
  219. package/dist/chunk-GIWHHCD6.js.map +1 -0
  220. package/dist/chunk-GPZH5ASB.js +3151 -0
  221. package/dist/chunk-GPZH5ASB.js.map +1 -0
  222. package/dist/chunk-GRQ2AXDX.js +9 -0
  223. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  224. package/dist/chunk-GXDLWBOY.js +73 -0
  225. package/dist/chunk-GXDLWBOY.js.map +1 -0
  226. package/dist/chunk-GYABNLWW.js +629 -0
  227. package/dist/chunk-GYABNLWW.js.map +1 -0
  228. package/dist/chunk-H7MLHG2I.js +94 -0
  229. package/dist/chunk-H7MLHG2I.js.map +1 -0
  230. package/dist/chunk-H7XVKLIY.js +206 -0
  231. package/dist/chunk-H7XVKLIY.js.map +1 -0
  232. package/dist/chunk-HAE4WWFQ.js +455 -0
  233. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  234. package/dist/chunk-HDHWIEJJ.js +136 -0
  235. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  236. package/dist/chunk-HJTIBTF7.js +98 -0
  237. package/dist/chunk-HJTIBTF7.js.map +1 -0
  238. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  239. package/dist/chunk-HLXWKMTK.js.map +1 -0
  240. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  241. package/dist/chunk-HREWXNTO.js.map +1 -0
  242. package/dist/chunk-HYXKRNRV.js +176 -0
  243. package/dist/chunk-HYXKRNRV.js.map +1 -0
  244. package/dist/chunk-I3DIZWN5.js +97 -0
  245. package/dist/chunk-I3DIZWN5.js.map +1 -0
  246. package/dist/chunk-IJMWEO4P.js +57 -0
  247. package/dist/chunk-IJMWEO4P.js.map +1 -0
  248. package/dist/chunk-IOCSDFF2.js +23992 -0
  249. package/dist/chunk-IOCSDFF2.js.map +1 -0
  250. package/dist/chunk-IVIJJXXT.js +62 -0
  251. package/dist/chunk-IVIJJXXT.js.map +1 -0
  252. package/dist/chunk-J57GWTPK.js +106 -0
  253. package/dist/chunk-J57GWTPK.js.map +1 -0
  254. package/dist/chunk-JPK34QPS.js +134 -0
  255. package/dist/chunk-JPK34QPS.js.map +1 -0
  256. package/dist/chunk-JRCFCIE3.js +188 -0
  257. package/dist/chunk-JRCFCIE3.js.map +1 -0
  258. package/dist/chunk-JUAIGJ2A.js +76 -0
  259. package/dist/chunk-JUAIGJ2A.js.map +1 -0
  260. package/dist/chunk-K5OQES4V.js +58 -0
  261. package/dist/chunk-K5OQES4V.js.map +1 -0
  262. package/dist/chunk-KBS5GH4T.js +1626 -0
  263. package/dist/chunk-KBS5GH4T.js.map +1 -0
  264. package/dist/chunk-KIGGMKAE.js +66 -0
  265. package/dist/chunk-KIGGMKAE.js.map +1 -0
  266. package/dist/chunk-KKJ4KJCW.js +29 -0
  267. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  268. package/dist/chunk-KLK6KQLQ.js +55 -0
  269. package/dist/chunk-KLK6KQLQ.js.map +1 -0
  270. package/dist/chunk-KUZFWMJN.js +207 -0
  271. package/dist/chunk-KUZFWMJN.js.map +1 -0
  272. package/dist/chunk-KXGG6EQM.js +382 -0
  273. package/dist/chunk-KXGG6EQM.js.map +1 -0
  274. package/dist/chunk-KXRKPZZY.js +169 -0
  275. package/dist/chunk-KXRKPZZY.js.map +1 -0
  276. package/dist/chunk-KZUHRZ2C.js +5187 -0
  277. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  278. package/dist/chunk-L45A3IYV.js +1079 -0
  279. package/dist/chunk-L45A3IYV.js.map +1 -0
  280. package/dist/chunk-LA6PPSNA.js +65 -0
  281. package/dist/chunk-LA6PPSNA.js.map +1 -0
  282. package/dist/chunk-LEIQAHWF.js +25 -0
  283. package/dist/chunk-LEIQAHWF.js.map +1 -0
  284. package/dist/chunk-LERWCRY5.js +297 -0
  285. package/dist/chunk-LERWCRY5.js.map +1 -0
  286. package/dist/chunk-M6UNISGO.js +66 -0
  287. package/dist/chunk-M6UNISGO.js.map +1 -0
  288. package/dist/chunk-MGKHFGLV.js +75 -0
  289. package/dist/chunk-MGKHFGLV.js.map +1 -0
  290. package/dist/chunk-MZWC6HHA.js +455 -0
  291. package/dist/chunk-MZWC6HHA.js.map +1 -0
  292. package/dist/chunk-N3XJ434P.js +197 -0
  293. package/dist/chunk-N3XJ434P.js.map +1 -0
  294. package/dist/chunk-NFSLRRIE.js +77 -0
  295. package/dist/chunk-NFSLRRIE.js.map +1 -0
  296. package/dist/chunk-NHU33T2S.js +60 -0
  297. package/dist/chunk-NHU33T2S.js.map +1 -0
  298. package/dist/chunk-NJEZM4OB.js +51 -0
  299. package/dist/chunk-NJEZM4OB.js.map +1 -0
  300. package/dist/chunk-O6QKCJE4.js +455 -0
  301. package/dist/chunk-O6QKCJE4.js.map +1 -0
  302. package/dist/chunk-OFFAMC5H.js +225 -0
  303. package/dist/chunk-OFFAMC5H.js.map +1 -0
  304. package/dist/chunk-OHGTCFFE.js +57 -0
  305. package/dist/chunk-OHGTCFFE.js.map +1 -0
  306. package/dist/chunk-P4NSJS54.js +20 -0
  307. package/dist/chunk-P4NSJS54.js.map +1 -0
  308. package/dist/chunk-P5T7OZKV.js +26 -0
  309. package/dist/chunk-P5T7OZKV.js.map +1 -0
  310. package/dist/chunk-PFBQERWX.js +10 -0
  311. package/dist/chunk-PFBQERWX.js.map +1 -0
  312. package/dist/chunk-PKTLHYH4.js +509 -0
  313. package/dist/chunk-PKTLHYH4.js.map +1 -0
  314. package/dist/chunk-PUPEGICD.js +103 -0
  315. package/dist/chunk-PUPEGICD.js.map +1 -0
  316. package/dist/chunk-Q6ULQMWG.js +41 -0
  317. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  318. package/dist/chunk-QO23YHLK.js +84 -0
  319. package/dist/chunk-QO23YHLK.js.map +1 -0
  320. package/dist/chunk-QSGIWV4P.js +337 -0
  321. package/dist/chunk-QSGIWV4P.js.map +1 -0
  322. package/dist/chunk-R5OQM7FF.js +179 -0
  323. package/dist/chunk-R5OQM7FF.js.map +1 -0
  324. package/dist/chunk-RFB6RYKA.js +111 -0
  325. package/dist/chunk-RFB6RYKA.js.map +1 -0
  326. package/dist/chunk-RGIXQEGJ.js +502 -0
  327. package/dist/chunk-RGIXQEGJ.js.map +1 -0
  328. package/dist/chunk-RODLBWIR.js +592 -0
  329. package/dist/chunk-RODLBWIR.js.map +1 -0
  330. package/dist/chunk-S4LZ7KTG.js +160 -0
  331. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  332. package/dist/chunk-SHTESUB6.js +1442 -0
  333. package/dist/chunk-SHTESUB6.js.map +1 -0
  334. package/dist/chunk-SJH4EOZH.js +23 -0
  335. package/dist/chunk-SJH4EOZH.js.map +1 -0
  336. package/dist/chunk-SLB46MSS.js +64 -0
  337. package/dist/chunk-SLB46MSS.js.map +1 -0
  338. package/dist/chunk-SMIENBNX.js +6212 -0
  339. package/dist/chunk-SMIENBNX.js.map +1 -0
  340. package/dist/chunk-T7GT22KA.js +494 -0
  341. package/dist/chunk-T7GT22KA.js.map +1 -0
  342. package/dist/chunk-T7M4WFNV.js +172 -0
  343. package/dist/chunk-T7M4WFNV.js.map +1 -0
  344. package/dist/chunk-TLQ23DDW.js +19 -0
  345. package/dist/chunk-TLQ23DDW.js.map +1 -0
  346. package/dist/chunk-TMIDUSOR.js +665 -0
  347. package/dist/chunk-TMIDUSOR.js.map +1 -0
  348. package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
  349. package/dist/chunk-U6VRBDNQ.js +1830 -0
  350. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  351. package/dist/chunk-U7BBXM67.js +1743 -0
  352. package/dist/chunk-U7BBXM67.js.map +1 -0
  353. package/dist/chunk-UI6BKYQD.js +225 -0
  354. package/dist/chunk-UI6BKYQD.js.map +1 -0
  355. package/dist/chunk-UOI5S62H.js +846 -0
  356. package/dist/chunk-UOI5S62H.js.map +1 -0
  357. package/dist/chunk-USL5ARRE.js +26 -0
  358. package/dist/chunk-USL5ARRE.js.map +1 -0
  359. package/dist/chunk-UYC45JNS.js +139 -0
  360. package/dist/chunk-UYC45JNS.js.map +1 -0
  361. package/dist/chunk-VNKVBY54.js +363 -0
  362. package/dist/chunk-VNKVBY54.js.map +1 -0
  363. package/dist/chunk-VS4C7VAR.js +533 -0
  364. package/dist/chunk-VS4C7VAR.js.map +1 -0
  365. package/dist/chunk-W4W4ZRBP.js +191 -0
  366. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  367. package/dist/chunk-WN4KX7GE.js +25 -0
  368. package/dist/chunk-WN4KX7GE.js.map +1 -0
  369. package/dist/chunk-WNFTXSGR.js +111 -0
  370. package/dist/chunk-WNFTXSGR.js.map +1 -0
  371. package/dist/chunk-WOTDHRNF.js +2109 -0
  372. package/dist/chunk-WOTDHRNF.js.map +1 -0
  373. package/dist/chunk-XGWKTYXQ.js +67 -0
  374. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  375. package/dist/chunk-XIGIJJSF.js +66 -0
  376. package/dist/chunk-XIGIJJSF.js.map +1 -0
  377. package/dist/chunk-XNUXB63I.js +817 -0
  378. package/dist/chunk-XNUXB63I.js.map +1 -0
  379. package/dist/chunk-XQ3CCNJD.js +610 -0
  380. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  381. package/dist/chunk-XX6ZMCY5.js +4227 -0
  382. package/dist/chunk-XX6ZMCY5.js.map +1 -0
  383. package/dist/chunk-Y362QH54.js +98 -0
  384. package/dist/chunk-Y362QH54.js.map +1 -0
  385. package/dist/chunk-Y4T6ATDQ.js +74 -0
  386. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  387. package/dist/chunk-YQSBHWOI.js +41 -0
  388. package/dist/chunk-YU26SDNT.js +46 -0
  389. package/dist/chunk-YU26SDNT.js.map +1 -0
  390. package/dist/chunk-YULENNA7.js +501 -0
  391. package/dist/chunk-YULENNA7.js.map +1 -0
  392. package/dist/chunk-YYSZYSAG.js +150 -0
  393. package/dist/chunk-YYSZYSAG.js.map +1 -0
  394. package/dist/chunk-Z3ENMCFE.js +94 -0
  395. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  396. package/dist/chunk-ZH7ZM3ZM.js +125 -0
  397. package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
  398. package/dist/chunk-ZIXHS6AM.js +42 -0
  399. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  400. package/dist/chunk-ZLLJKSNS.js +96 -0
  401. package/dist/chunk-ZLLJKSNS.js.map +1 -0
  402. package/dist/claim-LF6VQ7OR.js +197 -0
  403. package/dist/claim-LF6VQ7OR.js.map +1 -0
  404. package/dist/cli.js +104 -70026
  405. package/dist/cli.js.map +1 -1
  406. package/dist/client-26SAJ46D.js +19 -0
  407. package/dist/code-MOWYJMDH.js +76 -0
  408. package/dist/code-MOWYJMDH.js.map +1 -0
  409. package/dist/companies-6HSK5BLK.js +195 -0
  410. package/dist/companies-6HSK5BLK.js.map +1 -0
  411. package/dist/complete-2PUAFQEC.js +81 -0
  412. package/dist/complete-2PUAFQEC.js.map +1 -0
  413. package/dist/config-X6GKOVQ6.js +88 -0
  414. package/dist/config-X6GKOVQ6.js.map +1 -0
  415. package/dist/connect-RXPMAJQI.js +42 -0
  416. package/dist/content-UYZC4AKN.js +85 -0
  417. package/dist/content-UYZC4AKN.js.map +1 -0
  418. package/dist/conversation-Y3NB2VDI.js +93 -0
  419. package/dist/conversation-Y3NB2VDI.js.map +1 -0
  420. package/dist/conversion-report-R4GJWWTK.js +125 -0
  421. package/dist/conversion-report-R4GJWWTK.js.map +1 -0
  422. package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
  423. package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
  424. package/dist/conversion-writes-WHFFUWWL.js +120 -0
  425. package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
  426. package/dist/conversions-K7C32DPW.js +135 -0
  427. package/dist/conversions-K7C32DPW.js.map +1 -0
  428. package/dist/conversions-OXJAX5GB.js +76 -0
  429. package/dist/conversions-OXJAX5GB.js.map +1 -0
  430. package/dist/countries-PBXNB3BR.js +82 -0
  431. package/dist/countries-PBXNB3BR.js.map +1 -0
  432. package/dist/create-AJ4KPSJ4.js +59 -0
  433. package/dist/create-AJ4KPSJ4.js.map +1 -0
  434. package/dist/create-ALKOAD5J.js +138 -0
  435. package/dist/create-ALKOAD5J.js.map +1 -0
  436. package/dist/create-HTKZMXKB.js +207 -0
  437. package/dist/create-HTKZMXKB.js.map +1 -0
  438. package/dist/create-TZMAOFBR.js +236 -0
  439. package/dist/create-TZMAOFBR.js.map +1 -0
  440. package/dist/creatives-BJYJFVXJ.js +51 -0
  441. package/dist/creatives-BJYJFVXJ.js.map +1 -0
  442. package/dist/creatives-OZHVU4WB.js +182 -0
  443. package/dist/creatives-OZHVU4WB.js.map +1 -0
  444. package/dist/creatives-VMGY5SU4.js +87 -0
  445. package/dist/creatives-VMGY5SU4.js.map +1 -0
  446. package/dist/credentials-FY4UH6TF.js +287 -0
  447. package/dist/credentials-FY4UH6TF.js.map +1 -0
  448. package/dist/critique-B3H7QFM2.js +1449 -0
  449. package/dist/critique-B3H7QFM2.js.map +1 -0
  450. package/dist/critique-YZBOA27H.js +216 -0
  451. package/dist/critique-YZBOA27H.js.map +1 -0
  452. package/dist/crm-2IBLUHDB.js +318 -0
  453. package/dist/crm-2IBLUHDB.js.map +1 -0
  454. package/dist/crm-YMYO4U53.js +224 -0
  455. package/dist/crm-YMYO4U53.js.map +1 -0
  456. package/dist/crop-U3AD4DDR.js +113 -0
  457. package/dist/crop-U3AD4DDR.js.map +1 -0
  458. package/dist/currency-S6KWZSZ6.js +88 -0
  459. package/dist/currency-S6KWZSZ6.js.map +1 -0
  460. package/dist/custom-conversions-FABS6YVT.js +125 -0
  461. package/dist/custom-conversions-FABS6YVT.js.map +1 -0
  462. package/dist/customers-P6LLLJHK.js +56 -0
  463. package/dist/decide-YTHCBKM6.js +199 -0
  464. package/dist/decide-YTHCBKM6.js.map +1 -0
  465. package/dist/delete-B2TDEW7H.js +63 -0
  466. package/dist/delete-B2TDEW7H.js.map +1 -0
  467. package/dist/delete-DZUDLYPC.js +69 -0
  468. package/dist/delete-DZUDLYPC.js.map +1 -0
  469. package/dist/delete-NZGZP4YP.js +71 -0
  470. package/dist/delete-NZGZP4YP.js.map +1 -0
  471. package/dist/delete-SDOZNDWQ.js +54 -0
  472. package/dist/delete-SDOZNDWQ.js.map +1 -0
  473. package/dist/delete-VQMU56OH.js +71 -0
  474. package/dist/delete-VQMU56OH.js.map +1 -0
  475. package/dist/delete-WKQPMVAM.js +66 -0
  476. package/dist/delete-WKQPMVAM.js.map +1 -0
  477. package/dist/demographics-Q3DCXULY.js +138 -0
  478. package/dist/demographics-Q3DCXULY.js.map +1 -0
  479. package/dist/describe-JNTCQZNL.js +97 -0
  480. package/dist/describe-JNTCQZNL.js.map +1 -0
  481. package/dist/describe-MT4334NG.js +97 -0
  482. package/dist/describe-MT4334NG.js.map +1 -0
  483. package/dist/dimensions-FEZUJRAG.js +101 -0
  484. package/dist/dimensions-FEZUJRAG.js.map +1 -0
  485. package/dist/discard-NEZM5CHF.js +66 -0
  486. package/dist/discard-NEZM5CHF.js.map +1 -0
  487. package/dist/discover-4GD7QSF5.js +93 -0
  488. package/dist/discover-4GD7QSF5.js.map +1 -0
  489. package/dist/discover-6K3IOYXR.js +172 -0
  490. package/dist/discover-6K3IOYXR.js.map +1 -0
  491. package/dist/domain-7Y256IDR.js +98 -0
  492. package/dist/domain-7Y256IDR.js.map +1 -0
  493. package/dist/download-L27HWEOE.js +299 -0
  494. package/dist/download-L27HWEOE.js.map +1 -0
  495. package/dist/draft-25G2P2TE.js +281 -0
  496. package/dist/draft-25G2P2TE.js.map +1 -0
  497. package/dist/draft-F6TUGXAY.js +307 -0
  498. package/dist/draft-F6TUGXAY.js.map +1 -0
  499. package/dist/draft-KLULNBWP.js +233 -0
  500. package/dist/draft-KLULNBWP.js.map +1 -0
  501. package/dist/draft-LY5ZPF73.js +217 -0
  502. package/dist/draft-LY5ZPF73.js.map +1 -0
  503. package/dist/draft-M4ZHDQ46.js +306 -0
  504. package/dist/draft-M4ZHDQ46.js.map +1 -0
  505. package/dist/draft-MI7RWY2K.js +100 -0
  506. package/dist/draft-MI7RWY2K.js.map +1 -0
  507. package/dist/draft-P4IVYTY3.js +103 -0
  508. package/dist/draft-P4IVYTY3.js.map +1 -0
  509. package/dist/draft-QQMCVDDS.js +328 -0
  510. package/dist/draft-QQMCVDDS.js.map +1 -0
  511. package/dist/engine/index.d.ts +213 -127
  512. package/dist/engine/index.js +18 -4
  513. package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
  514. package/dist/env-FBTHZKGN.js.map +1 -0
  515. package/dist/experiment-HDYTJPUY.js +1397 -0
  516. package/dist/experiment-HDYTJPUY.js.map +1 -0
  517. package/dist/export-TS5GYEMA.js +168 -0
  518. package/dist/export-TS5GYEMA.js.map +1 -0
  519. package/dist/extract-QVQFUOIK.js +113 -0
  520. package/dist/extract-QVQFUOIK.js.map +1 -0
  521. package/dist/facets-7MBSM7BP.js +114 -0
  522. package/dist/facets-7MBSM7BP.js.map +1 -0
  523. package/dist/favorites-7QP7BY5K.js +178 -0
  524. package/dist/favorites-7QP7BY5K.js.map +1 -0
  525. package/dist/feed-EETRO2FG.js +177 -0
  526. package/dist/feed-EETRO2FG.js.map +1 -0
  527. package/dist/feedback-ZOUL22TP.js +66 -0
  528. package/dist/feedback-ZOUL22TP.js.map +1 -0
  529. package/dist/feedback-record-XFFJRKS6.js +177 -0
  530. package/dist/feedback-record-XFFJRKS6.js.map +1 -0
  531. package/dist/fetch-QE3EB756.js +176 -0
  532. package/dist/fetch-QE3EB756.js.map +1 -0
  533. package/dist/fetch-Z7O3ZL4D.js +139 -0
  534. package/dist/fetch-Z7O3ZL4D.js.map +1 -0
  535. package/dist/find-KAQ6JDMO.js +134 -0
  536. package/dist/find-KAQ6JDMO.js.map +1 -0
  537. package/dist/fit-MY5GVZZZ.js +45 -0
  538. package/dist/fit-MY5GVZZZ.js.map +1 -0
  539. package/dist/flows-C67KEMDU.js +247 -0
  540. package/dist/flows-C67KEMDU.js.map +1 -0
  541. package/dist/follow-IX4XVK5Y.js +94 -0
  542. package/dist/follow-IX4XVK5Y.js.map +1 -0
  543. package/dist/follow-competitors-UZBUOYTH.js +112 -0
  544. package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
  545. package/dist/following-VGOIUCIZ.js +113 -0
  546. package/dist/following-VGOIUCIZ.js.map +1 -0
  547. package/dist/fonts-UR7XZ5XZ.js +34 -0
  548. package/dist/fonts-UR7XZ5XZ.js.map +1 -0
  549. package/dist/forecast-3F4SZNAK.js +104 -0
  550. package/dist/forecast-3F4SZNAK.js.map +1 -0
  551. package/dist/forecast-K5E7CTKX.js +168 -0
  552. package/dist/forecast-K5E7CTKX.js.map +1 -0
  553. package/dist/funding-H5YO37OW.js +85 -0
  554. package/dist/funding-H5YO37OW.js.map +1 -0
  555. package/dist/funnel-2PPEPAMY.js +394 -0
  556. package/dist/funnel-2PPEPAMY.js.map +1 -0
  557. package/dist/ga4-YHJ2XMLC.js +55 -0
  558. package/dist/ga4-YHJ2XMLC.js.map +1 -0
  559. package/dist/generate-M2ZX5DMI.js +262 -0
  560. package/dist/generate-M2ZX5DMI.js.map +1 -0
  561. package/dist/get-4EYKCZ6F.js +59 -0
  562. package/dist/get-4EYKCZ6F.js.map +1 -0
  563. package/dist/get-637GALM2.js +63 -0
  564. package/dist/get-637GALM2.js.map +1 -0
  565. package/dist/get-AZARFR6O.js +61 -0
  566. package/dist/get-AZARFR6O.js.map +1 -0
  567. package/dist/get-BPMEHRUG.js +56 -0
  568. package/dist/get-BPMEHRUG.js.map +1 -0
  569. package/dist/get-MQ6MMIZ7.js +78 -0
  570. package/dist/get-MQ6MMIZ7.js.map +1 -0
  571. package/dist/get-N4BPOQCB.js +63 -0
  572. package/dist/get-N4BPOQCB.js.map +1 -0
  573. package/dist/get-RPZHLQ56.js +92 -0
  574. package/dist/get-RPZHLQ56.js.map +1 -0
  575. package/dist/gif-6PRTB2VR.js +94 -0
  576. package/dist/gif-6PRTB2VR.js.map +1 -0
  577. package/dist/google-4XAYE4OI.js +3190 -0
  578. package/dist/google-4XAYE4OI.js.map +1 -0
  579. package/dist/google-52JRH7X3.js +136 -0
  580. package/dist/google-52JRH7X3.js.map +1 -0
  581. package/dist/google-ads-PWX7OF5Z.js +195 -0
  582. package/dist/google-ads-PWX7OF5Z.js.map +1 -0
  583. package/dist/group-AAZ5QKC3.js +43 -0
  584. package/dist/group-AAZ5QKC3.js.map +1 -0
  585. package/dist/group-GSYCZORC.js +43 -0
  586. package/dist/group-GSYCZORC.js.map +1 -0
  587. package/dist/gsc-TS5T7ML2.js +30 -0
  588. package/dist/gsc-TS5T7ML2.js.map +1 -0
  589. package/dist/history-EW6LFFCX.js +67 -0
  590. package/dist/history-EW6LFFCX.js.map +1 -0
  591. package/dist/history-XI5ABCFO.js +133 -0
  592. package/dist/history-XI5ABCFO.js.map +1 -0
  593. package/dist/hubspot-AVUOILRE.js +779 -0
  594. package/dist/hubspot-AVUOILRE.js.map +1 -0
  595. package/dist/icon-K75KI6BV.js +137 -0
  596. package/dist/icon-K75KI6BV.js.map +1 -0
  597. package/dist/ideas-UCPV3KTM.js +35 -0
  598. package/dist/ideas-UCPV3KTM.js.map +1 -0
  599. package/dist/images-CD53I2W5.js +90 -0
  600. package/dist/images-CD53I2W5.js.map +1 -0
  601. package/dist/improve-L3BW4EQG.js +86 -0
  602. package/dist/improve-L3BW4EQG.js.map +1 -0
  603. package/dist/ingest-KRJOYTCQ.js +107 -0
  604. package/dist/ingest-KRJOYTCQ.js.map +1 -0
  605. package/dist/ingest-WE3SPPND.js +23 -0
  606. package/dist/ingest-WE3SPPND.js.map +1 -0
  607. package/dist/insights-PELVD4RY.js +122 -0
  608. package/dist/insights-PELVD4RY.js.map +1 -0
  609. package/dist/insights-XCA4BUJW.js +423 -0
  610. package/dist/insights-XCA4BUJW.js.map +1 -0
  611. package/dist/inspect-QKETG5UJ.js +189 -0
  612. package/dist/inspect-QKETG5UJ.js.map +1 -0
  613. package/dist/inspiration-Y2J2PUPC.js +53 -0
  614. package/dist/inspiration-Y2J2PUPC.js.map +1 -0
  615. package/dist/intent-YJOJGNVJ.js +95 -0
  616. package/dist/intent-YJOJGNVJ.js.map +1 -0
  617. package/dist/job-E2U4FS5P.js +202 -0
  618. package/dist/job-E2U4FS5P.js.map +1 -0
  619. package/dist/job-create-DFYCHVQ7.js +109 -0
  620. package/dist/job-create-DFYCHVQ7.js.map +1 -0
  621. package/dist/job-status-FFPMTSHB.js +74 -0
  622. package/dist/job-status-FFPMTSHB.js.map +1 -0
  623. package/dist/keep-GYZS2UTL.js +78 -0
  624. package/dist/keep-GYZS2UTL.js.map +1 -0
  625. package/dist/keyword-gap-QU7O7UKC.js +130 -0
  626. package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
  627. package/dist/keyword-metrics-HLCM3QU7.js +197 -0
  628. package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
  629. package/dist/keywords-for-site-BDKPQKWB.js +128 -0
  630. package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
  631. package/dist/landing-4K6XYNFM.js +28 -0
  632. package/dist/landing-4K6XYNFM.js.map +1 -0
  633. package/dist/landings-F7LOAEJE.js +151 -0
  634. package/dist/landings-F7LOAEJE.js.map +1 -0
  635. package/dist/languages-P3ZM6R2A.js +40 -0
  636. package/dist/languages-P3ZM6R2A.js.map +1 -0
  637. package/dist/languages-XEJKTIFP.js +55 -0
  638. package/dist/languages-XEJKTIFP.js.map +1 -0
  639. package/dist/launches-TCFAYUA5.js +19 -0
  640. package/dist/launches-TCFAYUA5.js.map +1 -0
  641. package/dist/layerize-ZSKFIPZA.js +190 -0
  642. package/dist/layerize-ZSKFIPZA.js.map +1 -0
  643. package/dist/leads-GDF4S2AM.js +90 -0
  644. package/dist/leads-GDF4S2AM.js.map +1 -0
  645. package/dist/leads-TPB5OFSQ.js +293 -0
  646. package/dist/leads-TPB5OFSQ.js.map +1 -0
  647. package/dist/learn-NMFEA5H5.js +203 -0
  648. package/dist/learn-NMFEA5H5.js.map +1 -0
  649. package/dist/library-IP2UKNRU.js +109 -0
  650. package/dist/library-IP2UKNRU.js.map +1 -0
  651. package/dist/lighthouse-57XBJRCO.js +75 -0
  652. package/dist/lighthouse-57XBJRCO.js.map +1 -0
  653. package/dist/line-item-writes-O6SSS5NQ.js +208 -0
  654. package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
  655. package/dist/line-items-ZZAKH3YZ.js +103 -0
  656. package/dist/line-items-ZZAKH3YZ.js.map +1 -0
  657. package/dist/link-CRY57R3E.js +64 -0
  658. package/dist/link-CRY57R3E.js.map +1 -0
  659. package/dist/linkedin-WC7LGYPP.js +1008 -0
  660. package/dist/linkedin-WC7LGYPP.js.map +1 -0
  661. package/dist/list-6IKPWQGG.js +57 -0
  662. package/dist/list-6IKPWQGG.js.map +1 -0
  663. package/dist/list-CAUH3BMG.js +65 -0
  664. package/dist/list-CAUH3BMG.js.map +1 -0
  665. package/dist/list-CWAKX5TH.js +63 -0
  666. package/dist/list-CWAKX5TH.js.map +1 -0
  667. package/dist/list-FJ5FSVL6.js +151 -0
  668. package/dist/list-FJ5FSVL6.js.map +1 -0
  669. package/dist/list-GTOSN7DP.js +50 -0
  670. package/dist/list-GTOSN7DP.js.map +1 -0
  671. package/dist/list-HLJP4NVE.js +51 -0
  672. package/dist/list-HLJP4NVE.js.map +1 -0
  673. package/dist/list-LCUPF7EF.js +76 -0
  674. package/dist/list-LCUPF7EF.js.map +1 -0
  675. package/dist/list-NH4ZRZTL.js +303 -0
  676. package/dist/list-NH4ZRZTL.js.map +1 -0
  677. package/dist/locations-2BYWKIYA.js +67 -0
  678. package/dist/locations-2BYWKIYA.js.map +1 -0
  679. package/dist/locations-LVVDOSXO.js +40 -0
  680. package/dist/locations-LVVDOSXO.js.map +1 -0
  681. package/dist/log-6JOWOY5G.js +92 -0
  682. package/dist/log-6JOWOY5G.js.map +1 -0
  683. package/dist/logo-AJK2TDQU.js +18 -0
  684. package/dist/logo-AJK2TDQU.js.map +1 -0
  685. package/dist/lookup-H5GEM77H.js +22 -0
  686. package/dist/lookup-H5GEM77H.js.map +1 -0
  687. package/dist/make-Q2AMLCWE.js +640 -0
  688. package/dist/make-Q2AMLCWE.js.map +1 -0
  689. package/dist/map-4KOYFHAN.js +404 -0
  690. package/dist/map-4KOYFHAN.js.map +1 -0
  691. package/dist/mcp-LSS2DHYL.js +463 -0
  692. package/dist/mcp-LSS2DHYL.js.map +1 -0
  693. package/dist/media-JBCN6V4X.js +15 -0
  694. package/dist/media-JBCN6V4X.js.map +1 -0
  695. package/dist/media-RAGEJTZX.js +89 -0
  696. package/dist/media-RAGEJTZX.js.map +1 -0
  697. package/dist/media-sources-GSPAV7HT.js +32 -0
  698. package/dist/media-sources-GSPAV7HT.js.map +1 -0
  699. package/dist/members-GUUVEK2Y.js +44 -0
  700. package/dist/members-GUUVEK2Y.js.map +1 -0
  701. package/dist/meta-Z37ZR3PJ.js +69 -0
  702. package/dist/meta-Z37ZR3PJ.js.map +1 -0
  703. package/dist/metrics-KW6SDULI.js +152 -0
  704. package/dist/metrics-KW6SDULI.js.map +1 -0
  705. package/dist/models-5J4WFUD3.js +155 -0
  706. package/dist/models-5J4WFUD3.js.map +1 -0
  707. package/dist/normalize-DSFVTRXN.js +806 -0
  708. package/dist/normalize-DSFVTRXN.js.map +1 -0
  709. package/dist/normalize-EUDI5HEM.js +141 -0
  710. package/dist/normalize-EUDI5HEM.js.map +1 -0
  711. package/dist/options-P4PPJQH4.js +121 -0
  712. package/dist/options-P4PPJQH4.js.map +1 -0
  713. package/dist/output-DTCLVPUF.js +24 -0
  714. package/dist/output-DTCLVPUF.js.map +1 -0
  715. package/dist/page-N2ZO3O7F.js +105 -0
  716. package/dist/page-N2ZO3O7F.js.map +1 -0
  717. package/dist/pages-FQ4CBAJ2.js +66 -0
  718. package/dist/pages-FQ4CBAJ2.js.map +1 -0
  719. package/dist/performance-A66LYIZX.js +24 -0
  720. package/dist/performance-A66LYIZX.js.map +1 -0
  721. package/dist/pinterest-NV5XTNJE.js +96 -0
  722. package/dist/pinterest-NV5XTNJE.js.map +1 -0
  723. package/dist/pixels-CTJ43FZ4.js +108 -0
  724. package/dist/pixels-CTJ43FZ4.js.map +1 -0
  725. package/dist/pixels-HKINGZCH.js +60 -0
  726. package/dist/pixels-HKINGZCH.js.map +1 -0
  727. package/dist/plan-ZYTWLGWK.js +207 -0
  728. package/dist/plan-ZYTWLGWK.js.map +1 -0
  729. package/dist/preview-5ROBOQG7.js +169 -0
  730. package/dist/preview-5ROBOQG7.js.map +1 -0
  731. package/dist/profile-Q3PHR6FU.js +159 -0
  732. package/dist/profile-Q3PHR6FU.js.map +1 -0
  733. package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
  734. package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
  735. package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
  736. package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
  737. package/dist/properties-WLL6M2P6.js +101 -0
  738. package/dist/properties-WLL6M2P6.js.map +1 -0
  739. package/dist/publish-KHNR5ARF.js +322 -0
  740. package/dist/publish-KHNR5ARF.js.map +1 -0
  741. package/dist/query-A34J7BGX.js +61 -0
  742. package/dist/query-A34J7BGX.js.map +1 -0
  743. package/dist/query-IYZN5KHO.js +236 -0
  744. package/dist/query-IYZN5KHO.js.map +1 -0
  745. package/dist/query-UN2P6DBA.js +247 -0
  746. package/dist/query-UN2P6DBA.js.map +1 -0
  747. package/dist/questionnaire-Z2ZIKNBV.js +93 -0
  748. package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
  749. package/dist/read-GM7PQYJA.js +141 -0
  750. package/dist/read-GM7PQYJA.js.map +1 -0
  751. package/dist/reddit-5NPFULGD.js +26 -0
  752. package/dist/reddit-5NPFULGD.js.map +1 -0
  753. package/dist/refresh-FGXW4Y4X.js +94 -0
  754. package/dist/refresh-FGXW4Y4X.js.map +1 -0
  755. package/dist/release-OKZMC73N.js +60 -0
  756. package/dist/release-OKZMC73N.js.map +1 -0
  757. package/dist/relevant-pages-J76ZKNKF.js +99 -0
  758. package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
  759. package/dist/remove-CA2J6ACH.js +50 -0
  760. package/dist/remove-CA2J6ACH.js.map +1 -0
  761. package/dist/remove-GOYW2G4R.js +48 -0
  762. package/dist/remove-GOYW2G4R.js.map +1 -0
  763. package/dist/reopen-XPKSOE6O.js +63 -0
  764. package/dist/reopen-XPKSOE6O.js.map +1 -0
  765. package/dist/rerun-2ERJV4WC.js +86 -0
  766. package/dist/rerun-2ERJV4WC.js.map +1 -0
  767. package/dist/research-FZ63UZTE.js +62 -0
  768. package/dist/research-FZ63UZTE.js.map +1 -0
  769. package/dist/research-YGQQ6CNG.js +262 -0
  770. package/dist/research-YGQQ6CNG.js.map +1 -0
  771. package/dist/reset-BGPZ4HMA.js +54 -0
  772. package/dist/reset-BGPZ4HMA.js.map +1 -0
  773. package/dist/reset-HTD6LCIT.js +54 -0
  774. package/dist/reset-HTD6LCIT.js.map +1 -0
  775. package/dist/resolve-NRDZ6N2B.js +121 -0
  776. package/dist/resolve-NRDZ6N2B.js.map +1 -0
  777. package/dist/retry-PF4BGKJV.js +60 -0
  778. package/dist/retry-PF4BGKJV.js.map +1 -0
  779. package/dist/retry-XL26JDAV.js +62 -0
  780. package/dist/retry-XL26JDAV.js.map +1 -0
  781. package/dist/retry-failed-BEFWRV4Z.js +45 -0
  782. package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
  783. package/dist/run-EMJLI7LR.js +65 -0
  784. package/dist/run-EMJLI7LR.js.map +1 -0
  785. package/dist/run-L5K44UEA.js +61 -0
  786. package/dist/run-L5K44UEA.js.map +1 -0
  787. package/dist/scaffold-ad-AY2OL7RI.js +1550 -0
  788. package/dist/scaffold-ad-AY2OL7RI.js.map +1 -0
  789. package/dist/scaffold-static-ad-FXYE46MT.js +973 -0
  790. package/dist/scaffold-static-ad-FXYE46MT.js.map +1 -0
  791. package/dist/scaffold-video-533BT6RX.js +874 -0
  792. package/dist/scaffold-video-533BT6RX.js.map +1 -0
  793. package/dist/schedule-KQ7UIR3N.js +66 -0
  794. package/dist/schedule-KQ7UIR3N.js.map +1 -0
  795. package/dist/schedule-PKPNSISL.js +61 -0
  796. package/dist/schedule-PKPNSISL.js.map +1 -0
  797. package/dist/scheduled-agents-LP5LITA3.js +49 -0
  798. package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
  799. package/dist/schema-B6J6VPTO.js +132 -0
  800. package/dist/schema-B6J6VPTO.js.map +1 -0
  801. package/dist/schema-QXTDLZVC.js +63 -0
  802. package/dist/schema-QXTDLZVC.js.map +1 -0
  803. package/dist/scrape-7YKJWFZE.js +2241 -0
  804. package/dist/scrape-7YKJWFZE.js.map +1 -0
  805. package/dist/screenshot-ZHBSG3SI.js +102 -0
  806. package/dist/screenshot-ZHBSG3SI.js.map +1 -0
  807. package/dist/search-332KFYZ6.js +224 -0
  808. package/dist/search-332KFYZ6.js.map +1 -0
  809. package/dist/search-4PBMXXUY.js +91 -0
  810. package/dist/search-4PBMXXUY.js.map +1 -0
  811. package/dist/search-6WNUKCMP.js +174 -0
  812. package/dist/search-6WNUKCMP.js.map +1 -0
  813. package/dist/search-AVNUU6TJ.js +26 -0
  814. package/dist/search-AVNUU6TJ.js.map +1 -0
  815. package/dist/search-F5INRFFK.js +92 -0
  816. package/dist/search-F5INRFFK.js.map +1 -0
  817. package/dist/search-copy-DZVBYG2B.js +168 -0
  818. package/dist/search-copy-DZVBYG2B.js.map +1 -0
  819. package/dist/seeds-5JTQN5WI.js +101 -0
  820. package/dist/seeds-5JTQN5WI.js.map +1 -0
  821. package/dist/select-RSGLDQ5Z.js +96 -0
  822. package/dist/select-RSGLDQ5Z.js.map +1 -0
  823. package/dist/sends-3L6QBS46.js +309 -0
  824. package/dist/sends-3L6QBS46.js.map +1 -0
  825. package/dist/sequences-YKFV7BDH.js +146 -0
  826. package/dist/sequences-YKFV7BDH.js.map +1 -0
  827. package/dist/set-prompt-7WWJI6XW.js +188 -0
  828. package/dist/set-prompt-7WWJI6XW.js.map +1 -0
  829. package/dist/setup-links-6H5ONDCQ.js +141 -0
  830. package/dist/setup-links-6H5ONDCQ.js.map +1 -0
  831. package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
  832. package/dist/shared-QAMP7FZV.js.map +1 -0
  833. package/dist/shopify-2OY3J3OY.js +3692 -0
  834. package/dist/shopify-2OY3J3OY.js.map +1 -0
  835. package/dist/site-TBPERLY3.js +177 -0
  836. package/dist/site-TBPERLY3.js.map +1 -0
  837. package/dist/sitemaps-XPGLW24S.js +87 -0
  838. package/dist/sitemaps-XPGLW24S.js.map +1 -0
  839. package/dist/sites-WMBY2HJV.js +101 -0
  840. package/dist/sites-WMBY2HJV.js.map +1 -0
  841. package/dist/skills-3HEILQCU.js +47 -0
  842. package/dist/skills-3HEILQCU.js.map +1 -0
  843. package/dist/sources-JFQKTK2L.js +421 -0
  844. package/dist/sources-JFQKTK2L.js.map +1 -0
  845. package/dist/sources-Q3I6DDV7.js +30 -0
  846. package/dist/sources-Q3I6DDV7.js.map +1 -0
  847. package/dist/stale-CAXBLZKJ.js +66 -0
  848. package/dist/stale-CAXBLZKJ.js.map +1 -0
  849. package/dist/stats-GNILHSKK.js +34 -0
  850. package/dist/stats-GNILHSKK.js.map +1 -0
  851. package/dist/status-LIZWJYS4.js +62 -0
  852. package/dist/status-LIZWJYS4.js.map +1 -0
  853. package/dist/sticker-KCV3VZHY.js +94 -0
  854. package/dist/sticker-KCV3VZHY.js.map +1 -0
  855. package/dist/stock-VTORKR4C.js +179 -0
  856. package/dist/stock-VTORKR4C.js.map +1 -0
  857. package/dist/studio-QCRA6BY5.js +49 -0
  858. package/dist/studio-QCRA6BY5.js.map +1 -0
  859. package/dist/sync-455DB46Y.js +54 -0
  860. package/dist/sync-455DB46Y.js.map +1 -0
  861. package/dist/sync-A4KKQ3B6.js +265 -0
  862. package/dist/sync-A4KKQ3B6.js.map +1 -0
  863. package/dist/sync-ULKWDFXM.js +54 -0
  864. package/dist/sync-ULKWDFXM.js.map +1 -0
  865. package/dist/sync-definition-P6QTHJJ6.js +55 -0
  866. package/dist/sync-definition-P6QTHJJ6.js.map +1 -0
  867. package/dist/tag-manager-E7QTXBWQ.js +43 -0
  868. package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
  869. package/dist/tags-4Q4I5GQJ.js +20 -0
  870. package/dist/tags-4Q4I5GQJ.js.map +1 -0
  871. package/dist/tags-AMEVAQZ4.js +26 -0
  872. package/dist/tags-AMEVAQZ4.js.map +1 -0
  873. package/dist/tags-DPLOLH3E.js +20 -0
  874. package/dist/tags-DPLOLH3E.js.map +1 -0
  875. package/dist/tags-LDHXONR3.js +224 -0
  876. package/dist/tags-LDHXONR3.js.map +1 -0
  877. package/dist/tags-UW3WJTAQ.js +20 -0
  878. package/dist/tags-UW3WJTAQ.js.map +1 -0
  879. package/dist/targeting-constants-D64YO3E7.js +118 -0
  880. package/dist/targeting-constants-D64YO3E7.js.map +1 -0
  881. package/dist/targeting-criteria-BP6VJA7X.js +113 -0
  882. package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
  883. package/dist/targets-CQWO2UXD.js +102 -0
  884. package/dist/targets-CQWO2UXD.js.map +1 -0
  885. package/dist/templates-WZSTNRNZ.js +178 -0
  886. package/dist/templates-WZSTNRNZ.js.map +1 -0
  887. package/dist/testimonials-ETHSNWUH.js +32 -0
  888. package/dist/testimonials-ETHSNWUH.js.map +1 -0
  889. package/dist/themes-YU663LQH.js +94 -0
  890. package/dist/themes-YU663LQH.js.map +1 -0
  891. package/dist/top-companies-KTXHS472.js +108 -0
  892. package/dist/top-companies-KTXHS472.js.map +1 -0
  893. package/dist/translate-A7LYHUW3.js +600 -0
  894. package/dist/translate-A7LYHUW3.js.map +1 -0
  895. package/dist/triggers-4EDFLNGH.js +141 -0
  896. package/dist/triggers-4EDFLNGH.js.map +1 -0
  897. package/dist/tweets-ZUKQAAUQ.js +123 -0
  898. package/dist/tweets-ZUKQAAUQ.js.map +1 -0
  899. package/dist/unfollow-A4JVCJBF.js +46 -0
  900. package/dist/unfollow-A4JVCJBF.js.map +1 -0
  901. package/dist/unlink-KY2OEKMD.js +67 -0
  902. package/dist/unlink-KY2OEKMD.js.map +1 -0
  903. package/dist/unstage-FHUG67RI.js +84 -0
  904. package/dist/unstage-FHUG67RI.js.map +1 -0
  905. package/dist/unstage-ZRLLCSQF.js +95 -0
  906. package/dist/unstage-ZRLLCSQF.js.map +1 -0
  907. package/dist/update-27LGM65V.js +63 -0
  908. package/dist/update-27LGM65V.js.map +1 -0
  909. package/dist/update-AIY46I2Q.js +155 -0
  910. package/dist/update-AIY46I2Q.js.map +1 -0
  911. package/dist/update-QYD2XZFM.js +142 -0
  912. package/dist/update-QYD2XZFM.js.map +1 -0
  913. package/dist/update-W2OSRNFO.js +98 -0
  914. package/dist/update-W2OSRNFO.js.map +1 -0
  915. package/dist/upload-JGBTSKGH.js +126 -0
  916. package/dist/upload-JGBTSKGH.js.map +1 -0
  917. package/dist/upload-XEHWYMJG.js +150 -0
  918. package/dist/upload-XEHWYMJG.js.map +1 -0
  919. package/dist/upscale-I5P2OHTN.js +109 -0
  920. package/dist/upscale-I5P2OHTN.js.map +1 -0
  921. package/dist/url-options-QHGA42RP.js +130 -0
  922. package/dist/url-options-QHGA42RP.js.map +1 -0
  923. package/dist/url-params-NWSUHWRE.js +98 -0
  924. package/dist/url-params-NWSUHWRE.js.map +1 -0
  925. package/dist/use-U4HG2NF3.js +95 -0
  926. package/dist/use-U4HG2NF3.js.map +1 -0
  927. package/dist/validate-VKL3XKQ2.js +91 -0
  928. package/dist/validate-VKL3XKQ2.js.map +1 -0
  929. package/dist/variant-FOVE6URJ.js +338 -0
  930. package/dist/variant-FOVE6URJ.js.map +1 -0
  931. package/dist/videos-DP3VCSYG.js +39 -0
  932. package/dist/videos-DP3VCSYG.js.map +1 -0
  933. package/dist/view-HRI3FHCH.js +121 -0
  934. package/dist/view-HRI3FHCH.js.map +1 -0
  935. package/dist/viewer-check-JYUE24M6.js +68 -0
  936. package/dist/viewer-check-JYUE24M6.js.map +1 -0
  937. package/dist/web-AFUIWPFU.js +140 -0
  938. package/dist/web-AFUIWPFU.js.map +1 -0
  939. package/dist/winners-SMMDN6LW.js +113 -0
  940. package/dist/winners-SMMDN6LW.js.map +1 -0
  941. package/dist/winning-ads-PCIJUYVA.js +84 -0
  942. package/dist/winning-ads-PCIJUYVA.js.map +1 -0
  943. package/dist/write-commands-7Z34WG2J.js +206 -0
  944. package/dist/write-commands-7Z34WG2J.js.map +1 -0
  945. package/dist/write-commands-BLT2SEC4.js +713 -0
  946. package/dist/write-commands-BLT2SEC4.js.map +1 -0
  947. package/dist/write-commands-N4FSGRVQ.js +743 -0
  948. package/dist/write-commands-N4FSGRVQ.js.map +1 -0
  949. package/dist/write-commands-Q4MQ3BGM.js +1015 -0
  950. package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
  951. package/dist/x-AUOZJNWE.js +47 -0
  952. package/dist/x-AUOZJNWE.js.map +1 -0
  953. package/package.json +9 -2
  954. package/dist/chunk-FGHMWBUD.js +0 -9989
  955. package/dist/chunk-FGHMWBUD.js.map +0 -1
  956. package/dist/chunk-HJEMOSPH.js +0 -1292
  957. package/dist/chunk-HJEMOSPH.js.map +0 -1
  958. package/dist/chunk-MF7YA62W.js.map +0 -1
  959. package/dist/chunk-VZEDAFAR.js.map +0 -1
  960. package/dist/chunk-XHC4LMK4.js.map +0 -1
  961. package/dist/client-GR6YL3YX.js +0 -17
  962. package/dist/output-NMQXZF3Z.js +0 -18
  963. /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
  964. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  965. /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
  966. /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
  967. /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
@@ -0,0 +1,274 @@
1
+ import {
2
+ chatgptDraftOpInputSchema,
3
+ chatgptFailure
4
+ } from "./chunk-IOCSDFF2.js";
5
+ import {
6
+ writeJsonEnvelope
7
+ } from "./chunk-BVM5IRZW.js";
8
+ import {
9
+ ApiError,
10
+ apiPost
11
+ } from "./chunk-HREWXNTO.js";
12
+ import {
13
+ requireChatId
14
+ } from "./chunk-O6QKCJE4.js";
15
+ import {
16
+ registerSchema
17
+ } from "./chunk-WOTDHRNF.js";
18
+
19
+ // src/commands/ads/chatgpt/write-shared.ts
20
+ import { defineCommand } from "citty";
21
+ function fail(envelope) {
22
+ writeJsonEnvelope({ ...envelope });
23
+ process.exit(1);
24
+ }
25
+ function failWriteValidation(message) {
26
+ fail({
27
+ ok: false,
28
+ error: {
29
+ code: "VALIDATION_ERROR",
30
+ message,
31
+ fix: { action: "add_required_field", explanation: `${message}. Nothing was staged.` },
32
+ retryable: false
33
+ }
34
+ });
35
+ }
36
+ function writeFailure(err, reference) {
37
+ if (!(err instanceof ApiError) && err instanceof Error && err.message.includes("BAKER_CHAT_ID")) {
38
+ return {
39
+ ok: false,
40
+ error: {
41
+ code: "NO_CHAT",
42
+ message: err.message,
43
+ fix: {
44
+ action: "reject",
45
+ explanation: "ChatGPT Ads changes are staged on a chat and apply when it is published; run this from the chat."
46
+ },
47
+ retryable: false
48
+ }
49
+ };
50
+ }
51
+ return chatgptFailure(err, reference);
52
+ }
53
+ function decimalPlaces(value) {
54
+ const [mantissa, exponent] = String(value).trim().split(/e/i);
55
+ const written = (mantissa?.split(".")[1] ?? "").length;
56
+ return Math.max(0, written - (exponent ? Number(exponent) : 0));
57
+ }
58
+ function parseChatgptMoney(value) {
59
+ if (value === void 0 || value === "") {
60
+ return { ok: true, micros: void 0 };
61
+ }
62
+ const amount = Number(value);
63
+ if (!Number.isFinite(amount) || amount <= 0) {
64
+ return { ok: false, reason: "must be a positive amount, for example 12.50" };
65
+ }
66
+ if (decimalPlaces(value) > 6) {
67
+ return { ok: false, reason: "is finer than ChatGPT Ads can express" };
68
+ }
69
+ return { ok: true, micros: Math.round(amount * 1e6) };
70
+ }
71
+ function microsFromArg(value, flag) {
72
+ const parsed = parseChatgptMoney(value);
73
+ if (!parsed.ok) {
74
+ failWriteValidation(`${flag} ${parsed.reason}`);
75
+ }
76
+ return parsed.micros;
77
+ }
78
+ function csvArg(value) {
79
+ if (typeof value !== "string" || value.trim().length === 0) {
80
+ return void 0;
81
+ }
82
+ const parts = value.split(",").map((part) => part.trim()).filter(Boolean);
83
+ return parts.length > 0 ? parts : void 0;
84
+ }
85
+ function schemaArgs(args) {
86
+ return Object.fromEntries(
87
+ Object.entries(args).map(([name, arg]) => [
88
+ name,
89
+ {
90
+ type: arg.type === "positional" ? "string" : arg.type,
91
+ description: arg.description,
92
+ required: arg.required === true
93
+ }
94
+ ])
95
+ );
96
+ }
97
+ function lowerArg(value) {
98
+ return typeof value === "string" && value.trim() !== "" ? value.trim().toLowerCase() : void 0;
99
+ }
100
+ function lowerCsvArg(value) {
101
+ return csvArg(value)?.map((part) => part.toLowerCase());
102
+ }
103
+ function compact(payload) {
104
+ return Object.fromEntries(Object.entries(payload).filter(([, value]) => value !== void 0 && value !== ""));
105
+ }
106
+ function requireTarget(args, name) {
107
+ const value = args[name];
108
+ if (typeof value !== "string" || value.trim().length === 0) {
109
+ failWriteValidation(`${name} is required`);
110
+ }
111
+ return value.trim();
112
+ }
113
+ function requireTargets(args, name) {
114
+ const ids = csvArg(args[name]);
115
+ if (!ids) {
116
+ failWriteValidation(`${name} is required \u2014 pass one or more ids, comma-separated`);
117
+ }
118
+ return ids;
119
+ }
120
+ function preflight(raw) {
121
+ const parsed = chatgptDraftOpInputSchema.safeParse(raw);
122
+ if (parsed.success) {
123
+ return parsed.data;
124
+ }
125
+ const fields = parsed.error.issues.map((issue) => ({ path: issue.path.join("."), message: issue.message }));
126
+ const message = fields.map((field) => field.path ? `${field.path}: ${field.message}` : field.message).join("; ");
127
+ return fail({
128
+ ok: false,
129
+ error: {
130
+ code: "VALIDATION_ERROR",
131
+ message,
132
+ fix: {
133
+ action: "retry_with_modified_query",
134
+ explanation: "Fix the named fields and stage again. Nothing was staged \u2014 the draft is as it was before this call."
135
+ },
136
+ retryable: false
137
+ }
138
+ });
139
+ }
140
+ async function postStage(chatId, op) {
141
+ return await apiPost("/api/ads/chatgpt/draft/stage", { chatId, op });
142
+ }
143
+ async function stageChatgptOp(raw, reference, hintsFor) {
144
+ const op = preflight(raw);
145
+ try {
146
+ const staged = await postStage(requireChatId(), op);
147
+ const hints = hintsFor?.(staged) ?? [];
148
+ writeJsonEnvelope({ ok: true, data: staged, ...hints.length > 0 ? { hints } : {} });
149
+ } catch (err) {
150
+ fail(writeFailure(err, reference));
151
+ }
152
+ }
153
+ async function stageChatgptOps(raws, reference) {
154
+ if (raws.length === 1 && raws[0]) {
155
+ await stageChatgptOp(raws[0], reference);
156
+ return;
157
+ }
158
+ const ops = raws.map(preflight);
159
+ const staged = [];
160
+ try {
161
+ const chatId = requireChatId();
162
+ for (const op of ops) {
163
+ staged.push(await postStage(chatId, op));
164
+ }
165
+ writeJsonEnvelope({ ok: true, data: staged });
166
+ } catch (err) {
167
+ const failure = writeFailure(err, reference);
168
+ if (staged.length > 0) {
169
+ failure.error.message = `${failure.error.message} (already staged: ${staged.map((s) => s.summary).join("; ")})`;
170
+ }
171
+ fail(failure);
172
+ }
173
+ }
174
+ function clearableCsvArg(value) {
175
+ return typeof value === "string" && value.trim().toLowerCase() === "none" ? [] : csvArg(value);
176
+ }
177
+ function clearableArg(value) {
178
+ if (typeof value !== "string" || value.trim() === "") {
179
+ return void 0;
180
+ }
181
+ return value.trim().toLowerCase() === "none" ? null : value.trim();
182
+ }
183
+ function cropArg(value, flag) {
184
+ const parts = csvArg(value);
185
+ if (!parts) {
186
+ return void 0;
187
+ }
188
+ const numbers = parts.map(Number);
189
+ const [x, y, width, height] = numbers;
190
+ if (numbers.length !== 4 || numbers.some(Number.isNaN) || x === void 0 || y === void 0 || width === void 0 || height === void 0) {
191
+ failWriteValidation(`${flag} takes four shares of the image, x,y,width,height \u2014 e.g. 0.1,0,0.8,0.8`);
192
+ }
193
+ return { x, y, width, height };
194
+ }
195
+ var STATUS_OF = {
196
+ pause: "paused",
197
+ resume: "active",
198
+ archive: "archived"
199
+ };
200
+ function statusOps(entity, ids, status) {
201
+ return ids.map((id) => ({ kind: `${entity}.update`, target: id, payload: { status } }));
202
+ }
203
+ var STATUS_NOUN = {
204
+ campaign: { command: "campaigns", plural: "campaigns", example: "cmpn_123,cmpn_456" },
205
+ adGroup: { command: "ad-groups", plural: "ad groups", example: "adgrp_123,adgrp_456" },
206
+ ad: { command: "ads", plural: "cards", example: "ad_123,ad_456" }
207
+ };
208
+ var STATUS_DOING = { pause: "pausing", resume: "resuming", archive: "archiving" };
209
+ function statusCommand(entity, verb, reference) {
210
+ const noun = STATUS_NOUN[entity];
211
+ const args = {
212
+ ids: { type: "positional", description: `${noun.plural} ids, comma-separated`, required: true }
213
+ };
214
+ const forGood = verb === "archive" ? ` Archiving is for good: ChatGPT Ads cannot bring archived ${noun.plural} back, and their results stay in reports. Pause instead unless the user asked to archive.` : "";
215
+ registerSchema({
216
+ command: `ads.chatgpt.${noun.command}.${verb}`,
217
+ description: `Stage ${STATUS_DOING[verb]} one or more ChatGPT Ads ${noun.plural}. Pass every id in one call.${forGood}`,
218
+ args: schemaArgs(args)
219
+ });
220
+ return defineCommand({
221
+ meta: {
222
+ name: verb,
223
+ description: `Stage ${STATUS_DOING[verb]} ${noun.plural}.${forGood}
224
+
225
+ Example:
226
+ baker ads chatgpt ${noun.command} ${verb} ${noun.example}`
227
+ },
228
+ args,
229
+ run: async ({ args: parsed }) => {
230
+ await stageChatgptOps(statusOps(entity, requireTargets(parsed, "ids"), STATUS_OF[verb]), reference);
231
+ }
232
+ });
233
+ }
234
+ function productFiltersArg(value) {
235
+ if (typeof value !== "string" || value.trim() === "") {
236
+ return void 0;
237
+ }
238
+ if (value.trim().toLowerCase() === "none") {
239
+ return [];
240
+ }
241
+ return value.split(";").map((condition) => condition.trim()).filter(Boolean).map((condition) => {
242
+ const match = /^(\S+)\s+(\S+)\s+(.+)$/.exec(condition);
243
+ if (!match?.[1] || !match[2] || !match[3]) {
244
+ failWriteValidation(
245
+ `"${condition}" is not a product filter \u2014 write field operator values, e.g. price lte 5000`
246
+ );
247
+ }
248
+ return {
249
+ field: match[1],
250
+ operator: match[2].toLowerCase(),
251
+ values: match[3].split("|").map((part) => part.trim()).filter(Boolean)
252
+ };
253
+ });
254
+ }
255
+
256
+ export {
257
+ failWriteValidation,
258
+ microsFromArg,
259
+ csvArg,
260
+ schemaArgs,
261
+ lowerArg,
262
+ lowerCsvArg,
263
+ compact,
264
+ requireTarget,
265
+ requireTargets,
266
+ stageChatgptOp,
267
+ stageChatgptOps,
268
+ clearableCsvArg,
269
+ clearableArg,
270
+ cropArg,
271
+ statusCommand,
272
+ productFiltersArg
273
+ };
274
+ //# sourceMappingURL=chunk-4MH6LONO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/chatgpt/write-shared.ts"],"sourcesContent":["import { type ChatgptDraftStageResponse, chatgptDraftOpInputSchema } from \"@baker/api/ads-chatgpt\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../../client.ts\";\nimport { requireChatId } from \"../../../env.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport type { AdsErrorEnvelope } from \"../types.ts\";\nimport { chatgptFailure } from \"./shared.ts\";\n\n/**\n * Shared plumbing for the staged ChatGPT Ads write commands.\n *\n * Writes never reach ChatGPT Ads from here: every command stages an op on this\n * chat's draft (`/api/ads/chatgpt/draft/stage`), the dashboard shows it as a\n * pending change, and it applies only when the chat is published.\n */\n\nfunction fail(envelope: AdsErrorEnvelope): never {\n writeJsonEnvelope({ ...envelope });\n process.exit(1);\n}\n\nexport function failWriteValidation(message: string): never {\n fail({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message,\n fix: { action: \"add_required_field\", explanation: `${message}. Nothing was staged.` },\n retryable: false,\n },\n });\n}\n\n/** A write failure, as the agent should act on it; a missing chat is not a network error. */\nfunction writeFailure(err: unknown, reference: string): AdsErrorEnvelope {\n if (!(err instanceof ApiError) && err instanceof Error && err.message.includes(\"BAKER_CHAT_ID\")) {\n return {\n ok: false,\n error: {\n code: \"NO_CHAT\",\n message: err.message,\n fix: {\n action: \"reject\",\n explanation:\n \"ChatGPT Ads changes are staged on a chat and apply when it is published; run this from the chat.\",\n },\n retryable: false,\n },\n };\n }\n return chatgptFailure(err, reference);\n}\n\n/**\n * Digits after the decimal point, read off the written amount: `String(0.0000005)`\n * is `\"5e-7\"`, whose mantissa has no decimals at all.\n */\nfunction decimalPlaces(value: unknown): number {\n const [mantissa, exponent] = String(value).trim().split(/e/i);\n const written = (mantissa?.split(\".\")[1] ?? \"\").length;\n return Math.max(0, written - (exponent ? Number(exponent) : 0));\n}\n\nexport type ChatgptMoneyParse = { ok: true; micros: number | undefined } | { ok: false; reason: string };\n\n/**\n * ChatGPT Ads takes money as integer micros of the account currency; the CLI\n * takes the amount a person writes. Counting decimals instead of comparing\n * `amount * 1e6` with its rounding is exact at every magnitude.\n */\nexport function parseChatgptMoney(value: unknown): ChatgptMoneyParse {\n if (value === undefined || value === \"\") {\n return { ok: true, micros: undefined };\n }\n const amount = Number(value);\n if (!Number.isFinite(amount) || amount <= 0) {\n return { ok: false, reason: \"must be a positive amount, for example 12.50\" };\n }\n if (decimalPlaces(value) > 6) {\n return { ok: false, reason: \"is finer than ChatGPT Ads can express\" };\n }\n return { ok: true, micros: Math.round(amount * 1_000_000) };\n}\n\nexport function microsFromArg(value: unknown, flag: string): number | undefined {\n const parsed = parseChatgptMoney(value);\n if (!parsed.ok) {\n failWriteValidation(`${flag} ${parsed.reason}`);\n }\n return parsed.micros;\n}\n\nexport function csvArg(value: unknown): string[] | undefined {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return undefined;\n }\n const parts = value\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n return parts.length > 0 ? parts : undefined;\n}\n\ninterface CliArg {\n type: string;\n description: string;\n required?: boolean;\n}\n\n/**\n * The `baker schema` entry for a command, read off the flags it really takes,\n * so the introspection an agent plans from cannot drift from the command.\n */\nexport function schemaArgs(args: Record<string, CliArg>) {\n return Object.fromEntries(\n Object.entries(args).map(([name, arg]) => [\n name,\n {\n type: arg.type === \"positional\" ? \"string\" : arg.type,\n description: arg.description,\n required: arg.required === true,\n },\n ]),\n );\n}\n\n/** A flag naming one of ChatGPT Ads' lowercase values, taken in whatever case it was typed. */\nexport function lowerArg(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim().toLowerCase() : undefined;\n}\n\n/** A comma-separated list of those values. */\nexport function lowerCsvArg(value: unknown): string[] | undefined {\n return csvArg(value)?.map((part) => part.toLowerCase());\n}\n\n/** Drop unset keys so an omitted flag never stages as an explicit value. */\nexport function compact(payload: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(payload).filter(([, value]) => value !== undefined && value !== \"\"));\n}\n\nexport function requireTarget(args: Record<string, unknown>, name: string): string {\n const value = args[name];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n failWriteValidation(`${name} is required`);\n }\n return value.trim();\n}\n\nexport function requireTargets(args: Record<string, unknown>, name: string): string[] {\n const ids = csvArg(args[name]);\n if (!ids) {\n failWriteValidation(`${name} is required — pass one or more ids, comma-separated`);\n }\n return ids;\n}\n\n/** The op, checked against the same schema the backend applies, before anything is sent. */\nfunction preflight(raw: Record<string, unknown>) {\n const parsed = chatgptDraftOpInputSchema.safeParse(raw);\n if (parsed.success) {\n return parsed.data;\n }\n const fields = parsed.error.issues.map((issue) => ({ path: issue.path.join(\".\"), message: issue.message }));\n const message = fields.map((field) => (field.path ? `${field.path}: ${field.message}` : field.message)).join(\"; \");\n return fail({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message,\n fix: {\n action: \"retry_with_modified_query\",\n explanation:\n \"Fix the named fields and stage again. Nothing was staged — the draft is as it was before this call.\",\n },\n retryable: false,\n },\n });\n}\n\n/** The ChatGPT Ads routes answer with the payload itself; the envelope is the CLI's to add. */\nasync function postStage(chatId: string, op: ReturnType<typeof preflight>): Promise<ChatgptDraftStageResponse> {\n return await apiPost<ChatgptDraftStageResponse>(\"/api/ads/chatgpt/draft/stage\", { chatId, op });\n}\n\n/** Stage one op and print what was staged; `hintsFor` names the obvious next step. */\nexport async function stageChatgptOp(\n raw: Record<string, unknown>,\n reference: string,\n hintsFor?: (staged: ChatgptDraftStageResponse) => string[],\n): Promise<void> {\n const op = preflight(raw);\n try {\n const staged = await postStage(requireChatId(), op);\n const hints = hintsFor?.(staged) ?? [];\n writeJsonEnvelope({ ok: true, data: staged, ...(hints.length > 0 ? { hints } : {}) });\n } catch (err) {\n fail(writeFailure(err, reference));\n }\n}\n\n/**\n * Stage the same change on several entities (a pause across campaigns). Each is\n * its own op; when one is refused, the ones already staged are named so the\n * agent neither re-stages nor loses them.\n */\nexport async function stageChatgptOps(raws: Array<Record<string, unknown>>, reference: string): Promise<void> {\n if (raws.length === 1 && raws[0]) {\n await stageChatgptOp(raws[0], reference);\n return;\n }\n const ops = raws.map(preflight);\n const staged: ChatgptDraftStageResponse[] = [];\n try {\n const chatId = requireChatId();\n for (const op of ops) {\n staged.push(await postStage(chatId, op));\n }\n writeJsonEnvelope({ ok: true, data: staged });\n } catch (err) {\n const failure = writeFailure(err, reference);\n if (staged.length > 0) {\n failure.error.message = `${failure.error.message} (already staged: ${staged.map((s) => s.summary).join(\"; \")})`;\n }\n fail(failure);\n }\n}\n\n/** On an update, `none` empties a list — ChatGPT Ads' way to clear exclusions, audiences or regions. */\nexport function clearableCsvArg(value: unknown): string[] | undefined {\n return typeof value === \"string\" && value.trim().toLowerCase() === \"none\" ? [] : csvArg(value);\n}\n\n/** On an update, `none` removes the value — a tracking template. */\nexport function clearableArg(value: unknown): string | null | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") {\n return undefined;\n }\n return value.trim().toLowerCase() === \"none\" ? null : value.trim();\n}\n\n/** A crop as `x,y,width,height`, each a share of the image from 0 to 1. */\nexport function cropArg(\n value: unknown,\n flag: string,\n): { x: number; y: number; width: number; height: number } | undefined {\n const parts = csvArg(value);\n if (!parts) {\n return undefined;\n }\n const numbers = parts.map(Number);\n const [x, y, width, height] = numbers;\n if (\n numbers.length !== 4 ||\n numbers.some(Number.isNaN) ||\n x === undefined ||\n y === undefined ||\n width === undefined ||\n height === undefined\n ) {\n failWriteValidation(`${flag} takes four shares of the image, x,y,width,height — e.g. 0.1,0,0.8,0.8`);\n }\n return { x, y, width, height };\n}\n\ntype StatusEntity = \"campaign\" | \"adGroup\" | \"ad\";\ntype StatusVerb = \"pause\" | \"resume\" | \"archive\";\n\nconst STATUS_OF: Record<StatusVerb, \"paused\" | \"active\" | \"archived\"> = {\n pause: \"paused\",\n resume: \"active\",\n archive: \"archived\",\n};\n\nexport function statusOps(entity: StatusEntity, ids: readonly string[], status: \"paused\" | \"active\" | \"archived\") {\n return ids.map((id) => ({ kind: `${entity}.update`, target: id, payload: { status } }));\n}\n\nconst STATUS_NOUN: Record<StatusEntity, { command: string; plural: string; example: string }> = {\n campaign: { command: \"campaigns\", plural: \"campaigns\", example: \"cmpn_123,cmpn_456\" },\n adGroup: { command: \"ad-groups\", plural: \"ad groups\", example: \"adgrp_123,adgrp_456\" },\n ad: { command: \"ads\", plural: \"cards\", example: \"ad_123,ad_456\" },\n};\n\nconst STATUS_DOING: Record<StatusVerb, string> = { pause: \"pausing\", resume: \"resuming\", archive: \"archiving\" };\n\n/** `pause`, `resume` or `archive` for every id passed, staged as one change each. */\nexport function statusCommand(entity: StatusEntity, verb: StatusVerb, reference: string) {\n const noun = STATUS_NOUN[entity];\n const args = {\n ids: { type: \"positional\", description: `${noun.plural} ids, comma-separated`, required: true },\n } as const;\n const forGood =\n verb === \"archive\"\n ? ` Archiving is for good: ChatGPT Ads cannot bring archived ${noun.plural} back, and their results stay in reports. Pause instead unless the user asked to archive.`\n : \"\";\n registerSchema({\n command: `ads.chatgpt.${noun.command}.${verb}`,\n description: `Stage ${STATUS_DOING[verb]} one or more ChatGPT Ads ${noun.plural}. Pass every id in one call.${forGood}`,\n args: schemaArgs(args),\n });\n return defineCommand({\n meta: {\n name: verb,\n description: `Stage ${STATUS_DOING[verb]} ${noun.plural}.${forGood}\n\nExample:\n baker ads chatgpt ${noun.command} ${verb} ${noun.example}`,\n },\n args,\n run: async ({ args: parsed }) => {\n await stageChatgptOps(statusOps(entity, requireTargets(parsed, \"ids\"), STATUS_OF[verb]), reference);\n },\n });\n}\n\n/**\n * Product filters as a marketer writes them: `brand in Acme|Baker; price lte 5000`\n * — conditions split by `;`, each field, operator and values (several joined\n * with `|`). `none` is no filter: the whole catalog.\n */\nexport function productFiltersArg(\n value: unknown,\n): Array<{ field: string; operator: string; values: string[] }> | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") {\n return undefined;\n }\n if (value.trim().toLowerCase() === \"none\") {\n return [];\n }\n return value\n .split(\";\")\n .map((condition) => condition.trim())\n .filter(Boolean)\n .map((condition) => {\n const match = /^(\\S+)\\s+(\\S+)\\s+(.+)$/.exec(condition);\n if (!match?.[1] || !match[2] || !match[3]) {\n failWriteValidation(\n `\"${condition}\" is not a product filter — write field operator values, e.g. price lte 5000`,\n );\n }\n return {\n field: match[1],\n operator: match[2].toLowerCase(),\n values: match[3]\n .split(\"|\")\n .map((part) => part.trim())\n .filter(Boolean),\n };\n });\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,137 @@
1
+ // src/engine/copy-tells/questions.ts
2
+ var ANY_LANGUAGE = "The copy may be in any language; judge the construction, not the words.";
3
+ var TELL_QUESTIONS = [
4
+ {
5
+ id: "rhetorical-opener",
6
+ question: `Does \`sentence\` open with a fake-candid pause before an ordinary claim, such as "Honestly?", "Here's the thing:", "Look,", "Let's be real", "La verdad es que", "Seamos sinceros"? A sentence that simply starts with its claim does not count. ${ANY_LANGUAGE}`,
7
+ threshold: 0.75
8
+ },
9
+ {
10
+ id: "negation-pivot",
11
+ question: `Is \`sentence\` built as a negative parallelism that denies a smaller framing to assert a bigger one, such as "It's not just a CRM, it's a growth engine", "Not only X but also Y", "No se trata solo de X, sino de Y", or a short "Not a tool." answered by "A partner." (\`before\` is the sentence before it, for that two-sentence form)? A plain negative fact ("No setup fee", "We don't sell your data") does not count. ${ANY_LANGUAGE}`,
12
+ threshold: 0.5
13
+ },
14
+ {
15
+ id: "participle-tail",
16
+ question: `Does \`sentence\` end with a participle or gerund phrase hung off a comma to add vague significance, such as ", ensuring nothing slips through", ", fostering growth", ", permitiendo cerrar el mes antes"? A sentence that opens with such a word does not count. ${ANY_LANGUAGE}`,
17
+ threshold: 0.5
18
+ },
19
+ {
20
+ id: "copula-avoidance",
21
+ question: `Does \`sentence\` use an inflated verb where a plain "is" or "has" would do, such as "serves as", "stands as", "boasts", "se erige como", "cuenta con"? ${ANY_LANGUAGE}`,
22
+ threshold: 0.6
23
+ },
24
+ {
25
+ id: "authority-trope",
26
+ question: `Does \`sentence\` claim to reveal what is "really" at stake, with a phrase like "The real question is", "At its core", "What really matters is", "The heart of the matter", "En el fondo", "Lo que realmente importa"? Candid openers ("Honestly", "To be fair"), contrasts ("not just X, but Y") and filler words are other tells and do not count here. ${ANY_LANGUAGE}`,
27
+ threshold: 0.5
28
+ },
29
+ {
30
+ id: "signposting",
31
+ question: `Does \`sentence\` announce what the text is about to explain instead of saying it, such as "Let's dive in", "Here's what you need to know", "Let's break it down", "Vamos a ver c\xF3mo funciona"? Presenting the offer itself ("Here is a plan for every team size", "Aqu\xED tienes nuestras tarifas") and an assistant handing over a summary are not this. ${ANY_LANGUAGE}`,
32
+ threshold: 0.5
33
+ },
34
+ {
35
+ id: "chat-artifact",
36
+ question: `Is \`sentence\` an AI assistant talking to the person who asked it for the text, pasted into the page by mistake, such as "I hope this helps!", "Let me know if you want changes", "Here is an overview of the plan", "Would you like me to", "Aqu\xED tienes el resumen"? Copy that speaks to the page's own visitor ("Here are our three plans", "Tell us what you need") does not count. ${ANY_LANGUAGE}`,
37
+ threshold: 0.62
38
+ },
39
+ {
40
+ id: "vague-attribution",
41
+ question: `Does \`sentence\` credit a claim to unnamed authorities, such as "Experts agree", "Studies show", "Research shows", "Los expertos coinciden", without naming who? ${ANY_LANGUAGE}`,
42
+ threshold: 0.5
43
+ },
44
+ {
45
+ id: "hollow-conclusion",
46
+ question: `Is \`sentence\` a vague upbeat ending that asserts nothing, such as "The future looks bright", "The possibilities are endless", "El cielo es el l\xEDmite"? ${ANY_LANGUAGE}`,
47
+ threshold: 0.65
48
+ },
49
+ {
50
+ id: "filler-phrase",
51
+ question: `Does \`sentence\` contain a wordy filler phrase that carries no meaning, such as "in order to", "due to the fact that", "it is worth noting that", "cabe destacar"? ${ANY_LANGUAGE}`,
52
+ threshold: 0.75
53
+ },
54
+ {
55
+ id: "aphorism-formula",
56
+ question: `Is \`sentence\` an aphorism of the form "X is the <abstract noun> of Y", such as "Trust is the currency of every deal", "Data is the language of growth", "Los datos son la columna vertebral de tu negocio"? Other contrasts and slogans do not count. ${ANY_LANGUAGE}`,
57
+ threshold: 0.7
58
+ },
59
+ {
60
+ id: "false-range",
61
+ question: `Does \`sentence\` use a "from X to Y" range whose two ends are not points on one scale, such as "from onboarding to retention", "from startups to enterprises", "desde la captaci\xF3n hasta la fidelizaci\xF3n"? A real range of numbers, prices or dates ("from $9 to $99") does not count. ${ANY_LANGUAGE}`,
62
+ threshold: 0.5
63
+ }
64
+ ];
65
+ function tellQuestionsFor(sentence) {
66
+ return TELL_QUESTIONS.map((t) => ({
67
+ instructions: {
68
+ sentence: sentence.text,
69
+ ...t.id === "negation-pivot" && sentence.before ? { before: sentence.before } : {},
70
+ question: t.question
71
+ }
72
+ }));
73
+ }
74
+ var SAME_CLAIM_QUESTION = `\`a\` and \`b\` are two headlines of the same ad. Are they the same claim reworded, a synonym or a swapped verb apart ("Boost Your Sales Fast" and "Increase Your Sales Fast"), rather than two different claims (a price, a guarantee, a delivery time, a rating)? ${ANY_LANGUAGE}`;
75
+ var SAME_CLAIM_HELD = 0.5;
76
+ function sameClaimQuestion(a, b) {
77
+ return { instructions: { a, b, question: SAME_CLAIM_QUESTION } };
78
+ }
79
+
80
+ // src/engine/copy-tells/sentences.ts
81
+ var SENTENCES = new Intl.Segmenter(void 0, { granularity: "sentence" });
82
+ var WORDS = new Intl.Segmenter(void 0, { granularity: "word" });
83
+ function wordCount(text) {
84
+ let n = 0;
85
+ for (const s of WORDS.segment(text)) if (s.isWordLike) n++;
86
+ return n;
87
+ }
88
+ function rawSentences(text) {
89
+ return [...SENTENCES.segment(text)].map((s) => s.segment.trim()).filter(Boolean);
90
+ }
91
+ function blockSentences(block, offset) {
92
+ const out = [];
93
+ let pending = null;
94
+ for (const segment of SENTENCES.segment(block)) {
95
+ const trimmed = segment.segment.trim().replace(/\s+/g, " ");
96
+ if (!trimmed) continue;
97
+ const start = offset + segment.index + (segment.segment.length - segment.segment.trimStart().length);
98
+ const joined = pending ? { text: `${pending.text} ${trimmed}`, start: pending.start } : { text: trimmed, start };
99
+ pending = wordCount(joined.text) < 2 ? joined : null;
100
+ if (!pending) out.push(joined);
101
+ }
102
+ if (pending && wordCount(pending.text) > 0) out.push(pending);
103
+ return out;
104
+ }
105
+ var BLOCK_END = /\n[^\S\n]*\n/g;
106
+ function copySentences(copy) {
107
+ const out = [];
108
+ let offset = 0;
109
+ for (const end of [...copy.matchAll(BLOCK_END), null]) {
110
+ const to = end ? end.index : copy.length;
111
+ blockSentences(copy.slice(offset, to).replaceAll("\n", " "), offset).forEach((s, i, all) => {
112
+ const before = all[i - 1]?.text;
113
+ out.push({ ...s, ...before ? { before } : {} });
114
+ });
115
+ if (end) offset = end.index + end[0].length;
116
+ }
117
+ return out;
118
+ }
119
+
120
+ // src/engine/copy-tells/patterns.ts
121
+ var STACCATO_MAX_WORDS = 4;
122
+ var STACCATO_RUN = 3;
123
+ var HEADLINE_SET_FLOOR = 3;
124
+
125
+ export {
126
+ STACCATO_MAX_WORDS,
127
+ STACCATO_RUN,
128
+ HEADLINE_SET_FLOOR,
129
+ TELL_QUESTIONS,
130
+ tellQuestionsFor,
131
+ SAME_CLAIM_HELD,
132
+ sameClaimQuestion,
133
+ wordCount,
134
+ rawSentences,
135
+ copySentences
136
+ };
137
+ //# sourceMappingURL=chunk-4NZ47VXO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/copy-tells/questions.ts","../src/engine/copy-tells/sentences.ts","../src/engine/copy-tells/patterns.ts"],"sourcesContent":["/**\n * The AI copy tells that are a reading of the words, asked of the decision model (Jev) one\n * sentence at a time, in whatever language the copy is written.\n *\n * The observation set is Wikipedia's \"Signs of AI writing\" (WikiProject AI Cleanup), via the\n * `humanizer` skill (MIT, github.com/blader/humanizer): which constructions models over-produce.\n * It used to be phrase lists in English and Spanish, so a Portuguese, German or French page passed\n * clean and a paraphrase of a listed phrase did too. The examples in each question are examples:\n * Jev reads the construction, not the words. Thresholds were measured on\n * scripts/copy-tells-evals (docs/decision-model.md).\n *\n * The tells that are a shape rather than a reading (a run of very short sentences, Title Case in\n * a heading, emoji, curly quotes, an inline-header list) stay in code: `detect.ts`.\n */\nimport type { NoulQuestion } from \"../lib/remembered-nouls.ts\";\n\nexport type JudgedTellId =\n | \"rhetorical-opener\"\n | \"negation-pivot\"\n | \"participle-tail\"\n | \"copula-avoidance\"\n | \"authority-trope\"\n | \"signposting\"\n | \"chat-artifact\"\n | \"vague-attribution\"\n | \"hollow-conclusion\"\n | \"filler-phrase\"\n | \"aphorism-formula\"\n | \"false-range\";\n\ntype TellQuestion = {\n id: JudgedTellId;\n question: string;\n /** At or above this, the sentence carries the tell. Measured per question. */\n threshold: number;\n};\n\nconst ANY_LANGUAGE = \"The copy may be in any language; judge the construction, not the words.\";\n\nexport const TELL_QUESTIONS: readonly TellQuestion[] = [\n {\n id: \"rhetorical-opener\",\n question: `Does \\`sentence\\` open with a fake-candid pause before an ordinary claim, such as \"Honestly?\", \"Here's the thing:\", \"Look,\", \"Let's be real\", \"La verdad es que\", \"Seamos sinceros\"? A sentence that simply starts with its claim does not count. ${ANY_LANGUAGE}`,\n threshold: 0.75,\n },\n {\n id: \"negation-pivot\",\n question: `Is \\`sentence\\` built as a negative parallelism that denies a smaller framing to assert a bigger one, such as \"It's not just a CRM, it's a growth engine\", \"Not only X but also Y\", \"No se trata solo de X, sino de Y\", or a short \"Not a tool.\" answered by \"A partner.\" (\\`before\\` is the sentence before it, for that two-sentence form)? A plain negative fact (\"No setup fee\", \"We don't sell your data\") does not count. ${ANY_LANGUAGE}`,\n threshold: 0.5,\n },\n {\n id: \"participle-tail\",\n question: `Does \\`sentence\\` end with a participle or gerund phrase hung off a comma to add vague significance, such as \", ensuring nothing slips through\", \", fostering growth\", \", permitiendo cerrar el mes antes\"? A sentence that opens with such a word does not count. ${ANY_LANGUAGE}`,\n threshold: 0.5,\n },\n {\n id: \"copula-avoidance\",\n question: `Does \\`sentence\\` use an inflated verb where a plain \"is\" or \"has\" would do, such as \"serves as\", \"stands as\", \"boasts\", \"se erige como\", \"cuenta con\"? ${ANY_LANGUAGE}`,\n threshold: 0.6,\n },\n {\n id: \"authority-trope\",\n question: `Does \\`sentence\\` claim to reveal what is \"really\" at stake, with a phrase like \"The real question is\", \"At its core\", \"What really matters is\", \"The heart of the matter\", \"En el fondo\", \"Lo que realmente importa\"? Candid openers (\"Honestly\", \"To be fair\"), contrasts (\"not just X, but Y\") and filler words are other tells and do not count here. ${ANY_LANGUAGE}`,\n threshold: 0.5,\n },\n {\n id: \"signposting\",\n question: `Does \\`sentence\\` announce what the text is about to explain instead of saying it, such as \"Let's dive in\", \"Here's what you need to know\", \"Let's break it down\", \"Vamos a ver cómo funciona\"? Presenting the offer itself (\"Here is a plan for every team size\", \"Aquí tienes nuestras tarifas\") and an assistant handing over a summary are not this. ${ANY_LANGUAGE}`,\n threshold: 0.5,\n },\n {\n id: \"chat-artifact\",\n question: `Is \\`sentence\\` an AI assistant talking to the person who asked it for the text, pasted into the page by mistake, such as \"I hope this helps!\", \"Let me know if you want changes\", \"Here is an overview of the plan\", \"Would you like me to\", \"Aquí tienes el resumen\"? Copy that speaks to the page's own visitor (\"Here are our three plans\", \"Tell us what you need\") does not count. ${ANY_LANGUAGE}`,\n threshold: 0.62,\n },\n {\n id: \"vague-attribution\",\n question: `Does \\`sentence\\` credit a claim to unnamed authorities, such as \"Experts agree\", \"Studies show\", \"Research shows\", \"Los expertos coinciden\", without naming who? ${ANY_LANGUAGE}`,\n threshold: 0.5,\n },\n {\n id: \"hollow-conclusion\",\n question: `Is \\`sentence\\` a vague upbeat ending that asserts nothing, such as \"The future looks bright\", \"The possibilities are endless\", \"El cielo es el límite\"? ${ANY_LANGUAGE}`,\n threshold: 0.65,\n },\n {\n id: \"filler-phrase\",\n question: `Does \\`sentence\\` contain a wordy filler phrase that carries no meaning, such as \"in order to\", \"due to the fact that\", \"it is worth noting that\", \"cabe destacar\"? ${ANY_LANGUAGE}`,\n threshold: 0.75,\n },\n {\n id: \"aphorism-formula\",\n question: `Is \\`sentence\\` an aphorism of the form \"X is the <abstract noun> of Y\", such as \"Trust is the currency of every deal\", \"Data is the language of growth\", \"Los datos son la columna vertebral de tu negocio\"? Other contrasts and slogans do not count. ${ANY_LANGUAGE}`,\n threshold: 0.7,\n },\n {\n id: \"false-range\",\n question: `Does \\`sentence\\` use a \"from X to Y\" range whose two ends are not points on one scale, such as \"from onboarding to retention\", \"from startups to enterprises\", \"desde la captación hasta la fidelización\"? A real range of numbers, prices or dates (\"from $9 to $99\") does not count. ${ANY_LANGUAGE}`,\n threshold: 0.5,\n },\n];\n\n/** One sentence of copy, and the one before it in the same block, when there is one. */\nexport type CopySentence = { text: string; before?: string };\n\n/** The tell questions for one sentence, in `TELL_QUESTIONS` order. Pure. */\nexport function tellQuestionsFor(sentence: CopySentence): NoulQuestion[] {\n return TELL_QUESTIONS.map((t) => ({\n instructions: {\n sentence: sentence.text,\n ...(t.id === \"negation-pivot\" && sentence.before ? { before: sentence.before } : {}),\n question: t.question,\n },\n }));\n}\n\n/**\n * Synonym cycling (§11): headlines of one ad that are one claim reworded with a swapped verb. Both\n * an AI tell and a real Google Ads defect, since a cycled set gives the auction nothing to choose\n * between. Asked of each pair of a set; it replaced a table of English and Spanish verb synonyms.\n */\nexport const SAME_CLAIM_QUESTION = `\\`a\\` and \\`b\\` are two headlines of the same ad. Are they the same claim reworded, a synonym or a swapped verb apart (\"Boost Your Sales Fast\" and \"Increase Your Sales Fast\"), rather than two different claims (a price, a guarantee, a delivery time, a rating)? ${ANY_LANGUAGE}`;\nexport const SAME_CLAIM_HELD = 0.5;\n\nexport function sameClaimQuestion(a: string, b: string): NoulQuestion {\n return { instructions: { a, b, question: SAME_CLAIM_QUESTION } };\n}\n","/**\n * Copy cut into the sentences the decision model reads one at a time. ICU's sentence and word\n * segmentation (`Intl.Segmenter`) does the cutting, so it holds in any script, Japanese and Thai\n * included, with no list of abbreviations or punctuation of our own.\n */\n\nexport type LocatedSentence = {\n text: string;\n /** Where the sentence starts in the copy, in UTF-16 code units. */\n start: number;\n /** The sentence before it in the same block, for a construction that spans two. */\n before?: string;\n};\n\nconst SENTENCES = new Intl.Segmenter(undefined, { granularity: \"sentence\" });\nconst WORDS = new Intl.Segmenter(undefined, { granularity: \"word\" });\n\n/** How many words `text` holds, in any script. Pure. */\nexport function wordCount(text: string): number {\n let n = 0;\n for (const s of WORDS.segment(text)) if (s.isWordLike) n++;\n return n;\n}\n\n/** Every sentence of `text` exactly as written, a one-word one included. Pure. */\nexport function rawSentences(text: string): string[] {\n return [...SENTENCES.segment(text)].map((s) => s.segment.trim()).filter(Boolean);\n}\n\n/** The sentences of one block, each located from `offset`, a one-word one joined to the next. */\nfunction blockSentences(block: string, offset: number): Array<{ text: string; start: number }> {\n const out: Array<{ text: string; start: number }> = [];\n let pending: { text: string; start: number } | null = null;\n for (const segment of SENTENCES.segment(block)) {\n const trimmed = segment.segment.trim().replace(/\\s+/g, \" \");\n if (!trimmed) continue;\n const start = offset + segment.index + (segment.segment.length - segment.segment.trimStart().length);\n const joined: { text: string; start: number } = pending\n ? { text: `${pending.text} ${trimmed}`, start: pending.start }\n : { text: trimmed, start };\n pending = wordCount(joined.text) < 2 ? joined : null;\n if (!pending) out.push(joined);\n }\n if (pending && wordCount(pending.text) > 0) out.push(pending);\n return out;\n}\n\n/** A blank line: what ends a block, in Markdown and in page copy, where block tags leave one. */\nconst BLOCK_END = /\\n[^\\S\\n]*\\n/g;\n\n/**\n * Every sentence of `copy`, block by block (a blank line ends a block; a single line break is a\n * soft wrap, read as a space). A one-word sentence is kept with the one it opens (\"Honestly? It\n * depends.\"): alone it says nothing to judge. Pure.\n */\nexport function copySentences(copy: string): LocatedSentence[] {\n const out: LocatedSentence[] = [];\n let offset = 0;\n for (const end of [...copy.matchAll(BLOCK_END), null]) {\n const to = end ? end.index : copy.length;\n blockSentences(copy.slice(offset, to).replaceAll(\"\\n\", \" \"), offset).forEach((s, i, all) => {\n const before = all[i - 1]?.text;\n out.push({ ...s, ...(before ? { before } : {}) });\n });\n if (end) offset = end.index + end[0].length;\n }\n return out;\n}\n","/**\n * AI copy tells — the ids, and the measures of the tells that are a shape.\n *\n * The observation set is Wikipedia's \"Signs of AI writing\" (WikiProject AI Cleanup) via the\n * `humanizer` skill (MIT, github.com/blader/humanizer): which constructions models over-produce.\n * The tells that read the words are questions to the decision model (`questions.ts`), in any\n * language; the ones here are measured in code and hold in any language too.\n *\n * Callers own the thresholds: a single tell in a 30-character Google headline is damning, the\n * same tell in a long landing is noise.\n */\nimport type { JudgedTellId } from \"./questions.ts\";\n\n/** The tells this module can report. */\nexport type CopyTellId =\n | JudgedTellId\n | \"staccato-drama\"\n | \"curly-quote\"\n | \"emoji\"\n | \"inline-header-list\"\n | \"title-case-heading\"\n | \"synonym-cycling\";\n\n/** Staccato drama (§31): N consecutive sentences at or under this word count. */\nexport const STACCATO_MAX_WORDS = 4;\nexport const STACCATO_RUN = 3;\n\n/** Below this many headlines there is no \"set\" to judge for synonym cycling (§11). */\nexport const HEADLINE_SET_FLOOR = 3;\n"],"mappings":"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","names":[]}