@koda-sl/baker-cli 0.486.0 → 0.488.0-dev.5028cd8d3

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 (550) hide show
  1. package/README.md +3 -1
  2. package/dist/{account-Z65CPOWE.js → account-ELL7ZZLM.js} +3 -3
  3. package/dist/{account-VH2AATWI.js → account-YVQGH2GB.js} +5 -5
  4. package/dist/{account-reads-GYI2SS6T.js → account-reads-5B4FFOZU.js} +4 -4
  5. package/dist/{account-writes-4N2MA2ZR.js → account-writes-CEPERFD6.js} +3 -3
  6. package/dist/{accounts-SPLE7URQ.js → accounts-6WNFCGUW.js} +6 -6
  7. package/dist/{accounts-XG472YLB.js → accounts-ZIE7J6RR.js} +4 -4
  8. package/dist/{actions-KQTXBNJU.js → actions-QZQTB3KR.js} +18 -18
  9. package/dist/{activecampaign-42JXANUA.js → activecampaign-LIXWDX74.js} +4 -4
  10. package/dist/{ad-group-writes-EUTMPBMK.js → ad-group-writes-XGSCEQTW.js} +3 -3
  11. package/dist/{ad-groups-OVPAI5RM.js → ad-groups-GKOLDGET.js} +7 -7
  12. package/dist/{ad-writes-DACTYFEO.js → ad-writes-VVD36JKH.js} +3 -3
  13. package/dist/{add-KTEJCE4L.js → add-HQFI5UVS.js} +4 -4
  14. package/dist/{add-C3FQ5D62.js → add-JWJP4CQY.js} +3 -3
  15. package/dist/{ads-L65JIKCD.js → ads-EKZVHKPN.js} +8 -8
  16. package/dist/{ads-WPI3AMSR.js → ads-F365TPXO.js} +5 -5
  17. package/dist/{advertisers-36HP3AOE.js → advertisers-TPIS4R73.js} +6 -6
  18. package/dist/{analytics-IFNBT7IM.js → analytics-AFW7ESJW.js} +7 -7
  19. package/dist/{analytics-I4LZCRG2.js → analytics-QG7TBGMC.js} +4 -4
  20. package/dist/{animate-SVEPM267.js → animate-G4P3OEJE.js} +4 -4
  21. package/dist/{assign-WBLSZNCO.js → assign-VKINQVCJ.js} +4 -4
  22. package/dist/{audience-size-LOX5BNXI.js → audience-size-6ZEWCPX6.js} +4 -4
  23. package/dist/{audiences-RPLVMO4H.js → audiences-BU4JZJT7.js} +3 -3
  24. package/dist/{audit-6AG6BPXQ.js → audit-5US7TTUF.js} +4 -4
  25. package/dist/{autocomplete-2QRU7ARD.js → autocomplete-XBVLHJ4R.js} +6 -6
  26. package/dist/{avatars-EIETXCF3.js → avatars-5IBVOF63.js} +4 -4
  27. package/dist/{bid-pricing-5LZFHQTS.js → bid-pricing-EFYUHTWP.js} +5 -5
  28. package/dist/{brand-TRPJFCRL.js → brand-Z5KRGJX4.js} +2 -2
  29. package/dist/{brief-7PICJ4CO.js → brief-DGAZ6NJG.js} +19 -19
  30. package/dist/{campaign-groups-5CMTEJZZ.js → campaign-groups-AOMTKPUY.js} +9 -9
  31. package/dist/{campaign-writes-U5LTDTYK.js → campaign-writes-NSEJCINS.js} +3 -3
  32. package/dist/{campaign-writes-4RMPHQCT.js → campaign-writes-NXVLFVZ6.js} +4 -4
  33. package/dist/{campaigns-PC7UAVXR.js → campaigns-UELLCVI2.js} +12 -12
  34. package/dist/{campaigns-TFEQTSO3.js → campaigns-VWN2XPK2.js} +7 -7
  35. package/dist/{campaigns-NFRLFNXI.js → campaigns-WE42FQKM.js} +5 -5
  36. package/dist/{canvas-ZKBXEUYK.js → canvas-DG3CJ7FA.js} +14 -14
  37. package/dist/{capabilities-FNVTPCDT.js → capabilities-FDCILMJK.js} +4 -4
  38. package/dist/{catalog-USZL4SGX.js → catalog-KZNB2YJS.js} +8 -8
  39. package/dist/{catalogs-A7XMEEEP.js → catalogs-XH5NHH4C.js} +3 -3
  40. package/dist/{changes-J67WATHX.js → changes-DKP263OZ.js} +4 -4
  41. package/dist/{chatgpt-4PEWDJKP.js → chatgpt-K6KNTME4.js} +13 -13
  42. package/dist/{chats-S5FCV7YO.js → chats-NFSZEF5L.js} +4 -4
  43. package/dist/{check-5RW2MX7V.js → check-6UVMPPNH.js} +11 -11
  44. package/dist/{chunk-NEOUY3Q7.js → chunk-2GT76KEX.js} +3 -3
  45. package/dist/{chunk-NCP6RD6A.js → chunk-33XFNSBM.js} +2 -2
  46. package/dist/{chunk-FRK7SSEH.js → chunk-36SU43V2.js} +2 -2
  47. package/dist/{chunk-IG627WWY.js → chunk-3BKNGXCL.js} +169 -169
  48. package/dist/chunk-3BKNGXCL.js.map +1 -0
  49. package/dist/{chunk-G2LGMWNG.js → chunk-3VCHJN2B.js} +2 -2
  50. package/dist/{chunk-WNJ5SYAG.js → chunk-5562QFVB.js} +2 -2
  51. package/dist/{chunk-IN6AW5P3.js → chunk-5QW4OQM4.js} +6 -6
  52. package/dist/{chunk-3UXMQ3K2.js → chunk-5SRHACZW.js} +2 -2
  53. package/dist/{chunk-MIOOPOG2.js → chunk-6KULDLLR.js} +5 -5
  54. package/dist/{chunk-JAC6JVCI.js → chunk-6OIKNJ7G.js} +2 -2
  55. package/dist/{chunk-X3PM773M.js → chunk-6TG4CAYD.js} +2 -2
  56. package/dist/{chunk-JFA4R3KS.js → chunk-6VZHOXP6.js} +2 -2
  57. package/dist/{chunk-67S6LADS.js → chunk-7RKUHTS6.js} +6 -6
  58. package/dist/{chunk-WKLQFSV6.js → chunk-AGVCQHQK.js} +5 -5
  59. package/dist/{chunk-XUB2EK65.js → chunk-AJ45PER5.js} +2 -2
  60. package/dist/{chunk-IWWOGBGA.js → chunk-AL3VGEG5.js} +2 -2
  61. package/dist/{chunk-R5WNYLG4.js → chunk-AQMMAB2N.js} +2 -2
  62. package/dist/{chunk-GPY2JEXL.js → chunk-B6VCTXSD.js} +4 -4
  63. package/dist/{chunk-IKCP5NCE.js → chunk-B7FVPHCW.js} +2 -2
  64. package/dist/{chunk-RVXMK4X2.js → chunk-C4MJ3WPQ.js} +4 -4
  65. package/dist/{chunk-DQC4NIJE.js → chunk-C6BFE4X2.js} +3 -3
  66. package/dist/{chunk-ABXTGAG7.js → chunk-D2YHDDKW.js} +2 -2
  67. package/dist/{chunk-HKQH6H2P.js → chunk-E4GWQFTL.js} +3 -3
  68. package/dist/{chunk-DFQHO3SL.js → chunk-EIDTAHUC.js} +6 -6
  69. package/dist/{chunk-CCIDHU6M.js → chunk-ERRMJ7AZ.js} +2 -2
  70. package/dist/{chunk-UMZIQIWN.js → chunk-EZ5KY6I2.js} +2 -2
  71. package/dist/{chunk-MCJ5I5LR.js → chunk-F3CZFUXZ.js} +4 -4
  72. package/dist/chunk-F3CZFUXZ.js.map +1 -0
  73. package/dist/{chunk-4AMIHNNP.js → chunk-F5IH7G2F.js} +2 -2
  74. package/dist/{chunk-KDWH2JKT.js → chunk-GFTDR3Z2.js} +7 -7
  75. package/dist/{chunk-OEYVPXQZ.js → chunk-GGY2KH3K.js} +3 -3
  76. package/dist/{chunk-JWSEPW7F.js → chunk-GYJQV3IX.js} +2 -2
  77. package/dist/{chunk-DH5CKOYK.js → chunk-HVI4DNZL.js} +2 -2
  78. package/dist/{chunk-66WEOQV5.js → chunk-HY4G44UC.js} +4 -4
  79. package/dist/{chunk-BTY4LZBG.js → chunk-I2WRZJAC.js} +2 -2
  80. package/dist/{chunk-XUR4QWCS.js → chunk-IHUIXQBP.js} +2 -2
  81. package/dist/{chunk-AHF6TQWB.js → chunk-IMWXYSCP.js} +2 -2
  82. package/dist/{chunk-LCMIAWUZ.js → chunk-L63JZLCX.js} +2 -1
  83. package/dist/chunk-L63JZLCX.js.map +1 -0
  84. package/dist/{chunk-FEELV5IV.js → chunk-M2D7ZWEU.js} +2 -2
  85. package/dist/{chunk-EOY6BK4C.js → chunk-MP5IMGKF.js} +2 -2
  86. package/dist/{chunk-NR2OVOTD.js → chunk-NA2KOPW6.js} +2 -2
  87. package/dist/{chunk-ML7DLFFY.js → chunk-NAA4CKZZ.js} +37 -15
  88. package/dist/chunk-NAA4CKZZ.js.map +1 -0
  89. package/dist/{chunk-YD7BQDJ6.js → chunk-NDVAOHMY.js} +2 -2
  90. package/dist/{chunk-PZPSCYN3.js → chunk-NLUFREI6.js} +5 -5
  91. package/dist/{chunk-RD2XXQW3.js → chunk-OKLYOMQ3.js} +10 -3
  92. package/dist/{chunk-RD2XXQW3.js.map → chunk-OKLYOMQ3.js.map} +1 -1
  93. package/dist/{chunk-7SHNGCJ2.js → chunk-ONVPV23E.js} +3 -3
  94. package/dist/{chunk-F4WLKHUS.js → chunk-OWRFIAW2.js} +3 -3
  95. package/dist/{chunk-NPMAATZG.js → chunk-P5ENZXC2.js} +2 -2
  96. package/dist/{chunk-NNF4RARY.js → chunk-QK76OM22.js} +3 -3
  97. package/dist/{chunk-YXVJA37O.js → chunk-R5IZ6P3E.js} +18 -18
  98. package/dist/{chunk-CXQRTLSQ.js → chunk-RBIWYPJQ.js} +3 -3
  99. package/dist/{chunk-DVA4DOBH.js → chunk-RESDRJRP.js} +3 -3
  100. package/dist/{chunk-JYALBYN7.js → chunk-RGX7AQ2K.js} +2 -2
  101. package/dist/{chunk-CTJPTSD4.js → chunk-RWLQYW2L.js} +13 -13
  102. package/dist/{chunk-ZCQVKDHV.js → chunk-S7B2TOOU.js} +2 -2
  103. package/dist/{chunk-MZPS46OR.js → chunk-SIKCVWM3.js} +2 -2
  104. package/dist/{chunk-ZINMEMOB.js → chunk-TBZPXGEW.js} +5 -5
  105. package/dist/{chunk-62JQQUAU.js → chunk-TFJW5CXD.js} +5 -5
  106. package/dist/{chunk-UKL7GWEH.js → chunk-TPS3X5DI.js} +2 -2
  107. package/dist/{chunk-NVGXYF6K.js → chunk-UM7ESCIN.js} +2 -2
  108. package/dist/{chunk-TNOJ6O6B.js → chunk-UWDYGSJF.js} +2 -2
  109. package/dist/{chunk-7VHPAGPK.js → chunk-V57TZQPI.js} +2 -2
  110. package/dist/{chunk-RMLJNHCU.js → chunk-VLKYUZF7.js} +3 -3
  111. package/dist/{chunk-GIECLBJ3.js → chunk-VYZ4KQ3C.js} +8 -8
  112. package/dist/{chunk-HDTR5DNA.js → chunk-WRMMJUNJ.js} +2 -2
  113. package/dist/{chunk-UWXDNVS5.js → chunk-WY5H3XYC.js} +2 -2
  114. package/dist/{chunk-E2RFM6R2.js → chunk-XLJVJ5TK.js} +5 -5
  115. package/dist/{chunk-RLS5OPPZ.js → chunk-Y2GH4YWA.js} +2 -2
  116. package/dist/{chunk-6WXV5GTA.js → chunk-YSB26POP.js} +6 -6
  117. package/dist/{chunk-RSYOUKIQ.js → chunk-YT2ZSPWF.js} +2 -2
  118. package/dist/{claim-6MPQD43X.js → claim-7CB6TVEW.js} +4 -4
  119. package/dist/cli.js +32 -32
  120. package/dist/{companies-KRF2K4CA.js → companies-CACKHSY5.js} +4 -4
  121. package/dist/{complete-V433ON5C.js → complete-IHLTYFT2.js} +4 -4
  122. package/dist/{connect-QVIAM3GX.js → connect-J722BTO4.js} +7 -7
  123. package/dist/{conversation-VZKBZZGG.js → conversation-HRNJJJW5.js} +4 -4
  124. package/dist/{conversion-report-REOHVLCI.js → conversion-report-KL4LIVY5.js} +2 -2
  125. package/dist/{conversion-upload-command-ASHA6T6H.js → conversion-upload-command-WT6C35QL.js} +4 -4
  126. package/dist/{conversion-writes-JU7Q2MUO.js → conversion-writes-MPBCTVSP.js} +3 -3
  127. package/dist/{conversions-3ISBR3TS.js → conversions-ACYT6K7H.js} +5 -5
  128. package/dist/{conversions-ZLC6YTJ5.js → conversions-DE7W5T4Z.js} +8 -8
  129. package/dist/{create-SF6DOGDJ.js → create-6ZDLKC4F.js} +4 -4
  130. package/dist/{create-IFCCMKFT.js → create-7YO6DAAT.js} +3 -3
  131. package/dist/{create-RBZJ27B2.js → create-W7OTXLCZ.js} +5 -5
  132. package/dist/{create-R5P6JU5A.js → create-ZU7AHBYM.js} +4 -4
  133. package/dist/{creatives-K2BKGN6J.js → creatives-6UYAAC5E.js} +12 -12
  134. package/dist/{creatives-KD7MOCR3.js → creatives-XUIY3MQI.js} +9 -9
  135. package/dist/{credentials-2KJUKBMF.js → credentials-ADGJKYA7.js} +4 -4
  136. package/dist/{critique-GTUDKADX.js → critique-BBHPASRE.js} +18 -18
  137. package/dist/{critique-2UMC3GJP.js → critique-T7QGPPEX.js} +7 -7
  138. package/dist/{crm-GX72E2LT.js → crm-EKDV2SET.js} +5 -5
  139. package/dist/{crm-ZYDNEME5.js → crm-MXT2HUKU.js} +5 -5
  140. package/dist/{currency-CGDI2NXI.js → currency-TBBXPWXU.js} +4 -4
  141. package/dist/{customers-TLAHWJY6.js → customers-EZEVYT4Z.js} +8 -8
  142. package/dist/{delete-AK5IV44E.js → delete-3UDIH2ZD.js} +3 -3
  143. package/dist/{delete-RS7RQDUX.js → delete-4L3HO5B6.js} +4 -4
  144. package/dist/{delete-EJG3MRM2.js → delete-SRU4GRDT.js} +5 -5
  145. package/dist/{demographics-IKWN2H3V.js → demographics-3OWQDW7B.js} +4 -4
  146. package/dist/{discard-H6DOHJRG.js → discard-UEMA5UHL.js} +4 -4
  147. package/dist/{discover-L4TPEKGY.js → discover-RTV5XWRI.js} +4 -4
  148. package/dist/{domain-US4KKAXC.js → domain-6324IS6I.js} +4 -4
  149. package/dist/{draft-IZ4YLQRD.js → draft-2KS56KCT.js} +4 -4
  150. package/dist/{draft-OLFQZBWL.js → draft-777O2UIX.js} +4 -4
  151. package/dist/{draft-BIQ3ZAYW.js → draft-GRL7577L.js} +5 -5
  152. package/dist/{draft-R32RFDCI.js → draft-VOFJXUOC.js} +4 -4
  153. package/dist/{draft-Y2QJE2NM.js → draft-VXGZDBC7.js} +3 -3
  154. package/dist/engine/index.js +7 -7
  155. package/dist/{facets-JBZQHN3D.js → facets-YV6NORA6.js} +4 -4
  156. package/dist/{feedback-7JVO62CE.js → feedback-YITFVOHX.js} +21 -21
  157. package/dist/{feedback-record-YEJZKVFC.js → feedback-record-FW2QWFYQ.js} +22 -22
  158. package/dist/{fetch-GOY6DQRL.js → fetch-EYXLTSKW.js} +4 -4
  159. package/dist/{fit-PMSNW2PF.js → fit-KEFUU7QA.js} +13 -13
  160. package/dist/{flows-274YPU6I.js → flows-EJV7WMGD.js} +11 -11
  161. package/dist/{fonts-DIVC6DP2.js → fonts-DMIBVZ6D.js} +9 -9
  162. package/dist/{forecast-W5F2MNOV.js → forecast-5YKQZSE7.js} +5 -5
  163. package/dist/{forecast-F2CZSIMP.js → forecast-G43FKEZE.js} +4 -4
  164. package/dist/{funnel-LEUXICXU.js → funnel-ND7OXIKT.js} +5 -5
  165. package/dist/{generate-OMXBFGGR.js → generate-D3LUXFJT.js} +3 -3
  166. package/dist/{get-ZI6RB6K5.js → get-GB6SPWCA.js} +5 -5
  167. package/dist/{get-TY6AMFI4.js → get-PU3YHQWN.js} +4 -4
  168. package/dist/{google-ZTTE34A4.js → google-MHB5TOFN.js} +99 -24
  169. package/dist/google-MHB5TOFN.js.map +1 -0
  170. package/dist/{google-ads-5ARKO757.js → google-ads-XGEGKEL6.js} +4 -4
  171. package/dist/{history-SU7VQCDJ.js → history-NYWAMWAY.js} +4 -4
  172. package/dist/{history-IQ33J5PB.js → history-OQAOTEO3.js} +3 -3
  173. package/dist/{hubspot-TJED44GO.js → hubspot-LMIVY7FR.js} +8 -8
  174. package/dist/{ideas-K6FQVDUA.js → ideas-W4IIVOZ4.js} +10 -10
  175. package/dist/{images-ZMZ4WLYH.js → images-PPMIMPTS.js} +4 -4
  176. package/dist/{ingest-SGBJ3NXX.js → ingest-2YGWBWAB.js} +3 -3
  177. package/dist/{ingest-DGDNZWEM.js → ingest-FRDTTPYD.js} +4 -4
  178. package/dist/{insights-SQLE5NOJ.js → insights-PZXFCMX2.js} +2 -2
  179. package/dist/{inspect-BMQTTKMW.js → inspect-QF2S3U2E.js} +4 -4
  180. package/dist/{intent-LM36WK45.js → intent-JJTDJ732.js} +4 -4
  181. package/dist/{keyword-gap-P652ODHN.js → keyword-gap-4NQN56JP.js} +4 -4
  182. package/dist/{keyword-metrics-MQLGGJBT.js → keyword-metrics-QCIOBMTW.js} +6 -6
  183. package/dist/{keywords-for-site-JL6H2YGU.js → keywords-for-site-FS635JXM.js} +6 -6
  184. package/dist/{landing-6OJYUEWP.js → landing-6H5QEHOW.js} +2 -2
  185. package/dist/{languages-HL42MI7H.js → languages-FNE45NXJ.js} +4 -4
  186. package/dist/{leads-H6JIWVI6.js → leads-MKLSWZO6.js} +4 -4
  187. package/dist/{learn-66SKYR36.js → learn-C564OA7W.js} +10 -10
  188. package/dist/{line-item-writes-V7AKAHFC.js → line-item-writes-K7QNWRQ3.js} +4 -4
  189. package/dist/{line-items-GAMKVVIQ.js → line-items-TBTHVKCZ.js} +5 -5
  190. package/dist/{link-Z5AQP6JN.js → link-CPJJ6T4M.js} +4 -4
  191. package/dist/{linkedin-7F6YVXQL.js → linkedin-HGUK624E.js} +43 -31
  192. package/dist/{linkedin-7F6YVXQL.js.map → linkedin-HGUK624E.js.map} +1 -1
  193. package/dist/{list-NLGM3QDP.js → list-AAT5CWDA.js} +4 -4
  194. package/dist/{list-VY4UTTRG.js → list-N5SJXLYF.js} +5 -5
  195. package/dist/{list-XZVQWIJN.js → list-OKDU5W4D.js} +3 -3
  196. package/dist/{locations-AEGZ36JH.js → locations-FTDI4FBI.js} +4 -4
  197. package/dist/{locations-YA7NZY44.js → locations-VL2G22Y5.js} +2 -2
  198. package/dist/{log-JM4VLJE4.js → log-KVRWIJS5.js} +4 -4
  199. package/dist/{make-2XZBKFJC.js → make-4NTHJ4TG.js} +27 -27
  200. package/dist/{map-HRLUMCR2.js → map-HQ43MKEC.js} +5 -5
  201. package/dist/{mcp-MTFBVKLX.js → mcp-MFLUHPL5.js} +3 -3
  202. package/dist/{media-sources-7AS3274L.js → media-sources-A4ICRSKB.js} +2 -2
  203. package/dist/{members-J5KWXTXY.js → members-NRKQSSVS.js} +4 -4
  204. package/dist/{metrics-VDBJ6KL7.js → metrics-3BRTJNGW.js} +4 -4
  205. package/dist/{models-2XRYXSRA.js → models-IH6KE6OH.js} +2 -2
  206. package/dist/{normalize-CHZB4QDD.js → normalize-EH6BTBOB.js} +4 -4
  207. package/dist/{options-QLXFLESP.js → options-YEPQXXRY.js} +7 -7
  208. package/dist/organization-LP3FAWFX.js +657 -0
  209. package/dist/organization-LP3FAWFX.js.map +1 -0
  210. package/dist/{performance-SPGPGXE5.js → performance-YJVMM6DL.js} +5 -5
  211. package/dist/{pixels-6IUB3Y3H.js → pixels-DWW2TDY2.js} +3 -3
  212. package/dist/{promoted-tweet-writes-TRR3KPRJ.js → promoted-tweet-writes-M5OVEBC5.js} +4 -4
  213. package/dist/{promoted-tweets-XRYZNJI2.js → promoted-tweets-2MOIERNB.js} +3 -3
  214. package/dist/{publish-V5YGMK53.js → publish-NPENZIHV.js} +4 -4
  215. package/dist/{query-M3IO54U2.js → query-3OMCFGLU.js} +5 -5
  216. package/dist/{reddit-STSECKMZ.js → reddit-LI37G5LS.js} +5 -5
  217. package/dist/{refresh-RQ3C2MHI.js → refresh-4BBV5SPL.js} +3 -3
  218. package/dist/{release-UHGU5WBY.js → release-4X3TLMQT.js} +4 -4
  219. package/dist/{relevant-pages-G6SNC73K.js → relevant-pages-DIYZM6FJ.js} +4 -4
  220. package/dist/{remove-LTKICIIF.js → remove-Q4AES5UH.js} +3 -3
  221. package/dist/{reopen-BP5ERELB.js → reopen-SDTPL3BN.js} +4 -4
  222. package/dist/{rerun-VCZBNGDW.js → rerun-NA3MH4HG.js} +27 -27
  223. package/dist/{research-GOYMTKZM.js → research-5H265UV7.js} +3 -3
  224. package/dist/{research-L2DH5P22.js → research-LXQRNAQ2.js} +13 -13
  225. package/dist/{reset-Q62PEGOU.js → reset-42M5IKDI.js} +3 -3
  226. package/dist/{reset-SJPGSQ7I.js → reset-52PU3CVD.js} +3 -3
  227. package/dist/{resolve-R45W7QEQ.js → resolve-R4IACKIZ.js} +4 -4
  228. package/dist/{retry-NBZ7Q6HK.js → retry-FPF42ZNG.js} +3 -3
  229. package/dist/{retry-CD2Q2AJN.js → retry-RTQGAH6G.js} +3 -3
  230. package/dist/{rules-TPW37OVS.js → rules-CGNYJYVC.js} +10 -10
  231. package/dist/{rules-add-HTL6IFQJ.js → rules-add-EO5476BF.js} +11 -11
  232. package/dist/{run-IKGW7UPB.js → run-3AZJ3UQU.js} +5 -5
  233. package/dist/{run-WOOBUVP3.js → run-AFMTXJTU.js} +27 -27
  234. package/dist/{scaffold-ad-PJ47R3IF.js → scaffold-ad-OGU2IINY.js} +26 -26
  235. package/dist/{scaffold-static-ad-PZBZV6SQ.js → scaffold-static-ad-HO4BJW4H.js} +33 -33
  236. package/dist/{scaffold-video-GU4C7HCK.js → scaffold-video-TLQ4WSDK.js} +23 -23
  237. package/dist/{schedule-BSQHXJ5V.js → schedule-AWWMI5FO.js} +3 -3
  238. package/dist/{scheduled-agents-MUCDCONT.js → scheduled-agents-ELLU7BSE.js} +10 -10
  239. package/dist/{schema-YT2DBX6T.js → schema-BOOZEJPA.js} +2 -2
  240. package/dist/{schema-IWPG3YSN.js → schema-QNVLKMKG.js} +5 -5
  241. package/dist/{search-EGI5K77S.js → search-BZNIB2XF.js} +3 -3
  242. package/dist/{select-JM2MFVNP.js → select-NLWZIQ7L.js} +20 -20
  243. package/dist/{set-prompt-JP3MASVF.js → set-prompt-QKW2L553.js} +19 -19
  244. package/dist/{setup-links-5ILQNMFZ.js → setup-links-NMSQ4BG7.js} +4 -4
  245. package/dist/{site-LBXNVRPE.js → site-GGYFBZT5.js} +5 -5
  246. package/dist/{sources-N4UANUHJ.js → sources-KTGDMUV4.js} +6 -6
  247. package/dist/{sources-GP4PUTX2.js → sources-LPQZDTIU.js} +7 -7
  248. package/dist/{stale-VCZRIG25.js → stale-C5JLQ4D2.js} +19 -19
  249. package/dist/{status-GSFMLC6W.js → status-6PS3HDS5.js} +4 -4
  250. package/dist/{studio-MARZ22J2.js → studio-LMDDQWRY.js} +4 -4
  251. package/dist/{sync-LIV7FU4N.js → sync-XSATDLE6.js} +3 -3
  252. package/dist/{sync-definition-Z7TY43IA.js → sync-definition-LSGDHMHV.js} +22 -22
  253. package/dist/{tags-ZHCGHGYC.js → tags-5Y7TPJNZ.js} +4 -4
  254. package/dist/{tags-4JQX7HMT.js → tags-6TT5ZJVX.js} +4 -4
  255. package/dist/{tags-AAIFQ6LS.js → tags-BQLIOWS4.js} +4 -4
  256. package/dist/{tags-6RQVXS47.js → tags-EXWKO6Q6.js} +3 -3
  257. package/dist/{tags-F355NMIR.js → tags-OK34UGSM.js} +4 -4
  258. package/dist/{targeting-criteria-6FY2JB3V.js → targeting-criteria-AWPMOX4V.js} +3 -3
  259. package/dist/{targets-SF4AOFZ3.js → targets-EXYCOHEX.js} +5 -5
  260. package/dist/{testimonials-G7CCH7VN.js → testimonials-BTYMR3U4.js} +6 -6
  261. package/dist/{themes-PXDXIKYR.js → themes-AOU4ZZXL.js} +4 -4
  262. package/dist/{top-companies-YH2ZJEH5.js → top-companies-FRPAURAH.js} +4 -4
  263. package/dist/{translate-ZONETQ2W.js → translate-SF234KLG.js} +24 -24
  264. package/dist/{triggers-PJ3UJAHM.js → triggers-SJUXDU3X.js} +5 -5
  265. package/dist/{unlink-PTWUSM5B.js → unlink-RIZD3XTI.js} +4 -4
  266. package/dist/{unstage-NPQ5JQ6S.js → unstage-MKTIVI3I.js} +5 -5
  267. package/dist/{update-77YN5JEJ.js → update-COHXM25C.js} +5 -5
  268. package/dist/{update-643S2MUW.js → update-NKX2GXAR.js} +4 -4
  269. package/dist/{update-V6E3CIFD.js → update-OXVZXDYH.js} +4 -4
  270. package/dist/{update-2BDIJDHN.js → update-SZLYEEU4.js} +3 -3
  271. package/dist/{upload-3YJJ5VID.js → upload-LEDO3IRC.js} +4 -4
  272. package/dist/{url-options-LHS4SWWB.js → url-options-Q5SL42CV.js} +4 -4
  273. package/dist/{url-params-2DKIXKHH.js → url-params-KP6D7BF3.js} +4 -4
  274. package/dist/{validate-UTNTXLOL.js → validate-7QWQZ2OL.js} +22 -22
  275. package/dist/{videos-KEDR4GG3.js → videos-VABK4KHJ.js} +5 -5
  276. package/dist/{viewer-check-7S2EB32L.js → viewer-check-I45HHWSW.js} +12 -12
  277. package/dist/{web-UOGBNAHR.js → web-DZGUPZYQ.js} +4 -4
  278. package/dist/{winning-ads-T4MOKDYT.js → winning-ads-6MDLRSKM.js} +3 -3
  279. package/dist/{write-commands-E7JOB4HX.js → write-commands-3VIK3VC4.js} +17 -8
  280. package/dist/write-commands-3VIK3VC4.js.map +1 -0
  281. package/dist/{x-UNSN57YP.js → x-GRDU7QC2.js} +6 -6
  282. package/package.json +1 -1
  283. package/dist/chunk-IG627WWY.js.map +0 -1
  284. package/dist/chunk-LCMIAWUZ.js.map +0 -1
  285. package/dist/chunk-MCJ5I5LR.js.map +0 -1
  286. package/dist/chunk-ML7DLFFY.js.map +0 -1
  287. package/dist/google-ZTTE34A4.js.map +0 -1
  288. package/dist/organization-KEGKAP4P.js +0 -328
  289. package/dist/organization-KEGKAP4P.js.map +0 -1
  290. package/dist/write-commands-E7JOB4HX.js.map +0 -1
  291. /package/dist/{account-Z65CPOWE.js.map → account-ELL7ZZLM.js.map} +0 -0
  292. /package/dist/{account-VH2AATWI.js.map → account-YVQGH2GB.js.map} +0 -0
  293. /package/dist/{account-reads-GYI2SS6T.js.map → account-reads-5B4FFOZU.js.map} +0 -0
  294. /package/dist/{account-writes-4N2MA2ZR.js.map → account-writes-CEPERFD6.js.map} +0 -0
  295. /package/dist/{accounts-SPLE7URQ.js.map → accounts-6WNFCGUW.js.map} +0 -0
  296. /package/dist/{accounts-XG472YLB.js.map → accounts-ZIE7J6RR.js.map} +0 -0
  297. /package/dist/{actions-KQTXBNJU.js.map → actions-QZQTB3KR.js.map} +0 -0
  298. /package/dist/{activecampaign-42JXANUA.js.map → activecampaign-LIXWDX74.js.map} +0 -0
  299. /package/dist/{ad-group-writes-EUTMPBMK.js.map → ad-group-writes-XGSCEQTW.js.map} +0 -0
  300. /package/dist/{ad-groups-OVPAI5RM.js.map → ad-groups-GKOLDGET.js.map} +0 -0
  301. /package/dist/{ad-writes-DACTYFEO.js.map → ad-writes-VVD36JKH.js.map} +0 -0
  302. /package/dist/{add-KTEJCE4L.js.map → add-HQFI5UVS.js.map} +0 -0
  303. /package/dist/{add-C3FQ5D62.js.map → add-JWJP4CQY.js.map} +0 -0
  304. /package/dist/{ads-L65JIKCD.js.map → ads-EKZVHKPN.js.map} +0 -0
  305. /package/dist/{ads-WPI3AMSR.js.map → ads-F365TPXO.js.map} +0 -0
  306. /package/dist/{advertisers-36HP3AOE.js.map → advertisers-TPIS4R73.js.map} +0 -0
  307. /package/dist/{analytics-IFNBT7IM.js.map → analytics-AFW7ESJW.js.map} +0 -0
  308. /package/dist/{analytics-I4LZCRG2.js.map → analytics-QG7TBGMC.js.map} +0 -0
  309. /package/dist/{animate-SVEPM267.js.map → animate-G4P3OEJE.js.map} +0 -0
  310. /package/dist/{assign-WBLSZNCO.js.map → assign-VKINQVCJ.js.map} +0 -0
  311. /package/dist/{audience-size-LOX5BNXI.js.map → audience-size-6ZEWCPX6.js.map} +0 -0
  312. /package/dist/{audiences-RPLVMO4H.js.map → audiences-BU4JZJT7.js.map} +0 -0
  313. /package/dist/{audit-6AG6BPXQ.js.map → audit-5US7TTUF.js.map} +0 -0
  314. /package/dist/{autocomplete-2QRU7ARD.js.map → autocomplete-XBVLHJ4R.js.map} +0 -0
  315. /package/dist/{avatars-EIETXCF3.js.map → avatars-5IBVOF63.js.map} +0 -0
  316. /package/dist/{bid-pricing-5LZFHQTS.js.map → bid-pricing-EFYUHTWP.js.map} +0 -0
  317. /package/dist/{brand-TRPJFCRL.js.map → brand-Z5KRGJX4.js.map} +0 -0
  318. /package/dist/{brief-7PICJ4CO.js.map → brief-DGAZ6NJG.js.map} +0 -0
  319. /package/dist/{campaign-groups-5CMTEJZZ.js.map → campaign-groups-AOMTKPUY.js.map} +0 -0
  320. /package/dist/{campaign-writes-U5LTDTYK.js.map → campaign-writes-NSEJCINS.js.map} +0 -0
  321. /package/dist/{campaign-writes-4RMPHQCT.js.map → campaign-writes-NXVLFVZ6.js.map} +0 -0
  322. /package/dist/{campaigns-PC7UAVXR.js.map → campaigns-UELLCVI2.js.map} +0 -0
  323. /package/dist/{campaigns-TFEQTSO3.js.map → campaigns-VWN2XPK2.js.map} +0 -0
  324. /package/dist/{campaigns-NFRLFNXI.js.map → campaigns-WE42FQKM.js.map} +0 -0
  325. /package/dist/{canvas-ZKBXEUYK.js.map → canvas-DG3CJ7FA.js.map} +0 -0
  326. /package/dist/{capabilities-FNVTPCDT.js.map → capabilities-FDCILMJK.js.map} +0 -0
  327. /package/dist/{catalog-USZL4SGX.js.map → catalog-KZNB2YJS.js.map} +0 -0
  328. /package/dist/{catalogs-A7XMEEEP.js.map → catalogs-XH5NHH4C.js.map} +0 -0
  329. /package/dist/{changes-J67WATHX.js.map → changes-DKP263OZ.js.map} +0 -0
  330. /package/dist/{chatgpt-4PEWDJKP.js.map → chatgpt-K6KNTME4.js.map} +0 -0
  331. /package/dist/{chats-S5FCV7YO.js.map → chats-NFSZEF5L.js.map} +0 -0
  332. /package/dist/{check-5RW2MX7V.js.map → check-6UVMPPNH.js.map} +0 -0
  333. /package/dist/{chunk-NEOUY3Q7.js.map → chunk-2GT76KEX.js.map} +0 -0
  334. /package/dist/{chunk-NCP6RD6A.js.map → chunk-33XFNSBM.js.map} +0 -0
  335. /package/dist/{chunk-FRK7SSEH.js.map → chunk-36SU43V2.js.map} +0 -0
  336. /package/dist/{chunk-G2LGMWNG.js.map → chunk-3VCHJN2B.js.map} +0 -0
  337. /package/dist/{chunk-WNJ5SYAG.js.map → chunk-5562QFVB.js.map} +0 -0
  338. /package/dist/{chunk-IN6AW5P3.js.map → chunk-5QW4OQM4.js.map} +0 -0
  339. /package/dist/{chunk-3UXMQ3K2.js.map → chunk-5SRHACZW.js.map} +0 -0
  340. /package/dist/{chunk-MIOOPOG2.js.map → chunk-6KULDLLR.js.map} +0 -0
  341. /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
  342. /package/dist/{chunk-X3PM773M.js.map → chunk-6TG4CAYD.js.map} +0 -0
  343. /package/dist/{chunk-JFA4R3KS.js.map → chunk-6VZHOXP6.js.map} +0 -0
  344. /package/dist/{chunk-67S6LADS.js.map → chunk-7RKUHTS6.js.map} +0 -0
  345. /package/dist/{chunk-WKLQFSV6.js.map → chunk-AGVCQHQK.js.map} +0 -0
  346. /package/dist/{chunk-XUB2EK65.js.map → chunk-AJ45PER5.js.map} +0 -0
  347. /package/dist/{chunk-IWWOGBGA.js.map → chunk-AL3VGEG5.js.map} +0 -0
  348. /package/dist/{chunk-R5WNYLG4.js.map → chunk-AQMMAB2N.js.map} +0 -0
  349. /package/dist/{chunk-GPY2JEXL.js.map → chunk-B6VCTXSD.js.map} +0 -0
  350. /package/dist/{chunk-IKCP5NCE.js.map → chunk-B7FVPHCW.js.map} +0 -0
  351. /package/dist/{chunk-RVXMK4X2.js.map → chunk-C4MJ3WPQ.js.map} +0 -0
  352. /package/dist/{chunk-DQC4NIJE.js.map → chunk-C6BFE4X2.js.map} +0 -0
  353. /package/dist/{chunk-ABXTGAG7.js.map → chunk-D2YHDDKW.js.map} +0 -0
  354. /package/dist/{chunk-HKQH6H2P.js.map → chunk-E4GWQFTL.js.map} +0 -0
  355. /package/dist/{chunk-DFQHO3SL.js.map → chunk-EIDTAHUC.js.map} +0 -0
  356. /package/dist/{chunk-CCIDHU6M.js.map → chunk-ERRMJ7AZ.js.map} +0 -0
  357. /package/dist/{chunk-UMZIQIWN.js.map → chunk-EZ5KY6I2.js.map} +0 -0
  358. /package/dist/{chunk-4AMIHNNP.js.map → chunk-F5IH7G2F.js.map} +0 -0
  359. /package/dist/{chunk-KDWH2JKT.js.map → chunk-GFTDR3Z2.js.map} +0 -0
  360. /package/dist/{chunk-OEYVPXQZ.js.map → chunk-GGY2KH3K.js.map} +0 -0
  361. /package/dist/{chunk-JWSEPW7F.js.map → chunk-GYJQV3IX.js.map} +0 -0
  362. /package/dist/{chunk-DH5CKOYK.js.map → chunk-HVI4DNZL.js.map} +0 -0
  363. /package/dist/{chunk-66WEOQV5.js.map → chunk-HY4G44UC.js.map} +0 -0
  364. /package/dist/{chunk-BTY4LZBG.js.map → chunk-I2WRZJAC.js.map} +0 -0
  365. /package/dist/{chunk-XUR4QWCS.js.map → chunk-IHUIXQBP.js.map} +0 -0
  366. /package/dist/{chunk-AHF6TQWB.js.map → chunk-IMWXYSCP.js.map} +0 -0
  367. /package/dist/{chunk-FEELV5IV.js.map → chunk-M2D7ZWEU.js.map} +0 -0
  368. /package/dist/{chunk-EOY6BK4C.js.map → chunk-MP5IMGKF.js.map} +0 -0
  369. /package/dist/{chunk-NR2OVOTD.js.map → chunk-NA2KOPW6.js.map} +0 -0
  370. /package/dist/{chunk-YD7BQDJ6.js.map → chunk-NDVAOHMY.js.map} +0 -0
  371. /package/dist/{chunk-PZPSCYN3.js.map → chunk-NLUFREI6.js.map} +0 -0
  372. /package/dist/{chunk-7SHNGCJ2.js.map → chunk-ONVPV23E.js.map} +0 -0
  373. /package/dist/{chunk-F4WLKHUS.js.map → chunk-OWRFIAW2.js.map} +0 -0
  374. /package/dist/{chunk-NPMAATZG.js.map → chunk-P5ENZXC2.js.map} +0 -0
  375. /package/dist/{chunk-NNF4RARY.js.map → chunk-QK76OM22.js.map} +0 -0
  376. /package/dist/{chunk-YXVJA37O.js.map → chunk-R5IZ6P3E.js.map} +0 -0
  377. /package/dist/{chunk-CXQRTLSQ.js.map → chunk-RBIWYPJQ.js.map} +0 -0
  378. /package/dist/{chunk-DVA4DOBH.js.map → chunk-RESDRJRP.js.map} +0 -0
  379. /package/dist/{chunk-JYALBYN7.js.map → chunk-RGX7AQ2K.js.map} +0 -0
  380. /package/dist/{chunk-CTJPTSD4.js.map → chunk-RWLQYW2L.js.map} +0 -0
  381. /package/dist/{chunk-ZCQVKDHV.js.map → chunk-S7B2TOOU.js.map} +0 -0
  382. /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
  383. /package/dist/{chunk-ZINMEMOB.js.map → chunk-TBZPXGEW.js.map} +0 -0
  384. /package/dist/{chunk-62JQQUAU.js.map → chunk-TFJW5CXD.js.map} +0 -0
  385. /package/dist/{chunk-UKL7GWEH.js.map → chunk-TPS3X5DI.js.map} +0 -0
  386. /package/dist/{chunk-NVGXYF6K.js.map → chunk-UM7ESCIN.js.map} +0 -0
  387. /package/dist/{chunk-TNOJ6O6B.js.map → chunk-UWDYGSJF.js.map} +0 -0
  388. /package/dist/{chunk-7VHPAGPK.js.map → chunk-V57TZQPI.js.map} +0 -0
  389. /package/dist/{chunk-RMLJNHCU.js.map → chunk-VLKYUZF7.js.map} +0 -0
  390. /package/dist/{chunk-GIECLBJ3.js.map → chunk-VYZ4KQ3C.js.map} +0 -0
  391. /package/dist/{chunk-HDTR5DNA.js.map → chunk-WRMMJUNJ.js.map} +0 -0
  392. /package/dist/{chunk-UWXDNVS5.js.map → chunk-WY5H3XYC.js.map} +0 -0
  393. /package/dist/{chunk-E2RFM6R2.js.map → chunk-XLJVJ5TK.js.map} +0 -0
  394. /package/dist/{chunk-RLS5OPPZ.js.map → chunk-Y2GH4YWA.js.map} +0 -0
  395. /package/dist/{chunk-6WXV5GTA.js.map → chunk-YSB26POP.js.map} +0 -0
  396. /package/dist/{chunk-RSYOUKIQ.js.map → chunk-YT2ZSPWF.js.map} +0 -0
  397. /package/dist/{claim-6MPQD43X.js.map → claim-7CB6TVEW.js.map} +0 -0
  398. /package/dist/{companies-KRF2K4CA.js.map → companies-CACKHSY5.js.map} +0 -0
  399. /package/dist/{complete-V433ON5C.js.map → complete-IHLTYFT2.js.map} +0 -0
  400. /package/dist/{connect-QVIAM3GX.js.map → connect-J722BTO4.js.map} +0 -0
  401. /package/dist/{conversation-VZKBZZGG.js.map → conversation-HRNJJJW5.js.map} +0 -0
  402. /package/dist/{conversion-report-REOHVLCI.js.map → conversion-report-KL4LIVY5.js.map} +0 -0
  403. /package/dist/{conversion-upload-command-ASHA6T6H.js.map → conversion-upload-command-WT6C35QL.js.map} +0 -0
  404. /package/dist/{conversion-writes-JU7Q2MUO.js.map → conversion-writes-MPBCTVSP.js.map} +0 -0
  405. /package/dist/{conversions-3ISBR3TS.js.map → conversions-ACYT6K7H.js.map} +0 -0
  406. /package/dist/{conversions-ZLC6YTJ5.js.map → conversions-DE7W5T4Z.js.map} +0 -0
  407. /package/dist/{create-SF6DOGDJ.js.map → create-6ZDLKC4F.js.map} +0 -0
  408. /package/dist/{create-IFCCMKFT.js.map → create-7YO6DAAT.js.map} +0 -0
  409. /package/dist/{create-RBZJ27B2.js.map → create-W7OTXLCZ.js.map} +0 -0
  410. /package/dist/{create-R5P6JU5A.js.map → create-ZU7AHBYM.js.map} +0 -0
  411. /package/dist/{creatives-K2BKGN6J.js.map → creatives-6UYAAC5E.js.map} +0 -0
  412. /package/dist/{creatives-KD7MOCR3.js.map → creatives-XUIY3MQI.js.map} +0 -0
  413. /package/dist/{credentials-2KJUKBMF.js.map → credentials-ADGJKYA7.js.map} +0 -0
  414. /package/dist/{critique-GTUDKADX.js.map → critique-BBHPASRE.js.map} +0 -0
  415. /package/dist/{critique-2UMC3GJP.js.map → critique-T7QGPPEX.js.map} +0 -0
  416. /package/dist/{crm-GX72E2LT.js.map → crm-EKDV2SET.js.map} +0 -0
  417. /package/dist/{crm-ZYDNEME5.js.map → crm-MXT2HUKU.js.map} +0 -0
  418. /package/dist/{currency-CGDI2NXI.js.map → currency-TBBXPWXU.js.map} +0 -0
  419. /package/dist/{customers-TLAHWJY6.js.map → customers-EZEVYT4Z.js.map} +0 -0
  420. /package/dist/{delete-AK5IV44E.js.map → delete-3UDIH2ZD.js.map} +0 -0
  421. /package/dist/{delete-RS7RQDUX.js.map → delete-4L3HO5B6.js.map} +0 -0
  422. /package/dist/{delete-EJG3MRM2.js.map → delete-SRU4GRDT.js.map} +0 -0
  423. /package/dist/{demographics-IKWN2H3V.js.map → demographics-3OWQDW7B.js.map} +0 -0
  424. /package/dist/{discard-H6DOHJRG.js.map → discard-UEMA5UHL.js.map} +0 -0
  425. /package/dist/{discover-L4TPEKGY.js.map → discover-RTV5XWRI.js.map} +0 -0
  426. /package/dist/{domain-US4KKAXC.js.map → domain-6324IS6I.js.map} +0 -0
  427. /package/dist/{draft-IZ4YLQRD.js.map → draft-2KS56KCT.js.map} +0 -0
  428. /package/dist/{draft-OLFQZBWL.js.map → draft-777O2UIX.js.map} +0 -0
  429. /package/dist/{draft-BIQ3ZAYW.js.map → draft-GRL7577L.js.map} +0 -0
  430. /package/dist/{draft-R32RFDCI.js.map → draft-VOFJXUOC.js.map} +0 -0
  431. /package/dist/{draft-Y2QJE2NM.js.map → draft-VXGZDBC7.js.map} +0 -0
  432. /package/dist/{facets-JBZQHN3D.js.map → facets-YV6NORA6.js.map} +0 -0
  433. /package/dist/{feedback-7JVO62CE.js.map → feedback-YITFVOHX.js.map} +0 -0
  434. /package/dist/{feedback-record-YEJZKVFC.js.map → feedback-record-FW2QWFYQ.js.map} +0 -0
  435. /package/dist/{fetch-GOY6DQRL.js.map → fetch-EYXLTSKW.js.map} +0 -0
  436. /package/dist/{fit-PMSNW2PF.js.map → fit-KEFUU7QA.js.map} +0 -0
  437. /package/dist/{flows-274YPU6I.js.map → flows-EJV7WMGD.js.map} +0 -0
  438. /package/dist/{fonts-DIVC6DP2.js.map → fonts-DMIBVZ6D.js.map} +0 -0
  439. /package/dist/{forecast-W5F2MNOV.js.map → forecast-5YKQZSE7.js.map} +0 -0
  440. /package/dist/{forecast-F2CZSIMP.js.map → forecast-G43FKEZE.js.map} +0 -0
  441. /package/dist/{funnel-LEUXICXU.js.map → funnel-ND7OXIKT.js.map} +0 -0
  442. /package/dist/{generate-OMXBFGGR.js.map → generate-D3LUXFJT.js.map} +0 -0
  443. /package/dist/{get-ZI6RB6K5.js.map → get-GB6SPWCA.js.map} +0 -0
  444. /package/dist/{get-TY6AMFI4.js.map → get-PU3YHQWN.js.map} +0 -0
  445. /package/dist/{google-ads-5ARKO757.js.map → google-ads-XGEGKEL6.js.map} +0 -0
  446. /package/dist/{history-SU7VQCDJ.js.map → history-NYWAMWAY.js.map} +0 -0
  447. /package/dist/{history-IQ33J5PB.js.map → history-OQAOTEO3.js.map} +0 -0
  448. /package/dist/{hubspot-TJED44GO.js.map → hubspot-LMIVY7FR.js.map} +0 -0
  449. /package/dist/{ideas-K6FQVDUA.js.map → ideas-W4IIVOZ4.js.map} +0 -0
  450. /package/dist/{images-ZMZ4WLYH.js.map → images-PPMIMPTS.js.map} +0 -0
  451. /package/dist/{ingest-SGBJ3NXX.js.map → ingest-2YGWBWAB.js.map} +0 -0
  452. /package/dist/{ingest-DGDNZWEM.js.map → ingest-FRDTTPYD.js.map} +0 -0
  453. /package/dist/{insights-SQLE5NOJ.js.map → insights-PZXFCMX2.js.map} +0 -0
  454. /package/dist/{inspect-BMQTTKMW.js.map → inspect-QF2S3U2E.js.map} +0 -0
  455. /package/dist/{intent-LM36WK45.js.map → intent-JJTDJ732.js.map} +0 -0
  456. /package/dist/{keyword-gap-P652ODHN.js.map → keyword-gap-4NQN56JP.js.map} +0 -0
  457. /package/dist/{keyword-metrics-MQLGGJBT.js.map → keyword-metrics-QCIOBMTW.js.map} +0 -0
  458. /package/dist/{keywords-for-site-JL6H2YGU.js.map → keywords-for-site-FS635JXM.js.map} +0 -0
  459. /package/dist/{landing-6OJYUEWP.js.map → landing-6H5QEHOW.js.map} +0 -0
  460. /package/dist/{languages-HL42MI7H.js.map → languages-FNE45NXJ.js.map} +0 -0
  461. /package/dist/{leads-H6JIWVI6.js.map → leads-MKLSWZO6.js.map} +0 -0
  462. /package/dist/{learn-66SKYR36.js.map → learn-C564OA7W.js.map} +0 -0
  463. /package/dist/{line-item-writes-V7AKAHFC.js.map → line-item-writes-K7QNWRQ3.js.map} +0 -0
  464. /package/dist/{line-items-GAMKVVIQ.js.map → line-items-TBTHVKCZ.js.map} +0 -0
  465. /package/dist/{link-Z5AQP6JN.js.map → link-CPJJ6T4M.js.map} +0 -0
  466. /package/dist/{list-NLGM3QDP.js.map → list-AAT5CWDA.js.map} +0 -0
  467. /package/dist/{list-VY4UTTRG.js.map → list-N5SJXLYF.js.map} +0 -0
  468. /package/dist/{list-XZVQWIJN.js.map → list-OKDU5W4D.js.map} +0 -0
  469. /package/dist/{locations-AEGZ36JH.js.map → locations-FTDI4FBI.js.map} +0 -0
  470. /package/dist/{locations-YA7NZY44.js.map → locations-VL2G22Y5.js.map} +0 -0
  471. /package/dist/{log-JM4VLJE4.js.map → log-KVRWIJS5.js.map} +0 -0
  472. /package/dist/{make-2XZBKFJC.js.map → make-4NTHJ4TG.js.map} +0 -0
  473. /package/dist/{map-HRLUMCR2.js.map → map-HQ43MKEC.js.map} +0 -0
  474. /package/dist/{mcp-MTFBVKLX.js.map → mcp-MFLUHPL5.js.map} +0 -0
  475. /package/dist/{media-sources-7AS3274L.js.map → media-sources-A4ICRSKB.js.map} +0 -0
  476. /package/dist/{members-J5KWXTXY.js.map → members-NRKQSSVS.js.map} +0 -0
  477. /package/dist/{metrics-VDBJ6KL7.js.map → metrics-3BRTJNGW.js.map} +0 -0
  478. /package/dist/{models-2XRYXSRA.js.map → models-IH6KE6OH.js.map} +0 -0
  479. /package/dist/{normalize-CHZB4QDD.js.map → normalize-EH6BTBOB.js.map} +0 -0
  480. /package/dist/{options-QLXFLESP.js.map → options-YEPQXXRY.js.map} +0 -0
  481. /package/dist/{performance-SPGPGXE5.js.map → performance-YJVMM6DL.js.map} +0 -0
  482. /package/dist/{pixels-6IUB3Y3H.js.map → pixels-DWW2TDY2.js.map} +0 -0
  483. /package/dist/{promoted-tweet-writes-TRR3KPRJ.js.map → promoted-tweet-writes-M5OVEBC5.js.map} +0 -0
  484. /package/dist/{promoted-tweets-XRYZNJI2.js.map → promoted-tweets-2MOIERNB.js.map} +0 -0
  485. /package/dist/{publish-V5YGMK53.js.map → publish-NPENZIHV.js.map} +0 -0
  486. /package/dist/{query-M3IO54U2.js.map → query-3OMCFGLU.js.map} +0 -0
  487. /package/dist/{reddit-STSECKMZ.js.map → reddit-LI37G5LS.js.map} +0 -0
  488. /package/dist/{refresh-RQ3C2MHI.js.map → refresh-4BBV5SPL.js.map} +0 -0
  489. /package/dist/{release-UHGU5WBY.js.map → release-4X3TLMQT.js.map} +0 -0
  490. /package/dist/{relevant-pages-G6SNC73K.js.map → relevant-pages-DIYZM6FJ.js.map} +0 -0
  491. /package/dist/{remove-LTKICIIF.js.map → remove-Q4AES5UH.js.map} +0 -0
  492. /package/dist/{reopen-BP5ERELB.js.map → reopen-SDTPL3BN.js.map} +0 -0
  493. /package/dist/{rerun-VCZBNGDW.js.map → rerun-NA3MH4HG.js.map} +0 -0
  494. /package/dist/{research-GOYMTKZM.js.map → research-5H265UV7.js.map} +0 -0
  495. /package/dist/{research-L2DH5P22.js.map → research-LXQRNAQ2.js.map} +0 -0
  496. /package/dist/{reset-Q62PEGOU.js.map → reset-42M5IKDI.js.map} +0 -0
  497. /package/dist/{reset-SJPGSQ7I.js.map → reset-52PU3CVD.js.map} +0 -0
  498. /package/dist/{resolve-R45W7QEQ.js.map → resolve-R4IACKIZ.js.map} +0 -0
  499. /package/dist/{retry-NBZ7Q6HK.js.map → retry-FPF42ZNG.js.map} +0 -0
  500. /package/dist/{retry-CD2Q2AJN.js.map → retry-RTQGAH6G.js.map} +0 -0
  501. /package/dist/{rules-TPW37OVS.js.map → rules-CGNYJYVC.js.map} +0 -0
  502. /package/dist/{rules-add-HTL6IFQJ.js.map → rules-add-EO5476BF.js.map} +0 -0
  503. /package/dist/{run-IKGW7UPB.js.map → run-3AZJ3UQU.js.map} +0 -0
  504. /package/dist/{run-WOOBUVP3.js.map → run-AFMTXJTU.js.map} +0 -0
  505. /package/dist/{scaffold-ad-PJ47R3IF.js.map → scaffold-ad-OGU2IINY.js.map} +0 -0
  506. /package/dist/{scaffold-static-ad-PZBZV6SQ.js.map → scaffold-static-ad-HO4BJW4H.js.map} +0 -0
  507. /package/dist/{scaffold-video-GU4C7HCK.js.map → scaffold-video-TLQ4WSDK.js.map} +0 -0
  508. /package/dist/{schedule-BSQHXJ5V.js.map → schedule-AWWMI5FO.js.map} +0 -0
  509. /package/dist/{scheduled-agents-MUCDCONT.js.map → scheduled-agents-ELLU7BSE.js.map} +0 -0
  510. /package/dist/{schema-YT2DBX6T.js.map → schema-BOOZEJPA.js.map} +0 -0
  511. /package/dist/{schema-IWPG3YSN.js.map → schema-QNVLKMKG.js.map} +0 -0
  512. /package/dist/{search-EGI5K77S.js.map → search-BZNIB2XF.js.map} +0 -0
  513. /package/dist/{select-JM2MFVNP.js.map → select-NLWZIQ7L.js.map} +0 -0
  514. /package/dist/{set-prompt-JP3MASVF.js.map → set-prompt-QKW2L553.js.map} +0 -0
  515. /package/dist/{setup-links-5ILQNMFZ.js.map → setup-links-NMSQ4BG7.js.map} +0 -0
  516. /package/dist/{site-LBXNVRPE.js.map → site-GGYFBZT5.js.map} +0 -0
  517. /package/dist/{sources-N4UANUHJ.js.map → sources-KTGDMUV4.js.map} +0 -0
  518. /package/dist/{sources-GP4PUTX2.js.map → sources-LPQZDTIU.js.map} +0 -0
  519. /package/dist/{stale-VCZRIG25.js.map → stale-C5JLQ4D2.js.map} +0 -0
  520. /package/dist/{status-GSFMLC6W.js.map → status-6PS3HDS5.js.map} +0 -0
  521. /package/dist/{studio-MARZ22J2.js.map → studio-LMDDQWRY.js.map} +0 -0
  522. /package/dist/{sync-LIV7FU4N.js.map → sync-XSATDLE6.js.map} +0 -0
  523. /package/dist/{sync-definition-Z7TY43IA.js.map → sync-definition-LSGDHMHV.js.map} +0 -0
  524. /package/dist/{tags-ZHCGHGYC.js.map → tags-5Y7TPJNZ.js.map} +0 -0
  525. /package/dist/{tags-4JQX7HMT.js.map → tags-6TT5ZJVX.js.map} +0 -0
  526. /package/dist/{tags-AAIFQ6LS.js.map → tags-BQLIOWS4.js.map} +0 -0
  527. /package/dist/{tags-6RQVXS47.js.map → tags-EXWKO6Q6.js.map} +0 -0
  528. /package/dist/{tags-F355NMIR.js.map → tags-OK34UGSM.js.map} +0 -0
  529. /package/dist/{targeting-criteria-6FY2JB3V.js.map → targeting-criteria-AWPMOX4V.js.map} +0 -0
  530. /package/dist/{targets-SF4AOFZ3.js.map → targets-EXYCOHEX.js.map} +0 -0
  531. /package/dist/{testimonials-G7CCH7VN.js.map → testimonials-BTYMR3U4.js.map} +0 -0
  532. /package/dist/{themes-PXDXIKYR.js.map → themes-AOU4ZZXL.js.map} +0 -0
  533. /package/dist/{top-companies-YH2ZJEH5.js.map → top-companies-FRPAURAH.js.map} +0 -0
  534. /package/dist/{translate-ZONETQ2W.js.map → translate-SF234KLG.js.map} +0 -0
  535. /package/dist/{triggers-PJ3UJAHM.js.map → triggers-SJUXDU3X.js.map} +0 -0
  536. /package/dist/{unlink-PTWUSM5B.js.map → unlink-RIZD3XTI.js.map} +0 -0
  537. /package/dist/{unstage-NPQ5JQ6S.js.map → unstage-MKTIVI3I.js.map} +0 -0
  538. /package/dist/{update-77YN5JEJ.js.map → update-COHXM25C.js.map} +0 -0
  539. /package/dist/{update-643S2MUW.js.map → update-NKX2GXAR.js.map} +0 -0
  540. /package/dist/{update-V6E3CIFD.js.map → update-OXVZXDYH.js.map} +0 -0
  541. /package/dist/{update-2BDIJDHN.js.map → update-SZLYEEU4.js.map} +0 -0
  542. /package/dist/{upload-3YJJ5VID.js.map → upload-LEDO3IRC.js.map} +0 -0
  543. /package/dist/{url-options-LHS4SWWB.js.map → url-options-Q5SL42CV.js.map} +0 -0
  544. /package/dist/{url-params-2DKIXKHH.js.map → url-params-KP6D7BF3.js.map} +0 -0
  545. /package/dist/{validate-UTNTXLOL.js.map → validate-7QWQZ2OL.js.map} +0 -0
  546. /package/dist/{videos-KEDR4GG3.js.map → videos-VABK4KHJ.js.map} +0 -0
  547. /package/dist/{viewer-check-7S2EB32L.js.map → viewer-check-I45HHWSW.js.map} +0 -0
  548. /package/dist/{web-UOGBNAHR.js.map → web-DZGUPZYQ.js.map} +0 -0
  549. /package/dist/{winning-ads-T4MOKDYT.js.map → winning-ads-6MDLRSKM.js.map} +0 -0
  550. /package/dist/{x-UNSN57YP.js.map → x-GRDU7QC2.js.map} +0 -0
