@koda-sl/baker-cli 0.387.0 → 0.389.0-dev.8065ad8f0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (967) hide show
  1. package/README.md +1090 -211
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-CLOKMTTC.js +49 -0
  5. package/dist/account-CLOKMTTC.js.map +1 -0
  6. package/dist/account-V5Y2QHAK.js +79 -0
  7. package/dist/account-V5Y2QHAK.js.map +1 -0
  8. package/dist/account-XFK6VX2R.js +80 -0
  9. package/dist/account-XFK6VX2R.js.map +1 -0
  10. package/dist/account-reads-S5VXX2QU.js +218 -0
  11. package/dist/account-reads-S5VXX2QU.js.map +1 -0
  12. package/dist/account-writes-Y7EQXDXF.js +66 -0
  13. package/dist/account-writes-Y7EQXDXF.js.map +1 -0
  14. package/dist/accounts-7YD457YN.js +114 -0
  15. package/dist/accounts-7YD457YN.js.map +1 -0
  16. package/dist/accounts-BJ3X5JQT.js +115 -0
  17. package/dist/accounts-BJ3X5JQT.js.map +1 -0
  18. package/dist/accounts-LOJ4WLIX.js +77 -0
  19. package/dist/accounts-LOJ4WLIX.js.map +1 -0
  20. package/dist/accounts-RYBDLQ6H.js +75 -0
  21. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  22. package/dist/accounts-UO4XBWM2.js +611 -0
  23. package/dist/accounts-UO4XBWM2.js.map +1 -0
  24. package/dist/actions-3AW3R63U.js +55 -0
  25. package/dist/actions-3AW3R63U.js.map +1 -0
  26. package/dist/active-entities-R6GZIO6Z.js +103 -0
  27. package/dist/active-entities-R6GZIO6Z.js.map +1 -0
  28. package/dist/activities-ESBF3GFS.js +74 -0
  29. package/dist/activities-ESBF3GFS.js.map +1 -0
  30. package/dist/ad-group-writes-I225OYDZ.js +170 -0
  31. package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
  32. package/dist/ad-groups-O35MWNF6.js +68 -0
  33. package/dist/ad-groups-O35MWNF6.js.map +1 -0
  34. package/dist/ad-writes-SS5YZO5W.js +174 -0
  35. package/dist/ad-writes-SS5YZO5W.js.map +1 -0
  36. package/dist/add-43DUOVNR.js +104 -0
  37. package/dist/add-43DUOVNR.js.map +1 -0
  38. package/dist/add-IE5WDELB.js +302 -0
  39. package/dist/add-IE5WDELB.js.map +1 -0
  40. package/dist/add-QZHAWUBA.js +97 -0
  41. package/dist/add-QZHAWUBA.js.map +1 -0
  42. package/dist/add-TGQIVVXH.js +105 -0
  43. package/dist/add-TGQIVVXH.js.map +1 -0
  44. package/dist/add-accounts-6QYPOPR2.js +91 -0
  45. package/dist/add-accounts-6QYPOPR2.js.map +1 -0
  46. package/dist/ads-AUSRB4GU.js +128 -0
  47. package/dist/ads-AUSRB4GU.js.map +1 -0
  48. package/dist/ads-COYOTEKE.js +77 -0
  49. package/dist/ads-COYOTEKE.js.map +1 -0
  50. package/dist/ads-MALHYD2D.js +40 -0
  51. package/dist/ads-MALHYD2D.js.map +1 -0
  52. package/dist/ads-XZCMSPM5.js +113 -0
  53. package/dist/ads-XZCMSPM5.js.map +1 -0
  54. package/dist/adsets-AKR75THA.js +176 -0
  55. package/dist/adsets-AKR75THA.js.map +1 -0
  56. package/dist/advertisers-52FMMBTQ.js +120 -0
  57. package/dist/advertisers-52FMMBTQ.js.map +1 -0
  58. package/dist/advertisers-BCGKUMEH.js +125 -0
  59. package/dist/advertisers-BCGKUMEH.js.map +1 -0
  60. package/dist/analytics-JPDBKETM.js +1980 -0
  61. package/dist/analytics-JPDBKETM.js.map +1 -0
  62. package/dist/analytics-YVQ6H4BG.js +433 -0
  63. package/dist/analytics-YVQ6H4BG.js.map +1 -0
  64. package/dist/animate-JXIT77Y5.js +480 -0
  65. package/dist/animate-JXIT77Y5.js.map +1 -0
  66. package/dist/assign-66NTWTR2.js +77 -0
  67. package/dist/assign-66NTWTR2.js.map +1 -0
  68. package/dist/audience-size-LVQJWQAS.js +94 -0
  69. package/dist/audience-size-LVQJWQAS.js.map +1 -0
  70. package/dist/audiences-DC3IOG34.js +85 -0
  71. package/dist/audiences-DC3IOG34.js.map +1 -0
  72. package/dist/audiences-NEW3LLQR.js +268 -0
  73. package/dist/audiences-NEW3LLQR.js.map +1 -0
  74. package/dist/audiences-NYGMBGQ3.js +79 -0
  75. package/dist/audiences-NYGMBGQ3.js.map +1 -0
  76. package/dist/audit-UIPMTI5C.js +88 -0
  77. package/dist/audit-UIPMTI5C.js.map +1 -0
  78. package/dist/audit-XGN2OFLN.js +151 -0
  79. package/dist/audit-XGN2OFLN.js.map +1 -0
  80. package/dist/autocomplete-LVPDV3JE.js +111 -0
  81. package/dist/autocomplete-LVPDV3JE.js.map +1 -0
  82. package/dist/avatars-S6NSLMJK.js +38 -0
  83. package/dist/avatars-S6NSLMJK.js.map +1 -0
  84. package/dist/bid-pricing-2LYULXU2.js +99 -0
  85. package/dist/bid-pricing-2LYULXU2.js.map +1 -0
  86. package/dist/brand-WWHUZ72R.js +22 -0
  87. package/dist/brand-WWHUZ72R.js.map +1 -0
  88. package/dist/brief-XY3TFWBC.js +492 -0
  89. package/dist/brief-XY3TFWBC.js.map +1 -0
  90. package/dist/businesses-J7OP7MSK.js +53 -0
  91. package/dist/businesses-J7OP7MSK.js.map +1 -0
  92. package/dist/campaign-groups-N4TZ2F3L.js +95 -0
  93. package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
  94. package/dist/campaign-writes-5XA727KI.js +170 -0
  95. package/dist/campaign-writes-5XA727KI.js.map +1 -0
  96. package/dist/campaign-writes-7YFRQIQT.js +165 -0
  97. package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
  98. package/dist/campaigns-JPYNVFQI.js +76 -0
  99. package/dist/campaigns-JPYNVFQI.js.map +1 -0
  100. package/dist/campaigns-L43ZUKAI.js +107 -0
  101. package/dist/campaigns-L43ZUKAI.js.map +1 -0
  102. package/dist/campaigns-OD7Z332M.js +109 -0
  103. package/dist/campaigns-OD7Z332M.js.map +1 -0
  104. package/dist/campaigns-R4DXIR2Q.js +110 -0
  105. package/dist/campaigns-R4DXIR2Q.js.map +1 -0
  106. package/dist/canvas-J7SLIVL7.js +46 -0
  107. package/dist/canvas-J7SLIVL7.js.map +1 -0
  108. package/dist/capabilities-FVTZAFPV.js +144 -0
  109. package/dist/capabilities-FVTZAFPV.js.map +1 -0
  110. package/dist/cards-7H32TNMO.js +85 -0
  111. package/dist/cards-7H32TNMO.js.map +1 -0
  112. package/dist/catalog-OTICZPJA.js +64 -0
  113. package/dist/catalog-OTICZPJA.js.map +1 -0
  114. package/dist/catalogs-ABCQLCDU.js +128 -0
  115. package/dist/catalogs-ABCQLCDU.js.map +1 -0
  116. package/dist/changes-7ZIGNUW6.js +135 -0
  117. package/dist/changes-7ZIGNUW6.js.map +1 -0
  118. package/dist/chatgpt-B3NHRJUE.js +47 -0
  119. package/dist/chatgpt-B3NHRJUE.js.map +1 -0
  120. package/dist/chats-E7DBRHBF.js +262 -0
  121. package/dist/chats-E7DBRHBF.js.map +1 -0
  122. package/dist/chunk-2CV7LX23.js +474 -0
  123. package/dist/chunk-2CV7LX23.js.map +1 -0
  124. package/dist/chunk-2HCI5BXB.js +479 -0
  125. package/dist/chunk-2HCI5BXB.js.map +1 -0
  126. package/dist/chunk-2SQJL7ZN.js +56 -0
  127. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  128. package/dist/chunk-2Y5V23PU.js +29 -0
  129. package/dist/chunk-2Y5V23PU.js.map +1 -0
  130. package/dist/chunk-32CPGJPL.js +149 -0
  131. package/dist/chunk-32CPGJPL.js.map +1 -0
  132. package/dist/chunk-3ACMDRSE.js +39 -0
  133. package/dist/chunk-3ACMDRSE.js.map +1 -0
  134. package/dist/chunk-3CIXGQJS.js +150 -0
  135. package/dist/chunk-3CIXGQJS.js.map +1 -0
  136. package/dist/chunk-3U7TDBIB.js +275 -0
  137. package/dist/chunk-3U7TDBIB.js.map +1 -0
  138. package/dist/chunk-3UDSYYND.js +42 -0
  139. package/dist/chunk-3UDSYYND.js.map +1 -0
  140. package/dist/chunk-3ZWWXAQZ.js +150 -0
  141. package/dist/chunk-3ZWWXAQZ.js.map +1 -0
  142. package/dist/chunk-4MH6LONO.js +274 -0
  143. package/dist/chunk-4MH6LONO.js.map +1 -0
  144. package/dist/chunk-4NZ47VXO.js +137 -0
  145. package/dist/chunk-4NZ47VXO.js.map +1 -0
  146. package/dist/chunk-564AEU2Q.js +541 -0
  147. package/dist/chunk-564AEU2Q.js.map +1 -0
  148. package/dist/chunk-5HYSKH77.js +315 -0
  149. package/dist/chunk-5HYSKH77.js.map +1 -0
  150. package/dist/chunk-5MBPIONY.js +29 -0
  151. package/dist/chunk-5MBPIONY.js.map +1 -0
  152. package/dist/chunk-5OVOLYY3.js +74 -0
  153. package/dist/chunk-5OVOLYY3.js.map +1 -0
  154. package/dist/chunk-66USKCVY.js +4410 -0
  155. package/dist/chunk-66USKCVY.js.map +1 -0
  156. package/dist/chunk-6I7SYEYN.js +166 -0
  157. package/dist/chunk-6I7SYEYN.js.map +1 -0
  158. package/dist/chunk-6O7ISBC7.js +65 -0
  159. package/dist/chunk-6O7ISBC7.js.map +1 -0
  160. package/dist/chunk-752S7JF6.js +35 -0
  161. package/dist/chunk-752S7JF6.js.map +1 -0
  162. package/dist/chunk-77DN7R35.js +228 -0
  163. package/dist/chunk-77DN7R35.js.map +1 -0
  164. package/dist/chunk-7F7MFMLI.js +175 -0
  165. package/dist/chunk-7F7MFMLI.js.map +1 -0
  166. package/dist/chunk-7THBBTJJ.js +183 -0
  167. package/dist/chunk-7THBBTJJ.js.map +1 -0
  168. package/dist/chunk-7XU3HKMX.js +1599 -0
  169. package/dist/chunk-7XU3HKMX.js.map +1 -0
  170. package/dist/chunk-A2CBZLQ6.js +111 -0
  171. package/dist/chunk-A2CBZLQ6.js.map +1 -0
  172. package/dist/chunk-AFJGYJ7Z.js +45 -0
  173. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  174. package/dist/chunk-AR7PU7BB.js +76 -0
  175. package/dist/chunk-AR7PU7BB.js.map +1 -0
  176. package/dist/chunk-ASL7JFBD.js +96 -0
  177. package/dist/chunk-ASL7JFBD.js.map +1 -0
  178. package/dist/chunk-AUSKKFVH.js +84 -0
  179. package/dist/chunk-AUSKKFVH.js.map +1 -0
  180. package/dist/chunk-B52DCYL2.js +159 -0
  181. package/dist/chunk-B52DCYL2.js.map +1 -0
  182. package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
  183. package/dist/chunk-BVM5IRZW.js.map +1 -0
  184. package/dist/chunk-CAMX6OHF.js +3182 -0
  185. package/dist/chunk-CAMX6OHF.js.map +1 -0
  186. package/dist/chunk-CYBLKMXQ.js +310 -0
  187. package/dist/chunk-CYBLKMXQ.js.map +1 -0
  188. package/dist/chunk-CZENWCBS.js +333 -0
  189. package/dist/chunk-CZENWCBS.js.map +1 -0
  190. package/dist/chunk-D5FY4FAK.js +24 -0
  191. package/dist/chunk-D5FY4FAK.js.map +1 -0
  192. package/dist/chunk-DGCUPJZD.js +39 -0
  193. package/dist/chunk-DGCUPJZD.js.map +1 -0
  194. package/dist/chunk-DNCLWSHO.js +41 -0
  195. package/dist/chunk-DNCLWSHO.js.map +1 -0
  196. package/dist/chunk-DX4GIDO7.js +296 -0
  197. package/dist/chunk-DX4GIDO7.js.map +1 -0
  198. package/dist/chunk-EDLZGTGN.js +216 -0
  199. package/dist/chunk-EDLZGTGN.js.map +1 -0
  200. package/dist/chunk-EDNKALM6.js +304 -0
  201. package/dist/chunk-EDNKALM6.js.map +1 -0
  202. package/dist/chunk-EDNX3AOS.js +76 -0
  203. package/dist/chunk-EDNX3AOS.js.map +1 -0
  204. package/dist/chunk-EF5DP6EB.js +52 -0
  205. package/dist/chunk-EF5DP6EB.js.map +1 -0
  206. package/dist/chunk-ERSX3MKH.js +34 -0
  207. package/dist/chunk-ERSX3MKH.js.map +1 -0
  208. package/dist/chunk-F3IJSR7O.js +346 -0
  209. package/dist/chunk-F3IJSR7O.js.map +1 -0
  210. package/dist/chunk-FKOECEVC.js +126 -0
  211. package/dist/chunk-FKOECEVC.js.map +1 -0
  212. package/dist/chunk-FWT55B3O.js +509 -0
  213. package/dist/chunk-FWT55B3O.js.map +1 -0
  214. package/dist/chunk-FYWWTMXP.js +2902 -0
  215. package/dist/chunk-FYWWTMXP.js.map +1 -0
  216. package/dist/chunk-FZGCAW46.js +64 -0
  217. package/dist/chunk-FZGCAW46.js.map +1 -0
  218. package/dist/chunk-G7AFVTUS.js +106 -0
  219. package/dist/chunk-G7AFVTUS.js.map +1 -0
  220. package/dist/chunk-GIW7ABMM.js +74 -0
  221. package/dist/chunk-GIW7ABMM.js.map +1 -0
  222. package/dist/chunk-GIWHHCD6.js +145 -0
  223. package/dist/chunk-GIWHHCD6.js.map +1 -0
  224. package/dist/chunk-GRQ2AXDX.js +9 -0
  225. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  226. package/dist/chunk-GXDLWBOY.js +73 -0
  227. package/dist/chunk-GXDLWBOY.js.map +1 -0
  228. package/dist/chunk-GYABNLWW.js +629 -0
  229. package/dist/chunk-GYABNLWW.js.map +1 -0
  230. package/dist/chunk-H7MLHG2I.js +94 -0
  231. package/dist/chunk-H7MLHG2I.js.map +1 -0
  232. package/dist/chunk-H7XVKLIY.js +206 -0
  233. package/dist/chunk-H7XVKLIY.js.map +1 -0
  234. package/dist/chunk-HAE4WWFQ.js +455 -0
  235. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  236. package/dist/chunk-HDHWIEJJ.js +136 -0
  237. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  238. package/dist/chunk-HJTIBTF7.js +98 -0
  239. package/dist/chunk-HJTIBTF7.js.map +1 -0
  240. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  241. package/dist/chunk-HLXWKMTK.js.map +1 -0
  242. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  243. package/dist/chunk-HREWXNTO.js.map +1 -0
  244. package/dist/chunk-HYXKRNRV.js +176 -0
  245. package/dist/chunk-HYXKRNRV.js.map +1 -0
  246. package/dist/chunk-I3DIZWN5.js +97 -0
  247. package/dist/chunk-I3DIZWN5.js.map +1 -0
  248. package/dist/chunk-IJMWEO4P.js +57 -0
  249. package/dist/chunk-IJMWEO4P.js.map +1 -0
  250. package/dist/chunk-IOCSDFF2.js +23992 -0
  251. package/dist/chunk-IOCSDFF2.js.map +1 -0
  252. package/dist/chunk-IVIJJXXT.js +62 -0
  253. package/dist/chunk-IVIJJXXT.js.map +1 -0
  254. package/dist/chunk-J57GWTPK.js +106 -0
  255. package/dist/chunk-J57GWTPK.js.map +1 -0
  256. package/dist/chunk-JPK34QPS.js +134 -0
  257. package/dist/chunk-JPK34QPS.js.map +1 -0
  258. package/dist/chunk-JRCFCIE3.js +188 -0
  259. package/dist/chunk-JRCFCIE3.js.map +1 -0
  260. package/dist/chunk-JUAIGJ2A.js +76 -0
  261. package/dist/chunk-JUAIGJ2A.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-KBS5GH4T.js +1626 -0
  265. package/dist/chunk-KBS5GH4T.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-KXGG6EQM.js +382 -0
  273. package/dist/chunk-KXGG6EQM.js.map +1 -0
  274. package/dist/chunk-KXRKPZZY.js +169 -0
  275. package/dist/chunk-KXRKPZZY.js.map +1 -0
  276. package/dist/chunk-KZUHRZ2C.js +5187 -0
  277. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  278. package/dist/chunk-L45A3IYV.js +1079 -0
  279. package/dist/chunk-L45A3IYV.js.map +1 -0
  280. package/dist/chunk-LA6PPSNA.js +65 -0
  281. package/dist/chunk-LA6PPSNA.js.map +1 -0
  282. package/dist/chunk-LEIQAHWF.js +25 -0
  283. package/dist/chunk-LEIQAHWF.js.map +1 -0
  284. package/dist/chunk-LERWCRY5.js +297 -0
  285. package/dist/chunk-LERWCRY5.js.map +1 -0
  286. package/dist/chunk-LLPFY3NI.js +207 -0
  287. package/dist/chunk-LLPFY3NI.js.map +1 -0
  288. package/dist/chunk-M6UNISGO.js +66 -0
  289. package/dist/chunk-M6UNISGO.js.map +1 -0
  290. package/dist/chunk-MDATIJPM.js +92 -0
  291. package/dist/chunk-MDATIJPM.js.map +1 -0
  292. package/dist/chunk-MGKHFGLV.js +75 -0
  293. package/dist/chunk-MGKHFGLV.js.map +1 -0
  294. package/dist/chunk-MZWC6HHA.js +455 -0
  295. package/dist/chunk-MZWC6HHA.js.map +1 -0
  296. package/dist/chunk-N3XJ434P.js +197 -0
  297. package/dist/chunk-N3XJ434P.js.map +1 -0
  298. package/dist/chunk-NFSLRRIE.js +77 -0
  299. package/dist/chunk-NFSLRRIE.js.map +1 -0
  300. package/dist/chunk-NHU33T2S.js +60 -0
  301. package/dist/chunk-NHU33T2S.js.map +1 -0
  302. package/dist/chunk-NJEZM4OB.js +51 -0
  303. package/dist/chunk-NJEZM4OB.js.map +1 -0
  304. package/dist/chunk-O6QKCJE4.js +455 -0
  305. package/dist/chunk-O6QKCJE4.js.map +1 -0
  306. package/dist/chunk-OFFAMC5H.js +225 -0
  307. package/dist/chunk-OFFAMC5H.js.map +1 -0
  308. package/dist/chunk-OHGTCFFE.js +57 -0
  309. package/dist/chunk-OHGTCFFE.js.map +1 -0
  310. package/dist/chunk-P4NSJS54.js +20 -0
  311. package/dist/chunk-P4NSJS54.js.map +1 -0
  312. package/dist/chunk-P5T7OZKV.js +26 -0
  313. package/dist/chunk-P5T7OZKV.js.map +1 -0
  314. package/dist/chunk-PFBQERWX.js +10 -0
  315. package/dist/chunk-PFBQERWX.js.map +1 -0
  316. package/dist/chunk-PUPEGICD.js +103 -0
  317. package/dist/chunk-PUPEGICD.js.map +1 -0
  318. package/dist/chunk-Q6ULQMWG.js +41 -0
  319. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  320. package/dist/chunk-QO23YHLK.js +84 -0
  321. package/dist/chunk-QO23YHLK.js.map +1 -0
  322. package/dist/chunk-QSGIWV4P.js +337 -0
  323. package/dist/chunk-QSGIWV4P.js.map +1 -0
  324. package/dist/chunk-R4Y5P3PB.js +19 -0
  325. package/dist/chunk-R4Y5P3PB.js.map +1 -0
  326. package/dist/chunk-R5OQM7FF.js +179 -0
  327. package/dist/chunk-R5OQM7FF.js.map +1 -0
  328. package/dist/chunk-RODLBWIR.js +592 -0
  329. package/dist/chunk-RODLBWIR.js.map +1 -0
  330. package/dist/chunk-RY7TYEIX.js +504 -0
  331. package/dist/chunk-RY7TYEIX.js.map +1 -0
  332. package/dist/chunk-S4LZ7KTG.js +160 -0
  333. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  334. package/dist/chunk-SHTESUB6.js +1442 -0
  335. package/dist/chunk-SHTESUB6.js.map +1 -0
  336. package/dist/chunk-SJH4EOZH.js +23 -0
  337. package/dist/chunk-SJH4EOZH.js.map +1 -0
  338. package/dist/chunk-SMIENBNX.js +6212 -0
  339. package/dist/chunk-SMIENBNX.js.map +1 -0
  340. package/dist/chunk-T7GT22KA.js +494 -0
  341. package/dist/chunk-T7GT22KA.js.map +1 -0
  342. package/dist/chunk-T7M4WFNV.js +172 -0
  343. package/dist/chunk-T7M4WFNV.js.map +1 -0
  344. package/dist/chunk-TIFVHGQL.js +6683 -0
  345. package/dist/chunk-TIFVHGQL.js.map +1 -0
  346. package/dist/chunk-TMIDUSOR.js +665 -0
  347. package/dist/chunk-TMIDUSOR.js.map +1 -0
  348. package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
  349. package/dist/chunk-U6VRBDNQ.js +1830 -0
  350. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  351. package/dist/chunk-U7BBXM67.js +1743 -0
  352. package/dist/chunk-U7BBXM67.js.map +1 -0
  353. package/dist/chunk-UI6BKYQD.js +225 -0
  354. package/dist/chunk-UI6BKYQD.js.map +1 -0
  355. package/dist/chunk-UOI5S62H.js +846 -0
  356. package/dist/chunk-UOI5S62H.js.map +1 -0
  357. package/dist/chunk-USL5ARRE.js +26 -0
  358. package/dist/chunk-USL5ARRE.js.map +1 -0
  359. package/dist/chunk-UYC45JNS.js +139 -0
  360. package/dist/chunk-UYC45JNS.js.map +1 -0
  361. package/dist/chunk-VNKVBY54.js +363 -0
  362. package/dist/chunk-VNKVBY54.js.map +1 -0
  363. package/dist/chunk-VS4C7VAR.js +533 -0
  364. package/dist/chunk-VS4C7VAR.js.map +1 -0
  365. package/dist/chunk-VZMDYVNS.js +3151 -0
  366. package/dist/chunk-VZMDYVNS.js.map +1 -0
  367. package/dist/chunk-W4W4ZRBP.js +191 -0
  368. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  369. package/dist/chunk-WN4KX7GE.js +25 -0
  370. package/dist/chunk-WN4KX7GE.js.map +1 -0
  371. package/dist/chunk-WNFTXSGR.js +111 -0
  372. package/dist/chunk-WNFTXSGR.js.map +1 -0
  373. package/dist/chunk-WOTDHRNF.js +2109 -0
  374. package/dist/chunk-WOTDHRNF.js.map +1 -0
  375. package/dist/chunk-XGWKTYXQ.js +67 -0
  376. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  377. package/dist/chunk-XIGIJJSF.js +66 -0
  378. package/dist/chunk-XIGIJJSF.js.map +1 -0
  379. package/dist/chunk-XNUXB63I.js +817 -0
  380. package/dist/chunk-XNUXB63I.js.map +1 -0
  381. package/dist/chunk-XQ3CCNJD.js +610 -0
  382. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  383. package/dist/chunk-XX6ZMCY5.js +4227 -0
  384. package/dist/chunk-XX6ZMCY5.js.map +1 -0
  385. package/dist/chunk-Y362QH54.js +98 -0
  386. package/dist/chunk-Y362QH54.js.map +1 -0
  387. package/dist/chunk-Y4T6ATDQ.js +74 -0
  388. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  389. package/dist/chunk-YQSBHWOI.js +41 -0
  390. package/dist/chunk-YU26SDNT.js +46 -0
  391. package/dist/chunk-YU26SDNT.js.map +1 -0
  392. package/dist/chunk-YULENNA7.js +501 -0
  393. package/dist/chunk-YULENNA7.js.map +1 -0
  394. package/dist/chunk-Z3ENMCFE.js +94 -0
  395. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  396. package/dist/chunk-ZH7ZM3ZM.js +125 -0
  397. package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
  398. package/dist/chunk-ZIXHS6AM.js +42 -0
  399. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  400. package/dist/chunk-ZLLJKSNS.js +96 -0
  401. package/dist/chunk-ZLLJKSNS.js.map +1 -0
  402. package/dist/claim-LF6VQ7OR.js +197 -0
  403. package/dist/claim-LF6VQ7OR.js.map +1 -0
  404. package/dist/cli.js +104 -70041
  405. package/dist/cli.js.map +1 -1
  406. package/dist/client-26SAJ46D.js +19 -0
  407. package/dist/code-MOWYJMDH.js +76 -0
  408. package/dist/code-MOWYJMDH.js.map +1 -0
  409. package/dist/companies-6HSK5BLK.js +195 -0
  410. package/dist/companies-6HSK5BLK.js.map +1 -0
  411. package/dist/complete-2PUAFQEC.js +81 -0
  412. package/dist/complete-2PUAFQEC.js.map +1 -0
  413. package/dist/config-X6GKOVQ6.js +88 -0
  414. package/dist/config-X6GKOVQ6.js.map +1 -0
  415. package/dist/connect-RXPMAJQI.js +42 -0
  416. package/dist/content-UYZC4AKN.js +85 -0
  417. package/dist/content-UYZC4AKN.js.map +1 -0
  418. package/dist/conversation-Y3NB2VDI.js +93 -0
  419. package/dist/conversation-Y3NB2VDI.js.map +1 -0
  420. package/dist/conversion-report-R4GJWWTK.js +125 -0
  421. package/dist/conversion-report-R4GJWWTK.js.map +1 -0
  422. package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
  423. package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
  424. package/dist/conversion-writes-WHFFUWWL.js +120 -0
  425. package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
  426. package/dist/conversions-K7C32DPW.js +135 -0
  427. package/dist/conversions-K7C32DPW.js.map +1 -0
  428. package/dist/conversions-OXJAX5GB.js +76 -0
  429. package/dist/conversions-OXJAX5GB.js.map +1 -0
  430. package/dist/countries-PBXNB3BR.js +82 -0
  431. package/dist/countries-PBXNB3BR.js.map +1 -0
  432. package/dist/create-AJ4KPSJ4.js +59 -0
  433. package/dist/create-AJ4KPSJ4.js.map +1 -0
  434. package/dist/create-ALKOAD5J.js +138 -0
  435. package/dist/create-ALKOAD5J.js.map +1 -0
  436. package/dist/create-HTKZMXKB.js +207 -0
  437. package/dist/create-HTKZMXKB.js.map +1 -0
  438. package/dist/create-TZMAOFBR.js +236 -0
  439. package/dist/create-TZMAOFBR.js.map +1 -0
  440. package/dist/creatives-MBTZTIAA.js +51 -0
  441. package/dist/creatives-MBTZTIAA.js.map +1 -0
  442. package/dist/creatives-OZHVU4WB.js +182 -0
  443. package/dist/creatives-OZHVU4WB.js.map +1 -0
  444. package/dist/creatives-VMGY5SU4.js +87 -0
  445. package/dist/creatives-VMGY5SU4.js.map +1 -0
  446. package/dist/credentials-FY4UH6TF.js +287 -0
  447. package/dist/credentials-FY4UH6TF.js.map +1 -0
  448. package/dist/critique-2UTP4DR3.js +216 -0
  449. package/dist/critique-2UTP4DR3.js.map +1 -0
  450. package/dist/critique-B3H7QFM2.js +1449 -0
  451. package/dist/critique-B3H7QFM2.js.map +1 -0
  452. package/dist/crm-2IBLUHDB.js +318 -0
  453. package/dist/crm-2IBLUHDB.js.map +1 -0
  454. package/dist/crm-YMYO4U53.js +224 -0
  455. package/dist/crm-YMYO4U53.js.map +1 -0
  456. package/dist/crop-U3AD4DDR.js +113 -0
  457. package/dist/crop-U3AD4DDR.js.map +1 -0
  458. package/dist/currency-S6KWZSZ6.js +88 -0
  459. package/dist/currency-S6KWZSZ6.js.map +1 -0
  460. package/dist/custom-conversions-FABS6YVT.js +125 -0
  461. package/dist/custom-conversions-FABS6YVT.js.map +1 -0
  462. package/dist/customers-P6LLLJHK.js +56 -0
  463. package/dist/decide-YTHCBKM6.js +199 -0
  464. package/dist/decide-YTHCBKM6.js.map +1 -0
  465. package/dist/delete-B2TDEW7H.js +63 -0
  466. package/dist/delete-B2TDEW7H.js.map +1 -0
  467. package/dist/delete-DZUDLYPC.js +69 -0
  468. package/dist/delete-DZUDLYPC.js.map +1 -0
  469. package/dist/delete-NZGZP4YP.js +71 -0
  470. package/dist/delete-NZGZP4YP.js.map +1 -0
  471. package/dist/delete-SDOZNDWQ.js +54 -0
  472. package/dist/delete-SDOZNDWQ.js.map +1 -0
  473. package/dist/delete-VQMU56OH.js +71 -0
  474. package/dist/delete-VQMU56OH.js.map +1 -0
  475. package/dist/delete-WKQPMVAM.js +66 -0
  476. package/dist/delete-WKQPMVAM.js.map +1 -0
  477. package/dist/demographics-Q3DCXULY.js +138 -0
  478. package/dist/demographics-Q3DCXULY.js.map +1 -0
  479. package/dist/describe-JNTCQZNL.js +97 -0
  480. package/dist/describe-JNTCQZNL.js.map +1 -0
  481. package/dist/describe-MT4334NG.js +97 -0
  482. package/dist/describe-MT4334NG.js.map +1 -0
  483. package/dist/dimensions-FEZUJRAG.js +101 -0
  484. package/dist/dimensions-FEZUJRAG.js.map +1 -0
  485. package/dist/discard-NEZM5CHF.js +66 -0
  486. package/dist/discard-NEZM5CHF.js.map +1 -0
  487. package/dist/discover-4GD7QSF5.js +93 -0
  488. package/dist/discover-4GD7QSF5.js.map +1 -0
  489. package/dist/discover-6K3IOYXR.js +172 -0
  490. package/dist/discover-6K3IOYXR.js.map +1 -0
  491. package/dist/domain-7Y256IDR.js +98 -0
  492. package/dist/domain-7Y256IDR.js.map +1 -0
  493. package/dist/download-L27HWEOE.js +299 -0
  494. package/dist/download-L27HWEOE.js.map +1 -0
  495. package/dist/draft-25G2P2TE.js +281 -0
  496. package/dist/draft-25G2P2TE.js.map +1 -0
  497. package/dist/draft-F6TUGXAY.js +307 -0
  498. package/dist/draft-F6TUGXAY.js.map +1 -0
  499. package/dist/draft-KLULNBWP.js +233 -0
  500. package/dist/draft-KLULNBWP.js.map +1 -0
  501. package/dist/draft-LY5ZPF73.js +217 -0
  502. package/dist/draft-LY5ZPF73.js.map +1 -0
  503. package/dist/draft-M4ZHDQ46.js +306 -0
  504. package/dist/draft-M4ZHDQ46.js.map +1 -0
  505. package/dist/draft-MI7RWY2K.js +100 -0
  506. package/dist/draft-MI7RWY2K.js.map +1 -0
  507. package/dist/draft-P4IVYTY3.js +103 -0
  508. package/dist/draft-P4IVYTY3.js.map +1 -0
  509. package/dist/draft-QQMCVDDS.js +328 -0
  510. package/dist/draft-QQMCVDDS.js.map +1 -0
  511. package/dist/engine/index.d.ts +213 -127
  512. package/dist/engine/index.js +18 -4
  513. package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
  514. package/dist/env-FBTHZKGN.js.map +1 -0
  515. package/dist/experiment-HDYTJPUY.js +1397 -0
  516. package/dist/experiment-HDYTJPUY.js.map +1 -0
  517. package/dist/export-TS5GYEMA.js +168 -0
  518. package/dist/export-TS5GYEMA.js.map +1 -0
  519. package/dist/extract-QVQFUOIK.js +113 -0
  520. package/dist/extract-QVQFUOIK.js.map +1 -0
  521. package/dist/facets-7MBSM7BP.js +114 -0
  522. package/dist/facets-7MBSM7BP.js.map +1 -0
  523. package/dist/favorites-7QP7BY5K.js +178 -0
  524. package/dist/favorites-7QP7BY5K.js.map +1 -0
  525. package/dist/feed-EETRO2FG.js +177 -0
  526. package/dist/feed-EETRO2FG.js.map +1 -0
  527. package/dist/feedback-PLMFRAQW.js +66 -0
  528. package/dist/feedback-PLMFRAQW.js.map +1 -0
  529. package/dist/feedback-record-QEHHGVYC.js +177 -0
  530. package/dist/feedback-record-QEHHGVYC.js.map +1 -0
  531. package/dist/fetch-QE3EB756.js +176 -0
  532. package/dist/fetch-QE3EB756.js.map +1 -0
  533. package/dist/fetch-Z7O3ZL4D.js +139 -0
  534. package/dist/fetch-Z7O3ZL4D.js.map +1 -0
  535. package/dist/find-KAQ6JDMO.js +134 -0
  536. package/dist/find-KAQ6JDMO.js.map +1 -0
  537. package/dist/fit-MY5GVZZZ.js +45 -0
  538. package/dist/fit-MY5GVZZZ.js.map +1 -0
  539. package/dist/flows-C67KEMDU.js +247 -0
  540. package/dist/flows-C67KEMDU.js.map +1 -0
  541. package/dist/follow-IX4XVK5Y.js +94 -0
  542. package/dist/follow-IX4XVK5Y.js.map +1 -0
  543. package/dist/follow-competitors-UZBUOYTH.js +112 -0
  544. package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
  545. package/dist/following-VGOIUCIZ.js +113 -0
  546. package/dist/following-VGOIUCIZ.js.map +1 -0
  547. package/dist/fonts-UR7XZ5XZ.js +34 -0
  548. package/dist/fonts-UR7XZ5XZ.js.map +1 -0
  549. package/dist/forecast-3F4SZNAK.js +104 -0
  550. package/dist/forecast-3F4SZNAK.js.map +1 -0
  551. package/dist/forecast-K5E7CTKX.js +168 -0
  552. package/dist/forecast-K5E7CTKX.js.map +1 -0
  553. package/dist/funding-H5YO37OW.js +85 -0
  554. package/dist/funding-H5YO37OW.js.map +1 -0
  555. package/dist/funnel-2PPEPAMY.js +394 -0
  556. package/dist/funnel-2PPEPAMY.js.map +1 -0
  557. package/dist/ga4-YHJ2XMLC.js +55 -0
  558. package/dist/ga4-YHJ2XMLC.js.map +1 -0
  559. package/dist/generate-M2ZX5DMI.js +262 -0
  560. package/dist/generate-M2ZX5DMI.js.map +1 -0
  561. package/dist/get-4EYKCZ6F.js +59 -0
  562. package/dist/get-4EYKCZ6F.js.map +1 -0
  563. package/dist/get-637GALM2.js +63 -0
  564. package/dist/get-637GALM2.js.map +1 -0
  565. package/dist/get-AZARFR6O.js +61 -0
  566. package/dist/get-AZARFR6O.js.map +1 -0
  567. package/dist/get-BPMEHRUG.js +56 -0
  568. package/dist/get-BPMEHRUG.js.map +1 -0
  569. package/dist/get-MQ6MMIZ7.js +78 -0
  570. package/dist/get-MQ6MMIZ7.js.map +1 -0
  571. package/dist/get-N4BPOQCB.js +63 -0
  572. package/dist/get-N4BPOQCB.js.map +1 -0
  573. package/dist/get-RPZHLQ56.js +92 -0
  574. package/dist/get-RPZHLQ56.js.map +1 -0
  575. package/dist/gif-6PRTB2VR.js +94 -0
  576. package/dist/gif-6PRTB2VR.js.map +1 -0
  577. package/dist/google-52JRH7X3.js +136 -0
  578. package/dist/google-52JRH7X3.js.map +1 -0
  579. package/dist/google-X2AQR3RB.js +3190 -0
  580. package/dist/google-X2AQR3RB.js.map +1 -0
  581. package/dist/google-ads-PWX7OF5Z.js +195 -0
  582. package/dist/google-ads-PWX7OF5Z.js.map +1 -0
  583. package/dist/group-AAZ5QKC3.js +43 -0
  584. package/dist/group-AAZ5QKC3.js.map +1 -0
  585. package/dist/group-GSYCZORC.js +43 -0
  586. package/dist/group-GSYCZORC.js.map +1 -0
  587. package/dist/gsc-TS5T7ML2.js +30 -0
  588. package/dist/gsc-TS5T7ML2.js.map +1 -0
  589. package/dist/history-EW6LFFCX.js +67 -0
  590. package/dist/history-EW6LFFCX.js.map +1 -0
  591. package/dist/history-XI5ABCFO.js +133 -0
  592. package/dist/history-XI5ABCFO.js.map +1 -0
  593. package/dist/hubspot-AVUOILRE.js +779 -0
  594. package/dist/hubspot-AVUOILRE.js.map +1 -0
  595. package/dist/icon-K75KI6BV.js +137 -0
  596. package/dist/icon-K75KI6BV.js.map +1 -0
  597. package/dist/ideas-L3SZSIZP.js +35 -0
  598. package/dist/ideas-L3SZSIZP.js.map +1 -0
  599. package/dist/images-CD53I2W5.js +90 -0
  600. package/dist/images-CD53I2W5.js.map +1 -0
  601. package/dist/improve-L3BW4EQG.js +86 -0
  602. package/dist/improve-L3BW4EQG.js.map +1 -0
  603. package/dist/ingest-KRJOYTCQ.js +107 -0
  604. package/dist/ingest-KRJOYTCQ.js.map +1 -0
  605. package/dist/ingest-WE3SPPND.js +23 -0
  606. package/dist/ingest-WE3SPPND.js.map +1 -0
  607. package/dist/insights-PELVD4RY.js +122 -0
  608. package/dist/insights-PELVD4RY.js.map +1 -0
  609. package/dist/insights-XCA4BUJW.js +423 -0
  610. package/dist/insights-XCA4BUJW.js.map +1 -0
  611. package/dist/inspect-QKETG5UJ.js +189 -0
  612. package/dist/inspect-QKETG5UJ.js.map +1 -0
  613. package/dist/inspiration-Y2J2PUPC.js +53 -0
  614. package/dist/inspiration-Y2J2PUPC.js.map +1 -0
  615. package/dist/intent-YJOJGNVJ.js +95 -0
  616. package/dist/intent-YJOJGNVJ.js.map +1 -0
  617. package/dist/job-E2U4FS5P.js +202 -0
  618. package/dist/job-E2U4FS5P.js.map +1 -0
  619. package/dist/job-create-DFYCHVQ7.js +109 -0
  620. package/dist/job-create-DFYCHVQ7.js.map +1 -0
  621. package/dist/job-status-FFPMTSHB.js +74 -0
  622. package/dist/job-status-FFPMTSHB.js.map +1 -0
  623. package/dist/keep-GYZS2UTL.js +78 -0
  624. package/dist/keep-GYZS2UTL.js.map +1 -0
  625. package/dist/keyword-gap-QU7O7UKC.js +130 -0
  626. package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
  627. package/dist/keyword-metrics-HLCM3QU7.js +197 -0
  628. package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
  629. package/dist/keywords-for-site-BDKPQKWB.js +128 -0
  630. package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
  631. package/dist/landing-4K6XYNFM.js +28 -0
  632. package/dist/landing-4K6XYNFM.js.map +1 -0
  633. package/dist/landings-F7LOAEJE.js +151 -0
  634. package/dist/landings-F7LOAEJE.js.map +1 -0
  635. package/dist/languages-P3ZM6R2A.js +40 -0
  636. package/dist/languages-P3ZM6R2A.js.map +1 -0
  637. package/dist/languages-XEJKTIFP.js +55 -0
  638. package/dist/languages-XEJKTIFP.js.map +1 -0
  639. package/dist/launches-TCFAYUA5.js +19 -0
  640. package/dist/launches-TCFAYUA5.js.map +1 -0
  641. package/dist/layerize-ZSKFIPZA.js +190 -0
  642. package/dist/layerize-ZSKFIPZA.js.map +1 -0
  643. package/dist/leads-GDF4S2AM.js +90 -0
  644. package/dist/leads-GDF4S2AM.js.map +1 -0
  645. package/dist/leads-TPB5OFSQ.js +293 -0
  646. package/dist/leads-TPB5OFSQ.js.map +1 -0
  647. package/dist/learn-NMFEA5H5.js +203 -0
  648. package/dist/learn-NMFEA5H5.js.map +1 -0
  649. package/dist/library-IP2UKNRU.js +109 -0
  650. package/dist/library-IP2UKNRU.js.map +1 -0
  651. package/dist/lighthouse-57XBJRCO.js +75 -0
  652. package/dist/lighthouse-57XBJRCO.js.map +1 -0
  653. package/dist/line-item-writes-O6SSS5NQ.js +208 -0
  654. package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
  655. package/dist/line-items-ZZAKH3YZ.js +103 -0
  656. package/dist/line-items-ZZAKH3YZ.js.map +1 -0
  657. package/dist/link-CRY57R3E.js +64 -0
  658. package/dist/link-CRY57R3E.js.map +1 -0
  659. package/dist/linkedin-WC7LGYPP.js +1008 -0
  660. package/dist/linkedin-WC7LGYPP.js.map +1 -0
  661. package/dist/list-6IKPWQGG.js +57 -0
  662. package/dist/list-6IKPWQGG.js.map +1 -0
  663. package/dist/list-CAUH3BMG.js +65 -0
  664. package/dist/list-CAUH3BMG.js.map +1 -0
  665. package/dist/list-CWAKX5TH.js +63 -0
  666. package/dist/list-CWAKX5TH.js.map +1 -0
  667. package/dist/list-FJ5FSVL6.js +151 -0
  668. package/dist/list-FJ5FSVL6.js.map +1 -0
  669. package/dist/list-GTOSN7DP.js +50 -0
  670. package/dist/list-GTOSN7DP.js.map +1 -0
  671. package/dist/list-HLJP4NVE.js +51 -0
  672. package/dist/list-HLJP4NVE.js.map +1 -0
  673. package/dist/list-LCUPF7EF.js +76 -0
  674. package/dist/list-LCUPF7EF.js.map +1 -0
  675. package/dist/list-NH4ZRZTL.js +303 -0
  676. package/dist/list-NH4ZRZTL.js.map +1 -0
  677. package/dist/locations-2BYWKIYA.js +67 -0
  678. package/dist/locations-2BYWKIYA.js.map +1 -0
  679. package/dist/locations-LVVDOSXO.js +40 -0
  680. package/dist/locations-LVVDOSXO.js.map +1 -0
  681. package/dist/log-6JOWOY5G.js +92 -0
  682. package/dist/log-6JOWOY5G.js.map +1 -0
  683. package/dist/logo-AJK2TDQU.js +18 -0
  684. package/dist/logo-AJK2TDQU.js.map +1 -0
  685. package/dist/lookup-H5GEM77H.js +22 -0
  686. package/dist/lookup-H5GEM77H.js.map +1 -0
  687. package/dist/make-N3WZ6OSS.js +640 -0
  688. package/dist/make-N3WZ6OSS.js.map +1 -0
  689. package/dist/map-4KOYFHAN.js +404 -0
  690. package/dist/map-4KOYFHAN.js.map +1 -0
  691. package/dist/mcp-LSS2DHYL.js +463 -0
  692. package/dist/mcp-LSS2DHYL.js.map +1 -0
  693. package/dist/media-JBCN6V4X.js +15 -0
  694. package/dist/media-JBCN6V4X.js.map +1 -0
  695. package/dist/media-RAGEJTZX.js +89 -0
  696. package/dist/media-RAGEJTZX.js.map +1 -0
  697. package/dist/media-sources-GSPAV7HT.js +32 -0
  698. package/dist/media-sources-GSPAV7HT.js.map +1 -0
  699. package/dist/members-GUUVEK2Y.js +44 -0
  700. package/dist/members-GUUVEK2Y.js.map +1 -0
  701. package/dist/meta-Z37ZR3PJ.js +69 -0
  702. package/dist/meta-Z37ZR3PJ.js.map +1 -0
  703. package/dist/metrics-KW6SDULI.js +152 -0
  704. package/dist/metrics-KW6SDULI.js.map +1 -0
  705. package/dist/models-5J4WFUD3.js +155 -0
  706. package/dist/models-5J4WFUD3.js.map +1 -0
  707. package/dist/normalize-DSFVTRXN.js +806 -0
  708. package/dist/normalize-DSFVTRXN.js.map +1 -0
  709. package/dist/normalize-EUDI5HEM.js +141 -0
  710. package/dist/normalize-EUDI5HEM.js.map +1 -0
  711. package/dist/options-P4PPJQH4.js +121 -0
  712. package/dist/options-P4PPJQH4.js.map +1 -0
  713. package/dist/output-DTCLVPUF.js +24 -0
  714. package/dist/output-DTCLVPUF.js.map +1 -0
  715. package/dist/page-N2ZO3O7F.js +105 -0
  716. package/dist/page-N2ZO3O7F.js.map +1 -0
  717. package/dist/pages-FQ4CBAJ2.js +66 -0
  718. package/dist/pages-FQ4CBAJ2.js.map +1 -0
  719. package/dist/performance-A66LYIZX.js +24 -0
  720. package/dist/performance-A66LYIZX.js.map +1 -0
  721. package/dist/pinterest-NV5XTNJE.js +96 -0
  722. package/dist/pinterest-NV5XTNJE.js.map +1 -0
  723. package/dist/pixels-CTJ43FZ4.js +108 -0
  724. package/dist/pixels-CTJ43FZ4.js.map +1 -0
  725. package/dist/pixels-HKINGZCH.js +60 -0
  726. package/dist/pixels-HKINGZCH.js.map +1 -0
  727. package/dist/plan-ZYTWLGWK.js +207 -0
  728. package/dist/plan-ZYTWLGWK.js.map +1 -0
  729. package/dist/preview-5ROBOQG7.js +169 -0
  730. package/dist/preview-5ROBOQG7.js.map +1 -0
  731. package/dist/profile-Q3PHR6FU.js +159 -0
  732. package/dist/profile-Q3PHR6FU.js.map +1 -0
  733. package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
  734. package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
  735. package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
  736. package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
  737. package/dist/properties-WLL6M2P6.js +101 -0
  738. package/dist/properties-WLL6M2P6.js.map +1 -0
  739. package/dist/publish-KHNR5ARF.js +322 -0
  740. package/dist/publish-KHNR5ARF.js.map +1 -0
  741. package/dist/query-A34J7BGX.js +61 -0
  742. package/dist/query-A34J7BGX.js.map +1 -0
  743. package/dist/query-IYZN5KHO.js +236 -0
  744. package/dist/query-IYZN5KHO.js.map +1 -0
  745. package/dist/query-UN2P6DBA.js +247 -0
  746. package/dist/query-UN2P6DBA.js.map +1 -0
  747. package/dist/questionnaire-Z2ZIKNBV.js +93 -0
  748. package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
  749. package/dist/read-GM7PQYJA.js +141 -0
  750. package/dist/read-GM7PQYJA.js.map +1 -0
  751. package/dist/reddit-5NPFULGD.js +26 -0
  752. package/dist/reddit-5NPFULGD.js.map +1 -0
  753. package/dist/refresh-FGXW4Y4X.js +94 -0
  754. package/dist/refresh-FGXW4Y4X.js.map +1 -0
  755. package/dist/release-OKZMC73N.js +60 -0
  756. package/dist/release-OKZMC73N.js.map +1 -0
  757. package/dist/relevant-pages-J76ZKNKF.js +99 -0
  758. package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
  759. package/dist/remove-CA2J6ACH.js +50 -0
  760. package/dist/remove-CA2J6ACH.js.map +1 -0
  761. package/dist/remove-GOYW2G4R.js +48 -0
  762. package/dist/remove-GOYW2G4R.js.map +1 -0
  763. package/dist/reopen-XPKSOE6O.js +63 -0
  764. package/dist/reopen-XPKSOE6O.js.map +1 -0
  765. package/dist/rerun-QA6ISKVO.js +86 -0
  766. package/dist/rerun-QA6ISKVO.js.map +1 -0
  767. package/dist/research-FZ63UZTE.js +62 -0
  768. package/dist/research-FZ63UZTE.js.map +1 -0
  769. package/dist/research-YGQQ6CNG.js +262 -0
  770. package/dist/research-YGQQ6CNG.js.map +1 -0
  771. package/dist/reset-BGPZ4HMA.js +54 -0
  772. package/dist/reset-BGPZ4HMA.js.map +1 -0
  773. package/dist/reset-HTD6LCIT.js +54 -0
  774. package/dist/reset-HTD6LCIT.js.map +1 -0
  775. package/dist/resolve-NRDZ6N2B.js +121 -0
  776. package/dist/resolve-NRDZ6N2B.js.map +1 -0
  777. package/dist/retry-PF4BGKJV.js +60 -0
  778. package/dist/retry-PF4BGKJV.js.map +1 -0
  779. package/dist/retry-XL26JDAV.js +62 -0
  780. package/dist/retry-XL26JDAV.js.map +1 -0
  781. package/dist/retry-failed-BEFWRV4Z.js +45 -0
  782. package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
  783. package/dist/run-3ZDGCCTH.js +61 -0
  784. package/dist/run-3ZDGCCTH.js.map +1 -0
  785. package/dist/run-EMJLI7LR.js +65 -0
  786. package/dist/run-EMJLI7LR.js.map +1 -0
  787. package/dist/scaffold-ad-QW75LLYR.js +1550 -0
  788. package/dist/scaffold-ad-QW75LLYR.js.map +1 -0
  789. package/dist/scaffold-static-ad-S3UOKLJ3.js +973 -0
  790. package/dist/scaffold-static-ad-S3UOKLJ3.js.map +1 -0
  791. package/dist/scaffold-video-3BJQOUAA.js +874 -0
  792. package/dist/scaffold-video-3BJQOUAA.js.map +1 -0
  793. package/dist/schedule-KQ7UIR3N.js +66 -0
  794. package/dist/schedule-KQ7UIR3N.js.map +1 -0
  795. package/dist/schedule-PKPNSISL.js +61 -0
  796. package/dist/schedule-PKPNSISL.js.map +1 -0
  797. package/dist/scheduled-agents-LP5LITA3.js +49 -0
  798. package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
  799. package/dist/schema-B6J6VPTO.js +132 -0
  800. package/dist/schema-B6J6VPTO.js.map +1 -0
  801. package/dist/schema-QXTDLZVC.js +63 -0
  802. package/dist/schema-QXTDLZVC.js.map +1 -0
  803. package/dist/scrape-7YKJWFZE.js +2241 -0
  804. package/dist/scrape-7YKJWFZE.js.map +1 -0
  805. package/dist/screenshot-ZHBSG3SI.js +102 -0
  806. package/dist/screenshot-ZHBSG3SI.js.map +1 -0
  807. package/dist/search-332KFYZ6.js +224 -0
  808. package/dist/search-332KFYZ6.js.map +1 -0
  809. package/dist/search-4PBMXXUY.js +91 -0
  810. package/dist/search-4PBMXXUY.js.map +1 -0
  811. package/dist/search-6WNUKCMP.js +174 -0
  812. package/dist/search-6WNUKCMP.js.map +1 -0
  813. package/dist/search-AVNUU6TJ.js +26 -0
  814. package/dist/search-AVNUU6TJ.js.map +1 -0
  815. package/dist/search-F5INRFFK.js +92 -0
  816. package/dist/search-F5INRFFK.js.map +1 -0
  817. package/dist/search-copy-DZVBYG2B.js +168 -0
  818. package/dist/search-copy-DZVBYG2B.js.map +1 -0
  819. package/dist/seeds-5JTQN5WI.js +101 -0
  820. package/dist/seeds-5JTQN5WI.js.map +1 -0
  821. package/dist/select-2V6CHATD.js +96 -0
  822. package/dist/select-2V6CHATD.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-XGZXW63I.js +188 -0
  828. package/dist/set-prompt-XGZXW63I.js.map +1 -0
  829. package/dist/setup-links-6H5ONDCQ.js +141 -0
  830. package/dist/setup-links-6H5ONDCQ.js.map +1 -0
  831. package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
  832. package/dist/shared-QAMP7FZV.js.map +1 -0
  833. package/dist/shopify-D3GNV5O6.js +3715 -0
  834. package/dist/shopify-D3GNV5O6.js.map +1 -0
  835. package/dist/site-TBPERLY3.js +177 -0
  836. package/dist/site-TBPERLY3.js.map +1 -0
  837. package/dist/sitemaps-XPGLW24S.js +87 -0
  838. package/dist/sitemaps-XPGLW24S.js.map +1 -0
  839. package/dist/sites-WMBY2HJV.js +101 -0
  840. package/dist/sites-WMBY2HJV.js.map +1 -0
  841. package/dist/skills-3HEILQCU.js +47 -0
  842. package/dist/skills-3HEILQCU.js.map +1 -0
  843. package/dist/sources-JFQKTK2L.js +421 -0
  844. package/dist/sources-JFQKTK2L.js.map +1 -0
  845. package/dist/sources-Q3I6DDV7.js +30 -0
  846. package/dist/sources-Q3I6DDV7.js.map +1 -0
  847. package/dist/stale-4SERZW2D.js +66 -0
  848. package/dist/stale-4SERZW2D.js.map +1 -0
  849. package/dist/stats-GNILHSKK.js +34 -0
  850. package/dist/stats-GNILHSKK.js.map +1 -0
  851. package/dist/status-LIZWJYS4.js +62 -0
  852. package/dist/status-LIZWJYS4.js.map +1 -0
  853. package/dist/sticker-KCV3VZHY.js +94 -0
  854. package/dist/sticker-KCV3VZHY.js.map +1 -0
  855. package/dist/stock-VTORKR4C.js +179 -0
  856. package/dist/stock-VTORKR4C.js.map +1 -0
  857. package/dist/studio-QCRA6BY5.js +49 -0
  858. package/dist/studio-QCRA6BY5.js.map +1 -0
  859. package/dist/sync-455DB46Y.js +54 -0
  860. package/dist/sync-455DB46Y.js.map +1 -0
  861. package/dist/sync-A4KKQ3B6.js +265 -0
  862. package/dist/sync-A4KKQ3B6.js.map +1 -0
  863. package/dist/sync-ULKWDFXM.js +54 -0
  864. package/dist/sync-ULKWDFXM.js.map +1 -0
  865. package/dist/sync-definition-YTBLMLX2.js +55 -0
  866. package/dist/sync-definition-YTBLMLX2.js.map +1 -0
  867. package/dist/tag-manager-E7QTXBWQ.js +43 -0
  868. package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
  869. package/dist/tags-4Q4I5GQJ.js +20 -0
  870. package/dist/tags-4Q4I5GQJ.js.map +1 -0
  871. package/dist/tags-AMEVAQZ4.js +26 -0
  872. package/dist/tags-AMEVAQZ4.js.map +1 -0
  873. package/dist/tags-DPLOLH3E.js +20 -0
  874. package/dist/tags-DPLOLH3E.js.map +1 -0
  875. package/dist/tags-LDHXONR3.js +224 -0
  876. package/dist/tags-LDHXONR3.js.map +1 -0
  877. package/dist/tags-UW3WJTAQ.js +20 -0
  878. package/dist/tags-UW3WJTAQ.js.map +1 -0
  879. package/dist/targeting-constants-D64YO3E7.js +118 -0
  880. package/dist/targeting-constants-D64YO3E7.js.map +1 -0
  881. package/dist/targeting-criteria-BP6VJA7X.js +113 -0
  882. package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
  883. package/dist/targets-CQWO2UXD.js +102 -0
  884. package/dist/targets-CQWO2UXD.js.map +1 -0
  885. package/dist/templates-WZSTNRNZ.js +178 -0
  886. package/dist/templates-WZSTNRNZ.js.map +1 -0
  887. package/dist/testimonials-ETHSNWUH.js +32 -0
  888. package/dist/testimonials-ETHSNWUH.js.map +1 -0
  889. package/dist/themes-YU663LQH.js +94 -0
  890. package/dist/themes-YU663LQH.js.map +1 -0
  891. package/dist/top-companies-KTXHS472.js +108 -0
  892. package/dist/top-companies-KTXHS472.js.map +1 -0
  893. package/dist/translate-6QAJ5ZUU.js +600 -0
  894. package/dist/translate-6QAJ5ZUU.js.map +1 -0
  895. package/dist/triggers-4EDFLNGH.js +141 -0
  896. package/dist/triggers-4EDFLNGH.js.map +1 -0
  897. package/dist/tweets-ZUKQAAUQ.js +123 -0
  898. package/dist/tweets-ZUKQAAUQ.js.map +1 -0
  899. package/dist/unfollow-A4JVCJBF.js +46 -0
  900. package/dist/unfollow-A4JVCJBF.js.map +1 -0
  901. package/dist/unlink-KY2OEKMD.js +67 -0
  902. package/dist/unlink-KY2OEKMD.js.map +1 -0
  903. package/dist/unstage-FHUG67RI.js +84 -0
  904. package/dist/unstage-FHUG67RI.js.map +1 -0
  905. package/dist/unstage-ZRLLCSQF.js +95 -0
  906. package/dist/unstage-ZRLLCSQF.js.map +1 -0
  907. package/dist/update-27LGM65V.js +63 -0
  908. package/dist/update-27LGM65V.js.map +1 -0
  909. package/dist/update-AIY46I2Q.js +155 -0
  910. package/dist/update-AIY46I2Q.js.map +1 -0
  911. package/dist/update-QYD2XZFM.js +142 -0
  912. package/dist/update-QYD2XZFM.js.map +1 -0
  913. package/dist/update-W2OSRNFO.js +98 -0
  914. package/dist/update-W2OSRNFO.js.map +1 -0
  915. package/dist/upload-JGBTSKGH.js +126 -0
  916. package/dist/upload-JGBTSKGH.js.map +1 -0
  917. package/dist/upload-XEHWYMJG.js +150 -0
  918. package/dist/upload-XEHWYMJG.js.map +1 -0
  919. package/dist/upscale-I5P2OHTN.js +109 -0
  920. package/dist/upscale-I5P2OHTN.js.map +1 -0
  921. package/dist/url-options-QHGA42RP.js +130 -0
  922. package/dist/url-options-QHGA42RP.js.map +1 -0
  923. package/dist/url-params-NWSUHWRE.js +98 -0
  924. package/dist/url-params-NWSUHWRE.js.map +1 -0
  925. package/dist/use-U4HG2NF3.js +95 -0
  926. package/dist/use-U4HG2NF3.js.map +1 -0
  927. package/dist/validate-DOQ6AI62.js +91 -0
  928. package/dist/validate-DOQ6AI62.js.map +1 -0
  929. package/dist/variant-FOVE6URJ.js +338 -0
  930. package/dist/variant-FOVE6URJ.js.map +1 -0
  931. package/dist/videos-DP3VCSYG.js +39 -0
  932. package/dist/videos-DP3VCSYG.js.map +1 -0
  933. package/dist/view-HRI3FHCH.js +121 -0
  934. package/dist/view-HRI3FHCH.js.map +1 -0
  935. package/dist/viewer-check-JYUE24M6.js +68 -0
  936. package/dist/viewer-check-JYUE24M6.js.map +1 -0
  937. package/dist/web-AFUIWPFU.js +140 -0
  938. package/dist/web-AFUIWPFU.js.map +1 -0
  939. package/dist/winners-SMMDN6LW.js +113 -0
  940. package/dist/winners-SMMDN6LW.js.map +1 -0
  941. package/dist/winning-ads-PCIJUYVA.js +84 -0
  942. package/dist/winning-ads-PCIJUYVA.js.map +1 -0
  943. package/dist/write-commands-7Z34WG2J.js +206 -0
  944. package/dist/write-commands-7Z34WG2J.js.map +1 -0
  945. package/dist/write-commands-BLT2SEC4.js +713 -0
  946. package/dist/write-commands-BLT2SEC4.js.map +1 -0
  947. package/dist/write-commands-N4FSGRVQ.js +743 -0
  948. package/dist/write-commands-N4FSGRVQ.js.map +1 -0
  949. package/dist/write-commands-Q4MQ3BGM.js +1015 -0
  950. package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
  951. package/dist/x-AUOZJNWE.js +47 -0
  952. package/dist/x-AUOZJNWE.js.map +1 -0
  953. package/package.json +9 -2
  954. package/dist/chunk-FGHMWBUD.js +0 -9989
  955. package/dist/chunk-FGHMWBUD.js.map +0 -1
  956. package/dist/chunk-HJEMOSPH.js +0 -1292
  957. package/dist/chunk-HJEMOSPH.js.map +0 -1
  958. package/dist/chunk-MF7YA62W.js.map +0 -1
  959. package/dist/chunk-VZEDAFAR.js.map +0 -1
  960. package/dist/chunk-XHC4LMK4.js.map +0 -1
  961. package/dist/client-GR6YL3YX.js +0 -17
  962. package/dist/output-NMQXZF3Z.js +0 -18
  963. /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
  964. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  965. /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
  966. /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
  967. /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
