@koda-sl/baker-cli 0.384.0-dev.4699b7308 → 0.384.0-dev.557795bef
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 +1098 -217
- package/canvas/tiktok-captions-composition/index.html +5 -6
- package/canvas/tiktok-captions-composition/meta.json +5 -0
- package/dist/account-4UEZAY5T.js +49 -0
- package/dist/account-4UEZAY5T.js.map +1 -0
- package/dist/account-OINZG6UP.js +80 -0
- package/dist/account-OINZG6UP.js.map +1 -0
- package/dist/account-QMDCUUSG.js +79 -0
- package/dist/account-QMDCUUSG.js.map +1 -0
- package/dist/account-reads-ZKKDYHK5.js +218 -0
- package/dist/account-reads-ZKKDYHK5.js.map +1 -0
- package/dist/account-writes-N4JDIDRB.js +66 -0
- package/dist/account-writes-N4JDIDRB.js.map +1 -0
- package/dist/accounts-AEBQFCNH.js +114 -0
- package/dist/accounts-AEBQFCNH.js.map +1 -0
- package/dist/accounts-EBGJ2YO7.js +611 -0
- package/dist/accounts-EBGJ2YO7.js.map +1 -0
- package/dist/accounts-HP4BLKK5.js +75 -0
- package/dist/accounts-HP4BLKK5.js.map +1 -0
- package/dist/accounts-YE2SQ3UQ.js +77 -0
- package/dist/accounts-YE2SQ3UQ.js.map +1 -0
- package/dist/accounts-Z4CLGQXJ.js +115 -0
- package/dist/accounts-Z4CLGQXJ.js.map +1 -0
- package/dist/actions-ADRIEQZX.js +55 -0
- package/dist/actions-ADRIEQZX.js.map +1 -0
- package/dist/active-entities-YB46ADQN.js +103 -0
- package/dist/active-entities-YB46ADQN.js.map +1 -0
- package/dist/activities-DUAIQJLN.js +74 -0
- package/dist/activities-DUAIQJLN.js.map +1 -0
- package/dist/ad-group-writes-HL3EZ3BT.js +170 -0
- package/dist/ad-group-writes-HL3EZ3BT.js.map +1 -0
- package/dist/ad-groups-FGS5JJGN.js +68 -0
- package/dist/ad-groups-FGS5JJGN.js.map +1 -0
- package/dist/ad-writes-LX4ACUHB.js +174 -0
- package/dist/ad-writes-LX4ACUHB.js.map +1 -0
- package/dist/add-5CUXNOUM.js +97 -0
- package/dist/add-5CUXNOUM.js.map +1 -0
- package/dist/add-6OXOQNET.js +302 -0
- package/dist/add-6OXOQNET.js.map +1 -0
- package/dist/add-E66HBIZV.js +105 -0
- package/dist/add-E66HBIZV.js.map +1 -0
- package/dist/add-ROK3ETQC.js +104 -0
- package/dist/add-ROK3ETQC.js.map +1 -0
- package/dist/add-accounts-YME5SCXD.js +91 -0
- package/dist/add-accounts-YME5SCXD.js.map +1 -0
- package/dist/ads-65R3WMDU.js +128 -0
- package/dist/ads-65R3WMDU.js.map +1 -0
- package/dist/ads-O63J7BDF.js +113 -0
- package/dist/ads-O63J7BDF.js.map +1 -0
- package/dist/ads-TFZ5PXKS.js +77 -0
- package/dist/ads-TFZ5PXKS.js.map +1 -0
- package/dist/ads-XSVRH45E.js +40 -0
- package/dist/ads-XSVRH45E.js.map +1 -0
- package/dist/adsets-Y62JOOTV.js +176 -0
- package/dist/adsets-Y62JOOTV.js.map +1 -0
- package/dist/advertisers-AIC4QPEK.js +120 -0
- package/dist/advertisers-AIC4QPEK.js.map +1 -0
- package/dist/advertisers-LJ2HKJ4W.js +125 -0
- package/dist/advertisers-LJ2HKJ4W.js.map +1 -0
- package/dist/analytics-N4PGXXEQ.js +1976 -0
- package/dist/analytics-N4PGXXEQ.js.map +1 -0
- package/dist/analytics-X3DR3UVG.js +433 -0
- package/dist/analytics-X3DR3UVG.js.map +1 -0
- package/dist/animate-E3SKQ6SI.js +480 -0
- package/dist/animate-E3SKQ6SI.js.map +1 -0
- package/dist/assign-Y7HGSQVJ.js +77 -0
- package/dist/assign-Y7HGSQVJ.js.map +1 -0
- package/dist/audience-size-SWX5YJQF.js +94 -0
- package/dist/audience-size-SWX5YJQF.js.map +1 -0
- package/dist/audiences-5A6BCWSA.js +268 -0
- package/dist/audiences-5A6BCWSA.js.map +1 -0
- package/dist/audiences-6QOCASVV.js +78 -0
- package/dist/audiences-6QOCASVV.js.map +1 -0
- package/dist/audiences-O67NGIP5.js +85 -0
- package/dist/audiences-O67NGIP5.js.map +1 -0
- package/dist/audit-2KVLWSAI.js +151 -0
- package/dist/audit-2KVLWSAI.js.map +1 -0
- package/dist/audit-HWK24VXI.js +88 -0
- package/dist/audit-HWK24VXI.js.map +1 -0
- package/dist/autocomplete-JJSGC5WU.js +111 -0
- package/dist/autocomplete-JJSGC5WU.js.map +1 -0
- package/dist/avatars-XIEKQ77J.js +38 -0
- package/dist/avatars-XIEKQ77J.js.map +1 -0
- package/dist/bid-pricing-D2HGRWZL.js +99 -0
- package/dist/bid-pricing-D2HGRWZL.js.map +1 -0
- package/dist/brand-AYYWRGIE.js +22 -0
- package/dist/brand-AYYWRGIE.js.map +1 -0
- package/dist/brief-3HUIDK5F.js +490 -0
- package/dist/brief-3HUIDK5F.js.map +1 -0
- package/dist/businesses-65EWTK5E.js +53 -0
- package/dist/businesses-65EWTK5E.js.map +1 -0
- package/dist/campaign-groups-6HCYR2JX.js +95 -0
- package/dist/campaign-groups-6HCYR2JX.js.map +1 -0
- package/dist/campaign-writes-M6JLF5AC.js +170 -0
- package/dist/campaign-writes-M6JLF5AC.js.map +1 -0
- package/dist/campaign-writes-Y6QPRQ4E.js +165 -0
- package/dist/campaign-writes-Y6QPRQ4E.js.map +1 -0
- package/dist/campaigns-6SM2ZSIH.js +76 -0
- package/dist/campaigns-6SM2ZSIH.js.map +1 -0
- package/dist/campaigns-7RKJZRY2.js +107 -0
- package/dist/campaigns-7RKJZRY2.js.map +1 -0
- package/dist/campaigns-KRI25JDZ.js +109 -0
- package/dist/campaigns-KRI25JDZ.js.map +1 -0
- package/dist/campaigns-TD7ZB5DG.js +110 -0
- package/dist/campaigns-TD7ZB5DG.js.map +1 -0
- package/dist/canvas-DMYY2DWI.js +46 -0
- package/dist/canvas-DMYY2DWI.js.map +1 -0
- package/dist/capabilities-3WJTXS2O.js +144 -0
- package/dist/capabilities-3WJTXS2O.js.map +1 -0
- package/dist/cards-7HRC4UQQ.js +85 -0
- package/dist/cards-7HRC4UQQ.js.map +1 -0
- package/dist/catalog-N6MDMIVL.js +64 -0
- package/dist/catalog-N6MDMIVL.js.map +1 -0
- package/dist/catalogs-PB46L7FH.js +128 -0
- package/dist/catalogs-PB46L7FH.js.map +1 -0
- package/dist/changes-SASUQK62.js +135 -0
- package/dist/changes-SASUQK62.js.map +1 -0
- package/dist/chatgpt-JKBSAG25.js +47 -0
- package/dist/chatgpt-JKBSAG25.js.map +1 -0
- package/dist/chats-WRVSQQB2.js +262 -0
- package/dist/chats-WRVSQQB2.js.map +1 -0
- package/dist/chunk-2FGKJY63.js +455 -0
- package/dist/chunk-2FGKJY63.js.map +1 -0
- package/dist/chunk-2GVXNKAE.js +42 -0
- package/dist/chunk-2GVXNKAE.js.map +1 -0
- package/dist/chunk-2J3PTIQB.js +479 -0
- package/dist/chunk-2J3PTIQB.js.map +1 -0
- package/dist/chunk-2J7XC2NO.js +346 -0
- package/dist/chunk-2J7XC2NO.js.map +1 -0
- package/dist/{chunk-VLUGGVJL.js → chunk-2UFRHW3T.js} +12 -4
- package/dist/chunk-2UFRHW3T.js.map +1 -0
- package/dist/chunk-2Y5V23PU.js +29 -0
- package/dist/chunk-2Y5V23PU.js.map +1 -0
- package/dist/chunk-3ACMDRSE.js +39 -0
- package/dist/chunk-3ACMDRSE.js.map +1 -0
- package/dist/chunk-3EWF7VII.js +1079 -0
- package/dist/chunk-3EWF7VII.js.map +1 -0
- package/dist/chunk-3LYMIKKN.js +625 -0
- package/dist/chunk-3LYMIKKN.js.map +1 -0
- package/dist/chunk-3M6RNCDD.js +26 -0
- package/dist/chunk-3M6RNCDD.js.map +1 -0
- package/dist/chunk-3MDO4RR2.js +310 -0
- package/dist/chunk-3MDO4RR2.js.map +1 -0
- package/dist/chunk-3NPOIHSX.js +6667 -0
- package/dist/chunk-3NPOIHSX.js.map +1 -0
- package/dist/chunk-3SK7TWGP.js +103 -0
- package/dist/chunk-3SK7TWGP.js.map +1 -0
- package/dist/chunk-3VXQYDJN.js +1743 -0
- package/dist/chunk-3VXQYDJN.js.map +1 -0
- package/dist/chunk-44VXKO65.js +106 -0
- package/dist/chunk-44VXKO65.js.map +1 -0
- package/dist/chunk-4NZ47VXO.js +137 -0
- package/dist/chunk-4NZ47VXO.js.map +1 -0
- package/dist/chunk-4X3UR372.js +225 -0
- package/dist/chunk-4X3UR372.js.map +1 -0
- package/dist/chunk-553XSIFW.js +304 -0
- package/dist/chunk-553XSIFW.js.map +1 -0
- package/dist/chunk-5FEBUCJU.js +25 -0
- package/dist/chunk-5FEBUCJU.js.map +1 -0
- package/dist/chunk-5HYSKH77.js +315 -0
- package/dist/chunk-5HYSKH77.js.map +1 -0
- package/dist/chunk-5MBPIONY.js +29 -0
- package/dist/chunk-5MBPIONY.js.map +1 -0
- package/dist/chunk-5UCP4EEQ.js +111 -0
- package/dist/chunk-5UCP4EEQ.js.map +1 -0
- package/dist/chunk-5VPJNNJL.js +494 -0
- package/dist/chunk-5VPJNNJL.js.map +1 -0
- package/dist/{chunk-VZEDAFAR.js → chunk-6YYSUISH.js} +47 -8
- package/dist/chunk-6YYSUISH.js.map +1 -0
- package/dist/chunk-7OHWEF3I.js +98 -0
- package/dist/chunk-7OHWEF3I.js.map +1 -0
- package/dist/chunk-A636XRD7.js +159 -0
- package/dist/chunk-A636XRD7.js.map +1 -0
- package/dist/chunk-A76FRBSF.js +297 -0
- package/dist/chunk-A76FRBSF.js.map +1 -0
- package/dist/chunk-AADVCEL4.js +817 -0
- package/dist/chunk-AADVCEL4.js.map +1 -0
- package/dist/chunk-AG62YO7C.js +96 -0
- package/dist/chunk-AG62YO7C.js.map +1 -0
- package/dist/chunk-AIRIT4GF.js +75 -0
- package/dist/chunk-AIRIT4GF.js.map +1 -0
- package/dist/chunk-AMCY5YCB.js +206 -0
- package/dist/chunk-AMCY5YCB.js.map +1 -0
- package/dist/chunk-AP3TP6VG.js +139 -0
- package/dist/chunk-AP3TP6VG.js.map +1 -0
- package/dist/chunk-APP475IQ.js +474 -0
- package/dist/chunk-APP475IQ.js.map +1 -0
- package/dist/chunk-AR7PU7BB.js +76 -0
- package/dist/chunk-AR7PU7BB.js.map +1 -0
- package/dist/chunk-B4S72KSS.js +172 -0
- package/dist/chunk-B4S72KSS.js.map +1 -0
- package/dist/chunk-BIPIL4QA.js +486 -0
- package/dist/chunk-BIPIL4QA.js.map +1 -0
- package/dist/chunk-BPUSL5Y2.js +58 -0
- package/dist/chunk-BPUSL5Y2.js.map +1 -0
- package/dist/chunk-BR32GHYD.js +65 -0
- package/dist/chunk-BR32GHYD.js.map +1 -0
- package/dist/chunk-CAMX6OHF.js +3182 -0
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/{chunk-MF7YA62W.js → chunk-CUL3VB4L.js} +10 -5
- package/dist/chunk-CUL3VB4L.js.map +1 -0
- package/dist/chunk-CVEY353K.js +66 -0
- package/dist/chunk-CVEY353K.js.map +1 -0
- package/dist/chunk-CWXADUKL.js +1599 -0
- package/dist/chunk-CWXADUKL.js.map +1 -0
- package/dist/chunk-D5FY4FAK.js +24 -0
- package/dist/chunk-D5FY4FAK.js.map +1 -0
- package/dist/chunk-DGCUPJZD.js +39 -0
- package/dist/chunk-DGCUPJZD.js.map +1 -0
- package/dist/chunk-DNCLWSHO.js +41 -0
- package/dist/chunk-DNCLWSHO.js.map +1 -0
- package/dist/chunk-DUPURL26.js +97 -0
- package/dist/chunk-DUPURL26.js.map +1 -0
- package/dist/chunk-E2ZOSNF5.js +96 -0
- package/dist/chunk-E2ZOSNF5.js.map +1 -0
- package/dist/chunk-E3HYHT7C.js +274 -0
- package/dist/chunk-E3HYHT7C.js.map +1 -0
- package/dist/chunk-EDLZGTGN.js +216 -0
- package/dist/chunk-EDLZGTGN.js.map +1 -0
- package/dist/chunk-EI5QN4UO.js +363 -0
- package/dist/chunk-EI5QN4UO.js.map +1 -0
- package/dist/{chunk-XHC4LMK4.js → chunk-EIGXX6KI.js} +16 -8
- package/dist/chunk-EIGXX6KI.js.map +1 -0
- package/dist/chunk-EPDE7ZRU.js +174 -0
- package/dist/chunk-EPDE7ZRU.js.map +1 -0
- package/dist/chunk-ERSX3MKH.js +34 -0
- package/dist/chunk-ERSX3MKH.js.map +1 -0
- package/dist/chunk-EVDRF4CI.js +509 -0
- package/dist/chunk-EVDRF4CI.js.map +1 -0
- package/dist/chunk-F4IEILTR.js +382 -0
- package/dist/chunk-F4IEILTR.js.map +1 -0
- package/dist/chunk-F7HRLPR5.js +67 -0
- package/dist/chunk-F7HRLPR5.js.map +1 -0
- package/dist/chunk-FEG6MN4H.js +84 -0
- package/dist/chunk-FEG6MN4H.js.map +1 -0
- package/dist/chunk-FKOECEVC.js +126 -0
- package/dist/chunk-FKOECEVC.js.map +1 -0
- package/dist/chunk-FMGW2NZI.js +106 -0
- package/dist/chunk-FMGW2NZI.js.map +1 -0
- package/dist/chunk-FPZKKNDK.js +98 -0
- package/dist/chunk-FPZKKNDK.js.map +1 -0
- package/dist/chunk-FUVCY63N.js +169 -0
- package/dist/chunk-FUVCY63N.js.map +1 -0
- package/dist/chunk-GBNJQNDS.js +19 -0
- package/dist/chunk-GBNJQNDS.js.map +1 -0
- package/dist/chunk-GIWHHCD6.js +145 -0
- package/dist/chunk-GIWHHCD6.js.map +1 -0
- package/dist/chunk-GOJXKIFQ.js +1605 -0
- package/dist/chunk-GOJXKIFQ.js.map +1 -0
- package/dist/chunk-GRQ2AXDX.js +9 -0
- package/dist/chunk-GRQ2AXDX.js.map +1 -0
- package/dist/chunk-GXDLWBOY.js +73 -0
- package/dist/chunk-GXDLWBOY.js.map +1 -0
- package/dist/chunk-HAE4WWFQ.js +455 -0
- package/dist/chunk-HAE4WWFQ.js.map +1 -0
- package/dist/chunk-I2DNBEV6.js +4227 -0
- package/dist/chunk-I2DNBEV6.js.map +1 -0
- package/dist/chunk-I4FTS5EE.js +455 -0
- package/dist/chunk-I4FTS5EE.js.map +1 -0
- package/dist/chunk-IELPT4K2.js +74 -0
- package/dist/chunk-IELPT4K2.js.map +1 -0
- package/dist/chunk-IJMWEO4P.js +57 -0
- package/dist/chunk-IJMWEO4P.js.map +1 -0
- package/dist/chunk-IREMSVKW.js +175 -0
- package/dist/chunk-IREMSVKW.js.map +1 -0
- package/dist/chunk-IVIJJXXT.js +62 -0
- package/dist/chunk-IVIJJXXT.js.map +1 -0
- package/dist/chunk-JD3W3ON7.js +188 -0
- package/dist/chunk-JD3W3ON7.js.map +1 -0
- package/dist/chunk-JLWBK3VC.js +5187 -0
- package/dist/chunk-JLWBK3VC.js.map +1 -0
- package/dist/chunk-JPK34QPS.js +134 -0
- package/dist/chunk-JPK34QPS.js.map +1 -0
- package/dist/chunk-JUY47NZ2.js +183 -0
- package/dist/chunk-JUY47NZ2.js.map +1 -0
- package/dist/chunk-JXMZEOHV.js +333 -0
- package/dist/chunk-JXMZEOHV.js.map +1 -0
- package/dist/chunk-K37K447U.js +51 -0
- package/dist/chunk-K37K447U.js.map +1 -0
- package/dist/chunk-K6TDB2KV.js +1442 -0
- package/dist/chunk-K6TDB2KV.js.map +1 -0
- package/dist/chunk-KIGGMKAE.js +66 -0
- package/dist/chunk-KIGGMKAE.js.map +1 -0
- package/dist/chunk-KKJ4KJCW.js +29 -0
- package/dist/chunk-KKJ4KJCW.js.map +1 -0
- package/dist/chunk-KONA5PSR.js +55 -0
- package/dist/chunk-KONA5PSR.js.map +1 -0
- package/dist/chunk-KVHRW7KO.js +60 -0
- package/dist/chunk-KVHRW7KO.js.map +1 -0
- package/dist/chunk-LA6PPSNA.js +65 -0
- package/dist/chunk-LA6PPSNA.js.map +1 -0
- package/dist/chunk-LKPJADL2.js +74 -0
- package/dist/chunk-LKPJADL2.js.map +1 -0
- package/dist/chunk-LWAEHLKV.js +74 -0
- package/dist/chunk-LWAEHLKV.js.map +1 -0
- package/dist/chunk-M6UNISGO.js +66 -0
- package/dist/chunk-M6UNISGO.js.map +1 -0
- package/dist/chunk-MIJAGBEP.js +23992 -0
- package/dist/chunk-MIJAGBEP.js.map +1 -0
- package/dist/chunk-MP4EXZ45.js +3151 -0
- package/dist/chunk-MP4EXZ45.js.map +1 -0
- package/dist/chunk-MYTDK3AL.js +2102 -0
- package/dist/chunk-MYTDK3AL.js.map +1 -0
- package/dist/chunk-MZQ5DX6S.js +125 -0
- package/dist/chunk-MZQ5DX6S.js.map +1 -0
- package/dist/chunk-NFSLRRIE.js +77 -0
- package/dist/chunk-NFSLRRIE.js.map +1 -0
- package/dist/chunk-NOK7MSVJ.js +533 -0
- package/dist/chunk-NOK7MSVJ.js.map +1 -0
- package/dist/chunk-NR5RZDAW.js +592 -0
- package/dist/chunk-NR5RZDAW.js.map +1 -0
- package/dist/chunk-O2EVJALZ.js +133 -0
- package/dist/chunk-O2EVJALZ.js.map +1 -0
- package/dist/chunk-O6UM5WWH.js +275 -0
- package/dist/chunk-O6UM5WWH.js.map +1 -0
- package/dist/chunk-O6XZIQXZ.js +6212 -0
- package/dist/chunk-O6XZIQXZ.js.map +1 -0
- package/dist/chunk-OIL6PU5W.js +35 -0
- package/dist/chunk-OIL6PU5W.js.map +1 -0
- package/dist/chunk-P4NSJS54.js +20 -0
- package/dist/chunk-P4NSJS54.js.map +1 -0
- package/dist/chunk-P5T7OZKV.js +26 -0
- package/dist/chunk-P5T7OZKV.js.map +1 -0
- package/dist/chunk-PFBQERWX.js +10 -0
- package/dist/chunk-PFBQERWX.js.map +1 -0
- package/dist/chunk-PSWVSLJU.js +56 -0
- package/dist/chunk-PSWVSLJU.js.map +1 -0
- package/dist/chunk-PY2NJ6XZ.js +191 -0
- package/dist/chunk-PY2NJ6XZ.js.map +1 -0
- package/dist/chunk-PZ4OM2LK.js +45 -0
- package/dist/chunk-PZ4OM2LK.js.map +1 -0
- package/dist/chunk-PZNOJ76W.js +541 -0
- package/dist/chunk-PZNOJ76W.js.map +1 -0
- package/dist/chunk-Q6ULQMWG.js +41 -0
- package/dist/chunk-Q6ULQMWG.js.map +1 -0
- package/dist/chunk-QKFD6PPX.js +57 -0
- package/dist/chunk-QKFD6PPX.js.map +1 -0
- package/dist/chunk-QMLGJ5OW.js +2891 -0
- package/dist/chunk-QMLGJ5OW.js.map +1 -0
- package/dist/chunk-R4TPDVBD.js +207 -0
- package/dist/chunk-R4TPDVBD.js.map +1 -0
- package/dist/chunk-R7QV5N2S.js +846 -0
- package/dist/chunk-R7QV5N2S.js.map +1 -0
- package/dist/chunk-RR3KT2E7.js +665 -0
- package/dist/chunk-RR3KT2E7.js.map +1 -0
- package/dist/chunk-SEPPFM5S.js +228 -0
- package/dist/chunk-SEPPFM5S.js.map +1 -0
- package/dist/chunk-SQ7DRYCC.js +150 -0
- package/dist/chunk-SQ7DRYCC.js.map +1 -0
- package/dist/chunk-SYULM665.js +610 -0
- package/dist/chunk-SYULM665.js.map +1 -0
- package/dist/chunk-TKT3OHZ6.js +170 -0
- package/dist/chunk-TKT3OHZ6.js.map +1 -0
- package/dist/chunk-TNOSX3PJ.js +136 -0
- package/dist/chunk-TNOSX3PJ.js.map +1 -0
- package/dist/chunk-TTVKI54A.js +160 -0
- package/dist/chunk-TTVKI54A.js.map +1 -0
- package/dist/chunk-U7ZVXFS3.js +23 -0
- package/dist/chunk-U7ZVXFS3.js.map +1 -0
- package/dist/chunk-UI6BKYQD.js +225 -0
- package/dist/chunk-UI6BKYQD.js.map +1 -0
- package/dist/chunk-UKLDW4UW.js +46 -0
- package/dist/chunk-UKLDW4UW.js.map +1 -0
- package/dist/chunk-V6XXXEXZ.js +76 -0
- package/dist/chunk-V6XXXEXZ.js.map +1 -0
- package/dist/chunk-V7BW2CIQ.js +92 -0
- package/dist/chunk-V7BW2CIQ.js.map +1 -0
- package/dist/chunk-VSU5R34H.js +76 -0
- package/dist/chunk-VSU5R34H.js.map +1 -0
- package/dist/chunk-W4SA4CMR.js +296 -0
- package/dist/chunk-W4SA4CMR.js.map +1 -0
- package/dist/chunk-WFUMNDCE.js +111 -0
- package/dist/chunk-WFUMNDCE.js.map +1 -0
- package/dist/chunk-WHWNXLTD.js +166 -0
- package/dist/chunk-WHWNXLTD.js.map +1 -0
- package/dist/chunk-WN4KX7GE.js +25 -0
- package/dist/chunk-WN4KX7GE.js.map +1 -0
- package/dist/chunk-XIY7P54H.js +84 -0
- package/dist/chunk-XIY7P54H.js.map +1 -0
- package/dist/chunk-YFPLNMPZ.js +337 -0
- package/dist/chunk-YFPLNMPZ.js.map +1 -0
- package/dist/chunk-YMBB4JBD.js +1830 -0
- package/dist/chunk-YMBB4JBD.js.map +1 -0
- package/dist/chunk-YQFM2P5W.js +197 -0
- package/dist/chunk-YQFM2P5W.js.map +1 -0
- package/dist/chunk-YQSBHWOI.js +41 -0
- package/dist/chunk-YTF3IVMF.js +149 -0
- package/dist/chunk-YTF3IVMF.js.map +1 -0
- package/dist/chunk-Z3ENMCFE.js +94 -0
- package/dist/chunk-Z3ENMCFE.js.map +1 -0
- package/dist/chunk-Z7MWSXLG.js +94 -0
- package/dist/chunk-Z7MWSXLG.js.map +1 -0
- package/dist/chunk-ZIXHS6AM.js +42 -0
- package/dist/chunk-ZIXHS6AM.js.map +1 -0
- package/dist/chunk-ZJ7TQUCU.js +4410 -0
- package/dist/chunk-ZJ7TQUCU.js.map +1 -0
- package/dist/chunk-ZNQRDLSS.js +52 -0
- package/dist/chunk-ZNQRDLSS.js.map +1 -0
- package/dist/claim-ROWH6JVB.js +197 -0
- package/dist/claim-ROWH6JVB.js.map +1 -0
- package/dist/cli.js +104 -69986
- package/dist/cli.js.map +1 -1
- package/dist/client-EURRWXPW.js +19 -0
- package/dist/code-FKQW7V7N.js +76 -0
- package/dist/code-FKQW7V7N.js.map +1 -0
- package/dist/companies-MD2MZKU6.js +195 -0
- package/dist/companies-MD2MZKU6.js.map +1 -0
- package/dist/complete-FCAJM6Z4.js +81 -0
- package/dist/complete-FCAJM6Z4.js.map +1 -0
- package/dist/config-OZOHIAOJ.js +88 -0
- package/dist/config-OZOHIAOJ.js.map +1 -0
- package/dist/connect-4YXFMXYX.js +42 -0
- package/dist/content-PCGSX2QU.js +85 -0
- package/dist/content-PCGSX2QU.js.map +1 -0
- package/dist/conversation-UX5NZ3IO.js +93 -0
- package/dist/conversation-UX5NZ3IO.js.map +1 -0
- package/dist/conversion-report-7QSWB2FY.js +125 -0
- package/dist/conversion-report-7QSWB2FY.js.map +1 -0
- package/dist/conversion-upload-command-XESIAQPU.js +438 -0
- package/dist/conversion-upload-command-XESIAQPU.js.map +1 -0
- package/dist/conversion-writes-BGOVLBS5.js +120 -0
- package/dist/conversion-writes-BGOVLBS5.js.map +1 -0
- package/dist/conversions-IYIWW4O7.js +76 -0
- package/dist/conversions-IYIWW4O7.js.map +1 -0
- package/dist/conversions-RLIJAE7E.js +135 -0
- package/dist/conversions-RLIJAE7E.js.map +1 -0
- package/dist/countries-5OBUVLLD.js +82 -0
- package/dist/countries-5OBUVLLD.js.map +1 -0
- package/dist/create-CUJLJUAQ.js +138 -0
- package/dist/create-CUJLJUAQ.js.map +1 -0
- package/dist/create-FENOT6DX.js +236 -0
- package/dist/create-FENOT6DX.js.map +1 -0
- package/dist/create-OFZQMOWO.js +59 -0
- package/dist/create-OFZQMOWO.js.map +1 -0
- package/dist/create-Z5SS2AWB.js +207 -0
- package/dist/create-Z5SS2AWB.js.map +1 -0
- package/dist/creatives-UJW2QBLH.js +182 -0
- package/dist/creatives-UJW2QBLH.js.map +1 -0
- package/dist/creatives-XI2DGQUZ.js +87 -0
- package/dist/creatives-XI2DGQUZ.js.map +1 -0
- package/dist/creatives-YLXQSROD.js +51 -0
- package/dist/creatives-YLXQSROD.js.map +1 -0
- package/dist/credentials-CH73QMD2.js +287 -0
- package/dist/credentials-CH73QMD2.js.map +1 -0
- package/dist/critique-C4WRQ4AJ.js +1449 -0
- package/dist/critique-C4WRQ4AJ.js.map +1 -0
- package/dist/critique-ZBNJ6MQ3.js +213 -0
- package/dist/critique-ZBNJ6MQ3.js.map +1 -0
- package/dist/crm-MJTT6GOJ.js +224 -0
- package/dist/crm-MJTT6GOJ.js.map +1 -0
- package/dist/crm-ZXHSEFYI.js +318 -0
- package/dist/crm-ZXHSEFYI.js.map +1 -0
- package/dist/crop-B52KIQ4O.js +113 -0
- package/dist/crop-B52KIQ4O.js.map +1 -0
- package/dist/currency-GGWF5DMU.js +88 -0
- package/dist/currency-GGWF5DMU.js.map +1 -0
- package/dist/custom-conversions-7WDBTC4X.js +125 -0
- package/dist/custom-conversions-7WDBTC4X.js.map +1 -0
- package/dist/customers-7E4HBSEY.js +56 -0
- package/dist/decide-PK7WNSQ2.js +199 -0
- package/dist/decide-PK7WNSQ2.js.map +1 -0
- package/dist/delete-56LKNEGA.js +71 -0
- package/dist/delete-56LKNEGA.js.map +1 -0
- package/dist/delete-DQY4ZSFN.js +54 -0
- package/dist/delete-DQY4ZSFN.js.map +1 -0
- package/dist/delete-EZ7HHOOD.js +69 -0
- package/dist/delete-EZ7HHOOD.js.map +1 -0
- package/dist/delete-JV4KAA6Y.js +66 -0
- package/dist/delete-JV4KAA6Y.js.map +1 -0
- package/dist/delete-YONJW4UZ.js +63 -0
- package/dist/delete-YONJW4UZ.js.map +1 -0
- package/dist/delete-YSYVFL6W.js +71 -0
- package/dist/delete-YSYVFL6W.js.map +1 -0
- package/dist/demographics-6N3TTYWC.js +138 -0
- package/dist/demographics-6N3TTYWC.js.map +1 -0
- package/dist/describe-AAVYIFE3.js +97 -0
- package/dist/describe-AAVYIFE3.js.map +1 -0
- package/dist/describe-UQFLWVFR.js +97 -0
- package/dist/describe-UQFLWVFR.js.map +1 -0
- package/dist/dimensions-QDXBG2XC.js +101 -0
- package/dist/dimensions-QDXBG2XC.js.map +1 -0
- package/dist/discard-S3NGGUSK.js +66 -0
- package/dist/discard-S3NGGUSK.js.map +1 -0
- package/dist/discover-6TEBPVNC.js +93 -0
- package/dist/discover-6TEBPVNC.js.map +1 -0
- package/dist/discover-SBZPB7T2.js +172 -0
- package/dist/discover-SBZPB7T2.js.map +1 -0
- package/dist/domain-AMAR76PB.js +98 -0
- package/dist/domain-AMAR76PB.js.map +1 -0
- package/dist/download-LV3GPOWV.js +299 -0
- package/dist/download-LV3GPOWV.js.map +1 -0
- package/dist/draft-6QZ7WMWM.js +217 -0
- package/dist/draft-6QZ7WMWM.js.map +1 -0
- package/dist/draft-DDFFTZ43.js +233 -0
- package/dist/draft-DDFFTZ43.js.map +1 -0
- package/dist/draft-FIKJXNIQ.js +281 -0
- package/dist/draft-FIKJXNIQ.js.map +1 -0
- package/dist/draft-GYGWTMBU.js +307 -0
- package/dist/draft-GYGWTMBU.js.map +1 -0
- package/dist/draft-KXL62WFS.js +328 -0
- package/dist/draft-KXL62WFS.js.map +1 -0
- package/dist/draft-N4LFPKTA.js +100 -0
- package/dist/draft-N4LFPKTA.js.map +1 -0
- package/dist/draft-POSLJCWG.js +306 -0
- package/dist/draft-POSLJCWG.js.map +1 -0
- package/dist/draft-XPO5RWST.js +103 -0
- package/dist/draft-XPO5RWST.js.map +1 -0
- package/dist/engine/index.d.ts +213 -127
- package/dist/engine/index.js +18 -4
- package/dist/{env-4P5HOGNA.js → env-TQ2XS2KY.js} +12 -2
- package/dist/env-TQ2XS2KY.js.map +1 -0
- package/dist/experiment-FQNKMORZ.js +1397 -0
- package/dist/experiment-FQNKMORZ.js.map +1 -0
- package/dist/export-4IZQZAPF.js +168 -0
- package/dist/export-4IZQZAPF.js.map +1 -0
- package/dist/extract-DZMGVQ7D.js +113 -0
- package/dist/extract-DZMGVQ7D.js.map +1 -0
- package/dist/facets-223V5P47.js +114 -0
- package/dist/facets-223V5P47.js.map +1 -0
- package/dist/favorites-DD2LNSTG.js +178 -0
- package/dist/favorites-DD2LNSTG.js.map +1 -0
- package/dist/feed-TUVFNX2U.js +177 -0
- package/dist/feed-TUVFNX2U.js.map +1 -0
- package/dist/feedback-MIW23MI2.js +66 -0
- package/dist/feedback-MIW23MI2.js.map +1 -0
- package/dist/feedback-record-RGKRKPGZ.js +175 -0
- package/dist/feedback-record-RGKRKPGZ.js.map +1 -0
- package/dist/fetch-O6UHNXWB.js +139 -0
- package/dist/fetch-O6UHNXWB.js.map +1 -0
- package/dist/fetch-TZ4UCMJK.js +176 -0
- package/dist/fetch-TZ4UCMJK.js.map +1 -0
- package/dist/find-4XKIBF4D.js +134 -0
- package/dist/find-4XKIBF4D.js.map +1 -0
- package/dist/fit-ODVVXV2Q.js +45 -0
- package/dist/fit-ODVVXV2Q.js.map +1 -0
- package/dist/flows-HVWBFZ7T.js +247 -0
- package/dist/flows-HVWBFZ7T.js.map +1 -0
- package/dist/follow-RCOXTZGY.js +94 -0
- package/dist/follow-RCOXTZGY.js.map +1 -0
- package/dist/follow-competitors-SQ5XBFTK.js +112 -0
- package/dist/follow-competitors-SQ5XBFTK.js.map +1 -0
- package/dist/following-VDU3BHC4.js +113 -0
- package/dist/following-VDU3BHC4.js.map +1 -0
- package/dist/fonts-NBIQAVQN.js +34 -0
- package/dist/fonts-NBIQAVQN.js.map +1 -0
- package/dist/forecast-2GJKBNBM.js +168 -0
- package/dist/forecast-2GJKBNBM.js.map +1 -0
- package/dist/forecast-76MUJBPO.js +104 -0
- package/dist/forecast-76MUJBPO.js.map +1 -0
- package/dist/funding-HTFVZLLG.js +85 -0
- package/dist/funding-HTFVZLLG.js.map +1 -0
- package/dist/funnel-FE2HIRVQ.js +394 -0
- package/dist/funnel-FE2HIRVQ.js.map +1 -0
- package/dist/ga4-2RC4EH7V.js +55 -0
- package/dist/ga4-2RC4EH7V.js.map +1 -0
- package/dist/generate-TPDOBCKQ.js +262 -0
- package/dist/generate-TPDOBCKQ.js.map +1 -0
- package/dist/get-6JNOVI27.js +56 -0
- package/dist/get-6JNOVI27.js.map +1 -0
- package/dist/get-FH2LIEYL.js +63 -0
- package/dist/get-FH2LIEYL.js.map +1 -0
- package/dist/get-GZLCDXXW.js +61 -0
- package/dist/get-GZLCDXXW.js.map +1 -0
- package/dist/get-KVAOPAQW.js +78 -0
- package/dist/get-KVAOPAQW.js.map +1 -0
- package/dist/get-TSPQYEKC.js +59 -0
- package/dist/get-TSPQYEKC.js.map +1 -0
- package/dist/get-TY3RXYNZ.js +63 -0
- package/dist/get-TY3RXYNZ.js.map +1 -0
- package/dist/get-VPW33XTN.js +92 -0
- package/dist/get-VPW33XTN.js.map +1 -0
- package/dist/gif-JFEYPFFI.js +94 -0
- package/dist/gif-JFEYPFFI.js.map +1 -0
- package/dist/google-R6RD4L6Z.js +136 -0
- package/dist/google-R6RD4L6Z.js.map +1 -0
- package/dist/google-VPQNRVIB.js +3190 -0
- package/dist/google-VPQNRVIB.js.map +1 -0
- package/dist/google-ads-JEQMNNMN.js +195 -0
- package/dist/google-ads-JEQMNNMN.js.map +1 -0
- package/dist/group-7AV6UL26.js +43 -0
- package/dist/group-7AV6UL26.js.map +1 -0
- package/dist/group-BVQZEZIC.js +43 -0
- package/dist/group-BVQZEZIC.js.map +1 -0
- package/dist/gsc-SQ42WAQE.js +30 -0
- package/dist/gsc-SQ42WAQE.js.map +1 -0
- package/dist/history-BNNHFURR.js +67 -0
- package/dist/history-BNNHFURR.js.map +1 -0
- package/dist/history-EHUQG4CE.js +133 -0
- package/dist/history-EHUQG4CE.js.map +1 -0
- package/dist/hubspot-JABE4USC.js +779 -0
- package/dist/hubspot-JABE4USC.js.map +1 -0
- package/dist/icon-OYTTSNSL.js +137 -0
- package/dist/icon-OYTTSNSL.js.map +1 -0
- package/dist/ideas-OD76WOQ3.js +32 -0
- package/dist/ideas-OD76WOQ3.js.map +1 -0
- package/dist/images-LY7AWWBK.js +90 -0
- package/dist/images-LY7AWWBK.js.map +1 -0
- package/dist/improve-W6GZNT2A.js +86 -0
- package/dist/improve-W6GZNT2A.js.map +1 -0
- package/dist/ingest-47WON6HT.js +23 -0
- package/dist/ingest-47WON6HT.js.map +1 -0
- package/dist/ingest-HDGGHBSJ.js +107 -0
- package/dist/ingest-HDGGHBSJ.js.map +1 -0
- package/dist/insights-IW7LGAWU.js +423 -0
- package/dist/insights-IW7LGAWU.js.map +1 -0
- package/dist/insights-QH54F56A.js +122 -0
- package/dist/insights-QH54F56A.js.map +1 -0
- package/dist/inspect-AJLG2HGL.js +189 -0
- package/dist/inspect-AJLG2HGL.js.map +1 -0
- package/dist/inspiration-RDQ3Y3N3.js +53 -0
- package/dist/inspiration-RDQ3Y3N3.js.map +1 -0
- package/dist/intent-5GSSCFZ2.js +95 -0
- package/dist/intent-5GSSCFZ2.js.map +1 -0
- package/dist/job-URVXJP75.js +202 -0
- package/dist/job-URVXJP75.js.map +1 -0
- package/dist/job-create-S4SECUVF.js +109 -0
- package/dist/job-create-S4SECUVF.js.map +1 -0
- package/dist/job-status-253SUCTJ.js +74 -0
- package/dist/job-status-253SUCTJ.js.map +1 -0
- package/dist/keep-GPSYDIGJ.js +78 -0
- package/dist/keep-GPSYDIGJ.js.map +1 -0
- package/dist/keyword-gap-NTFDX43B.js +130 -0
- package/dist/keyword-gap-NTFDX43B.js.map +1 -0
- package/dist/keyword-metrics-XSFLMBZX.js +197 -0
- package/dist/keyword-metrics-XSFLMBZX.js.map +1 -0
- package/dist/keywords-for-site-U4JLYXVE.js +128 -0
- package/dist/keywords-for-site-U4JLYXVE.js.map +1 -0
- package/dist/landing-AO72EGJ6.js +28 -0
- package/dist/landing-AO72EGJ6.js.map +1 -0
- package/dist/landings-NEF4PQL2.js +151 -0
- package/dist/landings-NEF4PQL2.js.map +1 -0
- package/dist/languages-3RDPPPTE.js +55 -0
- package/dist/languages-3RDPPPTE.js.map +1 -0
- package/dist/languages-CQX3YOIT.js +40 -0
- package/dist/languages-CQX3YOIT.js.map +1 -0
- package/dist/launches-GBHLJH5S.js +19 -0
- package/dist/launches-GBHLJH5S.js.map +1 -0
- package/dist/layerize-Q56C6LFG.js +190 -0
- package/dist/layerize-Q56C6LFG.js.map +1 -0
- package/dist/leads-JHUM6FYR.js +293 -0
- package/dist/leads-JHUM6FYR.js.map +1 -0
- package/dist/leads-UYZM2XQX.js +90 -0
- package/dist/leads-UYZM2XQX.js.map +1 -0
- package/dist/learn-D2KBGJHZ.js +203 -0
- package/dist/learn-D2KBGJHZ.js.map +1 -0
- package/dist/library-6VUFHTEK.js +109 -0
- package/dist/library-6VUFHTEK.js.map +1 -0
- package/dist/lighthouse-57U2GMPV.js +75 -0
- package/dist/lighthouse-57U2GMPV.js.map +1 -0
- package/dist/line-item-writes-R5GO6GTL.js +208 -0
- package/dist/line-item-writes-R5GO6GTL.js.map +1 -0
- package/dist/line-items-RBMH6YBZ.js +103 -0
- package/dist/line-items-RBMH6YBZ.js.map +1 -0
- package/dist/link-WS2RMCOP.js +64 -0
- package/dist/link-WS2RMCOP.js.map +1 -0
- package/dist/linkedin-FSIALZTS.js +1008 -0
- package/dist/linkedin-FSIALZTS.js.map +1 -0
- package/dist/list-2AE2Q4ZD.js +151 -0
- package/dist/list-2AE2Q4ZD.js.map +1 -0
- package/dist/list-E635Y6M4.js +303 -0
- package/dist/list-E635Y6M4.js.map +1 -0
- package/dist/list-G57ZO4PG.js +50 -0
- package/dist/list-G57ZO4PG.js.map +1 -0
- package/dist/list-JCSWZWDI.js +57 -0
- package/dist/list-JCSWZWDI.js.map +1 -0
- package/dist/list-KT6NXVLV.js +63 -0
- package/dist/list-KT6NXVLV.js.map +1 -0
- package/dist/list-RINCJOAC.js +76 -0
- package/dist/list-RINCJOAC.js.map +1 -0
- package/dist/list-SRNXHS6L.js +51 -0
- package/dist/list-SRNXHS6L.js.map +1 -0
- package/dist/list-YJSO4M5Q.js +65 -0
- package/dist/list-YJSO4M5Q.js.map +1 -0
- package/dist/locations-HW2Y5OJO.js +67 -0
- package/dist/locations-HW2Y5OJO.js.map +1 -0
- package/dist/locations-XOHI3VWI.js +40 -0
- package/dist/locations-XOHI3VWI.js.map +1 -0
- package/dist/log-3HX5BIO6.js +92 -0
- package/dist/log-3HX5BIO6.js.map +1 -0
- package/dist/logo-KXTGIYBI.js +18 -0
- package/dist/logo-KXTGIYBI.js.map +1 -0
- package/dist/lookup-X6O5UNJH.js +22 -0
- package/dist/lookup-X6O5UNJH.js.map +1 -0
- package/dist/make-QH77XOWM.js +633 -0
- package/dist/make-QH77XOWM.js.map +1 -0
- package/dist/map-QABBPYZM.js +404 -0
- package/dist/map-QABBPYZM.js.map +1 -0
- package/dist/mcp-HSD3W3OB.js +463 -0
- package/dist/mcp-HSD3W3OB.js.map +1 -0
- package/dist/media-MI4EE7L4.js +89 -0
- package/dist/media-MI4EE7L4.js.map +1 -0
- package/dist/media-QUTQOBA7.js +15 -0
- package/dist/media-QUTQOBA7.js.map +1 -0
- package/dist/media-sources-HO4DXRX5.js +32 -0
- package/dist/media-sources-HO4DXRX5.js.map +1 -0
- package/dist/members-YEYYJGY6.js +44 -0
- package/dist/members-YEYYJGY6.js.map +1 -0
- package/dist/meta-E3JOUOSS.js +69 -0
- package/dist/meta-E3JOUOSS.js.map +1 -0
- package/dist/metrics-HQ7XJAYQ.js +152 -0
- package/dist/metrics-HQ7XJAYQ.js.map +1 -0
- package/dist/models-PGX3FBHU.js +155 -0
- package/dist/models-PGX3FBHU.js.map +1 -0
- package/dist/normalize-FPJ6GSOY.js +806 -0
- package/dist/normalize-FPJ6GSOY.js.map +1 -0
- package/dist/normalize-GSQWN77S.js +141 -0
- package/dist/normalize-GSQWN77S.js.map +1 -0
- package/dist/options-F5XZMQLK.js +121 -0
- package/dist/options-F5XZMQLK.js.map +1 -0
- package/dist/output-GQFJ2T5B.js +24 -0
- package/dist/output-GQFJ2T5B.js.map +1 -0
- package/dist/page-VTTSBC6Y.js +105 -0
- package/dist/page-VTTSBC6Y.js.map +1 -0
- package/dist/pages-PMZVNVQM.js +66 -0
- package/dist/pages-PMZVNVQM.js.map +1 -0
- package/dist/performance-G67JQE5J.js +24 -0
- package/dist/performance-G67JQE5J.js.map +1 -0
- package/dist/pinterest-UDNGOWDM.js +96 -0
- package/dist/pinterest-UDNGOWDM.js.map +1 -0
- package/dist/pixels-OYZDGCH3.js +108 -0
- package/dist/pixels-OYZDGCH3.js.map +1 -0
- package/dist/pixels-XKGNTCFX.js +60 -0
- package/dist/pixels-XKGNTCFX.js.map +1 -0
- package/dist/plan-DZS3TVIJ.js +207 -0
- package/dist/plan-DZS3TVIJ.js.map +1 -0
- package/dist/preview-DR6MXOGI.js +169 -0
- package/dist/preview-DR6MXOGI.js.map +1 -0
- package/dist/profile-VOVZG44G.js +159 -0
- package/dist/profile-VOVZG44G.js.map +1 -0
- package/dist/promoted-tweet-writes-VCK2ADVJ.js +180 -0
- package/dist/promoted-tweet-writes-VCK2ADVJ.js.map +1 -0
- package/dist/promoted-tweets-4ACBP2RV.js +119 -0
- package/dist/promoted-tweets-4ACBP2RV.js.map +1 -0
- package/dist/properties-MKVF7MUK.js +101 -0
- package/dist/properties-MKVF7MUK.js.map +1 -0
- package/dist/publish-6XVA35T6.js +322 -0
- package/dist/publish-6XVA35T6.js.map +1 -0
- package/dist/query-CNWQ6STR.js +61 -0
- package/dist/query-CNWQ6STR.js.map +1 -0
- package/dist/query-DBSBZ73C.js +247 -0
- package/dist/query-DBSBZ73C.js.map +1 -0
- package/dist/query-QK4U4TEL.js +236 -0
- package/dist/query-QK4U4TEL.js.map +1 -0
- package/dist/questionnaire-OVJWNUVV.js +93 -0
- package/dist/questionnaire-OVJWNUVV.js.map +1 -0
- package/dist/read-L2QIVJTL.js +141 -0
- package/dist/read-L2QIVJTL.js.map +1 -0
- package/dist/reddit-SCEB2JQL.js +26 -0
- package/dist/reddit-SCEB2JQL.js.map +1 -0
- package/dist/refresh-TIH5Y3NP.js +94 -0
- package/dist/refresh-TIH5Y3NP.js.map +1 -0
- package/dist/release-LKMUKVXM.js +60 -0
- package/dist/release-LKMUKVXM.js.map +1 -0
- package/dist/relevant-pages-CRI2NLWG.js +99 -0
- package/dist/relevant-pages-CRI2NLWG.js.map +1 -0
- package/dist/remove-6ABOB7TZ.js +50 -0
- package/dist/remove-6ABOB7TZ.js.map +1 -0
- package/dist/remove-JKSCGKQG.js +48 -0
- package/dist/remove-JKSCGKQG.js.map +1 -0
- package/dist/reopen-27TDNXFP.js +63 -0
- package/dist/reopen-27TDNXFP.js.map +1 -0
- package/dist/rerun-XHECBJD5.js +84 -0
- package/dist/rerun-XHECBJD5.js.map +1 -0
- package/dist/research-4MOXIMDX.js +62 -0
- package/dist/research-4MOXIMDX.js.map +1 -0
- package/dist/research-XYXP7D4R.js +262 -0
- package/dist/research-XYXP7D4R.js.map +1 -0
- package/dist/reset-NLYEBPLX.js +54 -0
- package/dist/reset-NLYEBPLX.js.map +1 -0
- package/dist/reset-RDQOYBXX.js +54 -0
- package/dist/reset-RDQOYBXX.js.map +1 -0
- package/dist/resolve-VHKWC5KW.js +121 -0
- package/dist/resolve-VHKWC5KW.js.map +1 -0
- package/dist/retry-MTQSHXKH.js +60 -0
- package/dist/retry-MTQSHXKH.js.map +1 -0
- package/dist/retry-ZI5ECSFD.js +62 -0
- package/dist/retry-ZI5ECSFD.js.map +1 -0
- package/dist/retry-failed-2OYMCB55.js +45 -0
- package/dist/retry-failed-2OYMCB55.js.map +1 -0
- package/dist/run-BMJJRJL2.js +65 -0
- package/dist/run-BMJJRJL2.js.map +1 -0
- package/dist/run-IHXS6F5V.js +59 -0
- package/dist/run-IHXS6F5V.js.map +1 -0
- package/dist/scaffold-ad-QEADKYPL.js +1548 -0
- package/dist/scaffold-ad-QEADKYPL.js.map +1 -0
- package/dist/scaffold-static-ad-PTJ73ZNF.js +971 -0
- package/dist/scaffold-static-ad-PTJ73ZNF.js.map +1 -0
- package/dist/scaffold-video-ZQEZRVD6.js +872 -0
- package/dist/scaffold-video-ZQEZRVD6.js.map +1 -0
- package/dist/schedule-JD2EQJCT.js +61 -0
- package/dist/schedule-JD2EQJCT.js.map +1 -0
- package/dist/schedule-TLYT5UXM.js +66 -0
- package/dist/schedule-TLYT5UXM.js.map +1 -0
- package/dist/scheduled-agents-GIVKWTXX.js +49 -0
- package/dist/scheduled-agents-GIVKWTXX.js.map +1 -0
- package/dist/schema-MZTVCNP4.js +63 -0
- package/dist/schema-MZTVCNP4.js.map +1 -0
- package/dist/schema-RYTVKPLZ.js +132 -0
- package/dist/schema-RYTVKPLZ.js.map +1 -0
- package/dist/scrape-T3DA7ER7.js +2241 -0
- package/dist/scrape-T3DA7ER7.js.map +1 -0
- package/dist/screenshot-EIGC6SZB.js +102 -0
- package/dist/screenshot-EIGC6SZB.js.map +1 -0
- package/dist/search-2SVUDZIX.js +224 -0
- package/dist/search-2SVUDZIX.js.map +1 -0
- package/dist/search-34NFJ5F6.js +26 -0
- package/dist/search-34NFJ5F6.js.map +1 -0
- package/dist/search-AOFAN5NB.js +174 -0
- package/dist/search-AOFAN5NB.js.map +1 -0
- package/dist/search-BWE3OPOY.js +91 -0
- package/dist/search-BWE3OPOY.js.map +1 -0
- package/dist/search-EYYAOZND.js +92 -0
- package/dist/search-EYYAOZND.js.map +1 -0
- package/dist/search-copy-VKQ2OOBM.js +168 -0
- package/dist/search-copy-VKQ2OOBM.js.map +1 -0
- package/dist/seeds-HQYSVFIX.js +101 -0
- package/dist/seeds-HQYSVFIX.js.map +1 -0
- package/dist/select-HJMOAWAU.js +94 -0
- package/dist/select-HJMOAWAU.js.map +1 -0
- package/dist/sends-I7VQFE4S.js +309 -0
- package/dist/sends-I7VQFE4S.js.map +1 -0
- package/dist/sequences-JHSEJJGN.js +146 -0
- package/dist/sequences-JHSEJJGN.js.map +1 -0
- package/dist/set-prompt-TSS33JQZ.js +185 -0
- package/dist/set-prompt-TSS33JQZ.js.map +1 -0
- package/dist/setup-links-IW4BUANK.js +141 -0
- package/dist/setup-links-IW4BUANK.js.map +1 -0
- package/dist/{shared-J7DQZ2ED.js → shared-AT3FXPAG.js} +8 -6
- package/dist/shared-AT3FXPAG.js.map +1 -0
- package/dist/shopify-RQKO5TMR.js +3819 -0
- package/dist/shopify-RQKO5TMR.js.map +1 -0
- package/dist/site-3NU2BDAR.js +177 -0
- package/dist/site-3NU2BDAR.js.map +1 -0
- package/dist/sitemaps-FG37N5EB.js +87 -0
- package/dist/sitemaps-FG37N5EB.js.map +1 -0
- package/dist/sites-FIXK4Y3O.js +101 -0
- package/dist/sites-FIXK4Y3O.js.map +1 -0
- package/dist/skills-OKVCVQVD.js +47 -0
- package/dist/skills-OKVCVQVD.js.map +1 -0
- package/dist/sources-SEODRUIC.js +30 -0
- package/dist/sources-SEODRUIC.js.map +1 -0
- package/dist/sources-Z6BGTBGO.js +421 -0
- package/dist/sources-Z6BGTBGO.js.map +1 -0
- package/dist/stale-SWPDWXG7.js +63 -0
- package/dist/stale-SWPDWXG7.js.map +1 -0
- package/dist/stats-ZWZ7BAHV.js +34 -0
- package/dist/stats-ZWZ7BAHV.js.map +1 -0
- package/dist/status-7Y7UNSO6.js +62 -0
- package/dist/status-7Y7UNSO6.js.map +1 -0
- package/dist/sticker-FLRZM3BI.js +94 -0
- package/dist/sticker-FLRZM3BI.js.map +1 -0
- package/dist/stock-2CSMWRWV.js +179 -0
- package/dist/stock-2CSMWRWV.js.map +1 -0
- package/dist/studio-TTTR6N7D.js +49 -0
- package/dist/studio-TTTR6N7D.js.map +1 -0
- package/dist/sync-FH773IFH.js +54 -0
- package/dist/sync-FH773IFH.js.map +1 -0
- package/dist/sync-G5CS2RYV.js +54 -0
- package/dist/sync-G5CS2RYV.js.map +1 -0
- package/dist/sync-UADA6M33.js +265 -0
- package/dist/sync-UADA6M33.js.map +1 -0
- package/dist/sync-definition-77KLGPMA.js +52 -0
- package/dist/sync-definition-77KLGPMA.js.map +1 -0
- package/dist/tag-manager-NK3ZHSJB.js +43 -0
- package/dist/tag-manager-NK3ZHSJB.js.map +1 -0
- package/dist/tags-ANGHHLAC.js +20 -0
- package/dist/tags-ANGHHLAC.js.map +1 -0
- package/dist/tags-DKPUSQTJ.js +20 -0
- package/dist/tags-DKPUSQTJ.js.map +1 -0
- package/dist/tags-HSCV4ZAQ.js +20 -0
- package/dist/tags-HSCV4ZAQ.js.map +1 -0
- package/dist/tags-J3RMQEQM.js +26 -0
- package/dist/tags-J3RMQEQM.js.map +1 -0
- package/dist/tags-VZGTR3VJ.js +224 -0
- package/dist/tags-VZGTR3VJ.js.map +1 -0
- package/dist/targeting-constants-ZGBX3VWU.js +118 -0
- package/dist/targeting-constants-ZGBX3VWU.js.map +1 -0
- package/dist/targeting-criteria-BSG3CLHU.js +113 -0
- package/dist/targeting-criteria-BSG3CLHU.js.map +1 -0
- package/dist/targets-DVOAFYZQ.js +102 -0
- package/dist/targets-DVOAFYZQ.js.map +1 -0
- package/dist/templates-KJ5O44FF.js +178 -0
- package/dist/templates-KJ5O44FF.js.map +1 -0
- package/dist/testimonials-NB7V3DUO.js +32 -0
- package/dist/testimonials-NB7V3DUO.js.map +1 -0
- package/dist/themes-3RV3HNNE.js +94 -0
- package/dist/themes-3RV3HNNE.js.map +1 -0
- package/dist/top-companies-KRB3OZOT.js +108 -0
- package/dist/top-companies-KRB3OZOT.js.map +1 -0
- package/dist/translate-5FP32BIA.js +598 -0
- package/dist/translate-5FP32BIA.js.map +1 -0
- package/dist/triggers-EURHTCYC.js +141 -0
- package/dist/triggers-EURHTCYC.js.map +1 -0
- package/dist/tweets-X64YDEAA.js +123 -0
- package/dist/tweets-X64YDEAA.js.map +1 -0
- package/dist/unfollow-PIONCSBL.js +46 -0
- package/dist/unfollow-PIONCSBL.js.map +1 -0
- package/dist/unlink-HVVTZ3MB.js +67 -0
- package/dist/unlink-HVVTZ3MB.js.map +1 -0
- package/dist/unstage-BJJ5M7MK.js +95 -0
- package/dist/unstage-BJJ5M7MK.js.map +1 -0
- package/dist/unstage-Y7ZE3NUJ.js +84 -0
- package/dist/unstage-Y7ZE3NUJ.js.map +1 -0
- package/dist/update-3IP7FB6Y.js +98 -0
- package/dist/update-3IP7FB6Y.js.map +1 -0
- package/dist/update-CSDSK5NO.js +63 -0
- package/dist/update-CSDSK5NO.js.map +1 -0
- package/dist/update-FGJXVDB7.js +142 -0
- package/dist/update-FGJXVDB7.js.map +1 -0
- package/dist/update-MF7LY2OT.js +155 -0
- package/dist/update-MF7LY2OT.js.map +1 -0
- package/dist/upload-DDPI7KJV.js +126 -0
- package/dist/upload-DDPI7KJV.js.map +1 -0
- package/dist/upload-IWFYKD7A.js +150 -0
- package/dist/upload-IWFYKD7A.js.map +1 -0
- package/dist/upscale-EYCEYRWE.js +109 -0
- package/dist/upscale-EYCEYRWE.js.map +1 -0
- package/dist/url-options-RA3XISLN.js +130 -0
- package/dist/url-options-RA3XISLN.js.map +1 -0
- package/dist/url-params-SN4APXCK.js +98 -0
- package/dist/url-params-SN4APXCK.js.map +1 -0
- package/dist/use-E2TA2K6J.js +95 -0
- package/dist/use-E2TA2K6J.js.map +1 -0
- package/dist/validate-W52JOEXI.js +88 -0
- package/dist/validate-W52JOEXI.js.map +1 -0
- package/dist/variant-ETHB6XUM.js +338 -0
- package/dist/variant-ETHB6XUM.js.map +1 -0
- package/dist/videos-653WAFPG.js +39 -0
- package/dist/videos-653WAFPG.js.map +1 -0
- package/dist/view-BVEZRRV2.js +121 -0
- package/dist/view-BVEZRRV2.js.map +1 -0
- package/dist/viewer-check-W4ICSBHO.js +68 -0
- package/dist/viewer-check-W4ICSBHO.js.map +1 -0
- package/dist/web-JWIGFGIU.js +140 -0
- package/dist/web-JWIGFGIU.js.map +1 -0
- package/dist/winners-MJDKCGEZ.js +113 -0
- package/dist/winners-MJDKCGEZ.js.map +1 -0
- package/dist/winning-ads-O3IMUGGO.js +84 -0
- package/dist/winning-ads-O3IMUGGO.js.map +1 -0
- package/dist/write-commands-DA6FIFAO.js +737 -0
- package/dist/write-commands-DA6FIFAO.js.map +1 -0
- package/dist/write-commands-EMN2WENA.js +1015 -0
- package/dist/write-commands-EMN2WENA.js.map +1 -0
- package/dist/write-commands-KTPISQRE.js +206 -0
- package/dist/write-commands-KTPISQRE.js.map +1 -0
- package/dist/write-commands-QBGIWU27.js +713 -0
- package/dist/write-commands-QBGIWU27.js.map +1 -0
- package/dist/x-BT3SNCTU.js +47 -0
- package/dist/x-BT3SNCTU.js.map +1 -0
- package/package.json +9 -2
- package/dist/chunk-CHJOTJTZ.js +0 -9989
- package/dist/chunk-CHJOTJTZ.js.map +0 -1
- package/dist/chunk-HJEMOSPH.js +0 -1292
- package/dist/chunk-HJEMOSPH.js.map +0 -1
- package/dist/chunk-MF7YA62W.js.map +0 -1
- package/dist/chunk-VLUGGVJL.js.map +0 -1
- package/dist/chunk-VZEDAFAR.js.map +0 -1
- package/dist/chunk-XHC4LMK4.js.map +0 -1
- package/dist/client-GR6YL3YX.js +0 -17
- package/dist/output-NMQXZF3Z.js +0 -18
- /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → client-EURRWXPW.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → connect-4YXFMXYX.js.map} +0 -0
- /package/dist/{shared-J7DQZ2ED.js.map → customers-7E4HBSEY.js.map} +0 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import {
|
|
2
|
+
mediaTagsCreateRequestSchema,
|
|
3
|
+
mediaTagsDeleteRequestSchema,
|
|
4
|
+
mediaTagsUpdateRequestSchema
|
|
5
|
+
} from "./chunk-O6XZIQXZ.js";
|
|
6
|
+
import {
|
|
7
|
+
ApiError,
|
|
8
|
+
apiGet,
|
|
9
|
+
apiPost
|
|
10
|
+
} from "./chunk-CUL3VB4L.js";
|
|
11
|
+
import {
|
|
12
|
+
registerSchema,
|
|
13
|
+
writeJson
|
|
14
|
+
} from "./chunk-MYTDK3AL.js";
|
|
15
|
+
|
|
16
|
+
// src/lib/tags-command.ts
|
|
17
|
+
import { defineCommand } from "citty";
|
|
18
|
+
var OUTPUT_ARG = {
|
|
19
|
+
output: { type: "string", description: "Output format: md|json", required: false, default: "md" }
|
|
20
|
+
};
|
|
21
|
+
var SHARED_POOL_HINT = "Custom tags are one pool shared by images, videos and testimonials \u2014 this change shows up in all three. Already applied: publishing or discarding this chat does not undo it.";
|
|
22
|
+
function fail(err) {
|
|
23
|
+
const code = err instanceof ApiError ? err.code : "INTERNAL_ERROR";
|
|
24
|
+
const message = err instanceof ApiError ? err.message : "Unexpected error";
|
|
25
|
+
writeJson({ ok: false, error: { code, message } });
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
function failInvalid(issue) {
|
|
29
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: issue?.message ?? "Invalid request" } });
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
function makeTagsCommand(command, label, endpoint) {
|
|
33
|
+
registerSchema({
|
|
34
|
+
command: `${command}.tags.list`,
|
|
35
|
+
description: `List the available ${label} tag taxonomy (built-in defaults + this company's custom tags).`,
|
|
36
|
+
args: OUTPUT_ARG
|
|
37
|
+
});
|
|
38
|
+
const listCommand = defineCommand({
|
|
39
|
+
meta: {
|
|
40
|
+
name: "list",
|
|
41
|
+
description: `List the available ${label} tag names (defaults + company custom tags). Use before filtering with --tags. Example: baker ${command} tags`
|
|
42
|
+
},
|
|
43
|
+
args: OUTPUT_ARG,
|
|
44
|
+
run: async ({ args }) => {
|
|
45
|
+
try {
|
|
46
|
+
const { markdown } = await apiGet(endpoint);
|
|
47
|
+
if (args.output === "json") {
|
|
48
|
+
writeJson({ ok: true, data: { markdown } });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
process.stdout.write(`${markdown.trimEnd()}
|
|
52
|
+
`);
|
|
53
|
+
} catch (err) {
|
|
54
|
+
const code = err instanceof ApiError ? err.code : "INTERNAL_ERROR";
|
|
55
|
+
const message = err instanceof ApiError ? err.message : "Unexpected error";
|
|
56
|
+
if (args.output === "json") {
|
|
57
|
+
writeJson({ ok: false, error: { code, message } });
|
|
58
|
+
} else {
|
|
59
|
+
process.stderr.write(`Error: ${message}
|
|
60
|
+
`);
|
|
61
|
+
}
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
const createArgs = {
|
|
67
|
+
name: { type: "positional", description: "Tag name (stored lowercased, spaces \u2192 hyphens)", required: true },
|
|
68
|
+
description: {
|
|
69
|
+
type: "string",
|
|
70
|
+
description: "What the tag means, so it gets applied consistently",
|
|
71
|
+
required: false
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
registerSchema({
|
|
75
|
+
command: `${command}.tags.create`,
|
|
76
|
+
description: "Create a custom media tag in the company's shared pool (images, videos and testimonials). Applies immediately. Use when no built-in or custom tag fits.",
|
|
77
|
+
args: {
|
|
78
|
+
name: { type: "string", description: "Tag name (stored lowercased, spaces \u2192 hyphens)", required: true },
|
|
79
|
+
description: createArgs.description
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const createCommand = defineCommand({
|
|
83
|
+
meta: {
|
|
84
|
+
name: "create",
|
|
85
|
+
description: `Create a custom tag (shared by images, videos and testimonials). Applies immediately.
|
|
86
|
+
|
|
87
|
+
Example: baker ${command} tags create "summer sale" --description "Assets for the summer sale campaign"`
|
|
88
|
+
},
|
|
89
|
+
args: createArgs,
|
|
90
|
+
run: async ({ args }) => {
|
|
91
|
+
const parsed = mediaTagsCreateRequestSchema.safeParse({
|
|
92
|
+
name: String(args.name ?? ""),
|
|
93
|
+
...args.description ? { description: String(args.description) } : {}
|
|
94
|
+
});
|
|
95
|
+
if (!parsed.success) failInvalid(parsed.error.issues[0]);
|
|
96
|
+
try {
|
|
97
|
+
const data = await apiPost("/api/media-tags/create", parsed.data);
|
|
98
|
+
writeJson({
|
|
99
|
+
ok: true,
|
|
100
|
+
data,
|
|
101
|
+
hints: [
|
|
102
|
+
SHARED_POOL_HINT,
|
|
103
|
+
`Use it as \`--tags ${data.name}\`.`,
|
|
104
|
+
...data.description ? [] : ["MISSING --description: add one with `tags update` so the tag is applied consistently."]
|
|
105
|
+
]
|
|
106
|
+
});
|
|
107
|
+
} catch (err) {
|
|
108
|
+
fail(err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
registerSchema({
|
|
113
|
+
command: `${command}.tags.update`,
|
|
114
|
+
description: "Change what a custom tag means (its description). Built-in tags cannot be changed. Applies immediately.",
|
|
115
|
+
args: {
|
|
116
|
+
slug: { type: "string", description: "Custom tag name, as `tags` lists it", required: true },
|
|
117
|
+
description: { type: "string", description: "New description", required: true }
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const updateCommand = defineCommand({
|
|
121
|
+
meta: {
|
|
122
|
+
name: "update",
|
|
123
|
+
description: `Change a custom tag's description. Built-in tags cannot be changed. Applies immediately.
|
|
124
|
+
|
|
125
|
+
Example: baker ${command} tags update summer-sale --description "Assets for the 2026 summer sale"`
|
|
126
|
+
},
|
|
127
|
+
args: {
|
|
128
|
+
slug: { type: "positional", description: "Custom tag name, as `tags` lists it", required: true },
|
|
129
|
+
description: { type: "string", description: "New description", required: true }
|
|
130
|
+
},
|
|
131
|
+
run: async ({ args }) => {
|
|
132
|
+
const parsed = mediaTagsUpdateRequestSchema.safeParse({
|
|
133
|
+
slug: String(args.slug ?? ""),
|
|
134
|
+
description: String(args.description ?? "")
|
|
135
|
+
});
|
|
136
|
+
if (!parsed.success) failInvalid(parsed.error.issues[0]);
|
|
137
|
+
try {
|
|
138
|
+
const data = await apiPost("/api/media-tags/update", parsed.data);
|
|
139
|
+
writeJson({ ok: true, data, hints: [SHARED_POOL_HINT] });
|
|
140
|
+
} catch (err) {
|
|
141
|
+
fail(err);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
registerSchema({
|
|
146
|
+
command: `${command}.tags.delete`,
|
|
147
|
+
description: "Delete a custom tag from the company's shared pool. Built-in tags cannot be deleted. Applies immediately. Confirm with the user first.",
|
|
148
|
+
args: { slug: { type: "string", description: "Custom tag name, as `tags` lists it", required: true } }
|
|
149
|
+
});
|
|
150
|
+
const deleteCommand = defineCommand({
|
|
151
|
+
meta: {
|
|
152
|
+
name: "delete",
|
|
153
|
+
description: `Delete a custom tag (shared by images, videos and testimonials). Built-in tags cannot be deleted. Applies immediately \u2014 confirm with the user first.
|
|
154
|
+
|
|
155
|
+
Example: baker ${command} tags delete summer-sale`
|
|
156
|
+
},
|
|
157
|
+
args: { slug: { type: "positional", description: "Custom tag name, as `tags` lists it", required: true } },
|
|
158
|
+
run: async ({ args }) => {
|
|
159
|
+
const parsed = mediaTagsDeleteRequestSchema.safeParse({ slug: String(args.slug ?? "") });
|
|
160
|
+
if (!parsed.success) failInvalid(parsed.error.issues[0]);
|
|
161
|
+
try {
|
|
162
|
+
const data = await apiPost("/api/media-tags/delete", parsed.data);
|
|
163
|
+
writeJson({ ok: true, data, hints: [SHARED_POOL_HINT] });
|
|
164
|
+
} catch (err) {
|
|
165
|
+
fail(err);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
return defineCommand({
|
|
170
|
+
meta: {
|
|
171
|
+
name: "tags",
|
|
172
|
+
description: `The ${label} tag taxonomy: built-in defaults plus the company's custom tags (one pool shared by images, videos and testimonials). Subcommands: list (default), create, update, delete.
|
|
173
|
+
|
|
174
|
+
Examples:
|
|
175
|
+
baker ${command} tags # list available tags
|
|
176
|
+
baker ${command} tags create "summer sale" --description "\u2026"
|
|
177
|
+
baker ${command} tags update summer-sale --description "\u2026"
|
|
178
|
+
baker ${command} tags delete summer-sale`
|
|
179
|
+
},
|
|
180
|
+
// Declared on the parent too: `default: "list"` dispatches the bare `tags --output json`
|
|
181
|
+
// form, and citty reads an undeclared flag's value as a subcommand name.
|
|
182
|
+
args: OUTPUT_ARG,
|
|
183
|
+
subCommands: {
|
|
184
|
+
list: listCommand,
|
|
185
|
+
create: createCommand,
|
|
186
|
+
update: updateCommand,
|
|
187
|
+
delete: deleteCommand
|
|
188
|
+
},
|
|
189
|
+
// `default`, never `run`: citty falls through to the parent's `run` after a subcommand.
|
|
190
|
+
default: "list"
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export {
|
|
195
|
+
makeTagsCommand
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=chunk-YQFM2P5W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/tags-command.ts"],"sourcesContent":["import type { MediaTagsCreateResponse, MediaTagsDeleteResponse, MediaTagsUpdateResponse } from \"@baker/api\";\nimport { mediaTagsCreateRequestSchema, mediaTagsDeleteRequestSchema, mediaTagsUpdateRequestSchema } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet, apiPost } from \"../client.ts\";\nimport { writeJson } from \"../output.ts\";\nimport { registerSchema } from \"../schemas.ts\";\n\nconst OUTPUT_ARG = {\n output: { type: \"string\", description: \"Output format: md|json\", required: false, default: \"md\" },\n} as const;\n\n/** The custom tags are one pool for the whole company, whichever family the agent reached them from. */\nconst SHARED_POOL_HINT =\n \"Custom tags are one pool shared by images, videos and testimonials — this change shows up in all three. Already applied: publishing or discarding this chat does not undo it.\";\n\nfunction fail(err: unknown): never {\n const code = err instanceof ApiError ? err.code : \"INTERNAL_ERROR\";\n const message = err instanceof ApiError ? err.message : \"Unexpected error\";\n writeJson({ ok: false, error: { code, message } });\n process.exit(1);\n}\n\nfunction failInvalid(issue: { message: string } | undefined): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message: issue?.message ?? \"Invalid request\" } });\n process.exit(1);\n}\n\n/**\n * Builds `baker <command> tags` for one media type: `list` (the default, so the\n * bare `baker images tags` keeps printing the taxonomy) plus `create`, `update`\n * and `delete` for the company's custom tags.\n *\n * `command` is the plural CLI noun used for the schema id and example\n * (`images` → `images.tags.list`); `label` is the singular noun used in prose.\n *\n * Errors from `list` in the default markdown mode are written to STDERR, not\n * stdout. It is inlined into the library skills via `!`baker images tags``, so\n * a JSON error blob on stdout would be silently injected into the agent's skill\n * context as if it were the tag list. `--output json` keeps the machine-readable\n * envelope on stdout for programmatic callers.\n */\nexport function makeTagsCommand(command: string, label: string, endpoint: string) {\n registerSchema({\n command: `${command}.tags.list`,\n description: `List the available ${label} tag taxonomy (built-in defaults + this company's custom tags).`,\n args: OUTPUT_ARG,\n });\n\n const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: `List the available ${label} tag names (defaults + company custom tags). Use before filtering with --tags. Example: baker ${command} tags`,\n },\n args: OUTPUT_ARG,\n run: async ({ args }) => {\n try {\n const { markdown } = await apiGet<{ markdown: string }>(endpoint);\n if (args.output === \"json\") {\n writeJson({ ok: true, data: { markdown } });\n return;\n }\n process.stdout.write(`${markdown.trimEnd()}\\n`);\n } catch (err) {\n const code = err instanceof ApiError ? err.code : \"INTERNAL_ERROR\";\n const message = err instanceof ApiError ? err.message : \"Unexpected error\";\n if (args.output === \"json\") {\n writeJson({ ok: false, error: { code, message } });\n } else {\n process.stderr.write(`Error: ${message}\\n`);\n }\n process.exit(1);\n }\n },\n });\n\n const createArgs = {\n name: { type: \"positional\", description: \"Tag name (stored lowercased, spaces → hyphens)\", required: true },\n description: {\n type: \"string\",\n description: \"What the tag means, so it gets applied consistently\",\n required: false,\n },\n } as const;\n\n registerSchema({\n command: `${command}.tags.create`,\n description:\n \"Create a custom media tag in the company's shared pool (images, videos and testimonials). Applies immediately. Use when no built-in or custom tag fits.\",\n args: {\n name: { type: \"string\", description: \"Tag name (stored lowercased, spaces → hyphens)\", required: true },\n description: createArgs.description,\n },\n });\n\n const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Create a custom tag (shared by images, videos and testimonials). Applies immediately.\\n\\nExample: baker ${command} tags create \"summer sale\" --description \"Assets for the summer sale campaign\"`,\n },\n args: createArgs,\n run: async ({ args }) => {\n const parsed = mediaTagsCreateRequestSchema.safeParse({\n name: String(args.name ?? \"\"),\n ...(args.description ? { description: String(args.description) } : {}),\n });\n if (!parsed.success) failInvalid(parsed.error.issues[0]);\n try {\n const data = await apiPost<MediaTagsCreateResponse>(\"/api/media-tags/create\", parsed.data);\n writeJson({\n ok: true,\n data,\n hints: [\n SHARED_POOL_HINT,\n `Use it as \\`--tags ${data.name}\\`.`,\n ...(data.description\n ? []\n : [\"MISSING --description: add one with `tags update` so the tag is applied consistently.\"]),\n ],\n });\n } catch (err) {\n fail(err);\n }\n },\n });\n\n registerSchema({\n command: `${command}.tags.update`,\n description:\n \"Change what a custom tag means (its description). Built-in tags cannot be changed. Applies immediately.\",\n args: {\n slug: { type: \"string\", description: \"Custom tag name, as `tags` lists it\", required: true },\n description: { type: \"string\", description: \"New description\", required: true },\n },\n });\n\n const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Change a custom tag's description. Built-in tags cannot be changed. Applies immediately.\\n\\nExample: baker ${command} tags update summer-sale --description \"Assets for the 2026 summer sale\"`,\n },\n args: {\n slug: { type: \"positional\", description: \"Custom tag name, as `tags` lists it\", required: true },\n description: { type: \"string\", description: \"New description\", required: true },\n },\n run: async ({ args }) => {\n const parsed = mediaTagsUpdateRequestSchema.safeParse({\n slug: String(args.slug ?? \"\"),\n description: String(args.description ?? \"\"),\n });\n if (!parsed.success) failInvalid(parsed.error.issues[0]);\n try {\n const data = await apiPost<MediaTagsUpdateResponse>(\"/api/media-tags/update\", parsed.data);\n writeJson({ ok: true, data, hints: [SHARED_POOL_HINT] });\n } catch (err) {\n fail(err);\n }\n },\n });\n\n registerSchema({\n command: `${command}.tags.delete`,\n description:\n \"Delete a custom tag from the company's shared pool. Built-in tags cannot be deleted. Applies immediately. Confirm with the user first.\",\n args: { slug: { type: \"string\", description: \"Custom tag name, as `tags` lists it\", required: true } },\n });\n\n const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: `Delete a custom tag (shared by images, videos and testimonials). Built-in tags cannot be deleted. Applies immediately — confirm with the user first.\\n\\nExample: baker ${command} tags delete summer-sale`,\n },\n args: { slug: { type: \"positional\", description: \"Custom tag name, as `tags` lists it\", required: true } },\n run: async ({ args }) => {\n const parsed = mediaTagsDeleteRequestSchema.safeParse({ slug: String(args.slug ?? \"\") });\n if (!parsed.success) failInvalid(parsed.error.issues[0]);\n try {\n const data = await apiPost<MediaTagsDeleteResponse>(\"/api/media-tags/delete\", parsed.data);\n writeJson({ ok: true, data, hints: [SHARED_POOL_HINT] });\n } catch (err) {\n fail(err);\n }\n },\n });\n\n return defineCommand({\n meta: {\n name: \"tags\",\n description: `The ${label} tag taxonomy: built-in defaults plus the company's custom tags (one pool shared by images, videos and testimonials). Subcommands: list (default), create, update, delete.\n\nExamples:\n baker ${command} tags # list available tags\n baker ${command} tags create \"summer sale\" --description \"…\"\n baker ${command} tags update summer-sale --description \"…\"\n baker ${command} tags delete summer-sale`,\n },\n // Declared on the parent too: `default: \"list\"` dispatches the bare `tags --output json`\n // form, and citty reads an undeclared flag's value as a subcommand name.\n args: OUTPUT_ARG,\n subCommands: {\n list: listCommand,\n create: createCommand,\n update: updateCommand,\n delete: deleteCommand,\n },\n // `default`, never `run`: citty falls through to the parent's `run` after a subcommand.\n default: \"list\",\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __glob = (map) => (path) => {
|
|
8
|
+
var fn = map[path];
|
|
9
|
+
if (fn) return fn();
|
|
10
|
+
throw new Error("Module not found in bundle: " + path);
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => function __init() {
|
|
13
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
14
|
+
};
|
|
15
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
16
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
27
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
28
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
29
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
30
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
31
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
32
|
+
mod
|
|
33
|
+
));
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
__glob,
|
|
37
|
+
__esm,
|
|
38
|
+
__commonJS,
|
|
39
|
+
__toESM
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=chunk-YQSBHWOI.js.map
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hintLines,
|
|
3
|
+
splitHints
|
|
4
|
+
} from "./chunk-D5FY4FAK.js";
|
|
5
|
+
import {
|
|
6
|
+
isNotConnectedError,
|
|
7
|
+
writeJsonEnvelope
|
|
8
|
+
} from "./chunk-EIGXX6KI.js";
|
|
9
|
+
import {
|
|
10
|
+
ApiError,
|
|
11
|
+
apiPost
|
|
12
|
+
} from "./chunk-CUL3VB4L.js";
|
|
13
|
+
import {
|
|
14
|
+
requireChatId,
|
|
15
|
+
resolveChatId
|
|
16
|
+
} from "./chunk-I4FTS5EE.js";
|
|
17
|
+
|
|
18
|
+
// src/commands/tag-manager/shared.ts
|
|
19
|
+
import { readFileSync } from "fs";
|
|
20
|
+
function failValidation(message) {
|
|
21
|
+
writeJsonEnvelope({ ok: false, error: { code: "VALIDATION_ERROR", message } });
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
function requireTarget(args, entity) {
|
|
25
|
+
const positional = Array.isArray(args._) ? args._[0] : void 0;
|
|
26
|
+
const target = args.id ?? args.target ?? positional;
|
|
27
|
+
if (typeof target !== "string" || target.length === 0) {
|
|
28
|
+
failValidation(`pass the ${entity} id or path as the positional argument`);
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
}
|
|
32
|
+
function loadJsonArg(args, flag = "json") {
|
|
33
|
+
const inline = args[flag];
|
|
34
|
+
const file = args.file;
|
|
35
|
+
const raw = typeof file === "string" && file.length > 0 ? readFileSync(file, "utf8") : typeof inline === "string" && inline.length > 0 ? inline : void 0;
|
|
36
|
+
if (raw === void 0) {
|
|
37
|
+
failValidation(`pass --${flag} with inline JSON or --file with a path to a JSON file`);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const parsed = JSON.parse(raw);
|
|
41
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
42
|
+
failValidation(`--${flag} must be a JSON object`);
|
|
43
|
+
}
|
|
44
|
+
return parsed;
|
|
45
|
+
} catch {
|
|
46
|
+
return failValidation(`--${flag} is not valid JSON`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
var RETRYABLE_CODES = /* @__PURE__ */ new Set(["RATE_LIMITED", "UNAVAILABLE", "INTERNAL_ERROR", "NETWORK_ERROR", "TIMEOUT"]);
|
|
50
|
+
function handleError(err) {
|
|
51
|
+
if (err instanceof ApiError) {
|
|
52
|
+
writeJsonEnvelope({
|
|
53
|
+
ok: false,
|
|
54
|
+
error: {
|
|
55
|
+
code: err.code,
|
|
56
|
+
message: err.message,
|
|
57
|
+
...err.code === "UNAUTHORIZED" || err.code === "FORBIDDEN" && isNotConnectedError(err.code, err.message) ? {
|
|
58
|
+
fix: {
|
|
59
|
+
action: "request_connection",
|
|
60
|
+
explanation: 'Tag Manager is not connected for this company yet, or no container has been picked. Don\'t send the user to Settings \u2014 call the `request_connection` tool with { platform: "google-tag-manager", reason } and they connect and pick their containers (they can pick more than one) from inside the chat. `request_tag_input` is not the route: that form manages the container snippet on the site, not what runs inside the container, and it cannot pick a container. If the `request_connection` call fails, say so plainly and give the exact route: dashboard \u2192 Brain \u2192 Integrations \u2192 Platforms \u2192 Google Tag Manager, where they also pick the container. Then carry on with the rest of the task.'
|
|
61
|
+
}
|
|
62
|
+
} : {},
|
|
63
|
+
retryable: RETRYABLE_CODES.has(err.code)
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
writeJsonEnvelope({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error", retryable: true } });
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
var TAG_MANAGER_TIMEOUT_MS = 18e4;
|
|
72
|
+
var STAGE_HINTS = [
|
|
73
|
+
"Staged only \u2014 nothing has changed in Tag Manager yet. These apply when the chat completes, in dependency order, and close as a Tag Manager version that is then published, so they do go live on the user's site. Say the changes are ready and go live when they publish \u2014 not that they are live already."
|
|
74
|
+
];
|
|
75
|
+
async function stageOp(op) {
|
|
76
|
+
const chatId = requireChatId();
|
|
77
|
+
try {
|
|
78
|
+
const { data, hints } = splitHints(
|
|
79
|
+
await apiPost(
|
|
80
|
+
"/api/tag-manager/draft/stage",
|
|
81
|
+
{ chatId, op },
|
|
82
|
+
{ timeoutMs: TAG_MANAGER_TIMEOUT_MS }
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
writeJsonEnvelope({ ok: true, data, hints: [...hints, ...STAGE_HINTS] });
|
|
86
|
+
} catch (err) {
|
|
87
|
+
handleError(err);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function draftAction(path, body, chat) {
|
|
91
|
+
const chatId = resolveChatId(chat);
|
|
92
|
+
try {
|
|
93
|
+
const { data, hints } = splitHints(
|
|
94
|
+
await apiPost(path, { chatId, ...body }, { timeoutMs: TAG_MANAGER_TIMEOUT_MS })
|
|
95
|
+
);
|
|
96
|
+
writeJsonEnvelope({ ok: true, data, ...hints.length > 0 ? { hints } : {} });
|
|
97
|
+
return data;
|
|
98
|
+
} catch (err) {
|
|
99
|
+
handleError(err);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function renderDraft(response) {
|
|
103
|
+
if (response.count === 0) {
|
|
104
|
+
return "No Tag Manager changes staged on this chat.";
|
|
105
|
+
}
|
|
106
|
+
const lines = [
|
|
107
|
+
`${response.count} staged Tag Manager change(s)`,
|
|
108
|
+
...response.ops.flatMap((op) => {
|
|
109
|
+
const status = op.result ? ` [${op.result.status}]` : "";
|
|
110
|
+
return [` ${op.ref} ${op.summary}${status}`, ...(op.warnings ?? []).map((warning) => ` \u26A0 ${warning}`)];
|
|
111
|
+
})
|
|
112
|
+
];
|
|
113
|
+
if (response.versionId) {
|
|
114
|
+
lines.push(
|
|
115
|
+
"",
|
|
116
|
+
response.published ? `Applied and published as Tag Manager version ${response.versionId}. These changes are live on the site.` : `Applied into Tag Manager version ${response.versionId}. It is NOT published \u2014 publish it in Tag Manager to go live.`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
if (response.compilerError) {
|
|
120
|
+
lines.push("", `Tag Manager reported a problem building the version: ${response.compilerError}`);
|
|
121
|
+
}
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
124
|
+
async function draftList(json, chat) {
|
|
125
|
+
const chatId = resolveChatId(chat);
|
|
126
|
+
try {
|
|
127
|
+
const response = await apiPost("/api/tag-manager/draft", { chatId });
|
|
128
|
+
const { data, hints } = splitHints(response);
|
|
129
|
+
if (json) {
|
|
130
|
+
writeJsonEnvelope({ ok: true, data, ...hints.length > 0 ? { hints } : {} });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
process.stdout.write(`${renderDraft(data)}${hintLines(response)}
|
|
134
|
+
`);
|
|
135
|
+
} catch (err) {
|
|
136
|
+
handleError(err);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export {
|
|
141
|
+
requireTarget,
|
|
142
|
+
loadJsonArg,
|
|
143
|
+
handleError,
|
|
144
|
+
TAG_MANAGER_TIMEOUT_MS,
|
|
145
|
+
stageOp,
|
|
146
|
+
draftAction,
|
|
147
|
+
draftList
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=chunk-YTF3IVMF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/tag-manager/shared.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type {\n TagManagerDraftListResponse,\n TagManagerDraftRemoveResponse,\n TagManagerDraftShowResponse,\n TagManagerDraftStageResponse,\n} from \"@baker/api/tag-manager\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../env.ts\";\nimport { isNotConnectedError } from \"../../error-handler.ts\";\nimport { hintLines, splitHints } from \"../ads/hints.ts\";\nimport { writeJsonEnvelope } from \"../ads/output.ts\";\n\n/**\n * Shared plumbing for the staged Tag Manager commands. Writes NEVER hit the\n * Tag Manager API directly: every command stages an op against this chat's\n * draft, and the whole draft applies when the chat is published — into the\n * container's working workspace, in dependency order, closing with a container\n * version that is published when every change applies cleanly.\n */\n\nexport function failValidation(message: string): never {\n writeJsonEnvelope({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\nexport function requireTarget(args: Record<string, unknown>, entity: string): string {\n const positional = Array.isArray(args._) ? args._[0] : undefined;\n const target = args.id ?? args.target ?? positional;\n if (typeof target !== \"string\" || target.length === 0) {\n failValidation(`pass the ${entity} id or path as the positional argument`);\n }\n return target;\n}\n\n/** `--json '<inline>'` or `--file <path>` → a parsed object. */\nexport function loadJsonArg(args: Record<string, unknown>, flag: \"patch\" | \"json\" = \"json\"): Record<string, unknown> {\n const inline = args[flag];\n const file = args.file;\n const raw =\n typeof file === \"string\" && file.length > 0\n ? readFileSync(file, \"utf8\")\n : typeof inline === \"string\" && inline.length > 0\n ? inline\n : undefined;\n if (raw === undefined) {\n failValidation(`pass --${flag} with inline JSON or --file with a path to a JSON file`);\n }\n try {\n const parsed: unknown = JSON.parse(raw);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n failValidation(`--${flag} must be a JSON object`);\n }\n return parsed as Record<string, unknown>;\n } catch {\n return failValidation(`--${flag} is not valid JSON`);\n }\n}\n\n/**\n * Transient by nature — worth one more go. Saying so is the difference between\n * the agent retrying a blip and abandoning a multi-step job over one. Every\n * other code is a real answer that a second call returns again.\n */\nconst RETRYABLE_CODES = new Set([\"RATE_LIMITED\", \"UNAVAILABLE\", \"INTERNAL_ERROR\", \"NETWORK_ERROR\", \"TIMEOUT\"]);\n\n/**\n * The one error shape for the whole family.\n *\n * Only the 403s raised while resolving the company's container mean \"not\n * connected\", which is why the fix is keyed to the message and not just the\n * status: other 403s are real permission refusals a reconnect cannot fix.\n * `NOT_FOUND` deliberately does NOT trigger the connect form either — it is also\n * what a missing tag returns, and asking the user to reconnect a working\n * connection because a tag id was wrong wastes their time and fixes nothing.\n */\nexport function handleError(err: unknown): never {\n if (err instanceof ApiError) {\n writeJsonEnvelope({\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n ...(err.code === \"UNAUTHORIZED\" || (err.code === \"FORBIDDEN\" && isNotConnectedError(err.code, err.message))\n ? {\n fix: {\n action: \"request_connection\",\n explanation:\n \"Tag Manager is not connected for this company yet, or no container has been picked. Don't send \" +\n \"the user to Settings — call the `request_connection` tool with \" +\n '{ platform: \"google-tag-manager\", reason } and they connect and pick their containers (they can ' +\n \"pick more than one) from inside the chat. `request_tag_input` is not the route: that form \" +\n \"manages the container snippet on the \" +\n \"site, not what runs inside the container, and it cannot pick a container. If the \" +\n \"`request_connection` call fails, say so plainly and give the exact route: dashboard → Brain → \" +\n \"Integrations → Platforms → Google Tag Manager, where they also pick the container. Then carry on \" +\n \"with the rest of the task.\",\n },\n }\n : {}),\n retryable: RETRYABLE_CODES.has(err.code),\n },\n });\n process.exit(1);\n }\n writeJsonEnvelope({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\", retryable: true } });\n process.exit(1);\n}\n\n/**\n * Tag Manager allows Baker a few requests a second across every company, so a\n * call that reads the container can queue behind another company's publish. It\n * still finishes on the server, so giving up early only invites a repeat.\n */\nexport const TAG_MANAGER_TIMEOUT_MS = 180_000;\n\n/** Nudges returned after a stage so the agent's next step is obvious. */\nconst STAGE_HINTS = [\n \"Staged only — nothing has changed in Tag Manager yet. These apply when the chat completes, in dependency \" +\n \"order, and close as a Tag Manager version that is then published, so they do go live on the user's site. \" +\n \"Say the changes are ready and go live when they publish — not that they are live already.\",\n];\n\nexport async function stageOp(op: Record<string, unknown>): Promise<void> {\n const chatId = requireChatId();\n try {\n const { data, hints } = splitHints(\n await apiPost<TagManagerDraftStageResponse>(\n \"/api/tag-manager/draft/stage\",\n { chatId, op },\n { timeoutMs: TAG_MANAGER_TIMEOUT_MS },\n ),\n );\n writeJsonEnvelope({ ok: true, data, hints: [...hints, ...STAGE_HINTS] });\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function draftAction(\n path: string,\n body: Record<string, unknown>,\n chat?: unknown,\n): Promise<TagManagerDraftRemoveResponse | TagManagerDraftShowResponse | Record<string, unknown>> {\n const chatId = resolveChatId(chat);\n try {\n const { data, hints } = splitHints(\n await apiPost<Record<string, unknown>>(path, { chatId, ...body }, { timeoutMs: TAG_MANAGER_TIMEOUT_MS }),\n );\n writeJsonEnvelope({ ok: true, data, ...(hints.length > 0 ? { hints } : {}) });\n return data;\n } catch (err) {\n handleError(err);\n }\n}\n\n/** A compact, readable view of everything staged on this chat. */\nexport function renderDraft(response: TagManagerDraftListResponse): string {\n if (response.count === 0) {\n return \"No Tag Manager changes staged on this chat.\";\n }\n const lines = [\n `${response.count} staged Tag Manager change(s)`,\n ...response.ops.flatMap((op) => {\n const status = op.result ? ` [${op.result.status}]` : \"\";\n return [` ${op.ref} ${op.summary}${status}`, ...(op.warnings ?? []).map((warning) => ` ⚠ ${warning}`)];\n }),\n ];\n if (response.versionId) {\n lines.push(\n \"\",\n response.published\n ? `Applied and published as Tag Manager version ${response.versionId}. These changes are live on the site.`\n : `Applied into Tag Manager version ${response.versionId}. It is NOT published — publish it in Tag Manager to go live.`,\n );\n }\n if (response.compilerError) {\n lines.push(\"\", `Tag Manager reported a problem building the version: ${response.compilerError}`);\n }\n return lines.join(\"\\n\");\n}\n\nexport async function draftList(json: boolean, chat?: unknown): Promise<void> {\n const chatId = resolveChatId(chat);\n try {\n const response = await apiPost<TagManagerDraftListResponse>(\"/api/tag-manager/draft\", { chatId });\n const { data, hints } = splitHints(response);\n if (json) {\n writeJsonEnvelope({ ok: true, data, ...(hints.length > 0 ? { hints } : {}) });\n return;\n }\n process.stdout.write(`${renderDraft(data)}${hintLines(response)}\\n`);\n } catch (err) {\n handleError(err);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// src/commands/landing/import-graph.ts
|
|
2
|
+
import { readdir, readFile, stat } from "fs/promises";
|
|
3
|
+
import path from "path";
|
|
4
|
+
var SOURCE_EXT = /\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte)$/;
|
|
5
|
+
var RESOLVE_CANDIDATES = [
|
|
6
|
+
"",
|
|
7
|
+
".astro",
|
|
8
|
+
".ts",
|
|
9
|
+
".tsx",
|
|
10
|
+
".js",
|
|
11
|
+
".jsx",
|
|
12
|
+
".mjs",
|
|
13
|
+
".cjs",
|
|
14
|
+
"/index.astro",
|
|
15
|
+
"/index.ts",
|
|
16
|
+
"/index.js"
|
|
17
|
+
];
|
|
18
|
+
var IMPORT_RE = /(?<![A-Za-z0-9_$])(?:import|export)\s*(?:[\s\S]*?\bfrom\s*)?["']([^"']+)["']/g;
|
|
19
|
+
var DYNAMIC_IMPORT_RE = /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g;
|
|
20
|
+
async function isFile(p) {
|
|
21
|
+
try {
|
|
22
|
+
return (await stat(p)).isFile();
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function walkFiles(dir) {
|
|
28
|
+
let entries;
|
|
29
|
+
try {
|
|
30
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
31
|
+
} catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const out = [];
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
const full = path.join(dir, entry.name);
|
|
37
|
+
if (entry.isDirectory()) {
|
|
38
|
+
if (entry.name === "node_modules" || entry.name === "dist") continue;
|
|
39
|
+
out.push(...await walkFiles(full));
|
|
40
|
+
} else if (SOURCE_EXT.test(entry.name)) {
|
|
41
|
+
out.push(full);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
async function resolveSpecifier(specifier, fromFile, root) {
|
|
47
|
+
const bare = specifier.split("?")[0] ?? "";
|
|
48
|
+
if (bare.includes("*")) return null;
|
|
49
|
+
let base;
|
|
50
|
+
if (bare.startsWith("/")) base = path.join(root, bare.slice(1));
|
|
51
|
+
else if (bare.startsWith(".")) base = path.resolve(path.dirname(fromFile), bare);
|
|
52
|
+
else return null;
|
|
53
|
+
for (const suffix of RESOLVE_CANDIDATES) {
|
|
54
|
+
const candidate = base + suffix;
|
|
55
|
+
if (SOURCE_EXT.test(candidate) && await isFile(candidate)) return candidate;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
async function importedFiles(text, file, root) {
|
|
60
|
+
const out = [];
|
|
61
|
+
for (const re of [IMPORT_RE, DYNAMIC_IMPORT_RE]) {
|
|
62
|
+
for (const match of text.matchAll(re)) {
|
|
63
|
+
const spec = match[1];
|
|
64
|
+
if (spec === void 0) continue;
|
|
65
|
+
const target = await resolveSpecifier(spec, file, root);
|
|
66
|
+
if (target !== null) out.push(target);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
async function landingGraphFiles(root, slug) {
|
|
72
|
+
const seen = /* @__PURE__ */ new Set();
|
|
73
|
+
const queue = await walkFiles(path.join(root, "src/pages", slug));
|
|
74
|
+
while (queue.length > 0) {
|
|
75
|
+
const file = queue.pop();
|
|
76
|
+
if (file === void 0 || seen.has(file)) continue;
|
|
77
|
+
let text;
|
|
78
|
+
try {
|
|
79
|
+
text = await readFile(file, "utf8");
|
|
80
|
+
} catch {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
seen.add(file);
|
|
84
|
+
for (const target of await importedFiles(text, file, root)) {
|
|
85
|
+
if (!seen.has(target)) queue.push(target);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return new Set([...seen].map((abs) => path.relative(root, abs).split(path.sep).join("/")));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export {
|
|
92
|
+
landingGraphFiles
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=chunk-Z3ENMCFE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/landing/import-graph.ts"],"sourcesContent":["import type { Dirent } from \"node:fs\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/**\n * Which source files does a landing actually pull in?\n *\n * Pages share components since A/B tests shipped: a variant borrows the\n * control's sections and forks only the one under test. So a landing's source is\n * no longer \"this folder\" — the critic has to read the sections it renders\n * wherever they live, and the freshness fingerprint has to cover them or an edit\n * to a shared section leaves the borrowing page's sha unchanged and the quality\n * gate passes a page it never scored.\n *\n * MIRROR OF `apps/scaffold-template/__tooling__/checks/sdk/landing-import-graph.mjs`.\n * Neither can import the other — the CLI ships as a binary, the scaffold ships as\n * files — so they are two implementations of one rule, and\n * `scripts/__tests__/landing-source-version-parity.test.ts` runs both over one\n * fixture tree and fails when they disagree. Change one, change the other, and\n * let that test say whether you got it right.\n */\n\n/**\n * Files worth opening: source that ends up in the build. Gates both the\n * directory seed and every import target, so a landing that imports\n * `./_images/hero.png` never gets a binary read as UTF-8.\n */\nconst SOURCE_EXT = /\\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte)$/;\n\n/** Extension guesses for an extensionless specifier, in resolution order. */\nconst RESOLVE_CANDIDATES = [\n \"\",\n \".astro\",\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \"/index.astro\",\n \"/index.ts\",\n \"/index.js\",\n];\n\n/**\n * Static and dynamic import specifiers. Both boundaries are lookarounds rather\n * than character classes, because an inlined `<script>import{a}from\"./x\"</script>`\n * has no whitespace anywhere.\n */\nconst IMPORT_RE = /(?<![A-Za-z0-9_$])(?:import|export)\\s*(?:[\\s\\S]*?\\bfrom\\s*)?[\"']([^\"']+)[\"']/g;\nconst DYNAMIC_IMPORT_RE = /\\bimport\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\nasync function isFile(p: string): Promise<boolean> {\n try {\n return (await stat(p)).isFile();\n } catch {\n return false;\n }\n}\n\n/** Every source file under `dir`, recursively. */\nasync function walkFiles(dir: string): Promise<string[]> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const out: string[] = [];\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (entry.name === \"node_modules\" || entry.name === \"dist\") continue;\n out.push(...(await walkFiles(full)));\n } else if (SOURCE_EXT.test(entry.name)) {\n out.push(full);\n }\n }\n return out;\n}\n\n/** Resolve a relative or root-absolute specifier to a source file, else null. */\nasync function resolveSpecifier(specifier: string, fromFile: string, root: string): Promise<string | null> {\n // Vite resolves a leading `/` from the project root; everything else that is\n // not relative is a bare package specifier. A glob has no single target.\n const bare = specifier.split(\"?\")[0] ?? \"\";\n if (bare.includes(\"*\")) return null;\n\n let base: string;\n if (bare.startsWith(\"/\")) base = path.join(root, bare.slice(1));\n else if (bare.startsWith(\".\")) base = path.resolve(path.dirname(fromFile), bare);\n else return null;\n\n for (const suffix of RESOLVE_CANDIDATES) {\n const candidate = base + suffix;\n if (SOURCE_EXT.test(candidate) && (await isFile(candidate))) return candidate;\n }\n return null;\n}\n\n/**\n * Every source file one landing pulls in, transitively, as repo-relative POSIX\n * paths.\n *\n * Seeded with the whole `src/pages/<slug>` directory rather than just\n * `index.astro`: co-located `_components/**` are imported from markup the\n * regexes do not always see.\n */\n/** Every source file `file`'s own text imports, resolved to absolute paths. */\nasync function importedFiles(text: string, file: string, root: string): Promise<string[]> {\n const out: string[] = [];\n for (const re of [IMPORT_RE, DYNAMIC_IMPORT_RE]) {\n // `matchAll` clones the regex, so a shared global one carries no\n // `lastIndex` between files.\n for (const match of text.matchAll(re)) {\n const spec = match[1];\n if (spec === undefined) continue;\n const target = await resolveSpecifier(spec, file, root);\n if (target !== null) out.push(target);\n }\n }\n return out;\n}\n\nexport async function landingGraphFiles(root: string, slug: string): Promise<Set<string>> {\n const seen = new Set<string>();\n const queue = await walkFiles(path.join(root, \"src/pages\", slug));\n\n while (queue.length > 0) {\n const file = queue.pop();\n if (file === undefined || seen.has(file)) continue;\n\n let text: string;\n try {\n text = await readFile(file, \"utf8\");\n } catch {\n continue;\n }\n seen.add(file);\n\n for (const target of await importedFiles(text, file, root)) {\n if (!seen.has(target)) queue.push(target);\n }\n }\n\n return new Set([...seen].map((abs) => path.relative(root, abs).split(path.sep).join(\"/\")));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError
|
|
3
|
+
} from "./chunk-CUL3VB4L.js";
|
|
4
|
+
import {
|
|
5
|
+
writeJson
|
|
6
|
+
} from "./chunk-MYTDK3AL.js";
|
|
7
|
+
|
|
8
|
+
// src/commands/landing/inspiration/shared.ts
|
|
9
|
+
var INSPIRATION_HINTS = {
|
|
10
|
+
adapt: "Reference only. Re-express this in the client's BRAND.md palette, type and imagery register. Reusing a headline, subhead or CTA verbatim is a Tier 0 message-match failure (references/gotchas.md).",
|
|
11
|
+
structureNotCopy: "Take the structural decision, not the furniture: what the eye hits first, the grid ratio, what was deliberately left out. Your copy must come from the client's own offer."
|
|
12
|
+
};
|
|
13
|
+
function favoritesScopeHints(health, resultCount) {
|
|
14
|
+
if (!health) return [];
|
|
15
|
+
const hints = [];
|
|
16
|
+
if (health.savedPages === 0) {
|
|
17
|
+
hints.push(
|
|
18
|
+
"This company hasn't saved any reference pages yet, so there is no taste profile to search \u2014 an empty result here says nothing about the library. Search the whole shared library with --scope all, or save a page the client admires with `baker landing inspiration add <url>`."
|
|
19
|
+
);
|
|
20
|
+
return hints;
|
|
21
|
+
}
|
|
22
|
+
if (health.failedPages > 0) {
|
|
23
|
+
const retryable = health.failedExamples.filter((example) => example.retryable).map((example) => example.url);
|
|
24
|
+
const permanent = health.failedExamples.filter((example) => !example.retryable).map((example) => example.url);
|
|
25
|
+
hints.push(
|
|
26
|
+
`${health.failedPages} of this company's ${health.savedPages} saved pages could not be read, so they hold no sections \u2014 only ${health.usablePages} are usable, which is why this result is thin. Search the whole library with --scope all.`
|
|
27
|
+
);
|
|
28
|
+
if (retryable.length > 0) {
|
|
29
|
+
hints.push(
|
|
30
|
+
`Worth another go: ${retryable.join(", ")} \u2014 run \`baker landing inspiration add <url>\` on one of them to study it again.`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
if (permanent.length > 0) {
|
|
34
|
+
hints.push(`Not worth retrying \u2014 these sites refuse automated readers: ${permanent.join(", ")}.`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (health.studyingPages > 0) {
|
|
38
|
+
hints.push(
|
|
39
|
+
`${health.studyingPages} saved ${health.studyingPages === 1 ? "page is" : "pages are"} still being studied and will be searchable in a few minutes. Carry on; do not wait on them.`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
if (resultCount === 0 && health.failedPages === 0 && health.studyingPages === 0) {
|
|
43
|
+
hints.push(
|
|
44
|
+
`Nothing in this company's ${health.usablePages} readable saved pages matches. The saved set is healthy, so this is the query, not the library \u2014 loosen the filters or search everything with --scope all.`
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
return hints;
|
|
48
|
+
}
|
|
49
|
+
function fidelityHint(fidelity) {
|
|
50
|
+
if (fidelity == null) return null;
|
|
51
|
+
if (fidelity >= 0.9) return null;
|
|
52
|
+
if (fidelity >= 0.75) {
|
|
53
|
+
return `Reproduction fidelity ${fidelity.toFixed(2)} \u2014 the markup is close but not exact. Trust the screenshot over the code.`;
|
|
54
|
+
}
|
|
55
|
+
return `Reproduction fidelity ${fidelity.toFixed(2)} \u2014 this section is scroll- or JS-driven and the extracted markup does NOT render like the original. Use the screenshot and the notes; treat the code as a hint only.`;
|
|
56
|
+
}
|
|
57
|
+
var STALE_COPY_AFTER_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
58
|
+
function staleCopyHint(studiedAt, filedUrl, now = Date.now()) {
|
|
59
|
+
if (!studiedAt || now - studiedAt < STALE_COPY_AFTER_MS) return null;
|
|
60
|
+
const date = new Date(studiedAt).toLocaleDateString("en-US", { month: "short", day: "numeric", timeZone: "UTC" });
|
|
61
|
+
return `This copy of the page was read on ${date}. If the user says the live page looks different, run: baker landing inspiration add ${filedUrl} --refresh`;
|
|
62
|
+
}
|
|
63
|
+
function reportError(error) {
|
|
64
|
+
if (error instanceof ApiError) {
|
|
65
|
+
writeJson({ ok: false, error: { code: error.code, message: error.message } });
|
|
66
|
+
} else {
|
|
67
|
+
writeJson({
|
|
68
|
+
ok: false,
|
|
69
|
+
error: { code: "UNKNOWN", message: error instanceof Error ? error.message : String(error) }
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
function splitList(value) {
|
|
75
|
+
if (!value) return void 0;
|
|
76
|
+
const parts = value.split(",").map((part) => part.trim()).filter(Boolean);
|
|
77
|
+
return parts.length > 0 ? parts : void 0;
|
|
78
|
+
}
|
|
79
|
+
function parseNumber(value) {
|
|
80
|
+
if (value === void 0 || value === "") return void 0;
|
|
81
|
+
const parsed = Number(value);
|
|
82
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
INSPIRATION_HINTS,
|
|
87
|
+
favoritesScopeHints,
|
|
88
|
+
fidelityHint,
|
|
89
|
+
staleCopyHint,
|
|
90
|
+
reportError,
|
|
91
|
+
splitList,
|
|
92
|
+
parseNumber
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=chunk-Z7MWSXLG.js.map
|