@koda-sl/baker-cli 0.514.0 → 0.515.0

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 (343) hide show
  1. package/README.md +1 -1
  2. package/dist/{account-ZY655BIU.js → account-BA3IO3AN.js} +3 -3
  3. package/dist/{account-D6LEVVWT.js → account-LVJFHDA3.js} +4 -4
  4. package/dist/{account-SGK3IJ6N.js → account-PTJ6OK6Z.js} +4 -4
  5. package/dist/{account-assets-J5Z4URLQ.js → account-assets-T3VVNBUG.js} +8 -8
  6. package/dist/{account-level-4SBYYHRS.js → account-level-MPFWRPEK.js} +5 -5
  7. package/dist/{account-reads-2MSUVG46.js → account-reads-5CXFLJ5Q.js} +4 -4
  8. package/dist/{account-users-MHC7AD6K.js → account-users-B7DCJEFD.js} +4 -4
  9. package/dist/{account-writes-QQQC54WC.js → account-writes-W5EOTS7P.js} +4 -4
  10. package/dist/{accounts-FT2SRKMD.js → accounts-4R3MBNJG.js} +4 -4
  11. package/dist/{accounts-SNB65ZEW.js → accounts-5WF7VE7J.js} +4 -4
  12. package/dist/{accounts-QNE5QWBG.js → accounts-IQTEH4BX.js} +2 -2
  13. package/dist/{accounts-2O6I7YBN.js → accounts-SV7JZUCC.js} +4 -4
  14. package/dist/{accounts-K5XLEO6W.js → accounts-VPWCLF6X.js} +3 -3
  15. package/dist/{active-entities-3BAPHE4P.js → active-entities-WDPW7652.js} +3 -3
  16. package/dist/{activities-LKLPORDI.js → activities-WGPHYSFU.js} +4 -4
  17. package/dist/{ad-group-writes-CJTTUUIT.js → ad-group-writes-JL56DPC4.js} +4 -4
  18. package/dist/{ad-groups-HLGSVH74.js → ad-groups-62JPLIK3.js} +8 -8
  19. package/dist/{ad-writes-3UE3U7VE.js → ad-writes-WSKLRGB7.js} +4 -4
  20. package/dist/{ads-MAOI7S6V.js → ads-F7AUJWK7.js} +13 -13
  21. package/dist/{ads-PYNDMHUD.js → ads-JFI56MZL.js} +9 -9
  22. package/dist/{ads-HLUJB5SQ.js → ads-OV3SMLKA.js} +7 -7
  23. package/dist/{adsets-QRKICEFD.js → adsets-XH2ULWPM.js} +12 -12
  24. package/dist/{analytics-AULKYNNT.js → analytics-MJT6DS3L.js} +3 -3
  25. package/dist/{analytics-DNDTC643.js → analytics-W7EUOI2Q.js} +10 -10
  26. package/dist/{asset-writes-JLVUAVUZ.js → asset-writes-4X3AJQ4Q.js} +5 -5
  27. package/dist/{audience-size-C3YHQPZB.js → audience-size-VHXBNNIB.js} +3 -3
  28. package/dist/{audience-writes-CDKQB3SM.js → audience-writes-TXWPDJ2F.js} +4 -4
  29. package/dist/{audiences-M3A3QK52.js → audiences-B2LFKWIS.js} +4 -4
  30. package/dist/{audiences-CDDI5HR5.js → audiences-MBBXWEOI.js} +8 -8
  31. package/dist/{audiences-34IQKOGS.js → audiences-YUG5JLL4.js} +3 -3
  32. package/dist/{audit-FLPJ7GTE.js → audit-VT2WSZWM.js} +3 -3
  33. package/dist/{audit-7ED6CUTQ.js → audit-WFXS5ELM.js} +3 -3
  34. package/dist/{bid-pricing-H3M63PTW.js → bid-pricing-5F3GBSAI.js} +3 -3
  35. package/dist/{businesses-MGP2YCEU.js → businesses-24JNY46Z.js} +3 -3
  36. package/dist/{campaign-groups-IQSDKOVI.js → campaign-groups-BDCDTMBF.js} +9 -9
  37. package/dist/{campaign-writes-APAAV4ZU.js → campaign-writes-73H7G3JM.js} +4 -4
  38. package/dist/{campaign-writes-BN4PZP4Z.js → campaign-writes-FNVOHONL.js} +4 -4
  39. package/dist/{campaigns-GA34MEN2.js → campaigns-FUDZUVHN.js} +8 -8
  40. package/dist/{campaigns-K2FVD3XW.js → campaigns-J65Q4WAZ.js} +12 -12
  41. package/dist/{campaigns-HES5MDUG.js → campaigns-KXYGSH27.js} +12 -12
  42. package/dist/{campaigns-4Y3JQC2U.js → campaigns-U5FQ2VWL.js} +8 -8
  43. package/dist/{cards-A7GQVC7B.js → cards-NSNAFTEB.js} +3 -3
  44. package/dist/{catalogs-ZR7DECMG.js → catalogs-OWQGGCIO.js} +4 -4
  45. package/dist/{catalogs-TGLSJEK5.js → catalogs-VZYAATUR.js} +4 -4
  46. package/dist/{changes-VWKTM27U.js → changes-RDWMNSTK.js} +3 -3
  47. package/dist/{chatgpt-OPOD2WHB.js → chatgpt-27NEJVGF.js} +13 -13
  48. package/dist/{chunk-KUY26RCF.js → chunk-2F4DELSV.js} +2 -2
  49. package/dist/{chunk-ZRP7Y2DM.js → chunk-6DPSWLGY.js} +7 -3
  50. package/dist/chunk-6DPSWLGY.js.map +1 -0
  51. package/dist/{chunk-OR6KVLI5.js → chunk-EZSPVWLQ.js} +3 -3
  52. package/dist/{chunk-DM3Q6F5F.js → chunk-FCHZ5TNG.js} +2 -2
  53. package/dist/{chunk-XHQYFNNK.js → chunk-FQMEX3GX.js} +2 -2
  54. package/dist/{chunk-GW2WRZZA.js → chunk-GGK2CX6B.js} +2 -2
  55. package/dist/{chunk-BX6B25KK.js → chunk-GHZ6HP2X.js} +3 -3
  56. package/dist/{chunk-HMIROUFV.js → chunk-HCQJYI6X.js} +2 -2
  57. package/dist/{chunk-GU5MXV2Y.js → chunk-HHVWV5BJ.js} +2 -2
  58. package/dist/{chunk-HGUYC5K6.js → chunk-I3WGTSDY.js} +2 -2
  59. package/dist/{chunk-7NF73SCB.js → chunk-IDSDJHRS.js} +2 -2
  60. package/dist/{chunk-QDQZ62FL.js → chunk-ILPHIYAL.js} +3 -3
  61. package/dist/{chunk-3GAR4AZK.js → chunk-LNODLR7W.js} +2 -2
  62. package/dist/{chunk-WFY7KSHB.js → chunk-LQ2BRGMX.js} +3 -3
  63. package/dist/{chunk-B2POVFR2.js → chunk-M7QZSEHF.js} +2 -2
  64. package/dist/{chunk-IRM273C7.js → chunk-NFII3MTG.js} +2 -2
  65. package/dist/{chunk-RCJKABOS.js → chunk-TU5LQUJM.js} +2 -2
  66. package/dist/{chunk-TLQOMWLQ.js → chunk-TU7DWSTW.js} +2 -2
  67. package/dist/{chunk-7BUIOP36.js → chunk-TYXZ2SRW.js} +2 -2
  68. package/dist/{chunk-DSCEXBDR.js → chunk-UQHHGT67.js} +2 -2
  69. package/dist/{chunk-NWF2LRKO.js → chunk-VPABGAN4.js} +2 -2
  70. package/dist/{chunk-4UQRXKYJ.js → chunk-Z35KUMBW.js} +2 -2
  71. package/dist/{chunk-FRNBRN2C.js → chunk-Z7I2ZFXS.js} +3 -3
  72. package/dist/cli.js +11 -11
  73. package/dist/{companies-4AJJGTMC.js → companies-CSN7DPYW.js} +3 -3
  74. package/dist/{config-SMVIY6RW.js → config-55WGRLY3.js} +3 -3
  75. package/dist/{conversation-KROMHDHK.js → conversation-6K2TNYBQ.js} +3 -3
  76. package/dist/{conversion-report-JZHI2IHY.js → conversion-report-WYYB3BK2.js} +3 -3
  77. package/dist/{conversion-upload-command-7RSZ5ZQU.js → conversion-upload-command-VM2P57K6.js} +3 -3
  78. package/dist/{conversion-writes-SNCLQDXQ.js → conversion-writes-DHOPMA7X.js} +4 -4
  79. package/dist/{conversions-EUOWILCQ.js → conversions-KWY7BNDN.js} +6 -6
  80. package/dist/{conversions-43EYP2W2.js → conversions-MLRK35ZV.js} +8 -8
  81. package/dist/{copy-writes-CIHIFLY6.js → copy-writes-E3V5TUVU.js} +5 -5
  82. package/dist/{creatives-BB6S2OF6.js → creatives-DUR5Z5AN.js} +6 -6
  83. package/dist/{creatives-KUO67WYA.js → creatives-KN3MT533.js} +9 -9
  84. package/dist/{crm-J53V2QTN.js → crm-DMADHALO.js} +2 -2
  85. package/dist/{currency-X7Y6TSLF.js → currency-X4KEACEP.js} +3 -3
  86. package/dist/{custom-conversions-HAGG72LF.js → custom-conversions-OIA5Y2GX.js} +6 -6
  87. package/dist/{demographics-4Y5LTCU4.js → demographics-UZ7BCQ7K.js} +3 -3
  88. package/dist/{discover-6DORQWXY.js → discover-2W42JB56.js} +2 -2
  89. package/dist/{draft-RIR2V6A2.js → draft-2ZX73IRO.js} +3 -3
  90. package/dist/{draft-HY3U2GHU.js → draft-6XMZYSMR.js} +4 -4
  91. package/dist/{draft-R6EKORNS.js → draft-CKLIIWXZ.js} +3 -3
  92. package/dist/{draft-4V7W5DV2.js → draft-IUEULQDT.js} +4 -4
  93. package/dist/{draft-ZCL7FVBH.js → draft-L5Q6KEER.js} +3 -3
  94. package/dist/{draft-DJIYEMZU.js → draft-MJRMZGMP.js} +3 -3
  95. package/dist/{draft-TRPQCJ4B.js → draft-WPMVLRME.js} +4 -4
  96. package/dist/{experiment-I5CRLOVN.js → experiment-3VRHCQN5.js} +2 -2
  97. package/dist/{experiments-4V242DG2.js → experiments-S4TSXCK6.js} +4 -4
  98. package/dist/{facets-WXJ2MCU6.js → facets-D3JG7OSO.js} +3 -3
  99. package/dist/{forecast-ZTXZD3HD.js → forecast-4YHMKO54.js} +3 -3
  100. package/dist/{forecast-BTPIXEQ5.js → forecast-LYN6ZGQC.js} +4 -4
  101. package/dist/{funding-5W4LX6DU.js → funding-TCEPQXRQ.js} +3 -3
  102. package/dist/{funnel-7KOEX7YM.js → funnel-CQIT3F23.js} +2 -2
  103. package/dist/{ga4-BWVCDVIR.js → ga4-JE3HS36B.js} +15 -15
  104. package/dist/{google-M6BJ22UL.js → google-24FDG4C4.js} +22 -22
  105. package/dist/{gsc-2MPE4N32.js → gsc-RMVOYIM3.js} +4 -4
  106. package/dist/{history-3NTM5SFN.js → history-GIXIG276.js} +4 -4
  107. package/dist/{hubspot-HMVSRJQZ.js → hubspot-5WB7TQBG.js} +3 -3
  108. package/dist/{insights-XZL2EM53.js → insights-HATH3IC6.js} +3 -3
  109. package/dist/{insights-CQCWOCIT.js → insights-VKPIVJMK.js} +3 -3
  110. package/dist/{instant-experiences-RM4MLJTL.js → instant-experiences-A2SIQNB5.js} +4 -4
  111. package/dist/{job-DRFCQ27M.js → job-SM2OQ2LO.js} +3 -3
  112. package/dist/{job-create-2EC25Y3J.js → job-create-ECZHPVKH.js} +3 -3
  113. package/dist/{job-status-UNVZRPIA.js → job-status-QSYDKIIV.js} +3 -3
  114. package/dist/{languages-SLFV73GE.js → languages-Q5SKO4AM.js} +2 -2
  115. package/dist/{leads-ULYHTG22.js → leads-QAYS7AJO.js} +4 -4
  116. package/dist/{leads-Q7APIJRQ.js → leads-VOSFVNUK.js} +3 -3
  117. package/dist/{line-item-writes-X3L5NQEH.js → line-item-writes-VBBB3TRS.js} +4 -4
  118. package/dist/{line-items-NJMEPEF5.js → line-items-2V5FY33R.js} +8 -8
  119. package/dist/{linkedin-55PAID62.js → linkedin-CDFCOHKI.js} +30 -30
  120. package/dist/{locations-W3VOYBWL.js → locations-RFTE42OS.js} +3 -3
  121. package/dist/{locations-T2OMP6QN.js → locations-VQYREHYI.js} +2 -2
  122. package/dist/{lookup-S5VG7AWH.js → lookup-MELV3RUL.js} +3 -3
  123. package/dist/{mcp-YRIFPYNU.js → mcp-B7WSZQFD.js} +15 -3
  124. package/dist/mcp-B7WSZQFD.js.map +1 -0
  125. package/dist/{media-XCTZJIW4.js → media-BPI2VE6A.js} +3 -3
  126. package/dist/{media-P4T4ZBNS.js → media-EEWZZU3P.js} +3 -3
  127. package/dist/{meta-IPLWNYC7.js → meta-SMJUQP37.js} +38 -38
  128. package/dist/{metrics-4YVJHYRI.js → metrics-EMAP7ESR.js} +2 -2
  129. package/dist/{output-WTEPRUPE.js → output-4QBQEM4C.js} +2 -2
  130. package/dist/{page-photos-OQ5QATQH.js → page-photos-HRKPDQBM.js} +4 -4
  131. package/dist/{pages-J6AF5NDU.js → pages-DTQWQUKP.js} +3 -3
  132. package/dist/{pixels-ZZTB6NWF.js → pixels-2BKADWE6.js} +3 -3
  133. package/dist/{pixels-LQAJOZIM.js → pixels-F6BZNTDD.js} +4 -4
  134. package/dist/{plan-7UF76Q6U.js → plan-A6VC3ZO7.js} +3 -3
  135. package/dist/{preview-LRJOQ7LM.js → preview-GGIGXPJW.js} +3 -3
  136. package/dist/{promoted-tweet-writes-Y6BBOWDL.js → promoted-tweet-writes-WU2SKKZF.js} +4 -4
  137. package/dist/{promoted-tweets-RJT53DRM.js → promoted-tweets-653Q5AC6.js} +5 -5
  138. package/dist/{properties-RBLJCVSG.js → properties-VWKO3AAK.js} +3 -3
  139. package/dist/{query-XZMDGRO5.js → query-CXIOL7WI.js} +4 -4
  140. package/dist/{query-KQ675KJZ.js → query-OOP63DJF.js} +3 -3
  141. package/dist/{query-BJJYUGQZ.js → query-RBZFAIDK.js} +3 -3
  142. package/dist/{questionnaire-DWEH5II4.js → questionnaire-7SHYRTMJ.js} +2 -2
  143. package/dist/{read-QME7JYVF.js → read-GOULD7YL.js} +4 -4
  144. package/dist/{resolve-YLRESES5.js → resolve-RCFAYPWR.js} +3 -3
  145. package/dist/{revenue-E4GQIOUY.js → revenue-3R6JLYCQ.js} +4 -4
  146. package/dist/{rule-writes-UAVWT4XS.js → rule-writes-K4P3XBJW.js} +4 -4
  147. package/dist/{rules-ZVS2MWED.js → rules-HY7S2YTD.js} +9 -9
  148. package/dist/{sends-LAY5C74B.js → sends-WBYTALR7.js} +2 -2
  149. package/dist/{shared-ZFULUOPQ.js → shared-CGEJI2RB.js} +3 -3
  150. package/dist/{shopify-T4UWFIQC.js → shopify-DQWEYPDX.js} +3 -3
  151. package/dist/{sitemaps-F3HYH5ZP.js → sitemaps-5SP7PVQ6.js} +3 -3
  152. package/dist/{sites-JSMF72BY.js → sites-YZDPHBST.js} +3 -3
  153. package/dist/{sources-BUPV7H7F.js → sources-7FIBHL6A.js} +2 -2
  154. package/dist/{stats-QP4LFQZJ.js → stats-EGGNFTKI.js} +5 -5
  155. package/dist/{studies-EPO2AM4M.js → studies-6VUUOMZD.js} +7 -7
  156. package/dist/{study-writes-7FP443QQ.js → study-writes-IR7RSSTK.js} +4 -4
  157. package/dist/{sync-PHH65JFS.js → sync-SCM6JGJP.js} +3 -3
  158. package/dist/{tag-manager-F7PVTDBB.js → tag-manager-REKD4WGU.js} +9 -9
  159. package/dist/{targeting-NKZFEZD7.js → targeting-BQUD54MF.js} +4 -4
  160. package/dist/{targeting-constants-236ES5HE.js → targeting-constants-MRQB4N5I.js} +3 -3
  161. package/dist/{targeting-criteria-AQYXVSGN.js → targeting-criteria-HSAESZIR.js} +5 -5
  162. package/dist/{terms-O6ODXEOK.js → terms-D2KAFHKJ.js} +2 -2
  163. package/dist/{themes-FEVYZZCW.js → themes-X56KIX3Z.js} +4 -4
  164. package/dist/{top-companies-BQGWKYUK.js → top-companies-2RLNCSVS.js} +3 -3
  165. package/dist/{tweets-IUINLOXF.js → tweets-JN6ARKF6.js} +3 -3
  166. package/dist/{unstage-ZA3WQBEA.js → unstage-5C27F2LZ.js} +2 -2
  167. package/dist/{url-options-Z4BQBEMI.js → url-options-C543MY7L.js} +3 -3
  168. package/dist/{url-params-J7RKP5RB.js → url-params-TEFCXQ5N.js} +3 -3
  169. package/dist/{write-commands-OTWH6BKZ.js → write-commands-B25W4FP5.js} +3 -3
  170. package/dist/{write-commands-IM5DPG3R.js → write-commands-DO2YUOMG.js} +4 -4
  171. package/dist/{write-commands-5J47ZNO4.js → write-commands-GNNEUVDW.js} +3 -3
  172. package/dist/{write-commands-OGVDWWBV.js → write-commands-NXJQQ62W.js} +10 -10
  173. package/dist/{x-HGFAL3NY.js → x-JNR5SO6F.js} +15 -15
  174. package/package.json +1 -1
  175. package/dist/chunk-ZRP7Y2DM.js.map +0 -1
  176. package/dist/mcp-YRIFPYNU.js.map +0 -1
  177. /package/dist/{account-ZY655BIU.js.map → account-BA3IO3AN.js.map} +0 -0
  178. /package/dist/{account-D6LEVVWT.js.map → account-LVJFHDA3.js.map} +0 -0
  179. /package/dist/{account-SGK3IJ6N.js.map → account-PTJ6OK6Z.js.map} +0 -0
  180. /package/dist/{account-assets-J5Z4URLQ.js.map → account-assets-T3VVNBUG.js.map} +0 -0
  181. /package/dist/{account-level-4SBYYHRS.js.map → account-level-MPFWRPEK.js.map} +0 -0
  182. /package/dist/{account-reads-2MSUVG46.js.map → account-reads-5CXFLJ5Q.js.map} +0 -0
  183. /package/dist/{account-users-MHC7AD6K.js.map → account-users-B7DCJEFD.js.map} +0 -0
  184. /package/dist/{account-writes-QQQC54WC.js.map → account-writes-W5EOTS7P.js.map} +0 -0
  185. /package/dist/{accounts-FT2SRKMD.js.map → accounts-4R3MBNJG.js.map} +0 -0
  186. /package/dist/{accounts-SNB65ZEW.js.map → accounts-5WF7VE7J.js.map} +0 -0
  187. /package/dist/{accounts-QNE5QWBG.js.map → accounts-IQTEH4BX.js.map} +0 -0
  188. /package/dist/{accounts-2O6I7YBN.js.map → accounts-SV7JZUCC.js.map} +0 -0
  189. /package/dist/{accounts-K5XLEO6W.js.map → accounts-VPWCLF6X.js.map} +0 -0
  190. /package/dist/{active-entities-3BAPHE4P.js.map → active-entities-WDPW7652.js.map} +0 -0
  191. /package/dist/{activities-LKLPORDI.js.map → activities-WGPHYSFU.js.map} +0 -0
  192. /package/dist/{ad-group-writes-CJTTUUIT.js.map → ad-group-writes-JL56DPC4.js.map} +0 -0
  193. /package/dist/{ad-groups-HLGSVH74.js.map → ad-groups-62JPLIK3.js.map} +0 -0
  194. /package/dist/{ad-writes-3UE3U7VE.js.map → ad-writes-WSKLRGB7.js.map} +0 -0
  195. /package/dist/{ads-MAOI7S6V.js.map → ads-F7AUJWK7.js.map} +0 -0
  196. /package/dist/{ads-PYNDMHUD.js.map → ads-JFI56MZL.js.map} +0 -0
  197. /package/dist/{ads-HLUJB5SQ.js.map → ads-OV3SMLKA.js.map} +0 -0
  198. /package/dist/{adsets-QRKICEFD.js.map → adsets-XH2ULWPM.js.map} +0 -0
  199. /package/dist/{analytics-AULKYNNT.js.map → analytics-MJT6DS3L.js.map} +0 -0
  200. /package/dist/{analytics-DNDTC643.js.map → analytics-W7EUOI2Q.js.map} +0 -0
  201. /package/dist/{asset-writes-JLVUAVUZ.js.map → asset-writes-4X3AJQ4Q.js.map} +0 -0
  202. /package/dist/{audience-size-C3YHQPZB.js.map → audience-size-VHXBNNIB.js.map} +0 -0
  203. /package/dist/{audience-writes-CDKQB3SM.js.map → audience-writes-TXWPDJ2F.js.map} +0 -0
  204. /package/dist/{audiences-M3A3QK52.js.map → audiences-B2LFKWIS.js.map} +0 -0
  205. /package/dist/{audiences-CDDI5HR5.js.map → audiences-MBBXWEOI.js.map} +0 -0
  206. /package/dist/{audiences-34IQKOGS.js.map → audiences-YUG5JLL4.js.map} +0 -0
  207. /package/dist/{audit-FLPJ7GTE.js.map → audit-VT2WSZWM.js.map} +0 -0
  208. /package/dist/{audit-7ED6CUTQ.js.map → audit-WFXS5ELM.js.map} +0 -0
  209. /package/dist/{bid-pricing-H3M63PTW.js.map → bid-pricing-5F3GBSAI.js.map} +0 -0
  210. /package/dist/{businesses-MGP2YCEU.js.map → businesses-24JNY46Z.js.map} +0 -0
  211. /package/dist/{campaign-groups-IQSDKOVI.js.map → campaign-groups-BDCDTMBF.js.map} +0 -0
  212. /package/dist/{campaign-writes-APAAV4ZU.js.map → campaign-writes-73H7G3JM.js.map} +0 -0
  213. /package/dist/{campaign-writes-BN4PZP4Z.js.map → campaign-writes-FNVOHONL.js.map} +0 -0
  214. /package/dist/{campaigns-GA34MEN2.js.map → campaigns-FUDZUVHN.js.map} +0 -0
  215. /package/dist/{campaigns-K2FVD3XW.js.map → campaigns-J65Q4WAZ.js.map} +0 -0
  216. /package/dist/{campaigns-HES5MDUG.js.map → campaigns-KXYGSH27.js.map} +0 -0
  217. /package/dist/{campaigns-4Y3JQC2U.js.map → campaigns-U5FQ2VWL.js.map} +0 -0
  218. /package/dist/{cards-A7GQVC7B.js.map → cards-NSNAFTEB.js.map} +0 -0
  219. /package/dist/{catalogs-ZR7DECMG.js.map → catalogs-OWQGGCIO.js.map} +0 -0
  220. /package/dist/{catalogs-TGLSJEK5.js.map → catalogs-VZYAATUR.js.map} +0 -0
  221. /package/dist/{changes-VWKTM27U.js.map → changes-RDWMNSTK.js.map} +0 -0
  222. /package/dist/{chatgpt-OPOD2WHB.js.map → chatgpt-27NEJVGF.js.map} +0 -0
  223. /package/dist/{chunk-KUY26RCF.js.map → chunk-2F4DELSV.js.map} +0 -0
  224. /package/dist/{chunk-OR6KVLI5.js.map → chunk-EZSPVWLQ.js.map} +0 -0
  225. /package/dist/{chunk-DM3Q6F5F.js.map → chunk-FCHZ5TNG.js.map} +0 -0
  226. /package/dist/{chunk-XHQYFNNK.js.map → chunk-FQMEX3GX.js.map} +0 -0
  227. /package/dist/{chunk-GW2WRZZA.js.map → chunk-GGK2CX6B.js.map} +0 -0
  228. /package/dist/{chunk-BX6B25KK.js.map → chunk-GHZ6HP2X.js.map} +0 -0
  229. /package/dist/{chunk-HMIROUFV.js.map → chunk-HCQJYI6X.js.map} +0 -0
  230. /package/dist/{chunk-GU5MXV2Y.js.map → chunk-HHVWV5BJ.js.map} +0 -0
  231. /package/dist/{chunk-HGUYC5K6.js.map → chunk-I3WGTSDY.js.map} +0 -0
  232. /package/dist/{chunk-7NF73SCB.js.map → chunk-IDSDJHRS.js.map} +0 -0
  233. /package/dist/{chunk-QDQZ62FL.js.map → chunk-ILPHIYAL.js.map} +0 -0
  234. /package/dist/{chunk-3GAR4AZK.js.map → chunk-LNODLR7W.js.map} +0 -0
  235. /package/dist/{chunk-WFY7KSHB.js.map → chunk-LQ2BRGMX.js.map} +0 -0
  236. /package/dist/{chunk-B2POVFR2.js.map → chunk-M7QZSEHF.js.map} +0 -0
  237. /package/dist/{chunk-IRM273C7.js.map → chunk-NFII3MTG.js.map} +0 -0
  238. /package/dist/{chunk-RCJKABOS.js.map → chunk-TU5LQUJM.js.map} +0 -0
  239. /package/dist/{chunk-TLQOMWLQ.js.map → chunk-TU7DWSTW.js.map} +0 -0
  240. /package/dist/{chunk-7BUIOP36.js.map → chunk-TYXZ2SRW.js.map} +0 -0
  241. /package/dist/{chunk-DSCEXBDR.js.map → chunk-UQHHGT67.js.map} +0 -0
  242. /package/dist/{chunk-NWF2LRKO.js.map → chunk-VPABGAN4.js.map} +0 -0
  243. /package/dist/{chunk-4UQRXKYJ.js.map → chunk-Z35KUMBW.js.map} +0 -0
  244. /package/dist/{chunk-FRNBRN2C.js.map → chunk-Z7I2ZFXS.js.map} +0 -0
  245. /package/dist/{companies-4AJJGTMC.js.map → companies-CSN7DPYW.js.map} +0 -0
  246. /package/dist/{config-SMVIY6RW.js.map → config-55WGRLY3.js.map} +0 -0
  247. /package/dist/{conversation-KROMHDHK.js.map → conversation-6K2TNYBQ.js.map} +0 -0
  248. /package/dist/{conversion-report-JZHI2IHY.js.map → conversion-report-WYYB3BK2.js.map} +0 -0
  249. /package/dist/{conversion-upload-command-7RSZ5ZQU.js.map → conversion-upload-command-VM2P57K6.js.map} +0 -0
  250. /package/dist/{conversion-writes-SNCLQDXQ.js.map → conversion-writes-DHOPMA7X.js.map} +0 -0
  251. /package/dist/{conversions-EUOWILCQ.js.map → conversions-KWY7BNDN.js.map} +0 -0
  252. /package/dist/{conversions-43EYP2W2.js.map → conversions-MLRK35ZV.js.map} +0 -0
  253. /package/dist/{copy-writes-CIHIFLY6.js.map → copy-writes-E3V5TUVU.js.map} +0 -0
  254. /package/dist/{creatives-BB6S2OF6.js.map → creatives-DUR5Z5AN.js.map} +0 -0
  255. /package/dist/{creatives-KUO67WYA.js.map → creatives-KN3MT533.js.map} +0 -0
  256. /package/dist/{crm-J53V2QTN.js.map → crm-DMADHALO.js.map} +0 -0
  257. /package/dist/{currency-X7Y6TSLF.js.map → currency-X4KEACEP.js.map} +0 -0
  258. /package/dist/{custom-conversions-HAGG72LF.js.map → custom-conversions-OIA5Y2GX.js.map} +0 -0
  259. /package/dist/{demographics-4Y5LTCU4.js.map → demographics-UZ7BCQ7K.js.map} +0 -0
  260. /package/dist/{discover-6DORQWXY.js.map → discover-2W42JB56.js.map} +0 -0
  261. /package/dist/{draft-RIR2V6A2.js.map → draft-2ZX73IRO.js.map} +0 -0
  262. /package/dist/{draft-HY3U2GHU.js.map → draft-6XMZYSMR.js.map} +0 -0
  263. /package/dist/{draft-R6EKORNS.js.map → draft-CKLIIWXZ.js.map} +0 -0
  264. /package/dist/{draft-4V7W5DV2.js.map → draft-IUEULQDT.js.map} +0 -0
  265. /package/dist/{draft-ZCL7FVBH.js.map → draft-L5Q6KEER.js.map} +0 -0
  266. /package/dist/{draft-DJIYEMZU.js.map → draft-MJRMZGMP.js.map} +0 -0
  267. /package/dist/{draft-TRPQCJ4B.js.map → draft-WPMVLRME.js.map} +0 -0
  268. /package/dist/{experiment-I5CRLOVN.js.map → experiment-3VRHCQN5.js.map} +0 -0
  269. /package/dist/{experiments-4V242DG2.js.map → experiments-S4TSXCK6.js.map} +0 -0
  270. /package/dist/{facets-WXJ2MCU6.js.map → facets-D3JG7OSO.js.map} +0 -0
  271. /package/dist/{forecast-ZTXZD3HD.js.map → forecast-4YHMKO54.js.map} +0 -0
  272. /package/dist/{forecast-BTPIXEQ5.js.map → forecast-LYN6ZGQC.js.map} +0 -0
  273. /package/dist/{funding-5W4LX6DU.js.map → funding-TCEPQXRQ.js.map} +0 -0
  274. /package/dist/{funnel-7KOEX7YM.js.map → funnel-CQIT3F23.js.map} +0 -0
  275. /package/dist/{ga4-BWVCDVIR.js.map → ga4-JE3HS36B.js.map} +0 -0
  276. /package/dist/{google-M6BJ22UL.js.map → google-24FDG4C4.js.map} +0 -0
  277. /package/dist/{gsc-2MPE4N32.js.map → gsc-RMVOYIM3.js.map} +0 -0
  278. /package/dist/{history-3NTM5SFN.js.map → history-GIXIG276.js.map} +0 -0
  279. /package/dist/{hubspot-HMVSRJQZ.js.map → hubspot-5WB7TQBG.js.map} +0 -0
  280. /package/dist/{insights-XZL2EM53.js.map → insights-HATH3IC6.js.map} +0 -0
  281. /package/dist/{insights-CQCWOCIT.js.map → insights-VKPIVJMK.js.map} +0 -0
  282. /package/dist/{instant-experiences-RM4MLJTL.js.map → instant-experiences-A2SIQNB5.js.map} +0 -0
  283. /package/dist/{job-DRFCQ27M.js.map → job-SM2OQ2LO.js.map} +0 -0
  284. /package/dist/{job-create-2EC25Y3J.js.map → job-create-ECZHPVKH.js.map} +0 -0
  285. /package/dist/{job-status-UNVZRPIA.js.map → job-status-QSYDKIIV.js.map} +0 -0
  286. /package/dist/{languages-SLFV73GE.js.map → languages-Q5SKO4AM.js.map} +0 -0
  287. /package/dist/{leads-ULYHTG22.js.map → leads-QAYS7AJO.js.map} +0 -0
  288. /package/dist/{leads-Q7APIJRQ.js.map → leads-VOSFVNUK.js.map} +0 -0
  289. /package/dist/{line-item-writes-X3L5NQEH.js.map → line-item-writes-VBBB3TRS.js.map} +0 -0
  290. /package/dist/{line-items-NJMEPEF5.js.map → line-items-2V5FY33R.js.map} +0 -0
  291. /package/dist/{linkedin-55PAID62.js.map → linkedin-CDFCOHKI.js.map} +0 -0
  292. /package/dist/{locations-W3VOYBWL.js.map → locations-RFTE42OS.js.map} +0 -0
  293. /package/dist/{locations-T2OMP6QN.js.map → locations-VQYREHYI.js.map} +0 -0
  294. /package/dist/{lookup-S5VG7AWH.js.map → lookup-MELV3RUL.js.map} +0 -0
  295. /package/dist/{media-XCTZJIW4.js.map → media-BPI2VE6A.js.map} +0 -0
  296. /package/dist/{media-P4T4ZBNS.js.map → media-EEWZZU3P.js.map} +0 -0
  297. /package/dist/{meta-IPLWNYC7.js.map → meta-SMJUQP37.js.map} +0 -0
  298. /package/dist/{metrics-4YVJHYRI.js.map → metrics-EMAP7ESR.js.map} +0 -0
  299. /package/dist/{output-WTEPRUPE.js.map → output-4QBQEM4C.js.map} +0 -0
  300. /package/dist/{page-photos-OQ5QATQH.js.map → page-photos-HRKPDQBM.js.map} +0 -0
  301. /package/dist/{pages-J6AF5NDU.js.map → pages-DTQWQUKP.js.map} +0 -0
  302. /package/dist/{pixels-ZZTB6NWF.js.map → pixels-2BKADWE6.js.map} +0 -0
  303. /package/dist/{pixels-LQAJOZIM.js.map → pixels-F6BZNTDD.js.map} +0 -0
  304. /package/dist/{plan-7UF76Q6U.js.map → plan-A6VC3ZO7.js.map} +0 -0
  305. /package/dist/{preview-LRJOQ7LM.js.map → preview-GGIGXPJW.js.map} +0 -0
  306. /package/dist/{promoted-tweet-writes-Y6BBOWDL.js.map → promoted-tweet-writes-WU2SKKZF.js.map} +0 -0
  307. /package/dist/{promoted-tweets-RJT53DRM.js.map → promoted-tweets-653Q5AC6.js.map} +0 -0
  308. /package/dist/{properties-RBLJCVSG.js.map → properties-VWKO3AAK.js.map} +0 -0
  309. /package/dist/{query-XZMDGRO5.js.map → query-CXIOL7WI.js.map} +0 -0
  310. /package/dist/{query-KQ675KJZ.js.map → query-OOP63DJF.js.map} +0 -0
  311. /package/dist/{query-BJJYUGQZ.js.map → query-RBZFAIDK.js.map} +0 -0
  312. /package/dist/{questionnaire-DWEH5II4.js.map → questionnaire-7SHYRTMJ.js.map} +0 -0
  313. /package/dist/{read-QME7JYVF.js.map → read-GOULD7YL.js.map} +0 -0
  314. /package/dist/{resolve-YLRESES5.js.map → resolve-RCFAYPWR.js.map} +0 -0
  315. /package/dist/{revenue-E4GQIOUY.js.map → revenue-3R6JLYCQ.js.map} +0 -0
  316. /package/dist/{rule-writes-UAVWT4XS.js.map → rule-writes-K4P3XBJW.js.map} +0 -0
  317. /package/dist/{rules-ZVS2MWED.js.map → rules-HY7S2YTD.js.map} +0 -0
  318. /package/dist/{sends-LAY5C74B.js.map → sends-WBYTALR7.js.map} +0 -0
  319. /package/dist/{shared-ZFULUOPQ.js.map → shared-CGEJI2RB.js.map} +0 -0
  320. /package/dist/{shopify-T4UWFIQC.js.map → shopify-DQWEYPDX.js.map} +0 -0
  321. /package/dist/{sitemaps-F3HYH5ZP.js.map → sitemaps-5SP7PVQ6.js.map} +0 -0
  322. /package/dist/{sites-JSMF72BY.js.map → sites-YZDPHBST.js.map} +0 -0
  323. /package/dist/{sources-BUPV7H7F.js.map → sources-7FIBHL6A.js.map} +0 -0
  324. /package/dist/{stats-QP4LFQZJ.js.map → stats-EGGNFTKI.js.map} +0 -0
  325. /package/dist/{studies-EPO2AM4M.js.map → studies-6VUUOMZD.js.map} +0 -0
  326. /package/dist/{study-writes-7FP443QQ.js.map → study-writes-IR7RSSTK.js.map} +0 -0
  327. /package/dist/{sync-PHH65JFS.js.map → sync-SCM6JGJP.js.map} +0 -0
  328. /package/dist/{tag-manager-F7PVTDBB.js.map → tag-manager-REKD4WGU.js.map} +0 -0
  329. /package/dist/{targeting-NKZFEZD7.js.map → targeting-BQUD54MF.js.map} +0 -0
  330. /package/dist/{targeting-constants-236ES5HE.js.map → targeting-constants-MRQB4N5I.js.map} +0 -0
  331. /package/dist/{targeting-criteria-AQYXVSGN.js.map → targeting-criteria-HSAESZIR.js.map} +0 -0
  332. /package/dist/{terms-O6ODXEOK.js.map → terms-D2KAFHKJ.js.map} +0 -0
  333. /package/dist/{themes-FEVYZZCW.js.map → themes-X56KIX3Z.js.map} +0 -0
  334. /package/dist/{top-companies-BQGWKYUK.js.map → top-companies-2RLNCSVS.js.map} +0 -0
  335. /package/dist/{tweets-IUINLOXF.js.map → tweets-JN6ARKF6.js.map} +0 -0
  336. /package/dist/{unstage-ZA3WQBEA.js.map → unstage-5C27F2LZ.js.map} +0 -0
  337. /package/dist/{url-options-Z4BQBEMI.js.map → url-options-C543MY7L.js.map} +0 -0
  338. /package/dist/{url-params-J7RKP5RB.js.map → url-params-TEFCXQ5N.js.map} +0 -0
  339. /package/dist/{write-commands-OTWH6BKZ.js.map → write-commands-B25W4FP5.js.map} +0 -0
  340. /package/dist/{write-commands-IM5DPG3R.js.map → write-commands-DO2YUOMG.js.map} +0 -0
  341. /package/dist/{write-commands-5J47ZNO4.js.map → write-commands-GNNEUVDW.js.map} +0 -0
  342. /package/dist/{write-commands-OGVDWWBV.js.map → write-commands-NXJQQ62W.js.map} +0 -0
  343. /package/dist/{x-HGFAL3NY.js.map → x-JNR5SO6F.js.map} +0 -0
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  exitWithServiceReadError
3
- } from "./chunk-HGUYC5K6.js";
3
+ } from "./chunk-I3WGTSDY.js";
4
4
  import {
5
5
  failWriteValidation,
6
6
  listFlag,
7
7
  requireCustomerId
8
- } from "./chunk-DSCEXBDR.js";
8
+ } from "./chunk-UQHHGT67.js";
9
9
  import "./chunk-ERSX3MKH.js";
