@koda-sl/baker-cli 0.386.0-dev.4e118c09a → 0.386.0-dev.d6e55699d

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 +1057 -215
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-5TGX45FO.js +79 -0
  5. package/dist/account-5TGX45FO.js.map +1 -0
  6. package/dist/account-CLOKMTTC.js +49 -0
  7. package/dist/account-CLOKMTTC.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-ZK5RMLB2.js +218 -0
  11. package/dist/account-reads-ZK5RMLB2.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-HGAFFOA7.js +77 -0
  19. package/dist/accounts-HGAFFOA7.js.map +1 -0
  20. package/dist/accounts-OWMXUT6D.js +611 -0
  21. package/dist/accounts-OWMXUT6D.js.map +1 -0
  22. package/dist/accounts-RYBDLQ6H.js +75 -0
  23. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  24. package/dist/actions-NSQYW7YS.js +55 -0
  25. package/dist/actions-NSQYW7YS.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-HWIE5PGR.js +302 -0
  37. package/dist/add-HWIE5PGR.js.map +1 -0
  38. package/dist/add-IIW3NHZH.js +104 -0
  39. package/dist/add-IIW3NHZH.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-D6KKCQ3Q.js +40 -0
  51. package/dist/ads-D6KKCQ3Q.js.map +1 -0
  52. package/dist/ads-QKIHHXP5.js +113 -0
  53. package/dist/ads-QKIHHXP5.js.map +1 -0
  54. package/dist/adsets-7WMWU45E.js +176 -0
  55. package/dist/adsets-7WMWU45E.js.map +1 -0
  56. package/dist/advertisers-6NZ2M57X.js +120 -0
  57. package/dist/advertisers-6NZ2M57X.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-QJC2BTZY.js +433 -0
  61. package/dist/analytics-QJC2BTZY.js.map +1 -0
  62. package/dist/analytics-SN6K7J7M.js +1980 -0
  63. package/dist/analytics-SN6K7J7M.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-XFDA42KL.js +77 -0
  67. package/dist/assign-XFDA42KL.js.map +1 -0
  68. package/dist/audience-size-DJPFYHPJ.js +94 -0
  69. package/dist/audience-size-DJPFYHPJ.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-VXTIBZP6.js +78 -0
  75. package/dist/audiences-VXTIBZP6.js.map +1 -0
  76. package/dist/audit-M5B7TZGT.js +151 -0
  77. package/dist/audit-M5B7TZGT.js.map +1 -0
  78. package/dist/audit-UIPMTI5C.js +88 -0
  79. package/dist/audit-UIPMTI5C.js.map +1 -0
  80. package/dist/autocomplete-NWHEASQY.js +111 -0
  81. package/dist/autocomplete-NWHEASQY.js.map +1 -0
  82. package/dist/avatars-RNMUVMFM.js +38 -0
  83. package/dist/avatars-RNMUVMFM.js.map +1 -0
  84. package/dist/bid-pricing-EAY3HAHY.js +99 -0
  85. package/dist/bid-pricing-EAY3HAHY.js.map +1 -0
  86. package/dist/brand-XBHWYPMT.js +22 -0
  87. package/dist/brand-XBHWYPMT.js.map +1 -0
  88. package/dist/brief-XBAAPKRR.js +492 -0
  89. package/dist/brief-XBAAPKRR.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-7KA2RA5V.js +95 -0
  93. package/dist/campaign-groups-7KA2RA5V.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-D2UID2I6.js +165 -0
  97. package/dist/campaign-writes-D2UID2I6.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-NJ3KOPJS.js +107 -0
  101. package/dist/campaigns-NJ3KOPJS.js.map +1 -0
  102. package/dist/campaigns-QUTTH2TB.js +110 -0
  103. package/dist/campaigns-QUTTH2TB.js.map +1 -0
  104. package/dist/campaigns-SOO5RHYG.js +109 -0
  105. package/dist/campaigns-SOO5RHYG.js.map +1 -0
  106. package/dist/canvas-3VZ46BCF.js +46 -0
  107. package/dist/canvas-3VZ46BCF.js.map +1 -0
  108. package/dist/capabilities-KAYDPH7E.js +144 -0
  109. package/dist/capabilities-KAYDPH7E.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-22EO52IY.js +135 -0
  117. package/dist/changes-22EO52IY.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-QG3IRHOD.js +262 -0
  121. package/dist/chats-QG3IRHOD.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-2SQJL7ZN.js +56 -0
  125. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  126. package/dist/chunk-2Y5V23PU.js +29 -0
  127. package/dist/chunk-2Y5V23PU.js.map +1 -0
  128. package/dist/chunk-32CPGJPL.js +149 -0
  129. package/dist/chunk-32CPGJPL.js.map +1 -0
  130. package/dist/chunk-32PSERWG.js +363 -0
  131. package/dist/chunk-32PSERWG.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-3UDSYYND.js +42 -0
  135. package/dist/chunk-3UDSYYND.js.map +1 -0
  136. package/dist/chunk-3V5E5SVE.js +382 -0
  137. package/dist/chunk-3V5E5SVE.js.map +1 -0
  138. package/dist/chunk-455BTAHM.js +57 -0
  139. package/dist/chunk-455BTAHM.js.map +1 -0
  140. package/dist/chunk-4MH6LONO.js +274 -0
  141. package/dist/chunk-4MH6LONO.js.map +1 -0
  142. package/dist/chunk-4NZ47VXO.js +137 -0
  143. package/dist/chunk-4NZ47VXO.js.map +1 -0
  144. package/dist/chunk-4OBO75XU.js +275 -0
  145. package/dist/chunk-4OBO75XU.js.map +1 -0
  146. package/dist/chunk-5HYSKH77.js +315 -0
  147. package/dist/chunk-5HYSKH77.js.map +1 -0
  148. package/dist/chunk-5MBPIONY.js +29 -0
  149. package/dist/chunk-5MBPIONY.js.map +1 -0
  150. package/dist/chunk-5OVOLYY3.js +74 -0
  151. package/dist/chunk-5OVOLYY3.js.map +1 -0
  152. package/dist/chunk-66USKCVY.js +4410 -0
  153. package/dist/chunk-66USKCVY.js.map +1 -0
  154. package/dist/chunk-6I7SYEYN.js +166 -0
  155. package/dist/chunk-6I7SYEYN.js.map +1 -0
  156. package/dist/chunk-6O7ISBC7.js +65 -0
  157. package/dist/chunk-6O7ISBC7.js.map +1 -0
  158. package/dist/chunk-752S7JF6.js +35 -0
  159. package/dist/chunk-752S7JF6.js.map +1 -0
  160. package/dist/chunk-AFJGYJ7Z.js +45 -0
  161. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  162. package/dist/chunk-AR7PU7BB.js +76 -0
  163. package/dist/chunk-AR7PU7BB.js.map +1 -0
  164. package/dist/chunk-ASL7JFBD.js +96 -0
  165. package/dist/chunk-ASL7JFBD.js.map +1 -0
  166. package/dist/chunk-AUCITRRT.js +310 -0
  167. package/dist/chunk-AUCITRRT.js.map +1 -0
  168. package/dist/chunk-AUSKKFVH.js +84 -0
  169. package/dist/chunk-AUSKKFVH.js.map +1 -0
  170. package/dist/chunk-BEGARAVC.js +174 -0
  171. package/dist/chunk-BEGARAVC.js.map +1 -0
  172. package/dist/{chunk-WWCLT3RG.js → chunk-BVM5IRZW.js} +16 -8
  173. package/dist/chunk-BVM5IRZW.js.map +1 -0
  174. package/dist/chunk-CAMX6OHF.js +3182 -0
  175. package/dist/chunk-CAMX6OHF.js.map +1 -0
  176. package/dist/chunk-CKI3RLMU.js +159 -0
  177. package/dist/chunk-CKI3RLMU.js.map +1 -0
  178. package/dist/chunk-CZENWCBS.js +333 -0
  179. package/dist/chunk-CZENWCBS.js.map +1 -0
  180. package/dist/chunk-D5FY4FAK.js +24 -0
  181. package/dist/chunk-D5FY4FAK.js.map +1 -0
  182. package/dist/chunk-DGCUPJZD.js +39 -0
  183. package/dist/chunk-DGCUPJZD.js.map +1 -0
  184. package/dist/chunk-DIICZGIS.js +509 -0
  185. package/dist/chunk-DIICZGIS.js.map +1 -0
  186. package/dist/chunk-DNCLWSHO.js +41 -0
  187. package/dist/chunk-DNCLWSHO.js.map +1 -0
  188. package/dist/chunk-DX4GIDO7.js +296 -0
  189. package/dist/chunk-DX4GIDO7.js.map +1 -0
  190. package/dist/chunk-DYZJBWT2.js +1079 -0
  191. package/dist/chunk-DYZJBWT2.js.map +1 -0
  192. package/dist/chunk-EDLZGTGN.js +216 -0
  193. package/dist/chunk-EDLZGTGN.js.map +1 -0
  194. package/dist/chunk-EDNX3AOS.js +76 -0
  195. package/dist/chunk-EDNX3AOS.js.map +1 -0
  196. package/dist/chunk-EF5DP6EB.js +52 -0
  197. package/dist/chunk-EF5DP6EB.js.map +1 -0
  198. package/dist/chunk-EQEZAYPL.js +541 -0
  199. package/dist/chunk-EQEZAYPL.js.map +1 -0
  200. package/dist/chunk-ERSX3MKH.js +34 -0
  201. package/dist/chunk-ERSX3MKH.js.map +1 -0
  202. package/dist/chunk-FKOECEVC.js +126 -0
  203. package/dist/chunk-FKOECEVC.js.map +1 -0
  204. package/dist/chunk-FYWWTMXP.js +2902 -0
  205. package/dist/chunk-FYWWTMXP.js.map +1 -0
  206. package/dist/chunk-G7AFVTUS.js +106 -0
  207. package/dist/chunk-G7AFVTUS.js.map +1 -0
  208. package/dist/chunk-GIW7ABMM.js +74 -0
  209. package/dist/chunk-GIW7ABMM.js.map +1 -0
  210. package/dist/chunk-GIWHHCD6.js +145 -0
  211. package/dist/chunk-GIWHHCD6.js.map +1 -0
  212. package/dist/chunk-GOJXKIFQ.js +1605 -0
  213. package/dist/chunk-GOJXKIFQ.js.map +1 -0
  214. package/dist/chunk-GPXIUYIA.js +592 -0
  215. package/dist/chunk-GPXIUYIA.js.map +1 -0
  216. package/dist/chunk-GRQ2AXDX.js +9 -0
  217. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  218. package/dist/chunk-GXDLWBOY.js +73 -0
  219. package/dist/chunk-GXDLWBOY.js.map +1 -0
  220. package/dist/chunk-H7MLHG2I.js +94 -0
  221. package/dist/chunk-H7MLHG2I.js.map +1 -0
  222. package/dist/chunk-HAE4WWFQ.js +455 -0
  223. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  224. package/dist/chunk-HB3LNR4Y.js +197 -0
  225. package/dist/chunk-HB3LNR4Y.js.map +1 -0
  226. package/dist/chunk-HDHWIEJJ.js +136 -0
  227. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  228. package/dist/chunk-HJTIBTF7.js +98 -0
  229. package/dist/chunk-HJTIBTF7.js.map +1 -0
  230. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  231. package/dist/chunk-HLXWKMTK.js.map +1 -0
  232. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  233. package/dist/chunk-HREWXNTO.js.map +1 -0
  234. package/dist/chunk-HVJUMQYY.js +494 -0
  235. package/dist/chunk-HVJUMQYY.js.map +1 -0
  236. package/dist/chunk-I3DIZWN5.js +97 -0
  237. package/dist/chunk-I3DIZWN5.js.map +1 -0
  238. package/dist/chunk-IJMWEO4P.js +57 -0
  239. package/dist/chunk-IJMWEO4P.js.map +1 -0
  240. package/dist/chunk-IMORFIUT.js +207 -0
  241. package/dist/chunk-IMORFIUT.js.map +1 -0
  242. package/dist/chunk-IOCSDFF2.js +23992 -0
  243. package/dist/chunk-IOCSDFF2.js.map +1 -0
  244. package/dist/chunk-IRTYTT5D.js +665 -0
  245. package/dist/chunk-IRTYTT5D.js.map +1 -0
  246. package/dist/chunk-IVIJJXXT.js +62 -0
  247. package/dist/chunk-IVIJJXXT.js.map +1 -0
  248. package/dist/chunk-J57GWTPK.js +106 -0
  249. package/dist/chunk-J57GWTPK.js.map +1 -0
  250. package/dist/chunk-JAYT43KX.js +4227 -0
  251. package/dist/chunk-JAYT43KX.js.map +1 -0
  252. package/dist/chunk-JPK34QPS.js +134 -0
  253. package/dist/chunk-JPK34QPS.js.map +1 -0
  254. package/dist/chunk-JRCFCIE3.js +188 -0
  255. package/dist/chunk-JRCFCIE3.js.map +1 -0
  256. package/dist/chunk-JRGPCPT2.js +479 -0
  257. package/dist/chunk-JRGPCPT2.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-K2RYUZ5Y.js +51 -0
  261. package/dist/chunk-K2RYUZ5Y.js.map +1 -0
  262. package/dist/chunk-K5OQES4V.js +58 -0
  263. package/dist/chunk-K5OQES4V.js.map +1 -0
  264. package/dist/chunk-KAHMADFH.js +455 -0
  265. package/dist/chunk-KAHMADFH.js.map +1 -0
  266. package/dist/chunk-KIGGMKAE.js +66 -0
  267. package/dist/chunk-KIGGMKAE.js.map +1 -0
  268. package/dist/chunk-KKJ4KJCW.js +29 -0
  269. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  270. package/dist/chunk-KLK6KQLQ.js +55 -0
  271. package/dist/chunk-KLK6KQLQ.js.map +1 -0
  272. package/dist/chunk-KRIK2JR4.js +6212 -0
  273. package/dist/chunk-KRIK2JR4.js.map +1 -0
  274. package/dist/chunk-KZUHRZ2C.js +5187 -0
  275. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  276. package/dist/chunk-L5WIRYNB.js +19 -0
  277. package/dist/chunk-L5WIRYNB.js.map +1 -0
  278. package/dist/chunk-LA6PPSNA.js +65 -0
  279. package/dist/chunk-LA6PPSNA.js.map +1 -0
  280. package/dist/chunk-LEIQAHWF.js +25 -0
  281. package/dist/chunk-LEIQAHWF.js.map +1 -0
  282. package/dist/chunk-LWBWCIWL.js +297 -0
  283. package/dist/chunk-LWBWCIWL.js.map +1 -0
  284. package/dist/chunk-M4PPFVYL.js +346 -0
  285. package/dist/chunk-M4PPFVYL.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-MUVSWFLL.js +111 -0
  291. package/dist/chunk-MUVSWFLL.js.map +1 -0
  292. package/dist/chunk-NFSLRRIE.js +77 -0
  293. package/dist/chunk-NFSLRRIE.js.map +1 -0
  294. package/dist/chunk-NHU33T2S.js +60 -0
  295. package/dist/chunk-NHU33T2S.js.map +1 -0
  296. package/dist/chunk-O6QKCJE4.js +455 -0
  297. package/dist/chunk-O6QKCJE4.js.map +1 -0
  298. package/dist/chunk-OBNWER4H.js +1599 -0
  299. package/dist/chunk-OBNWER4H.js.map +1 -0
  300. package/dist/chunk-OFFAMC5H.js +225 -0
  301. package/dist/chunk-OFFAMC5H.js.map +1 -0
  302. package/dist/chunk-P4NSJS54.js +20 -0
  303. package/dist/chunk-P4NSJS54.js.map +1 -0
  304. package/dist/chunk-P5T7OZKV.js +26 -0
  305. package/dist/chunk-P5T7OZKV.js.map +1 -0
  306. package/dist/chunk-PAHLJMC3.js +175 -0
  307. package/dist/chunk-PAHLJMC3.js.map +1 -0
  308. package/dist/chunk-PBVLPFJ6.js +169 -0
  309. package/dist/chunk-PBVLPFJ6.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-Q6ULQMWG.js +41 -0
  313. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  314. package/dist/chunk-QKE7GXZ7.js +6683 -0
  315. package/dist/chunk-QKE7GXZ7.js.map +1 -0
  316. package/dist/chunk-QL573PLH.js +150 -0
  317. package/dist/chunk-QL573PLH.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-R5OQM7FF.js +179 -0
  321. package/dist/chunk-R5OQM7FF.js.map +1 -0
  322. package/dist/chunk-RDLB54KF.js +629 -0
  323. package/dist/chunk-RDLB54KF.js.map +1 -0
  324. package/dist/chunk-RGIXQEGJ.js +502 -0
  325. package/dist/chunk-RGIXQEGJ.js.map +1 -0
  326. package/dist/chunk-RRIAHUWP.js +304 -0
  327. package/dist/chunk-RRIAHUWP.js.map +1 -0
  328. package/dist/chunk-S4LZ7KTG.js +160 -0
  329. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  330. package/dist/chunk-SHTESUB6.js +1442 -0
  331. package/dist/chunk-SHTESUB6.js.map +1 -0
  332. package/dist/chunk-SLB46MSS.js +64 -0
  333. package/dist/chunk-SLB46MSS.js.map +1 -0
  334. package/dist/chunk-T7M4WFNV.js +172 -0
  335. package/dist/chunk-T7M4WFNV.js.map +1 -0
  336. package/dist/{chunk-JTZXQRXI.js → chunk-TPXI2GCW.js} +4 -4
  337. package/dist/chunk-TWNFQUBS.js +23 -0
  338. package/dist/chunk-TWNFQUBS.js.map +1 -0
  339. package/dist/chunk-U6VRBDNQ.js +1830 -0
  340. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  341. package/dist/chunk-U7BBXM67.js +1743 -0
  342. package/dist/chunk-U7BBXM67.js.map +1 -0
  343. package/dist/chunk-UI6BKYQD.js +225 -0
  344. package/dist/chunk-UI6BKYQD.js.map +1 -0
  345. package/dist/chunk-USL5ARRE.js +26 -0
  346. package/dist/chunk-USL5ARRE.js.map +1 -0
  347. package/dist/chunk-UYC45JNS.js +139 -0
  348. package/dist/chunk-UYC45JNS.js.map +1 -0
  349. package/dist/chunk-V5GSRREZ.js +846 -0
  350. package/dist/chunk-V5GSRREZ.js.map +1 -0
  351. package/dist/chunk-V5HDRJQW.js +337 -0
  352. package/dist/chunk-V5HDRJQW.js.map +1 -0
  353. package/dist/chunk-VS4C7VAR.js +533 -0
  354. package/dist/chunk-VS4C7VAR.js.map +1 -0
  355. package/dist/chunk-W4W4ZRBP.js +191 -0
  356. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  357. package/dist/chunk-WIRBRCTJ.js +228 -0
  358. package/dist/chunk-WIRBRCTJ.js.map +1 -0
  359. package/dist/chunk-WN4KX7GE.js +25 -0
  360. package/dist/chunk-WN4KX7GE.js.map +1 -0
  361. package/dist/chunk-WNFTXSGR.js +111 -0
  362. package/dist/chunk-WNFTXSGR.js.map +1 -0
  363. package/dist/chunk-WOTDHRNF.js +2109 -0
  364. package/dist/chunk-WOTDHRNF.js.map +1 -0
  365. package/dist/chunk-WPKOEFOE.js +103 -0
  366. package/dist/chunk-WPKOEFOE.js.map +1 -0
  367. package/dist/chunk-XE3WS3QE.js +183 -0
  368. package/dist/chunk-XE3WS3QE.js.map +1 -0
  369. package/dist/chunk-XGWKTYXQ.js +67 -0
  370. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  371. package/dist/chunk-XIGIJJSF.js +66 -0
  372. package/dist/chunk-XIGIJJSF.js.map +1 -0
  373. package/dist/chunk-XNUXB63I.js +817 -0
  374. package/dist/chunk-XNUXB63I.js.map +1 -0
  375. package/dist/chunk-XQ3CCNJD.js +610 -0
  376. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  377. package/dist/chunk-Y362QH54.js +98 -0
  378. package/dist/chunk-Y362QH54.js.map +1 -0
  379. package/dist/chunk-Y4HZNSBN.js +3151 -0
  380. package/dist/chunk-Y4HZNSBN.js.map +1 -0
  381. package/dist/chunk-Y4T6ATDQ.js +74 -0
  382. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  383. package/dist/chunk-YIMGUMXX.js +206 -0
  384. package/dist/chunk-YIMGUMXX.js.map +1 -0
  385. package/dist/chunk-YQSBHWOI.js +41 -0
  386. package/dist/chunk-YU26SDNT.js +46 -0
  387. package/dist/chunk-YU26SDNT.js.map +1 -0
  388. package/dist/chunk-YULENNA7.js +501 -0
  389. package/dist/chunk-YULENNA7.js.map +1 -0
  390. package/dist/chunk-YYSZYSAG.js +150 -0
  391. package/dist/chunk-YYSZYSAG.js.map +1 -0
  392. package/dist/chunk-Z3ENMCFE.js +94 -0
  393. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  394. package/dist/chunk-ZCFSHQBF.js +92 -0
  395. package/dist/chunk-ZCFSHQBF.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-4AFNDV3A.js +197 -0
  403. package/dist/claim-4AFNDV3A.js.map +1 -0
  404. package/dist/cli.js +104 -71708
  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-PZRRZZNV.js +195 -0
  410. package/dist/companies-PZRRZZNV.js.map +1 -0
  411. package/dist/complete-IBW5DNVZ.js +81 -0
  412. package/dist/complete-IBW5DNVZ.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-WYUYS5V4.js +42 -0
  416. package/dist/content-UYZC4AKN.js +85 -0
  417. package/dist/content-UYZC4AKN.js.map +1 -0
  418. package/dist/conversation-6AG3UBYY.js +93 -0
  419. package/dist/conversation-6AG3UBYY.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-YML2UNJB.js +438 -0
  423. package/dist/conversion-upload-command-YML2UNJB.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-NOBBFNIU.js +135 -0
  427. package/dist/conversions-NOBBFNIU.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-JK42P564.js +59 -0
  433. package/dist/create-JK42P564.js.map +1 -0
  434. package/dist/create-LAWUVPCY.js +207 -0
  435. package/dist/create-LAWUVPCY.js.map +1 -0
  436. package/dist/create-MUPQ5CTH.js +138 -0
  437. package/dist/create-MUPQ5CTH.js.map +1 -0
  438. package/dist/create-NQJNCFRO.js +236 -0
  439. package/dist/create-NQJNCFRO.js.map +1 -0
  440. package/dist/creatives-KCWFZIM5.js +182 -0
  441. package/dist/creatives-KCWFZIM5.js.map +1 -0
  442. package/dist/creatives-NNDWCSKJ.js +51 -0
  443. package/dist/creatives-NNDWCSKJ.js.map +1 -0
  444. package/dist/creatives-RHNHTS2R.js +87 -0
  445. package/dist/creatives-RHNHTS2R.js.map +1 -0
  446. package/dist/credentials-CEKGXR2C.js +287 -0
  447. package/dist/credentials-CEKGXR2C.js.map +1 -0
  448. package/dist/critique-HDDYER52.js +1449 -0
  449. package/dist/critique-HDDYER52.js.map +1 -0
  450. package/dist/critique-QIN2FO4F.js +216 -0
  451. package/dist/critique-QIN2FO4F.js.map +1 -0
  452. package/dist/crm-KBPWZC6J.js +318 -0
  453. package/dist/crm-KBPWZC6J.js.map +1 -0
  454. package/dist/crm-QBWD7CWB.js +224 -0
  455. package/dist/crm-QBWD7CWB.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-XTFGZFGB.js +88 -0
  459. package/dist/currency-XTFGZFGB.js.map +1 -0
  460. package/dist/custom-conversions-W3K33V33.js +125 -0
  461. package/dist/custom-conversions-W3K33V33.js.map +1 -0
  462. package/dist/customers-HYE7N2H5.js +56 -0
  463. package/dist/decide-YTHCBKM6.js +199 -0
  464. package/dist/decide-YTHCBKM6.js.map +1 -0
  465. package/dist/delete-64REPCY2.js +54 -0
  466. package/dist/delete-64REPCY2.js.map +1 -0
  467. package/dist/delete-AY3KL3N3.js +63 -0
  468. package/dist/delete-AY3KL3N3.js.map +1 -0
  469. package/dist/delete-DZUDLYPC.js +69 -0
  470. package/dist/delete-DZUDLYPC.js.map +1 -0
  471. package/dist/delete-NZGZP4YP.js +71 -0
  472. package/dist/delete-NZGZP4YP.js.map +1 -0
  473. package/dist/delete-VO2LZXE4.js +66 -0
  474. package/dist/delete-VO2LZXE4.js.map +1 -0
  475. package/dist/delete-VQMU56OH.js +71 -0
  476. package/dist/delete-VQMU56OH.js.map +1 -0
  477. package/dist/demographics-KOFLMGVW.js +138 -0
  478. package/dist/demographics-KOFLMGVW.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-H4RPXZHX.js +66 -0
  486. package/dist/discard-H4RPXZHX.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-L7OVXW4V.js +172 -0
  490. package/dist/discover-L7OVXW4V.js.map +1 -0
  491. package/dist/domain-HURQ23KR.js +98 -0
  492. package/dist/domain-HURQ23KR.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-5VH2PW3R.js +307 -0
  498. package/dist/draft-5VH2PW3R.js.map +1 -0
  499. package/dist/draft-D6UTKSAA.js +217 -0
  500. package/dist/draft-D6UTKSAA.js.map +1 -0
  501. package/dist/draft-KLULNBWP.js +233 -0
  502. package/dist/draft-KLULNBWP.js.map +1 -0
  503. package/dist/draft-MI7RWY2K.js +100 -0
  504. package/dist/draft-MI7RWY2K.js.map +1 -0
  505. package/dist/draft-P4IVYTY3.js +103 -0
  506. package/dist/draft-P4IVYTY3.js.map +1 -0
  507. package/dist/draft-UQYWDZS7.js +306 -0
  508. package/dist/draft-UQYWDZS7.js.map +1 -0
  509. package/dist/draft-YFAJHCKM.js +328 -0
  510. package/dist/draft-YFAJHCKM.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-WYQUZMFJ.js +114 -0
  522. package/dist/facets-WYQUZMFJ.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-SIMPRE37.js +66 -0
  528. package/dist/feedback-SIMPRE37.js.map +1 -0
  529. package/dist/feedback-record-L4MPIVML.js +177 -0
  530. package/dist/feedback-record-L4MPIVML.js.map +1 -0
  531. package/dist/fetch-DTBM3DE2.js +176 -0
  532. package/dist/fetch-DTBM3DE2.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-IUDXVDOS.js +247 -0
  540. package/dist/flows-IUDXVDOS.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-EUDHI6CA.js +34 -0
  548. package/dist/fonts-EUDHI6CA.js.map +1 -0
  549. package/dist/forecast-BRSEH2H3.js +104 -0
  550. package/dist/forecast-BRSEH2H3.js.map +1 -0
  551. package/dist/forecast-QV4U7TOY.js +168 -0
  552. package/dist/forecast-QV4U7TOY.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-JLF77MLF.js +394 -0
  556. package/dist/funnel-JLF77MLF.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-AYX5HS64.js +56 -0
  566. package/dist/get-AYX5HS64.js.map +1 -0
  567. package/dist/get-AZARFR6O.js +61 -0
  568. package/dist/get-AZARFR6O.js.map +1 -0
  569. package/dist/get-EG2U7MIL.js +78 -0
  570. package/dist/get-EG2U7MIL.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-52JRH7X3.js +136 -0
  578. package/dist/google-52JRH7X3.js.map +1 -0
  579. package/dist/google-ITTPCJ7N.js +3190 -0
  580. package/dist/google-ITTPCJ7N.js.map +1 -0
  581. package/dist/google-ads-U3JFFQLU.js +195 -0
  582. package/dist/google-ads-U3JFFQLU.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-YTNCWSV3.js +133 -0
  592. package/dist/history-YTNCWSV3.js.map +1 -0
  593. package/dist/hubspot-LXWQNKKB.js +779 -0
  594. package/dist/hubspot-LXWQNKKB.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-JJIHQFV4.js +35 -0
  598. package/dist/ideas-JJIHQFV4.js.map +1 -0
  599. package/dist/images-MWETBYKB.js +90 -0
  600. package/dist/images-MWETBYKB.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-THFAV4NO.js +107 -0
  604. package/dist/ingest-THFAV4NO.js.map +1 -0
  605. package/dist/ingest-U6B7GR4A.js +23 -0
  606. package/dist/ingest-U6B7GR4A.js.map +1 -0
  607. package/dist/insights-FA6T6PT6.js +423 -0
  608. package/dist/insights-FA6T6PT6.js.map +1 -0
  609. package/dist/insights-PELVD4RY.js +122 -0
  610. package/dist/insights-PELVD4RY.js.map +1 -0
  611. package/dist/inspect-N2WVVWGP.js +189 -0
  612. package/dist/inspect-N2WVVWGP.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-YNAAVNHK.js +95 -0
  616. package/dist/intent-YNAAVNHK.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-4JKLWIBJ.js +130 -0
  626. package/dist/keyword-gap-4JKLWIBJ.js.map +1 -0
  627. package/dist/keyword-metrics-KU3OHTQK.js +197 -0
  628. package/dist/keyword-metrics-KU3OHTQK.js.map +1 -0
  629. package/dist/keywords-for-site-M4MFWMVK.js +128 -0
  630. package/dist/keywords-for-site-M4MFWMVK.js.map +1 -0
  631. package/dist/landing-7UVZ7IPP.js +28 -0
  632. package/dist/landing-7UVZ7IPP.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-PKYCZNUB.js +40 -0
  636. package/dist/languages-PKYCZNUB.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-CSRESOB2.js +293 -0
  644. package/dist/leads-CSRESOB2.js.map +1 -0
  645. package/dist/leads-MQPEA7DG.js +90 -0
  646. package/dist/leads-MQPEA7DG.js.map +1 -0
  647. package/dist/learn-K5YBUMBT.js +203 -0
  648. package/dist/learn-K5YBUMBT.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-73NR2J5L.js +208 -0
  654. package/dist/line-item-writes-73NR2J5L.js.map +1 -0
  655. package/dist/line-items-2YBGXOAQ.js +103 -0
  656. package/dist/line-items-2YBGXOAQ.js.map +1 -0
  657. package/dist/link-GVAWECJO.js +64 -0
  658. package/dist/link-GVAWECJO.js.map +1 -0
  659. package/dist/linkedin-PZDT22AT.js +1008 -0
  660. package/dist/linkedin-PZDT22AT.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-FNDRV25Y.js +151 -0
  666. package/dist/list-FNDRV25Y.js.map +1 -0
  667. package/dist/list-GTOSN7DP.js +50 -0
  668. package/dist/list-GTOSN7DP.js.map +1 -0
  669. package/dist/list-HLJP4NVE.js +51 -0
  670. package/dist/list-HLJP4NVE.js.map +1 -0
  671. package/dist/list-LCUPF7EF.js +76 -0
  672. package/dist/list-LCUPF7EF.js.map +1 -0
  673. package/dist/list-REZGFWC5.js +63 -0
  674. package/dist/list-REZGFWC5.js.map +1 -0
  675. package/dist/list-S6MNXDTV.js +303 -0
  676. package/dist/list-S6MNXDTV.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-GJHHMV6Z.js +40 -0
  680. package/dist/locations-GJHHMV6Z.js.map +1 -0
  681. package/dist/log-HGDNLDUX.js +92 -0
  682. package/dist/log-HGDNLDUX.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-BT26YJXZ.js +640 -0
  688. package/dist/make-BT26YJXZ.js.map +1 -0
  689. package/dist/map-J5EX4HOX.js +404 -0
  690. package/dist/map-J5EX4HOX.js.map +1 -0
  691. package/dist/mcp-MHDW6AFL.js +463 -0
  692. package/dist/mcp-MHDW6AFL.js.map +1 -0
  693. package/dist/media-RAGEJTZX.js +89 -0
  694. package/dist/media-RAGEJTZX.js.map +1 -0
  695. package/dist/media-RNB7JFJP.js +15 -0
  696. package/dist/media-RNB7JFJP.js.map +1 -0
  697. package/dist/media-sources-4NN3DWSG.js +32 -0
  698. package/dist/media-sources-4NN3DWSG.js.map +1 -0
  699. package/dist/members-AIWMXAQD.js +44 -0
  700. package/dist/members-AIWMXAQD.js.map +1 -0
  701. package/dist/meta-WAPZMZI7.js +69 -0
  702. package/dist/meta-WAPZMZI7.js.map +1 -0
  703. package/dist/metrics-6EHC4ESN.js +152 -0
  704. package/dist/metrics-6EHC4ESN.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-ZAWN4XCS.js +141 -0
  710. package/dist/normalize-ZAWN4XCS.js.map +1 -0
  711. package/dist/options-3CZNT5KP.js +121 -0
  712. package/dist/options-3CZNT5KP.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-GOMJMHPE.js +24 -0
  720. package/dist/performance-GOMJMHPE.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-UKYLPAW2.js +169 -0
  730. package/dist/preview-UKYLPAW2.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-IYOAZTA5.js +180 -0
  734. package/dist/promoted-tweet-writes-IYOAZTA5.js.map +1 -0
  735. package/dist/promoted-tweets-G3XFD5YM.js +119 -0
  736. package/dist/promoted-tweets-G3XFD5YM.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-ZG4J2GTH.js +322 -0
  740. package/dist/publish-ZG4J2GTH.js.map +1 -0
  741. package/dist/query-7AGG77WH.js +61 -0
  742. package/dist/query-7AGG77WH.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-FTO4SFQE.js +26 -0
  752. package/dist/reddit-FTO4SFQE.js.map +1 -0
  753. package/dist/refresh-OUENQ2FS.js +94 -0
  754. package/dist/refresh-OUENQ2FS.js.map +1 -0
  755. package/dist/release-5OG7AAFY.js +60 -0
  756. package/dist/release-5OG7AAFY.js.map +1 -0
  757. package/dist/relevant-pages-KUVDZPRU.js +99 -0
  758. package/dist/relevant-pages-KUVDZPRU.js.map +1 -0
  759. package/dist/remove-33HI27KM.js +50 -0
  760. package/dist/remove-33HI27KM.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-KFFYE53A.js +63 -0
  764. package/dist/reopen-KFFYE53A.js.map +1 -0
  765. package/dist/rerun-P6XACA5Z.js +86 -0
  766. package/dist/rerun-P6XACA5Z.js.map +1 -0
  767. package/dist/research-BEO3JMZI.js +262 -0
  768. package/dist/research-BEO3JMZI.js.map +1 -0
  769. package/dist/research-QOC53DLS.js +62 -0
  770. package/dist/research-QOC53DLS.js.map +1 -0
  771. package/dist/reset-E3OWE2WF.js +54 -0
  772. package/dist/reset-E3OWE2WF.js.map +1 -0
  773. package/dist/reset-I7M3HYMB.js +54 -0
  774. package/dist/reset-I7M3HYMB.js.map +1 -0
  775. package/dist/resolve-GP7BHM6L.js +121 -0
  776. package/dist/resolve-GP7BHM6L.js.map +1 -0
  777. package/dist/retry-33ZJCNQI.js +62 -0
  778. package/dist/retry-33ZJCNQI.js.map +1 -0
  779. package/dist/retry-X5PU7QO3.js +60 -0
  780. package/dist/retry-X5PU7QO3.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-REK3TEGY.js +65 -0
  784. package/dist/run-REK3TEGY.js.map +1 -0
  785. package/dist/run-TH2662IC.js +61 -0
  786. package/dist/run-TH2662IC.js.map +1 -0
  787. package/dist/scaffold-ad-3WDRKUFT.js +1550 -0
  788. package/dist/scaffold-ad-3WDRKUFT.js.map +1 -0
  789. package/dist/scaffold-static-ad-X5NT52NF.js +973 -0
  790. package/dist/scaffold-static-ad-X5NT52NF.js.map +1 -0
  791. package/dist/scaffold-video-WZPVACLE.js +874 -0
  792. package/dist/scaffold-video-WZPVACLE.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-V4UHGY3V.js +61 -0
  796. package/dist/schedule-V4UHGY3V.js.map +1 -0
  797. package/dist/scheduled-agents-KLQ5H2PA.js +49 -0
  798. package/dist/scheduled-agents-KLQ5H2PA.js.map +1 -0
  799. package/dist/schema-G3T4PZDI.js +132 -0
  800. package/dist/schema-G3T4PZDI.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-6XKEGABN.js +174 -0
  812. package/dist/search-6XKEGABN.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-N2V55BEX.js +96 -0
  822. package/dist/select-N2V55BEX.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-7HVHERRU.js +188 -0
  828. package/dist/set-prompt-7HVHERRU.js.map +1 -0
  829. package/dist/setup-links-4VVNQVPU.js +141 -0
  830. package/dist/setup-links-4VVNQVPU.js.map +1 -0
  831. package/dist/{shared-AVM74EX7.js → shared-QAMP7FZV.js} +8 -6
  832. package/dist/shared-QAMP7FZV.js.map +1 -0
  833. package/dist/shopify-FSHM5M4I.js +3346 -0
  834. package/dist/shopify-FSHM5M4I.js.map +1 -0
  835. package/dist/site-Q2HTRLIW.js +177 -0
  836. package/dist/site-Q2HTRLIW.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-2KN4RJNJ.js +30 -0
  844. package/dist/sources-2KN4RJNJ.js.map +1 -0
  845. package/dist/sources-4I2YMS2K.js +421 -0
  846. package/dist/sources-4I2YMS2K.js.map +1 -0
  847. package/dist/stale-IN7WSBLC.js +66 -0
  848. package/dist/stale-IN7WSBLC.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-6SLKZWNR.js +62 -0
  852. package/dist/status-6SLKZWNR.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-LFZV5NBN.js +54 -0
  864. package/dist/sync-LFZV5NBN.js.map +1 -0
  865. package/dist/sync-definition-IJISZ5VQ.js +55 -0
  866. package/dist/sync-definition-IJISZ5VQ.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-6OAZOQYO.js +26 -0
  870. package/dist/tags-6OAZOQYO.js.map +1 -0
  871. package/dist/tags-6YRMDX3R.js +20 -0
  872. package/dist/tags-6YRMDX3R.js.map +1 -0
  873. package/dist/tags-EWXZSZYE.js +20 -0
  874. package/dist/tags-EWXZSZYE.js.map +1 -0
  875. package/dist/tags-SZCNPE2D.js +224 -0
  876. package/dist/tags-SZCNPE2D.js.map +1 -0
  877. package/dist/tags-TCFFP534.js +20 -0
  878. package/dist/tags-TCFFP534.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-ESOC7KNX.js +113 -0
  882. package/dist/targeting-criteria-ESOC7KNX.js.map +1 -0
  883. package/dist/targets-IPBEB5KU.js +102 -0
  884. package/dist/targets-IPBEB5KU.js.map +1 -0
  885. package/dist/templates-IJ7FR3LA.js +178 -0
  886. package/dist/templates-IJ7FR3LA.js.map +1 -0
  887. package/dist/testimonials-IXS7CP6P.js +32 -0
  888. package/dist/testimonials-IXS7CP6P.js.map +1 -0
  889. package/dist/themes-MXNKJWMW.js +94 -0
  890. package/dist/themes-MXNKJWMW.js.map +1 -0
  891. package/dist/top-companies-NO6L2V6M.js +108 -0
  892. package/dist/top-companies-NO6L2V6M.js.map +1 -0
  893. package/dist/translate-QCE5ZB7M.js +600 -0
  894. package/dist/translate-QCE5ZB7M.js.map +1 -0
  895. package/dist/triggers-KXUDMDSA.js +141 -0
  896. package/dist/triggers-KXUDMDSA.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-E3N36NYQ.js +67 -0
  902. package/dist/unlink-E3N36NYQ.js.map +1 -0
  903. package/dist/unstage-TRMHSHED.js +84 -0
  904. package/dist/unstage-TRMHSHED.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-EWGWAXAQ.js +142 -0
  908. package/dist/update-EWGWAXAQ.js.map +1 -0
  909. package/dist/update-OKOQE7U2.js +155 -0
  910. package/dist/update-OKOQE7U2.js.map +1 -0
  911. package/dist/update-VSFHID2D.js +63 -0
  912. package/dist/update-VSFHID2D.js.map +1 -0
  913. package/dist/update-XGCGQDJ4.js +98 -0
  914. package/dist/update-XGCGQDJ4.js.map +1 -0
  915. package/dist/upload-BOYMDDEQ.js +126 -0
  916. package/dist/upload-BOYMDDEQ.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-PCZEQE66.js +130 -0
  922. package/dist/url-options-PCZEQE66.js.map +1 -0
  923. package/dist/url-params-DV37GEQF.js +98 -0
  924. package/dist/url-params-DV37GEQF.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-5AV4FJZ5.js +91 -0
  928. package/dist/validate-5AV4FJZ5.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-IJ67PPJV.js +39 -0
  932. package/dist/videos-IJ67PPJV.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-LJ36FRWD.js +140 -0
  938. package/dist/web-LJ36FRWD.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-JIG2MQHJ.js +84 -0
  942. package/dist/winning-ads-JIG2MQHJ.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-GOZU6ENR.js +1015 -0
  948. package/dist/write-commands-GOZU6ENR.js.map +1 -0
  949. package/dist/write-commands-KA3QXVSF.js +737 -0
  950. package/dist/write-commands-KA3QXVSF.js.map +1 -0
  951. package/dist/x-6HBVXIKH.js +47 -0
  952. package/dist/x-6HBVXIKH.js.map +1 -0
  953. package/package.json +9 -2
  954. package/dist/chunk-HJEMOSPH.js +0 -1292
  955. package/dist/chunk-HJEMOSPH.js.map +0 -1
  956. package/dist/chunk-JHKW6IDX.js +0 -9989
  957. package/dist/chunk-JHKW6IDX.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-WWCLT3RG.js.map +0 -1
  961. package/dist/client-GR6YL3YX.js +0 -17
  962. package/dist/output-VQSTVRH7.js +0 -18
  963. /package/dist/{chunk-JTZXQRXI.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-VQSTVRH7.js.map → connect-WYUYS5V4.js.map} +0 -0
  967. /package/dist/{shared-AVM74EX7.js.map → customers-HYE7N2H5.js.map} +0 -0
