@koda-sl/baker-cli 0.449.0-dev.bd86e5817 → 0.450.0-dev.b454c3dd2

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 (443) hide show
  1. package/README.md +11 -6
  2. package/dist/{account-AL2ZDSR7.js → account-XQXC7BR6.js} +5 -4
  3. package/dist/{account-AL2ZDSR7.js.map → account-XQXC7BR6.js.map} +1 -1
  4. package/dist/{accounts-HAFCLSR5.js → accounts-722UY53A.js} +4 -3
  5. package/dist/{accounts-HAFCLSR5.js.map → accounts-722UY53A.js.map} +1 -1
  6. package/dist/{accounts-O5MFO3QQ.js → accounts-E67BMK7T.js} +6 -5
  7. package/dist/{accounts-O5MFO3QQ.js.map → accounts-E67BMK7T.js.map} +1 -1
  8. package/dist/{actions-P35MEMGN.js → actions-6TQMSVWD.js} +18 -18
  9. package/dist/{add-5GAN6CVO.js → add-2BEGRHUX.js} +28 -5
  10. package/dist/add-2BEGRHUX.js.map +1 -0
  11. package/dist/{add-6DTC6X5G.js → add-LEMKEOPO.js} +3 -2
  12. package/dist/{add-6DTC6X5G.js.map → add-LEMKEOPO.js.map} +1 -1
  13. package/dist/{ads-73PGA4YC.js → ads-AGYCVD62.js} +4 -4
  14. package/dist/{advertisers-AE75CGVE.js → advertisers-2VQKAYKG.js} +4 -3
  15. package/dist/{advertisers-AE75CGVE.js.map → advertisers-2VQKAYKG.js.map} +1 -1
  16. package/dist/{analytics-FKCXIMPO.js → analytics-IFELDWLL.js} +24 -20
  17. package/dist/analytics-IFELDWLL.js.map +1 -0
  18. package/dist/{analytics-FPWQQGRM.js → analytics-OH5QEH7F.js} +4 -3
  19. package/dist/{analytics-FPWQQGRM.js.map → analytics-OH5QEH7F.js.map} +1 -1
  20. package/dist/{assign-ABN2AQ4J.js → assign-PTUJUCEL.js} +4 -3
  21. package/dist/{assign-ABN2AQ4J.js.map → assign-PTUJUCEL.js.map} +1 -1
  22. package/dist/{audience-size-GNBJY35X.js → audience-size-LRI6GJRT.js} +4 -3
  23. package/dist/{audience-size-GNBJY35X.js.map → audience-size-LRI6GJRT.js.map} +1 -1
  24. package/dist/{audit-3VS63TBW.js → audit-HWP7OPB7.js} +4 -3
  25. package/dist/{audit-3VS63TBW.js.map → audit-HWP7OPB7.js.map} +1 -1
  26. package/dist/{autocomplete-VS3XG3B7.js → autocomplete-J6DHU6MR.js} +4 -3
  27. package/dist/{autocomplete-VS3XG3B7.js.map → autocomplete-J6DHU6MR.js.map} +1 -1
  28. package/dist/{avatars-EKCKHCC3.js → avatars-467OSBD6.js} +4 -4
  29. package/dist/{bid-pricing-Q72B65AY.js → bid-pricing-EO5WLHGV.js} +4 -3
  30. package/dist/{bid-pricing-Q72B65AY.js.map → bid-pricing-EO5WLHGV.js.map} +1 -1
  31. package/dist/{brand-C6PFGGQN.js → brand-YRTEPGBK.js} +2 -2
  32. package/dist/{brief-YFJHQ5VQ.js → brief-OSFJ2V7F.js} +8 -7
  33. package/dist/{brief-YFJHQ5VQ.js.map → brief-OSFJ2V7F.js.map} +1 -1
  34. package/dist/{campaign-groups-KFFYQPU3.js → campaign-groups-PQ6KSQJR.js} +9 -8
  35. package/dist/{campaign-groups-KFFYQPU3.js.map → campaign-groups-PQ6KSQJR.js.map} +1 -1
  36. package/dist/{campaign-writes-FHOS5XZY.js → campaign-writes-5OVLUD5E.js} +4 -3
  37. package/dist/{campaign-writes-FHOS5XZY.js.map → campaign-writes-5OVLUD5E.js.map} +1 -1
  38. package/dist/{campaigns-2NHWBF5C.js → campaigns-6T3NSUT2.js} +12 -11
  39. package/dist/{campaigns-2NHWBF5C.js.map → campaigns-6T3NSUT2.js.map} +1 -1
  40. package/dist/{campaigns-KZYZTXDS.js → campaigns-OYMXDGWX.js} +5 -5
  41. package/dist/{canvas-UJNSHD3B.js → canvas-YQFG52IG.js} +13 -13
  42. package/dist/{capabilities-DJFTRJKS.js → capabilities-PXBKUN2G.js} +4 -3
  43. package/dist/{capabilities-DJFTRJKS.js.map → capabilities-PXBKUN2G.js.map} +1 -1
  44. package/dist/{catalog-ZQX6BGXS.js → catalog-XLXIM7IW.js} +4 -4
  45. package/dist/{chats-D2CSDX5Q.js → chats-UK47UE7C.js} +4 -3
  46. package/dist/{chats-D2CSDX5Q.js.map → chats-UK47UE7C.js.map} +1 -1
  47. package/dist/{chunk-7YCRFMXF.js → chunk-24EB7EDR.js} +3 -3
  48. package/dist/{chunk-5ZDLTE5T.js → chunk-2AOE2MZQ.js} +3 -3
  49. package/dist/{chunk-4SG4RW2P.js → chunk-2VPBIT65.js} +8 -8
  50. package/dist/chunk-4PDHHHUJ.js +537 -0
  51. package/dist/chunk-4PDHHHUJ.js.map +1 -0
  52. package/dist/{chunk-NPY4QUMQ.js → chunk-54C6YDGJ.js} +2 -2
  53. package/dist/{chunk-LZ73CZGP.js → chunk-5WCSKQ7Z.js} +6 -6
  54. package/dist/{chunk-3G3ZDLMI.js → chunk-5ZNTADVR.js} +2 -2
  55. package/dist/{chunk-AEOSAVVL.js → chunk-6F7DVPOS.js} +3 -3
  56. package/dist/{chunk-CJCVIEJ5.js → chunk-6NY2GPR4.js} +3 -3
  57. package/dist/{chunk-CXWFX2AM.js → chunk-6Y7ZBENQ.js} +6 -6
  58. package/dist/{chunk-M242LHLX.js → chunk-7CTMH5AK.js} +3 -3
  59. package/dist/{chunk-XF4JUKVF.js → chunk-7EPXVICM.js} +38 -5
  60. package/dist/chunk-7EPXVICM.js.map +1 -0
  61. package/dist/{chunk-T2PC5AVH.js → chunk-ASI4P6X2.js} +6 -6
  62. package/dist/chunk-ASI4P6X2.js.map +1 -0
  63. package/dist/{chunk-QD7ESRLN.js → chunk-C46GUI2S.js} +2 -2
  64. package/dist/{chunk-6N6WKAJM.js → chunk-CWYAELVG.js} +2 -2
  65. package/dist/{chunk-MXYBTMKB.js → chunk-DCRPXOJJ.js} +2 -2
  66. package/dist/{chunk-GKZ2WU75.js → chunk-FPOGPFAG.js} +3 -14
  67. package/dist/chunk-FPOGPFAG.js.map +1 -0
  68. package/dist/{chunk-JQJDXPCO.js → chunk-FUHN4MFY.js} +2 -2
  69. package/dist/{chunk-S77PZVYM.js → chunk-FYGR3I2A.js} +3 -3
  70. package/dist/{chunk-OZRUJVIQ.js → chunk-H3427GPU.js} +2 -2
  71. package/dist/{chunk-RPUSTYHL.js → chunk-HDLYPC6K.js} +5 -3
  72. package/dist/{chunk-RPUSTYHL.js.map → chunk-HDLYPC6K.js.map} +1 -1
  73. package/dist/{chunk-SSJK7FEV.js → chunk-HR6IWNKE.js} +1196 -1140
  74. package/dist/chunk-HR6IWNKE.js.map +1 -0
  75. package/dist/{chunk-YRQYA2LR.js → chunk-HROZYQ5H.js} +63 -5
  76. package/dist/chunk-HROZYQ5H.js.map +1 -0
  77. package/dist/{chunk-IR6D7K4H.js → chunk-I3ZR655O.js} +2 -2
  78. package/dist/{chunk-YK32GUBN.js → chunk-KMKEYI37.js} +3 -3
  79. package/dist/{chunk-W3ZHJJVT.js → chunk-KS2QY6MK.js} +4 -4
  80. package/dist/{chunk-WNRV4QH7.js → chunk-LYQJ4PZW.js} +5 -5
  81. package/dist/{chunk-B5SCU7MJ.js → chunk-MACCF4JZ.js} +16 -22
  82. package/dist/{chunk-B5SCU7MJ.js.map → chunk-MACCF4JZ.js.map} +1 -1
  83. package/dist/{chunk-CSYSX4D2.js → chunk-N4LAYIIN.js} +2 -2
  84. package/dist/{chunk-4AUMTNVB.js → chunk-NA63BH7V.js} +3 -3
  85. package/dist/{chunk-4BQXAE7Z.js → chunk-NDEE6G2J.js} +2 -2
  86. package/dist/{chunk-EDLZGTGN.js → chunk-NYIGXDUG.js} +1 -39
  87. package/dist/chunk-NYIGXDUG.js.map +1 -0
  88. package/dist/{chunk-DWHIOO7E.js → chunk-QE7W555R.js} +163 -12
  89. package/dist/chunk-QE7W555R.js.map +1 -0
  90. package/dist/{chunk-MELOSESI.js → chunk-R25YLW6H.js} +2 -2
  91. package/dist/{chunk-Y6O7EWYY.js → chunk-RL5CP7N6.js} +5 -5
  92. package/dist/{chunk-DGUNI37S.js → chunk-RX2DKU3W.js} +2 -2
  93. package/dist/{chunk-3HJLHTWP.js → chunk-SJYEY5MV.js} +12 -3
  94. package/dist/{chunk-3HJLHTWP.js.map → chunk-SJYEY5MV.js.map} +1 -1
  95. package/dist/{chunk-VTDMKARH.js → chunk-ULG4QRTV.js} +2 -2
  96. package/dist/{chunk-QRP3PXWN.js → chunk-VL43TNIP.js} +2 -2
  97. package/dist/{chunk-SHL7LOC3.js → chunk-VLMBTPXU.js} +3 -3
  98. package/dist/{chunk-KHRXPQID.js → chunk-VYQ3QJ3C.js} +2 -2
  99. package/dist/{chunk-A4LOJ2VD.js → chunk-WGUQHAJY.js} +2 -2
  100. package/dist/{chunk-ZEYEWPK6.js → chunk-WKQG6TER.js} +2 -2
  101. package/dist/{chunk-3IBYKLXR.js → chunk-ZDMTXQ2Q.js} +2 -2
  102. package/dist/{claim-FZ5OQLMU.js → claim-W6G6VEG5.js} +4 -3
  103. package/dist/{claim-FZ5OQLMU.js.map → claim-W6G6VEG5.js.map} +1 -1
  104. package/dist/cli.js +30 -30
  105. package/dist/{companies-DNI634RC.js → companies-TS6KBATJ.js} +4 -3
  106. package/dist/{companies-DNI634RC.js.map → companies-TS6KBATJ.js.map} +1 -1
  107. package/dist/{complete-2FZMGJV5.js → complete-LYR2HMQU.js} +4 -3
  108. package/dist/{complete-2FZMGJV5.js.map → complete-LYR2HMQU.js.map} +1 -1
  109. package/dist/{connect-QCOGEPP4.js → connect-FCXNVTXG.js} +13 -6
  110. package/dist/{conversation-6IOGV7B7.js → conversation-6ZJGPCXM.js} +4 -3
  111. package/dist/{conversation-6IOGV7B7.js.map → conversation-6ZJGPCXM.js.map} +1 -1
  112. package/dist/{conversions-4SRZPBBX.js → conversions-UHB55MMQ.js} +8 -7
  113. package/dist/{conversions-4SRZPBBX.js.map → conversions-UHB55MMQ.js.map} +1 -1
  114. package/dist/{create-BJNMO6HT.js → create-EX6OWLNM.js} +3 -2
  115. package/dist/{create-BJNMO6HT.js.map → create-EX6OWLNM.js.map} +1 -1
  116. package/dist/{create-RM7HV77Y.js → create-JCA7JPLP.js} +4 -3
  117. package/dist/{create-RM7HV77Y.js.map → create-JCA7JPLP.js.map} +1 -1
  118. package/dist/{create-FX4OJ2XF.js → create-JFSK4BOP.js} +4 -3
  119. package/dist/{create-FX4OJ2XF.js.map → create-JFSK4BOP.js.map} +1 -1
  120. package/dist/{create-VXM34ZWH.js → create-WU22YYU2.js} +4 -3
  121. package/dist/{create-VXM34ZWH.js.map → create-WU22YYU2.js.map} +1 -1
  122. package/dist/{creatives-NJF2U763.js → creatives-FXUQ5WSD.js} +10 -10
  123. package/dist/{creatives-JSWBFQ5R.js → creatives-KGXUOYPE.js} +9 -8
  124. package/dist/{creatives-JSWBFQ5R.js.map → creatives-KGXUOYPE.js.map} +1 -1
  125. package/dist/{credentials-C33K6XCJ.js → credentials-MJC7PGKR.js} +4 -3
  126. package/dist/{credentials-C33K6XCJ.js.map → credentials-MJC7PGKR.js.map} +1 -1
  127. package/dist/{critique-YDKPYZLD.js → critique-GS5VV5ZC.js} +7 -6
  128. package/dist/{critique-YDKPYZLD.js.map → critique-GS5VV5ZC.js.map} +1 -1
  129. package/dist/{critique-ZS4ON3SU.js → critique-TPHR27KH.js} +4 -3
  130. package/dist/{critique-ZS4ON3SU.js.map → critique-TPHR27KH.js.map} +1 -1
  131. package/dist/{crm-R5IXIFIV.js → crm-AVCM5D4G.js} +5 -4
  132. package/dist/{crm-R5IXIFIV.js.map → crm-AVCM5D4G.js.map} +1 -1
  133. package/dist/{crm-52ROSWH5.js → crm-VK44O3ED.js} +5 -4
  134. package/dist/{crm-52ROSWH5.js.map → crm-VK44O3ED.js.map} +1 -1
  135. package/dist/{customers-A36LOZOB.js → customers-XH2DMTFH.js} +6 -5
  136. package/dist/{delete-M2GDLPYN.js → delete-E3R3TKIL.js} +3 -2
  137. package/dist/{delete-M2GDLPYN.js.map → delete-E3R3TKIL.js.map} +1 -1
  138. package/dist/{delete-HGHXY24R.js → delete-KRH2YMSZ.js} +4 -3
  139. package/dist/{delete-HGHXY24R.js.map → delete-KRH2YMSZ.js.map} +1 -1
  140. package/dist/{delete-AIGE4Y4H.js → delete-WI5E3DR3.js} +4 -3
  141. package/dist/{delete-AIGE4Y4H.js.map → delete-WI5E3DR3.js.map} +1 -1
  142. package/dist/{demographics-NTWB2IMG.js → demographics-XV5PBA77.js} +4 -3
  143. package/dist/{demographics-NTWB2IMG.js.map → demographics-XV5PBA77.js.map} +1 -1
  144. package/dist/{discard-2WWQG6OU.js → discard-HTQUUHJR.js} +4 -3
  145. package/dist/{discard-2WWQG6OU.js.map → discard-HTQUUHJR.js.map} +1 -1
  146. package/dist/{domain-Y2LT6JLT.js → domain-RECGZXJB.js} +4 -3
  147. package/dist/{domain-Y2LT6JLT.js.map → domain-RECGZXJB.js.map} +1 -1
  148. package/dist/{draft-SLHAKJ2A.js → draft-2IBSJEKC.js} +4 -3
  149. package/dist/{draft-SLHAKJ2A.js.map → draft-2IBSJEKC.js.map} +1 -1
  150. package/dist/{draft-FJ7WHIXW.js → draft-PVTX6QT6.js} +4 -3
  151. package/dist/{draft-FJ7WHIXW.js.map → draft-PVTX6QT6.js.map} +1 -1
  152. package/dist/{draft-EJXNNJ3Y.js → draft-Q546QPPU.js} +5 -4
  153. package/dist/{draft-EJXNNJ3Y.js.map → draft-Q546QPPU.js.map} +1 -1
  154. package/dist/engine/index.js +3 -3
  155. package/dist/{facets-U7AQC4H6.js → facets-7EVPJMKS.js} +4 -3
  156. package/dist/{facets-U7AQC4H6.js.map → facets-7EVPJMKS.js.map} +1 -1
  157. package/dist/{feedback-PPQMOQ46.js → feedback-EIZKS4JU.js} +2 -2
  158. package/dist/{feedback-record-V66HWVRR.js → feedback-record-TKO54BOE.js} +9 -8
  159. package/dist/{feedback-record-V66HWVRR.js.map → feedback-record-TKO54BOE.js.map} +1 -1
  160. package/dist/{fetch-W7NULDEO.js → fetch-4BY6HYUM.js} +4 -3
  161. package/dist/{fetch-W7NULDEO.js.map → fetch-4BY6HYUM.js.map} +1 -1
  162. package/dist/{find-OTDIX6V4.js → find-FRRHAPWX.js} +4 -4
  163. package/dist/{flows-KABCBS3S.js → flows-KTFAML22.js} +21 -17
  164. package/dist/flows-KTFAML22.js.map +1 -0
  165. package/dist/{fonts-EMMX3KII.js → fonts-MXR3ZKDX.js} +6 -5
  166. package/dist/{forecast-GNODEIIC.js → forecast-3QTJYVND.js} +4 -3
  167. package/dist/{forecast-GNODEIIC.js.map → forecast-3QTJYVND.js.map} +1 -1
  168. package/dist/{funnel-AAX27NH4.js → funnel-I6XIAEHG.js} +11 -455
  169. package/dist/funnel-I6XIAEHG.js.map +1 -0
  170. package/dist/{ga4-UDQ2HA2J.js → ga4-DV2AXCSL.js} +1 -1
  171. package/dist/{get-QEYJRLV3.js → get-5PKNKJ5S.js} +7 -4
  172. package/dist/get-5PKNKJ5S.js.map +1 -0
  173. package/dist/{get-RTVUZM6E.js → get-72YPHJGV.js} +4 -3
  174. package/dist/{get-RTVUZM6E.js.map → get-72YPHJGV.js.map} +1 -1
  175. package/dist/{google-M7KEXVK5.js → google-6OGZX47I.js} +2 -2
  176. package/dist/{google-KTO3PLEU.js → google-QYYYSSXI.js} +5 -5
  177. package/dist/{google-ads-OK6IG3UV.js → google-ads-QGMQKZQD.js} +4 -3
  178. package/dist/{google-ads-OK6IG3UV.js.map → google-ads-QGMQKZQD.js.map} +1 -1
  179. package/dist/{gsc-P3QYGDV2.js → gsc-TAKOF7J5.js} +1 -1
  180. package/dist/{history-PQUJKK26.js → history-6AVQX2OQ.js} +4 -3
  181. package/dist/{history-PQUJKK26.js.map → history-6AVQX2OQ.js.map} +1 -1
  182. package/dist/{hubspot-Y77VLY6Y.js → hubspot-SVEMFK5S.js} +9 -8
  183. package/dist/{hubspot-Y77VLY6Y.js.map → hubspot-SVEMFK5S.js.map} +1 -1
  184. package/dist/{icon-I43F77FV.js → icon-L4RSS6PZ.js} +4 -4
  185. package/dist/{ideas-MIDU7YOA.js → ideas-NFOW3HKJ.js} +3 -2
  186. package/dist/{images-S254MS6O.js → images-2EFFUNNV.js} +9 -9
  187. package/dist/{ingest-YV2NLDBE.js → ingest-2EIKN4QC.js} +4 -3
  188. package/dist/{ingest-J4I3HKM3.js → ingest-2SO62RRI.js} +3 -2
  189. package/dist/{ingest-J4I3HKM3.js.map → ingest-2SO62RRI.js.map} +1 -1
  190. package/dist/{inspect-Q5NHBBHX.js → inspect-4OOS4APT.js} +4 -3
  191. package/dist/{inspect-Q5NHBBHX.js.map → inspect-4OOS4APT.js.map} +1 -1
  192. package/dist/{inspiration-P265QJ2H.js → inspiration-S3DU4CMQ.js} +1 -1
  193. package/dist/{keyword-metrics-PDY4ZXSP.js → keyword-metrics-SF4CSNZ2.js} +4 -3
  194. package/dist/{keyword-metrics-PDY4ZXSP.js.map → keyword-metrics-SF4CSNZ2.js.map} +1 -1
  195. package/dist/{keywords-for-site-GALSCV77.js → keywords-for-site-WDAOPNKC.js} +4 -3
  196. package/dist/{keywords-for-site-GALSCV77.js.map → keywords-for-site-WDAOPNKC.js.map} +1 -1
  197. package/dist/{landing-CJYGWCK4.js → landing-2ZB46LXH.js} +3 -3
  198. package/dist/{leads-PHKG6CP3.js → leads-A4W5KTWB.js} +4 -3
  199. package/dist/{leads-PHKG6CP3.js.map → leads-A4W5KTWB.js.map} +1 -1
  200. package/dist/{learn-FUQSY7DN.js → learn-IPULBCOD.js} +5 -4
  201. package/dist/{learn-FUQSY7DN.js.map → learn-IPULBCOD.js.map} +1 -1
  202. package/dist/{line-item-writes-E6MZPIZZ.js → line-item-writes-EMYSOJKM.js} +4 -3
  203. package/dist/{line-item-writes-E6MZPIZZ.js.map → line-item-writes-EMYSOJKM.js.map} +1 -1
  204. package/dist/{line-items-7ZGIKEF2.js → line-items-5NECXUZT.js} +5 -5
  205. package/dist/{link-QYAW6A2W.js → link-CI45HWFN.js} +4 -3
  206. package/dist/{link-QYAW6A2W.js.map → link-CI45HWFN.js.map} +1 -1
  207. package/dist/{linkedin-FFSDSGGS.js → linkedin-B7SYR75X.js} +27 -26
  208. package/dist/{linkedin-FFSDSGGS.js.map → linkedin-B7SYR75X.js.map} +1 -1
  209. package/dist/{list-NVQC5SNY.js → list-2BARXOT5.js} +3 -2
  210. package/dist/{list-NVQC5SNY.js.map → list-2BARXOT5.js.map} +1 -1
  211. package/dist/{list-SAV3LQHY.js → list-BIEVLEHS.js} +4 -3
  212. package/dist/{list-SAV3LQHY.js.map → list-BIEVLEHS.js.map} +1 -1
  213. package/dist/{list-5IC6KIKO.js → list-ZBT3EBVZ.js} +4 -3
  214. package/dist/{list-5IC6KIKO.js.map → list-ZBT3EBVZ.js.map} +1 -1
  215. package/dist/{log-XZPVOALD.js → log-C23OOAJZ.js} +4 -3
  216. package/dist/{log-XZPVOALD.js.map → log-C23OOAJZ.js.map} +1 -1
  217. package/dist/{logo-2IP663QO.js → logo-Q5D7PZY6.js} +3 -3
  218. package/dist/{lookup-XK45W2SH.js → lookup-ETWY47F7.js} +6 -5
  219. package/dist/{make-J3WBO62B.js → make-TPKKJXGL.js} +18 -17
  220. package/dist/{make-J3WBO62B.js.map → make-TPKKJXGL.js.map} +1 -1
  221. package/dist/{map-4J5WIWIG.js → map-SYZMPHLL.js} +5 -4
  222. package/dist/{map-4J5WIWIG.js.map → map-SYZMPHLL.js.map} +1 -1
  223. package/dist/{mcp-XXD7ZQCP.js → mcp-6FQBVJ6F.js} +3 -2
  224. package/dist/{mcp-XXD7ZQCP.js.map → mcp-6FQBVJ6F.js.map} +1 -1
  225. package/dist/{media-sources-O6ZRUA3N.js → media-sources-ZXHEEP6T.js} +2 -2
  226. package/dist/{members-D5ZYLS4Y.js → members-UDY4OOJW.js} +4 -3
  227. package/dist/{members-D5ZYLS4Y.js.map → members-UDY4OOJW.js.map} +1 -1
  228. package/dist/{normalize-PCNC6E2N.js → normalize-DAKHYS3V.js} +7 -3
  229. package/dist/{normalize-PCNC6E2N.js.map → normalize-DAKHYS3V.js.map} +1 -1
  230. package/dist/{options-MQ65VEVD.js → options-QL3ULED5.js} +7 -6
  231. package/dist/{options-MQ65VEVD.js.map → options-QL3ULED5.js.map} +1 -1
  232. package/dist/{performance-6QW2KEEQ.js → performance-UF5VTY2U.js} +5 -4
  233. package/dist/plan-FT632COT.js +51 -0
  234. package/dist/plan-FT632COT.js.map +1 -0
  235. package/dist/{promoted-tweet-writes-JPLHY3GM.js → promoted-tweet-writes-7HGESJ46.js} +4 -3
  236. package/dist/{promoted-tweet-writes-JPLHY3GM.js.map → promoted-tweet-writes-7HGESJ46.js.map} +1 -1
  237. package/dist/{promoted-tweets-SURKMHFI.js → promoted-tweets-LZKS5JIF.js} +3 -3
  238. package/dist/{publish-HCQ6MXLB.js → publish-NPD3SMZL.js} +4 -3
  239. package/dist/{publish-HCQ6MXLB.js.map → publish-NPD3SMZL.js.map} +1 -1
  240. package/dist/questionnaire-JNGYJTAY.js +37 -0
  241. package/dist/questionnaire-JNGYJTAY.js.map +1 -0
  242. package/dist/{reddit-GIP3ADMS.js → reddit-NU2N3LZD.js} +5 -4
  243. package/dist/{refresh-UXQSLCR3.js → refresh-EBVJ2C6L.js} +3 -2
  244. package/dist/{refresh-UXQSLCR3.js.map → refresh-EBVJ2C6L.js.map} +1 -1
  245. package/dist/{release-5KVLXNP6.js → release-V43YB2PY.js} +4 -3
  246. package/dist/{release-5KVLXNP6.js.map → release-V43YB2PY.js.map} +1 -1
  247. package/dist/{remove-6FIVKCJI.js → remove-QPSWLFI4.js} +3 -2
  248. package/dist/{remove-6FIVKCJI.js.map → remove-QPSWLFI4.js.map} +1 -1
  249. package/dist/{reopen-YM5LNOLB.js → reopen-GQ66NMWF.js} +4 -3
  250. package/dist/{reopen-YM5LNOLB.js.map → reopen-GQ66NMWF.js.map} +1 -1
  251. package/dist/{rerun-WYDRHIUJ.js → rerun-PZK275DY.js} +18 -17
  252. package/dist/{rerun-WYDRHIUJ.js.map → rerun-PZK275DY.js.map} +1 -1
  253. package/dist/{research-2BLEISBG.js → research-FMM6AWZC.js} +10 -10
  254. package/dist/{research-YOGE7GT2.js → research-GEOCUBXB.js} +3 -2
  255. package/dist/{research-YOGE7GT2.js.map → research-GEOCUBXB.js.map} +1 -1
  256. package/dist/{reset-C4UHQ3EU.js → reset-REXJ6AUK.js} +3 -2
  257. package/dist/{reset-C4UHQ3EU.js.map → reset-REXJ6AUK.js.map} +1 -1
  258. package/dist/{reset-OLVB6AE6.js → reset-Y72IVESB.js} +3 -2
  259. package/dist/{reset-OLVB6AE6.js.map → reset-Y72IVESB.js.map} +1 -1
  260. package/dist/{resolve-XYH2GDAE.js → resolve-OGX7C4TV.js} +4 -3
  261. package/dist/{resolve-XYH2GDAE.js.map → resolve-OGX7C4TV.js.map} +1 -1
  262. package/dist/{retry-7EELDEQP.js → retry-CD6JAQ3F.js} +3 -2
  263. package/dist/{retry-7EELDEQP.js.map → retry-CD6JAQ3F.js.map} +1 -1
  264. package/dist/{retry-726GKI6V.js → retry-TCUBBFR5.js} +3 -2
  265. package/dist/{retry-726GKI6V.js.map → retry-TCUBBFR5.js.map} +1 -1
  266. package/dist/{run-P4KR2MXC.js → run-A5ZDXTOI.js} +4 -3
  267. package/dist/{run-P4KR2MXC.js.map → run-A5ZDXTOI.js.map} +1 -1
  268. package/dist/{run-MODGUNGT.js → run-EUO34T2J.js} +18 -17
  269. package/dist/{scaffold-ad-5ZE7KE62.js → scaffold-ad-SW2HEWM3.js} +13 -12
  270. package/dist/{scaffold-ad-5ZE7KE62.js.map → scaffold-ad-SW2HEWM3.js.map} +1 -1
  271. package/dist/{scaffold-static-ad-HJY5HFDL.js → scaffold-static-ad-ECTJL54Y.js} +37 -36
  272. package/dist/scaffold-static-ad-ECTJL54Y.js.map +1 -0
  273. package/dist/{scaffold-video-P2PYPWG2.js → scaffold-video-EI7U7RBK.js} +12 -11
  274. package/dist/{scaffold-video-P2PYPWG2.js.map → scaffold-video-EI7U7RBK.js.map} +1 -1
  275. package/dist/{schedule-RDK4GEPI.js → schedule-S5YZJZ5U.js} +3 -2
  276. package/dist/{schedule-RDK4GEPI.js.map → schedule-S5YZJZ5U.js.map} +1 -1
  277. package/dist/{scheduled-agents-6U44QE76.js → scheduled-agents-N4LJRM4C.js} +11 -11
  278. package/dist/{schema-CHJDC7GQ.js → schema-R7JWWOF4.js} +8 -4
  279. package/dist/{schema-CHJDC7GQ.js.map → schema-R7JWWOF4.js.map} +1 -1
  280. package/dist/{search-PMJRU3C4.js → search-KHMQH3AT.js} +3 -2
  281. package/dist/{search-PMJRU3C4.js.map → search-KHMQH3AT.js.map} +1 -1
  282. package/dist/{select-AB2L4GAA.js → select-O2FN2JEQ.js} +9 -8
  283. package/dist/{select-AB2L4GAA.js.map → select-O2FN2JEQ.js.map} +1 -1
  284. package/dist/{sends-WGJVQUMF.js → sends-BQZM5PLS.js} +5 -4
  285. package/dist/{sends-WGJVQUMF.js.map → sends-BQZM5PLS.js.map} +1 -1
  286. package/dist/{set-prompt-DU2G2WTB.js → set-prompt-2HASHGWC.js} +9 -8
  287. package/dist/{set-prompt-DU2G2WTB.js.map → set-prompt-2HASHGWC.js.map} +1 -1
  288. package/dist/{setup-links-REPREN3C.js → setup-links-GYSE56GX.js} +4 -3
  289. package/dist/{setup-links-REPREN3C.js.map → setup-links-GYSE56GX.js.map} +1 -1
  290. package/dist/{site-WFSWIA3S.js → site-4SKM7RKG.js} +5 -4
  291. package/dist/{site-WFSWIA3S.js.map → site-4SKM7RKG.js.map} +1 -1
  292. package/dist/{sources-YBQ6KPFM.js → sources-FQ2UZTHL.js} +6 -6
  293. package/dist/{sources-AMI2AWKZ.js → sources-R2NKNC6J.js} +10 -9
  294. package/dist/{sources-AMI2AWKZ.js.map → sources-R2NKNC6J.js.map} +1 -1
  295. package/dist/{stale-6MJHVEG4.js → stale-W756ACKC.js} +8 -7
  296. package/dist/{stale-6MJHVEG4.js.map → stale-W756ACKC.js.map} +1 -1
  297. package/dist/{status-7F2KHFGA.js → status-SE2VZJJB.js} +4 -3
  298. package/dist/{status-7F2KHFGA.js.map → status-SE2VZJJB.js.map} +1 -1
  299. package/dist/{stock-2YCDN3N6.js → stock-KXJ26BY4.js} +5 -5
  300. package/dist/{studio-RA7QQH4O.js → studio-SYKOSNDB.js} +1 -1
  301. package/dist/{sync-GWTLKZTU.js → sync-LJGSODK3.js} +3 -2
  302. package/dist/{sync-GWTLKZTU.js.map → sync-LJGSODK3.js.map} +1 -1
  303. package/dist/{sync-definition-IPUFS5XS.js → sync-definition-QR2N233R.js} +12 -11
  304. package/dist/{tags-KFYLZLB3.js → tags-4BAVFH4S.js} +3 -2
  305. package/dist/{tags-KFYLZLB3.js.map → tags-4BAVFH4S.js.map} +1 -1
  306. package/dist/{tags-ABHSX6M5.js → tags-5SBMRC2A.js} +4 -3
  307. package/dist/{tags-ABHSX6M5.js.map → tags-5SBMRC2A.js.map} +1 -1
  308. package/dist/{tags-3WPW6PTV.js → tags-PYWFSBTR.js} +4 -4
  309. package/dist/{tags-6342FQEB.js → tags-QQU3OKMZ.js} +4 -3
  310. package/dist/{tags-6342FQEB.js.map → tags-QQU3OKMZ.js.map} +1 -1
  311. package/dist/{tags-FJIBBBRG.js → tags-YYLNF3PK.js} +4 -3
  312. package/dist/{tags-FJIBBBRG.js.map → tags-YYLNF3PK.js.map} +1 -1
  313. package/dist/{targeting-criteria-NR47AF5C.js → targeting-criteria-RJFLFICN.js} +3 -3
  314. package/dist/{targets-L56KOVQE.js → targets-S2MT2PNB.js} +4 -3
  315. package/dist/{targets-L56KOVQE.js.map → targets-S2MT2PNB.js.map} +1 -1
  316. package/dist/{templates-B6XGDYUF.js → templates-ZE5TOGRT.js} +4 -3
  317. package/dist/{templates-B6XGDYUF.js.map → templates-ZE5TOGRT.js.map} +1 -1
  318. package/dist/{testimonials-CVC4YIXO.js → testimonials-DII5DYLR.js} +6 -6
  319. package/dist/{top-companies-45X3DT7Z.js → top-companies-PGIAEHDF.js} +4 -3
  320. package/dist/{top-companies-45X3DT7Z.js.map → top-companies-PGIAEHDF.js.map} +1 -1
  321. package/dist/{translate-Z66FDB4K.js → translate-GXTS633J.js} +12 -11
  322. package/dist/{translate-Z66FDB4K.js.map → translate-GXTS633J.js.map} +1 -1
  323. package/dist/{triggers-22EMIVFD.js → triggers-2PTONXRU.js} +4 -3
  324. package/dist/{triggers-22EMIVFD.js.map → triggers-2PTONXRU.js.map} +1 -1
  325. package/dist/{unlink-65KUN6ID.js → unlink-XRMYJ6DB.js} +4 -3
  326. package/dist/{unlink-65KUN6ID.js.map → unlink-XRMYJ6DB.js.map} +1 -1
  327. package/dist/{unstage-2E3I5SWF.js → unstage-FY7A3YFF.js} +4 -3
  328. package/dist/{unstage-2E3I5SWF.js.map → unstage-FY7A3YFF.js.map} +1 -1
  329. package/dist/{unstage-4ZEULXEQ.js → unstage-RM2RLXKD.js} +5 -4
  330. package/dist/{unstage-4ZEULXEQ.js.map → unstage-RM2RLXKD.js.map} +1 -1
  331. package/dist/{update-KREBPGBH.js → update-E5SRBXQR.js} +4 -3
  332. package/dist/{update-KREBPGBH.js.map → update-E5SRBXQR.js.map} +1 -1
  333. package/dist/{update-D6DJC6T7.js → update-PJ67D2OG.js} +3 -2
  334. package/dist/{update-D6DJC6T7.js.map → update-PJ67D2OG.js.map} +1 -1
  335. package/dist/{update-2S7CSEAW.js → update-S4562V3O.js} +4 -3
  336. package/dist/{update-2S7CSEAW.js.map → update-S4562V3O.js.map} +1 -1
  337. package/dist/{update-7NCOTAQZ.js → update-V6YVEUI2.js} +4 -3
  338. package/dist/{update-7NCOTAQZ.js.map → update-V6YVEUI2.js.map} +1 -1
  339. package/dist/{upload-O6NHRPS7.js → upload-R6CQVLKF.js} +4 -3
  340. package/dist/{upload-O6NHRPS7.js.map → upload-R6CQVLKF.js.map} +1 -1
  341. package/dist/{url-options-GGXAL3J4.js → url-options-JOKU46F2.js} +4 -3
  342. package/dist/{url-options-GGXAL3J4.js.map → url-options-JOKU46F2.js.map} +1 -1
  343. package/dist/{url-params-3EFGVTZZ.js → url-params-7U2XMOWF.js} +4 -3
  344. package/dist/{url-params-3EFGVTZZ.js.map → url-params-7U2XMOWF.js.map} +1 -1
  345. package/dist/{validate-UMHHNTVU.js → validate-7YPOUKPB.js} +10 -9
  346. package/dist/{validate-UMHHNTVU.js.map → validate-7YPOUKPB.js.map} +1 -1
  347. package/dist/{videos-YSXYGTBM.js → videos-LICG6ACJ.js} +5 -5
  348. package/dist/{web-IGIGVEKS.js → web-BA2PGTWU.js} +4 -3
  349. package/dist/{web-IGIGVEKS.js.map → web-BA2PGTWU.js.map} +1 -1
  350. package/dist/{winning-ads-2WS7FI4E.js → winning-ads-C6S2C5VP.js} +2 -2
  351. package/dist/{write-commands-5C7FUOVN.js → write-commands-7SJ3BOW5.js} +5 -4
  352. package/dist/{write-commands-5C7FUOVN.js.map → write-commands-7SJ3BOW5.js.map} +1 -1
  353. package/dist/{x-BFSKFCZD.js → x-CZHRC6U7.js} +6 -6
  354. package/package.json +1 -1
  355. package/dist/add-5GAN6CVO.js.map +0 -1
  356. package/dist/analytics-FKCXIMPO.js.map +0 -1
  357. package/dist/chunk-DWHIOO7E.js.map +0 -1
  358. package/dist/chunk-EDLZGTGN.js.map +0 -1
  359. package/dist/chunk-GKZ2WU75.js.map +0 -1
  360. package/dist/chunk-SSJK7FEV.js.map +0 -1
  361. package/dist/chunk-T2PC5AVH.js.map +0 -1
  362. package/dist/chunk-XF4JUKVF.js.map +0 -1
  363. package/dist/chunk-YRQYA2LR.js.map +0 -1
  364. package/dist/flows-KABCBS3S.js.map +0 -1
  365. package/dist/funnel-AAX27NH4.js.map +0 -1
  366. package/dist/get-QEYJRLV3.js.map +0 -1
  367. package/dist/scaffold-static-ad-HJY5HFDL.js.map +0 -1
  368. /package/dist/{actions-P35MEMGN.js.map → actions-6TQMSVWD.js.map} +0 -0
  369. /package/dist/{ads-73PGA4YC.js.map → ads-AGYCVD62.js.map} +0 -0
  370. /package/dist/{avatars-EKCKHCC3.js.map → avatars-467OSBD6.js.map} +0 -0
  371. /package/dist/{brand-C6PFGGQN.js.map → brand-YRTEPGBK.js.map} +0 -0
  372. /package/dist/{campaigns-KZYZTXDS.js.map → campaigns-OYMXDGWX.js.map} +0 -0
  373. /package/dist/{canvas-UJNSHD3B.js.map → canvas-YQFG52IG.js.map} +0 -0
  374. /package/dist/{catalog-ZQX6BGXS.js.map → catalog-XLXIM7IW.js.map} +0 -0
  375. /package/dist/{chunk-7YCRFMXF.js.map → chunk-24EB7EDR.js.map} +0 -0
  376. /package/dist/{chunk-5ZDLTE5T.js.map → chunk-2AOE2MZQ.js.map} +0 -0
  377. /package/dist/{chunk-4SG4RW2P.js.map → chunk-2VPBIT65.js.map} +0 -0
  378. /package/dist/{chunk-NPY4QUMQ.js.map → chunk-54C6YDGJ.js.map} +0 -0
  379. /package/dist/{chunk-LZ73CZGP.js.map → chunk-5WCSKQ7Z.js.map} +0 -0
  380. /package/dist/{chunk-3G3ZDLMI.js.map → chunk-5ZNTADVR.js.map} +0 -0
  381. /package/dist/{chunk-AEOSAVVL.js.map → chunk-6F7DVPOS.js.map} +0 -0
  382. /package/dist/{chunk-CJCVIEJ5.js.map → chunk-6NY2GPR4.js.map} +0 -0
  383. /package/dist/{chunk-CXWFX2AM.js.map → chunk-6Y7ZBENQ.js.map} +0 -0
  384. /package/dist/{chunk-M242LHLX.js.map → chunk-7CTMH5AK.js.map} +0 -0
  385. /package/dist/{chunk-QD7ESRLN.js.map → chunk-C46GUI2S.js.map} +0 -0
  386. /package/dist/{chunk-6N6WKAJM.js.map → chunk-CWYAELVG.js.map} +0 -0
  387. /package/dist/{chunk-MXYBTMKB.js.map → chunk-DCRPXOJJ.js.map} +0 -0
  388. /package/dist/{chunk-JQJDXPCO.js.map → chunk-FUHN4MFY.js.map} +0 -0
  389. /package/dist/{chunk-S77PZVYM.js.map → chunk-FYGR3I2A.js.map} +0 -0
  390. /package/dist/{chunk-OZRUJVIQ.js.map → chunk-H3427GPU.js.map} +0 -0
  391. /package/dist/{chunk-IR6D7K4H.js.map → chunk-I3ZR655O.js.map} +0 -0
  392. /package/dist/{chunk-YK32GUBN.js.map → chunk-KMKEYI37.js.map} +0 -0
  393. /package/dist/{chunk-W3ZHJJVT.js.map → chunk-KS2QY6MK.js.map} +0 -0
  394. /package/dist/{chunk-WNRV4QH7.js.map → chunk-LYQJ4PZW.js.map} +0 -0
  395. /package/dist/{chunk-CSYSX4D2.js.map → chunk-N4LAYIIN.js.map} +0 -0
  396. /package/dist/{chunk-4AUMTNVB.js.map → chunk-NA63BH7V.js.map} +0 -0
  397. /package/dist/{chunk-4BQXAE7Z.js.map → chunk-NDEE6G2J.js.map} +0 -0
  398. /package/dist/{chunk-MELOSESI.js.map → chunk-R25YLW6H.js.map} +0 -0
  399. /package/dist/{chunk-Y6O7EWYY.js.map → chunk-RL5CP7N6.js.map} +0 -0
  400. /package/dist/{chunk-DGUNI37S.js.map → chunk-RX2DKU3W.js.map} +0 -0
  401. /package/dist/{chunk-VTDMKARH.js.map → chunk-ULG4QRTV.js.map} +0 -0
  402. /package/dist/{chunk-QRP3PXWN.js.map → chunk-VL43TNIP.js.map} +0 -0
  403. /package/dist/{chunk-SHL7LOC3.js.map → chunk-VLMBTPXU.js.map} +0 -0
  404. /package/dist/{chunk-KHRXPQID.js.map → chunk-VYQ3QJ3C.js.map} +0 -0
  405. /package/dist/{chunk-A4LOJ2VD.js.map → chunk-WGUQHAJY.js.map} +0 -0
  406. /package/dist/{chunk-ZEYEWPK6.js.map → chunk-WKQG6TER.js.map} +0 -0
  407. /package/dist/{chunk-3IBYKLXR.js.map → chunk-ZDMTXQ2Q.js.map} +0 -0
  408. /package/dist/{connect-QCOGEPP4.js.map → connect-FCXNVTXG.js.map} +0 -0
  409. /package/dist/{creatives-NJF2U763.js.map → creatives-FXUQ5WSD.js.map} +0 -0
  410. /package/dist/{customers-A36LOZOB.js.map → customers-XH2DMTFH.js.map} +0 -0
  411. /package/dist/{feedback-PPQMOQ46.js.map → feedback-EIZKS4JU.js.map} +0 -0
  412. /package/dist/{find-OTDIX6V4.js.map → find-FRRHAPWX.js.map} +0 -0
  413. /package/dist/{fonts-EMMX3KII.js.map → fonts-MXR3ZKDX.js.map} +0 -0
  414. /package/dist/{ga4-UDQ2HA2J.js.map → ga4-DV2AXCSL.js.map} +0 -0
  415. /package/dist/{google-M7KEXVK5.js.map → google-6OGZX47I.js.map} +0 -0
  416. /package/dist/{google-KTO3PLEU.js.map → google-QYYYSSXI.js.map} +0 -0
  417. /package/dist/{gsc-P3QYGDV2.js.map → gsc-TAKOF7J5.js.map} +0 -0
  418. /package/dist/{icon-I43F77FV.js.map → icon-L4RSS6PZ.js.map} +0 -0
  419. /package/dist/{ideas-MIDU7YOA.js.map → ideas-NFOW3HKJ.js.map} +0 -0
  420. /package/dist/{images-S254MS6O.js.map → images-2EFFUNNV.js.map} +0 -0
  421. /package/dist/{ingest-YV2NLDBE.js.map → ingest-2EIKN4QC.js.map} +0 -0
  422. /package/dist/{inspiration-P265QJ2H.js.map → inspiration-S3DU4CMQ.js.map} +0 -0
  423. /package/dist/{landing-CJYGWCK4.js.map → landing-2ZB46LXH.js.map} +0 -0
  424. /package/dist/{line-items-7ZGIKEF2.js.map → line-items-5NECXUZT.js.map} +0 -0
  425. /package/dist/{logo-2IP663QO.js.map → logo-Q5D7PZY6.js.map} +0 -0
  426. /package/dist/{lookup-XK45W2SH.js.map → lookup-ETWY47F7.js.map} +0 -0
  427. /package/dist/{media-sources-O6ZRUA3N.js.map → media-sources-ZXHEEP6T.js.map} +0 -0
  428. /package/dist/{performance-6QW2KEEQ.js.map → performance-UF5VTY2U.js.map} +0 -0
  429. /package/dist/{promoted-tweets-SURKMHFI.js.map → promoted-tweets-LZKS5JIF.js.map} +0 -0
  430. /package/dist/{reddit-GIP3ADMS.js.map → reddit-NU2N3LZD.js.map} +0 -0
  431. /package/dist/{research-2BLEISBG.js.map → research-FMM6AWZC.js.map} +0 -0
  432. /package/dist/{run-MODGUNGT.js.map → run-EUO34T2J.js.map} +0 -0
  433. /package/dist/{scheduled-agents-6U44QE76.js.map → scheduled-agents-N4LJRM4C.js.map} +0 -0
  434. /package/dist/{sources-YBQ6KPFM.js.map → sources-FQ2UZTHL.js.map} +0 -0
  435. /package/dist/{stock-2YCDN3N6.js.map → stock-KXJ26BY4.js.map} +0 -0
  436. /package/dist/{studio-RA7QQH4O.js.map → studio-SYKOSNDB.js.map} +0 -0
  437. /package/dist/{sync-definition-IPUFS5XS.js.map → sync-definition-QR2N233R.js.map} +0 -0
  438. /package/dist/{tags-3WPW6PTV.js.map → tags-PYWFSBTR.js.map} +0 -0
  439. /package/dist/{targeting-criteria-NR47AF5C.js.map → targeting-criteria-RJFLFICN.js.map} +0 -0
  440. /package/dist/{testimonials-CVC4YIXO.js.map → testimonials-DII5DYLR.js.map} +0 -0
  441. /package/dist/{videos-YSXYGTBM.js.map → videos-LICG6ACJ.js.map} +0 -0
  442. /package/dist/{winning-ads-2WS7FI4E.js.map → winning-ads-C6S2C5VP.js.map} +0 -0
  443. /package/dist/{x-BFSKFCZD.js.map → x-CZHRC6U7.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/avatars/update.ts"],"sourcesContent":["import {\n AVATAR_HANDLE_PATTERN,\n type AvatarDetail,\n type AvatarsUpdateRequest,\n type AvatarsUpdateResponse,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { updateHints } from \"./casting.ts\";\nimport { failAvatarApi, failValidation } from \"./failures.ts\";\nimport { buildProfilePatch, hasProfileEdit, mergeProfile } from \"./profile.ts\";\nimport { readAvatars, writeAvatars } from \"./transport.ts\";\n\ninterface UpdateArgs {\n handle: string;\n name?: string;\n newHandle?: string;\n regenerateSheet: boolean;\n patch: ReturnType<typeof buildProfilePatch>;\n}\n\n/** Read and reject the flags before any network call. Exits on a bad edit. */\nfunction readUpdateArgs(args: Record<string, unknown>): UpdateArgs {\n const handle = ((args.handle as string | undefined) || (args[\"avatar-handle\"] as string | undefined))?.trim();\n if (!handle) {\n failValidation('An avatar handle is required, e.g. `baker avatars update marta --persona \"…\"`.');\n }\n\n const name = (args.name as string | undefined)?.trim();\n const newHandle = (args[\"new-handle\"] as string | undefined)?.trim().toLowerCase();\n const regenerateSheet = Boolean(args[\"regenerate-sheet\"]);\n const patch = buildProfilePatch(args);\n\n if (patch.subjectDescription === \"\") {\n failValidation(\n \"--subject cannot be emptied: it is what the identity sheet was built from. Replace it with a new description of the same length or better, and pass --regenerate-sheet.\",\n );\n }\n if (newHandle && !AVATAR_HANDLE_PATTERN.test(newHandle)) {\n failValidation(\n `--new-handle \"${newHandle}\" is not usable. Use lowercase letters, numbers and dashes, starting with a letter.`,\n );\n }\n if (!name && !newHandle && !hasProfileEdit(patch) && !regenerateSheet) {\n failValidation(\n \"Nothing to change. Pass at least one of --name, --new-handle, --subject, --persona, --speech, --motion, --wardrobe, --setting, --accent, --guardrails, --regenerate-sheet.\",\n );\n }\n\n return { handle, name, newHandle, regenerateSheet, patch };\n}\n\nregisterSchema({\n command: \"avatars.update\",\n description:\n 'Edit an avatar: rename it, change its handle, rewrite any part of its written profile, set the accent it speaks with, or rebuild its identity sheet. Profile flags are merged over what is stored, so `--persona \"…\"` alone leaves the subject description intact. THE RULE THAT MATTERS: if you change --subject, pass --regenerate-sheet in the same call — otherwise the sheet still shows the person you described before, the words and the face stop matching, and every render drifts. Rebuilding is a ~30s billed render and puts the avatar back to `generating`.',\n args: {\n handle: { type: \"string\", description: \"Handle of the avatar to edit\", required: true },\n name: { type: \"string\", description: \"New display name\", required: false },\n \"new-handle\": { type: \"string\", description: \"New mention handle (lowercase, dashes)\", required: false },\n subject: {\n type: \"string\",\n description: \"Rewrite the identity description. Pass --regenerate-sheet with it, always.\",\n required: false,\n },\n persona: { type: \"string\", description: \"Who they are on camera\", required: false },\n speech: { type: \"string\", description: \"How they speak\", required: false },\n motion: { type: \"string\", description: \"Body language in video\", required: false },\n wardrobe: { type: \"string\", description: \"Default outfit\", required: false },\n setting: { type: \"string\", description: \"Default surroundings\", required: false },\n guardrails: {\n type: \"string\",\n description: \"Comma-separated things they must never do (replaces the stored list; empty string clears it)\",\n required: false,\n },\n accent: {\n type: \"string\",\n description:\n \"Where their voice is FROM, as a place: 'Spanish from Spain, Madrid accent', 'Mexican Spanish'. THE lever for how they sound — an avatar has no pinned voice (ADR 0005), so the region directed in the prompt is the only thing steering pronunciation. An adjective like 'clear Spanish accent' is read as NO accent and the clip comes out sounding like nowhere.\",\n required: false,\n },\n \"regenerate-sheet\": {\n type: \"boolean\",\n description: \"Rebuild the identity sheet (~30s, billed). Required whenever --subject changed.\",\n required: false,\n default: false,\n },\n },\n});\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n 'Edit an avatar; profile flags merge over what is stored. Example: baker avatars update marta --subject \"woman in her early 50s, silver bob\" --regenerate-sheet',\n },\n args: {\n handle: { type: \"positional\", description: \"Handle of the avatar to edit\", required: false },\n \"avatar-handle\": { type: \"string\", description: \"Handle (alternative to positional)\", required: false },\n name: { type: \"string\", description: \"New display name\", required: false },\n \"new-handle\": { type: \"string\", description: \"New mention handle\", required: false },\n subject: { type: \"string\", description: \"Rewrite the identity description\", required: false },\n persona: { type: \"string\", description: \"Who they are on camera\", required: false },\n speech: { type: \"string\", description: \"How they speak\", required: false },\n motion: { type: \"string\", description: \"Body language in video\", required: false },\n wardrobe: { type: \"string\", description: \"Default outfit\", required: false },\n setting: { type: \"string\", description: \"Default surroundings\", required: false },\n guardrails: { type: \"string\", description: \"Comma-separated rules (empty string clears)\", required: false },\n accent: { type: \"string\", description: \"Where their voice is FROM, as a place\", required: false },\n \"regenerate-sheet\": {\n type: \"boolean\",\n description: \"Rebuild the identity sheet (~30s, billed)\",\n required: false,\n default: false,\n },\n },\n run: async ({ args }) => {\n const { handle, name, newHandle, regenerateSheet, patch } = readUpdateArgs(args);\n\n try {\n let profile: AvatarsUpdateRequest[\"profile\"];\n let subjectChanged = false;\n if (hasProfileEdit(patch)) {\n // The API replaces the profile wholesale, so read the stored one and\n // merge — otherwise editing one field silently drops the rest.\n const current = await readAvatars<AvatarDetail>(\"/api/avatars/get\", { handle, full: \"1\" });\n profile = mergeProfile(current.profile, patch);\n subjectChanged = profile.subjectDescription !== current.profile.subjectDescription;\n }\n\n const body: AvatarsUpdateRequest = {\n handle,\n ...(name ? { name } : {}),\n ...(newHandle ? { newHandle } : {}),\n ...(profile ? { profile } : {}),\n ...(regenerateSheet ? { regenerateSheet: true } : {}),\n };\n\n const data = await writeAvatars<AvatarsUpdateResponse>(\"/api/avatars/update\", body);\n writeJson({\n ok: true,\n data,\n hints: updateHints({\n avatar: data.avatar,\n subjectChanged,\n regeneratedSheet: regenerateSheet,\n previousHandle: handle,\n }),\n });\n } catch (err) {\n failAvatarApi(err, handle);\n }\n },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/avatars/update.ts"],"sourcesContent":["import {\n AVATAR_HANDLE_PATTERN,\n type AvatarDetail,\n type AvatarsUpdateRequest,\n type AvatarsUpdateResponse,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { updateHints } from \"./casting.ts\";\nimport { failAvatarApi, failValidation } from \"./failures.ts\";\nimport { buildProfilePatch, hasProfileEdit, mergeProfile } from \"./profile.ts\";\nimport { readAvatars, writeAvatars } from \"./transport.ts\";\n\ninterface UpdateArgs {\n handle: string;\n name?: string;\n newHandle?: string;\n regenerateSheet: boolean;\n patch: ReturnType<typeof buildProfilePatch>;\n}\n\n/** Read and reject the flags before any network call. Exits on a bad edit. */\nfunction readUpdateArgs(args: Record<string, unknown>): UpdateArgs {\n const handle = ((args.handle as string | undefined) || (args[\"avatar-handle\"] as string | undefined))?.trim();\n if (!handle) {\n failValidation('An avatar handle is required, e.g. `baker avatars update marta --persona \"…\"`.');\n }\n\n const name = (args.name as string | undefined)?.trim();\n const newHandle = (args[\"new-handle\"] as string | undefined)?.trim().toLowerCase();\n const regenerateSheet = Boolean(args[\"regenerate-sheet\"]);\n const patch = buildProfilePatch(args);\n\n if (patch.subjectDescription === \"\") {\n failValidation(\n \"--subject cannot be emptied: it is what the identity sheet was built from. Replace it with a new description of the same length or better, and pass --regenerate-sheet.\",\n );\n }\n if (newHandle && !AVATAR_HANDLE_PATTERN.test(newHandle)) {\n failValidation(\n `--new-handle \"${newHandle}\" is not usable. Use lowercase letters, numbers and dashes, starting with a letter.`,\n );\n }\n if (!name && !newHandle && !hasProfileEdit(patch) && !regenerateSheet) {\n failValidation(\n \"Nothing to change. Pass at least one of --name, --new-handle, --subject, --persona, --speech, --motion, --wardrobe, --setting, --accent, --guardrails, --regenerate-sheet.\",\n );\n }\n\n return { handle, name, newHandle, regenerateSheet, patch };\n}\n\nregisterSchema({\n command: \"avatars.update\",\n description:\n 'Edit an avatar: rename it, change its handle, rewrite any part of its written profile, set the accent it speaks with, or rebuild its identity sheet. Profile flags are merged over what is stored, so `--persona \"…\"` alone leaves the subject description intact. THE RULE THAT MATTERS: if you change --subject, pass --regenerate-sheet in the same call — otherwise the sheet still shows the person you described before, the words and the face stop matching, and every render drifts. Rebuilding is a ~30s billed render and puts the avatar back to `generating`.',\n args: {\n handle: { type: \"string\", description: \"Handle of the avatar to edit\", required: true },\n name: { type: \"string\", description: \"New display name\", required: false },\n \"new-handle\": { type: \"string\", description: \"New mention handle (lowercase, dashes)\", required: false },\n subject: {\n type: \"string\",\n description: \"Rewrite the identity description. Pass --regenerate-sheet with it, always.\",\n required: false,\n },\n persona: { type: \"string\", description: \"Who they are on camera\", required: false },\n speech: { type: \"string\", description: \"How they speak\", required: false },\n motion: { type: \"string\", description: \"Body language in video\", required: false },\n wardrobe: { type: \"string\", description: \"Default outfit\", required: false },\n setting: { type: \"string\", description: \"Default surroundings\", required: false },\n guardrails: {\n type: \"string\",\n description: \"Comma-separated things they must never do (replaces the stored list; empty string clears it)\",\n required: false,\n },\n accent: {\n type: \"string\",\n description:\n \"Where their voice is FROM, as a place: 'Spanish from Spain, Madrid accent', 'Mexican Spanish'. THE lever for how they sound — an avatar has no pinned voice (ADR 0005), so the region directed in the prompt is the only thing steering pronunciation. An adjective like 'clear Spanish accent' is read as NO accent and the clip comes out sounding like nowhere.\",\n required: false,\n },\n \"regenerate-sheet\": {\n type: \"boolean\",\n description: \"Rebuild the identity sheet (~30s, billed). Required whenever --subject changed.\",\n required: false,\n default: false,\n },\n },\n});\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n 'Edit an avatar; profile flags merge over what is stored. Example: baker avatars update marta --subject \"woman in her early 50s, silver bob\" --regenerate-sheet',\n },\n args: {\n handle: { type: \"positional\", description: \"Handle of the avatar to edit\", required: false },\n \"avatar-handle\": { type: \"string\", description: \"Handle (alternative to positional)\", required: false },\n name: { type: \"string\", description: \"New display name\", required: false },\n \"new-handle\": { type: \"string\", description: \"New mention handle\", required: false },\n subject: { type: \"string\", description: \"Rewrite the identity description\", required: false },\n persona: { type: \"string\", description: \"Who they are on camera\", required: false },\n speech: { type: \"string\", description: \"How they speak\", required: false },\n motion: { type: \"string\", description: \"Body language in video\", required: false },\n wardrobe: { type: \"string\", description: \"Default outfit\", required: false },\n setting: { type: \"string\", description: \"Default surroundings\", required: false },\n guardrails: { type: \"string\", description: \"Comma-separated rules (empty string clears)\", required: false },\n accent: { type: \"string\", description: \"Where their voice is FROM, as a place\", required: false },\n \"regenerate-sheet\": {\n type: \"boolean\",\n description: \"Rebuild the identity sheet (~30s, billed)\",\n required: false,\n default: false,\n },\n },\n run: async ({ args }) => {\n const { handle, name, newHandle, regenerateSheet, patch } = readUpdateArgs(args);\n\n try {\n let profile: AvatarsUpdateRequest[\"profile\"];\n let subjectChanged = false;\n if (hasProfileEdit(patch)) {\n // The API replaces the profile wholesale, so read the stored one and\n // merge — otherwise editing one field silently drops the rest.\n const current = await readAvatars<AvatarDetail>(\"/api/avatars/get\", { handle, full: \"1\" });\n profile = mergeProfile(current.profile, patch);\n subjectChanged = profile.subjectDescription !== current.profile.subjectDescription;\n }\n\n const body: AvatarsUpdateRequest = {\n handle,\n ...(name ? { name } : {}),\n ...(newHandle ? { newHandle } : {}),\n ...(profile ? { profile } : {}),\n ...(regenerateSheet ? { regenerateSheet: true } : {}),\n };\n\n const data = await writeAvatars<AvatarsUpdateResponse>(\"/api/avatars/update\", body);\n writeJson({\n ok: true,\n data,\n hints: updateHints({\n avatar: data.avatar,\n subjectChanged,\n regeneratedSheet: regenerateSheet,\n previousHandle: handle,\n }),\n });\n } catch (err) {\n failAvatarApi(err, handle);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -2,11 +2,12 @@ import {
2
2
  failApi,
3
3
  failValidation,
4
4
  writeOk
5
- } from "./chunk-3HJLHTWP.js";
6
- import "./chunk-XF4JUKVF.js";
5
+ } from "./chunk-SJYEY5MV.js";
6
+ import "./chunk-7EPXVICM.js";
7
7
  import "./chunk-GXDLWBOY.js";