10
10
  import "./chunk-SCAGMX2I.js";
11
11
  import "./chunk-4NZ47VXO.js";
@@ -16,7 +16,7 @@ import "./chunk-44ZRCSR7.js";
16
16
  import {
17
17
  getManagerIdForCustomer,
18
18
  writeJsonEnvelope
19
- } from "./chunk-ZRP7Y2DM.js";
19
+ } from "./chunk-6DPSWLGY.js";
20
20
  import "./chunk-E44NXCTL.js";
21
21
  import "./chunk-EJGAJHLB.js";
22
22
  import "./chunk-LNNTHEL7.js";
@@ -92,4 +92,4 @@ Example:
92
92
  export {
93
93
  themesCommand
94
94
  };
95
- //# sourceMappingURL=themes-FEVYZZCW.js.map
95
+ //# sourceMappingURL=themes-X56KIX3Z.js.map
@@ -3,14 +3,14 @@ import {
3
3
  daysAgoIso,
4
4
  handleLinkedinError,
5
5
  todayIso
6
- } from "./chunk-IRM273C7.js";
6
+ } from "./chunk-NFII3MTG.js";
7
7
  import {
8
8
  TABLE_OUTPUT_FORMATS,
9
9
  outputFormatRefusal,
10
10
  writeAdsJson,
11
11
  writeAdsOutput,
12
12
  writeJsonEnvelope
13
- } from "./chunk-ZRP7Y2DM.js";
13
+ } from "./chunk-6DPSWLGY.js";
14
14
  import {
15
15
  NO_CACHE_ARG
16
16
  } from "./chunk-AGBBTTKA.js";
