@koda-sl/baker-cli 0.450.0-dev.b454c3dd2 → 0.450.0-dev.d6701597d
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 +10 -11
- package/dist/{account-XQXC7BR6.js → account-AL2ZDSR7.js} +4 -5
- package/dist/{account-XQXC7BR6.js.map → account-AL2ZDSR7.js.map} +1 -1
- package/dist/{accounts-722UY53A.js → accounts-HAFCLSR5.js} +3 -4
- package/dist/{accounts-722UY53A.js.map → accounts-HAFCLSR5.js.map} +1 -1
- package/dist/{accounts-E67BMK7T.js → accounts-O5MFO3QQ.js} +5 -6
- package/dist/{accounts-E67BMK7T.js.map → accounts-O5MFO3QQ.js.map} +1 -1
- package/dist/{actions-6TQMSVWD.js → actions-P35MEMGN.js} +18 -18
- package/dist/{add-2BEGRHUX.js → add-5GAN6CVO.js} +5 -28
- package/dist/add-5GAN6CVO.js.map +1 -0
- package/dist/{add-LEMKEOPO.js → add-6DTC6X5G.js} +2 -3
- package/dist/{add-LEMKEOPO.js.map → add-6DTC6X5G.js.map} +1 -1
- package/dist/{ads-AGYCVD62.js → ads-73PGA4YC.js} +4 -4
- package/dist/{advertisers-2VQKAYKG.js → advertisers-AE75CGVE.js} +3 -4
- package/dist/{advertisers-2VQKAYKG.js.map → advertisers-AE75CGVE.js.map} +1 -1
- package/dist/{analytics-IFELDWLL.js → analytics-FKCXIMPO.js} +20 -24
- package/dist/analytics-FKCXIMPO.js.map +1 -0
- package/dist/{analytics-OH5QEH7F.js → analytics-FPWQQGRM.js} +3 -4
- package/dist/{analytics-OH5QEH7F.js.map → analytics-FPWQQGRM.js.map} +1 -1
- package/dist/{assign-PTUJUCEL.js → assign-ABN2AQ4J.js} +3 -4
- package/dist/{assign-PTUJUCEL.js.map → assign-ABN2AQ4J.js.map} +1 -1
- package/dist/{audience-size-LRI6GJRT.js → audience-size-GNBJY35X.js} +3 -4
- package/dist/{audience-size-LRI6GJRT.js.map → audience-size-GNBJY35X.js.map} +1 -1
- package/dist/{audit-HWP7OPB7.js → audit-3VS63TBW.js} +3 -4
- package/dist/{audit-HWP7OPB7.js.map → audit-3VS63TBW.js.map} +1 -1
- package/dist/{autocomplete-J6DHU6MR.js → autocomplete-VS3XG3B7.js} +3 -4
- package/dist/{autocomplete-J6DHU6MR.js.map → autocomplete-VS3XG3B7.js.map} +1 -1
- package/dist/{avatars-467OSBD6.js → avatars-EKCKHCC3.js} +4 -4
- package/dist/{bid-pricing-EO5WLHGV.js → bid-pricing-Q72B65AY.js} +3 -4
- package/dist/{bid-pricing-EO5WLHGV.js.map → bid-pricing-Q72B65AY.js.map} +1 -1
- package/dist/{brand-YRTEPGBK.js → brand-C6PFGGQN.js} +2 -2
- package/dist/{brief-OSFJ2V7F.js → brief-YFJHQ5VQ.js} +7 -8
- package/dist/{brief-OSFJ2V7F.js.map → brief-YFJHQ5VQ.js.map} +1 -1
- package/dist/{campaign-groups-PQ6KSQJR.js → campaign-groups-KFFYQPU3.js} +8 -9
- package/dist/{campaign-groups-PQ6KSQJR.js.map → campaign-groups-KFFYQPU3.js.map} +1 -1
- package/dist/{campaign-writes-5OVLUD5E.js → campaign-writes-FHOS5XZY.js} +3 -4
- package/dist/{campaign-writes-5OVLUD5E.js.map → campaign-writes-FHOS5XZY.js.map} +1 -1
- package/dist/{campaigns-6T3NSUT2.js → campaigns-2NHWBF5C.js} +11 -12
- package/dist/{campaigns-6T3NSUT2.js.map → campaigns-2NHWBF5C.js.map} +1 -1
- package/dist/{campaigns-OYMXDGWX.js → campaigns-KZYZTXDS.js} +5 -5
- package/dist/{canvas-YQFG52IG.js → canvas-5NB27FX2.js} +13 -13
- package/dist/{capabilities-PXBKUN2G.js → capabilities-DJFTRJKS.js} +3 -4
- package/dist/{capabilities-PXBKUN2G.js.map → capabilities-DJFTRJKS.js.map} +1 -1
- package/dist/{catalog-XLXIM7IW.js → catalog-VSSY6FGI.js} +4 -4
- package/dist/{chats-UK47UE7C.js → chats-D2CSDX5Q.js} +3 -4
- package/dist/{chats-UK47UE7C.js.map → chats-D2CSDX5Q.js.map} +1 -1
- package/dist/{chunk-5ZNTADVR.js → chunk-3G3ZDLMI.js} +2 -2
- package/dist/{chunk-SJYEY5MV.js → chunk-3HJLHTWP.js} +3 -12
- package/dist/{chunk-SJYEY5MV.js.map → chunk-3HJLHTWP.js.map} +1 -1
- package/dist/{chunk-ZDMTXQ2Q.js → chunk-3IBYKLXR.js} +2 -2
- package/dist/{chunk-CWYAELVG.js → chunk-464O4MT2.js} +2 -2
- package/dist/{chunk-NA63BH7V.js → chunk-4AUMTNVB.js} +3 -3
- package/dist/{chunk-NDEE6G2J.js → chunk-4BQXAE7Z.js} +2 -2
- package/dist/{chunk-2AOE2MZQ.js → chunk-5ZDLTE5T.js} +3 -3
- package/dist/{chunk-ULG4QRTV.js → chunk-6NB47MRW.js} +2 -2
- package/dist/{chunk-24EB7EDR.js → chunk-7YCRFMXF.js} +3 -3
- package/dist/{chunk-WGUQHAJY.js → chunk-A4LOJ2VD.js} +2 -2
- package/dist/{chunk-6F7DVPOS.js → chunk-AEOSAVVL.js} +3 -3
- package/dist/{chunk-MACCF4JZ.js → chunk-CMPEUZOR.js} +22 -16
- package/dist/{chunk-MACCF4JZ.js.map → chunk-CMPEUZOR.js.map} +1 -1
- package/dist/{chunk-N4LAYIIN.js → chunk-CSYSX4D2.js} +2 -2
- package/dist/{chunk-RX2DKU3W.js → chunk-DGUNI37S.js} +2 -2
- package/dist/{chunk-QE7W555R.js → chunk-DWHIOO7E.js} +12 -163
- package/dist/chunk-DWHIOO7E.js.map +1 -0
- package/dist/{chunk-FPOGPFAG.js → chunk-EBWBG6YV.js} +51 -24
- package/dist/chunk-EBWBG6YV.js.map +1 -0
- package/dist/{chunk-NYIGXDUG.js → chunk-EDLZGTGN.js} +39 -1
- package/dist/chunk-EDLZGTGN.js.map +1 -0
- package/dist/{chunk-I3ZR655O.js → chunk-IR6D7K4H.js} +2 -2
- package/dist/{chunk-FUHN4MFY.js → chunk-JQJDXPCO.js} +2 -2
- package/dist/{chunk-7CTMH5AK.js → chunk-KAUOHQTF.js} +3 -3
- package/dist/{chunk-VYQ3QJ3C.js → chunk-KHRXPQID.js} +2 -2
- package/dist/{chunk-6Y7ZBENQ.js → chunk-LECGCWT5.js} +6 -6
- package/dist/{chunk-5WCSKQ7Z.js → chunk-LZ73CZGP.js} +6 -6
- package/dist/{chunk-R25YLW6H.js → chunk-MELOSESI.js} +2 -2
- package/dist/{chunk-DCRPXOJJ.js → chunk-MXYBTMKB.js} +2 -2
- package/dist/{chunk-54C6YDGJ.js → chunk-NPY4QUMQ.js} +2 -2
- package/dist/{chunk-LYQJ4PZW.js → chunk-OQ6663F4.js} +5 -5
- package/dist/{chunk-H3427GPU.js → chunk-OZRUJVIQ.js} +2 -2
- package/dist/{chunk-KMKEYI37.js → chunk-Q2V6E6SL.js} +3 -3
- package/dist/{chunk-VL43TNIP.js → chunk-QRP3PXWN.js} +2 -2
- package/dist/{chunk-HDLYPC6K.js → chunk-RPUSTYHL.js} +3 -5
- package/dist/{chunk-HDLYPC6K.js.map → chunk-RPUSTYHL.js.map} +1 -1
- package/dist/{chunk-C46GUI2S.js → chunk-RZBEK2VE.js} +2 -2
- package/dist/{chunk-2VPBIT65.js → chunk-S3A3YOKO.js} +8 -8
- package/dist/{chunk-FYGR3I2A.js → chunk-S77PZVYM.js} +3 -3
- package/dist/{chunk-VLMBTPXU.js → chunk-SHL7LOC3.js} +3 -3
- package/dist/{chunk-HR6IWNKE.js → chunk-SSJK7FEV.js} +1140 -1196
- package/dist/chunk-SSJK7FEV.js.map +1 -0
- package/dist/{chunk-KS2QY6MK.js → chunk-W3ZHJJVT.js} +4 -4
- package/dist/{chunk-7EPXVICM.js → chunk-XF4JUKVF.js} +5 -38
- package/dist/chunk-XF4JUKVF.js.map +1 -0
- package/dist/{chunk-RL5CP7N6.js → chunk-Y6O7EWYY.js} +5 -5
- package/dist/{chunk-6NY2GPR4.js → chunk-Y6ZQXUZ7.js} +3 -3
- package/dist/{chunk-HROZYQ5H.js → chunk-YRQYA2LR.js} +5 -63
- package/dist/chunk-YRQYA2LR.js.map +1 -0
- package/dist/{chunk-ASI4P6X2.js → chunk-YUCLMOEG.js} +6 -6
- package/dist/chunk-YUCLMOEG.js.map +1 -0
- package/dist/{chunk-WKQG6TER.js → chunk-ZEYEWPK6.js} +2 -2
- package/dist/{claim-W6G6VEG5.js → claim-FZ5OQLMU.js} +3 -4
- package/dist/{claim-W6G6VEG5.js.map → claim-FZ5OQLMU.js.map} +1 -1
- package/dist/cli.js +30 -30
- package/dist/{companies-TS6KBATJ.js → companies-DNI634RC.js} +3 -4
- package/dist/{companies-TS6KBATJ.js.map → companies-DNI634RC.js.map} +1 -1
- package/dist/{complete-LYR2HMQU.js → complete-2FZMGJV5.js} +3 -4
- package/dist/{complete-LYR2HMQU.js.map → complete-2FZMGJV5.js.map} +1 -1
- package/dist/{connect-FCXNVTXG.js → connect-QCOGEPP4.js} +6 -13
- package/dist/{conversation-6ZJGPCXM.js → conversation-6IOGV7B7.js} +3 -4
- package/dist/{conversation-6ZJGPCXM.js.map → conversation-6IOGV7B7.js.map} +1 -1
- package/dist/{conversions-UHB55MMQ.js → conversions-4SRZPBBX.js} +7 -8
- package/dist/{conversions-UHB55MMQ.js.map → conversions-4SRZPBBX.js.map} +1 -1
- package/dist/{create-EX6OWLNM.js → create-BJNMO6HT.js} +2 -3
- package/dist/{create-EX6OWLNM.js.map → create-BJNMO6HT.js.map} +1 -1
- package/dist/{create-JFSK4BOP.js → create-FX4OJ2XF.js} +3 -4
- package/dist/{create-JFSK4BOP.js.map → create-FX4OJ2XF.js.map} +1 -1
- package/dist/{create-JCA7JPLP.js → create-RM7HV77Y.js} +3 -4
- package/dist/{create-JCA7JPLP.js.map → create-RM7HV77Y.js.map} +1 -1
- package/dist/{create-WU22YYU2.js → create-VXM34ZWH.js} +3 -4
- package/dist/{create-WU22YYU2.js.map → create-VXM34ZWH.js.map} +1 -1
- package/dist/{creatives-FXUQ5WSD.js → creatives-B5NTXPUB.js} +10 -10
- package/dist/{creatives-KGXUOYPE.js → creatives-JSWBFQ5R.js} +8 -9
- package/dist/{creatives-KGXUOYPE.js.map → creatives-JSWBFQ5R.js.map} +1 -1
- package/dist/{credentials-MJC7PGKR.js → credentials-C33K6XCJ.js} +3 -4
- package/dist/{credentials-MJC7PGKR.js.map → credentials-C33K6XCJ.js.map} +1 -1
- package/dist/{critique-GS5VV5ZC.js → critique-4V5SKH7C.js} +6 -7
- package/dist/{critique-GS5VV5ZC.js.map → critique-4V5SKH7C.js.map} +1 -1
- package/dist/{critique-TPHR27KH.js → critique-ZS4ON3SU.js} +3 -4
- package/dist/{critique-TPHR27KH.js.map → critique-ZS4ON3SU.js.map} +1 -1
- package/dist/{crm-VK44O3ED.js → crm-52ROSWH5.js} +4 -5
- package/dist/{crm-VK44O3ED.js.map → crm-52ROSWH5.js.map} +1 -1
- package/dist/{crm-AVCM5D4G.js → crm-R5IXIFIV.js} +4 -5
- package/dist/{crm-AVCM5D4G.js.map → crm-R5IXIFIV.js.map} +1 -1
- package/dist/{customers-XH2DMTFH.js → customers-A36LOZOB.js} +5 -6
- package/dist/{delete-WI5E3DR3.js → delete-AIGE4Y4H.js} +3 -4
- package/dist/{delete-WI5E3DR3.js.map → delete-AIGE4Y4H.js.map} +1 -1
- package/dist/{delete-KRH2YMSZ.js → delete-HGHXY24R.js} +3 -4
- package/dist/{delete-KRH2YMSZ.js.map → delete-HGHXY24R.js.map} +1 -1
- package/dist/{delete-E3R3TKIL.js → delete-M2GDLPYN.js} +2 -3
- package/dist/{delete-E3R3TKIL.js.map → delete-M2GDLPYN.js.map} +1 -1
- package/dist/{demographics-XV5PBA77.js → demographics-NTWB2IMG.js} +3 -4
- package/dist/{demographics-XV5PBA77.js.map → demographics-NTWB2IMG.js.map} +1 -1
- package/dist/{discard-HTQUUHJR.js → discard-2WWQG6OU.js} +3 -4
- package/dist/{discard-HTQUUHJR.js.map → discard-2WWQG6OU.js.map} +1 -1
- package/dist/{domain-RECGZXJB.js → domain-Y2LT6JLT.js} +3 -4
- package/dist/{domain-RECGZXJB.js.map → domain-Y2LT6JLT.js.map} +1 -1
- package/dist/{draft-Q546QPPU.js → draft-EJXNNJ3Y.js} +4 -5
- package/dist/{draft-Q546QPPU.js.map → draft-EJXNNJ3Y.js.map} +1 -1
- package/dist/{draft-PVTX6QT6.js → draft-FJ7WHIXW.js} +3 -4
- package/dist/{draft-PVTX6QT6.js.map → draft-FJ7WHIXW.js.map} +1 -1
- package/dist/{draft-2IBSJEKC.js → draft-SLHAKJ2A.js} +3 -4
- package/dist/{draft-2IBSJEKC.js.map → draft-SLHAKJ2A.js.map} +1 -1
- package/dist/engine/index.js +3 -3
- package/dist/{facets-7EVPJMKS.js → facets-U7AQC4H6.js} +3 -4
- package/dist/{facets-7EVPJMKS.js.map → facets-U7AQC4H6.js.map} +1 -1
- package/dist/{feedback-EIZKS4JU.js → feedback-OLTCHE6C.js} +2 -2
- package/dist/{feedback-record-TKO54BOE.js → feedback-record-7WZ4H7EP.js} +8 -9
- package/dist/{feedback-record-TKO54BOE.js.map → feedback-record-7WZ4H7EP.js.map} +1 -1
- package/dist/{fetch-4BY6HYUM.js → fetch-W7NULDEO.js} +3 -4
- package/dist/{fetch-4BY6HYUM.js.map → fetch-W7NULDEO.js.map} +1 -1
- package/dist/{find-FRRHAPWX.js → find-OTDIX6V4.js} +4 -4
- package/dist/{flows-KTFAML22.js → flows-KABCBS3S.js} +17 -21
- package/dist/flows-KABCBS3S.js.map +1 -0
- package/dist/{fonts-MXR3ZKDX.js → fonts-EMMX3KII.js} +5 -6
- package/dist/{forecast-3QTJYVND.js → forecast-GNODEIIC.js} +3 -4
- package/dist/{forecast-3QTJYVND.js.map → forecast-GNODEIIC.js.map} +1 -1
- package/dist/{funnel-I6XIAEHG.js → funnel-AAX27NH4.js} +455 -11
- package/dist/funnel-AAX27NH4.js.map +1 -0
- package/dist/{ga4-DV2AXCSL.js → ga4-UDQ2HA2J.js} +1 -1
- package/dist/{get-5PKNKJ5S.js → get-QEYJRLV3.js} +4 -7
- package/dist/get-QEYJRLV3.js.map +1 -0
- package/dist/{get-72YPHJGV.js → get-RTVUZM6E.js} +3 -4
- package/dist/{get-72YPHJGV.js.map → get-RTVUZM6E.js.map} +1 -1
- package/dist/{google-QYYYSSXI.js → google-KTO3PLEU.js} +5 -5
- package/dist/{google-6OGZX47I.js → google-M7KEXVK5.js} +2 -2
- package/dist/{google-ads-QGMQKZQD.js → google-ads-OK6IG3UV.js} +3 -4
- package/dist/{google-ads-QGMQKZQD.js.map → google-ads-OK6IG3UV.js.map} +1 -1
- package/dist/{gsc-TAKOF7J5.js → gsc-P3QYGDV2.js} +1 -1
- package/dist/{history-6AVQX2OQ.js → history-PQUJKK26.js} +3 -4
- package/dist/{history-6AVQX2OQ.js.map → history-PQUJKK26.js.map} +1 -1
- package/dist/{hubspot-SVEMFK5S.js → hubspot-Y77VLY6Y.js} +8 -9
- package/dist/{hubspot-SVEMFK5S.js.map → hubspot-Y77VLY6Y.js.map} +1 -1
- package/dist/{icon-L4RSS6PZ.js → icon-I43F77FV.js} +4 -4
- package/dist/{ideas-NFOW3HKJ.js → ideas-MIDU7YOA.js} +2 -3
- package/dist/{images-2EFFUNNV.js → images-S254MS6O.js} +9 -9
- package/dist/{ingest-2SO62RRI.js → ingest-J4I3HKM3.js} +2 -3
- package/dist/{ingest-2SO62RRI.js.map → ingest-J4I3HKM3.js.map} +1 -1
- package/dist/{ingest-2EIKN4QC.js → ingest-YV2NLDBE.js} +3 -4
- package/dist/{inspect-4OOS4APT.js → inspect-Q5NHBBHX.js} +3 -4
- package/dist/{inspect-4OOS4APT.js.map → inspect-Q5NHBBHX.js.map} +1 -1
- package/dist/{inspiration-S3DU4CMQ.js → inspiration-P265QJ2H.js} +1 -1
- package/dist/{keyword-metrics-SF4CSNZ2.js → keyword-metrics-PDY4ZXSP.js} +3 -4
- package/dist/{keyword-metrics-SF4CSNZ2.js.map → keyword-metrics-PDY4ZXSP.js.map} +1 -1
- package/dist/{keywords-for-site-WDAOPNKC.js → keywords-for-site-GALSCV77.js} +3 -4
- package/dist/{keywords-for-site-WDAOPNKC.js.map → keywords-for-site-GALSCV77.js.map} +1 -1
- package/dist/{landing-2ZB46LXH.js → landing-CJYGWCK4.js} +3 -3
- package/dist/{leads-A4W5KTWB.js → leads-PHKG6CP3.js} +3 -4
- package/dist/{leads-A4W5KTWB.js.map → leads-PHKG6CP3.js.map} +1 -1
- package/dist/{learn-IPULBCOD.js → learn-FUQSY7DN.js} +4 -5
- package/dist/{learn-IPULBCOD.js.map → learn-FUQSY7DN.js.map} +1 -1
- package/dist/{line-item-writes-EMYSOJKM.js → line-item-writes-E6MZPIZZ.js} +3 -4
- package/dist/{line-item-writes-EMYSOJKM.js.map → line-item-writes-E6MZPIZZ.js.map} +1 -1
- package/dist/{line-items-5NECXUZT.js → line-items-7ZGIKEF2.js} +5 -5
- package/dist/{link-CI45HWFN.js → link-QYAW6A2W.js} +3 -4
- package/dist/{link-CI45HWFN.js.map → link-QYAW6A2W.js.map} +1 -1
- package/dist/{linkedin-B7SYR75X.js → linkedin-FFSDSGGS.js} +26 -27
- package/dist/{linkedin-B7SYR75X.js.map → linkedin-FFSDSGGS.js.map} +1 -1
- package/dist/{list-ZBT3EBVZ.js → list-5IC6KIKO.js} +3 -4
- package/dist/{list-ZBT3EBVZ.js.map → list-5IC6KIKO.js.map} +1 -1
- package/dist/{list-2BARXOT5.js → list-NVQC5SNY.js} +2 -3
- package/dist/{list-2BARXOT5.js.map → list-NVQC5SNY.js.map} +1 -1
- package/dist/{list-BIEVLEHS.js → list-SAV3LQHY.js} +3 -4
- package/dist/{list-BIEVLEHS.js.map → list-SAV3LQHY.js.map} +1 -1
- package/dist/{log-C23OOAJZ.js → log-XZPVOALD.js} +3 -4
- package/dist/{log-C23OOAJZ.js.map → log-XZPVOALD.js.map} +1 -1
- package/dist/{logo-Q5D7PZY6.js → logo-2IP663QO.js} +3 -3
- package/dist/{lookup-ETWY47F7.js → lookup-XK45W2SH.js} +5 -6
- package/dist/{make-TPKKJXGL.js → make-BMWRKIIY.js} +20 -18
- package/dist/{make-TPKKJXGL.js.map → make-BMWRKIIY.js.map} +1 -1
- package/dist/{map-SYZMPHLL.js → map-4J5WIWIG.js} +4 -5
- package/dist/{map-SYZMPHLL.js.map → map-4J5WIWIG.js.map} +1 -1
- package/dist/{mcp-6FQBVJ6F.js → mcp-XXD7ZQCP.js} +2 -3
- package/dist/{mcp-6FQBVJ6F.js.map → mcp-XXD7ZQCP.js.map} +1 -1
- package/dist/{media-sources-ZXHEEP6T.js → media-sources-O6ZRUA3N.js} +2 -2
- package/dist/{members-UDY4OOJW.js → members-D5ZYLS4Y.js} +3 -4
- package/dist/{members-UDY4OOJW.js.map → members-D5ZYLS4Y.js.map} +1 -1
- package/dist/{normalize-DAKHYS3V.js → normalize-PCNC6E2N.js} +3 -7
- package/dist/{normalize-DAKHYS3V.js.map → normalize-PCNC6E2N.js.map} +1 -1
- package/dist/{options-QL3ULED5.js → options-MQ65VEVD.js} +6 -7
- package/dist/{options-QL3ULED5.js.map → options-MQ65VEVD.js.map} +1 -1
- package/dist/{performance-UF5VTY2U.js → performance-6QW2KEEQ.js} +4 -5
- package/dist/{promoted-tweet-writes-7HGESJ46.js → promoted-tweet-writes-JPLHY3GM.js} +3 -4
- package/dist/{promoted-tweet-writes-7HGESJ46.js.map → promoted-tweet-writes-JPLHY3GM.js.map} +1 -1
- package/dist/{promoted-tweets-LZKS5JIF.js → promoted-tweets-SURKMHFI.js} +3 -3
- package/dist/{publish-NPD3SMZL.js → publish-HCQ6MXLB.js} +3 -4
- package/dist/{publish-NPD3SMZL.js.map → publish-HCQ6MXLB.js.map} +1 -1
- package/dist/{reddit-NU2N3LZD.js → reddit-GIP3ADMS.js} +4 -5
- package/dist/{refresh-EBVJ2C6L.js → refresh-UXQSLCR3.js} +2 -3
- package/dist/{refresh-EBVJ2C6L.js.map → refresh-UXQSLCR3.js.map} +1 -1
- package/dist/{release-V43YB2PY.js → release-5KVLXNP6.js} +3 -4
- package/dist/{release-V43YB2PY.js.map → release-5KVLXNP6.js.map} +1 -1
- package/dist/{remove-QPSWLFI4.js → remove-6FIVKCJI.js} +2 -3
- package/dist/{remove-QPSWLFI4.js.map → remove-6FIVKCJI.js.map} +1 -1
- package/dist/{reopen-GQ66NMWF.js → reopen-YM5LNOLB.js} +3 -4
- package/dist/{reopen-GQ66NMWF.js.map → reopen-YM5LNOLB.js.map} +1 -1
- package/dist/{rerun-PZK275DY.js → rerun-6XZG7BGK.js} +17 -18
- package/dist/{rerun-PZK275DY.js.map → rerun-6XZG7BGK.js.map} +1 -1
- package/dist/{research-FMM6AWZC.js → research-2BLEISBG.js} +10 -10
- package/dist/{research-GEOCUBXB.js → research-YOGE7GT2.js} +2 -3
- package/dist/{research-GEOCUBXB.js.map → research-YOGE7GT2.js.map} +1 -1
- package/dist/{reset-REXJ6AUK.js → reset-C4UHQ3EU.js} +2 -3
- package/dist/{reset-REXJ6AUK.js.map → reset-C4UHQ3EU.js.map} +1 -1
- package/dist/{reset-Y72IVESB.js → reset-OLVB6AE6.js} +2 -3
- package/dist/{reset-Y72IVESB.js.map → reset-OLVB6AE6.js.map} +1 -1
- package/dist/{resolve-OGX7C4TV.js → resolve-XYH2GDAE.js} +3 -4
- package/dist/{resolve-OGX7C4TV.js.map → resolve-XYH2GDAE.js.map} +1 -1
- package/dist/{retry-TCUBBFR5.js → retry-726GKI6V.js} +2 -3
- package/dist/{retry-TCUBBFR5.js.map → retry-726GKI6V.js.map} +1 -1
- package/dist/{retry-CD6JAQ3F.js → retry-7EELDEQP.js} +2 -3
- package/dist/{retry-CD6JAQ3F.js.map → retry-7EELDEQP.js.map} +1 -1
- package/dist/{run-EUO34T2J.js → run-MMEDKJDB.js} +17 -18
- package/dist/{run-A5ZDXTOI.js → run-P4KR2MXC.js} +3 -4
- package/dist/{run-A5ZDXTOI.js.map → run-P4KR2MXC.js.map} +1 -1
- package/dist/{scaffold-ad-SW2HEWM3.js → scaffold-ad-PBTEWDAC.js} +12 -13
- package/dist/{scaffold-ad-SW2HEWM3.js.map → scaffold-ad-PBTEWDAC.js.map} +1 -1
- package/dist/{scaffold-static-ad-ECTJL54Y.js → scaffold-static-ad-RM4M4X5U.js} +36 -37
- package/dist/scaffold-static-ad-RM4M4X5U.js.map +1 -0
- package/dist/{scaffold-video-EI7U7RBK.js → scaffold-video-O2TTKZIE.js} +11 -12
- package/dist/{scaffold-video-EI7U7RBK.js.map → scaffold-video-O2TTKZIE.js.map} +1 -1
- package/dist/{schedule-S5YZJZ5U.js → schedule-RDK4GEPI.js} +2 -3
- package/dist/{schedule-S5YZJZ5U.js.map → schedule-RDK4GEPI.js.map} +1 -1
- package/dist/{scheduled-agents-N4LJRM4C.js → scheduled-agents-6U44QE76.js} +11 -11
- package/dist/{schema-R7JWWOF4.js → schema-CHJDC7GQ.js} +4 -8
- package/dist/{schema-R7JWWOF4.js.map → schema-CHJDC7GQ.js.map} +1 -1
- package/dist/{search-KHMQH3AT.js → search-PMJRU3C4.js} +2 -3
- package/dist/{search-KHMQH3AT.js.map → search-PMJRU3C4.js.map} +1 -1
- package/dist/{select-O2FN2JEQ.js → select-OEUKOVZ5.js} +8 -9
- package/dist/{select-O2FN2JEQ.js.map → select-OEUKOVZ5.js.map} +1 -1
- package/dist/{sends-BQZM5PLS.js → sends-WGJVQUMF.js} +4 -5
- package/dist/{sends-BQZM5PLS.js.map → sends-WGJVQUMF.js.map} +1 -1
- package/dist/{set-prompt-2HASHGWC.js → set-prompt-5E5I7QAZ.js} +8 -9
- package/dist/{set-prompt-2HASHGWC.js.map → set-prompt-5E5I7QAZ.js.map} +1 -1
- package/dist/{setup-links-GYSE56GX.js → setup-links-REPREN3C.js} +3 -4
- package/dist/{setup-links-GYSE56GX.js.map → setup-links-REPREN3C.js.map} +1 -1
- package/dist/{site-4SKM7RKG.js → site-WFSWIA3S.js} +4 -5
- package/dist/{site-4SKM7RKG.js.map → site-WFSWIA3S.js.map} +1 -1
- package/dist/{sources-R2NKNC6J.js → sources-AMI2AWKZ.js} +9 -10
- package/dist/{sources-R2NKNC6J.js.map → sources-AMI2AWKZ.js.map} +1 -1
- package/dist/{sources-FQ2UZTHL.js → sources-YBQ6KPFM.js} +6 -6
- package/dist/{stale-W756ACKC.js → stale-IGFUKEN2.js} +7 -8
- package/dist/{stale-W756ACKC.js.map → stale-IGFUKEN2.js.map} +1 -1
- package/dist/{status-SE2VZJJB.js → status-7F2KHFGA.js} +3 -4
- package/dist/{status-SE2VZJJB.js.map → status-7F2KHFGA.js.map} +1 -1
- package/dist/{stock-KXJ26BY4.js → stock-2YCDN3N6.js} +5 -5
- package/dist/{studio-SYKOSNDB.js → studio-RA7QQH4O.js} +1 -1
- package/dist/{sync-LJGSODK3.js → sync-GWTLKZTU.js} +2 -3
- package/dist/{sync-LJGSODK3.js.map → sync-GWTLKZTU.js.map} +1 -1
- package/dist/{sync-definition-QR2N233R.js → sync-definition-UGSDX2SZ.js} +11 -12
- package/dist/{tags-PYWFSBTR.js → tags-3WPW6PTV.js} +4 -4
- package/dist/{tags-QQU3OKMZ.js → tags-6342FQEB.js} +3 -4
- package/dist/{tags-QQU3OKMZ.js.map → tags-6342FQEB.js.map} +1 -1
- package/dist/{tags-5SBMRC2A.js → tags-ABHSX6M5.js} +3 -4
- package/dist/{tags-5SBMRC2A.js.map → tags-ABHSX6M5.js.map} +1 -1
- package/dist/{tags-YYLNF3PK.js → tags-FJIBBBRG.js} +3 -4
- package/dist/{tags-YYLNF3PK.js.map → tags-FJIBBBRG.js.map} +1 -1
- package/dist/{tags-4BAVFH4S.js → tags-KFYLZLB3.js} +2 -3
- package/dist/{tags-4BAVFH4S.js.map → tags-KFYLZLB3.js.map} +1 -1
- package/dist/{targeting-criteria-RJFLFICN.js → targeting-criteria-NR47AF5C.js} +3 -3
- package/dist/{targets-S2MT2PNB.js → targets-L56KOVQE.js} +3 -4
- package/dist/{targets-S2MT2PNB.js.map → targets-L56KOVQE.js.map} +1 -1
- package/dist/{templates-ZE5TOGRT.js → templates-B6XGDYUF.js} +3 -4
- package/dist/{templates-ZE5TOGRT.js.map → templates-B6XGDYUF.js.map} +1 -1
- package/dist/{testimonials-DII5DYLR.js → testimonials-CVC4YIXO.js} +6 -6
- package/dist/{top-companies-PGIAEHDF.js → top-companies-45X3DT7Z.js} +3 -4
- package/dist/{top-companies-PGIAEHDF.js.map → top-companies-45X3DT7Z.js.map} +1 -1
- package/dist/{translate-GXTS633J.js → translate-VP5R67PL.js} +11 -12
- package/dist/{translate-GXTS633J.js.map → translate-VP5R67PL.js.map} +1 -1
- package/dist/{triggers-2PTONXRU.js → triggers-22EMIVFD.js} +3 -4
- package/dist/{triggers-2PTONXRU.js.map → triggers-22EMIVFD.js.map} +1 -1
- package/dist/{unlink-XRMYJ6DB.js → unlink-65KUN6ID.js} +3 -4
- package/dist/{unlink-XRMYJ6DB.js.map → unlink-65KUN6ID.js.map} +1 -1
- package/dist/{unstage-FY7A3YFF.js → unstage-2E3I5SWF.js} +3 -4
- package/dist/{unstage-FY7A3YFF.js.map → unstage-2E3I5SWF.js.map} +1 -1
- package/dist/{unstage-RM2RLXKD.js → unstage-4ZEULXEQ.js} +4 -5
- package/dist/{unstage-RM2RLXKD.js.map → unstage-4ZEULXEQ.js.map} +1 -1
- package/dist/{update-S4562V3O.js → update-2S7CSEAW.js} +3 -4
- package/dist/{update-S4562V3O.js.map → update-2S7CSEAW.js.map} +1 -1
- package/dist/{update-V6YVEUI2.js → update-7NCOTAQZ.js} +3 -4
- package/dist/{update-V6YVEUI2.js.map → update-7NCOTAQZ.js.map} +1 -1
- package/dist/{update-PJ67D2OG.js → update-D6DJC6T7.js} +2 -3
- package/dist/{update-PJ67D2OG.js.map → update-D6DJC6T7.js.map} +1 -1
- package/dist/{update-E5SRBXQR.js → update-KREBPGBH.js} +3 -4
- package/dist/{update-E5SRBXQR.js.map → update-KREBPGBH.js.map} +1 -1
- package/dist/{upload-R6CQVLKF.js → upload-O6NHRPS7.js} +3 -4
- package/dist/{upload-R6CQVLKF.js.map → upload-O6NHRPS7.js.map} +1 -1
- package/dist/{url-options-JOKU46F2.js → url-options-GGXAL3J4.js} +3 -4
- package/dist/{url-options-JOKU46F2.js.map → url-options-GGXAL3J4.js.map} +1 -1
- package/dist/{url-params-7U2XMOWF.js → url-params-3EFGVTZZ.js} +3 -4
- package/dist/{url-params-7U2XMOWF.js.map → url-params-3EFGVTZZ.js.map} +1 -1
- package/dist/{validate-7YPOUKPB.js → validate-CSJM7XZM.js} +9 -10
- package/dist/{validate-7YPOUKPB.js.map → validate-CSJM7XZM.js.map} +1 -1
- package/dist/{videos-LICG6ACJ.js → videos-YSXYGTBM.js} +5 -5
- package/dist/{web-BA2PGTWU.js → web-IGIGVEKS.js} +3 -4
- package/dist/{web-BA2PGTWU.js.map → web-IGIGVEKS.js.map} +1 -1
- package/dist/{winning-ads-C6S2C5VP.js → winning-ads-2WS7FI4E.js} +2 -2
- package/dist/{write-commands-7SJ3BOW5.js → write-commands-5C7FUOVN.js} +4 -5
- package/dist/{write-commands-7SJ3BOW5.js.map → write-commands-5C7FUOVN.js.map} +1 -1
- package/dist/{x-CZHRC6U7.js → x-BFSKFCZD.js} +6 -6
- package/package.json +1 -1
- package/dist/add-2BEGRHUX.js.map +0 -1
- package/dist/analytics-IFELDWLL.js.map +0 -1
- package/dist/chunk-4PDHHHUJ.js +0 -537
- package/dist/chunk-4PDHHHUJ.js.map +0 -1
- package/dist/chunk-7EPXVICM.js.map +0 -1
- package/dist/chunk-ASI4P6X2.js.map +0 -1
- package/dist/chunk-FPOGPFAG.js.map +0 -1
- package/dist/chunk-HR6IWNKE.js.map +0 -1
- package/dist/chunk-HROZYQ5H.js.map +0 -1
- package/dist/chunk-NYIGXDUG.js.map +0 -1
- package/dist/chunk-QE7W555R.js.map +0 -1
- package/dist/flows-KTFAML22.js.map +0 -1
- package/dist/funnel-I6XIAEHG.js.map +0 -1
- package/dist/get-5PKNKJ5S.js.map +0 -1
- package/dist/plan-FT632COT.js +0 -51
- package/dist/plan-FT632COT.js.map +0 -1
- package/dist/questionnaire-JNGYJTAY.js +0 -37
- package/dist/questionnaire-JNGYJTAY.js.map +0 -1
- package/dist/scaffold-static-ad-ECTJL54Y.js.map +0 -1
- /package/dist/{actions-6TQMSVWD.js.map → actions-P35MEMGN.js.map} +0 -0
- /package/dist/{ads-AGYCVD62.js.map → ads-73PGA4YC.js.map} +0 -0
- /package/dist/{avatars-467OSBD6.js.map → avatars-EKCKHCC3.js.map} +0 -0
- /package/dist/{brand-YRTEPGBK.js.map → brand-C6PFGGQN.js.map} +0 -0
- /package/dist/{campaigns-OYMXDGWX.js.map → campaigns-KZYZTXDS.js.map} +0 -0
- /package/dist/{canvas-YQFG52IG.js.map → canvas-5NB27FX2.js.map} +0 -0
- /package/dist/{catalog-XLXIM7IW.js.map → catalog-VSSY6FGI.js.map} +0 -0
- /package/dist/{chunk-5ZNTADVR.js.map → chunk-3G3ZDLMI.js.map} +0 -0
- /package/dist/{chunk-ZDMTXQ2Q.js.map → chunk-3IBYKLXR.js.map} +0 -0
- /package/dist/{chunk-CWYAELVG.js.map → chunk-464O4MT2.js.map} +0 -0
- /package/dist/{chunk-NA63BH7V.js.map → chunk-4AUMTNVB.js.map} +0 -0
- /package/dist/{chunk-NDEE6G2J.js.map → chunk-4BQXAE7Z.js.map} +0 -0
- /package/dist/{chunk-2AOE2MZQ.js.map → chunk-5ZDLTE5T.js.map} +0 -0
- /package/dist/{chunk-ULG4QRTV.js.map → chunk-6NB47MRW.js.map} +0 -0
- /package/dist/{chunk-24EB7EDR.js.map → chunk-7YCRFMXF.js.map} +0 -0
- /package/dist/{chunk-WGUQHAJY.js.map → chunk-A4LOJ2VD.js.map} +0 -0
- /package/dist/{chunk-6F7DVPOS.js.map → chunk-AEOSAVVL.js.map} +0 -0
- /package/dist/{chunk-N4LAYIIN.js.map → chunk-CSYSX4D2.js.map} +0 -0
- /package/dist/{chunk-RX2DKU3W.js.map → chunk-DGUNI37S.js.map} +0 -0
- /package/dist/{chunk-I3ZR655O.js.map → chunk-IR6D7K4H.js.map} +0 -0
- /package/dist/{chunk-FUHN4MFY.js.map → chunk-JQJDXPCO.js.map} +0 -0
- /package/dist/{chunk-7CTMH5AK.js.map → chunk-KAUOHQTF.js.map} +0 -0
- /package/dist/{chunk-VYQ3QJ3C.js.map → chunk-KHRXPQID.js.map} +0 -0
- /package/dist/{chunk-6Y7ZBENQ.js.map → chunk-LECGCWT5.js.map} +0 -0
- /package/dist/{chunk-5WCSKQ7Z.js.map → chunk-LZ73CZGP.js.map} +0 -0
- /package/dist/{chunk-R25YLW6H.js.map → chunk-MELOSESI.js.map} +0 -0
- /package/dist/{chunk-DCRPXOJJ.js.map → chunk-MXYBTMKB.js.map} +0 -0
- /package/dist/{chunk-54C6YDGJ.js.map → chunk-NPY4QUMQ.js.map} +0 -0
- /package/dist/{chunk-LYQJ4PZW.js.map → chunk-OQ6663F4.js.map} +0 -0
- /package/dist/{chunk-H3427GPU.js.map → chunk-OZRUJVIQ.js.map} +0 -0
- /package/dist/{chunk-KMKEYI37.js.map → chunk-Q2V6E6SL.js.map} +0 -0
- /package/dist/{chunk-VL43TNIP.js.map → chunk-QRP3PXWN.js.map} +0 -0
- /package/dist/{chunk-C46GUI2S.js.map → chunk-RZBEK2VE.js.map} +0 -0
- /package/dist/{chunk-2VPBIT65.js.map → chunk-S3A3YOKO.js.map} +0 -0
- /package/dist/{chunk-FYGR3I2A.js.map → chunk-S77PZVYM.js.map} +0 -0
- /package/dist/{chunk-VLMBTPXU.js.map → chunk-SHL7LOC3.js.map} +0 -0
- /package/dist/{chunk-KS2QY6MK.js.map → chunk-W3ZHJJVT.js.map} +0 -0
- /package/dist/{chunk-RL5CP7N6.js.map → chunk-Y6O7EWYY.js.map} +0 -0
- /package/dist/{chunk-6NY2GPR4.js.map → chunk-Y6ZQXUZ7.js.map} +0 -0
- /package/dist/{chunk-WKQG6TER.js.map → chunk-ZEYEWPK6.js.map} +0 -0
- /package/dist/{connect-FCXNVTXG.js.map → connect-QCOGEPP4.js.map} +0 -0
- /package/dist/{creatives-FXUQ5WSD.js.map → creatives-B5NTXPUB.js.map} +0 -0
- /package/dist/{customers-XH2DMTFH.js.map → customers-A36LOZOB.js.map} +0 -0
- /package/dist/{feedback-EIZKS4JU.js.map → feedback-OLTCHE6C.js.map} +0 -0
- /package/dist/{find-FRRHAPWX.js.map → find-OTDIX6V4.js.map} +0 -0
- /package/dist/{fonts-MXR3ZKDX.js.map → fonts-EMMX3KII.js.map} +0 -0
- /package/dist/{ga4-DV2AXCSL.js.map → ga4-UDQ2HA2J.js.map} +0 -0
- /package/dist/{google-QYYYSSXI.js.map → google-KTO3PLEU.js.map} +0 -0
- /package/dist/{google-6OGZX47I.js.map → google-M7KEXVK5.js.map} +0 -0
- /package/dist/{gsc-TAKOF7J5.js.map → gsc-P3QYGDV2.js.map} +0 -0
- /package/dist/{icon-L4RSS6PZ.js.map → icon-I43F77FV.js.map} +0 -0
- /package/dist/{ideas-NFOW3HKJ.js.map → ideas-MIDU7YOA.js.map} +0 -0
- /package/dist/{images-2EFFUNNV.js.map → images-S254MS6O.js.map} +0 -0
- /package/dist/{ingest-2EIKN4QC.js.map → ingest-YV2NLDBE.js.map} +0 -0
- /package/dist/{inspiration-S3DU4CMQ.js.map → inspiration-P265QJ2H.js.map} +0 -0
- /package/dist/{landing-2ZB46LXH.js.map → landing-CJYGWCK4.js.map} +0 -0
- /package/dist/{line-items-5NECXUZT.js.map → line-items-7ZGIKEF2.js.map} +0 -0
- /package/dist/{logo-Q5D7PZY6.js.map → logo-2IP663QO.js.map} +0 -0
- /package/dist/{lookup-ETWY47F7.js.map → lookup-XK45W2SH.js.map} +0 -0
- /package/dist/{media-sources-ZXHEEP6T.js.map → media-sources-O6ZRUA3N.js.map} +0 -0
- /package/dist/{performance-UF5VTY2U.js.map → performance-6QW2KEEQ.js.map} +0 -0
- /package/dist/{promoted-tweets-LZKS5JIF.js.map → promoted-tweets-SURKMHFI.js.map} +0 -0
- /package/dist/{reddit-NU2N3LZD.js.map → reddit-GIP3ADMS.js.map} +0 -0
- /package/dist/{research-FMM6AWZC.js.map → research-2BLEISBG.js.map} +0 -0
- /package/dist/{run-EUO34T2J.js.map → run-MMEDKJDB.js.map} +0 -0
- /package/dist/{scheduled-agents-N4LJRM4C.js.map → scheduled-agents-6U44QE76.js.map} +0 -0
- /package/dist/{sources-FQ2UZTHL.js.map → sources-YBQ6KPFM.js.map} +0 -0
- /package/dist/{stock-KXJ26BY4.js.map → stock-2YCDN3N6.js.map} +0 -0
- /package/dist/{studio-SYKOSNDB.js.map → studio-RA7QQH4O.js.map} +0 -0
- /package/dist/{sync-definition-QR2N233R.js.map → sync-definition-UGSDX2SZ.js.map} +0 -0
- /package/dist/{tags-PYWFSBTR.js.map → tags-3WPW6PTV.js.map} +0 -0
- /package/dist/{targeting-criteria-RJFLFICN.js.map → targeting-criteria-NR47AF5C.js.map} +0 -0
- /package/dist/{testimonials-DII5DYLR.js.map → testimonials-CVC4YIXO.js.map} +0 -0
- /package/dist/{videos-LICG6ACJ.js.map → videos-YSXYGTBM.js.map} +0 -0
- /package/dist/{winning-ads-C6S2C5VP.js.map → winning-ads-2WS7FI4E.js.map} +0 -0
- /package/dist/{x-CZHRC6U7.js.map → x-BFSKFCZD.js.map} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
calendarDaySchema,
|
|
7
7
|
todayUtc,
|
|
8
8
|
windowTooLong
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XF4JUKVF.js";
|
|
10
10
|
|
|
11
11
|
// ../api/src/accounts/crm.ts
|
|
12
12
|
import { z } from "zod";
|
|
@@ -1076,4 +1076,4 @@ export {
|
|
|
1076
1076
|
accountsCampaignsRequestSchema,
|
|
1077
1077
|
ACCOUNTS_NO_SETTINGS_MESSAGE
|
|
1078
1078
|
};
|
|
1079
|
-
//# sourceMappingURL=chunk-
|
|
1079
|
+
//# sourceMappingURL=chunk-ZEYEWPK6.js.map
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
failApi,
|
|
3
3
|
failValidation
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-3HJLHTWP.js";
|
|
5
|
+
import "./chunk-XF4JUKVF.js";
|
|
6
6
|
import "./chunk-GXDLWBOY.js";
|
|
7
7
|
import "./chunk-TEINLN64.js";
|
|
8
8
|
import "./chunk-ZJWUBJYQ.js";
|
|
9
|
-
import "./chunk-HR6IWNKE.js";
|
|
10
9
|
import "./chunk-NE4F3FHN.js";
|
|
11
10
|
import {
|
|
12
11
|
apiPost,
|
|
@@ -195,4 +194,4 @@ var claimCommand = defineCommand({
|
|
|
195
194
|
export {
|
|
196
195
|
claimCommand
|
|
197
196
|
};
|
|
198
|
-
//# sourceMappingURL=claim-
|
|
197
|
+
//# sourceMappingURL=claim-FZ5OQLMU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/actions/claim.ts","../src/commands/actions/skillCatalog.ts"],"sourcesContent":["import type { ActionsClaimResponse, ActionsRecommendSkillsResponse, SkillRecommendation } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost, validateConvexId } from \"../../client.ts\";\nimport { requireChatId } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi, failValidation } from \"./shared.ts\";\nimport { readSkillCatalog } from \"./skillCatalog.ts\";\n\nregisterSchema({\n command: \"actions.claim\",\n description:\n \"Claim an action for the current chat (live — visible to other chats immediately). Claim only what you're actively working on now: it's required before `complete`, but NOT for `update` or `discard` (those stage without a claim). Returns action details plus a fast-model recommendation of which skills to load for the work (`recommendedSkills`) and a routing hint: load every skill that owns part of the work and the tool doc for each baker CLI family you'll use.\",\n args: {\n id: { type: \"string\", description: \"Action ID\", required: true },\n },\n});\n\nasync function recommendSkills(actionId: string): Promise<SkillRecommendation[]> {\n const skills = readSkillCatalog(process.cwd());\n if (skills.length === 0) return [];\n const response = await apiPost<ActionsRecommendSkillsResponse>(\"/api/actions/recommend-skills\", {\n actionId,\n skills,\n });\n return response.data.recommendations;\n}\n\n// Keep in sync with the claim-hint block in scripts/skill-routing-evals/run.mjs —\n// the action-claim evals embed this nudge so they test the real production surface.\nconst ROUTING_HINT =\n \"Actions often span several surfaces (a landing page plus a Google Ads change, a sheet pull plus an audience upload). Before starting, load EVERY skill that owns part of the work and read the tool doc (__tooling__/docs/tools/baker/<family>.md) for each baker CLI family you'll use. If the action references source material living in a connected tool (an email attachment, a call, a CRM record, a spreadsheet), reach for that tool too. If it describes recurring or future-dated work, it belongs on a schedule — see __tooling__/docs/tools/baker/scheduled-agents.md.\";\n\nfunction buildHints(recommendations: SkillRecommendation[]): string[] {\n if (recommendations.length === 0) {\n return [\"Review the action name, description, and tags above.\", ROUTING_HINT];\n }\n return [\n \"Recommended skills for this action (load the ones you'll use):\",\n ...recommendations.map((r) => ` /${r.name} — ${r.reason}`),\n \"Suggestions come from the action's name/description/tags only — the work may need more.\",\n ROUTING_HINT,\n ];\n}\n\nexport const claimCommand = defineCommand({\n meta: {\n name: \"claim\",\n description:\n \"Claim an action so other chats see you're working on it. Required before `complete` (update and discard don't need a claim). Example: baker actions claim <action-id>\",\n },\n args: {\n id: { type: \"positional\", description: \"Action ID\", required: false },\n \"action-id\": { type: \"string\", description: \"Action ID\", required: false },\n },\n run: async ({ args }) => {\n try {\n const id = (args.id as string | undefined) || (args[\"action-id\"] as string | undefined);\n if (!id) {\n failValidation(\"Action ID is required.\");\n }\n validateConvexId(id);\n const chatId = requireChatId();\n const response = await apiPost<ActionsClaimResponse>(\"/api/actions/claim\", {\n actionId: id,\n chatId,\n });\n\n let recommendedSkills: SkillRecommendation[] = [];\n try {\n recommendedSkills = await recommendSkills(id);\n } catch {\n // Recommendation is best-effort — a claim must never fail because the hint could not be produced.\n }\n\n const data = response.data ? { ...response.data, recommendedSkills } : response.data;\n writeJson({ ok: response.ok, data, hints: buildHints(recommendedSkills) });\n } catch (err) {\n failApi(err);\n }\n },\n});\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\ninterface SkillCatalogEntry {\n name: string;\n description: string;\n}\n\nconst DESCRIPTION_MAX = 600;\nconst SKILLS_SUBPATH = join(\".claude\", \"skills\");\n\n/** The backlog workflow lives in the actions tool doc, not a skill — never recommend a legacy `actions` skill a stale scaffold may still carry. */\nconst EXCLUDED_SKILLS = new Set([\"actions\"]);\n\nfunction stripQuotes(value: string): string {\n const trimmed = value.trim();\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return trimmed.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\n/g, \"\\n\");\n }\n // YAML single-quoted scalars only escape a literal quote by doubling it ('').\n if (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) {\n return trimmed.slice(1, -1).replace(/''/g, \"'\");\n }\n return trimmed;\n}\n\nfunction extractFrontmatterLines(md: string): string[] | null {\n if (!md.startsWith(\"---\")) return null;\n const end = md.indexOf(\"\\n---\", 3);\n if (end === -1) return null;\n return md.slice(md.indexOf(\"\\n\", 3) + 1, end).split(\"\\n\");\n}\n\nconst BLOCK_SCALAR = /^([|>])[+-]?$/;\n\nfunction collectBlockLines(lines: string[], start: number): string[] {\n const collected: string[] = [];\n for (let i = start; i < lines.length; i++) {\n const line = lines[i] ?? \"\";\n if (line.trim() === \"\") {\n collected.push(\"\");\n } else if (/^\\s/.test(line)) {\n collected.push(line.trim());\n } else {\n break; // dedented to a new top-level key — block is over\n }\n }\n while (collected.length > 0 && collected.at(-1) === \"\") collected.pop();\n return collected;\n}\n\n/** Folded (`>`): join lines with spaces, blank lines become paragraph breaks. */\nfunction foldLines(collected: string[]): string {\n const paragraphs: string[] = [];\n let buffer: string[] = [];\n for (const line of collected) {\n if (line === \"\") {\n if (buffer.length > 0) paragraphs.push(buffer.join(\" \"));\n buffer = [];\n } else {\n buffer.push(line);\n }\n }\n if (buffer.length > 0) paragraphs.push(buffer.join(\" \"));\n return paragraphs.join(\"\\n\");\n}\n\n/** Join a YAML block scalar's indented continuation lines: literal (`|`) keeps line breaks, folded (`>`) joins with spaces. */\nfunction readBlockScalar(lines: string[], start: number, style: \"|\" | \">\"): string {\n const collected = collectBlockLines(lines, start);\n return style === \"|\" ? collected.join(\"\\n\") : foldLines(collected);\n}\n\nfunction readField(lines: string[], field: string): string | null {\n for (let i = 0; i < lines.length; i++) {\n const match = (lines[i] ?? \"\").match(/^([A-Za-z0-9_-]+):\\s*(.*)$/);\n if (!match || match[1] !== field) continue;\n const inline = (match[2] ?? \"\").trim();\n const scalar = inline.match(BLOCK_SCALAR);\n if (scalar) {\n return readBlockScalar(lines, i + 1, scalar[1] as \"|\" | \">\");\n }\n return stripQuotes(inline);\n }\n return null;\n}\n\nexport function parseSkillFrontmatter(md: string): SkillCatalogEntry | null {\n const lines = extractFrontmatterLines(md);\n if (!lines) return null;\n const name = readField(lines, \"name\");\n const description = readField(lines, \"description\");\n if (!name || !description) return null;\n const trimmed = description.length > DESCRIPTION_MAX ? `${description.slice(0, DESCRIPTION_MAX)}…` : description;\n return { name, description: trimmed };\n}\n\nexport function findSkillsDir(startDir: string): string | null {\n let dir = startDir;\n for (;;) {\n const candidate = join(dir, SKILLS_SUBPATH);\n if (existsSync(candidate)) return candidate;\n const parent = dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n\nexport function readSkillCatalog(startDir: string): SkillCatalogEntry[] {\n const skillsDir = findSkillsDir(startDir);\n if (!skillsDir) return [];\n\n const entries: SkillCatalogEntry[] = [];\n for (const dirent of readdirSync(skillsDir, { withFileTypes: true })) {\n if (!dirent.isDirectory() || EXCLUDED_SKILLS.has(dirent.name)) continue;\n const skillFile = join(skillsDir, dirent.name, \"SKILL.md\");\n if (!existsSync(skillFile)) continue;\n try {\n const parsed = parseSkillFrontmatter(readFileSync(skillFile, \"utf8\"));\n if (parsed) entries.push(parsed);\n } catch {\n // Unreadable skill file — skip it, never block the claim.\n }\n }\n return entries.sort((a, b) => a.name.localeCompare(b.name));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/actions/claim.ts","../src/commands/actions/skillCatalog.ts"],"sourcesContent":["import type { ActionsClaimResponse, ActionsRecommendSkillsResponse, SkillRecommendation } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost, validateConvexId } from \"../../client.ts\";\nimport { requireChatId } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi, failValidation } from \"./shared.ts\";\nimport { readSkillCatalog } from \"./skillCatalog.ts\";\n\nregisterSchema({\n command: \"actions.claim\",\n description:\n \"Claim an action for the current chat (live — visible to other chats immediately). Claim only what you're actively working on now: it's required before `complete`, but NOT for `update` or `discard` (those stage without a claim). Returns action details plus a fast-model recommendation of which skills to load for the work (`recommendedSkills`) and a routing hint: load every skill that owns part of the work and the tool doc for each baker CLI family you'll use.\",\n args: {\n id: { type: \"string\", description: \"Action ID\", required: true },\n },\n});\n\nasync function recommendSkills(actionId: string): Promise<SkillRecommendation[]> {\n const skills = readSkillCatalog(process.cwd());\n if (skills.length === 0) return [];\n const response = await apiPost<ActionsRecommendSkillsResponse>(\"/api/actions/recommend-skills\", {\n actionId,\n skills,\n });\n return response.data.recommendations;\n}\n\n// Keep in sync with the claim-hint block in scripts/skill-routing-evals/run.mjs —\n// the action-claim evals embed this nudge so they test the real production surface.\nconst ROUTING_HINT =\n \"Actions often span several surfaces (a landing page plus a Google Ads change, a sheet pull plus an audience upload). Before starting, load EVERY skill that owns part of the work and read the tool doc (__tooling__/docs/tools/baker/<family>.md) for each baker CLI family you'll use. If the action references source material living in a connected tool (an email attachment, a call, a CRM record, a spreadsheet), reach for that tool too. If it describes recurring or future-dated work, it belongs on a schedule — see __tooling__/docs/tools/baker/scheduled-agents.md.\";\n\nfunction buildHints(recommendations: SkillRecommendation[]): string[] {\n if (recommendations.length === 0) {\n return [\"Review the action name, description, and tags above.\", ROUTING_HINT];\n }\n return [\n \"Recommended skills for this action (load the ones you'll use):\",\n ...recommendations.map((r) => ` /${r.name} — ${r.reason}`),\n \"Suggestions come from the action's name/description/tags only — the work may need more.\",\n ROUTING_HINT,\n ];\n}\n\nexport const claimCommand = defineCommand({\n meta: {\n name: \"claim\",\n description:\n \"Claim an action so other chats see you're working on it. Required before `complete` (update and discard don't need a claim). Example: baker actions claim <action-id>\",\n },\n args: {\n id: { type: \"positional\", description: \"Action ID\", required: false },\n \"action-id\": { type: \"string\", description: \"Action ID\", required: false },\n },\n run: async ({ args }) => {\n try {\n const id = (args.id as string | undefined) || (args[\"action-id\"] as string | undefined);\n if (!id) {\n failValidation(\"Action ID is required.\");\n }\n validateConvexId(id);\n const chatId = requireChatId();\n const response = await apiPost<ActionsClaimResponse>(\"/api/actions/claim\", {\n actionId: id,\n chatId,\n });\n\n let recommendedSkills: SkillRecommendation[] = [];\n try {\n recommendedSkills = await recommendSkills(id);\n } catch {\n // Recommendation is best-effort — a claim must never fail because the hint could not be produced.\n }\n\n const data = response.data ? { ...response.data, recommendedSkills } : response.data;\n writeJson({ ok: response.ok, data, hints: buildHints(recommendedSkills) });\n } catch (err) {\n failApi(err);\n }\n },\n});\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\ninterface SkillCatalogEntry {\n name: string;\n description: string;\n}\n\nconst DESCRIPTION_MAX = 600;\nconst SKILLS_SUBPATH = join(\".claude\", \"skills\");\n\n/** The backlog workflow lives in the actions tool doc, not a skill — never recommend a legacy `actions` skill a stale scaffold may still carry. */\nconst EXCLUDED_SKILLS = new Set([\"actions\"]);\n\nfunction stripQuotes(value: string): string {\n const trimmed = value.trim();\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return trimmed.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\n/g, \"\\n\");\n }\n // YAML single-quoted scalars only escape a literal quote by doubling it ('').\n if (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) {\n return trimmed.slice(1, -1).replace(/''/g, \"'\");\n }\n return trimmed;\n}\n\nfunction extractFrontmatterLines(md: string): string[] | null {\n if (!md.startsWith(\"---\")) return null;\n const end = md.indexOf(\"\\n---\", 3);\n if (end === -1) return null;\n return md.slice(md.indexOf(\"\\n\", 3) + 1, end).split(\"\\n\");\n}\n\nconst BLOCK_SCALAR = /^([|>])[+-]?$/;\n\nfunction collectBlockLines(lines: string[], start: number): string[] {\n const collected: string[] = [];\n for (let i = start; i < lines.length; i++) {\n const line = lines[i] ?? \"\";\n if (line.trim() === \"\") {\n collected.push(\"\");\n } else if (/^\\s/.test(line)) {\n collected.push(line.trim());\n } else {\n break; // dedented to a new top-level key — block is over\n }\n }\n while (collected.length > 0 && collected.at(-1) === \"\") collected.pop();\n return collected;\n}\n\n/** Folded (`>`): join lines with spaces, blank lines become paragraph breaks. */\nfunction foldLines(collected: string[]): string {\n const paragraphs: string[] = [];\n let buffer: string[] = [];\n for (const line of collected) {\n if (line === \"\") {\n if (buffer.length > 0) paragraphs.push(buffer.join(\" \"));\n buffer = [];\n } else {\n buffer.push(line);\n }\n }\n if (buffer.length > 0) paragraphs.push(buffer.join(\" \"));\n return paragraphs.join(\"\\n\");\n}\n\n/** Join a YAML block scalar's indented continuation lines: literal (`|`) keeps line breaks, folded (`>`) joins with spaces. */\nfunction readBlockScalar(lines: string[], start: number, style: \"|\" | \">\"): string {\n const collected = collectBlockLines(lines, start);\n return style === \"|\" ? collected.join(\"\\n\") : foldLines(collected);\n}\n\nfunction readField(lines: string[], field: string): string | null {\n for (let i = 0; i < lines.length; i++) {\n const match = (lines[i] ?? \"\").match(/^([A-Za-z0-9_-]+):\\s*(.*)$/);\n if (!match || match[1] !== field) continue;\n const inline = (match[2] ?? \"\").trim();\n const scalar = inline.match(BLOCK_SCALAR);\n if (scalar) {\n return readBlockScalar(lines, i + 1, scalar[1] as \"|\" | \">\");\n }\n return stripQuotes(inline);\n }\n return null;\n}\n\nexport function parseSkillFrontmatter(md: string): SkillCatalogEntry | null {\n const lines = extractFrontmatterLines(md);\n if (!lines) return null;\n const name = readField(lines, \"name\");\n const description = readField(lines, \"description\");\n if (!name || !description) return null;\n const trimmed = description.length > DESCRIPTION_MAX ? `${description.slice(0, DESCRIPTION_MAX)}…` : description;\n return { name, description: trimmed };\n}\n\nexport function findSkillsDir(startDir: string): string | null {\n let dir = startDir;\n for (;;) {\n const candidate = join(dir, SKILLS_SUBPATH);\n if (existsSync(candidate)) return candidate;\n const parent = dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n\nexport function readSkillCatalog(startDir: string): SkillCatalogEntry[] {\n const skillsDir = findSkillsDir(startDir);\n if (!skillsDir) return [];\n\n const entries: SkillCatalogEntry[] = [];\n for (const dirent of readdirSync(skillsDir, { withFileTypes: true })) {\n if (!dirent.isDirectory() || EXCLUDED_SKILLS.has(dirent.name)) continue;\n const skillFile = join(skillsDir, dirent.name, \"SKILL.md\");\n if (!existsSync(skillFile)) continue;\n try {\n const parsed = parseSkillFrontmatter(readFileSync(skillFile, \"utf8\"));\n if (parsed) entries.push(parsed);\n } catch {\n // Unreadable skill file — skip it, never block the claim.\n }\n }\n return entries.sort((a, b) => a.name.localeCompare(b.name));\n}\n"],"mappings":"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","names":[]}
|
package/dist/cli.js
CHANGED
|
@@ -106,38 +106,38 @@ Formats: --output json works on every command that prints the envelope. --output
|
|
|
106
106
|
Introspection: Run 'baker schema <command>' to inspect argument schemas.`
|
|
107
107
|
},
|
|
108
108
|
subCommands: {
|
|
109
|
-
capabilities: () => import("./capabilities-
|
|
110
|
-
actions: () => import("./actions-
|
|
111
|
-
"scheduled-agents": () => import("./scheduled-agents-
|
|
112
|
-
ads: () => import("./ads-
|
|
113
|
-
brand: () => import("./brand-
|
|
114
|
-
analytics: () => import("./analytics-
|
|
109
|
+
capabilities: () => import("./capabilities-DJFTRJKS.js").then((m) => m.capabilitiesCommand),
|
|
110
|
+
actions: () => import("./actions-P35MEMGN.js").then((m) => m.actionsCommand),
|
|
111
|
+
"scheduled-agents": () => import("./scheduled-agents-6U44QE76.js").then((m) => m.scheduledAgentsCommand),
|
|
112
|
+
ads: () => import("./ads-73PGA4YC.js").then((m) => m.adsCommand),
|
|
113
|
+
brand: () => import("./brand-C6PFGGQN.js").then((m) => m.brandCommand),
|
|
114
|
+
analytics: () => import("./analytics-FKCXIMPO.js").then((m) => m.analyticsCommand),
|
|
115
115
|
experiment: () => import("./experiment-LKK77YAN.js").then((m) => m.experimentCommand),
|
|
116
|
-
ga4: () => import("./ga4-
|
|
117
|
-
gsc: () => import("./gsc-
|
|
118
|
-
research: () => import("./research-
|
|
119
|
-
creatives: () => import("./creatives-
|
|
120
|
-
flows: () => import("./flows-
|
|
121
|
-
funnel: () => import("./funnel-
|
|
122
|
-
images: () => import("./images-
|
|
123
|
-
studio: () => import("./studio-
|
|
124
|
-
avatars: () => import("./avatars-
|
|
125
|
-
landing: () => import("./landing-
|
|
126
|
-
videos: () => import("./videos-
|
|
127
|
-
testimonials: () => import("./testimonials-
|
|
128
|
-
canvas: () => import("./canvas-
|
|
129
|
-
tags: () => import("./tags-
|
|
116
|
+
ga4: () => import("./ga4-UDQ2HA2J.js").then((m) => m.ga4Command),
|
|
117
|
+
gsc: () => import("./gsc-P3QYGDV2.js").then((m) => m.gscCommand),
|
|
118
|
+
research: () => import("./research-2BLEISBG.js").then((m) => m.researchCommand),
|
|
119
|
+
creatives: () => import("./creatives-B5NTXPUB.js").then((m) => m.creativesCommand),
|
|
120
|
+
flows: () => import("./flows-KABCBS3S.js").then((m) => m.flowsCommand),
|
|
121
|
+
funnel: () => import("./funnel-AAX27NH4.js").then((m) => m.funnelCommand),
|
|
122
|
+
images: () => import("./images-S254MS6O.js").then((m) => m.imagesCommand),
|
|
123
|
+
studio: () => import("./studio-RA7QQH4O.js").then((m) => m.studioCommand),
|
|
124
|
+
avatars: () => import("./avatars-EKCKHCC3.js").then((m) => m.avatarsCommand),
|
|
125
|
+
landing: () => import("./landing-CJYGWCK4.js").then((m) => m.landingCommand),
|
|
126
|
+
videos: () => import("./videos-YSXYGTBM.js").then((m) => m.videosCommand),
|
|
127
|
+
testimonials: () => import("./testimonials-CVC4YIXO.js").then((m) => m.testimonialsCommand),
|
|
128
|
+
canvas: () => import("./canvas-5NB27FX2.js").then((m) => m.canvasCommand),
|
|
129
|
+
tags: () => import("./tags-KFYLZLB3.js").then((m) => m.tagsCommand),
|
|
130
130
|
"tag-manager": () => import("./tag-manager-DYZUOIAS.js").then((m) => m.tagManagerCommand),
|
|
131
|
-
chats: () => import("./chats-
|
|
132
|
-
history: () => import("./history-
|
|
133
|
-
credentials: () => import("./credentials-
|
|
134
|
-
hubspot: () => import("./hubspot-
|
|
135
|
-
accounts: () => import("./accounts-
|
|
136
|
-
"winning-ads": () => import("./winning-ads-
|
|
137
|
-
"media-sources": () => import("./media-sources-
|
|
138
|
-
site: () => import("./site-
|
|
139
|
-
mcp: () => import("./mcp-
|
|
140
|
-
"setup-links": () => import("./setup-links-
|
|
131
|
+
chats: () => import("./chats-D2CSDX5Q.js").then((m) => m.chatsCommand),
|
|
132
|
+
history: () => import("./history-PQUJKK26.js").then((m) => m.historyCommand),
|
|
133
|
+
credentials: () => import("./credentials-C33K6XCJ.js").then((m) => m.credentialsCommand),
|
|
134
|
+
hubspot: () => import("./hubspot-Y77VLY6Y.js").then((m) => m.hubspotCommand),
|
|
135
|
+
accounts: () => import("./accounts-O5MFO3QQ.js").then((m) => m.accountsCommand),
|
|
136
|
+
"winning-ads": () => import("./winning-ads-2WS7FI4E.js").then((m) => m.winningAdsCommand),
|
|
137
|
+
"media-sources": () => import("./media-sources-O6ZRUA3N.js").then((m) => m.mediaSourcesCommand),
|
|
138
|
+
site: () => import("./site-WFSWIA3S.js").then((m) => m.siteCommand),
|
|
139
|
+
mcp: () => import("./mcp-XXD7ZQCP.js").then((m) => m.mcpCommand),
|
|
140
|
+
"setup-links": () => import("./setup-links-REPREN3C.js").then((m) => m.setupLinksCommand),
|
|
141
141
|
schema: () => import("./schema-6GR77VJG.js").then((m) => m.schemaCommand)
|
|
142
142
|
}
|
|
143
143
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
csvOrJson,
|
|
3
3
|
handleLinkedinError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CSYSX4D2.js";
|
|
5
5
|
import {
|
|
6
6
|
TABLE_OUTPUT_FORMATS,
|
|
7
7
|
outputFormatRefusal,
|
|
@@ -14,11 +14,10 @@ import {
|
|
|
14
14
|
} from "./chunk-X7ZODEXJ.js";
|
|
15
15
|
import {
|
|
16
16
|
linkedinCompaniesRequestSchema
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-XF4JUKVF.js";
|
|
18
18
|
import "./chunk-GXDLWBOY.js";
|
|
19
19
|
import "./chunk-TEINLN64.js";
|
|
20
20
|
import "./chunk-ZJWUBJYQ.js";
|
|
21
|
-
import "./chunk-HR6IWNKE.js";
|
|
22
21
|
import "./chunk-NE4F3FHN.js";
|
|
23
22
|
import {
|
|
24
23
|
apiPost
|
|
@@ -193,4 +192,4 @@ export {
|
|
|
193
192
|
companiesCommand,
|
|
194
193
|
companiesHints
|
|
195
194
|
};
|
|
196
|
-
//# sourceMappingURL=companies-
|
|
195
|
+
//# sourceMappingURL=companies-DNI634RC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/ads/linkedin/companies.ts"],"sourcesContent":["import {\n type LINKEDIN_COMPANIES_BY,\n type LinkedinCompaniesRequestInput,\n type LinkedinCompaniesResponse,\n linkedinCompaniesRequestSchema,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiPost } from \"../../../client.ts\";\nimport { getEnv } from \"../../../env.ts\";\nimport {\n outputFormatRefusal,\n TABLE_OUTPUT_FORMATS,\n writeAdsJson,\n writeAdsOutput,\n writeJsonEnvelope,\n} from \"../output.ts\";\nimport { csvOrJson, handleLinkedinError } from \"./shared.ts\";\n\n/** Companies per page without --full. */\nconst COMPANIES_PAGE_SIZE = 100;\n\n/** A by-campaign read makes one LinkedIn call per delivered campaign. */\nconst COMPANIES_TIMEOUT_MS = 180_000;\n\nconst CSV_FIELDS = [\n \"org\",\n \"name\",\n \"domain\",\n \"domainSource\",\n \"impressions\",\n \"clicks\",\n \"engagements\",\n \"costLocal\",\n \"videoViews\",\n \"months\",\n \"campaigns\",\n];\n\n/** Next steps the agent can't see from the rows alone. */\nexport function companiesHints(data: LinkedinCompaniesResponse, request: { withDomains: boolean }): string[] {\n const hints: string[] = [];\n if (data.rows.length === 0) {\n hints.push(\n `No company shows up for ${data.query.start} to ${data.query.end}${data.query.minImpressions > 0 ? ` at --min-impressions ${data.query.minImpressions}` : \"\"}. LinkedIn reports companies 12-24h late and leaves out any with fewer than 3 events in a month, so a small or new campaign can have none yet. Try a longer period (--last-months 24), drop --min-impressions, or check the campaigns delivered with \\`baker ads linkedin analytics\\`.`,\n );\n return hints;\n }\n const withDomain = data.rows.filter((row) => row.domain !== undefined).length;\n if (withDomain > 0) {\n hints.push(\n `${withDomain} companies came back with a website domain — if HubSpot is connected, \\`baker hubspot companies search --domains <domain,domain,…> --with-deals\\` (up to 100 per call) shows which are already accounts and which have deals.`,\n );\n } else if (!request.withDomains && data.rows.length > 0) {\n hints.push(\n \"Add --with-domains to get each company's website domain, ready for matching against your customer list.\",\n );\n }\n if (data.totalCompanies > data.rows.length) {\n const page = data.page ?? 1;\n const first = (page - 1) * COMPANIES_PAGE_SIZE + 1;\n const last = first + data.rows.length - 1;\n const next = last < data.totalCompanies ? ` — --page ${page + 1} for the next ${COMPANIES_PAGE_SIZE}, ` : \" — \";\n hints.push(\n `Showing companies ${first}-${last} of ${data.totalCompanies.toLocaleString(\"en\")}, most engaged first${next}--full for all, or --min-impressions to trim the tail.`,\n );\n }\n if (data.query.by === \"none\" && data.rows.length > 0) {\n hints.push(\"--by month shows when each company warmed up; --by campaign shows which campaigns reached it.\");\n }\n return hints;\n}\n\nfunction csvList(raw: unknown): string[] | undefined {\n if (typeof raw !== \"string\") return undefined;\n const items = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n return items.length > 0 ? items : undefined;\n}\n\n/** Request fields as the flags that set them, so a refusal names what the agent typed. */\nconst FLAG_OF_FIELD: Record<string, string> = {\n accountId: \"--account-id\",\n campaignIds: \"--campaign-id\",\n lastMonths: \"--last-months\",\n start: \"--start\",\n end: \"--end\",\n by: \"--by\",\n minImpressions: \"--min-impressions\",\n page: \"--page\",\n};\n\nfunction flagOf(field: string): string {\n return FLAG_OF_FIELD[field.split(\".\")[0] ?? \"\"] ?? (field || \"args\");\n}\n\nfunction optionalNumber(raw: unknown): number | undefined {\n return typeof raw === \"string\" && raw.trim() !== \"\" ? Number(raw) : undefined;\n}\n\nfunction bareAccountId(raw: string | undefined): string | undefined {\n return raw?.startsWith(\"urn:\") ? raw.split(\":\").pop() : raw;\n}\n\nexport const companiesCommand = defineCommand({\n meta: {\n name: \"companies\",\n description: `Which companies your LinkedIn ads reached — one row per company over the whole period, most engaged first.\n\nStart here for \"which companies are our ads warming\", ABM reporting, or building a warm-account list.\nRows: {org, name, impressions, clicks, engagements, costLocal}. Defaults: the last 12 calendar\nmonths, the only selected ad account, 100 companies a page (--page 2 for the next, --full for all).\n\nExamples:\n baker ads linkedin companies # last 12 months, whole account\n baker ads linkedin companies --page 2 # the next 100 companies\n baker ads linkedin companies --by month --min-impressions 50 # when each company warmed up\n baker ads linkedin companies --campaign-id 333728193,810055513 --by campaign\n baker ads linkedin companies --with-domains --output csv # + website domain, for CRM matching\n baker ads linkedin companies --last-months 3 --stats # + how complete LinkedIn's data is\n\nLinkedIn reports companies 12-24h late and leaves out any company with fewer than 3 events in a month,\nso small companies are undercounted. engagements = LinkedIn's totalEngagements.`,\n },\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 },\n \"campaign-id\": { type: \"string\", description: \"Comma-separated campaign ids — read only these campaigns\" },\n \"last-months\": { type: \"string\", description: \"Calendar months back, including this one (1-24, default 12)\" },\n start: { type: \"string\", description: \"Start date YYYY-MM-DD (instead of --last-months)\" },\n end: { type: \"string\", description: \"End date YYYY-MM-DD (default today)\" },\n by: { type: \"string\", description: \"none | month | campaign — break each company down (default none)\" },\n \"with-domains\": { type: \"boolean\", description: \"Add each company's website domain and domainSource\" },\n \"min-impressions\": { type: \"string\", description: \"Leave out companies under N impressions over the period\" },\n full: { type: \"boolean\", description: \"Every company (not just a page of 100), plus videoViews\" },\n page: {\n type: \"string\",\n description: \"Which page of 100 companies, most engaged first (default 1); totalCompanies counts them all\",\n },\n stats: { type: \"boolean\", description: \"Add read-quality stats: row counts, cost/reach/domain coverage\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n const input: LinkedinCompaniesRequestInput = {\n accountId: bareAccountId((args[\"account-id\"] as string | undefined) || getEnv().BAKER_LINKEDIN_AD_ACCOUNT_ID),\n campaignIds: csvList(args[\"campaign-id\"]),\n lastMonths: optionalNumber(args[\"last-months\"]),\n start: args.start as string | undefined,\n end: args.end as string | undefined,\n by: args.by as (typeof LINKEDIN_COMPANIES_BY)[number] | undefined,\n withDomains: Boolean(args[\"with-domains\"]),\n minImpressions: optionalNumber(args[\"min-impressions\"]),\n full: Boolean(args.full),\n page: optionalNumber(args.page),\n stats: Boolean(args.stats),\n skipCache: Boolean(args[\"no-cache\"]),\n };\n const parsed = linkedinCompaniesRequestSchema.safeParse(input);\n const formatRefusal = outputFormatRefusal(csvOrJson(args), TABLE_OUTPUT_FORMATS);\n if (!parsed.success || formatRefusal !== null) {\n const issues = parsed.success ? [] : parsed.error.issues;\n const messages = issues.map((issue) => `${flagOf(issue.path.join(\".\"))}: ${issue.message}`);\n writeAdsJson({\n ok: false,\n error: { code: \"INVALID_ARGS\", message: [...messages, ...(formatRefusal ? [formatRefusal] : [])].join(\"; \") },\n });\n process.exit(1);\n }\n\n try {\n const { data } = await apiPost<{ ok: true; data: LinkedinCompaniesResponse }>(\n \"/api/ads/linkedin/companies\",\n input,\n { timeoutMs: COMPANIES_TIMEOUT_MS },\n );\n const hints = companiesHints(data, parsed.data);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n const notes = [...data.warnings.map((w) => `${w.code}: ${w.message}`), ...hints];\n writeAdsOutput(data.rows, fmt, CSV_FIELDS, notes);\n return;\n }\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/linkedin/companies.ts"],"sourcesContent":["import {\n type LINKEDIN_COMPANIES_BY,\n type LinkedinCompaniesRequestInput,\n type LinkedinCompaniesResponse,\n linkedinCompaniesRequestSchema,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiPost } from \"../../../client.ts\";\nimport { getEnv } from \"../../../env.ts\";\nimport {\n outputFormatRefusal,\n TABLE_OUTPUT_FORMATS,\n writeAdsJson,\n writeAdsOutput,\n writeJsonEnvelope,\n} from \"../output.ts\";\nimport { csvOrJson, handleLinkedinError } from \"./shared.ts\";\n\n/** Companies per page without --full. */\nconst COMPANIES_PAGE_SIZE = 100;\n\n/** A by-campaign read makes one LinkedIn call per delivered campaign. */\nconst COMPANIES_TIMEOUT_MS = 180_000;\n\nconst CSV_FIELDS = [\n \"org\",\n \"name\",\n \"domain\",\n \"domainSource\",\n \"impressions\",\n \"clicks\",\n \"engagements\",\n \"costLocal\",\n \"videoViews\",\n \"months\",\n \"campaigns\",\n];\n\n/** Next steps the agent can't see from the rows alone. */\nexport function companiesHints(data: LinkedinCompaniesResponse, request: { withDomains: boolean }): string[] {\n const hints: string[] = [];\n if (data.rows.length === 0) {\n hints.push(\n `No company shows up for ${data.query.start} to ${data.query.end}${data.query.minImpressions > 0 ? ` at --min-impressions ${data.query.minImpressions}` : \"\"}. LinkedIn reports companies 12-24h late and leaves out any with fewer than 3 events in a month, so a small or new campaign can have none yet. Try a longer period (--last-months 24), drop --min-impressions, or check the campaigns delivered with \\`baker ads linkedin analytics\\`.`,\n );\n return hints;\n }\n const withDomain = data.rows.filter((row) => row.domain !== undefined).length;\n if (withDomain > 0) {\n hints.push(\n `${withDomain} companies came back with a website domain — if HubSpot is connected, \\`baker hubspot companies search --domains <domain,domain,…> --with-deals\\` (up to 100 per call) shows which are already accounts and which have deals.`,\n );\n } else if (!request.withDomains && data.rows.length > 0) {\n hints.push(\n \"Add --with-domains to get each company's website domain, ready for matching against your customer list.\",\n );\n }\n if (data.totalCompanies > data.rows.length) {\n const page = data.page ?? 1;\n const first = (page - 1) * COMPANIES_PAGE_SIZE + 1;\n const last = first + data.rows.length - 1;\n const next = last < data.totalCompanies ? ` — --page ${page + 1} for the next ${COMPANIES_PAGE_SIZE}, ` : \" — \";\n hints.push(\n `Showing companies ${first}-${last} of ${data.totalCompanies.toLocaleString(\"en\")}, most engaged first${next}--full for all, or --min-impressions to trim the tail.`,\n );\n }\n if (data.query.by === \"none\" && data.rows.length > 0) {\n hints.push(\"--by month shows when each company warmed up; --by campaign shows which campaigns reached it.\");\n }\n return hints;\n}\n\nfunction csvList(raw: unknown): string[] | undefined {\n if (typeof raw !== \"string\") return undefined;\n const items = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n return items.length > 0 ? items : undefined;\n}\n\n/** Request fields as the flags that set them, so a refusal names what the agent typed. */\nconst FLAG_OF_FIELD: Record<string, string> = {\n accountId: \"--account-id\",\n campaignIds: \"--campaign-id\",\n lastMonths: \"--last-months\",\n start: \"--start\",\n end: \"--end\",\n by: \"--by\",\n minImpressions: \"--min-impressions\",\n page: \"--page\",\n};\n\nfunction flagOf(field: string): string {\n return FLAG_OF_FIELD[field.split(\".\")[0] ?? \"\"] ?? (field || \"args\");\n}\n\nfunction optionalNumber(raw: unknown): number | undefined {\n return typeof raw === \"string\" && raw.trim() !== \"\" ? Number(raw) : undefined;\n}\n\nfunction bareAccountId(raw: string | undefined): string | undefined {\n return raw?.startsWith(\"urn:\") ? raw.split(\":\").pop() : raw;\n}\n\nexport const companiesCommand = defineCommand({\n meta: {\n name: \"companies\",\n description: `Which companies your LinkedIn ads reached — one row per company over the whole period, most engaged first.\n\nStart here for \"which companies are our ads warming\", ABM reporting, or building a warm-account list.\nRows: {org, name, impressions, clicks, engagements, costLocal}. Defaults: the last 12 calendar\nmonths, the only selected ad account, 100 companies a page (--page 2 for the next, --full for all).\n\nExamples:\n baker ads linkedin companies # last 12 months, whole account\n baker ads linkedin companies --page 2 # the next 100 companies\n baker ads linkedin companies --by month --min-impressions 50 # when each company warmed up\n baker ads linkedin companies --campaign-id 333728193,810055513 --by campaign\n baker ads linkedin companies --with-domains --output csv # + website domain, for CRM matching\n baker ads linkedin companies --last-months 3 --stats # + how complete LinkedIn's data is\n\nLinkedIn reports companies 12-24h late and leaves out any company with fewer than 3 events in a month,\nso small companies are undercounted. engagements = LinkedIn's totalEngagements.`,\n },\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 },\n \"campaign-id\": { type: \"string\", description: \"Comma-separated campaign ids — read only these campaigns\" },\n \"last-months\": { type: \"string\", description: \"Calendar months back, including this one (1-24, default 12)\" },\n start: { type: \"string\", description: \"Start date YYYY-MM-DD (instead of --last-months)\" },\n end: { type: \"string\", description: \"End date YYYY-MM-DD (default today)\" },\n by: { type: \"string\", description: \"none | month | campaign — break each company down (default none)\" },\n \"with-domains\": { type: \"boolean\", description: \"Add each company's website domain and domainSource\" },\n \"min-impressions\": { type: \"string\", description: \"Leave out companies under N impressions over the period\" },\n full: { type: \"boolean\", description: \"Every company (not just a page of 100), plus videoViews\" },\n page: {\n type: \"string\",\n description: \"Which page of 100 companies, most engaged first (default 1); totalCompanies counts them all\",\n },\n stats: { type: \"boolean\", description: \"Add read-quality stats: row counts, cost/reach/domain coverage\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n const input: LinkedinCompaniesRequestInput = {\n accountId: bareAccountId((args[\"account-id\"] as string | undefined) || getEnv().BAKER_LINKEDIN_AD_ACCOUNT_ID),\n campaignIds: csvList(args[\"campaign-id\"]),\n lastMonths: optionalNumber(args[\"last-months\"]),\n start: args.start as string | undefined,\n end: args.end as string | undefined,\n by: args.by as (typeof LINKEDIN_COMPANIES_BY)[number] | undefined,\n withDomains: Boolean(args[\"with-domains\"]),\n minImpressions: optionalNumber(args[\"min-impressions\"]),\n full: Boolean(args.full),\n page: optionalNumber(args.page),\n stats: Boolean(args.stats),\n skipCache: Boolean(args[\"no-cache\"]),\n };\n const parsed = linkedinCompaniesRequestSchema.safeParse(input);\n const formatRefusal = outputFormatRefusal(csvOrJson(args), TABLE_OUTPUT_FORMATS);\n if (!parsed.success || formatRefusal !== null) {\n const issues = parsed.success ? [] : parsed.error.issues;\n const messages = issues.map((issue) => `${flagOf(issue.path.join(\".\"))}: ${issue.message}`);\n writeAdsJson({\n ok: false,\n error: { code: \"INVALID_ARGS\", message: [...messages, ...(formatRefusal ? [formatRefusal] : [])].join(\"; \") },\n });\n process.exit(1);\n }\n\n try {\n const { data } = await apiPost<{ ok: true; data: LinkedinCompaniesResponse }>(\n \"/api/ads/linkedin/companies\",\n input,\n { timeoutMs: COMPANIES_TIMEOUT_MS },\n );\n const hints = companiesHints(data, parsed.data);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n const notes = [...data.warnings.map((w) => `${w.code}: ${w.message}`), ...hints];\n writeAdsOutput(data.rows, fmt, CSV_FIELDS, notes);\n return;\n }\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -3,14 +3,13 @@ import {
|
|
|
3
3
|
failValidation,
|
|
4
4
|
isTempId,
|
|
5
5
|
writeOk
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-3HJLHTWP.js";
|
|
7
7
|
import {
|
|
8
8
|
ACTION_COMPLETE_NOTE_MIN
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XF4JUKVF.js";
|
|
10
10
|
import "./chunk-GXDLWBOY.js";
|
|
11
11
|
import "./chunk-TEINLN64.js";
|
|
12
12
|
import "./chunk-ZJWUBJYQ.js";
|
|
13
|
-
import "./chunk-HR6IWNKE.js";
|
|
14
13
|
import "./chunk-NE4F3FHN.js";
|
|
15
14
|
import {
|
|
16
15
|
apiPost,
|
|
@@ -79,4 +78,4 @@ var completeCommand = defineCommand({
|
|
|
79
78
|
export {
|
|
80
79
|
completeCommand
|
|
81
80
|
};
|
|
82
|
-
//# sourceMappingURL=complete-
|
|
81
|
+
//# sourceMappingURL=complete-2FZMGJV5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/actions/complete.ts"],"sourcesContent":["import { ACTION_COMPLETE_NOTE_MIN, type ActionsCompleteResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost, validateConvexId } from \"../../client.ts\";\nimport { requireChatId } from \"../../env.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi, failValidation, isTempId, writeOk } from \"./shared.ts\";\n\nregisterSchema({\n command: \"actions.complete\",\n description:\n \"Stage completion of an action (it was done). Accepts a real action ID (must be claimed) or a temp ID from the same draft. The action becomes completed when the chat is published. --note is required and must describe what you actually did to resolve it (what changed, where, and the outcome) — it is the client-facing record surfaced by `baker actions log`. Don't use this to drop an action you no longer want — to remove a staged op use `actions draft remove`, to close an unwanted published action use `actions discard`.\",\n args: {\n id: { type: \"string\", description: \"Action ID or temp ID\", required: true },\n note: {\n type: \"string\",\n description:\n \"REQUIRED. Detailed description of what you did to resolve this: what changed, where, and the outcome. This is the durable, client-facing record shown by `baker actions log`.\",\n required: true,\n },\n },\n});\n\nexport const completeCommand = defineCommand({\n meta: {\n name: \"complete\",\n description:\n \"Stage completion of an action. Accepts real IDs (claimed) or temp IDs (same draft). Example: baker actions complete <id>\",\n },\n args: {\n id: { type: \"positional\", description: \"Action ID or temp ID\", required: false },\n \"action-id\": { type: \"string\", description: \"Action ID or temp ID\", required: false },\n note: {\n type: \"string\",\n description: \"REQUIRED. What you did to resolve this: what changed, where, and the outcome.\",\n required: false,\n },\n },\n run: async ({ args }) => {\n try {\n const id = (args.id as string | undefined) || (args[\"action-id\"] as string | undefined);\n if (!id) {\n failValidation(\"Action ID is required.\");\n }\n if (!isTempId(id)) {\n validateConvexId(id);\n }\n const note = (args.note as string | undefined)?.trim() ?? \"\";\n if (note.length < ACTION_COMPLETE_NOTE_MIN) {\n failValidation(\n `--note is required and must describe what you did (≥${ACTION_COMPLETE_NOTE_MIN} chars): what changed, where, and the outcome. This becomes the client-facing record surfaced by \\`baker actions log\\`.`,\n );\n }\n const chatId = requireChatId();\n await apiPost<ActionsCompleteResponse>(\"/api/actions/complete\", { chatId, actionRef: id, note });\n writeOk();\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/actions/complete.ts"],"sourcesContent":["import { ACTION_COMPLETE_NOTE_MIN, type ActionsCompleteResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost, validateConvexId } from \"../../client.ts\";\nimport { requireChatId } from \"../../env.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi, failValidation, isTempId, writeOk } from \"./shared.ts\";\n\nregisterSchema({\n command: \"actions.complete\",\n description:\n \"Stage completion of an action (it was done). Accepts a real action ID (must be claimed) or a temp ID from the same draft. The action becomes completed when the chat is published. --note is required and must describe what you actually did to resolve it (what changed, where, and the outcome) — it is the client-facing record surfaced by `baker actions log`. Don't use this to drop an action you no longer want — to remove a staged op use `actions draft remove`, to close an unwanted published action use `actions discard`.\",\n args: {\n id: { type: \"string\", description: \"Action ID or temp ID\", required: true },\n note: {\n type: \"string\",\n description:\n \"REQUIRED. Detailed description of what you did to resolve this: what changed, where, and the outcome. This is the durable, client-facing record shown by `baker actions log`.\",\n required: true,\n },\n },\n});\n\nexport const completeCommand = defineCommand({\n meta: {\n name: \"complete\",\n description:\n \"Stage completion of an action. Accepts real IDs (claimed) or temp IDs (same draft). Example: baker actions complete <id>\",\n },\n args: {\n id: { type: \"positional\", description: \"Action ID or temp ID\", required: false },\n \"action-id\": { type: \"string\", description: \"Action ID or temp ID\", required: false },\n note: {\n type: \"string\",\n description: \"REQUIRED. What you did to resolve this: what changed, where, and the outcome.\",\n required: false,\n },\n },\n run: async ({ args }) => {\n try {\n const id = (args.id as string | undefined) || (args[\"action-id\"] as string | undefined);\n if (!id) {\n failValidation(\"Action ID is required.\");\n }\n if (!isTempId(id)) {\n validateConvexId(id);\n }\n const note = (args.note as string | undefined)?.trim() ?? \"\";\n if (note.length < ACTION_COMPLETE_NOTE_MIN) {\n failValidation(\n `--note is required and must describe what you did (≥${ACTION_COMPLETE_NOTE_MIN} chars): what changed, where, and the outcome. This becomes the client-facing record surfaced by \\`baker actions log\\`.`,\n );\n }\n const chatId = requireChatId();\n await apiPost<ActionsCompleteResponse>(\"/api/actions/complete\", { chatId, actionRef: id, note });\n writeOk();\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAM9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,UAAU,aAAa,wBAAwB,UAAU,KAAK;AAAA,IAC1E,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,EACF;AACF,CAAC;AAEM,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,aAAa,wBAAwB,UAAU,MAAM;AAAA,IAC/E,aAAa,EAAE,MAAM,UAAU,aAAa,wBAAwB,UAAU,MAAM;AAAA,IACpF,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,KAAM,KAAK,MAA8B,KAAK,WAAW;AAC/D,UAAI,CAAC,IAAI;AACP,uBAAe,wBAAwB;AAAA,MACzC;AACA,UAAI,CAAC,SAAS,EAAE,GAAG;AACjB,yBAAiB,EAAE;AAAA,MACrB;AACA,YAAM,OAAQ,KAAK,MAA6B,KAAK,KAAK;AAC1D,UAAI,KAAK,SAAS,0BAA0B;AAC1C;AAAA,UACE,4DAAuD,wBAAwB;AAAA,QACjF;AAAA,MACF;AACA,YAAM,SAAS,cAAc;AAC7B,YAAM,QAAiC,yBAAyB,EAAE,QAAQ,WAAW,IAAI,KAAK,CAAC;AAC/F,cAAQ;AAAA,IACV,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
attachDestination,
|
|
3
|
-
attachSettings,
|
|
4
3
|
attachStep,
|
|
5
4
|
connectCommand,
|
|
6
5
|
copyDestination,
|
|
7
6
|
destinationRefusal,
|
|
8
|
-
restatableTargets,
|
|
9
|
-
sealRequestFor,
|
|
10
7
|
targetsFor,
|
|
11
8
|
unpickedSteps,
|
|
12
9
|
unwiredHubspotForms,
|
|
13
10
|
unwiredSideEffects
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-DWHIOO7E.js";
|
|
12
|
+
import "./chunk-SHL7LOC3.js";
|
|
13
|
+
import "./chunk-YRQYA2LR.js";
|
|
14
|
+
import "./chunk-3HJLHTWP.js";
|
|
15
|
+
import "./chunk-XF4JUKVF.js";
|
|
19
16
|
import "./chunk-GXDLWBOY.js";
|
|
20
17
|
import "./chunk-TEINLN64.js";
|
|
21
18
|
import "./chunk-ZJWUBJYQ.js";
|
|
22
|
-
import "./chunk-HR6IWNKE.js";
|
|
23
19
|
import "./chunk-NE4F3FHN.js";
|
|
24
20
|
import "./chunk-XBOK23HI.js";
|
|
25
21
|
import "./chunk-IFWP3ZDO.js";
|
|
@@ -28,16 +24,13 @@ import "./chunk-NU7JSWVA.js";
|
|
|
28
24
|
import "./chunk-YQSBHWOI.js";
|
|
29
25
|
export {
|
|
30
26
|
attachDestination,
|
|
31
|
-
attachSettings,
|
|
32
27
|
attachStep,
|
|
33
28
|
connectCommand,
|
|
34
29
|
copyDestination,
|
|
35
30
|
destinationRefusal,
|
|
36
|
-
restatableTargets,
|
|
37
|
-
sealRequestFor,
|
|
38
31
|
targetsFor,
|
|
39
32
|
unpickedSteps,
|
|
40
33
|
unwiredHubspotForms,
|
|
41
34
|
unwiredSideEffects
|
|
42
35
|
};
|
|
43
|
-
//# sourceMappingURL=connect-
|
|
36
|
+
//# sourceMappingURL=connect-QCOGEPP4.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
daysAgoIso,
|
|
4
4
|
handleLinkedinError,
|
|
5
5
|
todayIso
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CSYSX4D2.js";
|
|
7
7
|
import {
|
|
8
8
|
writeAdsJson,
|
|
9
9
|
writeAdsOutput
|
|
@@ -11,11 +11,10 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
NO_CACHE_ARG
|
|
13
13
|
} from "./chunk-X7ZODEXJ.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-XF4JUKVF.js";
|
|
15
15
|
import "./chunk-GXDLWBOY.js";
|
|
16
16
|
import "./chunk-TEINLN64.js";
|
|
17
17
|
import "./chunk-ZJWUBJYQ.js";
|
|
18
|
-
import "./chunk-HR6IWNKE.js";
|
|
19
18
|
import "./chunk-NE4F3FHN.js";
|
|
20
19
|
import {
|
|
21
20
|
apiPost
|
|
@@ -91,4 +90,4 @@ Examples:
|
|
|
91
90
|
export {
|
|
92
91
|
conversationCommand
|
|
93
92
|
};
|
|
94
|
-
//# sourceMappingURL=conversation-
|
|
93
|
+
//# sourceMappingURL=conversation-6IOGV7B7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/ads/linkedin/conversation.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiPost } from \"../../../client.ts\";\nimport { writeAdsJson, writeAdsOutput } from \"../output.ts\";\nimport { csvOrJson, daysAgoIso, handleLinkedinError, todayIso } from \"./shared.ts\";\n\ninterface AnalyticsResponse {\n rows: Array<Record<string, unknown>>;\n fields: string[];\n warnings: Array<{ code: string; message: string }>;\n}\n\n/**\n * Conversation Ads (Sponsored Messaging) per-button analytics. Wraps\n * --pivot conversation-node-button on /api/ads/linkedin/analytics.\n *\n * Lets agents see which CTA button inside a multi-step Sponsored Message\n * actually drives clicks — no other ad platform exposes this granularity.\n */\nexport const conversationCommand = defineCommand({\n meta: {\n name: \"conversation\",\n description: `Per-button click rates inside Sponsored Messaging / Conversation Ads.\n\nReturns one row per CONVERSATION_NODE_BUTTON pivot, sorted by clicks desc.\nUse this to A/B test button copy and the cascade tree.\n\nExamples:\n baker ads linkedin conversation --campaign-id 1234\n baker ads linkedin conversation --campaign-id 1234 --last-days 30 --output csv`,\n },\n args: {\n \"campaign-id\": {\n type: \"string\",\n description: \"Comma-separated campaign IDs (Conversation Ad campaigns)\",\n required: true,\n },\n start: { type: \"string\", description: \"Start date YYYY-MM-DD\" },\n end: { type: \"string\", description: \"End date YYYY-MM-DD\" },\n \"last-days\": { type: \"string\", description: \"Window relative to today (default: 30)\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n const campaignIdsRaw = args[\"campaign-id\"] as string | undefined;\n if (!campaignIdsRaw) {\n handleLinkedinError(new Error(\"--campaign-id is required\"));\n }\n const ids = campaignIdsRaw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const start = (args.start as string | undefined) ?? daysAgoIso(args[\"last-days\"] ? Number(args[\"last-days\"]) : 30);\n const end = (args.end as string | undefined) ?? todayIso();\n\n try {\n const data = await apiPost<AnalyticsResponse>(\"/api/ads/linkedin/analytics\", {\n request: {\n level: \"campaign\",\n ids,\n intent: \"inmail\",\n pivot: \"conversation-node-button\",\n start,\n end,\n granularity: \"ALL\",\n limit: 500,\n },\n skipCache: Boolean(args[\"no-cache\"]),\n });\n const sorted = [...data.rows].sort((a, b) => Number(b.clicks ?? 0) - Number(a.clicks ?? 0));\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(sorted, fmt, data.fields);\n return;\n }\n writeAdsJson({\n ok: true,\n data: { query: { campaigns: ids, start, end }, rows: sorted, warnings: data.warnings },\n });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/linkedin/conversation.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiPost } from \"../../../client.ts\";\nimport { writeAdsJson, writeAdsOutput } from \"../output.ts\";\nimport { csvOrJson, daysAgoIso, handleLinkedinError, todayIso } from \"./shared.ts\";\n\ninterface AnalyticsResponse {\n rows: Array<Record<string, unknown>>;\n fields: string[];\n warnings: Array<{ code: string; message: string }>;\n}\n\n/**\n * Conversation Ads (Sponsored Messaging) per-button analytics. Wraps\n * --pivot conversation-node-button on /api/ads/linkedin/analytics.\n *\n * Lets agents see which CTA button inside a multi-step Sponsored Message\n * actually drives clicks — no other ad platform exposes this granularity.\n */\nexport const conversationCommand = defineCommand({\n meta: {\n name: \"conversation\",\n description: `Per-button click rates inside Sponsored Messaging / Conversation Ads.\n\nReturns one row per CONVERSATION_NODE_BUTTON pivot, sorted by clicks desc.\nUse this to A/B test button copy and the cascade tree.\n\nExamples:\n baker ads linkedin conversation --campaign-id 1234\n baker ads linkedin conversation --campaign-id 1234 --last-days 30 --output csv`,\n },\n args: {\n \"campaign-id\": {\n type: \"string\",\n description: \"Comma-separated campaign IDs (Conversation Ad campaigns)\",\n required: true,\n },\n start: { type: \"string\", description: \"Start date YYYY-MM-DD\" },\n end: { type: \"string\", description: \"End date YYYY-MM-DD\" },\n \"last-days\": { type: \"string\", description: \"Window relative to today (default: 30)\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n const campaignIdsRaw = args[\"campaign-id\"] as string | undefined;\n if (!campaignIdsRaw) {\n handleLinkedinError(new Error(\"--campaign-id is required\"));\n }\n const ids = campaignIdsRaw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const start = (args.start as string | undefined) ?? daysAgoIso(args[\"last-days\"] ? Number(args[\"last-days\"]) : 30);\n const end = (args.end as string | undefined) ?? todayIso();\n\n try {\n const data = await apiPost<AnalyticsResponse>(\"/api/ads/linkedin/analytics\", {\n request: {\n level: \"campaign\",\n ids,\n intent: \"inmail\",\n pivot: \"conversation-node-button\",\n start,\n end,\n granularity: \"ALL\",\n limit: 500,\n },\n skipCache: Boolean(args[\"no-cache\"]),\n });\n const sorted = [...data.rows].sort((a, b) => Number(b.clicks ?? 0) - Number(a.clicks ?? 0));\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(sorted, fmt, data.fields);\n return;\n }\n writeAdsJson({\n ok: true,\n data: { query: { campaigns: ids, start, end }, rows: sorted, warnings: data.warnings },\n });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAmBvB,IAAM,sBAAsB,cAAc;AAAA,EAC/C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQf;AAAA,EACA,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,OAAO,EAAE,MAAM,UAAU,aAAa,wBAAwB;AAAA,IAC9D,KAAK,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IAC1D,aAAa,EAAE,MAAM,UAAU,aAAa,yCAAyC;AAAA,IACrF,YAAY;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,OAAO;AAAA,EAC9E;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,iBAAiB,KAAK,aAAa;AACzC,QAAI,CAAC,gBAAgB;AACnB,0BAAoB,IAAI,MAAM,2BAA2B,CAAC;AAAA,IAC5D;AACA,UAAM,MAAM,eACT,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB,UAAM,QAAS,KAAK,SAAgC,WAAW,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,CAAC,IAAI,EAAE;AACjH,UAAM,MAAO,KAAK,OAA8B,SAAS;AAEzD,QAAI;AACF,YAAM,OAAO,MAAM,QAA2B,+BAA+B;AAAA,QAC3E,SAAS;AAAA,UACP,OAAO;AAAA,UACP;AAAA,UACA,QAAQ;AAAA,UACR,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb,OAAO;AAAA,QACT;AAAA,QACA,WAAW,QAAQ,KAAK,UAAU,CAAC;AAAA,MACrC,CAAC;AACD,YAAM,SAAS,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1F,YAAM,MAAM,UAAU,IAAI;AAC1B,UAAI,QAAQ,QAAQ;AAClB,uBAAe,QAAQ,KAAK,KAAK,MAAM;AACvC;AAAA,MACF;AACA,mBAAa;AAAA,QACX,IAAI;AAAA,QACJ,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,IAAI,GAAG,MAAM,QAAQ,UAAU,KAAK,SAAS;AAAA,MACvF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
csvOrJson,
|
|
3
3
|
handleLinkedinError,
|
|
4
4
|
resolveAccountIdArg
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CSYSX4D2.js";
|
|
6
6
|
import {
|
|
7
7
|
writeAdsJson,
|
|
8
8
|
writeAdsOutput
|
|
@@ -10,11 +10,10 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
NO_CACHE_ARG
|
|
12
12
|
} from "./chunk-X7ZODEXJ.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-XF4JUKVF.js";
|
|
14
14
|
import "./chunk-GXDLWBOY.js";
|
|
15
15
|
import "./chunk-TEINLN64.js";
|
|
16
16
|
import "./chunk-ZJWUBJYQ.js";
|
|
17
|
-
import "./chunk-HR6IWNKE.js";
|
|
18
17
|
import "./chunk-NE4F3FHN.js";
|
|
19
18
|
import {
|
|
20
19
|
apiGet
|
|
@@ -124,13 +123,13 @@ Subcommands:
|
|
|
124
123
|
subCommands: {
|
|
125
124
|
list: listCmd,
|
|
126
125
|
health: healthCmd,
|
|
127
|
-
create: () => import("./write-commands-
|
|
128
|
-
update: () => import("./write-commands-
|
|
129
|
-
"associate-campaign": () => import("./write-commands-
|
|
130
|
-
"dissociate-campaign": () => import("./write-commands-
|
|
126
|
+
create: () => import("./write-commands-5C7FUOVN.js").then((m) => m.conversionsCreateCommand),
|
|
127
|
+
update: () => import("./write-commands-5C7FUOVN.js").then((m) => m.conversionsUpdateCommand),
|
|
128
|
+
"associate-campaign": () => import("./write-commands-5C7FUOVN.js").then((m) => m.conversionsAssociateCommand),
|
|
129
|
+
"dissociate-campaign": () => import("./write-commands-5C7FUOVN.js").then((m) => m.conversionsDissociateCommand)
|
|
131
130
|
}
|
|
132
131
|
});
|
|
133
132
|
export {
|
|
134
133
|
conversionsCommand
|
|
135
134
|
};
|
|
136
|
-
//# sourceMappingURL=conversions-
|
|
135
|
+
//# sourceMappingURL=conversions-4SRZPBBX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/ads/linkedin/conversions.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet } from \"../../../client.ts\";\nimport { writeAdsJson, writeAdsOutput } from \"../output.ts\";\nimport { csvOrJson, handleLinkedinError, resolveAccountIdArg } from \"./shared.ts\";\n\ninterface ConversionRule {\n id: string;\n urn: string;\n account: string;\n name?: string;\n type?: string;\n enabled?: boolean;\n conversionMethod?: string;\n attributionType?: string;\n postClickAttributionWindowSize?: number;\n viewThroughAttributionWindowSize?: number;\n associatedCampaigns?: string[];\n countingMethod?: string;\n lastConversionReportedAt?: number;\n}\n\nconst DAY_MS = 86_400_000;\n\nfunction healthOf(rules: ConversionRule[]): {\n totalRules: number;\n enabledRules: number;\n capiRules: number;\n pixelRules: number;\n hasLeadEvent: boolean;\n hasPurchaseEvent: boolean;\n staleCapiRules: ConversionRule[];\n longViewWindow: ConversionRule[];\n wrongLeadDedup: ConversionRule[];\n} {\n const enabled = rules.filter((r) => r.enabled !== false);\n const capi = enabled.filter((r) => r.conversionMethod === \"CONVERSIONS_API\");\n const pixel = enabled.filter((r) => r.conversionMethod === \"PIXEL\");\n const staleCapi = capi.filter(\n (r) => !r.lastConversionReportedAt || Date.now() - r.lastConversionReportedAt > 7 * DAY_MS,\n );\n const longView = enabled.filter(\n (r) => r.viewThroughAttributionWindowSize !== undefined && r.viewThroughAttributionWindowSize > 7,\n );\n const leads = enabled.filter((r) => r.type === \"LEAD\");\n const wrongDedup = leads.filter((r) => r.countingMethod && r.countingMethod !== \"ONE_TIME_EACH_MEMBER\");\n return {\n totalRules: rules.length,\n enabledRules: enabled.length,\n capiRules: capi.length,\n pixelRules: pixel.length,\n hasLeadEvent: leads.length > 0,\n hasPurchaseEvent: enabled.some((r) => r.type === \"PURCHASE\"),\n staleCapiRules: staleCapi,\n longViewWindow: longView,\n wrongLeadDedup: wrongDedup,\n };\n}\n\nconst listCmd = defineCommand({\n meta: {\n name: \"list\",\n description: `List conversion rules on the account.`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n const data = await apiGet<ConversionRule[]>(\"/api/ads/linkedin/conversions\", params);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(data as unknown as Array<Record<string, unknown>>, fmt);\n return;\n }\n writeAdsJson({ ok: true, data });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nconst healthCmd = defineCommand({\n meta: {\n name: \"health\",\n description: `5-point Insight Tag / CAPI health check (playbook §07).\n\nSurfaces:\n - Are rules enabled?\n - Do we have at least one LEAD or PURCHASE event?\n - Do CAPI rules show recent activity (≤7 days)?\n - Is the view-through window ≤7 days?\n - Do LEAD rules use ONE_TIME_EACH_MEMBER de-dup?`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", default: \"json\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n const data = await apiGet<ConversionRule[]>(\"/api/ads/linkedin/conversions\", params);\n writeAdsJson({ ok: true, data: healthOf(data) });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nexport const conversionsCommand = defineCommand({\n meta: {\n name: \"conversions\",\n description: `Conversion rules — Insight Tag and Conversions API.\n\nSubcommands:\n list — every rule on the account\n health — playbook §07 5-point health check\n create / update — stage a conversion-rule write (applies on chat publish)\n associate-campaign / dissociate-campaign\n — which ad sets a rule counts for (its own LinkedIn record, not a field on the rule)`,\n },\n subCommands: {\n list: listCmd,\n health: healthCmd,\n create: () => import(\"./write-commands.ts\").then((m) => m.conversionsCreateCommand),\n update: () => import(\"./write-commands.ts\").then((m) => m.conversionsUpdateCommand),\n \"associate-campaign\": () => import(\"./write-commands.ts\").then((m) => m.conversionsAssociateCommand),\n \"dissociate-campaign\": () => import(\"./write-commands.ts\").then((m) => m.conversionsDissociateCommand),\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/linkedin/conversions.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet } from \"../../../client.ts\";\nimport { writeAdsJson, writeAdsOutput } from \"../output.ts\";\nimport { csvOrJson, handleLinkedinError, resolveAccountIdArg } from \"./shared.ts\";\n\ninterface ConversionRule {\n id: string;\n urn: string;\n account: string;\n name?: string;\n type?: string;\n enabled?: boolean;\n conversionMethod?: string;\n attributionType?: string;\n postClickAttributionWindowSize?: number;\n viewThroughAttributionWindowSize?: number;\n associatedCampaigns?: string[];\n countingMethod?: string;\n lastConversionReportedAt?: number;\n}\n\nconst DAY_MS = 86_400_000;\n\nfunction healthOf(rules: ConversionRule[]): {\n totalRules: number;\n enabledRules: number;\n capiRules: number;\n pixelRules: number;\n hasLeadEvent: boolean;\n hasPurchaseEvent: boolean;\n staleCapiRules: ConversionRule[];\n longViewWindow: ConversionRule[];\n wrongLeadDedup: ConversionRule[];\n} {\n const enabled = rules.filter((r) => r.enabled !== false);\n const capi = enabled.filter((r) => r.conversionMethod === \"CONVERSIONS_API\");\n const pixel = enabled.filter((r) => r.conversionMethod === \"PIXEL\");\n const staleCapi = capi.filter(\n (r) => !r.lastConversionReportedAt || Date.now() - r.lastConversionReportedAt > 7 * DAY_MS,\n );\n const longView = enabled.filter(\n (r) => r.viewThroughAttributionWindowSize !== undefined && r.viewThroughAttributionWindowSize > 7,\n );\n const leads = enabled.filter((r) => r.type === \"LEAD\");\n const wrongDedup = leads.filter((r) => r.countingMethod && r.countingMethod !== \"ONE_TIME_EACH_MEMBER\");\n return {\n totalRules: rules.length,\n enabledRules: enabled.length,\n capiRules: capi.length,\n pixelRules: pixel.length,\n hasLeadEvent: leads.length > 0,\n hasPurchaseEvent: enabled.some((r) => r.type === \"PURCHASE\"),\n staleCapiRules: staleCapi,\n longViewWindow: longView,\n wrongLeadDedup: wrongDedup,\n };\n}\n\nconst listCmd = defineCommand({\n meta: {\n name: \"list\",\n description: `List conversion rules on the account.`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n const data = await apiGet<ConversionRule[]>(\"/api/ads/linkedin/conversions\", params);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(data as unknown as Array<Record<string, unknown>>, fmt);\n return;\n }\n writeAdsJson({ ok: true, data });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nconst healthCmd = defineCommand({\n meta: {\n name: \"health\",\n description: `5-point Insight Tag / CAPI health check (playbook §07).\n\nSurfaces:\n - Are rules enabled?\n - Do we have at least one LEAD or PURCHASE event?\n - Do CAPI rules show recent activity (≤7 days)?\n - Is the view-through window ≤7 days?\n - Do LEAD rules use ONE_TIME_EACH_MEMBER de-dup?`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", default: \"json\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n const data = await apiGet<ConversionRule[]>(\"/api/ads/linkedin/conversions\", params);\n writeAdsJson({ ok: true, data: healthOf(data) });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nexport const conversionsCommand = defineCommand({\n meta: {\n name: \"conversions\",\n description: `Conversion rules — Insight Tag and Conversions API.\n\nSubcommands:\n list — every rule on the account\n health — playbook §07 5-point health check\n create / update — stage a conversion-rule write (applies on chat publish)\n associate-campaign / dissociate-campaign\n — which ad sets a rule counts for (its own LinkedIn record, not a field on the rule)`,\n },\n subCommands: {\n list: listCmd,\n health: healthCmd,\n create: () => import(\"./write-commands.ts\").then((m) => m.conversionsCreateCommand),\n update: () => import(\"./write-commands.ts\").then((m) => m.conversionsUpdateCommand),\n \"associate-campaign\": () => import(\"./write-commands.ts\").then((m) => m.conversionsAssociateCommand),\n \"dissociate-campaign\": () => import(\"./write-commands.ts\").then((m) => m.conversionsDissociateCommand),\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -13,11 +13,10 @@ import {
|
|
|
13
13
|
} from "./chunk-PWGWMIIJ.js";
|
|
14
14
|
import {
|
|
15
15
|
AVATAR_HANDLE_PATTERN
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XF4JUKVF.js";
|
|
17
17
|
import "./chunk-GXDLWBOY.js";
|
|
18
18
|
import "./chunk-TEINLN64.js";
|
|
19
19
|
import "./chunk-ZJWUBJYQ.js";
|
|
20
|
-
import "./chunk-HR6IWNKE.js";
|
|
21
20
|
import "./chunk-NE4F3FHN.js";
|
|
22
21
|
import "./chunk-XBOK23HI.js";
|
|
23
22
|
import "./chunk-IFWP3ZDO.js";
|
|
@@ -205,4 +204,4 @@ var createCommand = defineCommand({
|
|
|
205
204
|
export {
|
|
206
205
|
createCommand
|
|
207
206
|
};
|
|
208
|
-
//# sourceMappingURL=create-
|
|
207
|
+
//# sourceMappingURL=create-BJNMO6HT.js.map
|