8
8
  import "./chunk-TEINLN64.js";
9
9
  import "./chunk-ZJWUBJYQ.js";
10
+ import "./chunk-HR6IWNKE.js";
10
11
  import "./chunk-NE4F3FHN.js";
11
12
  import {
12
13
  apiPost
@@ -60,4 +61,4 @@ var tagsUpdateCommand = defineCommand({
60
61
  export {
61
62
  tagsUpdateCommand
62
63
  };
63
- //# sourceMappingURL=update-2S7CSEAW.js.map
64
+ //# sourceMappingURL=update-S4562V3O.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/actions/tags/update.ts"],"sourcesContent":["import type { ActionsTagsUpdateResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { failApi, failValidation, writeOk } from \"../shared.ts\";\n\nregisterSchema({\n command: \"actions.tags.update\",\n description:\n \"Change what a company custom action tag means (its description). Applies at once, like `tags create`. The slug itself cannot be renamed — every Task carrying it stores it; to rename, create the new tag, retag the Tasks, then delete the old one. Built-in default tags cannot be changed.\",\n args: {\n slug: { type: \"string\", description: \"Custom tag slug to change\", required: true },\n description: { type: \"string\", description: \"What this tag means\", required: true },\n },\n});\n\nexport const tagsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n 'Change what a custom action tag means. Example: baker actions tags update --slug pmax --description \"Performance Max campaigns\"',\n },\n args: {\n slug: { type: \"string\", description: \"Custom tag slug\", required: false },\n description: { type: \"string\", description: \"What this tag means\", required: false },\n },\n run: async ({ args }) => {\n try {\n const slug = (args.slug as string | undefined)?.trim();\n if (!slug) {\n failValidation(\"--slug is required.\");\n }\n const description = args.description as string | undefined;\n if (description === undefined) {\n failValidation(\"--description is required: what this tag means.\");\n }\n const response = await apiPost<ActionsTagsUpdateResponse>(\"/api/actions/tags/update\", {\n name: slug,\n description,\n });\n writeOk(response.data);\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAK9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,KAAK;AAAA,IACjF,aAAa,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,KAAK;AAAA,EACpF;AACF,CAAC;AAEM,IAAM,oBAAoB,cAAc;AAAA,EAC7C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,UAAU,aAAa,mBAAmB,UAAU,MAAM;AAAA,IACxE,aAAa,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,MAAM;AAAA,EACrF;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,OAAQ,KAAK,MAA6B,KAAK;AACrD,UAAI,CAAC,MAAM;AACT,uBAAe,qBAAqB;AAAA,MACtC;AACA,YAAM,cAAc,KAAK;AACzB,UAAI,gBAAgB,QAAW;AAC7B,uBAAe,iDAAiD;AAAA,MAClE;AACA,YAAM,WAAW,MAAM,QAAmC,4BAA4B;AAAA,QACpF,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,cAAQ,SAAS,IAAI;AAAA,IACvB,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/commands/actions/tags/update.ts"],"sourcesContent":["import type { ActionsTagsUpdateResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { failApi, failValidation, writeOk } from \"../shared.ts\";\n\nregisterSchema({\n command: \"actions.tags.update\",\n description:\n \"Change what a company custom action tag means (its description). Applies at once, like `tags create`. The slug itself cannot be renamed — every Task carrying it stores it; to rename, create the new tag, retag the Tasks, then delete the old one. Built-in default tags cannot be changed.\",\n args: {\n slug: { type: \"string\", description: \"Custom tag slug to change\", required: true },\n description: { type: \"string\", description: \"What this tag means\", required: true },\n },\n});\n\nexport const tagsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n 'Change what a custom action tag means. Example: baker actions tags update --slug pmax --description \"Performance Max campaigns\"',\n },\n args: {\n slug: { type: \"string\", description: \"Custom tag slug\", required: false },\n description: { type: \"string\", description: \"What this tag means\", required: false },\n },\n run: async ({ args }) => {\n try {\n const slug = (args.slug as string | undefined)?.trim();\n if (!slug) {\n failValidation(\"--slug is required.\");\n }\n const description = args.description as string | undefined;\n if (description === undefined) {\n failValidation(\"--description is required: what this tag means.\");\n }\n const response = await apiPost<ActionsTagsUpdateResponse>(\"/api/actions/tags/update\", {\n name: slug,\n description,\n });\n writeOk(response.data);\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAK9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,KAAK;AAAA,IACjF,aAAa,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,KAAK;AAAA,EACpF;AACF,CAAC;AAEM,IAAM,oBAAoB,cAAc;AAAA,EAC7C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,UAAU,aAAa,mBAAmB,UAAU,MAAM;AAAA,IACxE,aAAa,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,MAAM;AAAA,EACrF;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,OAAQ,KAAK,MAA6B,KAAK;AACrD,UAAI,CAAC,MAAM;AACT,uBAAe,qBAAqB;AAAA,MACtC;AACA,YAAM,cAAc,KAAK;AACzB,UAAI,gBAAgB,QAAW;AAC7B,uBAAe,iDAAiD;AAAA,MAClE;AACA,YAAM,WAAW,MAAM,QAAmC,4BAA4B;AAAA,QACpF,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,cAAQ,SAAS,IAAI;AAAA,IACvB,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -6,11 +6,12 @@ import {
6
6
  parsePriority,
7
7
  parseTagList,
8
8
  writeOk
9
- } from "./chunk-3HJLHTWP.js";
10
- import "./chunk-XF4JUKVF.js";
9
+ } from "./chunk-SJYEY5MV.js";
10
+ import "./chunk-7EPXVICM.js";
11
11
  import "./chunk-GXDLWBOY.js";
12
12
  import "./chunk-TEINLN64.js";
13
13
  import "./chunk-ZJWUBJYQ.js";
14
+ import "./chunk-HR6IWNKE.js";
14
15
  import "./chunk-NE4F3FHN.js";
15
16
  import {
16
17
  apiPost,
@@ -95,4 +96,4 @@ var updateCommand = defineCommand({
95
96
  export {
96
97
  updateCommand
97
98
  };
98
- //# sourceMappingURL=update-7NCOTAQZ.js.map
99
+ //# sourceMappingURL=update-V6YVEUI2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/actions/update.ts"],"sourcesContent":["import type { ActionsUpdateResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost, validateConvexId } from \"../../client.ts\";\nimport { requireChatId } from \"../../env.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport {\n ACTION_PRIORITIES,\n failApi,\n failValidation,\n isTempId,\n parsePriority,\n parseTagList,\n writeOk,\n} from \"./shared.ts\";\n\nregisterSchema({\n command: \"actions.update\",\n description:\n \"Stage an update on an action (name, description, tags, and/or priority) — no claim needed; edit any action you're not working on. Accepts either a real action ID or a tempId from `baker actions create` in THIS chat (edits the still-staged task in place — use this to flesh out a task you just created instead of removing and recreating it). Applies on publish. Blocked only if another chat currently has a real action claimed. --tags REPLACES the tag set; pass --tags '' to clear. --priority accepts urgent|high|medium|low or 'none' to clear back to unset (== normal).\",\n args: {\n id: { type: \"string\", description: \"Action ID or tempId (temp_*) of a task staged in this chat\", required: true },\n name: { type: \"string\", description: \"New name\", required: false },\n description: {\n type: \"string\",\n description:\n \"New description, in markdown — `##` headings per section, `-` bullets, `**bold**` for the decisive figures. REPLACES the whole description, so carry over anything still true.\",\n required: false,\n },\n tags: {\n type: \"string\",\n description: \"Comma-separated tag slugs — REPLACES existing tags ('' clears)\",\n required: false,\n },\n priority: {\n type: \"string\",\n description: `User priority: ${ACTION_PRIORITIES.join(\"|\")}, or 'none' to clear.`,\n required: false,\n },\n },\n});\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n 'Stage an update on an action, or edit a task still staged in this chat by its tempId (no claim needed). Example: baker actions update <id-or-tempId> --description \"…\"',\n },\n args: {\n id: { type: \"positional\", description: \"Action ID or tempId (temp_*)\", required: false },\n \"action-id\": { type: \"string\", description: \"Action ID or tempId (temp_*)\", required: false },\n name: { type: \"string\", description: \"New name\", required: false },\n description: { type: \"string\", description: \"New description (markdown)\", required: false },\n tags: { type: \"string\", description: \"Comma-separated tag slugs — REPLACES existing ('' clears)\", required: false },\n priority: { type: \"string\", description: `Priority: ${ACTION_PRIORITIES.join(\"|\")}|none`, required: false },\n },\n run: async ({ args }) => {\n try {\n const id = (args.id as string | undefined) || (args[\"action-id\"] as string | undefined);\n if (!id) {\n failValidation(\"Action ID is required.\");\n }\n // A tempId (temp_*) references a task still staged in this chat; it is not a\n // Convex id, so only enforce the id format for real action ids.\n if (!isTempId(id)) {\n validateConvexId(id);\n }\n const tags = parseTagList(args.tags);\n const priority = parsePriority(args.priority, { allowClear: true });\n if (args.name === undefined && args.description === undefined && tags === undefined && priority === undefined) {\n failValidation(\"Provide at least one of --name, --description, --tags, --priority.\");\n }\n const chatId = requireChatId();\n await apiPost<ActionsUpdateResponse>(\"/api/actions/update\", {\n chatId,\n actionId: id,\n name: args.name,\n description: args.description,\n ...(tags !== undefined ? { tags } : {}),\n ...(priority !== undefined ? { priority } : {}),\n });\n writeOk();\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAc9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,8DAA8D,UAAU,KAAK;AAAA,IAChH,MAAM,EAAE,MAAM,UAAU,aAAa,YAAY,UAAU,MAAM;AAAA,IACjE,aAAa;AAAA,MACX,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa,kBAAkB,kBAAkB,KAAK,GAAG,CAAC;AAAA,MAC1D,UAAU;AAAA,IACZ;AAAA,EACF;AACF,CAAC;AAEM,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,aAAa,gCAAgC,UAAU,MAAM;AAAA,IACvF,aAAa,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,MAAM;AAAA,IAC5F,MAAM,EAAE,MAAM,UAAU,aAAa,YAAY,UAAU,MAAM;AAAA,IACjE,aAAa,EAAE,MAAM,UAAU,aAAa,8BAA8B,UAAU,MAAM;AAAA,IAC1F,MAAM,EAAE,MAAM,UAAU,aAAa,kEAA6D,UAAU,MAAM;AAAA,IAClH,UAAU,EAAE,MAAM,UAAU,aAAa,aAAa,kBAAkB,KAAK,GAAG,CAAC,SAAS,UAAU,MAAM;AAAA,EAC5G;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,KAAM,KAAK,MAA8B,KAAK,WAAW;AAC/D,UAAI,CAAC,IAAI;AACP,uBAAe,wBAAwB;AAAA,MACzC;AAGA,UAAI,CAAC,SAAS,EAAE,GAAG;AACjB,yBAAiB,EAAE;AAAA,MACrB;AACA,YAAM,OAAO,aAAa,KAAK,IAAI;AACnC,YAAM,WAAW,cAAc,KAAK,UAAU,EAAE,YAAY,KAAK,CAAC;AAClE,UAAI,KAAK,SAAS,UAAa,KAAK,gBAAgB,UAAa,SAAS,UAAa,aAAa,QAAW;AAC7G,uBAAe,oEAAoE;AAAA,MACrF;AACA,YAAM,SAAS,cAAc;AAC7B,YAAM,QAA+B,uBAAuB;AAAA,QAC1D;AAAA,QACA,UAAU;AAAA,QACV,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,QACrC,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,MAC/C,CAAC;AACD,cAAQ;AAAA,IACV,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/commands/actions/update.ts"],"sourcesContent":["import type { ActionsUpdateResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost, validateConvexId } from \"../../client.ts\";\nimport { requireChatId } from \"../../env.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport {\n ACTION_PRIORITIES,\n failApi,\n failValidation,\n isTempId,\n parsePriority,\n parseTagList,\n writeOk,\n} from \"./shared.ts\";\n\nregisterSchema({\n command: \"actions.update\",\n description:\n \"Stage an update on an action (name, description, tags, and/or priority) — no claim needed; edit any action you're not working on. Accepts either a real action ID or a tempId from `baker actions create` in THIS chat (edits the still-staged task in place — use this to flesh out a task you just created instead of removing and recreating it). Applies on publish. Blocked only if another chat currently has a real action claimed. --tags REPLACES the tag set; pass --tags '' to clear. --priority accepts urgent|high|medium|low or 'none' to clear back to unset (== normal).\",\n args: {\n id: { type: \"string\", description: \"Action ID or tempId (temp_*) of a task staged in this chat\", required: true },\n name: { type: \"string\", description: \"New name\", required: false },\n description: {\n type: \"string\",\n description:\n \"New description, in markdown — `##` headings per section, `-` bullets, `**bold**` for the decisive figures. REPLACES the whole description, so carry over anything still true.\",\n required: false,\n },\n tags: {\n type: \"string\",\n description: \"Comma-separated tag slugs — REPLACES existing tags ('' clears)\",\n required: false,\n },\n priority: {\n type: \"string\",\n description: `User priority: ${ACTION_PRIORITIES.join(\"|\")}, or 'none' to clear.`,\n required: false,\n },\n },\n});\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description:\n 'Stage an update on an action, or edit a task still staged in this chat by its tempId (no claim needed). Example: baker actions update <id-or-tempId> --description \"…\"',\n },\n args: {\n id: { type: \"positional\", description: \"Action ID or tempId (temp_*)\", required: false },\n \"action-id\": { type: \"string\", description: \"Action ID or tempId (temp_*)\", required: false },\n name: { type: \"string\", description: \"New name\", required: false },\n description: { type: \"string\", description: \"New description (markdown)\", required: false },\n tags: { type: \"string\", description: \"Comma-separated tag slugs — REPLACES existing ('' clears)\", required: false },\n priority: { type: \"string\", description: `Priority: ${ACTION_PRIORITIES.join(\"|\")}|none`, required: false },\n },\n run: async ({ args }) => {\n try {\n const id = (args.id as string | undefined) || (args[\"action-id\"] as string | undefined);\n if (!id) {\n failValidation(\"Action ID is required.\");\n }\n // A tempId (temp_*) references a task still staged in this chat; it is not a\n // Convex id, so only enforce the id format for real action ids.\n if (!isTempId(id)) {\n validateConvexId(id);\n }\n const tags = parseTagList(args.tags);\n const priority = parsePriority(args.priority, { allowClear: true });\n if (args.name === undefined && args.description === undefined && tags === undefined && priority === undefined) {\n failValidation(\"Provide at least one of --name, --description, --tags, --priority.\");\n }\n const chatId = requireChatId();\n await apiPost<ActionsUpdateResponse>(\"/api/actions/update\", {\n chatId,\n actionId: id,\n name: args.name,\n description: args.description,\n ...(tags !== undefined ? { tags } : {}),\n ...(priority !== undefined ? { priority } : {}),\n });\n writeOk();\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAc9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,8DAA8D,UAAU,KAAK;AAAA,IAChH,MAAM,EAAE,MAAM,UAAU,aAAa,YAAY,UAAU,MAAM;AAAA,IACjE,aAAa;AAAA,MACX,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa,kBAAkB,kBAAkB,KAAK,GAAG,CAAC;AAAA,MAC1D,UAAU;AAAA,IACZ;AAAA,EACF;AACF,CAAC;AAEM,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,aAAa,gCAAgC,UAAU,MAAM;AAAA,IACvF,aAAa,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,MAAM;AAAA,IAC5F,MAAM,EAAE,MAAM,UAAU,aAAa,YAAY,UAAU,MAAM;AAAA,IACjE,aAAa,EAAE,MAAM,UAAU,aAAa,8BAA8B,UAAU,MAAM;AAAA,IAC1F,MAAM,EAAE,MAAM,UAAU,aAAa,kEAA6D,UAAU,MAAM;AAAA,IAClH,UAAU,EAAE,MAAM,UAAU,aAAa,aAAa,kBAAkB,KAAK,GAAG,CAAC,SAAS,UAAU,MAAM;AAAA,EAC5G;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,KAAM,KAAK,MAA8B,KAAK,WAAW;AAC/D,UAAI,CAAC,IAAI;AACP,uBAAe,wBAAwB;AAAA,MACzC;AAGA,UAAI,CAAC,SAAS,EAAE,GAAG;AACjB,yBAAiB,EAAE;AAAA,MACrB;AACA,YAAM,OAAO,aAAa,KAAK,IAAI;AACnC,YAAM,WAAW,cAAc,KAAK,UAAU,EAAE,YAAY,KAAK,CAAC;AAClE,UAAI,KAAK,SAAS,UAAa,KAAK,gBAAgB,UAAa,SAAS,UAAa,aAAa,QAAW;AAC7G,uBAAe,oEAAoE;AAAA,MACrF;AACA,YAAM,SAAS,cAAc;AAC7B,YAAM,QAA+B,uBAAuB;AAAA,QAC1D;AAAA,QACA,UAAU;AAAA,QACV,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,QACrC,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,MAC/C,CAAC;AACD,cAAQ;AAAA,IACV,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  runVideoIngest
3
- } from "./chunk-MXYBTMKB.js";
3
+ } from "./chunk-DCRPXOJJ.js";
4
4
  import "./chunk-FKOECEVC.js";
5
5
  import {
6
6
  detectVideoContentType,
7
7
  uploadLocalVideo
8
8
  } from "./chunk-KNY76UGC.js";
9
9
  import "./chunk-VVZBBKRC.js";
10
- import "./chunk-XF4JUKVF.js";
10
+ import "./chunk-7EPXVICM.js";
11
11
  import "./chunk-GXDLWBOY.js";
12
12
  import "./chunk-TEINLN64.js";
13
13
  import "./chunk-ZJWUBJYQ.js";
14
+ import "./chunk-HR6IWNKE.js";
14
15
  import "./chunk-NE4F3FHN.js";
15
16
  import {
16
17
  ApiError
@@ -123,4 +124,4 @@ var uploadCommand = defineCommand({
123
124
  export {
124
125
  uploadCommand
125
126
  };
126
- //# sourceMappingURL=upload-O6NHRPS7.js.map
127
+ //# sourceMappingURL=upload-R6CQVLKF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/videos/upload.ts"],"sourcesContent":["import { stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { detectVideoContentType, uploadLocalVideo } from \"./api.ts\";\nimport { runVideoIngest } from \"./ingest.ts\";\n\nregisterSchema({\n command: \"videos.upload\",\n description: \"Upload a video to Baker — a local file (via Mux direct upload) or a remote http(s) URL.\",\n args: {\n file: { type: \"string\", description: \"Local video file path, or a remote http(s) URL\", required: true },\n \"content-type\": {\n type: \"string\",\n description: \"MIME type (auto-detected from extension if omitted)\",\n required: false,\n },\n context: {\n type: \"string\",\n description:\n \"What this clip is and what it is for. Feeds the analysis, so it is the single highest-leverage flag here. Example: --context 'Customer testimonial from Maria, shot on her phone for the Q3 retargeting push'\",\n required: false,\n },\n \"dry-run\": {\n type: \"boolean\",\n description: \"Preview the operation without executing\",\n required: false,\n default: false,\n },\n },\n});\n\nfunction isRemoteUrl(value: string): boolean {\n return /^https?:\\/\\//i.test(value);\n}\n\nexport const uploadCommand = defineCommand({\n meta: {\n name: \"upload\",\n description:\n \"Upload a video to Baker — accepts a local file path OR a remote http(s) URL.\\n\\nLocal: auto-detects content type and uploads via Mux direct upload.\\nRemote: hands off to `videos ingest` (direct fetch, or download-then-upload for a YouTube/TikTok/Vimeo page).\\n\\nExamples:\\n baker videos upload ./demo.mp4\\n baker videos upload https://www.youtube.com/watch?v=abc123\",\n },\n args: {\n file: { type: \"positional\", description: \"Local video file path or remote http(s) URL\", required: false },\n \"content-type\": { type: \"string\", description: \"MIME type (local only — auto-detected)\", required: false },\n context: {\n type: \"string\",\n description:\n \"What this clip is and what it is for — who is on camera, which campaign, how it was shot. Start here: the analysis reads it, so it is what makes the clip findable later.\",\n required: false,\n },\n source: { type: \"string\", description: \"Provenance (URL mode only): url | youtube\", required: false },\n \"external-id\": { type: \"string\", description: \"Provider asset id (URL mode only)\", required: false },\n \"external-url\": { type: \"string\", description: \"Canonical page URL (URL mode only)\", required: false },\n \"dry-run\": { type: \"boolean\", description: \"Preview without executing\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const filePath = args.file as string | undefined;\n if (!filePath) {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message: \"File path or URL is required\" } });\n process.exit(1);\n }\n\n // A URL is the ingest command's job — same routing `images upload` does, so\n // one verb covers both and a pasted link never fails with ENOENT.\n if (isRemoteUrl(filePath)) {\n // Every option this verb shares with `ingest` is forwarded. `--context`\n // in particular: both commands call it the highest-leverage flag, and\n // dropping it here meant a pasted link was analysed with strictly less\n // to go on than the same file uploaded by hand — silently, since no\n // error fired and the \"no context given\" hint did not either.\n await runVideoIngest({\n url: filePath,\n source: args.source as string | undefined,\n externalId: args[\"external-id\"] as string | undefined,\n externalUrl: args[\"external-url\"] as string | undefined,\n context: args.context as string | undefined,\n dryRun: args[\"dry-run\"] === true,\n });\n return;\n }\n\n const contentType = (args[\"content-type\"] as string | undefined) || detectVideoContentType(filePath);\n const descriptionContext = args.context as string | undefined;\n\n if (args[\"dry-run\"]) {\n const fileStats = await stat(filePath);\n const originalFilename = basename(filePath);\n writeJson({\n ok: true,\n dryRun: true,\n operation: \"videos.upload\",\n params: { file: filePath, contentType, sizeBytes: fileStats.size, originalFilename, descriptionContext },\n });\n return;\n }\n\n const { videoId } = await uploadLocalVideo({ file: filePath, contentType, descriptionContext });\n\n writeJson({\n ok: true,\n data: { videoId },\n hints: descriptionContext\n ? undefined\n : [\n \"No --context given. Analysis runs on the frames and audio alone, so who is on camera and which campaign this belongs to will be guessed. Pass --context next time.\",\n ],\n });\n } catch (err) {\n if (err instanceof ApiError) {\n writeJson({ ok: false, error: { code: err.code, message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/videos/upload.ts"],"sourcesContent":["import { stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { detectVideoContentType, uploadLocalVideo } from \"./api.ts\";\nimport { runVideoIngest } from \"./ingest.ts\";\n\nregisterSchema({\n command: \"videos.upload\",\n description: \"Upload a video to Baker — a local file (via Mux direct upload) or a remote http(s) URL.\",\n args: {\n file: { type: \"string\", description: \"Local video file path, or a remote http(s) URL\", required: true },\n \"content-type\": {\n type: \"string\",\n description: \"MIME type (auto-detected from extension if omitted)\",\n required: false,\n },\n context: {\n type: \"string\",\n description:\n \"What this clip is and what it is for. Feeds the analysis, so it is the single highest-leverage flag here. Example: --context 'Customer testimonial from Maria, shot on her phone for the Q3 retargeting push'\",\n required: false,\n },\n \"dry-run\": {\n type: \"boolean\",\n description: \"Preview the operation without executing\",\n required: false,\n default: false,\n },\n },\n});\n\nfunction isRemoteUrl(value: string): boolean {\n return /^https?:\\/\\//i.test(value);\n}\n\nexport const uploadCommand = defineCommand({\n meta: {\n name: \"upload\",\n description:\n \"Upload a video to Baker — accepts a local file path OR a remote http(s) URL.\\n\\nLocal: auto-detects content type and uploads via Mux direct upload.\\nRemote: hands off to `videos ingest` (direct fetch, or download-then-upload for a YouTube/TikTok/Vimeo page).\\n\\nExamples:\\n baker videos upload ./demo.mp4\\n baker videos upload https://www.youtube.com/watch?v=abc123\",\n },\n args: {\n file: { type: \"positional\", description: \"Local video file path or remote http(s) URL\", required: false },\n \"content-type\": { type: \"string\", description: \"MIME type (local only — auto-detected)\", required: false },\n context: {\n type: \"string\",\n description:\n \"What this clip is and what it is for — who is on camera, which campaign, how it was shot. Start here: the analysis reads it, so it is what makes the clip findable later.\",\n required: false,\n },\n source: { type: \"string\", description: \"Provenance (URL mode only): url | youtube\", required: false },\n \"external-id\": { type: \"string\", description: \"Provider asset id (URL mode only)\", required: false },\n \"external-url\": { type: \"string\", description: \"Canonical page URL (URL mode only)\", required: false },\n \"dry-run\": { type: \"boolean\", description: \"Preview without executing\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const filePath = args.file as string | undefined;\n if (!filePath) {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message: \"File path or URL is required\" } });\n process.exit(1);\n }\n\n // A URL is the ingest command's job — same routing `images upload` does, so\n // one verb covers both and a pasted link never fails with ENOENT.\n if (isRemoteUrl(filePath)) {\n // Every option this verb shares with `ingest` is forwarded. `--context`\n // in particular: both commands call it the highest-leverage flag, and\n // dropping it here meant a pasted link was analysed with strictly less\n // to go on than the same file uploaded by hand — silently, since no\n // error fired and the \"no context given\" hint did not either.\n await runVideoIngest({\n url: filePath,\n source: args.source as string | undefined,\n externalId: args[\"external-id\"] as string | undefined,\n externalUrl: args[\"external-url\"] as string | undefined,\n context: args.context as string | undefined,\n dryRun: args[\"dry-run\"] === true,\n });\n return;\n }\n\n const contentType = (args[\"content-type\"] as string | undefined) || detectVideoContentType(filePath);\n const descriptionContext = args.context as string | undefined;\n\n if (args[\"dry-run\"]) {\n const fileStats = await stat(filePath);\n const originalFilename = basename(filePath);\n writeJson({\n ok: true,\n dryRun: true,\n operation: \"videos.upload\",\n params: { file: filePath, contentType, sizeBytes: fileStats.size, originalFilename, descriptionContext },\n });\n return;\n }\n\n const { videoId } = await uploadLocalVideo({ file: filePath, contentType, descriptionContext });\n\n writeJson({\n ok: true,\n data: { videoId },\n hints: descriptionContext\n ? undefined\n : [\n \"No --context given. Analysis runs on the frames and audio alone, so who is on camera and which campaign this belongs to will be guessed. Pass --context next time.\",\n ],\n });\n } catch (err) {\n if (err instanceof ApiError) {\n writeJson({ ok: false, error: { code: err.code, message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  mappingCommandFor,
3
3
  proposeMappingFromTemplate
4
- } from "./chunk-SSJK7FEV.js";
5
- import "./chunk-EDLZGTGN.js";
4
+ } from "./chunk-4PDHHHUJ.js";
5
+ import "./chunk-NYIGXDUG.js";
6
6
  import {
7
7
  parseApiError
8
8
  } from "./chunk-GX6VAHY7.js";
@@ -15,6 +15,7 @@ import {
15
15
  writeAdsJson,
16
16
  writeJsonEnvelope
17
17
  } from "./chunk-VFIOJD5M.js";
18
+ import "./chunk-HR6IWNKE.js";
18
19
  import "./chunk-NE4F3FHN.js";
19
20
  import {
20
21
  ApiError,
@@ -124,4 +125,4 @@ Examples:
124
125
  export {
125
126
  urlOptionsCommand
126
127
  };
127
- //# sourceMappingURL=url-options-GGXAL3J4.js.map
128
+ //# sourceMappingURL=url-options-JOKU46F2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/ads/google/url-options.ts","../src/commands/ads/google/mapping-hints.ts"],"sourcesContent":["import { type GoogleUrlOptionsResponse, urlOptionsHints } from \"@baker/api/ads-google\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { getManagerIdForCustomer } from \"../cache.ts\";\nimport { resolveCustomerId, writeAdsJson, writeJsonEnvelope } from \"../output.ts\";\nimport { parseApiError } from \"./error-parser.ts\";\nimport { mappingHints } from \"./mapping-hints.ts\";\n\nregisterSchema({\n command: \"ads.google.url-options\",\n description:\n \"Report the Google Ads URL/tracking options in force: the account-level final URL suffix and tracking template, plus every campaign that overrides them. Every value is tagged set | not_set | not_read, so an unread level is never mistaken for an unset one. Read this before answering any UTM / tracking-parameter question. Compact by default: only overriding campaigns are listed; --full lists every campaign read.\",\n args: {\n \"customer-id\": {\n type: \"string\",\n description: \"Google Ads customer ID (10 digits, no dashes). Falls back to BAKER_GOOGLE_ADS_CUSTOMER_ID env var.\",\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"List every campaign read, including those with no override of their own.\",\n required: false,\n },\n \"no-cache\": { type: \"boolean\", description: \"Skip the read cache\", required: false },\n },\n});\n\nexport const urlOptionsCommand = defineCommand({\n meta: {\n name: \"url-options\",\n description: `Show the URL/tracking options in force — account-level final URL suffix and tracking template, plus campaign overrides.\n\nStart here for any \"add utm_… / tracking parameter / agency tag\" question: it tells you which level already carries one.\nEach value is tagged: set | not_set (Google carries no value there) | not_read (never observed — NOT a finding).\nJudgment on which level to use and what to put in it: /google-ads-playbook → 18-naming-utm.md.\n\nExamples:\n baker ads google url-options --customer-id 1234567890\n baker ads google url-options --customer-id 1234567890 --full`,\n },\n args: {\n \"customer-id\": { type: \"string\", description: \"Google Ads customer ID (10 digits)\", required: false },\n full: { type: \"boolean\", description: \"List every campaign read, not only the overriding ones\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip the read cache\", required: false },\n },\n run: async ({ args }) => {\n const customerId = await resolveCustomerId(args);\n try {\n const managerId = getManagerIdForCustomer(customerId);\n const data = await apiPost<GoogleUrlOptionsResponse>(\"/api/ads/google/url-options\", {\n customerId,\n ...(managerId ? { managerId } : {}),\n ...(args.full ? { full: true } : {}),\n ...(args[\"no-cache\"] ? { skipCache: true } : {}),\n });\n const hints = [...urlOptionsHints(data), ...mappingHints(data)];\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n if (err instanceof ApiError) {\n // `err.code` is what tells `parseApiError` a missing Google Ads connection\n // apart from a fixable query error. Dropped, a never-connected account gets\n // the query-correction path instead — and since the query here is empty, the\n // \"add a LIMIT\" rule matches and hands the agent a `correctedCommand` it is\n // told to run, sending it off to execute an empty GAQL query instead of\n // asking the user to connect.\n writeAdsJson(parseApiError(err.message, \"\", customerId, err.code));\n process.exit(1);\n }\n writeAdsJson({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n","/**\n * The bridge between a Google tracking template and Baker's reading of it.\n *\n * These two facts sat one command apart and nothing joined them: `url-options`\n * reports that the account's URLs carry `searchword={keyword}`, and\n * `baker analytics map` is what makes Baker read `searchword` as a keyword.\n * Until it is told, the values are not stored at all — only the fact that the\n * name appeared — so every keyword report for that account is empty and reads\n * as \"this campaign brought no keywords\" rather than \"nobody has said what\n * `searchword` is\".\n *\n * The template is the client's own answer, already written down, so this is\n * naming what arrives rather than proposing a change to their account — which\n * `baker analytics` refuses to do and this does not do either.\n */\nimport type { GoogleUrlOptionsResponse } from \"@baker/api/ads-google\";\nimport type { AdParamRole } from \"@baker/api/analytics\";\nimport { mappingCommandFor, proposeMappingFromTemplate } from \"@baker/api/analytics\";\n\n/** Every template and suffix this report actually observed, at any level. */\nfunction observedTemplates(report: GoogleUrlOptionsResponse): string[] {\n const values = [\n report.account.final_url_suffix,\n report.account.tracking_url_template,\n ...report.campaigns.overrides.flatMap((campaign) => [campaign.final_url_suffix, campaign.tracking_url_template]),\n ];\n return values.flatMap((value) => (value.state === \"set\" ? [value.value] : []));\n}\n\nexport function mappingHints(report: GoogleUrlOptionsResponse): string[] {\n const proposed: Record<string, AdParamRole> = {};\n const unexplained = new Map<string, string>();\n\n for (const template of observedTemplates(report)) {\n const proposal = proposeMappingFromTemplate(template, \"google\");\n Object.assign(proposed, proposal.proposed);\n for (const param of proposal.unexplained) unexplained.set(param.name, param.value);\n }\n\n const hints: string[] = [];\n const command = mappingCommandFor(\"google\", proposed);\n if (command !== \"\") {\n hints.push(\n `These URLs carry campaign parameters Baker does not read yet: ${Object.keys(proposed).join(\", \")}. Until it is told, their values are not stored at all — only that the name appeared — so every keyword and campaign breakdown for this account will come back empty rather than wrong. The placeholders say what each one is, so run: ${command}`,\n );\n }\n if (unexplained.size > 0) {\n const named = [...unexplained].map(([name, value]) => `${name}=${value}`).join(\", \");\n hints.push(\n `These carry something no placeholder explains: ${named}. Do not guess — if it is a dimension, map it by name with \\`baker analytics map --platform google --set <name>=<role>\\`; if it is a session token or a cache buster, \\`=ignore\\` stops it being listed as something to deal with.`,\n );\n }\n return hints;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/ads/google/url-options.ts","../src/commands/ads/google/mapping-hints.ts"],"sourcesContent":["import { type GoogleUrlOptionsResponse, urlOptionsHints } from \"@baker/api/ads-google\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { getManagerIdForCustomer } from \"../cache.ts\";\nimport { resolveCustomerId, writeAdsJson, writeJsonEnvelope } from \"../output.ts\";\nimport { parseApiError } from \"./error-parser.ts\";\nimport { mappingHints } from \"./mapping-hints.ts\";\n\nregisterSchema({\n command: \"ads.google.url-options\",\n description:\n \"Report the Google Ads URL/tracking options in force: the account-level final URL suffix and tracking template, plus every campaign that overrides them. Every value is tagged set | not_set | not_read, so an unread level is never mistaken for an unset one. Read this before answering any UTM / tracking-parameter question. Compact by default: only overriding campaigns are listed; --full lists every campaign read.\",\n args: {\n \"customer-id\": {\n type: \"string\",\n description: \"Google Ads customer ID (10 digits, no dashes). Falls back to BAKER_GOOGLE_ADS_CUSTOMER_ID env var.\",\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"List every campaign read, including those with no override of their own.\",\n required: false,\n },\n \"no-cache\": { type: \"boolean\", description: \"Skip the read cache\", required: false },\n },\n});\n\nexport const urlOptionsCommand = defineCommand({\n meta: {\n name: \"url-options\",\n description: `Show the URL/tracking options in force — account-level final URL suffix and tracking template, plus campaign overrides.\n\nStart here for any \"add utm_… / tracking parameter / agency tag\" question: it tells you which level already carries one.\nEach value is tagged: set | not_set (Google carries no value there) | not_read (never observed — NOT a finding).\nJudgment on which level to use and what to put in it: /google-ads-playbook → 18-naming-utm.md.\n\nExamples:\n baker ads google url-options --customer-id 1234567890\n baker ads google url-options --customer-id 1234567890 --full`,\n },\n args: {\n \"customer-id\": { type: \"string\", description: \"Google Ads customer ID (10 digits)\", required: false },\n full: { type: \"boolean\", description: \"List every campaign read, not only the overriding ones\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip the read cache\", required: false },\n },\n run: async ({ args }) => {\n const customerId = await resolveCustomerId(args);\n try {\n const managerId = getManagerIdForCustomer(customerId);\n const data = await apiPost<GoogleUrlOptionsResponse>(\"/api/ads/google/url-options\", {\n customerId,\n ...(managerId ? { managerId } : {}),\n ...(args.full ? { full: true } : {}),\n ...(args[\"no-cache\"] ? { skipCache: true } : {}),\n });\n const hints = [...urlOptionsHints(data), ...mappingHints(data)];\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n if (err instanceof ApiError) {\n // `err.code` is what tells `parseApiError` a missing Google Ads connection\n // apart from a fixable query error. Dropped, a never-connected account gets\n // the query-correction path instead — and since the query here is empty, the\n // \"add a LIMIT\" rule matches and hands the agent a `correctedCommand` it is\n // told to run, sending it off to execute an empty GAQL query instead of\n // asking the user to connect.\n writeAdsJson(parseApiError(err.message, \"\", customerId, err.code));\n process.exit(1);\n }\n writeAdsJson({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n","/**\n * The bridge between a Google tracking template and Baker's reading of it.\n *\n * These two facts sat one command apart and nothing joined them: `url-options`\n * reports that the account's URLs carry `searchword={keyword}`, and\n * `baker analytics map` is what makes Baker read `searchword` as a keyword.\n * Until it is told, the values are not stored at all — only the fact that the\n * name appeared — so every keyword report for that account is empty and reads\n * as \"this campaign brought no keywords\" rather than \"nobody has said what\n * `searchword` is\".\n *\n * The template is the client's own answer, already written down, so this is\n * naming what arrives rather than proposing a change to their account — which\n * `baker analytics` refuses to do and this does not do either.\n */\nimport type { GoogleUrlOptionsResponse } from \"@baker/api/ads-google\";\nimport type { AdParamRole } from \"@baker/api/analytics\";\nimport { mappingCommandFor, proposeMappingFromTemplate } from \"@baker/api/analytics\";\n\n/** Every template and suffix this report actually observed, at any level. */\nfunction observedTemplates(report: GoogleUrlOptionsResponse): string[] {\n const values = [\n report.account.final_url_suffix,\n report.account.tracking_url_template,\n ...report.campaigns.overrides.flatMap((campaign) => [campaign.final_url_suffix, campaign.tracking_url_template]),\n ];\n return values.flatMap((value) => (value.state === \"set\" ? [value.value] : []));\n}\n\nexport function mappingHints(report: GoogleUrlOptionsResponse): string[] {\n const proposed: Record<string, AdParamRole> = {};\n const unexplained = new Map<string, string>();\n\n for (const template of observedTemplates(report)) {\n const proposal = proposeMappingFromTemplate(template, \"google\");\n Object.assign(proposed, proposal.proposed);\n for (const param of proposal.unexplained) unexplained.set(param.name, param.value);\n }\n\n const hints: string[] = [];\n const command = mappingCommandFor(\"google\", proposed);\n if (command !== \"\") {\n hints.push(\n `These URLs carry campaign parameters Baker does not read yet: ${Object.keys(proposed).join(\", \")}. Until it is told, their values are not stored at all — only that the name appeared — so every keyword and campaign breakdown for this account will come back empty rather than wrong. The placeholders say what each one is, so run: ${command}`,\n );\n }\n if (unexplained.size > 0) {\n const named = [...unexplained].map(([name, value]) => `${name}=${value}`).join(\", \");\n hints.push(\n `These carry something no placeholder explains: ${named}. Do not guess — if it is a dimension, map it by name with \\`baker analytics map --platform google --set <name>=<role>\\`; if it is a session token or a cache buster, \\`=ignore\\` stops it being listed as something to deal with.`,\n );\n }\n return hints;\n}\n"],"mappings":"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","names":[]}
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  handleLinkedinError,
3
3
  resolveAccountIdArg
4
- } from "./chunk-CSYSX4D2.js";
4
+ } from "./chunk-N4LAYIIN.js";
5
5
  import {
6
6
  writeAdsJson
7
7
  } from "./chunk-VFIOJD5M.js";
8
8
  import {
9
9
  LINKEDIN_TRACKING_PARAMS_AD_SET_MAX
10
- } from "./chunk-XF4JUKVF.js";
10
+ } from "./chunk-7EPXVICM.js";
11
11
  import "./chunk-GXDLWBOY.js";
12
12
  import "./chunk-TEINLN64.js";
13
13
  import "./chunk-ZJWUBJYQ.js";
14
+ import "./chunk-HR6IWNKE.js";
14
15
  import "./chunk-NE4F3FHN.js";
15
16
  import {
16
17
  apiGet
@@ -95,4 +96,4 @@ export {
95
96
  hints,
96
97
  urlParamsCommand
97
98
  };
98
- //# sourceMappingURL=url-params-3EFGVTZZ.js.map
99
+ //# sourceMappingURL=url-params-7U2XMOWF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/ads/linkedin/url-params.ts"],"sourcesContent":["import { LINKEDIN_TRACKING_PARAMS_AD_SET_MAX, type LinkedinTrackingParametersResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../../client.ts\";\nimport { writeAdsJson } from \"../output.ts\";\nimport { handleLinkedinError, resolveAccountIdArg } from \"./shared.ts\";\n\n/**\n * Reads what is set today, at both levels. Its reason to exist is the one thing\n * the write commands cannot tell you: LinkedIn CONCATENATES the ad account's\n * tracking parameters with each ad set's, so a key set at both lands in the\n * served URL twice — and nothing surfaces that until a report comes back split\n * across two values of the same parameter.\n *\n * Account-only by default: there is no batch read for `adTrackingParameters`,\n * so every ad set costs its own call against the same rate limit the staged\n * writes use. `--ad-sets` opts into the sweep.\n */\nexport const urlParamsCommand = defineCommand({\n meta: {\n name: \"url-params\",\n description: `Read the URL tracking parameters in effect — the ad account's, optionally every ad set's, and the keys set at BOTH (which LinkedIn appends twice).\n\nStart here before setting UTMs on an ad set: whatever the account already carries is appended on top of it.\n\nExamples:\n baker ads linkedin url-params — the ad account's parameters\n baker ads linkedin url-params --ad-sets — plus every ad set's, and the collisions\n baker ads linkedin url-params --campaign-ids 123456,789012 — plus just those ad sets'\n baker ads linkedin url-params --ad-sets --collisions-only — just what would land twice`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"ad-sets\": {\n type: \"boolean\",\n description: `Also read every ad set's parameters (one call each, first ${LINKEDIN_TRACKING_PARAMS_AD_SET_MAX})`,\n },\n \"campaign-ids\": { type: \"string\", description: \"Comma-separated ad set ids to read instead of all of them\" },\n \"collisions-only\": { type: \"boolean\", description: \"Report only the keys set at more than one level\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"campaign-ids\"]) params[\"campaign-ids\"] = String(args[\"campaign-ids\"]);\n if (args[\"ad-sets\"]) params[\"all-ad-sets\"] = \"true\";\n const data = await apiGet<LinkedinTrackingParametersResponse>(\"/api/ads/linkedin/url-params\", params);\n const examinedAdSets = Boolean(args[\"ad-sets\"] || args[\"campaign-ids\"]);\n const notes = hints(data, examinedAdSets);\n writeAdsJson({\n ok: true,\n data: args[\"collisions-only\"] ? { collisions: data.collisions, adSetCoverage: data.adSetCoverage } : data,\n ...(notes.length > 0 ? { hints: notes } : {}),\n });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\n/**\n * A partial sweep reporting no collisions is the failure this guards: it reads\n * identically to a clean account, so say which of the two it is.\n */\nexport function hints(data: LinkedinTrackingParametersResponse, examinedAdSets: boolean): string[] {\n const out: string[] = [];\n // First, and before anything that could be read as a fact about the account:\n // a level that could not be read carries no information, and every other\n // line below would otherwise describe it as empty. The wording covers both\n // reasons a level lands here — the read failed, or the id names nothing —\n // because the conclusion is the same and only one of them is knowable here.\n if (data.unreadable.length > 0) {\n out.push(\n `could NOT read ${data.unreadable.map((entry) => (entry.level === \"account\" ? \"the ad account\" : `ad set ${entry.id}`)).join(\", \")} — treat that as unknown, not as empty. Do not stage url-params against it: either it does not exist, or it holds parameters this write would replace unseen. First reason: ${data.unreadable[0]?.reason ?? \"unknown\"}`,\n );\n }\n if (data.collisions.length > 0) {\n out.push(\n `${data.collisions.map((c) => c.key).join(\", \")} set at BOTH the account and an ad set — LinkedIn appends both, so each lands twice in the served URL. Clear it at one level with \\`account url-params\\` or \\`campaigns url-params --clear\\`.`,\n );\n }\n if (data.adSetCoverage?.capped) {\n out.push(\n `only ${data.adSetCoverage.examined} of ${data.adSetCoverage.total} ad sets were read — the collisions above cover those, not the rest. Narrow with --campaign-ids to check the others.`,\n );\n }\n if (!examinedAdSets) {\n out.push(\"only the ad account was read — pass --ad-sets to find keys an ad set sets on top of these\");\n }\n // \"Nothing is tagged\" is a claim about the account, so it may only be made\n // when every level examined actually answered.\n const allAnswered = data.unreadable.length === 0;\n const nothingSet = data.account.state === \"not_set\" && data.adSets.every((adSet) => adSet.state === \"not_set\");\n if (allAnswered && nothingSet) {\n out.push(\"nothing is tagged — set the constants once with `baker ads linkedin account url-params`\");\n }\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAgBvB,IAAM,mBAAmB,cAAc;AAAA,EAC5C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASf;AAAA,EACA,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,kDAAkD;AAAA,IAC/F,eAAe,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,IACvE,WAAW;AAAA,MACT,MAAM;AAAA,MACN,aAAa,6DAA6D,mCAAmC;AAAA,IAC/G;AAAA,IACA,gBAAgB,EAAE,MAAM,UAAU,aAAa,4DAA4D;AAAA,IAC3G,mBAAmB,EAAE,MAAM,WAAW,aAAa,kDAAkD;AAAA,EACvG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,oBAAoB,IAAI;AAC1C,QAAI;AACF,YAAM,SAAiC,EAAE,cAAc,UAAU;AACjE,UAAI,KAAK,cAAc,EAAG,QAAO,cAAc,IAAI,OAAO,KAAK,cAAc,CAAC;AAC9E,UAAI,KAAK,SAAS,EAAG,QAAO,aAAa,IAAI;AAC7C,YAAM,OAAO,MAAM,OAA2C,gCAAgC,MAAM;AACpG,YAAM,iBAAiB,QAAQ,KAAK,SAAS,KAAK,KAAK,cAAc,CAAC;AACtE,YAAM,QAAQ,MAAM,MAAM,cAAc;AACxC,mBAAa;AAAA,QACX,IAAI;AAAA,QACJ,MAAM,KAAK,iBAAiB,IAAI,EAAE,YAAY,KAAK,YAAY,eAAe,KAAK,cAAc,IAAI;AAAA,QACrG,GAAI,MAAM,SAAS,IAAI,EAAE,OAAO,MAAM,IAAI,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;AAMM,SAAS,MAAM,MAA0C,gBAAmC;AACjG,QAAM,MAAgB,CAAC;AAMvB,MAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,QAAI;AAAA,MACF,kBAAkB,KAAK,WAAW,IAAI,CAAC,UAAW,MAAM,UAAU,YAAY,mBAAmB,UAAU,MAAM,EAAE,EAAG,EAAE,KAAK,IAAI,CAAC,oLAA+K,KAAK,WAAW,CAAC,GAAG,UAAU,SAAS;AAAA,IAC1V;AAAA,EACF;AACA,MAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,QAAI;AAAA,MACF,GAAG,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,IACjD;AAAA,EACF;AACA,MAAI,KAAK,eAAe,QAAQ;AAC9B,QAAI;AAAA,MACF,QAAQ,KAAK,cAAc,QAAQ,OAAO,KAAK,cAAc,KAAK;AAAA,IACpE;AAAA,EACF;AACA,MAAI,CAAC,gBAAgB;AACnB,QAAI,KAAK,gGAA2F;AAAA,EACtG;AAGA,QAAM,cAAc,KAAK,WAAW,WAAW;AAC/C,QAAM,aAAa,KAAK,QAAQ,UAAU,aAAa,KAAK,OAAO,MAAM,CAAC,UAAU,MAAM,UAAU,SAAS;AAC7G,MAAI,eAAe,YAAY;AAC7B,QAAI,KAAK,8FAAyF;AAAA,EACpG;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/commands/ads/linkedin/url-params.ts"],"sourcesContent":["import { LINKEDIN_TRACKING_PARAMS_AD_SET_MAX, type LinkedinTrackingParametersResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../../client.ts\";\nimport { writeAdsJson } from \"../output.ts\";\nimport { handleLinkedinError, resolveAccountIdArg } from \"./shared.ts\";\n\n/**\n * Reads what is set today, at both levels. Its reason to exist is the one thing\n * the write commands cannot tell you: LinkedIn CONCATENATES the ad account's\n * tracking parameters with each ad set's, so a key set at both lands in the\n * served URL twice — and nothing surfaces that until a report comes back split\n * across two values of the same parameter.\n *\n * Account-only by default: there is no batch read for `adTrackingParameters`,\n * so every ad set costs its own call against the same rate limit the staged\n * writes use. `--ad-sets` opts into the sweep.\n */\nexport const urlParamsCommand = defineCommand({\n meta: {\n name: \"url-params\",\n description: `Read the URL tracking parameters in effect — the ad account's, optionally every ad set's, and the keys set at BOTH (which LinkedIn appends twice).\n\nStart here before setting UTMs on an ad set: whatever the account already carries is appended on top of it.\n\nExamples:\n baker ads linkedin url-params — the ad account's parameters\n baker ads linkedin url-params --ad-sets — plus every ad set's, and the collisions\n baker ads linkedin url-params --campaign-ids 123456,789012 — plus just those ad sets'\n baker ads linkedin url-params --ad-sets --collisions-only — just what would land twice`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"ad-sets\": {\n type: \"boolean\",\n description: `Also read every ad set's parameters (one call each, first ${LINKEDIN_TRACKING_PARAMS_AD_SET_MAX})`,\n },\n \"campaign-ids\": { type: \"string\", description: \"Comma-separated ad set ids to read instead of all of them\" },\n \"collisions-only\": { type: \"boolean\", description: \"Report only the keys set at more than one level\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"campaign-ids\"]) params[\"campaign-ids\"] = String(args[\"campaign-ids\"]);\n if (args[\"ad-sets\"]) params[\"all-ad-sets\"] = \"true\";\n const data = await apiGet<LinkedinTrackingParametersResponse>(\"/api/ads/linkedin/url-params\", params);\n const examinedAdSets = Boolean(args[\"ad-sets\"] || args[\"campaign-ids\"]);\n const notes = hints(data, examinedAdSets);\n writeAdsJson({\n ok: true,\n data: args[\"collisions-only\"] ? { collisions: data.collisions, adSetCoverage: data.adSetCoverage } : data,\n ...(notes.length > 0 ? { hints: notes } : {}),\n });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\n/**\n * A partial sweep reporting no collisions is the failure this guards: it reads\n * identically to a clean account, so say which of the two it is.\n */\nexport function hints(data: LinkedinTrackingParametersResponse, examinedAdSets: boolean): string[] {\n const out: string[] = [];\n // First, and before anything that could be read as a fact about the account:\n // a level that could not be read carries no information, and every other\n // line below would otherwise describe it as empty. The wording covers both\n // reasons a level lands here — the read failed, or the id names nothing —\n // because the conclusion is the same and only one of them is knowable here.\n if (data.unreadable.length > 0) {\n out.push(\n `could NOT read ${data.unreadable.map((entry) => (entry.level === \"account\" ? \"the ad account\" : `ad set ${entry.id}`)).join(\", \")} — treat that as unknown, not as empty. Do not stage url-params against it: either it does not exist, or it holds parameters this write would replace unseen. First reason: ${data.unreadable[0]?.reason ?? \"unknown\"}`,\n );\n }\n if (data.collisions.length > 0) {\n out.push(\n `${data.collisions.map((c) => c.key).join(\", \")} set at BOTH the account and an ad set — LinkedIn appends both, so each lands twice in the served URL. Clear it at one level with \\`account url-params\\` or \\`campaigns url-params --clear\\`.`,\n );\n }\n if (data.adSetCoverage?.capped) {\n out.push(\n `only ${data.adSetCoverage.examined} of ${data.adSetCoverage.total} ad sets were read — the collisions above cover those, not the rest. Narrow with --campaign-ids to check the others.`,\n );\n }\n if (!examinedAdSets) {\n out.push(\"only the ad account was read — pass --ad-sets to find keys an ad set sets on top of these\");\n }\n // \"Nothing is tagged\" is a claim about the account, so it may only be made\n // when every level examined actually answered.\n const allAnswered = data.unreadable.length === 0;\n const nothingSet = data.account.state === \"not_set\" && data.adSets.every((adSet) => adSet.state === \"not_set\");\n if (allAnswered && nothingSet) {\n out.push(\"nothing is tagged — set the constants once with `baker ads linkedin account url-params`\");\n }\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAgBvB,IAAM,mBAAmB,cAAc;AAAA,EAC5C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASf;AAAA,EACA,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,kDAAkD;AAAA,IAC/F,eAAe,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,IACvE,WAAW;AAAA,MACT,MAAM;AAAA,MACN,aAAa,6DAA6D,mCAAmC;AAAA,IAC/G;AAAA,IACA,gBAAgB,EAAE,MAAM,UAAU,aAAa,4DAA4D;AAAA,IAC3G,mBAAmB,EAAE,MAAM,WAAW,aAAa,kDAAkD;AAAA,EACvG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,oBAAoB,IAAI;AAC1C,QAAI;AACF,YAAM,SAAiC,EAAE,cAAc,UAAU;AACjE,UAAI,KAAK,cAAc,EAAG,QAAO,cAAc,IAAI,OAAO,KAAK,cAAc,CAAC;AAC9E,UAAI,KAAK,SAAS,EAAG,QAAO,aAAa,IAAI;AAC7C,YAAM,OAAO,MAAM,OAA2C,gCAAgC,MAAM;AACpG,YAAM,iBAAiB,QAAQ,KAAK,SAAS,KAAK,KAAK,cAAc,CAAC;AACtE,YAAM,QAAQ,MAAM,MAAM,cAAc;AACxC,mBAAa;AAAA,QACX,IAAI;AAAA,QACJ,MAAM,KAAK,iBAAiB,IAAI,EAAE,YAAY,KAAK,YAAY,eAAe,KAAK,cAAc,IAAI;AAAA,QACrG,GAAI,MAAM,SAAS,IAAI,EAAE,OAAO,MAAM,IAAI,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;AAMM,SAAS,MAAM,MAA0C,gBAAmC;AACjG,QAAM,MAAgB,CAAC;AAMvB,MAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,QAAI;AAAA,MACF,kBAAkB,KAAK,WAAW,IAAI,CAAC,UAAW,MAAM,UAAU,YAAY,mBAAmB,UAAU,MAAM,EAAE,EAAG,EAAE,KAAK,IAAI,CAAC,oLAA+K,KAAK,WAAW,CAAC,GAAG,UAAU,SAAS;AAAA,IAC1V;AAAA,EACF;AACA,MAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,QAAI;AAAA,MACF,GAAG,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,IACjD;AAAA,EACF;AACA,MAAI,KAAK,eAAe,QAAQ;AAC9B,QAAI;AAAA,MACF,QAAQ,KAAK,cAAc,QAAQ,OAAO,KAAK,cAAc,KAAK;AAAA,IACpE;AAAA,EACF;AACA,MAAI,CAAC,gBAAgB;AACnB,QAAI,KAAK,gGAA2F;AAAA,EACtG;AAGA,QAAM,cAAc,KAAK,WAAW,WAAW;AAC/C,QAAM,aAAa,KAAK,QAAQ,UAAU,aAAa,KAAK,OAAO,MAAM,CAAC,UAAU,MAAM,UAAU,SAAS;AAC7G,MAAI,eAAe,YAAY;AAC7B,QAAI,KAAK,8FAAyF;AAAA,EACpG;AACA,SAAO;AACT;","names":[]}
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  outputRatioWarningsFor
3
- } from "./chunk-YK32GUBN.js";
3
+ } from "./chunk-KMKEYI37.js";
4
4
  import {
5
5
  exitOnPrepareError,
6
6
  prepareCanvas
7
- } from "./chunk-T2PC5AVH.js";
7
+ } from "./chunk-ASI4P6X2.js";
8
8
  import "./chunk-4QEY2L6U.js";
