@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,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError,
|
|
3
|
+
apiPost
|
|
4
|
+
} from "./chunk-CUL3VB4L.js";
|
|
5
|
+
import "./chunk-6YYSUISH.js";
|
|
6
|
+
import "./chunk-I4FTS5EE.js";
|
|
7
|
+
import {
|
|
8
|
+
registerSchema,
|
|
9
|
+
videoNormalizer,
|
|
10
|
+
writeJson,
|
|
11
|
+
writeOutput
|
|
12
|
+
} from "./chunk-MYTDK3AL.js";
|
|
13
|
+
import "./chunk-YQSBHWOI.js";
|
|
14
|
+
|
|
15
|
+
// src/commands/videos/search.ts
|
|
16
|
+
import { defineCommand } from "citty";
|
|
17
|
+
registerSchema({
|
|
18
|
+
command: "videos.search",
|
|
19
|
+
description: "Search videos by text query. Only returns ready videos.",
|
|
20
|
+
args: {
|
|
21
|
+
query: { type: "string", description: "Search query text", required: true },
|
|
22
|
+
limit: { type: "number", description: "Maximum results to return", required: false, default: 20 },
|
|
23
|
+
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
function searchHints(results) {
|
|
27
|
+
const hints = [];
|
|
28
|
+
const parody = results.filter((r) => r.analysis?.tone === "parody").map((r) => r._id);
|
|
29
|
+
if (parody.length > 0) {
|
|
30
|
+
hints.push(
|
|
31
|
+
`tone: parody \u2014 ${parody.join(", ")}. These play the offer for laughs: fine for a social post, wrong as proof or on a landing page.`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
const unchecked = results.filter((r) => r.analysis?.tone === void 0).map((r) => r._id);
|
|
35
|
+
if (unchecked.length > 0) {
|
|
36
|
+
hints.push(
|
|
37
|
+
`No format/tone/productClaims yet \u2014 ${unchecked.join(", ")}. Before putting one on a page, read its transcript, scenes and people (\`baker videos get <id> --full\`) and judge it yourself: is it about the offer, is it sincere, and who is speaking?`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
return hints.length > 0 ? hints : void 0;
|
|
41
|
+
}
|
|
42
|
+
var searchCommand = defineCommand({
|
|
43
|
+
meta: {
|
|
44
|
+
name: "search",
|
|
45
|
+
description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
|
|
46
|
+
},
|
|
47
|
+
args: {
|
|
48
|
+
query: { type: "positional", description: "Search query text", required: false },
|
|
49
|
+
limit: { type: "string", description: "Max results (default 20)", required: false },
|
|
50
|
+
tags: { type: "string", description: "Comma-separated tags to filter by", required: false },
|
|
51
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
52
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false },
|
|
53
|
+
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
54
|
+
},
|
|
55
|
+
run: async ({ args }) => {
|
|
56
|
+
try {
|
|
57
|
+
const query = args.query;
|
|
58
|
+
if (!query) {
|
|
59
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Search query is required" } });
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const body = { query };
|
|
63
|
+
if (args.limit) {
|
|
64
|
+
body.limit = Number(args.limit);
|
|
65
|
+
}
|
|
66
|
+
if (args.tags) {
|
|
67
|
+
body.tags = args.tags.split(",").filter(Boolean);
|
|
68
|
+
}
|
|
69
|
+
const data = await apiPost("/api/videos/search", body);
|
|
70
|
+
writeOutput(
|
|
71
|
+
{ ok: true, data, hints: searchHints(data) },
|
|
72
|
+
args.output || "json",
|
|
73
|
+
args.fields ? args.fields.split(",") : void 0,
|
|
74
|
+
args.full,
|
|
75
|
+
videoNormalizer
|
|
76
|
+
);
|
|
77
|
+
} catch (err) {
|
|
78
|
+
if (err instanceof ApiError) {
|
|
79
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
export {
|
|
88
|
+
searchCommand,
|
|
89
|
+
searchHints
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=search-BWE3OPOY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/videos/search.ts"],"sourcesContent":["import type { VideosSearchRequest, VideosSearchResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { type OutputFormat, videoNormalizer, writeJson, writeOutput } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\n\nregisterSchema({\n command: \"videos.search\",\n description: \"Search videos by text query. Only returns ready videos.\",\n args: {\n query: { type: \"string\", description: \"Search query text\", required: true },\n limit: { type: \"number\", description: \"Maximum results to return\", required: false, default: 20 },\n tags: { type: \"string\", description: \"Comma-separated tags to filter by\", required: false },\n },\n});\n\n/**\n * A parody clip reads like any other hit — on-brand, phone-shot, often naming\n * the offer — and was put on a landing's reviews section as if it were one.\n * Named here because the pick is made from this list.\n */\nexport function searchHints(results: VideosSearchResponse): string[] | undefined {\n const hints: string[] = [];\n const parody = results.filter((r) => r.analysis?.tone === \"parody\").map((r) => r._id);\n if (parody.length > 0) {\n hints.push(\n `tone: parody — ${parody.join(\", \")}. These play the offer for laughs: fine for a social post, wrong as proof or on a landing page.`,\n );\n }\n // Catalogued before format/tone/productClaims existed. A missing tone is\n // unknown, not sincere — the same tests apply, read from the clip itself.\n const unchecked = results.filter((r) => r.analysis?.tone === undefined).map((r) => r._id);\n if (unchecked.length > 0) {\n hints.push(\n `No format/tone/productClaims yet — ${unchecked.join(\", \")}. Before putting one on a page, read its transcript, scenes and people (\\`baker videos get <id> --full\\`) and judge it yourself: is it about the offer, is it sincere, and who is speaking?`,\n );\n }\n return hints.length > 0 ? hints : undefined;\n}\n\nexport const searchCommand = defineCommand({\n meta: {\n name: \"search\",\n description:\n \"Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial\",\n },\n args: {\n query: { type: \"positional\", description: \"Search query text\", required: false },\n limit: { type: \"string\", description: \"Max results (default 20)\", required: false },\n tags: { type: \"string\", description: \"Comma-separated tags to filter by\", required: false },\n output: { type: \"string\", description: \"Output format: json|files|md\", required: false, default: \"json\" },\n fields: { type: \"string\", description: \"Comma-separated field names to include\", required: false },\n full: { type: \"boolean\", description: \"Include full metadata\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const query = args.query as string | undefined;\n if (!query) {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message: \"Search query is required\" } });\n process.exit(1);\n }\n\n const body: VideosSearchRequest = { query };\n if (args.limit) {\n body.limit = Number(args.limit);\n }\n if (args.tags) {\n body.tags = (args.tags as string).split(\",\").filter(Boolean);\n }\n\n const data = await apiPost<VideosSearchResponse>(\"/api/videos/search\", body);\n writeOutput(\n { ok: true, data, hints: searchHints(data) },\n (args.output as OutputFormat) || \"json\",\n args.fields ? args.fields.split(\",\") : undefined,\n args.full as boolean,\n videoNormalizer,\n );\n } catch (err) {\n if (err instanceof ApiError) {\n writeJson({ ok: false, error: { code: err.code, message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAK9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,UAAU,aAAa,qBAAqB,UAAU,KAAK;AAAA,IAC1E,OAAO,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,OAAO,SAAS,GAAG;AAAA,IAChG,MAAM,EAAE,MAAM,UAAU,aAAa,qCAAqC,UAAU,MAAM;AAAA,EAC5F;AACF,CAAC;AAOM,SAAS,YAAY,SAAqD;AAC/E,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAS,QAAQ,OAAO,CAAC,MAAM,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AACpF,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM;AAAA,MACJ,uBAAkB,OAAO,KAAK,IAAI,CAAC;AAAA,IACrC;AAAA,EACF;AAGA,QAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,UAAU,SAAS,MAAS,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AACxF,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM;AAAA,MACJ,2CAAsC,UAAU,KAAK,IAAI,CAAC;AAAA,IAC5D;AAAA,EACF;AACA,SAAO,MAAM,SAAS,IAAI,QAAQ;AACpC;AAEO,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,aAAa,qBAAqB,UAAU,MAAM;AAAA,IAC/E,OAAO,EAAE,MAAM,UAAU,aAAa,4BAA4B,UAAU,MAAM;AAAA,IAClF,MAAM,EAAE,MAAM,UAAU,aAAa,qCAAqC,UAAU,MAAM;AAAA,IAC1F,QAAQ,EAAE,MAAM,UAAU,aAAa,gCAAgC,UAAU,OAAO,SAAS,OAAO;AAAA,IACxG,QAAQ,EAAE,MAAM,UAAU,aAAa,0CAA0C,UAAU,MAAM;AAAA,IACjG,MAAM,EAAE,MAAM,WAAW,aAAa,yBAAyB,UAAU,OAAO,SAAS,MAAM;AAAA,EACjG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,QAAQ,KAAK;AACnB,UAAI,CAAC,OAAO;AACV,kBAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,oBAAoB,SAAS,2BAA2B,EAAE,CAAC;AACjG,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,OAA4B,EAAE,MAAM;AAC1C,UAAI,KAAK,OAAO;AACd,aAAK,QAAQ,OAAO,KAAK,KAAK;AAAA,MAChC;AACA,UAAI,KAAK,MAAM;AACb,aAAK,OAAQ,KAAK,KAAgB,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,MAC7D;AAEA,YAAM,OAAO,MAAM,QAA8B,sBAAsB,IAAI;AAC3E;AAAA,QACE,EAAE,IAAI,MAAM,MAAM,OAAO,YAAY,IAAI,EAAE;AAAA,QAC1C,KAAK,UAA2B;AAAA,QACjC,KAAK,SAAS,KAAK,OAAO,MAAM,GAAG,IAAI;AAAA,QACvC,KAAK;AAAA,QACL;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,eAAe,UAAU;AAC3B,kBAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;AACxE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,gBAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,kBAAkB,SAAS,mBAAmB,EAAE,CAAC;AACvF,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError,
|
|
3
|
+
apiPost
|
|
4
|
+
} from "./chunk-CUL3VB4L.js";
|
|
5
|
+
import "./chunk-6YYSUISH.js";
|
|
6
|
+
import "./chunk-I4FTS5EE.js";
|
|
7
|
+
import {
|
|
8
|
+
registerSchema,
|
|
9
|
+
writeJson,
|
|
10
|
+
writeOutput
|
|
11
|
+
} from "./chunk-MYTDK3AL.js";
|
|
12
|
+
import "./chunk-YQSBHWOI.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/images/search.ts
|
|
15
|
+
import { defineCommand } from "citty";
|
|
16
|
+
registerSchema({
|
|
17
|
+
command: "images.search",
|
|
18
|
+
description: "Search images by text query. Only returns ready images.",
|
|
19
|
+
args: {
|
|
20
|
+
query: { type: "string", description: "Search query text", required: true },
|
|
21
|
+
limit: { type: "number", description: "Maximum results to return", required: false, default: 5 },
|
|
22
|
+
"min-score": { type: "number", description: "Minimum relevance score (0-1)", required: false },
|
|
23
|
+
"aspect-ratio": {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Filter by aspect ratio (1:1, 16:9, 9:16, 2:3, 3:4, 1:2, 2:1, 4:5, 3:2, 4:3)",
|
|
26
|
+
required: false
|
|
27
|
+
},
|
|
28
|
+
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
var searchCommand = defineCommand({
|
|
32
|
+
meta: {
|
|
33
|
+
name: "search",
|
|
34
|
+
description: "Semantic search images by text query. Uses hybrid BM25 + vector + reranking. Example: baker images search 'hero banner' --aspect-ratio 16:9 --tags logo"
|
|
35
|
+
},
|
|
36
|
+
args: {
|
|
37
|
+
query: { type: "positional", description: "Search query text", required: false },
|
|
38
|
+
limit: { type: "string", description: "Max results (default 5)", required: false },
|
|
39
|
+
"min-score": { type: "string", description: "Minimum relevance score (0-1)", required: false },
|
|
40
|
+
"aspect-ratio": {
|
|
41
|
+
type: "string",
|
|
42
|
+
description: "Filter by aspect ratio (1:1, 16:9, 9:16, 2:3, 3:4, 1:2, 2:1, 4:5, 3:2, 4:3)",
|
|
43
|
+
required: false
|
|
44
|
+
},
|
|
45
|
+
tags: { type: "string", description: "Comma-separated tags to filter by", required: false },
|
|
46
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
47
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false },
|
|
48
|
+
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
49
|
+
},
|
|
50
|
+
run: async ({ args }) => {
|
|
51
|
+
process.stderr.write("[deprecated] `baker images search` \u2192 use `baker images library` (removed in next minor).\n");
|
|
52
|
+
try {
|
|
53
|
+
const query = args.query;
|
|
54
|
+
if (!query) {
|
|
55
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Search query is required" } });
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const body = { query };
|
|
59
|
+
if (args.limit) {
|
|
60
|
+
body.limit = Number(args.limit);
|
|
61
|
+
}
|
|
62
|
+
if (args["aspect-ratio"]) {
|
|
63
|
+
body.aspectRatio = args["aspect-ratio"];
|
|
64
|
+
}
|
|
65
|
+
if (args.tags) {
|
|
66
|
+
body.tags = args.tags.split(",").filter(Boolean);
|
|
67
|
+
}
|
|
68
|
+
let data = await apiPost("/api/images/search", body);
|
|
69
|
+
const minScore = args["min-score"] ? Number(args["min-score"]) : void 0;
|
|
70
|
+
if (minScore !== void 0) {
|
|
71
|
+
data = data.filter((r) => typeof r.score === "number" && r.score >= minScore);
|
|
72
|
+
}
|
|
73
|
+
writeOutput(
|
|
74
|
+
{ ok: true, data },
|
|
75
|
+
args.output || "json",
|
|
76
|
+
args.fields ? args.fields.split(",") : void 0,
|
|
77
|
+
args.full
|
|
78
|
+
);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
if (err instanceof ApiError) {
|
|
81
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
export {
|
|
90
|
+
searchCommand
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=search-EYYAOZND.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/images/search.ts"],"sourcesContent":["import type { ImagesSearchResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { type OutputFormat, writeJson, writeOutput } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\n\nregisterSchema({\n command: \"images.search\",\n description: \"Search images by text query. Only returns ready images.\",\n args: {\n query: { type: \"string\", description: \"Search query text\", required: true },\n limit: { type: \"number\", description: \"Maximum results to return\", required: false, default: 5 },\n \"min-score\": { type: \"number\", description: \"Minimum relevance score (0-1)\", required: false },\n \"aspect-ratio\": {\n type: \"string\",\n description: \"Filter by aspect ratio (1:1, 16:9, 9:16, 2:3, 3:4, 1:2, 2:1, 4:5, 3:2, 4:3)\",\n required: false,\n },\n tags: { type: \"string\", description: \"Comma-separated tags to filter by\", required: false },\n },\n});\n\nexport const searchCommand = defineCommand({\n meta: {\n name: \"search\",\n description:\n \"Semantic search images by text query. Uses hybrid BM25 + vector + reranking. Example: baker images search 'hero banner' --aspect-ratio 16:9 --tags logo\",\n },\n args: {\n query: { type: \"positional\", description: \"Search query text\", required: false },\n limit: { type: \"string\", description: \"Max results (default 5)\", required: false },\n \"min-score\": { type: \"string\", description: \"Minimum relevance score (0-1)\", required: false },\n \"aspect-ratio\": {\n type: \"string\",\n description: \"Filter by aspect ratio (1:1, 16:9, 9:16, 2:3, 3:4, 1:2, 2:1, 4:5, 3:2, 4:3)\",\n required: false,\n },\n tags: { type: \"string\", description: \"Comma-separated tags to filter by\", required: false },\n output: { type: \"string\", description: \"Output format: json|files|md\", required: false, default: \"json\" },\n fields: { type: \"string\", description: \"Comma-separated field names to include\", required: false },\n full: { type: \"boolean\", description: \"Include full metadata\", required: false, default: false },\n },\n run: async ({ args }) => {\n process.stderr.write(\"[deprecated] `baker images search` → use `baker images library` (removed in next minor).\\n\");\n try {\n const query = args.query as string | undefined;\n if (!query) {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message: \"Search query is required\" } });\n process.exit(1);\n }\n\n const body: Record<string, unknown> = { query };\n if (args.limit) {\n body.limit = Number(args.limit);\n }\n if (args[\"aspect-ratio\"]) {\n body.aspectRatio = args[\"aspect-ratio\"];\n }\n if (args.tags) {\n body.tags = (args.tags as string).split(\",\").filter(Boolean);\n }\n\n let data = await apiPost<ImagesSearchResponse>(\"/api/images/search\", body);\n const minScore = args[\"min-score\"] ? Number(args[\"min-score\"]) : undefined;\n if (minScore !== undefined) {\n data = data.filter((r) => typeof r.score === \"number\" && r.score >= minScore);\n }\n writeOutput(\n { ok: true, data },\n (args.output as OutputFormat) || \"json\",\n args.fields ? args.fields.split(\",\") : undefined,\n args.full as boolean,\n );\n } catch (err) {\n if (err instanceof ApiError) {\n writeJson({ ok: false, error: { code: err.code, message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import {
|
|
2
|
+
reportError
|
|
3
|
+
} from "./chunk-OIL6PU5W.js";
|
|
4
|
+
import {
|
|
5
|
+
apiGet
|
|
6
|
+
} from "./chunk-CUL3VB4L.js";
|
|
7
|
+
import "./chunk-6YYSUISH.js";
|
|
8
|
+
import "./chunk-I4FTS5EE.js";
|
|
9
|
+
import {
|
|
10
|
+
registerSchema,
|
|
11
|
+
searchCopyPartKindSchema,
|
|
12
|
+
writeJson
|
|
13
|
+
} from "./chunk-MYTDK3AL.js";
|
|
14
|
+
import "./chunk-YQSBHWOI.js";
|
|
15
|
+
|
|
16
|
+
// src/commands/winning-ads/search-copy.ts
|
|
17
|
+
import { defineCommand } from "citty";
|
|
18
|
+
var DESCRIPTION = "What one brand says on Google Search, read from its search ads: every headline with its hook (category, brand, free, price_discount, outcome, proof, new_timely, comparison, audience, location, feature, call_to_action, question), descriptions, sitelinks and callouts, each `running` or `dropped` (every ad that carried it has stopped: what the brand stopped paying for), with how many ads carried it and the longest any ran. Plus the hook mix of running vs dropped headlines and the headlines that name a rival. Each list opens with its first --limit rows; `part_totals` says how many there are in all, and `--part <kind> --offset <n>` reads the next page of one list (`next_offset` until the end). Compact by default; --running keeps what still runs; --full adds dates, the addresses the ads show and running counts. Google publishes no search ad's destination, only the address printed on it, so a `landing` is that address and may not be a real page.";
|
|
19
|
+
registerSchema({
|
|
20
|
+
command: "winning-ads.search-copy",
|
|
21
|
+
description: DESCRIPTION,
|
|
22
|
+
args: {
|
|
23
|
+
advertiser: { type: "string", description: "Advertiser id (from `advertisers` or `following`)", required: true },
|
|
24
|
+
limit: { type: "number", description: "Rows per list 1-100 (default 15)", required: false, default: 15 },
|
|
25
|
+
part: {
|
|
26
|
+
type: "string",
|
|
27
|
+
description: "Read one list a page at a time: headlines|descriptions|sitelinks|callouts",
|
|
28
|
+
required: false
|
|
29
|
+
},
|
|
30
|
+
offset: { type: "number", description: "With --part: rows to skip (the last page's next_offset)", required: false },
|
|
31
|
+
running: { type: "boolean", description: "Only what still runs", required: false, default: false },
|
|
32
|
+
full: { type: "boolean", description: "Dates, the addresses the ads show and running counts", required: false }
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
var PART_KINDS = searchCopyPartKindSchema.options;
|
|
36
|
+
var keep = (running) => (p) => !running || p.status === "running";
|
|
37
|
+
function compactSearchCopy(copy, opts) {
|
|
38
|
+
const brief = (p) => ({ text: p.text, status: p.status, ads: p.ads });
|
|
39
|
+
return {
|
|
40
|
+
advertiser_id: copy.advertiser_id,
|
|
41
|
+
totals: copy.totals,
|
|
42
|
+
...copy.part_totals ? { part_totals: copy.part_totals } : {},
|
|
43
|
+
headlines: copy.headlines.filter(keep(opts.running)).map((h) => ({
|
|
44
|
+
text: h.text,
|
|
45
|
+
hook: h.hook,
|
|
46
|
+
status: h.status,
|
|
47
|
+
ads: h.ads,
|
|
48
|
+
longest_days: h.longest_days,
|
|
49
|
+
landing: h.landing_pages[0] ?? null,
|
|
50
|
+
ad_id: h.example_ad_id,
|
|
51
|
+
...h.names_rival ? { names_rival: true } : {}
|
|
52
|
+
})),
|
|
53
|
+
descriptions: copy.descriptions.filter(keep(opts.running)).map(brief),
|
|
54
|
+
sitelinks: copy.sitelinks.filter(keep(opts.running)).map(brief),
|
|
55
|
+
callouts: copy.callouts.filter(keep(opts.running)).map(brief),
|
|
56
|
+
hooks: copy.hooks,
|
|
57
|
+
rival_headlines: copy.rival_headlines
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function searchCopyView(copy, opts) {
|
|
61
|
+
if (!opts.full) return compactSearchCopy(copy, { running: opts.running });
|
|
62
|
+
if (!opts.running) return copy;
|
|
63
|
+
const headlines = copy.headlines.filter(keep(true));
|
|
64
|
+
const live = new Set(headlines.map((h) => h.text));
|
|
65
|
+
return {
|
|
66
|
+
...copy,
|
|
67
|
+
headlines,
|
|
68
|
+
descriptions: copy.descriptions.filter(keep(true)),
|
|
69
|
+
sitelinks: copy.sitelinks.filter(keep(true)),
|
|
70
|
+
callouts: copy.callouts.filter(keep(true)),
|
|
71
|
+
rival_headlines: copy.rival_headlines.filter((text) => live.has(text))
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function searchCopyPageView(page, opts) {
|
|
75
|
+
const end = page.offset + page.parts.length;
|
|
76
|
+
const parts = page.parts.filter((p) => !opts.running || p.status === "running");
|
|
77
|
+
return {
|
|
78
|
+
advertiser_id: page.advertiser_id,
|
|
79
|
+
part: page.part,
|
|
80
|
+
offset: page.offset,
|
|
81
|
+
total: page.total,
|
|
82
|
+
next_offset: end < page.total ? end : null,
|
|
83
|
+
parts: opts.full ? parts : parts.map((p) => ({ text: p.text, ...p.hook ? { hook: p.hook } : {}, status: p.status, ads: p.ads }))
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function searchCopyHints(copy) {
|
|
87
|
+
if (copy.totals.ads === 0) {
|
|
88
|
+
return [
|
|
89
|
+
'The library holds no Google search ads for this brand. Follow it on Google by its website (`baker winning-ads follow "<brand website>"`) and read again after the scan; for a one-off look, `baker research google-ads <domain> --copy`.'
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
const hints = [];
|
|
93
|
+
const unread = copy.totals.ads - copy.totals.read;
|
|
94
|
+
if (unread > 0) {
|
|
95
|
+
hints.push(
|
|
96
|
+
`${unread} of ${copy.totals.ads} search ads are not read yet (extracted before their parts were read); the lists cover the other ${copy.totals.read}.`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
hints.push(
|
|
100
|
+
"`dropped` is inferred: Google dates ads, not headlines. Read one ad whole with `baker winning-ads content <ad_id> --platform google`."
|
|
101
|
+
);
|
|
102
|
+
for (const kind of PART_KINDS) {
|
|
103
|
+
const listed = copy[kind].length;
|
|
104
|
+
const total = copy.part_totals?.[kind] ?? listed;
|
|
105
|
+
if (total > listed) {
|
|
106
|
+
hints.push(
|
|
107
|
+
`${kind}: ${listed} of ${total} listed. Next page: \`baker winning-ads search-copy ${copy.advertiser_id} --part ${kind} --offset ${listed}\` \u2014 never call ${listed} the whole list.`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return hints;
|
|
112
|
+
}
|
|
113
|
+
var searchCopyCommand = defineCommand({
|
|
114
|
+
meta: {
|
|
115
|
+
name: "search-copy",
|
|
116
|
+
description: "What one brand says on Google Search: headlines with their hooks, descriptions, sitelinks and callouts, running or dropped. Start here: baker winning-ads search-copy adv_123 --running \xB7 next page of one list: --part sitelinks --offset 15"
|
|
117
|
+
},
|
|
118
|
+
args: {
|
|
119
|
+
advertiser: { type: "positional", description: "Advertiser id", required: true },
|
|
120
|
+
limit: { type: "string", description: "Rows per list 1-100 (default 15)", required: false },
|
|
121
|
+
part: {
|
|
122
|
+
type: "string",
|
|
123
|
+
description: "One list a page at a time: headlines|descriptions|sitelinks|callouts",
|
|
124
|
+
required: false
|
|
125
|
+
},
|
|
126
|
+
offset: { type: "string", description: "With --part: rows to skip (the last page's next_offset)", required: false },
|
|
127
|
+
running: { type: "boolean", description: "Only what still runs", required: false, default: false },
|
|
128
|
+
full: { type: "boolean", description: "Dates, every landing page and running counts", required: false }
|
|
129
|
+
},
|
|
130
|
+
run: async ({ args }) => {
|
|
131
|
+
try {
|
|
132
|
+
const params = { id: String(args.advertiser) };
|
|
133
|
+
if (args.limit) params.limit = String(args.limit);
|
|
134
|
+
if (args.part) {
|
|
135
|
+
const page = await apiGet("/api/ad-library/advertiser-search-copy/page", {
|
|
136
|
+
...params,
|
|
137
|
+
part: String(args.part),
|
|
138
|
+
offset: String(args.offset ?? 0)
|
|
139
|
+
});
|
|
140
|
+
const view = searchCopyPageView(page, { full: Boolean(args.full), running: Boolean(args.running) });
|
|
141
|
+
writeJson({
|
|
142
|
+
ok: true,
|
|
143
|
+
data: view,
|
|
144
|
+
hints: view.next_offset === null ? [`That was the last of ${page.total} ${page.part}.`] : [
|
|
145
|
+
`Next page: \`baker winning-ads search-copy ${page.advertiser_id} --part ${page.part} --offset ${view.next_offset}\``
|
|
146
|
+
]
|
|
147
|
+
});
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const copy = await apiGet("/api/ad-library/advertiser-search-copy", params);
|
|
151
|
+
writeJson({
|
|
152
|
+
ok: true,
|
|
153
|
+
data: searchCopyView(copy, { full: Boolean(args.full), running: Boolean(args.running) }),
|
|
154
|
+
hints: searchCopyHints(copy)
|
|
155
|
+
});
|
|
156
|
+
} catch (err) {
|
|
157
|
+
reportError(err);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
export {
|
|
162
|
+
compactSearchCopy,
|
|
163
|
+
searchCopyCommand,
|
|
164
|
+
searchCopyHints,
|
|
165
|
+
searchCopyPageView,
|
|
166
|
+
searchCopyView
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=search-copy-VKQ2OOBM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/winning-ads/search-copy.ts"],"sourcesContent":["import { type SearchCopyPageResponse, type SearchCopyResponse, searchCopyPartKindSchema } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError } from \"./shared.ts\";\n\nconst DESCRIPTION =\n \"What one brand says on Google Search, read from its search ads: every headline with its hook (category, brand, free, price_discount, outcome, proof, new_timely, comparison, audience, location, feature, call_to_action, question), descriptions, sitelinks and callouts, each `running` or `dropped` (every ad that carried it has stopped: what the brand stopped paying for), with how many ads carried it and the longest any ran. Plus the hook mix of running vs dropped headlines and the headlines that name a rival. Each list opens with its first --limit rows; `part_totals` says how many there are in all, and `--part <kind> --offset <n>` reads the next page of one list (`next_offset` until the end). Compact by default; --running keeps what still runs; --full adds dates, the addresses the ads show and running counts. Google publishes no search ad's destination, only the address printed on it, so a `landing` is that address and may not be a real page.\";\n\nregisterSchema({\n command: \"winning-ads.search-copy\",\n description: DESCRIPTION,\n args: {\n advertiser: { type: \"string\", description: \"Advertiser id (from `advertisers` or `following`)\", required: true },\n limit: { type: \"number\", description: \"Rows per list 1-100 (default 15)\", required: false, default: 15 },\n part: {\n type: \"string\",\n description: \"Read one list a page at a time: headlines|descriptions|sitelinks|callouts\",\n required: false,\n },\n offset: { type: \"number\", description: \"With --part: rows to skip (the last page's next_offset)\", required: false },\n running: { type: \"boolean\", description: \"Only what still runs\", required: false, default: false },\n full: { type: \"boolean\", description: \"Dates, the addresses the ads show and running counts\", required: false },\n },\n});\n\ntype Part = SearchCopyResponse[\"sitelinks\"][number];\n\nconst PART_KINDS = searchCopyPartKindSchema.options;\n\nconst keep = (running: boolean) => (p: Part) => !running || p.status === \"running\";\n\n/** Per part, what a search strategy reads: the words, running or dropped, and how widely. */\nexport function compactSearchCopy(copy: SearchCopyResponse, opts: { running: boolean }) {\n const brief = (p: Part) => ({ text: p.text, status: p.status, ads: p.ads });\n return {\n advertiser_id: copy.advertiser_id,\n totals: copy.totals,\n ...(copy.part_totals ? { part_totals: copy.part_totals } : {}),\n headlines: copy.headlines.filter(keep(opts.running)).map((h) => ({\n text: h.text,\n hook: h.hook,\n status: h.status,\n ads: h.ads,\n longest_days: h.longest_days,\n landing: h.landing_pages[0] ?? null,\n ad_id: h.example_ad_id,\n ...(h.names_rival ? { names_rival: true } : {}),\n })),\n descriptions: copy.descriptions.filter(keep(opts.running)).map(brief),\n sitelinks: copy.sitelinks.filter(keep(opts.running)).map(brief),\n callouts: copy.callouts.filter(keep(opts.running)).map(brief),\n hooks: copy.hooks,\n rival_headlines: copy.rival_headlines,\n };\n}\n\n/** What `search-copy` prints: `--running` narrows the full view as much as the compact one. */\nexport function searchCopyView(copy: SearchCopyResponse, opts: { full: boolean; running: boolean }) {\n if (!opts.full) return compactSearchCopy(copy, { running: opts.running });\n if (!opts.running) return copy;\n const headlines = copy.headlines.filter(keep(true));\n const live = new Set(headlines.map((h) => h.text));\n return {\n ...copy,\n headlines,\n descriptions: copy.descriptions.filter(keep(true)),\n sitelinks: copy.sitelinks.filter(keep(true)),\n callouts: copy.callouts.filter(keep(true)),\n rival_headlines: copy.rival_headlines.filter((text) => live.has(text)),\n };\n}\n\n/**\n * One page of one kind of part (`--part`): compact rows like the lists above\n * (a headline keeps its hook), and `next_offset`, null past the last page.\n */\nexport function searchCopyPageView(page: SearchCopyPageResponse, opts: { full: boolean; running: boolean }) {\n const end = page.offset + page.parts.length;\n const parts = page.parts.filter((p) => !opts.running || p.status === \"running\");\n return {\n advertiser_id: page.advertiser_id,\n part: page.part,\n offset: page.offset,\n total: page.total,\n next_offset: end < page.total ? end : null,\n parts: opts.full\n ? parts\n : parts.map((p) => ({ text: p.text, ...(p.hook ? { hook: p.hook } : {}), status: p.status, ads: p.ads })),\n };\n}\n\nexport function searchCopyHints(copy: SearchCopyResponse): string[] {\n if (copy.totals.ads === 0) {\n return [\n 'The library holds no Google search ads for this brand. Follow it on Google by its website (`baker winning-ads follow \"<brand website>\"`) and read again after the scan; for a one-off look, `baker research google-ads <domain> --copy`.',\n ];\n }\n const hints: string[] = [];\n const unread = copy.totals.ads - copy.totals.read;\n if (unread > 0) {\n hints.push(\n `${unread} of ${copy.totals.ads} search ads are not read yet (extracted before their parts were read); the lists cover the other ${copy.totals.read}.`,\n );\n }\n hints.push(\n \"`dropped` is inferred: Google dates ads, not headlines. Read one ad whole with `baker winning-ads content <ad_id> --platform google`.\",\n );\n for (const kind of PART_KINDS) {\n const listed = copy[kind].length;\n const total = copy.part_totals?.[kind] ?? listed;\n if (total > listed) {\n hints.push(\n `${kind}: ${listed} of ${total} listed. Next page: \\`baker winning-ads search-copy ${copy.advertiser_id} --part ${kind} --offset ${listed}\\` — never call ${listed} the whole list.`,\n );\n }\n }\n return hints;\n}\n\nexport const searchCopyCommand = defineCommand({\n meta: {\n name: \"search-copy\",\n description:\n \"What one brand says on Google Search: headlines with their hooks, descriptions, sitelinks and callouts, running or dropped. Start here: baker winning-ads search-copy adv_123 --running · next page of one list: --part sitelinks --offset 15\",\n },\n args: {\n advertiser: { type: \"positional\", description: \"Advertiser id\", required: true },\n limit: { type: \"string\", description: \"Rows per list 1-100 (default 15)\", required: false },\n part: {\n type: \"string\",\n description: \"One list a page at a time: headlines|descriptions|sitelinks|callouts\",\n required: false,\n },\n offset: { type: \"string\", description: \"With --part: rows to skip (the last page's next_offset)\", required: false },\n running: { type: \"boolean\", description: \"Only what still runs\", required: false, default: false },\n full: { type: \"boolean\", description: \"Dates, every landing page and running counts\", required: false },\n },\n run: async ({ args }) => {\n try {\n const params: Record<string, string> = { id: String(args.advertiser) };\n if (args.limit) params.limit = String(args.limit);\n if (args.part) {\n const page = await apiGet<SearchCopyPageResponse>(\"/api/ad-library/advertiser-search-copy/page\", {\n ...params,\n part: String(args.part),\n offset: String(args.offset ?? 0),\n });\n const view = searchCopyPageView(page, { full: Boolean(args.full), running: Boolean(args.running) });\n writeJson({\n ok: true,\n data: view,\n hints:\n view.next_offset === null\n ? [`That was the last of ${page.total} ${page.part}.`]\n : [\n `Next page: \\`baker winning-ads search-copy ${page.advertiser_id} --part ${page.part} --offset ${view.next_offset}\\``,\n ],\n });\n return;\n }\n const copy = await apiGet<SearchCopyResponse>(\"/api/ad-library/advertiser-search-copy\", params);\n writeJson({\n ok: true,\n data: searchCopyView(copy, { full: Boolean(args.full), running: Boolean(args.running) }),\n hints: searchCopyHints(copy),\n });\n } catch (err) {\n reportError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAM9B,IAAM,cACJ;AAEF,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,YAAY,EAAE,MAAM,UAAU,aAAa,qDAAqD,UAAU,KAAK;AAAA,IAC/G,OAAO,EAAE,MAAM,UAAU,aAAa,oCAAoC,UAAU,OAAO,SAAS,GAAG;AAAA,IACvG,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ,EAAE,MAAM,UAAU,aAAa,2DAA2D,UAAU,MAAM;AAAA,IAClH,SAAS,EAAE,MAAM,WAAW,aAAa,wBAAwB,UAAU,OAAO,SAAS,MAAM;AAAA,IACjG,MAAM,EAAE,MAAM,WAAW,aAAa,wDAAwD,UAAU,MAAM;AAAA,EAChH;AACF,CAAC;AAID,IAAM,aAAa,yBAAyB;AAE5C,IAAM,OAAO,CAAC,YAAqB,CAAC,MAAY,CAAC,WAAW,EAAE,WAAW;AAGlE,SAAS,kBAAkB,MAA0B,MAA4B;AACtF,QAAM,QAAQ,CAAC,OAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE,QAAQ,KAAK,EAAE,IAAI;AACzE,SAAO;AAAA,IACL,eAAe,KAAK;AAAA,IACpB,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,IAC5D,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO;AAAA,MAC/D,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,KAAK,EAAE;AAAA,MACP,cAAc,EAAE;AAAA,MAChB,SAAS,EAAE,cAAc,CAAC,KAAK;AAAA,MAC/B,OAAO,EAAE;AAAA,MACT,GAAI,EAAE,cAAc,EAAE,aAAa,KAAK,IAAI,CAAC;AAAA,IAC/C,EAAE;AAAA,IACF,cAAc,KAAK,aAAa,OAAO,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,KAAK;AAAA,IACpE,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,KAAK;AAAA,IAC9D,UAAU,KAAK,SAAS,OAAO,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,KAAK;AAAA,IAC5D,OAAO,KAAK;AAAA,IACZ,iBAAiB,KAAK;AAAA,EACxB;AACF;AAGO,SAAS,eAAe,MAA0B,MAA2C;AAClG,MAAI,CAAC,KAAK,KAAM,QAAO,kBAAkB,MAAM,EAAE,SAAS,KAAK,QAAQ,CAAC;AACxE,MAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,QAAM,YAAY,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC;AAClD,QAAM,OAAO,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACjD,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,cAAc,KAAK,aAAa,OAAO,KAAK,IAAI,CAAC;AAAA,IACjD,WAAW,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC;AAAA,IAC3C,UAAU,KAAK,SAAS,OAAO,KAAK,IAAI,CAAC;AAAA,IACzC,iBAAiB,KAAK,gBAAgB,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC;AAAA,EACvE;AACF;AAMO,SAAS,mBAAmB,MAA8B,MAA2C;AAC1G,QAAM,MAAM,KAAK,SAAS,KAAK,MAAM;AACrC,QAAM,QAAQ,KAAK,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE,WAAW,SAAS;AAC9E,SAAO;AAAA,IACL,eAAe,KAAK;AAAA,IACpB,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,OAAO,KAAK;AAAA,IACZ,aAAa,MAAM,KAAK,QAAQ,MAAM;AAAA,IACtC,OAAO,KAAK,OACR,QACA,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,GAAI,QAAQ,EAAE,QAAQ,KAAK,EAAE,IAAI,EAAE;AAAA,EAC5G;AACF;AAEO,SAAS,gBAAgB,MAAoC;AAClE,MAAI,KAAK,OAAO,QAAQ,GAAG;AACzB,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAS,KAAK,OAAO,MAAM,KAAK,OAAO;AAC7C,MAAI,SAAS,GAAG;AACd,UAAM;AAAA,MACJ,GAAG,MAAM,OAAO,KAAK,OAAO,GAAG,oGAAoG,KAAK,OAAO,IAAI;AAAA,IACrJ;AAAA,EACF;AACA,QAAM;AAAA,IACJ;AAAA,EACF;AACA,aAAW,QAAQ,YAAY;AAC7B,UAAM,SAAS,KAAK,IAAI,EAAE;AAC1B,UAAM,QAAQ,KAAK,cAAc,IAAI,KAAK;AAC1C,QAAI,QAAQ,QAAQ;AAClB,YAAM;AAAA,QACJ,GAAG,IAAI,KAAK,MAAM,OAAO,KAAK,uDAAuD,KAAK,aAAa,WAAW,IAAI,aAAa,MAAM,wBAAmB,MAAM;AAAA,MACpK;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,oBAAoB,cAAc;AAAA,EAC7C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,YAAY,EAAE,MAAM,cAAc,aAAa,iBAAiB,UAAU,KAAK;AAAA,IAC/E,OAAO,EAAE,MAAM,UAAU,aAAa,oCAAoC,UAAU,MAAM;AAAA,IAC1F,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ,EAAE,MAAM,UAAU,aAAa,2DAA2D,UAAU,MAAM;AAAA,IAClH,SAAS,EAAE,MAAM,WAAW,aAAa,wBAAwB,UAAU,OAAO,SAAS,MAAM;AAAA,IACjG,MAAM,EAAE,MAAM,WAAW,aAAa,gDAAgD,UAAU,MAAM;AAAA,EACxG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,SAAiC,EAAE,IAAI,OAAO,KAAK,UAAU,EAAE;AACrE,UAAI,KAAK,MAAO,QAAO,QAAQ,OAAO,KAAK,KAAK;AAChD,UAAI,KAAK,MAAM;AACb,cAAM,OAAO,MAAM,OAA+B,+CAA+C;AAAA,UAC/F,GAAG;AAAA,UACH,MAAM,OAAO,KAAK,IAAI;AAAA,UACtB,QAAQ,OAAO,KAAK,UAAU,CAAC;AAAA,QACjC,CAAC;AACD,cAAM,OAAO,mBAAmB,MAAM,EAAE,MAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,QAAQ,KAAK,OAAO,EAAE,CAAC;AAClG,kBAAU;AAAA,UACR,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,OACE,KAAK,gBAAgB,OACjB,CAAC,wBAAwB,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IACnD;AAAA,YACE,8CAA8C,KAAK,aAAa,WAAW,KAAK,IAAI,aAAa,KAAK,WAAW;AAAA,UACnH;AAAA,QACR,CAAC;AACD;AAAA,MACF;AACA,YAAM,OAAO,MAAM,OAA2B,0CAA0C,MAAM;AAC9F,gBAAU;AAAA,QACR,IAAI;AAAA,QACJ,MAAM,eAAe,MAAM,EAAE,MAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,QAAQ,KAAK,OAAO,EAAE,CAAC;AAAA,QACvF,OAAO,gBAAgB,IAAI;AAAA,MAC7B,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,kBAAY,GAAG;AAAA,IACjB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import {
|
|
2
|
+
reportError
|
|
3
|
+
} from "./chunk-OIL6PU5W.js";
|
|
4
|
+
import {
|
|
5
|
+
apiGet
|
|
6
|
+
} from "./chunk-CUL3VB4L.js";
|
|
7
|
+
import "./chunk-6YYSUISH.js";
|
|
8
|
+
import "./chunk-I4FTS5EE.js";
|
|
9
|
+
import {
|
|
10
|
+
registerSchema,
|
|
11
|
+
writeJson,
|
|
12
|
+
writeOutput
|
|
13
|
+
} from "./chunk-MYTDK3AL.js";
|
|
14
|
+
import "./chunk-YQSBHWOI.js";
|
|
15
|
+
|
|
16
|
+
// src/commands/winning-ads/seeds.ts
|
|
17
|
+
import { defineCommand } from "citty";
|
|
18
|
+
function leanSeedRow(r) {
|
|
19
|
+
return {
|
|
20
|
+
key: r.key,
|
|
21
|
+
lift: r.lift,
|
|
22
|
+
brands_for: r.brands_for,
|
|
23
|
+
brands_against: r.brands_against,
|
|
24
|
+
count: r.count,
|
|
25
|
+
mean_winner_score: r.mean_winner_score,
|
|
26
|
+
winner_share: r.winner_share
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function buildSeedParams(field, args) {
|
|
30
|
+
const params = { field };
|
|
31
|
+
if (args.platform) params.platform = String(args.platform);
|
|
32
|
+
if (args.awareness) params.awareness_stage = String(args.awareness);
|
|
33
|
+
if (args.industry) params.industry = String(args.industry);
|
|
34
|
+
if (args.limit) params.limit = String(args.limit);
|
|
35
|
+
return params;
|
|
36
|
+
}
|
|
37
|
+
function makeSeedCommand(opts) {
|
|
38
|
+
registerSchema({
|
|
39
|
+
command: `winning-ads.${opts.name}`,
|
|
40
|
+
description: opts.description,
|
|
41
|
+
args: {
|
|
42
|
+
platform: { type: "string", description: "Single platform (meta,linkedin,tiktok,google)", required: false },
|
|
43
|
+
awareness: { type: "string", description: "Single awareness stage", required: false },
|
|
44
|
+
industry: { type: "string", description: "Single industry seed", required: false },
|
|
45
|
+
limit: { type: "number", description: "Max keys 1-100 (default 20)", required: false, default: 20 }
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return defineCommand({
|
|
49
|
+
meta: { name: opts.name, description: opts.description },
|
|
50
|
+
args: {
|
|
51
|
+
platform: { type: "string", description: "Single platform to segment on", required: false },
|
|
52
|
+
awareness: { type: "string", description: "Single awareness stage to segment on", required: false },
|
|
53
|
+
industry: { type: "string", description: "Single industry seed to segment on", required: false },
|
|
54
|
+
limit: { type: "string", description: "Max keys 1-100 (default 20)", required: false, default: "20" },
|
|
55
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
56
|
+
full: { type: "boolean", description: "Include the segment breakdown per key", required: false, default: false }
|
|
57
|
+
},
|
|
58
|
+
run: async ({ args }) => {
|
|
59
|
+
try {
|
|
60
|
+
const params = buildSeedParams(opts.field, args);
|
|
61
|
+
const data = await apiGet("/api/ad-library/seed-catalog", params);
|
|
62
|
+
const rows = Array.isArray(data?.patterns) ? data.patterns : [];
|
|
63
|
+
const full = args.full;
|
|
64
|
+
const projected = rows.map((r) => full ? r : leanSeedRow(r));
|
|
65
|
+
const output = args.output || "json";
|
|
66
|
+
if (output === "json") {
|
|
67
|
+
writeJson({
|
|
68
|
+
ok: true,
|
|
69
|
+
data: { field: data?.field ?? opts.field, segment: data?.segment ?? null, patterns: projected }
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
writeOutput({ ok: true, data: projected }, output);
|
|
74
|
+
} catch (err) {
|
|
75
|
+
reportError(err);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
var hooksCommand = makeSeedCommand({
|
|
81
|
+
name: "hooks",
|
|
82
|
+
field: "hook_archetype",
|
|
83
|
+
description: "Top winner-weighted HOOK seeds for a segment (from the ad-dna pattern rollup). Ground a creative in a proven hook for the exact platform+awareness+industry, then feed the chosen seed to `search --hook-archetype`."
|
|
84
|
+
});
|
|
85
|
+
var mechanismsCommand = makeSeedCommand({
|
|
86
|
+
name: "mechanisms",
|
|
87
|
+
field: "mechanism_type",
|
|
88
|
+
description: "Top winner-weighted PRODUCT mechanism seeds for a segment: how the advertised product claims to work (proprietary formula, AI automated, done-for-you\u2026). Not the ad's persuasion device: for that use `hooks` and `formats`."
|
|
89
|
+
});
|
|
90
|
+
var formatsCommand = makeSeedCommand({
|
|
91
|
+
name: "formats",
|
|
92
|
+
field: "static_format_pattern",
|
|
93
|
+
description: "Top winner-weighted static ad FORMAT patterns for a segment (from the ad-dna pattern rollup)."
|
|
94
|
+
});
|
|
95
|
+
export {
|
|
96
|
+
formatsCommand,
|
|
97
|
+
hooksCommand,
|
|
98
|
+
leanSeedRow,
|
|
99
|
+
mechanismsCommand
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=seeds-HQYSVFIX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/winning-ads/seeds.ts"],"sourcesContent":["import type { PatternSeed, SeedCatalogField, SeedCatalogResponse } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { type OutputFormat, writeJson, writeOutput } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError } from \"./shared.ts\";\n\n/**\n * Read the pattern rollup (ad-dna `pattern_stats`, exposed at\n * `/api/ad-library/seed-catalog`). One builder powers three named subcommands\n * (`hooks` / `mechanisms` / `formats`), each pinning a different taxonomy\n * `field`. It returns the SEED keys that win inside brands for a segment\n * (`lift`: how much more often a brand's creatives with the seed kept running\n * 60 days than its others; `brands_for` / `brands_against`), so the agent\n * grounds a creative in a PROVEN pattern for the exact\n * platform+awareness+industry — then still grounds it in a real reference. The\n * ranking is corpus data, not a hand-authored preset. Feed a hook seed to\n * `winning-ads search --hook-archetype` to narrow the search to that pattern.\n */\nexport function leanSeedRow(r: PatternSeed): Record<string, unknown> {\n return {\n key: r.key,\n lift: r.lift,\n brands_for: r.brands_for,\n brands_against: r.brands_against,\n count: r.count,\n mean_winner_score: r.mean_winner_score,\n winner_share: r.winner_share,\n };\n}\n\ninterface SeedArgs {\n platform?: unknown;\n awareness?: unknown;\n industry?: unknown;\n limit?: unknown;\n}\n\n/** Build the `/api/ad-library/seed-catalog` query params, emitting only set keys. */\nfunction buildSeedParams(field: SeedCatalogField, args: SeedArgs): Record<string, string> {\n const params: Record<string, string> = { field };\n if (args.platform) params.platform = String(args.platform);\n if (args.awareness) params.awareness_stage = String(args.awareness);\n if (args.industry) params.industry = String(args.industry);\n if (args.limit) params.limit = String(args.limit);\n return params;\n}\n\nfunction makeSeedCommand(opts: { name: string; field: SeedCatalogField; description: string }) {\n registerSchema({\n command: `winning-ads.${opts.name}`,\n description: opts.description,\n args: {\n platform: { type: \"string\", description: \"Single platform (meta,linkedin,tiktok,google)\", required: false },\n awareness: { type: \"string\", description: \"Single awareness stage\", required: false },\n industry: { type: \"string\", description: \"Single industry seed\", required: false },\n limit: { type: \"number\", description: \"Max keys 1-100 (default 20)\", required: false, default: 20 },\n },\n });\n\n return defineCommand({\n meta: { name: opts.name, description: opts.description },\n args: {\n platform: { type: \"string\", description: \"Single platform to segment on\", required: false },\n awareness: { type: \"string\", description: \"Single awareness stage to segment on\", required: false },\n industry: { type: \"string\", description: \"Single industry seed to segment on\", required: false },\n limit: { type: \"string\", description: \"Max keys 1-100 (default 20)\", required: false, default: \"20\" },\n output: { type: \"string\", description: \"Output format: json|files|md\", required: false, default: \"json\" },\n full: { type: \"boolean\", description: \"Include the segment breakdown per key\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const params = buildSeedParams(opts.field, args as SeedArgs);\n const data = await apiGet<SeedCatalogResponse>(\"/api/ad-library/seed-catalog\", params);\n const rows = Array.isArray(data?.patterns) ? data.patterns : [];\n const full = args.full as boolean;\n const projected = rows.map((r) => (full ? r : leanSeedRow(r)));\n const output = (args.output as OutputFormat) || \"json\";\n\n if (output === \"json\") {\n writeJson({\n ok: true,\n data: { field: data?.field ?? opts.field, segment: data?.segment ?? null, patterns: projected },\n });\n return;\n }\n writeOutput({ ok: true, data: projected }, output);\n } catch (err) {\n reportError(err);\n }\n },\n });\n}\n\nexport const hooksCommand = makeSeedCommand({\n name: \"hooks\",\n field: \"hook_archetype\",\n description:\n \"Top winner-weighted HOOK seeds for a segment (from the ad-dna pattern rollup). Ground a creative in a proven hook for the exact platform+awareness+industry, then feed the chosen seed to `search --hook-archetype`.\",\n});\n\nexport const mechanismsCommand = makeSeedCommand({\n name: \"mechanisms\",\n field: \"mechanism_type\",\n description:\n \"Top winner-weighted PRODUCT mechanism seeds for a segment: how the advertised product claims to work (proprietary formula, AI automated, done-for-you…). Not the ad's persuasion device: for that use `hooks` and `formats`.\",\n});\n\nexport const formatsCommand = makeSeedCommand({\n name: \"formats\",\n field: \"static_format_pattern\",\n description: \"Top winner-weighted static ad FORMAT patterns for a segment (from the ad-dna pattern rollup).\",\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import {
|
|
2
|
+
versionOf
|
|
3
|
+
} from "./chunk-GBNJQNDS.js";
|
|
4
|
+
import "./chunk-5UCP4EEQ.js";
|
|
5
|
+
import "./chunk-3NPOIHSX.js";
|
|
6
|
+
import "./chunk-BIPIL4QA.js";
|
|
7
|
+
import "./chunk-2FGKJY63.js";
|
|
8
|
+
import "./chunk-YFPLNMPZ.js";
|
|
9
|
+
import "./chunk-DUPURL26.js";
|
|
10
|
+
import "./chunk-FEG6MN4H.js";
|
|
11
|
+
import "./chunk-TNOSX3PJ.js";
|
|
12
|
+
import "./chunk-ZJ7TQUCU.js";
|
|
13
|
+
import "./chunk-K6TDB2KV.js";
|
|
14
|
+
import "./chunk-DGCUPJZD.js";
|
|
15
|
+
import "./chunk-YMBB4JBD.js";
|
|
16
|
+
import "./chunk-CAMX6OHF.js";
|
|
17
|
+
import "./chunk-SYULM665.js";
|
|
18
|
+
import "./chunk-5HYSKH77.js";
|
|
19
|
+
import "./chunk-KIGGMKAE.js";
|
|
20
|
+
import "./chunk-AIRIT4GF.js";
|
|
21
|
+
import "./chunk-3VXQYDJN.js";
|
|
22
|
+
import "./chunk-W4SA4CMR.js";
|
|
23
|
+
import "./chunk-JXMZEOHV.js";
|
|
24
|
+
import {
|
|
25
|
+
creativesSelectRequestSchema
|
|
26
|
+
} from "./chunk-O6XZIQXZ.js";
|
|
27
|
+
import "./chunk-GXDLWBOY.js";
|
|
28
|
+
import "./chunk-GIWHHCD6.js";
|
|
29
|
+
import "./chunk-UI6BKYQD.js";
|
|
30
|
+
import "./chunk-I2DNBEV6.js";
|
|
31
|
+
import {
|
|
32
|
+
ApiError,
|
|
33
|
+
apiPost
|
|
34
|
+
} from "./chunk-CUL3VB4L.js";
|
|
35
|
+
import "./chunk-6YYSUISH.js";
|
|
36
|
+
import "./chunk-I4FTS5EE.js";
|
|
37
|
+
import {
|
|
38
|
+
registerSchema,
|
|
39
|
+
writeJson
|
|
40
|
+
} from "./chunk-MYTDK3AL.js";
|
|
41
|
+
import "./chunk-YQSBHWOI.js";
|
|
42
|
+
|
|
43
|
+
// src/commands/creatives/select.ts
|
|
44
|
+
import { defineCommand } from "citty";
|
|
45
|
+
var DESCRIPTION = `Choose the version of a creative to keep, and optionally which of its options, only when the user says to keep this version in this chat. The creative shows that version as the chosen one, and the choice counts as the user's approval. A version you render after it replaces it when the chat is published (the user saw that one last). It does not save the image to their library (that is baker creatives publish) and puts nothing into an ad.
|
|
46
|
+
Start here: baker creatives select --slug spring-offer
|
|
47
|
+
Only some options of a version that made several: --options "ugc,2" (labels or numbers). Naming options again replaces the earlier pick.`;
|
|
48
|
+
var ARGS = {
|
|
49
|
+
slug: { type: "string", description: "The creative: its folder name under src/creatives/.", required: true },
|
|
50
|
+
run: {
|
|
51
|
+
type: "string",
|
|
52
|
+
description: "The version to keep: its canvas run id (r_\u2026) Left out, the version the creative shows now (its last render).",
|
|
53
|
+
required: false
|
|
54
|
+
},
|
|
55
|
+
options: {
|
|
56
|
+
type: "string",
|
|
57
|
+
description: 'Keep only these options of the version, comma-separated: labels ("ugc"), numbers ("2") or slots. Left out, the whole version.',
|
|
58
|
+
required: false
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
registerSchema({ command: "creatives.select", description: DESCRIPTION, args: ARGS });
|
|
62
|
+
function fail(code, message) {
|
|
63
|
+
writeJson({ ok: false, error: { code, message } });
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
var selectCommand = defineCommand({
|
|
67
|
+
meta: { name: "select", description: DESCRIPTION },
|
|
68
|
+
args: ARGS,
|
|
69
|
+
run: async ({ args }) => {
|
|
70
|
+
const options = typeof args.options === "string" ? args.options.split(",").map((option) => option.trim()).filter((option) => option.length > 0) : [];
|
|
71
|
+
const parsed = creativesSelectRequestSchema.safeParse({
|
|
72
|
+
slug: args.slug,
|
|
73
|
+
runId: await versionOf(String(args.slug), args.run).then(
|
|
74
|
+
(run) => run ?? fail("VALIDATION_ERROR", "--run: this creative has no rendered version here; name one (r_\u2026).")
|
|
75
|
+
),
|
|
76
|
+
...options.length > 0 ? { options } : {}
|
|
77
|
+
});
|
|
78
|
+
if (!parsed.success) {
|
|
79
|
+
const issue = parsed.error.issues[0];
|
|
80
|
+
fail("VALIDATION_ERROR", `--${String(issue?.path[0] ?? "args")}: ${issue?.message ?? "invalid"}`);
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const response = await apiPost("/api/creatives/select", parsed.data);
|
|
84
|
+
writeJson(response);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
if (err instanceof ApiError) fail(err.code, err.message);
|
|
87
|
+
fail("INTERNAL_ERROR", "Unexpected error");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
export {
|
|
92
|
+
selectCommand
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=select-HJMOAWAU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/creatives/select.ts"],"sourcesContent":["import { type CreativesSelectResponse, creativesSelectRequestSchema } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { versionOf } from \"./version-of.ts\";\n\nconst DESCRIPTION = `Choose the version of a creative to keep, and optionally which of its options, only when the user says to keep this version in this chat. The creative shows that version as the chosen one, and the choice counts as the user's approval. A version you render after it replaces it when the chat is published (the user saw that one last). It does not save the image to their library (that is baker creatives publish) and puts nothing into an ad.\nStart here: baker creatives select --slug spring-offer\nOnly some options of a version that made several: --options \"ugc,2\" (labels or numbers). Naming options again replaces the earlier pick.`;\n\nconst ARGS = {\n slug: { type: \"string\", description: \"The creative: its folder name under src/creatives/.\", required: true },\n run: {\n type: \"string\",\n description:\n \"The version to keep: its canvas run id (r_…) Left out, the version the creative shows now (its last render).\",\n required: false,\n },\n options: {\n type: \"string\",\n description:\n 'Keep only these options of the version, comma-separated: labels (\"ugc\"), numbers (\"2\") or slots. Left out, the whole version.',\n required: false,\n },\n} as const;\n\nregisterSchema({ command: \"creatives.select\", description: DESCRIPTION, args: ARGS });\n\nfunction fail(code: string, message: string): never {\n writeJson({ ok: false, error: { code, message } });\n process.exit(1);\n}\n\nexport const selectCommand = defineCommand({\n meta: { name: \"select\", description: DESCRIPTION },\n args: ARGS,\n run: async ({ args }) => {\n const options =\n typeof args.options === \"string\"\n ? args.options\n .split(\",\")\n .map((option) => option.trim())\n .filter((option) => option.length > 0)\n : [];\n const parsed = creativesSelectRequestSchema.safeParse({\n slug: args.slug,\n runId: await versionOf(String(args.slug), args.run).then(\n (run) => run ?? fail(\"VALIDATION_ERROR\", \"--run: this creative has no rendered version here; name one (r_…).\"),\n ),\n ...(options.length > 0 ? { options } : {}),\n });\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n fail(\"VALIDATION_ERROR\", `--${String(issue?.path[0] ?? \"args\")}: ${issue?.message ?? \"invalid\"}`);\n }\n try {\n const response = await apiPost<CreativesSelectResponse>(\"/api/creatives/select\", parsed.data);\n writeJson(response);\n } catch (err) {\n if (err instanceof ApiError) fail(err.code, err.message);\n fail(\"INTERNAL_ERROR\", \"Unexpected error\");\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAM9B,IAAM,cAAc;AAAA;AAAA;AAIpB,IAAM,OAAO;AAAA,EACX,MAAM,EAAE,MAAM,UAAU,aAAa,uDAAuD,UAAU,KAAK;AAAA,EAC3G,KAAK;AAAA,IACH,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AACF;AAEA,eAAe,EAAE,SAAS,oBAAoB,aAAa,aAAa,MAAM,KAAK,CAAC;AAEpF,SAAS,KAAK,MAAc,SAAwB;AAClD,YAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,QAAQ,EAAE,CAAC;AACjD,UAAQ,KAAK,CAAC;AAChB;AAEO,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM,EAAE,MAAM,UAAU,aAAa,YAAY;AAAA,EACjD,MAAM;AAAA,EACN,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,UACJ,OAAO,KAAK,YAAY,WACpB,KAAK,QACF,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,CAAC,EAC7B,OAAO,CAAC,WAAW,OAAO,SAAS,CAAC,IACvC,CAAC;AACP,UAAM,SAAS,6BAA6B,UAAU;AAAA,MACpD,MAAM,KAAK;AAAA,MACX,OAAO,MAAM,UAAU,OAAO,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE;AAAA,QAClD,CAAC,QAAQ,OAAO,KAAK,oBAAoB,yEAAoE;AAAA,MAC/G;AAAA,MACA,GAAI,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC1C,CAAC;AACD,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,QAAQ,OAAO,MAAM,OAAO,CAAC;AACnC,WAAK,oBAAoB,KAAK,OAAO,OAAO,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,OAAO,WAAW,SAAS,EAAE;AAAA,IAClG;AACA,QAAI;AACF,YAAM,WAAW,MAAM,QAAiC,yBAAyB,OAAO,IAAI;AAC5F,gBAAU,QAAQ;AAAA,IACpB,SAAS,KAAK;AACZ,UAAI,eAAe,SAAU,MAAK,IAAI,MAAM,IAAI,OAAO;AACvD,WAAK,kBAAkB,kBAAkB;AAAA,IAC3C;AAAA,EACF;AACF,CAAC;","names":[]}
|