@@ -1,328 +0,0 @@
1
- import {
2
- failApi
3
- } from "./chunk-JFA4R3KS.js";
4
- import "./chunk-FRK7SSEH.js";
5
- import "./chunk-GXDLWBOY.js";
6
- import "./chunk-GIWHHCD6.js";
7
- import "./chunk-XQIOCIDO.js";
8
- import "./chunk-ML7DLFFY.js";
9
- import {
10
- ApiError,
11
- apiGet,
12
- apiPost
13
- } from "./chunk-XDZVBX6L.js";
14
- import "./chunk-N5O67GK5.js";
15
- import {
16
- clearTargetCompany,
17
- optionalTargetCompany,
18
- setTargetCompany
19
- } from "./chunk-EE72SSB2.js";
20
- import {
21
- registerSchema,
22
- writeJson
23
- } from "./chunk-WNSE7N75.js";
24
- import "./chunk-YQSBHWOI.js";
25
-
26
- // src/commands/organization/index.ts
27
- import { defineCommand as defineCommand2 } from "citty";
28
-
29
- // src/commands/organization/pull.ts
30
- import { execFile } from "child_process";
31
- import {
32
- chmodSync,
33
- existsSync as existsSync2,
34
- mkdirSync,
35
- mkdtempSync,
36
- readFileSync as readFileSync2,
37
- renameSync,
38
- rmSync,
39
- writeFileSync
40
- } from "fs";
41
- import { homedir, tmpdir } from "os";
42
- import { basename, join as join2, resolve } from "path";
43
- import { promisify } from "util";
44
- import { defineCommand } from "citty";
45
-
46
- // src/commands/organization/workspaces.ts
47
- import { cpSync, existsSync, lstatSync, readdirSync, readFileSync } from "fs";
48
- import { join, relative } from "path";
49
- var COMPANY_SURFACES = [
50
- "COMPANY.md",
51
- "src/content",
52
- "src/collections",
53
- "src/pages",
54
- "src/components",
55
- "src/brand",
56
- "src/documents",
57
- "src/creatives",
58
- "src/lib/flow-engine/flows",
59
- ".claude/agents",
60
- "__tooling__/checks/extensions",
61
- "reports/server",
62
- "reports/public"
63
- ];
64
- var SURFACE_GUIDE = [
65
- ["COMPANY.md", "who the company is: offer, audience, positioning"],
66
- ["src/content/<collection>/", "Knowledge \u2014 one folder per collection, one file per entry"],
67
- [
68
- "src/pages/<landing>/",
69
- "landing pages \u2014 `_definition.md` says what each is for; `index.astro` and `_components/` are the page"
70
- ],
71
- ["src/lib/flow-engine/flows/<form>/_data.json", "Forms \u2014 steps, questions, where each submission goes"],
72
- ["src/brand/", "brand \u2014 `BRAND.md` guidelines, `tokens.json` colours and fonts, logos"],
73
- ["src/documents/, src/creatives/", "documents and creatives \u2014 `_definition.md` each"],
74
- [".claude/agents/", "the company's own custom agents"],
75
- ["__tooling__/checks/extensions/", "the company's own rules: checks its work must pass"],
76
- ["reports/", "the company's own Reports"]
77
- ];
78
- var VERSION_FILE = ".baker-workspace.json";
79
- function listFiles(root) {
80
- if (!existsSync(root)) return [];
81
- const files = [];
82
- const walk = (dir) => {
83
- for (const entry of readdirSync(dir)) {
84
- const path = join(dir, entry);
85
- const entryStat = lstatSync(path);
86
- if (entryStat.isDirectory()) walk(path);
87
- else if (!entryStat.isSymbolicLink()) files.push(relative(root, path).split("\\").join("/"));
88
- }
89
- };
90
- walk(root);
91
- return files.sort();
92
- }
93
- function copyCompanySurfaces(from, to) {
94
- const notALink = (source) => !lstatSync(source).isSymbolicLink();
95
- for (const surface of COMPANY_SURFACES) {
96
- const source = join(from, surface);
97
- if (existsSync(source)) cpSync(source, join(to, surface), { recursive: true, filter: notALink });
98
- }
99
- }
100
- function slug(name) {
101
- const base = name.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
102
- return base || "company";
103
- }
104
- function folderNames(companies2) {
105
- const counts = /* @__PURE__ */ new Map();
106
- for (const company of companies2) counts.set(slug(company.name), (counts.get(slug(company.name)) ?? 0) + 1);
107
- return Object.fromEntries(
108
- companies2.map((company) => {
109
- const base = slug(company.name);
110
- return [company.id, (counts.get(base) ?? 0) > 1 ? `${base}-${company.id.slice(-6)}` : base];
111
- })
112
- );
113
- }
114
- function pulledCompanyId(folder) {
115
- try {
116
- const recorded = JSON.parse(readFileSync(join(folder, VERSION_FILE), "utf8"));
117
- return typeof recorded.companyId === "string" ? recorded.companyId : null;
118
- } catch {
119
- return null;
120
- }
121
- }
122
- function staleFolders(dir, folders) {
123
- if (!existsSync(dir)) return [];
124
- return readdirSync(dir).filter((name) => lstatSync(join(dir, name)).isDirectory()).filter((name) => {
125
- const companyId = pulledCompanyId(join(dir, name));
126
- return companyId !== null && folders[companyId] !== name;
127
- }).sort();
128
- }
129
-
130
- // src/commands/organization/pull.ts
131
- var run = promisify(execFile);
132
- registerSchema({
133
- command: "organization.pull",
134
- description: "Download what each company made \u2014 knowledge, landing pages, Forms, brand, documents, custom agents and checks, Reports \u2014 as published, into one read-only folder per company (default ~/companies), with an INDEX.md to start from. Then read and search them like any files. Add --company <id> for one company. Only what is published: a Session's unpublished work is `baker chats diff <id> --company <id>`.",
135
- args: {
136
- dir: { type: "string", description: "Where to put the companies' folders (default: ~/companies)", required: false },
137
- force: { type: "boolean", description: "Download again even when nothing was published since", required: false }
138
- }
139
- });
140
- function readVersion(folder) {
141
- try {
142
- return JSON.parse(readFileSync2(join2(folder, VERSION_FILE), "utf8")).version ?? null;
143
- } catch {
144
- return null;
145
- }
146
- }
147
- async function unpack(url, target) {
148
- const scratch = mkdtempSync(join2(tmpdir(), "baker-workspace-"));
149
- try {
150
- const response = await fetch(url, { signal: AbortSignal.timeout(12e4) });
151
- if (!response.ok) throw new Error(`download failed (${response.status})`);
152
- const archive = join2(scratch, "workspace.tar.gz");
153
- writeFileSync(archive, Buffer.from(await response.arrayBuffer()));
154
- const unpacked = join2(scratch, "unpacked");
155
- mkdirSync(unpacked);
156
- await run("tar", ["-xzf", archive, "-C", unpacked, "--strip-components=1"]);
157
- const staged = `${target}.partial`;
158
- rmSync(staged, { recursive: true, force: true });
159
- copyCompanySurfaces(unpacked, staged);
160
- const files = listFiles(staged);
161
- for (const file of files) chmodSync(join2(staged, file), 292);
162
- rmSync(target, { recursive: true, force: true });
163
- renameSync(staged, target);
164
- return files.length;
165
- } finally {
166
- rmSync(scratch, { recursive: true, force: true });
167
- }
168
- }
169
- async function pullOne(company, target, force) {
170
- const entry = { id: company.id, name: company.name, folder: basename(target), status: "failed" };
171
- try {
172
- setTargetCompany(company.id);
173
- const workspace = (await apiPost("/api/organization/workspace", {})).data;
174
- if (!workspace) return { ...entry, status: "no_workspace" };
175
- entry.publishedAt = workspace.publishedAt;
176
- if (!force && existsSync2(target) && readVersion(target) === workspace.version) {
177
- return { ...entry, status: "unchanged", files: listFiles(target).length - 1 };
178
- }
179
- const files = await unpack(workspace.url, target);
180
- writeFileSync(
181
- join2(target, VERSION_FILE),
182
- `${JSON.stringify({ companyId: company.id, name: company.name, version: workspace.version, publishedAt: workspace.publishedAt }, null, 2)}
183
- `
184
- );
185
- return { ...entry, status: "updated", files };
186
- } catch (err) {
187
- return { ...entry, error: err instanceof Error ? err.message : String(err) };
188
- }
189
- }
190
- function indexMarkdown(dir, companies2, pulled) {
191
- const byId = new Map(companies2.map((company) => [company.id, company]));
192
- const rows = pulled.map((entry) => {
193
- const platforms = byId.get(entry.id)?.platforms.map((platform) => platform.label).join(", ") || "none";
194
- const where = entry.status === "no_workspace" ? "no workspace yet" : `${entry.folder}/`;
195
- return `| ${entry.name} | \`${entry.id}\` | ${where} | ${entry.publishedAt ?? "\u2014"} | ${platforms} |`;
196
- });
197
- return [
198
- "# Companies of this organization",
199
- "",
200
- `Each folder holds what one company made, as published. Read-only: a change to a company is made in that company's own chat. Refresh with \`baker organization pull\`.`,
201
- "",
202
- "| Company | Id (for --company) | Folder | Published | Connected |",
203
- "|---|---|---|---|---|",
204
- ...rows,
205
- "",
206
- "## Where things are, in every company's folder",
207
- "",
208
- ...SURFACE_GUIDE.map(([path, what]) => `- \`${path}\` \u2014 ${what}`),
209
- "",
210
- `Search every company at once: \`grep -rn "<term>" ${dir}/*/src/content\`.`,
211
- ""
212
- ].join("\n");
213
- }
214
- var pullCommand = defineCommand({
215
- meta: {
216
- name: "pull",
217
- description: `Download what each company made, as published, into one read-only folder per company.
218
-
219
- Knowledge, landing pages, Forms, brand, documents, custom agents and checks, Reports. Then read and search them like any files; start with INDEX.md.
220
-
221
- Examples:
222
- baker organization pull
223
- baker organization pull --company <id>
224
- grep -rn "price" ~/companies/*/src/content`
225
- },
226
- args: {
227
- dir: { type: "string", description: "Where to put the companies' folders (default: ~/companies)", required: false },
228
- force: { type: "boolean", description: "Download again even when nothing was published since", required: false }
229
- },
230
- run: async ({ args }) => {
231
- try {
232
- const dir = resolve(args.dir ?? join2(homedir(), "companies"));
233
- const only = optionalTargetCompany();
234
- clearTargetCompany();
235
- const listed = (await apiGet("/api/organization/companies")).data;
236
- const companies2 = only ? listed.filter((company) => company.id === only) : listed;
237
- if (only && companies2.length === 0) {
238
- throw new ApiError(
239
- "NOT_FOUND",
240
- "No company of this organization has that id. Run `baker organization companies` for the ones you can read."
241
- );
242
- }
243
- const folders = folderNames(listed);
244
- mkdirSync(dir, { recursive: true });
245
- for (const stale of staleFolders(dir, folders)) rmSync(join2(dir, stale), { recursive: true, force: true });
246
- const pulled = [];
247
- for (const company of companies2) {
248
- pulled.push(await pullOne(company, join2(dir, folders[company.id] ?? company.id), args.force === true));
249
- }
250
- clearTargetCompany();
251
- if (!only) writeFileSync(join2(dir, "INDEX.md"), indexMarkdown(dir, listed, pulled));
252
- const failed = pulled.filter((entry) => entry.status === "failed");
253
- writeJson({
254
- ok: true,
255
- data: { dir, companies: pulled },
256
- meta: { count: pulled.length },
257
- hints: [
258
- `Start with ${join2(dir, "INDEX.md")}; each company's folder has the same layout.`,
259
- ...failed.length > 0 ? [
260
- `Not downloaded: ${failed.map((entry) => entry.name).join(", ")}. Say so in the Report; run this again to retry.`
261
- ] : []
262
- ]
263
- });
264
- } catch (err) {
265
- failApi(err);
266
- }
267
- }
268
- });
269
-
270
- // src/commands/organization/index.ts
271
- registerSchema({
272
- command: "organization.companies",
273
- description: "Start here in the organization workspace: every company of the organization, with its id and the platforms it has connected. Pass an id to any read with --company <id> (e.g. baker ads meta campaigns --company <id>) to read that company; a platform it has not connected answers 'not connected'. Only the organization workspace can run it, and it can only read.",
274
- args: {}
275
- });
276
- function companiesHints(companies2) {
277
- const hints = [];
278
- const first = companies2[0];
279
- if (first) {
280
- hints.push(
281
- `Read one company by adding --company <id> to any read, e.g. \`baker ads meta campaigns --company ${first.id}\`. Writes are refused: a company changes in its own chats.`
282
- );
283
- }
284
- const unconnected = companies2.filter((company) => company.platforms.length === 0);
285
- if (unconnected.length > 0) {
286
- hints.push(
287
- `Not connected to any platform, so every platform read refuses them: ${unconnected.map((c) => c.name).join(", ")}.`
288
- );
289
- }
290
- return hints;
291
- }
292
- var companies = defineCommand2({
293
- meta: {
294
- name: "companies",
295
- description: `Every company of the organization, with the platforms each has connected.
296
-
297
- Only in the organization workspace, whose Reports read across companies. Every other read is the ordinary command plus --company <id>.
298
-
299
- Examples:
300
- baker organization companies
301
- baker ads meta campaigns --company <id>
302
- baker ads google campaigns list --company <id>
303
-
304
- Full guide: __tooling__/docs/tools/baker/organization.md`
305
- },
306
- args: {},
307
- run: async () => {
308
- try {
309
- const response = await apiGet("/api/organization/companies");
310
- const hints = companiesHints(response.data);
311
- writeJson({ ...response, meta: { count: response.data.length }, ...hints.length > 0 ? { hints } : {} });
312
- } catch (err) {
313
- failApi(err);
314
- }
315
- }
316
- });
317
- var organizationCommand = defineCommand2({
318
- meta: {
319
- name: "organization",
320
- description: "The organization workspace: the companies its Reports read. Start with `baker organization companies`; read any of them with --company <id>; download what each made with `baker organization pull`."
321
- },
322
- subCommands: { companies, pull: pullCommand }
323
- });
324
- export {
325
- companiesHints,
326
- organizationCommand
327
- };
328
- //# sourceMappingURL=organization-KEGKAP4P.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/organization/index.ts","../src/commands/organization/pull.ts","../src/commands/organization/workspaces.ts"],"sourcesContent":["import type { OrganizationCompaniesResponse, OrganizationCompany } from \"@baker/api/organization\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi } from \"../actions/shared.ts\";\nimport { pullCommand } from \"./pull.ts\";\n\nregisterSchema({\n command: \"organization.companies\",\n description:\n \"Start here in the organization workspace: every company of the organization, with its id and the platforms it has connected. Pass an id to any read with --company <id> (e.g. baker ads meta campaigns --company <id>) to read that company; a platform it has not connected answers 'not connected'. Only the organization workspace can run it, and it can only read.\",\n args: {},\n});\n\n/** What the agent must not miss even if it skims the list. */\nexport function companiesHints(companies: OrganizationCompany[]): string[] {\n const hints: string[] = [];\n const first = companies[0];\n if (first) {\n hints.push(\n `Read one company by adding --company <id> to any read, e.g. \\`baker ads meta campaigns --company ${first.id}\\`. Writes are refused: a company changes in its own chats.`,\n );\n }\n const unconnected = companies.filter((company) => company.platforms.length === 0);\n if (unconnected.length > 0) {\n hints.push(\n `Not connected to any platform, so every platform read refuses them: ${unconnected.map((c) => c.name).join(\", \")}.`,\n );\n }\n return hints;\n}\n\nconst companies = defineCommand({\n meta: {\n name: \"companies\",\n description: `Every company of the organization, with the platforms each has connected.\n\nOnly in the organization workspace, whose Reports read across companies. Every other read is the ordinary command plus --company <id>.\n\nExamples:\n baker organization companies\n baker ads meta campaigns --company <id>\n baker ads google campaigns list --company <id>\n\nFull guide: __tooling__/docs/tools/baker/organization.md`,\n },\n args: {},\n run: async () => {\n try {\n const response = await apiGet<OrganizationCompaniesResponse>(\"/api/organization/companies\");\n const hints = companiesHints(response.data);\n writeJson({ ...response, meta: { count: response.data.length }, ...(hints.length > 0 ? { hints } : {}) });\n } catch (err) {\n failApi(err);\n }\n },\n});\n\nexport const organizationCommand = defineCommand({\n meta: {\n name: \"organization\",\n description:\n \"The organization workspace: the companies its Reports read. Start with `baker organization companies`; read any of them with --company <id>; download what each made with `baker organization pull`.\",\n },\n subCommands: { companies, pull: pullCommand },\n});\n","import { execFile } from \"node:child_process\";\nimport {\n chmodSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { basename, join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport type {\n OrganizationCompaniesResponse,\n OrganizationCompany,\n OrganizationWorkspaceResponse,\n} from \"@baker/api/organization\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet, apiPost } from \"../../client.ts\";\nimport { clearTargetCompany, optionalTargetCompany, setTargetCompany } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi } from \"../actions/shared.ts\";\nimport {\n copyCompanySurfaces,\n folderNames,\n listFiles,\n SURFACE_GUIDE,\n staleFolders,\n VERSION_FILE,\n} from \"./workspaces.ts\";\n\nconst run = promisify(execFile);\n\ntype Pulled = {\n id: string;\n name: string;\n folder: string;\n status: \"updated\" | \"unchanged\" | \"no_workspace\" | \"failed\";\n publishedAt?: string | null;\n files?: number;\n error?: string;\n};\n\nregisterSchema({\n command: \"organization.pull\",\n description:\n \"Download what each company made — knowledge, landing pages, Forms, brand, documents, custom agents and checks, Reports — as published, into one read-only folder per company (default ~/companies), with an INDEX.md to start from. Then read and search them like any files. Add --company <id> for one company. Only what is published: a Session's unpublished work is `baker chats diff <id> --company <id>`.\",\n args: {\n dir: { type: \"string\", description: \"Where to put the companies' folders (default: ~/companies)\", required: false },\n force: { type: \"boolean\", description: \"Download again even when nothing was published since\", required: false },\n },\n});\n\nfunction readVersion(folder: string): string | null {\n try {\n return (JSON.parse(readFileSync(join(folder, VERSION_FILE), \"utf8\")) as { version?: string }).version ?? null;\n } catch {\n return null;\n }\n}\n\n/** Unpacks one archive into a fresh folder of the company's own surfaces, swapped in whole. */\nasync function unpack(url: string, target: string): Promise<number> {\n const scratch = mkdtempSync(join(tmpdir(), \"baker-workspace-\"));\n try {\n const response = await fetch(url, { signal: AbortSignal.timeout(120_000) });\n if (!response.ok) throw new Error(`download failed (${response.status})`);\n const archive = join(scratch, \"workspace.tar.gz\");\n writeFileSync(archive, Buffer.from(await response.arrayBuffer()));\n const unpacked = join(scratch, \"unpacked\");\n mkdirSync(unpacked);\n await run(\"tar\", [\"-xzf\", archive, \"-C\", unpacked, \"--strip-components=1\"]);\n const staged = `${target}.partial`;\n rmSync(staged, { recursive: true, force: true });\n copyCompanySurfaces(unpacked, staged);\n const files = listFiles(staged);\n // Read-only, so nothing here is mistaken for a change to the company.\n for (const file of files) chmodSync(join(staged, file), 0o444);\n rmSync(target, { recursive: true, force: true });\n renameSync(staged, target);\n return files.length;\n } finally {\n rmSync(scratch, { recursive: true, force: true });\n }\n}\n\n/** Downloads one company's published workspace into `target`, unless it is already there. */\nasync function pullOne(company: OrganizationCompany, target: string, force: boolean): Promise<Pulled> {\n const entry: Pulled = { id: company.id, name: company.name, folder: basename(target), status: \"failed\" };\n try {\n setTargetCompany(company.id);\n const workspace = (await apiPost<OrganizationWorkspaceResponse>(\"/api/organization/workspace\", {})).data;\n if (!workspace) return { ...entry, status: \"no_workspace\" };\n entry.publishedAt = workspace.publishedAt;\n if (!force && existsSync(target) && readVersion(target) === workspace.version) {\n return { ...entry, status: \"unchanged\", files: listFiles(target).length - 1 };\n }\n const files = await unpack(workspace.url, target);\n writeFileSync(\n join(target, VERSION_FILE),\n `${JSON.stringify({ companyId: company.id, name: company.name, version: workspace.version, publishedAt: workspace.publishedAt }, null, 2)}\\n`,\n );\n return { ...entry, status: \"updated\", files };\n } catch (err) {\n return { ...entry, error: err instanceof Error ? err.message : String(err) };\n }\n}\n\nfunction indexMarkdown(dir: string, companies: OrganizationCompany[], pulled: Pulled[]): string {\n const byId = new Map(companies.map((company) => [company.id, company]));\n const rows = pulled.map((entry) => {\n const platforms =\n byId\n .get(entry.id)\n ?.platforms.map((platform) => platform.label)\n .join(\", \") || \"none\";\n const where = entry.status === \"no_workspace\" ? \"no workspace yet\" : `${entry.folder}/`;\n return `| ${entry.name} | \\`${entry.id}\\` | ${where} | ${entry.publishedAt ?? \"—\"} | ${platforms} |`;\n });\n return [\n \"# Companies of this organization\",\n \"\",\n `Each folder holds what one company made, as published. Read-only: a change to a company is made in that company's own chat. Refresh with \\`baker organization pull\\`.`,\n \"\",\n \"| Company | Id (for --company) | Folder | Published | Connected |\",\n \"|---|---|---|---|---|\",\n ...rows,\n \"\",\n \"## Where things are, in every company's folder\",\n \"\",\n ...SURFACE_GUIDE.map(([path, what]) => `- \\`${path}\\` — ${what}`),\n \"\",\n `Search every company at once: \\`grep -rn \"<term>\" ${dir}/*/src/content\\`.`,\n \"\",\n ].join(\"\\n\");\n}\n\nexport const pullCommand = defineCommand({\n meta: {\n name: \"pull\",\n description: `Download what each company made, as published, into one read-only folder per company.\n\nKnowledge, landing pages, Forms, brand, documents, custom agents and checks, Reports. Then read and search them like any files; start with INDEX.md.\n\nExamples:\n baker organization pull\n baker organization pull --company <id>\n grep -rn \"price\" ~/companies/*/src/content`,\n },\n args: {\n dir: { type: \"string\", description: \"Where to put the companies' folders (default: ~/companies)\", required: false },\n force: { type: \"boolean\", description: \"Download again even when nothing was published since\", required: false },\n },\n run: async ({ args }) => {\n try {\n const dir = resolve(args.dir ?? join(homedir(), \"companies\"));\n const only = optionalTargetCompany();\n // The list is the workspace's own read; each company is then named in turn.\n clearTargetCompany();\n const listed = (await apiGet<OrganizationCompaniesResponse>(\"/api/organization/companies\")).data;\n const companies = only ? listed.filter((company) => company.id === only) : listed;\n if (only && companies.length === 0) {\n throw new ApiError(\n \"NOT_FOUND\",\n \"No company of this organization has that id. Run `baker organization companies` for the ones you can read.\",\n );\n }\n const folders = folderNames(listed);\n mkdirSync(dir, { recursive: true });\n // A renamed company's old folder would still answer a search across them all.\n for (const stale of staleFolders(dir, folders)) rmSync(join(dir, stale), { recursive: true, force: true });\n const pulled: Pulled[] = [];\n for (const company of companies) {\n pulled.push(await pullOne(company, join(dir, folders[company.id] ?? company.id), args.force === true));\n }\n clearTargetCompany();\n if (!only) writeFileSync(join(dir, \"INDEX.md\"), indexMarkdown(dir, listed, pulled));\n const failed = pulled.filter((entry) => entry.status === \"failed\");\n writeJson({\n ok: true,\n data: { dir, companies: pulled },\n meta: { count: pulled.length },\n hints: [\n `Start with ${join(dir, \"INDEX.md\")}; each company's folder has the same layout.`,\n ...(failed.length > 0\n ? [\n `Not downloaded: ${failed.map((entry) => entry.name).join(\", \")}. Say so in the Report; run this again to retry.`,\n ]\n : []),\n ],\n });\n } catch (err) {\n failApi(err);\n }\n },\n});\n","import { cpSync, existsSync, lstatSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\n\n/**\n * What of a company's workspace the organization's agent reads: what the\n * company made — its knowledge, landing pages, Forms, brand, documents, custom\n * agents and checks, Reports — and none of the platform's own files, which are\n * the same in every company and would only bury the answer under copies of\n * themselves.\n */\nexport const COMPANY_SURFACES: readonly string[] = [\n \"COMPANY.md\",\n \"src/content\",\n \"src/collections\",\n \"src/pages\",\n \"src/components\",\n \"src/brand\",\n \"src/documents\",\n \"src/creatives\",\n \"src/lib/flow-engine/flows\",\n \".claude/agents\",\n \"__tooling__/checks/extensions\",\n \"reports/server\",\n \"reports/public\",\n];\n\n/** Where each surface is, for the index the agent reads first. */\nexport const SURFACE_GUIDE: ReadonlyArray<readonly [string, string]> = [\n [\"COMPANY.md\", \"who the company is: offer, audience, positioning\"],\n [\"src/content/<collection>/\", \"Knowledge — one folder per collection, one file per entry\"],\n [\n \"src/pages/<landing>/\",\n \"landing pages — `_definition.md` says what each is for; `index.astro` and `_components/` are the page\",\n ],\n [\"src/lib/flow-engine/flows/<form>/_data.json\", \"Forms — steps, questions, where each submission goes\"],\n [\"src/brand/\", \"brand — `BRAND.md` guidelines, `tokens.json` colours and fonts, logos\"],\n [\"src/documents/, src/creatives/\", \"documents and creatives — `_definition.md` each\"],\n [\".claude/agents/\", \"the company's own custom agents\"],\n [\"__tooling__/checks/extensions/\", \"the company's own rules: checks its work must pass\"],\n [\"reports/\", \"the company's own Reports\"],\n];\n\n/** What a pulled company folder says about itself: which company, at which published version. */\nexport const VERSION_FILE = \".baker-workspace.json\";\n\n/** Every file under `root`, relative and sorted. */\nexport function listFiles(root: string): string[] {\n if (!existsSync(root)) return [];\n const files: string[] = [];\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir)) {\n const path = join(dir, entry);\n const entryStat = lstatSync(path);\n if (entryStat.isDirectory()) walk(path);\n else if (!entryStat.isSymbolicLink()) files.push(relative(root, path).split(\"\\\\\").join(\"/\"));\n }\n };\n walk(root);\n return files.sort();\n}\n\n/**\n * Copies the company's own surfaces of an unpacked workspace `from` into `to`,\n * links left out: one would point into the unpacked copy, gone once the pull\n * ends, or outside the pull folder.\n */\nexport function copyCompanySurfaces(from: string, to: string): void {\n const notALink = (source: string) => !lstatSync(source).isSymbolicLink();\n for (const surface of COMPANY_SURFACES) {\n const source = join(from, surface);\n if (existsSync(source)) cpSync(source, join(to, surface), { recursive: true, filter: notALink });\n }\n}\n\nfunction slug(name: string): string {\n const base = name\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return base || \"company\";\n}\n\n/**\n * Each company's folder: its name, so the agent finds a client by what the user\n * calls it — and its id's tail beside it when two names read alike.\n */\nexport function folderNames(companies: ReadonlyArray<{ id: string; name: string }>): Record<string, string> {\n const counts = new Map<string, number>();\n for (const company of companies) counts.set(slug(company.name), (counts.get(slug(company.name)) ?? 0) + 1);\n return Object.fromEntries(\n companies.map((company) => {\n const base = slug(company.name);\n return [company.id, (counts.get(base) ?? 0) > 1 ? `${base}-${company.id.slice(-6)}` : base];\n }),\n );\n}\n\nfunction pulledCompanyId(folder: string): string | null {\n try {\n const recorded = JSON.parse(readFileSync(join(folder, VERSION_FILE), \"utf8\")) as { companyId?: unknown };\n return typeof recorded.companyId === \"string\" ? recorded.companyId : null;\n } catch {\n return null;\n }\n}\n\n/**\n * The folders under `dir` a pull made that no longer are a company's folder:\n * the company left the organization, or its folder is now named otherwise\n * (`folders`, by company id). A folder no pull made is never one of them.\n */\nexport function staleFolders(dir: string, folders: Readonly<Record<string, string>>): string[] {\n if (!existsSync(dir)) return [];\n return readdirSync(dir)\n .filter((name) => lstatSync(join(dir, name)).isDirectory())\n .filter((name) => {\n const companyId = pulledCompanyId(join(dir, name));\n return companyId !== null && folders[companyId] !== name;\n })\n .sort();\n}\n"],"mappings":"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","names":["defineCommand","existsSync","readFileSync","join","companies","readFileSync","join","existsSync","companies","companies","defineCommand"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/ads/linkedin/write-commands.ts"],"sourcesContent":["import {\n campaignExcludeCompaniesSchema,\n type LinkedinDraftStageResponse,\n type LinkedinTrackingParamDynamicValue,\n TEMP_REF_PREFIX,\n TRACKING_PARAM_DYNAMIC_VALUES,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../client.ts\";\nimport { requireChatId } from \"../../../env.ts\";\nimport { repeatedValues } from \"../../../lib/repeatedFlags.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { handleLinkedinError } from \"./shared.ts\";\nimport {\n bareAccountId,\n failWriteValidation,\n loadJsonFileArg,\n loadTargetingFileArg,\n mergePayload,\n parseDateFlag,\n parseListFileArg,\n parseLocaleFlag,\n parseMoneyFlag,\n parseOnOffFlag,\n requireTarget,\n requireTargets,\n stageLinkedinOps,\n stageOp,\n stageStatusChange,\n TOTAL_BUDGET_HELP,\n} from \"./write-shared.ts\";\n\n/**\n * Staged write subcommands. None of these touch the LinkedIn API — they stage\n * ops on this chat's draft; ops appear in the dashboard as pending LinkedIn\n * changes and apply when the chat is published. Review with\n * `baker ads linkedin draft`, undo with `draft remove <ref>`.\n */\n\nconst STAGED_NOTE = \"Staged until publish — review with `baker ads linkedin draft`.\";\n\nconst accountArgs = {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n} as const;\n\nfunction runScheduleFromFlags(args: Record<string, unknown>): { start?: number; end?: number } | undefined {\n const start = parseDateFlag(args.start, \"--start\");\n const end = parseDateFlag(args.end, \"--end\");\n if (start === undefined && end === undefined) {\n return undefined;\n }\n return { ...(start !== undefined ? { start } : {}), ...(end !== undefined ? { end } : {}) };\n}\n\n// --- Campaign groups ---\n\nexport const campaignGroupsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new campaign group. ${STAGED_NOTE}\nA group can't be created PAUSED, and a --total-budget needs an --end.\nExample: baker ads linkedin campaign-groups create --name \"Q3 ABM\" --start 2026-07-10 --end 2026-09-30 --total-budget 5000 --currency EUR`,\n },\n args: {\n ...accountArgs,\n name: { type: \"string\", description: \"Campaign group name (≤100 chars)\" },\n start: { type: \"string\", description: \"Run schedule start (ISO date or epoch ms)\" },\n end: { type: \"string\", description: \"Run schedule end\" },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP },\n currency: { type: \"string\", description: \"3-letter currency code (defaults to the ad account currency)\" },\n status: {\n type: \"string\",\n description:\n \"DRAFT|ACTIVE (default DRAFT) — LinkedIn refuses a new group created PAUSED; pause it once it exists\",\n },\n file: { type: \"string\", description: \"JSON file with the full payload; flags override file keys\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload(loadJsonFileArg(args.file), {\n name: args.name,\n runSchedule: runScheduleFromFlags(args as Record<string, unknown>),\n totalBudget: parseMoneyFlag(args[\"total-budget\"], args.currency, \"--total-budget\"),\n status: args.status ? String(args.status).toUpperCase() : undefined,\n });\n await stageOp({ kind: \"campaignGroup.create\", accountId, payload });\n },\n});\n\nexport const campaignGroupsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Stage changes to an existing campaign group. ${STAGED_NOTE}\nPass a li_temp_* ref to amend a group staged in this chat — fields merge into the staged create.\nExample: baker ads linkedin campaign-groups update 635137195 --total-budget 8000 --currency EUR`,\n },\n args: {\n id: { type: \"positional\", description: \"Campaign group id or URN\", required: true },\n ...accountArgs,\n name: { type: \"string\", description: \"New name\" },\n start: { type: \"string\", description: \"New run schedule start\" },\n end: { type: \"string\", description: \"New run schedule end\" },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP },\n currency: { type: \"string\", description: \"3-letter currency code (defaults to the ad account currency)\" },\n status: { type: \"string\", description: \"ACTIVE|PAUSED|ARCHIVED|…\" },\n file: { type: \"string\", description: \"JSON file with fields to change\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload(loadJsonFileArg(args.file), {\n name: args.name,\n runSchedule: runScheduleFromFlags(args as Record<string, unknown>),\n totalBudget: parseMoneyFlag(args[\"total-budget\"], args.currency, \"--total-budget\"),\n status: args.status ? String(args.status).toUpperCase() : undefined,\n });\n await stageOp({\n kind: \"campaignGroup.update\",\n accountId,\n target: requireTarget(args as Record<string, unknown>, \"campaign group\"),\n payload,\n });\n },\n});\n\n// --- Campaigns ---\n\nfunction campaignPayloadFromFlags(args: Record<string, unknown>): Record<string, unknown> {\n return {\n name: args.name,\n campaignGroup: args.group,\n type: args.type ? String(args.type).toUpperCase() : undefined,\n objectiveType: args.objective ? String(args.objective).toUpperCase() : undefined,\n costType: args[\"cost-type\"] ? String(args[\"cost-type\"]).toUpperCase() : undefined,\n unitCost: parseMoneyFlag(args.bid, args.currency, \"--bid\"),\n dailyBudget: parseMoneyFlag(args[\"daily-budget\"], args.currency, \"--daily-budget\"),\n totalBudget: parseMoneyFlag(args[\"total-budget\"], args.currency, \"--total-budget\"),\n runSchedule: runScheduleFromFlags(args),\n locale: parseLocaleFlag(args.locale),\n targetingCriteria: loadTargetingFileArg(args[\"targeting-file\"]),\n audienceExpansionEnabled: parseOnOffFlag(args[\"audience-expansion\"], \"--audience-expansion\"),\n offsiteDeliveryEnabled: parseOnOffFlag(args.lan, \"--lan\"),\n connectedTelevisionOnly: parseOnOffFlag(args.ctv, \"--ctv\"),\n creativeSelection: args[\"creative-selection\"] ? String(args[\"creative-selection\"]).toUpperCase() : undefined,\n associatedEntity: args[\"associated-entity\"],\n politicalIntent: args[\"political-intent\"] ? String(args[\"political-intent\"]).toUpperCase() : undefined,\n status: args.status ? String(args.status).toUpperCase() : undefined,\n };\n}\n\nconst POLITICAL_INTENT_HELP =\n 'NOT_DECLARED (default)|NOT_POLITICAL|POLITICAL — the advertiser\\'s own declaration. Pass NOT_POLITICAL only after the user confirms: \"I confirm this is not political advertising. None of my ads qualify as political advertising under the law of the targeted countries, including EU law for ads targeted to the EU.\"';\n\nconst campaignFlagArgs = {\n ...accountArgs,\n name: { type: \"string\", description: \"Campaign name (≤255 chars)\" },\n group: { type: \"string\", description: \"Campaign group id/URN, or li_temp_* ref staged in this chat\" },\n type: { type: \"string\", description: \"SPONSORED_UPDATES|TEXT_AD|SPONSORED_INMAILS|DYNAMIC\" },\n objective: { type: \"string\", description: \"e.g. LEAD_GENERATION, WEBSITE_VISIT, BRAND_AWARENESS\" },\n \"cost-type\": { type: \"string\", description: \"CPC|CPM|CPV\" },\n bid: { type: \"string\", description: \"Manual bid (unitCost) — playbook mandates manual bidding\" },\n \"daily-budget\": { type: \"string\", description: \"Daily budget amount\" },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP },\n currency: { type: \"string\", description: \"3-letter currency code (defaults to the ad account currency)\" },\n start: { type: \"string\", description: \"Run schedule start (ISO date or epoch ms)\" },\n end: { type: \"string\", description: \"Run schedule end\" },\n locale: { type: \"string\", description: \"Profile locale like en_US\" },\n \"targeting-file\": { type: \"string\", description: \"JSON file with targetingCriteria (include.and[].or facets)\" },\n \"audience-expansion\": { type: \"string\", description: \"on|off (playbook: off)\" },\n lan: { type: \"string\", description: \"LinkedIn Audience Network on|off (playbook: off)\" },\n ctv: { type: \"string\", description: \"Connected TV on|off\" },\n \"creative-selection\": { type: \"string\", description: \"OPTIMIZED|ROUND_ROBIN\" },\n \"associated-entity\": { type: \"string\", description: \"Organization URN\" },\n \"political-intent\": { type: \"string\", description: POLITICAL_INTENT_HELP },\n status: { type: \"string\", description: \"DRAFT|ACTIVE|PAUSED — PAUSED needs a group that is not DRAFT\" },\n file: { type: \"string\", description: \"JSON file with the full payload; flags override file keys\" },\n} as const;\n\nexport const campaignsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new campaign. ${STAGED_NOTE}\nTargeting goes in --targeting-file (facet URNs). --group accepts a li_temp_* ref from a campaign group staged in this chat.\nExample: baker ads linkedin campaigns create --name \"ABM Tier-1\" --group li_temp_x1 --objective WEBSITE_VISIT --type SPONSORED_UPDATES --cost-type CPC --bid 8.50 --daily-budget 75 --currency EUR --locale en_US --targeting-file targeting.json`,\n },\n args: campaignFlagArgs,\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload(loadJsonFileArg(args.file), campaignPayloadFromFlags(args as Record<string, unknown>));\n if (payload.locale === undefined) {\n payload.locale = { country: \"US\", language: \"en\" };\n }\n await stageOp({ kind: \"campaign.create\", accountId, payload });\n },\n});\n\n/**\n * `campaigns update`'s flags → payload. Create-only fields (campaignGroup/type/locale/\n * associatedEntity) are not updatable on a LIVE campaign, so they're stripped there; a\n * `li_temp_*` target amends the staged create in place, where those fields are still fair game\n * (the amend path re-validates the merged payload as a full create).\n */\nexport function campaignUpdatePayloadFromFlags(\n args: Record<string, unknown>,\n target: string,\n file: Record<string, unknown>,\n): Record<string, unknown> {\n const flags = campaignPayloadFromFlags(args);\n if (!target.startsWith(TEMP_REF_PREFIX)) {\n flags.campaignGroup = undefined;\n flags.type = undefined;\n flags.locale = undefined;\n flags.associatedEntity = undefined;\n }\n return mergePayload(file, flags);\n}\n\nexport const campaignsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Stage changes to an existing campaign (budget, bid, targeting, flags, schedule, status). ${STAGED_NOTE}\nPass a li_temp_* ref to amend a campaign staged in this chat — fields merge into the staged create, and --group/--type/--locale/--associated-entity carry through too (they're create-only on a LIVE campaign, but fair game while it's still staged).\nExample: baker ads linkedin campaigns update 123456 --daily-budget 100 --currency EUR --audience-expansion off`,\n },\n args: {\n id: { type: \"positional\", description: \"Campaign id or URN\", required: true },\n ...campaignFlagArgs,\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const target = requireTarget(args as Record<string, unknown>, \"campaign\");\n const payload = campaignUpdatePayloadFromFlags(args as Record<string, unknown>, target, loadJsonFileArg(args.file));\n await stageOp({ kind: \"campaign.update\", accountId, target, payload });\n },\n});\n\nfunction commaList(value: unknown): string[] {\n return typeof value === \"string\"\n ? value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n : [];\n}\n\n/** `--org` takes the bare ids `companies`/`top-companies` print, or full organization URNs. */\nexport function excludeCompaniesPayload(args: Record<string, unknown>): {\n add: { employers?: string[]; segments?: string[] };\n} {\n const employers = commaList(args.org).map((org) => (org.startsWith(\"urn:\") ? org : `urn:li:organization:${org}`));\n const segments = commaList(args.segment);\n return {\n add: {\n ...(employers.length > 0 ? { employers } : {}),\n ...(segments.length > 0 ? { segments } : {}),\n },\n };\n}\n\nconst EXCLUSION_FLAG_BY_FIELD: Record<string, string> = { employers: \"--org\", segments: \"--segment\" };\n\n/**\n * Why these flags cannot stage, in the flags' own words — `--org: 0 is not a\n * LinkedIn company id …` rather than the contract path `payload.add.employers.1`\n * and a pointer at the capabilities catalogue, which is for unknown fields.\n */\nexport function excludeCompaniesRefusal(args: Record<string, unknown>): string | undefined {\n const payload = excludeCompaniesPayload(args);\n if (!payload.add.employers && !payload.add.segments) {\n return \"pass --org and/or --segment — the companies or audiences this ad set should stop reaching\";\n }\n const parsed = campaignExcludeCompaniesSchema.safeParse(payload);\n if (parsed.success) {\n return undefined;\n }\n return parsed.error.issues\n .map((issue) => {\n const flag = EXCLUSION_FLAG_BY_FIELD[String(issue.path[1])];\n return flag ? `${flag}: ${issue.message}` : issue.message;\n })\n .join(\"; \");\n}\n\nexport const campaignsExcludeCompaniesCommand = defineCommand({\n meta: {\n name: \"exclude-companies\",\n description: `Stop an ad set reaching some companies — customers, open deals, competitors. ${STAGED_NOTE}\nAdd-only: adds to the ad set's exclusions and never removes one. At publish Baker re-reads the ad set and merges into its targeting as it stands then, so audience, locations and existing exclusions are kept.\n--org takes company ids (as \\`companies\\` / \\`top-companies\\` print them) or urn:li:organization URNs, comma-separated, up to 200 per call. For a longer list, upload it as a company-list audience and pass it to --segment (an urn:li:dmpSegment/adSegment URN, or a li_temp_* audience staged in this chat).\nExample: baker ads linkedin campaigns exclude-companies 123456 --org 1035,1441`,\n },\n args: {\n id: {\n type: \"positional\",\n description: \"Ad set (campaign) id or URN — must already be on LinkedIn\",\n required: true,\n },\n ...accountArgs,\n org: { type: \"string\", description: \"Company ids or urn:li:organization URNs to exclude, comma-separated\" },\n segment: {\n type: \"string\",\n description:\n \"Matched audiences to exclude, comma-separated: urn:li:dmpSegment:N / urn:li:adSegment:N or a li_temp_* ref\",\n },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const target = requireTarget(args as Record<string, unknown>, \"campaign\");\n const refusal = excludeCompaniesRefusal(args as Record<string, unknown>);\n if (refusal) {\n failWriteValidation(refusal);\n }\n const payload = excludeCompaniesPayload(args as Record<string, unknown>);\n await stageOp({ kind: \"campaign.excludeCompanies\", accountId, target, payload });\n },\n});\n\nfunction statusSugarCommand(\n entity: \"campaign-groups\" | \"campaigns\" | \"creatives\",\n kind: \"campaignGroup.update\" | \"campaign.update\" | \"creative.update\",\n name: \"pause\" | \"resume\" | \"archive\",\n) {\n const status = name === \"pause\" ? \"PAUSED\" : name === \"resume\" ? \"ACTIVE\" : \"ARCHIVED\";\n return defineCommand({\n meta: {\n name,\n description: `Stage a status change to ${status}, for one id or many. ${STAGED_NOTE}\nExamples:\n baker ads linkedin ${entity} ${name} 123456\n baker ads linkedin ${entity} ${name} 123456,123457,123458\n baker ads linkedin ${entity} ${name} --ids-file ids.txt`,\n },\n args: {\n id: { type: \"positional\", description: \"Entity id or URN — comma-separate several\", required: false },\n \"ids-file\": { type: \"string\", description: \"File of ids, one per line or comma-separated\" },\n ...accountArgs,\n },\n run: async ({ args }) => {\n await stageStatusChange({\n kind,\n accountId: bareAccountId(args as Record<string, unknown>),\n targets: requireTargets(args as Record<string, unknown>, entity.replace(/-/g, \" \").replace(/s$/, \"\")),\n status,\n });\n },\n });\n}\n\n// --- Ad set URL tracking parameters ---\n\n/**\n * `--param`/`--dynamic` accept a repeated flag, an `&`-joined query string, or\n * both — agents reach for all three, and the parsed result is identical.\n */\nfunction trackingPairs(value: unknown, flag: string): Array<[string, string]> {\n const raw = value === undefined ? [] : Array.isArray(value) ? value : [value];\n return raw.flatMap((entry) =>\n String(entry)\n .split(\"&\")\n .filter((pair) => pair.length > 0)\n .map((pair): [string, string] => {\n const at = pair.indexOf(\"=\");\n if (at < 1 || at === pair.length - 1) {\n failWriteValidation(`${flag} expects key=value pairs — got \"${pair}\"`);\n }\n return [pair.slice(0, at).trim(), pair.slice(at + 1).trim()];\n }),\n );\n}\n\n/** A value that names one of LinkedIn's placeholders, however the agent wrote it. */\nfunction asDynamicValue(value: string): LinkedinTrackingParamDynamicValue | undefined {\n const bare = value.replace(/^\\{+|\\}+$/g, \"\").toUpperCase();\n return (TRACKING_PARAM_DYNAMIC_VALUES as readonly string[]).includes(bare)\n ? (bare as LinkedinTrackingParamDynamicValue)\n : undefined;\n}\n\n/**\n * `rawArgs` is the command line, and it is what the repeatable flags are read\n * from: citty keeps only a repeated flag's LAST value, so `--param a=1 --param\n * b=2` arrives here as `\"b=2\"`. Since this write REPLACES the entity's whole\n * parameter set, taking it from `args` would stage one pair, report success,\n * and delete the rest at publish.\n */\nexport function trackingParamsPayload(\n args: Record<string, unknown>,\n rawArgs?: readonly string[],\n): Record<string, unknown> {\n if (args.clear) {\n return { dynamicValueParameters: {}, customValueParameters: {} };\n }\n const customValueParameters: Record<string, string> = {};\n for (const [key, value] of trackingPairs(repeatedValues(rawArgs, \"param\", args.param), \"--param\")) {\n if (asDynamicValue(value)) {\n failWriteValidation(\n `--param ${key}=${value} names a value LinkedIn fills in per ad — pass it as --dynamic ${key}=${value.replace(/^\\{+|\\}+$/g, \"\").toUpperCase()}`,\n );\n }\n customValueParameters[key] = value;\n }\n const dynamicValueParameters: Record<string, string> = {};\n for (const [key, value] of trackingPairs(repeatedValues(rawArgs, \"dynamic\", args.dynamic), \"--dynamic\")) {\n const resolved = asDynamicValue(value);\n if (!resolved) {\n failWriteValidation(\n `--dynamic ${key}=${value} is not a value LinkedIn can fill in — use one of ${TRACKING_PARAM_DYNAMIC_VALUES.join(\", \")}, or pass a fixed value with --param`,\n );\n }\n dynamicValueParameters[key] = resolved;\n }\n return mergePayload(loadJsonFileArg(args.file), {\n customValueParameters: Object.keys(customValueParameters).length > 0 ? customValueParameters : undefined,\n dynamicValueParameters: Object.keys(dynamicValueParameters).length > 0 ? dynamicValueParameters : undefined,\n });\n}\n\nexport const campaignsUrlParamsCommand = defineCommand({\n meta: {\n name: \"url-params\",\n description: `Stage the URL tracking parameters on an ad set — LinkedIn appends them to the link of EVERY ad in it, including ads already running. ${STAGED_NOTE}\n\nStart here: set UTMs at this level, not per ad. A per-ad landing URL is only for a genuinely different destination — LinkedIn appends the ad set's parameters on top of whatever the ad's own URL carries, so the same key set in both places lands twice.\n\nThis REPLACES the ad set's whole parameter set — LinkedIn does not merge. Read what it carries first (\\`baker ads linkedin url-params --campaign-ids <ad-set-id>\\`) and re-send every pair that should survive; the drop is otherwise silent until traffic stops being attributable.\n\nValues LinkedIn fills in per ad (--dynamic): ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_GROUP_ID, CAMPAIGN_GROUP_NAME, CAMPAIGN_ID, CAMPAIGN_NAME, CREATIVE_ID, CREATIVE_NAME.\n\nExamples:\n baker ads linkedin campaigns url-params 123456 --param \"utm_source=linkedin&utm_medium=paid-social\" --dynamic utm_campaign=CAMPAIGN_NAME --dynamic utm_content=CREATIVE_ID\n baker ads linkedin campaigns url-params 123456 --param utm_agency=baker\n baker ads linkedin campaigns url-params 123456 --clear`,\n },\n args: {\n id: { type: \"positional\", description: \"Ad set (campaign) id or URN\", required: true },\n ...accountArgs,\n param: {\n type: \"string\",\n description: 'Fixed key=value, repeatable or &-joined (e.g. --param \"utm_source=linkedin&utm_medium=paid\")',\n },\n dynamic: {\n type: \"string\",\n description: \"key=PLACEHOLDER LinkedIn fills in per ad, repeatable (e.g. --dynamic utm_campaign=CAMPAIGN_NAME)\",\n },\n clear: { type: \"boolean\", description: \"Remove every tracking parameter from this ad set\" },\n file: { type: \"string\", description: \"JSON file with the full payload; flags override file keys\" },\n },\n run: async ({ args, rawArgs }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n await stageOp({\n kind: \"trackingParams.set\",\n accountId,\n target: requireTarget(args as Record<string, unknown>, \"ad set\"),\n payload: trackingParamsPayload(args as Record<string, unknown>, rawArgs),\n });\n },\n});\n\n/**\n * The same parameters, one level up. The target is built from the RESOLVED\n * account rather than taken as a positional: `trackingParamsLevel` reads a bare\n * numeric id as an ad set, so an account id typed bare would silently stage an\n * ad-set write — and this command has no ad set to name.\n */\n/**\n * The op target for an account-level set. Built from the account the command\n * already resolved, never from a positional: `--account-id` accepts the URN\n * form too, so composing the prefix without stripping it first would produce\n * `urn:li:sponsoredAccount:urn:li:sponsoredAccount:N` and 400 at publish.\n */\nexport function accountTrackingTarget(args: Record<string, unknown>): { accountId: string; target: string } {\n const accountId = bareAccountId(args);\n return { accountId, target: `urn:li:sponsoredAccount:${accountId}` };\n}\n\nexport const accountUrlParamsCommand = defineCommand({\n meta: {\n name: \"url-params\",\n description: `Stage the URL tracking parameters on the whole AD ACCOUNT — LinkedIn appends them to the link of every ad in every ad set, including ads already running. ${STAGED_NOTE}\n\nUse this for the parameters that never vary across the account (utm_source, utm_medium, an agency tag). Anything that identifies a specific ad set belongs on the ad set (\\`campaigns url-params\\`) — LinkedIn appends BOTH levels, so a key set in both places lands in the URL twice.\n\nThis REPLACES the account's whole parameter set — LinkedIn does not merge. Read what it carries first with \\`baker ads linkedin url-params\\` and re-send every pair that should survive.\n\nValues LinkedIn fills in per ad (--dynamic): ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_GROUP_ID, CAMPAIGN_GROUP_NAME, CAMPAIGN_ID, CAMPAIGN_NAME, CREATIVE_ID, CREATIVE_NAME.\n\nExamples:\n baker ads linkedin account url-params --param \"utm_source=linkedin&utm_medium=paid_social\"\n baker ads linkedin account url-params --param utm_source=linkedin --dynamic utm_campaign=CAMPAIGN_NAME\n baker ads linkedin account url-params --clear`,\n },\n args: {\n ...accountArgs,\n param: {\n type: \"string\",\n description: 'Fixed key=value, repeatable or &-joined (e.g. --param \"utm_source=linkedin&utm_medium=paid\")',\n },\n dynamic: {\n type: \"string\",\n description: \"key=PLACEHOLDER LinkedIn fills in per ad, repeatable (e.g. --dynamic utm_campaign=CAMPAIGN_NAME)\",\n },\n clear: { type: \"boolean\", description: \"Remove every tracking parameter set on the ad account\" },\n file: { type: \"string\", description: \"JSON file with the full payload; flags override file keys\" },\n },\n run: async ({ args, rawArgs }) => {\n const { accountId, target } = accountTrackingTarget(args as Record<string, unknown>);\n await stageOp({\n kind: \"trackingParams.set\",\n accountId,\n target,\n payload: trackingParamsPayload(args as Record<string, unknown>, rawArgs),\n });\n },\n});\n\nexport const campaignsPauseCommand = statusSugarCommand(\"campaigns\", \"campaign.update\", \"pause\");\nexport const campaignsResumeCommand = statusSugarCommand(\"campaigns\", \"campaign.update\", \"resume\");\nexport const campaignsArchiveCommand = statusSugarCommand(\"campaigns\", \"campaign.update\", \"archive\");\nexport const campaignGroupsPauseCommand = statusSugarCommand(\"campaign-groups\", \"campaignGroup.update\", \"pause\");\nexport const campaignGroupsResumeCommand = statusSugarCommand(\"campaign-groups\", \"campaignGroup.update\", \"resume\");\nexport const creativesPauseCommand = statusSugarCommand(\"creatives\", \"creative.update\", \"pause\");\nexport const creativesResumeCommand = statusSugarCommand(\"creatives\", \"creative.update\", \"resume\");\n\nfunction duplicateCommand(entity: \"campaignGroup\" | \"campaign\" | \"creative\", cliGroup: string) {\n return defineCommand({\n meta: {\n name: \"duplicate\",\n description: `Stage a copy of an existing ${entity} as a new DRAFT create (playbook: duplicate, never link-to-original). ${STAGED_NOTE}\nExample: baker ads linkedin ${cliGroup} duplicate 123456 --name \"New variant\"`,\n },\n args: {\n id: { type: \"positional\", description: \"Source id or URN\", required: true },\n ...accountArgs,\n name: { type: \"string\", description: \"Name for the copy\" },\n file: { type: \"string\", description: \"JSON file with field overrides for the copy\" },\n },\n run: async ({ args }) => {\n try {\n const chatId = requireChatId();\n const overrides = mergePayload(loadJsonFileArg(args.file), { name: args.name });\n const response = await apiPost<{ ok: true; data: LinkedinDraftStageResponse }>(\n \"/api/ads/linkedin/draft/duplicate\",\n {\n chatId,\n accountId: bareAccountId(args as Record<string, unknown>),\n entity,\n sourceId: requireTarget(args as Record<string, unknown>, entity),\n ...(Object.keys(overrides).length > 0 ? { overrides } : {}),\n },\n );\n writeJsonEnvelope(response);\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n });\n}\n\nexport const campaignsDuplicateCommand = duplicateCommand(\"campaign\", \"campaigns\");\nexport const campaignGroupsDuplicateCommand = duplicateCommand(\"campaignGroup\", \"campaign-groups\");\n\nexport const creativesDuplicateCommand = defineCommand({\n meta: {\n name: \"duplicate\",\n description: `Stage a copy of an existing ad, optionally with new content. ${STAGED_NOTE}\nContent flags only apply to direct-content ads (text|spotlight|follower|jobs) — LinkedIn makes their content immutable, so a copy is how their copy/media/URL changes. Post-based ads (image|video|carousel|document|article|event|tla) sponsor a post that owns the copy, media and destination: a copy re-sponsors the SAME post, so content flags are rejected — stage \\`creatives create\\` with the new content instead, then pause the old ad.\n--replace also pauses the original once the new ad publishes (skipped if the new ad fails).\nExamples:\n baker ads linkedin creatives duplicate 1458413484 --headline \"10x Demos, Same Team\" --description \"AI handles every demo request.\" --replace\n baker ads linkedin creatives duplicate urn:li:sponsoredCreative:789 --campaign 799305464`,\n },\n args: {\n id: { type: \"positional\", description: \"Source creative id or URN\", required: true },\n ...accountArgs,\n campaign: { type: \"string\", description: \"Stage the copy under a different ad set (id/URN or li_temp_*)\" },\n \"intended-status\": {\n type: \"string\",\n description: \"Status for the copy (default DRAFT; with --replace, the source's status)\",\n },\n replace: {\n type: \"boolean\",\n description: \"Also pause the original once the new ad publishes; the copy inherits the source's status\",\n },\n intro: { type: \"string\", description: \"New commentary / intro text\" },\n headline: { type: \"string\", description: \"New headline\" },\n description: { type: \"string\", description: \"New description (text/spotlight ads)\" },\n \"landing-url\": {\n type: \"string\",\n description: \"New https destination URL (direct-content ads only — a post-based ad's URL lives in its post)\",\n },\n cta: { type: \"string\", description: \"New CTA (LEARN_MORE|REQUEST_DEMO|…)\" },\n \"cta-label\": { type: \"string\", description: \"Spotlight custom CTA label\" },\n \"image-id\": { type: \"string\", description: \"Baker image library id\" },\n \"image-urn\": { type: \"string\", description: \"Existing urn:li:image:*\" },\n \"video-id\": { type: \"string\", description: \"Baker video library id\" },\n \"video-urn\": { type: \"string\", description: \"Existing urn:li:video:*\" },\n \"logo-image-id\": { type: \"string\", description: \"Baker image id for the logo\" },\n title: { type: \"string\", description: \"Media title\" },\n file: { type: \"string\", description: \"JSON file with field overrides for the copy\" },\n },\n run: async ({ args }) => {\n try {\n const chatId = requireChatId();\n const file = loadJsonFileArg(args.file);\n const fileContent =\n file.content !== null && typeof file.content === \"object\" && !Array.isArray(file.content)\n ? (file.content as Record<string, unknown>)\n : {};\n const content = { ...fileContent, ...creativeContentPatch(args as Record<string, unknown>) };\n const overrides = mergePayload(file, {\n campaign: args.campaign,\n intendedStatus: args[\"intended-status\"] ? String(args[\"intended-status\"]).toUpperCase() : undefined,\n content: Object.keys(content).length > 0 ? content : undefined,\n });\n const response = await apiPost<{ ok: true; data: LinkedinDraftStageResponse }>(\n \"/api/ads/linkedin/draft/duplicate\",\n {\n chatId,\n accountId: bareAccountId(args as Record<string, unknown>),\n entity: \"creative\",\n sourceId: requireTarget(args as Record<string, unknown>, \"creative\"),\n ...(Object.keys(overrides).length > 0 ? { overrides } : {}),\n ...(args.replace ? { replace: true } : {}),\n },\n );\n writeJsonEnvelope(response);\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\n// --- Creatives ---\n\nconst CREATIVE_FORMATS = [\n \"image\",\n \"video\",\n \"text\",\n \"spotlight\",\n \"follower\",\n \"document\",\n \"carousel\",\n \"conversation\",\n \"tla\",\n \"jobs\",\n \"event\",\n \"article\",\n] as const;\n\nexport const creativesCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new creative (ad). ${STAGED_NOTE}\nFormats: ${CREATIVE_FORMATS.join(\"|\")}. Media comes from the Baker library (--image-id / --video-id from \\`baker images\\`/\\`baker videos\\`) or as LinkedIn URNs. Complex formats (carousel, jobs) take --file with the full content object. Conversation ads take --file with the message flow ({message: {subject, body, buttons[]}} — buttons NESTED|LANDING_PAGE, nested messages recurse).\nExamples:\n baker ads linkedin creatives create --campaign li_temp_x2 --format image --image-id <bakerImageId> --intro \"Meet the platform…\" --headline \"Book a demo\" --landing-url https://example.com/demo --cta REQUEST_DEMO\n baker ads linkedin creatives create --campaign 123456 --format tla --post-urn urn:li:ugcPost:789`,\n },\n args: {\n ...accountArgs,\n campaign: { type: \"string\", description: \"Campaign id/URN, or li_temp_* ref staged in this chat\" },\n format: { type: \"string\", description: CREATIVE_FORMATS.join(\"|\") },\n \"image-id\": { type: \"string\", description: \"Baker image library id (uploaded to LinkedIn at publish)\" },\n \"image-urn\": { type: \"string\", description: \"Existing urn:li:image:*\" },\n \"video-id\": { type: \"string\", description: \"Baker video library id\" },\n \"video-urn\": { type: \"string\", description: \"Existing urn:li:video:*\" },\n \"logo-image-id\": { type: \"string\", description: \"Baker image id for logo (text/spotlight/follower/jobs)\" },\n intro: { type: \"string\", description: \"Commentary / intro text (≤600 chars before feed truncation)\" },\n headline: { type: \"string\", description: \"Headline (≤70; text ads ≤25)\" },\n description: { type: \"string\", description: \"Description (text ads ≤75, spotlight ≤70)\" },\n \"landing-url\": { type: \"string\", description: \"https destination URL\" },\n cta: { type: \"string\", description: \"LEARN_MORE|REQUEST_DEMO|SIGN_UP|REGISTER|DOWNLOAD|…\" },\n \"cta-label\": { type: \"string\", description: \"Spotlight custom CTA label (≤18 chars)\" },\n \"post-urn\": { type: \"string\", description: \"TLA: existing post to sponsor (urn:li:share|ugcPost:*)\" },\n \"event-urn\": { type: \"string\", description: \"Event ads: the LinkedIn event to sponsor (urn:li:event:*)\" },\n \"article-url\": { type: \"string\", description: \"Article ads: https URL of the article/newsletter to sponsor\" },\n \"thumbnail-image-id\": { type: \"string\", description: \"Article ads: Baker image id for the link thumbnail\" },\n \"thumbnail-urn\": { type: \"string\", description: \"Article ads: existing urn:li:image:* thumbnail\" },\n \"intended-status\": { type: \"string\", description: \"DRAFT|ACTIVE|PAUSED (default DRAFT)\" },\n title: { type: \"string\", description: \"Media title (image/video) or article title\" },\n file: { type: \"string\", description: \"JSON file with the full content object; flags override\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n if (!args.campaign) {\n failWriteValidation(\"--campaign is required (id, URN, or li_temp_* ref)\");\n }\n const format = args.format ? String(args.format) : undefined;\n if (!format || !CREATIVE_FORMATS.includes(format as (typeof CREATIVE_FORMATS)[number])) {\n failWriteValidation(`--format must be one of ${CREATIVE_FORMATS.join(\"|\")}`);\n }\n const content = mergePayload(loadJsonFileArg(args.file), {\n format,\n commentary: args.intro,\n imageId: args[\"image-id\"],\n imageUrn: args[\"image-urn\"],\n videoId: args[\"video-id\"],\n videoUrn: args[\"video-urn\"],\n logoImageId: args[\"logo-image-id\"],\n headline: args.headline,\n description: args.description,\n landingUrl: args[\"landing-url\"],\n cta: args.cta ? String(args.cta).toUpperCase() : undefined,\n ctaLabel: args[\"cta-label\"],\n postUrn: args[\"post-urn\"],\n eventUrn: args[\"event-urn\"],\n source: args[\"article-url\"],\n thumbnailImageId: args[\"thumbnail-image-id\"],\n thumbnailUrn: args[\"thumbnail-urn\"],\n mediaTitle: args.title,\n title: args.title,\n });\n await stageOp({\n kind: \"creative.create\",\n accountId,\n payload: {\n campaign: args.campaign,\n intendedStatus: args[\"intended-status\"] ? String(args[\"intended-status\"]).toUpperCase() : undefined,\n content,\n },\n });\n },\n});\n\n/** Content fields `creatives update` can amend on a li_temp_* staged creative. */\nconst CREATIVE_AMEND_CONTENT_FLAGS = [\n [\"intro\", \"commentary\"],\n [\"headline\", \"headline\"],\n [\"description\", \"description\"],\n [\"landing-url\", \"landingUrl\"],\n [\"cta-label\", \"ctaLabel\"],\n [\"image-id\", \"imageId\"],\n [\"image-urn\", \"imageUrn\"],\n [\"video-id\", \"videoId\"],\n [\"video-urn\", \"videoUrn\"],\n [\"logo-image-id\", \"logoImageId\"],\n [\"thumbnail-image-id\", \"thumbnailImageId\"],\n [\"thumbnail-urn\", \"thumbnailUrn\"],\n [\"title\", \"title\"],\n] as const;\n\nfunction creativeContentPatch(args: Record<string, unknown>): Record<string, unknown> {\n const patch: Record<string, unknown> = {};\n for (const [flag, key] of CREATIVE_AMEND_CONTENT_FLAGS) {\n if (args[flag] !== undefined) {\n patch[key] = args[flag];\n }\n }\n if (args.cta !== undefined) {\n patch.cta = String(args.cta).toUpperCase();\n }\n return patch;\n}\n\nexport const creativesUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Stage changes to an existing creative, or amend a creative staged in this chat by passing its li_temp_* ref. ${STAGED_NOTE}\nDirect-content ads (text/spotlight/follower/jobs) update copy/media/URL IN PLACE — changed fields merge into the ad's current content. Post-based ads (image/video/carousel/…) sponsor a post that owns the copy, media and destination: neither this command nor \\`creatives duplicate\\` can change it — stage \\`creatives create\\` with the new content, then pause the old ad. Staged creatives (li_temp_*) accept all content flags and re-validate.\nApplies the same change to several ads at once: comma-separate the ids, or pass --ids-file. All of them stage together or none does. Live ids only — a li_temp_* amend has to be its own call.\n--campaign re-parents the ad to a different ad set — LinkedIn has no in-place move API, so this only works while the creative is still staged (li_temp_*); passing it against a live creative id/URN is rejected at stage time.\nExamples:\n baker ads linkedin creatives update 1458423674 --headline \"Sharper headline\" --description \"New copy.\"\n baker ads linkedin creatives update urn:li:sponsoredCreative:789 --intended-status PAUSED\n baker ads linkedin creatives update 1458423674,1458423675,1458423676 --intended-status PAUSED\n baker ads linkedin creatives update --ids-file ads.txt --intended-status PAUSED\n baker ads linkedin creatives update li_temp_x3 --campaign li_temp_x2`,\n },\n args: {\n id: {\n type: \"positional\",\n description:\n \"Creative id/URN — comma-separate several. A li_temp_* ref amends what this chat staged and must be passed on its own.\",\n required: false,\n },\n \"ids-file\": { type: \"string\", description: \"File of creative ids, one per line or comma-separated\" },\n ...accountArgs,\n \"intended-status\": { type: \"string\", description: \"ACTIVE|PAUSED|ARCHIVED|DRAFT\" },\n name: { type: \"string\", description: \"New creative name\" },\n campaign: {\n type: \"string\",\n description: \"Re-parent to a different ad set (id/URN or li_temp_*) — staged creatives only\",\n },\n intro: { type: \"string\", description: \"Commentary / intro text\" },\n headline: { type: \"string\", description: \"New headline\" },\n description: { type: \"string\", description: \"Description (text/spotlight ads)\" },\n \"landing-url\": { type: \"string\", description: \"New https destination URL\" },\n cta: { type: \"string\", description: \"New CTA (LEARN_MORE|REQUEST_DEMO|…)\" },\n \"cta-label\": { type: \"string\", description: \"Spotlight custom CTA label\" },\n \"image-id\": { type: \"string\", description: \"Baker image library id\" },\n \"image-urn\": { type: \"string\", description: \"Existing urn:li:image:*\" },\n \"video-id\": { type: \"string\", description: \"Baker video library id\" },\n \"video-urn\": { type: \"string\", description: \"Existing urn:li:video:*\" },\n \"logo-image-id\": { type: \"string\", description: \"Baker image id for the logo\" },\n \"thumbnail-image-id\": { type: \"string\", description: \"Baker image id for the article thumbnail\" },\n \"thumbnail-urn\": { type: \"string\", description: \"Existing urn:li:image:* thumbnail\" },\n title: { type: \"string\", description: \"Media or article title\" },\n file: { type: \"string\", description: \"JSON file with fields to change; flags override file keys\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const targets = requireTargets(args as Record<string, unknown>, \"creative\");\n const file = loadJsonFileArg(args.file);\n const contentPatch = creativeContentPatch(args as Record<string, unknown>);\n const intendedStatus = args[\"intended-status\"] ? String(args[\"intended-status\"]).toUpperCase() : undefined;\n const fileContent =\n file.content !== null && typeof file.content === \"object\" && !Array.isArray(file.content)\n ? (file.content as Record<string, unknown>)\n : {};\n const content = { ...fileContent, ...contentPatch };\n const payload = mergePayload(file, {\n intendedStatus,\n name: args.name,\n campaign: args.campaign,\n content: Object.keys(content).length > 0 ? content : undefined,\n });\n await stageLinkedinOps(targets.map((target) => ({ kind: \"creative.update\", accountId, target, payload })));\n },\n});\n\n// --- Audiences ---\n\nconst AUDIENCE_TYPES = [\"company-list\", \"user-list\", \"retargeting\", \"engagement\"] as const;\nconst INLINE_ROWS_MAX = 10_000;\n\nconst audiencesCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new matched audience. ${STAGED_NOTE}\nList audiences take --list-file (CSV: companyName,domain,organizationUrn for companies — organizationUrn matches the company page exactly; email,… for contacts — emails are SHA-256 hashed locally). LinkedIn needs 300+ MATCHED members to serve.\nExample: baker ads linkedin audiences create --name \"ABM Tier-1\" --type company-list --list-file accounts.csv`,\n },\n args: {\n ...accountArgs,\n name: { type: \"string\", description: \"Audience name (≤100 chars)\" },\n type: { type: \"string\", description: AUDIENCE_TYPES.join(\"|\") },\n \"list-file\": { type: \"string\", description: \"CSV file with the list rows (header row required)\" },\n file: {\n type: \"string\",\n description:\n 'JSON file with a raw source config (retargeting/engagement) — sourcePlatform, type USER and at least one engagementRules entry, e.g. {\"sourcePlatform\":\"VIDEO_ADS\",\"type\":\"USER\",\"engagementRules\":[{\"engagementSource\":\"urn:li:sponsoredCampaign:123\",\"engagementTrigger\":\"urn:li:dmpEngagementTrigger:(urn:li:dmpEngagementSourceType:VIDEO_ADS,FIRST_QUARTILE)\",\"timeFrame\":{\"timeSpan\":{\"duration\":90,\"unit\":\"DAY\"}}}]}',\n },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const list = parseListFileArg(args[\"list-file\"], INLINE_ROWS_MAX);\n const raw = args.file ? loadJsonFileArg(args.file) : undefined;\n await stageOp({\n kind: \"audience.create\",\n accountId,\n payload: {\n name: args.name,\n audienceType: args.type,\n ...(list ? { listColumns: list.columns, listRows: list.rows } : {}),\n ...(raw ? { raw } : {}),\n },\n });\n },\n});\n\nconst audiencesUploadCommand = defineCommand({\n meta: {\n name: \"upload\",\n description: `Stage a list upload into an existing audience segment. ${STAGED_NOTE}\nExample: baker ads linkedin audiences upload urn:li:dmpSegment:42 --list-file more-accounts.csv`,\n },\n args: {\n id: { type: \"positional\", description: \"Segment URN/id, or li_temp_* ref staged in this chat\", required: true },\n ...accountArgs,\n \"list-file\": { type: \"string\", description: \"CSV file with the rows to add\", required: true },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const list = parseListFileArg(args[\"list-file\"], INLINE_ROWS_MAX);\n if (!list) {\n failWriteValidation(\"--list-file is required\");\n }\n await stageOp({\n kind: \"audience.uploadList\",\n accountId,\n payload: {\n segment: requireTarget(args as Record<string, unknown>, \"audience segment\"),\n listColumns: list.columns,\n listRows: list.rows,\n },\n });\n },\n});\n\nexport const audiencesCommand = defineCommand({\n meta: {\n name: \"audiences\",\n description:\n \"Stage LinkedIn matched-audience changes (create lists, upload rows). Staged until publish — never hits the API directly.\",\n },\n subCommands: {\n create: audiencesCreateCommand,\n upload: audiencesUploadCommand,\n },\n});\n\n// --- Conversions ---\n\nexport const conversionsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new conversion rule. ${STAGED_NOTE}\nExample: baker ads linkedin conversions create --name \"Demo booked\" --type LEAD --method INSIGHT_TAG --post-click-window 30 --view-window 7`,\n },\n args: {\n ...accountArgs,\n name: { type: \"string\", description: \"Conversion rule name\" },\n type: {\n type: \"string\",\n description:\n \"Conversion type. Common: LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, SIGN_UP, DOWNLOAD, PURCHASE, KEY_PAGE_VIEW, ADD_TO_CART, BOOK_APPOINTMENT, SUBMIT_APPLICATION, OTHER — `baker schema ads.linkedin.conversions.create` lists all 34\",\n },\n method: { type: \"string\", description: \"INSIGHT_TAG|CONVERSIONS_API\" },\n \"post-click-window\": {\n type: \"string\",\n description:\n \"1|7|30|90 days (playbook default 30); 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION\",\n },\n \"view-window\": {\n type: \"string\",\n description:\n \"1|7|30|90 days (playbook default 7); 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION\",\n },\n \"attribution-type\": { type: \"string\", description: \"LAST_TOUCH_BY_CAMPAIGN|LAST_TOUCH_BY_CONVERSION\" },\n \"associate-all-campaigns\": { type: \"boolean\", description: \"Auto-associate with active campaigns\" },\n file: { type: \"string\", description: \"JSON file with the full payload (e.g. urlMatchRuleExpression)\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload(loadJsonFileArg(args.file), {\n name: args.name,\n type: args.type ? String(args.type).toUpperCase() : undefined,\n conversionMethod: args.method ? String(args.method).toUpperCase() : undefined,\n postClickAttributionWindowSize: args[\"post-click-window\"] ? Number(args[\"post-click-window\"]) : undefined,\n viewThroughAttributionWindowSize: args[\"view-window\"] ? Number(args[\"view-window\"]) : undefined,\n attributionType: args[\"attribution-type\"] ? String(args[\"attribution-type\"]).toUpperCase() : undefined,\n associateAllCampaigns: args[\"associate-all-campaigns\"] === true ? true : undefined,\n });\n await stageOp({ kind: \"conversion.create\", accountId, payload });\n },\n});\n\nexport const conversionsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Stage changes to a conversion rule (windows, name, enabled). ${STAGED_NOTE}\nExample: baker ads linkedin conversions update 104988516 --post-click-window 30 --view-window 7`,\n },\n args: {\n id: { type: \"positional\", description: \"Conversion rule id or URN\", required: true },\n ...accountArgs,\n name: { type: \"string\", description: \"New name\" },\n \"post-click-window\": {\n type: \"string\",\n description:\n \"1|7|30|90 days; 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION\",\n },\n \"view-window\": {\n type: \"string\",\n description:\n \"1|7|30|90 days; 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION\",\n },\n \"attribution-type\": { type: \"string\", description: \"LAST_TOUCH_BY_CAMPAIGN|LAST_TOUCH_BY_CONVERSION\" },\n enabled: { type: \"string\", description: \"on|off\" },\n file: { type: \"string\", description: \"JSON file with fields to change\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload(loadJsonFileArg(args.file), {\n name: args.name,\n postClickAttributionWindowSize: args[\"post-click-window\"] ? Number(args[\"post-click-window\"]) : undefined,\n viewThroughAttributionWindowSize: args[\"view-window\"] ? Number(args[\"view-window\"]) : undefined,\n attributionType: args[\"attribution-type\"] ? String(args[\"attribution-type\"]).toUpperCase() : undefined,\n enabled: parseOnOffFlag(args.enabled, \"--enabled\"),\n });\n await stageOp({\n kind: \"conversion.update\",\n accountId,\n target: requireTarget(args as Record<string, unknown>, \"conversion rule\"),\n payload,\n });\n },\n});\n\nconst CONVERSION_CAMPAIGN_EXPLAINER = `Which ad sets a conversion rule counts for is a separate LinkedIn record, not a field on the rule — \\`conversions update\\` cannot change it, and \\`--associate-all-campaigns\\` only exists on create.`;\n\nfunction conversionCampaignArgs() {\n return {\n id: { type: \"positional\" as const, description: \"Conversion rule id or URN\", required: true },\n ...accountArgs,\n campaign: { type: \"string\" as const, description: \"Ad set (campaign) id or URN\", required: true },\n };\n}\n\nfunction requireCampaignArg(args: Record<string, unknown>): string {\n const campaign = args.campaign;\n if (typeof campaign !== \"string\" || campaign.length === 0) {\n failWriteValidation(\"--campaign is required — pass the ad set id or URN this conversion should count for\");\n }\n return campaign as string;\n}\n\nexport const conversionsAssociateCommand = defineCommand({\n meta: {\n name: \"associate-campaign\",\n description: `Count an existing conversion rule for one ad set. ${STAGED_NOTE}\n${CONVERSION_CAMPAIGN_EXPLAINER}\nExample: baker ads linkedin conversions associate-campaign 104988516 --campaign 337643194`,\n },\n args: conversionCampaignArgs(),\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n await stageOp({\n kind: \"conversion.associateCampaign\",\n accountId,\n target: requireTarget(args as Record<string, unknown>, \"conversion rule\"),\n payload: { campaign: requireCampaignArg(args as Record<string, unknown>) },\n });\n },\n});\n\nexport const conversionsDissociateCommand = defineCommand({\n meta: {\n name: \"dissociate-campaign\",\n description: `Stop counting an existing conversion rule for one ad set. ${STAGED_NOTE}\n${CONVERSION_CAMPAIGN_EXPLAINER}\nExample: baker ads linkedin conversions dissociate-campaign 104988516 --campaign 337643194`,\n },\n args: conversionCampaignArgs(),\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n await stageOp({\n kind: \"conversion.dissociateCampaign\",\n accountId,\n target: requireTarget(args as Record<string, unknown>, \"conversion rule\"),\n payload: { campaign: requireCampaignArg(args as Record<string, unknown>) },\n });\n },\n});\n\n// --- Lead gen forms (file-first — deeply nested) ---\n\nconst leadFormsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new Lead Gen Form from a JSON file. ${STAGED_NOTE}\nRequired: name, headline (≤60), privacyPolicyUrl, questions[] (≤12; playbook: ≤4 for completion).\nEach question is a predefined profile field ({ name, predefinedField: \"EMAIL\" }) or a custom question ({ name, questionType: \"MULTIPLE_CHOICE\", options: [...] }; ≤3 custom).\nBest-practice fields the preview will nudge for if missing: 1-3 qualifying questions, consents[] (disclosure checkboxes), thankYou.message + thankYou.landingUrl|appointmentUrl.\nAlso supported: locale, formImageId|formImageUrn, hiddenFields[], legalDisclaimer, thankYou.cta. Example: baker ads linkedin lead-forms create --file form.json`,\n },\n args: {\n ...accountArgs,\n file: { type: \"string\", description: \"JSON file with the form definition\", required: true },\n name: { type: \"string\", description: \"Override the form name\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload(loadJsonFileArg(args.file), { name: args.name });\n await stageOp({ kind: \"leadForm.create\", accountId, payload });\n },\n});\n\nconst leadFormsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Stage changes to a Lead Gen Form from a JSON file. ${STAGED_NOTE}`,\n },\n args: {\n id: { type: \"positional\", description: \"Lead form id or URN\", required: true },\n ...accountArgs,\n file: { type: \"string\", description: \"JSON file with the fields to change\", required: true },\n name: { type: \"string\", description: \"New form name\" },\n },\n run: async ({ args }) => {\n const accountId = bareAccountId(args as Record<string, unknown>);\n const payload = mergePayload({ raw: loadJsonFileArg(args.file) }, { name: args.name });\n await stageOp({\n kind: \"leadForm.update\",\n accountId,\n target: requireTarget(args as Record<string, unknown>, \"lead form\"),\n payload,\n });\n },\n});\n\nexport const leadFormsCommand = defineCommand({\n meta: {\n name: \"lead-forms\",\n description:\n \"Stage LinkedIn Lead Gen Form changes (file-first). Staged until publish — never hits the API directly.\",\n },\n subCommands: {\n create: leadFormsCreateCommand,\n update: leadFormsUpdateCommand,\n },\n});\n"],"mappings":"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","names":[]}