9
- import "./chunk-QRP3PXWN.js";
10
- import "./chunk-3IBYKLXR.js";
9
+ import "./chunk-VL43TNIP.js";
10
+ import "./chunk-ZDMTXQ2Q.js";
11
11
  import "./chunk-F2S5BLPE.js";
12
12
  import "./chunk-WTOYCUKH.js";
13
13
  import "./chunk-DZSIUEGH.js";
14
14
  import {
15
15
  defaultRegistry,
16
16
  validateCanvasDeep
17
- } from "./chunk-WNRV4QH7.js";
18
- import "./chunk-GKZ2WU75.js";
19
- import "./chunk-W3B4BHQU.js";
17
+ } from "./chunk-LYQJ4PZW.js";
18
+ import "./chunk-FPOGPFAG.js";
20
19
  import "./chunk-NCWCZY5P.js";
21
20
  import "./chunk-DGCUPJZD.js";
21
+ import "./chunk-W3B4BHQU.js";
22
22
  import "./chunk-PZXCWSKV.js";
23
23
  import "./chunk-CAMX6OHF.js";
24
24
  import "./chunk-RX6F3GEA.js";
@@ -28,10 +28,11 @@ import "./chunk-VAJBWA2U.js";
28
28
  import "./chunk-HRYOZUSK.js";
