@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/studio/batch.ts"],"sourcesContent":["import type { StudioGeneration, StudioGetResponse } from \"@baker/api\";\nimport { apiGet } from \"../../client.ts\";\n\n/**\n * Compact projection: what the agent needs to DECIDE what happened to a batch —\n * which takes rendered, where each one lives, and why a take is missing. The\n * settings echo, the reference list and the attribution are `--full` only,\n * because a four-take batch would otherwise repeat the whole request back.\n */\nexport function projectBatch(generation: StudioGeneration, full: boolean): Record<string, unknown> {\n const compact: Record<string, unknown> = {\n generationId: generation.generationId,\n kind: generation.kind,\n status: generation.status,\n prompt: generation.prompt,\n model: generation.model,\n aspectRatio: generation.aspectRatio,\n variants: generation.variants.map((variant) => ({\n slot: variant.slot,\n status: variant.status,\n ...(variant.imageId ? { imageId: variant.imageId } : {}),\n ...(variant.videoId ? { videoId: variant.videoId } : {}),\n ...(variant.url ? { url: variant.url } : {}),\n inLibrary: variant.inLibrary,\n ...(variant.error ? { error: variant.error } : {}),\n })),\n };\n if (!full) return compact;\n return {\n ...compact,\n ...(generation.skillId ? { skillId: generation.skillId } : {}),\n ...(generation.imageSettings ? { imageSettings: generation.imageSettings } : {}),\n ...(generation.clipSettings ? { clipSettings: generation.clipSettings } : {}),\n ...(generation.referenceImageIds ? { referenceImageIds: generation.referenceImageIds } : {}),\n ...(generation.chatId ? { chatId: generation.chatId } : {}),\n createdAt: generation.createdAt,\n };\n}\n\n/**\n * The `--slot` argument to show in a keep hint.\n *\n * A hint carrying a complete, paste-ready command gets pasted — that is what a\n * hint is for. So it may only name a slot when there is no choice to make.\n * Naming the first ready take out of several turned \"keep the one you chose\"\n * into \"keep slot 0\", on every batch, which makes the star meaningless: the\n * client sees one starred take per batch whether or not anyone judged them.\n */\nfunction slotArg(candidates: { slot: number }[]): string {\n return candidates.length === 1 ? `--slot ${candidates[0]?.slot}` : \"--slot <n>\";\n}\n\n/** Says out loud that the choice is the agent's, only when there is one. */\nfunction chooseFirst(candidates: unknown[]): string {\n return candidates.length === 1 ? \"\" : \" Look at the takes and pick one — do not default to the first.\";\n}\n\n/**\n * What to do next with this batch.\n *\n * The two misuses worth spending a hint on: starting the same batch again while\n * it is still rendering, and treating a rendered clip as usable. A clip is only\n * ingested when it is kept, so an agent that hands the URL to a canvas is\n * pointing at something the library never took.\n */\nexport function batchHints(generation: StudioGeneration): string[] {\n const id = generation.generationId;\n if (generation.status === \"running\") {\n return [\n `Still rendering. Run \\`baker studio get ${id}\\` when you need the result — do not start the same batch again.`,\n ];\n }\n\n const hints: string[] = [];\n const ready = generation.variants.filter((variant) => variant.status === \"ready\");\n const failed = generation.variants.filter((variant) => variant.status === \"failed\");\n\n if (generation.kind === \"image\" && ready.length > 0) {\n hints.push(\n 'Every rendered image is already in the media library and searchable — `baker images library \"<what it shows>\"` finds it, and you can use its image id straight away.',\n );\n hints.push(\n `Mark the take you are using: \\`baker studio keep ${id} ${slotArg(ready)}\\` stars it so the client reviews the right one.${chooseFirst(ready)}`,\n );\n }\n\n const unkeptClips = ready.filter((variant) => !variant.inLibrary);\n if (generation.kind === \"video\" && unkeptClips.length > 0) {\n hints.push(\n `A clip is not usable anywhere — canvas, landing, ad — until you keep it. \\`baker studio keep ${id} ${slotArg(unkeptClips)}\\` puts it in the video library; takes nobody keeps are never ingested.${chooseFirst(unkeptClips)}`,\n );\n }\n\n if (generation.status === \"partial\" && failed.length > 0) {\n hints.push(\n `${failed.length === 1 ? \"This take\" : \"These takes\"} did not render — ${failed\n .map((variant) => `take ${variant.slot}: ${variant.error ?? \"no reason given\"}`)\n .join(\"; \")}. Use the ones that did and carry on; do not re-run the whole batch.`,\n );\n }\n\n if (generation.status === \"failed\") {\n hints.push(\n `No take rendered — ${failed[0]?.error ?? \"no reason given\"}. Continue the job with a sourced or existing asset rather than stopping.`,\n );\n }\n\n return hints;\n}\n\n/**\n * What to tell a caller still holding a batch that has not settled — whether it\n * simply outlasted the wait, or the read stopped answering. Both end the same\n * way, and that ending is the point: the takes are paid for and still coming, so\n * collect them by id rather than starting again.\n */\nexport function waitingHint(outcome: BatchOutcome, generationId: string, maxWaitMs: number): string {\n const collect = `Run \\`baker studio get ${generationId}\\` to pick it up — the batch is still going, so do not start it again.`;\n if (outcome.kind === \"unreachable\") {\n return `The batch started and is rendering, but reading it back failed (${outcome.reason}). ${collect}`;\n }\n return `Still rendering after ${Math.round(maxWaitMs / 1000)}s. ${collect}`;\n}\n\nconst FALSEY_FLAG_VALUES = new Set([\"false\", \"0\", \"no\", \"off\"]);\n\n/**\n * How long to hold the command open, in ms — 0 meaning \"return the id now\".\n *\n * Two ways to say the same thing because agents reach for both: `--wait false`\n * (don't block) and `--max-wait 0` (block for nothing).\n */\nexport function resolveMaxWaitMs(wait: unknown, maxWait: unknown, defaultMs: number): number {\n if (typeof wait === \"string\" && FALSEY_FLAG_VALUES.has(wait.trim().toLowerCase())) return 0;\n if (wait === false) return 0;\n if (maxWait === undefined || maxWait === \"\") return defaultMs;\n const parsed = Number(maxWait);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : defaultMs;\n}\n\nconst POLL_INTERVAL_MS = 3_000;\n\nexport type PollDeps = {\n get: (generationId: string) => Promise<StudioGeneration>;\n sleep: (ms: number) => Promise<void>;\n};\n\nexport const defaultPollDeps: PollDeps = {\n get: async (generationId) => {\n const response = await apiGet<StudioGetResponse>(`/api/studio/generations/${generationId}`);\n return response.generation;\n },\n sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n};\n\n/**\n * Poll until the batch stops running, or give up and hand the id back.\n *\n * Running out of patience is NOT a failure here: the batch is still rendering on\n * the backend and will land in the dashboard either way, so the honest answer is\n * the id plus \"pick it up with `baker studio get`\". Exiting non-zero would make a\n * slow provider look like a broken command and push the agent into re-running a\n * generation the company already paid for.\n */\nexport async function pollBatch(\n generationId: string,\n maxWaitMs: number,\n deps: PollDeps = defaultPollDeps,\n): Promise<StudioGeneration | null> {\n const deadline = Date.now() + maxWaitMs;\n while (Date.now() < deadline) {\n const generation = await deps.get(generationId);\n if (generation.status !== \"running\") return generation;\n await deps.sleep(POLL_INTERVAL_MS);\n }\n return null;\n}\n\n/** What became of a batch that was successfully STARTED — and therefore billed. */\nexport type BatchOutcome =\n | { kind: \"settled\"; generation: StudioGeneration }\n | { kind: \"still-running\" }\n | { kind: \"unreachable\"; reason: string };\n\n/**\n * Wait for a started batch without ever throwing.\n *\n * Once the POST returns, the takes are rendering and the company has paid. A\n * read that fails after that point says nothing about the request — the batch is\n * fine, we just could not see it — so it must not surface as a refused start,\n * which is advice to change a setting and run the whole thing again. Losing the\n * `generationId` here is what turns one transient GET into a second charge.\n */\nexport async function awaitBatch(\n generationId: string,\n maxWaitMs: number,\n deps: PollDeps = defaultPollDeps,\n): Promise<BatchOutcome> {\n try {\n const generation = await pollBatch(generationId, maxWaitMs, deps);\n return generation ? { kind: \"settled\", generation } : { kind: \"still-running\" };\n } catch (error) {\n return { kind: \"unreachable\", reason: error instanceof Error ? error.message : \"the read failed\" };\n }\n}\n"],"mappings":";;;;;AASO,SAAS,aAAa,YAA8B,MAAwC;AACjG,QAAM,UAAmC;AAAA,IACvC,cAAc,WAAW;AAAA,IACzB,MAAM,WAAW;AAAA,IACjB,QAAQ,WAAW;AAAA,IACnB,QAAQ,WAAW;AAAA,IACnB,OAAO,WAAW;AAAA,IAClB,aAAa,WAAW;AAAA,IACxB,UAAU,WAAW,SAAS,IAAI,CAAC,aAAa;AAAA,MAC9C,MAAM,QAAQ;AAAA,MACd,QAAQ,QAAQ;AAAA,MAChB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACtD,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACtD,GAAI,QAAQ,MAAM,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;AAAA,MAC1C,WAAW,QAAQ;AAAA,MACnB,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,IAClD,EAAE;AAAA,EACJ;AACA,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,WAAW,UAAU,EAAE,SAAS,WAAW,QAAQ,IAAI,CAAC;AAAA,IAC5D,GAAI,WAAW,gBAAgB,EAAE,eAAe,WAAW,cAAc,IAAI,CAAC;AAAA,IAC9E,GAAI,WAAW,eAAe,EAAE,cAAc,WAAW,aAAa,IAAI,CAAC;AAAA,IAC3E,GAAI,WAAW,oBAAoB,EAAE,mBAAmB,WAAW,kBAAkB,IAAI,CAAC;AAAA,IAC1F,GAAI,WAAW,SAAS,EAAE,QAAQ,WAAW,OAAO,IAAI,CAAC;AAAA,IACzD,WAAW,WAAW;AAAA,EACxB;AACF;AAWA,SAAS,QAAQ,YAAwC;AACvD,SAAO,WAAW,WAAW,IAAI,UAAU,WAAW,CAAC,GAAG,IAAI,KAAK;AACrE;AAGA,SAAS,YAAY,YAA+B;AAClD,SAAO,WAAW,WAAW,IAAI,KAAK;AACxC;AAUO,SAAS,WAAW,YAAwC;AACjE,QAAM,KAAK,WAAW;AACtB,MAAI,WAAW,WAAW,WAAW;AACnC,WAAO;AAAA,MACL,2CAA2C,EAAE;AAAA,IAC/C;AAAA,EACF;AAEA,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAQ,WAAW,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,OAAO;AAChF,QAAM,SAAS,WAAW,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,QAAQ;AAElF,MAAI,WAAW,SAAS,WAAW,MAAM,SAAS,GAAG;AACnD,UAAM;AAAA,MACJ;AAAA,IACF;AACA,UAAM;AAAA,MACJ,oDAAoD,EAAE,IAAI,QAAQ,KAAK,CAAC,mDAAmD,YAAY,KAAK,CAAC;AAAA,IAC/I;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,SAAS;AAChE,MAAI,WAAW,SAAS,WAAW,YAAY,SAAS,GAAG;AACzD,UAAM;AAAA,MACJ,0GAAgG,EAAE,IAAI,QAAQ,WAAW,CAAC,0EAA0E,YAAY,WAAW,CAAC;AAAA,IAC9N;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,aAAa,OAAO,SAAS,GAAG;AACxD,UAAM;AAAA,MACJ,GAAG,OAAO,WAAW,IAAI,cAAc,aAAa,0BAAqB,OACtE,IAAI,CAAC,YAAY,QAAQ,QAAQ,IAAI,KAAK,QAAQ,SAAS,iBAAiB,EAAE,EAC9E,KAAK,IAAI,CAAC;AAAA,IACf;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,UAAU;AAClC,UAAM;AAAA,MACJ,2BAAsB,OAAO,CAAC,GAAG,SAAS,iBAAiB;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO;AACT;AAQO,SAAS,YAAY,SAAuB,cAAsB,WAA2B;AAClG,QAAM,UAAU,0BAA0B,YAAY;AACtD,MAAI,QAAQ,SAAS,eAAe;AAClC,WAAO,mEAAmE,QAAQ,MAAM,MAAM,OAAO;AAAA,EACvG;AACA,SAAO,yBAAyB,KAAK,MAAM,YAAY,GAAI,CAAC,MAAM,OAAO;AAC3E;AAEA,IAAM,qBAAqB,oBAAI,IAAI,CAAC,SAAS,KAAK,MAAM,KAAK,CAAC;AAQvD,SAAS,iBAAiB,MAAe,SAAkB,WAA2B;AAC3F,MAAI,OAAO,SAAS,YAAY,mBAAmB,IAAI,KAAK,KAAK,EAAE,YAAY,CAAC,EAAG,QAAO;AAC1F,MAAI,SAAS,MAAO,QAAO;AAC3B,MAAI,YAAY,UAAa,YAAY,GAAI,QAAO;AACpD,QAAM,SAAS,OAAO,OAAO;AAC7B,SAAO,OAAO,SAAS,MAAM,KAAK,UAAU,IAAI,SAAS;AAC3D;AAEA,IAAM,mBAAmB;AAOlB,IAAM,kBAA4B;AAAA,EACvC,KAAK,OAAO,iBAAiB;AAC3B,UAAM,WAAW,MAAM,OAA0B,2BAA2B,YAAY,EAAE;AAC1F,WAAO,SAAS;AAAA,EAClB;AAAA,EACA,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACjE;AAWA,eAAsB,UACpB,cACA,WACA,OAAiB,iBACiB;AAClC,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,SAAO,KAAK,IAAI,IAAI,UAAU;AAC5B,UAAM,aAAa,MAAM,KAAK,IAAI,YAAY;AAC9C,QAAI,WAAW,WAAW,UAAW,QAAO;AAC5C,UAAM,KAAK,MAAM,gBAAgB;AAAA,EACnC;AACA,SAAO;AACT;AAiBA,eAAsB,WACpB,cACA,WACA,OAAiB,iBACM;AACvB,MAAI;AACF,UAAM,aAAa,MAAM,UAAU,cAAc,WAAW,IAAI;AAChE,WAAO,aAAa,EAAE,MAAM,WAAW,WAAW,IAAI,EAAE,MAAM,gBAAgB;AAAA,EAChF,SAAS,OAAO;AACd,WAAO,EAAE,MAAM,eAAe,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,kBAAkB;AAAA,EACnG;AACF;","names":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {
|
|
2
|
+
classifyAudience
|
|
3
|
+
} from "./chunk-5HYSKH77.js";
|
|
4
|
+
|
|
5
|
+
// src/audience-names.ts
|
|
6
|
+
var BUYERS_QUESTION = `\`name\` is the name an advertiser gave a custom audience in their Meta ad account, in any language. Is it made of people who have already bought from the brand: purchasers, paying customers, clients, a customer list? People who only visited, engaged, signed up, started a checkout or are leads or prospects have not bought. A lookalike of buyers is not buyers.`;
|
|
7
|
+
var BUYERS_HELD = 0.42;
|
|
8
|
+
var LOOKALIKE_QUESTION = `\`name\` is the name an advertiser gave a custom audience in their Meta ad account, in any language. Is it a lookalike audience: new people Meta finds because they resemble a seed audience (often named "Lookalike (GB, 1%)", "LAL 3%", "Similar to\u2026")?`;
|
|
9
|
+
var LOOKALIKE_HELD = 0.4;
|
|
10
|
+
async function readAudienceNames(names, ask) {
|
|
11
|
+
const distinct = [...new Set(names.map((n) => n.trim()).filter(Boolean))];
|
|
12
|
+
if (distinct.length === 0) return () => void 0;
|
|
13
|
+
const answers = await ask(
|
|
14
|
+
distinct.flatMap((name) => [
|
|
15
|
+
{ instructions: { name, question: BUYERS_QUESTION } },
|
|
16
|
+
{ instructions: { name, question: LOOKALIKE_QUESTION } }
|
|
17
|
+
])
|
|
18
|
+
);
|
|
19
|
+
if (answers === null) return () => void 0;
|
|
20
|
+
const read = new Map(
|
|
21
|
+
distinct.map((name, i) => [
|
|
22
|
+
name,
|
|
23
|
+
{ buyers: (answers[2 * i] ?? 0) >= BUYERS_HELD, lookalike: (answers[2 * i + 1] ?? 0) >= LOOKALIKE_HELD }
|
|
24
|
+
])
|
|
25
|
+
);
|
|
26
|
+
return (name) => read.get(name.trim());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// src/commands/ads/meta/adset-viewers.ts
|
|
30
|
+
function adSetViewerRows(adSets, audiences, campaigns, readName) {
|
|
31
|
+
const campaignById = new Map(campaigns.map((campaign) => [campaign.id, campaign]));
|
|
32
|
+
return adSets.map((adSet) => ({
|
|
33
|
+
id: adSet.id,
|
|
34
|
+
name: adSet.name,
|
|
35
|
+
campaign_id: adSet.campaign_id,
|
|
36
|
+
effective_status: adSet.effective_status,
|
|
37
|
+
viewer: classifyAudience(adSet, audiences, campaignById.get(adSet.campaign_id), readName)
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
var VIEWER_TABLE_COLUMNS = [
|
|
41
|
+
"id",
|
|
42
|
+
"name",
|
|
43
|
+
"effective_status",
|
|
44
|
+
"temperature",
|
|
45
|
+
"knows",
|
|
46
|
+
"placements",
|
|
47
|
+
"why"
|
|
48
|
+
];
|
|
49
|
+
function flattenViewerRows(rows) {
|
|
50
|
+
return rows.map(({ viewer, ...row }) => ({
|
|
51
|
+
id: row.id,
|
|
52
|
+
name: row.name,
|
|
53
|
+
effective_status: row.effective_status,
|
|
54
|
+
temperature: viewer.temperature,
|
|
55
|
+
knows: viewer.knows.length > 0 ? viewer.knows.join(", ") : "nothing yet",
|
|
56
|
+
placements: viewer.placements.join(", "),
|
|
57
|
+
why: viewer.reasons.join(" ")
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
function audienceNamesOf(adSets, audiences) {
|
|
61
|
+
const refs = adSets.flatMap((adSet) => {
|
|
62
|
+
const targeting = adSet.targeting ?? {};
|
|
63
|
+
return [targeting.custom_audiences, targeting.excluded_custom_audiences].flatMap(
|
|
64
|
+
(list) => Array.isArray(list) ? list.map((ref) => ref?.name) : []
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
return [...refs, ...audiences.map((a) => a.name)].filter((n) => typeof n === "string" && n.length > 0);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export {
|
|
71
|
+
readAudienceNames,
|
|
72
|
+
adSetViewerRows,
|
|
73
|
+
VIEWER_TABLE_COLUMNS,
|
|
74
|
+
flattenViewerRows,
|
|
75
|
+
audienceNamesOf
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=chunk-NFSLRRIE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/audience-names.ts","../src/commands/ads/meta/adset-viewers.ts"],"sourcesContent":["/**\n * What a Meta custom audience's name says its members are, read by the decision model (Jev) in\n * the advertiser's own language: buyers (\"Compradores 180d\", \"Kunden-Liste\", \"購入者\"), or a\n * lookalike of a seed. It replaced a regex of the words for \"buyer\" in five languages, which read\n * \"Clientes potenciales\" (leads) as buyers and missed every other language. Thresholds were\n * measured on scripts/audience-names-evals (docs/decision-model.md).\n */\nimport type { AskNouls } from \"./engine/lib/remembered-nouls.ts\";\nimport type { AudienceNameReading } from \"./viewer-profile.ts\";\n\nexport const BUYERS_QUESTION = `\\`name\\` is the name an advertiser gave a custom audience in their Meta ad account, in any language. Is it made of people who have already bought from the brand: purchasers, paying customers, clients, a customer list? People who only visited, engaged, signed up, started a checkout or are leads or prospects have not bought. A lookalike of buyers is not buyers.`;\nconst BUYERS_HELD = 0.42;\n\nexport const LOOKALIKE_QUESTION = `\\`name\\` is the name an advertiser gave a custom audience in their Meta ad account, in any language. Is it a lookalike audience: new people Meta finds because they resemble a seed audience (often named \"Lookalike (GB, 1%)\", \"LAL 3%\", \"Similar to…\")?`;\nconst LOOKALIKE_HELD = 0.4;\n\n/** Each name's reading, in one request; undefined for every name when the model could not answer. */\nexport async function readAudienceNames(names: readonly string[], ask: AskNouls): Promise<AudienceNameReading> {\n const distinct = [...new Set(names.map((n) => n.trim()).filter(Boolean))];\n if (distinct.length === 0) return () => undefined;\n const answers = await ask(\n distinct.flatMap((name) => [\n { instructions: { name, question: BUYERS_QUESTION } },\n { instructions: { name, question: LOOKALIKE_QUESTION } },\n ]),\n );\n if (answers === null) return () => undefined;\n const read = new Map(\n distinct.map((name, i) => [\n name,\n { buyers: (answers[2 * i] ?? 0) >= BUYERS_HELD, lookalike: (answers[2 * i + 1] ?? 0) >= LOOKALIKE_HELD },\n ]),\n );\n return (name) => read.get(name.trim());\n}\n","import {\n type AudienceNameReading,\n type CustomAudienceInput,\n classifyAudience,\n type ViewerProfile,\n} from \"../../../viewer-profile.ts\";\n\ntype MetaRow = Record<string, unknown>;\n\nexport interface AdSetViewerRow {\n id: unknown;\n name: unknown;\n campaign_id: unknown;\n effective_status: unknown;\n viewer: ViewerProfile;\n}\n\n/**\n * `baker ads meta adsets --audience`: who each ad set reaches, read off its own\n * targeting, the account's audience list (for each audience's subtype) and its\n * campaign's objective, and what each audience's name says its members are\n * (`readAudienceNames`; read by subtype alone without it). The row keeps only\n * what names the ad set, so the viewer is the one thing it adds.\n */\nexport function adSetViewerRows(\n adSets: readonly MetaRow[],\n audiences: readonly CustomAudienceInput[],\n campaigns: readonly MetaRow[],\n readName?: AudienceNameReading,\n): AdSetViewerRow[] {\n const campaignById = new Map(campaigns.map((campaign) => [campaign.id, campaign]));\n return adSets.map((adSet) => ({\n id: adSet.id,\n name: adSet.name,\n campaign_id: adSet.campaign_id,\n effective_status: adSet.effective_status,\n viewer: classifyAudience(adSet, audiences, campaignById.get(adSet.campaign_id), readName),\n }));\n}\n\nexport const VIEWER_TABLE_COLUMNS = [\n \"id\",\n \"name\",\n \"effective_status\",\n \"temperature\",\n \"knows\",\n \"placements\",\n \"why\",\n] as const;\n\n/** The table and csv writers print one scalar per cell, so the viewer is spelled out column by column. */\nexport function flattenViewerRows(rows: readonly AdSetViewerRow[]): Array<Record<string, unknown>> {\n return rows.map(({ viewer, ...row }) => ({\n id: row.id,\n name: row.name,\n effective_status: row.effective_status,\n temperature: viewer.temperature,\n knows: viewer.knows.length > 0 ? viewer.knows.join(\", \") : \"nothing yet\",\n placements: viewer.placements.join(\", \"),\n why: viewer.reasons.join(\" \"),\n }));\n}\n\n/** Every audience name an ad set includes or excludes, and every name in the account's list. Pure. */\nexport function audienceNamesOf(adSets: readonly MetaRow[], audiences: readonly CustomAudienceInput[]): string[] {\n const refs = adSets.flatMap((adSet) => {\n const targeting = (adSet.targeting ?? {}) as Record<string, unknown>;\n return [targeting.custom_audiences, targeting.excluded_custom_audiences].flatMap((list) =>\n Array.isArray(list) ? list.map((ref) => (ref as { name?: unknown })?.name) : [],\n );\n });\n return [...refs, ...audiences.map((a) => a.name)].filter((n): n is string => typeof n === \"string\" && n.length > 0);\n}\n"],"mappings":";;;;;AAUO,IAAM,kBAAkB;AAC/B,IAAM,cAAc;AAEb,IAAM,qBAAqB;AAClC,IAAM,iBAAiB;AAGvB,eAAsB,kBAAkB,OAA0B,KAA6C;AAC7G,QAAM,WAAW,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC;AACxE,MAAI,SAAS,WAAW,EAAG,QAAO,MAAM;AACxC,QAAM,UAAU,MAAM;AAAA,IACpB,SAAS,QAAQ,CAAC,SAAS;AAAA,MACzB,EAAE,cAAc,EAAE,MAAM,UAAU,gBAAgB,EAAE;AAAA,MACpD,EAAE,cAAc,EAAE,MAAM,UAAU,mBAAmB,EAAE;AAAA,IACzD,CAAC;AAAA,EACH;AACA,MAAI,YAAY,KAAM,QAAO,MAAM;AACnC,QAAM,OAAO,IAAI;AAAA,IACf,SAAS,IAAI,CAAC,MAAM,MAAM;AAAA,MACxB;AAAA,MACA,EAAE,SAAS,QAAQ,IAAI,CAAC,KAAK,MAAM,aAAa,YAAY,QAAQ,IAAI,IAAI,CAAC,KAAK,MAAM,eAAe;AAAA,IACzG,CAAC;AAAA,EACH;AACA,SAAO,CAAC,SAAS,KAAK,IAAI,KAAK,KAAK,CAAC;AACvC;;;ACVO,SAAS,gBACd,QACA,WACA,WACA,UACkB;AAClB,QAAM,eAAe,IAAI,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;AACjF,SAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM;AAAA,IACnB,kBAAkB,MAAM;AAAA,IACxB,QAAQ,iBAAiB,OAAO,WAAW,aAAa,IAAI,MAAM,WAAW,GAAG,QAAQ;AAAA,EAC1F,EAAE;AACJ;AAEO,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,SAAS,kBAAkB,MAAiE;AACjG,SAAO,KAAK,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,OAAO;AAAA,IACvC,IAAI,IAAI;AAAA,IACR,MAAM,IAAI;AAAA,IACV,kBAAkB,IAAI;AAAA,IACtB,aAAa,OAAO;AAAA,IACpB,OAAO,OAAO,MAAM,SAAS,IAAI,OAAO,MAAM,KAAK,IAAI,IAAI;AAAA,IAC3D,YAAY,OAAO,WAAW,KAAK,IAAI;AAAA,IACvC,KAAK,OAAO,QAAQ,KAAK,GAAG;AAAA,EAC9B,EAAE;AACJ;AAGO,SAAS,gBAAgB,QAA4B,WAAqD;AAC/G,QAAM,OAAO,OAAO,QAAQ,CAAC,UAAU;AACrC,UAAM,YAAa,MAAM,aAAa,CAAC;AACvC,WAAO,CAAC,UAAU,kBAAkB,UAAU,yBAAyB,EAAE;AAAA,MAAQ,CAAC,SAChF,MAAM,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,QAAS,KAA4B,IAAI,IAAI,CAAC;AAAA,IAChF;AAAA,EACF,CAAC;AACD,SAAO,CAAC,GAAG,MAAM,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,MAAmB,OAAO,MAAM,YAAY,EAAE,SAAS,CAAC;AACpH;","names":[]}
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
import {
|
|
2
|
+
adFieldPlan,
|
|
3
|
+
adRows
|
|
4
|
+
} from "./chunk-BR32GHYD.js";
|
|
5
|
+
import {
|
|
6
|
+
reportError,
|
|
7
|
+
splitList
|
|
8
|
+
} from "./chunk-OIL6PU5W.js";
|
|
9
|
+
import {
|
|
10
|
+
ApiError,
|
|
11
|
+
apiPost
|
|
12
|
+
} from "./chunk-CUL3VB4L.js";
|
|
13
|
+
import {
|
|
14
|
+
registerSchema,
|
|
15
|
+
scopedWinnersSearchRequestSchema,
|
|
16
|
+
staticFormatPatternSchema,
|
|
17
|
+
winnerSearchScopeSchema,
|
|
18
|
+
winnersSortSchema,
|
|
19
|
+
winningAdNormalizer,
|
|
20
|
+
writeJson,
|
|
21
|
+
writeOutput
|
|
22
|
+
} from "./chunk-MYTDK3AL.js";
|
|
23
|
+
|
|
24
|
+
// src/commands/winning-ads/search.ts
|
|
25
|
+
import { defineCommand } from "citty";
|
|
26
|
+
var FORMAT_PATTERN_DESCRIPTION = `Comma list of static containers, the best proven ads in them from any category (\`winning-ads formats\` ranks them for a segment): ${staticFormatPatternSchema.options.join(", ")}`;
|
|
27
|
+
var STAGE_DESCRIPTION = "Comma list of where the ad is in its life: new (\u22647 days running), testing (\u226421), proven (\u226460), evergreen (longer), killed_early (stopped within 2 weeks: a lost test), retired, unverified (brand not checked recently). What competitors kept: --stage proven,evergreen";
|
|
28
|
+
var SURVIVED_TEST_DESCRIPTION = "Only the version a brand kept after testing it against other versions of the same concept: the strongest public sign it works";
|
|
29
|
+
var LANGUAGE_DESCRIPTION = "Comma list of ISO 639-1 codes (es,en) for the language the ad's copy and voiceover are in; where it ran is --country";
|
|
30
|
+
registerSchema({
|
|
31
|
+
command: "winning-ads.search",
|
|
32
|
+
description: "Search the ad-dna corpus of scored winning ads, the company's followed brands first. Returns a lean shortlist (advertiser, summary, scores, days_active/active/winner_category as proof, media_url, visual/container/mechanism, and who the ad was made for: audience_temperature/funnel_stage/advertiser_size/presumes_brand_knowledge, when known) to pick a reference to reproduce. Each search is a paid reranker + judge call: one strong search, at most one adjusted retry. Each row carries its stage (new, testing, proven, evergreen, killed_early, retired, unverified) and survived_test when it is the version its brand kept after testing; --survived-test or --stage proven,evergreen keep only what competitors kept. Only designed pictures and videos come back by default (no Google search, Shopping or app ads); --format text asks for Google search ads (their words), --all-kinds for everything. A value outside a closed list (--platform, --format, --winner-category, --awareness, --audience-temperature, --funnel-stage, --advertiser-size, --format-pattern, --stage, --sort) is refused with error.fix.validValues.",
|
|
33
|
+
args: {
|
|
34
|
+
query: { type: "string", description: "Free-text natural-language query", required: false },
|
|
35
|
+
scope: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "Which brands to draw from: followed-first (default: followed brands first, topped up from the library when too few clear the relevance floor; the whole library when the company follows nobody), followed (only brands the company follows), all (the whole shared library). Every result carries source: followed|library.",
|
|
38
|
+
required: false,
|
|
39
|
+
default: "followed-first"
|
|
40
|
+
},
|
|
41
|
+
"ref-ad-id": {
|
|
42
|
+
type: "string",
|
|
43
|
+
description: "Find ads similar to this ad id (instead of free text)",
|
|
44
|
+
required: false
|
|
45
|
+
},
|
|
46
|
+
limit: { type: "number", description: "Max results 1-100 (default 10)", required: false, default: 10 },
|
|
47
|
+
"max-per-advertiser": {
|
|
48
|
+
type: "number",
|
|
49
|
+
description: "Spread per advertiser by default: each brand's best 3 first, the rest after the other brands, none dropped. Set 1-50 to drop past N (1 = one reference per brand), 0 for rank order",
|
|
50
|
+
required: false
|
|
51
|
+
},
|
|
52
|
+
"min-relevance": { type: "number", description: "Relevance floor 0-1; trims weak matches", required: false },
|
|
53
|
+
sort: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "Order of a browse with no query: winner (default, by winner score), longest_running (by days active), newest (by first seen). Ignored when a query is given: a query ranks by relevance blended with winner score.",
|
|
56
|
+
required: false,
|
|
57
|
+
default: "winner"
|
|
58
|
+
},
|
|
59
|
+
platform: {
|
|
60
|
+
type: "string",
|
|
61
|
+
description: "Comma list: meta,linkedin,tiktok,google",
|
|
62
|
+
required: false
|
|
63
|
+
},
|
|
64
|
+
format: { type: "string", description: "Comma list: video,static,carousel,text", required: false },
|
|
65
|
+
"winner-category": {
|
|
66
|
+
type: "string",
|
|
67
|
+
description: "Comma list: winner,scaled_winner,evergreen,rising,untested,dud,\u2026",
|
|
68
|
+
required: false
|
|
69
|
+
},
|
|
70
|
+
awareness: {
|
|
71
|
+
type: "string",
|
|
72
|
+
description: "Comma list: unaware,problem_aware,solution_aware,product_aware,most_aware",
|
|
73
|
+
required: false
|
|
74
|
+
},
|
|
75
|
+
"audience-temperature": {
|
|
76
|
+
type: "string",
|
|
77
|
+
description: "Comma list of who the ad was made for: 0_cold (strangers), 1_warm_engaged (engaged, not yet visited), 2_hot_visited (visited the site), 3_customer. A cold brief takes 0_cold references.",
|
|
78
|
+
required: false
|
|
79
|
+
},
|
|
80
|
+
"funnel-stage": { type: "string", description: "Comma list: TOF,MOF,BOF", required: false },
|
|
81
|
+
"advertiser-size": { type: "string", description: "Comma list: solo,smb,mid,enterprise", required: false },
|
|
82
|
+
"exclude-brand-reliant": {
|
|
83
|
+
type: "boolean",
|
|
84
|
+
description: "Drop ads whose copy only works if the viewer already knows the brand (an unexplained logo, mascot, nickname or promise). Ads not judged yet are kept and show no presumes_brand_knowledge. Use it whenever the ad you are making is for viewers who don't know the brand.",
|
|
85
|
+
required: false,
|
|
86
|
+
default: false
|
|
87
|
+
},
|
|
88
|
+
country: {
|
|
89
|
+
type: "string",
|
|
90
|
+
description: "Comma list of ISO country codes (US,GB): ads known to run there, plus ads with no country data (every Meta ad) in that country's main language. An unknown code is refused with the codes that have ads",
|
|
91
|
+
required: false
|
|
92
|
+
},
|
|
93
|
+
language: { type: "string", description: LANGUAGE_DESCRIPTION, required: false },
|
|
94
|
+
"advertiser-id": {
|
|
95
|
+
type: "string",
|
|
96
|
+
description: "Restrict to these advertiser ids (browse one brand's winners)",
|
|
97
|
+
required: false
|
|
98
|
+
},
|
|
99
|
+
"exclude-advertiser": {
|
|
100
|
+
type: "string",
|
|
101
|
+
description: "Drop these advertiser ids, usually your own brand (a reused ad is marked already_adapted instead)",
|
|
102
|
+
required: false
|
|
103
|
+
},
|
|
104
|
+
"first-seen-after": {
|
|
105
|
+
type: "string",
|
|
106
|
+
description: "ISO date (2026-01-01) or datetime; only ads first seen after this",
|
|
107
|
+
required: false
|
|
108
|
+
},
|
|
109
|
+
"first-seen-before": {
|
|
110
|
+
type: "string",
|
|
111
|
+
description: "ISO date (2026-01-01) or datetime; only ads first seen before this",
|
|
112
|
+
required: false
|
|
113
|
+
},
|
|
114
|
+
"hook-archetype": {
|
|
115
|
+
type: "string",
|
|
116
|
+
description: "Comma list of hook SEEDS (from `winning-ads hooks`) \u2014 narrow to ads on a proven hook pattern",
|
|
117
|
+
required: false
|
|
118
|
+
},
|
|
119
|
+
"format-pattern": {
|
|
120
|
+
type: "string",
|
|
121
|
+
description: FORMAT_PATTERN_DESCRIPTION,
|
|
122
|
+
required: false
|
|
123
|
+
},
|
|
124
|
+
stage: { type: "string", description: STAGE_DESCRIPTION, required: false },
|
|
125
|
+
"survived-test": { type: "boolean", description: SURVIVED_TEST_DESCRIPTION, required: false, default: false },
|
|
126
|
+
"all-kinds": {
|
|
127
|
+
type: "boolean",
|
|
128
|
+
description: "Also return ads nobody can build a creative on: Google search text, Shopping and app ads. By default a search returns only designed pictures and videos; --format text asks for search ads alone (their words: headlines, claims, offers).",
|
|
129
|
+
required: false,
|
|
130
|
+
default: false
|
|
131
|
+
},
|
|
132
|
+
diverse: {
|
|
133
|
+
type: "boolean",
|
|
134
|
+
description: "Return one varied set (different brands, containers, hooks) instead of rank order: one reference per concept in a single call",
|
|
135
|
+
required: false,
|
|
136
|
+
default: false
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
function setNumber(body, key, value) {
|
|
141
|
+
if (value !== void 0 && value !== "") {
|
|
142
|
+
body[key] = Number(value);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function setList(target, key, value) {
|
|
146
|
+
const list = splitList(value);
|
|
147
|
+
if (list.length) {
|
|
148
|
+
target[key] = list;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function setString(target, key, value) {
|
|
152
|
+
if (value) {
|
|
153
|
+
target[key] = value;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function buildSearchBody(args) {
|
|
157
|
+
const body = {};
|
|
158
|
+
if (args.query) {
|
|
159
|
+
body.free_text_query = args.query;
|
|
160
|
+
}
|
|
161
|
+
if (args.refAdId) {
|
|
162
|
+
body.ref_ad_id = args.refAdId;
|
|
163
|
+
}
|
|
164
|
+
setString(body, "scope", args.scope);
|
|
165
|
+
setNumber(body, "limit", args.limit);
|
|
166
|
+
setNumber(body, "max_per_advertiser", args.maxPerAdvertiser);
|
|
167
|
+
setNumber(body, "min_relevance", args.minRelevance);
|
|
168
|
+
setString(body, "sort", args.sort);
|
|
169
|
+
if (args.diverse) {
|
|
170
|
+
body.diverse = true;
|
|
171
|
+
}
|
|
172
|
+
const hardFilters = {};
|
|
173
|
+
setList(hardFilters, "platform", args.platform);
|
|
174
|
+
setList(hardFilters, "format", args.format);
|
|
175
|
+
setList(hardFilters, "winner_category", args.winnerCategory);
|
|
176
|
+
setList(hardFilters, "awareness_stage", args.awareness);
|
|
177
|
+
setList(hardFilters, "audience_temperature", args.audienceTemperature);
|
|
178
|
+
setList(hardFilters, "funnel_stage", args.funnelStage);
|
|
179
|
+
setList(hardFilters, "advertiser_size", args.advertiserSize);
|
|
180
|
+
if (args.excludeBrandReliant) {
|
|
181
|
+
hardFilters.presumes_brand_knowledge = false;
|
|
182
|
+
}
|
|
183
|
+
setList(hardFilters, "country", args.country);
|
|
184
|
+
setList(hardFilters, "language", args.language?.toLowerCase());
|
|
185
|
+
setList(hardFilters, "advertiser_ids", args.advertiserId);
|
|
186
|
+
setList(hardFilters, "exclude_advertiser_ids", args.excludeAdvertiser);
|
|
187
|
+
setList(hardFilters, "hook_archetype_seeds", args.hookArchetype);
|
|
188
|
+
setList(hardFilters, "static_format_patterns", args.formatPattern);
|
|
189
|
+
setString(hardFilters, "first_seen_after", args.firstSeenAfter);
|
|
190
|
+
setString(hardFilters, "first_seen_before", args.firstSeenBefore);
|
|
191
|
+
setList(hardFilters, "lifecycle_stage", args.stage);
|
|
192
|
+
if (args.survivedTest) {
|
|
193
|
+
hardFilters.survived_test = true;
|
|
194
|
+
}
|
|
195
|
+
if (Object.keys(hardFilters).length) {
|
|
196
|
+
body.hard_filters = hardFilters;
|
|
197
|
+
}
|
|
198
|
+
return body;
|
|
199
|
+
}
|
|
200
|
+
function designedByDefault(body, opts) {
|
|
201
|
+
const filters = body.hard_filters ?? {};
|
|
202
|
+
const wantsText = Array.isArray(filters.format) && filters.format.includes("text");
|
|
203
|
+
if (opts.allKinds || wantsText) return body;
|
|
204
|
+
return { ...body, hard_filters: { ...filters, design_reference: true } };
|
|
205
|
+
}
|
|
206
|
+
function searchHints(data) {
|
|
207
|
+
const hints = [];
|
|
208
|
+
if ((data.following_count ?? 0) === 0) {
|
|
209
|
+
hints.push(
|
|
210
|
+
'The company follows no brands, so these references come from brands tracked by others and may be off-market. Follow competitors with `baker winning-ads follow-competitors "<domain,domain>"` to get on-market references, then search with --scope followed-first.'
|
|
211
|
+
);
|
|
212
|
+
} else if (data.scope === "followed" && (data.results?.length ?? 0) === 0) {
|
|
213
|
+
hints.push(
|
|
214
|
+
"No followed brand has an ad on this brief. Re-run with --scope followed-first to top up from the whole library."
|
|
215
|
+
);
|
|
216
|
+
} else if ((data.results?.length ?? 0) === 0) {
|
|
217
|
+
hints.push(
|
|
218
|
+
"No reference matched the brief and every filter. Search once more with ONE change: drop the narrowest filter (--country, --audience-temperature or one --awareness stage) or shorten the brief to the product and who it is for. For a container your concept needs, --format-pattern <container> with no query returns the best proven ads in it from any category."
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
const kept = keptHint(data.results ?? []);
|
|
222
|
+
if (kept) hints.push(kept);
|
|
223
|
+
const adapted = (data.results ?? []).filter(
|
|
224
|
+
(r) => r?.baker_uses?.ours === true
|
|
225
|
+
).length;
|
|
226
|
+
if (adapted > 0) {
|
|
227
|
+
hints.push(
|
|
228
|
+
`${adapted} of these references you already adapted into a creative (already_adapted), so they are listed last. A second creative from the same ad is a variant, not a new concept: pick another unless the user asked for one.`
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
return hints;
|
|
232
|
+
}
|
|
233
|
+
var KEPT_STAGES = /* @__PURE__ */ new Set(["proven", "evergreen"]);
|
|
234
|
+
var UNTESTED_STAGES = /* @__PURE__ */ new Set(["new", "testing"]);
|
|
235
|
+
function keptHint(results) {
|
|
236
|
+
const rows = results.map((r) => r ?? {});
|
|
237
|
+
const kept = rows.filter((r) => r.survived_test === true || KEPT_STAGES.has(String(r.stage))).length;
|
|
238
|
+
if (kept > 0 && kept < rows.length) {
|
|
239
|
+
return `${kept} of these are what competitors kept after testing (survived_test, or stage proven/evergreen): prefer them as references; a new or testing ad may still be cut.`;
|
|
240
|
+
}
|
|
241
|
+
if (kept === 0 && rows.some((r) => UNTESTED_STAGES.has(String(r.stage)))) {
|
|
242
|
+
return "None of these has outlived a test yet (stage new/testing): to reference what competitors kept, search once more with --survived-test or --stage proven,evergreen.";
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
var UNKNOWN_COUNTRY_RE = /Unknown country code\(s\): ([^.]+)\. Countries with ads: ([^.]+)\./;
|
|
247
|
+
function unknownCountryFix(message) {
|
|
248
|
+
const match = UNKNOWN_COUNTRY_RE.exec(message);
|
|
249
|
+
if (!match) {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
const unknownCountries = splitList(match[1]);
|
|
253
|
+
const validCountries = splitList(match[2]);
|
|
254
|
+
if (unknownCountries.length === 0 || validCountries.length === 0) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
action: "retry_with_a_valid_country",
|
|
259
|
+
explanation: `${unknownCountries.join(", ")} is not a country the winning-ads library holds ads for. Re-run with codes from \`validCountries\`, or drop --country to search every market.`,
|
|
260
|
+
unknownCountries,
|
|
261
|
+
validCountries
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function searchErrorFix(code, message) {
|
|
265
|
+
if (code === "UNAVAILABLE") {
|
|
266
|
+
return {
|
|
267
|
+
action: "retry_narrower_once",
|
|
268
|
+
explanation: "The library did not answer this search in time. Retry once with a shorter brief, a lower --limit or fewer filters. If it fails again, continue without a reference and say so; do not stop the creative work."
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
return unknownCountryFix(message);
|
|
272
|
+
}
|
|
273
|
+
function reportSearchError(err) {
|
|
274
|
+
const fix = err instanceof ApiError ? searchErrorFix(err.code, err.message) : null;
|
|
275
|
+
if (err instanceof ApiError && fix) {
|
|
276
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message, fix } });
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
reportError(err);
|
|
280
|
+
}
|
|
281
|
+
var FLAG_FOR_FIELD = {
|
|
282
|
+
limit: "--limit",
|
|
283
|
+
max_per_advertiser: "--max-per-advertiser",
|
|
284
|
+
min_relevance: "--min-relevance",
|
|
285
|
+
platform: "--platform",
|
|
286
|
+
format: "--format",
|
|
287
|
+
winner_category: "--winner-category",
|
|
288
|
+
awareness_stage: "--awareness",
|
|
289
|
+
audience_temperature: "--audience-temperature",
|
|
290
|
+
funnel_stage: "--funnel-stage",
|
|
291
|
+
advertiser_size: "--advertiser-size",
|
|
292
|
+
static_format_patterns: "--format-pattern",
|
|
293
|
+
first_seen_after: "--first-seen-after",
|
|
294
|
+
first_seen_before: "--first-seen-before",
|
|
295
|
+
lifecycle_stage: "--stage"
|
|
296
|
+
};
|
|
297
|
+
function flagFor(path) {
|
|
298
|
+
const field = String(path[0] === "hard_filters" ? path[1] : path[0]);
|
|
299
|
+
return FLAG_FOR_FIELD[field] ?? field;
|
|
300
|
+
}
|
|
301
|
+
function schemaRejection(body) {
|
|
302
|
+
const parsed = scopedWinnersSearchRequestSchema.safeParse(body, { reportInput: true });
|
|
303
|
+
if (parsed.success) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
const [first] = parsed.error.issues;
|
|
307
|
+
if (!first) {
|
|
308
|
+
return { message: "Invalid search" };
|
|
309
|
+
}
|
|
310
|
+
const flag = flagFor(first.path);
|
|
311
|
+
if (first.code === "invalid_value") {
|
|
312
|
+
const sameFlag = parsed.error.issues.filter((i) => i.code === "invalid_value" && flagFor(i.path) === flag);
|
|
313
|
+
const invalidValues = sameFlag.map((i) => String(i.input));
|
|
314
|
+
const validValues = first.values.map(String);
|
|
315
|
+
return {
|
|
316
|
+
message: `Unknown ${flag} value${invalidValues.length > 1 ? "s" : ""} ${invalidValues.map((v) => `"${v}"`).join(", ")}.`,
|
|
317
|
+
fix: {
|
|
318
|
+
action: "retry_with_valid_values",
|
|
319
|
+
explanation: `Re-run with values from \`validValues\` for ${flag}, or drop the flag.`,
|
|
320
|
+
flag,
|
|
321
|
+
invalidValues,
|
|
322
|
+
validValues
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
return { message: first.path.length > 0 ? `${flag}: ${first.message}` : first.message };
|
|
327
|
+
}
|
|
328
|
+
var NUMERIC_FLAGS = [
|
|
329
|
+
["--limit", "limit"],
|
|
330
|
+
["--max-per-advertiser", "maxPerAdvertiser"],
|
|
331
|
+
["--min-relevance", "minRelevance"]
|
|
332
|
+
];
|
|
333
|
+
function searchRejection(args, body) {
|
|
334
|
+
if (args.scope !== void 0 && !winnerSearchScopeSchema.safeParse(args.scope).success) {
|
|
335
|
+
return { message: `Unknown --scope "${args.scope}". Use one of: ${winnerSearchScopeSchema.options.join(", ")}.` };
|
|
336
|
+
}
|
|
337
|
+
if (args.sort !== void 0 && !winnersSortSchema.safeParse(args.sort).success) {
|
|
338
|
+
return { message: `Unknown --sort "${args.sort}". Use one of: ${winnersSortSchema.options.join(", ")}.` };
|
|
339
|
+
}
|
|
340
|
+
for (const [flag, key] of NUMERIC_FLAGS) {
|
|
341
|
+
const value = args[key];
|
|
342
|
+
if (value !== void 0 && value !== "" && Number.isNaN(Number(value))) {
|
|
343
|
+
return { message: `${flag} must be a number, got "${value}".` };
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (!("free_text_query" in body || "ref_ad_id" in body || "hard_filters" in body)) {
|
|
347
|
+
return { message: "Provide a query, --ref-ad-id, or a filter flag" };
|
|
348
|
+
}
|
|
349
|
+
return schemaRejection(body);
|
|
350
|
+
}
|
|
351
|
+
function writeSearchResult(data, opts) {
|
|
352
|
+
const rawResults = Array.isArray(data?.results) ? data.results : [];
|
|
353
|
+
const hints = searchHints(data ?? {});
|
|
354
|
+
const withHints = hints.length > 0 ? { hints } : {};
|
|
355
|
+
if (opts.output === "json") {
|
|
356
|
+
const results = adRows(rawResults, opts);
|
|
357
|
+
writeJson({
|
|
358
|
+
ok: true,
|
|
359
|
+
data: {
|
|
360
|
+
results,
|
|
361
|
+
scope: data?.scope ?? null,
|
|
362
|
+
following_count: data?.following_count ?? null,
|
|
363
|
+
pool_size: data?.pool_size ?? null,
|
|
364
|
+
match_confidence: data?.match_confidence ?? null,
|
|
365
|
+
below_floor_count: data?.below_floor_count ?? null,
|
|
366
|
+
country_coverage: data?.country_coverage ?? null
|
|
367
|
+
},
|
|
368
|
+
...withHints
|
|
369
|
+
});
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
writeOutput({ ok: true, data: rawResults, ...withHints }, opts.output, opts.fields, opts.full, winningAdNormalizer);
|
|
373
|
+
}
|
|
374
|
+
var SEARCH_TIMEOUT_MS = 12e4;
|
|
375
|
+
var searchCommand = defineCommand({
|
|
376
|
+
meta: {
|
|
377
|
+
name: "search",
|
|
378
|
+
description: "Search winning reference ads, the company's followed brands first. Start here: baker winning-ads search 'B2B SaaS before/after AI automation' --platform meta --format static --exclude-advertiser adv_123 --output md. A set of references for N concepts in one call: add --diverse --limit N. The best proven ad in one container from any category: --format-pattern comparison_table (no query needed; add --sort longest_running to order by staying power). References for viewers who don't know the brand: --audience-temperature 0_cold --exclude-brand-reliant. What competitors kept after testing: --survived-test. Each search is a paid reranker + judge call: one strong search, at most one adjusted retry."
|
|
379
|
+
},
|
|
380
|
+
args: {
|
|
381
|
+
query: { type: "positional", description: "Free-text search query", required: false },
|
|
382
|
+
scope: {
|
|
383
|
+
type: "string",
|
|
384
|
+
description: "followed-first (default) | followed | all. followed-first = the company's followed brands first, topped up from the whole library (the whole library when it follows nobody)",
|
|
385
|
+
required: false
|
|
386
|
+
},
|
|
387
|
+
"ref-ad-id": { type: "string", description: "Find ads similar to this ad id", required: false },
|
|
388
|
+
limit: {
|
|
389
|
+
type: "string",
|
|
390
|
+
description: "Max results 1-100 (default 10 \u2014 a shortlist)",
|
|
391
|
+
required: false,
|
|
392
|
+
default: "10"
|
|
393
|
+
},
|
|
394
|
+
"max-per-advertiser": {
|
|
395
|
+
type: "string",
|
|
396
|
+
description: "Spread per advertiser by default: each brand's best 3 first, the rest after the other brands, none dropped. Set 1-50 to drop past N (1 = one reference per brand), 0 for rank order",
|
|
397
|
+
required: false
|
|
398
|
+
},
|
|
399
|
+
"min-relevance": { type: "string", description: "Relevance floor 0-1", required: false },
|
|
400
|
+
sort: {
|
|
401
|
+
type: "string",
|
|
402
|
+
description: "Order of a no-query browse: winner (default) | longest_running | newest. Ignored when a query is given",
|
|
403
|
+
required: false
|
|
404
|
+
},
|
|
405
|
+
platform: {
|
|
406
|
+
type: "string",
|
|
407
|
+
description: "Comma list of platforms (meta,linkedin,tiktok,google) \u2014 search one or several",
|
|
408
|
+
required: false
|
|
409
|
+
},
|
|
410
|
+
format: { type: "string", description: "Comma list of formats (video,static,carousel,text)", required: false },
|
|
411
|
+
"winner-category": {
|
|
412
|
+
type: "string",
|
|
413
|
+
description: "Comma list of winner categories (default: all)",
|
|
414
|
+
required: false
|
|
415
|
+
},
|
|
416
|
+
awareness: { type: "string", description: "Comma list of awareness stages", required: false },
|
|
417
|
+
"audience-temperature": {
|
|
418
|
+
type: "string",
|
|
419
|
+
description: "Comma list of who the ad was made for: 0_cold | 1_warm_engaged | 2_hot_visited | 3_customer (a cold brief takes 0_cold)",
|
|
420
|
+
required: false
|
|
421
|
+
},
|
|
422
|
+
"funnel-stage": { type: "string", description: "Comma list: TOF,MOF,BOF", required: false },
|
|
423
|
+
"advertiser-size": { type: "string", description: "Comma list: solo,smb,mid,enterprise", required: false },
|
|
424
|
+
"exclude-brand-reliant": {
|
|
425
|
+
type: "boolean",
|
|
426
|
+
description: "Drop ads that only work if the viewer already knows the brand (ads not judged yet are kept). Use it when making ads for viewers who don't know the brand",
|
|
427
|
+
required: false,
|
|
428
|
+
default: false
|
|
429
|
+
},
|
|
430
|
+
country: {
|
|
431
|
+
type: "string",
|
|
432
|
+
description: "Comma list of ISO country codes (US,GB): ads known to run there, plus ads with no country data (every Meta ad) in that country's main language. An unknown code is refused with the codes that have ads",
|
|
433
|
+
required: false
|
|
434
|
+
},
|
|
435
|
+
language: { type: "string", description: LANGUAGE_DESCRIPTION, required: false },
|
|
436
|
+
"advertiser-id": { type: "string", description: "Restrict to these advertiser ids", required: false },
|
|
437
|
+
"exclude-advertiser": {
|
|
438
|
+
type: "string",
|
|
439
|
+
description: "Drop these advertiser ids, usually your own brand",
|
|
440
|
+
required: false
|
|
441
|
+
},
|
|
442
|
+
"first-seen-after": { type: "string", description: "ISO date or datetime lower bound", required: false },
|
|
443
|
+
"first-seen-before": { type: "string", description: "ISO date or datetime upper bound", required: false },
|
|
444
|
+
"hook-archetype": {
|
|
445
|
+
type: "string",
|
|
446
|
+
description: "Comma list of proven hook seeds (from `winning-ads hooks`) to narrow the search",
|
|
447
|
+
required: false
|
|
448
|
+
},
|
|
449
|
+
"format-pattern": {
|
|
450
|
+
type: "string",
|
|
451
|
+
description: FORMAT_PATTERN_DESCRIPTION,
|
|
452
|
+
required: false
|
|
453
|
+
},
|
|
454
|
+
stage: { type: "string", description: STAGE_DESCRIPTION, required: false },
|
|
455
|
+
"survived-test": { type: "boolean", description: SURVIVED_TEST_DESCRIPTION, required: false, default: false },
|
|
456
|
+
"all-kinds": {
|
|
457
|
+
type: "boolean",
|
|
458
|
+
description: "Also return Google search text, Shopping and app ads (default: designed pictures and videos only)",
|
|
459
|
+
required: false,
|
|
460
|
+
default: false
|
|
461
|
+
},
|
|
462
|
+
diverse: {
|
|
463
|
+
type: "boolean",
|
|
464
|
+
description: "One varied set (different brands, containers, hooks): a reference per concept in one call",
|
|
465
|
+
required: false,
|
|
466
|
+
default: false
|
|
467
|
+
},
|
|
468
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
469
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false },
|
|
470
|
+
full: {
|
|
471
|
+
type: "boolean",
|
|
472
|
+
description: "Include DNA detail (angle, persona, hook, awareness, industry) + reach and media kind; mechanism, days_active, active, winner_category, audience_temperature, funnel_stage, advertiser_size and presumes_brand_knowledge are in the default output",
|
|
473
|
+
required: false,
|
|
474
|
+
default: false
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
run: async ({ args }) => {
|
|
478
|
+
try {
|
|
479
|
+
const searchArgs = {
|
|
480
|
+
query: args.query,
|
|
481
|
+
scope: args.scope,
|
|
482
|
+
refAdId: args["ref-ad-id"],
|
|
483
|
+
limit: args.limit,
|
|
484
|
+
maxPerAdvertiser: args["max-per-advertiser"],
|
|
485
|
+
minRelevance: args["min-relevance"],
|
|
486
|
+
sort: args.sort,
|
|
487
|
+
platform: args.platform,
|
|
488
|
+
format: args.format,
|
|
489
|
+
winnerCategory: args["winner-category"],
|
|
490
|
+
awareness: args.awareness,
|
|
491
|
+
audienceTemperature: args["audience-temperature"],
|
|
492
|
+
funnelStage: args["funnel-stage"],
|
|
493
|
+
advertiserSize: args["advertiser-size"],
|
|
494
|
+
excludeBrandReliant: args["exclude-brand-reliant"],
|
|
495
|
+
country: args.country,
|
|
496
|
+
language: args.language,
|
|
497
|
+
advertiserId: args["advertiser-id"],
|
|
498
|
+
excludeAdvertiser: args["exclude-advertiser"],
|
|
499
|
+
firstSeenAfter: args["first-seen-after"],
|
|
500
|
+
firstSeenBefore: args["first-seen-before"],
|
|
501
|
+
hookArchetype: args["hook-archetype"],
|
|
502
|
+
formatPattern: args["format-pattern"],
|
|
503
|
+
stage: args.stage,
|
|
504
|
+
survivedTest: args["survived-test"],
|
|
505
|
+
diverse: args.diverse
|
|
506
|
+
};
|
|
507
|
+
const fieldPlan = adFieldPlan(args.fields, args.full);
|
|
508
|
+
const body = designedByDefault(buildSearchBody(searchArgs), { allKinds: args["all-kinds"] });
|
|
509
|
+
const rejection = searchRejection(searchArgs, body);
|
|
510
|
+
if (rejection) {
|
|
511
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", ...rejection } });
|
|
512
|
+
process.exit(1);
|
|
513
|
+
}
|
|
514
|
+
const data = await apiPost("/api/ad-library/winners/search", body, {
|
|
515
|
+
timeoutMs: SEARCH_TIMEOUT_MS
|
|
516
|
+
});
|
|
517
|
+
writeSearchResult(data, { output: args.output || "json", ...fieldPlan });
|
|
518
|
+
} catch (err) {
|
|
519
|
+
reportSearchError(err);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
export {
|
|
525
|
+
buildSearchBody,
|
|
526
|
+
designedByDefault,
|
|
527
|
+
searchHints,
|
|
528
|
+
unknownCountryFix,
|
|
529
|
+
searchErrorFix,
|
|
530
|
+
searchRejection,
|
|
531
|
+
searchCommand
|
|
532
|
+
};
|
|
533
|
+
//# sourceMappingURL=chunk-NOK7MSVJ.js.map
|