@@ -108,4 +108,4 @@ Examples:
108
108
  export {
109
109
  topCompaniesCommand
110
110
  };
111
- //# sourceMappingURL=top-companies-BQGWKYUK.js.map
111
+ //# sourceMappingURL=top-companies-2RLNCSVS.js.map
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-FIN4ZXGJ.js";
4
4
  import {
5
5
  resolveXAccountId
6
- } from "./chunk-7NF73SCB.js";
6
+ } from "./chunk-IDSDJHRS.js";
7
7
  import {
8
8
  cacheGet,
9
9
  cacheSet,
10
10
  writeAdsJson,
11
11
  writeAdsOutput,
12
12
  writeJsonEnvelope
13
- } from "./chunk-ZRP7Y2DM.js";
13
+ } from "./chunk-6DPSWLGY.js";
14
14
  import {
15
15
  ApiError,
16
16
  apiGet
@@ -120,4 +120,4 @@ Examples:
120
120
  export {
121
121
  tweetsCommand
122
122
  };
123
- //# sourceMappingURL=tweets-IUINLOXF.js.map
123
+ //# sourceMappingURL=tweets-JN6ARKF6.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import "./chunk-NKQWDEB7.js";
8
8
  import {
9
9
  writeJsonEnvelope
10
- } from "./chunk-ZRP7Y2DM.js";
10
+ } from "./chunk-6DPSWLGY.js";
11
11
  import "./chunk-G4FG5EQO.js";