29
29
  import "./chunk-VVZBBKRC.js";
30
30
  import "./chunk-YBMVHGY3.js";
31
- import "./chunk-XF4JUKVF.js";
31
+ import "./chunk-7EPXVICM.js";
32
32
  import "./chunk-GXDLWBOY.js";
33
33
  import "./chunk-TEINLN64.js";
34
34
  import "./chunk-ZJWUBJYQ.js";
35
+ import "./chunk-HR6IWNKE.js";
35
36
  import "./chunk-NE4F3FHN.js";
36
37
  import "./chunk-IFWP3ZDO.js";
37
38
  import "./chunk-NAWWC5I3.js";
@@ -86,4 +87,4 @@ var validateCommand = defineCommand({
86
87
  export {
87
88
  validateCommand
88
89
  };
89
- //# sourceMappingURL=validate-UMHHNTVU.js.map
90
+ //# sourceMappingURL=validate-7YPOUKPB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/canvas/validate.ts"],"sourcesContent":["import path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport { defaultRegistry, validateCanvasDeep } from \"../../engine/index.ts\";\nimport { outputRatioWarningsFor } from \"./output-ratio.ts\";\nimport { exitOnPrepareError, type PreparedCanvas, prepareCanvas } from \"./prepare-canvas.ts\";\n\nexport const validateCommand = defineCommand({\n meta: {\n name: \"validate\",\n description:\n \"Validate a canvas JSON file (no execution). Brings the canvas up to date with its prompt.json first (prompt.json and, for a video, scenes/*.json edits are written into the canvas, exactly as `run` does), then checks it: a per-node cost preview, each node's deep validators (composition meta checks for hyperframe_render/_snapshot), and each generator prompt measured with its {{slots}} filled against the model's character cap (PROMPT_OVER_MODEL_LIMIT).\",\n },\n args: { file: { type: \"positional\", required: true, description: \"Path to canvas JSON\" } },\n async run({ args }) {\n const filePath = path.resolve(String(args.file));\n let prepared: PreparedCanvas;\n try {\n prepared = await prepareCanvas(filePath, { gate: true, log: (line) => process.stderr.write(`${line}\\n`) });\n } catch (e) {\n exitOnPrepareError(e);\n }\n\n const result = await validateCanvasDeep(prepared.canvas, defaultRegistry());\n if (!result.ok) {\n process.stderr.write(`${JSON.stringify({ ok: false, error: { code: \"validation\", issues: result.issues } }, null, 2)}\\n`);\n process.exit(2);\n return;\n }\n\n // Warnings are advisory: the canvas is valid and runnable, so exit 0. They flag\n // likely-wrong-but-legal config (a missing element reference, a scene span past the\n // assigned model's cap) the operator should review before billing.\n process.stdout.write(\n `${JSON.stringify(\n {\n ok: true,\n total_nodes: result.canvas.nodes.length,\n estimated_credits: result.estimatedCredits,\n cost_preview: result.perNodeCredits ?? [],\n style_projection: prepared.projections.style,\n scene_projection: prepared.projections.scenes,\n canvas_updated: prepared.written,\n normalized_paths: prepared.rewrites,\n warnings: [...(result.warnings ?? []), ...(await outputRatioWarningsFor(prepared.canvas, filePath))],\n },\n null,\n 2,\n )}\\n`,\n );\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAKvB,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,sBAAsB,EAAE;AAAA,EACzF,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,WAAW,KAAK,QAAQ,OAAO,KAAK,IAAI,CAAC;AAC/C,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,cAAc,UAAU,EAAE,MAAM,MAAM,KAAK,CAAC,SAAS,QAAQ,OAAO,MAAM,GAAG,IAAI;AAAA,CAAI,EAAE,CAAC;AAAA,IAC3G,SAAS,GAAG;AACV,yBAAmB,CAAC;AAAA,IACtB;AAEA,UAAM,SAAS,MAAM,mBAAmB,SAAS,QAAQ,gBAAgB,CAAC;AAC1E,QAAI,CAAC,OAAO,IAAI;AACd,cAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,cAAc,QAAQ,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AACxH,cAAQ,KAAK,CAAC;AACd;AAAA,IACF;AAKA,YAAQ,OAAO;AAAA,MACb,GAAG,KAAK;AAAA,QACN;AAAA,UACE,IAAI;AAAA,UACJ,aAAa,OAAO,OAAO,MAAM;AAAA,UACjC,mBAAmB,OAAO;AAAA,UAC1B,cAAc,OAAO,kBAAkB,CAAC;AAAA,UACxC,kBAAkB,SAAS,YAAY;AAAA,UACvC,kBAAkB,SAAS,YAAY;AAAA,UACvC,gBAAgB,SAAS;AAAA,UACzB,kBAAkB,SAAS;AAAA,UAC3B,UAAU,CAAC,GAAI,OAAO,YAAY,CAAC,GAAI,GAAI,MAAM,uBAAuB,SAAS,QAAQ,QAAQ,CAAE;AAAA,QACrG;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA;AAAA,IACH;AAAA,EACF;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/commands/canvas/validate.ts"],"sourcesContent":["import path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport { defaultRegistry, validateCanvasDeep } from \"../../engine/index.ts\";\nimport { outputRatioWarningsFor } from \"./output-ratio.ts\";\nimport { exitOnPrepareError, type PreparedCanvas, prepareCanvas } from \"./prepare-canvas.ts\";\n\nexport const validateCommand = defineCommand({\n meta: {\n name: \"validate\",\n description:\n \"Validate a canvas JSON file (no execution). Brings the canvas up to date with its prompt.json first (prompt.json and, for a video, scenes/*.json edits are written into the canvas, exactly as `run` does), then checks it: a per-node cost preview, each node's deep validators (composition meta checks for hyperframe_render/_snapshot), and each generator prompt measured with its {{slots}} filled against the model's character cap (PROMPT_OVER_MODEL_LIMIT).\",\n },\n args: { file: { type: \"positional\", required: true, description: \"Path to canvas JSON\" } },\n async run({ args }) {\n const filePath = path.resolve(String(args.file));\n let prepared: PreparedCanvas;\n try {\n prepared = await prepareCanvas(filePath, { gate: true, log: (line) => process.stderr.write(`${line}\\n`) });\n } catch (e) {\n exitOnPrepareError(e);\n }\n\n const result = await validateCanvasDeep(prepared.canvas, defaultRegistry());\n if (!result.ok) {\n process.stderr.write(`${JSON.stringify({ ok: false, error: { code: \"validation\", issues: result.issues } }, null, 2)}\\n`);\n process.exit(2);\n return;\n }\n\n // Warnings are advisory: the canvas is valid and runnable, so exit 0. They flag\n // likely-wrong-but-legal config (a missing element reference, a scene span past the\n // assigned model's cap) the operator should review before billing.\n process.stdout.write(\n `${JSON.stringify(\n {\n ok: true,\n total_nodes: result.canvas.nodes.length,\n estimated_credits: result.estimatedCredits,\n cost_preview: result.perNodeCredits ?? [],\n style_projection: prepared.projections.style,\n scene_projection: prepared.projections.scenes,\n canvas_updated: prepared.written,\n normalized_paths: prepared.rewrites,\n warnings: [...(result.warnings ?? []), ...(await outputRatioWarningsFor(prepared.canvas, filePath))],\n },\n null,\n 2,\n )}\\n`,\n );\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAKvB,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,sBAAsB,EAAE;AAAA,EACzF,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,WAAW,KAAK,QAAQ,OAAO,KAAK,IAAI,CAAC;AAC/C,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,cAAc,UAAU,EAAE,MAAM,MAAM,KAAK,CAAC,SAAS,QAAQ,OAAO,MAAM,GAAG,IAAI;AAAA,CAAI,EAAE,CAAC;AAAA,IAC3G,SAAS,GAAG;AACV,yBAAmB,CAAC;AAAA,IACtB;AAEA,UAAM,SAAS,MAAM,mBAAmB,SAAS,QAAQ,gBAAgB,CAAC;AAC1E,QAAI,CAAC,OAAO,IAAI;AACd,cAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,cAAc,QAAQ,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AACxH,cAAQ,KAAK,CAAC;AACd;AAAA,IACF;AAKA,YAAQ,OAAO;AAAA,MACb,GAAG,KAAK;AAAA,QACN;AAAA,UACE,IAAI;AAAA,UACJ,aAAa,OAAO,OAAO,MAAM;AAAA,UACjC,mBAAmB,OAAO;AAAA,UAC1B,cAAc,OAAO,kBAAkB,CAAC;AAAA,UACxC,kBAAkB,SAAS,YAAY;AAAA,UACvC,kBAAkB,SAAS,YAAY;AAAA,UACvC,gBAAgB,SAAS;AAAA,UACzB,kBAAkB,SAAS;AAAA,UAC3B,UAAU,CAAC,GAAI,OAAO,YAAY,CAAC,GAAI,GAAI,MAAM,uBAAuB,SAAS,QAAQ,QAAQ,CAAE;AAAA,QACrG;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA;AAAA,IACH;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -24,16 +24,16 @@ Full guide: __tooling__/docs/tools/baker/videos.md`
24
24
  get: () => import("./get-6WEYKOY6.js").then((m) => m.getCommand),
25
25
  group: () => import("./group-EFZ3AJIE.js").then((m) => m.groupCommand),
26
26
  search: () => import("./search-OQNGSMUH.js").then((m) => m.searchCommand),
27
- upload: () => import("./upload-O6NHRPS7.js").then((m) => m.uploadCommand),
28
- ingest: () => import("./ingest-YV2NLDBE.js").then((m) => m.ingestCommand),
27
+ upload: () => import("./upload-R6CQVLKF.js").then((m) => m.uploadCommand),
28
+ ingest: () => import("./ingest-2EIKN4QC.js").then((m) => m.ingestCommand),
29
29
  fetch: () => import("./fetch-XF76JABV.js").then((m) => m.fetchCommand),
30
30
  describe: () => import("./describe-6NVOWIBE.js").then((m) => m.describeCommand),
31
31
  delete: () => import("./delete-MRM2S4Z5.js").then((m) => m.deleteCommand),
32
- retry: () => import("./retry-726GKI6V.js").then((m) => m.retryCommand),
33
- tags: () => import("./tags-FJIBBBRG.js").then((m) => m.tagsCommand)
32
+ retry: () => import("./retry-TCUBBFR5.js").then((m) => m.retryCommand),
33
+ tags: () => import("./tags-YYLNF3PK.js").then((m) => m.tagsCommand)
34
34
  }
35
35
  });