@@ -0,0 +1,150 @@
1
+ import {
2
+ storeProductReads
3
+ } from "./chunk-SLB46MSS.js";
4
+ import {
5
+ IDEA_ANGLES,
6
+ IDEA_FORMATS,
7
+ checkIdeas,
8
+ coverageOf,
9
+ readCreativeRecords,
10
+ readIdeas,
11
+ readInsights,
12
+ readKnowledgeCorpus,
13
+ readPersonaIds,
14
+ sameMessageRead,
15
+ workspaceIdeasJudge
16
+ } from "./chunk-YULENNA7.js";
17
+ import {
18
+ findWorkspaceRoot
19
+ } from "./chunk-HDHWIEJJ.js";
20
+ import {
21
+ registerSchema,
22
+ writeJson
23
+ } from "./chunk-WOTDHRNF.js";
24
+
25
+ // src/commands/creatives/ideas.ts
26
+ import { defineCommand } from "citty";
27
+ var BUILD_NEXT = 3;
28
+ var DESCRIPTION = `Check and rank the ad ideas in src/creatives/_ideas/: is each backed by something a customer said (src/content/insights/), does it claim only what the Knowledge holds, is it a different ad from the others, does it fill a gap the live ads leave. Free and local.
29
+
30
+ Start here, after writing 4-8 idea files (one per file, eight fields: who, message, evidence, awareness, angle, format, job, why; plus product: <handle> when the ad sells a store product, so the store's prices count as sourced):
31
+ baker creatives ideas # ranked, with problems; build_next names the ones to make
32
+ baker creatives make <idea> # then build each one in build_next
33
+ An idea with a problem is not built until it is fixed. An idea with no evidence is an explore bet: it may be built, and says so.`;
34
+ var ARGS = {
35
+ full: {
36
+ type: "boolean",
37
+ description: "Every idea with its warnings and gaps, and the allowed angle and format values",
38
+ required: false,
39
+ default: false
40
+ }
41
+ };
42
+ registerSchema({ command: "creatives.ideas", description: DESCRIPTION, args: ARGS });
43
+ function ideasHints(report) {
44
+ const hints = [];
45
+ const toBuild = report.ideas.filter((i) => i.status === "idea");
46
+ if (toBuild.length === 0 && report.unreadable.length === 0) {
47
+ hints.push(
48
+ "No ideas yet. Write 4-8 files in src/creatives/_ideas/<idea>.md (who, message, evidence, awareness, angle, format, job, why), then run this again."
49
+ );
50
+ }
51
+ if (report.unreadable.length > 0) {
52
+ hints.push(`Fix ${report.unreadable.map((u) => u.id).join(", ")}: each names what is missing or unknown.`);
53
+ }
54
+ const blocked = toBuild.filter((i) => i.problems.length > 0);
55
+ if (blocked.length > 0) hints.push(`Fix before building: ${blocked.map((i) => i.id).join(", ")}.`);
56
+ if (report.observedCount < 3) {
57
+ hints.push(
58
+ "Few customer quotes on file: run `baker research customers` so ideas stand on what customers said; until then they are explore bets."
59
+ );
60
+ } else if (toBuild.length > 0 && toBuild.every((i) => i.evidence === "explore")) {
61
+ hints.push("No idea cites an insight: put the insight ids that back each one in its `evidence`.");
62
+ }
63
+ const next = buildNext(report.ideas);
64
+ if (next.length === 1) hints.push(`Build: \`baker creatives make ${next[0]}\`.`);
65
+ if (next.length > 1)
66
+ hints.push(
67
+ `Build ${next.join(", ")} at once: one \`creative-producer\` per idea, all spawned in one message in the background, each given its idea id, and handle each as it returns. Never build them one after another: each render takes minutes. Edited an idea after this check? Run \`baker creatives ideas\` again first: a producer cannot build an idea with a problem.`
68
+ );
69
+ return hints;
70
+ }
71
+ function buildNext(ideas, count = BUILD_NEXT) {
72
+ const ready = ideas.filter((i) => i.status === "idea" && i.problems.length === 0);
73
+ const firstBet = ready.find((i) => i.evidence === "explore");
74
+ return ready.filter((i) => i.evidence !== "explore" || i === firstBet).slice(0, count).map((i) => i.id);
75
+ }
76
+ function compactIdea(check) {
77
+ return {
78
+ idea: check.id,
79
+ status: check.status,
80
+ evidence: check.evidence,
81
+ ...check.quote ? { quote: check.quote.length > 120 ? `${check.quote.slice(0, 117)}...` : check.quote } : {},
82
+ awareness: check.awareness,
83
+ angle: check.angle,
84
+ format: check.format,
85
+ ...check.problems.length > 0 ? { problems: check.problems } : {},
86
+ ...check.warnings.length > 0 ? { warnings: check.warnings } : {}
87
+ };
88
+ }
89
+ async function ideasReport(root, opts = {}) {
90
+ const judge = opts.ask ? { ask: opts.ask, done: () => Promise.resolve() } : workspaceIdeasJudge(root);
91
+ const [{ ideas, unreadable }, insights, knowledge, personas, creatives] = await Promise.all([
92
+ readIdeas(root),
93
+ readInsights(root, { ask: judge.ask }),
94
+ readKnowledgeCorpus(root),
95
+ readPersonaIds(root),
96
+ readCreativeRecords(root)
97
+ ]);
98
+ const [sameMessage, products] = await Promise.all([
99
+ sameMessageRead(ideas, judge.ask),
100
+ storeProductReads(
101
+ ideas.map((i) => i.product),
102
+ opts.readProduct
103
+ )
104
+ ]);
105
+ await judge.done();
106
+ const checked = checkIdeas({
107
+ ideas,
108
+ insights,
109
+ knowledge,
110
+ personas,
111
+ sameMessage,
112
+ products,
113
+ ...coverageOf(ideas, creatives)
114
+ });
115
+ return {
116
+ ideas: checked,
117
+ unreadable,
118
+ insightCount: insights.length,
119
+ observedCount: insights.filter((i) => i.status === "observed").length
120
+ };
121
+ }
122
+ var ideasCommand = defineCommand({
123
+ meta: { name: "ideas", description: DESCRIPTION },
124
+ args: ARGS,
125
+ async run({ args }) {
126
+ const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
127
+ const report = await ideasReport(root);
128
+ const full = args.full === true;
129
+ writeJson({
130
+ ok: true,
131
+ data: {
132
+ build_next: buildNext(report.ideas),
133
+ ideas: full ? report.ideas : report.ideas.map(compactIdea),
134
+ ...report.unreadable.length > 0 ? { unreadable: report.unreadable } : {},
135
+ customer_quotes: { total: report.insightCount, observed: report.observedCount },
136
+ ...full ? { allowed: { angle: IDEA_ANGLES, format: IDEA_FORMATS } } : {}
137
+ },
138
+ hints: ideasHints(report)
139
+ });
140
+ }
141
+ });
142
+
143
+ export {
144
+ ideasHints,
145
+ buildNext,
146
+ compactIdea,
147
+ ideasReport,
148
+ ideasCommand
149
+ };
150
+ //# sourceMappingURL=chunk-YYSZYSAG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/creatives/ideas.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport type { AskNouls } from \"../../engine/lib/remembered-nouls.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { sameMessageRead } from \"./ideas-judgments.ts\";\nimport { checkIdeas, IDEA_ANGLES, IDEA_FORMATS, type IdeaCheck } from \"./ideas-model.ts\";\nimport {\n coverageOf,\n readCreativeRecords,\n readIdeas,\n readInsights,\n readKnowledgeCorpus,\n readPersonaIds,\n type UnreadableIdea,\n workspaceIdeasJudge,\n} from \"./ideas-workspace.ts\";\nimport { type StoreProduct, storeProductReads } from \"./store-product.ts\";\n\nconst BUILD_NEXT = 3;\n\nconst DESCRIPTION = `Check and rank the ad ideas in src/creatives/_ideas/: is each backed by something a customer said (src/content/insights/), does it claim only what the Knowledge holds, is it a different ad from the others, does it fill a gap the live ads leave. Free and local.\n\nStart here, after writing 4-8 idea files (one per file, eight fields: who, message, evidence, awareness, angle, format, job, why; plus product: <handle> when the ad sells a store product, so the store's prices count as sourced):\n baker creatives ideas # ranked, with problems; build_next names the ones to make\n baker creatives make <idea> # then build each one in build_next\nAn idea with a problem is not built until it is fixed. An idea with no evidence is an explore bet: it may be built, and says so.`;\n\nconst ARGS = {\n full: {\n type: \"boolean\",\n description: \"Every idea with its warnings and gaps, and the allowed angle and format values\",\n required: false,\n default: false,\n },\n} as const;\n\nregisterSchema({ command: \"creatives.ideas\", description: DESCRIPTION, args: ARGS });\n\ntype IdeasReport = {\n ideas: IdeaCheck[];\n unreadable: UnreadableIdea[];\n insightCount: number;\n observedCount: number;\n};\n\n/** What the agent does next. Pure. */\nexport function ideasHints(report: IdeasReport): string[] {\n const hints: string[] = [];\n const toBuild = report.ideas.filter((i) => i.status === \"idea\");\n if (toBuild.length === 0 && report.unreadable.length === 0) {\n hints.push(\n \"No ideas yet. Write 4-8 files in src/creatives/_ideas/<idea>.md (who, message, evidence, awareness, angle, format, job, why), then run this again.\",\n );\n }\n if (report.unreadable.length > 0) {\n hints.push(`Fix ${report.unreadable.map((u) => u.id).join(\", \")}: each names what is missing or unknown.`);\n }\n const blocked = toBuild.filter((i) => i.problems.length > 0);\n if (blocked.length > 0) hints.push(`Fix before building: ${blocked.map((i) => i.id).join(\", \")}.`);\n if (report.observedCount < 3) {\n hints.push(\n \"Few customer quotes on file: run `baker research customers` so ideas stand on what customers said; until then they are explore bets.\",\n );\n } else if (toBuild.length > 0 && toBuild.every((i) => i.evidence === \"explore\")) {\n hints.push(\"No idea cites an insight: put the insight ids that back each one in its `evidence`.\");\n }\n const next = buildNext(report.ideas);\n if (next.length === 1) hints.push(`Build: \\`baker creatives make ${next[0]}\\`.`);\n // A render takes about five minutes: built one after another, three ideas took forty (dev, Oct 2026).\n if (next.length > 1)\n hints.push(\n `Build ${next.join(\", \")} at once: one \\`creative-producer\\` per idea, all spawned in one message in the background, each given its idea id, and handle each as it returns. Never build them one after another: each render takes minutes. Edited an idea after this check? Run \\`baker creatives ideas\\` again first: a producer cannot build an idea with a problem.`,\n );\n return hints;\n}\n\n/** The ideas to build now: the best-ranked ones still to build with nothing blocking. Pure. */\nexport function buildNext(ideas: readonly IdeaCheck[], count = BUILD_NEXT): string[] {\n // One explore bet a batch: the rest stand on what customers said.\n const ready = ideas.filter((i) => i.status === \"idea\" && i.problems.length === 0);\n const firstBet = ready.find((i) => i.evidence === \"explore\");\n return ready\n .filter((i) => i.evidence !== \"explore\" || i === firstBet)\n .slice(0, count)\n .map((i) => i.id);\n}\n\n/** One idea as the agent reads it by default: what decides building it, nothing more. Pure. */\nexport function compactIdea(check: IdeaCheck) {\n return {\n idea: check.id,\n status: check.status,\n evidence: check.evidence,\n ...(check.quote ? { quote: check.quote.length > 120 ? `${check.quote.slice(0, 117)}...` : check.quote } : {}),\n awareness: check.awareness,\n angle: check.angle,\n format: check.format,\n ...(check.problems.length > 0 ? { problems: check.problems } : {}),\n ...(check.warnings.length > 0 ? { warnings: check.warnings } : {}),\n };\n}\n\n/** Everything `checkIdeas` needs, read from the workspace. */\nexport async function ideasReport(\n root: string,\n opts: { ask?: AskNouls; readProduct?: (ref: string) => Promise<StoreProduct> } = {},\n): Promise<IdeasReport> {\n const judge = opts.ask ? { ask: opts.ask, done: () => Promise.resolve() } : workspaceIdeasJudge(root);\n const [{ ideas, unreadable }, insights, knowledge, personas, creatives] = await Promise.all([\n readIdeas(root),\n readInsights(root, { ask: judge.ask }),\n readKnowledgeCorpus(root),\n readPersonaIds(root),\n readCreativeRecords(root),\n ]);\n const [sameMessage, products] = await Promise.all([\n sameMessageRead(ideas, judge.ask),\n storeProductReads(\n ideas.map((i) => i.product),\n opts.readProduct,\n ),\n ]);\n await judge.done();\n const checked = checkIdeas({\n ideas,\n insights,\n knowledge,\n personas,\n sameMessage,\n products,\n ...coverageOf(ideas, creatives),\n });\n return {\n ideas: checked,\n unreadable,\n insightCount: insights.length,\n observedCount: insights.filter((i) => i.status === \"observed\").length,\n };\n}\n\nexport const ideasCommand = defineCommand({\n meta: { name: \"ideas\", description: DESCRIPTION },\n args: ARGS,\n async run({ args }) {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const report = await ideasReport(root);\n const full = args.full === true;\n writeJson({\n ok: true,\n data: {\n build_next: buildNext(report.ideas),\n ideas: full ? report.ideas : report.ideas.map(compactIdea),\n ...(report.unreadable.length > 0 ? { unreadable: report.unreadable } : {}),\n customer_quotes: { total: report.insightCount, observed: report.observedCount },\n ...(full ? { allowed: { angle: IDEA_ANGLES, format: IDEA_FORMATS } } : {}),\n },\n hints: ideasHints(report),\n });\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,94 @@
1
+ // src/commands/landing/import-graph.ts
2
+ import { readdir, readFile, stat } from "fs/promises";
3
+ import path from "path";
4
+ var SOURCE_EXT = /\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte)$/;
5
+ var RESOLVE_CANDIDATES = [
6
+ "",
7
+ ".astro",
8
+ ".ts",
9
+ ".tsx",
10
+ ".js",
11
+ ".jsx",
12
+ ".mjs",
13
+ ".cjs",
14
+ "/index.astro",
15
+ "/index.ts",
16
+ "/index.js"
17
+ ];
18
+ var IMPORT_RE = /(?<![A-Za-z0-9_$])(?:import|export)\s*(?:[\s\S]*?\bfrom\s*)?["']([^"']+)["']/g;
19
+ var DYNAMIC_IMPORT_RE = /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g;
20
+ async function isFile(p) {
21
+ try {
22
+ return (await stat(p)).isFile();
23
+ } catch {
24
+ return false;
25
+ }
26
+ }
27
+ async function walkFiles(dir) {
28
+ let entries;
29
+ try {
30
+ entries = await readdir(dir, { withFileTypes: true });
31
+ } catch {
32
+ return [];
33
+ }
34
+ const out = [];
35
+ for (const entry of entries) {
36
+ const full = path.join(dir, entry.name);
37
+ if (entry.isDirectory()) {
38
+ if (entry.name === "node_modules" || entry.name === "dist") continue;
39
+ out.push(...await walkFiles(full));
40
+ } else if (SOURCE_EXT.test(entry.name)) {
41
+ out.push(full);
42
+ }
43
+ }
44
+ return out;
45
+ }
46
+ async function resolveSpecifier(specifier, fromFile, root) {
47
+ const bare = specifier.split("?")[0] ?? "";
48
+ if (bare.includes("*")) return null;
49
+ let base;
50
+ if (bare.startsWith("/")) base = path.join(root, bare.slice(1));
51
+ else if (bare.startsWith(".")) base = path.resolve(path.dirname(fromFile), bare);
52
+ else return null;
53
+ for (const suffix of RESOLVE_CANDIDATES) {
54
+ const candidate = base + suffix;
55
+ if (SOURCE_EXT.test(candidate) && await isFile(candidate)) return candidate;
56
+ }
57
+ return null;
58
+ }
59
+ async function importedFiles(text, file, root) {
60
+ const out = [];
61
+ for (const re of [IMPORT_RE, DYNAMIC_IMPORT_RE]) {
62
+ for (const match of text.matchAll(re)) {
63
+ const spec = match[1];
64
+ if (spec === void 0) continue;
65
+ const target = await resolveSpecifier(spec, file, root);
66
+ if (target !== null) out.push(target);
67
+ }
68
+ }
69
+ return out;
70
+ }
71
+ async function landingGraphFiles(root, slug) {
72
+ const seen = /* @__PURE__ */ new Set();
73
+ const queue = await walkFiles(path.join(root, "src/pages", slug));
74
+ while (queue.length > 0) {
75
+ const file = queue.pop();
76
+ if (file === void 0 || seen.has(file)) continue;
77
+ let text;
78
+ try {
79
+ text = await readFile(file, "utf8");
80
+ } catch {
81
+ continue;
82
+ }
83
+ seen.add(file);
84
+ for (const target of await importedFiles(text, file, root)) {
85
+ if (!seen.has(target)) queue.push(target);
86
+ }
87
+ }
88
+ return new Set([...seen].map((abs) => path.relative(root, abs).split(path.sep).join("/")));
89
+ }
90
+
91
+ export {
92
+ landingGraphFiles
93
+ };
94
+ //# sourceMappingURL=chunk-Z3ENMCFE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/landing/import-graph.ts"],"sourcesContent":["import type { Dirent } from \"node:fs\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/**\n * Which source files does a landing actually pull in?\n *\n * Pages share components since A/B tests shipped: a variant borrows the\n * control's sections and forks only the one under test. So a landing's source is\n * no longer \"this folder\" — the critic has to read the sections it renders\n * wherever they live, and the freshness fingerprint has to cover them or an edit\n * to a shared section leaves the borrowing page's sha unchanged and the quality\n * gate passes a page it never scored.\n *\n * MIRROR OF `apps/scaffold-template/__tooling__/checks/sdk/landing-import-graph.mjs`.\n * Neither can import the other — the CLI ships as a binary, the scaffold ships as\n * files — so they are two implementations of one rule, and\n * `scripts/__tests__/landing-source-version-parity.test.ts` runs both over one\n * fixture tree and fails when they disagree. Change one, change the other, and\n * let that test say whether you got it right.\n */\n\n/**\n * Files worth opening: source that ends up in the build. Gates both the\n * directory seed and every import target, so a landing that imports\n * `./_images/hero.png` never gets a binary read as UTF-8.\n */\nconst SOURCE_EXT = /\\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte)$/;\n\n/** Extension guesses for an extensionless specifier, in resolution order. */\nconst RESOLVE_CANDIDATES = [\n \"\",\n \".astro\",\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \"/index.astro\",\n \"/index.ts\",\n \"/index.js\",\n];\n\n/**\n * Static and dynamic import specifiers. Both boundaries are lookarounds rather\n * than character classes, because an inlined `<script>import{a}from\"./x\"</script>`\n * has no whitespace anywhere.\n */\nconst IMPORT_RE = /(?<![A-Za-z0-9_$])(?:import|export)\\s*(?:[\\s\\S]*?\\bfrom\\s*)?[\"']([^\"']+)[\"']/g;\nconst DYNAMIC_IMPORT_RE = /\\bimport\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\nasync function isFile(p: string): Promise<boolean> {\n try {\n return (await stat(p)).isFile();\n } catch {\n return false;\n }\n}\n\n/** Every source file under `dir`, recursively. */\nasync function walkFiles(dir: string): Promise<string[]> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const out: string[] = [];\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (entry.name === \"node_modules\" || entry.name === \"dist\") continue;\n out.push(...(await walkFiles(full)));\n } else if (SOURCE_EXT.test(entry.name)) {\n out.push(full);\n }\n }\n return out;\n}\n\n/** Resolve a relative or root-absolute specifier to a source file, else null. */\nasync function resolveSpecifier(specifier: string, fromFile: string, root: string): Promise<string | null> {\n // Vite resolves a leading `/` from the project root; everything else that is\n // not relative is a bare package specifier. A glob has no single target.\n const bare = specifier.split(\"?\")[0] ?? \"\";\n if (bare.includes(\"*\")) return null;\n\n let base: string;\n if (bare.startsWith(\"/\")) base = path.join(root, bare.slice(1));\n else if (bare.startsWith(\".\")) base = path.resolve(path.dirname(fromFile), bare);\n else return null;\n\n for (const suffix of RESOLVE_CANDIDATES) {\n const candidate = base + suffix;\n if (SOURCE_EXT.test(candidate) && (await isFile(candidate))) return candidate;\n }\n return null;\n}\n\n/**\n * Every source file one landing pulls in, transitively, as repo-relative POSIX\n * paths.\n *\n * Seeded with the whole `src/pages/<slug>` directory rather than just\n * `index.astro`: co-located `_components/**` are imported from markup the\n * regexes do not always see.\n */\n/** Every source file `file`'s own text imports, resolved to absolute paths. */\nasync function importedFiles(text: string, file: string, root: string): Promise<string[]> {\n const out: string[] = [];\n for (const re of [IMPORT_RE, DYNAMIC_IMPORT_RE]) {\n // `matchAll` clones the regex, so a shared global one carries no\n // `lastIndex` between files.\n for (const match of text.matchAll(re)) {\n const spec = match[1];\n if (spec === undefined) continue;\n const target = await resolveSpecifier(spec, file, root);\n if (target !== null) out.push(target);\n }\n }\n return out;\n}\n\nexport async function landingGraphFiles(root: string, slug: string): Promise<Set<string>> {\n const seen = new Set<string>();\n const queue = await walkFiles(path.join(root, \"src/pages\", slug));\n\n while (queue.length > 0) {\n const file = queue.pop();\n if (file === undefined || seen.has(file)) continue;\n\n let text: string;\n try {\n text = await readFile(file, \"utf8\");\n } catch {\n continue;\n }\n seen.add(file);\n\n for (const target of await importedFiles(text, file, root)) {\n if (!seen.has(target)) queue.push(target);\n }\n }\n\n return new Set([...seen].map((abs) => path.relative(root, abs).split(path.sep).join(\"/\")));\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,92 @@
1
+ import {
2
+ leadVersion,
3
+ writeSeriesMemberCanvas
4
+ } from "./chunk-DIICZGIS.js";
5
+ import {
6
+ claimNewCreativeInWorkspace,
7
+ creativeLimitRefusal
8
+ } from "./chunk-XIGIJJSF.js";
9
+ import {
10
+ definitionFieldsOf,
11
+ setDefinitionFields,
12
+ setSpecMessage
13
+ } from "./chunk-S4LZ7KTG.js";
14
+ import {
15
+ IDEAS_DIR
16
+ } from "./chunk-YULENNA7.js";
17
+
18
+ // src/commands/creatives/make-series.ts
19
+ import { mkdir, readFile, writeFile } from "fs/promises";
20
+ import path from "path";
21
+ import { parseDocument } from "yaml";
22
+ var LEAD_ONLY = ["idea", "message", "evidence", "angle", "persona", "awareness", "hypothesis", "series", "title"];
23
+ function withoutFields(raw, keys) {
24
+ const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
25
+ if (!match) return raw;
26
+ const doc = parseDocument(match[1] ?? "");
27
+ if (doc.errors.length > 0) return raw;
28
+ for (const key of keys) doc.delete(key);
29
+ return `---
30
+ ${doc.toString()}---${raw.slice(match[0].length)}`;
31
+ }
32
+ async function makeSeriesAd(root, idea, slug, lead, evidence, deps) {
33
+ if (slug === lead) {
34
+ return {
35
+ code: "series_of_itself",
36
+ message: `"${slug}" is the lead itself.`,
37
+ fix: "Give the new ad its own --slug."
38
+ };
39
+ }
40
+ const version = await leadVersion(root, lead);
41
+ if ("refused" in version) return version.refused;
42
+ const dir = path.join(root, "src", "creatives", slug);
43
+ const definitionPath = path.join(dir, "_definition.md");
44
+ const claim = await claimNewCreativeInWorkspace(path.join(root, "canvas"), slug, deps.chatId, definitionPath);
45
+ if (!claim.allowed) return creativeLimitRefusal(slug).error;
46
+ await mkdir(dir, { recursive: true });
47
+ await writeFile(path.join(dir, "prompt.json"), setSpecMessage(JSON.stringify(version.spec), idea.message), "utf8");
48
+ const leadDefinition = await readFile(path.join(root, "src", "creatives", lead, "_definition.md"), "utf8").catch(
49
+ () => "---\nkind: static\n---\n"
50
+ );
51
+ const definition = setDefinitionFields(withoutFields(leadDefinition, LEAD_ONLY), {
52
+ title: idea.message.slice(0, 120),
53
+ series: lead,
54
+ status: "draft",
55
+ ...definitionFieldsOf(idea, evidence)
56
+ });
57
+ await writeFile(definitionPath, definition, "utf8");
58
+ const made = await writeSeriesMemberCanvas(root, slug, { leadWords: true });
59
+ if (made === null || "refused" in made) {
60
+ return made?.refused ?? { code: "series_not_made", message: `"${slug}" could not be made in the series of "${lead}".` };
61
+ }
62
+ if (idea.status === "idea") {
63
+ const ideaPath = path.join(root, IDEAS_DIR, `${idea.id}.md`);
64
+ const raw = await readFile(ideaPath, "utf8").catch(() => null);
65
+ if (raw !== null) await writeFile(ideaPath, setDefinitionFields(raw, { status: "built" }), "utf8");
66
+ }
67
+ await deps.sync(dir);
68
+ return { slug, lead, leadRunId: version.lead.runId, canvasPath: made.canvasPath };
69
+ }
70
+ function seriesMadeEnvelope(made, idea) {
71
+ return {
72
+ ok: true,
73
+ data: {
74
+ creative: made.slug,
75
+ idea: idea.id,
76
+ message: idea.message,
77
+ series: made.lead,
78
+ canvas_path: made.canvasPath
79
+ },
80
+ hints: [
81
+ `Write this ad's words in src/creatives/${made.slug}/prompt.json \`copy\`: one line for each of the lead's, in the same roles and about as long, saying this idea's message. Change nothing else: the picture, layout and colours are the lead's (${made.lead}), and every word you write replaces the lead's line in its place.`,
82
+ `When every ad of the series has its words: baker canvas run --series ${made.lead} (renders them all at once, each reviewed and corrected on its own).`
83
+ ]
84
+ };
85
+ }
86
+
87
+ export {
88
+ withoutFields,
89
+ makeSeriesAd,
90
+ seriesMadeEnvelope
91
+ };
92
+ //# sourceMappingURL=chunk-ZCFSHQBF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/creatives/make-series.ts"],"sourcesContent":["/**\n * `baker creatives make <idea> --series <lead>`: another message in the lead ad's style. Nothing is\n * searched, described or rendered: the ad starts as the lead's ready version with the idea's\n * message, and its words are the agent's to write. Its picture is the lead's with those words\n * (`series-member.ts`), so a series of ten messages is one design ten times.\n */\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parseDocument } from \"yaml\";\nimport { claimNewCreativeInWorkspace, creativeLimitRefusal } from \"../canvas/creative-limit.ts\";\nimport { leadVersion, writeSeriesMemberCanvas } from \"../canvas/series-member.ts\";\nimport type { EvidenceLevel, Idea } from \"./ideas-model.ts\";\nimport { IDEAS_DIR } from \"./ideas-workspace.ts\";\nimport { definitionFieldsOf, setDefinitionFields, setSpecMessage } from \"./make-model.ts\";\n\ntype Failure = { code: string; message: string; fix?: string };\n\n/** The lead's own reasons, which are not this ad's: its idea, evidence and the like are replaced or dropped. */\nconst LEAD_ONLY = [\"idea\", \"message\", \"evidence\", \"angle\", \"persona\", \"awareness\", \"hypothesis\", \"series\", \"title\"];\n\n/** `raw` with `keys` dropped from its frontmatter, every other field and the body kept. */\nexport function withoutFields(raw: string, keys: readonly string[]): string {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return raw;\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return raw;\n for (const key of keys) doc.delete(key);\n return `---\\n${doc.toString()}---${raw.slice(match[0].length)}`;\n}\n\n/** Make `slug`, an ad of the series led by `lead`, from `idea`. The made ad, or why not. */\nexport async function makeSeriesAd(\n root: string,\n idea: Idea,\n slug: string,\n lead: string,\n evidence: EvidenceLevel | \"explore\",\n deps: { sync: (dir: string) => Promise<unknown>; chatId: string | null },\n): Promise<{ slug: string; lead: string; leadRunId: string; canvasPath: string } | Failure> {\n if (slug === lead) {\n return {\n code: \"series_of_itself\",\n message: `\"${slug}\" is the lead itself.`,\n fix: \"Give the new ad its own --slug.\",\n };\n }\n const version = await leadVersion(root, lead);\n if (\"refused\" in version) return version.refused;\n const dir = path.join(root, \"src\", \"creatives\", slug);\n const definitionPath = path.join(dir, \"_definition.md\");\n const claim = await claimNewCreativeInWorkspace(path.join(root, \"canvas\"), slug, deps.chatId, definitionPath);\n if (!claim.allowed) return creativeLimitRefusal(slug).error;\n await mkdir(dir, { recursive: true });\n await writeFile(path.join(dir, \"prompt.json\"), setSpecMessage(JSON.stringify(version.spec), idea.message), \"utf8\");\n const leadDefinition = await readFile(path.join(root, \"src\", \"creatives\", lead, \"_definition.md\"), \"utf8\").catch(\n () => \"---\\nkind: static\\n---\\n\",\n );\n const definition = setDefinitionFields(withoutFields(leadDefinition, LEAD_ONLY), {\n title: idea.message.slice(0, 120),\n series: lead,\n status: \"draft\",\n ...definitionFieldsOf(idea, evidence),\n });\n await writeFile(definitionPath, definition, \"utf8\");\n const made = await writeSeriesMemberCanvas(root, slug, { leadWords: true });\n if (made === null || \"refused\" in made) {\n return (\n made?.refused ?? { code: \"series_not_made\", message: `\"${slug}\" could not be made in the series of \"${lead}\".` }\n );\n }\n if (idea.status === \"idea\") {\n const ideaPath = path.join(root, IDEAS_DIR, `${idea.id}.md`);\n const raw = await readFile(ideaPath, \"utf8\").catch(() => null);\n if (raw !== null) await writeFile(ideaPath, setDefinitionFields(raw, { status: \"built\" }), \"utf8\");\n }\n // The dashboard learns the ad and its series now, not at Publish.\n await deps.sync(dir);\n return { slug, lead, leadRunId: version.lead.runId, canvasPath: made.canvasPath };\n}\n\n/** What `make --series` prints: the ad, its lead, and the one step left (its words), then the series run. Pure. */\nexport function seriesMadeEnvelope(\n made: { slug: string; lead: string; leadRunId: string; canvasPath: string },\n idea: Pick<Idea, \"id\" | \"message\">,\n) {\n return {\n ok: true as const,\n data: {\n creative: made.slug,\n idea: idea.id,\n message: idea.message,\n series: made.lead,\n canvas_path: made.canvasPath,\n },\n hints: [\n `Write this ad's words in src/creatives/${made.slug}/prompt.json \\`copy\\`: one line for each of the lead's, in the same roles and about as long, saying this idea's message. Change nothing else: the picture, layout and colours are the lead's (${made.lead}), and every word you write replaces the lead's line in its place.`,\n `When every ad of the series has its words: baker canvas run --series ${made.lead} (renders them all at once, each reviewed and corrected on its own).`,\n ],\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,125 @@
1
+ import {
2
+ apiGet
3
+ } from "./chunk-HREWXNTO.js";
4
+
5
+ // src/commands/studio/batch.ts
6
+ function projectBatch(generation, full) {
7
+ const compact = {
8
+ generationId: generation.generationId,
9
+ kind: generation.kind,
10
+ status: generation.status,
11
+ prompt: generation.prompt,
12
+ model: generation.model,
13
+ aspectRatio: generation.aspectRatio,
14
+ variants: generation.variants.map((variant) => ({
15
+ slot: variant.slot,
16
+ status: variant.status,
17
+ ...variant.imageId ? { imageId: variant.imageId } : {},
18
+ ...variant.videoId ? { videoId: variant.videoId } : {},
19
+ ...variant.url ? { url: variant.url } : {},
20
+ inLibrary: variant.inLibrary,
21
+ ...variant.error ? { error: variant.error } : {}
22
+ }))
23
+ };
24
+ if (!full) return compact;
25
+ return {
26
+ ...compact,
27
+ ...generation.skillId ? { skillId: generation.skillId } : {},
28
+ ...generation.imageSettings ? { imageSettings: generation.imageSettings } : {},
29
+ ...generation.clipSettings ? { clipSettings: generation.clipSettings } : {},
30
+ ...generation.referenceImageIds ? { referenceImageIds: generation.referenceImageIds } : {},
31
+ ...generation.chatId ? { chatId: generation.chatId } : {},
32
+ createdAt: generation.createdAt
33
+ };
34
+ }
35
+ function slotArg(candidates) {
36
+ return candidates.length === 1 ? `--slot ${candidates[0]?.slot}` : "--slot <n>";
37
+ }
38
+ function chooseFirst(candidates) {
39
+ return candidates.length === 1 ? "" : " Look at the takes and pick one \u2014 do not default to the first.";
40
+ }
41
+ function batchHints(generation) {
42
+ const id = generation.generationId;
43
+ if (generation.status === "running") {
44
+ return [
45
+ `Still rendering. Run \`baker studio get ${id}\` when you need the result \u2014 do not start the same batch again.`
46
+ ];
47
+ }
48
+ const hints = [];
49
+ const ready = generation.variants.filter((variant) => variant.status === "ready");
50
+ const failed = generation.variants.filter((variant) => variant.status === "failed");
51
+ if (generation.kind === "image" && ready.length > 0) {
52
+ hints.push(
53
+ 'Every rendered image is already in the media library and searchable \u2014 `baker images library "<what it shows>"` finds it, and you can use its image id straight away.'
54
+ );
55
+ hints.push(
56
+ `Mark the take you are using: \`baker studio keep ${id} ${slotArg(ready)}\` stars it so the client reviews the right one.${chooseFirst(ready)}`
57
+ );
58
+ }
59
+ const unkeptClips = ready.filter((variant) => !variant.inLibrary);
60
+ if (generation.kind === "video" && unkeptClips.length > 0) {
61
+ hints.push(
62
+ `A clip is not usable anywhere \u2014 canvas, landing, ad \u2014 until you keep it. \`baker studio keep ${id} ${slotArg(unkeptClips)}\` puts it in the video library; takes nobody keeps are never ingested.${chooseFirst(unkeptClips)}`
63
+ );
64
+ }
65
+ if (generation.status === "partial" && failed.length > 0) {
66
+ hints.push(
67
+ `${failed.length === 1 ? "This take" : "These takes"} did not render \u2014 ${failed.map((variant) => `take ${variant.slot}: ${variant.error ?? "no reason given"}`).join("; ")}. Use the ones that did and carry on; do not re-run the whole batch.`
68
+ );
69
+ }
70
+ if (generation.status === "failed") {
71
+ hints.push(
72
+ `No take rendered \u2014 ${failed[0]?.error ?? "no reason given"}. Continue the job with a sourced or existing asset rather than stopping.`
73
+ );
74
+ }
75
+ return hints;
76
+ }
77
+ function waitingHint(outcome, generationId, maxWaitMs) {
78
+ const collect = `Run \`baker studio get ${generationId}\` to pick it up \u2014 the batch is still going, so do not start it again.`;
79
+ if (outcome.kind === "unreachable") {
80
+ return `The batch started and is rendering, but reading it back failed (${outcome.reason}). ${collect}`;
81
+ }
82
+ return `Still rendering after ${Math.round(maxWaitMs / 1e3)}s. ${collect}`;
83
+ }
84
+ var FALSEY_FLAG_VALUES = /* @__PURE__ */ new Set(["false", "0", "no", "off"]);
85
+ function resolveMaxWaitMs(wait, maxWait, defaultMs) {
86
+ if (typeof wait === "string" && FALSEY_FLAG_VALUES.has(wait.trim().toLowerCase())) return 0;
87
+ if (wait === false) return 0;
88
+ if (maxWait === void 0 || maxWait === "") return defaultMs;
89
+ const parsed = Number(maxWait);
90
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : defaultMs;
91
+ }
92
+ var POLL_INTERVAL_MS = 3e3;
93
+ var defaultPollDeps = {
94
+ get: async (generationId) => {
95
+ const response = await apiGet(`/api/studio/generations/${generationId}`);
96
+ return response.generation;
97
+ },
98
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms))
99
+ };
100
+ async function pollBatch(generationId, maxWaitMs, deps = defaultPollDeps) {
101
+ const deadline = Date.now() + maxWaitMs;
102
+ while (Date.now() < deadline) {
103
+ const generation = await deps.get(generationId);
104
+ if (generation.status !== "running") return generation;
105
+ await deps.sleep(POLL_INTERVAL_MS);
106
+ }
107
+ return null;
108
+ }
109
+ async function awaitBatch(generationId, maxWaitMs, deps = defaultPollDeps) {
110
+ try {
111
+ const generation = await pollBatch(generationId, maxWaitMs, deps);
112
+ return generation ? { kind: "settled", generation } : { kind: "still-running" };
113
+ } catch (error) {
114
+ return { kind: "unreachable", reason: error instanceof Error ? error.message : "the read failed" };
115
+ }
116
+ }
117
+
118
+ export {
119
+ projectBatch,
120
+ batchHints,
121
+ waitingHint,
122
+ resolveMaxWaitMs,
123
+ awaitBatch
124
+ };
125
+ //# sourceMappingURL=chunk-ZH7ZM3ZM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/studio/batch.ts"],"sourcesContent":["import type { StudioGeneration, StudioGetResponse } from \"@baker/api\";\nimport { apiGet } from \"../../client.ts\";\n\n/**\n * Compact projection: what the agent needs to DECIDE what happened to a batch —\n * which takes rendered, where each one lives, and why a take is missing. The\n * settings echo, the reference list and the attribution are `--full` only,\n * because a four-take batch would otherwise repeat the whole request back.\n */\nexport function projectBatch(generation: StudioGeneration, full: boolean): Record<string, unknown> {\n const compact: Record<string, unknown> = {\n generationId: generation.generationId,\n kind: generation.kind,\n status: generation.status,\n prompt: generation.prompt,\n model: generation.model,\n aspectRatio: generation.aspectRatio,\n variants: generation.variants.map((variant) => ({\n slot: variant.slot,\n status: variant.status,\n ...(variant.imageId ? { imageId: variant.imageId } : {}),\n ...(variant.videoId ? { videoId: variant.videoId } : {}),\n ...(variant.url ? { url: variant.url } : {}),\n inLibrary: variant.inLibrary,\n ...(variant.error ? { error: variant.error } : {}),\n })),\n };\n if (!full) return compact;\n return {\n ...compact,\n ...(generation.skillId ? { skillId: generation.skillId } : {}),\n ...(generation.imageSettings ? { imageSettings: generation.imageSettings } : {}),\n ...(generation.clipSettings ? { clipSettings: generation.clipSettings } : {}),\n ...(generation.referenceImageIds ? { referenceImageIds: generation.referenceImageIds } : {}),\n ...(generation.chatId ? { chatId: generation.chatId } : {}),\n createdAt: generation.createdAt,\n };\n}\n\n/**\n * The `--slot` argument to show in a keep hint.\n *\n * A hint carrying a complete, paste-ready command gets pasted — that is what a\n * hint is for. So it may only name a slot when there is no choice to make.\n * Naming the first ready take out of several turned \"keep the one you chose\"\n * into \"keep slot 0\", on every batch, which makes the star meaningless: the\n * client sees one starred take per batch whether or not anyone judged them.\n */\nfunction slotArg(candidates: { slot: number }[]): string {\n return candidates.length === 1 ? `--slot ${candidates[0]?.slot}` : \"--slot <n>\";\n}\n\n/** Says out loud that the choice is the agent's, only when there is one. */\nfunction chooseFirst(candidates: unknown[]): string {\n return candidates.length === 1 ? \"\" : \" Look at the takes and pick one — do not default to the first.\";\n}\n\n/**\n * What to do next with this batch.\n *\n * The two misuses worth spending a hint on: starting the same batch again while\n * it is still rendering, and treating a rendered clip as usable. A clip is only\n * ingested when it is kept, so an agent that hands the URL to a canvas is\n * pointing at something the library never took.\n */\nexport function batchHints(generation: StudioGeneration): string[] {\n const id = generation.generationId;\n if (generation.status === \"running\") {\n return [\n `Still rendering. Run \\`baker studio get ${id}\\` when you need the result — do not start the same batch again.`,\n ];\n }\n\n const hints: string[] = [];\n const ready = generation.variants.filter((variant) => variant.status === \"ready\");\n const failed = generation.variants.filter((variant) => variant.status === \"failed\");\n\n if (generation.kind === \"image\" && ready.length > 0) {\n hints.push(\n 'Every rendered image is already in the media library and searchable — `baker images library \"<what it shows>\"` finds it, and you can use its image id straight away.',\n );\n hints.push(\n `Mark the take you are using: \\`baker studio keep ${id} ${slotArg(ready)}\\` stars it so the client reviews the right one.${chooseFirst(ready)}`,\n );\n }\n\n const unkeptClips = ready.filter((variant) => !variant.inLibrary);\n if (generation.kind === \"video\" && unkeptClips.length > 0) {\n hints.push(\n `A clip is not usable anywhere — canvas, landing, ad — until you keep it. \\`baker studio keep ${id} ${slotArg(unkeptClips)}\\` puts it in the video library; takes nobody keeps are never ingested.${chooseFirst(unkeptClips)}`,\n );\n }\n\n if (generation.status === \"partial\" && failed.length > 0) {\n hints.push(\n `${failed.length === 1 ? \"This take\" : \"These takes\"} did not render — ${failed\n .map((variant) => `take ${variant.slot}: ${variant.error ?? \"no reason given\"}`)\n .join(\"; \")}. Use the ones that did and carry on; do not re-run the whole batch.`,\n );\n }\n\n if (generation.status === \"failed\") {\n hints.push(\n `No take rendered — ${failed[0]?.error ?? \"no reason given\"}. Continue the job with a sourced or existing asset rather than stopping.`,\n );\n }\n\n return hints;\n}\n\n/**\n * What to tell a caller still holding a batch that has not settled — whether it\n * simply outlasted the wait, or the read stopped answering. Both end the same\n * way, and that ending is the point: the takes are paid for and still coming, so\n * collect them by id rather than starting again.\n */\nexport function waitingHint(outcome: BatchOutcome, generationId: string, maxWaitMs: number): string {\n const collect = `Run \\`baker studio get ${generationId}\\` to pick it up — the batch is still going, so do not start it again.`;\n if (outcome.kind === \"unreachable\") {\n return `The batch started and is rendering, but reading it back failed (${outcome.reason}). ${collect}`;\n }\n return `Still rendering after ${Math.round(maxWaitMs / 1000)}s. ${collect}`;\n}\n\nconst FALSEY_FLAG_VALUES = new Set([\"false\", \"0\", \"no\", \"off\"]);\n\n/**\n * How long to hold the command open, in ms — 0 meaning \"return the id now\".\n *\n * Two ways to say the same thing because agents reach for both: `--wait false`\n * (don't block) and `--max-wait 0` (block for nothing).\n */\nexport function resolveMaxWaitMs(wait: unknown, maxWait: unknown, defaultMs: number): number {\n if (typeof wait === \"string\" && FALSEY_FLAG_VALUES.has(wait.trim().toLowerCase())) return 0;\n if (wait === false) return 0;\n if (maxWait === undefined || maxWait === \"\") return defaultMs;\n const parsed = Number(maxWait);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : defaultMs;\n}\n\nconst POLL_INTERVAL_MS = 3_000;\n\nexport type PollDeps = {\n get: (generationId: string) => Promise<StudioGeneration>;\n sleep: (ms: number) => Promise<void>;\n};\n\nexport const defaultPollDeps: PollDeps = {\n get: async (generationId) => {\n const response = await apiGet<StudioGetResponse>(`/api/studio/generations/${generationId}`);\n return response.generation;\n },\n sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n};\n\n/**\n * Poll until the batch stops running, or give up and hand the id back.\n *\n * Running out of patience is NOT a failure here: the batch is still rendering on\n * the backend and will land in the dashboard either way, so the honest answer is\n * the id plus \"pick it up with `baker studio get`\". Exiting non-zero would make a\n * slow provider look like a broken command and push the agent into re-running a\n * generation the company already paid for.\n */\nexport async function pollBatch(\n generationId: string,\n maxWaitMs: number,\n deps: PollDeps = defaultPollDeps,\n): Promise<StudioGeneration | null> {\n const deadline = Date.now() + maxWaitMs;\n while (Date.now() < deadline) {\n const generation = await deps.get(generationId);\n if (generation.status !== \"running\") return generation;\n await deps.sleep(POLL_INTERVAL_MS);\n }\n return null;\n}\n\n/** What became of a batch that was successfully STARTED — and therefore billed. */\nexport type BatchOutcome =\n | { kind: \"settled\"; generation: StudioGeneration }\n | { kind: \"still-running\" }\n | { kind: \"unreachable\"; reason: string };\n\n/**\n * Wait for a started batch without ever throwing.\n *\n * Once the POST returns, the takes are rendering and the company has paid. A\n * read that fails after that point says nothing about the request — the batch is\n * fine, we just could not see it — so it must not surface as a refused start,\n * which is advice to change a setting and run the whole thing again. Losing the\n * `generationId` here is what turns one transient GET into a second charge.\n */\nexport async function awaitBatch(\n generationId: string,\n maxWaitMs: number,\n deps: PollDeps = defaultPollDeps,\n): Promise<BatchOutcome> {\n try {\n const generation = await pollBatch(generationId, maxWaitMs, deps);\n return generation ? { kind: \"settled\", generation } : { kind: \"still-running\" };\n } catch (error) {\n return { kind: \"unreachable\", reason: error instanceof Error ? error.message : \"the read failed\" };\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,42 @@
1
+ import {
2
+ repeatedValues
3
+ } from "./chunk-ERSX3MKH.js";
4
+
5
+ // src/lib/describeArgs.ts
6
+ function describeTags(rawArgs, parsed) {
7
+ const given = repeatedValues(rawArgs, "tags", parsed);
8
+ if (given.length === 0) return void 0;
9
+ return given.flatMap((chunk) => chunk.split(",").map((tag) => tag.trim())).filter(Boolean);
10
+ }
11
+ function describeHints(noun, body) {
12
+ const search = noun === "images" ? "baker images library" : "baker videos search";
13
+ const hints = [];
14
+ if (body.description !== void 0) {
15
+ hints.push(
16
+ `The semantic index rebuilds in the background \u2014 a \`${search}\` run right now may still rank on the old description.`
17
+ );
18
+ }
19
+ if (body.tags !== void 0) {
20
+ hints.push(`--tags replaced the whole tag set. Run \`baker ${noun} get <id>\` first if you meant to add to it.`);
21
+ }
22
+ return hints.length > 0 ? hints : void 0;
23
+ }
24
+ function describeFields(args, rawArgs) {
25
+ const fields = {};
26
+ if (args.description) fields.description = args.description;
27
+ if (args.name) fields.name = args.name;
28
+ const tags = describeTags(rawArgs, args.tags);
29
+ if (tags !== void 0) fields.tags = tags;
30
+ return fields;
31
+ }
32
+ function describeErrorFix(code, noun) {
33
+ if (code !== "CONFLICT") return void 0;
34
+ return `Poll \`baker ${noun} get <id>\` until \`status\` reads "ready", then run this again. Do not retry immediately \u2014 the answer will not change until the analysis lands.`;
35
+ }
36
+
37
+ export {
38
+ describeHints,
39
+ describeFields,
40
+ describeErrorFix
41
+ };
42
+ //# sourceMappingURL=chunk-ZIXHS6AM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/describeArgs.ts"],"sourcesContent":["import { repeatedValues } from \"./repeatedFlags.ts\";\n\n/**\n * The tag set a `describe` call was given, or `undefined` when the flag was\n * never passed.\n *\n * Both spellings land in the same place: `--tags a,b` and `--tags a --tags b`.\n * The repeated form has to be read off `rawArgs` because citty collapses a\n * repeated flag to its last value (see `repeatedFlags.ts`) — and on this\n * command that collapse is destructive rather than merely lossy, since the\n * write **replaces** the whole tag set. `--tags a --tags b` would have stored\n * `b` alone and reported success.\n *\n * An empty result is a real value, not a missing one: `--tags ,` clears the\n * set, which is the only way to say \"no tags\" once a wrong one is on the row.\n */\nexport function describeTags(rawArgs: readonly string[] | undefined, parsed: unknown): string[] | undefined {\n const given = repeatedValues(rawArgs, \"tags\", parsed);\n if (given.length === 0) return undefined;\n return given.flatMap((chunk) => chunk.split(\",\").map((tag) => tag.trim())).filter(Boolean);\n}\n\n/**\n * The two things an agent gets wrong right after a `describe` call: searching\n * for the new wording immediately, and assuming `--tags` merged.\n */\nexport function describeHints(\n noun: \"images\" | \"videos\",\n body: { description?: string; tags?: string[] },\n): string[] | undefined {\n // Named as the command the agent would actually run, not as the family —\n // the two families do not spell their library search the same way.\n const search = noun === \"images\" ? \"baker images library\" : \"baker videos search\";\n const hints: string[] = [];\n if (body.description !== undefined) {\n hints.push(\n `The semantic index rebuilds in the background — a \\`${search}\\` run right now may still rank on the old description.`,\n );\n }\n if (body.tags !== undefined) {\n hints.push(`--tags replaced the whole tag set. Run \\`baker ${noun} get <id>\\` first if you meant to add to it.`);\n }\n return hints.length > 0 ? hints : undefined;\n}\n\n/** The three fields a `describe` call may change, as the request carries them. */\nexport type DescribeFields = { name?: string; description?: string; tags?: string[] };\n\n/**\n * The fields a `describe` invocation is actually asking to change.\n *\n * A flag left off is absent rather than empty, because the mutation merges\n * against the stored row: sending `name: \"\"` for a flag the caller never typed\n * would blank it. `--description \"\"` is treated the same way — an empty string\n * is not a description anybody meant to write.\n */\nexport function describeFields(args: Record<string, unknown>, rawArgs: readonly string[] | undefined): DescribeFields {\n const fields: DescribeFields = {};\n if (args.description) fields.description = args.description as string;\n if (args.name) fields.name = args.name as string;\n const tags = describeTags(rawArgs, args.tags);\n if (tags !== undefined) fields.tags = tags;\n return fields;\n}\n\n/**\n * Remediation for the one refusal the agent can act on rather than report.\n *\n * `CONFLICT` means the row is still being analysed, and the analysis overwrites\n * `name` / `description` / `tags` when it lands — so an immediate retry cannot\n * succeed, and saying so is the difference between one wasted call and a loop.\n */\nexport function describeErrorFix(code: string, noun: \"images\" | \"videos\"): string | undefined {\n if (code !== \"CONFLICT\") return undefined;\n return `Poll \\`baker ${noun} get <id>\\` until \\`status\\` reads \"ready\", then run this again. Do not retry immediately — the answer will not change until the analysis lands.`;\n}\n"],"mappings":";;;;;AAgBO,SAAS,aAAa,SAAwC,QAAuC;AAC1G,QAAM,QAAQ,eAAe,SAAS,QAAQ,MAAM;AACpD,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MAAM,QAAQ,CAAC,UAAU,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,OAAO;AAC3F;AAMO,SAAS,cACd,MACA,MACsB;AAGtB,QAAM,SAAS,SAAS,WAAW,yBAAyB;AAC5D,QAAM,QAAkB,CAAC;AACzB,MAAI,KAAK,gBAAgB,QAAW;AAClC,UAAM;AAAA,MACJ,4DAAuD,MAAM;AAAA,IAC/D;AAAA,EACF;AACA,MAAI,KAAK,SAAS,QAAW;AAC3B,UAAM,KAAK,kDAAkD,IAAI,8CAA8C;AAAA,EACjH;AACA,SAAO,MAAM,SAAS,IAAI,QAAQ;AACpC;AAaO,SAAS,eAAe,MAA+B,SAAwD;AACpH,QAAM,SAAyB,CAAC;AAChC,MAAI,KAAK,YAAa,QAAO,cAAc,KAAK;AAChD,MAAI,KAAK,KAAM,QAAO,OAAO,KAAK;AAClC,QAAM,OAAO,aAAa,SAAS,KAAK,IAAI;AAC5C,MAAI,SAAS,OAAW,QAAO,OAAO;AACtC,SAAO;AACT;AASO,SAAS,iBAAiB,MAAc,MAA+C;AAC5F,MAAI,SAAS,WAAY,QAAO;AAChC,SAAO,gBAAgB,IAAI;AAC7B;","names":[]}