12
12
  import {
13
13
  apiPost
@@ -93,4 +93,4 @@ export {
93
93
  unstageBody,
94
94
  unstageCommand
95
95
  };
96
- //# sourceMappingURL=unstage-ZA3WQBEA.js.map
96
+ //# sourceMappingURL=unstage-5C27F2LZ.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import "./chunk-NKQWDEB7.js";
6
6
  import {
7
7
  parseApiError
8
- } from "./chunk-XHQYFNNK.js";
8
+ } from "./chunk-FQMEX3GX.js";
9
9
  import {
10
10
  urlOptionsHints
11
11
  } from "./chunk-44ZRCSR7.js";
@@ -14,7 +14,7 @@ import {
14
14
  resolveCustomerId,
15
15
  writeAdsJson,
16
16
  writeJsonEnvelope
17
- } from "./chunk-ZRP7Y2DM.js";
17
+ } from "./chunk-6DPSWLGY.js";
18
18
  import "./chunk-G4FG5EQO.js";
19
19
  import "./chunk-46YLDIQG.js";
20
20
  import {
@@ -128,4 +128,4 @@ Examples:
128
128
  export {
129
129
  urlOptionsCommand
130
130
  };
131
- //# sourceMappingURL=url-options-Z4BQBEMI.js.map
131
+ //# sourceMappingURL=url-options-C543MY7L.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  handleLinkedinError,
3
3
  resolveAccountIdArg
4
- } from "./chunk-IRM273C7.js";
4
+ } from "./chunk-NFII3MTG.js";
5
5
  import {
6
6
  writeAdsJson
7
- } from "./chunk-ZRP7Y2DM.js";
7
+ } from "./chunk-6DPSWLGY.js";
8
8
  import {
9
9
  LINKEDIN_TRACKING_PARAMS_AD_SET_MAX
10
10
  } from "./chunk-PC3FJEZH.js";
@@ -98,4 +98,4 @@ export {
98
98
  hints,
99
99
  urlParamsCommand
100
100
  };
101
- //# sourceMappingURL=url-params-J7RKP5RB.js.map
101
+ //# sourceMappingURL=url-params-TEFCXQ5N.js.map
@@ -5,9 +5,9 @@ import {
5
5
  requireTarget,
6
6
  stageOp,
7
7
  stageOps
8
- } from "./chunk-GU5MXV2Y.js";
8
+ } from "./chunk-HHVWV5BJ.js";
9
9
  import "./chunk-D5FY4FAK.js";
10
- import "./chunk-ZRP7Y2DM.js";
10
+ import "./chunk-6DPSWLGY.js";
11
11
  import "./chunk-X7VQFLHI.js";
12
12
  import "./chunk-LU4HI4KI.js";
13
13
  import "./chunk-LGK7UWBN.js";
@@ -710,4 +710,4 @@ export {
710
710
  propertyCommand,
711
711
  retentionValue
712
712
  };
713
- //# sourceMappingURL=write-commands-OTWH6BKZ.js.map
713
+ //# sourceMappingURL=write-commands-B25W4FP5.js.map
@@ -15,10 +15,10 @@ import {
15
15
  stageLinkedinOps,
16
16
  stageOp,
17
17
  stageStatusChange
18
- } from "./chunk-BX6B25KK.js";
18
+ } from "./chunk-GHZ6HP2X.js";
19
19
  import {
20
20
  handleLinkedinError
21
- } from "./chunk-IRM273C7.js";
21
+ } from "./chunk-NFII3MTG.js";
22
22
  import {
23
23
  repeatedValues
24
24
  } from "./chunk-ERSX3MKH.js";
@@ -28,7 +28,7 @@ import "./chunk-D5FY4FAK.js";
28
28
  import "./chunk-QPESDKZC.js";
29
29
  import {
30
30
  writeJsonEnvelope
31
- } from "./chunk-ZRP7Y2DM.js";
31
+ } from "./chunk-6DPSWLGY.js";
32
32
  import "./chunk-E44NXCTL.js";
33
33
  import "./chunk-EJGAJHLB.js";
34
34
  import "./chunk-LNNTHEL7.js";
@@ -1499,4 +1499,4 @@ export {
1499
1499
  sponsoredPostArgs,
1500
1500
  trackingParamsPayload
1501
1501
  };
1502
- //# sourceMappingURL=write-commands-IM5DPG3R.js.map
1502
+ //# sourceMappingURL=write-commands-DO2YUOMG.js.map
@@ -2,9 +2,9 @@ import {
2
2
  loadJsonArg,
3
3
  requireTarget,
4
4
  stageOp
5
- } from "./chunk-3GAR4AZK.js";
5
+ } from "./chunk-LNODLR7W.js";
6
6
  import "./chunk-D5FY4FAK.js";
7
- import "./chunk-ZRP7Y2DM.js";
7
+ import "./chunk-6DPSWLGY.js";
8
8
  import "./chunk-X7VQFLHI.js";
9
9
  import "./chunk-LU4HI4KI.js";
10
10
  import "./chunk-LGK7UWBN.js";
@@ -203,4 +203,4 @@ export {
203
203
  triggerCommand,
204
204
  variableCommand
205
205
  };
206
- //# sourceMappingURL=write-commands-5J47ZNO4.js.map
206
+ //# sourceMappingURL=write-commands-GNNEUVDW.js.map
@@ -7,7 +7,7 @@ import {
7
7
  budgetBoostsFromFlags,
8
8
  clearArg,
9
9
  clearFromFlags
10
- } from "./chunk-7BUIOP36.js";
10
+ } from "./chunk-TYXZ2SRW.js";
11
11
  import {
12
12
  bareAccountId,
13
13
  failWriteValidation,
@@ -23,14 +23,14 @@ import {
23
23
  stageOp,
24
24
  stageStatusChange,
25
25
  upper
26
- } from "./chunk-QDQZ62FL.js";
26
+ } from "./chunk-ILPHIYAL.js";
27
27
  import {
28
28
  buildCustomConversionRule
29
29
  } from "./chunk-Q3GSVLE5.js";
30
30
  import {
31
31
  VISUAL_ENHANCEMENT_FEATURES
32
32
  } from "./chunk-GDFJOCDO.js";
33
- import "./chunk-B2POVFR2.js";
33
+ import "./chunk-M7QZSEHF.js";
34
34
  import {
35
35
  repeatedValues
36
36
  } from "./chunk-ERSX3MKH.js";
@@ -39,7 +39,7 @@ import "./chunk-4NZ47VXO.js";
39
39
  import "./chunk-D5FY4FAK.js";
40
40
  import "./chunk-QPESDKZC.js";
41
41
  import "./chunk-Y2JZX6JB.js";
42
- import "./chunk-ZRP7Y2DM.js";
42
+ import "./chunk-6DPSWLGY.js";
43
43
  import "./chunk-E44NXCTL.js";
44
44
  import "./chunk-EJGAJHLB.js";
45
45
  import "./chunk-LNNTHEL7.js";
@@ -461,7 +461,7 @@ Example: baker ads meta adsets create --campaign 6123 --name "Reach ES" --optimi
461
461
  const file = loadJsonFileArg(args.file);
462
462
  const payload = mergePayload(file, adSetPayloadFromFlags(args, rawArgs, file));
