@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
debugLogSetting
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-I4FTS5EE.js";
|
|
4
4
|
|
|
5
5
|
// src/debugLog.ts
|
|
6
6
|
import { appendFileSync, mkdirSync, renameSync, statSync } from "fs";
|
|
@@ -12,10 +12,10 @@ var MAX_BYTES = 64 * 1024 * 1024;
|
|
|
12
12
|
var REDACTIONS = [
|
|
13
13
|
[/Bearer\s+[A-Za-z0-9._-]+/g, "Bearer [redacted]"],
|
|
14
14
|
// Authorization headers
|
|
15
|
-
//
|
|
16
|
-
// the literal `bk_`, so the company-key rule matched no part of the
|
|
17
|
-
//
|
|
18
|
-
[/\b(
|
|
15
|
+
// Every prefix, captured rather than listed thrice: `bkr_` and `bkv_` do not
|
|
16
|
+
// contain the literal `bk_`, so the company-key rule matched no part of the
|
|
17
|
+
// read-only credentials a Session review or a published report runs with.
|
|
18
|
+
[/\b(bk[rv]?)_[A-Za-z0-9]+/g, "$1_[redacted]"],
|
|
19
19
|
// Baker API keys
|
|
20
20
|
[/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, "[redacted-jwt]"],
|
|
21
21
|
// JWTs / id tokens
|
|
@@ -33,6 +33,45 @@ function redactSecrets(input) {
|
|
|
33
33
|
}
|
|
34
34
|
return out;
|
|
35
35
|
}
|
|
36
|
+
var CREDENTIAL_VALUE = "[credential value]";
|
|
37
|
+
var CREDENTIAL_PUT_PATH = "/api/credentials/put";
|
|
38
|
+
function withoutCredentialValue(url, body) {
|
|
39
|
+
let path;
|
|
40
|
+
try {
|
|
41
|
+
path = new URL(url).pathname;
|
|
42
|
+
} catch {
|
|
43
|
+
path = url;
|
|
44
|
+
}
|
|
45
|
+
if (path !== CREDENTIAL_PUT_PATH || body === null || typeof body !== "object" || !("value" in body)) {
|
|
46
|
+
return body;
|
|
47
|
+
}
|
|
48
|
+
return { ...body, value: CREDENTIAL_VALUE };
|
|
49
|
+
}
|
|
50
|
+
var PUT_FLAGS_WITH_VALUES = /* @__PURE__ */ new Set(["--host", "--label"]);
|
|
51
|
+
function argvWithoutCredentialValue(argv) {
|
|
52
|
+
if (argv[0] !== "credentials" || argv[1] !== "put") {
|
|
53
|
+
return argv;
|
|
54
|
+
}
|
|
55
|
+
let nameSeen = false;
|
|
56
|
+
let keepNext = false;
|
|
57
|
+
let redactNext = false;
|
|
58
|
+
return argv.map((arg, index) => {
|
|
59
|
+
if (index < 2) return arg;
|
|
60
|
+
if (keepNext || redactNext) {
|
|
61
|
+
const kept = keepNext ? arg : CREDENTIAL_VALUE;
|
|
62
|
+
keepNext = false;
|
|
63
|
+
redactNext = false;
|
|
64
|
+
return kept;
|
|
65
|
+
}
|
|
66
|
+
if (arg.startsWith("--value=")) return `--value=${CREDENTIAL_VALUE}`;
|
|
67
|
+
redactNext = arg === "--value";
|
|
68
|
+
keepNext = PUT_FLAGS_WITH_VALUES.has(arg);
|
|
69
|
+
if (arg.startsWith("-")) return arg;
|
|
70
|
+
const isName = !nameSeen;
|
|
71
|
+
nameSeen = true;
|
|
72
|
+
return isName ? arg : CREDENTIAL_VALUE;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
36
75
|
function resolveTarget() {
|
|
37
76
|
const raw = debugLogSetting();
|
|
38
77
|
if (!raw) {
|
|
@@ -98,7 +137,7 @@ function errorToPlain(err) {
|
|
|
98
137
|
var invocationStartedAt;
|
|
99
138
|
function logInvocation(argv) {
|
|
100
139
|
invocationStartedAt = Date.now();
|
|
101
|
-
append({ kind: "invocation", argv, cwd: process.cwd() });
|
|
140
|
+
append({ kind: "invocation", argv: argvWithoutCredentialValue(argv), cwd: process.cwd() });
|
|
102
141
|
}
|
|
103
142
|
function logExit(code) {
|
|
104
143
|
append({
|
|
@@ -127,7 +166,7 @@ function debugLogHttp(entry) {
|
|
|
127
166
|
method: entry.method,
|
|
128
167
|
url: entry.url,
|
|
129
168
|
durationMs: entry.durationMs,
|
|
130
|
-
request: entry.requestBody,
|
|
169
|
+
request: withoutCredentialValue(entry.url, entry.requestBody),
|
|
131
170
|
status: entry.status,
|
|
132
171
|
ok: entry.ok,
|
|
133
172
|
response: entry.responseBody,
|
|
@@ -173,4 +212,4 @@ export {
|
|
|
173
212
|
readBodyForLog,
|
|
174
213
|
installStreamTaps
|
|
175
214
|
};
|
|
176
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-6YYSUISH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/debugLog.ts"],"sourcesContent":["// Full-fidelity debug capture for the whole CLI.\n//\n// Set BAKER_DEBUG_LOG to turn it on:\n// BAKER_DEBUG_LOG=1 -> appends to ./baker-cli-debug.jsonl\n// BAKER_DEBUG_LOG=/tmp/baker.jsonl -> appends to that file\n// BAKER_DEBUG_LOG=0|false|off|no -> disabled (same as unset)\n//\n// When enabled, every HTTP request/response (both the REST client and the\n// canvas engine client), every byte written to stdout/stderr, and the command\n// invocation are appended as JSONL entries. Known secret shapes are redacted\n// before anything is written (best-effort — see redactSecrets). Logging is\n// always fail-open: a logging error is swallowed so it can never break a\n// command. The file rotates once past MAX_BYTES so an always-on capture cannot\n// fill the disk.\n\nimport { appendFileSync, mkdirSync, renameSync, statSync } from \"node:fs\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport { debugLogSetting } from \"./env.ts\";\n\nconst DEFAULT_FILE = \"baker-cli-debug.jsonl\";\nconst BOOLEAN_ON = new Set([\"1\", \"true\", \"on\", \"yes\"]);\nconst BOOLEAN_OFF = new Set([\"0\", \"false\", \"off\", \"no\"]);\n\n// Rotate once the active file passes this size (one older generation, `<file>.1`,\n// is kept). Bounds growth for the always-on sandbox capture without a per-write stat.\nconst MAX_BYTES = 64 * 1024 * 1024;\n\n// Best-effort redaction. Response/request bodies are stored as escaped strings, so\n// key/value matching is unreliable there; instead we scrub the token *values*\n// themselves (quote-agnostic) plus the auth header and Baker keys. This is not\n// exhaustive — a secret in an unrecognized shape can still be written. See README.\nconst REDACTIONS: ReadonlyArray<readonly [RegExp, string]> = [\n [/Bearer\\s+[A-Za-z0-9._-]+/g, \"Bearer [redacted]\"], // Authorization headers\n // Every prefix, captured rather than listed thrice: `bkr_` and `bkv_` do not\n // contain the literal `bk_`, so the company-key rule matched no part of the\n // read-only credentials a Session review or a published report runs with.\n [/\\b(bk[rv]?)_[A-Za-z0-9]+/g, \"$1_[redacted]\"], // Baker API keys\n [/eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/g, \"[redacted-jwt]\"], // JWTs / id tokens\n [/ya29\\.[A-Za-z0-9._-]+/g, \"[redacted-google-token]\"], // Google OAuth access tokens\n [/1\\/\\/[A-Za-z0-9._-]+/g, \"[redacted-google-refresh]\"], // Google refresh tokens\n [/EAA[A-Za-z0-9]{20,}/g, \"[redacted-meta-token]\"], // Meta/Facebook access tokens\n];\n\nexport function redactSecrets(input: string): string {\n let out = input;\n for (const [pattern, replacement] of REDACTIONS) {\n out = out.replace(pattern, replacement);\n }\n return out;\n}\n\nconst CREDENTIAL_VALUE = \"[credential value]\";\nconst CREDENTIAL_PUT_PATH = \"/api/credentials/put\";\n\n/**\n * `baker credentials put` carries a credential's value, the one payload this\n * log must never hold whatever its shape: the Session review reads this file.\n * Keyed on the route, not on a secret pattern, so a value no rule recognises\n * is still dropped.\n */\nfunction withoutCredentialValue(url: string, body: unknown): unknown {\n let path: string;\n try {\n path = new URL(url).pathname;\n } catch {\n path = url;\n }\n if (path !== CREDENTIAL_PUT_PATH || body === null || typeof body !== \"object\" || !(\"value\" in body)) {\n return body;\n }\n return { ...body, value: CREDENTIAL_VALUE };\n}\n\nconst PUT_FLAGS_WITH_VALUES = new Set([\"--host\", \"--label\"]);\n\n/** A value typed after `credentials put` (refused by the command, but already in argv) never reaches the log. */\nfunction argvWithoutCredentialValue(argv: string[]): string[] {\n if (argv[0] !== \"credentials\" || argv[1] !== \"put\") {\n return argv;\n }\n let nameSeen = false;\n let keepNext = false;\n let redactNext = false;\n return argv.map((arg, index) => {\n if (index < 2) return arg;\n if (keepNext || redactNext) {\n const kept = keepNext ? arg : CREDENTIAL_VALUE;\n keepNext = false;\n redactNext = false;\n return kept;\n }\n if (arg.startsWith(\"--value=\")) return `--value=${CREDENTIAL_VALUE}`;\n redactNext = arg === \"--value\";\n keepNext = PUT_FLAGS_WITH_VALUES.has(arg);\n if (arg.startsWith(\"-\")) return arg;\n const isName = !nameSeen;\n nameSeen = true;\n return isName ? arg : CREDENTIAL_VALUE;\n });\n}\n\nfunction resolveTarget(): string | undefined {\n const raw = debugLogSetting();\n if (!raw) {\n return undefined;\n }\n const lower = raw.toLowerCase();\n if (BOOLEAN_OFF.has(lower)) {\n return undefined;\n }\n const target = BOOLEAN_ON.has(lower) ? DEFAULT_FILE : raw;\n return isAbsolute(target) ? target : resolve(process.cwd(), target);\n}\n\nexport function isDebugLogEnabled(): boolean {\n return resolveTarget() !== undefined;\n}\n\nlet sessionId: string | undefined;\nfunction getSessionId(): string {\n if (!sessionId) {\n sessionId = `${process.pid}-${Date.now()}`;\n }\n return sessionId;\n}\n\n// Per-resolved-path bookkeeping so the hot path skips redundant syscalls: the\n// directory is ensured once and the current size is read once (via statSync),\n// then tracked in-process. Resets when the resolved path changes.\nlet trackedPath: string | undefined;\nlet bytesInFile = 0;\n\nfunction ensureReady(filePath: string): void {\n if (trackedPath !== filePath) {\n trackedPath = filePath;\n mkdirSync(dirname(filePath), { recursive: true });\n try {\n bytesInFile = statSync(filePath).size;\n } catch {\n bytesInFile = 0;\n }\n }\n}\n\nfunction append(entry: Record<string, unknown>): void {\n const filePath = resolveTarget();\n if (!filePath) {\n return;\n }\n try {\n const payload = { ts: new Date().toISOString(), session: getSessionId(), ...entry };\n const line = `${redactSecrets(JSON.stringify(payload))}\\n`;\n ensureReady(filePath);\n const size = Buffer.byteLength(line);\n if (bytesInFile + size > MAX_BYTES) {\n renameSync(filePath, `${filePath}.1`);\n bytesInFile = 0;\n }\n appendFileSync(filePath, line);\n bytesInFile += size;\n } catch {\n // Fail-open: debug logging must never break a command.\n }\n}\n\nfunction errorToPlain(err: unknown): Record<string, unknown> {\n if (err instanceof Error) {\n const code = (err as { code?: unknown }).code;\n return { name: err.name, message: err.message, ...(typeof code === \"string\" ? { code } : {}) };\n }\n return { message: String(err) };\n}\n\nlet invocationStartedAt: number | undefined;\n\nexport function logInvocation(argv: string[]): void {\n invocationStartedAt = Date.now();\n append({ kind: \"invocation\", argv: argvWithoutCredentialValue(argv), cwd: process.cwd() });\n}\n\n/**\n * Close an invocation with its outcome and its wall time.\n *\n * Until this existed the log could say what was called and what every HTTP hop\n * cost, and nothing at all about whether the command succeeded or how long the\n * whole thing took — so \"this verb is slow\" and \"this verb fails half the time\"\n * were both unanswerable from the one record that sees every call. `durationMs`\n * is measured from `logInvocation`, which runs before any command does.\n */\nexport function logExit(code: number): void {\n append({\n kind: \"exit\",\n code,\n ...(invocationStartedAt === undefined ? {} : { durationMs: Date.now() - invocationStartedAt }),\n });\n}\n\nlet exitHookInstalled = false;\n\n/**\n * Write the exit record however the process ends.\n *\n * `process.on(\"exit\")` is the only hook that sees all of them — a clean return, a\n * `process.exit` from the error handler, an unhandled rejection — and it is\n * synchronous-only, which is exactly what `appendFileSync` needs. Installed once,\n * and only when logging is on, so the disabled path adds no listener at all.\n */\nexport function installExitRecord(): void {\n if (exitHookInstalled || !isDebugLogEnabled()) {\n return;\n }\n exitHookInstalled = true;\n process.on(\"exit\", (code) => {\n logExit(typeof code === \"number\" ? code : 0);\n });\n}\n\nexport type HttpLogEntry = {\n source: \"cli\" | \"canvas\";\n method: string;\n url: string;\n requestBody?: unknown;\n status?: number;\n ok?: boolean;\n responseBody?: string;\n durationMs?: number;\n error?: unknown;\n};\n\nexport function debugLogHttp(entry: HttpLogEntry): void {\n if (!isDebugLogEnabled()) {\n return;\n }\n append({\n kind: \"http\",\n source: entry.source,\n method: entry.method,\n url: entry.url,\n durationMs: entry.durationMs,\n request: withoutCredentialValue(entry.url, entry.requestBody),\n status: entry.status,\n ok: entry.ok,\n response: entry.responseBody,\n error: entry.error === undefined ? undefined : errorToPlain(entry.error),\n });\n}\n\n// Reads a response body for logging without consuming it for the real caller.\nexport async function readBodyForLog(response: Response): Promise<string | undefined> {\n if (!isDebugLogEnabled()) {\n return undefined;\n }\n try {\n return await response.clone().text();\n } catch {\n return undefined;\n }\n}\n\n// Method syntax (bivariant) so a real `process.stdout`/`stderr` and a plain\n// test double both satisfy it.\ntype Writable = { write(...args: unknown[]): boolean };\n\n// Wraps a stream's `write` so every chunk is mirrored into the debug log while\n// the original write semantics (args + return value) are preserved. A single\n// streaming TextDecoder per stream decodes byte chunks so a multi-byte character\n// split across two writes is reassembled instead of garbled.\nexport function tapStream(name: string, stream: Writable): void {\n const original = stream.write.bind(stream) as (...args: unknown[]) => boolean;\n const decoder = new TextDecoder(\"utf-8\");\n stream.write = ((chunk: unknown, ...rest: unknown[]): boolean => {\n try {\n const text =\n typeof chunk === \"string\"\n ? chunk\n : chunk instanceof Uint8Array\n ? decoder.decode(chunk, { stream: true })\n : String(chunk);\n append({ kind: \"output\", stream: name, text });\n } catch {\n // ignore capture failures\n }\n return original(chunk, ...rest);\n }) as typeof stream.write;\n}\n\nlet tapsInstalled = false;\n\n// Mirrors everything written to stdout/stderr into the debug log. Installed once,\n// only when enabled, so the common (disabled) path leaves the streams untouched.\nexport function installStreamTaps(): void {\n if (tapsInstalled || !isDebugLogEnabled()) {\n return;\n }\n tapsInstalled = true;\n tapStream(\"stdout\", process.stdout);\n tapStream(\"stderr\", process.stderr);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError
|
|
3
|
+
} from "./chunk-CUL3VB4L.js";
|
|
4
|
+
|
|
5
|
+
// src/commands/research/output.ts
|
|
6
|
+
var RESEARCH_DATA_NOTE = "Estimates based on third-party SERP data \u2014 not exact figures. Use for directional insights, not precise measurement.";
|
|
7
|
+
function writeResearchJson(envelope) {
|
|
8
|
+
process.stdout.write(`${JSON.stringify(envelope, null, 2)}
|
|
9
|
+
`);
|
|
10
|
+
}
|
|
11
|
+
function toCsvRow(values) {
|
|
12
|
+
return values.map((v) => {
|
|
13
|
+
if (v.includes(",") || v.includes('"') || v.includes("\n")) {
|
|
14
|
+
return `"${v.replace(/"/g, '""')}"`;
|
|
15
|
+
}
|
|
16
|
+
return v;
|
|
17
|
+
}).join(",");
|
|
18
|
+
}
|
|
19
|
+
function flattenRow(row) {
|
|
20
|
+
const flat = {};
|
|
21
|
+
for (const [key, val] of Object.entries(row)) {
|
|
22
|
+
flat[key] = typeof val === "object" && val !== null ? JSON.stringify(val) : String(val ?? "");
|
|
23
|
+
}
|
|
24
|
+
return flat;
|
|
25
|
+
}
|
|
26
|
+
function writeCsv(data, fields) {
|
|
27
|
+
if (data.length === 0) return;
|
|
28
|
+
const cols = fields ?? Object.keys(data[0] ?? {});
|
|
29
|
+
process.stdout.write(`${toCsvRow(cols)}
|
|
30
|
+
`);
|
|
31
|
+
for (const row of data) {
|
|
32
|
+
const flat = flattenRow(row);
|
|
33
|
+
process.stdout.write(`${toCsvRow(cols.map((f) => flat[f] ?? ""))}
|
|
34
|
+
`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function writeJsonl(data) {
|
|
38
|
+
for (const row of data) {
|
|
39
|
+
process.stdout.write(`${JSON.stringify(row)}
|
|
40
|
+
`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function writeMd(data, fields) {
|
|
44
|
+
if (data.length === 0) return;
|
|
45
|
+
const cols = fields ?? Object.keys(data[0] ?? {});
|
|
46
|
+
process.stdout.write(`| ${cols.join(" | ")} |
|
|
47
|
+
`);
|
|
48
|
+
process.stdout.write(`| ${cols.map(() => "---").join(" | ")} |
|
|
49
|
+
`);
|
|
50
|
+
for (const row of data) {
|
|
51
|
+
const flat = flattenRow(row);
|
|
52
|
+
process.stdout.write(`| ${cols.map((f) => markdownCell(flat[f] ?? "")).join(" | ")} |
|
|
53
|
+
`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function markdownCell(value) {
|
|
57
|
+
return value.replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
|
|
58
|
+
}
|
|
59
|
+
function writeResearchOutput(data, format, fields) {
|
|
60
|
+
switch (format) {
|
|
61
|
+
case "csv":
|
|
62
|
+
writeCsv(data, fields);
|
|
63
|
+
break;
|
|
64
|
+
case "jsonl":
|
|
65
|
+
writeJsonl(data);
|
|
66
|
+
break;
|
|
67
|
+
case "md":
|
|
68
|
+
writeMd(data, fields);
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
writeResearchJson({ ok: true, data });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function writeResearchHints(hints, format) {
|
|
75
|
+
if (format === "json") {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
for (const hint of hints) {
|
|
79
|
+
process.stderr.write(`${hint}
|
|
80
|
+
`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function handleResearchError(err, fixFor) {
|
|
84
|
+
const code = err instanceof ApiError ? err.code : "NETWORK_ERROR";
|
|
85
|
+
const message = err instanceof ApiError ? err.message : err instanceof Error ? err.message : "Unexpected error";
|
|
86
|
+
const fix = fixFor?.(code);
|
|
87
|
+
writeResearchJson({ ok: false, error: { code, message, ...fix ? { fix } : {} } });
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export {
|
|
92
|
+
RESEARCH_DATA_NOTE,
|
|
93
|
+
writeResearchJson,
|
|
94
|
+
writeResearchOutput,
|
|
95
|
+
writeResearchHints,
|
|
96
|
+
handleResearchError
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=chunk-7OHWEF3I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/research/output.ts"],"sourcesContent":["import { ApiError } from \"../../client.ts\";\n\nexport const RESEARCH_DATA_NOTE =\n \"Estimates based on third-party SERP data — not exact figures. Use for directional insights, not precise measurement.\";\n\ninterface PaginationInfo {\n offset: number;\n limit: number;\n has_more: boolean;\n next_offset?: number;\n}\n\ninterface ResearchSuccessEnvelope<T> {\n ok: true;\n data: T;\n fields?: Record<string, string>;\n note?: string;\n hints?: string[];\n total_count?: number;\n pagination?: PaginationInfo;\n [key: string]: unknown;\n}\n\n/**\n * Structured remediation. A research call that fails is almost never worth\n * aborting the whole job over, so the fix says what to do *instead* of retrying\n * blindly — usually finish the rest and name the gap.\n */\nexport interface ResearchFix {\n action: \"retry_with_changes\" | \"continue_without\" | \"reject\";\n explanation: string;\n correctedCommand?: string;\n}\n\ninterface ResearchErrorEnvelope {\n ok: false;\n error: {\n code: string;\n message: string;\n fix?: ResearchFix;\n };\n}\n\ntype ResearchOutput = ResearchSuccessEnvelope<unknown> | ResearchErrorEnvelope;\n\nexport function writeResearchJson(envelope: ResearchOutput): void {\n process.stdout.write(`${JSON.stringify(envelope, null, 2)}\\n`);\n}\n\nfunction toCsvRow(values: string[]): string {\n return values\n .map((v) => {\n if (v.includes(\",\") || v.includes('\"') || v.includes(\"\\n\")) {\n return `\"${v.replace(/\"/g, '\"\"')}\"`;\n }\n return v;\n })\n .join(\",\");\n}\n\nfunction flattenRow(row: Record<string, unknown>): Record<string, string> {\n const flat: Record<string, string> = {};\n for (const [key, val] of Object.entries(row)) {\n flat[key] = typeof val === \"object\" && val !== null ? JSON.stringify(val) : String(val ?? \"\");\n }\n return flat;\n}\n\nfunction writeCsv(data: Array<Record<string, unknown>>, fields?: string[]): void {\n if (data.length === 0) return;\n const cols = fields ?? Object.keys(data[0] ?? {});\n process.stdout.write(`${toCsvRow(cols)}\\n`);\n for (const row of data) {\n const flat = flattenRow(row);\n process.stdout.write(`${toCsvRow(cols.map((f) => flat[f] ?? \"\"))}\\n`);\n }\n}\n\nfunction writeJsonl(data: Array<Record<string, unknown>>): void {\n for (const row of data) {\n process.stdout.write(`${JSON.stringify(row)}\\n`);\n }\n}\n\nfunction writeMd(data: Array<Record<string, unknown>>, fields?: string[]): void {\n if (data.length === 0) return;\n const cols = fields ?? Object.keys(data[0] ?? {});\n process.stdout.write(`| ${cols.join(\" | \")} |\\n`);\n process.stdout.write(`| ${cols.map(() => \"---\").join(\" | \")} |\\n`);\n for (const row of data) {\n const flat = flattenRow(row);\n process.stdout.write(`| ${cols.map((f) => markdownCell(flat[f] ?? \"\")).join(\" | \")} |\\n`);\n }\n}\n\n/** A `|` or a line break inside a cell would end it, shifting every column after it. */\nfunction markdownCell(value: string): string {\n return value.replace(/\\|/g, \"\\\\|\").replace(/\\r?\\n/g, \" \");\n}\n\nexport function writeResearchOutput(data: Array<Record<string, unknown>>, format: string, fields?: string[]): void {\n switch (format) {\n case \"csv\":\n writeCsv(data, fields);\n break;\n case \"jsonl\":\n writeJsonl(data);\n break;\n case \"md\":\n writeMd(data, fields);\n break;\n default:\n writeResearchJson({ ok: true, data });\n }\n}\n\n/**\n * csv/md/jsonl render rows and nothing else, so a hint carried in the JSON\n * envelope disappears in exactly the case it matters most — an empty result,\n * where the output is a header line or nothing at all. Send it to stderr instead.\n */\nexport function writeResearchHints(hints: string[], format: string): void {\n if (format === \"json\") {\n return;\n }\n for (const hint of hints) {\n process.stderr.write(`${hint}\\n`);\n }\n}\n\nexport function handleResearchError(err: unknown, fixFor?: (code: string) => ResearchFix | undefined): never {\n const code = err instanceof ApiError ? err.code : \"NETWORK_ERROR\";\n const message = err instanceof ApiError ? err.message : err instanceof Error ? err.message : \"Unexpected error\";\n const fix = fixFor?.(code);\n writeResearchJson({ ok: false, error: { code, message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import {
|
|
2
|
+
failApi
|
|
3
|
+
} from "./chunk-JUY47NZ2.js";
|
|
4
|
+
import {
|
|
5
|
+
CREATIVE_PERFORMANCE_DEFAULT_DAYS,
|
|
6
|
+
CREATIVE_PERFORMANCE_MAX_DAYS
|
|
7
|
+
} from "./chunk-O6XZIQXZ.js";
|
|
8
|
+
import {
|
|
9
|
+
apiPost
|
|
10
|
+
} from "./chunk-CUL3VB4L.js";
|
|
11
|
+
import {
|
|
12
|
+
registerSchema,
|
|
13
|
+
writeJson
|
|
14
|
+
} from "./chunk-MYTDK3AL.js";
|
|
15
|
+
|
|
16
|
+
// src/commands/creatives/performance.ts
|
|
17
|
+
import { readFileSync } from "fs";
|
|
18
|
+
import path from "path";
|
|
19
|
+
import { defineCommand } from "citty";
|
|
20
|
+
import { parse as parseYaml } from "yaml";
|
|
21
|
+
var DESCRIPTION = `How each Baker creative is doing in the live Meta ads that show it: spend, impressions, CTR, CPC, results, cost per result, frequency and a fatigue verdict, next to the angle, hook, mechanism and dominant slot its definition set out to test. Video creatives add hookRate (percent of impressions that watched 3 seconds) and holdRate (percent of those that reached a ThruPlay). Use it before briefing new creatives, to learn which angle and mechanism to make next and which creatives to replace.
|
|
22
|
+
|
|
23
|
+
Start here:
|
|
24
|
+
baker creatives performance # every creative in an ad, last 30 days
|
|
25
|
+
baker creatives performance --slug spring-offer # one creative
|
|
26
|
+
baker creatives performance --days 14 --full # ids, last-7-day figures, a video's watch funnel, one row per ad
|
|
27
|
+
|
|
28
|
+
Fatigue follows the Meta playbook (07-creative-audit.md): fresh, fading, fatigued, dead, or too_early (under 14 days or 1,000 impressions) and no_delivery. A low hook rate means the first 3 seconds need new hooks; a working hook with a low hold rate means the body loses people. A creative counts once a Session's publish created an ad with it.`;
|
|
29
|
+
var ARGS = {
|
|
30
|
+
slug: { type: "string", description: "Only this creative (src/creatives/<slug>/)", required: false },
|
|
31
|
+
days: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: `Reporting window in days, ending today (1-${CREATIVE_PERFORMANCE_MAX_DAYS}, default ${CREATIVE_PERFORMANCE_DEFAULT_DAYS})`,
|
|
34
|
+
required: false
|
|
35
|
+
},
|
|
36
|
+
full: {
|
|
37
|
+
type: "boolean",
|
|
38
|
+
description: "Add ids, last-7-day CTR and cost per result, and one row per ad",
|
|
39
|
+
required: false,
|
|
40
|
+
default: false
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
registerSchema({ command: "creatives.performance", description: DESCRIPTION, args: ARGS });
|
|
44
|
+
var INSIGHT_KEYS = [
|
|
45
|
+
"idea",
|
|
46
|
+
"message",
|
|
47
|
+
"evidence",
|
|
48
|
+
"angle",
|
|
49
|
+
"hook",
|
|
50
|
+
"mechanism",
|
|
51
|
+
"dominantSlot",
|
|
52
|
+
"persona",
|
|
53
|
+
"awareness",
|
|
54
|
+
"hypothesis"
|
|
55
|
+
];
|
|
56
|
+
var FRONTMATTER = /^---\r?\n([\s\S]*?)\r?\n---/;
|
|
57
|
+
function insightValue(value) {
|
|
58
|
+
if (typeof value === "string") return value.trim() || null;
|
|
59
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
function definitionInsights(markdown) {
|
|
63
|
+
const block = FRONTMATTER.exec(markdown)?.[1];
|
|
64
|
+
if (!block) return null;
|
|
65
|
+
let parsed;
|
|
66
|
+
try {
|
|
67
|
+
parsed = parseYaml(block);
|
|
68
|
+
} catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
if (parsed === null || typeof parsed !== "object") return null;
|
|
72
|
+
const insights = {};
|
|
73
|
+
for (const [key, raw] of Object.entries(parsed)) {
|
|
74
|
+
if (!(INSIGHT_KEYS.includes(key) || key.startsWith("source") || key.startsWith("reference"))) continue;
|
|
75
|
+
const value = insightValue(raw);
|
|
76
|
+
if (value !== null) insights[key] = value;
|
|
77
|
+
}
|
|
78
|
+
return Object.keys(insights).length > 0 ? insights : null;
|
|
79
|
+
}
|
|
80
|
+
function readLocalDefinition(slug) {
|
|
81
|
+
try {
|
|
82
|
+
return readFileSync(path.join(process.cwd(), "src", "creatives", slug, "_definition.md"), "utf8");
|
|
83
|
+
} catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
var COMPARED_FIELDS = [
|
|
88
|
+
{ key: "angle", label: "angle", advice: "Brief the next creative on the cheapest angle with a new hook." },
|
|
89
|
+
{ key: "mechanism", label: "mechanism", advice: "Brief the next creative on the cheapest mechanism." },
|
|
90
|
+
{ key: "dominantSlot", label: "dominant slot", advice: "Lead the next creative with the cheapest dominant slot." }
|
|
91
|
+
];
|
|
92
|
+
function cheapestHint(creatives, { key, label, advice }) {
|
|
93
|
+
const byValue = /* @__PURE__ */ new Map();
|
|
94
|
+
for (const creative of creatives) {
|
|
95
|
+
const value = creative.definition?.[key];
|
|
96
|
+
if (!value || creative.costPerResult === null) continue;
|
|
97
|
+
const best = byValue.get(value);
|
|
98
|
+
if (!best || (best.costPerResult ?? Number.POSITIVE_INFINITY) > creative.costPerResult)
|
|
99
|
+
byValue.set(value, creative);
|
|
100
|
+
}
|
|
101
|
+
if (byValue.size < 2) return null;
|
|
102
|
+
const ranked = [...byValue.entries()].sort(([, a], [, b]) => (a.costPerResult ?? 0) - (b.costPerResult ?? 0)).map(
|
|
103
|
+
([value, creative]) => `"${value}" ${creative.costPerResult}${creative.currency ? ` ${creative.currency}` : ""} (${creative.slug ?? creative.title})`
|
|
104
|
+
);
|
|
105
|
+
return `Cost per result by ${label}: ${ranked.join(", ")}. ${advice}`;
|
|
106
|
+
}
|
|
107
|
+
function withDefinitions(response, readDefinition) {
|
|
108
|
+
const creatives = response.data.creatives.map((creative) => {
|
|
109
|
+
const markdown = creative.slug ? readDefinition(creative.slug) : null;
|
|
110
|
+
const definition = markdown ? definitionInsights(markdown) : null;
|
|
111
|
+
return definition ? { ...creative, definition } : creative;
|
|
112
|
+
});
|
|
113
|
+
const hints = [...response.hints ?? []];
|
|
114
|
+
for (const field of COMPARED_FIELDS) {
|
|
115
|
+
const hint = cheapestHint(creatives, field);
|
|
116
|
+
if (hint) hints.push(hint);
|
|
117
|
+
}
|
|
118
|
+
const unnamed = creatives.filter((creative) => !creative.definition?.angle).map((c) => c.slug ?? c.title);
|
|
119
|
+
if (unnamed.length > 0) {
|
|
120
|
+
hints.push(
|
|
121
|
+
`No angle recorded for: ${unnamed.join(", ")}. Add angle and hook to src/creatives/<slug>/_definition.md so results show which angle works.`
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
return { ...response, data: { ...response.data, creatives }, ...hints.length > 0 ? { hints } : {} };
|
|
125
|
+
}
|
|
126
|
+
function parseDays(raw) {
|
|
127
|
+
if (raw === void 0) return void 0;
|
|
128
|
+
const days = Number(raw);
|
|
129
|
+
if (!Number.isInteger(days) || days < 1 || days > CREATIVE_PERFORMANCE_MAX_DAYS) {
|
|
130
|
+
throw new Error(`--days must be a whole number from 1 to ${CREATIVE_PERFORMANCE_MAX_DAYS}`);
|
|
131
|
+
}
|
|
132
|
+
return days;
|
|
133
|
+
}
|
|
134
|
+
var performanceCommand = defineCommand({
|
|
135
|
+
meta: { name: "performance", description: DESCRIPTION },
|
|
136
|
+
args: ARGS,
|
|
137
|
+
run: async ({ args }) => {
|
|
138
|
+
try {
|
|
139
|
+
const body = {};
|
|
140
|
+
const slug = args.slug;
|
|
141
|
+
if (slug) body.slug = slug;
|
|
142
|
+
const days = parseDays(args.days);
|
|
143
|
+
if (days !== void 0) body.days = days;
|
|
144
|
+
if (args.full) body.full = true;
|
|
145
|
+
const response = await apiPost("/api/creatives/performance", body);
|
|
146
|
+
writeJson(withDefinitions(response, readLocalDefinition));
|
|
147
|
+
} catch (err) {
|
|
148
|
+
failApi(err);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
definitionInsights,
|
|
155
|
+
withDefinitions,
|
|
156
|
+
parseDays,
|
|
157
|
+
performanceCommand
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=chunk-A636XRD7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/creatives/performance.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport {\n CREATIVE_PERFORMANCE_DEFAULT_DAYS,\n CREATIVE_PERFORMANCE_MAX_DAYS,\n type CreativePerformance,\n type CreativesPerformanceRequest,\n type CreativesPerformanceResponse,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { parse as parseYaml } from \"yaml\";\nimport { apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi } from \"../actions/shared.ts\";\n\nconst DESCRIPTION = `How each Baker creative is doing in the live Meta ads that show it: spend, impressions, CTR, CPC, results, cost per result, frequency and a fatigue verdict, next to the angle, hook, mechanism and dominant slot its definition set out to test. Video creatives add hookRate (percent of impressions that watched 3 seconds) and holdRate (percent of those that reached a ThruPlay). Use it before briefing new creatives, to learn which angle and mechanism to make next and which creatives to replace.\n\nStart here:\n baker creatives performance # every creative in an ad, last 30 days\n baker creatives performance --slug spring-offer # one creative\n baker creatives performance --days 14 --full # ids, last-7-day figures, a video's watch funnel, one row per ad\n\nFatigue follows the Meta playbook (07-creative-audit.md): fresh, fading, fatigued, dead, or too_early (under 14 days or 1,000 impressions) and no_delivery. A low hook rate means the first 3 seconds need new hooks; a working hook with a low hold rate means the body loses people. A creative counts once a Session's publish created an ad with it.`;\n\nconst ARGS = {\n slug: { type: \"string\", description: \"Only this creative (src/creatives/<slug>/)\", required: false },\n days: {\n type: \"string\",\n description: `Reporting window in days, ending today (1-${CREATIVE_PERFORMANCE_MAX_DAYS}, default ${CREATIVE_PERFORMANCE_DEFAULT_DAYS})`,\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"Add ids, last-7-day CTR and cost per result, and one row per ad\",\n required: false,\n default: false,\n },\n} as const;\n\nregisterSchema({ command: \"creatives.performance\", description: DESCRIPTION, args: ARGS });\n\n/**\n * Frontmatter keys that say what a creative set out to test (angle, hook, the\n * mechanism it uses and the slot it leads with) and which reference\n * ad it adapted. Anything named `source…` or `reference…` is kept too, so\n * reference fields added to the collection later come through without a CLI\n * release.\n */\nconst INSIGHT_KEYS = [\n \"idea\",\n \"message\",\n \"evidence\",\n \"angle\",\n \"hook\",\n \"mechanism\",\n \"dominantSlot\",\n \"persona\",\n \"awareness\",\n \"hypothesis\",\n];\nconst FRONTMATTER = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\nfunction insightValue(value: unknown): string | null {\n if (typeof value === \"string\") return value.trim() || null;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return null;\n}\n\n/** The insight fields of a `_definition.md`, or null when it names none. */\nexport function definitionInsights(markdown: string): Record<string, string> | null {\n const block = FRONTMATTER.exec(markdown)?.[1];\n if (!block) return null;\n let parsed: unknown;\n try {\n parsed = parseYaml(block);\n } catch {\n return null;\n }\n if (parsed === null || typeof parsed !== \"object\") return null;\n const insights: Record<string, string> = {};\n for (const [key, raw] of Object.entries(parsed as Record<string, unknown>)) {\n if (!(INSIGHT_KEYS.includes(key) || key.startsWith(\"source\") || key.startsWith(\"reference\"))) continue;\n const value = insightValue(raw);\n if (value !== null) insights[key] = value;\n }\n return Object.keys(insights).length > 0 ? insights : null;\n}\n\nfunction readLocalDefinition(slug: string): string | null {\n try {\n return readFileSync(path.join(process.cwd(), \"src\", \"creatives\", slug, \"_definition.md\"), \"utf8\");\n } catch {\n return null;\n }\n}\n\n/**\n * Definition fields whose values are compared by cost per result, each with\n * the advice its hint closes on. `label` is how the hint names the field.\n */\nconst COMPARED_FIELDS = [\n { key: \"angle\", label: \"angle\", advice: \"Brief the next creative on the cheapest angle with a new hook.\" },\n { key: \"mechanism\", label: \"mechanism\", advice: \"Brief the next creative on the cheapest mechanism.\" },\n { key: \"dominantSlot\", label: \"dominant slot\", advice: \"Lead the next creative with the cheapest dominant slot.\" },\n] as const;\n\nfunction cheapestHint(\n creatives: readonly CreativePerformance[],\n { key, label, advice }: (typeof COMPARED_FIELDS)[number],\n): string | null {\n const byValue = new Map<string, CreativePerformance>();\n for (const creative of creatives) {\n const value = creative.definition?.[key];\n if (!value || creative.costPerResult === null) continue;\n const best = byValue.get(value);\n if (!best || (best.costPerResult ?? Number.POSITIVE_INFINITY) > creative.costPerResult)\n byValue.set(value, creative);\n }\n if (byValue.size < 2) return null;\n const ranked = [...byValue.entries()]\n .sort(([, a], [, b]) => (a.costPerResult ?? 0) - (b.costPerResult ?? 0))\n .map(\n ([value, creative]) =>\n `\"${value}\" ${creative.costPerResult}${creative.currency ? ` ${creative.currency}` : \"\"} (${creative.slug ?? creative.title})`,\n );\n return `Cost per result by ${label}: ${ranked.join(\", \")}. ${advice}`;\n}\n\n/**\n * Adds each creative's definition (read from the local repo, where the agent\n * works) and the hints that need it: which angle, mechanism and dominant slot\n * are cheapest, and which creatives say nothing about what they test.\n */\nexport function withDefinitions(\n response: CreativesPerformanceResponse,\n readDefinition: (slug: string) => string | null,\n): CreativesPerformanceResponse {\n const creatives = response.data.creatives.map((creative) => {\n const markdown = creative.slug ? readDefinition(creative.slug) : null;\n const definition = markdown ? definitionInsights(markdown) : null;\n return definition ? { ...creative, definition } : creative;\n });\n const hints = [...(response.hints ?? [])];\n for (const field of COMPARED_FIELDS) {\n const hint = cheapestHint(creatives, field);\n if (hint) hints.push(hint);\n }\n const unnamed = creatives.filter((creative) => !creative.definition?.angle).map((c) => c.slug ?? c.title);\n if (unnamed.length > 0) {\n hints.push(\n `No angle recorded for: ${unnamed.join(\", \")}. Add angle and hook to src/creatives/<slug>/_definition.md so results show which angle works.`,\n );\n }\n return { ...response, data: { ...response.data, creatives }, ...(hints.length > 0 ? { hints } : {}) };\n}\n\nexport function parseDays(raw: string | undefined): number | undefined {\n if (raw === undefined) return undefined;\n const days = Number(raw);\n if (!Number.isInteger(days) || days < 1 || days > CREATIVE_PERFORMANCE_MAX_DAYS) {\n throw new Error(`--days must be a whole number from 1 to ${CREATIVE_PERFORMANCE_MAX_DAYS}`);\n }\n return days;\n}\n\nexport const performanceCommand = defineCommand({\n meta: { name: \"performance\", description: DESCRIPTION },\n args: ARGS,\n run: async ({ args }) => {\n try {\n const body: CreativesPerformanceRequest = {};\n const slug = args.slug as string | undefined;\n if (slug) body.slug = slug;\n const days = parseDays(args.days as string | undefined);\n if (days !== undefined) body.days = days;\n if (args.full) body.full = true;\n const response = await apiPost<CreativesPerformanceResponse>(\"/api/creatives/performance\", body);\n writeJson(withDefinitions(response, readLocalDefinition));\n } catch (err) {\n failApi(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
|