36
36
  export {
37
37
  videosCommand
38
38
  };
39
- //# sourceMappingURL=videos-YSXYGTBM.js.map
39
+ //# sourceMappingURL=videos-LICG6ACJ.js.map
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  webDepthHints
3
- } from "./chunk-OZRUJVIQ.js";
3
+ } from "./chunk-H3427GPU.js";
4
4
  import {
5
5
  handleResearchError,
6
6
  writeResearchHints,
7
7
  writeResearchJson
8
8
  } from "./chunk-WNFIJAUO.js";
9
- import "./chunk-XF4JUKVF.js";
9
+ import "./chunk-7EPXVICM.js";
10
10
  import "./chunk-GXDLWBOY.js";
11
11
  import "./chunk-TEINLN64.js";
12
12
  import "./chunk-ZJWUBJYQ.js";
13
+ import "./chunk-HR6IWNKE.js";
13
14
  import "./chunk-NE4F3FHN.js";
14
15
  import {
15
16
  apiGet,
@@ -137,4 +138,4 @@ Examples:
137
138
  export {
138
139
  webCommand
139
140
  };
140
- //# sourceMappingURL=web-IGIGVEKS.js.map
141
+ //# sourceMappingURL=web-BA2PGTWU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/research/web.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { apiGet, apiPost } from \"../../client.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { webDepthHints } from \"./hints.ts\";\nimport { handleResearchError, writeResearchHints, writeResearchJson } from \"./output.ts\";\n\nregisterSchema({\n command: \"research.web\",\n description:\n \"Search the web with AI to answer marketing questions — competitors, ICP, pricing, pain points, market trends. Three depth levels: medium (quick, default), high (thorough), xhigh (exhaustive deep research).\",\n args: {\n question: {\n type: \"string\",\n description: \"The research question to answer using live web data\",\n required: true,\n },\n depth: {\n type: \"string\",\n description: \"Research depth: medium (quick), high (thorough), xhigh (exhaustive). Default: medium\",\n required: false,\n enum: [\"medium\", \"high\", \"xhigh\"],\n },\n },\n});\n\ntype Depth = \"medium\" | \"high\" | \"xhigh\";\n\nconst TIMEOUT_MS: Record<Depth, number> = {\n medium: 180_000,\n high: 360_000,\n xhigh: 900_000,\n};\n\ninterface WebResult {\n answer: string;\n sources: Array<{ title: string; url: string }>;\n}\n\nconst FIELDS: Record<string, string> = {\n answer: \"AI-generated research answer (markdown)\",\n sources: \"Array of {title, url} sources used for grounding\",\n};\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function runDeepResearch(question: string): Promise<WebResult> {\n const { interactionId } = await apiPost<{ interactionId: string }>(\"/api/research/deep-research/start\", { question });\n\n process.stderr.write(`Deep research started (${interactionId}). Polling...\\n`);\n\n const deadline = Date.now() + TIMEOUT_MS.xhigh;\n while (Date.now() < deadline) {\n await sleep(10_000);\n const poll = await apiGet<{ status: string; result?: WebResult }>(\"/api/research/deep-research/poll\", {\n id: interactionId,\n });\n\n if (poll.status === \"completed\" && poll.result) {\n return poll.result;\n }\n if (poll.status === \"failed\" || poll.status === \"cancelled\") {\n throw new Error(`Deep research ${poll.status}`);\n }\n process.stderr.write(` status: ${poll.status}\\n`);\n }\n\n throw new Error(\"Deep research timed out\");\n}\n\nexport const webCommand = defineCommand({\n meta: {\n name: \"web\",\n description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.\n\nDepth levels:\n medium — Quick lookup using Gemini Flash with minimal thinking (default)\n high — Thorough answer using Gemini Flash with deep thinking\n xhigh — Exhaustive deep research using Gemini Deep Research (slow, use sparingly)\n\nExamples:\n baker research web \"Who are the main competitors of HubSpot CRM?\"\n baker research web \"What are the top pain points for SMB CRM buyers?\" --depth high\n baker research web \"Full competitive analysis of project management SaaS\" --depth xhigh`,\n },\n args: {\n question: { type: \"positional\", description: \"The research question\", required: true },\n depth: { type: \"string\", description: \"Research depth: medium|high|xhigh (default: medium)\", required: false },\n output: { type: \"string\", description: \"Format: json|md (default: json)\", required: false, default: \"json\" },\n },\n run: async ({ args }) => {\n const question = args.question as string;\n if (question.length < 5) {\n writeResearchJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Question must be at least 5 characters\" },\n });\n process.exit(1);\n }\n\n const depth = ((args.depth as string) || \"medium\") as Depth;\n if (![\"medium\", \"high\", \"xhigh\"].includes(depth)) {\n writeResearchJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Depth must be one of: medium, high, xhigh\" },\n });\n process.exit(1);\n }\n\n try {\n const data =\n depth === \"xhigh\"\n ? await runDeepResearch(question)\n : await apiPost<WebResult>(\"/api/research/explore\", { question, depth }, { timeoutMs: TIMEOUT_MS[depth] });\n\n const format = (args.output as string) || \"json\";\n const hints = webDepthHints({ answer: data.answer, sourceCount: data.sources.length, depth });\n if (format === \"md\") {\n process.stdout.write(`${data.answer}\\n`);\n if (data.sources.length > 0) {\n process.stdout.write(\"\\n## Sources\\n\");\n for (const s of data.sources) {\n process.stdout.write(`- [${s.title}](${s.url})\\n`);\n }\n }\n writeResearchHints(hints, format);\n return;\n }\n writeResearchJson({ ok: true, data, fields: FIELDS, hints });\n } catch (err) {\n handleResearchError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/research/web.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { apiGet, apiPost } from \"../../client.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { webDepthHints } from \"./hints.ts\";\nimport { handleResearchError, writeResearchHints, writeResearchJson } from \"./output.ts\";\n\nregisterSchema({\n command: \"research.web\",\n description:\n \"Search the web with AI to answer marketing questions — competitors, ICP, pricing, pain points, market trends. Three depth levels: medium (quick, default), high (thorough), xhigh (exhaustive deep research).\",\n args: {\n question: {\n type: \"string\",\n description: \"The research question to answer using live web data\",\n required: true,\n },\n depth: {\n type: \"string\",\n description: \"Research depth: medium (quick), high (thorough), xhigh (exhaustive). Default: medium\",\n required: false,\n enum: [\"medium\", \"high\", \"xhigh\"],\n },\n },\n});\n\ntype Depth = \"medium\" | \"high\" | \"xhigh\";\n\nconst TIMEOUT_MS: Record<Depth, number> = {\n medium: 180_000,\n high: 360_000,\n xhigh: 900_000,\n};\n\ninterface WebResult {\n answer: string;\n sources: Array<{ title: string; url: string }>;\n}\n\nconst FIELDS: Record<string, string> = {\n answer: \"AI-generated research answer (markdown)\",\n sources: \"Array of {title, url} sources used for grounding\",\n};\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function runDeepResearch(question: string): Promise<WebResult> {\n const { interactionId } = await apiPost<{ interactionId: string }>(\"/api/research/deep-research/start\", { question });\n\n process.stderr.write(`Deep research started (${interactionId}). Polling...\\n`);\n\n const deadline = Date.now() + TIMEOUT_MS.xhigh;\n while (Date.now() < deadline) {\n await sleep(10_000);\n const poll = await apiGet<{ status: string; result?: WebResult }>(\"/api/research/deep-research/poll\", {\n id: interactionId,\n });\n\n if (poll.status === \"completed\" && poll.result) {\n return poll.result;\n }\n if (poll.status === \"failed\" || poll.status === \"cancelled\") {\n throw new Error(`Deep research ${poll.status}`);\n }\n process.stderr.write(` status: ${poll.status}\\n`);\n }\n\n throw new Error(\"Deep research timed out\");\n}\n\nexport const webCommand = defineCommand({\n meta: {\n name: \"web\",\n description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.\n\nDepth levels:\n medium — Quick lookup using Gemini Flash with minimal thinking (default)\n high — Thorough answer using Gemini Flash with deep thinking\n xhigh — Exhaustive deep research using Gemini Deep Research (slow, use sparingly)\n\nExamples:\n baker research web \"Who are the main competitors of HubSpot CRM?\"\n baker research web \"What are the top pain points for SMB CRM buyers?\" --depth high\n baker research web \"Full competitive analysis of project management SaaS\" --depth xhigh`,\n },\n args: {\n question: { type: \"positional\", description: \"The research question\", required: true },\n depth: { type: \"string\", description: \"Research depth: medium|high|xhigh (default: medium)\", required: false },\n output: { type: \"string\", description: \"Format: json|md (default: json)\", required: false, default: \"json\" },\n },\n run: async ({ args }) => {\n const question = args.question as string;\n if (question.length < 5) {\n writeResearchJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Question must be at least 5 characters\" },\n });\n process.exit(1);\n }\n\n const depth = ((args.depth as string) || \"medium\") as Depth;\n if (![\"medium\", \"high\", \"xhigh\"].includes(depth)) {\n writeResearchJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Depth must be one of: medium, high, xhigh\" },\n });\n process.exit(1);\n }\n\n try {\n const data =\n depth === \"xhigh\"\n ? await runDeepResearch(question)\n : await apiPost<WebResult>(\"/api/research/explore\", { question, depth }, { timeoutMs: TIMEOUT_MS[depth] });\n\n const format = (args.output as string) || \"json\";\n const hints = webDepthHints({ answer: data.answer, sourceCount: data.sources.length, depth });\n if (format === \"md\") {\n process.stdout.write(`${data.answer}\\n`);\n if (data.sources.length > 0) {\n process.stdout.write(\"\\n## Sources\\n\");\n for (const s of data.sources) {\n process.stdout.write(`- [${s.title}](${s.url})\\n`);\n }\n }\n writeResearchHints(hints, format);\n return;\n }\n writeResearchJson({ ok: true, data, fields: FIELDS, hints });\n } catch (err) {\n handleResearchError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAM9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,MAAM,CAAC,UAAU,QAAQ,OAAO;AAAA,IAClC;AAAA,EACF;AACF,CAAC;AAID,IAAM,aAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAOA,IAAM,SAAiC;AAAA,EACrC,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAEA,eAAe,gBAAgB,UAAsC;AACnE,QAAM,EAAE,cAAc,IAAI,MAAM,QAAmC,qCAAqC,EAAE,SAAS,CAAC;AAEpH,UAAQ,OAAO,MAAM,0BAA0B,aAAa;AAAA,CAAiB;AAE7E,QAAM,WAAW,KAAK,IAAI,IAAI,WAAW;AACzC,SAAO,KAAK,IAAI,IAAI,UAAU;AAC5B,UAAM,MAAM,GAAM;AAClB,UAAM,OAAO,MAAM,OAA+C,oCAAoC;AAAA,MACpG,IAAI;AAAA,IACN,CAAC;AAED,QAAI,KAAK,WAAW,eAAe,KAAK,QAAQ;AAC9C,aAAO,KAAK;AAAA,IACd;AACA,QAAI,KAAK,WAAW,YAAY,KAAK,WAAW,aAAa;AAC3D,YAAM,IAAI,MAAM,iBAAiB,KAAK,MAAM,EAAE;AAAA,IAChD;AACA,YAAQ,OAAO,MAAM,aAAa,KAAK,MAAM;AAAA,CAAI;AAAA,EACnD;AAEA,QAAM,IAAI,MAAM,yBAAyB;AAC3C;AAEO,IAAM,aAAa,cAAc;AAAA,EACtC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWf;AAAA,EACA,MAAM;AAAA,IACJ,UAAU,EAAE,MAAM,cAAc,aAAa,yBAAyB,UAAU,KAAK;AAAA,IACrF,OAAO,EAAE,MAAM,UAAU,aAAa,uDAAuD,UAAU,MAAM;AAAA,IAC7G,QAAQ,EAAE,MAAM,UAAU,aAAa,mCAAmC,UAAU,OAAO,SAAS,OAAO;AAAA,EAC7G;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,WAAW,KAAK;AACtB,QAAI,SAAS,SAAS,GAAG;AACvB,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,yCAAyC;AAAA,MACvF,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,QAAU,KAAK,SAAoB;AACzC,QAAI,CAAC,CAAC,UAAU,QAAQ,OAAO,EAAE,SAAS,KAAK,GAAG;AAChD,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,4CAA4C;AAAA,MAC1F,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI;AACF,YAAM,OACJ,UAAU,UACN,MAAM,gBAAgB,QAAQ,IAC9B,MAAM,QAAmB,yBAAyB,EAAE,UAAU,MAAM,GAAG,EAAE,WAAW,WAAW,KAAK,EAAE,CAAC;AAE7G,YAAM,SAAU,KAAK,UAAqB;AAC1C,YAAM,QAAQ,cAAc,EAAE,QAAQ,KAAK,QAAQ,aAAa,KAAK,QAAQ,QAAQ,MAAM,CAAC;AAC5F,UAAI,WAAW,MAAM;AACnB,gBAAQ,OAAO,MAAM,GAAG,KAAK,MAAM;AAAA,CAAI;AACvC,YAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,kBAAQ,OAAO,MAAM,gBAAgB;AACrC,qBAAW,KAAK,KAAK,SAAS;AAC5B,oBAAQ,OAAO,MAAM,MAAM,EAAE,KAAK,KAAK,EAAE,GAAG;AAAA,CAAK;AAAA,UACnD;AAAA,QACF;AACA,2BAAmB,OAAO,MAAM;AAChC;AAAA,MACF;AACA,wBAAkB,EAAE,IAAI,MAAM,MAAM,QAAQ,QAAQ,MAAM,CAAC;AAAA,IAC7D,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -50,7 +50,7 @@ Full guide: __tooling__/docs/tools/baker/winning-ads.md`
50
50
  content: () => import("./content-3ZPP4SW2.js").then((m) => m.contentCommand),
51
51
  fit: () => import("./fit-UOFYFJ4Q.js").then((m) => m.fitCommand),
52
52
  unfollow: () => import("./unfollow-CBVPGPF7.js").then((m) => m.unfollowCommand),
53
- refresh: () => import("./refresh-UXQSLCR3.js").then((m) => m.refreshCommand),
53
+ refresh: () => import("./refresh-EBVJ2C6L.js").then((m) => m.refreshCommand),
54
54
  hooks: () => import("./seeds-N6FF5S4T.js").then((m) => m.hooksCommand),
55
55
  mechanisms: () => import("./seeds-N6FF5S4T.js").then((m) => m.mechanismsCommand),
56
56
  formats: () => import("./seeds-N6FF5S4T.js").then((m) => m.formatsCommand)
@@ -59,4 +59,4 @@ Full guide: __tooling__/docs/tools/baker/winning-ads.md`
59
59
  export {
60
60
  winningAdsCommand
61
61
  };
62
- //# sourceMappingURL=winning-ads-2WS7FI4E.js.map
62
+ //# sourceMappingURL=winning-ads-C6S2C5VP.js.map
@@ -15,10 +15,10 @@ import {
15
15
  stageLinkedinOps,
16
16
  stageOp,
17
17
  stageStatusChange
18
- } from "./chunk-4AUMTNVB.js";
18
+ } from "./chunk-NA63BH7V.js";
19
19
  import {
20
20
  handleLinkedinError
21
- } from "./chunk-CSYSX4D2.js";
21
+ } from "./chunk-N4LAYIIN.js";
22
22
  import {
23
23
  repeatedValues
24
24
  } from "./chunk-ERSX3MKH.js";
@@ -39,10 +39,11 @@ import {
39
39
  TEMP_REF_PREFIX,
40
40
  TRACKING_PARAM_DYNAMIC_VALUES,
41
41
  campaignExcludeCompaniesSchema
42
- } from "./chunk-XF4JUKVF.js";
42
+ } from "./chunk-7EPXVICM.js";
43
43
  import "./chunk-GXDLWBOY.js";
44
44
  import "./chunk-TEINLN64.js";
45
45
  import "./chunk-ZJWUBJYQ.js";
46
+ import "./chunk-HR6IWNKE.js";
46
47
  import "./chunk-NE4F3FHN.js";
47
48
  import {
48
49
  apiPost
@@ -1012,4 +1013,4 @@ export {
1012
1013
  leadFormsCommand,
1013
1014
  trackingParamsPayload
1014
1015
  };
1015
- //# sourceMappingURL=write-commands-5C7FUOVN.js.map
1016
+ //# sourceMappingURL=write-commands-7SJ3BOW5.js.map