463
463
  if (args["saved-audience"]) {
464
- const { savedAudienceTargeting, targetingFromSavedAudience } = await import("./audience-writes-CDKQB3SM.js");
464
+ const { savedAudienceTargeting, targetingFromSavedAudience } = await import("./audience-writes-TXWPDJ2F.js");
465
465
  const saved = await savedAudienceTargeting(accountId, String(args["saved-audience"]));
466
466
  const merged = targetingFromSavedAudience(saved, payload.targeting);
467
467
  if ("refusal" in merged) failWriteValidation(merged.refusal);
@@ -872,8 +872,8 @@ Example: baker ads meta ads retag 120252158038400247 --url-tags "utm_source={{si
872
872
  run: async ({ args, rawArgs }) => {
873
873
  const { apiPost } = await import("./client-EYPNMTBH.js");
874
874
  const { requireChatId } = await import("./env-ABXQWHDO.js");
875
- const { writeJsonEnvelope } = await import("./output-WTEPRUPE.js");
876
- const { handleMetaError } = await import("./shared-ZFULUOPQ.js");
875
+ const { writeJsonEnvelope } = await import("./output-4QBQEM4C.js");
876
+ const { handleMetaError } = await import("./shared-CGEJI2RB.js");
877
877
  try {
878
878
  const accountId = bareAccountId(args);
879
879
  const urlTags = typeof args["url-tags"] === "string" ? args["url-tags"] : void 0;
@@ -1095,8 +1095,8 @@ function duplicateCommand(entity, label) {
1095
1095
  run: async ({ args }) => {
1096
1096
  const { apiPost } = await import("./client-EYPNMTBH.js");
1097
1097
  const { requireChatId } = await import("./env-ABXQWHDO.js");
1098
- const { writeJsonEnvelope } = await import("./output-WTEPRUPE.js");
1099
- const { handleMetaError } = await import("./shared-ZFULUOPQ.js");
1098
+ const { writeJsonEnvelope } = await import("./output-4QBQEM4C.js");
1099
+ const { handleMetaError } = await import("./shared-CGEJI2RB.js");
1100
1100
  try {
1101
1101
  const accountId = bareAccountId(args);
1102
1102
  const chatId = requireChatId();
@@ -1169,4 +1169,4 @@ export {
1169
1169
  retagSetPairs,
1170
1170
  targetingFromFlags
1171
1171
  };
1172
- //# sourceMappingURL=write-commands-OGVDWWBV.js.map
1172
+ //# sourceMappingURL=write-commands-NXJQQ62W.js.map
@@ -25,23 +25,23 @@ The CLI auto-detects --account-id when exactly one X Ads account is connected, o
25
25
  Full guide: __tooling__/docs/tools/baker/ads-x.md`
26
26
  },
27
27
  subCommands: {
28
- accounts: () => import("./accounts-SNB65ZEW.js").then((m) => m.accountsCommand),
29
- funding: () => import("./funding-5W4LX6DU.js").then((m) => m.fundingCommand),
30
- campaigns: () => import("./campaigns-4Y3JQC2U.js").then((m) => m.campaignsCommand),
31
- "line-items": () => import("./line-items-NJMEPEF5.js").then((m) => m.lineItemsCommand),
32
- "promoted-tweets": () => import("./promoted-tweets-RJT53DRM.js").then((m) => m.promotedTweetsCommand),
33
- tweets: () => import("./tweets-IUINLOXF.js").then((m) => m.tweetsCommand),
34
- cards: () => import("./cards-A7GQVC7B.js").then((m) => m.cardsCommand),
35
- draft: () => import("./draft-TRPQCJ4B.js").then((m) => m.draftCommand),
36
- media: () => import("./media-XCTZJIW4.js").then((m) => m.mediaCommand),
37
- audiences: () => import("./audiences-34IQKOGS.js").then((m) => m.audiencesCommand),
38
- "targeting-criteria": () => import("./targeting-criteria-AQYXVSGN.js").then((m) => m.targetingCriteriaCommand),
39
- "targeting-constants": () => import("./targeting-constants-236ES5HE.js").then((m) => m.targetingConstantsCommand),
40
- "active-entities": () => import("./active-entities-3BAPHE4P.js").then((m) => m.activeEntitiesCommand),
41
- stats: () => import("./stats-QP4LFQZJ.js").then((m) => m.statsCommand)
28
+ accounts: () => import("./accounts-5WF7VE7J.js").then((m) => m.accountsCommand),
29
+ funding: () => import("./funding-TCEPQXRQ.js").then((m) => m.fundingCommand),
30
+ campaigns: () => import("./campaigns-U5FQ2VWL.js").then((m) => m.campaignsCommand),
31
+ "line-items": () => import("./line-items-2V5FY33R.js").then((m) => m.lineItemsCommand),
32
+ "promoted-tweets": () => import("./promoted-tweets-653Q5AC6.js").then((m) => m.promotedTweetsCommand),
33
+ tweets: () => import("./tweets-JN6ARKF6.js").then((m) => m.tweetsCommand),
34
+ cards: () => import("./cards-NSNAFTEB.js").then((m) => m.cardsCommand),
35
+ draft: () => import("./draft-WPMVLRME.js").then((m) => m.draftCommand),
36
+ media: () => import("./media-BPI2VE6A.js").then((m) => m.mediaCommand),
37
+ audiences: () => import("./audiences-YUG5JLL4.js").then((m) => m.audiencesCommand),
38
+ "targeting-criteria": () => import("./targeting-criteria-HSAESZIR.js").then((m) => m.targetingCriteriaCommand),
39
+ "targeting-constants": () => import("./targeting-constants-MRQB4N5I.js").then((m) => m.targetingConstantsCommand),
40
+ "active-entities": () => import("./active-entities-WDPW7652.js").then((m) => m.activeEntitiesCommand),
41
+ stats: () => import("./stats-EGGNFTKI.js").then((m) => m.statsCommand)
42
42
  }
43
43
  });
44
44
  export {
45
45
  xCommand
46
46
  };
47
- //# sourceMappingURL=x-HGFAL3NY.js.map
47
+ //# sourceMappingURL=x-JNR5SO6F.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-cli",
3
- "version": "0.514.0",
3
+ "version": "0.515.0",
4
4
  "description": "AI-agent-first CLI for interacting with Baker, including the Baker creative canvas.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/error-handler.ts","../src/commands/ads/cache.ts","../src/commands/ads/output.ts"],"sourcesContent":["import { writeJsonEnvelope } from \"./commands/ads/output.ts\";\nimport { optionalTargetCompany } from \"./env.ts\";\n\ntype ConnectionPlatform = \"google_ads\" | \"ga4\" | \"gsc\" | \"x_ads\" | \"meta_ads\" | \"linkedin_ads\";\n\n/**\n * Platforms the agent can get connected without the user leaving the chat, via\n * the blocking `request_connection` tool, and the id that tool expects. Every\n * platform this CLI can talk to is here — keep it in step with\n * `CONNECTION_PLATFORMS` in `packages/bridge/src/hono/connection-input.ts`: a\n * platform the tool accepts but this map omits sends the user to Settings for a\n * door the agent could have opened itself.\n */\nconst REQUEST_CONNECTION_PLATFORM: Record<ConnectionPlatform, string> = {\n google_ads: \"google-ads\",\n ga4: \"google-analytics\",\n gsc: \"google-search-console\",\n linkedin_ads: \"linkedin\",\n meta_ads: \"meta\",\n x_ads: \"x-ads\",\n};\n\nconst PLATFORM_NAME: Record<ConnectionPlatform, string> = {\n google_ads: \"Google Ads\",\n ga4: \"Google Analytics 4\",\n gsc: \"Google Search Console\",\n x_ads: \"X Ads\",\n meta_ads: \"Meta Ads\",\n linkedin_ads: \"LinkedIn Ads\",\n};\n\n/**\n * How to tell the agent to get a platform connected. Never \"send them to\n * Settings\" for a platform `request_connection` covers — that ends the turn on a\n * wall the agent could have opened itself, and it now covers every platform this\n * CLI talks to. The fallback line matters too: if the `request_connection` call\n * fails, the agent must still be able to say where the connect button is instead\n * of stalling.\n */\nexport function connectionFixExplanation(platform: ConnectionPlatform): string {\n const name = PLATFORM_NAME[platform];\n const slug = REQUEST_CONNECTION_PLATFORM[platform];\n // Read with `--company` from the organization workspace: connecting from here\n // would connect the workspace, not the company the read named.\n if (optionalTargetCompany()) {\n return (\n `${name} is not connected for that company. It can only be connected in that company's own workspace, ` +\n `never with \\`request_connection\\` from here. Show that company as not connected for ${name} and carry on ` +\n \"with the others.\"\n );\n }\n return (\n `${name} is not connected for this company (or no account has been picked). Don't send the user to Settings ` +\n `or end the turn here — call the \\`request_connection\\` tool with { platform: \"${slug}\", reason } and ` +\n `they connect and pick their accounts from inside the chat. If the \\`request_connection\\` call fails, say so ` +\n `plainly and give the exact route: dashboard → Brain → Integrations → Platforms → ${name}. Then carry on with the ` +\n `rest of the task and say what stays unavailable until it is connected.`\n );\n}\n\n/**\n * Shared error handler for \"No Connection\" scenarios.\n * Provides a structured error for AI agents with a suggested fix and alternative commands.\n */\nexport function handleConnectionError(platform: ConnectionPlatform, originalMessage?: string): never {\n const platformName = PLATFORM_NAME[platform];\n\n const alternative = {\n google_ads: \"keywords-for-site or research advertisers\",\n ga4: \"lighthouse for page performance\",\n gsc: \"keywords-for-site or research keyword-gap\",\n x_ads: \"research advertisers\",\n meta_ads: \"research advertisers or research keyword-ideas\",\n linkedin_ads: \"research advertisers (LinkedIn Ad Library) or research keyword-ideas\",\n }[platform];\n\n const code = {\n google_ads: \"NO_GOOGLE_ADS_CONNECTION\",\n ga4: \"NO_GA4_CONNECTION\",\n gsc: \"NO_GSC_CONNECTION\",\n x_ads: \"NO_X_ADS_CONNECTION\",\n meta_ads: \"NO_META_ADS_CONNECTION\",\n linkedin_ads: \"NO_LINKEDIN_ADS_CONNECTION\",\n }[platform];\n\n const envelope = {\n ok: false,\n error: {\n code,\n message: originalMessage || `No ${platformName} connection found for this company.`,\n fix: optionalTargetCompany()\n ? { action: \"continue_without\", explanation: connectionFixExplanation(platform) }\n : {\n action: \"request_connection\",\n explanation: `${connectionFixExplanation(platform)} (Optional fallback for estimated external insights: 'baker research ${alternative}'.)`,\n },\n retryable: false,\n },\n };\n\n writeJsonEnvelope(envelope);\n process.exit(1);\n}\n\n/**\n * Does this API failure mean \"the platform isn't connected\"? The read commands\n * surface the backend's own 404/403 verbatim, so the connect fix has to be\n * recognised from the code the client mapped it to plus the message.\n */\nexport function isNotConnectedError(code: string, message: string): boolean {\n if (code !== \"NOT_FOUND\" && code !== \"UNAUTHORIZED\" && code !== \"FORBIDDEN\") {\n return false;\n }\n // The last alternative is the write-path 403 (\"customer X is not in this\n // company's connected Google Ads accounts\") — a different sentence for the\n // same remedy: connect, and pick the account.\n return /no .* connection found|not connected|no .* (selected|picked)|is not in .* connected/i.test(message);\n}\n\n/**\n * Does this failure warrant the connect form? A dead token (401) always does —\n * whatever the wording, the remedy is to sign in again.\n *\n * A 404 or 403 only does when the backend says so. Both codes are overloaded:\n * 403 is also an asset-level refusal on a live connection (reconnecting cannot\n * grant it), and 404 is also how \"no staged op <ref> in this draft\" and a\n * mistyped `--chat` come back. Answering either with \"ask the user to connect\n * Meta Ads\" sends the agent to fix something that was never broken, and the\n * real missing-connection 404 says \"No <platform> connection found\" anyway.\n */\nexport function needsConnectionFix(code: string, message: string): boolean {\n if (code === \"UNAUTHORIZED\") {\n return true;\n }\n return isNotConnectedError(code, message);\n}\n\n/**\n * The organization workspace's refusal of a write to a company (`--company`).\n * It is about where the change belongs, not about the platform, so no\n * platform's permission advice applies to it.\n */\nexport function isOrganizationReadRefusal(message: string): boolean {\n return message.startsWith(\"The organization workspace only reads its companies\");\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { optionalTargetCompany } from \"../../env.ts\";\nimport type { CacheEntry } from \"./types.ts\";\n\n/**\n * One folder per company a call reads (`--company`), so the organization\n * workspace never answers one company's read with another's cached accounts.\n * Resolved per call: the flag is read after the command's modules load.\n */\nfunction cacheDir(): string {\n const company = optionalTargetCompany()?.replace(/[^a-zA-Z0-9_]/g, \"\");\n return join(homedir(), \".baker\", \"cache\", \"ads\", ...(company ? [\"company\", company] : []));\n}\n\nfunction ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\nfunction hashKey(key: string): string {\n return createHash(\"sha256\").update(key).digest(\"hex\").slice(0, 16);\n}\n\nfunction cachePath(category: string, key: string): string {\n const dir = join(cacheDir(), category);\n ensureDir(dir);\n return join(dir, `${hashKey(key)}.json`);\n}\n\nexport function cacheGet<T>(category: string, key: string): CacheEntry<T> | null {\n const path = cachePath(category, key);\n if (!existsSync(path)) {\n return null;\n }\n try {\n const raw = readFileSync(path, \"utf-8\");\n const entry = JSON.parse(raw) as CacheEntry<T>;\n if (entry.expiresAt < Date.now()) {\n rmSync(path, { force: true });\n return null;\n }\n return entry;\n } catch {\n rmSync(path, { force: true });\n return null;\n }\n}\n\nexport function cacheSet<T>(\n category: string,\n key: string,\n data: T,\n ttlMs: number,\n fields?: Record<string, string>,\n): void {\n const path = cachePath(category, key);\n const entry: CacheEntry<T> = {\n expiresAt: Date.now() + ttlMs,\n data,\n fields,\n };\n writeFileSync(path, JSON.stringify(entry), \"utf-8\");\n}\n\nconst HOUR = 60 * 60 * 1000;\nconst MINUTE = 60 * 1000;\n\nexport function getQueryTtl(query: string): number {\n const upper = query.toUpperCase();\n if (upper.includes(\"TODAY\")) {\n return 15 * MINUTE;\n }\n if (upper.includes(\"LAST_7_DAYS\") || upper.includes(\"LAST_14_DAYS\")) {\n return 1 * HOUR;\n }\n // Historical data (BETWEEN, LAST_30_DAYS, LAST_90_DAYS, etc.)\n return 6 * HOUR;\n}\n\nexport function buildQueryCacheKey(customerId: string, query: string): string {\n const today = new Date().toISOString().slice(0, 10);\n return `${customerId}:${today}:${query.trim().replace(/\\s+/g, \" \")}`;\n}\n\ninterface CachedAccount {\n id: string;\n access_type: \"direct\" | \"managed\";\n manager_id?: string;\n}\n\nexport function getManagerIdForCustomer(customerId: string): string | undefined {\n const cached = cacheGet<CachedAccount[]>(\"accounts\", \"list\");\n if (!cached) return undefined;\n const account = cached.data.find((a) => a.id === customerId);\n if (account?.access_type === \"managed\") return account.manager_id;\n return undefined;\n}\n","import { ApiError, apiGet } from \"../../client.ts\";\nimport { getEnv } from \"../../env.ts\";\nimport { handleConnectionError, isNotConnectedError } from \"../../error-handler.ts\";\nimport type { QueryContext } from \"../../geo-context.ts\";\nimport { cacheGet, cacheSet } from \"./cache.ts\";\nimport type { AdsErrorEnvelope, AdsFileSummary, AdsSuccessEnvelope } from \"./types.ts\";\n\ntype AdsOutput =\n | AdsSuccessEnvelope<unknown>\n | AdsErrorEnvelope\n | AdsFileSummary\n | { ok: true; data: unknown; query_context?: QueryContext; cached?: true; fields?: Record<string, string> }\n | { ok: false; error: { code: string; message: string } };\n\nexport function writeAdsJson(envelope: AdsOutput): void {\n process.stdout.write(`${JSON.stringify(envelope, null, 2)}\\n`);\n}\n\nexport function writeJsonEnvelope(envelope: Record<string, unknown>): void {\n process.stdout.write(`${JSON.stringify(envelope, null, 2)}\\n`);\n}\n\n/** The formats `writeAdsOutput` prints. */\nexport const TABLE_OUTPUT_FORMATS = [\"json\", \"csv\", \"jsonl\", \"md\"] as const;\n\n/** Why `--output <format>` cannot be printed, or null — rather than quietly falling back to JSON. */\nexport function outputFormatRefusal(format: string, supported: readonly string[]): string | null {\n if (supported.includes(format)) return null;\n const list =\n supported.length > 1 ? `${supported.slice(0, -1).join(\", \")} or ${supported.at(-1)}` : supported.join(\"\");\n return `--output ${format} is not supported — use ${list}`;\n}\n\nexport function toCsvRow(values: string[]): string {\n return values\n .map((v) => {\n if (v.includes(\",\") || v.includes('\"') || v.includes(\"\\n\")) {\n return `\"${v.replace(/\"/g, '\"\"')}\"`;\n }\n return v;\n })\n .join(\",\");\n}\n\nfunction flattenRow(row: Record<string, unknown>): Record<string, string> {\n const flat: Record<string, string> = {};\n for (const [key, val] of Object.entries(row)) {\n flat[key] = typeof val === \"object\" && val !== null ? JSON.stringify(val) : String(val ?? \"\");\n }\n return flat;\n}\n\n/**\n * One write per table: a line-by-line write piped into `head` hits a closed pipe on\n * the next line and crashes with EPIPE, where a single write lands in the pipe buffer.\n */\nfunction writeWhole(lines: string[]): void {\n process.stdout.write(`${lines.join(\"\\n\")}\\n`);\n}\n\nfunction writeAdsCsv(data: Array<Record<string, unknown>>, fields?: string[]): void {\n if (data.length === 0) return;\n const cols = fields ?? Object.keys(data[0] ?? {});\n const lines = [toCsvRow(cols)];\n for (const row of data) {\n const flat = flattenRow(row);\n lines.push(toCsvRow(cols.map((f) => flat[f] ?? \"\")));\n }\n writeWhole(lines);\n}\n\nfunction writeAdsJsonl(data: Array<Record<string, unknown>>): void {\n if (data.length === 0) return;\n writeWhole(data.map((row) => JSON.stringify(row)));\n}\n\n/** A `|` or line break in a name would split its cell and shift every later column. */\nfunction mdCell(value: string): string {\n return value.replace(/\\|/g, \"\\\\|\").replace(/\\r?\\n/g, \" \");\n}\n\nfunction writeAdsMd(data: Array<Record<string, unknown>>, fields?: string[]): void {\n if (data.length === 0) return;\n const cols = fields ?? Object.keys(data[0] ?? {});\n const lines = [`| ${cols.join(\" | \")} |`, `| ${cols.map(() => \"---\").join(\" | \")} |`];\n for (const row of data) {\n const flat = flattenRow(row);\n lines.push(`| ${cols.map((f) => mdCell(flat[f] ?? \"\")).join(\" | \")} |`);\n }\n writeWhole(lines);\n}\n\n/**\n * `hints` ride in the JSON envelope; csv/jsonl/md stdout has no room for them,\n * and an empty result is exactly when the hint matters, so they go to stderr.\n */\nexport function writeAdsOutput(\n data: Array<Record<string, unknown>>,\n format: string,\n fields?: string[],\n hints: string[] = [],\n): void {\n switch (format) {\n case \"csv\":\n writeAdsCsv(data, fields);\n break;\n case \"jsonl\":\n writeAdsJsonl(data);\n break;\n case \"md\":\n writeAdsMd(data, fields);\n break;\n default:\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n return;\n }\n for (const hint of hints) process.stderr.write(`${hint}\\n`);\n}\n\ninterface AccountInfo {\n id: string;\n name: string;\n access_type: \"direct\" | \"managed\";\n level: number;\n manager_id?: string;\n}\n\nasync function fetchAccounts(useCache = true): Promise<AccountInfo[]> {\n if (useCache) {\n const cached = cacheGet<AccountInfo[]>(\"accounts\", \"list\");\n if (cached) return cached.data;\n }\n const params = !useCache ? { \"skip-cache\": \"true\" } : undefined;\n const data = await apiGet<AccountInfo[]>(\"/api/ads/google/accounts\", params);\n if (useCache) {\n cacheSet(\"accounts\", \"list\", data, 60 * 60 * 1000);\n }\n return data;\n}\n\nexport async function resolveCustomerId(args: Record<string, unknown>): Promise<string> {\n const fromArgs = args[\"customer-id\"] as string | undefined;\n const customerId = fromArgs || getEnv().BAKER_GOOGLE_ADS_CUSTOMER_ID;\n\n if (customerId) {\n if (!/^\\d{10}$/.test(customerId)) {\n writeAdsJson({\n ok: false,\n error: {\n code: \"INVALID_CUSTOMER_ID\",\n message:\n \"Customer ID must be exactly 10 digits without dashes. Pass --customer-id or set BAKER_GOOGLE_ADS_CUSTOMER_ID.\",\n },\n });\n process.exit(1);\n }\n return customerId;\n }\n\n const useCache = !args[\"no-cache\"];\n\n try {\n const accounts = await fetchAccounts(useCache);\n const [single] = accounts;\n if (accounts.length === 1 && single) {\n process.stderr.write(`Using account \"${single.name}\" (${single.id})\\n`);\n return single.id;\n }\n if (accounts.length === 0) {\n handleConnectionError(\"google_ads\");\n }\n const list = accounts.map((a) => ` ${a.id} ${a.name}`).join(\"\\n\");\n writeAdsJson({\n ok: false,\n error: {\n code: \"MULTIPLE_ACCOUNTS\",\n message: `Multiple accounts found. Pass --customer-id or set BAKER_GOOGLE_ADS_CUSTOMER_ID:\\n${list}`,\n },\n });\n process.exit(1);\n } catch (err) {\n // \"No connection\" reaches here as a 404/403 from the accounts lookup. Reporting it as\n // an unusable customer id sends the agent hunting for an id that cannot exist yet.\n if (err instanceof ApiError && isNotConnectedError(err.code, err.message)) {\n handleConnectionError(\"google_ads\", err.message);\n }\n writeAdsJson({\n ok: false,\n error: {\n code: \"INVALID_CUSTOMER_ID\",\n message: \"Could not auto-detect account. Pass --customer-id or set BAKER_GOOGLE_ADS_CUSTOMER_ID.\",\n },\n });\n process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../api/src/mcp-catalog.ts","../src/commands/mcp/index.ts","../src/commands/mcp/catalog.ts","../../api/src/mcp-tools.ts","../src/commands/mcp/execute.ts","../src/commands/mcp/platforms.ts"],"sourcesContent":["/**\n * Contract for `GET /api/mcp/catalog` — searching the managed-app catalog the\n * sandbox agent can ask the user to connect when a vendor publishes no MCP\n * server of its own.\n *\n * `connect` mirrors `ToolkitConnectMode` in `convex/composio/types.ts`, folded\n * to what the user will be asked for: a sign-in or a key. Apps that need no\n * sign-in are left out — Composio refuses to connect them.\n */\nimport { z } from \"zod\";\n\nexport const MCP_CATALOG_DEFAULT_LIMIT = 8;\nexport const MCP_CATALOG_DESCRIPTION_MAX = 160;\n\nexport const mcpCatalogRequestSchema = z.object({\n search: z.string().trim().min(1, \"Provide --search\").max(100),\n limit: z.coerce.number().int().min(1).max(20).default(MCP_CATALOG_DEFAULT_LIMIT),\n});\nexport type McpCatalogRequest = z.infer<typeof mcpCatalogRequestSchema>;\n\nexport const mcpCatalogConnectSchema = z.enum([\"sign-in\", \"key\"]);\nexport type McpCatalogConnect = z.infer<typeof mcpCatalogConnectSchema>;\n\nexport const mcpCatalogEntrySchema = z.object({\n /** The toolkit slug — what request_connection `{ app }` takes. */\n app: z.string(),\n name: z.string(),\n description: z.string().max(MCP_CATALOG_DESCRIPTION_MAX),\n connect: mcpCatalogConnectSchema,\n connected: z.boolean(),\n});\nexport type McpCatalogEntry = z.infer<typeof mcpCatalogEntrySchema>;\n\nexport const mcpCatalogResponseSchema = z.object({\n apps: z.array(mcpCatalogEntrySchema),\n /** Baker's own connections this search matched — ask for these with `{ platform }`, never a managed copy. */\n platforms: z.array(z.string()).optional(),\n});\nexport type McpCatalogResponse = z.infer<typeof mcpCatalogResponseSchema>;\n","import {\n type CustomMcpDisableResponse,\n type CustomMcpVerifyResponse,\n customMcpServerNameRequestSchema,\n} from \"@baker/api\";\nimport { type McpCatalogResponse, mcpCatalogRequestSchema } from \"@baker/api/mcp-catalog\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet, apiPost } from \"../../client.ts\";\nimport { getEnv } from \"../../env.ts\";\nimport { repeatedValues } from \"../../lib/repeatedFlags.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { catalogHints } from \"./catalog.ts\";\nimport { executeCommand, toolsCommand } from \"./execute.ts\";\nimport { type ConnectedPlatform, platformEntry } from \"./platforms.ts\";\n\nconst SCOPES = [\"user\", \"user_org\", \"company\", \"org\"] as const;\ntype Scope = (typeof SCOPES)[number];\n\nfunction parseScope(raw: unknown): Scope {\n const scope = raw === undefined ? \"company\" : String(raw);\n if (!(SCOPES as readonly string[]).includes(scope)) {\n throw new ApiError(\"VALIDATION_ERROR\", `Invalid --scope \"${scope}\". Use user | user_org | company | org.`);\n }\n return scope as Scope;\n}\n\n/** The turn's message sender, injected by the bridge — required only for user scope. */\nfunction actingUserId(): string | undefined {\n return getEnv().BAKER_ACTING_USER_ID;\n}\n\ntype CustomMcpServer = {\n _id: string;\n scope: \"user\" | \"user_org\" | \"company\" | \"org\";\n name: string;\n url: string;\n headerKeys: string[];\n enabled: boolean;\n /** Absent until the address has been checked; `ok: false` means it serves no tools. */\n health?: { ok: boolean; message?: string; suggestedUrl?: string; transient?: boolean; checkedAt: number };\n createdAt: number;\n};\n\n/**\n * What to report for one custom server. `problem` is the whole point: a server can\n * be signed in, enabled and still serve nothing (wrong address), and reporting it\n * as plain \"connected\" is how an agent ends up promising tools it does not have.\n * A `transient` failure is reported separately — the tool may well answer, so\n * declaring it broken would be its own kind of lie.\n */\nfunction customEntry(server: CustomMcpServer): Record<string, unknown> {\n const failed = server.health && !server.health.ok;\n const problem = server.health?.message ?? \"This server's address is not serving tools.\";\n return {\n name: server.name,\n scope: server.scope,\n enabled: server.enabled,\n ...(failed && !server.health?.transient ? { usable: false, problem } : {}),\n ...(failed && server.health?.transient ? { lastCheck: \"failed\", problem } : {}),\n ...(failed && server.health?.suggestedUrl ? { suggestedAddress: server.health.suggestedUrl } : {}),\n };\n}\n\n/** The hint an unusable server earns — the agent must not offer its tools or invent a reason. */\nconst BROKEN_SERVER_HINT =\n \"A server marked usable=false will NOT answer: its tools are absent from this turn. Say plainly that the tool is not working and relay `problem`; never claim its tools are loading, coming next message, or temporarily unavailable. `problem` names what a person has to fix — the address, the sign-in, or the key the server was added with — so pass on that fix and no other: never tell the user to reconnect a server whose `problem` is its address or its key. The user makes the fix in the dashboard (Brain → Integrations → More apps). If `suggestedAddress` is present, that is the address to use.\";\n\n/** The hint for a server whose last check failed for a reason that may already have passed. */\nconst LAST_CHECK_FAILED_HINT =\n \"A server with lastCheck=failed was unreachable or erroring when it was last checked — that may already have passed, and its tools ARE loaded this turn. Try the tool; if it works, say nothing about the check. If it fails, report `problem` as what happened rather than guessing.\";\n\n/** Turn repeated `--header \"K: V\"` (or `K=V`) flags into a headers record. */\n/** `--header` is repeatable, so its values come off the command line — citty keeps only the last. */\nfunction parseHeaders(raw: unknown, rawArgs?: readonly string[]): Record<string, string> | undefined {\n const list = repeatedValues(rawArgs, \"header\", raw);\n const headers: Record<string, string> = {};\n for (const entry of list) {\n const text = String(entry);\n const sep = text.indexOf(\":\") >= 0 && (text.indexOf(\":\") < text.indexOf(\"=\") || text.indexOf(\"=\") < 0) ? \":\" : \"=\";\n const at = text.indexOf(sep);\n if (at <= 0) {\n throw new ApiError(\"VALIDATION_ERROR\", `Invalid header \"${text}\". Use \"Key: Value\".`);\n }\n headers[text.slice(0, at).trim()] = text.slice(at + 1).trim();\n }\n return Object.keys(headers).length > 0 ? headers : undefined;\n}\n\nfunction fail(err: unknown): never {\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: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\ntype ManagedConnection = {\n toolkitSlug: string;\n scope: \"user\" | \"user_org\" | \"company\" | \"org\";\n status: string;\n accountLabel: string | null;\n readOnly: boolean;\n};\n\ntype ConnectedResponse = {\n managed: ManagedConnection[];\n custom: CustomMcpServer[];\n platforms: ConnectedPlatform[];\n};\n\n/** The one thing an agent must not do with this list: infer a platform's state from the MCP half. */\nconst PLATFORMS_HINT =\n \"`platforms` are connected accounts you reach through `baker` commands (HubSpot, Google Ads, GA4, Search Console, Tag Manager, …), NOT mcp__* tools — there is no tool to call for them. A platform listed here IS connected: never tell the user to connect it, and never conclude it is missing because it has no mcp__* entry. Read what it holds with its own command family (`baker hubspot …`, `baker ads google …`, `baker ga4 …`, and so on).\";\n\nregisterSchema({\n command: \"mcp.connected\",\n description:\n \"List everything this chat can reach: managed integrations (Attio, Slack, Gmail, Google Sheets, …), custom MCP servers, and the platforms the company signed in to (HubSpot, Google Ads, GA4, Search Console, Tag Manager) which you read through their own `baker` commands. Start here when the user mentions an external tool or platform.\",\n args: {},\n});\n\nconst connectedCommand = defineCommand({\n meta: {\n name: \"connected\",\n description: `Everything this chat can reach — managed integrations, custom MCP servers, and connected platforms.\n\nManaged tools ride the composio servers (mcp__composio_<scope>__*); custom servers expose mcp__<name>__*.\nPlatforms (HubSpot, Google Ads, GA4, …) have no mcp__* tools at all — you read them with their own\n\\`baker\\` command family, and one listed here is connected and ready to use.\nA tool or platform the user names that is NOT listed anywhere here is simply not connected yet.`,\n },\n run: async () => {\n try {\n const user = actingUserId();\n const data = await apiGet<ConnectedResponse>(\"/api/mcp/connected\", user ? { actingUserId: user } : undefined);\n const managed = data.managed.map((c) => ({\n toolkit: c.toolkitSlug,\n scope: c.scope,\n ...(c.status !== \"ACTIVE\" ? { status: c.status } : {}),\n ...(c.accountLabel ? { account: c.accountLabel } : {}),\n ...(c.readOnly ? { readOnly: true } : {}),\n }));\n const custom = data.custom.map(customEntry);\n const platforms = (data.platforms ?? []).map(platformEntry);\n const hints: string[] = [];\n if (platforms.length > 0) {\n hints.push(PLATFORMS_HINT);\n }\n if (data.custom.some((s) => s.health && !s.health.ok && !s.health.transient)) {\n hints.push(BROKEN_SERVER_HINT);\n }\n if (data.custom.some((s) => s.health && !s.health.ok && s.health.transient)) {\n hints.push(LAST_CHECK_FAILED_HINT);\n }\n if ([...data.managed, ...data.custom].some((e) => e.scope === \"user\" || e.scope === \"user_org\")) {\n hints.push(\n \"user/user_org entries are personal: they belong to the current message sender and load only in their turns — other users in this chat won't have them.\",\n );\n }\n hints.push(\n \"Not listed anywhere = not connected — connect it from the chat with request_connection, never by sending the user to the dashboard: a Baker platform (HubSpot, Google Ads, GA4, …) → { platform }; anything else → the vendor's own MCP server FIRST: use the address the user gave you, or WebSearch '<vendor> MCP server' and WebFetch its official docs for the remote https address and how it signs in, then { server: { name, url, auth, keyHeader } }; only when the vendor has none → `baker mcp catalog --search <name>`, then { app }. Research before you ask the user anything. What they connect loads into this same turn.\",\n );\n writeJson({\n ok: true,\n data: { managed, custom, platforms },\n hints,\n });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nconst catalogArgs = {\n search: { type: \"string\", description: \"App or vendor name, e.g. notion, clarity, pipedrive\", required: true },\n limit: { type: \"string\", description: \"Max apps to return, 1-20 (default 8)\", required: false },\n} as const;\n\nregisterSchema({\n command: \"mcp.catalog\",\n description:\n \"Search the managed apps you can ask the user to connect when a vendor has no MCP server of its own. Each app says how the user connects it (sign-in | key) and whether this chat already reaches it. Example: baker mcp catalog --search notion\",\n args: catalogArgs,\n});\n\nconst catalogCommand = defineCommand({\n meta: {\n name: \"catalog\",\n description: `Managed apps you can ask the user to connect when a vendor has no MCP server of its own.\n\nFor a tool \\`baker mcp connected\\` does not list whose vendor has no official remote MCP server:\n baker mcp catalog --search notion\n baker mcp catalog --search \"microsoft clarity\" --limit 3\n\nEach app: app (slug for request_connection), name, description, connect (sign-in | key), connected.\nPrefer the vendor's own MCP server when it publishes one; a catalog app is the fallback.`,\n },\n args: catalogArgs,\n run: async ({ args }) => {\n const parsed = mcpCatalogRequestSchema.safeParse({ search: args.search, limit: args.limit });\n if (!parsed.success) {\n writeJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: parsed.error.issues[0]?.message ?? \"Invalid arguments\" },\n });\n process.exit(1);\n }\n try {\n const user = actingUserId();\n const data = await apiGet<McpCatalogResponse>(\"/api/mcp/catalog\", {\n search: parsed.data.search,\n limit: String(parsed.data.limit),\n ...(user ? { actingUserId: user } : {}),\n });\n writeJson({\n ok: true,\n data: {\n apps: data.apps,\n ...(data.platforms?.length ? { platforms: data.platforms } : {}),\n },\n hints: catalogHints(data.apps, { platforms: data.platforms ?? [] }),\n });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nregisterSchema({\n command: \"mcp.list\",\n description: \"List the custom MCP servers this company's chats see (org + company + your own user scope).\",\n args: {},\n});\n\nconst listCommand = defineCommand({\n meta: { name: \"list\", description: \"List custom MCP servers visible to this company's chats.\" },\n run: async () => {\n try {\n const user = actingUserId();\n const data = await apiGet<{ servers: CustomMcpServer[] }>(\n \"/api/mcp/custom\",\n user ? { actingUserId: user } : undefined,\n );\n writeJson({\n ok: true,\n // Detail view: the full row (address included) plus the usability verdict.\n // `health` itself is folded into `usable`/`problem` by `customEntry`.\n data: data.servers.map((server) => ({ ...server, health: undefined, ...customEntry(server) })),\n ...(data.servers.some((s) => s.health && !s.health.ok)\n ? {\n hints: data.servers.some((s) => s.health && !s.health.ok && !s.health.transient)\n ? [BROKEN_SERVER_HINT]\n : [LAST_CHECK_FAILED_HINT],\n }\n : {}),\n });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nregisterSchema({\n command: \"mcp.add\",\n description:\n \"Register a custom MCP server. Tools appear as mcp__<name>__* on the next message. URL must be HTTPS. Scope: company (default, all chats) | org (org admin key) | user (only the current sender).\",\n args: {\n name: { type: \"string\", description: \"Server name → tools appear as mcp__<name>__*\", required: true },\n url: {\n type: \"string\",\n description: \"Full HTTPS MCP endpoint (commonly ends in /mcp, not just the domain)\",\n required: true,\n },\n scope: { type: \"string\", description: \"user | user_org | company | org (default company)\", required: false },\n header: { type: \"string\", description: 'Auth header \"Key: Value\" (repeatable)', required: false },\n },\n});\n\nconst addCommand = defineCommand({\n meta: {\n name: \"add\",\n description: `Register a custom MCP server. Tools appear as mcp__<name>__* on the NEXT message.\nFor a server the USER asks for, use request_connection { server } instead: they confirm who can use it,\ntype any key into the card (never the chat), and its tools load in this same turn.\n\nScope: company (default — every chat in the company) | org (all companies in the org; needs an admin key) | user (only the current message sender).\n\nExamples:\n baker mcp add --name weather --url https://mcp.example.com/mcp\n baker mcp add --name acme --url https://acme.dev/mcp --header \"Authorization: Bearer sk-…\"\n baker mcp add --name mine --url https://my.dev/mcp --scope user`,\n },\n args: {\n name: { type: \"string\", description: \"Server name (mcp__<name>__*)\", required: true },\n url: {\n type: \"string\",\n description: \"Full HTTPS MCP endpoint (commonly ends in /mcp, not just the domain)\",\n required: true,\n },\n scope: { type: \"string\", description: \"user | user_org | company | org (default company)\", required: false },\n header: { type: \"string\", description: 'Auth header \"Key: Value\" (repeatable)', required: false },\n },\n run: async ({ args, rawArgs }) => {\n try {\n const scope = parseScope(args.scope);\n const user = actingUserId();\n const headers = parseHeaders(args.header, rawArgs);\n const data = await apiPost<{ name: string }>(\"/api/mcp/custom\", {\n name: args.name as string,\n url: args.url as string,\n scope,\n ...(user ? { actingUserId: user } : {}),\n ...(headers ? { headers } : {}),\n });\n writeJson({\n ok: true,\n data,\n hints: [\n \"The address must be the full MCP endpoint (commonly ending in /mcp), not just the domain — a domain on its own usually answers sign-in and then serves no tools.\",\n \"The address is checked in the background. Run `baker mcp connected` on the next message to confirm it serves tools before promising the user anything.\",\n ],\n });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nregisterSchema({\n command: \"mcp.remove\",\n description: \"Remove a company custom MCP server by name.\",\n args: { name: { type: \"string\", description: \"Server name to remove\", required: true } },\n});\n\nconst removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: `Remove a company custom MCP server by name.\n\nExample:\n baker mcp remove --name weather`,\n },\n args: { name: { type: \"string\", description: \"Server name to remove\", required: true } },\n run: async ({ args }) => {\n try {\n const user = actingUserId();\n const data = await apiPost<{ removed: boolean }>(\"/api/mcp/custom/remove\", {\n name: args.name as string,\n ...(user ? { actingUserId: user } : {}),\n });\n writeJson({ ok: true, data });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nconst serverNameArgs = {\n name: { type: \"string\", description: \"Custom server name, as `baker mcp list` shows it\", required: true },\n} as const;\n\nregisterSchema({\n command: \"mcp.verify\",\n description:\n \"Check a custom MCP server now (the dashboard's 'Check now') and store the result. Use after the user fixed its address or sign-in, or when its tools failed this turn.\",\n args: serverNameArgs,\n});\n\nconst verifyCommand = defineCommand({\n meta: {\n name: \"verify\",\n description: `Check a custom MCP server now and store the result.\n\nExample:\n baker mcp verify --name weather`,\n },\n args: serverNameArgs,\n run: async ({ args }) => {\n const parsed = customMcpServerNameRequestSchema.safeParse({ name: args.name, actingUserId: actingUserId() });\n if (!parsed.success) {\n fail(new ApiError(\"VALIDATION_ERROR\", parsed.error.issues[0]?.message ?? \"Invalid arguments\"));\n }\n try {\n const data = await apiPost<CustomMcpVerifyResponse>(\"/api/mcp/custom/verify\", parsed.data);\n writeJson({\n ok: true,\n data,\n hints: [\n data.ok\n ? \"The server answers and serves tools. Its tools load on the next message.\"\n : data.transient\n ? LAST_CHECK_FAILED_HINT\n : BROKEN_SERVER_HINT,\n ],\n });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nregisterSchema({\n command: \"mcp.disable\",\n description:\n \"Switch a custom MCP server off so its tools stop loading; its address and sign-in are kept. Turning it back on is done by a person in the dashboard, never by the agent.\",\n args: serverNameArgs,\n});\n\nconst disableCommand = defineCommand({\n meta: {\n name: \"disable\",\n description: `Switch a custom MCP server off (its tools stop loading). Only a person can turn it back on, in the dashboard.\n\nExample:\n baker mcp disable --name weather`,\n },\n args: serverNameArgs,\n run: async ({ args }) => {\n const parsed = customMcpServerNameRequestSchema.safeParse({ name: args.name, actingUserId: actingUserId() });\n if (!parsed.success) {\n fail(new ApiError(\"VALIDATION_ERROR\", parsed.error.issues[0]?.message ?? \"Invalid arguments\"));\n }\n try {\n const data = await apiPost<CustomMcpDisableResponse>(\"/api/mcp/custom/disable\", parsed.data);\n writeJson({\n ok: true,\n data,\n hints: [\n \"Its tools stop loading from the next message, and this applies right away — publishing or discarding this chat does not undo it. Tell the user they can turn it back on in Brain → Integrations → More apps.\",\n ],\n });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nexport const mcpCommand = defineCommand({\n meta: {\n name: \"mcp\",\n description: `Third-party tools for this company — see what's connected, register custom HTTPS MCP endpoints.\n\nTools from a registered server appear as mcp__<name>__* on the next message.\nManaged here are **company-scoped** servers; user- and org-scoped servers are managed in the dashboard.\n\nStart here:\n baker mcp connected # everything this chat can reach: managed integrations, custom servers, connected platforms\n baker mcp catalog --search notion # managed apps you can connect when a vendor has no MCP server of its own\n\nRun a connected app's read-only tool from the command line (JSON on stdout — for reports and scripts):\n baker mcp tools --app googlesheets --search \"read rows\"\n baker mcp execute --tool GOOGLESHEETS_BATCH_GET --get-schema\n baker mcp execute --tool GOOGLESHEETS_BATCH_GET --data '{\"spreadsheet_id\":\"…\",\"ranges\":[\"A1:D50\"]}'\n\nExamples:\n baker mcp add --name weather --url https://mcp.example.com/mcp\n baker mcp add --name acme --url https://acme.dev/mcp --header \"Authorization: Bearer sk-…\"\n baker mcp remove --name weather\n baker mcp verify --name weather # check it now after the user fixed it\n baker mcp disable --name weather # stop its tools loading (only a person turns it back on)\nFull guide: __tooling__/docs/tools/baker/mcp.md`,\n },\n subCommands: {\n connected: connectedCommand,\n catalog: catalogCommand,\n tools: toolsCommand,\n execute: executeCommand,\n list: listCommand,\n add: addCommand,\n remove: removeCommand,\n verify: verifyCommand,\n disable: disableCommand,\n },\n});\n","/**\n * What `baker mcp catalog` tells the agent to do next with the managed apps it\n * found — the fallback when a vendor publishes no MCP server of its own.\n */\nimport type { McpCatalogEntry } from \"@baker/api/mcp-catalog\";\n\nconst PREFER_VENDOR_HINT =\n 'The vendor\\'s own MCP server comes before any app here. If you have not yet, WebSearch \"<vendor> MCP server\" and WebFetch its official docs for the remote https address and how it signs in, then ask for it with request_connection `{ server: { name, url, auth, keyHeader } }`. Only when the vendor has none, ask for an app from this catalog with request_connection `{ app: \"<slug>\", reason }` — the user connects it in the chat and its tools load right after, in this same turn.';\n\nconst ALREADY_CONNECTED_HINT =\n \"An app marked connected is already reachable — use its mcp__composio_* tools; do not ask again.\";\n\nconst NO_MATCH_HINT =\n \"Nothing in the catalog matches. WebSearch for the vendor's official remote MCP server (its docs, its developer site) before telling the user it can't be connected — if one exists, ask for it with request_connection `{ server }`. Only when the web shows no official remote server either, say plainly this tool can't be connected yet and offer a Task.\";\n\n/** Baker's own connection always wins over a catalog app or anyone's MCP server for the same tool. */\nfunction firstPartyHint(platforms: readonly string[]): string {\n const asks = platforms.map((p) => `request_connection \\`{ platform: \"${p}\" }\\``).join(\" or \");\n return `This is one of Baker's own connections — ask for it with ${asks}. It is the one Baker's commands, staging and publish work with, so never connect it as a catalog app or as an MCP server, even one the vendor publishes or the user names. If it is already connected, read it with its own baker command family instead.`;\n}\n\n/** What the agent should do next with a catalog answer. */\nexport function catalogHints(\n apps: readonly McpCatalogEntry[],\n { platforms = [] }: { platforms?: readonly string[] } = {},\n): string[] {\n if (platforms.length > 0) {\n return [firstPartyHint(platforms)];\n }\n const hints = [PREFER_VENDOR_HINT];\n if (apps.some((a) => a.connected)) {\n hints.push(ALREADY_CONNECTED_HINT);\n }\n if (apps.length === 0) {\n hints.push(NO_MATCH_HINT);\n }\n return hints;\n}\n","/**\n * Contract for running a connected app's tools from the `baker` CLI —\n * `GET /api/mcp/tools` (find one), `GET /api/mcp/tool` (its inputs) and\n * `POST /api/mcp/execute` (run it).\n *\n * The same tools the chat reaches as `mcp__composio_*`, but answered as JSON on\n * stdout, so a Report's data endpoint can call one through `runBaker` and a\n * script can keep what it returned. Only tools the app marks read-only run here:\n * a published Report runs them for whoever opens it, and a chat stages every\n * change it makes until Publish.\n */\nimport { z } from \"zod\";\n\nexport const MCP_TOOLS_DEFAULT_LIMIT = 10;\nexport const MCP_TOOL_DESCRIPTION_MAX = 200;\n\n/** A Composio tool slug: `GMAIL_FETCH_EMAILS`, `GOOGLESHEETS_BATCH_GET`. */\nexport const mcpToolSlugSchema = z\n .string()\n .trim()\n .min(1, \"Provide --tool\")\n .max(120)\n .regex(/^[A-Za-z0-9_]+$/, \"A tool is named like GMAIL_FETCH_EMAILS — find one with `baker mcp tools --search`\")\n .transform((slug) => slug.toUpperCase());\n\n/** A toolkit slug as `baker mcp connected` lists it: `gmail`, `googlesheets`. */\nexport const mcpAppSlugSchema = z\n .string()\n .trim()\n .min(1)\n .max(60)\n .regex(/^[a-z0-9_-]+$/i, \"Name the app as `baker mcp connected` lists it, e.g. gmail\")\n .transform((slug) => slug.toLowerCase());\n\nexport const mcpToolsRequestSchema = z\n .object({\n search: z.string().trim().min(1).max(200).optional(),\n app: mcpAppSlugSchema.optional(),\n limit: z.coerce.number().int().min(1).max(50).default(MCP_TOOLS_DEFAULT_LIMIT),\n })\n .refine((request) => request.search !== undefined || request.app !== undefined, {\n message: \"Provide --search, --app, or both\",\n });\nexport type McpToolsRequest = z.infer<typeof mcpToolsRequestSchema>;\n\nexport const mcpToolSummarySchema = z.object({\n tool: z.string(),\n app: z.string(),\n name: z.string(),\n description: z.string().max(MCP_TOOL_DESCRIPTION_MAX),\n /** Only read-only tools run through `baker mcp execute`. */\n readOnly: z.boolean(),\n});\nexport type McpToolSummary = z.infer<typeof mcpToolSummarySchema>;\n\nexport const mcpToolsResponseSchema = z.object({\n tools: z.array(mcpToolSummarySchema),\n /** The connected apps the search ran over. */\n apps: z.array(z.string()),\n});\nexport type McpToolsResponse = z.infer<typeof mcpToolsResponseSchema>;\n\nexport const mcpToolRequestSchema = z.object({\n tool: mcpToolSlugSchema,\n full: z.boolean().default(false),\n});\n\n/** One input, folded to what the agent needs to fill it. */\nexport const mcpToolInputSchema = z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n description: z.string().optional(),\n enum: z.array(z.unknown()).optional(),\n default: z.unknown().optional(),\n});\nexport type McpToolInput = z.infer<typeof mcpToolInputSchema>;\n\nexport const mcpToolResponseSchema = z.object({\n tool: z.string(),\n app: z.string(),\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n inputs: z.array(mcpToolInputSchema),\n /** The raw JSON schemas, with `--full` only. */\n inputSchema: z.unknown().optional(),\n outputSchema: z.unknown().optional(),\n});\nexport type McpToolResponse = z.infer<typeof mcpToolResponseSchema>;\n\nexport const mcpExecuteRequestSchema = z.object({\n tool: mcpToolSlugSchema,\n arguments: z.record(z.string(), z.unknown()).default({}),\n actingUserId: z.string().optional(),\n});\nexport type McpExecuteRequest = z.infer<typeof mcpExecuteRequestSchema>;\n\nexport const mcpExecuteResponseSchema = z.object({\n tool: z.string(),\n app: z.string(),\n /** Whose connection answered: `company` is the one a published Report reads. */\n scope: z.enum([\"user\", \"user_org\", \"company\", \"org\"]),\n account: z.string().nullable(),\n /** What the tool returned, as the app returned it. */\n data: z.unknown(),\n});\nexport type McpExecuteResponse = z.infer<typeof mcpExecuteResponseSchema>;\n","/**\n * `baker mcp tools` and `baker mcp execute`: a connected app's tools run from\n * the command line, so what they return is JSON on stdout — for a Report's data\n * endpoint (`runReportBaker`), a script, or a file — instead of a tool result\n * only the chat sees. The same tools as `mcp__composio_*`, reads only.\n */\nimport {\n type McpExecuteResponse,\n type McpToolResponse,\n type McpToolsResponse,\n mcpExecuteRequestSchema,\n mcpToolRequestSchema,\n mcpToolsRequestSchema,\n} from \"@baker/api/mcp-tools\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet, apiPost } from \"../../client.ts\";\nimport { getEnv } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\n\n/** A tool's run gets as long as a report gives one `baker` call, less its own margin. */\nconst EXECUTE_TIMEOUT_MS = 120_000;\n\nfunction fail(err: unknown): never {\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: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nfunction invalid(message: string): never {\n return fail(new ApiError(\"VALIDATION_ERROR\", message));\n}\n\n/** The turn's message sender, injected by the bridge; the backend vouches for it, and a report has none. */\nfunction actingUserId(): string | undefined {\n return getEnv().BAKER_ACTING_USER_ID;\n}\n\n/** What to tell the agent after a run: above all, whether a published report will read the same thing. */\nexport function executeHints(ran: Pick<McpExecuteResponse, \"tool\" | \"app\" | \"scope\">): string[] {\n const hints: string[] = [];\n if (ran.scope !== \"company\") {\n hints.push(\n `This answer came from a ${ran.scope === \"org\" ? \"connection shared by the organization\" : \"connection of the person sending this message\"}. A published report reads only apps connected for the whole company, so ${ran.tool} will answer \"not connected\" there: ask the user to connect ${ran.app} for the whole company before building a report on it.`,\n );\n }\n hints.push(\n `In a report endpoint: runReportBaker(event, [\"mcp\", \"execute\", \"--tool\", \"${ran.tool}\", \"--data\", JSON.stringify(args)]) — return only the fields the page shows.`,\n );\n return hints;\n}\n\nconst toolsArgs = {\n search: {\n type: \"string\",\n description: 'What the tool should do, e.g. \"fetch emails\", \"read sheet rows\"',\n required: false,\n },\n app: {\n type: \"string\",\n description: \"Only this connected app, as `baker mcp connected` lists it (gmail)\",\n required: false,\n },\n limit: { type: \"string\", description: \"Max tools to return, 1-50 (default 10)\", required: false },\n} as const;\n\nregisterSchema({\n command: \"mcp.tools\",\n description:\n 'Find a connected app\\'s tools to run with `baker mcp execute`. Searches the apps this chat reaches (or --app). Each tool: tool (slug), app, name, description, readOnly (only read-only tools run). Example: baker mcp tools --app googlesheets --search \"read rows\"',\n args: toolsArgs,\n});\n\nexport const toolsCommand = defineCommand({\n meta: {\n name: \"tools\",\n description: `Find a connected app's tools to run from the command line with \\`baker mcp execute\\`.\n\nStart here:\n baker mcp tools --search \"fetch unread emails\" # across every connected app\n baker mcp tools --app googlesheets --search \"read rows\"\n baker mcp tools --app hubspot --limit 20 # an app's tools, no search\n\nEach tool: tool (the slug execute takes), app, name, description, readOnly.\nOnly readOnly tools run through execute; a tool that changes things is the chat's own mcp__composio_* tool.`,\n },\n args: toolsArgs,\n run: async ({ args }) => {\n const parsed = mcpToolsRequestSchema.safeParse({ search: args.search, app: args.app, limit: args.limit });\n if (!parsed.success) {\n invalid(parsed.error.issues[0]?.message ?? \"Invalid arguments\");\n }\n try {\n const user = actingUserId();\n const data = await apiGet<McpToolsResponse>(\"/api/mcp/tools\", {\n ...(parsed.data.search ? { search: parsed.data.search } : {}),\n ...(parsed.data.app ? { app: parsed.data.app } : {}),\n limit: String(parsed.data.limit),\n ...(user ? { actingUserId: user } : {}),\n });\n const hints =\n data.apps.length === 0\n ? [\n \"No app is connected here. Check `baker mcp connected`; connect one with request_connection, from the chat.\",\n ]\n : [\n \"Run one with `baker mcp execute --tool <TOOL> --get-schema` first to see its inputs, then `--data '<json>'`.\",\n ...(data.tools.some((tool) => !tool.readOnly)\n ? [\n \"readOnly: false tools cannot run through execute — they change things; use the chat's mcp__composio_* tool.\",\n ]\n : []),\n ];\n writeJson({ ok: true, data, hints });\n } catch (err) {\n fail(err);\n }\n },\n});\n\nconst executeArgs = {\n tool: { type: \"string\", description: \"Tool slug from `baker mcp tools`, e.g. GMAIL_FETCH_EMAILS\", required: true },\n data: {\n type: \"string\",\n description: \"The tool's arguments as a JSON object, e.g. '{\\\"max_results\\\":10}'\",\n required: false,\n },\n \"get-schema\": { type: \"boolean\", description: \"Show the tool's inputs instead of running it\", required: false },\n full: {\n type: \"boolean\",\n description: \"With --get-schema: the raw input and output JSON schemas too\",\n required: false,\n },\n} as const;\n\nregisterSchema({\n command: \"mcp.execute\",\n description:\n 'Run one read-only tool of a connected app and print what it returned as JSON — for a report\\'s data endpoint, a script, or keeping the answer. `--get-schema` shows its inputs first. A published report reaches only apps connected for the whole company. Example: baker mcp execute --tool GOOGLESHEETS_BATCH_GET --data \\'{\"spreadsheet_id\":\"…\",\"ranges\":[\"A1:D50\"]}\\'',\n args: executeArgs,\n});\n\nfunction parseData(raw: unknown): Record<string, unknown> {\n if (raw === undefined || raw === \"\") {\n return {};\n }\n let value: unknown;\n try {\n value = JSON.parse(String(raw));\n } catch {\n invalid(`--data must be a JSON object, e.g. '{\"max_results\":10}' (keys and strings in double quotes).`);\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n invalid(`--data must be a JSON object, e.g. '{\"max_results\":10}'.`);\n }\n return value as Record<string, unknown>;\n}\n\nexport const executeCommand = defineCommand({\n meta: {\n name: \"execute\",\n description: `Run one read-only tool of a connected app; prints what it returned as JSON.\n\nThe same tools as the chat's mcp__composio_* servers, answered on stdout so a report's data endpoint,\na script or a file can keep it. Find the tool with \\`baker mcp tools\\`, read its inputs, then run it:\n baker mcp execute --tool GOOGLESHEETS_BATCH_GET --get-schema\n baker mcp execute --tool GOOGLESHEETS_BATCH_GET --data '{\"spreadsheet_id\":\"1AbC…\",\"ranges\":[\"Sheet1!A1:D50\"]}'\n baker mcp execute --tool GMAIL_FETCH_EMAILS --data '{\"query\":\"is:unread newer_than:7d\",\"max_results\":20}' > /tmp/inbox.json\n\nReads only: a tool that changes things (send, create, update) is refused — use the chat's own tool for it.\nA published report runs as nobody, so it reaches only apps connected for the whole company; a\nperson's own connection answers in their chat and nowhere else.`,\n },\n args: executeArgs,\n run: async ({ args }) => {\n if (args[\"get-schema\"]) {\n const parsed = mcpToolRequestSchema.safeParse({ tool: args.tool, full: args.full === true });\n if (!parsed.success) {\n invalid(parsed.error.issues[0]?.message ?? \"Invalid arguments\");\n }\n try {\n const data = await apiGet<McpToolResponse>(\"/api/mcp/tool\", {\n tool: parsed.data.tool,\n ...(parsed.data.full ? { full: \"true\" } : {}),\n });\n writeJson({\n ok: true,\n data,\n hints: data.readOnly\n ? [`Run it: baker mcp execute --tool ${data.tool} --data '<json object of the inputs above>'`]\n : [\n `${data.tool} changes things, so execute refuses it. In a chat, use the app's own mcp__composio_* tool.`,\n ],\n });\n } catch (err) {\n fail(err);\n }\n return;\n }\n const parsed = mcpExecuteRequestSchema.safeParse({\n tool: args.tool,\n arguments: parseData(args.data),\n actingUserId: actingUserId(),\n });\n if (!parsed.success) {\n invalid(parsed.error.issues[0]?.message ?? \"Invalid arguments\");\n }\n try {\n const data = await apiPost<McpExecuteResponse>(\"/api/mcp/execute\", parsed.data, {\n timeoutMs: EXECUTE_TIMEOUT_MS,\n });\n writeJson({ ok: true, data, hints: executeHints(data) });\n } catch (err) {\n fail(err);\n }\n },\n});\n","/**\n * How a connected platform reads back to the agent.\n *\n * A platform (HubSpot, Google Ads, GA4, …) is an account the company signed in\n * to, reached through its own `baker` command family rather than an `mcp__*`\n * tool. It rides `mcp connected` because that is the one answer to \"what can\n * this chat reach\" — and because an agent that only saw the tool half had no\n * way to tell a working HubSpot connection from a missing one.\n */\n\nexport interface ConnectedPlatform {\n type: string;\n label: string;\n account: string | null;\n reads: string[];\n readsLabel: string | null;\n}\n\n/** \"Ad Accounts\" -> `adAccounts`, \"Properties\" -> `properties`. */\nfunction readsKey(label: string): string {\n const [first = \"\", ...rest] = label.split(\" \");\n return [first.toLowerCase(), ...rest].join(\"\");\n}\n\n/**\n * One platform as the agent sees it. The resources are keyed by the platform's\n * own word for them — `properties` for GA4, `containers` for Tag Manager,\n * `adAccounts` for the ad platforms — so what the agent reads back matches what\n * the user sees in the dashboard.\n */\nexport function platformEntry(platform: ConnectedPlatform): Record<string, unknown> {\n return {\n platform: platform.label,\n ...(platform.account ? { account: platform.account } : {}),\n ...(platform.readsLabel && platform.reads.length > 0 ? { [readsKey(platform.readsLabel)]: platform.reads } : {}),\n };\n}\n"],"mappings":"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","names":["defineCommand","z","parsed","actingUserId","fail","defineCommand"]}