@koda-sl/baker-cli 0.499.0 → 0.501.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.
- package/README.md +145 -1
- package/dist/{account-CKXOBHXJ.js → account-YSMZB5ZC.js} +4 -4
- package/dist/{account-users-HXNP7NYL.js → account-users-XFNFGZB7.js} +4 -4
- package/dist/{accounts-LT2SMPUS.js → accounts-ZKY6KPU3.js} +3 -3
- package/dist/{accounts-IOBD4PKT.js → accounts-ZYOQSFX5.js} +111 -24
- package/dist/accounts-ZYOQSFX5.js.map +1 -0
- package/dist/{actions-BFO2AQPM.js → actions-PF62UVHS.js} +18 -18
- package/dist/{activecampaign-SDW74BZ7.js → activecampaign-Q7LLZSZ4.js} +3 -3
- package/dist/{add-4ECK6KWH.js → add-3GL76LTP.js} +2 -2
- package/dist/{add-VTFQI3FC.js → add-GDEQN43J.js} +3 -3
- package/dist/{ads-KB5CLOYS.js → ads-HH5YTV4O.js} +5 -5
- package/dist/{advertisers-PZOZHGHW.js → advertisers-B5L4LZW2.js} +3 -3
- package/dist/{analytics-IRE6WG4V.js → analytics-BBX6CU3S.js} +173 -16
- package/dist/analytics-BBX6CU3S.js.map +1 -0
- package/dist/{analytics-CHQNRXSI.js → analytics-WLV24XJE.js} +3 -3
- package/dist/{assign-L2APE23R.js → assign-BSV765I3.js} +3 -3
- package/dist/{audience-size-3X7ARQA3.js → audience-size-KJGSHN45.js} +3 -3
- package/dist/{audit-2J323TJN.js → audit-RKDWAPMX.js} +3 -3
- package/dist/{autocomplete-UMHLUHGJ.js → autocomplete-BNQXAPDX.js} +3 -3
- package/dist/{avatars-C7MXSFPO.js → avatars-TEZP5DQN.js} +4 -4
- package/dist/{bid-pricing-4SZAU7RO.js → bid-pricing-ARPPR45O.js} +4 -4
- package/dist/{brand-DVBQIKST.js → brand-JJDZKJSM.js} +2 -2
- package/dist/{brief-VDF6APJJ.js → brief-FSVESR44.js} +18 -18
- package/dist/{campaign-groups-TYBFAN5H.js → campaign-groups-DRUQ5WBQ.js} +9 -9
- package/dist/{campaign-writes-W2JKFKKQ.js → campaign-writes-SDQ7IPHU.js} +3 -3
- package/dist/{campaigns-P5AOKGER.js → campaigns-FM2V3RIE.js} +12 -12
- package/dist/{campaigns-SR7CBPER.js → campaigns-UDPZIIPK.js} +5 -5
- package/dist/{canvas-U6FVXN3L.js → canvas-WEU5LFUO.js} +13 -13
- package/dist/{capabilities-5HDV5HG5.js → capabilities-HMT6ZBPH.js} +3 -3
- package/dist/{chats-EW3FUVQP.js → chats-77MJ5SIT.js} +3 -3
- package/dist/{check-OTSGPSLX.js → check-TA3HM2QA.js} +5 -5
- package/dist/{chunk-KTT7AHES.js → chunk-2572627P.js} +5 -5
- package/dist/chunk-3HFGJFRM.js +387 -0
- package/dist/chunk-3HFGJFRM.js.map +1 -0
- package/dist/{chunk-CUFS24JZ.js → chunk-3LFPQSSC.js} +3 -3
- package/dist/{chunk-3NMSZMDO.js → chunk-42YFMKEU.js} +3 -3
- package/dist/{chunk-HWIBNIBI.js → chunk-457XEP63.js} +5 -5
- package/dist/{chunk-JO5R2VL6.js → chunk-5KDFRTMY.js} +2 -2
- package/dist/{chunk-RLDQDCW3.js → chunk-5MSRVAUZ.js} +205 -1
- package/dist/{chunk-RLDQDCW3.js.map → chunk-5MSRVAUZ.js.map} +1 -1
- package/dist/{chunk-7EN4X3L2.js → chunk-5YQATOWK.js} +3 -3
- package/dist/{chunk-E27TYQOV.js → chunk-6IE7RGIC.js} +2 -2
- package/dist/{chunk-MVE26PWE.js → chunk-6QBSUYQZ.js} +2 -2
- package/dist/{chunk-YZGG5JFI.js → chunk-AIOICB5Q.js} +2 -2
- package/dist/{chunk-7GK32PCR.js → chunk-ASRS37QE.js} +4 -1
- package/dist/{chunk-7GK32PCR.js.map → chunk-ASRS37QE.js.map} +1 -1
- package/dist/{chunk-H3Q4J7E3.js → chunk-AZH6H4TV.js} +52 -348
- package/dist/chunk-AZH6H4TV.js.map +1 -0
- package/dist/{chunk-HGWK47AD.js → chunk-C4I5NCMG.js} +2 -2
- package/dist/{chunk-KT5HHR4A.js → chunk-DI44SZVP.js} +26 -1
- package/dist/chunk-DI44SZVP.js.map +1 -0
- package/dist/{chunk-MU3Z55CT.js → chunk-DX46OE4U.js} +2 -2
- package/dist/{chunk-DKPRKY5N.js → chunk-FR6RFLFP.js} +6 -6
- package/dist/{chunk-YCTOVJSJ.js → chunk-GNKICND2.js} +3 -3
- package/dist/{chunk-KYVB64R7.js → chunk-GTNNH3AI.js} +2 -2
- package/dist/{chunk-4XIF4ZHU.js → chunk-HITRGZIS.js} +3 -3
- package/dist/{chunk-4WGAB5K3.js → chunk-HNS5OURO.js} +2 -2
- package/dist/{chunk-LORS3LYQ.js → chunk-I2C4IUDP.js} +3 -3
- package/dist/{chunk-XFDHZJ3O.js → chunk-I46D7YXI.js} +2 -2
- package/dist/{chunk-XRMZET4B.js → chunk-JCRGGVV5.js} +2 -2
- package/dist/{chunk-4WFK3CWM.js → chunk-KMRXPNQA.js} +3 -3
- package/dist/{chunk-G7ZEDPJS.js → chunk-LIX4S3ZM.js} +2 -2
- package/dist/{chunk-OK3GNRAN.js → chunk-N4CHIGLO.js} +3 -3
- package/dist/{chunk-ZFBIKJTV.js → chunk-N7KICNZD.js} +3 -3
- package/dist/{chunk-PDLPI4RU.js → chunk-NT3NJVPZ.js} +2 -2
- package/dist/{chunk-5U62OLCB.js → chunk-PFGRHBQY.js} +3 -3
- package/dist/{chunk-O63C32SS.js → chunk-QY4GBBOV.js} +2 -2
- package/dist/{chunk-4MIVJXF7.js → chunk-SP6BZLM4.js} +2 -2
- package/dist/{chunk-PXAHSVME.js → chunk-SSJR3FZ5.js} +2 -2
- package/dist/{chunk-L4QPMKMS.js → chunk-ST2777KW.js} +2 -2
- package/dist/{chunk-HW53ERJX.js → chunk-TESOYFMQ.js} +116 -3
- package/dist/chunk-TESOYFMQ.js.map +1 -0
- package/dist/{chunk-UTFKMUEP.js → chunk-TGQAEHLA.js} +2 -2
- package/dist/{chunk-KMK6SCCT.js → chunk-UC5HG2UF.js} +2 -2
- package/dist/{chunk-ULQ323T2.js → chunk-UQWBJNQY.js} +2 -2
- package/dist/chunk-UX45LDRM.js +63 -0
- package/dist/chunk-UX45LDRM.js.map +1 -0
- package/dist/{chunk-M64MKSUO.js → chunk-VAHDJ5CK.js} +2 -2
- package/dist/{chunk-JYINPRYR.js → chunk-VM4IQ75N.js} +3 -3
- package/dist/{chunk-Y3LWPDK7.js → chunk-VOAWBGRQ.js} +11 -11
- package/dist/{chunk-6VE5U5V3.js → chunk-VRP677NO.js} +2 -2
- package/dist/{chunk-S545M2WZ.js → chunk-VU5Z2V4S.js} +2 -2
- package/dist/{chunk-DB3CF4W3.js → chunk-WAEWKD75.js} +3 -3
- package/dist/{chunk-EO5K26MN.js → chunk-X64DJIZG.js} +3 -3
- package/dist/{chunk-G6AK5QGY.js → chunk-XYBSTW3P.js} +2 -2
- package/dist/{chunk-GAUM75WM.js → chunk-YZYDB77W.js} +11 -11
- package/dist/{chunk-D7ARAKE2.js → chunk-ZEGNIP3Y.js} +3 -3
- package/dist/{chunk-XTQPBB7H.js → chunk-ZNH45NXP.js} +2 -2
- package/dist/{claim-XIC7D3U2.js → claim-CIUU5QEZ.js} +3 -3
- package/dist/cli.js +35 -35
- package/dist/{companies-DKXFLATC.js → companies-VV5XD3BP.js} +3 -3
- package/dist/company-EZH6ZPXD.js +306 -0
- package/dist/company-EZH6ZPXD.js.map +1 -0
- package/dist/{complete-IHHA7BA3.js → complete-NKYCSYKX.js} +3 -3
- package/dist/{connect-XQYH5Z3Q.js → connect-TFH4AFFO.js} +6 -6
- package/dist/{conversation-7LRPE7BB.js → conversation-S6CKSNYW.js} +3 -3
- package/dist/{conversions-DXOKLXT3.js → conversions-KXYOUSBR.js} +8 -8
- package/dist/{create-TAYW7GJG.js → create-BZWX5KLI.js} +3 -3
- package/dist/{create-S47RE4XP.js → create-WEIGJ4BF.js} +3 -3
- package/dist/{create-QMCKARFM.js → create-XKGV6TEW.js} +4 -4
- package/dist/{create-VHKFT7H3.js → create-Y44CPUE4.js} +2 -2
- package/dist/{creatives-QTSFNO6M.js → creatives-P5MX2AZL.js} +12 -12
- package/dist/{creatives-2XB6XHSR.js → creatives-WFDFLRQV.js} +9 -9
- package/dist/{credentials-7PIADYYN.js → credentials-5EOUA5VL.js} +3 -3
- package/dist/{critique-LA45SBLU.js → critique-4ETQZBQG.js} +3 -3
- package/dist/{critique-I27WON42.js → critique-OYUMBZ4Y.js} +9 -9
- package/dist/{crm-55C3E46K.js → crm-6UU3GFQU.js} +4 -4
- package/dist/{crm-FVGGMG7U.js → crm-UGP57XSN.js} +8 -6
- package/dist/{crm-FVGGMG7U.js.map → crm-UGP57XSN.js.map} +1 -1
- package/dist/{customers-XZHBRDQQ.js → customers-RT75T4ZB.js} +5 -5
- package/dist/{delete-GL4OMCDS.js → delete-37IIUYQU.js} +2 -2
- package/dist/{delete-MHLZD4IH.js → delete-E575BF73.js} +3 -3
- package/dist/{delete-4GMTTYAG.js → delete-GQYFBLMP.js} +4 -4
- package/dist/{demographics-A3LFPWWB.js → demographics-3LIUI2SM.js} +3 -3
- package/dist/{discard-R62Z2GRI.js → discard-7OARQRS7.js} +3 -3
- package/dist/{domain-FP3X4RPV.js → domain-ZRWUGUOO.js} +3 -3
- package/dist/{draft-ZQIIOMPK.js → draft-CVSGNA4Z.js} +4 -4
- package/dist/{draft-BVEDTUA4.js → draft-SNBK2KY6.js} +3 -3
- package/dist/{draft-6G42C54W.js → draft-UHNTXGY7.js} +3 -3
- package/dist/{experiments-BEI7TSXE.js → experiments-IGMLMSLX.js} +4 -4
- package/dist/{facets-ORUDWFIR.js → facets-AURXB76V.js} +3 -3
- package/dist/{feedback-7DLHRUIT.js → feedback-UDTPDCMS.js} +12 -12
- package/dist/{feedback-record-D3YQATBI.js → feedback-record-Z34XJF6K.js} +15 -15
- package/dist/{fetch-BOLHAMIY.js → fetch-GR3FXFXL.js} +3 -3
- package/dist/{fit-SXBVVQQS.js → fit-SLEEJWVR.js} +5 -5
- package/dist/{flows-4BPONEMG.js → flows-NAFSRRY2.js} +10 -10
- package/dist/{fonts-ILG2LCR7.js → fonts-POBAXXBC.js} +5 -5
- package/dist/{forecast-BVJNW22S.js → forecast-RN6VUKLS.js} +4 -4
- package/dist/{funnel-6FWZR37B.js → funnel-O3XOHYI3.js} +5 -5
- package/dist/{get-AO2SBDZ7.js → get-2MC5LYXY.js} +4 -4
- package/dist/{get-DOADISOP.js → get-UQ43T25B.js} +3 -3
- package/dist/{google-BR4JIK4N.js → google-ZZCSZR63.js} +2 -2
- package/dist/{google-ads-MGKOFGLF.js → google-ads-7DJ5STPS.js} +3 -3
- package/dist/{history-EER4TMPN.js → history-QRM76S4Q.js} +3 -3
- package/dist/{hubspot-RJQLUHCP.js → hubspot-HVZNR2IR.js} +7 -7
- package/dist/{ideas-6G2XB2A7.js → ideas-S2UXZSFB.js} +4 -4
- package/dist/{images-ESOTRMAR.js → images-FYSBKRU6.js} +4 -4
- package/dist/{ingest-HQPM4IXX.js → ingest-37F3NOLA.js} +3 -3
- package/dist/{ingest-QCZ2T3HB.js → ingest-YQINQGG7.js} +2 -2
- package/dist/{inspect-CS5CWS63.js → inspect-RVU5RDCE.js} +3 -3
- package/dist/{inspiration-CW4ADEPT.js → inspiration-QJNUFRNH.js} +1 -1
- package/dist/{keyword-metrics-SRLCDGCB.js → keyword-metrics-7XZXPSQO.js} +3 -3
- package/dist/{keywords-for-site-NIXJTFHX.js → keywords-for-site-A43QNTLD.js} +3 -3
- package/dist/{landing-GEGH44N7.js → landing-NFDGD3PQ.js} +3 -3
- package/dist/{leads-DN3YPCWV.js → leads-UHJS7VNH.js} +3 -3
- package/dist/{learn-NND26TEZ.js → learn-POJ5ORBK.js} +7 -7
- package/dist/{line-item-writes-VXQMZR4N.js → line-item-writes-K4BSUEIJ.js} +3 -3
- package/dist/{line-items-JGR3FTBD.js → line-items-DLLEPPIN.js} +5 -5
- package/dist/{link-I76EC43Z.js → link-L2KC5EIZ.js} +3 -3
- package/dist/{linkedin-Q2BXWGLB.js → linkedin-A4U6IGZX.js} +29 -29
- package/dist/linkedin-person-DSLAOKKN.js +137 -0
- package/dist/linkedin-person-DSLAOKKN.js.map +1 -0
- package/dist/{list-DKWE4K6V.js → list-JKB33W6K.js} +3 -3
- package/dist/{list-ADHUKLAD.js → list-PHWCEYCP.js} +4 -4
- package/dist/{list-BQ5SNHNQ.js → list-Y4V276ND.js} +2 -2
- package/dist/{log-FS62QUM3.js → log-O3I5JZCM.js} +3 -3
- package/dist/{lookup-7RVOMACQ.js → lookup-LWJMDEEL.js} +4 -4
- package/dist/{make-5I42FGDO.js → make-GLGNEOK6.js} +27 -27
- package/dist/{map-JDJWCS4P.js → map-D3EH7S2T.js} +4 -4
- package/dist/{mcp-C2MWMHHE.js → mcp-R4ZTYQW7.js} +2 -2
- package/dist/{media-sources-5ORQD73O.js → media-sources-TVGS34TE.js} +2 -2
- package/dist/{members-JKTEP3DI.js → members-OBA4MXAQ.js} +3 -3
- package/dist/{normalize-3XCYFEVP.js → normalize-HU37AR7G.js} +3 -3
- package/dist/{options-EJR2SXSU.js → options-HLMTCEDW.js} +6 -6
- package/dist/{organization-RQWXAP54.js → organization-6ZVXU5JC.js} +3 -3
- package/dist/{performance-DLSLM6AF.js → performance-PIB2AXKO.js} +4 -4
- package/dist/{performance-4S66FDTV.js → performance-V5WZCJYT.js} +4 -4
- package/dist/{plan-DKBAIKX5.js → plan-O2TTEUIW.js} +3 -3
- package/dist/{posts-YCSPJOIZ.js → posts-QAMZRCRY.js} +1 -1
- package/dist/{promoted-tweet-writes-FDTWY3QV.js → promoted-tweet-writes-E4EJZM76.js} +3 -3
- package/dist/{promoted-tweets-WW344XNC.js → promoted-tweets-M44AIHSQ.js} +3 -3
- package/dist/{publish-NBLDZ2XR.js → publish-H7UGB5IP.js} +3 -3
- package/dist/{questionnaire-K3A4UUIC.js → questionnaire-VE42SW77.js} +3 -3
- package/dist/{reddit-HB2HVXTF.js → reddit-KCPU4RW4.js} +4 -4
- package/dist/{refresh-WNGERQQX.js → refresh-WTSCSEQE.js} +2 -2
- package/dist/{release-SBWWWKS5.js → release-SVOT7QVX.js} +3 -3
- package/dist/{remove-2OCCFOLM.js → remove-TY3AF5K5.js} +2 -2
- package/dist/{reopen-OLC5N2DP.js → reopen-WCUZMTYE.js} +3 -3
- package/dist/{rerun-5RR5S6ZA.js → rerun-FKYNFNSI.js} +15 -15
- package/dist/{research-AXFZWZB3.js → research-N2RWKIRQ.js} +20 -10
- package/dist/research-N2RWKIRQ.js.map +1 -0
- package/dist/{research-ZJQHXOA4.js → research-X6ITCPFY.js} +2 -2
- package/dist/{reset-GI4KMBOE.js → reset-O77UZD6Z.js} +2 -2
- package/dist/{reset-W4QDDUJ6.js → reset-TDAMB4BO.js} +2 -2
- package/dist/{resolve-CLA3URVJ.js → resolve-NC4MLM42.js} +3 -3
- package/dist/{retry-HSS7M5JC.js → retry-QNXWTHOL.js} +2 -2
- package/dist/{retry-5QIHXNZH.js → retry-XVUWY7ZH.js} +2 -2
- package/dist/{revenue-QONCHT4J.js → revenue-D3B4DMBC.js} +4 -4
- package/dist/{rules-DGN24SWA.js → rules-Y3BH7SO5.js} +5 -5
- package/dist/{rules-add-436Y2CWL.js → rules-add-GSPFBNYU.js} +7 -7
- package/dist/{run-XBZMGAWD.js → run-G6XAJOJ7.js} +4 -4
- package/dist/{run-I5Q42M5Q.js → run-ON72O5YS.js} +15 -15
- package/dist/{scaffold-ad-DUJO3TKG.js → scaffold-ad-YF6FUEJZ.js} +13 -13
- package/dist/{scaffold-static-ad-UMXD5JH7.js → scaffold-static-ad-KZRXH4WS.js} +41 -36
- package/dist/scaffold-static-ad-KZRXH4WS.js.map +1 -0
- package/dist/{scaffold-video-YJ4A7SLO.js → scaffold-video-BUOCGJNH.js} +13 -13
- package/dist/{schedule-P3442SHR.js → schedule-7EQLO22N.js} +2 -2
- package/dist/{scheduled-agents-J7HFCJMZ.js → scheduled-agents-4WCPCMYC.js} +10 -10
- package/dist/{schema-N44JKNJ3.js → schema-6Y3IXFDC.js} +2 -2
- package/dist/{schema-DPU5NCWO.js → schema-KM5MFQUQ.js} +4 -4
- package/dist/{search-FZUJCC5F.js → search-YEYQDDLA.js} +2 -2
- package/dist/{select-5MMLVDG7.js → select-QSGZYOFV.js} +11 -11
- package/dist/{sends-LEESHU62.js → sends-OLVQGOAE.js} +3 -3
- package/dist/{set-prompt-SQGQTJVP.js → set-prompt-4OTBGPDQ.js} +9 -9
- package/dist/{setup-links-QF6FIS6N.js → setup-links-E2GARNTU.js} +3 -3
- package/dist/{shopify-OXUYVDND.js → shopify-GT6PJ77M.js} +3 -3
- package/dist/{site-YVZQSAIW.js → site-TMF2P7JR.js} +4 -4
- package/dist/{sources-NWM6SI4P.js → sources-47LE2UCO.js} +8 -8
- package/dist/{sources-3IVHGGTH.js → sources-H6XX2WBO.js} +6 -6
- package/dist/{stale-ZBULRUS7.js → stale-JTX5U752.js} +10 -10
- package/dist/{status-RUXOUOPA.js → status-3X3MECDY.js} +3 -3
- package/dist/{studio-LYHZFTA3.js → studio-Z4AJRIGP.js} +1 -1
- package/dist/{sync-XKRY2D2J.js → sync-HWTVXGOT.js} +2 -2
- package/dist/{sync-definition-HVHXWEDR.js → sync-definition-CAPYMYIS.js} +10 -10
- package/dist/{tag-manager-F7PVTDBB.js → tag-manager-TU3FBSYO.js} +1 -1
- package/dist/{tags-K5FVDHPH.js → tags-75QCVBQB.js} +4 -4
- package/dist/{tags-WPPGJN2C.js → tags-7BT63PUE.js} +3 -3
- package/dist/{tags-PBUZJQHN.js → tags-7K5RSCHI.js} +3 -3
- package/dist/{tags-6PQ37XO5.js → tags-IELH7YAY.js} +3 -3
- package/dist/{tags-3U5K3EVI.js → tags-UPA4KKQZ.js} +2 -2
- package/dist/{targeting-criteria-OZ74V2DC.js → targeting-criteria-HJQ2FW6E.js} +3 -3
- package/dist/{targets-Y4I65HD2.js → targets-CBZ37ALP.js} +4 -4
- package/dist/{testimonials-XNBDJHEN.js → testimonials-4W6HI2PQ.js} +6 -6
- package/dist/{top-companies-KMY4LVNU.js → top-companies-CW77UVK3.js} +3 -3
- package/dist/transcript-FA2TOVPP.js +163 -0
- package/dist/transcript-FA2TOVPP.js.map +1 -0
- package/dist/{translate-QOS2PQQF.js → translate-7W7O6W3J.js} +17 -17
- package/dist/{triggers-54BIQKZY.js → triggers-MCP6IGTX.js} +4 -4
- package/dist/{unlink-QB2XWRNT.js → unlink-RK5V4QO2.js} +3 -3
- package/dist/{unstage-2TF3RJND.js → unstage-5JTGVEB7.js} +4 -4
- package/dist/{unstage-GUQCHRDA.js → unstage-QFVL7AZ4.js} +3 -3
- package/dist/{update-INO3OXFQ.js → update-5AAMF5JP.js} +4 -4
- package/dist/{update-ITHM3F2E.js → update-G2KB3RIW.js} +3 -3
- package/dist/{update-74SGZ2ZZ.js → update-LCE2QN53.js} +3 -3
- package/dist/{update-WGOPKNRC.js → update-M6DFI2XC.js} +5 -4
- package/dist/update-M6DFI2XC.js.map +1 -0
- package/dist/{upload-VZZJ2GEQ.js → upload-ORFEAADP.js} +3 -3
- package/dist/{url-options-YT6CT62P.js → url-options-6U7QCTAY.js} +2 -2
- package/dist/{url-params-PPPS5PC7.js → url-params-KQIUVVGX.js} +3 -3
- package/dist/{validate-VVLREMQO.js → validate-BF656HWM.js} +11 -11
- package/dist/{videos-ILTQAHWU.js → videos-66FB7BPY.js} +5 -5
- package/dist/{viewer-check-2XRID6KP.js → viewer-check-THBLTL2G.js} +6 -6
- package/dist/{web-JEBZUHD6.js → web-2EKHRXCS.js} +3 -3
- package/dist/{winning-ads-JZ2DYSYA.js → winning-ads-LW5SMMLB.js} +3 -3
- package/dist/{write-commands-IRFDR3TN.js → write-commands-Z556OHHH.js} +4 -4
- package/dist/{x-KB5FJNQ2.js → x-F5CSO2RN.js} +6 -6
- package/package.json +1 -1
- package/dist/accounts-IOBD4PKT.js.map +0 -1
- package/dist/analytics-IRE6WG4V.js.map +0 -1
- package/dist/chunk-H3Q4J7E3.js.map +0 -1
- package/dist/chunk-HW53ERJX.js.map +0 -1
- package/dist/chunk-KT5HHR4A.js.map +0 -1
- package/dist/research-AXFZWZB3.js.map +0 -1
- package/dist/scaffold-static-ad-UMXD5JH7.js.map +0 -1
- package/dist/update-WGOPKNRC.js.map +0 -1
- /package/dist/{account-CKXOBHXJ.js.map → account-YSMZB5ZC.js.map} +0 -0
- /package/dist/{account-users-HXNP7NYL.js.map → account-users-XFNFGZB7.js.map} +0 -0
- /package/dist/{accounts-LT2SMPUS.js.map → accounts-ZKY6KPU3.js.map} +0 -0
- /package/dist/{actions-BFO2AQPM.js.map → actions-PF62UVHS.js.map} +0 -0
- /package/dist/{activecampaign-SDW74BZ7.js.map → activecampaign-Q7LLZSZ4.js.map} +0 -0
- /package/dist/{add-4ECK6KWH.js.map → add-3GL76LTP.js.map} +0 -0
- /package/dist/{add-VTFQI3FC.js.map → add-GDEQN43J.js.map} +0 -0
- /package/dist/{ads-KB5CLOYS.js.map → ads-HH5YTV4O.js.map} +0 -0
- /package/dist/{advertisers-PZOZHGHW.js.map → advertisers-B5L4LZW2.js.map} +0 -0
- /package/dist/{analytics-CHQNRXSI.js.map → analytics-WLV24XJE.js.map} +0 -0
- /package/dist/{assign-L2APE23R.js.map → assign-BSV765I3.js.map} +0 -0
- /package/dist/{audience-size-3X7ARQA3.js.map → audience-size-KJGSHN45.js.map} +0 -0
- /package/dist/{audit-2J323TJN.js.map → audit-RKDWAPMX.js.map} +0 -0
- /package/dist/{autocomplete-UMHLUHGJ.js.map → autocomplete-BNQXAPDX.js.map} +0 -0
- /package/dist/{avatars-C7MXSFPO.js.map → avatars-TEZP5DQN.js.map} +0 -0
- /package/dist/{bid-pricing-4SZAU7RO.js.map → bid-pricing-ARPPR45O.js.map} +0 -0
- /package/dist/{brand-DVBQIKST.js.map → brand-JJDZKJSM.js.map} +0 -0
- /package/dist/{brief-VDF6APJJ.js.map → brief-FSVESR44.js.map} +0 -0
- /package/dist/{campaign-groups-TYBFAN5H.js.map → campaign-groups-DRUQ5WBQ.js.map} +0 -0
- /package/dist/{campaign-writes-W2JKFKKQ.js.map → campaign-writes-SDQ7IPHU.js.map} +0 -0
- /package/dist/{campaigns-P5AOKGER.js.map → campaigns-FM2V3RIE.js.map} +0 -0
- /package/dist/{campaigns-SR7CBPER.js.map → campaigns-UDPZIIPK.js.map} +0 -0
- /package/dist/{canvas-U6FVXN3L.js.map → canvas-WEU5LFUO.js.map} +0 -0
- /package/dist/{capabilities-5HDV5HG5.js.map → capabilities-HMT6ZBPH.js.map} +0 -0
- /package/dist/{chats-EW3FUVQP.js.map → chats-77MJ5SIT.js.map} +0 -0
- /package/dist/{check-OTSGPSLX.js.map → check-TA3HM2QA.js.map} +0 -0
- /package/dist/{chunk-KTT7AHES.js.map → chunk-2572627P.js.map} +0 -0
- /package/dist/{chunk-CUFS24JZ.js.map → chunk-3LFPQSSC.js.map} +0 -0
- /package/dist/{chunk-3NMSZMDO.js.map → chunk-42YFMKEU.js.map} +0 -0
- /package/dist/{chunk-HWIBNIBI.js.map → chunk-457XEP63.js.map} +0 -0
- /package/dist/{chunk-JO5R2VL6.js.map → chunk-5KDFRTMY.js.map} +0 -0
- /package/dist/{chunk-7EN4X3L2.js.map → chunk-5YQATOWK.js.map} +0 -0
- /package/dist/{chunk-E27TYQOV.js.map → chunk-6IE7RGIC.js.map} +0 -0
- /package/dist/{chunk-MVE26PWE.js.map → chunk-6QBSUYQZ.js.map} +0 -0
- /package/dist/{chunk-YZGG5JFI.js.map → chunk-AIOICB5Q.js.map} +0 -0
- /package/dist/{chunk-HGWK47AD.js.map → chunk-C4I5NCMG.js.map} +0 -0
- /package/dist/{chunk-MU3Z55CT.js.map → chunk-DX46OE4U.js.map} +0 -0
- /package/dist/{chunk-DKPRKY5N.js.map → chunk-FR6RFLFP.js.map} +0 -0
- /package/dist/{chunk-YCTOVJSJ.js.map → chunk-GNKICND2.js.map} +0 -0
- /package/dist/{chunk-KYVB64R7.js.map → chunk-GTNNH3AI.js.map} +0 -0
- /package/dist/{chunk-4XIF4ZHU.js.map → chunk-HITRGZIS.js.map} +0 -0
- /package/dist/{chunk-4WGAB5K3.js.map → chunk-HNS5OURO.js.map} +0 -0
- /package/dist/{chunk-LORS3LYQ.js.map → chunk-I2C4IUDP.js.map} +0 -0
- /package/dist/{chunk-XFDHZJ3O.js.map → chunk-I46D7YXI.js.map} +0 -0
- /package/dist/{chunk-XRMZET4B.js.map → chunk-JCRGGVV5.js.map} +0 -0
- /package/dist/{chunk-4WFK3CWM.js.map → chunk-KMRXPNQA.js.map} +0 -0
- /package/dist/{chunk-G7ZEDPJS.js.map → chunk-LIX4S3ZM.js.map} +0 -0
- /package/dist/{chunk-OK3GNRAN.js.map → chunk-N4CHIGLO.js.map} +0 -0
- /package/dist/{chunk-ZFBIKJTV.js.map → chunk-N7KICNZD.js.map} +0 -0
- /package/dist/{chunk-PDLPI4RU.js.map → chunk-NT3NJVPZ.js.map} +0 -0
- /package/dist/{chunk-5U62OLCB.js.map → chunk-PFGRHBQY.js.map} +0 -0
- /package/dist/{chunk-O63C32SS.js.map → chunk-QY4GBBOV.js.map} +0 -0
- /package/dist/{chunk-4MIVJXF7.js.map → chunk-SP6BZLM4.js.map} +0 -0
- /package/dist/{chunk-PXAHSVME.js.map → chunk-SSJR3FZ5.js.map} +0 -0
- /package/dist/{chunk-L4QPMKMS.js.map → chunk-ST2777KW.js.map} +0 -0
- /package/dist/{chunk-UTFKMUEP.js.map → chunk-TGQAEHLA.js.map} +0 -0
- /package/dist/{chunk-KMK6SCCT.js.map → chunk-UC5HG2UF.js.map} +0 -0
- /package/dist/{chunk-ULQ323T2.js.map → chunk-UQWBJNQY.js.map} +0 -0
- /package/dist/{chunk-M64MKSUO.js.map → chunk-VAHDJ5CK.js.map} +0 -0
- /package/dist/{chunk-JYINPRYR.js.map → chunk-VM4IQ75N.js.map} +0 -0
- /package/dist/{chunk-Y3LWPDK7.js.map → chunk-VOAWBGRQ.js.map} +0 -0
- /package/dist/{chunk-6VE5U5V3.js.map → chunk-VRP677NO.js.map} +0 -0
- /package/dist/{chunk-S545M2WZ.js.map → chunk-VU5Z2V4S.js.map} +0 -0
- /package/dist/{chunk-DB3CF4W3.js.map → chunk-WAEWKD75.js.map} +0 -0
- /package/dist/{chunk-EO5K26MN.js.map → chunk-X64DJIZG.js.map} +0 -0
- /package/dist/{chunk-G6AK5QGY.js.map → chunk-XYBSTW3P.js.map} +0 -0
- /package/dist/{chunk-GAUM75WM.js.map → chunk-YZYDB77W.js.map} +0 -0
- /package/dist/{chunk-D7ARAKE2.js.map → chunk-ZEGNIP3Y.js.map} +0 -0
- /package/dist/{chunk-XTQPBB7H.js.map → chunk-ZNH45NXP.js.map} +0 -0
- /package/dist/{claim-XIC7D3U2.js.map → claim-CIUU5QEZ.js.map} +0 -0
- /package/dist/{companies-DKXFLATC.js.map → companies-VV5XD3BP.js.map} +0 -0
- /package/dist/{complete-IHHA7BA3.js.map → complete-NKYCSYKX.js.map} +0 -0
- /package/dist/{connect-XQYH5Z3Q.js.map → connect-TFH4AFFO.js.map} +0 -0
- /package/dist/{conversation-7LRPE7BB.js.map → conversation-S6CKSNYW.js.map} +0 -0
- /package/dist/{conversions-DXOKLXT3.js.map → conversions-KXYOUSBR.js.map} +0 -0
- /package/dist/{create-TAYW7GJG.js.map → create-BZWX5KLI.js.map} +0 -0
- /package/dist/{create-S47RE4XP.js.map → create-WEIGJ4BF.js.map} +0 -0
- /package/dist/{create-QMCKARFM.js.map → create-XKGV6TEW.js.map} +0 -0
- /package/dist/{create-VHKFT7H3.js.map → create-Y44CPUE4.js.map} +0 -0
- /package/dist/{creatives-QTSFNO6M.js.map → creatives-P5MX2AZL.js.map} +0 -0
- /package/dist/{creatives-2XB6XHSR.js.map → creatives-WFDFLRQV.js.map} +0 -0
- /package/dist/{credentials-7PIADYYN.js.map → credentials-5EOUA5VL.js.map} +0 -0
- /package/dist/{critique-LA45SBLU.js.map → critique-4ETQZBQG.js.map} +0 -0
- /package/dist/{critique-I27WON42.js.map → critique-OYUMBZ4Y.js.map} +0 -0
- /package/dist/{crm-55C3E46K.js.map → crm-6UU3GFQU.js.map} +0 -0
- /package/dist/{customers-XZHBRDQQ.js.map → customers-RT75T4ZB.js.map} +0 -0
- /package/dist/{delete-GL4OMCDS.js.map → delete-37IIUYQU.js.map} +0 -0
- /package/dist/{delete-MHLZD4IH.js.map → delete-E575BF73.js.map} +0 -0
- /package/dist/{delete-4GMTTYAG.js.map → delete-GQYFBLMP.js.map} +0 -0
- /package/dist/{demographics-A3LFPWWB.js.map → demographics-3LIUI2SM.js.map} +0 -0
- /package/dist/{discard-R62Z2GRI.js.map → discard-7OARQRS7.js.map} +0 -0
- /package/dist/{domain-FP3X4RPV.js.map → domain-ZRWUGUOO.js.map} +0 -0
- /package/dist/{draft-ZQIIOMPK.js.map → draft-CVSGNA4Z.js.map} +0 -0
- /package/dist/{draft-BVEDTUA4.js.map → draft-SNBK2KY6.js.map} +0 -0
- /package/dist/{draft-6G42C54W.js.map → draft-UHNTXGY7.js.map} +0 -0
- /package/dist/{experiments-BEI7TSXE.js.map → experiments-IGMLMSLX.js.map} +0 -0
- /package/dist/{facets-ORUDWFIR.js.map → facets-AURXB76V.js.map} +0 -0
- /package/dist/{feedback-7DLHRUIT.js.map → feedback-UDTPDCMS.js.map} +0 -0
- /package/dist/{feedback-record-D3YQATBI.js.map → feedback-record-Z34XJF6K.js.map} +0 -0
- /package/dist/{fetch-BOLHAMIY.js.map → fetch-GR3FXFXL.js.map} +0 -0
- /package/dist/{fit-SXBVVQQS.js.map → fit-SLEEJWVR.js.map} +0 -0
- /package/dist/{flows-4BPONEMG.js.map → flows-NAFSRRY2.js.map} +0 -0
- /package/dist/{fonts-ILG2LCR7.js.map → fonts-POBAXXBC.js.map} +0 -0
- /package/dist/{forecast-BVJNW22S.js.map → forecast-RN6VUKLS.js.map} +0 -0
- /package/dist/{funnel-6FWZR37B.js.map → funnel-O3XOHYI3.js.map} +0 -0
- /package/dist/{get-AO2SBDZ7.js.map → get-2MC5LYXY.js.map} +0 -0
- /package/dist/{get-DOADISOP.js.map → get-UQ43T25B.js.map} +0 -0
- /package/dist/{google-BR4JIK4N.js.map → google-ZZCSZR63.js.map} +0 -0
- /package/dist/{google-ads-MGKOFGLF.js.map → google-ads-7DJ5STPS.js.map} +0 -0
- /package/dist/{history-EER4TMPN.js.map → history-QRM76S4Q.js.map} +0 -0
- /package/dist/{hubspot-RJQLUHCP.js.map → hubspot-HVZNR2IR.js.map} +0 -0
- /package/dist/{ideas-6G2XB2A7.js.map → ideas-S2UXZSFB.js.map} +0 -0
- /package/dist/{images-ESOTRMAR.js.map → images-FYSBKRU6.js.map} +0 -0
- /package/dist/{ingest-HQPM4IXX.js.map → ingest-37F3NOLA.js.map} +0 -0
- /package/dist/{ingest-QCZ2T3HB.js.map → ingest-YQINQGG7.js.map} +0 -0
- /package/dist/{inspect-CS5CWS63.js.map → inspect-RVU5RDCE.js.map} +0 -0
- /package/dist/{inspiration-CW4ADEPT.js.map → inspiration-QJNUFRNH.js.map} +0 -0
- /package/dist/{keyword-metrics-SRLCDGCB.js.map → keyword-metrics-7XZXPSQO.js.map} +0 -0
- /package/dist/{keywords-for-site-NIXJTFHX.js.map → keywords-for-site-A43QNTLD.js.map} +0 -0
- /package/dist/{landing-GEGH44N7.js.map → landing-NFDGD3PQ.js.map} +0 -0
- /package/dist/{leads-DN3YPCWV.js.map → leads-UHJS7VNH.js.map} +0 -0
- /package/dist/{learn-NND26TEZ.js.map → learn-POJ5ORBK.js.map} +0 -0
- /package/dist/{line-item-writes-VXQMZR4N.js.map → line-item-writes-K4BSUEIJ.js.map} +0 -0
- /package/dist/{line-items-JGR3FTBD.js.map → line-items-DLLEPPIN.js.map} +0 -0
- /package/dist/{link-I76EC43Z.js.map → link-L2KC5EIZ.js.map} +0 -0
- /package/dist/{linkedin-Q2BXWGLB.js.map → linkedin-A4U6IGZX.js.map} +0 -0
- /package/dist/{list-DKWE4K6V.js.map → list-JKB33W6K.js.map} +0 -0
- /package/dist/{list-ADHUKLAD.js.map → list-PHWCEYCP.js.map} +0 -0
- /package/dist/{list-BQ5SNHNQ.js.map → list-Y4V276ND.js.map} +0 -0
- /package/dist/{log-FS62QUM3.js.map → log-O3I5JZCM.js.map} +0 -0
- /package/dist/{lookup-7RVOMACQ.js.map → lookup-LWJMDEEL.js.map} +0 -0
- /package/dist/{make-5I42FGDO.js.map → make-GLGNEOK6.js.map} +0 -0
- /package/dist/{map-JDJWCS4P.js.map → map-D3EH7S2T.js.map} +0 -0
- /package/dist/{mcp-C2MWMHHE.js.map → mcp-R4ZTYQW7.js.map} +0 -0
- /package/dist/{media-sources-5ORQD73O.js.map → media-sources-TVGS34TE.js.map} +0 -0
- /package/dist/{members-JKTEP3DI.js.map → members-OBA4MXAQ.js.map} +0 -0
- /package/dist/{normalize-3XCYFEVP.js.map → normalize-HU37AR7G.js.map} +0 -0
- /package/dist/{options-EJR2SXSU.js.map → options-HLMTCEDW.js.map} +0 -0
- /package/dist/{organization-RQWXAP54.js.map → organization-6ZVXU5JC.js.map} +0 -0
- /package/dist/{performance-DLSLM6AF.js.map → performance-PIB2AXKO.js.map} +0 -0
- /package/dist/{performance-4S66FDTV.js.map → performance-V5WZCJYT.js.map} +0 -0
- /package/dist/{plan-DKBAIKX5.js.map → plan-O2TTEUIW.js.map} +0 -0
- /package/dist/{posts-YCSPJOIZ.js.map → posts-QAMZRCRY.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-FDTWY3QV.js.map → promoted-tweet-writes-E4EJZM76.js.map} +0 -0
- /package/dist/{promoted-tweets-WW344XNC.js.map → promoted-tweets-M44AIHSQ.js.map} +0 -0
- /package/dist/{publish-NBLDZ2XR.js.map → publish-H7UGB5IP.js.map} +0 -0
- /package/dist/{questionnaire-K3A4UUIC.js.map → questionnaire-VE42SW77.js.map} +0 -0
- /package/dist/{reddit-HB2HVXTF.js.map → reddit-KCPU4RW4.js.map} +0 -0
- /package/dist/{refresh-WNGERQQX.js.map → refresh-WTSCSEQE.js.map} +0 -0
- /package/dist/{release-SBWWWKS5.js.map → release-SVOT7QVX.js.map} +0 -0
- /package/dist/{remove-2OCCFOLM.js.map → remove-TY3AF5K5.js.map} +0 -0
- /package/dist/{reopen-OLC5N2DP.js.map → reopen-WCUZMTYE.js.map} +0 -0
- /package/dist/{rerun-5RR5S6ZA.js.map → rerun-FKYNFNSI.js.map} +0 -0
- /package/dist/{research-ZJQHXOA4.js.map → research-X6ITCPFY.js.map} +0 -0
- /package/dist/{reset-GI4KMBOE.js.map → reset-O77UZD6Z.js.map} +0 -0
- /package/dist/{reset-W4QDDUJ6.js.map → reset-TDAMB4BO.js.map} +0 -0
- /package/dist/{resolve-CLA3URVJ.js.map → resolve-NC4MLM42.js.map} +0 -0
- /package/dist/{retry-HSS7M5JC.js.map → retry-QNXWTHOL.js.map} +0 -0
- /package/dist/{retry-5QIHXNZH.js.map → retry-XVUWY7ZH.js.map} +0 -0
- /package/dist/{revenue-QONCHT4J.js.map → revenue-D3B4DMBC.js.map} +0 -0
- /package/dist/{rules-DGN24SWA.js.map → rules-Y3BH7SO5.js.map} +0 -0
- /package/dist/{rules-add-436Y2CWL.js.map → rules-add-GSPFBNYU.js.map} +0 -0
- /package/dist/{run-XBZMGAWD.js.map → run-G6XAJOJ7.js.map} +0 -0
- /package/dist/{run-I5Q42M5Q.js.map → run-ON72O5YS.js.map} +0 -0
- /package/dist/{scaffold-ad-DUJO3TKG.js.map → scaffold-ad-YF6FUEJZ.js.map} +0 -0
- /package/dist/{scaffold-video-YJ4A7SLO.js.map → scaffold-video-BUOCGJNH.js.map} +0 -0
- /package/dist/{schedule-P3442SHR.js.map → schedule-7EQLO22N.js.map} +0 -0
- /package/dist/{scheduled-agents-J7HFCJMZ.js.map → scheduled-agents-4WCPCMYC.js.map} +0 -0
- /package/dist/{schema-N44JKNJ3.js.map → schema-6Y3IXFDC.js.map} +0 -0
- /package/dist/{schema-DPU5NCWO.js.map → schema-KM5MFQUQ.js.map} +0 -0
- /package/dist/{search-FZUJCC5F.js.map → search-YEYQDDLA.js.map} +0 -0
- /package/dist/{select-5MMLVDG7.js.map → select-QSGZYOFV.js.map} +0 -0
- /package/dist/{sends-LEESHU62.js.map → sends-OLVQGOAE.js.map} +0 -0
- /package/dist/{set-prompt-SQGQTJVP.js.map → set-prompt-4OTBGPDQ.js.map} +0 -0
- /package/dist/{setup-links-QF6FIS6N.js.map → setup-links-E2GARNTU.js.map} +0 -0
- /package/dist/{shopify-OXUYVDND.js.map → shopify-GT6PJ77M.js.map} +0 -0
- /package/dist/{site-YVZQSAIW.js.map → site-TMF2P7JR.js.map} +0 -0
- /package/dist/{sources-NWM6SI4P.js.map → sources-47LE2UCO.js.map} +0 -0
- /package/dist/{sources-3IVHGGTH.js.map → sources-H6XX2WBO.js.map} +0 -0
- /package/dist/{stale-ZBULRUS7.js.map → stale-JTX5U752.js.map} +0 -0
- /package/dist/{status-RUXOUOPA.js.map → status-3X3MECDY.js.map} +0 -0
- /package/dist/{studio-LYHZFTA3.js.map → studio-Z4AJRIGP.js.map} +0 -0
- /package/dist/{sync-XKRY2D2J.js.map → sync-HWTVXGOT.js.map} +0 -0
- /package/dist/{sync-definition-HVHXWEDR.js.map → sync-definition-CAPYMYIS.js.map} +0 -0
- /package/dist/{tag-manager-F7PVTDBB.js.map → tag-manager-TU3FBSYO.js.map} +0 -0
- /package/dist/{tags-K5FVDHPH.js.map → tags-75QCVBQB.js.map} +0 -0
- /package/dist/{tags-WPPGJN2C.js.map → tags-7BT63PUE.js.map} +0 -0
- /package/dist/{tags-PBUZJQHN.js.map → tags-7K5RSCHI.js.map} +0 -0
- /package/dist/{tags-6PQ37XO5.js.map → tags-IELH7YAY.js.map} +0 -0
- /package/dist/{tags-3U5K3EVI.js.map → tags-UPA4KKQZ.js.map} +0 -0
- /package/dist/{targeting-criteria-OZ74V2DC.js.map → targeting-criteria-HJQ2FW6E.js.map} +0 -0
- /package/dist/{targets-Y4I65HD2.js.map → targets-CBZ37ALP.js.map} +0 -0
- /package/dist/{testimonials-XNBDJHEN.js.map → testimonials-4W6HI2PQ.js.map} +0 -0
- /package/dist/{top-companies-KMY4LVNU.js.map → top-companies-CW77UVK3.js.map} +0 -0
- /package/dist/{translate-QOS2PQQF.js.map → translate-7W7O6W3J.js.map} +0 -0
- /package/dist/{triggers-54BIQKZY.js.map → triggers-MCP6IGTX.js.map} +0 -0
- /package/dist/{unlink-QB2XWRNT.js.map → unlink-RK5V4QO2.js.map} +0 -0
- /package/dist/{unstage-2TF3RJND.js.map → unstage-5JTGVEB7.js.map} +0 -0
- /package/dist/{unstage-GUQCHRDA.js.map → unstage-QFVL7AZ4.js.map} +0 -0
- /package/dist/{update-INO3OXFQ.js.map → update-5AAMF5JP.js.map} +0 -0
- /package/dist/{update-ITHM3F2E.js.map → update-G2KB3RIW.js.map} +0 -0
- /package/dist/{update-74SGZ2ZZ.js.map → update-LCE2QN53.js.map} +0 -0
- /package/dist/{upload-VZZJ2GEQ.js.map → upload-ORFEAADP.js.map} +0 -0
- /package/dist/{url-options-YT6CT62P.js.map → url-options-6U7QCTAY.js.map} +0 -0
- /package/dist/{url-params-PPPS5PC7.js.map → url-params-KQIUVVGX.js.map} +0 -0
- /package/dist/{validate-VVLREMQO.js.map → validate-BF656HWM.js.map} +0 -0
- /package/dist/{videos-ILTQAHWU.js.map → videos-66FB7BPY.js.map} +0 -0
- /package/dist/{viewer-check-2XRID6KP.js.map → viewer-check-THBLTL2G.js.map} +0 -0
- /package/dist/{web-JEBZUHD6.js.map → web-2EKHRXCS.js.map} +0 -0
- /package/dist/{winning-ads-JZ2DYSYA.js.map → winning-ads-LW5SMMLB.js.map} +0 -0
- /package/dist/{write-commands-IRFDR3TN.js.map → write-commands-Z556OHHH.js.map} +0 -0
- /package/dist/{x-KB5FJNQ2.js.map → x-F5CSO2RN.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/accounts/index.ts","../src/commands/accounts/report.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport {\n ACCOUNTS_ENGAGEMENT_MAX_LIMIT,\n type AccountsCampaignsResponse,\n type AccountsCompanyRequest,\n type AccountsCompanyResponse,\n type AccountsEngagementRequest,\n type AccountsEngagementResponse,\n type AccountsInfluencedResponse,\n accountsCampaignsRequestSchema,\n accountsCompanyRequestSchema,\n accountsEngagementRequestSchema,\n accountsInfluencedRequestSchema,\n INFLUENCE_MODEL_KINDS,\n type MoneyByCurrency,\n type TargetsSummary,\n warmAccounts,\n} from \"@baker/api/accounts\";\nimport { defineCommand } from \"citty\";\nimport { z } from \"zod\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi } from \"../actions/shared.ts\";\nimport { outputFormatRefusal, TABLE_OUTPUT_FORMATS, writeAdsOutput } from \"../ads/output.ts\";\nimport {\n accountsRefusal,\n companyView,\n ENGAGEMENT_TABLE_FIELDS,\n engagementHints,\n engagementTableRows,\n influencedHints,\n influencedTableRows,\n invalidArgsMessage,\n targetsHints,\n warmAccountsCsv,\n warmHints,\n warmMinimum,\n withDealStatus,\n} from \"./report.ts\";\nimport { readTargetsFile, type TargetsFile } from \"./targets.ts\";\n\n/**\n * `baker accounts` — which companies the LinkedIn ads are warming, and which\n * CRM deals they influenced. Reads the nightly Account insights sync; nothing\n * here calls LinkedIn or the CRM, and nothing changes anywhere.\n */\n\nfunction optionalNumber(raw: unknown): number | undefined {\n return typeof raw === \"string\" && raw.trim() !== \"\" ? Number(raw) : undefined;\n}\n\nfunction optionalString(raw: unknown): string | undefined {\n return typeof raw === \"string\" && raw.trim() !== \"\" ? raw.trim() : undefined;\n}\n\nfunction failInvalidArgs(message: string): never {\n writeJson({ ok: false, error: { code: \"INVALID_ARGS\", message } });\n process.exit(1);\n}\n\n/** A request the schema refuses never reaches the store; say which flag, in the envelope. */\nfunction failInvalid(issues: ReadonlyArray<{ path: PropertyKey[]; message: string }>): never {\n failInvalidArgs(invalidArgsMessage(issues));\n}\n\n/** `--output` as asked, refused with the supported list instead of quietly printing JSON. */\nfunction outputFormat(args: Record<string, unknown>, supported: readonly string[]): string {\n const format = optionalString(args.output) ?? \"json\";\n const refusal = outputFormatRefusal(format, supported);\n if (refusal !== null) failInvalidArgs(refusal);\n return format;\n}\n\nconst OUTPUT_ARG = {\n type: \"string\",\n description: \"json|csv|jsonl|md (default json). csv/jsonl/md print the rows only; the summary and hints go to stderr\",\n required: false,\n default: \"json\",\n} as const;\n\nconst RULE_ARGS = {\n model: {\n type: \"string\",\n description:\n \"Read this report with another influence model, for this call only (the saved settings stay): engagement (engagements), awareness (impressions) or intent (clicks)\",\n required: false,\n },\n threshold: {\n type: \"string\",\n description:\n \"Read this report with another threshold on the model's metric, for this call only (a whole number, 1 or more)\",\n required: false,\n },\n} as const;\n\nfunction ruleInput(args: Record<string, unknown>): { model?: string; threshold?: number } {\n return { model: optionalString(args.model), threshold: optionalNumber(args.threshold) };\n}\n\nfunction moneyText(value: MoneyByCurrency): string {\n return Object.entries(value)\n .map(([currency, amount]) => `${Math.round(amount)} ${currency}`)\n .join(\" + \");\n}\n\n/** \"Not set up\" becomes the fix the agent relays; everything else is the ordinary error envelope. */\nfunction failAccounts(err: unknown): never {\n const refusal = err instanceof ApiError ? accountsRefusal(err.code, err.message) : null;\n if (err instanceof ApiError && refusal !== null) {\n writeJson({ ok: false, error: { code: refusal.code, message: err.message, fix: refusal.fix } });\n process.exit(1);\n }\n failApi(err);\n}\n\nconst WINDOW_ARGS = {\n \"last-months\": {\n type: \"string\",\n description: \"Calendar months to read, the current one included (1-24)\",\n required: false,\n },\n start: { type: \"string\", description: \"First day, YYYY-MM-DD (instead of --last-months)\", required: false },\n end: { type: \"string\", description: \"Last day, YYYY-MM-DD (default today; needs --start)\", required: false },\n} as const;\n\nconst TARGETS_ARG = {\n targets: {\n type: \"string\",\n description:\n 'Only these target accounts: a .csv (a domain or website column; name and tier optional) or a .json file ([\"acme.com\", …] or [{\"domain\": \"acme.com\", \"tier\": 1}, …]). Rows and numbers narrow to them, and `targets` says how many were reached and engaged, per tier, and which were never reached. Build one from the Knowledge with `node __tooling__/scripts/target-accounts.mjs --out targets.csv`',\n required: false,\n },\n} as const;\n\n/** `--targets` read and reduced to domains; refused in the envelope when the file cannot be read or names none. */\nfunction targetsInput(args: Record<string, unknown>): TargetsFile | null {\n const path = optionalString(args.targets);\n if (path === undefined) return null;\n let read: TargetsFile;\n try {\n read = readTargetsFile(path, readFileSync(path, \"utf8\"));\n } catch (err) {\n failInvalidArgs(`--targets: ${err instanceof Error ? err.message : String(err)}`);\n }\n if (read.targets.length === 0) failInvalidArgs(`--targets: ${path} names no company website.`);\n return read;\n}\n\n/** The hints a `--targets` read adds; none without one. */\nfunction withTargetsHints(hints: string[], read: TargetsFile | null, summary: TargetsSummary | undefined): string[] {\n return read === null ? hints : [...targetsHints(summary, read.unreadable), ...hints];\n}\n\nfunction windowInput(args: Record<string, unknown>): { lastMonths?: number; start?: string; end?: string } {\n return {\n lastMonths: optionalNumber(args[\"last-months\"]),\n start: optionalString(args.start),\n end: optionalString(args.end),\n };\n}\n\n// --- influenced ---\n\nconst INFLUENCED_ARGS = {\n basis: {\n type: \"string\",\n description: \"pipeline (default): deals created in the period and not won. revenue: deals closed won in the period\",\n required: false,\n default: \"pipeline\",\n },\n ...WINDOW_ARGS,\n full: {\n type: \"boolean\",\n description: \"Every deal in the period, influenced or not, instead of the influenced ones\",\n required: false,\n default: false,\n },\n ...RULE_ARGS,\n ...TARGETS_ARG,\n output: OUTPUT_ARG,\n} as const;\n\nconst DEAL_TABLE_FIELDS = [\n \"dealId\",\n \"dealName\",\n \"companyName\",\n \"domain\",\n \"amount\",\n \"currency\",\n \"status\",\n \"referenceAt\",\n \"touchValue\",\n \"firstTouchMonth\",\n \"matchConfidence\",\n \"influenced\",\n \"crmCompanyId\",\n];\n\nfunction influencedSummaryLine(data: AccountsInfluencedResponse[\"data\"]): string {\n const { summary, rule } = data;\n const value = moneyText(summary.influencedValue) || \"no amount\";\n return `${summary.influencedDeals} of ${summary.deals} ${data.basis} deals influenced (${value}) — ${rule.threshold}+ ${rule.metric} in the ${rule.lookbackMonths} months up to each deal, ${data.window.start} to ${data.window.end}.`;\n}\n\nregisterSchema({\n command: \"accounts.influenced\",\n description:\n \"Start here for 'what pipeline / revenue did our LinkedIn ads influence'. A deal is influenced when its company reached the company's influence rule (default: 3+ LinkedIn ad engagements) in the 12 months up to and including the month the deal was created (pipeline) or closed won (revenue). A labelled rule, not credit: never call it 'attributed' or split it. Returns {summary: {deals, influencedDeals, influencedValue per currency, lowConfidenceDeals, spend, valuePerSpend}, deals, lowConfidence}. Amounts in different currencies are never added. Default the last 12 calendar months. --model/--threshold read it with another rule for this call only (\\\"what if we counted 5+ engagements\\\"); --targets <file> narrows it to the target accounts' deals; --output csv|md|jsonl prints the deals.\",\n args: INFLUENCED_ARGS,\n});\n\nconst influencedCommand = defineCommand({\n meta: {\n name: \"influenced\",\n description:\n \"Deals the LinkedIn ads influenced, with influenced pipeline or revenue. Example: baker accounts influenced --basis revenue --last-months 6\",\n },\n args: INFLUENCED_ARGS,\n run: async ({ args }) => {\n const format = outputFormat(args, TABLE_OUTPUT_FORMATS);\n const targets = targetsInput(args);\n const parsed = accountsInfluencedRequestSchema.safeParse({\n ...windowInput(args),\n ...ruleInput(args),\n basis: optionalString(args.basis),\n full: Boolean(args.full),\n targets: targets?.targets,\n });\n if (!parsed.success) failInvalid(parsed.error.issues);\n try {\n const response = await apiPost<AccountsInfluencedResponse>(\"/api/accounts/influenced\", parsed.data);\n const hints = withTargetsHints(influencedHints(response.data), targets, response.data.targets);\n if (format !== \"json\") {\n const rows = influencedTableRows(response.data, parsed.data.full);\n writeAdsOutput(rows, format, DEAL_TABLE_FIELDS, [influencedSummaryLine(response.data), ...hints]);\n return;\n }\n writeJson({ ...response, meta: { count: response.data.deals.length }, ...(hints.length > 0 ? { hints } : {}) });\n } catch (err) {\n failAccounts(err);\n }\n },\n});\n\n// --- engagement ---\n\nconst ENGAGEMENT_ARGS = {\n ...WINDOW_ARGS,\n \"campaign-id\": { type: \"string\", description: \"Only this campaign's companies (numeric id)\", required: false },\n limit: {\n type: \"string\",\n description: `Companies per page, 1-${ACCOUNTS_ENGAGEMENT_MAX_LIMIT} (default 500)`,\n required: false,\n },\n page: {\n type: \"string\",\n description:\n \"Which page to read, 1-based, most engaged first (default 1). pageInfo.hasMore says another page follows; pageInfo.total counts every company reached\",\n required: false,\n },\n ...TARGETS_ARG,\n output: OUTPUT_ARG,\n} as const;\n\nregisterSchema({\n command: \"accounts.engagement\",\n description:\n \"Every company the LinkedIn ads reached, most engaged first, with the period before for comparison, New/Rising flags, and where it stands in the CRM (matched company; dealStatus won > open > lost > none, lost meaning every deal it had was lost; lastLostAt). Default the last 3 calendar months. From the nightly sync, so it is fast and covers up to 24 months; for a live read of one ad account use `baker ads linkedin companies`. Paged: --limit companies per page, --page N; pageInfo {page, pageSize, total, hasMore}. --targets <file> keeps the target accounts only and adds `targets` {total, reached, engaged, notReached, byTier}.\",\n args: ENGAGEMENT_ARGS,\n});\n\nfunction engagementInput(\n args: Record<string, unknown>,\n targets: TargetsFile | null,\n limit?: number,\n): AccountsEngagementRequest {\n return {\n ...windowInput(args),\n campaignId: optionalString(args[\"campaign-id\"])?.replace(/^urn:li:sponsoredCampaign:/, \"\"),\n limit: limit ?? optionalNumber(args.limit),\n page: limit === undefined ? optionalNumber(args.page) : undefined,\n targets: targets?.targets,\n };\n}\n\nconst engagementCommand = defineCommand({\n meta: {\n name: \"engagement\",\n description:\n \"Companies the LinkedIn ads reached, with New/Rising flags and CRM status. Example: baker accounts engagement --last-months 3 --limit 50\",\n },\n args: ENGAGEMENT_ARGS,\n run: async ({ args }) => {\n const format = outputFormat(args, TABLE_OUTPUT_FORMATS);\n const targets = targetsInput(args);\n const parsed = accountsEngagementRequestSchema.safeParse(engagementInput(args, targets));\n if (!parsed.success) failInvalid(parsed.error.issues);\n try {\n const response = await apiPost<AccountsEngagementResponse>(\"/api/accounts/engagement\", parsed.data);\n const hints = withTargetsHints(engagementHints(response.data, parsed.data), targets, response.data.targets);\n if (format !== \"json\") {\n writeAdsOutput(engagementTableRows(response.data.companies), format, ENGAGEMENT_TABLE_FIELDS, hints);\n return;\n }\n const companies = withDealStatus(response.data.companies);\n writeJson({\n ...response,\n data: { ...response.data, companies },\n meta: { count: companies.length, ...(response.data.pageInfo ? { total: response.data.pageInfo.total } : {}) },\n ...(hints.length > 0 ? { hints } : {}),\n });\n } catch (err) {\n failAccounts(err);\n }\n },\n});\n\n// --- warm ---\n\nconst warmRuleSchema = z.object({\n model: z.enum(INFLUENCE_MODEL_KINDS).optional(),\n threshold: z.number().int().min(1).optional(),\n min: z.number().int().min(0).optional(),\n});\n\nconst WARM_ARGS = {\n ...WINDOW_ARGS,\n \"campaign-id\": ENGAGEMENT_ARGS[\"campaign-id\"],\n min: {\n type: \"string\",\n description:\n \"Least a company must have done this period on the rule's metric to count as warm (default: the company's influence threshold, e.g. 3 engagements; 0 keeps every New/Rising company)\",\n required: false,\n },\n ...RULE_ARGS,\n ...TARGETS_ARG,\n output: {\n type: \"string\",\n description:\n \"json (default) or csv — csv prints companyName,domain,organizationUrn, the file `baker ads linkedin audiences create --type company-list --list-file` takes\",\n required: false,\n default: \"json\",\n },\n} as const;\n\nregisterSchema({\n command: \"accounts.warm\",\n description:\n \"Warm accounts: companies engaging with the LinkedIn ads more than in the period before (New: nothing before; Rising: engagements at least doubled) that reached the company's influence threshold this period (e.g. 3+ engagements; --min overrides, --min 0 drops it) and are not already somebody's deal: no open deal, never won (customers are left out), and no deal lost in the last 6 months (an older loss no longer counts). Default the current calendar month against the one before. `--output csv > warm.csv` writes a company list ready for `baker ads linkedin audiences create --type company-list --list-file warm.csv` (LinkedIn needs 300+ matched members to serve). --targets <file> keeps the warm target accounts only and adds `targets` (reached and engaged among them).\",\n args: WARM_ARGS,\n});\n\nconst warmCommand = defineCommand({\n meta: {\n name: \"warm\",\n description:\n \"Companies warming up that are not in pipeline, customers, or recently lost. Example: baker accounts warm --last-months 1 --output csv > warm.csv\",\n },\n args: WARM_ARGS,\n run: async ({ args }) => {\n const format = outputFormat(args, [\"json\", \"csv\"]);\n const rule = warmRuleSchema.safeParse({ ...ruleInput(args), min: optionalNumber(args.min) });\n if (!rule.success) failInvalid(rule.error.issues);\n const targets = targetsInput(args);\n const input = engagementInput(args, targets, ACCOUNTS_ENGAGEMENT_MAX_LIMIT);\n const parsed = accountsEngagementRequestSchema.safeParse(\n input.start === undefined && input.lastMonths === undefined ? { ...input, lastMonths: 1 } : input,\n );\n if (!parsed.success) failInvalid(parsed.error.issues);\n try {\n const response = await apiPost<AccountsEngagementResponse>(\"/api/accounts/engagement\", parsed.data);\n const minimum = warmMinimum(response.data.rule, rule.data);\n const warm = warmAccounts(response.data.companies, new Date().toISOString().slice(0, 10), { minimum });\n const hints = withTargetsHints(warmHints(response.data, warm, minimum), targets, response.data.targets);\n if (format === \"csv\") {\n process.stdout.write(warmAccountsCsv(warm));\n for (const hint of hints) process.stderr.write(`${hint}\\n`);\n return;\n }\n writeJson({\n ok: true,\n data: {\n window: response.data.window,\n previousWindow: response.data.previousWindow,\n minimum: minimum ?? null,\n ...(response.data.targets ? { targets: response.data.targets } : {}),\n companies: withDealStatus(warm),\n },\n meta: { count: warm.length },\n ...(hints.length > 0 ? { hints } : {}),\n });\n } catch (err) {\n failAccounts(err);\n }\n },\n});\n\n// --- company ---\n\nconst COMPANY_ARGS = {\n company: {\n type: \"positional\",\n description: \"LinkedIn company id (1035), its urn:li:organization URN, or a website domain (acme.com)\",\n required: true,\n },\n} as const;\n\nregisterSchema({\n command: \"accounts.company\",\n description:\n \"One company's story: its month-by-month totals (`months`), the same numbers split by LinkedIn campaign (`byCampaign` — overlapping, never add it to the totals), the CRM company it matched and how surely, and that company's deals, each with `touchValue` and `influenced` under the company's rule. Use it to show why a deal counts as influenced.\",\n args: COMPANY_ARGS,\n});\n\n/** A bare number or an organization URN is a LinkedIn id; anything else is a domain. */\nfunction companyRequest(raw: string): AccountsCompanyRequest {\n const value = raw.trim();\n return /^(urn:li:organization:)?\\d+$/.test(value) ? { orgId: value } : { domain: value };\n}\n\nconst companyCommand = defineCommand({\n meta: {\n name: \"company\",\n description: \"One company's monthly LinkedIn ad activity and its deals. Example: baker accounts company acme.com\",\n },\n args: COMPANY_ARGS,\n run: async ({ args }) => {\n const parsed = accountsCompanyRequestSchema.safeParse(companyRequest(String(args.company ?? \"\")));\n if (!parsed.success) failInvalid(parsed.error.issues);\n try {\n const response = await apiPost<AccountsCompanyResponse>(\"/api/accounts/company\", parsed.data);\n const view = companyView(response.data);\n writeJson({ ok: true, data: view.data, ...(view.hints.length > 0 ? { hints: view.hints } : {}) });\n } catch (err) {\n failAccounts(err);\n }\n },\n});\n\n// --- campaigns ---\n\nconst CAMPAIGNS_ARGS = {\n basis: INFLUENCED_ARGS.basis,\n ...WINDOW_ARGS,\n ...RULE_ARGS,\n ...TARGETS_ARG,\n output: OUTPUT_ARG,\n} as const;\n\nconst CAMPAIGN_TABLE_FIELDS = [\n \"campaignId\",\n \"campaignName\",\n \"companiesReached\",\n \"companiesEngaged\",\n \"influencedDeals\",\n \"influencedValue\",\n];\n\nregisterSchema({\n command: \"accounts.campaigns\",\n description:\n \"Per LinkedIn campaign: companies reached and engaged in the period, and the influenced deals it touched in their lookback — pipeline (default: deals created and not won) or, with --basis revenue, deals closed won. Overlapping by design — a deal counts for every campaign that touched it, so the rows never sum to the total; read them as a comparison, not a split. Default the last 12 calendar months. --model/--threshold read it with another rule for this call only; --targets <file> counts the target accounts only.\",\n args: CAMPAIGNS_ARGS,\n});\n\nconst campaignsCommand = defineCommand({\n meta: {\n name: \"campaigns\",\n description:\n \"Companies reached and influenced pipeline or revenue per campaign. Example: baker accounts campaigns --basis revenue --last-months 6\",\n },\n args: CAMPAIGNS_ARGS,\n run: async ({ args }) => {\n const format = outputFormat(args, TABLE_OUTPUT_FORMATS);\n const targets = targetsInput(args);\n const input = {\n basis: optionalString(args.basis),\n ...windowInput(args),\n ...ruleInput(args),\n targets: targets?.targets,\n };\n const parsed = accountsCampaignsRequestSchema.safeParse(input);\n if (!parsed.success) failInvalid(parsed.error.issues);\n try {\n const response = await apiPost<AccountsCampaignsResponse>(\"/api/accounts/campaigns\", parsed.data);\n const hints = withTargetsHints(\n [\"Campaign rows overlap: a deal counts for every campaign that touched it. Never add them up.\"],\n targets,\n response.data.targets,\n );\n if (format !== \"json\") {\n const rows = response.data.campaigns.map((row) => ({\n ...row,\n influencedValue: moneyText(row.influencedValue),\n }));\n writeAdsOutput(rows, format, CAMPAIGN_TABLE_FIELDS, hints);\n return;\n }\n writeJson({ ...response, meta: { count: response.data.campaigns.length }, hints });\n } catch (err) {\n failAccounts(err);\n }\n },\n});\n\nexport const accountsCommand = defineCommand({\n meta: {\n name: \"accounts\",\n description:\n \"Account insights: which companies the LinkedIn ads are warming, and which CRM deals they influenced. Start with `baker accounts influenced` or `baker accounts warm`.\",\n },\n subCommands: {\n influenced: influencedCommand,\n engagement: engagementCommand,\n warm: warmCommand,\n company: companyCommand,\n campaigns: campaignsCommand,\n crm: () => import(\"./crm.ts\").then((m) => m.crmCommand),\n },\n});\n","/**\n * The pure half of `baker accounts`: the warm-account list file, and what the\n * agent should take from a report that the rows alone don't say.\n */\n\nimport {\n ACCOUNTS_NO_SETTINGS_MESSAGE,\n type AccountCompanyMonth,\n type AccountDealRow,\n type AccountDealStatus,\n type AccountEngagementRow,\n type AccountsCompanyResponse,\n type AccountsEngagementResponse,\n type AccountsInfluencedResponse,\n accountDealStatus,\n type InfluenceMetric,\n type InfluenceModelKind,\n type InfluenceParams,\n type InfluenceRuleOverride,\n influenceParams,\n type MoneyByCurrency,\n type WarmAccountsOptions,\n} from \"@baker/api/accounts\";\nimport type { TargetsSummary } from \"@baker/api/accounts/targets\";\nimport { toCsvRow } from \"../ads/output.ts\";\n\nexport type AccountsRefusal = { code: \"ACCOUNTS_NOT_SET_UP\"; fix: { action: \"ask_user\"; explanation: string } };\n\n/**\n * The refusal the agent cannot clear, as the fix it acts on: not set up (only\n * the user can say which stages mean won). Matched on the backend's own\n * sentence (shared from `@baker/api/accounts`), because it is a CONFLICT.\n * Null for every other refusal.\n */\nexport function accountsRefusal(code: string, message: string): AccountsRefusal | null {\n if (code === \"CONFLICT\" && message.includes(ACCOUNTS_NO_SETTINGS_MESSAGE)) {\n return {\n code: \"ACCOUNTS_NOT_SET_UP\",\n fix: {\n action: \"ask_user\",\n explanation:\n \"The user sets up where the deals are in Measure → Accounts first: HubSpot (then its pipelines and won/lost stages), or Another CRM, whose deals they send by spreadsheet or from their system (`baker accounts crm status`). Only the user can say which stages mean won and lost; do not guess them. Until then `baker accounts engagement` and `baker accounts warm` still work — they need no deals.\",\n },\n };\n }\n return null;\n}\n\n/** Request fields as the flags that set them. */\nconst FLAG_OF_FIELD: Record<string, string> = {\n lastMonths: \"--last-months\",\n start: \"--start\",\n end: \"--end\",\n campaignId: \"--campaign-id\",\n limit: \"--limit\",\n basis: \"--basis\",\n model: \"--model\",\n threshold: \"--threshold\",\n orgId: \"company\",\n domain: \"company\",\n targets: \"--targets\",\n};\n\n/** A refused request in the agent's own words: which flag, and why. */\nexport function invalidArgsMessage(issues: ReadonlyArray<{ path: PropertyKey[]; message: string }>): string {\n return issues\n .map((issue) => {\n const field = issue.path.map(String).join(\".\");\n return `${FLAG_OF_FIELD[field] ?? (field || \"args\")}: ${issue.message}`;\n })\n .join(\"; \");\n}\n\nfunction money(value: MoneyByCurrency): string {\n const parts = Object.entries(value).map(\n ([currency, amount]) => `${Math.round(amount).toLocaleString(\"en\")} ${currency}`,\n );\n return parts.length > 0 ? parts.join(\" + \") : \"no amount\";\n}\n\n/** What the agent should take from an influenced report that the rows alone don't say. */\nexport function influencedHints(data: AccountsInfluencedResponse[\"data\"]): string[] {\n const hints: string[] = [];\n const { summary } = data;\n if (summary.lowConfidenceDeals > 0) {\n const deals = summary.lowConfidenceDeals === 1 ? \"deal\" : \"deals\";\n const look = summary.lowConfidenceDeals === 1 ? \"looks\" : \"look\";\n hints.push(\n `${summary.lowConfidenceDeals} more ${deals} (${money(summary.lowConfidenceValue)}) ${look} influenced through a company match that is only a guess (a subdomain or a name). They are not counted in the numbers until someone confirms the match in Measure → Accounts; they are listed under lowConfidence.`,\n );\n }\n const valued = Object.keys(summary.influencedValue).length > 0;\n const spent = Object.values(summary.spend).some((amount) => amount > 0);\n if (summary.valuePerSpend === null && valued && spent) {\n hints.push(\n `valuePerSpend is null because the influenced value (${money(summary.influencedValue)}) and the LinkedIn spend (${money(summary.spend)}) are not in one single currency — amounts in different currencies are never converted or added. Report them side by side.`,\n );\n }\n return hints;\n}\n\n/**\n * The deals a table output prints: the counted ones, then the unconfirmed. With\n * `--full` the backend already lists the unconfirmed among `deals`, so they are\n * not added twice — a total taken from the table would count them double.\n */\nexport function influencedTableRows(data: AccountsInfluencedResponse[\"data\"], full: boolean): AccountDealRow[] {\n return full ? data.deals : [...data.deals, ...data.lowConfidence];\n}\n\n/** What the agent should take from an engagement read that the rows alone don't say. */\nexport function engagementHints(data: AccountsEngagementResponse[\"data\"], request: { limit: number }): string[] {\n if (data.companies.length === 0) {\n return [\n `No company the LinkedIn ads reached shows up for ${data.window.start} to ${data.window.end}. The nightly sync may not have run since the campaigns started delivering, or LinkedIn left the companies out (fewer than 3 events in a month). Try a longer period (--last-months 12), or read the ad account live with \\`baker ads linkedin companies\\`.`,\n ];\n }\n const page = data.pageInfo;\n if (page?.hasMore) {\n const first = (page.page - 1) * page.pageSize + 1;\n const last = first + data.companies.length - 1;\n return [\n `Companies ${first}-${last} of ${page.total.toLocaleString(\"en\")} shown. Read the next ones with --page ${page.page + 1} --limit ${page.pageSize}.`,\n ];\n }\n return data.truncated ? [`More companies were reached than --limit ${request.limit}; raise it to see the tail.`] : [];\n}\n\n/** The columns `baker accounts engagement --output csv|md` prints, in order. */\nexport const ENGAGEMENT_TABLE_FIELDS = [\n \"orgId\",\n \"name\",\n \"domain\",\n \"impressions\",\n \"clicks\",\n \"engagements\",\n \"videoViews\",\n \"costLocal\",\n \"currency\",\n \"monthsActive\",\n \"lastMonth\",\n \"previousImpressions\",\n \"previousClicks\",\n \"previousEngagements\",\n \"flag\",\n \"crmCompanyId\",\n \"matchConfidence\",\n \"dealStatus\",\n \"hasOpenDeal\",\n \"hasWonDeal\",\n \"hasLostDeal\",\n \"lastLostAt\",\n \"websitePeople\",\n \"websiteLeads\",\n \"websiteVisits\",\n \"websitePagesRead\",\n \"websiteLastVisit\",\n];\n\n/** Engagement rows flat for a table: the period before as three columns, the website people as two and the company's own-network visits as three, not JSON cells. */\nexport function engagementTableRows(rows: readonly AccountEngagementRow[]): Array<Record<string, unknown>> {\n return withDealStatus(rows).map(({ previous, website, visitorCompany, ...row }) => ({\n ...row,\n previousImpressions: previous.impressions,\n previousClicks: previous.clicks,\n previousEngagements: previous.engagements,\n websitePeople: website?.people ?? 0,\n websiteLeads: website?.leads ?? 0,\n websiteVisits: visitorCompany?.visits ?? 0,\n websitePagesRead: visitorCompany?.pages ?? 0,\n websiteLastVisit: visitorCompany?.lastSeen ?? null,\n }));\n}\n\nconst MODEL_OF_METRIC: Record<InfluenceMetric, InfluenceModelKind> = {\n engagements: \"engagement\",\n impressions: \"awareness\",\n clicks: \"intent\",\n};\n\n/**\n * The least a warm company must have done this period: the company's\n * influence rule (the default one when the backend sent none), read for this\n * call with `--model`/`--threshold`, or `--min` on the rule's metric. `--min 0`\n * drops it, so one engagement after none reads as warm again.\n */\nexport function warmMinimum(\n rule: InfluenceParams | undefined,\n override: InfluenceRuleOverride & { min?: number },\n): WarmAccountsOptions[\"minimum\"] {\n const saved = { model: { kind: rule ? MODEL_OF_METRIC[rule.metric] : \"engagement\", threshold: rule?.threshold } };\n const read = influenceParams(saved, { model: override.model, threshold: override.threshold });\n const value = override.min ?? read.threshold;\n return value > 0 ? { metric: read.metric, value } : undefined;\n}\n\n/** What the agent should take from a warm list that the rows alone don't say. */\nexport function warmHints(\n read: Pick<AccountsEngagementResponse[\"data\"], \"companies\" | \"truncated\">,\n warm: readonly AccountEngagementRow[],\n minimum: WarmAccountsOptions[\"minimum\"],\n): string[] {\n const hints: string[] = [];\n if (read.truncated) {\n hints.push(\n `The ads reached more companies than one read returns (${read.companies.length.toLocaleString(\"en\")}, the most engaged first), so warm companies with little engagement may be missing. Read a shorter period with --last-months 1 to see them.`,\n );\n }\n if (warm.length === 0 && read.companies.length > 0 && minimum !== undefined) {\n hints.push(\n `No company both warmed up and reached ${minimum.value}+ ${minimum.metric} in the period. Try a longer period with --last-months, or a lower bar with --min (--min 0 drops it).`,\n );\n }\n if (warm.some((row) => row.name === \"\")) {\n hints.push(\"Some companies have no name yet — the nightly sync looks them up; the organizationUrn still matches.\");\n }\n if (warm.length > 0) {\n hints.push(\n 'To advertise to them: `baker accounts warm --output csv > warm.csv`, then `baker ads linkedin audiences create --name \"Warm accounts\" --type company-list --list-file warm.csv` (staged until publish).',\n );\n }\n return hints;\n}\n\n/** The header `baker ads linkedin audiences create --type company-list --list-file` reads. */\nconst WARM_CSV_COLUMNS = [\"companyName\", \"domain\", \"organizationUrn\"];\n\n/**\n * Warm accounts as a company-list file, one company a line. The list reader\n * splits on line breaks, so a name carrying one is flattened.\n */\nexport function warmAccountsCsv(rows: readonly AccountEngagementRow[]): string {\n const lines = [toCsvRow(WARM_CSV_COLUMNS)];\n for (const row of rows) {\n const name = row.name.replace(/\\s*[\\r\\n]+\\s*/g, \" \");\n lines.push(toCsvRow([name, row.domain, `urn:li:organization:${row.orgId}`]));\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nconst plural = (count: number, one: string, many: string) => `${count} ${count === 1 ? one : many}`;\n\nfunction reachText(counts: { total: number; reached: number; engaged: number }): string {\n return `${counts.reached} of ${counts.total} reached, ${counts.engaged} engaged`;\n}\n\n/**\n * What a `--targets` read means beyond its rows: how far the ads got with the\n * list, the targets never reached, and the file entries that were skipped.\n * No summary back means a server that ignored the list.\n */\nexport function targetsHints(summary: TargetsSummary | undefined, unreadable: readonly string[]): string[] {\n if (summary === undefined) {\n return [\n \"This Baker server does not narrow reports to target accounts yet: the rows cover every company the ads reached.\",\n ];\n }\n const tiers = Object.entries(summary.byTier ?? {})\n .sort(([a], [b]) => a.localeCompare(b, \"en\", { numeric: true }))\n .map(([tier, counts]) => `tier ${tier}: ${reachText(counts)}`);\n const hints = [\n `Target accounts: ${reachText(summary)}${tiers.length > 0 ? ` (${tiers.join(\"; \")})` : \"\"}. Rows and numbers cover the target accounts only.`,\n ];\n const missed = summary.notReached.length;\n if (missed > 0) {\n hints.push(\n `${plural(missed, \"target account was\", \"target accounts were\")} never reached in the period (targets.notReached). Check ${missed === 1 ? \"its domain is the website on its LinkedIn page\" : \"their domains are the websites on their LinkedIn pages\"}, or advertise to ${missed === 1 ? \"it\" : \"them\"} with a company list.`,\n );\n }\n if (unreadable.length > 0) {\n const listed = unreadable.map((entry) => `\"${entry}\"`).join(\", \");\n hints.push(\n `Skipped ${plural(unreadable.length, \"entry\", \"entries\")} of the targets file that ${unreadable.length === 1 ? \"is\" : \"are\"} not a website: ${listed}.`,\n );\n }\n return hints;\n}\n\n/** Each company with where it stands in the CRM spelled out, so the agent never has to combine the flags. */\nexport function withDealStatus(\n rows: readonly AccountEngagementRow[],\n): Array<AccountEngagementRow & { dealStatus: AccountDealStatus }> {\n return rows.map((row) => ({ ...row, dealStatus: accountDealStatus(row) }));\n}\n\ntype CompanyData = AccountsCompanyResponse[\"data\"];\ntype MonthCounts = Pick<AccountCompanyMonth, \"month\" | \"impressions\" | \"clicks\" | \"engagements\">;\n\nexport interface CompanyView {\n orgs: CompanyData[\"orgs\"];\n /** The company's own totals, month by month: the account-wide rows. */\n months: Array<MonthCounts & { orgId: string }>;\n /** The same numbers split by campaign. Overlapping: never add them to `months` or to each other. */\n byCampaign: Array<{ orgId: string; campaignId: string; campaignName: string | null; months: MonthCounts[] }>;\n deals: CompanyData[\"deals\"];\n rule?: CompanyData[\"rule\"];\n}\n\nconst counts = (row: AccountCompanyMonth): MonthCounts => ({\n month: row.month,\n impressions: row.impressions,\n clicks: row.clicks,\n engagements: row.engagements,\n});\n\n/**\n * One company as the agent should read it. The store answers the account-wide\n * row and every campaign's row for the same month side by side, which reads\n * as double the activity; here the account-wide months are the totals and\n * the campaign split sits apart, labelled. A company the ads never reached\n * comes back from the store as an unnamed echo of the id asked for — dropped,\n * and said in words.\n */\n/** Why a company lookup shows no LinkedIn company: an id the ads never reached, a CRM-only company, or no match at all. */\nfunction unreachedHint(unreached: ReadonlyArray<{ orgId: string }>, deals: number): string {\n if (unreached.length > 0) {\n return `The LinkedIn ads have not reached LinkedIn company ${unreached.map((org) => org.orgId).join(\", \")} in the months the nightly sync keeps (up to 24), so there is nothing to show. Check the id against \\`baker accounts engagement\\`, or try the company's website domain.`;\n }\n if (deals > 0) {\n return `That company is in the CRM with ${deals === 1 ? \"1 deal\" : `${deals} deals`}, but the LinkedIn ads have not reached it in the months the nightly sync keeps, so none of its deals can count as influenced.`;\n }\n return \"The ads have not reached that company, or it is named differently: try its LinkedIn id from `baker accounts engagement`.\";\n}\n\nexport function companyView(data: CompanyData): { data: CompanyView; hints: string[] } {\n const reachedOrgs = new Set(data.months.map((row) => row.orgId));\n const orgs = data.orgs.filter((org) => reachedOrgs.has(org.orgId) || org.name !== \"\" || org.crmCompanyId !== null);\n const months = data.months\n .filter((row) => row.campaignId === \"\")\n .map((row) => ({ orgId: row.orgId, ...counts(row) }));\n const byCampaign: CompanyView[\"byCampaign\"] = [];\n for (const row of data.months) {\n if (row.campaignId === \"\") continue;\n let entry = byCampaign.find((item) => item.orgId === row.orgId && item.campaignId === row.campaignId);\n if (entry === undefined) {\n entry = { orgId: row.orgId, campaignId: row.campaignId, campaignName: row.campaignName, months: [] };\n byCampaign.push(entry);\n }\n entry.months.push(counts(row));\n }\n\n const hints: string[] = [];\n const unreached = unreachedHint(\n data.orgs.filter((org) => !orgs.includes(org)),\n data.deals.length,\n );\n if (orgs.length === 0) hints.push(unreached);\n if (byCampaign.length > 0) {\n hints.push(\n \"`months` are the company's totals. `byCampaign` splits the same numbers by campaign, and a company several campaigns reached shows up under each — never add byCampaign to the totals or to each other.\",\n );\n }\n if (orgs.some((org) => org.matchConfidence === \"low\")) {\n hints.push(\n \"The CRM match is only a guess (a subdomain or a name) until someone confirms it in Measure → Accounts.\",\n );\n }\n if (data.rule !== undefined && data.deals.length > 0) {\n hints.push(\n `\\`influenced\\` on each deal: ${data.rule.threshold}+ ${data.rule.metric} (\\`touchValue\\`) in the ${data.rule.lookbackMonths} months up to the month the deal was created (closed, for a won deal), counted from this company's months above.`,\n );\n }\n return { data: { orgs, months, byCampaign, deals: data.deals, ...(data.rule ? { rule: data.rule } : {}) }, hints };\n}\n"],"mappings":"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","names":["counts"]}
|
|
@@ -30,26 +30,26 @@ Examples:
|
|
|
30
30
|
Full guide: __tooling__/docs/tools/baker/actions.md`
|
|
31
31
|
},
|
|
32
32
|
subCommands: {
|
|
33
|
-
list: () => import("./list-
|
|
34
|
-
log: () => import("./log-
|
|
35
|
-
draft: () => import("./draft-
|
|
36
|
-
get: () => import("./get-
|
|
37
|
-
status: () => import("./status-
|
|
38
|
-
claim: () => import("./claim-
|
|
39
|
-
release: () => import("./release-
|
|
40
|
-
create: () => import("./create-
|
|
41
|
-
update: () => import("./update-
|
|
42
|
-
complete: () => import("./complete-
|
|
43
|
-
discard: () => import("./discard-
|
|
44
|
-
reopen: () => import("./reopen-
|
|
45
|
-
assign: () => import("./assign-
|
|
46
|
-
members: () => import("./members-
|
|
47
|
-
link: () => import("./link-
|
|
48
|
-
unlink: () => import("./unlink-
|
|
49
|
-
tags: () => import("./tags-
|
|
33
|
+
list: () => import("./list-JKB33W6K.js").then((m) => m.listCommand),
|
|
34
|
+
log: () => import("./log-O3I5JZCM.js").then((m) => m.logCommand),
|
|
35
|
+
draft: () => import("./draft-SNBK2KY6.js").then((m) => m.draftCommand),
|
|
36
|
+
get: () => import("./get-UQ43T25B.js").then((m) => m.getCommand),
|
|
37
|
+
status: () => import("./status-3X3MECDY.js").then((m) => m.statusCommand),
|
|
38
|
+
claim: () => import("./claim-CIUU5QEZ.js").then((m) => m.claimCommand),
|
|
39
|
+
release: () => import("./release-SVOT7QVX.js").then((m) => m.releaseCommand),
|
|
40
|
+
create: () => import("./create-WEIGJ4BF.js").then((m) => m.createCommand),
|
|
41
|
+
update: () => import("./update-LCE2QN53.js").then((m) => m.updateCommand),
|
|
42
|
+
complete: () => import("./complete-NKYCSYKX.js").then((m) => m.completeCommand),
|
|
43
|
+
discard: () => import("./discard-7OARQRS7.js").then((m) => m.discardCommand),
|
|
44
|
+
reopen: () => import("./reopen-WCUZMTYE.js").then((m) => m.reopenCommand),
|
|
45
|
+
assign: () => import("./assign-BSV765I3.js").then((m) => m.assignCommand),
|
|
46
|
+
members: () => import("./members-OBA4MXAQ.js").then((m) => m.membersCommand),
|
|
47
|
+
link: () => import("./link-L2KC5EIZ.js").then((m) => m.linkCommand),
|
|
48
|
+
unlink: () => import("./unlink-RK5V4QO2.js").then((m) => m.unlinkCommand),
|
|
49
|
+
tags: () => import("./tags-75QCVBQB.js").then((m) => m.tagsCommand)
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
export {
|
|
53
53
|
actionsCommand
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=actions-
|
|
55
|
+
//# sourceMappingURL=actions-PF62UVHS.js.map
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
} from "./chunk-PFBQERWX.js";
|
|
4
4
|
import {
|
|
5
5
|
failApi
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-XYBSTW3P.js";
|
|
7
|
+
import "./chunk-5MSRVAUZ.js";
|
|
8
8
|
import "./chunk-CAZGM2NX.js";
|
|
9
9
|
import "./chunk-NZS3KEQ2.js";
|
|
10
10
|
import "./chunk-GIWHHCD6.js";
|
|
@@ -933,4 +933,4 @@ Full guide: __tooling__/docs/tools/baker/activecampaign.md`
|
|
|
933
933
|
export {
|
|
934
934
|
activecampaignCommand
|
|
935
935
|
};
|
|
936
|
-
//# sourceMappingURL=activecampaign-
|
|
936
|
+
//# sourceMappingURL=activecampaign-Q7LLZSZ4.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
testimonialSourceRefreshIntervalSchema,
|
|
8
8
|
testimonialSourceTypeSchema,
|
|
9
9
|
testimonialSourcesAddRequestSchema
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5MSRVAUZ.js";
|
|
11
11
|
import "./chunk-CAZGM2NX.js";
|
|
12
12
|
import "./chunk-NZS3KEQ2.js";
|
|
13
13
|
import "./chunk-GIWHHCD6.js";
|
|
@@ -102,4 +102,4 @@ export {
|
|
|
102
102
|
addCommand,
|
|
103
103
|
addSourceHints
|
|
104
104
|
};
|
|
105
|
-
//# sourceMappingURL=add-
|
|
105
|
+
//# sourceMappingURL=add-3GL76LTP.js.map
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
stepNameKey,
|
|
7
7
|
walkNodes,
|
|
8
8
|
writeFlowTree
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UC5HG2UF.js";
|
|
10
10
|
import {
|
|
11
11
|
flowCatalogEntry,
|
|
12
12
|
flowCatalogTypes,
|
|
13
13
|
flowNodeTriggers
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-5MSRVAUZ.js";
|
|
15
15
|
import "./chunk-CAZGM2NX.js";
|
|
16
16
|
import "./chunk-NZS3KEQ2.js";
|
|
17
17
|
import "./chunk-GIWHHCD6.js";
|
|
@@ -300,4 +300,4 @@ export {
|
|
|
300
300
|
secondPixelHint,
|
|
301
301
|
stepNameRefusal
|
|
302
302
|
};
|
|
303
|
-
//# sourceMappingURL=add-
|
|
303
|
+
//# sourceMappingURL=add-GDEQN43J.js.map
|
|
@@ -33,16 +33,16 @@ Examples:
|
|
|
33
33
|
Full guides: __tooling__/docs/tools/baker/ads-<platform>.md (google|meta|linkedin|x|chatgpt|performance|terms)`
|
|
34
34
|
},
|
|
35
35
|
subCommands: {
|
|
36
|
-
google: () => import("./google-
|
|
36
|
+
google: () => import("./google-ZZCSZR63.js").then((m) => m.googleCommand),
|
|
37
37
|
meta: () => import("./meta-AHI2HVBM.js").then((m) => m.metaCommand),
|
|
38
|
-
linkedin: () => import("./linkedin-
|
|
39
|
-
x: () => import("./x-
|
|
38
|
+
linkedin: () => import("./linkedin-A4U6IGZX.js").then((m) => m.linkedinCommand),
|
|
39
|
+
x: () => import("./x-F5CSO2RN.js").then((m) => m.xCommand),
|
|
40
40
|
chatgpt: () => import("./chatgpt-23X76OFD.js").then((m) => m.chatgptCommand),
|
|
41
|
-
performance: () => import("./performance-
|
|
41
|
+
performance: () => import("./performance-V5WZCJYT.js").then((m) => m.performanceCommand),
|
|
42
42
|
terms: () => import("./terms-O6ODXEOK.js").then((m) => m.termsCommand)
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
export {
|
|
46
46
|
adsCommand
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=ads-
|
|
48
|
+
//# sourceMappingURL=ads-HH5YTV4O.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
advertisersHints
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TESOYFMQ.js";
|
|
4
4
|
import {
|
|
5
5
|
RESEARCH_DATA_NOTE,
|
|
6
6
|
handleResearchError,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
warnDefaults
|
|
14
14
|
} from "./chunk-PGRDGQ23.js";
|
|
15
15
|
import "./chunk-ANLLW3KZ.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-5MSRVAUZ.js";
|
|
17
17
|
import "./chunk-CAZGM2NX.js";
|
|
18
18
|
import "./chunk-NZS3KEQ2.js";
|
|
19
19
|
import "./chunk-GIWHHCD6.js";
|
|
@@ -118,4 +118,4 @@ Examples:
|
|
|
118
118
|
export {
|
|
119
119
|
advertisersCommand
|
|
120
120
|
};
|
|
121
|
-
//# sourceMappingURL=advertisers-
|
|
121
|
+
//# sourceMappingURL=advertisers-B5L4LZW2.js.map
|
|
@@ -1,34 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
readTargetsFile
|
|
3
|
+
} from "./chunk-UX45LDRM.js";
|
|
4
|
+
import "./chunk-AZH6H4TV.js";
|
|
1
5
|
import {
|
|
2
6
|
flowEventKeys,
|
|
3
7
|
flowNodes
|
|
4
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HITRGZIS.js";
|
|
5
9
|
import {
|
|
6
10
|
flowDataPath,
|
|
7
11
|
flowExists,
|
|
8
12
|
listFlowSlugs,
|
|
9
13
|
readFlowTree
|
|
10
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-UC5HG2UF.js";
|
|
11
15
|
import {
|
|
12
16
|
INGEST_ARRIVALS_MAX,
|
|
13
17
|
eventIngestUrl,
|
|
14
18
|
ingestBrief
|
|
15
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-WAEWKD75.js";
|
|
16
20
|
import "./chunk-GRQ2AXDX.js";
|
|
17
21
|
import {
|
|
18
22
|
peopleArgs,
|
|
19
23
|
peopleLimitError
|
|
20
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-ZEGNIP3Y.js";
|
|
21
25
|
import {
|
|
22
26
|
ConversionArgsError,
|
|
23
27
|
conversionsWrite,
|
|
24
28
|
parseConversionsArgs
|
|
25
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-DX46OE4U.js";
|
|
26
30
|
import {
|
|
27
31
|
analyticsErrorEnvelope
|
|
28
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-VU5Z2V4S.js";
|
|
29
33
|
import {
|
|
30
34
|
AD_PARAM_ROLE_SPECS,
|
|
31
35
|
ANALYTICS_EVENT_DOORS,
|
|
36
|
+
ANALYTICS_FULL_BREAKDOWN_LIMIT,
|
|
32
37
|
SEND_FILTERS,
|
|
33
38
|
STANDARD_CONVERSION_NAMES,
|
|
34
39
|
destinationName,
|
|
@@ -37,7 +42,7 @@ import {
|
|
|
37
42
|
isBookkeepingRow,
|
|
38
43
|
parseEventKey,
|
|
39
44
|
rowMatchKeys
|
|
40
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-DI44SZVP.js";
|
|
41
46
|
import "./chunk-EDLZGTGN.js";
|
|
42
47
|
import {
|
|
43
48
|
repeatedValues
|
|
@@ -47,7 +52,7 @@ import {
|
|
|
47
52
|
} from "./chunk-ZRP7Y2DM.js";
|
|
48
53
|
import {
|
|
49
54
|
flowNodeTriggers
|
|
50
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-5MSRVAUZ.js";
|
|
51
56
|
import "./chunk-CAZGM2NX.js";
|
|
52
57
|
import "./chunk-NZS3KEQ2.js";
|
|
53
58
|
import "./chunk-GIWHHCD6.js";
|
|
@@ -790,6 +795,11 @@ var ANALYTICS_PRESET_INFO = [
|
|
|
790
795
|
description: "Which machines fetch this site. Every other report here excludes them; this one reads them. Answers whether Google is still crawling a page after it was republished, whether Meta fetched a link preview before spend went behind the URL, and how much of the traffic is now AI answer engines.",
|
|
791
796
|
playbook: "landing \u2014 a page that stopped being crawled stops ranking, weeks before the traffic shows it"
|
|
792
797
|
},
|
|
798
|
+
{
|
|
799
|
+
name: "companies",
|
|
800
|
+
description: "Which companies are visiting, named by the visitor's own network \u2014 never a person \u2014 with visits, pages read and first/last seen. Recorded only for visitors who accepted marketing cookies, on a company that switched it on. --targets keeps the target accounts that came and lists the ones that did not.",
|
|
801
|
+
playbook: "abm-playbook \u2014 which target accounts the ads warmed enough to read the pages"
|
|
802
|
+
},
|
|
793
803
|
{
|
|
794
804
|
name: "landings",
|
|
795
805
|
description: "Every landing side by side \u2014 views, entrances, conversion rate and a sparkline each, under the name a person gave it. Answers 'which of my pages is working' without having to know the answer first; `page` then answers one of them in depth. --tag narrows it to a campaign.",
|
|
@@ -822,6 +832,112 @@ var ANALYTICS_PRESET_INFO = [
|
|
|
822
832
|
}
|
|
823
833
|
];
|
|
824
834
|
|
|
835
|
+
// ../api/src/accounts/companyName.ts
|
|
836
|
+
var NOISE_WORDS = /* @__PURE__ */ new Set([
|
|
837
|
+
"inc",
|
|
838
|
+
"incorporated",
|
|
839
|
+
"llc",
|
|
840
|
+
"ltd",
|
|
841
|
+
"limited",
|
|
842
|
+
"plc",
|
|
843
|
+
"corp",
|
|
844
|
+
"corporation",
|
|
845
|
+
"co",
|
|
846
|
+
"company",
|
|
847
|
+
"gmbh",
|
|
848
|
+
"ag",
|
|
849
|
+
"kg",
|
|
850
|
+
"bv",
|
|
851
|
+
"nv",
|
|
852
|
+
"sa",
|
|
853
|
+
"sau",
|
|
854
|
+
"sl",
|
|
855
|
+
"slu",
|
|
856
|
+
"sas",
|
|
857
|
+
"sarl",
|
|
858
|
+
"srl",
|
|
859
|
+
"spa",
|
|
860
|
+
"oy",
|
|
861
|
+
"ab",
|
|
862
|
+
"as",
|
|
863
|
+
"aps",
|
|
864
|
+
"pty",
|
|
865
|
+
"lda",
|
|
866
|
+
"ltda",
|
|
867
|
+
"kk",
|
|
868
|
+
"group",
|
|
869
|
+
"grupo",
|
|
870
|
+
"holding",
|
|
871
|
+
"holdings",
|
|
872
|
+
"the"
|
|
873
|
+
]);
|
|
874
|
+
function companyNameKey(name) {
|
|
875
|
+
return name.normalize("NFD").replace(new RegExp("\\p{Diacritic}", "gu"), "").toLowerCase().replace(/\./g, "").split(/[^\p{L}\p{N}]+/u).filter((word) => word !== "" && !NOISE_WORDS.has(word)).join(" ");
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
// src/commands/analytics/visitorCompanies.ts
|
|
879
|
+
var VISITOR_COMPANIES_FULL_ROWS = ANALYTICS_FULL_BREAKDOWN_LIMIT * 8;
|
|
880
|
+
function targetKey(target) {
|
|
881
|
+
return companyNameKey(target.name ?? target.domain.split(".")[0] ?? "");
|
|
882
|
+
}
|
|
883
|
+
function visitorCompanyHints(companies) {
|
|
884
|
+
if (companies.length === 0) {
|
|
885
|
+
return [
|
|
886
|
+
"No visitor companies in this window. They are recorded only when an admin has turned on 'Show which companies visit your pages' (Settings \u2192 General), the company measures in full, and the visitor accepted marketing cookies \u2014 so an empty list does not mean no target account came. Tell the user which of those to check rather than reporting zero interest."
|
|
887
|
+
];
|
|
888
|
+
}
|
|
889
|
+
const hints = [
|
|
890
|
+
"Each name is the visitor's network as registered, never a person, and there is no website: match accounts by name (`--targets` does it), and never present a row as an individual's visit."
|
|
891
|
+
];
|
|
892
|
+
if (companies.some((company) => company.confidence === "low")) {
|
|
893
|
+
hints.push(
|
|
894
|
+
"Rows with confidence low are a business only because their network is not a known ISP, carrier, cloud or VPN. Check the name reads as a real company before it goes into a sales brief."
|
|
895
|
+
);
|
|
896
|
+
}
|
|
897
|
+
return hints;
|
|
898
|
+
}
|
|
899
|
+
function matchTargets(companies, targets) {
|
|
900
|
+
const visitorByKey = /* @__PURE__ */ new Map();
|
|
901
|
+
for (const company of companies) {
|
|
902
|
+
const key = companyNameKey(company.name);
|
|
903
|
+
if (key !== "" && !visitorByKey.has(key)) visitorByKey.set(key, company);
|
|
904
|
+
}
|
|
905
|
+
const matched = [];
|
|
906
|
+
const notVisited = [];
|
|
907
|
+
const byTier = /* @__PURE__ */ new Map();
|
|
908
|
+
for (const target of targets) {
|
|
909
|
+
const key = targetKey(target);
|
|
910
|
+
const visitor = key === "" ? void 0 : visitorByKey.get(key);
|
|
911
|
+
if (visitor) matched.push({ ...visitor, target: target.domain });
|
|
912
|
+
else notVisited.push(target);
|
|
913
|
+
if (target.tier !== void 0) {
|
|
914
|
+
const tier = byTier.get(target.tier) ?? { total: 0, visited: 0 };
|
|
915
|
+
tier.total += 1;
|
|
916
|
+
if (visitor) tier.visited += 1;
|
|
917
|
+
byTier.set(target.tier, tier);
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
const summary = { total: targets.length, visited: targets.length - notVisited.length, notVisited };
|
|
921
|
+
return {
|
|
922
|
+
companies: matched,
|
|
923
|
+
targets: byTier.size > 0 ? { ...summary, byTier: Object.fromEntries(byTier) } : summary
|
|
924
|
+
};
|
|
925
|
+
}
|
|
926
|
+
function refineCompaniesReport(data, companies, targets) {
|
|
927
|
+
if (!targets) {
|
|
928
|
+
data.visitorCompanies = data.visitorCompanies ?? [];
|
|
929
|
+
return visitorCompanyHints(companies);
|
|
930
|
+
}
|
|
931
|
+
const matched = matchTargets(companies, targets.targets);
|
|
932
|
+
data.visitorCompanies = matched.companies;
|
|
933
|
+
data.targets = matched.targets;
|
|
934
|
+
const skipped = targets.unreadable.length > 0 ? [`Skipped targets that are not a website: ${targets.unreadable.map((entry) => `"${entry}"`).join(", ")}.`] : [];
|
|
935
|
+
const cut = companies.length >= VISITOR_COMPANIES_FULL_ROWS ? [
|
|
936
|
+
`Only the ${VISITOR_COMPANIES_FULL_ROWS} companies with the most visits were matched, so a target in notVisited may have come with fewer visits. Narrow the window (--days 7) and run it again before telling anyone an account never visited.`
|
|
937
|
+
] : [];
|
|
938
|
+
return [...visitorCompanyHints(matched.companies.length > 0 ? matched.companies : companies), ...skipped, ...cut];
|
|
939
|
+
}
|
|
940
|
+
|
|
825
941
|
// src/commands/analytics/websiteTagHints.ts
|
|
826
942
|
function asTyped(origin) {
|
|
827
943
|
return origin.replace(/^https?:\/\//, "");
|
|
@@ -1031,7 +1147,7 @@ function feedReportHints(feed, peopleSearch) {
|
|
|
1031
1147
|
if (feed === void 0) return [];
|
|
1032
1148
|
return [...feedHints(feed), ...peopleSearchHints(peopleSearch ?? [], feed.rows)];
|
|
1033
1149
|
}
|
|
1034
|
-
async function runPreset(args, options) {
|
|
1150
|
+
async function runPreset(args, options, refine) {
|
|
1035
1151
|
const origin = args.origin === void 0 ? "" : String(args.origin);
|
|
1036
1152
|
if (origin !== "" && !EVENT_ORIGINS.includes(origin)) {
|
|
1037
1153
|
writeJsonEnvelope({
|
|
@@ -1056,6 +1172,7 @@ async function runPreset(args, options) {
|
|
|
1056
1172
|
const data = pruneForAgent(response.data, args.full === true);
|
|
1057
1173
|
const feed = "stream" in data ? shapeFeed(data.stream, args.everything === true) : void 0;
|
|
1058
1174
|
if (feed !== void 0) data.stream = feed.rows;
|
|
1175
|
+
const refinedHints = refine ? refine(data, response.data) : [];
|
|
1059
1176
|
const hints = [
|
|
1060
1177
|
...feedReportHints(feed, response.data.peopleSearch),
|
|
1061
1178
|
// The platform the ad blocks were scoped to, so the tagging hint can
|
|
@@ -1067,6 +1184,7 @@ async function runPreset(args, options) {
|
|
|
1067
1184
|
eventName: options.eventName,
|
|
1068
1185
|
property: options.property
|
|
1069
1186
|
}),
|
|
1187
|
+
...refinedHints,
|
|
1070
1188
|
...formatHint(data, format)
|
|
1071
1189
|
];
|
|
1072
1190
|
writeAnalyticsReport(
|
|
@@ -1200,6 +1318,43 @@ var botsCommand = presetCommand({
|
|
|
1200
1318
|
preset: "bots",
|
|
1201
1319
|
description: "Which machines are fetching this site \u2014 search crawlers, AI answer engines, link-preview scrapers, SEO tools \u2014 and whether each one is genuine or only claims to be. Every other report excludes these; this is the one that reads them. Use it to check that a republished page is still being crawled, or that Meta fetched a link preview before spend goes behind the URL."
|
|
1202
1320
|
});
|
|
1321
|
+
var COMPANIES_DESCRIPTION = "Which companies are visiting these pages \u2014 named by the visitor's own network, never a person \u2014 with visits, pages read and first/last seen. Only recorded when an admin turned on 'Show which companies visit your pages', the company measures in full, and the visitor accepted marketing cookies; home and mobile connections are never named. --targets <file> keeps the target accounts that came and lists the ones that did not \u2014 the website half of an ABM report.";
|
|
1322
|
+
var COMPANIES_ARGS = {
|
|
1323
|
+
...SHARED_ARGS,
|
|
1324
|
+
targets: {
|
|
1325
|
+
type: "string",
|
|
1326
|
+
description: 'The target-account list `baker accounts --targets` takes: a .csv (a domain or website column; name and tier optional) or a .json file (["acme.com", \u2026] or [{"domain": "acme.com", "name": "Acme", "tier": 1}, \u2026]). Matched by company NAME, because a visitor company has no website \u2014 give each target its name; one without matches only when its name starts with the domain\'s first word. Build one with `node __tooling__/scripts/target-accounts.mjs --out targets.csv`',
|
|
1327
|
+
required: false
|
|
1328
|
+
}
|
|
1329
|
+
};
|
|
1330
|
+
registerSchema({ command: "analytics.companies", description: COMPANIES_DESCRIPTION, args: COMPANIES_ARGS });
|
|
1331
|
+
var companiesCommand = defineCommand({
|
|
1332
|
+
meta: { name: "companies", description: COMPANIES_DESCRIPTION },
|
|
1333
|
+
args: COMPANIES_ARGS,
|
|
1334
|
+
run: async ({ args }) => {
|
|
1335
|
+
let targets;
|
|
1336
|
+
if (args.targets) {
|
|
1337
|
+
try {
|
|
1338
|
+
targets = readTargetsFile(String(args.targets), readFileSync(String(args.targets), "utf8"));
|
|
1339
|
+
} catch (err) {
|
|
1340
|
+
writeJsonEnvelope({
|
|
1341
|
+
ok: false,
|
|
1342
|
+
error: {
|
|
1343
|
+
code: "VALIDATION_ERROR",
|
|
1344
|
+
message: `Could not read --targets ${String(args.targets)}: ${err instanceof Error ? err.message : String(err)}`
|
|
1345
|
+
}
|
|
1346
|
+
});
|
|
1347
|
+
process.exit(1);
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
const request = targets ? { ...args, full: true } : args;
|
|
1351
|
+
await runPreset(
|
|
1352
|
+
request,
|
|
1353
|
+
{ preset: "companies" },
|
|
1354
|
+
(data, raw) => refineCompaniesReport(data, raw.visitorCompanies ?? [], targets)
|
|
1355
|
+
);
|
|
1356
|
+
}
|
|
1357
|
+
});
|
|
1203
1358
|
var landingsCommand = presetCommand({
|
|
1204
1359
|
name: "landings",
|
|
1205
1360
|
preset: "landings",
|
|
@@ -1909,6 +2064,7 @@ Examples:
|
|
|
1909
2064
|
baker analytics traffic --days 90 --full \u2014 full breakdowns and the per-day trend
|
|
1910
2065
|
baker analytics geo --grain postal_code --country ES \u2014 which postcodes convert
|
|
1911
2066
|
baker analytics bots --days 30 \u2014 is the site still being crawled
|
|
2067
|
+
baker analytics companies --targets targets.csv \u2014 which target accounts visited, and which did not
|
|
1912
2068
|
baker analytics landings --tag q3 \u2014 how the Q3 campaign's pages did
|
|
1913
2069
|
baker analytics tags \u2014 the same numbers rolled up per campaign
|
|
1914
2070
|
baker analytics events --event video --property milestone \u2014 how far people watch
|
|
@@ -1947,25 +2103,26 @@ Full guide: __tooling__/docs/tools/baker/analytics.md`
|
|
|
1947
2103
|
submissions: submissionsCommand,
|
|
1948
2104
|
geo: geoCommand,
|
|
1949
2105
|
bots: botsCommand,
|
|
2106
|
+
companies: companiesCommand,
|
|
1950
2107
|
landings: landingsCommand,
|
|
1951
2108
|
tags: tagsCommand,
|
|
1952
2109
|
events: eventsCommand,
|
|
1953
2110
|
feed: feedCommand,
|
|
1954
|
-
lookup: () => import("./lookup-
|
|
2111
|
+
lookup: () => import("./lookup-LWJMDEEL.js").then((m) => m.lookupCommand),
|
|
1955
2112
|
devices: devicesCommand,
|
|
1956
2113
|
ads: adsCommand,
|
|
1957
2114
|
conversions: conversionsCommand,
|
|
1958
|
-
sends: () => import("./sends-
|
|
2115
|
+
sends: () => import("./sends-OLVQGOAE.js").then((m) => m.sendsCommand),
|
|
1959
2116
|
map: mapCommand,
|
|
1960
|
-
unstage: () => import("./unstage-
|
|
2117
|
+
unstage: () => import("./unstage-QFVL7AZ4.js").then((m) => m.unstageCommand),
|
|
1961
2118
|
tracking: trackingCommand,
|
|
1962
2119
|
arrivals: arrivalsCommand,
|
|
1963
2120
|
"sending-events": sendingEventsCommand,
|
|
1964
|
-
sources: () => import("./sources-
|
|
2121
|
+
sources: () => import("./sources-47LE2UCO.js").then((m) => m.sourcesCommand),
|
|
1965
2122
|
"website-tag": websiteTagCommand,
|
|
1966
2123
|
sites: sitesCommand,
|
|
1967
|
-
plan: () => import("./plan-
|
|
1968
|
-
questionnaire: () => import("./questionnaire-
|
|
2124
|
+
plan: () => import("./plan-O2TTEUIW.js").then((m) => m.planCommand),
|
|
2125
|
+
questionnaire: () => import("./questionnaire-VE42SW77.js").then((m) => m.questionnaireCommand),
|
|
1969
2126
|
presets: presetsCommand
|
|
1970
2127
|
}
|
|
1971
2128
|
});
|
|
@@ -1978,4 +2135,4 @@ export {
|
|
|
1978
2135
|
requestBody,
|
|
1979
2136
|
sendingEventsAddress
|
|
1980
2137
|
};
|
|
1981
|
-
//# sourceMappingURL=analytics-
|
|
2138
|
+
//# sourceMappingURL=analytics-BBX6CU3S.js.map
|