@@ -0,0 +1,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,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":";;;;;AASO,SAAS,aAAa,YAA8B,MAAwC;AACjG,QAAM,UAAmC;AAAA,IACvC,cAAc,WAAW;AAAA,IACzB,MAAM,WAAW;AAAA,IACjB,QAAQ,WAAW;AAAA,IACnB,QAAQ,WAAW;AAAA,IACnB,OAAO,WAAW;AAAA,IAClB,aAAa,WAAW;AAAA,IACxB,UAAU,WAAW,SAAS,IAAI,CAAC,aAAa;AAAA,MAC9C,MAAM,QAAQ;AAAA,MACd,QAAQ,QAAQ;AAAA,MAChB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACtD,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACtD,GAAI,QAAQ,MAAM,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;AAAA,MAC1C,WAAW,QAAQ;AAAA,MACnB,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,IAClD,EAAE;AAAA,EACJ;AACA,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,WAAW,UAAU,EAAE,SAAS,WAAW,QAAQ,IAAI,CAAC;AAAA,IAC5D,GAAI,WAAW,gBAAgB,EAAE,eAAe,WAAW,cAAc,IAAI,CAAC;AAAA,IAC9E,GAAI,WAAW,eAAe,EAAE,cAAc,WAAW,aAAa,IAAI,CAAC;AAAA,IAC3E,GAAI,WAAW,oBAAoB,EAAE,mBAAmB,WAAW,kBAAkB,IAAI,CAAC;AAAA,IAC1F,GAAI,WAAW,SAAS,EAAE,QAAQ,WAAW,OAAO,IAAI,CAAC;AAAA,IACzD,WAAW,WAAW;AAAA,EACxB;AACF;AAWA,SAAS,QAAQ,YAAwC;AACvD,SAAO,WAAW,WAAW,IAAI,UAAU,WAAW,CAAC,GAAG,IAAI,KAAK;AACrE;AAGA,SAAS,YAAY,YAA+B;AAClD,SAAO,WAAW,WAAW,IAAI,KAAK;AACxC;AAUO,SAAS,WAAW,YAAwC;AACjE,QAAM,KAAK,WAAW;AACtB,MAAI,WAAW,WAAW,WAAW;AACnC,WAAO;AAAA,MACL,2CAA2C,EAAE;AAAA,IAC/C;AAAA,EACF;AAEA,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAQ,WAAW,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,OAAO;AAChF,QAAM,SAAS,WAAW,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,QAAQ;AAElF,MAAI,WAAW,SAAS,WAAW,MAAM,SAAS,GAAG;AACnD,UAAM;AAAA,MACJ;AAAA,IACF;AACA,UAAM;AAAA,MACJ,oDAAoD,EAAE,IAAI,QAAQ,KAAK,CAAC,mDAAmD,YAAY,KAAK,CAAC;AAAA,IAC/I;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,SAAS;AAChE,MAAI,WAAW,SAAS,WAAW,YAAY,SAAS,GAAG;AACzD,UAAM;AAAA,MACJ,0GAAgG,EAAE,IAAI,QAAQ,WAAW,CAAC,0EAA0E,YAAY,WAAW,CAAC;AAAA,IAC9N;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,aAAa,OAAO,SAAS,GAAG;AACxD,UAAM;AAAA,MACJ,GAAG,OAAO,WAAW,IAAI,cAAc,aAAa,0BAAqB,OACtE,IAAI,CAAC,YAAY,QAAQ,QAAQ,IAAI,KAAK,QAAQ,SAAS,iBAAiB,EAAE,EAC9E,KAAK,IAAI,CAAC;AAAA,IACf;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,UAAU;AAClC,UAAM;AAAA,MACJ,2BAAsB,OAAO,CAAC,GAAG,SAAS,iBAAiB;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO;AACT;AAQO,SAAS,YAAY,SAAuB,cAAsB,WAA2B;AAClG,QAAM,UAAU,0BAA0B,YAAY;AACtD,MAAI,QAAQ,SAAS,eAAe;AAClC,WAAO,mEAAmE,QAAQ,MAAM,MAAM,OAAO;AAAA,EACvG;AACA,SAAO,yBAAyB,KAAK,MAAM,YAAY,GAAI,CAAC,MAAM,OAAO;AAC3E;AAEA,IAAM,qBAAqB,oBAAI,IAAI,CAAC,SAAS,KAAK,MAAM,KAAK,CAAC;AAQvD,SAAS,iBAAiB,MAAe,SAAkB,WAA2B;AAC3F,MAAI,OAAO,SAAS,YAAY,mBAAmB,IAAI,KAAK,KAAK,EAAE,YAAY,CAAC,EAAG,QAAO;AAC1F,MAAI,SAAS,MAAO,QAAO;AAC3B,MAAI,YAAY,UAAa,YAAY,GAAI,QAAO;AACpD,QAAM,SAAS,OAAO,OAAO;AAC7B,SAAO,OAAO,SAAS,MAAM,KAAK,UAAU,IAAI,SAAS;AAC3D;AAEA,IAAM,mBAAmB;AAOlB,IAAM,kBAA4B;AAAA,EACvC,KAAK,OAAO,iBAAiB;AAC3B,UAAM,WAAW,MAAM,OAA0B,2BAA2B,YAAY,EAAE;AAC1F,WAAO,SAAS;AAAA,EAClB;AAAA,EACA,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACjE;AAWA,eAAsB,UACpB,cACA,WACA,OAAiB,iBACiB;AAClC,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,SAAO,KAAK,IAAI,IAAI,UAAU;AAC5B,UAAM,aAAa,MAAM,KAAK,IAAI,YAAY;AAC9C,QAAI,WAAW,WAAW,UAAW,QAAO;AAC5C,UAAM,KAAK,MAAM,gBAAgB;AAAA,EACnC;AACA,SAAO;AACT;AAiBA,eAAsB,WACpB,cACA,WACA,OAAiB,iBACM;AACvB,MAAI;AACF,UAAM,aAAa,MAAM,UAAU,cAAc,WAAW,IAAI;AAChE,WAAO,aAAa,EAAE,MAAM,WAAW,WAAW,IAAI,EAAE,MAAM,gBAAgB;AAAA,EAChF,SAAS,OAAO;AACd,WAAO,EAAE,MAAM,eAAe,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,kBAAkB;AAAA,EACnG;AACF;","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":[]}
@@ -0,0 +1,96 @@
1
+ import {
2
+ ApiError,
3
+ apiGet,
4
+ apiPost
5
+ } from "./chunk-HREWXNTO.js";
6
+
7
+ // src/commands/images/api.ts
8
+ import { readFile } from "fs/promises";
9
+ import { basename, extname } from "path";
10
+ var imageProcessingTimeoutMs = 18e4;
11
+ var imageReadyPollIntervalMs = 2e3;
12
+ var mimeMap = {
13
+ ".png": "image/png",
14
+ ".jpg": "image/jpeg",
15
+ ".jpeg": "image/jpeg",
16
+ ".gif": "image/gif",
17
+ ".webp": "image/webp",
18
+ ".svg": "image/svg+xml",
19
+ ".avif": "image/avif"
20
+ };
21
+ var defaultImageApiDeps = {
22
+ readFile,
23
+ post: apiPost,
24
+ get: apiGet,
25
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms))
26
+ };
27
+ function detectImageContentType(filePath, opts = {}) {
28
+ const ext = extname(filePath).toLowerCase();
29
+ const contentType = mimeMap[ext];
30
+ if (!contentType || opts.allowedContentTypes && !opts.allowedContentTypes.includes(contentType)) {
31
+ throw new ApiError(
32
+ "VALIDATION_ERROR",
33
+ opts.unsupportedMessage ?? `Cannot detect content type for extension "${ext}". Use --content-type.`
34
+ );
35
+ }
36
+ return contentType;
37
+ }
38
+ async function uploadLocalImage(args, deps = defaultImageApiDeps) {
39
+ return uploadImageBytes(
40
+ {
41
+ bytes: await deps.readFile(args.file),
42
+ contentType: args.contentType,
43
+ // Only the bytes used to be sent, so "iso27001-badge.png" arrived as an
44
+ // anonymous blob. The describe pass treats this as a hint, not gospel.
45
+ originalFilename: basename(args.file),
46
+ source: args.source,
47
+ descriptionContext: args.descriptionContext
48
+ },
49
+ deps
50
+ );
51
+ }
52
+ function uploadImageBytes(args, deps = defaultImageApiDeps) {
53
+ const body = {
54
+ base64: args.bytes.toString("base64"),
55
+ contentType: args.contentType,
56
+ originalFilename: args.originalFilename
57
+ };
58
+ if (args.source) body.source = args.source;
59
+ if (args.descriptionContext) body.descriptionContext = args.descriptionContext;
60
+ return deps.post("/api/images/upload", body, { timeoutMs: imageProcessingTimeoutMs });
61
+ }
62
+ function getImage(deps, imageId) {
63
+ return deps.get("/api/images/get", { id: imageId });
64
+ }
65
+ function publishImageAsCreative(deps, args) {
66
+ return deps.post("/api/creatives/publish", args);
67
+ }
68
+ async function waitForReadyImage(deps, imageId, opts = {}) {
69
+ const timeoutMs = opts.timeoutMs ?? imageProcessingTimeoutMs;
70
+ const pollIntervalMs = opts.pollIntervalMs ?? imageReadyPollIntervalMs;
71
+ const deadline = Date.now() + timeoutMs;
72
+ let lastStatus = "unknown";
73
+ while (Date.now() <= deadline) {
74
+ const image = await getImage(deps, imageId);
75
+ lastStatus = image.status;
76
+ if (image.status === "ready") {
77
+ return image;
78
+ }
79
+ if (image.status === "error") {
80
+ throw new ApiError("IMAGE_PROCESSING_ERROR", "Image processing failed");
81
+ }
82
+ await deps.sleep(pollIntervalMs);
83
+ }
84
+ throw new ApiError("TIMEOUT", `Image was not ready before timeout; last status: ${lastStatus}`);
85
+ }
86
+
87
+ export {
88
+ imageProcessingTimeoutMs,
89
+ defaultImageApiDeps,
90
+ detectImageContentType,
91
+ uploadLocalImage,
92
+ uploadImageBytes,
93
+ publishImageAsCreative,
94
+ waitForReadyImage
95
+ };
96
+ //# sourceMappingURL=chunk-ZLLJKSNS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/images/api.ts"],"sourcesContent":["import type { Buffer } from \"node:buffer\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport type { ImageDoc, ImagesUploadResponse } from \"@baker/api\";\nimport { ApiError, apiGet, apiPost } from \"../../client.ts\";\n\nexport const imageProcessingTimeoutMs = 180_000;\nconst imageReadyPollIntervalMs = 2_000;\n\nconst mimeMap: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".svg\": \"image/svg+xml\",\n \".avif\": \"image/avif\",\n};\n\nexport type ImageApiDeps = {\n readFile: (path: string) => Promise<Buffer>;\n post: typeof apiPost;\n get: typeof apiGet;\n sleep: (ms: number) => Promise<void>;\n};\n\nexport const defaultImageApiDeps: ImageApiDeps = {\n readFile,\n post: apiPost,\n get: apiGet,\n sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n};\n\nexport function detectImageContentType(\n filePath: string,\n opts: { allowedContentTypes?: readonly string[]; unsupportedMessage?: string } = {},\n): string {\n const ext = extname(filePath).toLowerCase();\n const contentType = mimeMap[ext];\n if (!contentType || (opts.allowedContentTypes && !opts.allowedContentTypes.includes(contentType))) {\n throw new ApiError(\n \"VALIDATION_ERROR\",\n opts.unsupportedMessage ?? `Cannot detect content type for extension \"${ext}\". Use --content-type.`,\n );\n }\n return contentType;\n}\n\nexport async function uploadLocalImage(\n args: { file: string; contentType: string; source?: string; descriptionContext?: string },\n deps: ImageApiDeps = defaultImageApiDeps,\n): Promise<ImagesUploadResponse> {\n return uploadImageBytes(\n {\n bytes: await deps.readFile(args.file),\n contentType: args.contentType,\n // Only the bytes used to be sent, so \"iso27001-badge.png\" arrived as an\n // anonymous blob. The describe pass treats this as a hint, not gospel.\n originalFilename: basename(args.file),\n source: args.source,\n descriptionContext: args.descriptionContext,\n },\n deps,\n );\n}\n\n/** Upload image bytes that did not come from a local file (a run's persisted output). */\nexport function uploadImageBytes(\n args: { bytes: Buffer; contentType: string; originalFilename: string; source?: string; descriptionContext?: string },\n deps: Pick<ImageApiDeps, \"post\"> = defaultImageApiDeps,\n): Promise<ImagesUploadResponse> {\n const body: Record<string, unknown> = {\n base64: args.bytes.toString(\"base64\"),\n contentType: args.contentType,\n originalFilename: args.originalFilename,\n };\n if (args.source) body.source = args.source;\n if (args.descriptionContext) body.descriptionContext = args.descriptionContext;\n return deps.post<ImagesUploadResponse>(\"/api/images/upload\", body, { timeoutMs: imageProcessingTimeoutMs });\n}\n\nfunction getImage(deps: ImageApiDeps, imageId: string): Promise<ImageDoc> {\n return deps.get<ImageDoc>(\"/api/images/get\", { id: imageId });\n}\n\ntype CreativeReference = {\n type: \"creative\";\n slug: string;\n creativeId: string;\n title: string;\n asset: {\n kind: \"static_image\";\n imageId: string;\n imageUrl: string;\n storageKey?: string;\n width?: number;\n height?: number;\n aspectRatio?: number;\n };\n imageUrl: string;\n thumbnailUrl: string;\n storageKey?: string;\n sourceReferenceUrl?: string;\n width?: number;\n height?: number;\n aspectRatio?: number;\n};\n\ntype PublishCreativeResponse = {\n creativeId: string;\n imageId: string;\n reference: CreativeReference;\n};\n\nexport function publishImageAsCreative(\n deps: ImageApiDeps,\n args: {\n imageId: string;\n title: string;\n sourceReferenceUrl?: string;\n slug?: string;\n runId?: string;\n chatId?: string;\n },\n): Promise<PublishCreativeResponse> {\n return deps.post(\"/api/creatives/publish\", args);\n}\n\nexport async function waitForReadyImage(\n deps: ImageApiDeps,\n imageId: string,\n opts: { timeoutMs?: number; pollIntervalMs?: number } = {},\n): Promise<ImageDoc> {\n const timeoutMs = opts.timeoutMs ?? imageProcessingTimeoutMs;\n const pollIntervalMs = opts.pollIntervalMs ?? imageReadyPollIntervalMs;\n const deadline = Date.now() + timeoutMs;\n let lastStatus = \"unknown\";\n while (Date.now() <= deadline) {\n const image = await getImage(deps, imageId);\n lastStatus = image.status;\n if (image.status === \"ready\") {\n return image;\n }\n if (image.status === \"error\") {\n throw new ApiError(\"IMAGE_PROCESSING_ERROR\", \"Image processing failed\");\n }\n await deps.sleep(pollIntervalMs);\n }\n throw new ApiError(\"TIMEOUT\", `Image was not ready before timeout; last status: ${lastStatus}`);\n}\n"],"mappings":";;;;;;;AACA,SAAS,gBAAgB;AACzB,SAAS,UAAU,eAAe;AAI3B,IAAM,2BAA2B;AACxC,IAAM,2BAA2B;AAEjC,IAAM,UAAkC;AAAA,EACtC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AASO,IAAM,sBAAoC;AAAA,EAC/C;AAAA,EACA,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACjE;AAEO,SAAS,uBACd,UACA,OAAiF,CAAC,GAC1E;AACR,QAAM,MAAM,QAAQ,QAAQ,EAAE,YAAY;AAC1C,QAAM,cAAc,QAAQ,GAAG;AAC/B,MAAI,CAAC,eAAgB,KAAK,uBAAuB,CAAC,KAAK,oBAAoB,SAAS,WAAW,GAAI;AACjG,UAAM,IAAI;AAAA,MACR;AAAA,MACA,KAAK,sBAAsB,6CAA6C,GAAG;AAAA,IAC7E;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,iBACpB,MACA,OAAqB,qBACU;AAC/B,SAAO;AAAA,IACL;AAAA,MACE,OAAO,MAAM,KAAK,SAAS,KAAK,IAAI;AAAA,MACpC,aAAa,KAAK;AAAA;AAAA;AAAA,MAGlB,kBAAkB,SAAS,KAAK,IAAI;AAAA,MACpC,QAAQ,KAAK;AAAA,MACb,oBAAoB,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,iBACd,MACA,OAAmC,qBACJ;AAC/B,QAAM,OAAgC;AAAA,IACpC,QAAQ,KAAK,MAAM,SAAS,QAAQ;AAAA,IACpC,aAAa,KAAK;AAAA,IAClB,kBAAkB,KAAK;AAAA,EACzB;AACA,MAAI,KAAK,OAAQ,MAAK,SAAS,KAAK;AACpC,MAAI,KAAK,mBAAoB,MAAK,qBAAqB,KAAK;AAC5D,SAAO,KAAK,KAA2B,sBAAsB,MAAM,EAAE,WAAW,yBAAyB,CAAC;AAC5G;AAEA,SAAS,SAAS,MAAoB,SAAoC;AACxE,SAAO,KAAK,IAAc,mBAAmB,EAAE,IAAI,QAAQ,CAAC;AAC9D;AA+BO,SAAS,uBACd,MACA,MAQkC;AAClC,SAAO,KAAK,KAAK,0BAA0B,IAAI;AACjD;AAEA,eAAsB,kBACpB,MACA,SACA,OAAwD,CAAC,GACtC;AACnB,QAAM,YAAY,KAAK,aAAa;AACpC,QAAM,iBAAiB,KAAK,kBAAkB;AAC9C,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,MAAI,aAAa;AACjB,SAAO,KAAK,IAAI,KAAK,UAAU;AAC7B,UAAM,QAAQ,MAAM,SAAS,MAAM,OAAO;AAC1C,iBAAa,MAAM;AACnB,QAAI,MAAM,WAAW,SAAS;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,SAAS;AAC5B,YAAM,IAAI,SAAS,0BAA0B,yBAAyB;AAAA,IACxE;AACA,UAAM,KAAK,MAAM,cAAc;AAAA,EACjC;AACA,QAAM,IAAI,SAAS,WAAW,oDAAoD,UAAU,EAAE;AAChG;","names":[]}
@@ -0,0 +1,197 @@
1
+ import {
2
+ failApi,
3
+ failValidation
4
+ } from "./chunk-7THBBTJJ.js";
5
+ import "./chunk-SMIENBNX.js";
6
+ import "./chunk-GXDLWBOY.js";
7
+ import "./chunk-GIWHHCD6.js";
8
+ import "./chunk-UI6BKYQD.js";
9
+ import "./chunk-XX6ZMCY5.js";
10
+ import {
11
+ apiPost,
12
+ validateConvexId
13
+ } from "./chunk-HREWXNTO.js";
14
+ import "./chunk-HLXWKMTK.js";
15
+ import {
16
+ requireChatId
17
+ } from "./chunk-O6QKCJE4.js";
18
+ import {
19
+ registerSchema,
20
+ writeJson
21
+ } from "./chunk-WOTDHRNF.js";
22
+ import "./chunk-YQSBHWOI.js";
23
+
24
+ // src/commands/actions/claim.ts
25
+ import { defineCommand } from "citty";
26
+
27
+ // src/commands/actions/skillCatalog.ts
28
+ import { existsSync, readdirSync, readFileSync } from "fs";
29
+ import { dirname, join } from "path";
30
+ var DESCRIPTION_MAX = 600;
31
+ var SKILLS_SUBPATH = join(".claude", "skills");
32
+ var EXCLUDED_SKILLS = /* @__PURE__ */ new Set(["actions"]);
33
+ function stripQuotes(value) {
34
+ const trimmed = value.trim();
35
+ if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
36
+ return trimmed.slice(1, -1).replace(/\\"/g, '"').replace(/\\n/g, "\n");
37
+ }
38
+ if (trimmed.startsWith("'") && trimmed.endsWith("'")) {
39
+ return trimmed.slice(1, -1).replace(/''/g, "'");
40
+ }
41
+ return trimmed;
42
+ }
43
+ function extractFrontmatterLines(md) {
44
+ if (!md.startsWith("---")) return null;
45
+ const end = md.indexOf("\n---", 3);
46
+ if (end === -1) return null;
47
+ return md.slice(md.indexOf("\n", 3) + 1, end).split("\n");
48
+ }
49
+ var BLOCK_SCALAR = /^([|>])[+-]?$/;
50
+ function collectBlockLines(lines, start) {
51
+ const collected = [];
52
+ for (let i = start; i < lines.length; i++) {
53
+ const line = lines[i] ?? "";
54
+ if (line.trim() === "") {
55
+ collected.push("");
56
+ } else if (/^\s/.test(line)) {
57
+ collected.push(line.trim());
58
+ } else {
59
+ break;
60
+ }
61
+ }
62
+ while (collected.length > 0 && collected.at(-1) === "") collected.pop();
63
+ return collected;
64
+ }
65
+ function foldLines(collected) {
66
+ const paragraphs = [];
67
+ let buffer = [];
68
+ for (const line of collected) {
69
+ if (line === "") {
70
+ if (buffer.length > 0) paragraphs.push(buffer.join(" "));
71
+ buffer = [];
72
+ } else {
73
+ buffer.push(line);
74
+ }
75
+ }
76
+ if (buffer.length > 0) paragraphs.push(buffer.join(" "));
77
+ return paragraphs.join("\n");
78
+ }
79
+ function readBlockScalar(lines, start, style) {
80
+ const collected = collectBlockLines(lines, start);
81
+ return style === "|" ? collected.join("\n") : foldLines(collected);
82
+ }
83
+ function readField(lines, field) {
84
+ for (let i = 0; i < lines.length; i++) {
85
+ const match = (lines[i] ?? "").match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
86
+ if (!match || match[1] !== field) continue;
87
+ const inline = (match[2] ?? "").trim();
88
+ const scalar = inline.match(BLOCK_SCALAR);
89
+ if (scalar) {
90
+ return readBlockScalar(lines, i + 1, scalar[1]);
91
+ }
92
+ return stripQuotes(inline);
93
+ }
94
+ return null;
95
+ }
96
+ function parseSkillFrontmatter(md) {
97
+ const lines = extractFrontmatterLines(md);
98
+ if (!lines) return null;
99
+ const name = readField(lines, "name");
100
+ const description = readField(lines, "description");
101
+ if (!name || !description) return null;
102
+ const trimmed = description.length > DESCRIPTION_MAX ? `${description.slice(0, DESCRIPTION_MAX)}\u2026` : description;
103
+ return { name, description: trimmed };
104
+ }
105
+ function findSkillsDir(startDir) {
106
+ let dir = startDir;
107
+ for (; ; ) {
108
+ const candidate = join(dir, SKILLS_SUBPATH);
109
+ if (existsSync(candidate)) return candidate;
110
+ const parent = dirname(dir);
111
+ if (parent === dir) return null;
112
+ dir = parent;
113
+ }
114
+ }
115
+ function readSkillCatalog(startDir) {
116
+ const skillsDir = findSkillsDir(startDir);
117
+ if (!skillsDir) return [];
118
+ const entries = [];
119
+ for (const dirent of readdirSync(skillsDir, { withFileTypes: true })) {
120
+ if (!dirent.isDirectory() || EXCLUDED_SKILLS.has(dirent.name)) continue;
121
+ const skillFile = join(skillsDir, dirent.name, "SKILL.md");
122
+ if (!existsSync(skillFile)) continue;
123
+ try {
124
+ const parsed = parseSkillFrontmatter(readFileSync(skillFile, "utf8"));
125
+ if (parsed) entries.push(parsed);
126
+ } catch {
127
+ }
128
+ }
129
+ return entries.sort((a, b) => a.name.localeCompare(b.name));
130
+ }
131
+
132
+ // src/commands/actions/claim.ts
133
+ registerSchema({
134
+ command: "actions.claim",
135
+ description: "Claim an action for the current chat (live \u2014 visible to other chats immediately). Claim only what you're actively working on now: it's required before `complete`, but NOT for `update` or `discard` (those stage without a claim). Returns action details plus a fast-model recommendation of which skills to load for the work (`recommendedSkills`) and a routing hint: load every skill that owns part of the work and the tool doc for each baker CLI family you'll use.",
136
+ args: {
137
+ id: { type: "string", description: "Action ID", required: true }
138
+ }
139
+ });
140
+ async function recommendSkills(actionId) {
141
+ const skills = readSkillCatalog(process.cwd());
142
+ if (skills.length === 0) return [];
143
+ const response = await apiPost("/api/actions/recommend-skills", {
144
+ actionId,
145
+ skills
146
+ });
147
+ return response.data.recommendations;
148
+ }
149
+ var ROUTING_HINT = "Actions often span several surfaces (a landing page plus a Google Ads change, a sheet pull plus an audience upload). Before starting, load EVERY skill that owns part of the work and read the tool doc (__tooling__/docs/tools/baker/<family>.md) for each baker CLI family you'll use. If the action references source material living in a connected tool (an email attachment, a call, a CRM record, a spreadsheet), reach for that tool too. If it describes recurring or future-dated work, it belongs on a schedule \u2014 see __tooling__/docs/tools/baker/scheduled-agents.md.";
150
+ function buildHints(recommendations) {
151
+ if (recommendations.length === 0) {
152
+ return ["Review the action name, description, and tags above.", ROUTING_HINT];
153
+ }
154
+ return [
155
+ "Recommended skills for this action (load the ones you'll use):",
156
+ ...recommendations.map((r) => ` /${r.name} \u2014 ${r.reason}`),
157
+ "Suggestions come from the action's name/description/tags only \u2014 the work may need more.",
158
+ ROUTING_HINT
159
+ ];
160
+ }
161
+ var claimCommand = defineCommand({
162
+ meta: {
163
+ name: "claim",
164
+ description: "Claim an action so other chats see you're working on it. Required before `complete` (update and discard don't need a claim). Example: baker actions claim <action-id>"
165
+ },
166
+ args: {
167
+ id: { type: "positional", description: "Action ID", required: false },
168
+ "action-id": { type: "string", description: "Action ID", required: false }
169
+ },
170
+ run: async ({ args }) => {
171
+ try {
172
+ const id = args.id || args["action-id"];
173
+ if (!id) {
174
+ failValidation("Action ID is required.");
175
+ }
176
+ validateConvexId(id);
177
+ const chatId = requireChatId();
178
+ const response = await apiPost("/api/actions/claim", {
179
+ actionId: id,
180
+ chatId
181
+ });
182
+ let recommendedSkills = [];
183
+ try {
184
+ recommendedSkills = await recommendSkills(id);
185
+ } catch {
186
+ }
187
+ const data = response.data ? { ...response.data, recommendedSkills } : response.data;
188
+ writeJson({ ok: response.ok, data, hints: buildHints(recommendedSkills) });
189
+ } catch (err) {
190
+ failApi(err);
191
+ }
192
+ }
193
+ });
194
+ export {
195
+ claimCommand
196
+ };
197
+ //# sourceMappingURL=claim-LF6VQ7OR.js.map