@koda-sl/baker-cli 0.508.0 → 0.510.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/README.md +1 -1
  2. package/dist/{account-RSOGF4XW.js → account-SMKA6P4Z.js} +5 -5
  3. package/dist/{account-assets-WZOYMT3C.js → account-assets-O7IA37RE.js} +6 -6
  4. package/dist/{account-level-XEDTZVNJ.js → account-level-EU7BWCO7.js} +5 -5
  5. package/dist/{account-reads-KJHPUVEV.js → account-reads-SNOWDHHF.js} +4 -4
  6. package/dist/{account-users-X7JTXBHS.js → account-users-T2MBGK7C.js} +6 -6
  7. package/dist/{accounts-UFPI46P5.js → accounts-L4TR3XTA.js} +4 -4
  8. package/dist/{accounts-CC5F7TBB.js → accounts-VID557NT.js} +6 -6
  9. package/dist/{actions-IG2D6NRC.js → actions-ZVBG7WKM.js} +18 -18
  10. package/dist/{activecampaign-S76P2FMN.js → activecampaign-3YN2UTXP.js} +4 -4
  11. package/dist/{add-V4UNAGVT.js → add-PHKZXFUW.js} +4 -4
  12. package/dist/{add-GZV57GNI.js → add-TXQYAWPP.js} +3 -3
  13. package/dist/{ads-IC52FMFA.js → ads-C7XJNMCX.js} +10 -10
  14. package/dist/{ads-BOLVA4YI.js → ads-JIX7BYE5.js} +6 -6
  15. package/dist/{adsets-7N4UFAVA.js → adsets-6H5ZOYGF.js} +9 -9
  16. package/dist/{advertisers-B2YDPIMV.js → advertisers-RK3UQWBA.js} +4 -4
  17. package/dist/{analytics-P5UFA6I4.js → analytics-3VLFGKOT.js} +7 -7
  18. package/dist/{analytics-YIRKA7OC.js → analytics-4TDNEPFQ.js} +4 -4
  19. package/dist/{asset-writes-QPJDD767.js → asset-writes-72DEVXGO.js} +5 -5
  20. package/dist/{assign-HE3MH7WE.js → assign-YAHBW3CN.js} +4 -4
  21. package/dist/{audience-size-W33DMJ7E.js → audience-size-PKHWSABW.js} +4 -4
  22. package/dist/{audience-writes-KO7L5YLO.js → audience-writes-KCHLNFSI.js} +4 -4
  23. package/dist/{audiences-H5WVE2ZA.js → audiences-QAH42HIM.js} +6 -6
  24. package/dist/{audit-EFDIMRYT.js → audit-X2U5KKDY.js} +4 -4
  25. package/dist/{autocomplete-H4BKQNXF.js → autocomplete-D2R5XJGE.js} +4 -4
  26. package/dist/{avatars-VYXUQSSE.js → avatars-NUYPMFNM.js} +4 -4
  27. package/dist/{bid-pricing-QK4IJUD2.js → bid-pricing-6A2K4WXD.js} +5 -5
  28. package/dist/{brand-JB6NXAAL.js → brand-SWEL6C5B.js} +2 -2
  29. package/dist/{brief-G5WEJ52V.js → brief-36CRH2QS.js} +13 -13
  30. package/dist/{campaign-groups-X2WAZE64.js → campaign-groups-PWKQEDN6.js} +10 -10
  31. package/dist/{campaign-writes-LM6W5MIF.js → campaign-writes-E5EQFXWF.js} +4 -4
  32. package/dist/{campaigns-7PHPOERA.js → campaigns-DVZXUCCH.js} +13 -13
  33. package/dist/{campaigns-PCD72XQX.js → campaigns-HN656A2N.js} +9 -9
  34. package/dist/{campaigns-4ERDITZ5.js → campaigns-S7OU6SEE.js} +5 -5
  35. package/dist/{canvas-YULE6CFP.js → canvas-BWRJUCQ5.js} +13 -13
  36. package/dist/{capabilities-QREOIRIH.js → capabilities-JJ67W5O5.js} +4 -4
  37. package/dist/{catalogs-OIQS5NSC.js → catalogs-JLCSFZYC.js} +4 -4
  38. package/dist/{chats-FF4PN5JC.js → chats-JY6JAOLN.js} +4 -4
  39. package/dist/{check-5UHPABWJ.js → check-TDAP7PUO.js} +6 -6
  40. package/dist/{chunk-SBFP3REK.js → chunk-372V4EUW.js} +3 -3
  41. package/dist/{chunk-X45ASFZW.js → chunk-3SJ7F2NS.js} +3 -3
  42. package/dist/{chunk-ZQXHOHSC.js → chunk-4F6RGT4G.js} +2 -2
  43. package/dist/{chunk-K5ZOZ2IY.js → chunk-4YL2TKIB.js} +3 -3
  44. package/dist/{chunk-LE7VW2IU.js → chunk-5MZFPMNJ.js} +2 -2
  45. package/dist/{chunk-CLUJWAQE.js → chunk-6D3KBT3I.js} +2 -2
  46. package/dist/{chunk-SG2BCYWB.js → chunk-7FBRAVXA.js} +3 -3
  47. package/dist/{chunk-BHXFGLY5.js → chunk-B4WQAGOQ.js} +2 -2
  48. package/dist/{chunk-EXELLNQS.js → chunk-BHM4AGUH.js} +5 -2
  49. package/dist/chunk-BHM4AGUH.js.map +1 -0
  50. package/dist/{chunk-AHUA76NQ.js → chunk-DH7Q3WOV.js} +2 -2
  51. package/dist/{chunk-PISGCYXU.js → chunk-E3O5NRD2.js} +2 -2
  52. package/dist/{chunk-RRJK46PC.js → chunk-EEFAN5XO.js} +2 -2
  53. package/dist/{chunk-KTCWU4A4.js → chunk-EP6YT6W7.js} +2 -2
  54. package/dist/{chunk-277FW25B.js → chunk-GKXKKGET.js} +2 -2
  55. package/dist/{chunk-NALPM5QO.js → chunk-GOCL4RYW.js} +2 -2
  56. package/dist/{chunk-BRA6IXRS.js → chunk-HNJRZS3X.js} +2 -2
  57. package/dist/{chunk-BW36QQQU.js → chunk-I4UHCEPI.js} +8 -8
  58. package/dist/{chunk-IYMGQATT.js → chunk-IKABCOR5.js} +2 -2
  59. package/dist/{chunk-HD23TJIT.js → chunk-J2EPHTRZ.js} +2 -2
  60. package/dist/{chunk-BPRS7VQ3.js → chunk-JKYFQOGU.js} +4 -4
  61. package/dist/{chunk-JOXNUKI7.js → chunk-KBRJSPIM.js} +2 -2
  62. package/dist/{chunk-5DJ5RNAO.js → chunk-KFKJCMVE.js} +3 -3
  63. package/dist/{chunk-T3KW63H7.js → chunk-LG3JT3W6.js} +4 -4
  64. package/dist/{chunk-F4RZHA74.js → chunk-LN2U45XJ.js} +3 -3
  65. package/dist/{chunk-JYG7N6TV.js → chunk-LXHMT54H.js} +2 -2
  66. package/dist/{chunk-KYSTZP7J.js → chunk-LZ6O67EY.js} +3 -3
  67. package/dist/{chunk-GDXJVEVG.js → chunk-M5SMMJAQ.js} +2 -2
  68. package/dist/{chunk-D2JFOD5O.js → chunk-MUQ4CICG.js} +2 -2
  69. package/dist/{chunk-ROVV7INH.js → chunk-N4YDINH6.js} +2 -2
  70. package/dist/{chunk-UI6BKYQD.js → chunk-NSBNIPIW.js} +1 -1
  71. package/dist/chunk-NSBNIPIW.js.map +1 -0
  72. package/dist/{chunk-S335LT4B.js → chunk-OBJCNGZL.js} +2 -2
  73. package/dist/{chunk-DM6CEVCN.js → chunk-OHWCCNAM.js} +2 -2
  74. package/dist/{chunk-BOE6YB2D.js → chunk-OWWSWBVA.js} +2 -2
  75. package/dist/{chunk-FM6RRYJB.js → chunk-P537ICAA.js} +3 -3
  76. package/dist/{chunk-DTUGU4EI.js → chunk-Q4INKG6N.js} +2 -2
  77. package/dist/{chunk-DZGXFV6A.js → chunk-QAIIQVD6.js} +2 -2
  78. package/dist/{chunk-ZAM6PVHX.js → chunk-QK4ULW42.js} +2 -2
  79. package/dist/{chunk-GNDSD5VQ.js → chunk-RGA47NDO.js} +3 -3
  80. package/dist/{chunk-KJZPCLQE.js → chunk-SCAGMX2I.js} +2 -2
  81. package/dist/{chunk-7LLKJN2O.js → chunk-SFAVWURJ.js} +2 -2
  82. package/dist/{chunk-HWDRW36T.js → chunk-SHI2S5D3.js} +2 -2
  83. package/dist/{chunk-ZGWXGK5S.js → chunk-TCVMREWC.js} +2 -2
  84. package/dist/{chunk-UQ7SJMGJ.js → chunk-TVAIOC77.js} +2 -2
  85. package/dist/{chunk-36MUCC42.js → chunk-UGADPPOO.js} +2 -2
  86. package/dist/{chunk-LIRX2Q66.js → chunk-WJO2MBHU.js} +2 -2
  87. package/dist/{chunk-RJY5S7RU.js → chunk-XDCOMC44.js} +5 -5
  88. package/dist/{chunk-YLQWWLCW.js → chunk-XGPU2VDU.js} +2 -2
  89. package/dist/{chunk-D735YLAX.js → chunk-YEE7VLSU.js} +5 -5
  90. package/dist/{chunk-WVTKUCAO.js → chunk-YOR65DEN.js} +3 -3
  91. package/dist/{claim-JMF4O2SQ.js → claim-FUVYK2YT.js} +4 -4
  92. package/dist/cli.js +30 -30
  93. package/dist/{companies-2DHNNS34.js → companies-AWVD4MUQ.js} +4 -4
  94. package/dist/{company-UVLP5WE7.js → company-FZWPUURL.js} +4 -4
  95. package/dist/{complete-MVR6QHON.js → complete-Z6GT32O2.js} +4 -4
  96. package/dist/{connect-WTDJKDTR.js → connect-Q2L6WXKZ.js} +7 -7
  97. package/dist/{conversation-O3XOVYC3.js → conversation-LOTY465T.js} +4 -4
  98. package/dist/{conversion-upload-command-MHZSSJXN.js → conversion-upload-command-KTYAY7IG.js} +4 -4
  99. package/dist/{conversions-HUQJ767W.js → conversions-ALPDPMEF.js} +9 -9
  100. package/dist/{copy-writes-JH2AECES.js → copy-writes-P4WK6OPM.js} +5 -5
  101. package/dist/{create-YGAMPG2C.js → create-4JAQ2QZL.js} +4 -4
  102. package/dist/{create-YE3VLUUP.js → create-KDYEOKVP.js} +4 -4
  103. package/dist/{create-EXLN4XHF.js → create-PRCAU7ES.js} +4 -4
  104. package/dist/{create-TCT3IMAU.js → create-RQ4SJB64.js} +3 -3
  105. package/dist/{creatives-L7F4BF3F.js → creatives-JPKA2RHU.js} +4 -4
  106. package/dist/{creatives-IXR4RTSF.js → creatives-RSA4ANVM.js} +10 -10
  107. package/dist/{creatives-WUUHFCFY.js → creatives-SULK3SMQ.js} +12 -12
  108. package/dist/{credentials-UY6OPN7W.js → credentials-IQH7MOHM.js} +4 -4
  109. package/dist/{critique-WOSMZPHW.js → critique-R6ZR7MCW.js} +4 -4
  110. package/dist/{critique-ZYLCH5SO.js → critique-TMNBP4TM.js} +9 -9
  111. package/dist/{crm-F64BDO4X.js → crm-6BU2IKUS.js} +5 -5
  112. package/dist/{crm-K2QSZ2X7.js → crm-BALM2FZY.js} +5 -5
  113. package/dist/{custom-conversions-6KYF26SK.js → custom-conversions-5HJBB5XL.js} +5 -5
  114. package/dist/custom-conversions-5HJBB5XL.js.map +1 -0
  115. package/dist/{customers-TJDVAPTR.js → customers-H7CFHRPL.js} +6 -6
  116. package/dist/{delete-4XHBC4UR.js → delete-26O52OI5.js} +3 -3
  117. package/dist/{delete-A4R2R7HF.js → delete-73QJARMX.js} +4 -4
  118. package/dist/{delete-SUHPUAE5.js → delete-AAV5ROOA.js} +4 -4
  119. package/dist/{demographics-MZBHPCT3.js → demographics-WAMVL2YQ.js} +4 -4
  120. package/dist/{discard-HUP4DXIJ.js → discard-462XXEKS.js} +4 -4
  121. package/dist/{domain-WFT5NJNP.js → domain-J4JWIUWL.js} +4 -4
  122. package/dist/{download-DAWPUKXP.js → download-X7MUX426.js} +3 -3
  123. package/dist/{draft-6HTSF36L.js → draft-3ZOA3F64.js} +4 -4
  124. package/dist/{draft-RTZBROFS.js → draft-I4KOOAI3.js} +6 -6
  125. package/dist/{draft-SNKUG6UX.js → draft-WYDMLNYA.js} +4 -4
  126. package/dist/{draft-6XS36CMT.js → draft-Y4HXZZMX.js} +4 -4
  127. package/dist/{experiments-PJWBABLJ.js → experiments-YBLIFMXQ.js} +6 -6
  128. package/dist/{facets-SWSXRJ5G.js → facets-5E433R6W.js} +4 -4
  129. package/dist/{feedback-HL3RH5AO.js → feedback-Y3UVMQSG.js} +12 -12
  130. package/dist/{feedback-record-YDI2MHAV.js → feedback-record-DFBHYHGC.js} +13 -13
  131. package/dist/{fetch-ASLXGN7O.js → fetch-ZXRYSH3M.js} +4 -4
  132. package/dist/{fit-I3FZJKOK.js → fit-3FSVKIDF.js} +6 -6
  133. package/dist/{flows-BP7IQ4YA.js → flows-NDPRAZD4.js} +11 -11
  134. package/dist/{fonts-U23DJIT2.js → fonts-SFRDQN57.js} +6 -6
  135. package/dist/{forecast-LXTCKRZE.js → forecast-4AG5F7YC.js} +4 -4
  136. package/dist/{forecast-DUAOZEMB.js → forecast-N27XNHQQ.js} +5 -5
  137. package/dist/{funnel-S6JTLUK6.js → funnel-AREK6URC.js} +5 -5
  138. package/dist/{get-PB62YT3J.js → get-CMGW24LE.js} +4 -4
  139. package/dist/{get-4567QZ5E.js → get-OUMJXAW5.js} +4 -4
  140. package/dist/{google-X6LRA27Z.js → google-Z45VV6UD.js} +12 -12
  141. package/dist/{google-ads-XM4NUOST.js → google-ads-QZ5P5TPJ.js} +4 -4
  142. package/dist/{history-26OX4MCJ.js → history-XQXHUXRY.js} +4 -4
  143. package/dist/{hubspot-S3ED4AYK.js → hubspot-DTJ6Q3XJ.js} +8 -8
  144. package/dist/{ideas-KNIT3KNY.js → ideas-RVN5Y5QH.js} +5 -5
  145. package/dist/{images-SCC3QYPG.js → images-46W2PYHJ.js} +4 -4
  146. package/dist/{ingest-667IMIGB.js → ingest-HP7ZOCU2.js} +4 -4
  147. package/dist/{ingest-PXCOSPP5.js → ingest-RS7REWYU.js} +3 -3
  148. package/dist/{inspect-PSWSCTLJ.js → inspect-XL464HNM.js} +4 -4
  149. package/dist/{instant-experiences-ABIS6KUQ.js → instant-experiences-HT3HB4QZ.js} +4 -4
  150. package/dist/{keyword-metrics-HQSNLJM3.js → keyword-metrics-RNCB7UJY.js} +4 -4
  151. package/dist/{keywords-for-site-FX6KCUNV.js → keywords-for-site-XDSQTBC2.js} +4 -4
  152. package/dist/{landing-GEWSOHGZ.js → landing-ORDNKQFB.js} +2 -2
  153. package/dist/{leads-ONFUUBAZ.js → leads-ANQHF46W.js} +4 -4
  154. package/dist/{leads-WKGUT3EA.js → leads-SZOGCQFK.js} +4 -4
  155. package/dist/{learn-2QPP7NHC.js → learn-FYG5A4TA.js} +5 -5
  156. package/dist/{line-item-writes-2XGDEEV3.js → line-item-writes-UZSUA2MR.js} +4 -4
  157. package/dist/{line-items-ZSQS2AWV.js → line-items-RRAMAJ7C.js} +5 -5
  158. package/dist/{link-QL7Y2LML.js → link-VAN3YIMU.js} +4 -4
  159. package/dist/{linkedin-AWUXPBIV.js → linkedin-PONUUSWS.js} +33 -33
  160. package/dist/linkedin-PONUUSWS.js.map +1 -0
  161. package/dist/{linkedin-person-E4JJG4J5.js → linkedin-person-BDLPSHV2.js} +4 -4
  162. package/dist/{list-GF3LEAM7.js → list-CC4O7JNF.js} +4 -4
  163. package/dist/{list-KLDAPWIB.js → list-EC2UTJ3G.js} +4 -4
  164. package/dist/{list-4SAXAQCN.js → list-LQJXJEFY.js} +3 -3
  165. package/dist/{log-4LLRZB2M.js → log-K76RGBD4.js} +4 -4
  166. package/dist/{make-ZMFGPL7A.js → make-RGEDSSDA.js} +16 -16
  167. package/dist/{map-NKRFK545.js → map-UTTWDZUG.js} +5 -5
  168. package/dist/{mcp-VARLEIKU.js → mcp-GYC6OYOI.js} +3 -3
  169. package/dist/{media-LE2PO4Q4.js → media-ZWN7E777.js} +3 -3
  170. package/dist/{media-sources-4Y53RHUW.js → media-sources-GNOR56P2.js} +2 -2
  171. package/dist/{members-HSPPVHU2.js → members-WB53HJX5.js} +4 -4
  172. package/dist/{meta-VL5RNWCW.js → meta-QWV6UVUC.js} +29 -29
  173. package/dist/{normalize-LDIXBNSA.js → normalize-F5GUTQMT.js} +4 -4
  174. package/dist/{options-2GEONNJF.js → options-UL6T76PM.js} +7 -7
  175. package/dist/{organization-W5JLJ4KP.js → organization-RBPHKNNO.js} +4 -4
  176. package/dist/{page-photos-TOM74T5U.js → page-photos-HWKQOSCU.js} +4 -4
  177. package/dist/{performance-34LV3QGQ.js → performance-7QBDTEHF.js} +5 -5
  178. package/dist/{performance-34XRXF2I.js → performance-SVEXDLCT.js} +5 -5
  179. package/dist/{performance-34XRXF2I.js.map → performance-SVEXDLCT.js.map} +1 -1
  180. package/dist/{promoted-tweet-writes-7XGCGHPN.js → promoted-tweet-writes-ZSJZ6JSL.js} +4 -4
  181. package/dist/{promoted-tweets-EZZHHGS6.js → promoted-tweets-XKKOTH2K.js} +3 -3
  182. package/dist/{publish-OB7UZSKT.js → publish-ERYQU5R7.js} +4 -4
  183. package/dist/{reddit-PR2SBLQN.js → reddit-SP62XYJD.js} +5 -5
  184. package/dist/{refresh-EJ6XQNAQ.js → refresh-GEGJMCWX.js} +3 -3
  185. package/dist/{release-FV6M3X4D.js → release-YEMLUFBD.js} +4 -4
  186. package/dist/{remove-6LK6L3KE.js → remove-W6PUVZPA.js} +3 -3
  187. package/dist/{reopen-2VHSGKNJ.js → reopen-JBTVZ2LW.js} +4 -4
  188. package/dist/{rerun-W6YHMXCK.js → rerun-D6LE7FDU.js} +15 -15
  189. package/dist/{research-6NUBHVSB.js → research-TFB6P2QZ.js} +3 -3
  190. package/dist/{research-BYDRBMN5.js → research-XSIMRMBF.js} +13 -13
  191. package/dist/{reset-YO66ZZRC.js → reset-DBNUPYPX.js} +3 -3
  192. package/dist/{reset-MPGBOFJD.js → reset-GYRNMHIO.js} +3 -3
  193. package/dist/{resolve-SGXOPZ4W.js → resolve-72VSHTVC.js} +4 -4
  194. package/dist/{retry-LXMT4I2X.js → retry-OPE6OETO.js} +3 -3
  195. package/dist/{retry-Z2ZUPUQI.js → retry-RBX7T4YX.js} +3 -3
  196. package/dist/{revenue-MZ2C65GL.js → revenue-QWYYDLBW.js} +6 -6
  197. package/dist/{rule-writes-KLYXCD7Z.js → rule-writes-S3RN47OG.js} +4 -4
  198. package/dist/{rules-NALFFFDR.js → rules-KTJ2ZZ62.js} +7 -7
  199. package/dist/{rules-CDMHA2KQ.js → rules-OPKDULKM.js} +6 -6
  200. package/dist/{rules-add-HEXUMODD.js → rules-add-GMHA3474.js} +6 -6
  201. package/dist/{run-VNL34BKW.js → run-JG4Q3RMR.js} +4 -4
  202. package/dist/{run-WTD73KD5.js → run-KCUGWQQT.js} +15 -15
  203. package/dist/{scaffold-ad-S2DZSRM4.js → scaffold-ad-6JWUIBT7.js} +11 -11
  204. package/dist/{scaffold-static-ad-DW6OMF3D.js → scaffold-static-ad-55IO4GEF.js} +19 -19
  205. package/dist/{scaffold-video-EXLUICRE.js → scaffold-video-CMLUB4JS.js} +10 -10
  206. package/dist/{schedule-7GAFQXF7.js → schedule-O2TNC2YG.js} +3 -3
  207. package/dist/{scheduled-agents-7JW3JIOL.js → scheduled-agents-PSOCKMRO.js} +10 -10
  208. package/dist/{schema-PHGVKZ4X.js → schema-3JYIIVR4.js} +5 -5
  209. package/dist/{search-VCRWREOU.js → search-OHPP6LOU.js} +3 -3
  210. package/dist/{select-BPGZYHR3.js → select-JMSE3WPN.js} +11 -11
  211. package/dist/{set-prompt-E776UHMH.js → set-prompt-74H5AWOU.js} +9 -9
  212. package/dist/{setup-links-2AMTW6O5.js → setup-links-ATIWLLRA.js} +4 -4
  213. package/dist/{shopify-SUSDBUUZ.js → shopify-C3QLAHPJ.js} +4 -4
  214. package/dist/{site-DH6Z2RX3.js → site-YRPQSUZQ.js} +5 -5
  215. package/dist/{sources-ZJ7EZ6TJ.js → sources-7KAVPFEJ.js} +6 -6
  216. package/dist/{sources-L3KNVLIB.js → sources-MZHPLHZ7.js} +7 -7
  217. package/dist/{stale-RHW4OYXY.js → stale-SV27TXXK.js} +10 -10
  218. package/dist/{status-JHAVZIYW.js → status-27KKLWRF.js} +4 -4
  219. package/dist/{studies-2GPTKJCT.js → studies-ZOEUY6YP.js} +5 -5
  220. package/dist/{study-writes-QCSAPE2G.js → study-writes-DTGMCNFP.js} +4 -4
  221. package/dist/{sync-RQ3NUCGE.js → sync-GAH2FFLN.js} +3 -3
  222. package/dist/{sync-definition-3DRKTX3V.js → sync-definition-RYLTYRI5.js} +10 -10
  223. package/dist/{tags-HOZYO6FL.js → tags-3RKM77RR.js} +4 -4
  224. package/dist/{tags-A2JZRMKV.js → tags-6HGJ2HOE.js} +4 -4
  225. package/dist/{tags-WH7LGHNT.js → tags-KBRYZH54.js} +3 -3
  226. package/dist/{tags-H2PQWUNE.js → tags-NIG27X3C.js} +4 -4
  227. package/dist/{tags-WRUUTQCJ.js → tags-VKFC5Q7R.js} +4 -4
  228. package/dist/{targeting-SOMGPSKV.js → targeting-VBQY3HUN.js} +4 -4
  229. package/dist/{targeting-criteria-APNZ7DN3.js → targeting-criteria-UMN3W4JK.js} +3 -3
  230. package/dist/{targets-LNZBOK2B.js → targets-5KRIO2L2.js} +4 -4
  231. package/dist/{testimonials-Y6RADYJ5.js → testimonials-YLRVZWEN.js} +6 -6
  232. package/dist/{themes-7I6URZUW.js → themes-B4LCQUXB.js} +4 -4
  233. package/dist/{top-companies-HZQTHV2H.js → top-companies-ZAOTUO6K.js} +4 -4
  234. package/dist/{transcript-SRHKH3JL.js → transcript-SAEBSYT5.js} +4 -4
  235. package/dist/{translate-C5R3OMTL.js → translate-5C7CPJ4Y.js} +13 -13
  236. package/dist/{triggers-QISDVK4W.js → triggers-AR52EK5G.js} +4 -4
  237. package/dist/{unlink-2TDYZUCT.js → unlink-PGOI74MM.js} +4 -4
  238. package/dist/{unstage-KRBN7SHW.js → unstage-HG6WPQLB.js} +4 -4
  239. package/dist/{update-QSGTZHD4.js → update-4BHGI4RU.js} +4 -4
  240. package/dist/{update-GE6XVCDF.js → update-FOTXGAZC.js} +4 -4
  241. package/dist/{update-KG4XAUC7.js → update-SI5JLX5A.js} +4 -4
  242. package/dist/{update-PAYTKLZ2.js → update-U4GTWXZW.js} +3 -3
  243. package/dist/{upload-5R5CCOE6.js → upload-K7RDQE5W.js} +4 -4
  244. package/dist/{url-params-L4WF3D2V.js → url-params-ONW6QJIG.js} +4 -4
  245. package/dist/{validate-6AHIXVW4.js → validate-6IOBT7OV.js} +11 -11
  246. package/dist/{videos-3DPLRMFM.js → videos-ZAYNGVO2.js} +6 -6
  247. package/dist/{viewer-check-TEQVRF4O.js → viewer-check-ABB6WD6S.js} +7 -7
  248. package/dist/{web-3G6UP3YV.js → web-ZF6ZYVIU.js} +4 -4
  249. package/dist/{winning-ads-7SI2VN7U.js → winning-ads-IQGAGVDW.js} +3 -3
  250. package/dist/{write-commands-ZQ5JYOUB.js → write-commands-BAF3HLHP.js} +7 -7
  251. package/dist/write-commands-BAF3HLHP.js.map +1 -0
  252. package/dist/{write-commands-UA3FI3EX.js → write-commands-K6M3RTVK.js} +6 -6
  253. package/dist/{x-AHQPDNB4.js → x-25M6BI6M.js} +6 -6
  254. package/package.json +1 -1
  255. package/dist/chunk-EXELLNQS.js.map +0 -1
  256. package/dist/chunk-UI6BKYQD.js.map +0 -1
  257. package/dist/custom-conversions-6KYF26SK.js.map +0 -1
  258. package/dist/linkedin-AWUXPBIV.js.map +0 -1
  259. package/dist/write-commands-ZQ5JYOUB.js.map +0 -1
  260. /package/dist/{account-RSOGF4XW.js.map → account-SMKA6P4Z.js.map} +0 -0
  261. /package/dist/{account-assets-WZOYMT3C.js.map → account-assets-O7IA37RE.js.map} +0 -0
  262. /package/dist/{account-level-XEDTZVNJ.js.map → account-level-EU7BWCO7.js.map} +0 -0
  263. /package/dist/{account-reads-KJHPUVEV.js.map → account-reads-SNOWDHHF.js.map} +0 -0
  264. /package/dist/{account-users-X7JTXBHS.js.map → account-users-T2MBGK7C.js.map} +0 -0
  265. /package/dist/{accounts-UFPI46P5.js.map → accounts-L4TR3XTA.js.map} +0 -0
  266. /package/dist/{accounts-CC5F7TBB.js.map → accounts-VID557NT.js.map} +0 -0
  267. /package/dist/{actions-IG2D6NRC.js.map → actions-ZVBG7WKM.js.map} +0 -0
  268. /package/dist/{activecampaign-S76P2FMN.js.map → activecampaign-3YN2UTXP.js.map} +0 -0
  269. /package/dist/{add-V4UNAGVT.js.map → add-PHKZXFUW.js.map} +0 -0
  270. /package/dist/{add-GZV57GNI.js.map → add-TXQYAWPP.js.map} +0 -0
  271. /package/dist/{ads-IC52FMFA.js.map → ads-C7XJNMCX.js.map} +0 -0
  272. /package/dist/{ads-BOLVA4YI.js.map → ads-JIX7BYE5.js.map} +0 -0
  273. /package/dist/{adsets-7N4UFAVA.js.map → adsets-6H5ZOYGF.js.map} +0 -0
  274. /package/dist/{advertisers-B2YDPIMV.js.map → advertisers-RK3UQWBA.js.map} +0 -0
  275. /package/dist/{analytics-P5UFA6I4.js.map → analytics-3VLFGKOT.js.map} +0 -0
  276. /package/dist/{analytics-YIRKA7OC.js.map → analytics-4TDNEPFQ.js.map} +0 -0
  277. /package/dist/{asset-writes-QPJDD767.js.map → asset-writes-72DEVXGO.js.map} +0 -0
  278. /package/dist/{assign-HE3MH7WE.js.map → assign-YAHBW3CN.js.map} +0 -0
  279. /package/dist/{audience-size-W33DMJ7E.js.map → audience-size-PKHWSABW.js.map} +0 -0
  280. /package/dist/{audience-writes-KO7L5YLO.js.map → audience-writes-KCHLNFSI.js.map} +0 -0
  281. /package/dist/{audiences-H5WVE2ZA.js.map → audiences-QAH42HIM.js.map} +0 -0
  282. /package/dist/{audit-EFDIMRYT.js.map → audit-X2U5KKDY.js.map} +0 -0
  283. /package/dist/{autocomplete-H4BKQNXF.js.map → autocomplete-D2R5XJGE.js.map} +0 -0
  284. /package/dist/{avatars-VYXUQSSE.js.map → avatars-NUYPMFNM.js.map} +0 -0
  285. /package/dist/{bid-pricing-QK4IJUD2.js.map → bid-pricing-6A2K4WXD.js.map} +0 -0
  286. /package/dist/{brand-JB6NXAAL.js.map → brand-SWEL6C5B.js.map} +0 -0
  287. /package/dist/{brief-G5WEJ52V.js.map → brief-36CRH2QS.js.map} +0 -0
  288. /package/dist/{campaign-groups-X2WAZE64.js.map → campaign-groups-PWKQEDN6.js.map} +0 -0
  289. /package/dist/{campaign-writes-LM6W5MIF.js.map → campaign-writes-E5EQFXWF.js.map} +0 -0
  290. /package/dist/{campaigns-7PHPOERA.js.map → campaigns-DVZXUCCH.js.map} +0 -0
  291. /package/dist/{campaigns-PCD72XQX.js.map → campaigns-HN656A2N.js.map} +0 -0
  292. /package/dist/{campaigns-4ERDITZ5.js.map → campaigns-S7OU6SEE.js.map} +0 -0
  293. /package/dist/{canvas-YULE6CFP.js.map → canvas-BWRJUCQ5.js.map} +0 -0
  294. /package/dist/{capabilities-QREOIRIH.js.map → capabilities-JJ67W5O5.js.map} +0 -0
  295. /package/dist/{catalogs-OIQS5NSC.js.map → catalogs-JLCSFZYC.js.map} +0 -0
  296. /package/dist/{chats-FF4PN5JC.js.map → chats-JY6JAOLN.js.map} +0 -0
  297. /package/dist/{check-5UHPABWJ.js.map → check-TDAP7PUO.js.map} +0 -0
  298. /package/dist/{chunk-SBFP3REK.js.map → chunk-372V4EUW.js.map} +0 -0
  299. /package/dist/{chunk-X45ASFZW.js.map → chunk-3SJ7F2NS.js.map} +0 -0
  300. /package/dist/{chunk-ZQXHOHSC.js.map → chunk-4F6RGT4G.js.map} +0 -0
  301. /package/dist/{chunk-K5ZOZ2IY.js.map → chunk-4YL2TKIB.js.map} +0 -0
  302. /package/dist/{chunk-LE7VW2IU.js.map → chunk-5MZFPMNJ.js.map} +0 -0
  303. /package/dist/{chunk-CLUJWAQE.js.map → chunk-6D3KBT3I.js.map} +0 -0
  304. /package/dist/{chunk-SG2BCYWB.js.map → chunk-7FBRAVXA.js.map} +0 -0
  305. /package/dist/{chunk-BHXFGLY5.js.map → chunk-B4WQAGOQ.js.map} +0 -0
  306. /package/dist/{chunk-AHUA76NQ.js.map → chunk-DH7Q3WOV.js.map} +0 -0
  307. /package/dist/{chunk-PISGCYXU.js.map → chunk-E3O5NRD2.js.map} +0 -0
  308. /package/dist/{chunk-RRJK46PC.js.map → chunk-EEFAN5XO.js.map} +0 -0
  309. /package/dist/{chunk-KTCWU4A4.js.map → chunk-EP6YT6W7.js.map} +0 -0
  310. /package/dist/{chunk-277FW25B.js.map → chunk-GKXKKGET.js.map} +0 -0
  311. /package/dist/{chunk-NALPM5QO.js.map → chunk-GOCL4RYW.js.map} +0 -0
  312. /package/dist/{chunk-BRA6IXRS.js.map → chunk-HNJRZS3X.js.map} +0 -0
  313. /package/dist/{chunk-BW36QQQU.js.map → chunk-I4UHCEPI.js.map} +0 -0
  314. /package/dist/{chunk-IYMGQATT.js.map → chunk-IKABCOR5.js.map} +0 -0
  315. /package/dist/{chunk-HD23TJIT.js.map → chunk-J2EPHTRZ.js.map} +0 -0
  316. /package/dist/{chunk-BPRS7VQ3.js.map → chunk-JKYFQOGU.js.map} +0 -0
  317. /package/dist/{chunk-JOXNUKI7.js.map → chunk-KBRJSPIM.js.map} +0 -0
  318. /package/dist/{chunk-5DJ5RNAO.js.map → chunk-KFKJCMVE.js.map} +0 -0
  319. /package/dist/{chunk-T3KW63H7.js.map → chunk-LG3JT3W6.js.map} +0 -0
  320. /package/dist/{chunk-F4RZHA74.js.map → chunk-LN2U45XJ.js.map} +0 -0
  321. /package/dist/{chunk-JYG7N6TV.js.map → chunk-LXHMT54H.js.map} +0 -0
  322. /package/dist/{chunk-KYSTZP7J.js.map → chunk-LZ6O67EY.js.map} +0 -0
  323. /package/dist/{chunk-GDXJVEVG.js.map → chunk-M5SMMJAQ.js.map} +0 -0
  324. /package/dist/{chunk-D2JFOD5O.js.map → chunk-MUQ4CICG.js.map} +0 -0
  325. /package/dist/{chunk-ROVV7INH.js.map → chunk-N4YDINH6.js.map} +0 -0
  326. /package/dist/{chunk-S335LT4B.js.map → chunk-OBJCNGZL.js.map} +0 -0
  327. /package/dist/{chunk-DM6CEVCN.js.map → chunk-OHWCCNAM.js.map} +0 -0
  328. /package/dist/{chunk-BOE6YB2D.js.map → chunk-OWWSWBVA.js.map} +0 -0
  329. /package/dist/{chunk-FM6RRYJB.js.map → chunk-P537ICAA.js.map} +0 -0
  330. /package/dist/{chunk-DTUGU4EI.js.map → chunk-Q4INKG6N.js.map} +0 -0
  331. /package/dist/{chunk-DZGXFV6A.js.map → chunk-QAIIQVD6.js.map} +0 -0
  332. /package/dist/{chunk-ZAM6PVHX.js.map → chunk-QK4ULW42.js.map} +0 -0
  333. /package/dist/{chunk-GNDSD5VQ.js.map → chunk-RGA47NDO.js.map} +0 -0
  334. /package/dist/{chunk-KJZPCLQE.js.map → chunk-SCAGMX2I.js.map} +0 -0
  335. /package/dist/{chunk-7LLKJN2O.js.map → chunk-SFAVWURJ.js.map} +0 -0
  336. /package/dist/{chunk-HWDRW36T.js.map → chunk-SHI2S5D3.js.map} +0 -0
  337. /package/dist/{chunk-ZGWXGK5S.js.map → chunk-TCVMREWC.js.map} +0 -0
  338. /package/dist/{chunk-UQ7SJMGJ.js.map → chunk-TVAIOC77.js.map} +0 -0
  339. /package/dist/{chunk-36MUCC42.js.map → chunk-UGADPPOO.js.map} +0 -0
  340. /package/dist/{chunk-LIRX2Q66.js.map → chunk-WJO2MBHU.js.map} +0 -0
  341. /package/dist/{chunk-RJY5S7RU.js.map → chunk-XDCOMC44.js.map} +0 -0
  342. /package/dist/{chunk-YLQWWLCW.js.map → chunk-XGPU2VDU.js.map} +0 -0
  343. /package/dist/{chunk-D735YLAX.js.map → chunk-YEE7VLSU.js.map} +0 -0
  344. /package/dist/{chunk-WVTKUCAO.js.map → chunk-YOR65DEN.js.map} +0 -0
  345. /package/dist/{claim-JMF4O2SQ.js.map → claim-FUVYK2YT.js.map} +0 -0
  346. /package/dist/{companies-2DHNNS34.js.map → companies-AWVD4MUQ.js.map} +0 -0
  347. /package/dist/{company-UVLP5WE7.js.map → company-FZWPUURL.js.map} +0 -0
  348. /package/dist/{complete-MVR6QHON.js.map → complete-Z6GT32O2.js.map} +0 -0
  349. /package/dist/{connect-WTDJKDTR.js.map → connect-Q2L6WXKZ.js.map} +0 -0
  350. /package/dist/{conversation-O3XOVYC3.js.map → conversation-LOTY465T.js.map} +0 -0
  351. /package/dist/{conversion-upload-command-MHZSSJXN.js.map → conversion-upload-command-KTYAY7IG.js.map} +0 -0
  352. /package/dist/{conversions-HUQJ767W.js.map → conversions-ALPDPMEF.js.map} +0 -0
  353. /package/dist/{copy-writes-JH2AECES.js.map → copy-writes-P4WK6OPM.js.map} +0 -0
  354. /package/dist/{create-YGAMPG2C.js.map → create-4JAQ2QZL.js.map} +0 -0
  355. /package/dist/{create-YE3VLUUP.js.map → create-KDYEOKVP.js.map} +0 -0
  356. /package/dist/{create-EXLN4XHF.js.map → create-PRCAU7ES.js.map} +0 -0
  357. /package/dist/{create-TCT3IMAU.js.map → create-RQ4SJB64.js.map} +0 -0
  358. /package/dist/{creatives-L7F4BF3F.js.map → creatives-JPKA2RHU.js.map} +0 -0
  359. /package/dist/{creatives-IXR4RTSF.js.map → creatives-RSA4ANVM.js.map} +0 -0
  360. /package/dist/{creatives-WUUHFCFY.js.map → creatives-SULK3SMQ.js.map} +0 -0
  361. /package/dist/{credentials-UY6OPN7W.js.map → credentials-IQH7MOHM.js.map} +0 -0
  362. /package/dist/{critique-WOSMZPHW.js.map → critique-R6ZR7MCW.js.map} +0 -0
  363. /package/dist/{critique-ZYLCH5SO.js.map → critique-TMNBP4TM.js.map} +0 -0
  364. /package/dist/{crm-F64BDO4X.js.map → crm-6BU2IKUS.js.map} +0 -0
  365. /package/dist/{crm-K2QSZ2X7.js.map → crm-BALM2FZY.js.map} +0 -0
  366. /package/dist/{customers-TJDVAPTR.js.map → customers-H7CFHRPL.js.map} +0 -0
  367. /package/dist/{delete-4XHBC4UR.js.map → delete-26O52OI5.js.map} +0 -0
  368. /package/dist/{delete-A4R2R7HF.js.map → delete-73QJARMX.js.map} +0 -0
  369. /package/dist/{delete-SUHPUAE5.js.map → delete-AAV5ROOA.js.map} +0 -0
  370. /package/dist/{demographics-MZBHPCT3.js.map → demographics-WAMVL2YQ.js.map} +0 -0
  371. /package/dist/{discard-HUP4DXIJ.js.map → discard-462XXEKS.js.map} +0 -0
  372. /package/dist/{domain-WFT5NJNP.js.map → domain-J4JWIUWL.js.map} +0 -0
  373. /package/dist/{download-DAWPUKXP.js.map → download-X7MUX426.js.map} +0 -0
  374. /package/dist/{draft-6HTSF36L.js.map → draft-3ZOA3F64.js.map} +0 -0
  375. /package/dist/{draft-RTZBROFS.js.map → draft-I4KOOAI3.js.map} +0 -0
  376. /package/dist/{draft-SNKUG6UX.js.map → draft-WYDMLNYA.js.map} +0 -0
  377. /package/dist/{draft-6XS36CMT.js.map → draft-Y4HXZZMX.js.map} +0 -0
  378. /package/dist/{experiments-PJWBABLJ.js.map → experiments-YBLIFMXQ.js.map} +0 -0
  379. /package/dist/{facets-SWSXRJ5G.js.map → facets-5E433R6W.js.map} +0 -0
  380. /package/dist/{feedback-HL3RH5AO.js.map → feedback-Y3UVMQSG.js.map} +0 -0
  381. /package/dist/{feedback-record-YDI2MHAV.js.map → feedback-record-DFBHYHGC.js.map} +0 -0
  382. /package/dist/{fetch-ASLXGN7O.js.map → fetch-ZXRYSH3M.js.map} +0 -0
  383. /package/dist/{fit-I3FZJKOK.js.map → fit-3FSVKIDF.js.map} +0 -0
  384. /package/dist/{flows-BP7IQ4YA.js.map → flows-NDPRAZD4.js.map} +0 -0
  385. /package/dist/{fonts-U23DJIT2.js.map → fonts-SFRDQN57.js.map} +0 -0
  386. /package/dist/{forecast-LXTCKRZE.js.map → forecast-4AG5F7YC.js.map} +0 -0
  387. /package/dist/{forecast-DUAOZEMB.js.map → forecast-N27XNHQQ.js.map} +0 -0
  388. /package/dist/{funnel-S6JTLUK6.js.map → funnel-AREK6URC.js.map} +0 -0
  389. /package/dist/{get-PB62YT3J.js.map → get-CMGW24LE.js.map} +0 -0
  390. /package/dist/{get-4567QZ5E.js.map → get-OUMJXAW5.js.map} +0 -0
  391. /package/dist/{google-X6LRA27Z.js.map → google-Z45VV6UD.js.map} +0 -0
  392. /package/dist/{google-ads-XM4NUOST.js.map → google-ads-QZ5P5TPJ.js.map} +0 -0
  393. /package/dist/{history-26OX4MCJ.js.map → history-XQXHUXRY.js.map} +0 -0
  394. /package/dist/{hubspot-S3ED4AYK.js.map → hubspot-DTJ6Q3XJ.js.map} +0 -0
  395. /package/dist/{ideas-KNIT3KNY.js.map → ideas-RVN5Y5QH.js.map} +0 -0
  396. /package/dist/{images-SCC3QYPG.js.map → images-46W2PYHJ.js.map} +0 -0
  397. /package/dist/{ingest-667IMIGB.js.map → ingest-HP7ZOCU2.js.map} +0 -0
  398. /package/dist/{ingest-PXCOSPP5.js.map → ingest-RS7REWYU.js.map} +0 -0
  399. /package/dist/{inspect-PSWSCTLJ.js.map → inspect-XL464HNM.js.map} +0 -0
  400. /package/dist/{instant-experiences-ABIS6KUQ.js.map → instant-experiences-HT3HB4QZ.js.map} +0 -0
  401. /package/dist/{keyword-metrics-HQSNLJM3.js.map → keyword-metrics-RNCB7UJY.js.map} +0 -0
  402. /package/dist/{keywords-for-site-FX6KCUNV.js.map → keywords-for-site-XDSQTBC2.js.map} +0 -0
  403. /package/dist/{landing-GEWSOHGZ.js.map → landing-ORDNKQFB.js.map} +0 -0
  404. /package/dist/{leads-ONFUUBAZ.js.map → leads-ANQHF46W.js.map} +0 -0
  405. /package/dist/{leads-WKGUT3EA.js.map → leads-SZOGCQFK.js.map} +0 -0
  406. /package/dist/{learn-2QPP7NHC.js.map → learn-FYG5A4TA.js.map} +0 -0
  407. /package/dist/{line-item-writes-2XGDEEV3.js.map → line-item-writes-UZSUA2MR.js.map} +0 -0
  408. /package/dist/{line-items-ZSQS2AWV.js.map → line-items-RRAMAJ7C.js.map} +0 -0
  409. /package/dist/{link-QL7Y2LML.js.map → link-VAN3YIMU.js.map} +0 -0
  410. /package/dist/{linkedin-person-E4JJG4J5.js.map → linkedin-person-BDLPSHV2.js.map} +0 -0
  411. /package/dist/{list-GF3LEAM7.js.map → list-CC4O7JNF.js.map} +0 -0
  412. /package/dist/{list-KLDAPWIB.js.map → list-EC2UTJ3G.js.map} +0 -0
  413. /package/dist/{list-4SAXAQCN.js.map → list-LQJXJEFY.js.map} +0 -0
  414. /package/dist/{log-4LLRZB2M.js.map → log-K76RGBD4.js.map} +0 -0
  415. /package/dist/{make-ZMFGPL7A.js.map → make-RGEDSSDA.js.map} +0 -0
  416. /package/dist/{map-NKRFK545.js.map → map-UTTWDZUG.js.map} +0 -0
  417. /package/dist/{mcp-VARLEIKU.js.map → mcp-GYC6OYOI.js.map} +0 -0
  418. /package/dist/{media-LE2PO4Q4.js.map → media-ZWN7E777.js.map} +0 -0
  419. /package/dist/{media-sources-4Y53RHUW.js.map → media-sources-GNOR56P2.js.map} +0 -0
  420. /package/dist/{members-HSPPVHU2.js.map → members-WB53HJX5.js.map} +0 -0
  421. /package/dist/{meta-VL5RNWCW.js.map → meta-QWV6UVUC.js.map} +0 -0
  422. /package/dist/{normalize-LDIXBNSA.js.map → normalize-F5GUTQMT.js.map} +0 -0
  423. /package/dist/{options-2GEONNJF.js.map → options-UL6T76PM.js.map} +0 -0
  424. /package/dist/{organization-W5JLJ4KP.js.map → organization-RBPHKNNO.js.map} +0 -0
  425. /package/dist/{page-photos-TOM74T5U.js.map → page-photos-HWKQOSCU.js.map} +0 -0
  426. /package/dist/{performance-34LV3QGQ.js.map → performance-7QBDTEHF.js.map} +0 -0
  427. /package/dist/{promoted-tweet-writes-7XGCGHPN.js.map → promoted-tweet-writes-ZSJZ6JSL.js.map} +0 -0
  428. /package/dist/{promoted-tweets-EZZHHGS6.js.map → promoted-tweets-XKKOTH2K.js.map} +0 -0
  429. /package/dist/{publish-OB7UZSKT.js.map → publish-ERYQU5R7.js.map} +0 -0
  430. /package/dist/{reddit-PR2SBLQN.js.map → reddit-SP62XYJD.js.map} +0 -0
  431. /package/dist/{refresh-EJ6XQNAQ.js.map → refresh-GEGJMCWX.js.map} +0 -0
  432. /package/dist/{release-FV6M3X4D.js.map → release-YEMLUFBD.js.map} +0 -0
  433. /package/dist/{remove-6LK6L3KE.js.map → remove-W6PUVZPA.js.map} +0 -0
  434. /package/dist/{reopen-2VHSGKNJ.js.map → reopen-JBTVZ2LW.js.map} +0 -0
  435. /package/dist/{rerun-W6YHMXCK.js.map → rerun-D6LE7FDU.js.map} +0 -0
  436. /package/dist/{research-6NUBHVSB.js.map → research-TFB6P2QZ.js.map} +0 -0
  437. /package/dist/{research-BYDRBMN5.js.map → research-XSIMRMBF.js.map} +0 -0
  438. /package/dist/{reset-YO66ZZRC.js.map → reset-DBNUPYPX.js.map} +0 -0
  439. /package/dist/{reset-MPGBOFJD.js.map → reset-GYRNMHIO.js.map} +0 -0
  440. /package/dist/{resolve-SGXOPZ4W.js.map → resolve-72VSHTVC.js.map} +0 -0
  441. /package/dist/{retry-LXMT4I2X.js.map → retry-OPE6OETO.js.map} +0 -0
  442. /package/dist/{retry-Z2ZUPUQI.js.map → retry-RBX7T4YX.js.map} +0 -0
  443. /package/dist/{revenue-MZ2C65GL.js.map → revenue-QWYYDLBW.js.map} +0 -0
  444. /package/dist/{rule-writes-KLYXCD7Z.js.map → rule-writes-S3RN47OG.js.map} +0 -0
  445. /package/dist/{rules-NALFFFDR.js.map → rules-KTJ2ZZ62.js.map} +0 -0
  446. /package/dist/{rules-CDMHA2KQ.js.map → rules-OPKDULKM.js.map} +0 -0
  447. /package/dist/{rules-add-HEXUMODD.js.map → rules-add-GMHA3474.js.map} +0 -0
  448. /package/dist/{run-VNL34BKW.js.map → run-JG4Q3RMR.js.map} +0 -0
  449. /package/dist/{run-WTD73KD5.js.map → run-KCUGWQQT.js.map} +0 -0
  450. /package/dist/{scaffold-ad-S2DZSRM4.js.map → scaffold-ad-6JWUIBT7.js.map} +0 -0
  451. /package/dist/{scaffold-static-ad-DW6OMF3D.js.map → scaffold-static-ad-55IO4GEF.js.map} +0 -0
  452. /package/dist/{scaffold-video-EXLUICRE.js.map → scaffold-video-CMLUB4JS.js.map} +0 -0
  453. /package/dist/{schedule-7GAFQXF7.js.map → schedule-O2TNC2YG.js.map} +0 -0
  454. /package/dist/{scheduled-agents-7JW3JIOL.js.map → scheduled-agents-PSOCKMRO.js.map} +0 -0
  455. /package/dist/{schema-PHGVKZ4X.js.map → schema-3JYIIVR4.js.map} +0 -0
  456. /package/dist/{search-VCRWREOU.js.map → search-OHPP6LOU.js.map} +0 -0
  457. /package/dist/{select-BPGZYHR3.js.map → select-JMSE3WPN.js.map} +0 -0
  458. /package/dist/{set-prompt-E776UHMH.js.map → set-prompt-74H5AWOU.js.map} +0 -0
  459. /package/dist/{setup-links-2AMTW6O5.js.map → setup-links-ATIWLLRA.js.map} +0 -0
  460. /package/dist/{shopify-SUSDBUUZ.js.map → shopify-C3QLAHPJ.js.map} +0 -0
  461. /package/dist/{site-DH6Z2RX3.js.map → site-YRPQSUZQ.js.map} +0 -0
  462. /package/dist/{sources-ZJ7EZ6TJ.js.map → sources-7KAVPFEJ.js.map} +0 -0
  463. /package/dist/{sources-L3KNVLIB.js.map → sources-MZHPLHZ7.js.map} +0 -0
  464. /package/dist/{stale-RHW4OYXY.js.map → stale-SV27TXXK.js.map} +0 -0
  465. /package/dist/{status-JHAVZIYW.js.map → status-27KKLWRF.js.map} +0 -0
  466. /package/dist/{studies-2GPTKJCT.js.map → studies-ZOEUY6YP.js.map} +0 -0
  467. /package/dist/{study-writes-QCSAPE2G.js.map → study-writes-DTGMCNFP.js.map} +0 -0
  468. /package/dist/{sync-RQ3NUCGE.js.map → sync-GAH2FFLN.js.map} +0 -0
  469. /package/dist/{sync-definition-3DRKTX3V.js.map → sync-definition-RYLTYRI5.js.map} +0 -0
  470. /package/dist/{tags-HOZYO6FL.js.map → tags-3RKM77RR.js.map} +0 -0
  471. /package/dist/{tags-A2JZRMKV.js.map → tags-6HGJ2HOE.js.map} +0 -0
  472. /package/dist/{tags-WH7LGHNT.js.map → tags-KBRYZH54.js.map} +0 -0
  473. /package/dist/{tags-H2PQWUNE.js.map → tags-NIG27X3C.js.map} +0 -0
  474. /package/dist/{tags-WRUUTQCJ.js.map → tags-VKFC5Q7R.js.map} +0 -0
  475. /package/dist/{targeting-SOMGPSKV.js.map → targeting-VBQY3HUN.js.map} +0 -0
  476. /package/dist/{targeting-criteria-APNZ7DN3.js.map → targeting-criteria-UMN3W4JK.js.map} +0 -0
  477. /package/dist/{targets-LNZBOK2B.js.map → targets-5KRIO2L2.js.map} +0 -0
  478. /package/dist/{testimonials-Y6RADYJ5.js.map → testimonials-YLRVZWEN.js.map} +0 -0
  479. /package/dist/{themes-7I6URZUW.js.map → themes-B4LCQUXB.js.map} +0 -0
  480. /package/dist/{top-companies-HZQTHV2H.js.map → top-companies-ZAOTUO6K.js.map} +0 -0
  481. /package/dist/{transcript-SRHKH3JL.js.map → transcript-SAEBSYT5.js.map} +0 -0
  482. /package/dist/{translate-C5R3OMTL.js.map → translate-5C7CPJ4Y.js.map} +0 -0
  483. /package/dist/{triggers-QISDVK4W.js.map → triggers-AR52EK5G.js.map} +0 -0
  484. /package/dist/{unlink-2TDYZUCT.js.map → unlink-PGOI74MM.js.map} +0 -0
  485. /package/dist/{unstage-KRBN7SHW.js.map → unstage-HG6WPQLB.js.map} +0 -0
  486. /package/dist/{update-QSGTZHD4.js.map → update-4BHGI4RU.js.map} +0 -0
  487. /package/dist/{update-GE6XVCDF.js.map → update-FOTXGAZC.js.map} +0 -0
  488. /package/dist/{update-KG4XAUC7.js.map → update-SI5JLX5A.js.map} +0 -0
  489. /package/dist/{update-PAYTKLZ2.js.map → update-U4GTWXZW.js.map} +0 -0
  490. /package/dist/{upload-5R5CCOE6.js.map → upload-K7RDQE5W.js.map} +0 -0
  491. /package/dist/{url-params-L4WF3D2V.js.map → url-params-ONW6QJIG.js.map} +0 -0
  492. /package/dist/{validate-6AHIXVW4.js.map → validate-6IOBT7OV.js.map} +0 -0
  493. /package/dist/{videos-3DPLRMFM.js.map → videos-ZAYNGVO2.js.map} +0 -0
  494. /package/dist/{viewer-check-TEQVRF4O.js.map → viewer-check-ABB6WD6S.js.map} +0 -0
  495. /package/dist/{web-3G6UP3YV.js.map → web-ZF6ZYVIU.js.map} +0 -0
  496. /package/dist/{winning-ads-7SI2VN7U.js.map → winning-ads-IQGAGVDW.js.map} +0 -0
  497. /package/dist/{write-commands-UA3FI3EX.js.map → write-commands-K6M3RTVK.js.map} +0 -0
  498. /package/dist/{x-AHQPDNB4.js.map → x-25M6BI6M.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../api/src/capabilities/surfaces.ts","../../api/src/capabilities/index.ts"],"sourcesContent":["/**\n * The marketing surfaces Baker can reach, and — the part that exists nowhere\n * else — what it cannot do on each of them.\n *\n * Every other introspection surface (`baker schema <cmd>`, the family docs)\n * describes what the agent CAN do. An agent that needs to know a capability is\n * absent has, until now, only been able to find out by trying: promising a GA4\n * property merge and then discovering the connection is read-only, or probing\n * four spellings of a conversion-action field that does not exist. Both cost a\n * retraction in front of a client.\n *\n * This module is deliberately thin on prose and heavy on `evidence`. A\n * hand-maintained \"cannot do\" list rots the same way the Tag Manager built-in\n * trigger whitelist in this repo rotted down to one entry, so each limit carries\n * a machine-checkable claim about the code that makes it true, and\n * `packages/backend/convex/capabilities/coverage.test.ts` fails when a claim\n * stops holding — when the scope is finally requested, when the op ships, when\n * the guard is renamed away. `asserted` is the escape hatch for the handful of\n * facts that live outside this repo entirely, and it has to say why.\n */\n\nexport const CAPABILITY_SURFACES = [\n \"google-ads\",\n \"meta-ads\",\n \"linkedin-ads\",\n \"x-ads\",\n \"chatgpt-ads\",\n \"tag-manager\",\n \"ga4\",\n \"gsc\",\n \"shopify\",\n] as const;\nexport type CapabilitySurfaceId = (typeof CAPABILITY_SURFACES)[number];\n\n/**\n * How a change on this surface reaches the outside world.\n * - `staged-live` — staged during the chat and applied against the real\n * ad account at publish. The per-company write flags\n * that could once make this simulated are retired, so\n * a completed chat spends the client's money.\n * - `staged-immediate` — staged during the chat and applied at publish for\n * real, every time. Tag Manager: completing the chat\n * changes the user's production container.\n * - `read-only` — nothing here writes.\n *\n * The first two split on consequence, not on certainty: both always apply, but\n * one costs ad spend and the other cuts a container version, and the agent has\n * to tell the user which.\n */\nexport type CapabilityWritePath = \"staged-live\" | \"staged-immediate\" | \"read-only\";\n\nexport interface CapabilitySurfaceSpec {\n id: CapabilitySurfaceId;\n /** How the user names it. */\n label: string;\n /** The `oauthProviders.type` this surface connects through; `chatgpt-ads` connects with a pasted key instead. */\n provider: string;\n /** What the user picks when connecting: \"ad account\", \"property\", \"container\". */\n resourceNoun: string;\n writePath: CapabilityWritePath;\n /**\n * OAuth scopes that would grant writes. Access is derived by intersecting these\n * with the scopes the app actually requests — which is why \"GA4 is read-only\"\n * is a fact about the connection, not a sentence someone typed.\n */\n writeScopes: string[];\n /** Where to look next on this surface. */\n commands: string;\n /**\n * How the company connects. Absent is an OAuth grant, whose scopes decide\n * access. `api-key` is a pasted key that reaches one account whole, so the\n * write path alone decides it.\n */\n connectsWith?: \"api-key\";\n}\n\nexport const CAPABILITY_SURFACE_SPECS: Readonly<Record<CapabilitySurfaceId, CapabilitySurfaceSpec>> = {\n \"google-ads\": {\n id: \"google-ads\",\n label: \"Google Ads\",\n provider: \"google-ads\",\n resourceNoun: \"ad account\",\n writePath: \"staged-live\",\n writeScopes: [\"https://www.googleapis.com/auth/adwords\"],\n commands: \"baker ads google\",\n },\n \"meta-ads\": {\n id: \"meta-ads\",\n label: \"Meta Ads\",\n provider: \"meta\",\n resourceNoun: \"ad account\",\n writePath: \"staged-live\",\n writeScopes: [\"ads_management\"],\n commands: \"baker ads meta\",\n },\n \"linkedin-ads\": {\n id: \"linkedin-ads\",\n label: \"LinkedIn Ads\",\n provider: \"linkedin\",\n resourceNoun: \"ad account\",\n writePath: \"staged-live\",\n writeScopes: [\"rw_ads\"],\n commands: \"baker ads linkedin\",\n },\n \"x-ads\": {\n id: \"x-ads\",\n label: \"X Ads\",\n provider: \"x-ads\",\n resourceNoun: \"ad account\",\n writePath: \"staged-live\",\n /**\n * Empty on purpose, and the one surface where that does NOT mean read-only.\n * X Ads authenticates with OAuth 1.0a, which has no scope strings at all —\n * write access is granted to the *app* by X's Ads API access review, not\n * per connection. There is therefore no scope to check, and inventing one\n * would make `scopeBlockers` refuse every X write for a permission that\n * does not exist.\n */\n writeScopes: [],\n commands: \"baker ads x\",\n },\n \"chatgpt-ads\": {\n id: \"chatgpt-ads\",\n label: \"ChatGPT Ads\",\n // Connected with the client's own Ads API key (`chatgptAdsConnections`), not an OAuth grant.\n provider: \"chatgpt-ads\",\n resourceNoun: \"ad account\",\n writePath: \"staged-live\",\n /**\n * Empty because the pasted key has no scopes: it reaches its one account\n * whole. When OpenAI approves Baker's OAuth app this becomes\n * `ads.admin.all.write` and `connectsWith` goes away.\n */\n writeScopes: [],\n commands: \"baker ads chatgpt\",\n connectsWith: \"api-key\",\n },\n \"tag-manager\": {\n id: \"tag-manager\",\n label: \"Tag Manager\",\n provider: \"google-tag-manager\",\n resourceNoun: \"container\",\n writePath: \"staged-immediate\",\n writeScopes: [\n \"https://www.googleapis.com/auth/tagmanager.edit.containers\",\n \"https://www.googleapis.com/auth/tagmanager.edit.containerversions\",\n \"https://www.googleapis.com/auth/tagmanager.publish\",\n ],\n commands: \"baker tag-manager\",\n },\n ga4: {\n id: \"ga4\",\n label: \"Google Analytics 4\",\n provider: \"google-analytics\",\n resourceNoun: \"property\",\n // Like Tag Manager: staged during the chat, applied for real at publish,\n // every time. A connection made before writes existed is\n // read-only until it is reconnected, and `access` does NOT say so — it\n // reports what the Baker app asks Google for, which is now app-wide\n // read-write. The per-company signal is `scopeBlockers`, which compares\n // `writeScopes` against the scopes that connection actually recorded.\n writePath: \"staged-immediate\",\n writeScopes: [\"https://www.googleapis.com/auth/analytics.edit\"],\n commands: \"baker ga4\",\n },\n gsc: {\n id: \"gsc\",\n label: \"Search Console\",\n provider: \"google-search-console\",\n resourceNoun: \"site\",\n writePath: \"read-only\",\n writeScopes: [\"https://www.googleapis.com/auth/webmasters\"],\n commands: \"baker gsc\",\n },\n shopify: {\n id: \"shopify\",\n label: \"Shopify store\",\n provider: \"shopify\",\n resourceNoun: \"store\",\n // Staged during the chat and applied to the real store when it completes,\n // every time; each applied change can be put back by another publish\n // (`baker shopify undo`). The write permissions are optional scopes the\n // store grants when a change first needs one, so `scopeBlockers` is the\n // per-company signal.\n writePath: \"staged-immediate\",\n writeScopes: [\n \"write_products\",\n \"write_publications\",\n \"write_discounts\",\n \"write_online_store_navigation\",\n \"write_marketing_events\",\n ],\n commands: \"baker shopify\",\n },\n};\n\n/**\n * Why a capability is missing. The distinction is what decides what the agent\n * tells the user, so it is part of the contract rather than left to prose:\n * - `not_built` — the platform allows it, Baker has not built it. It may\n * be possible by hand in the platform's own interface.\n * - `provider_forbids` — the platform rejects it however it is asked. Nobody can\n * do it, so do not hand the user a manual route.\n * - `no_permission` — the connection was never granted the access. Reading\n * works, changing does not; it is manual work today.\n */\nexport type CapabilityLimitCause = \"not_built\" | \"provider_forbids\" | \"no_permission\";\n\n/**\n * The checkable claim behind a limit. `coverage.test.ts` re-derives each one.\n */\nexport type CapabilityLimitEvidence =\n /** The app never requests this OAuth scope, so nothing can write here. */\n | { kind: \"scope\"; scope: string }\n /** No staged op with these kinds exists, so there is nothing to stage. */\n | { kind: \"noOpKind\"; kinds: string[] }\n /** A field on a staged op does not accept this value. */\n | { kind: \"noChoice\"; opKind: string; field: string; value: string }\n /** A stage-time guard refuses it before anything is spent. */\n | { kind: \"guard\"; module: string; symbol: string }\n /** Nothing in this repository encodes it; the note says why. */\n | { kind: \"asserted\"; note: string };\n\nexport interface CapabilityLimit {\n surface: CapabilitySurfaceId;\n /** What an agent would set out to do, in the words it would use. */\n capability: string;\n cause: CapabilityLimitCause;\n /** Why it cannot happen and what to do instead. Agent-facing, plain English. */\n detail: string;\n evidence: CapabilityLimitEvidence;\n}\n\n/**\n * Ordered by how often getting it wrong has cost something. Keep entries to\n * things an agent would plausibly promise a client before checking.\n */\nexport const CAPABILITY_LIMITS: readonly CapabilityLimit[] = [\n {\n surface: \"shopify\",\n capability: \"Edit the store's theme files — templates, sections, the theme's code or its stylesheet\",\n cause: \"provider_forbids\",\n detail:\n \"Shopify only lets an app write theme files with an exemption it grants case by case, and editing a merchant's theme breaks the App Store's rules for an app like Baker. Say exactly what to change and where (Online Store → Themes → Customize), and carry on with the rest of the job.\",\n evidence: {\n kind: \"asserted\",\n note: \"Shopify's rule, not this repository's: `write_themes` needs Shopify's exemption and App Store requirement 5.1.1 forbids theme edits by an app of this kind. The app's TOML declares no `write_themes` (scopes.test.ts holds the backend's list equal to it).\",\n },\n },\n {\n surface: \"shopify\",\n capability: \"Create or delete products, change stock levels, or change whether a product is published\",\n cause: \"not_built\",\n detail:\n \"Baker changes products' copy, SEO, tags, type, options' SKU, barcode, weight and price, custom fields, collections, discount codes, redirects and its own campaigns in Shopify Marketing. Making or removing a product, its stock and its status are the merchant's, in Shopify admin; say what to do there and carry on.\",\n evidence: {\n kind: \"noOpKind\",\n kinds: [\"shopify.product.create\", \"shopify.product.delete\", \"shopify.inventory.set\", \"shopify.product.publish\"],\n },\n },\n {\n surface: \"shopify\",\n capability: \"Make a discount code for named customers or a customer segment\",\n cause: \"not_built\",\n detail:\n \"Every discount code Baker creates is for everyone who has the code. A code for named customers or a segment is made in Shopify admin → Discounts.\",\n evidence: {\n kind: \"noOpKind\",\n kinds: [\"shopify.discountCode.createForCustomers\", \"shopify.discountAutomatic.create\"],\n },\n },\n {\n surface: \"shopify\",\n capability: \"Make a collection whose products join by rules (a tag, a price, a type), or delete one\",\n cause: \"not_built\",\n detail:\n \"Baker makes collections of hand-picked products and adds or removes products by hand. A collection whose products join by its rules is set up in Shopify admin; Baker refuses to delete one, because undo could not rebuild its rules.\",\n evidence: { kind: \"guard\", module: \"shopify/writes/collectionRestore.ts\", symbol: \"restorability\" },\n },\n {\n surface: \"ga4\",\n capability:\n \"Create, merge or delete a property; add or edit a data stream; change the property's time zone or currency\",\n cause: \"not_built\",\n detail:\n \"Baker configures what a property MEASURES — key events, custom dimensions and metrics, custom events, audiences, the data retention window — plus the property's name, industry category and Google Ads link. It does not create or merge properties or touch data streams. Time zone and currency are deliberately excluded even though the API allows them: both change how every future day is bucketed without reprocessing history, so a correction puts a step in the middle of every time series the user compares against. Tell the user exactly what to change in the Google Analytics admin screens and carry on with the rest of the job.\",\n evidence: {\n kind: \"noOpKind\",\n kinds: [\"ga4.dataStream.create\", \"ga4.dataStream.update\", \"ga4.property.create\"],\n },\n },\n {\n surface: \"ga4\",\n capability: \"Change who is already in an audience, or build one from a sequence of steps\",\n cause: \"provider_forbids\",\n detail:\n \"An audience can be CREATED and ARCHIVED here, and its name and description changed. Everything that defines who is in it — the conditions, the membership window, the exclusion mode — is marked Immutable by Google and cannot be edited on an audience that exists, however it is asked. Fixing a definition therefore means archiving the audience and creating a replacement, which does NOT carry the users the first one gathered. Say that before staging the archive. Sequence-based audiences (`sequenceFilter`) are not offered: they are the easiest shape in this API to get subtly wrong and the mistake is permanent, so build them by hand in Google Analytics if one is genuinely needed.\",\n evidence: {\n kind: \"asserted\",\n note: \"The immutability is Google's, declared in the Admin API v1alpha `Audience` resource (`filter_clauses`, `membership_duration_days` and `exclusion_duration_mode` are all marked Immutable) — no code in this repository can be read to confirm a rule the provider enforces. What this repo does hold is the consequence: `GA4_IMMUTABLE_FIELDS.audience` in `packages/api/src/ga4/ops.ts` drives the refusal, and `ga4.test.ts` pins that an update carrying one of those fields is rejected with the archive-and-recreate wording rather than a zod key error.\",\n },\n },\n {\n surface: \"ga4\",\n capability: \"Try a Google Analytics configuration change without it taking effect\",\n cause: \"not_built\",\n detail:\n \"Google Analytics changes always apply to the real property: staged changes apply when the chat completes, and an applied change is in effect immediately — there is no version to publish afterwards and no undo. The user reviewing the Analytics tab and completing the chat is the review, so agree the changes with them before you complete it.\",\n evidence: {\n kind: \"asserted\",\n note: \"An absence: the GA4 executor has no simulated branch and GA4 drafts have no `mode` column, and no test can assert the absence of a mode that was never modelled. The nearest positive check is that the three ad surfaces do carry one — a `mode` column on their drafts and an `executeSimulated` branch in each executor — which the `staged-live` vs `staged-immediate` write paths already encode. Their per-company write gates are retired, so every ad draft is stamped `live`; the branch survives only for drafts published while the gates existed.\",\n },\n },\n {\n surface: \"gsc\",\n capability:\n \"Change anything in Search Console — add or verify a property, submit or delete a sitemap, set a preferred domain\",\n cause: \"no_permission\",\n detail:\n \"Baker's Search Console connection is read-only (webmasters.readonly). `baker gsc sitemaps` lists what is already submitted; it cannot submit one. Hand submission to the user in Search Console and carry on.\",\n evidence: { kind: \"scope\", scope: \"https://www.googleapis.com/auth/webmasters\" },\n },\n {\n surface: \"x-ads\",\n capability: \"Change anything in X Ads — create or edit campaigns, line items, or promoted posts\",\n cause: \"not_built\",\n detail:\n \"X Ads is a read-only surface in Baker: there are no staged write ops for it, so nothing can be staged and nothing publishes. Report on it freely; route any change to the user in X Ads Manager.\",\n evidence: { kind: \"noOpKind\", kinds: [\"x.campaign.create\", \"x.campaign.update\", \"x.lineItem.create\"] },\n },\n {\n surface: \"google-ads\",\n capability:\n \"Change a conversion action that Google itself created — Smart campaign calls and directions, the in-ad lead form's submit, YouTube subscriptions and follow-on views, Floodlight and Search Ads 360 imports, store visits, codeless webpage actions\",\n cause: \"provider_forbids\",\n detail:\n \"Google rejects every write against one of its own conversion actions, a rename as flatly as a removal. Baker refuses these at stage time so no publish is spent on them. There is no manual route either — the Google Ads interface will not change them — so do not hand the user one. Leave the action alone and say so.\",\n evidence: {\n module: \"ads/google/writes/conversionSafety.ts\",\n kind: \"guard\",\n symbol: \"googleOwnedConversionRefusal\",\n },\n },\n {\n surface: \"google-ads\",\n capability:\n \"Switch a demographic dimension — age, gender, parental status, household income — between Targeting and Observation\",\n cause: \"not_built\",\n detail:\n \"`baker ads google audiences targeting` sets the AUDIENCE dimension only. The demographic rows are read before every write and sent back exactly as they were, so nothing is lost — but changing one is manual work in the Google Ads interface. Say which one to change and where, and carry on with the rest of the job.\",\n evidence: { kind: \"noChoice\", opKind: \"google.targetingSetting.set\", field: \"audience\", value: \"AGE_RANGE\" },\n },\n {\n surface: \"google-ads\",\n capability: \"Hide a conversion action (status HIDDEN)\",\n cause: \"provider_forbids\",\n detail:\n 'Google denies HIDDEN on every conversion-action write (\"the field\\'s value is on a deny-list for this field\"), so it is not part of the write contract — even though actions hidden long ago still read back as HIDDEN. To take an action out of automated bidding while it keeps measuring, demote it: `baker ads google conversions update <id> --no-primary`. To stop it counting, set status REMOVED.',\n evidence: { kind: \"noChoice\", opKind: \"google.conversionAction.update\", field: \"status\", value: \"HIDDEN\" },\n },\n {\n surface: \"google-ads\",\n capability:\n \"Build a combined, converters or lookalike audience from an audience or conversion action created in the same chat\",\n cause: \"provider_forbids\",\n detail:\n \"Google builds these lists from audiences and conversion actions that already exist in the account; one created in the same publish is not found. Stage and publish the parts first, then build the combined, converters or lookalike audience on their ids in a later chat — and tell the user it takes two publishes.\",\n evidence: {\n kind: \"asserted\",\n note: \"Enforced by `existingRefSchema` inside `audienceCreateSchema` (packages/api ops.ts), which no capability check reads; the provider half is live on v25: a logical operand on a list created in the same request was RESOURCE_NOT_FOUND, a basic list over a conversion action created with it INVALID_CONVERSION_TYPE, and lookalike seeds are int64 ids.\",\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Create a Google Analytics (GA4) conversion action in Google Ads\",\n cause: \"provider_forbids\",\n detail:\n \"Google's API cannot create a Google Analytics conversion — they are imported, not created. Make sure the event is a key event in Google Analytics and the property is linked to Google Ads, then ask the user to import it in Google Ads (Goals → Conversions → New conversion action → Import → Google Analytics 4). To measure it with a Google Ads tag instead, stage a WEBPAGE conversion.\",\n evidence: {\n kind: \"noChoice\",\n opKind: \"google.conversionAction.create\",\n field: \"type\",\n value: \"GOOGLE_ANALYTICS_4_CUSTOM\",\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Target the area around the business's own locations (a location group)\",\n cause: \"not_built\",\n detail:\n 'A location group targets a radius around the account\\'s location assets, and Baker cannot stage location assets yet — Google refuses a location group on an account without them. Target a radius around an address or a point instead (`criterionType: \"proximity\"` on `campaign-criteria add`), or tell the user to add the business locations in Google Ads; carry on with the rest of the job.',\n evidence: {\n kind: \"asserted\",\n note: 'The refusal is in the shared criterion contract, not a Convex guard: `criterionSpecSchema` in `packages/api/src/ads-google/criteria.ts` answers `criterionType: \"locationGroup\"` with LOCATION_GROUP_MESSAGE, pinned by `criteria.test.ts`. Live on v25 (3865083115, no location assets) every location-group variant was refused — `enable_customer_level_location_asset_set` with \"The error code is not in this version.\", a geo-constant group with `location_group.feed` REQUIRED.',\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Create a Video or Local campaign\",\n cause: \"provider_forbids\",\n detail:\n \"Google's API does not create Video campaigns at all (refused for every sub-type and bidding), and Local campaigns were retired into Performance Max. For video on YouTube, stage a Demand Gen campaign with a Demand Gen video ad; for store visits, Performance Max. A Video views or reach campaign is the user's to create in Google Ads — say so, with the settings you recommend. Existing Video campaigns can still be read, paused and edited.\",\n evidence: { kind: \"noChoice\", opKind: \"google.campaign.create\", field: \"channelType\", value: \"VIDEO\" },\n },\n {\n surface: \"google-ads\",\n capability: \"Create a Smart campaign\",\n cause: \"not_built\",\n detail:\n \"A Smart campaign's business details (phone, website, business profile) are a setting Google refuses to check before publishing (RESOURCE_DOES_NOT_SUPPORT_VALIDATE_ONLY), so Baker cannot stage one it could validate. Stage a Search or Performance Max campaign instead, or hand the Smart campaign to the user in Google Ads and carry on with the rest of the job. Shopping, App, Travel and Hotel campaigns ARE stageable — each with the account link it needs. Existing Smart campaigns can still be read, paused and edited.\",\n evidence: { kind: \"noChoice\", opKind: \"google.campaign.create\", field: \"channelType\", value: \"SMART\" },\n },\n {\n surface: \"google-ads\",\n capability:\n \"Create a campaign of a retired sub-type — Search or Display Express, Gmail, Smart Display, Smart Shopping, Video action, app promotion on Search\",\n cause: \"provider_forbids\",\n detail:\n \"Google refuses every one of these on a create. Leave the sub-type out for a standard campaign of the same type; Gmail and Video action now run through Demand Gen, Smart Shopping through Performance Max.\",\n evidence: {\n kind: \"noChoice\",\n opKind: \"google.campaign.create\",\n field: \"channelSubType\",\n value: \"DISPLAY_GMAIL_AD\",\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Set a campaign budget to accelerated delivery\",\n cause: \"provider_forbids\",\n detail:\n \"Google still stores a budget set to accelerated delivery, but refuses to attach it to any campaign, so it can never spend. Every budget is staged with standard delivery (Google paces it across the day). If the user wants to spend faster, raise the daily amount instead — and say that is what you did.\",\n evidence: { kind: \"noChoice\", opKind: \"google.budget.create\", field: \"deliveryMethod\", value: \"ACCELERATED\" },\n },\n {\n surface: \"google-ads\",\n capability: \"Create or edit a call ad (call-only ad)\",\n cause: \"provider_forbids\",\n detail:\n \"Google removed the call ad from its API, so nobody can create one or change an existing one through it. To take phone calls from search, stage a responsive search ad and tell the user to add the phone number as a call asset in Google Ads (Baker cannot stage call assets yet). Carry on with the rest of the job.\",\n evidence: {\n kind: \"asserted\",\n note: 'The format sits inside the ad content union, not on a top-level payload field, so no `noChoice` check can see it. `adContentSchema` answers `format: \"call\"` with CALL_AD_RETIRED_MESSAGE (packages/api ops.test.ts pins it); the provider half is v25\\'s `Ad` message having no `call_ad` — a validateOnly request on 3865083115 was refused `Unknown name \"callAd\"` (2026-10-08).',\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Remove a device setting from a campaign once it has one\",\n cause: \"provider_forbids\",\n detail:\n \"A device criterion can be added with `campaign-criteria add` and re-bid afterwards, but Google rejects every removal of one — including a criterion the same account created itself days earlier (observed). So the undo for a bid boost is NOT a removal: it is `baker ads google campaign-criteria update <criterion-resource-name> --bid-modifier 1`, where 0 stops ads serving on that device and 0.1–10.0 bid down or up. Read `campaign_criterion.resource_name` and `campaign_criterion.bid_modifier` (type = DEVICE) first to see which devices the campaign already has. Baker refuses a staged device removal before publish; don't abort the job over it.\",\n evidence: {\n kind: \"guard\",\n module: \"ads/google/writes/stage.ts\",\n symbol: \"deviceCriterionRemovalRefusal\",\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Change which conversion action counts calls from ads (account call reporting)\",\n cause: \"provider_forbids\",\n detail:\n \"Google's API refuses any write of the account's call conversion action, even the one it already uses. Call reporting itself and whether calls count as conversions ARE stageable (`baker ads google account update --call-reporting --call-conversions`). Hand the action choice to the user: Google Ads → Admin → Account settings → Call reporting. Carry on with the rest of the job.\",\n evidence: {\n kind: \"asserted\",\n note: '`customerUpdateSchema` is strict and carries no callConversionAction, so an op naming it is refused at stage; the provider half: a validateOnly customer update of `call_reporting_setting.call_conversion_action` on 3865083115 — with the live value and with another action — was refused \"The error code is not in this version.\" (v25, 2026-10-08).',\n },\n },\n {\n surface: \"google-ads\",\n capability: \"Put a label on an asset (sitelink, image, callout …)\",\n cause: \"provider_forbids\",\n detail:\n \"Google Ads has no labels on assets — its API labels campaigns, ad groups, ads and keywords only, and staging refuses an asset. Label the campaign or ad group that uses the asset, or give the asset a findable name, and carry on with the rest of the job.\",\n evidence: { kind: \"noChoice\", opKind: \"google.label.attach\", field: \"level\", value: \"asset\" },\n },\n {\n surface: \"google-ads\",\n capability: \"Put a label on the advertiser account itself\",\n cause: \"provider_forbids\",\n detail:\n \"Google applies a label to an account only from the manager account above it (CANNOT_ATTACH_NON_MANAGER_LABEL_TO_CUSTOMER, live v25), and Baker works inside the advertiser account. Label the campaigns instead, or tell the user to label the account from their manager account in Google Ads; carry on with the rest of the job.\",\n evidence: { kind: \"noChoice\", opKind: \"google.label.attach\", field: \"level\", value: \"customer\" },\n },\n {\n surface: \"google-ads\",\n capability: \"Change billing, payment methods, or account-level spend limits\",\n cause: \"not_built\",\n detail:\n \"Nothing that touches money setup is stageable — no op exists for it. Report on spend, then hand billing changes to the user in Google Ads. Account settings that are not money (auto-tagging, the account tracking template and final URL suffix, call reporting, video inventory) ARE stageable: `baker ads google account update`.\",\n evidence: {\n kind: \"noOpKind\",\n kinds: [\"google.billingSetup.create\", \"google.accountBudget.create\"],\n },\n },\n {\n surface: \"meta-ads\",\n capability:\n \"Push delivery to an ad — dedicate a share of the campaign or ad-set budget to one ad for a set number of days\",\n cause: \"not_built\",\n detail:\n 'Meta ships push delivery as an Ads Manager control only: the Marketing API\\'s ad object takes a schedule, a display sequence and tracking, and nothing that dedicates budget to one ad. So nothing can stage it and no publish can apply it — do not offer to switch it on, and never report a starved ad as pushed. Hand the user the click path and the settings you are recommending: Ad level > Ad setup > \"show more settings\" (next to ad scheduling) > \"Help ensure delivery by dedicating a portion of your budget to your ad\", then the percentage of budget and the number of days, for the one ad you name. It needs at least 2 ads in the ad set, and only one ad per ad set should be pushed. Then carry on with the rest of the job.',\n evidence: { kind: \"noOpKind\", kinds: [\"ad.pushDelivery\"] },\n },\n {\n surface: \"linkedin-ads\",\n capability: \"Move a live ad to another ad set, or change a live ad set's type, locale, or associated organization\",\n cause: \"provider_forbids\",\n detail:\n \"LinkedIn treats these as create-only: they can be corrected while the change is still staged, but not on something already live. Baker refuses the amend rather than staging a write LinkedIn will reject. Create the replacement instead, and say why.\",\n evidence: { kind: \"guard\", module: \"ads/linkedin/writes/amend.ts\", symbol: \"rejectedLiveKeys\" },\n },\n {\n surface: \"linkedin-ads\",\n capability: \"Use a video from the Baker media library, or a document, as LinkedIn ad creative\",\n cause: \"not_built\",\n detail:\n \"Only images upload to LinkedIn today; video and document creative are not built. Stage an image creative, or tell the user to upload the video in Campaign Manager, and carry on with the rest of the job.\",\n evidence: {\n kind: \"asserted\",\n note: \"Enforced by a throw inside the LinkedIn media uploader (ads/linkedin/writes/media.ts), not by the shared op contract — the op kind exists and accepts the reference, so no schema or op-kind check can see it.\",\n },\n },\n {\n surface: \"tag-manager\",\n capability: \"Create, delete, or move a Tag Manager account, container, or workspace\",\n cause: \"not_built\",\n detail:\n \"Baker works inside the containers the company connected — it changes tags, triggers, variables, folders, built-in variables and container settings, and nothing above that level. Ask the user to create the container in Tag Manager and connect it, then carry on.\",\n evidence: {\n kind: \"noOpKind\",\n kinds: [\n \"tagManager.container.create\",\n \"tagManager.container.delete\",\n \"tagManager.account.create\",\n \"tagManager.workspace.create\",\n ],\n },\n },\n {\n surface: \"tag-manager\",\n capability: \"Try a container change without it going live\",\n cause: \"not_built\",\n detail:\n \"Tag Manager changes always apply to the real container: staged changes apply to its working workspace when the chat completes, and a clean run cuts and publishes a container version, which takes them live on the site. Completing the chat is the review, so get the user's agreement before you complete it.\",\n evidence: {\n kind: \"asserted\",\n note: \"An absence: the Tag Manager executor has no simulated branch and its drafts have no `mode` column, and no test can assert the absence of a mode that was never modelled. The nearest positive check is that the three ad surfaces do carry one — a `mode` column on their drafts and an `executeSimulated` branch in each executor — which the `staged-live` vs `staged-immediate` write paths already encode. Their per-company write gates are retired, so every ad draft is stamped `live`; the branch survives only for drafts published while the gates existed.\",\n },\n },\n];\n","/**\n * Contract for `/api/capabilities` — what Baker can and cannot do for this\n * company, answered before any work starts (`baker capabilities`).\n *\n * Convex `Id<T>` values are plain `z.string()`; this package must not depend on\n * `convex`. Nothing here carries a token, key, or anything a credential could be\n * reconstructed from — the response names accounts and permissions, never\n * secrets.\n */\nimport { z } from \"zod\";\nimport { CAPABILITY_SURFACES } from \"./surfaces\";\n\nexport { describeOpUnion, type OpDescription } from \"./op-fields\";\nexport {\n CAPABILITY_LIMITS,\n CAPABILITY_SURFACE_SPECS,\n CAPABILITY_SURFACES,\n type CapabilityLimit,\n type CapabilityLimitCause,\n type CapabilityLimitEvidence,\n type CapabilitySurfaceId,\n type CapabilitySurfaceSpec,\n type CapabilityWritePath,\n} from \"./surfaces\";\n\nexport const capabilitySurfaceSchema = z.enum(CAPABILITY_SURFACES);\n\nexport const capabilitiesRequestSchema = z.object({\n /** Narrow to one surface. Omit for every surface the company could use. */\n surface: capabilitySurfaceSchema.optional(),\n /** Include the field-level contract of every op, not just the entity list. */\n full: z.boolean().optional(),\n /**\n * Who the chat acts as (`BAKER_ACTING_USER_ID`). Adds that person's own\n * connected tools — they load for this turn, and for nobody else's.\n */\n actingUserId: z.string().optional(),\n});\nexport type CapabilitiesRequest = z.infer<typeof capabilitiesRequestSchema>;\n\n/** A connected account, property, site or container. Identity only. */\nexport const capabilityResourceSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n});\nexport type CapabilityResource = z.infer<typeof capabilityResourceSchema>;\n\nexport const capabilityOpSchema = z.object({\n kind: z.string(),\n /** True when the op changes something that already exists and must be named. */\n needsTarget: z.boolean(),\n required: z.array(z.string()),\n optional: z.array(z.string()),\n /** Field → the values it accepts, for fields that take a fixed set. */\n choices: z.record(z.string(), z.array(z.string())),\n /** False when the platform accepts fields beyond the listed ones. */\n fieldsAreComplete: z.boolean(),\n});\nexport type CapabilityOp = z.infer<typeof capabilityOpSchema>;\n\nexport const capabilityLimitViewSchema = z.object({\n capability: z.string(),\n cause: z.enum([\"not_built\", \"provider_forbids\", \"no_permission\"]),\n detail: z.string(),\n});\nexport type CapabilityLimitView = z.infer<typeof capabilityLimitViewSchema>;\n\n/**\n * `live` — writes reach the real platform at publish.\n * `applies-at-publish` — publishing changes the real thing, with no version step after.\n * `none` — this surface does not write.\n *\n * There is no `simulated`: the per-company gates that produced it on Google,\n * Meta and LinkedIn are all retired, so no surface can report a write that\n * touches nothing. Leaving the value in the contract would keep alive the one\n * sentence this report exists to prevent — \"your ads are only a preview\".\n */\nexport const capabilityWriteModeSchema = z.enum([\"live\", \"applies-at-publish\", \"none\"]);\nexport type CapabilityWriteMode = z.infer<typeof capabilityWriteModeSchema>;\n\nexport const capabilitySurfaceReportSchema = z.object({\n surface: capabilitySurfaceSchema,\n label: z.string(),\n connected: z.boolean(),\n /** What the user picked when connecting. Empty when nothing is selected yet. */\n resources: z.array(capabilityResourceSchema),\n access: z.enum([\"read-write\", \"read-only\", \"not-connected\"]),\n writeMode: capabilityWriteModeSchema,\n /** One sentence about the write mode, safe to repeat to the user. */\n writeModeNote: z.string(),\n /** Entities this surface can change at all, e.g. \"campaign\", \"keyword\". */\n writableEntities: z.array(z.string()),\n /** Things wrong with the connection itself: needs reconnecting, missing a permission. */\n blockers: z.array(z.string()),\n /** What cannot be done here, and why. */\n limits: z.array(capabilityLimitViewSchema),\n /** The per-op contract. Present when one surface was asked for, or with `full`. */\n ops: z.array(capabilityOpSchema).optional(),\n /** Where to look next: `baker ads google`, `baker ga4`, … */\n commands: z.string(),\n});\nexport type CapabilitySurfaceReport = z.infer<typeof capabilitySurfaceReportSchema>;\n\n/**\n * A source that is available to this company but is not one of the seven\n * marketing surfaces above.\n *\n * These exist because \"what do I have?\" had no single answer, and the gap was\n * not academic: Microsoft Clarity arrives over MCP and HubSpot is read through\n * the CLI, so neither appears in `surfaces` — and an agent that checked only\n * this command concluded it had no Clarity while Clarity was sitting in its own\n * tool list. That is the source most likely to change what it decides.\n *\n * Deliberately NOT modelled as a surface. A surface carries `ops`,\n * `writableEntities` and a write mode, all of which describe a staged-write\n * contract Baker owns. An MCP toolkit has none of that — Baker did not define\n * its tools and cannot enumerate their fields — so filing one under `surfaces`\n * would mean either lying about the contract or leaving four fields empty on\n * every row and inviting the reader to wonder which.\n */\nexport const capabilityToolSchema = z.object({\n /** `microsoft_clarity`, `hubspot`, or the name the user gave a custom server. */\n key: z.string(),\n label: z.string(),\n /** `mcp` — tools in the agent's own list. `platform` — signed in, read through the CLI. */\n kind: z.enum([\"mcp\", \"platform\"]),\n /** How to actually reach it, in one phrase the agent can act on. */\n reach: z.string(),\n /**\n * Whether it can be used right now.\n *\n * A connection that exists and is expired is worse than one that is absent:\n * it reads as available and fails at the moment it is needed, which on an\n * unattended run is a report with a hole in it and no explanation.\n */\n ready: z.boolean(),\n /** Why it is not ready, or what it is for. Absent when neither needs saying. */\n note: z.string().optional(),\n});\nexport type CapabilityTool = z.infer<typeof capabilityToolSchema>;\n\nexport const capabilitiesResponseSchema = z.object({\n ok: z.literal(true),\n data: z.object({\n surfaces: z.array(capabilitySurfaceReportSchema),\n /**\n * Everything else this company can reach. Shared connections only —\n * a teammate's private per-user connection belongs to whoever started the\n * session and is visible in the agent's own tool list, not here.\n */\n tools: z.array(capabilityToolSchema),\n }),\n});\nexport type CapabilitiesResponse = z.infer<typeof capabilitiesResponseSchema>;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/ads/meta/custom-conversions.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport { csvOrJson, handleMetaError, resolveAccountIdArg } from \"./shared.ts\";\n\n/** A Custom Conversion as the backend returns it, rule already read back as a phrase. */\nexport interface MetaCustomConversion {\n id: string;\n name?: string;\n description?: string;\n custom_event_type?: string;\n event_source_type?: string;\n pixel?: { id?: string; name?: string };\n rule?: string;\n rule_summary?: string;\n default_conversion_value?: number;\n retention_days?: number;\n is_archived?: boolean;\n is_unavailable?: boolean;\n creation_time?: string;\n first_fired_time?: string;\n last_fired_time?: string;\n}\n\n/** What the caller needs to pick one. The raw rule and the timestamps sit behind --full. */\ninterface CompactCustomConversion {\n id: string;\n name?: string;\n custom_event_type?: string;\n counts?: string;\n pixel_id?: string;\n last_fired_time?: string;\n archived?: true;\n unavailable?: true;\n}\n\nexport function compactCustomConversion(row: MetaCustomConversion): CompactCustomConversion {\n return {\n id: row.id,\n name: row.name,\n custom_event_type: row.custom_event_type,\n counts: row.rule_summary,\n pixel_id: row.pixel?.id,\n last_fired_time: row.last_fired_time,\n ...(row.is_archived ? { archived: true as const } : {}),\n ...(row.is_unavailable ? { unavailable: true as const } : {}),\n };\n}\n\n/**\n * What to say about a listing, once.\n *\n * A conversion that has never fired is the one thing that reads as \"broken\" and\n * usually is not — Meta creates it counting nothing until the rule matches a\n * real event — while pointing an ad set at one is a real decision with a real\n * cost, because Meta cannot optimize toward an event it has never seen. Saying\n * so here is cheaper than the chat where it gets discovered after a week of\n * delivery.\n */\nexport function customConversionHints(rows: MetaCustomConversion[]): string[] {\n if (rows.length === 0) {\n return [\n \"This account has no custom conversions. Optimize toward a standard pixel event instead (`--pixel-id` + `--custom-event-type`), or ask the user to create one in Events Manager.\",\n ];\n }\n const hints: string[] = [\n \"To optimize an ad set toward one: `baker ads meta adsets create … --optimization-goal OFFSITE_CONVERSIONS --custom-conversion-id <id>`. Baker fills the pixel and the event category from the conversion — do not also pass --pixel-id or --custom-event-type.\",\n ];\n const neverFired = rows.filter((row) => !row.is_archived && !row.last_fired_time);\n if (neverFired.length > 0) {\n hints.push(\n `${neverFired.length === 1 ? \"This conversion has\" : `${neverFired.length} of these have`} never fired (${neverFired\n .map((row) => row.name ?? row.id)\n .join(\n \", \",\n )}). Meta cannot optimize toward an event it has never seen, so an ad set pointed at one delivers without learning — check the rule matches a page the site actually serves before spending on it.`,\n );\n }\n return hints;\n}\n\nregisterSchema({\n command: \"ads.meta.custom-conversions\",\n description:\n \"List the Custom Conversions defined on a Meta ad account — the measurement objects a marketer sets up in Events Manager (a pixel event narrowed by a rule, e.g. 'PageView on /thank-you'). Start here whenever the user talks about their own conversions rather than a standard event: an ad set optimizes toward one with `adsets create --custom-conversion-id <id>`.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Meta ad account ID (act_123)\", required: false },\n full: { type: \"boolean\", description: \"Include the raw rule JSON, retention and creation times\", required: false },\n limit: { type: \"string\", description: \"Max rows\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Bypass the cache\", required: false },\n output: { type: \"string\", description: \"json|csv\", required: false, default: \"json\" },\n },\n});\n\nconst listArgs = {\n \"account-id\": { type: \"string\", description: \"Meta ad account ID\" },\n full: { type: \"boolean\", description: \"Include the raw rule JSON, retention and creation times\" },\n limit: { type: \"string\", description: \"Max rows\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"Output format\", default: \"json\" },\n} as const;\n\nconst listCommand = defineCommand({\n meta: {\n name: \"list\",\n description:\n \"List custom conversions. Runs by default when no subcommand is given. Example: baker ads meta custom-conversions --account-id act_123\",\n },\n args: listArgs,\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args.limit) params.limit = args.limit as string;\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n const rows = await apiGet<MetaCustomConversion[]>(\"/api/ads/meta/custom-conversions\", params);\n const data: Array<Record<string, unknown>> = args.full\n ? rows.map((row) => ({ ...row }))\n : rows.map((row) => ({ ...compactCustomConversion(row) }));\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(data, fmt);\n return;\n }\n writeJsonEnvelope({ ok: true, data, hints: customConversionHints(rows) });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nexport const customConversionsCommand = defineCommand({\n meta: {\n name: \"custom-conversions\",\n description: `List the Custom Conversions on an ad account, or stage a new one — a pixel event narrowed by a rule, set up in Events Manager.\nUse this whenever the user says \"my conversions\" rather than naming a standard event: the id here is what an ad set optimizes toward.\n\nExamples:\n baker ads meta custom-conversions --account-id act_123\n baker ads meta custom-conversions --account-id act_123 --full # raw rule JSON\n baker ads meta custom-conversions create --name \"Lead formulario\" --pixel-id 9988 --custom-event-type LEAD --url-contains \"/gracias\"`,\n },\n subCommands: {\n list: listCommand,\n create: () => import(\"./write-commands.ts\").then((m) => m.customConversionsCreateCommand),\n update: () => import(\"./asset-writes.ts\").then((m) => m.customConversionsUpdateCommand),\n delete: () => import(\"./asset-writes.ts\").then((m) => m.customConversionsDeleteCommand),\n },\n // `args` stays even though the parent has no `run`: citty scans rawArgs for\n // the subcommand name using THIS command's arg defs. `default` (not `run`)\n // dispatches the bare invocation.\n args: listArgs,\n default: \"list\",\n});\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/ads/linkedin/index.ts","../src/commands/ads/linkedin/schemas.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport \"./schemas.ts\"; // side-effect import: registers `baker schema ads.linkedin.*` entries\n\n/**\n * LinkedIn Ads CLI — designed around LinkedIn's distinguishing strength:\n * firmographic (per-job-title, per-company, per-industry, per-seniority)\n * pivots on adAnalytics. AI agents should reach for `linkedin analytics\n * --pivot job-title` and `--pivot company` when answering ABM/persona\n * questions — Meta and Google can't do that.\n *\n * Read-only v1. All analytics queries default to `--level account --intent\n * baseline --granularity DAILY --last-days 7`. When pivoting on a MEMBER_*\n * dimension, the CLI auto-forces granularity=ALL (LinkedIn rejects\n * DAILY + demographic) and surfaces a \"demographic delayed 12-24h\" warning.\n *\n * Authentication: requires the LinkedIn integration to be connected in the\n * dashboard with `r_ads` and `r_ads_reporting` scopes. CLI talks to Baker's\n * backend, which holds the OAuth token.\n */\nexport const linkedinCommand = defineCommand({\n meta: {\n name: \"linkedin\",\n description: `LinkedIn Marketing API — AI-first command surface for B2B ad insights.\n\nDiscovery:\n baker ads linkedin accounts — accounts in this company's connected scope\n baker ads linkedin account --account-id 503001492 — single-account detail (currency, type, status)\n baker ads linkedin url-params [--ad-sets] — UTMs in effect today, and keys set at two levels\n baker ads linkedin account-users — who is on the ad account, their role, who connected LinkedIn\n\nHierarchy (default ACTIVE-only — pass --all-statuses to widen):\n baker ads linkedin campaign-groups --account-id 503001492\n baker ads linkedin campaigns --account-id 503001492\n baker ads linkedin campaigns --account-id 503001492 --campaign-group-id 12345\n baker ads linkedin creatives --account-id 503001492 --campaign-id 67890\n baker ads linkedin creatives get <id> — one ad: headline, landing URL, form, review, why not serving\n baker ads linkedin lead-forms — lead gen forms: state, version, questions\n\nRevenue (CRM deals credited to the ads; needs Business Manager + CRM):\n baker ads linkedin revenue [--pivot campaign|campaign-group|account] [--start --end]\n\nPerformance — the workhorse (3 axes):\n baker ads linkedin analytics — defaults: level=account, intent=baseline, last_7d, DAILY\n baker ads linkedin analytics --intent revenue --last-days 28\n baker ads linkedin analytics --level campaign --campaign-id 1234 --pivot job-title — LinkedIn's superpower (per-title perf)\n baker ads linkedin analytics --level campaign --campaign-id 1234 --pivot company — top companies seeing the ad (ABM gold; names auto-resolved)\n baker ads linkedin companies --last-months 12 --by month — which companies the ads reached, per month (ABM / warm accounts)\n baker ads linkedin resolve --urns urn:li:organization:17719 — resolve org URNs to company names\n baker ads linkedin analytics --level campaign --campaign-id 1234 --intent ranking — fatigue: derives frequency\n baker ads linkedin analytics --list-intents\n baker ads linkedin analytics --list-pivots\n\nStaged writes (never hit LinkedIn directly — ops stage on this chat's draft,\nshow in the dashboard as pending LinkedIn changes, and apply when the chat is\npublished, at which point they reach the real ad account):\n baker ads linkedin account url-params — UTMs for every ad in the account\n baker ads linkedin campaign-groups create|update|pause|resume|duplicate|delete\n baker ads linkedin campaigns create|update|pause|resume|archive|duplicate|delete\n baker ads linkedin creatives create|update|pause|resume|duplicate|delete\n baker ads linkedin audiences create|upload|delete\n baker ads linkedin conversions create|update\n baker ads linkedin lead-forms create|update|publish|archive\n baker ads linkedin experiments create|update|start|pause|end — A/B test two ad sets (list/get to read)\n baker ads linkedin draft list — review staged ops\n baker ads linkedin draft remove <ref> — undo one (draft clear: all)\n\nAccount ID format:\n --account-id accepts numeric (503001492) or URN (urn:li:sponsoredAccount:503001492).\n Set BAKER_LINKEDIN_AD_ACCOUNT_ID env to skip --account-id on every call.\nFull guide: __tooling__/docs/tools/baker/ads-linkedin.md`,\n },\n subCommands: {\n accounts: () => import(\"./accounts.ts\").then((m) => m.accountsCommand),\n account: () => import(\"./account.ts\").then((m) => m.accountCommand),\n \"account-users\": () => import(\"./account-users.ts\").then((m) => m.accountUsersCommand),\n \"campaign-groups\": () => import(\"./campaign-groups.ts\").then((m) => m.campaignGroupsCommand),\n campaigns: () => import(\"./campaigns.ts\").then((m) => m.campaignsCommand),\n creatives: () => import(\"./creatives.ts\").then((m) => m.creativesCommand),\n audiences: () => import(\"./write-commands.ts\").then((m) => m.audiencesCommand),\n \"lead-forms\": () => import(\"./write-commands.ts\").then((m) => m.leadFormsCommand),\n experiments: () => import(\"./experiments.ts\").then((m) => m.experimentsCommand),\n draft: () => import(\"./draft.ts\").then((m) => m.linkedinDraftCommand),\n analytics: () => import(\"./analytics.ts\").then((m) => m.analyticsCommand),\n demographics: () => import(\"./demographics.ts\").then((m) => m.demographicsCommand),\n companies: () => import(\"./companies.ts\").then((m) => m.companiesCommand),\n \"top-companies\": () => import(\"./top-companies.ts\").then((m) => m.topCompaniesCommand),\n resolve: () => import(\"./resolve.ts\").then((m) => m.resolveCommand),\n facets: () => import(\"./facets.ts\").then((m) => m.facetsCommand),\n \"audience-size\": () => import(\"./audience-size.ts\").then((m) => m.audienceSizeCommand),\n \"bid-pricing\": () => import(\"./bid-pricing.ts\").then((m) => m.bidPricingCommand),\n forecast: () => import(\"./forecast.ts\").then((m) => m.forecastCommand),\n leads: () => import(\"./leads.ts\").then((m) => m.leadsCommand),\n revenue: () => import(\"./revenue.ts\").then((m) => m.revenueCommand),\n conversions: () => import(\"./conversions.ts\").then((m) => m.conversionsCommand),\n conversation: () => import(\"./conversation.ts\").then((m) => m.conversationCommand),\n audit: () => import(\"./audit.ts\").then((m) => m.auditCommand),\n \"url-params\": () => import(\"./url-params.ts\").then((m) => m.urlParamsCommand),\n },\n});\n","import { AVAILABLE_ARG } from \"../../../available-accounts.ts\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { CHAT_READ_ARG } from \"../../chat-arg.ts\";\nimport { statusesArgDescription } from \"./shared.ts\";\nimport { TOTAL_BUDGET_HELP } from \"./write-shared.ts\";\n\nconst CHAT_READ_ARG_DESCRIPTION = CHAT_READ_ARG.description;\n\n// Single file rather than per-command. Imported from ./index.ts so registration\n// runs at CLI startup. Mirrors the surface visible to AI agents via\n// `baker schema ads.linkedin.<name>`.\n\nregisterSchema({\n command: \"ads.linkedin.accounts\",\n description: \"List LinkedIn ad accounts in the company's connected scope.\",\n args: {\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n available: AVAILABLE_ARG,\n },\n});\n\nconst accountDetailSchema = {\n description:\n \"Single LinkedIn ad account detail (currency, status, type). Resolves the urn → {id, name, currency, status, type}.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric ID or urn:li:sponsoredAccount:N\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n} as const;\n\n// `account` with no subcommand still runs the detail read, so both names answer.\nregisterSchema({ command: \"ads.linkedin.account\", ...accountDetailSchema });\nregisterSchema({ command: \"ads.linkedin.account.detail\", ...accountDetailSchema });\n\nregisterSchema({\n command: \"ads.linkedin.campaign-groups\",\n description: \"List LinkedIn campaign groups in an account. Default ACTIVE-only — pass --all-statuses to widen.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\", required: false },\n \"all-statuses\": { type: \"boolean\", description: \"Drop the ACTIVE filter\", required: false },\n statuses: { type: \"string\", description: statusesArgDescription(\"campaignGroups\"), required: false },\n limit: { type: \"string\", description: \"Max rows (default 500)\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.campaigns\",\n description:\n \"List LinkedIn campaigns. Returns audit-relevant settings (audienceExpansionEnabled, offsiteDeliveryEnabled, optimizationTargetType, costType, budgets, runSchedule, targetingCriteria).\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"campaign-group-id\": { type: \"string\", description: \"Filter by campaign group\", required: false },\n \"all-statuses\": { type: \"boolean\", description: \"Drop the ACTIVE filter\", required: false },\n statuses: { type: \"string\", description: statusesArgDescription(\"campaigns\"), required: false },\n limit: { type: \"string\", description: \"Max rows\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.creatives\",\n description:\n \"List LinkedIn creatives. Compact by default: id, urn, campaign, status, review status, format, and the resolved destination (landingUrl, or postUrn for post-based ads). The opaque 'content' block is NOT returned unless you pass --full; --fields takes dotted paths for anything narrower.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"campaign-id\": { type: \"string\", description: \"Filter by campaign\", required: false },\n \"all-statuses\": { type: \"boolean\", description: \"Drop the ACTIVE filter\", required: false },\n statuses: { type: \"string\", description: statusesArgDescription(\"creatives\"), required: false },\n fields: {\n type: \"string\",\n description: \"CSV of dotted paths to return instead of the compact row, e.g. id,content.textAd.landingPage\",\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"Return the complete raw records, including the opaque 'content' block\",\n required: false,\n },\n limit: { type: \"string\", description: \"Max rows\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.analytics\",\n description:\n \"Performance reporting (3-axis: --level × --intent × --pivot). LinkedIn's superpower: pivot=job-title|company|industry|seniority. Demographic pivots auto-force granularity=ALL and surface a delayed-data warning.\",\n args: {\n level: {\n type: \"string\",\n description: \"account|campaign-group|campaign|creative\",\n required: false,\n default: \"account\",\n },\n \"account-id\": { type: \"string\", description: \"When level=account\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"campaign-group-id\": { type: \"string\", description: \"CSV when level=campaign-group\", required: false },\n \"campaign-id\": { type: \"string\", description: \"CSV when level=campaign\", required: false },\n \"creative-id\": { type: \"string\", description: \"CSV when level=creative\", required: false },\n ids: { type: \"string\", description: \"Generic CSV alternative\", required: false },\n intent: {\n type: \"string\",\n description: \"Field bundle\",\n required: false,\n default: \"baseline\",\n enum: [\n \"baseline\",\n \"revenue\",\n \"funnel\",\n \"engagement\",\n \"video\",\n \"lead-gen\",\n \"inmail\",\n \"document\",\n \"ranking\",\n \"identity\",\n ],\n },\n pivot: {\n type: \"string\",\n description: \"Demographic / firmographic dim\",\n required: false,\n default: \"none\",\n enum: [\n \"none\",\n \"campaign\",\n \"campaign-group\",\n \"creative\",\n \"company\",\n \"account\",\n \"conversion\",\n \"job-title\",\n \"job-function\",\n \"seniority\",\n \"industry\",\n \"company-size\",\n \"country\",\n \"region\",\n \"dma\",\n \"device\",\n \"placement\",\n \"serving-location\",\n \"card-index\",\n \"objective\",\n \"conversation-node\",\n \"conversation-node-button\",\n ],\n },\n metrics: { type: \"string\", description: \"CSV metric override (escape hatch)\", required: false },\n start: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n end: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n \"last-days\": { type: \"string\", description: \"Window (default 7)\", required: false },\n granularity: {\n type: \"string\",\n description: \"DAILY|MONTHLY|YEARLY|ALL\",\n required: false,\n default: \"DAILY\",\n enum: [\"DAILY\", \"MONTHLY\", \"YEARLY\", \"ALL\"],\n },\n limit: { type: \"string\", description: \"Max rows\", required: false },\n \"no-sort\": { type: \"boolean\", description: \"Skip default sort\", required: false },\n \"list-intents\": { type: \"boolean\", description: \"List intents and exit\", required: false },\n \"list-pivots\": { type: \"boolean\", description: \"List pivots and exit\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.demographics\",\n description:\n \"Sweep all firmographic pivots (job-title, company, industry, seniority, function, company-size) in one call. Returns top-N rows per pivot.\",\n args: {\n \"campaign-id\": { type: \"string\", description: \"CSV campaign IDs\", required: true },\n pivots: { type: \"string\", description: \"CSV of pivots (default: all firmographic)\", required: false },\n \"top-n\": { type: \"string\", description: \"Top rows per pivot (default 10)\", required: false },\n intent: { type: \"string\", description: \"Field bundle\", required: false, default: \"baseline\" },\n start: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n end: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n \"last-days\": { type: \"string\", description: \"Window (default 30)\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.companies\",\n description:\n \"Which companies the LinkedIn ads reached — one row per company over the whole period ({org, name, impressions, clicks, engagements, costLocal}), most engaged first. Start here for warm accounts / ABM reporting. Defaults: last 12 calendar months, the only selected ad account, 100 companies a page (--page N for the next, --full for all; totalCompanies counts them all). --by month|campaign adds a months[] or campaigns[] breakdown; --with-domains adds domain + domainSource for CRM matching; --stats adds row counts and cost/reach/domain coverage (no names). LinkedIn drops companies under 3 events a month.\",\n args: {\n \"account-id\": {\n type: \"string\",\n description: \"Ad account id (numeric or urn:li:sponsoredAccount:N). Default: the only selected account\",\n required: false,\n },\n \"campaign-id\": { type: \"string\", description: \"CSV campaign ids — read only these campaigns\", required: false },\n \"last-months\": {\n type: \"string\",\n description: \"Calendar months back incl. this one (1-24, default 12)\",\n required: false,\n },\n start: { type: \"string\", description: \"YYYY-MM-DD (instead of --last-months)\", required: false },\n end: { type: \"string\", description: \"YYYY-MM-DD (default today)\", required: false },\n by: { type: \"string\", description: \"none | month | campaign (default none)\", required: false },\n \"with-domains\": { type: \"boolean\", description: \"Add website domain + domainSource per company\", required: false },\n \"min-impressions\": { type: \"string\", description: \"Leave out companies under N impressions\", required: false },\n full: { type: \"boolean\", description: \"Every company, plus videoViews\", required: false },\n page: {\n type: \"string\",\n description: \"Which page of 100 companies, most engaged first (default 1)\",\n required: false,\n },\n stats: { type: \"boolean\", description: \"Add read-quality stats (counts and rates only)\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.top-companies\",\n description:\n \"Top companies whose employees saw / clicked / converted. Wrapper for analytics --pivot company. The ABM feedback loop.\",\n args: {\n \"campaign-id\": { type: \"string\", description: \"CSV campaign IDs\", required: true },\n intent: { type: \"string\", description: \"Field bundle (default baseline)\", required: false },\n \"top-n\": { type: \"string\", description: \"Top rows by impressions (default 25)\", required: false },\n start: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n end: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n \"last-days\": { type: \"string\", description: \"Window (default 30)\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.resolve\",\n description:\n \"Resolve organization URNs (from top-companies / analytics --pivot company) to company names. With --with-domains, returns each org's LinkedIn page (vanityName), website and registrable domain instead — ready to match against CRM company domains. domainSource: website (the org's own domain), subdomain (e.g. news.microsoft.com → microsoft.com; lower confidence), none (shortlink/redirector or no website). Unknown ids come back in errors.\",\n args: {\n urns: { type: \"string\", description: \"Comma-separated org URNs (urn:li:organization:NNN)\", required: false },\n ids: { type: \"string\", description: \"Comma-separated bare org ids (17719,19022)\", required: false },\n \"with-domains\": {\n type: \"boolean\",\n description: \"Return vanityName, website, domain and domainSource per org (+ errors for unknown ids)\",\n required: false,\n },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.facets.list\",\n description:\n \"List every targeting facet LinkedIn supports (industries, seniorities, titles, employers, growthRate, etc).\",\n args: {\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.facets.values\",\n description:\n \"Look up entity values for a facet — full list (q=adTargetingFacet) or typeahead search (q=typeahead, with --query).\",\n args: {\n facet: { type: \"string\", description: \"Facet name (industries) or URN\", required: true },\n query: { type: \"string\", description: \"Typeahead query (auto-switches finder)\", required: false },\n finder: { type: \"string\", description: \"adTargetingFacet|typeahead|similarEntities\", required: false },\n locale: { type: \"string\", description: \"Locale (default en_US)\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.audience-size\",\n description:\n \"Estimate audience size for a targetingCriteria payload. Returns total + active + playbook §04 sweet-spot warnings.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n targeting: { type: \"string\", description: \"Inline JSON targetingCriteria\", required: false },\n \"targeting-file\": { type: \"string\", description: \"Path to JSON file\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.bid-pricing\",\n description:\n \"LinkedIn's suggested bid (min/default/max), bid limits and daily budget range for a targeting + objective + bid type, in the account's currency, plus the playbook §06 floor (2/3 of suggested).\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n objective: {\n type: \"string\",\n description: \"Objective type (LEAD_GENERATION, WEBSITE_VISIT, etc.)\",\n required: true,\n },\n \"cost-type\": {\n type: \"string\",\n description: \"CPC|CPM|CPV\",\n required: false,\n default: \"CPC\",\n enum: [\"CPC\", \"CPM\", \"CPV\"],\n },\n \"campaign-type\": {\n type: \"string\",\n description: \"Campaign type\",\n required: false,\n default: \"SPONSORED_UPDATES\",\n enum: [\"SPONSORED_UPDATES\", \"SPONSORED_INMAILS\", \"TEXT_AD\"],\n },\n \"audience-expansion\": {\n type: \"boolean\",\n description: \"Price with audience expansion on\",\n required: false,\n default: false,\n },\n targeting: { type: \"string\", description: \"Inline JSON targetingCriteria\", required: false },\n \"targeting-file\": { type: \"string\", description: \"Path to JSON file\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.forecast\",\n description:\n \"LinkedIn's forecast for a campaign that doesn't exist yet: impressions, clicks, leads, spend, unit costs (cpc, cpm, costPerLead) and rates over a period, each { value, low, high }. Needs a budget; --bid forecasts a manual bid, without it LinkedIn's automated bidding.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n objective: { type: \"string\", description: \"Objective type\", required: false },\n \"cost-type\": {\n type: \"string\",\n description: \"Bid type of --bid\",\n required: false,\n default: \"CPC\",\n enum: [\"CPC\", \"CPM\", \"CPV\"],\n },\n \"campaign-type\": {\n type: \"string\",\n description: \"Campaign type\",\n required: false,\n default: \"SPONSORED_UPDATES\",\n enum: [\"SPONSORED_UPDATES\", \"SPONSORED_INMAILS\", \"DYNAMIC\"],\n },\n \"daily-budget\": { type: \"string\", description: \"e.g. '250' or '250 EUR'\", required: false },\n \"total-budget\": { type: \"string\", description: \"e.g. '7250' or '7250 EUR'\", required: false },\n bid: { type: \"string\", description: \"Manual bid e.g. '5.57'; omit for automated bidding\", required: false },\n \"optimization-target\": { type: \"string\", description: \"Automated-bidding goal, e.g. MAX_LEAD\", required: false },\n start: { type: \"string\", description: \"First day YYYY-MM-DD (default tomorrow)\", required: false },\n days: { type: \"string\", description: \"Period length in days (default 30)\", required: false },\n targeting: { type: \"string\", description: \"Inline JSON targetingCriteria\", required: false },\n \"targeting-file\": { type: \"string\", description: \"Path to JSON file\", required: false },\n full: { type: \"boolean\", description: \"Include LinkedIn's raw series\", required: false, default: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.leads\",\n description:\n \"List Lead Gen Form responses (90-day LinkedIn retention — sync to CRM via this endpoint). Filter by --form-id, --campaign-id, or --since-days.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"form-id\": { type: \"string\", description: \"Filter by form ID\", required: false },\n \"campaign-id\": { type: \"string\", description: \"Filter by campaign\", required: false },\n \"since-days\": { type: \"string\", description: \"Last N days\", required: false },\n \"since-ms\": { type: \"string\", description: \"Epoch ms (alternative to --since-days)\", required: false },\n until: { type: \"string\", description: \"Submitted before (YYYY-MM-DD or epoch ms)\", required: false },\n \"test-leads\": { type: \"boolean\", description: \"Only test leads\", required: false },\n limit: { type: \"string\", description: \"Max rows\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.list\",\n description: \"List conversion rules (Insight Tag + Conversions API).\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.health\",\n description:\n \"Playbook §07 5-point health check: rules enabled? lead/purchase event? CAPI fired in 7d? view-through ≤7d? lead de-dup correct?\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversation\",\n description:\n \"Per-button click rates inside Sponsored Messaging / Conversation Ads. Wraps analytics --pivot conversation-node-button.\",\n args: {\n \"campaign-id\": { type: \"string\", description: \"CSV campaign IDs\", required: true },\n start: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n end: { type: \"string\", description: \"YYYY-MM-DD\", required: false },\n \"last-days\": { type: \"string\", description: \"Window (default 30)\", required: false },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.audit\",\n description:\n \"Run a 30+ check playbook audit (Settings, Tracking, Audience, Campaigns, Creative, Performance, Bidding, Compliance, Hygiene). Each finding: {id, area, check, status, severity, evidence, fix} with playbook citations. --format md renders a deliverable-ready table.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n \"campaign-id\": { type: \"string\", description: \"Narrow to a single campaign\", required: false },\n \"window-days\": { type: \"string\", description: \"Performance lookback (default 30)\", required: false },\n severity: { type: \"string\", description: \"CSV severity filter (critical,high,medium,low)\", required: false },\n area: { type: \"string\", description: \"CSV area filter\", required: false },\n format: { type: \"string\", description: \"json | md\", required: false, default: \"json\" },\n \"no-cache\": NO_CACHE_ARG,\n },\n});\n\n// ---------------------------------------------------------------------------\n// Staged writes — ops stage on this chat's draft, appear in the dashboard as\n// pending LinkedIn changes, and hit the LinkedIn API only when the chat is\n// published — at which point they reach the real ad account, for every company.\n// ---------------------------------------------------------------------------\n\nconst writeAccountArgs = {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\", required: false },\n} as const;\n\nregisterSchema({\n command: \"ads.linkedin.campaign-groups.create\",\n description:\n \"Stage a new campaign group (staged until publish; review with `baker ads linkedin draft`). Returns a li_temp_* ref that later `campaigns create --group` calls can reference.\",\n args: {\n ...writeAccountArgs,\n name: { type: \"string\", description: \"Name (≤100 chars)\", required: true },\n start: { type: \"string\", description: \"Run schedule start (ISO date or epoch ms)\", required: true },\n end: { type: \"string\", description: \"Run schedule end\", required: false },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP, required: false },\n currency: {\n type: \"string\",\n description: \"3-letter currency code (defaults to the ad account currency)\",\n required: false,\n },\n objective: { type: \"string\", description: \"Objective every ad set takes, create-only\", required: false },\n \"shared-budget\": {\n type: \"string\",\n description:\n \"MAXIMUM_DELIVERY|MANUAL|COST_CAP — share the total budget across its ad sets (needs --total-budget, --end)\",\n required: false,\n },\n status: {\n type: \"string\",\n description: \"DRAFT|ACTIVE (default DRAFT) — LinkedIn refuses a new group created PAUSED\",\n required: false,\n },\n file: { type: \"string\", description: \"JSON payload file; flags override file keys\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.campaign-groups.update\",\n description:\n \"Stage changes to an existing campaign group (name, schedule, budget, status). Captures a before-snapshot for the dashboard diff. Pass a li_temp_* ref to AMEND a group staged in this chat. Applies on chat publish.\",\n args: {\n id: {\n type: \"positional\",\n description: \"Campaign group id/URN, or li_temp_* ref staged in this chat\",\n required: true,\n },\n ...writeAccountArgs,\n name: { type: \"string\", description: \"New name\", required: false },\n start: { type: \"string\", description: \"New schedule start\", required: false },\n end: { type: \"string\", description: \"New schedule end\", required: false },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP, required: false },\n currency: {\n type: \"string\",\n description: \"3-letter currency code (defaults to the ad account currency)\",\n required: false,\n },\n \"shared-budget\": {\n type: \"string\",\n description: \"MAXIMUM_DELIVERY|MANUAL|COST_CAP — share the budget across its ad sets\",\n required: false,\n },\n status: { type: \"string\", description: \"ACTIVE|PAUSED|ARCHIVED\", required: false },\n file: { type: \"string\", description: \"JSON file with fields to change\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.campaigns.create\",\n description:\n \"Stage a new campaign. --group accepts a real id/URN or a li_temp_* ref staged earlier in this chat. Targeting goes in --targeting-file as LinkedIn criteria: {include:{and:[{or:{'urn:li:adTargetingFacet:locations':['urn:li:geo:…']}}]}} — find facet values with `baker ads linkedin facets values`. Playbook defaults: manual bid (--bid), audience expansion off, LAN off. Staged until publish.\",\n args: {\n ...writeAccountArgs,\n name: { type: \"string\", description: \"Name (≤255 chars)\", required: true },\n group: { type: \"string\", description: \"Campaign group id/URN or li_temp_* ref\", required: true },\n type: { type: \"string\", description: \"SPONSORED_UPDATES|TEXT_AD|SPONSORED_INMAILS|DYNAMIC\", required: true },\n objective: { type: \"string\", description: \"LEAD_GENERATION|WEBSITE_VISIT|BRAND_AWARENESS|…\", required: false },\n \"cost-type\": { type: \"string\", description: \"CPC|CPM|CPV\", required: true },\n bid: { type: \"string\", description: \"Manual bid amount (unitCost)\", required: false },\n \"daily-budget\": { type: \"string\", description: \"Daily budget amount\", required: false },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP, required: false },\n currency: {\n type: \"string\",\n description: \"3-letter currency code (defaults to the ad account currency)\",\n required: false,\n },\n start: { type: \"string\", description: \"Run schedule start\", required: false },\n end: { type: \"string\", description: \"Run schedule end\", required: false },\n locale: { type: \"string\", description: \"Profile locale like en_US (default en_US)\", required: false },\n \"targeting-file\": { type: \"string\", description: \"JSON file with targetingCriteria\", required: true },\n \"audience-expansion\": { type: \"string\", description: \"on|off (playbook: off; default off)\", required: false },\n lan: {\n type: \"string\",\n description: \"LinkedIn Audience Network on|off (playbook: off; default off)\",\n required: false,\n },\n ctv: { type: \"string\", description: \"Connected TV on|off (default off)\", required: false },\n \"creative-selection\": { type: \"string\", description: \"OPTIMIZED|ROUND_ROBIN\", required: false },\n \"associated-entity\": { type: \"string\", description: \"Organization URN\", required: false },\n \"political-intent\": {\n type: \"string\",\n description:\n \"NOT_DECLARED (default)|NOT_POLITICAL|POLITICAL — the advertiser's declaration; NOT_POLITICAL only after the user confirms their ads are not political advertising\",\n required: false,\n },\n optimization: {\n type: \"string\",\n description:\n \"optimizationTargetType — NONE (manual, default)|ENHANCED_CONVERSION|MAX_LEAD|MAX_QUALIFIED_LEAD|MAX_CONVERSION|MAX_CLICK|MAX_IMPRESSION|MAX_REACH|MAX_VIDEO_VIEW (CPM)|TARGET_COST_PER_CLICK|TARGET_COST_PER_IMPRESSION|TARGET_COST_PER_VIDEO_VIEW|CAP_COST_AND_MAXIMIZE_LEADS|…_CLICKS|…_IMPRESSIONS|…_VIDEO_VIEWS (CPM); target cost and cost cap need --bid\",\n required: false,\n },\n format: {\n type: \"string\",\n description:\n \"Ad format, create-only: STANDARD_UPDATE|SINGLE_VIDEO|CAROUSEL|TEXT_AD|SPOTLIGHT|FOLLOW_COMPANY|JOBS|SPONSORED_INMAIL|SPONSORED_MESSAGE|SPONSORED_UPDATE_EVENT|SPONSORED_UPDATE_NATIVE_DOCUMENT\",\n required: false,\n },\n pacing: { type: \"string\", description: \"LIFETIME|ACCELERATED, create-only\", required: false },\n \"frequency-cap\": {\n type: \"string\",\n description: \"At most N impressions per member a week (3–30), Brand awareness only\",\n required: false,\n },\n status: {\n type: \"string\",\n description: \"DRAFT|ACTIVE|PAUSED (default DRAFT) — PAUSED needs a group that is not DRAFT\",\n required: false,\n },\n file: { type: \"string\", description: \"JSON payload file; flags override file keys\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.campaigns.update\",\n description:\n \"Stage changes to an existing campaign — budget, bid, targeting, schedule, flags, status. Only pass what changes; a before-snapshot powers the dashboard diff. Pass a li_temp_* ref to AMEND a campaign staged in this chat (fields merge into the staged create). Applies on chat publish.\",\n args: {\n id: { type: \"positional\", description: \"Campaign id/URN, or li_temp_* ref staged in this chat\", required: true },\n ...writeAccountArgs,\n name: { type: \"string\", description: \"New name\", required: false },\n objective: { type: \"string\", description: \"New objective\", required: false },\n \"cost-type\": { type: \"string\", description: \"CPC|CPM|CPV\", required: false },\n bid: { type: \"string\", description: \"New manual bid\", required: false },\n \"daily-budget\": { type: \"string\", description: \"New daily budget\", required: false },\n \"total-budget\": { type: \"string\", description: TOTAL_BUDGET_HELP, required: false },\n currency: {\n type: \"string\",\n description: \"3-letter currency code (defaults to the ad account currency)\",\n required: false,\n },\n start: { type: \"string\", description: \"New schedule start\", required: false },\n end: { type: \"string\", description: \"New schedule end\", required: false },\n \"targeting-file\": { type: \"string\", description: \"JSON file with replacement targetingCriteria\", required: false },\n \"audience-expansion\": { type: \"string\", description: \"on|off\", required: false },\n lan: { type: \"string\", description: \"on|off\", required: false },\n ctv: { type: \"string\", description: \"on|off\", required: false },\n \"creative-selection\": { type: \"string\", description: \"OPTIMIZED|ROUND_ROBIN\", required: false },\n \"political-intent\": {\n type: \"string\",\n description:\n \"NOT_DECLARED (default)|NOT_POLITICAL|POLITICAL — the advertiser's declaration; NOT_POLITICAL only after the user confirms their ads are not political advertising\",\n required: false,\n },\n status: { type: \"string\", description: \"ACTIVE|PAUSED|ARCHIVED\", required: false },\n optimization: {\n type: \"string\",\n description:\n \"optimizationTargetType — NONE (manual, default)|ENHANCED_CONVERSION|MAX_LEAD|MAX_QUALIFIED_LEAD|MAX_CONVERSION|MAX_CLICK|MAX_IMPRESSION|MAX_REACH|MAX_VIDEO_VIEW (CPM)|TARGET_COST_PER_CLICK|TARGET_COST_PER_IMPRESSION|TARGET_COST_PER_VIDEO_VIEW|CAP_COST_AND_MAXIMIZE_LEADS|…_CLICKS|…_IMPRESSIONS|…_VIDEO_VIEWS (CPM); target cost and cost cap need --bid\",\n required: false,\n },\n format: {\n type: \"string\",\n description:\n \"Ad format, create-only: STANDARD_UPDATE|SINGLE_VIDEO|CAROUSEL|TEXT_AD|SPOTLIGHT|FOLLOW_COMPANY|JOBS|SPONSORED_INMAIL|SPONSORED_MESSAGE|SPONSORED_UPDATE_EVENT|SPONSORED_UPDATE_NATIVE_DOCUMENT\",\n required: false,\n },\n pacing: { type: \"string\", description: \"LIFETIME|ACCELERATED, create-only\", required: false },\n \"frequency-cap\": {\n type: \"string\",\n description: \"At most N impressions per member a week (3–30), Brand awareness only\",\n required: false,\n },\n file: { type: \"string\", description: \"JSON file with fields to change\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.campaigns.exclude-companies\",\n description:\n \"Stop a live ad set reaching some companies (customers, open deals, competitors). Add-only — never removes an exclusion. At publish Baker re-reads the ad set and merges into its targeting as it stands then, keeping audience, locations and every existing exclusion. --org takes company ids (as `companies` / `top-companies` print them) or urn:li:organization URNs, comma-separated, up to 200 per call; a longer list goes into a company-list audience passed to --segment. Staged until publish.\",\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 ...writeAccountArgs,\n org: {\n type: \"string\",\n description: \"Company ids or urn:li:organization URNs, comma-separated — e.g. 1035,1441\",\n required: false,\n },\n segment: {\n type: \"string\",\n description: \"Matched audiences, comma-separated: urn:li:dmpSegment:N / urn:li:adSegment:N or a li_temp_* ref\",\n required: false,\n },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.campaigns.url-params\",\n description:\n \"Start here for UTMs: stage the URL tracking parameters on an ad set. LinkedIn appends them to the link of EVERY ad in the ad set, including ads already running, so this is the level to set campaign-wide UTMs at — editing each ad's landing URL instead risks the same key landing twice. For a value that never varies across the whole account, set it once with `account url-params` instead; LinkedIn appends BOTH levels, so a key set at both lands in the URL twice. REPLACES the ad set's whole parameter set — LinkedIn does not merge, so read `ads.linkedin.url-params` first and re-send every pair that should survive. --param takes fixed values (repeatable or &-joined); --dynamic takes a value LinkedIn fills in per ad (ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_GROUP_ID, CAMPAIGN_GROUP_NAME, CAMPAIGN_ID, CAMPAIGN_NAME, CREATIVE_ID, CREATIVE_NAME). Applies on chat publish; message and conversation ads are unaffected.\",\n args: {\n id: { type: \"positional\", description: \"Ad set (campaign) id or URN\", required: true },\n ...writeAccountArgs,\n param: {\n type: \"string\",\n description: 'Fixed key=value, repeatable or &-joined — e.g. \"utm_source=linkedin&utm_medium=paid-social\"',\n required: false,\n },\n dynamic: {\n type: \"string\",\n description: \"key=PLACEHOLDER filled in per ad, repeatable — e.g. utm_campaign=CAMPAIGN_NAME\",\n required: false,\n },\n clear: { type: \"boolean\", description: \"Remove every tracking parameter from this ad set\", required: false },\n file: { type: \"string\", description: \"JSON payload file; flags override file keys\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.url-params\",\n description:\n \"Read the URL tracking parameters in effect: the ad account's, optionally every ad set's, and the keys set at BOTH levels — which LinkedIn appends twice into the served URL. Run this BEFORE setting UTMs on an ad set, because whatever the account already carries is appended on top. Account-only by default (there is no batch read, so each ad set costs its own call); --ad-sets sweeps them, capped, and the response says how many of how many were examined.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric ID or urn:li:sponsoredAccount:N\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\", required: false },\n \"ad-sets\": { type: \"boolean\", description: \"Also read every ad set's parameters\", required: false },\n \"campaign-ids\": {\n type: \"string\",\n description: \"Comma-separated ad set ids to read instead of all\",\n required: false,\n },\n \"collisions-only\": { type: \"boolean\", description: \"Only the keys set at more than one level\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.account.url-params\",\n description:\n \"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. Use it for the values that never vary across the account (utm_source, utm_medium, an agency tag); anything naming a specific ad set belongs on the ad set (`campaigns url-params`), because LinkedIn appends BOTH levels and a key set at both lands in the URL twice. REPLACES the account's whole parameter set — LinkedIn does not merge, so read `ads.linkedin.url-params` first and re-send every pair that should survive. --param takes fixed values (repeatable or &-joined); --dynamic takes a value LinkedIn fills in per ad (ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_GROUP_ID, CAMPAIGN_GROUP_NAME, CAMPAIGN_ID, CAMPAIGN_NAME, CREATIVE_ID, CREATIVE_NAME). Applies on chat publish; message and conversation ads are unaffected.\",\n args: {\n ...writeAccountArgs,\n param: {\n type: \"string\",\n description: 'Fixed key=value, repeatable or &-joined — e.g. \"utm_source=linkedin&utm_medium=paid-social\"',\n required: false,\n },\n dynamic: {\n type: \"string\",\n description: \"key=PLACEHOLDER filled in per ad, repeatable — e.g. utm_campaign=CAMPAIGN_NAME\",\n required: false,\n },\n clear: { type: \"boolean\", description: \"Remove every tracking parameter set on the ad account\", required: false },\n file: { type: \"string\", description: \"JSON payload file; flags override file keys\", required: false },\n },\n});\n\nconst statusSugarArgs = {\n id: {\n type: \"positional\",\n description: \"Entity id or URN — comma-separate several to change them all in one call\",\n required: false,\n },\n \"ids-file\": { type: \"string\", description: \"File of ids, one per line or comma-separated\", required: false },\n ...writeAccountArgs,\n} as const;\n\n/** Every status command takes a list; say so once, in the words the agent reads. */\nconst MULTI_ID_NOTE =\n \"Takes one id or many: comma-separate the ids, or pass --ids-file. Several ids stage together as one set — all of them or none. The list form is for real ids/URNs only: a li_temp_* ref AMENDS what this chat already staged, and an amend must be passed on its own.\";\n\nregisterSchema({\n command: \"ads.linkedin.campaigns.pause\",\n description: `Stage pausing a campaign (status → PAUSED on publish). ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.campaigns.resume\",\n description: `Stage resuming a paused campaign (status → ACTIVE on publish). ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.campaigns.archive\",\n description: `Stage archiving a campaign (status → ARCHIVED on publish). ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.campaign-groups.pause\",\n description: `Stage pausing a campaign group. ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.campaign-groups.resume\",\n description: `Stage resuming a campaign group. ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.creatives.pause\",\n description: `Stage pausing a creative (intendedStatus → PAUSED on publish). Playbook early-kill rule: >30 impressions with 0 clicks. ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.creatives.resume\",\n description: `Stage resuming a paused creative. ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n});\n\nfor (const [entity, what] of [\n [\"campaign-groups\", \"campaign\"],\n [\"campaigns\", \"ad set\"],\n [\"creatives\", \"ad\"],\n] as const) {\n registerSchema({\n command: `ads.linkedin.${entity}.delete`,\n description: `Stage deleting a ${what} that is still a DRAFT on LinkedIn; anything that has left draft is paused or archived instead. Deletes run last at publish, ads before ad sets before campaigns. ${MULTI_ID_NOTE}`,\n args: statusSugarArgs,\n });\n}\n\nconst duplicateArgs = {\n id: { type: \"positional\", description: \"Source id or URN\", required: true },\n ...writeAccountArgs,\n name: { type: \"string\", description: \"Name for the copy\", required: false },\n file: { type: \"string\", description: \"JSON file with field overrides for the copy\", required: false },\n} as const;\n\nregisterSchema({\n command: \"ads.linkedin.campaigns.duplicate\",\n description:\n \"Stage a copy of an existing campaign as a new DRAFT create (playbook: duplicate, never link-to-original). Reads the source at stage time; override fields via --name/--file.\",\n args: duplicateArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.campaign-groups.duplicate\",\n description: \"Stage a copy of an existing campaign group as a new DRAFT create.\",\n args: duplicateArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.creatives.duplicate\",\n description:\n \"Stage a copy of an existing ad, optionally with new content. Direct-content ads (text/spotlight/follower/jobs) copy field-by-field, so a copy is how their immutable content changes (they can also update in place via creatives.update). Post-based ads re-sponsor the SAME post — the post owns the copy, media and destination, so content flags are rejected here: stage creatives.create with the new content instead, then pause the old ad. --replace stages pausing the original, gated on the new ad publishing successfully, and the copy inherits the source's status.\",\n args: {\n id: { type: \"positional\", description: \"Source creative id or URN\", required: true },\n ...writeAccountArgs,\n campaign: { type: \"string\", description: \"Stage the copy under a different ad set\", required: false },\n \"intended-status\": { type: \"string\", description: \"Status for the copy (default DRAFT)\", required: false },\n replace: { type: \"boolean\", description: \"Also pause the original once the new ad publishes\", required: false },\n headline: { type: \"string\", description: \"New headline\", required: false },\n description: { type: \"string\", description: \"New description (text/spotlight)\", required: false },\n intro: { type: \"string\", description: \"New commentary / intro text\", required: false },\n \"landing-url\": { type: \"string\", description: \"New https destination URL\", required: false },\n cta: { type: \"string\", description: \"New CTA\", required: false },\n \"cta-label\": { type: \"string\", description: \"Spotlight custom CTA label\", required: false },\n \"image-id\": { type: \"string\", description: \"Baker image library id\", required: false },\n \"image-urn\": { type: \"string\", description: \"Existing urn:li:image:*\", required: false },\n \"video-id\": {\n type: \"string\",\n description:\n \"Baker video library id (`baker videos`) — uploaded to LinkedIn at publish; a first publish may ask to retry while the full-quality copy is prepared\",\n required: false,\n },\n \"video-urn\": { type: \"string\", description: \"Existing urn:li:video:*\", required: false },\n \"logo-image-id\": { type: \"string\", description: \"Baker image id for the logo\", required: false },\n title: { type: \"string\", description: \"Media title\", required: false },\n file: { type: \"string\", description: \"JSON file with field overrides for the copy\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.creatives.create\",\n description:\n \"Stage a new creative (ad). Formats: image|video|text|spotlight|follower|document|carousel|conversation|tla|jobs|event|article. Media: --image-id references the Baker library (`baker images`) and uploads to LinkedIn at publish, any format; --video-id uploads a Baker library video at publish; --image-urn/--video-urn reference media already on LinkedIn. Limits: headline ≤70 (text ads ≤25), intro soft-truncates at 600 chars, landing URL must be https. Complex formats take --file with the full content object; conversation ads take --file with the message flow ({message: {subject, body (≤500), senderName?, buttons ≤5 × {label ≤25, type NESTED|LANDING_PAGE|LEAD_FORM, nestedMessage?|landingPageUrl?|leadForm?}}}, ≤25 messages) and arrive from --sender (default: whoever connected LinkedIn). --format tla boosts an existing post (Thought Leader ad): name it with --post <Baker post id from `baker posts list`>, --post-url <any link to the post>, or --post-urn <urn:li:share|ugcPost:*>. --format document (in a SPONSORED_UPDATE_NATIVE_DOCUMENT ad set) takes --document <Baker document name> or --document-url <PDF link> and --title; gate it with --lead-form + --preview-pages N. Staged until publish.\",\n args: {\n ...writeAccountArgs,\n campaign: { type: \"string\", description: \"Campaign id/URN or li_temp_* ref\", required: true },\n format: {\n type: \"string\",\n description: \"image|video|text|spotlight|follower|document|carousel|conversation|tla|jobs|event|article\",\n required: true,\n },\n \"image-id\": { type: \"string\", description: \"Baker image library id\", required: false },\n \"image-urn\": { type: \"string\", description: \"Existing urn:li:image:*\", required: false },\n \"video-id\": {\n type: \"string\",\n description:\n \"Baker video library id (`baker videos`) — uploaded to LinkedIn at publish; a first publish may ask to retry while the full-quality copy is prepared\",\n required: false,\n },\n \"video-urn\": { type: \"string\", description: \"Existing urn:li:video:*\", required: false },\n \"logo-image-id\": { type: \"string\", description: \"Baker image id for the logo\", required: false },\n intro: { type: \"string\", description: \"Commentary / intro text\", required: false },\n headline: { type: \"string\", description: \"Headline\", required: false },\n description: { type: \"string\", description: \"Description (text/spotlight)\", required: false },\n \"landing-url\": { type: \"string\", description: \"https destination URL\", required: false },\n cta: { type: \"string\", description: \"LEARN_MORE|REQUEST_DEMO|SIGN_UP|REGISTER|DOWNLOAD|…\", required: false },\n \"cta-label\": { type: \"string\", description: \"Spotlight CTA label (≤18 chars)\", required: false },\n post: {\n type: \"string\",\n description:\n \"TLA: the post to sponsor, by its Baker post id (`baker posts list`). Staging refuses one that can't run as an ad.\",\n required: false,\n },\n \"post-urn\": {\n type: \"string\",\n description: \"TLA: the post to sponsor by its URN — urn:li:share|ugcPost:*\",\n required: false,\n },\n \"post-url\": {\n type: \"string\",\n description: \"TLA: any link to the post, normal or embed — Baker reads it and adds it to Posts\",\n required: false,\n },\n sender: {\n type: \"string\",\n description:\n \"Conversation ads: urn:li:person:* sender from `account-users` (default: whoever connected LinkedIn)\",\n required: false,\n },\n document: {\n type: \"string\",\n description: \"Document ads: a Baker document's folder name (src/documents/<name>), uploaded at publish\",\n required: false,\n },\n \"document-url\": {\n type: \"string\",\n description: \"Document ads: https link to a PDF, PowerPoint or Word file (≤100 MB, ≤300 pages)\",\n required: false,\n },\n \"document-urn\": { type: \"string\", description: \"Document ads: existing urn:li:document:*\", required: false },\n \"preview-pages\": {\n type: \"string\",\n description: \"Gated document ads: pages shown before the lead gen form (needs --lead-form)\",\n required: false,\n },\n \"event-urn\": {\n type: \"string\",\n description: \"Event ads: the LinkedIn event to sponsor (urn:li:event:*)\",\n required: false,\n },\n \"article-url\": {\n type: \"string\",\n description: \"Article ads: https URL of the article/newsletter to sponsor\",\n required: false,\n },\n \"thumbnail-image-id\": {\n type: \"string\",\n description: \"Article ads: Baker image id for the link thumbnail\",\n required: false,\n },\n \"thumbnail-urn\": { type: \"string\", description: \"Article ads: existing urn:li:image:* thumbnail\", required: false },\n \"intended-status\": { type: \"string\", description: \"DRAFT|ACTIVE|PAUSED (default DRAFT)\", required: false },\n title: {\n type: \"string\",\n description: \"Media title (image/video), article title, or document title\",\n required: false,\n },\n \"lead-form\": {\n type: \"string\",\n description:\n \"Lead gen form the ad opens (image|video|carousel|document|tla): li_temp_* from `lead-forms create` or a form id from `lead-forms`. Required in a LEAD_GENERATION ad set; replaces --landing-url\",\n required: false,\n },\n \"lead-form-button\": {\n type: \"string\",\n description:\n \"APPLY|DOWNLOAD|VIEW_QUOTE|LEARN_MORE|SIGN_UP (default)|SUBSCRIBE|REGISTER|REQUEST_DEMO|JOIN|ATTEND|UNLOCK_FULL_DOCUMENT|SHOP_NOW|BUY_NOW|SEE_MORE\",\n required: false,\n },\n file: { type: \"string\", description: \"JSON file with the full content object\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.creatives.update\",\n description: `Stage changes to an existing creative. Direct-content ads (text/spotlight/follower/jobs) update copy/media/URL IN PLACE — pass only the changed fields (headline, description, landing-url, image-id, …); the ad's current content carries over. 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. Passing a li_temp_* ref AMENDS the creative staged in this chat instead. ${MULTI_ID_NOTE} Applies on chat publish.`,\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\": {\n type: \"string\",\n description: \"File of creative ids, one per line or comma-separated\",\n required: false,\n },\n ...writeAccountArgs,\n \"intended-status\": { type: \"string\", description: \"ACTIVE|PAUSED|ARCHIVED|DRAFT\", required: false },\n name: { type: \"string\", description: \"New creative name\", required: false },\n campaign: {\n type: \"string\",\n description: \"Re-parent to a different ad set (id/URN or li_temp_*) — staged creatives only\",\n required: false,\n },\n headline: { type: \"string\", description: \"New headline\", required: false },\n intro: { type: \"string\", description: \"Commentary / intro text\", required: false },\n description: { type: \"string\", description: \"Description (text/spotlight)\", required: false },\n \"landing-url\": { type: \"string\", description: \"New https destination URL\", required: false },\n cta: { type: \"string\", description: \"New CTA\", required: false },\n \"cta-label\": { type: \"string\", description: \"Spotlight custom CTA label\", required: false },\n \"image-id\": { type: \"string\", description: \"Baker image library id\", required: false },\n \"image-urn\": { type: \"string\", description: \"Existing urn:li:image:*\", required: false },\n \"video-id\": {\n type: \"string\",\n description:\n \"Baker video library id (`baker videos`) — uploaded to LinkedIn at publish; a first publish may ask to retry while the full-quality copy is prepared\",\n required: false,\n },\n \"video-urn\": { type: \"string\", description: \"Existing urn:li:video:*\", required: false },\n \"logo-image-id\": { type: \"string\", description: \"Baker image id for the logo\", required: false },\n \"thumbnail-image-id\": {\n type: \"string\",\n description: \"Baker image id for the article thumbnail\",\n required: false,\n },\n \"thumbnail-urn\": { type: \"string\", description: \"Existing urn:li:image:* thumbnail\", required: false },\n title: { type: \"string\", description: \"Media or article title\", required: false },\n \"lead-form\": {\n type: \"string\",\n description:\n \"Lead gen form the ad opens (image|video|carousel|document|tla): li_temp_* from `lead-forms create` or a form id from `lead-forms`. Required in a LEAD_GENERATION ad set; replaces --landing-url\",\n required: false,\n },\n \"lead-form-button\": {\n type: \"string\",\n description:\n \"APPLY|DOWNLOAD|VIEW_QUOTE|LEARN_MORE|SIGN_UP (default)|SUBSCRIBE|REGISTER|REQUEST_DEMO|JOIN|ATTEND|UNLOCK_FULL_DOCUMENT|SHOP_NOW|BUY_NOW|SEE_MORE\",\n required: false,\n },\n file: { type: \"string\", description: \"JSON file with fields to change; flags override file keys\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.audiences.create\",\n description:\n \"Stage a new matched audience. company-list/user-list take --list-file (CSV with header; companyName,domain,organizationUrn for companies — organizationUrn matches the company page exactly; email column is SHA-256 hashed locally). LinkedIn needs 300+ MATCHED members to serve — upload well above that. retargeting/engagement configs go in --file. Staged until publish.\",\n args: {\n ...writeAccountArgs,\n name: { type: \"string\", description: \"Audience name (≤100 chars)\", required: true },\n type: { type: \"string\", description: \"company-list|user-list|retargeting|engagement\", required: true },\n \"list-file\": { type: \"string\", description: \"CSV file with the list rows\", required: false },\n file: {\n type: \"string\",\n description:\n \"JSON raw source config for retargeting/engagement — sourcePlatform, type USER, and engagementRules (engagementSource, engagementTrigger, timeFrame)\",\n required: false,\n },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.audiences.upload\",\n description:\n \"Stage REPLACING an audience's list with a new file (LinkedIn keeps one list per audience and has no row-level add or remove for this app): send the whole list — to add people, the old rows plus the new; to remove people, the list without them. Same CSV rules as audiences.create.\",\n args: {\n id: { type: \"positional\", description: \"Segment URN/id or li_temp_* ref\", required: true },\n ...writeAccountArgs,\n \"list-file\": {\n type: \"string\",\n description: \"CSV file with the WHOLE list the audience should hold\",\n required: true,\n },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.create\",\n description:\n \"Stage a new conversion rule. Playbook defaults: --post-click-window 30 --view-window 7, counting ONE_TIME_EACH_MEMBER for leads. Staged until publish.\",\n args: {\n ...writeAccountArgs,\n name: { type: \"string\", description: \"Rule name\", required: true },\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 required: true,\n },\n method: { type: \"string\", description: \"INSIGHT_TAG|CONVERSIONS_API\", required: true },\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 required: false,\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 required: false,\n },\n \"attribution-type\": {\n type: \"string\",\n description: \"LAST_TOUCH_BY_CAMPAIGN|LAST_TOUCH_BY_CONVERSION\",\n required: false,\n },\n \"associate-all-campaigns\": {\n type: \"boolean\",\n description: \"Auto-associate with active campaigns\",\n required: false,\n },\n file: { type: \"string\", description: \"JSON payload file (e.g. urlMatchRuleExpression)\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.update\",\n description: \"Stage changes to a conversion rule (windows, attribution, enabled, name). Applies on chat publish.\",\n args: {\n id: { type: \"positional\", description: \"Conversion rule id or URN\", required: true },\n ...writeAccountArgs,\n name: { type: \"string\", description: \"New name\", required: false },\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 required: false,\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 required: false,\n },\n \"attribution-type\": { type: \"string\", description: \"New attribution type\", required: false },\n enabled: { type: \"string\", description: \"on|off\", required: false },\n file: { type: \"string\", description: \"JSON file with fields to change\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.associate-campaign\",\n description:\n \"Count an existing conversion rule for one ad set. Which ad sets a rule counts for is a separate LinkedIn record, not a field on the rule — `conversions update` cannot change it, and `--associate-all-campaigns` exists only on create. Staged until publish.\",\n args: {\n id: { type: \"positional\", description: \"Conversion rule id or URN\", required: true },\n ...writeAccountArgs,\n campaign: { type: \"string\", description: \"Ad set (campaign) id or URN\", required: true },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.dissociate-campaign\",\n description: \"Stop counting an existing conversion rule for one ad set. Staged until publish.\",\n args: {\n id: { type: \"positional\", description: \"Conversion rule id or URN\", required: true },\n ...writeAccountArgs,\n campaign: { type: \"string\", description: \"Ad set (campaign) id or URN\", required: true },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.lead-forms.create\",\n description:\n \"Stage a new Lead Gen Form from a JSON file: {name, headline ≤60, description? ≤160, privacyPolicyUrl, questions[] ≤12 (playbook: ≤4 for completion), thankYou?, legalDisclaimer?}. Staged until publish.\",\n args: {\n ...writeAccountArgs,\n file: { type: \"string\", description: \"JSON form definition file\", required: true },\n name: { type: \"string\", description: \"Override the form name\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.lead-forms.update\",\n description:\n \"Stage changes to a Lead Gen Form. Once its ads are live LinkedIn keeps only the copy editable (headline, description, privacy policy URL, legal disclaimer, thank-you message and link) and the state. Copy is written in the form's own language. Applies on chat publish.\",\n args: {\n id: { type: \"positional\", description: \"Lead form id or URN\", required: true },\n ...writeAccountArgs,\n name: { type: \"string\", description: \"New form name\", required: false },\n state: { type: \"string\", description: \"PUBLISHED|ARCHIVED\", required: false },\n headline: { type: \"string\", description: \"Form headline (≤60)\", required: false },\n description: { type: \"string\", description: \"Form details text\", required: false },\n \"privacy-policy-url\": { type: \"string\", description: \"https privacy policy URL\", required: false },\n \"legal-disclaimer\": { type: \"string\", description: \"Custom legal disclaimer\", required: false },\n \"thank-you-message\": { type: \"string\", description: \"Confirmation message\", required: false },\n \"thank-you-url\": { type: \"string\", description: \"https link on the confirmation screen\", required: false },\n file: { type: \"string\", description: \"JSON file with any of the fields above\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.lead-forms.list\",\n description:\n \"List the ad account's lead gen forms — id, name, state (a DRAFT form can't serve), version, how many questions. --full spells out every form's questions and options; --form-id reads one form in full.\",\n args: {\n ...writeAccountArgs,\n \"form-id\": { type: \"string\", description: \"Read one form (id or urn:li:leadGenForm:N)\", required: false },\n full: { type: \"boolean\", description: \"Every form's questions and options\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.lead-forms.publish\",\n description: \"Stage publishing a DRAFT lead gen form so ads that open it can serve. Applies on chat publish.\",\n args: { id: { type: \"positional\", description: \"Lead form id or URN\", required: true }, ...writeAccountArgs },\n});\n\nregisterSchema({\n command: \"ads.linkedin.lead-forms.archive\",\n description: \"Stage archiving a lead gen form — every ad that opens it stops serving. Applies on chat publish.\",\n args: { id: { type: \"positional\", description: \"Lead form id or URN\", required: true }, ...writeAccountArgs },\n});\n\nregisterSchema({\n command: \"ads.linkedin.audiences.delete\",\n description:\n \"Stage deleting a matched audience already on LinkedIn (its list and targetable twin go too). Refused by LinkedIn while a live ad set targets it. Applies on chat publish.\",\n args: {\n id: { type: \"positional\", description: \"Audience URN (urn:li:dmpSegment:…) or id\", required: true },\n ...writeAccountArgs,\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.account-users\",\n description:\n \"Who works on the ad account and their Campaign Manager role; connectedLinkedin marks the person Baker publishes as — the default sender of a conversation ad.\",\n args: { ...writeAccountArgs },\n});\n\nregisterSchema({\n command: \"ads.linkedin.conversions.upload\",\n description:\n \"Stage CRM / offline conversions (deals won, qualified leads) into a Conversions API rule — LinkedIn credits the ads and bids toward them. --file is a CSV or JSON array: eventId (CRM id; LinkedIn counts a re-sent id once), happenedAt (ISO WITH timezone, last 90 days), and email, or firstName + lastName (+ companyName, title, countryCode), or liFatId; optional value + currency. Emails and names are hashed on the sandbox. ≤2,000 per upload; re-staging for the same rule replaces the rows. Applies on chat publish.\",\n args: {\n id: { type: \"positional\", description: \"Conversions API rule id\", required: true },\n ...writeAccountArgs,\n file: { type: \"string\", description: \"CSV or JSON file of conversions\", required: true },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.revenue\",\n description:\n \"LinkedIn revenue attribution: CRM deals credited to the ads — revenue won (USD), return on ad spend, deals won, win rate, average deal size, days to close — per campaign, campaign group or account. Needs the ad account in a Business Manager with Salesforce, Dynamics 365 or HubSpot connected. 30–366 days within the last year (default last 90).\",\n args: {\n ...writeAccountArgs,\n pivot: { type: \"string\", description: \"campaign (default)|campaign-group|account\", required: false },\n start: { type: \"string\", description: \"First day, YYYY-MM-DD\", required: false },\n end: { type: \"string\", description: \"Last day, YYYY-MM-DD (default today)\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.audiences.list\",\n description:\n \"List matched audiences: status (BUILDING/READY), rows uploaded vs matched, targetingUrn (urn:li:adSegment:…) for targeting and exclusions.\",\n args: { ...writeAccountArgs },\n});\n\nregisterSchema({\n command: \"ads.linkedin.creatives.get\",\n description:\n \"Read one ad as LinkedIn holds it: headline, intro text, landing URL, lead gen form, review status and rejection reasons, and why it isn't serving (notServingBecause).\",\n args: {\n id: { type: \"positional\", description: \"Creative id or urn:li:sponsoredCreative:N\", required: true },\n \"account-id\": { type: \"string\", description: \"Account ID\", required: false },\n \"account-urn\": { type: \"string\", description: \"Alias\", required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.draft.list\",\n description:\n \"Show every LinkedIn write op staged in this chat: ref, summary, dependencies, warnings, and post-publish results. Ops are invisible to the read commands until publish, and publishing reaches the real ad account — check here before finishing.\",\n args: {\n json: {\n type: \"boolean\",\n description: \"Print the raw JSON envelope instead of the readable tree\",\n required: false,\n },\n chat: { type: \"string\", description: CHAT_READ_ARG_DESCRIPTION, required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.draft.remove\",\n description:\n \"Drop one staged LinkedIn op from this chat's draft. Removing a create cascades to every op that depends on it (a campaign removal drops its staged creatives).\",\n args: {\n ref: {\n type: \"positional\",\n description: \"Op ref (li_temp_* for creates, target id/URN for updates)\",\n required: true,\n },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.draft.show\",\n description:\n \"Print the full staged payload for one LinkedIn op — the receipt to verify a change looks right before publish (never truncated), and the only way to read back verbatim what an earlier chat wrote.\",\n args: {\n ref: {\n type: \"positional\",\n description: \"Op ref (li_temp_* for creates, target id/URN for updates)\",\n required: true,\n },\n chat: { type: \"string\", description: CHAT_READ_ARG_DESCRIPTION, required: false },\n },\n});\n\nregisterSchema({\n command: \"ads.linkedin.draft.clear\",\n description: \"Discard ALL staged LinkedIn ops in this chat's draft. Nothing applies on publish.\",\n args: {},\n});\n\nconst experimentAccountArgs = { ...writeAccountArgs };\n\nregisterSchema({\n command: \"ads.linkedin.experiments.list\",\n description:\n \"List A/B tests: state, running (PENDING|RUNNING|ON_HOLD|STOPPED|ENDED), metric, dates, the two versions.\",\n args: experimentAccountArgs,\n});\nregisterSchema({\n command: \"ads.linkedin.experiments.get\",\n description:\n \"One A/B test with LinkedIn's setup checks (ERROR blocks it) and the latest result (winner, p-value, intervals).\",\n args: { id: { type: \"positional\", description: \"A/B test id\", required: true }, ...experimentAccountArgs },\n});\nregisterSchema({\n command: \"ads.linkedin.experiments.create\",\n description:\n \"Stage an A/B test between two ad sets of one campaign (no shared budget), ≤90 days, winner on CPC|CPM|CPV|CPMS. Applies on chat publish.\",\n args: {\n ...experimentAccountArgs,\n name: { type: \"string\", description: \"Test name\", required: true },\n description: { type: \"string\", description: \"What is being tested\", required: false },\n \"version-a\": { type: \"string\", description: \"Ad set for version A (id/URN/li_temp_*)\", required: true },\n \"version-b\": { type: \"string\", description: \"Ad set for version B (id/URN/li_temp_*)\", required: true },\n \"name-a\": { type: \"string\", description: \"Version A label\", required: false },\n \"name-b\": { type: \"string\", description: \"Version B label\", required: false },\n \"weight-a\": { type: \"string\", description: \"Version A audience share 1–99 (default 50)\", required: false },\n metric: { type: \"string\", description: \"CPC|CPM|CPV|CPMS\", required: true },\n confidence: { type: \"string\", description: \"51–99 (default 90)\", required: false },\n start: { type: \"string\", description: \"Start date\", required: true },\n end: { type: \"string\", description: \"End date (≤90 days)\", required: true },\n \"stop-at\": { type: \"string\", description: \"end-date|winner|never\", required: false },\n draft: { type: \"boolean\", description: \"Set up but not running\", required: false },\n },\n});\nregisterSchema({\n command: \"ads.linkedin.experiments.update\",\n description: \"Stage changes to an A/B test (name, description, end, confidence, stop-at). Applies on chat publish.\",\n args: {\n id: { type: \"positional\", description: \"A/B test id\", required: true },\n ...experimentAccountArgs,\n name: { type: \"string\", description: \"New name\", required: false },\n description: { type: \"string\", description: \"New description\", required: false },\n end: { type: \"string\", description: \"New end date\", required: false },\n confidence: { type: \"string\", description: \"51–99\", required: false },\n \"stop-at\": { type: \"string\", description: \"end-date|winner|never\", required: false },\n },\n});\nfor (const [verb, what] of [\n [\"start\", \"Stage starting or resuming an A/B test.\"],\n [\"pause\", \"Stage pausing an A/B test (both ad sets pause).\"],\n [\"end\", \"Stage ending an A/B test for good.\"],\n] as const) {\n registerSchema({\n command: `ads.linkedin.experiments.${verb}`,\n description: `${what} Applies on chat publish.`,\n args: { id: { type: \"positional\", description: \"A/B test id\", required: true }, ...experimentAccountArgs },\n });\n}\n"],"mappings":"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","names":[]}