@koda-sl/baker-cli 0.386.0 → 0.387.0-dev.3bafd569e
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 +1090 -211
- package/canvas/tiktok-captions-composition/index.html +5 -6
- package/canvas/tiktok-captions-composition/meta.json +5 -0
- package/dist/account-CLOKMTTC.js +49 -0
- package/dist/account-CLOKMTTC.js.map +1 -0
- package/dist/account-V5Y2QHAK.js +79 -0
- package/dist/account-V5Y2QHAK.js.map +1 -0
- package/dist/account-XFK6VX2R.js +80 -0
- package/dist/account-XFK6VX2R.js.map +1 -0
- package/dist/account-reads-S5VXX2QU.js +218 -0
- package/dist/account-reads-S5VXX2QU.js.map +1 -0
- package/dist/account-writes-Y7EQXDXF.js +66 -0
- package/dist/account-writes-Y7EQXDXF.js.map +1 -0
- package/dist/accounts-7YD457YN.js +114 -0
- package/dist/accounts-7YD457YN.js.map +1 -0
- package/dist/accounts-BJ3X5JQT.js +115 -0
- package/dist/accounts-BJ3X5JQT.js.map +1 -0
- package/dist/accounts-LOJ4WLIX.js +77 -0
- package/dist/accounts-LOJ4WLIX.js.map +1 -0
- package/dist/accounts-RYBDLQ6H.js +75 -0
- package/dist/accounts-RYBDLQ6H.js.map +1 -0
- package/dist/accounts-UO4XBWM2.js +611 -0
- package/dist/accounts-UO4XBWM2.js.map +1 -0
- package/dist/actions-3AW3R63U.js +55 -0
- package/dist/actions-3AW3R63U.js.map +1 -0
- package/dist/active-entities-R6GZIO6Z.js +103 -0
- package/dist/active-entities-R6GZIO6Z.js.map +1 -0
- package/dist/activities-ESBF3GFS.js +74 -0
- package/dist/activities-ESBF3GFS.js.map +1 -0
- package/dist/ad-group-writes-I225OYDZ.js +170 -0
- package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
- package/dist/ad-groups-O35MWNF6.js +68 -0
- package/dist/ad-groups-O35MWNF6.js.map +1 -0
- package/dist/ad-writes-SS5YZO5W.js +174 -0
- package/dist/ad-writes-SS5YZO5W.js.map +1 -0
- package/dist/add-43DUOVNR.js +104 -0
- package/dist/add-43DUOVNR.js.map +1 -0
- package/dist/add-IE5WDELB.js +302 -0
- package/dist/add-IE5WDELB.js.map +1 -0
- package/dist/add-QZHAWUBA.js +97 -0
- package/dist/add-QZHAWUBA.js.map +1 -0
- package/dist/add-TGQIVVXH.js +105 -0
- package/dist/add-TGQIVVXH.js.map +1 -0
- package/dist/add-accounts-6QYPOPR2.js +91 -0
- package/dist/add-accounts-6QYPOPR2.js.map +1 -0
- package/dist/ads-AUSRB4GU.js +128 -0
- package/dist/ads-AUSRB4GU.js.map +1 -0
- package/dist/ads-COYOTEKE.js +77 -0
- package/dist/ads-COYOTEKE.js.map +1 -0
- package/dist/ads-DZ4N5INZ.js +40 -0
- package/dist/ads-DZ4N5INZ.js.map +1 -0
- package/dist/ads-XZCMSPM5.js +113 -0
- package/dist/ads-XZCMSPM5.js.map +1 -0
- package/dist/adsets-AKR75THA.js +176 -0
- package/dist/adsets-AKR75THA.js.map +1 -0
- package/dist/advertisers-52FMMBTQ.js +120 -0
- package/dist/advertisers-52FMMBTQ.js.map +1 -0
- package/dist/advertisers-BCGKUMEH.js +125 -0
- package/dist/advertisers-BCGKUMEH.js.map +1 -0
- package/dist/analytics-JPDBKETM.js +1980 -0
- package/dist/analytics-JPDBKETM.js.map +1 -0
- package/dist/analytics-YVQ6H4BG.js +433 -0
- package/dist/analytics-YVQ6H4BG.js.map +1 -0
- package/dist/animate-JXIT77Y5.js +480 -0
- package/dist/animate-JXIT77Y5.js.map +1 -0
- package/dist/assign-66NTWTR2.js +77 -0
- package/dist/assign-66NTWTR2.js.map +1 -0
- package/dist/audience-size-LVQJWQAS.js +94 -0
- package/dist/audience-size-LVQJWQAS.js.map +1 -0
- package/dist/audiences-DC3IOG34.js +85 -0
- package/dist/audiences-DC3IOG34.js.map +1 -0
- package/dist/audiences-NEW3LLQR.js +268 -0
- package/dist/audiences-NEW3LLQR.js.map +1 -0
- package/dist/audiences-NYGMBGQ3.js +79 -0
- package/dist/audiences-NYGMBGQ3.js.map +1 -0
- package/dist/audit-UIPMTI5C.js +88 -0
- package/dist/audit-UIPMTI5C.js.map +1 -0
- package/dist/audit-XGN2OFLN.js +151 -0
- package/dist/audit-XGN2OFLN.js.map +1 -0
- package/dist/autocomplete-LVPDV3JE.js +111 -0
- package/dist/autocomplete-LVPDV3JE.js.map +1 -0
- package/dist/avatars-S6NSLMJK.js +38 -0
- package/dist/avatars-S6NSLMJK.js.map +1 -0
- package/dist/bid-pricing-2LYULXU2.js +99 -0
- package/dist/bid-pricing-2LYULXU2.js.map +1 -0
- package/dist/brand-WWHUZ72R.js +22 -0
- package/dist/brand-WWHUZ72R.js.map +1 -0
- package/dist/brief-K3FILESK.js +492 -0
- package/dist/brief-K3FILESK.js.map +1 -0
- package/dist/businesses-J7OP7MSK.js +53 -0
- package/dist/businesses-J7OP7MSK.js.map +1 -0
- package/dist/campaign-groups-N4TZ2F3L.js +95 -0
- package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
- package/dist/campaign-writes-5XA727KI.js +170 -0
- package/dist/campaign-writes-5XA727KI.js.map +1 -0
- package/dist/campaign-writes-7YFRQIQT.js +165 -0
- package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
- package/dist/campaigns-JPYNVFQI.js +76 -0
- package/dist/campaigns-JPYNVFQI.js.map +1 -0
- package/dist/campaigns-L43ZUKAI.js +107 -0
- package/dist/campaigns-L43ZUKAI.js.map +1 -0
- package/dist/campaigns-OD7Z332M.js +109 -0
- package/dist/campaigns-OD7Z332M.js.map +1 -0
- package/dist/campaigns-R4DXIR2Q.js +110 -0
- package/dist/campaigns-R4DXIR2Q.js.map +1 -0
- package/dist/canvas-57K7AGAP.js +46 -0
- package/dist/canvas-57K7AGAP.js.map +1 -0
- package/dist/capabilities-FVTZAFPV.js +144 -0
- package/dist/capabilities-FVTZAFPV.js.map +1 -0
- package/dist/cards-7H32TNMO.js +85 -0
- package/dist/cards-7H32TNMO.js.map +1 -0
- package/dist/catalog-OTICZPJA.js +64 -0
- package/dist/catalog-OTICZPJA.js.map +1 -0
- package/dist/catalogs-ABCQLCDU.js +128 -0
- package/dist/catalogs-ABCQLCDU.js.map +1 -0
- package/dist/changes-7ZIGNUW6.js +135 -0
- package/dist/changes-7ZIGNUW6.js.map +1 -0
- package/dist/chatgpt-B3NHRJUE.js +47 -0
- package/dist/chatgpt-B3NHRJUE.js.map +1 -0
- package/dist/chats-E7DBRHBF.js +262 -0
- package/dist/chats-E7DBRHBF.js.map +1 -0
- package/dist/chunk-2CV7LX23.js +474 -0
- package/dist/chunk-2CV7LX23.js.map +1 -0
- package/dist/chunk-2HCI5BXB.js +479 -0
- package/dist/chunk-2HCI5BXB.js.map +1 -0
- package/dist/chunk-2SQJL7ZN.js +56 -0
- package/dist/chunk-2SQJL7ZN.js.map +1 -0
- package/dist/chunk-2Y5V23PU.js +29 -0
- package/dist/chunk-2Y5V23PU.js.map +1 -0
- package/dist/chunk-32CPGJPL.js +149 -0
- package/dist/chunk-32CPGJPL.js.map +1 -0
- package/dist/chunk-3ACMDRSE.js +39 -0
- package/dist/chunk-3ACMDRSE.js.map +1 -0
- package/dist/chunk-3N4PZIIV.js +304 -0
- package/dist/chunk-3N4PZIIV.js.map +1 -0
- package/dist/chunk-3U7TDBIB.js +275 -0
- package/dist/chunk-3U7TDBIB.js.map +1 -0
- package/dist/chunk-3UDSYYND.js +42 -0
- package/dist/chunk-3UDSYYND.js.map +1 -0
- package/dist/chunk-3ZWWXAQZ.js +150 -0
- package/dist/chunk-3ZWWXAQZ.js.map +1 -0
- package/dist/chunk-4MH6LONO.js +274 -0
- package/dist/chunk-4MH6LONO.js.map +1 -0
- package/dist/chunk-4NZ47VXO.js +137 -0
- package/dist/chunk-4NZ47VXO.js.map +1 -0
- package/dist/chunk-564AEU2Q.js +541 -0
- package/dist/chunk-564AEU2Q.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-5OVOLYY3.js +74 -0
- package/dist/chunk-5OVOLYY3.js.map +1 -0
- package/dist/chunk-5SJ3JNNY.js +6683 -0
- package/dist/chunk-5SJ3JNNY.js.map +1 -0
- package/dist/chunk-66USKCVY.js +4410 -0
- package/dist/chunk-66USKCVY.js.map +1 -0
- package/dist/chunk-6I7SYEYN.js +166 -0
- package/dist/chunk-6I7SYEYN.js.map +1 -0
- package/dist/chunk-6O7ISBC7.js +65 -0
- package/dist/chunk-6O7ISBC7.js.map +1 -0
- package/dist/chunk-752S7JF6.js +35 -0
- package/dist/chunk-752S7JF6.js.map +1 -0
- package/dist/chunk-77DN7R35.js +228 -0
- package/dist/chunk-77DN7R35.js.map +1 -0
- package/dist/chunk-7F7MFMLI.js +175 -0
- package/dist/chunk-7F7MFMLI.js.map +1 -0
- package/dist/chunk-7THBBTJJ.js +183 -0
- package/dist/chunk-7THBBTJJ.js.map +1 -0
- package/dist/chunk-7XU3HKMX.js +1599 -0
- package/dist/chunk-7XU3HKMX.js.map +1 -0
- package/dist/chunk-AEA5JV2X.js +92 -0
- package/dist/chunk-AEA5JV2X.js.map +1 -0
- package/dist/chunk-AFJGYJ7Z.js +45 -0
- package/dist/chunk-AFJGYJ7Z.js.map +1 -0
- package/dist/chunk-AR7PU7BB.js +76 -0
- package/dist/chunk-AR7PU7BB.js.map +1 -0
- package/dist/chunk-ASL7JFBD.js +96 -0
- package/dist/chunk-ASL7JFBD.js.map +1 -0
- package/dist/chunk-AUSKKFVH.js +84 -0
- package/dist/chunk-AUSKKFVH.js.map +1 -0
- package/dist/chunk-B52DCYL2.js +159 -0
- package/dist/chunk-B52DCYL2.js.map +1 -0
- package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
- package/dist/chunk-BVM5IRZW.js.map +1 -0
- package/dist/chunk-CAMX6OHF.js +3182 -0
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/chunk-CYBLKMXQ.js +310 -0
- package/dist/chunk-CYBLKMXQ.js.map +1 -0
- package/dist/chunk-CZENWCBS.js +333 -0
- package/dist/chunk-CZENWCBS.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-DX4GIDO7.js +296 -0
- package/dist/chunk-DX4GIDO7.js.map +1 -0
- package/dist/chunk-EDLZGTGN.js +216 -0
- package/dist/chunk-EDLZGTGN.js.map +1 -0
- package/dist/chunk-EDNX3AOS.js +76 -0
- package/dist/chunk-EDNX3AOS.js.map +1 -0
- package/dist/chunk-EF5DP6EB.js +52 -0
- package/dist/chunk-EF5DP6EB.js.map +1 -0
- package/dist/chunk-ERSX3MKH.js +34 -0
- package/dist/chunk-ERSX3MKH.js.map +1 -0
- package/dist/chunk-F3IJSR7O.js +346 -0
- package/dist/chunk-F3IJSR7O.js.map +1 -0
- package/dist/chunk-FKOECEVC.js +126 -0
- package/dist/chunk-FKOECEVC.js.map +1 -0
- package/dist/chunk-FYWWTMXP.js +2902 -0
- package/dist/chunk-FYWWTMXP.js.map +1 -0
- package/dist/chunk-G7AFVTUS.js +106 -0
- package/dist/chunk-G7AFVTUS.js.map +1 -0
- package/dist/chunk-GIW7ABMM.js +74 -0
- package/dist/chunk-GIW7ABMM.js.map +1 -0
- package/dist/chunk-GIWHHCD6.js +145 -0
- package/dist/chunk-GIWHHCD6.js.map +1 -0
- package/dist/chunk-GPZH5ASB.js +3151 -0
- package/dist/chunk-GPZH5ASB.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-GYABNLWW.js +629 -0
- package/dist/chunk-GYABNLWW.js.map +1 -0
- package/dist/chunk-H7MLHG2I.js +94 -0
- package/dist/chunk-H7MLHG2I.js.map +1 -0
- package/dist/chunk-H7XVKLIY.js +206 -0
- package/dist/chunk-H7XVKLIY.js.map +1 -0
- package/dist/chunk-HAE4WWFQ.js +455 -0
- package/dist/chunk-HAE4WWFQ.js.map +1 -0
- package/dist/chunk-HDHWIEJJ.js +136 -0
- package/dist/chunk-HDHWIEJJ.js.map +1 -0
- package/dist/chunk-HJTIBTF7.js +98 -0
- package/dist/chunk-HJTIBTF7.js.map +1 -0
- package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
- package/dist/chunk-HLXWKMTK.js.map +1 -0
- package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
- package/dist/chunk-HREWXNTO.js.map +1 -0
- package/dist/chunk-HYXKRNRV.js +176 -0
- package/dist/chunk-HYXKRNRV.js.map +1 -0
- package/dist/chunk-I3DIZWN5.js +97 -0
- package/dist/chunk-I3DIZWN5.js.map +1 -0
- package/dist/chunk-IJMWEO4P.js +57 -0
- package/dist/chunk-IJMWEO4P.js.map +1 -0
- package/dist/chunk-IOCSDFF2.js +23992 -0
- package/dist/chunk-IOCSDFF2.js.map +1 -0
- package/dist/chunk-IVIJJXXT.js +62 -0
- package/dist/chunk-IVIJJXXT.js.map +1 -0
- package/dist/chunk-J57GWTPK.js +106 -0
- package/dist/chunk-J57GWTPK.js.map +1 -0
- package/dist/chunk-JPK34QPS.js +134 -0
- package/dist/chunk-JPK34QPS.js.map +1 -0
- package/dist/chunk-JRCFCIE3.js +188 -0
- package/dist/chunk-JRCFCIE3.js.map +1 -0
- package/dist/chunk-JUAIGJ2A.js +76 -0
- package/dist/chunk-JUAIGJ2A.js.map +1 -0
- package/dist/chunk-K5OQES4V.js +58 -0
- package/dist/chunk-K5OQES4V.js.map +1 -0
- package/dist/chunk-KBS5GH4T.js +1626 -0
- package/dist/chunk-KBS5GH4T.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-KLK6KQLQ.js +55 -0
- package/dist/chunk-KLK6KQLQ.js.map +1 -0
- package/dist/chunk-KUZFWMJN.js +207 -0
- package/dist/chunk-KUZFWMJN.js.map +1 -0
- package/dist/chunk-KXGG6EQM.js +382 -0
- package/dist/chunk-KXGG6EQM.js.map +1 -0
- package/dist/chunk-KXRKPZZY.js +169 -0
- package/dist/chunk-KXRKPZZY.js.map +1 -0
- package/dist/chunk-KZUHRZ2C.js +5187 -0
- package/dist/chunk-KZUHRZ2C.js.map +1 -0
- package/dist/chunk-L45A3IYV.js +1079 -0
- package/dist/chunk-L45A3IYV.js.map +1 -0
- package/dist/chunk-LA6PPSNA.js +65 -0
- package/dist/chunk-LA6PPSNA.js.map +1 -0
- package/dist/chunk-LEIQAHWF.js +25 -0
- package/dist/chunk-LEIQAHWF.js.map +1 -0
- package/dist/chunk-LERWCRY5.js +297 -0
- package/dist/chunk-LERWCRY5.js.map +1 -0
- package/dist/chunk-M6UNISGO.js +66 -0
- package/dist/chunk-M6UNISGO.js.map +1 -0
- package/dist/chunk-MGKHFGLV.js +75 -0
- package/dist/chunk-MGKHFGLV.js.map +1 -0
- package/dist/chunk-MZWC6HHA.js +455 -0
- package/dist/chunk-MZWC6HHA.js.map +1 -0
- package/dist/chunk-N3XJ434P.js +197 -0
- package/dist/chunk-N3XJ434P.js.map +1 -0
- package/dist/chunk-NFSLRRIE.js +77 -0
- package/dist/chunk-NFSLRRIE.js.map +1 -0
- package/dist/chunk-NHU33T2S.js +60 -0
- package/dist/chunk-NHU33T2S.js.map +1 -0
- package/dist/chunk-NJEZM4OB.js +51 -0
- package/dist/chunk-NJEZM4OB.js.map +1 -0
- package/dist/chunk-O6QKCJE4.js +455 -0
- package/dist/chunk-O6QKCJE4.js.map +1 -0
- package/dist/chunk-OFFAMC5H.js +225 -0
- package/dist/chunk-OFFAMC5H.js.map +1 -0
- package/dist/chunk-OHGTCFFE.js +57 -0
- package/dist/chunk-OHGTCFFE.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-PKTLHYH4.js +509 -0
- package/dist/chunk-PKTLHYH4.js.map +1 -0
- package/dist/chunk-PUPEGICD.js +103 -0
- package/dist/chunk-PUPEGICD.js.map +1 -0
- package/dist/chunk-Q6ULQMWG.js +41 -0
- package/dist/chunk-Q6ULQMWG.js.map +1 -0
- package/dist/chunk-QO23YHLK.js +84 -0
- package/dist/chunk-QO23YHLK.js.map +1 -0
- package/dist/chunk-QSGIWV4P.js +337 -0
- package/dist/chunk-QSGIWV4P.js.map +1 -0
- package/dist/chunk-R5OQM7FF.js +179 -0
- package/dist/chunk-R5OQM7FF.js.map +1 -0
- package/dist/chunk-RFB6RYKA.js +111 -0
- package/dist/chunk-RFB6RYKA.js.map +1 -0
- package/dist/chunk-RGIXQEGJ.js +502 -0
- package/dist/chunk-RGIXQEGJ.js.map +1 -0
- package/dist/chunk-RODLBWIR.js +592 -0
- package/dist/chunk-RODLBWIR.js.map +1 -0
- package/dist/chunk-S4LZ7KTG.js +160 -0
- package/dist/chunk-S4LZ7KTG.js.map +1 -0
- package/dist/chunk-SHTESUB6.js +1442 -0
- package/dist/chunk-SHTESUB6.js.map +1 -0
- package/dist/chunk-SJH4EOZH.js +23 -0
- package/dist/chunk-SJH4EOZH.js.map +1 -0
- package/dist/chunk-SLB46MSS.js +64 -0
- package/dist/chunk-SLB46MSS.js.map +1 -0
- package/dist/chunk-SMIENBNX.js +6212 -0
- package/dist/chunk-SMIENBNX.js.map +1 -0
- package/dist/chunk-T7GT22KA.js +494 -0
- package/dist/chunk-T7GT22KA.js.map +1 -0
- package/dist/chunk-T7M4WFNV.js +172 -0
- package/dist/chunk-T7M4WFNV.js.map +1 -0
- package/dist/chunk-TLQ23DDW.js +19 -0
- package/dist/chunk-TLQ23DDW.js.map +1 -0
- package/dist/chunk-TMIDUSOR.js +665 -0
- package/dist/chunk-TMIDUSOR.js.map +1 -0
- package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
- package/dist/chunk-U6VRBDNQ.js +1830 -0
- package/dist/chunk-U6VRBDNQ.js.map +1 -0
- package/dist/chunk-U7BBXM67.js +1743 -0
- package/dist/chunk-U7BBXM67.js.map +1 -0
- package/dist/chunk-UI6BKYQD.js +225 -0
- package/dist/chunk-UI6BKYQD.js.map +1 -0
- package/dist/chunk-UOI5S62H.js +846 -0
- package/dist/chunk-UOI5S62H.js.map +1 -0
- package/dist/chunk-USL5ARRE.js +26 -0
- package/dist/chunk-USL5ARRE.js.map +1 -0
- package/dist/chunk-UYC45JNS.js +139 -0
- package/dist/chunk-UYC45JNS.js.map +1 -0
- package/dist/chunk-VNKVBY54.js +363 -0
- package/dist/chunk-VNKVBY54.js.map +1 -0
- package/dist/chunk-VS4C7VAR.js +533 -0
- package/dist/chunk-VS4C7VAR.js.map +1 -0
- package/dist/chunk-W4W4ZRBP.js +191 -0
- package/dist/chunk-W4W4ZRBP.js.map +1 -0
- package/dist/chunk-WN4KX7GE.js +25 -0
- package/dist/chunk-WN4KX7GE.js.map +1 -0
- package/dist/chunk-WNFTXSGR.js +111 -0
- package/dist/chunk-WNFTXSGR.js.map +1 -0
- package/dist/chunk-WOTDHRNF.js +2109 -0
- package/dist/chunk-WOTDHRNF.js.map +1 -0
- package/dist/chunk-XGWKTYXQ.js +67 -0
- package/dist/chunk-XGWKTYXQ.js.map +1 -0
- package/dist/chunk-XIGIJJSF.js +66 -0
- package/dist/chunk-XIGIJJSF.js.map +1 -0
- package/dist/chunk-XNUXB63I.js +817 -0
- package/dist/chunk-XNUXB63I.js.map +1 -0
- package/dist/chunk-XQ3CCNJD.js +610 -0
- package/dist/chunk-XQ3CCNJD.js.map +1 -0
- package/dist/chunk-XX6ZMCY5.js +4227 -0
- package/dist/chunk-XX6ZMCY5.js.map +1 -0
- package/dist/chunk-Y362QH54.js +98 -0
- package/dist/chunk-Y362QH54.js.map +1 -0
- package/dist/chunk-Y4T6ATDQ.js +74 -0
- package/dist/chunk-Y4T6ATDQ.js.map +1 -0
- package/dist/chunk-YQSBHWOI.js +41 -0
- package/dist/chunk-YU26SDNT.js +46 -0
- package/dist/chunk-YU26SDNT.js.map +1 -0
- package/dist/chunk-YULENNA7.js +501 -0
- package/dist/chunk-YULENNA7.js.map +1 -0
- package/dist/chunk-YYSZYSAG.js +150 -0
- package/dist/chunk-YYSZYSAG.js.map +1 -0
- package/dist/chunk-Z3ENMCFE.js +94 -0
- package/dist/chunk-Z3ENMCFE.js.map +1 -0
- package/dist/chunk-ZH7ZM3ZM.js +125 -0
- package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
- package/dist/chunk-ZIXHS6AM.js +42 -0
- package/dist/chunk-ZIXHS6AM.js.map +1 -0
- package/dist/chunk-ZLLJKSNS.js +96 -0
- package/dist/chunk-ZLLJKSNS.js.map +1 -0
- package/dist/claim-LF6VQ7OR.js +197 -0
- package/dist/claim-LF6VQ7OR.js.map +1 -0
- package/dist/cli.js +104 -70026
- package/dist/cli.js.map +1 -1
- package/dist/client-26SAJ46D.js +19 -0
- package/dist/code-MOWYJMDH.js +76 -0
- package/dist/code-MOWYJMDH.js.map +1 -0
- package/dist/companies-6HSK5BLK.js +195 -0
- package/dist/companies-6HSK5BLK.js.map +1 -0
- package/dist/complete-2PUAFQEC.js +81 -0
- package/dist/complete-2PUAFQEC.js.map +1 -0
- package/dist/config-X6GKOVQ6.js +88 -0
- package/dist/config-X6GKOVQ6.js.map +1 -0
- package/dist/connect-RXPMAJQI.js +42 -0
- package/dist/content-UYZC4AKN.js +85 -0
- package/dist/content-UYZC4AKN.js.map +1 -0
- package/dist/conversation-Y3NB2VDI.js +93 -0
- package/dist/conversation-Y3NB2VDI.js.map +1 -0
- package/dist/conversion-report-R4GJWWTK.js +125 -0
- package/dist/conversion-report-R4GJWWTK.js.map +1 -0
- package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
- package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
- package/dist/conversion-writes-WHFFUWWL.js +120 -0
- package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
- package/dist/conversions-K7C32DPW.js +135 -0
- package/dist/conversions-K7C32DPW.js.map +1 -0
- package/dist/conversions-OXJAX5GB.js +76 -0
- package/dist/conversions-OXJAX5GB.js.map +1 -0
- package/dist/countries-PBXNB3BR.js +82 -0
- package/dist/countries-PBXNB3BR.js.map +1 -0
- package/dist/create-AJ4KPSJ4.js +59 -0
- package/dist/create-AJ4KPSJ4.js.map +1 -0
- package/dist/create-ALKOAD5J.js +138 -0
- package/dist/create-ALKOAD5J.js.map +1 -0
- package/dist/create-HTKZMXKB.js +207 -0
- package/dist/create-HTKZMXKB.js.map +1 -0
- package/dist/create-TZMAOFBR.js +236 -0
- package/dist/create-TZMAOFBR.js.map +1 -0
- package/dist/creatives-BJYJFVXJ.js +51 -0
- package/dist/creatives-BJYJFVXJ.js.map +1 -0
- package/dist/creatives-OZHVU4WB.js +182 -0
- package/dist/creatives-OZHVU4WB.js.map +1 -0
- package/dist/creatives-VMGY5SU4.js +87 -0
- package/dist/creatives-VMGY5SU4.js.map +1 -0
- package/dist/credentials-FY4UH6TF.js +287 -0
- package/dist/credentials-FY4UH6TF.js.map +1 -0
- package/dist/critique-B3H7QFM2.js +1449 -0
- package/dist/critique-B3H7QFM2.js.map +1 -0
- package/dist/critique-YZBOA27H.js +216 -0
- package/dist/critique-YZBOA27H.js.map +1 -0
- package/dist/crm-2IBLUHDB.js +318 -0
- package/dist/crm-2IBLUHDB.js.map +1 -0
- package/dist/crm-YMYO4U53.js +224 -0
- package/dist/crm-YMYO4U53.js.map +1 -0
- package/dist/crop-U3AD4DDR.js +113 -0
- package/dist/crop-U3AD4DDR.js.map +1 -0
- package/dist/currency-S6KWZSZ6.js +88 -0
- package/dist/currency-S6KWZSZ6.js.map +1 -0
- package/dist/custom-conversions-FABS6YVT.js +125 -0
- package/dist/custom-conversions-FABS6YVT.js.map +1 -0
- package/dist/customers-P6LLLJHK.js +56 -0
- package/dist/decide-YTHCBKM6.js +199 -0
- package/dist/decide-YTHCBKM6.js.map +1 -0
- package/dist/delete-B2TDEW7H.js +63 -0
- package/dist/delete-B2TDEW7H.js.map +1 -0
- package/dist/delete-DZUDLYPC.js +69 -0
- package/dist/delete-DZUDLYPC.js.map +1 -0
- package/dist/delete-NZGZP4YP.js +71 -0
- package/dist/delete-NZGZP4YP.js.map +1 -0
- package/dist/delete-SDOZNDWQ.js +54 -0
- package/dist/delete-SDOZNDWQ.js.map +1 -0
- package/dist/delete-VQMU56OH.js +71 -0
- package/dist/delete-VQMU56OH.js.map +1 -0
- package/dist/delete-WKQPMVAM.js +66 -0
- package/dist/delete-WKQPMVAM.js.map +1 -0
- package/dist/demographics-Q3DCXULY.js +138 -0
- package/dist/demographics-Q3DCXULY.js.map +1 -0
- package/dist/describe-JNTCQZNL.js +97 -0
- package/dist/describe-JNTCQZNL.js.map +1 -0
- package/dist/describe-MT4334NG.js +97 -0
- package/dist/describe-MT4334NG.js.map +1 -0
- package/dist/dimensions-FEZUJRAG.js +101 -0
- package/dist/dimensions-FEZUJRAG.js.map +1 -0
- package/dist/discard-NEZM5CHF.js +66 -0
- package/dist/discard-NEZM5CHF.js.map +1 -0
- package/dist/discover-4GD7QSF5.js +93 -0
- package/dist/discover-4GD7QSF5.js.map +1 -0
- package/dist/discover-6K3IOYXR.js +172 -0
- package/dist/discover-6K3IOYXR.js.map +1 -0
- package/dist/domain-7Y256IDR.js +98 -0
- package/dist/domain-7Y256IDR.js.map +1 -0
- package/dist/download-L27HWEOE.js +299 -0
- package/dist/download-L27HWEOE.js.map +1 -0
- package/dist/draft-25G2P2TE.js +281 -0
- package/dist/draft-25G2P2TE.js.map +1 -0
- package/dist/draft-F6TUGXAY.js +307 -0
- package/dist/draft-F6TUGXAY.js.map +1 -0
- package/dist/draft-KLULNBWP.js +233 -0
- package/dist/draft-KLULNBWP.js.map +1 -0
- package/dist/draft-LY5ZPF73.js +217 -0
- package/dist/draft-LY5ZPF73.js.map +1 -0
- package/dist/draft-M4ZHDQ46.js +306 -0
- package/dist/draft-M4ZHDQ46.js.map +1 -0
- package/dist/draft-MI7RWY2K.js +100 -0
- package/dist/draft-MI7RWY2K.js.map +1 -0
- package/dist/draft-P4IVYTY3.js +103 -0
- package/dist/draft-P4IVYTY3.js.map +1 -0
- package/dist/draft-QQMCVDDS.js +328 -0
- package/dist/draft-QQMCVDDS.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-FBTHZKGN.js} +12 -2
- package/dist/env-FBTHZKGN.js.map +1 -0
- package/dist/experiment-HDYTJPUY.js +1397 -0
- package/dist/experiment-HDYTJPUY.js.map +1 -0
- package/dist/export-TS5GYEMA.js +168 -0
- package/dist/export-TS5GYEMA.js.map +1 -0
- package/dist/extract-QVQFUOIK.js +113 -0
- package/dist/extract-QVQFUOIK.js.map +1 -0
- package/dist/facets-7MBSM7BP.js +114 -0
- package/dist/facets-7MBSM7BP.js.map +1 -0
- package/dist/favorites-7QP7BY5K.js +178 -0
- package/dist/favorites-7QP7BY5K.js.map +1 -0
- package/dist/feed-EETRO2FG.js +177 -0
- package/dist/feed-EETRO2FG.js.map +1 -0
- package/dist/feedback-ZOUL22TP.js +66 -0
- package/dist/feedback-ZOUL22TP.js.map +1 -0
- package/dist/feedback-record-XFFJRKS6.js +177 -0
- package/dist/feedback-record-XFFJRKS6.js.map +1 -0
- package/dist/fetch-QE3EB756.js +176 -0
- package/dist/fetch-QE3EB756.js.map +1 -0
- package/dist/fetch-Z7O3ZL4D.js +139 -0
- package/dist/fetch-Z7O3ZL4D.js.map +1 -0
- package/dist/find-KAQ6JDMO.js +134 -0
- package/dist/find-KAQ6JDMO.js.map +1 -0
- package/dist/fit-MY5GVZZZ.js +45 -0
- package/dist/fit-MY5GVZZZ.js.map +1 -0
- package/dist/flows-C67KEMDU.js +247 -0
- package/dist/flows-C67KEMDU.js.map +1 -0
- package/dist/follow-IX4XVK5Y.js +94 -0
- package/dist/follow-IX4XVK5Y.js.map +1 -0
- package/dist/follow-competitors-UZBUOYTH.js +112 -0
- package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
- package/dist/following-VGOIUCIZ.js +113 -0
- package/dist/following-VGOIUCIZ.js.map +1 -0
- package/dist/fonts-UR7XZ5XZ.js +34 -0
- package/dist/fonts-UR7XZ5XZ.js.map +1 -0
- package/dist/forecast-3F4SZNAK.js +104 -0
- package/dist/forecast-3F4SZNAK.js.map +1 -0
- package/dist/forecast-K5E7CTKX.js +168 -0
- package/dist/forecast-K5E7CTKX.js.map +1 -0
- package/dist/funding-H5YO37OW.js +85 -0
- package/dist/funding-H5YO37OW.js.map +1 -0
- package/dist/funnel-2PPEPAMY.js +394 -0
- package/dist/funnel-2PPEPAMY.js.map +1 -0
- package/dist/ga4-YHJ2XMLC.js +55 -0
- package/dist/ga4-YHJ2XMLC.js.map +1 -0
- package/dist/generate-M2ZX5DMI.js +262 -0
- package/dist/generate-M2ZX5DMI.js.map +1 -0
- package/dist/get-4EYKCZ6F.js +59 -0
- package/dist/get-4EYKCZ6F.js.map +1 -0
- package/dist/get-637GALM2.js +63 -0
- package/dist/get-637GALM2.js.map +1 -0
- package/dist/get-AZARFR6O.js +61 -0
- package/dist/get-AZARFR6O.js.map +1 -0
- package/dist/get-BPMEHRUG.js +56 -0
- package/dist/get-BPMEHRUG.js.map +1 -0
- package/dist/get-MQ6MMIZ7.js +78 -0
- package/dist/get-MQ6MMIZ7.js.map +1 -0
- package/dist/get-N4BPOQCB.js +63 -0
- package/dist/get-N4BPOQCB.js.map +1 -0
- package/dist/get-RPZHLQ56.js +92 -0
- package/dist/get-RPZHLQ56.js.map +1 -0
- package/dist/gif-6PRTB2VR.js +94 -0
- package/dist/gif-6PRTB2VR.js.map +1 -0
- package/dist/google-4XAYE4OI.js +3190 -0
- package/dist/google-4XAYE4OI.js.map +1 -0
- package/dist/google-52JRH7X3.js +136 -0
- package/dist/google-52JRH7X3.js.map +1 -0
- package/dist/google-ads-PWX7OF5Z.js +195 -0
- package/dist/google-ads-PWX7OF5Z.js.map +1 -0
- package/dist/group-AAZ5QKC3.js +43 -0
- package/dist/group-AAZ5QKC3.js.map +1 -0
- package/dist/group-GSYCZORC.js +43 -0
- package/dist/group-GSYCZORC.js.map +1 -0
- package/dist/gsc-TS5T7ML2.js +30 -0
- package/dist/gsc-TS5T7ML2.js.map +1 -0
- package/dist/history-EW6LFFCX.js +67 -0
- package/dist/history-EW6LFFCX.js.map +1 -0
- package/dist/history-XI5ABCFO.js +133 -0
- package/dist/history-XI5ABCFO.js.map +1 -0
- package/dist/hubspot-AVUOILRE.js +779 -0
- package/dist/hubspot-AVUOILRE.js.map +1 -0
- package/dist/icon-K75KI6BV.js +137 -0
- package/dist/icon-K75KI6BV.js.map +1 -0
- package/dist/ideas-UCPV3KTM.js +35 -0
- package/dist/ideas-UCPV3KTM.js.map +1 -0
- package/dist/images-CD53I2W5.js +90 -0
- package/dist/images-CD53I2W5.js.map +1 -0
- package/dist/improve-L3BW4EQG.js +86 -0
- package/dist/improve-L3BW4EQG.js.map +1 -0
- package/dist/ingest-KRJOYTCQ.js +107 -0
- package/dist/ingest-KRJOYTCQ.js.map +1 -0
- package/dist/ingest-WE3SPPND.js +23 -0
- package/dist/ingest-WE3SPPND.js.map +1 -0
- package/dist/insights-PELVD4RY.js +122 -0
- package/dist/insights-PELVD4RY.js.map +1 -0
- package/dist/insights-XCA4BUJW.js +423 -0
- package/dist/insights-XCA4BUJW.js.map +1 -0
- package/dist/inspect-QKETG5UJ.js +189 -0
- package/dist/inspect-QKETG5UJ.js.map +1 -0
- package/dist/inspiration-Y2J2PUPC.js +53 -0
- package/dist/inspiration-Y2J2PUPC.js.map +1 -0
- package/dist/intent-YJOJGNVJ.js +95 -0
- package/dist/intent-YJOJGNVJ.js.map +1 -0
- package/dist/job-E2U4FS5P.js +202 -0
- package/dist/job-E2U4FS5P.js.map +1 -0
- package/dist/job-create-DFYCHVQ7.js +109 -0
- package/dist/job-create-DFYCHVQ7.js.map +1 -0
- package/dist/job-status-FFPMTSHB.js +74 -0
- package/dist/job-status-FFPMTSHB.js.map +1 -0
- package/dist/keep-GYZS2UTL.js +78 -0
- package/dist/keep-GYZS2UTL.js.map +1 -0
- package/dist/keyword-gap-QU7O7UKC.js +130 -0
- package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
- package/dist/keyword-metrics-HLCM3QU7.js +197 -0
- package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
- package/dist/keywords-for-site-BDKPQKWB.js +128 -0
- package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
- package/dist/landing-4K6XYNFM.js +28 -0
- package/dist/landing-4K6XYNFM.js.map +1 -0
- package/dist/landings-F7LOAEJE.js +151 -0
- package/dist/landings-F7LOAEJE.js.map +1 -0
- package/dist/languages-P3ZM6R2A.js +40 -0
- package/dist/languages-P3ZM6R2A.js.map +1 -0
- package/dist/languages-XEJKTIFP.js +55 -0
- package/dist/languages-XEJKTIFP.js.map +1 -0
- package/dist/launches-TCFAYUA5.js +19 -0
- package/dist/launches-TCFAYUA5.js.map +1 -0
- package/dist/layerize-ZSKFIPZA.js +190 -0
- package/dist/layerize-ZSKFIPZA.js.map +1 -0
- package/dist/leads-GDF4S2AM.js +90 -0
- package/dist/leads-GDF4S2AM.js.map +1 -0
- package/dist/leads-TPB5OFSQ.js +293 -0
- package/dist/leads-TPB5OFSQ.js.map +1 -0
- package/dist/learn-NMFEA5H5.js +203 -0
- package/dist/learn-NMFEA5H5.js.map +1 -0
- package/dist/library-IP2UKNRU.js +109 -0
- package/dist/library-IP2UKNRU.js.map +1 -0
- package/dist/lighthouse-57XBJRCO.js +75 -0
- package/dist/lighthouse-57XBJRCO.js.map +1 -0
- package/dist/line-item-writes-O6SSS5NQ.js +208 -0
- package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
- package/dist/line-items-ZZAKH3YZ.js +103 -0
- package/dist/line-items-ZZAKH3YZ.js.map +1 -0
- package/dist/link-CRY57R3E.js +64 -0
- package/dist/link-CRY57R3E.js.map +1 -0
- package/dist/linkedin-WC7LGYPP.js +1008 -0
- package/dist/linkedin-WC7LGYPP.js.map +1 -0
- package/dist/list-6IKPWQGG.js +57 -0
- package/dist/list-6IKPWQGG.js.map +1 -0
- package/dist/list-CAUH3BMG.js +65 -0
- package/dist/list-CAUH3BMG.js.map +1 -0
- package/dist/list-CWAKX5TH.js +63 -0
- package/dist/list-CWAKX5TH.js.map +1 -0
- package/dist/list-FJ5FSVL6.js +151 -0
- package/dist/list-FJ5FSVL6.js.map +1 -0
- package/dist/list-GTOSN7DP.js +50 -0
- package/dist/list-GTOSN7DP.js.map +1 -0
- package/dist/list-HLJP4NVE.js +51 -0
- package/dist/list-HLJP4NVE.js.map +1 -0
- package/dist/list-LCUPF7EF.js +76 -0
- package/dist/list-LCUPF7EF.js.map +1 -0
- package/dist/list-NH4ZRZTL.js +303 -0
- package/dist/list-NH4ZRZTL.js.map +1 -0
- package/dist/locations-2BYWKIYA.js +67 -0
- package/dist/locations-2BYWKIYA.js.map +1 -0
- package/dist/locations-LVVDOSXO.js +40 -0
- package/dist/locations-LVVDOSXO.js.map +1 -0
- package/dist/log-6JOWOY5G.js +92 -0
- package/dist/log-6JOWOY5G.js.map +1 -0
- package/dist/logo-AJK2TDQU.js +18 -0
- package/dist/logo-AJK2TDQU.js.map +1 -0
- package/dist/lookup-H5GEM77H.js +22 -0
- package/dist/lookup-H5GEM77H.js.map +1 -0
- package/dist/make-Q2AMLCWE.js +640 -0
- package/dist/make-Q2AMLCWE.js.map +1 -0
- package/dist/map-4KOYFHAN.js +404 -0
- package/dist/map-4KOYFHAN.js.map +1 -0
- package/dist/mcp-LSS2DHYL.js +463 -0
- package/dist/mcp-LSS2DHYL.js.map +1 -0
- package/dist/media-JBCN6V4X.js +15 -0
- package/dist/media-JBCN6V4X.js.map +1 -0
- package/dist/media-RAGEJTZX.js +89 -0
- package/dist/media-RAGEJTZX.js.map +1 -0
- package/dist/media-sources-GSPAV7HT.js +32 -0
- package/dist/media-sources-GSPAV7HT.js.map +1 -0
- package/dist/members-GUUVEK2Y.js +44 -0
- package/dist/members-GUUVEK2Y.js.map +1 -0
- package/dist/meta-Z37ZR3PJ.js +69 -0
- package/dist/meta-Z37ZR3PJ.js.map +1 -0
- package/dist/metrics-KW6SDULI.js +152 -0
- package/dist/metrics-KW6SDULI.js.map +1 -0
- package/dist/models-5J4WFUD3.js +155 -0
- package/dist/models-5J4WFUD3.js.map +1 -0
- package/dist/normalize-DSFVTRXN.js +806 -0
- package/dist/normalize-DSFVTRXN.js.map +1 -0
- package/dist/normalize-EUDI5HEM.js +141 -0
- package/dist/normalize-EUDI5HEM.js.map +1 -0
- package/dist/options-P4PPJQH4.js +121 -0
- package/dist/options-P4PPJQH4.js.map +1 -0
- package/dist/output-DTCLVPUF.js +24 -0
- package/dist/output-DTCLVPUF.js.map +1 -0
- package/dist/page-N2ZO3O7F.js +105 -0
- package/dist/page-N2ZO3O7F.js.map +1 -0
- package/dist/pages-FQ4CBAJ2.js +66 -0
- package/dist/pages-FQ4CBAJ2.js.map +1 -0
- package/dist/performance-A66LYIZX.js +24 -0
- package/dist/performance-A66LYIZX.js.map +1 -0
- package/dist/pinterest-NV5XTNJE.js +96 -0
- package/dist/pinterest-NV5XTNJE.js.map +1 -0
- package/dist/pixels-CTJ43FZ4.js +108 -0
- package/dist/pixels-CTJ43FZ4.js.map +1 -0
- package/dist/pixels-HKINGZCH.js +60 -0
- package/dist/pixels-HKINGZCH.js.map +1 -0
- package/dist/plan-ZYTWLGWK.js +207 -0
- package/dist/plan-ZYTWLGWK.js.map +1 -0
- package/dist/preview-5ROBOQG7.js +169 -0
- package/dist/preview-5ROBOQG7.js.map +1 -0
- package/dist/profile-Q3PHR6FU.js +159 -0
- package/dist/profile-Q3PHR6FU.js.map +1 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
- package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
- package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
- package/dist/properties-WLL6M2P6.js +101 -0
- package/dist/properties-WLL6M2P6.js.map +1 -0
- package/dist/publish-KHNR5ARF.js +322 -0
- package/dist/publish-KHNR5ARF.js.map +1 -0
- package/dist/query-A34J7BGX.js +61 -0
- package/dist/query-A34J7BGX.js.map +1 -0
- package/dist/query-IYZN5KHO.js +236 -0
- package/dist/query-IYZN5KHO.js.map +1 -0
- package/dist/query-UN2P6DBA.js +247 -0
- package/dist/query-UN2P6DBA.js.map +1 -0
- package/dist/questionnaire-Z2ZIKNBV.js +93 -0
- package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
- package/dist/read-GM7PQYJA.js +141 -0
- package/dist/read-GM7PQYJA.js.map +1 -0
- package/dist/reddit-5NPFULGD.js +26 -0
- package/dist/reddit-5NPFULGD.js.map +1 -0
- package/dist/refresh-FGXW4Y4X.js +94 -0
- package/dist/refresh-FGXW4Y4X.js.map +1 -0
- package/dist/release-OKZMC73N.js +60 -0
- package/dist/release-OKZMC73N.js.map +1 -0
- package/dist/relevant-pages-J76ZKNKF.js +99 -0
- package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
- package/dist/remove-CA2J6ACH.js +50 -0
- package/dist/remove-CA2J6ACH.js.map +1 -0
- package/dist/remove-GOYW2G4R.js +48 -0
- package/dist/remove-GOYW2G4R.js.map +1 -0
- package/dist/reopen-XPKSOE6O.js +63 -0
- package/dist/reopen-XPKSOE6O.js.map +1 -0
- package/dist/rerun-2ERJV4WC.js +86 -0
- package/dist/rerun-2ERJV4WC.js.map +1 -0
- package/dist/research-FZ63UZTE.js +62 -0
- package/dist/research-FZ63UZTE.js.map +1 -0
- package/dist/research-YGQQ6CNG.js +262 -0
- package/dist/research-YGQQ6CNG.js.map +1 -0
- package/dist/reset-BGPZ4HMA.js +54 -0
- package/dist/reset-BGPZ4HMA.js.map +1 -0
- package/dist/reset-HTD6LCIT.js +54 -0
- package/dist/reset-HTD6LCIT.js.map +1 -0
- package/dist/resolve-NRDZ6N2B.js +121 -0
- package/dist/resolve-NRDZ6N2B.js.map +1 -0
- package/dist/retry-PF4BGKJV.js +60 -0
- package/dist/retry-PF4BGKJV.js.map +1 -0
- package/dist/retry-XL26JDAV.js +62 -0
- package/dist/retry-XL26JDAV.js.map +1 -0
- package/dist/retry-failed-BEFWRV4Z.js +45 -0
- package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
- package/dist/run-EMJLI7LR.js +65 -0
- package/dist/run-EMJLI7LR.js.map +1 -0
- package/dist/run-L5K44UEA.js +61 -0
- package/dist/run-L5K44UEA.js.map +1 -0
- package/dist/scaffold-ad-AY2OL7RI.js +1550 -0
- package/dist/scaffold-ad-AY2OL7RI.js.map +1 -0
- package/dist/scaffold-static-ad-FXYE46MT.js +973 -0
- package/dist/scaffold-static-ad-FXYE46MT.js.map +1 -0
- package/dist/scaffold-video-533BT6RX.js +874 -0
- package/dist/scaffold-video-533BT6RX.js.map +1 -0
- package/dist/schedule-KQ7UIR3N.js +66 -0
- package/dist/schedule-KQ7UIR3N.js.map +1 -0
- package/dist/schedule-PKPNSISL.js +61 -0
- package/dist/schedule-PKPNSISL.js.map +1 -0
- package/dist/scheduled-agents-LP5LITA3.js +49 -0
- package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
- package/dist/schema-B6J6VPTO.js +132 -0
- package/dist/schema-B6J6VPTO.js.map +1 -0
- package/dist/schema-QXTDLZVC.js +63 -0
- package/dist/schema-QXTDLZVC.js.map +1 -0
- package/dist/scrape-7YKJWFZE.js +2241 -0
- package/dist/scrape-7YKJWFZE.js.map +1 -0
- package/dist/screenshot-ZHBSG3SI.js +102 -0
- package/dist/screenshot-ZHBSG3SI.js.map +1 -0
- package/dist/search-332KFYZ6.js +224 -0
- package/dist/search-332KFYZ6.js.map +1 -0
- package/dist/search-4PBMXXUY.js +91 -0
- package/dist/search-4PBMXXUY.js.map +1 -0
- package/dist/search-6WNUKCMP.js +174 -0
- package/dist/search-6WNUKCMP.js.map +1 -0
- package/dist/search-AVNUU6TJ.js +26 -0
- package/dist/search-AVNUU6TJ.js.map +1 -0
- package/dist/search-F5INRFFK.js +92 -0
- package/dist/search-F5INRFFK.js.map +1 -0
- package/dist/search-copy-DZVBYG2B.js +168 -0
- package/dist/search-copy-DZVBYG2B.js.map +1 -0
- package/dist/seeds-5JTQN5WI.js +101 -0
- package/dist/seeds-5JTQN5WI.js.map +1 -0
- package/dist/select-RSGLDQ5Z.js +96 -0
- package/dist/select-RSGLDQ5Z.js.map +1 -0
- package/dist/sends-3L6QBS46.js +309 -0
- package/dist/sends-3L6QBS46.js.map +1 -0
- package/dist/sequences-YKFV7BDH.js +146 -0
- package/dist/sequences-YKFV7BDH.js.map +1 -0
- package/dist/set-prompt-7WWJI6XW.js +188 -0
- package/dist/set-prompt-7WWJI6XW.js.map +1 -0
- package/dist/setup-links-6H5ONDCQ.js +141 -0
- package/dist/setup-links-6H5ONDCQ.js.map +1 -0
- package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
- package/dist/shared-QAMP7FZV.js.map +1 -0
- package/dist/shopify-2OY3J3OY.js +3692 -0
- package/dist/shopify-2OY3J3OY.js.map +1 -0
- package/dist/site-TBPERLY3.js +177 -0
- package/dist/site-TBPERLY3.js.map +1 -0
- package/dist/sitemaps-XPGLW24S.js +87 -0
- package/dist/sitemaps-XPGLW24S.js.map +1 -0
- package/dist/sites-WMBY2HJV.js +101 -0
- package/dist/sites-WMBY2HJV.js.map +1 -0
- package/dist/skills-3HEILQCU.js +47 -0
- package/dist/skills-3HEILQCU.js.map +1 -0
- package/dist/sources-JFQKTK2L.js +421 -0
- package/dist/sources-JFQKTK2L.js.map +1 -0
- package/dist/sources-Q3I6DDV7.js +30 -0
- package/dist/sources-Q3I6DDV7.js.map +1 -0
- package/dist/stale-CAXBLZKJ.js +66 -0
- package/dist/stale-CAXBLZKJ.js.map +1 -0
- package/dist/stats-GNILHSKK.js +34 -0
- package/dist/stats-GNILHSKK.js.map +1 -0
- package/dist/status-LIZWJYS4.js +62 -0
- package/dist/status-LIZWJYS4.js.map +1 -0
- package/dist/sticker-KCV3VZHY.js +94 -0
- package/dist/sticker-KCV3VZHY.js.map +1 -0
- package/dist/stock-VTORKR4C.js +179 -0
- package/dist/stock-VTORKR4C.js.map +1 -0
- package/dist/studio-QCRA6BY5.js +49 -0
- package/dist/studio-QCRA6BY5.js.map +1 -0
- package/dist/sync-455DB46Y.js +54 -0
- package/dist/sync-455DB46Y.js.map +1 -0
- package/dist/sync-A4KKQ3B6.js +265 -0
- package/dist/sync-A4KKQ3B6.js.map +1 -0
- package/dist/sync-ULKWDFXM.js +54 -0
- package/dist/sync-ULKWDFXM.js.map +1 -0
- package/dist/sync-definition-P6QTHJJ6.js +55 -0
- package/dist/sync-definition-P6QTHJJ6.js.map +1 -0
- package/dist/tag-manager-E7QTXBWQ.js +43 -0
- package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
- package/dist/tags-4Q4I5GQJ.js +20 -0
- package/dist/tags-4Q4I5GQJ.js.map +1 -0
- package/dist/tags-AMEVAQZ4.js +26 -0
- package/dist/tags-AMEVAQZ4.js.map +1 -0
- package/dist/tags-DPLOLH3E.js +20 -0
- package/dist/tags-DPLOLH3E.js.map +1 -0
- package/dist/tags-LDHXONR3.js +224 -0
- package/dist/tags-LDHXONR3.js.map +1 -0
- package/dist/tags-UW3WJTAQ.js +20 -0
- package/dist/tags-UW3WJTAQ.js.map +1 -0
- package/dist/targeting-constants-D64YO3E7.js +118 -0
- package/dist/targeting-constants-D64YO3E7.js.map +1 -0
- package/dist/targeting-criteria-BP6VJA7X.js +113 -0
- package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
- package/dist/targets-CQWO2UXD.js +102 -0
- package/dist/targets-CQWO2UXD.js.map +1 -0
- package/dist/templates-WZSTNRNZ.js +178 -0
- package/dist/templates-WZSTNRNZ.js.map +1 -0
- package/dist/testimonials-ETHSNWUH.js +32 -0
- package/dist/testimonials-ETHSNWUH.js.map +1 -0
- package/dist/themes-YU663LQH.js +94 -0
- package/dist/themes-YU663LQH.js.map +1 -0
- package/dist/top-companies-KTXHS472.js +108 -0
- package/dist/top-companies-KTXHS472.js.map +1 -0
- package/dist/translate-A7LYHUW3.js +600 -0
- package/dist/translate-A7LYHUW3.js.map +1 -0
- package/dist/triggers-4EDFLNGH.js +141 -0
- package/dist/triggers-4EDFLNGH.js.map +1 -0
- package/dist/tweets-ZUKQAAUQ.js +123 -0
- package/dist/tweets-ZUKQAAUQ.js.map +1 -0
- package/dist/unfollow-A4JVCJBF.js +46 -0
- package/dist/unfollow-A4JVCJBF.js.map +1 -0
- package/dist/unlink-KY2OEKMD.js +67 -0
- package/dist/unlink-KY2OEKMD.js.map +1 -0
- package/dist/unstage-FHUG67RI.js +84 -0
- package/dist/unstage-FHUG67RI.js.map +1 -0
- package/dist/unstage-ZRLLCSQF.js +95 -0
- package/dist/unstage-ZRLLCSQF.js.map +1 -0
- package/dist/update-27LGM65V.js +63 -0
- package/dist/update-27LGM65V.js.map +1 -0
- package/dist/update-AIY46I2Q.js +155 -0
- package/dist/update-AIY46I2Q.js.map +1 -0
- package/dist/update-QYD2XZFM.js +142 -0
- package/dist/update-QYD2XZFM.js.map +1 -0
- package/dist/update-W2OSRNFO.js +98 -0
- package/dist/update-W2OSRNFO.js.map +1 -0
- package/dist/upload-JGBTSKGH.js +126 -0
- package/dist/upload-JGBTSKGH.js.map +1 -0
- package/dist/upload-XEHWYMJG.js +150 -0
- package/dist/upload-XEHWYMJG.js.map +1 -0
- package/dist/upscale-I5P2OHTN.js +109 -0
- package/dist/upscale-I5P2OHTN.js.map +1 -0
- package/dist/url-options-QHGA42RP.js +130 -0
- package/dist/url-options-QHGA42RP.js.map +1 -0
- package/dist/url-params-NWSUHWRE.js +98 -0
- package/dist/url-params-NWSUHWRE.js.map +1 -0
- package/dist/use-U4HG2NF3.js +95 -0
- package/dist/use-U4HG2NF3.js.map +1 -0
- package/dist/validate-VKL3XKQ2.js +91 -0
- package/dist/validate-VKL3XKQ2.js.map +1 -0
- package/dist/variant-FOVE6URJ.js +338 -0
- package/dist/variant-FOVE6URJ.js.map +1 -0
- package/dist/videos-DP3VCSYG.js +39 -0
- package/dist/videos-DP3VCSYG.js.map +1 -0
- package/dist/view-HRI3FHCH.js +121 -0
- package/dist/view-HRI3FHCH.js.map +1 -0
- package/dist/viewer-check-JYUE24M6.js +68 -0
- package/dist/viewer-check-JYUE24M6.js.map +1 -0
- package/dist/web-AFUIWPFU.js +140 -0
- package/dist/web-AFUIWPFU.js.map +1 -0
- package/dist/winners-SMMDN6LW.js +113 -0
- package/dist/winners-SMMDN6LW.js.map +1 -0
- package/dist/winning-ads-PCIJUYVA.js +84 -0
- package/dist/winning-ads-PCIJUYVA.js.map +1 -0
- package/dist/write-commands-7Z34WG2J.js +206 -0
- package/dist/write-commands-7Z34WG2J.js.map +1 -0
- package/dist/write-commands-BLT2SEC4.js +713 -0
- package/dist/write-commands-BLT2SEC4.js.map +1 -0
- package/dist/write-commands-N4FSGRVQ.js +743 -0
- package/dist/write-commands-N4FSGRVQ.js.map +1 -0
- package/dist/write-commands-Q4MQ3BGM.js +1015 -0
- package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
- package/dist/x-AUOZJNWE.js +47 -0
- package/dist/x-AUOZJNWE.js.map +1 -0
- package/package.json +9 -2
- package/dist/chunk-FGHMWBUD.js +0 -9989
- package/dist/chunk-FGHMWBUD.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-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/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
- /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
- /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import {
|
|
2
|
+
measureEmptyCorpus
|
|
3
|
+
} from "./chunk-J57GWTPK.js";
|
|
4
|
+
import {
|
|
5
|
+
activeFilterFlags
|
|
6
|
+
} from "./chunk-Q6ULQMWG.js";
|
|
7
|
+
import {
|
|
8
|
+
testimonialSourceTypeSchema
|
|
9
|
+
} from "./chunk-SMIENBNX.js";
|
|
10
|
+
import "./chunk-GXDLWBOY.js";
|
|
11
|
+
import "./chunk-GIWHHCD6.js";
|
|
12
|
+
import "./chunk-UI6BKYQD.js";
|
|
13
|
+
import "./chunk-XX6ZMCY5.js";
|
|
14
|
+
import {
|
|
15
|
+
ApiError,
|
|
16
|
+
apiPost
|
|
17
|
+
} from "./chunk-HREWXNTO.js";
|
|
18
|
+
import "./chunk-HLXWKMTK.js";
|
|
19
|
+
import "./chunk-O6QKCJE4.js";
|
|
20
|
+
import {
|
|
21
|
+
registerSchema,
|
|
22
|
+
testimonialNormalizer,
|
|
23
|
+
writeJson,
|
|
24
|
+
writeOutput
|
|
25
|
+
} from "./chunk-WOTDHRNF.js";
|
|
26
|
+
import "./chunk-YQSBHWOI.js";
|
|
27
|
+
|
|
28
|
+
// src/commands/testimonials/search.ts
|
|
29
|
+
import { defineCommand } from "citty";
|
|
30
|
+
var FILTER_FLAGS = ["source", "rating-min", "rating-max", "status", "sentiment", "language", "tags"];
|
|
31
|
+
function languageBiasHint(results, requestedLanguage) {
|
|
32
|
+
if (requestedLanguage) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const withLang = results.filter((r) => typeof r.language === "string" && r.language.length > 0);
|
|
36
|
+
if (withLang.length < 3) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const counts = /* @__PURE__ */ new Map();
|
|
40
|
+
for (const r of withLang) {
|
|
41
|
+
const lang = r.language;
|
|
42
|
+
counts.set(lang, (counts.get(lang) ?? 0) + 1);
|
|
43
|
+
}
|
|
44
|
+
const [topLang, topCount] = [...counts.entries()].sort((a, b) => b[1] - a[1])[0] ?? ["", 0];
|
|
45
|
+
if (topLang && topCount / withLang.length >= 0.8) {
|
|
46
|
+
return `Results skew ${topLang} (${topCount}/${withLang.length}). If you're sourcing quotes for a specific market, pass --language <code> (e.g. --language en) so the ad's language matches its audience.`;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
registerSchema({
|
|
51
|
+
command: "testimonials.search",
|
|
52
|
+
description: "Search testimonials by text query. Uses hybrid BM25 + vector + reranking.",
|
|
53
|
+
args: {
|
|
54
|
+
query: { type: "string", description: "Search query text", required: true },
|
|
55
|
+
limit: { type: "number", description: "Maximum results to return", required: false, default: 10 },
|
|
56
|
+
source: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: `Filter by source: ${testimonialSourceTypeSchema.options.join("|")}`,
|
|
59
|
+
required: false,
|
|
60
|
+
enum: [...testimonialSourceTypeSchema.options]
|
|
61
|
+
},
|
|
62
|
+
"rating-min": { type: "number", description: "Minimum star rating (1-5)", required: false },
|
|
63
|
+
"rating-max": { type: "number", description: "Maximum star rating (1-5)", required: false },
|
|
64
|
+
status: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: "Filter by status: pending|processing|ready|error",
|
|
67
|
+
required: false,
|
|
68
|
+
enum: ["pending", "processing", "ready", "error"]
|
|
69
|
+
},
|
|
70
|
+
sentiment: {
|
|
71
|
+
type: "string",
|
|
72
|
+
description: "Filter: positive|neutral|negative",
|
|
73
|
+
required: false,
|
|
74
|
+
enum: ["positive", "neutral", "negative"]
|
|
75
|
+
},
|
|
76
|
+
language: { type: "string", description: "Filter by language code (e.g. en, es)", required: false },
|
|
77
|
+
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
function buildSearchRequest(query, args) {
|
|
81
|
+
const body = { query };
|
|
82
|
+
if (args.limit !== void 0) {
|
|
83
|
+
body.limit = Number(args.limit);
|
|
84
|
+
}
|
|
85
|
+
if (args.source) {
|
|
86
|
+
body.source = args.source;
|
|
87
|
+
}
|
|
88
|
+
if (args["rating-min"] !== void 0) {
|
|
89
|
+
body.rating_min = Number(args["rating-min"]);
|
|
90
|
+
}
|
|
91
|
+
if (args["rating-max"] !== void 0) {
|
|
92
|
+
body.rating_max = Number(args["rating-max"]);
|
|
93
|
+
}
|
|
94
|
+
if (args.status) {
|
|
95
|
+
body.status = args.status;
|
|
96
|
+
}
|
|
97
|
+
if (args.sentiment) {
|
|
98
|
+
body.sentiment = args.sentiment;
|
|
99
|
+
}
|
|
100
|
+
if (args.language) {
|
|
101
|
+
body.language = args.language;
|
|
102
|
+
}
|
|
103
|
+
if (args.tags) {
|
|
104
|
+
body.tags = args.tags.split(",").filter(Boolean);
|
|
105
|
+
}
|
|
106
|
+
return body;
|
|
107
|
+
}
|
|
108
|
+
var searchCommand = defineCommand({
|
|
109
|
+
meta: {
|
|
110
|
+
name: "search",
|
|
111
|
+
description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
|
|
112
|
+
},
|
|
113
|
+
args: {
|
|
114
|
+
query: { type: "positional", description: "Search query text", required: false },
|
|
115
|
+
limit: { type: "string", description: "Max results (default 10)", required: false },
|
|
116
|
+
source: {
|
|
117
|
+
type: "string",
|
|
118
|
+
description: `Filter by source: ${testimonialSourceTypeSchema.options.join("|")}`,
|
|
119
|
+
required: false
|
|
120
|
+
},
|
|
121
|
+
"rating-min": { type: "string", description: "Minimum star rating (1-5)", required: false },
|
|
122
|
+
"rating-max": { type: "string", description: "Maximum star rating (1-5)", required: false },
|
|
123
|
+
status: { type: "string", description: "Filter by status: pending|processing|ready|error", required: false },
|
|
124
|
+
sentiment: { type: "string", description: "Filter: positive|neutral|negative", required: false },
|
|
125
|
+
language: { type: "string", description: "Filter by language code (e.g. en, es)", required: false },
|
|
126
|
+
tags: { type: "string", description: "Comma-separated tags to filter by", required: false },
|
|
127
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
128
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false },
|
|
129
|
+
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
130
|
+
},
|
|
131
|
+
run: async ({ args }) => {
|
|
132
|
+
try {
|
|
133
|
+
const query = args.query;
|
|
134
|
+
if (!query) {
|
|
135
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Search query is required" } });
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
const body = buildSearchRequest(query, args);
|
|
139
|
+
const data = await apiPost("/api/testimonials/search", body);
|
|
140
|
+
const languageHint = languageBiasHint(data, body.language);
|
|
141
|
+
const { hints: emptyHints, empty } = await measureEmptyCorpus({
|
|
142
|
+
command: "search",
|
|
143
|
+
resultCount: data.length,
|
|
144
|
+
activeFilters: activeFilterFlags(args, FILTER_FLAGS)
|
|
145
|
+
});
|
|
146
|
+
const hints = [...emptyHints, ...languageHint ? [languageHint] : []];
|
|
147
|
+
const outputFormat = args.output || "json";
|
|
148
|
+
writeOutput(
|
|
149
|
+
{ ok: true, data, ...empty ? { meta: { empty } } : {}, ...hints.length > 0 ? { hints } : {} },
|
|
150
|
+
outputFormat,
|
|
151
|
+
args.fields ? args.fields.split(",") : void 0,
|
|
152
|
+
args.full,
|
|
153
|
+
testimonialNormalizer
|
|
154
|
+
);
|
|
155
|
+
if (outputFormat !== "json") {
|
|
156
|
+
for (const hint of hints) {
|
|
157
|
+
process.stderr.write(`${hint}
|
|
158
|
+
`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
} catch (err) {
|
|
162
|
+
if (err instanceof ApiError) {
|
|
163
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
export {
|
|
172
|
+
searchCommand
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=search-6WNUKCMP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/testimonials/search.ts"],"sourcesContent":["import {\n type TestimonialsSearchRequest,\n type TestimonialsSearchResponse,\n testimonialSourceTypeSchema,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { type OutputFormat, testimonialNormalizer, writeJson, writeOutput } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { activeFilterFlags } from \"../images/searchHints.ts\";\nimport { measureEmptyCorpus } from \"./emptyCorpusHints.ts\";\n\nconst FILTER_FLAGS = [\"source\", \"rating-min\", \"rating-max\", \"status\", \"sentiment\", \"language\", \"tags\"];\n\n/**\n * Hybrid search reranks over this company's whole corpus with no language\n * awareness, so a corpus seeded in one language returns that language even for\n * an English query. When the caller didn't pin a `--language` and the results\n * clearly skew to one, nudge them to scope by the target market's language —\n * otherwise a Spanish/French-heavy corpus silently starves a market-specific ad\n * of on-language quotes.\n */\nfunction languageBiasHint(results: TestimonialsSearchResponse, requestedLanguage: string | undefined): string | null {\n if (requestedLanguage) {\n return null;\n }\n const withLang = results.filter((r) => typeof r.language === \"string\" && r.language.length > 0);\n if (withLang.length < 3) {\n return null;\n }\n const counts = new Map<string, number>();\n for (const r of withLang) {\n const lang = r.language as string;\n counts.set(lang, (counts.get(lang) ?? 0) + 1);\n }\n const [topLang, topCount] = [...counts.entries()].sort((a, b) => b[1] - a[1])[0] ?? [\"\", 0];\n if (topLang && topCount / withLang.length >= 0.8) {\n return `Results skew ${topLang} (${topCount}/${withLang.length}). If you're sourcing quotes for a specific market, pass --language <code> (e.g. --language en) so the ad's language matches its audience.`;\n }\n return null;\n}\n\nregisterSchema({\n command: \"testimonials.search\",\n description: \"Search testimonials by text query. Uses hybrid BM25 + vector + reranking.\",\n args: {\n query: { type: \"string\", description: \"Search query text\", required: true },\n limit: { type: \"number\", description: \"Maximum results to return\", required: false, default: 10 },\n source: {\n type: \"string\",\n description: `Filter by source: ${testimonialSourceTypeSchema.options.join(\"|\")}`,\n required: false,\n enum: [...testimonialSourceTypeSchema.options],\n },\n \"rating-min\": { type: \"number\", description: \"Minimum star rating (1-5)\", required: false },\n \"rating-max\": { type: \"number\", description: \"Maximum star rating (1-5)\", required: false },\n status: {\n type: \"string\",\n description: \"Filter by status: pending|processing|ready|error\",\n required: false,\n enum: [\"pending\", \"processing\", \"ready\", \"error\"],\n },\n sentiment: {\n type: \"string\",\n description: \"Filter: positive|neutral|negative\",\n required: false,\n enum: [\"positive\", \"neutral\", \"negative\"],\n },\n language: { type: \"string\", description: \"Filter by language code (e.g. en, es)\", required: false },\n tags: { type: \"string\", description: \"Comma-separated tags to filter by\", required: false },\n },\n});\n\n/** Assemble the search request body from CLI args, applying only the flags that were provided. */\nfunction buildSearchRequest(query: string, args: Record<string, unknown>): TestimonialsSearchRequest {\n const body: TestimonialsSearchRequest = { query };\n if (args.limit !== undefined) {\n body.limit = Number(args.limit);\n }\n if (args.source) {\n body.source = args.source as TestimonialsSearchRequest[\"source\"];\n }\n if (args[\"rating-min\"] !== undefined) {\n body.rating_min = Number(args[\"rating-min\"]);\n }\n if (args[\"rating-max\"] !== undefined) {\n body.rating_max = Number(args[\"rating-max\"]);\n }\n if (args.status) {\n body.status = args.status as TestimonialsSearchRequest[\"status\"];\n }\n if (args.sentiment) {\n body.sentiment = args.sentiment as TestimonialsSearchRequest[\"sentiment\"];\n }\n if (args.language) {\n body.language = args.language as string;\n }\n if (args.tags) {\n body.tags = (args.tags as string).split(\",\").filter(Boolean);\n }\n return body;\n}\n\nexport const searchCommand = defineCommand({\n meta: {\n name: \"search\",\n description:\n \"Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4\",\n },\n args: {\n query: { type: \"positional\", description: \"Search query text\", required: false },\n limit: { type: \"string\", description: \"Max results (default 10)\", required: false },\n source: {\n type: \"string\",\n description: `Filter by source: ${testimonialSourceTypeSchema.options.join(\"|\")}`,\n required: false,\n },\n \"rating-min\": { type: \"string\", description: \"Minimum star rating (1-5)\", required: false },\n \"rating-max\": { type: \"string\", description: \"Maximum star rating (1-5)\", required: false },\n status: { type: \"string\", description: \"Filter by status: pending|processing|ready|error\", required: false },\n sentiment: { type: \"string\", description: \"Filter: positive|neutral|negative\", required: false },\n language: { type: \"string\", description: \"Filter by language code (e.g. en, es)\", 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 = buildSearchRequest(query, args);\n const data = await apiPost<TestimonialsSearchResponse>(\"/api/testimonials/search\", body);\n const languageHint = languageBiasHint(data, body.language);\n const { hints: emptyHints, empty } = await measureEmptyCorpus({\n command: \"search\",\n resultCount: data.length,\n activeFilters: activeFilterFlags(args, FILTER_FLAGS),\n });\n const hints = [...emptyHints, ...(languageHint ? [languageHint] : [])];\n const outputFormat = (args.output as OutputFormat) || \"json\";\n writeOutput(\n { ok: true, data, ...(empty ? { meta: { empty } } : {}), ...(hints.length > 0 ? { hints } : {}) },\n outputFormat,\n args.fields ? args.fields.split(\",\") : undefined,\n args.full as boolean,\n testimonialNormalizer,\n );\n // md/files render only the table, so hints (which never reach the table)\n // go to stderr — otherwise `--output md` hides the language skew, and an\n // empty result prints a header row and nothing else.\n if (outputFormat !== \"json\") {\n for (const hint of hints) {\n process.stderr.write(`${hint}\\n`);\n }\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,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildSearchBody,
|
|
3
|
+
designedByDefault,
|
|
4
|
+
searchCommand,
|
|
5
|
+
searchErrorFix,
|
|
6
|
+
searchHints,
|
|
7
|
+
searchRejection,
|
|
8
|
+
unknownCountryFix
|
|
9
|
+
} from "./chunk-VS4C7VAR.js";
|
|
10
|
+
import "./chunk-6O7ISBC7.js";
|
|
11
|
+
import "./chunk-752S7JF6.js";
|
|
12
|
+
import "./chunk-HREWXNTO.js";
|
|
13
|
+
import "./chunk-HLXWKMTK.js";
|
|
14
|
+
import "./chunk-O6QKCJE4.js";
|
|
15
|
+
import "./chunk-WOTDHRNF.js";
|
|
16
|
+
import "./chunk-YQSBHWOI.js";
|
|
17
|
+
export {
|
|
18
|
+
buildSearchBody,
|
|
19
|
+
designedByDefault,
|
|
20
|
+
searchCommand,
|
|
21
|
+
searchErrorFix,
|
|
22
|
+
searchHints,
|
|
23
|
+
searchRejection,
|
|
24
|
+
unknownCountryFix
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=search-AVNUU6TJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError,
|
|
3
|
+
apiPost
|
|
4
|
+
} from "./chunk-HREWXNTO.js";
|
|
5
|
+
import "./chunk-HLXWKMTK.js";
|
|
6
|
+
import "./chunk-O6QKCJE4.js";
|
|
7
|
+
import {
|
|
8
|
+
registerSchema,
|
|
9
|
+
writeJson,
|
|
10
|
+
writeOutput
|
|
11
|
+
} from "./chunk-WOTDHRNF.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-F5INRFFK.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-752S7JF6.js";
|
|
4
|
+
import {
|
|
5
|
+
apiGet
|
|
6
|
+
} from "./chunk-HREWXNTO.js";
|
|
7
|
+
import "./chunk-HLXWKMTK.js";
|
|
8
|
+
import "./chunk-O6QKCJE4.js";
|
|
9
|
+
import {
|
|
10
|
+
registerSchema,
|
|
11
|
+
searchCopyPartKindSchema,
|
|
12
|
+
writeJson
|
|
13
|
+
} from "./chunk-WOTDHRNF.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-DZVBYG2B.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":"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","names":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import {
|
|
2
|
+
reportError
|
|
3
|
+
} from "./chunk-752S7JF6.js";
|
|
4
|
+
import {
|
|
5
|
+
apiGet
|
|
6
|
+
} from "./chunk-HREWXNTO.js";
|
|
7
|
+
import "./chunk-HLXWKMTK.js";
|
|
8
|
+
import "./chunk-O6QKCJE4.js";
|
|
9
|
+
import {
|
|
10
|
+
registerSchema,
|
|
11
|
+
writeJson,
|
|
12
|
+
writeOutput
|
|
13
|
+
} from "./chunk-WOTDHRNF.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-5JTQN5WI.js.map
|