@koda-sl/baker-cli 0.386.0-dev.4e118c09a → 0.386.0-dev.d6e55699d
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 +1057 -215
- package/canvas/tiktok-captions-composition/index.html +5 -6
- package/canvas/tiktok-captions-composition/meta.json +5 -0
- package/dist/account-5TGX45FO.js +79 -0
- package/dist/account-5TGX45FO.js.map +1 -0
- package/dist/account-CLOKMTTC.js +49 -0
- package/dist/account-CLOKMTTC.js.map +1 -0
- package/dist/account-XFK6VX2R.js +80 -0
- package/dist/account-XFK6VX2R.js.map +1 -0
- package/dist/account-reads-ZK5RMLB2.js +218 -0
- package/dist/account-reads-ZK5RMLB2.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-HGAFFOA7.js +77 -0
- package/dist/accounts-HGAFFOA7.js.map +1 -0
- package/dist/accounts-OWMXUT6D.js +611 -0
- package/dist/accounts-OWMXUT6D.js.map +1 -0
- package/dist/accounts-RYBDLQ6H.js +75 -0
- package/dist/accounts-RYBDLQ6H.js.map +1 -0
- package/dist/actions-NSQYW7YS.js +55 -0
- package/dist/actions-NSQYW7YS.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-HWIE5PGR.js +302 -0
- package/dist/add-HWIE5PGR.js.map +1 -0
- package/dist/add-IIW3NHZH.js +104 -0
- package/dist/add-IIW3NHZH.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-D6KKCQ3Q.js +40 -0
- package/dist/ads-D6KKCQ3Q.js.map +1 -0
- package/dist/ads-QKIHHXP5.js +113 -0
- package/dist/ads-QKIHHXP5.js.map +1 -0
- package/dist/adsets-7WMWU45E.js +176 -0
- package/dist/adsets-7WMWU45E.js.map +1 -0
- package/dist/advertisers-6NZ2M57X.js +120 -0
- package/dist/advertisers-6NZ2M57X.js.map +1 -0
- package/dist/advertisers-BCGKUMEH.js +125 -0
- package/dist/advertisers-BCGKUMEH.js.map +1 -0
- package/dist/analytics-QJC2BTZY.js +433 -0
- package/dist/analytics-QJC2BTZY.js.map +1 -0
- package/dist/analytics-SN6K7J7M.js +1980 -0
- package/dist/analytics-SN6K7J7M.js.map +1 -0
- package/dist/animate-JXIT77Y5.js +480 -0
- package/dist/animate-JXIT77Y5.js.map +1 -0
- package/dist/assign-XFDA42KL.js +77 -0
- package/dist/assign-XFDA42KL.js.map +1 -0
- package/dist/audience-size-DJPFYHPJ.js +94 -0
- package/dist/audience-size-DJPFYHPJ.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-VXTIBZP6.js +78 -0
- package/dist/audiences-VXTIBZP6.js.map +1 -0
- package/dist/audit-M5B7TZGT.js +151 -0
- package/dist/audit-M5B7TZGT.js.map +1 -0
- package/dist/audit-UIPMTI5C.js +88 -0
- package/dist/audit-UIPMTI5C.js.map +1 -0
- package/dist/autocomplete-NWHEASQY.js +111 -0
- package/dist/autocomplete-NWHEASQY.js.map +1 -0
- package/dist/avatars-RNMUVMFM.js +38 -0
- package/dist/avatars-RNMUVMFM.js.map +1 -0
- package/dist/bid-pricing-EAY3HAHY.js +99 -0
- package/dist/bid-pricing-EAY3HAHY.js.map +1 -0
- package/dist/brand-XBHWYPMT.js +22 -0
- package/dist/brand-XBHWYPMT.js.map +1 -0
- package/dist/brief-XBAAPKRR.js +492 -0
- package/dist/brief-XBAAPKRR.js.map +1 -0
- package/dist/businesses-J7OP7MSK.js +53 -0
- package/dist/businesses-J7OP7MSK.js.map +1 -0
- package/dist/campaign-groups-7KA2RA5V.js +95 -0
- package/dist/campaign-groups-7KA2RA5V.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-D2UID2I6.js +165 -0
- package/dist/campaign-writes-D2UID2I6.js.map +1 -0
- package/dist/campaigns-JPYNVFQI.js +76 -0
- package/dist/campaigns-JPYNVFQI.js.map +1 -0
- package/dist/campaigns-NJ3KOPJS.js +107 -0
- package/dist/campaigns-NJ3KOPJS.js.map +1 -0
- package/dist/campaigns-QUTTH2TB.js +110 -0
- package/dist/campaigns-QUTTH2TB.js.map +1 -0
- package/dist/campaigns-SOO5RHYG.js +109 -0
- package/dist/campaigns-SOO5RHYG.js.map +1 -0
- package/dist/canvas-3VZ46BCF.js +46 -0
- package/dist/canvas-3VZ46BCF.js.map +1 -0
- package/dist/capabilities-KAYDPH7E.js +144 -0
- package/dist/capabilities-KAYDPH7E.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-22EO52IY.js +135 -0
- package/dist/changes-22EO52IY.js.map +1 -0
- package/dist/chatgpt-B3NHRJUE.js +47 -0
- package/dist/chatgpt-B3NHRJUE.js.map +1 -0
- package/dist/chats-QG3IRHOD.js +262 -0
- package/dist/chats-QG3IRHOD.js.map +1 -0
- package/dist/chunk-2CV7LX23.js +474 -0
- package/dist/chunk-2CV7LX23.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-32PSERWG.js +363 -0
- package/dist/chunk-32PSERWG.js.map +1 -0
- package/dist/chunk-3ACMDRSE.js +39 -0
- package/dist/chunk-3ACMDRSE.js.map +1 -0
- package/dist/chunk-3UDSYYND.js +42 -0
- package/dist/chunk-3UDSYYND.js.map +1 -0
- package/dist/chunk-3V5E5SVE.js +382 -0
- package/dist/chunk-3V5E5SVE.js.map +1 -0
- package/dist/chunk-455BTAHM.js +57 -0
- package/dist/chunk-455BTAHM.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-4OBO75XU.js +275 -0
- package/dist/chunk-4OBO75XU.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-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-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-AUCITRRT.js +310 -0
- package/dist/chunk-AUCITRRT.js.map +1 -0
- package/dist/chunk-AUSKKFVH.js +84 -0
- package/dist/chunk-AUSKKFVH.js.map +1 -0
- package/dist/chunk-BEGARAVC.js +174 -0
- package/dist/chunk-BEGARAVC.js.map +1 -0
- package/dist/{chunk-WWCLT3RG.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-CKI3RLMU.js +159 -0
- package/dist/chunk-CKI3RLMU.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-DIICZGIS.js +509 -0
- package/dist/chunk-DIICZGIS.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-DYZJBWT2.js +1079 -0
- package/dist/chunk-DYZJBWT2.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-EQEZAYPL.js +541 -0
- package/dist/chunk-EQEZAYPL.js.map +1 -0
- package/dist/chunk-ERSX3MKH.js +34 -0
- package/dist/chunk-ERSX3MKH.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-GOJXKIFQ.js +1605 -0
- package/dist/chunk-GOJXKIFQ.js.map +1 -0
- package/dist/chunk-GPXIUYIA.js +592 -0
- package/dist/chunk-GPXIUYIA.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-H7MLHG2I.js +94 -0
- package/dist/chunk-H7MLHG2I.js.map +1 -0
- package/dist/chunk-HAE4WWFQ.js +455 -0
- package/dist/chunk-HAE4WWFQ.js.map +1 -0
- package/dist/chunk-HB3LNR4Y.js +197 -0
- package/dist/chunk-HB3LNR4Y.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-HVJUMQYY.js +494 -0
- package/dist/chunk-HVJUMQYY.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-IMORFIUT.js +207 -0
- package/dist/chunk-IMORFIUT.js.map +1 -0
- package/dist/chunk-IOCSDFF2.js +23992 -0
- package/dist/chunk-IOCSDFF2.js.map +1 -0
- package/dist/chunk-IRTYTT5D.js +665 -0
- package/dist/chunk-IRTYTT5D.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-JAYT43KX.js +4227 -0
- package/dist/chunk-JAYT43KX.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-JRGPCPT2.js +479 -0
- package/dist/chunk-JRGPCPT2.js.map +1 -0
- package/dist/chunk-JUAIGJ2A.js +76 -0
- package/dist/chunk-JUAIGJ2A.js.map +1 -0
- package/dist/chunk-K2RYUZ5Y.js +51 -0
- package/dist/chunk-K2RYUZ5Y.js.map +1 -0
- package/dist/chunk-K5OQES4V.js +58 -0
- package/dist/chunk-K5OQES4V.js.map +1 -0
- package/dist/chunk-KAHMADFH.js +455 -0
- package/dist/chunk-KAHMADFH.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-KRIK2JR4.js +6212 -0
- package/dist/chunk-KRIK2JR4.js.map +1 -0
- package/dist/chunk-KZUHRZ2C.js +5187 -0
- package/dist/chunk-KZUHRZ2C.js.map +1 -0
- package/dist/chunk-L5WIRYNB.js +19 -0
- package/dist/chunk-L5WIRYNB.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-LWBWCIWL.js +297 -0
- package/dist/chunk-LWBWCIWL.js.map +1 -0
- package/dist/chunk-M4PPFVYL.js +346 -0
- package/dist/chunk-M4PPFVYL.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-MUVSWFLL.js +111 -0
- package/dist/chunk-MUVSWFLL.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-O6QKCJE4.js +455 -0
- package/dist/chunk-O6QKCJE4.js.map +1 -0
- package/dist/chunk-OBNWER4H.js +1599 -0
- package/dist/chunk-OBNWER4H.js.map +1 -0
- package/dist/chunk-OFFAMC5H.js +225 -0
- package/dist/chunk-OFFAMC5H.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-PAHLJMC3.js +175 -0
- package/dist/chunk-PAHLJMC3.js.map +1 -0
- package/dist/chunk-PBVLPFJ6.js +169 -0
- package/dist/chunk-PBVLPFJ6.js.map +1 -0
- package/dist/chunk-PFBQERWX.js +10 -0
- package/dist/chunk-PFBQERWX.js.map +1 -0
- package/dist/chunk-Q6ULQMWG.js +41 -0
- package/dist/chunk-Q6ULQMWG.js.map +1 -0
- package/dist/chunk-QKE7GXZ7.js +6683 -0
- package/dist/chunk-QKE7GXZ7.js.map +1 -0
- package/dist/chunk-QL573PLH.js +150 -0
- package/dist/chunk-QL573PLH.js.map +1 -0
- package/dist/chunk-QO23YHLK.js +84 -0
- package/dist/chunk-QO23YHLK.js.map +1 -0
- package/dist/chunk-R5OQM7FF.js +179 -0
- package/dist/chunk-R5OQM7FF.js.map +1 -0
- package/dist/chunk-RDLB54KF.js +629 -0
- package/dist/chunk-RDLB54KF.js.map +1 -0
- package/dist/chunk-RGIXQEGJ.js +502 -0
- package/dist/chunk-RGIXQEGJ.js.map +1 -0
- package/dist/chunk-RRIAHUWP.js +304 -0
- package/dist/chunk-RRIAHUWP.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-SLB46MSS.js +64 -0
- package/dist/chunk-SLB46MSS.js.map +1 -0
- package/dist/chunk-T7M4WFNV.js +172 -0
- package/dist/chunk-T7M4WFNV.js.map +1 -0
- package/dist/{chunk-JTZXQRXI.js → chunk-TPXI2GCW.js} +4 -4
- package/dist/chunk-TWNFQUBS.js +23 -0
- package/dist/chunk-TWNFQUBS.js.map +1 -0
- 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-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-V5GSRREZ.js +846 -0
- package/dist/chunk-V5GSRREZ.js.map +1 -0
- package/dist/chunk-V5HDRJQW.js +337 -0
- package/dist/chunk-V5HDRJQW.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-WIRBRCTJ.js +228 -0
- package/dist/chunk-WIRBRCTJ.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-WPKOEFOE.js +103 -0
- package/dist/chunk-WPKOEFOE.js.map +1 -0
- package/dist/chunk-XE3WS3QE.js +183 -0
- package/dist/chunk-XE3WS3QE.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-Y362QH54.js +98 -0
- package/dist/chunk-Y362QH54.js.map +1 -0
- package/dist/chunk-Y4HZNSBN.js +3151 -0
- package/dist/chunk-Y4HZNSBN.js.map +1 -0
- package/dist/chunk-Y4T6ATDQ.js +74 -0
- package/dist/chunk-Y4T6ATDQ.js.map +1 -0
- package/dist/chunk-YIMGUMXX.js +206 -0
- package/dist/chunk-YIMGUMXX.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-ZCFSHQBF.js +92 -0
- package/dist/chunk-ZCFSHQBF.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-4AFNDV3A.js +197 -0
- package/dist/claim-4AFNDV3A.js.map +1 -0
- package/dist/cli.js +104 -71708
- 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-PZRRZZNV.js +195 -0
- package/dist/companies-PZRRZZNV.js.map +1 -0
- package/dist/complete-IBW5DNVZ.js +81 -0
- package/dist/complete-IBW5DNVZ.js.map +1 -0
- package/dist/config-X6GKOVQ6.js +88 -0
- package/dist/config-X6GKOVQ6.js.map +1 -0
- package/dist/connect-WYUYS5V4.js +42 -0
- package/dist/content-UYZC4AKN.js +85 -0
- package/dist/content-UYZC4AKN.js.map +1 -0
- package/dist/conversation-6AG3UBYY.js +93 -0
- package/dist/conversation-6AG3UBYY.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-YML2UNJB.js +438 -0
- package/dist/conversion-upload-command-YML2UNJB.js.map +1 -0
- package/dist/conversion-writes-WHFFUWWL.js +120 -0
- package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
- package/dist/conversions-NOBBFNIU.js +135 -0
- package/dist/conversions-NOBBFNIU.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-JK42P564.js +59 -0
- package/dist/create-JK42P564.js.map +1 -0
- package/dist/create-LAWUVPCY.js +207 -0
- package/dist/create-LAWUVPCY.js.map +1 -0
- package/dist/create-MUPQ5CTH.js +138 -0
- package/dist/create-MUPQ5CTH.js.map +1 -0
- package/dist/create-NQJNCFRO.js +236 -0
- package/dist/create-NQJNCFRO.js.map +1 -0
- package/dist/creatives-KCWFZIM5.js +182 -0
- package/dist/creatives-KCWFZIM5.js.map +1 -0
- package/dist/creatives-NNDWCSKJ.js +51 -0
- package/dist/creatives-NNDWCSKJ.js.map +1 -0
- package/dist/creatives-RHNHTS2R.js +87 -0
- package/dist/creatives-RHNHTS2R.js.map +1 -0
- package/dist/credentials-CEKGXR2C.js +287 -0
- package/dist/credentials-CEKGXR2C.js.map +1 -0
- package/dist/critique-HDDYER52.js +1449 -0
- package/dist/critique-HDDYER52.js.map +1 -0
- package/dist/critique-QIN2FO4F.js +216 -0
- package/dist/critique-QIN2FO4F.js.map +1 -0
- package/dist/crm-KBPWZC6J.js +318 -0
- package/dist/crm-KBPWZC6J.js.map +1 -0
- package/dist/crm-QBWD7CWB.js +224 -0
- package/dist/crm-QBWD7CWB.js.map +1 -0
- package/dist/crop-U3AD4DDR.js +113 -0
- package/dist/crop-U3AD4DDR.js.map +1 -0
- package/dist/currency-XTFGZFGB.js +88 -0
- package/dist/currency-XTFGZFGB.js.map +1 -0
- package/dist/custom-conversions-W3K33V33.js +125 -0
- package/dist/custom-conversions-W3K33V33.js.map +1 -0
- package/dist/customers-HYE7N2H5.js +56 -0
- package/dist/decide-YTHCBKM6.js +199 -0
- package/dist/decide-YTHCBKM6.js.map +1 -0
- package/dist/delete-64REPCY2.js +54 -0
- package/dist/delete-64REPCY2.js.map +1 -0
- package/dist/delete-AY3KL3N3.js +63 -0
- package/dist/delete-AY3KL3N3.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-VO2LZXE4.js +66 -0
- package/dist/delete-VO2LZXE4.js.map +1 -0
- package/dist/delete-VQMU56OH.js +71 -0
- package/dist/delete-VQMU56OH.js.map +1 -0
- package/dist/demographics-KOFLMGVW.js +138 -0
- package/dist/demographics-KOFLMGVW.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-H4RPXZHX.js +66 -0
- package/dist/discard-H4RPXZHX.js.map +1 -0
- package/dist/discover-4GD7QSF5.js +93 -0
- package/dist/discover-4GD7QSF5.js.map +1 -0
- package/dist/discover-L7OVXW4V.js +172 -0
- package/dist/discover-L7OVXW4V.js.map +1 -0
- package/dist/domain-HURQ23KR.js +98 -0
- package/dist/domain-HURQ23KR.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-5VH2PW3R.js +307 -0
- package/dist/draft-5VH2PW3R.js.map +1 -0
- package/dist/draft-D6UTKSAA.js +217 -0
- package/dist/draft-D6UTKSAA.js.map +1 -0
- package/dist/draft-KLULNBWP.js +233 -0
- package/dist/draft-KLULNBWP.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-UQYWDZS7.js +306 -0
- package/dist/draft-UQYWDZS7.js.map +1 -0
- package/dist/draft-YFAJHCKM.js +328 -0
- package/dist/draft-YFAJHCKM.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-WYQUZMFJ.js +114 -0
- package/dist/facets-WYQUZMFJ.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-SIMPRE37.js +66 -0
- package/dist/feedback-SIMPRE37.js.map +1 -0
- package/dist/feedback-record-L4MPIVML.js +177 -0
- package/dist/feedback-record-L4MPIVML.js.map +1 -0
- package/dist/fetch-DTBM3DE2.js +176 -0
- package/dist/fetch-DTBM3DE2.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-IUDXVDOS.js +247 -0
- package/dist/flows-IUDXVDOS.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-EUDHI6CA.js +34 -0
- package/dist/fonts-EUDHI6CA.js.map +1 -0
- package/dist/forecast-BRSEH2H3.js +104 -0
- package/dist/forecast-BRSEH2H3.js.map +1 -0
- package/dist/forecast-QV4U7TOY.js +168 -0
- package/dist/forecast-QV4U7TOY.js.map +1 -0
- package/dist/funding-H5YO37OW.js +85 -0
- package/dist/funding-H5YO37OW.js.map +1 -0
- package/dist/funnel-JLF77MLF.js +394 -0
- package/dist/funnel-JLF77MLF.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-AYX5HS64.js +56 -0
- package/dist/get-AYX5HS64.js.map +1 -0
- package/dist/get-AZARFR6O.js +61 -0
- package/dist/get-AZARFR6O.js.map +1 -0
- package/dist/get-EG2U7MIL.js +78 -0
- package/dist/get-EG2U7MIL.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-52JRH7X3.js +136 -0
- package/dist/google-52JRH7X3.js.map +1 -0
- package/dist/google-ITTPCJ7N.js +3190 -0
- package/dist/google-ITTPCJ7N.js.map +1 -0
- package/dist/google-ads-U3JFFQLU.js +195 -0
- package/dist/google-ads-U3JFFQLU.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-YTNCWSV3.js +133 -0
- package/dist/history-YTNCWSV3.js.map +1 -0
- package/dist/hubspot-LXWQNKKB.js +779 -0
- package/dist/hubspot-LXWQNKKB.js.map +1 -0
- package/dist/icon-K75KI6BV.js +137 -0
- package/dist/icon-K75KI6BV.js.map +1 -0
- package/dist/ideas-JJIHQFV4.js +35 -0
- package/dist/ideas-JJIHQFV4.js.map +1 -0
- package/dist/images-MWETBYKB.js +90 -0
- package/dist/images-MWETBYKB.js.map +1 -0
- package/dist/improve-L3BW4EQG.js +86 -0
- package/dist/improve-L3BW4EQG.js.map +1 -0
- package/dist/ingest-THFAV4NO.js +107 -0
- package/dist/ingest-THFAV4NO.js.map +1 -0
- package/dist/ingest-U6B7GR4A.js +23 -0
- package/dist/ingest-U6B7GR4A.js.map +1 -0
- package/dist/insights-FA6T6PT6.js +423 -0
- package/dist/insights-FA6T6PT6.js.map +1 -0
- package/dist/insights-PELVD4RY.js +122 -0
- package/dist/insights-PELVD4RY.js.map +1 -0
- package/dist/inspect-N2WVVWGP.js +189 -0
- package/dist/inspect-N2WVVWGP.js.map +1 -0
- package/dist/inspiration-Y2J2PUPC.js +53 -0
- package/dist/inspiration-Y2J2PUPC.js.map +1 -0
- package/dist/intent-YNAAVNHK.js +95 -0
- package/dist/intent-YNAAVNHK.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-4JKLWIBJ.js +130 -0
- package/dist/keyword-gap-4JKLWIBJ.js.map +1 -0
- package/dist/keyword-metrics-KU3OHTQK.js +197 -0
- package/dist/keyword-metrics-KU3OHTQK.js.map +1 -0
- package/dist/keywords-for-site-M4MFWMVK.js +128 -0
- package/dist/keywords-for-site-M4MFWMVK.js.map +1 -0
- package/dist/landing-7UVZ7IPP.js +28 -0
- package/dist/landing-7UVZ7IPP.js.map +1 -0
- package/dist/landings-F7LOAEJE.js +151 -0
- package/dist/landings-F7LOAEJE.js.map +1 -0
- package/dist/languages-PKYCZNUB.js +40 -0
- package/dist/languages-PKYCZNUB.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-CSRESOB2.js +293 -0
- package/dist/leads-CSRESOB2.js.map +1 -0
- package/dist/leads-MQPEA7DG.js +90 -0
- package/dist/leads-MQPEA7DG.js.map +1 -0
- package/dist/learn-K5YBUMBT.js +203 -0
- package/dist/learn-K5YBUMBT.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-73NR2J5L.js +208 -0
- package/dist/line-item-writes-73NR2J5L.js.map +1 -0
- package/dist/line-items-2YBGXOAQ.js +103 -0
- package/dist/line-items-2YBGXOAQ.js.map +1 -0
- package/dist/link-GVAWECJO.js +64 -0
- package/dist/link-GVAWECJO.js.map +1 -0
- package/dist/linkedin-PZDT22AT.js +1008 -0
- package/dist/linkedin-PZDT22AT.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-FNDRV25Y.js +151 -0
- package/dist/list-FNDRV25Y.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-REZGFWC5.js +63 -0
- package/dist/list-REZGFWC5.js.map +1 -0
- package/dist/list-S6MNXDTV.js +303 -0
- package/dist/list-S6MNXDTV.js.map +1 -0
- package/dist/locations-2BYWKIYA.js +67 -0
- package/dist/locations-2BYWKIYA.js.map +1 -0
- package/dist/locations-GJHHMV6Z.js +40 -0
- package/dist/locations-GJHHMV6Z.js.map +1 -0
- package/dist/log-HGDNLDUX.js +92 -0
- package/dist/log-HGDNLDUX.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-BT26YJXZ.js +640 -0
- package/dist/make-BT26YJXZ.js.map +1 -0
- package/dist/map-J5EX4HOX.js +404 -0
- package/dist/map-J5EX4HOX.js.map +1 -0
- package/dist/mcp-MHDW6AFL.js +463 -0
- package/dist/mcp-MHDW6AFL.js.map +1 -0
- package/dist/media-RAGEJTZX.js +89 -0
- package/dist/media-RAGEJTZX.js.map +1 -0
- package/dist/media-RNB7JFJP.js +15 -0
- package/dist/media-RNB7JFJP.js.map +1 -0
- package/dist/media-sources-4NN3DWSG.js +32 -0
- package/dist/media-sources-4NN3DWSG.js.map +1 -0
- package/dist/members-AIWMXAQD.js +44 -0
- package/dist/members-AIWMXAQD.js.map +1 -0
- package/dist/meta-WAPZMZI7.js +69 -0
- package/dist/meta-WAPZMZI7.js.map +1 -0
- package/dist/metrics-6EHC4ESN.js +152 -0
- package/dist/metrics-6EHC4ESN.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-ZAWN4XCS.js +141 -0
- package/dist/normalize-ZAWN4XCS.js.map +1 -0
- package/dist/options-3CZNT5KP.js +121 -0
- package/dist/options-3CZNT5KP.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-GOMJMHPE.js +24 -0
- package/dist/performance-GOMJMHPE.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-UKYLPAW2.js +169 -0
- package/dist/preview-UKYLPAW2.js.map +1 -0
- package/dist/profile-Q3PHR6FU.js +159 -0
- package/dist/profile-Q3PHR6FU.js.map +1 -0
- package/dist/promoted-tweet-writes-IYOAZTA5.js +180 -0
- package/dist/promoted-tweet-writes-IYOAZTA5.js.map +1 -0
- package/dist/promoted-tweets-G3XFD5YM.js +119 -0
- package/dist/promoted-tweets-G3XFD5YM.js.map +1 -0
- package/dist/properties-WLL6M2P6.js +101 -0
- package/dist/properties-WLL6M2P6.js.map +1 -0
- package/dist/publish-ZG4J2GTH.js +322 -0
- package/dist/publish-ZG4J2GTH.js.map +1 -0
- package/dist/query-7AGG77WH.js +61 -0
- package/dist/query-7AGG77WH.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-FTO4SFQE.js +26 -0
- package/dist/reddit-FTO4SFQE.js.map +1 -0
- package/dist/refresh-OUENQ2FS.js +94 -0
- package/dist/refresh-OUENQ2FS.js.map +1 -0
- package/dist/release-5OG7AAFY.js +60 -0
- package/dist/release-5OG7AAFY.js.map +1 -0
- package/dist/relevant-pages-KUVDZPRU.js +99 -0
- package/dist/relevant-pages-KUVDZPRU.js.map +1 -0
- package/dist/remove-33HI27KM.js +50 -0
- package/dist/remove-33HI27KM.js.map +1 -0
- package/dist/remove-GOYW2G4R.js +48 -0
- package/dist/remove-GOYW2G4R.js.map +1 -0
- package/dist/reopen-KFFYE53A.js +63 -0
- package/dist/reopen-KFFYE53A.js.map +1 -0
- package/dist/rerun-P6XACA5Z.js +86 -0
- package/dist/rerun-P6XACA5Z.js.map +1 -0
- package/dist/research-BEO3JMZI.js +262 -0
- package/dist/research-BEO3JMZI.js.map +1 -0
- package/dist/research-QOC53DLS.js +62 -0
- package/dist/research-QOC53DLS.js.map +1 -0
- package/dist/reset-E3OWE2WF.js +54 -0
- package/dist/reset-E3OWE2WF.js.map +1 -0
- package/dist/reset-I7M3HYMB.js +54 -0
- package/dist/reset-I7M3HYMB.js.map +1 -0
- package/dist/resolve-GP7BHM6L.js +121 -0
- package/dist/resolve-GP7BHM6L.js.map +1 -0
- package/dist/retry-33ZJCNQI.js +62 -0
- package/dist/retry-33ZJCNQI.js.map +1 -0
- package/dist/retry-X5PU7QO3.js +60 -0
- package/dist/retry-X5PU7QO3.js.map +1 -0
- package/dist/retry-failed-BEFWRV4Z.js +45 -0
- package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
- package/dist/run-REK3TEGY.js +65 -0
- package/dist/run-REK3TEGY.js.map +1 -0
- package/dist/run-TH2662IC.js +61 -0
- package/dist/run-TH2662IC.js.map +1 -0
- package/dist/scaffold-ad-3WDRKUFT.js +1550 -0
- package/dist/scaffold-ad-3WDRKUFT.js.map +1 -0
- package/dist/scaffold-static-ad-X5NT52NF.js +973 -0
- package/dist/scaffold-static-ad-X5NT52NF.js.map +1 -0
- package/dist/scaffold-video-WZPVACLE.js +874 -0
- package/dist/scaffold-video-WZPVACLE.js.map +1 -0
- package/dist/schedule-KQ7UIR3N.js +66 -0
- package/dist/schedule-KQ7UIR3N.js.map +1 -0
- package/dist/schedule-V4UHGY3V.js +61 -0
- package/dist/schedule-V4UHGY3V.js.map +1 -0
- package/dist/scheduled-agents-KLQ5H2PA.js +49 -0
- package/dist/scheduled-agents-KLQ5H2PA.js.map +1 -0
- package/dist/schema-G3T4PZDI.js +132 -0
- package/dist/schema-G3T4PZDI.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-6XKEGABN.js +174 -0
- package/dist/search-6XKEGABN.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-N2V55BEX.js +96 -0
- package/dist/select-N2V55BEX.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-7HVHERRU.js +188 -0
- package/dist/set-prompt-7HVHERRU.js.map +1 -0
- package/dist/setup-links-4VVNQVPU.js +141 -0
- package/dist/setup-links-4VVNQVPU.js.map +1 -0
- package/dist/{shared-AVM74EX7.js → shared-QAMP7FZV.js} +8 -6
- package/dist/shared-QAMP7FZV.js.map +1 -0
- package/dist/shopify-FSHM5M4I.js +3346 -0
- package/dist/shopify-FSHM5M4I.js.map +1 -0
- package/dist/site-Q2HTRLIW.js +177 -0
- package/dist/site-Q2HTRLIW.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-2KN4RJNJ.js +30 -0
- package/dist/sources-2KN4RJNJ.js.map +1 -0
- package/dist/sources-4I2YMS2K.js +421 -0
- package/dist/sources-4I2YMS2K.js.map +1 -0
- package/dist/stale-IN7WSBLC.js +66 -0
- package/dist/stale-IN7WSBLC.js.map +1 -0
- package/dist/stats-GNILHSKK.js +34 -0
- package/dist/stats-GNILHSKK.js.map +1 -0
- package/dist/status-6SLKZWNR.js +62 -0
- package/dist/status-6SLKZWNR.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-LFZV5NBN.js +54 -0
- package/dist/sync-LFZV5NBN.js.map +1 -0
- package/dist/sync-definition-IJISZ5VQ.js +55 -0
- package/dist/sync-definition-IJISZ5VQ.js.map +1 -0
- package/dist/tag-manager-E7QTXBWQ.js +43 -0
- package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
- package/dist/tags-6OAZOQYO.js +26 -0
- package/dist/tags-6OAZOQYO.js.map +1 -0
- package/dist/tags-6YRMDX3R.js +20 -0
- package/dist/tags-6YRMDX3R.js.map +1 -0
- package/dist/tags-EWXZSZYE.js +20 -0
- package/dist/tags-EWXZSZYE.js.map +1 -0
- package/dist/tags-SZCNPE2D.js +224 -0
- package/dist/tags-SZCNPE2D.js.map +1 -0
- package/dist/tags-TCFFP534.js +20 -0
- package/dist/tags-TCFFP534.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-ESOC7KNX.js +113 -0
- package/dist/targeting-criteria-ESOC7KNX.js.map +1 -0
- package/dist/targets-IPBEB5KU.js +102 -0
- package/dist/targets-IPBEB5KU.js.map +1 -0
- package/dist/templates-IJ7FR3LA.js +178 -0
- package/dist/templates-IJ7FR3LA.js.map +1 -0
- package/dist/testimonials-IXS7CP6P.js +32 -0
- package/dist/testimonials-IXS7CP6P.js.map +1 -0
- package/dist/themes-MXNKJWMW.js +94 -0
- package/dist/themes-MXNKJWMW.js.map +1 -0
- package/dist/top-companies-NO6L2V6M.js +108 -0
- package/dist/top-companies-NO6L2V6M.js.map +1 -0
- package/dist/translate-QCE5ZB7M.js +600 -0
- package/dist/translate-QCE5ZB7M.js.map +1 -0
- package/dist/triggers-KXUDMDSA.js +141 -0
- package/dist/triggers-KXUDMDSA.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-E3N36NYQ.js +67 -0
- package/dist/unlink-E3N36NYQ.js.map +1 -0
- package/dist/unstage-TRMHSHED.js +84 -0
- package/dist/unstage-TRMHSHED.js.map +1 -0
- package/dist/unstage-ZRLLCSQF.js +95 -0
- package/dist/unstage-ZRLLCSQF.js.map +1 -0
- package/dist/update-EWGWAXAQ.js +142 -0
- package/dist/update-EWGWAXAQ.js.map +1 -0
- package/dist/update-OKOQE7U2.js +155 -0
- package/dist/update-OKOQE7U2.js.map +1 -0
- package/dist/update-VSFHID2D.js +63 -0
- package/dist/update-VSFHID2D.js.map +1 -0
- package/dist/update-XGCGQDJ4.js +98 -0
- package/dist/update-XGCGQDJ4.js.map +1 -0
- package/dist/upload-BOYMDDEQ.js +126 -0
- package/dist/upload-BOYMDDEQ.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-PCZEQE66.js +130 -0
- package/dist/url-options-PCZEQE66.js.map +1 -0
- package/dist/url-params-DV37GEQF.js +98 -0
- package/dist/url-params-DV37GEQF.js.map +1 -0
- package/dist/use-U4HG2NF3.js +95 -0
- package/dist/use-U4HG2NF3.js.map +1 -0
- package/dist/validate-5AV4FJZ5.js +91 -0
- package/dist/validate-5AV4FJZ5.js.map +1 -0
- package/dist/variant-FOVE6URJ.js +338 -0
- package/dist/variant-FOVE6URJ.js.map +1 -0
- package/dist/videos-IJ67PPJV.js +39 -0
- package/dist/videos-IJ67PPJV.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-LJ36FRWD.js +140 -0
- package/dist/web-LJ36FRWD.js.map +1 -0
- package/dist/winners-SMMDN6LW.js +113 -0
- package/dist/winners-SMMDN6LW.js.map +1 -0
- package/dist/winning-ads-JIG2MQHJ.js +84 -0
- package/dist/winning-ads-JIG2MQHJ.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-GOZU6ENR.js +1015 -0
- package/dist/write-commands-GOZU6ENR.js.map +1 -0
- package/dist/write-commands-KA3QXVSF.js +737 -0
- package/dist/write-commands-KA3QXVSF.js.map +1 -0
- package/dist/x-6HBVXIKH.js +47 -0
- package/dist/x-6HBVXIKH.js.map +1 -0
- package/package.json +9 -2
- package/dist/chunk-HJEMOSPH.js +0 -1292
- package/dist/chunk-HJEMOSPH.js.map +0 -1
- package/dist/chunk-JHKW6IDX.js +0 -9989
- package/dist/chunk-JHKW6IDX.js.map +0 -1
- package/dist/chunk-MF7YA62W.js.map +0 -1
- package/dist/chunk-VZEDAFAR.js.map +0 -1
- package/dist/chunk-WWCLT3RG.js.map +0 -1
- package/dist/client-GR6YL3YX.js +0 -17
- package/dist/output-VQSTVRH7.js +0 -18
- /package/dist/{chunk-JTZXQRXI.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-VQSTVRH7.js.map → connect-WYUYS5V4.js.map} +0 -0
- /package/dist/{shared-AVM74EX7.js.map → customers-HYE7N2H5.js.map} +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HEADLINE_SET_FLOOR,
|
|
3
|
+
SAME_CLAIM_HELD,
|
|
4
|
+
TELL_QUESTIONS,
|
|
5
|
+
copySentences,
|
|
6
|
+
sameClaimQuestion,
|
|
7
|
+
tellQuestionsFor
|
|
8
|
+
} from "./chunk-4NZ47VXO.js";
|
|
9
|
+
import {
|
|
10
|
+
rememberedJev
|
|
11
|
+
} from "./chunk-I3DIZWN5.js";
|
|
12
|
+
import {
|
|
13
|
+
holdUnbilledSpend
|
|
14
|
+
} from "./chunk-AUSKKFVH.js";
|
|
15
|
+
import {
|
|
16
|
+
findWorkspaceRoot
|
|
17
|
+
} from "./chunk-HDHWIEJJ.js";
|
|
18
|
+
import {
|
|
19
|
+
CAPABILITY_SURFACE_SPECS
|
|
20
|
+
} from "./chunk-UI6BKYQD.js";
|
|
21
|
+
|
|
22
|
+
// src/commands/capabilities/fix.ts
|
|
23
|
+
function capabilityFix(surface) {
|
|
24
|
+
const spec = CAPABILITY_SURFACE_SPECS[surface];
|
|
25
|
+
return {
|
|
26
|
+
action: `baker capabilities ${surface}`,
|
|
27
|
+
explanation: `Do not guess another field name. \`baker capabilities ${surface}\` lists every ${spec.label} change with its required and optional fields and the exact values each field accepts, plus what cannot be changed here at all and why. Read it, then either re-stage correctly or tell the user this part is out of reach \u2014 and carry on with the rest of the job either way.`
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// src/commands/ads/boolean-word-positional.ts
|
|
32
|
+
var BOOLEAN_WORD = /^(true|false)$/i;
|
|
33
|
+
function booleanWordPositionalError(args, entity) {
|
|
34
|
+
const positionals = Array.isArray(args._) ? args._ : [];
|
|
35
|
+
const word = positionals.find((value2) => typeof value2 === "string" && BOOLEAN_WORD.test(value2));
|
|
36
|
+
if (word === void 0) {
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
39
|
+
const value = word.toLowerCase();
|
|
40
|
+
const raised = Object.keys(args).filter((key) => key !== "_" && args[key] === true);
|
|
41
|
+
const named = raised.length > 0 ? raised.map((flag) => `--${flag}`).join(" or ") : "a boolean flag";
|
|
42
|
+
const fix = raised.length > 0 ? raised.map((flag) => `--${flag}=${value}`).join(" or ") : `--<flag>=${value}`;
|
|
43
|
+
const negated = raised.length === 1 && value === "false" ? ` (or --no-${raised[0]})` : "";
|
|
44
|
+
return `"${word}" was read as the ${entity} target, not as a value for ${named}. A boolean flag written with a space is set to TRUE and the word is dropped \u2014 attach it instead: ${fix}${negated}.`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// src/commands/ads/copy-hints.ts
|
|
48
|
+
import path from "path";
|
|
49
|
+
|
|
50
|
+
// src/engine/copy-tells/judge.ts
|
|
51
|
+
var SAMPLE_MAX = 60;
|
|
52
|
+
var sample = (text) => text.length <= SAMPLE_MAX ? text : `${text.slice(0, SAMPLE_MAX)}\u2026`;
|
|
53
|
+
async function judgedCopyTells(input, ask) {
|
|
54
|
+
const sentences = input.texts.flatMap((t) => copySentences(t));
|
|
55
|
+
const pairs = (input.headlineSets ?? []).map((set) => set.map((h) => h.trim()).filter(Boolean)).filter((set) => set.length >= HEADLINE_SET_FLOOR).flatMap((set, s) => set.flatMap((a, i) => set.slice(i + 1).map((b) => ({ set: s, a, b }))));
|
|
56
|
+
const questions = [...sentences.flatMap(tellQuestionsFor), ...pairs.map(({ a, b }) => sameClaimQuestion(a, b))];
|
|
57
|
+
if (questions.length === 0) return [];
|
|
58
|
+
const answers = await ask(questions);
|
|
59
|
+
if (answers === null) return null;
|
|
60
|
+
const tells = [];
|
|
61
|
+
TELL_QUESTIONS.forEach((tell, t) => {
|
|
62
|
+
const hits = sentences.filter((_, s) => (answers[s * TELL_QUESTIONS.length + t] ?? 0) >= tell.threshold);
|
|
63
|
+
if (hits.length > 0) tells.push({ id: tell.id, count: hits.length, sample: sample(hits[0]?.text ?? "") });
|
|
64
|
+
});
|
|
65
|
+
const offset = sentences.length * TELL_QUESTIONS.length;
|
|
66
|
+
const cycled = pairs.filter((_, p) => (answers[offset + p] ?? 0) >= SAME_CLAIM_HELD);
|
|
67
|
+
for (const set of new Set(cycled.map((p) => p.set))) {
|
|
68
|
+
const inSet = cycled.filter((p) => p.set === set);
|
|
69
|
+
const { a, b } = inSet[0] ?? { a: "", b: "" };
|
|
70
|
+
tells.push({ id: "synonym-cycling", count: inSet.length, sample: sample(`"${a}" / "${b}"`) });
|
|
71
|
+
}
|
|
72
|
+
return tells;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/commands/ads/copy-hints.ts
|
|
76
|
+
var COPY_KEYS = /* @__PURE__ */ new Set([
|
|
77
|
+
"headline",
|
|
78
|
+
"headlines",
|
|
79
|
+
"longheadline",
|
|
80
|
+
"longheadlines",
|
|
81
|
+
"shortheadline",
|
|
82
|
+
"shortheadlines",
|
|
83
|
+
"description",
|
|
84
|
+
"descriptions",
|
|
85
|
+
"primarytext",
|
|
86
|
+
"primarytexts",
|
|
87
|
+
"message",
|
|
88
|
+
"messages",
|
|
89
|
+
"commentary",
|
|
90
|
+
"body",
|
|
91
|
+
"bodies",
|
|
92
|
+
"text",
|
|
93
|
+
"calltoaction",
|
|
94
|
+
"linkdescription",
|
|
95
|
+
"sitelinktext",
|
|
96
|
+
"callout",
|
|
97
|
+
"callouts",
|
|
98
|
+
"introtext"
|
|
99
|
+
]);
|
|
100
|
+
var HEADLINE_SET_KEYS = /* @__PURE__ */ new Set(["headlines", "longheadlines", "shortheadlines"]);
|
|
101
|
+
var MAX_HINTS = 5;
|
|
102
|
+
var SYNONYM_PAIR_FLOOR = 2;
|
|
103
|
+
function asStrings(value) {
|
|
104
|
+
const one = (v) => {
|
|
105
|
+
const text = typeof v === "string" ? v : v !== null && typeof v === "object" ? v.text : "";
|
|
106
|
+
return typeof text === "string" && text.trim() ? text : void 0;
|
|
107
|
+
};
|
|
108
|
+
const values = Array.isArray(value) ? value : [value];
|
|
109
|
+
return values.map(one).filter((v) => v !== void 0);
|
|
110
|
+
}
|
|
111
|
+
function collectCopy(value, depth = 0) {
|
|
112
|
+
const texts = [];
|
|
113
|
+
const headlineSets = [];
|
|
114
|
+
if (depth > 4 || value === null || typeof value !== "object") return { texts, headlineSets };
|
|
115
|
+
if (Array.isArray(value)) {
|
|
116
|
+
for (const item of value) {
|
|
117
|
+
const nested = collectCopy(item, depth + 1);
|
|
118
|
+
texts.push(...nested.texts);
|
|
119
|
+
headlineSets.push(...nested.headlineSets);
|
|
120
|
+
}
|
|
121
|
+
return { texts, headlineSets };
|
|
122
|
+
}
|
|
123
|
+
for (const [key, raw] of Object.entries(value)) {
|
|
124
|
+
const normalized = key.toLowerCase().replace(/[_-]/g, "");
|
|
125
|
+
const strings = COPY_KEYS.has(normalized) ? asStrings(raw) : [];
|
|
126
|
+
if (strings.length > 0) {
|
|
127
|
+
texts.push(...strings);
|
|
128
|
+
if (HEADLINE_SET_KEYS.has(normalized) && strings.length > 1) headlineSets.push(strings);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const nested = collectCopy(raw, depth + 1);
|
|
132
|
+
texts.push(...nested.texts);
|
|
133
|
+
headlineSets.push(...nested.headlineSets);
|
|
134
|
+
}
|
|
135
|
+
return { texts, headlineSets };
|
|
136
|
+
}
|
|
137
|
+
function hintFor(tell) {
|
|
138
|
+
if (tell.id === "synonym-cycling") {
|
|
139
|
+
return `AI COPY TELL \u2014 ${tell.count} headline pairs are the same claim reworded (${tell.sample}). A cycled set gives the auction nothing to choose between: make each headline a different claim, not a different verb.`;
|
|
140
|
+
}
|
|
141
|
+
return `AI COPY TELL (${tell.id}) \u2014 "${tell.sample}". This construction reads as machine-written; rewrite it as a plain, specific claim before publishing.`;
|
|
142
|
+
}
|
|
143
|
+
async function adCopyHints(payload, ask) {
|
|
144
|
+
const { texts, headlineSets } = collectCopy(payload);
|
|
145
|
+
if (texts.length === 0) return [];
|
|
146
|
+
const cacheDir = path.join(findWorkspaceRoot(process.cwd()) ?? process.cwd(), "canvas", ".cache");
|
|
147
|
+
const spent = [];
|
|
148
|
+
const judged = await judgedCopyTells(
|
|
149
|
+
{ texts: texts.flatMap((t) => t.split("\n")), headlineSets },
|
|
150
|
+
ask ?? rememberedJev(path.join(cacheDir, "copy-tells.json"), (u) => spent.push(u))
|
|
151
|
+
).catch(() => null);
|
|
152
|
+
await holdUnbilledSpend(cacheDir, spent).catch(() => void 0);
|
|
153
|
+
const cycled = (judged ?? []).filter((t) => t.id === "synonym-cycling" && t.count >= SYNONYM_PAIR_FLOOR).sort((a, b) => b.count - a.count).slice(0, 1);
|
|
154
|
+
const tells = [...cycled, ...(judged ?? []).filter((t) => t.id !== "synonym-cycling")];
|
|
155
|
+
tells.sort(
|
|
156
|
+
(a, b) => (b.id === "synonym-cycling" ? 1 : 0) - (a.id === "synonym-cycling" ? 1 : 0) || b.count - a.count
|
|
157
|
+
);
|
|
158
|
+
return tells.slice(0, MAX_HINTS).map(hintFor);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export {
|
|
162
|
+
capabilityFix,
|
|
163
|
+
booleanWordPositionalError,
|
|
164
|
+
adCopyHints
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=chunk-6I7SYEYN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/capabilities/fix.ts","../src/commands/ads/boolean-word-positional.ts","../src/commands/ads/copy-hints.ts","../src/engine/copy-tells/judge.ts"],"sourcesContent":["import type { CapabilitySurfaceId } from \"@baker/api/capabilities\";\nimport { CAPABILITY_SURFACE_SPECS } from \"@baker/api/capabilities\";\n\n/**\n * A rejected change should say where the real contract is.\n *\n * The expensive version of \"this field is not valid\" is an agent trying four\n * spellings of a field that never existed, staging a bogus op, and cleaning it\n * up again — several turns, none of them work. The validation message already\n * names what was wrong with THIS attempt; this names the one call that lists\n * every field the change accepts and every value each one takes, so the next\n * attempt is informed rather than another guess.\n */\nexport function capabilityFix(surface: CapabilitySurfaceId): { action: string; explanation: string } {\n const spec = CAPABILITY_SURFACE_SPECS[surface];\n return {\n action: `baker capabilities ${surface}`,\n explanation:\n `Do not guess another field name. \\`baker capabilities ${surface}\\` lists every ${spec.label} change with its ` +\n \"required and optional fields and the exact values each field accepts, plus what cannot be changed here at all \" +\n \"and why. Read it, then either re-stage correctly or tell the user this part is out of reach — and carry on \" +\n \"with the rest of the job either way.\",\n };\n}\n","/**\n * `--flag false` — the natural way to type a negation — is a citty trap, not a typo we can honour:\n * a boolean flag written with a space parses as the flag set to **TRUE** plus a stray positional\n * nobody consumes. The word does the OPPOSITE of what was typed and nothing fails, because the\n * target still resolves and the command still reports \"staged\". No layer downstream can catch it —\n * an inverted boolean is a valid op — so it has to be caught where the positionals are read.\n *\n * This is the same rule on every ad surface (it is citty's parse, not a platform's), but each\n * surface owns its own error envelope, so this returns the message and the caller fails with it.\n */\n\nconst BOOLEAN_WORD = /^(true|false)$/i;\n\n/**\n * The refusal message for a bare `true`/`false` sitting in the positionals, or `undefined` when\n * there is none. `entity` is the surface's own noun for what the positional addresses (\"campaign\",\n * \"ad set\", …), so the message reads as that command's vocabulary.\n */\nexport function booleanWordPositionalError(args: Record<string, unknown>, entity: string): string | undefined {\n const positionals = Array.isArray(args._) ? args._ : [];\n const word = positionals.find((value): value is string => typeof value === \"string\" && BOOLEAN_WORD.test(value));\n if (word === undefined) {\n return undefined;\n }\n const value = word.toLowerCase();\n // Every flag citty just set to true, so the fix is copy-pasteable. Which one the word was meant for\n // is unknowable from parsed args — it need not even follow that flag on the command line — so with\n // several raised we list them all rather than inventing a single culprit the user never typed.\n const raised = Object.keys(args).filter((key) => key !== \"_\" && args[key] === true);\n const named = raised.length > 0 ? raised.map((flag) => `--${flag}`).join(\" or \") : \"a boolean flag\";\n const fix = raised.length > 0 ? raised.map((flag) => `--${flag}=${value}`).join(\" or \") : `--<flag>=${value}`;\n const negated = raised.length === 1 && value === \"false\" ? ` (or --no-${raised[0]})` : \"\";\n return `\"${word}\" was read as the ${entity} target, not as a value for ${named}. A boolean flag written with a space is set to TRUE and the word is dropped — attach it instead: ${fix}${negated}.`;\n}\n","/**\n * AI copy tells on staged ad copy → `hints[]`.\n *\n * Ad text is the surface where a tell costs real money and the one place we had\n * no copy check at all: staging validated character limits and policy, never\n * whether the words read like a model wrote them.\n *\n * ADVISORY BY CONSTRUCTION. These are hints, never errors — an ad refused over a\n * fallible prose heuristic costs more than a tell that ships, and the agent can\n * act on a hint in the same turn. Nothing here can fail a staged write.\n *\n * Thresholds differ from the landing gate on purpose. A landing needs a CLUSTER\n * before a tell means anything (`COPY_TELL_GATES`); a 30-character headline has\n * no room for a cluster, so one occurrence is the signal. The exclusion list\n * below is where most of the judgment lives.\n *\n * The tells that read the words are asked of the decision model, in whatever\n * language the ad is written; when it cannot answer, nothing is reported rather\n * than a guess.\n */\n\nimport path from \"node:path\";\nimport type { CopyTell } from \"../../engine/copy-tells/detect.ts\";\nimport { judgedCopyTells } from \"../../engine/copy-tells/judge.ts\";\nimport { type AskNouls, rememberedJev } from \"../../engine/lib/remembered-nouls.ts\";\nimport type { ReviewUsage } from \"../../engine/nodes/local/lib/render-review.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { holdUnbilledSpend } from \"../canvas/unbilled-spend.ts\";\n\n/*\n * The tells that are a shape (`structuralCopyTells`) do not apply to ad copy, and\n * none is hinted. Each is a real convention in this medium, so reporting it would\n * train the agent to ignore hints:\n * - `title-case-heading` — English search ads are conventionally Title Case.\n * - `staccato-drama` — \"Compara. Ahorra. Cambia.\" is ad rhythm, not drama.\n * - `emoji` — deliberate and effective in Meta and LinkedIn primary text.\n * - `curly-quote` — inserted automatically by every editor copy is pasted from.\n * - `inline-header-list` — a markdown shape that ad fields cannot hold.\n */\n\n/**\n * Payload keys whose values are copy a human will read in the ad. Every platform\n * names its primary text differently in `@baker/api` — Meta stages it as\n * `message`, LinkedIn as `commentary` — so the concept appears here under each\n * of its contract names, not under one invented one.\n */\nconst COPY_KEYS = new Set([\n \"headline\",\n \"headlines\",\n \"longheadline\",\n \"longheadlines\",\n \"shortheadline\",\n \"shortheadlines\",\n \"description\",\n \"descriptions\",\n \"primarytext\",\n \"primarytexts\",\n \"message\",\n \"messages\",\n \"commentary\",\n \"body\",\n \"bodies\",\n \"text\",\n \"calltoaction\",\n \"linkdescription\",\n \"sitelinktext\",\n \"callout\",\n \"callouts\",\n \"introtext\",\n]);\n\n/** Keys holding a SET of headlines, where synonym cycling is meaningful. */\nconst HEADLINE_SET_KEYS = new Set([\"headlines\", \"longheadlines\", \"shortheadlines\"]);\n\n/**\n * At most this many hints, so copy advice never crowds out the staging result.\n *\n * Five, not three: a heavily model-written ad routinely carries six tells, and a\n * cap of three showed the agent half the diagnosis. Since it already has the copy\n * in front of it, fixing six constructions in one pass is cheaper than three\n * re-stagings that each reveal the next batch.\n */\nconst MAX_HINTS = 5;\n/** Two near-duplicate pairs; one pair in a 15-headline RSA is not a pattern. */\nconst SYNONYM_PAIR_FLOOR = 2;\n\n/**\n * The copy under a copy key, whether it is a plain string or a Google text\n * asset. Google stages EVERY ad text as `{ text, pinnedField? }`\n * (`adTextAssetSchema` in `@baker/api/ads-google`), so reading only strings here\n * would skip the whole Google surface — headlines, descriptions, long headline.\n */\nfunction asStrings(value: unknown): string[] {\n const one = (v: unknown): string | undefined => {\n const text = typeof v === \"string\" ? v : v !== null && typeof v === \"object\" ? (v as { text?: unknown }).text : \"\";\n return typeof text === \"string\" && text.trim() ? text : undefined;\n };\n const values = Array.isArray(value) ? value : [value];\n return values.map(one).filter((v): v is string => v !== undefined);\n}\n\n/** Walk a staged-op payload of unknown shape and pull out the human-readable\n * copy fields plus any headline sets. Depth-limited — payloads are shallow, and\n * an unbounded walk on a hostile shape is a hang, not a hint. */\nfunction collectCopy(value: unknown, depth = 0): { texts: string[]; headlineSets: string[][] } {\n const texts: string[] = [];\n const headlineSets: string[][] = [];\n if (depth > 4 || value === null || typeof value !== \"object\") return { texts, headlineSets };\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const nested = collectCopy(item, depth + 1);\n texts.push(...nested.texts);\n headlineSets.push(...nested.headlineSets);\n }\n return { texts, headlineSets };\n }\n\n for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\n const normalized = key.toLowerCase().replace(/[_-]/g, \"\");\n const strings = COPY_KEYS.has(normalized) ? asStrings(raw) : [];\n if (strings.length > 0) {\n texts.push(...strings);\n if (HEADLINE_SET_KEYS.has(normalized) && strings.length > 1) headlineSets.push(strings);\n continue;\n }\n // A copy key holding neither a string nor a text asset (`call_to_action`)\n // still gets walked — a matched key must never swallow the subtree.\n const nested = collectCopy(raw, depth + 1);\n texts.push(...nested.texts);\n headlineSets.push(...nested.headlineSets);\n }\n return { texts, headlineSets };\n}\n\nfunction hintFor(tell: CopyTell): string {\n if (tell.id === \"synonym-cycling\") {\n return `AI COPY TELL — ${tell.count} headline pairs are the same claim reworded (${tell.sample}). A cycled set gives the auction nothing to choose between: make each headline a different claim, not a different verb.`;\n }\n return `AI COPY TELL (${tell.id}) — \"${tell.sample}\". This construction reads as machine-written; rewrite it as a plain, specific claim before publishing.`;\n}\n\n/**\n * Inspect a staged ad-copy payload and return advisory hints about AI writing\n * tells. Never throws; returns `[]` when the copy reads clean or the payload\n * carries no copy at all. `ask` is the decision model (the real one, its answers\n * kept in the workspace's canvas cache and its spend billed with the next run,\n * unless given).\n */\nexport async function adCopyHints(payload: unknown, ask?: AskNouls): Promise<string[]> {\n const { texts, headlineSets } = collectCopy(payload);\n if (texts.length === 0) return [];\n\n const cacheDir = path.join(findWorkspaceRoot(process.cwd()) ?? process.cwd(), \"canvas\", \".cache\");\n const spent: ReviewUsage[] = [];\n // A line break in ad text is the author's, never a wrap: each line is read on its own.\n const judged = await judgedCopyTells(\n { texts: texts.flatMap((t) => t.split(\"\\n\")), headlineSets },\n ask ?? rememberedJev(path.join(cacheDir, \"copy-tells.json\"), (u) => spent.push(u)),\n ).catch(() => null);\n await holdUnbilledSpend(cacheDir, spent).catch(() => undefined);\n\n // The floor is per headline set (one per ad); only the most cycled set is hinted.\n const cycled = (judged ?? [])\n .filter((t) => t.id === \"synonym-cycling\" && t.count >= SYNONYM_PAIR_FLOOR)\n .sort((a, b) => b.count - a.count)\n .slice(0, 1);\n const tells: CopyTell[] = [...cycled, ...(judged ?? []).filter((t) => t.id !== \"synonym-cycling\")];\n\n // Loudest first: the cycled-headline finding is a set-level defect, and the\n // rest sort by how often the tell fired.\n tells.sort(\n (a, b) => (b.id === \"synonym-cycling\" ? 1 : 0) - (a.id === \"synonym-cycling\" ? 1 : 0) || b.count - a.count,\n );\n return tells.slice(0, MAX_HINTS).map(hintFor);\n}\n","/**\n * The AI copy tells in a piece of copy that are a reading of its words, and synonym cycling in a\n * set of headlines, asked of the decision model (Jev) in one fanned-out set of requests, in\n * whatever language the copy is written. Raw counts, like `structuralCopyTells`: the caller gates.\n */\nimport type { AskNouls } from \"../lib/remembered-nouls.ts\";\nimport type { CopyTell } from \"./detect.ts\";\nimport { HEADLINE_SET_FLOOR } from \"./patterns.ts\";\nimport { SAME_CLAIM_HELD, sameClaimQuestion, TELL_QUESTIONS, tellQuestionsFor } from \"./questions.ts\";\nimport { copySentences } from \"./sentences.ts\";\n\nconst SAMPLE_MAX = 60;\nconst sample = (text: string) => (text.length <= SAMPLE_MAX ? text : `${text.slice(0, SAMPLE_MAX)}…`);\n\n/**\n * Every judged tell in `texts` (one count per sentence that carries it) and, for each headline set\n * of at least `HEADLINE_SET_FLOOR`, one `synonym-cycling` tell counting that set's pairs that are\n * one claim reworded. Null when the model could not answer: the caller reports nothing rather than\n * guess.\n */\nexport async function judgedCopyTells(\n input: { texts: readonly string[]; headlineSets?: ReadonlyArray<readonly string[]> },\n ask: AskNouls,\n): Promise<CopyTell[] | null> {\n const sentences = input.texts.flatMap((t) => copySentences(t));\n const pairs = (input.headlineSets ?? [])\n .map((set) => set.map((h) => h.trim()).filter(Boolean))\n .filter((set) => set.length >= HEADLINE_SET_FLOOR)\n .flatMap((set, s) => set.flatMap((a, i) => set.slice(i + 1).map((b) => ({ set: s, a, b }))));\n const questions = [...sentences.flatMap(tellQuestionsFor), ...pairs.map(({ a, b }) => sameClaimQuestion(a, b))];\n if (questions.length === 0) return [];\n const answers = await ask(questions);\n if (answers === null) return null;\n\n const tells: CopyTell[] = [];\n TELL_QUESTIONS.forEach((tell, t) => {\n const hits = sentences.filter((_, s) => (answers[s * TELL_QUESTIONS.length + t] ?? 0) >= tell.threshold);\n if (hits.length > 0) tells.push({ id: tell.id, count: hits.length, sample: sample(hits[0]?.text ?? \"\") });\n });\n const offset = sentences.length * TELL_QUESTIONS.length;\n const cycled = pairs.filter((_, p) => (answers[offset + p] ?? 0) >= SAME_CLAIM_HELD);\n for (const set of new Set(cycled.map((p) => p.set))) {\n const inSet = cycled.filter((p) => p.set === set);\n const { a, b } = inSet[0] ?? { a: \"\", b: \"\" };\n tells.push({ id: \"synonym-cycling\", count: inSet.length, sample: sample(`\"${a}\" / \"${b}\"`) });\n }\n return tells;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaO,SAAS,cAAc,SAAuE;AACnG,QAAM,OAAO,yBAAyB,OAAO;AAC7C,SAAO;AAAA,IACL,QAAQ,sBAAsB,OAAO;AAAA,IACrC,aACE,yDAAyD,OAAO,kBAAkB,KAAK,KAAK;AAAA,EAIhG;AACF;;;ACZA,IAAM,eAAe;AAOd,SAAS,2BAA2B,MAA+B,QAAoC;AAC5G,QAAM,cAAc,MAAM,QAAQ,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACtD,QAAM,OAAO,YAAY,KAAK,CAACA,WAA2B,OAAOA,WAAU,YAAY,aAAa,KAAKA,MAAK,CAAC;AAC/G,MAAI,SAAS,QAAW;AACtB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,KAAK,YAAY;AAI/B,QAAM,SAAS,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,QAAQ,QAAQ,OAAO,KAAK,GAAG,MAAM,IAAI;AAClF,QAAM,QAAQ,OAAO,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,KAAK,MAAM,IAAI;AACnF,QAAM,MAAM,OAAO,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,EAAE,EAAE,KAAK,MAAM,IAAI,YAAY,KAAK;AAC3G,QAAM,UAAU,OAAO,WAAW,KAAK,UAAU,UAAU,aAAa,OAAO,CAAC,CAAC,MAAM;AACvF,SAAO,IAAI,IAAI,qBAAqB,MAAM,+BAA+B,KAAK,0GAAqG,GAAG,GAAG,OAAO;AAClM;;;ACZA,OAAO,UAAU;;;ACVjB,IAAM,aAAa;AACnB,IAAM,SAAS,CAAC,SAAkB,KAAK,UAAU,aAAa,OAAO,GAAG,KAAK,MAAM,GAAG,UAAU,CAAC;AAQjG,eAAsB,gBACpB,OACA,KAC4B;AAC5B,QAAM,YAAY,MAAM,MAAM,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC;AAC7D,QAAM,SAAS,MAAM,gBAAgB,CAAC,GACnC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,EACrD,OAAO,CAAC,QAAQ,IAAI,UAAU,kBAAkB,EAChD,QAAQ,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,IAAI,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;AAC7F,QAAM,YAAY,CAAC,GAAG,UAAU,QAAQ,gBAAgB,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAAC;AAC9G,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC;AACpC,QAAM,UAAU,MAAM,IAAI,SAAS;AACnC,MAAI,YAAY,KAAM,QAAO;AAE7B,QAAM,QAAoB,CAAC;AAC3B,iBAAe,QAAQ,CAAC,MAAM,MAAM;AAClC,UAAM,OAAO,UAAU,OAAO,CAAC,GAAG,OAAO,QAAQ,IAAI,eAAe,SAAS,CAAC,KAAK,MAAM,KAAK,SAAS;AACvG,QAAI,KAAK,SAAS,EAAG,OAAM,KAAK,EAAE,IAAI,KAAK,IAAI,OAAO,KAAK,QAAQ,QAAQ,OAAO,KAAK,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;AAAA,EAC1G,CAAC;AACD,QAAM,SAAS,UAAU,SAAS,eAAe;AACjD,QAAM,SAAS,MAAM,OAAO,CAAC,GAAG,OAAO,QAAQ,SAAS,CAAC,KAAK,MAAM,eAAe;AACnF,aAAW,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;AACnD,UAAM,QAAQ,OAAO,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG;AAChD,UAAM,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,GAAG;AAC5C,UAAM,KAAK,EAAE,IAAI,mBAAmB,OAAO,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAAA,EAC9F;AACA,SAAO;AACT;;;ADDA,IAAM,YAAY,oBAAI,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,IAAM,oBAAoB,oBAAI,IAAI,CAAC,aAAa,iBAAiB,gBAAgB,CAAC;AAUlF,IAAM,YAAY;AAElB,IAAM,qBAAqB;AAQ3B,SAAS,UAAU,OAA0B;AAC3C,QAAM,MAAM,CAAC,MAAmC;AAC9C,UAAM,OAAO,OAAO,MAAM,WAAW,IAAI,MAAM,QAAQ,OAAO,MAAM,WAAY,EAAyB,OAAO;AAChH,WAAO,OAAO,SAAS,YAAY,KAAK,KAAK,IAAI,OAAO;AAAA,EAC1D;AACA,QAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,SAAO,OAAO,IAAI,GAAG,EAAE,OAAO,CAAC,MAAmB,MAAM,MAAS;AACnE;AAKA,SAAS,YAAY,OAAgB,QAAQ,GAAkD;AAC7F,QAAM,QAAkB,CAAC;AACzB,QAAM,eAA2B,CAAC;AAClC,MAAI,QAAQ,KAAK,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO,EAAE,OAAO,aAAa;AAE3F,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,YAAY,MAAM,QAAQ,CAAC;AAC1C,YAAM,KAAK,GAAG,OAAO,KAAK;AAC1B,mBAAa,KAAK,GAAG,OAAO,YAAY;AAAA,IAC1C;AACA,WAAO,EAAE,OAAO,aAAa;AAAA,EAC/B;AAEA,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAgC,GAAG;AACzE,UAAM,aAAa,IAAI,YAAY,EAAE,QAAQ,SAAS,EAAE;AACxD,UAAM,UAAU,UAAU,IAAI,UAAU,IAAI,UAAU,GAAG,IAAI,CAAC;AAC9D,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,KAAK,GAAG,OAAO;AACrB,UAAI,kBAAkB,IAAI,UAAU,KAAK,QAAQ,SAAS,EAAG,cAAa,KAAK,OAAO;AACtF;AAAA,IACF;AAGA,UAAM,SAAS,YAAY,KAAK,QAAQ,CAAC;AACzC,UAAM,KAAK,GAAG,OAAO,KAAK;AAC1B,iBAAa,KAAK,GAAG,OAAO,YAAY;AAAA,EAC1C;AACA,SAAO,EAAE,OAAO,aAAa;AAC/B;AAEA,SAAS,QAAQ,MAAwB;AACvC,MAAI,KAAK,OAAO,mBAAmB;AACjC,WAAO,uBAAkB,KAAK,KAAK,gDAAgD,KAAK,MAAM;AAAA,EAChG;AACA,SAAO,iBAAiB,KAAK,EAAE,aAAQ,KAAK,MAAM;AACpD;AASA,eAAsB,YAAY,SAAkB,KAAmC;AACrF,QAAM,EAAE,OAAO,aAAa,IAAI,YAAY,OAAO;AACnD,MAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAEhC,QAAM,WAAW,KAAK,KAAK,kBAAkB,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,GAAG,UAAU,QAAQ;AAChG,QAAM,QAAuB,CAAC;AAE9B,QAAM,SAAS,MAAM;AAAA,IACnB,EAAE,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,aAAa;AAAA,IAC3D,OAAO,cAAc,KAAK,KAAK,UAAU,iBAAiB,GAAG,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC;AAAA,EACnF,EAAE,MAAM,MAAM,IAAI;AAClB,QAAM,kBAAkB,UAAU,KAAK,EAAE,MAAM,MAAM,MAAS;AAG9D,QAAM,UAAU,UAAU,CAAC,GACxB,OAAO,CAAC,MAAM,EAAE,OAAO,qBAAqB,EAAE,SAAS,kBAAkB,EACzE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,MAAM,GAAG,CAAC;AACb,QAAM,QAAoB,CAAC,GAAG,QAAQ,IAAI,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC;AAIjG,QAAM;AAAA,IACJ,CAAC,GAAG,OAAO,EAAE,OAAO,oBAAoB,IAAI,MAAM,EAAE,OAAO,oBAAoB,IAAI,MAAM,EAAE,QAAQ,EAAE;AAAA,EACvG;AACA,SAAO,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,OAAO;AAC9C;","names":["value"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applyFieldMask,
|
|
3
|
+
compactWinningAd,
|
|
4
|
+
fullWinningAd,
|
|
5
|
+
winningAdNormalizer,
|
|
6
|
+
writeJson
|
|
7
|
+
} from "./chunk-WOTDHRNF.js";
|
|
8
|
+
|
|
9
|
+
// src/commands/winning-ads/adRows.ts
|
|
10
|
+
var EVERY_SIGNAL = {
|
|
11
|
+
dna: {
|
|
12
|
+
visual: "-",
|
|
13
|
+
container: "-",
|
|
14
|
+
mechanism: "-",
|
|
15
|
+
audience_temperature: "-",
|
|
16
|
+
funnel_stage: "-",
|
|
17
|
+
advertiser_size: "-",
|
|
18
|
+
presumes_brand_knowledge: true,
|
|
19
|
+
brand_knowledge_reason: "-"
|
|
20
|
+
},
|
|
21
|
+
baker_uses: { companies: 1, ours: true, approved: 1, rejected: 1 },
|
|
22
|
+
source: "followed",
|
|
23
|
+
stage: "-",
|
|
24
|
+
survived_test: true
|
|
25
|
+
};
|
|
26
|
+
var COMPACT_FIELDS = new Set(Object.keys(compactWinningAd(EVERY_SIGNAL)));
|
|
27
|
+
var ALL_FIELDS = Object.keys(fullWinningAd(EVERY_SIGNAL));
|
|
28
|
+
function adFields(requested, full) {
|
|
29
|
+
if (!requested) return { fields: void 0, full };
|
|
30
|
+
const fields = requested.map((f) => f.trim()).filter(Boolean);
|
|
31
|
+
const invalid = fields.filter((f) => !ALL_FIELDS.includes(f));
|
|
32
|
+
if (invalid.length > 0) return { invalid, valid: ALL_FIELDS };
|
|
33
|
+
return { fields, full: full || fields.some((f) => !COMPACT_FIELDS.has(f)) };
|
|
34
|
+
}
|
|
35
|
+
function adFieldPlan(fields, full) {
|
|
36
|
+
const plan = adFields(fields ? String(fields).split(",") : void 0, Boolean(full));
|
|
37
|
+
if (!("invalid" in plan)) return plan;
|
|
38
|
+
writeJson({
|
|
39
|
+
ok: false,
|
|
40
|
+
error: {
|
|
41
|
+
code: "VALIDATION_ERROR",
|
|
42
|
+
message: `Unknown --fields: ${plan.invalid.join(", ")}`,
|
|
43
|
+
fix: {
|
|
44
|
+
action: "retry_with_valid_values",
|
|
45
|
+
explanation: "Pass only fields an ad row carries.",
|
|
46
|
+
flag: "--fields",
|
|
47
|
+
invalidValues: plan.invalid,
|
|
48
|
+
validValues: plan.valid
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
function adRows(raw, plan) {
|
|
55
|
+
return raw.map((r) => {
|
|
56
|
+
const row = winningAdNormalizer(r, plan.full);
|
|
57
|
+
return plan.fields ? applyFieldMask(row, plan.fields) : row;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
adFieldPlan,
|
|
63
|
+
adRows
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=chunk-6O7ISBC7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/winning-ads/adRows.ts"],"sourcesContent":["import { applyFieldMask, compactWinningAd, fullWinningAd, winningAdNormalizer, writeJson } from \"../../output.ts\";\n\n/**\n * The rows `search`, `feed`, `winners` and `ads` print: one ad each, compact\n * unless `--full`, cut to `--fields` in every output. Before, the JSON a\n * `feed`, `winners` or `ads` call prints ignored `--fields`, so an agent that\n * asked for three columns still read every row whole.\n */\n\nexport type AdFieldPlan = { fields: string[] | undefined; full: boolean };\n\n// A row with every optional signal set: its keys are every field an ad row can carry.\nconst EVERY_SIGNAL: Record<string, unknown> = {\n dna: {\n visual: \"-\",\n container: \"-\",\n mechanism: \"-\",\n audience_temperature: \"-\",\n funnel_stage: \"-\",\n advertiser_size: \"-\",\n presumes_brand_knowledge: true,\n brand_knowledge_reason: \"-\",\n },\n baker_uses: { companies: 1, ours: true, approved: 1, rejected: 1 },\n source: \"followed\",\n stage: \"-\",\n survived_test: true,\n};\nconst COMPACT_FIELDS = new Set(Object.keys(compactWinningAd(EVERY_SIGNAL)));\nconst ALL_FIELDS = Object.keys(fullWinningAd(EVERY_SIGNAL));\n\n/**\n * The `--fields` asked for, read the way an agent types them: names trimmed,\n * the full row when a name only `--full` carries is asked for, and a name no\n * row carries refused with the ones that exist. Before, each of those printed\n * an empty column.\n */\nexport function adFields(\n requested: string[] | undefined,\n full: boolean,\n): AdFieldPlan | { invalid: string[]; valid: string[] } {\n if (!requested) return { fields: undefined, full };\n const fields = requested.map((f) => f.trim()).filter(Boolean);\n const invalid = fields.filter((f) => !ALL_FIELDS.includes(f));\n if (invalid.length > 0) return { invalid, valid: ALL_FIELDS };\n return { fields, full: full || fields.some((f) => !COMPACT_FIELDS.has(f)) };\n}\n\n/** The `--fields` plan of a command, or the refusal of a name no row carries (exits). */\nexport function adFieldPlan(fields: unknown, full: unknown): AdFieldPlan {\n const plan = adFields(fields ? String(fields).split(\",\") : undefined, Boolean(full));\n if (!(\"invalid\" in plan)) return plan;\n writeJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: `Unknown --fields: ${plan.invalid.join(\", \")}`,\n fix: {\n action: \"retry_with_valid_values\",\n explanation: \"Pass only fields an ad row carries.\",\n flag: \"--fields\",\n invalidValues: plan.invalid,\n validValues: plan.valid,\n },\n },\n });\n process.exit(1);\n}\n\nexport function adRows(raw: readonly unknown[], plan: AdFieldPlan): Record<string, unknown>[] {\n return raw.map((r) => {\n const row = winningAdNormalizer(r as Record<string, unknown>, plan.full);\n return plan.fields ? applyFieldMask(row, plan.fields) : row;\n });\n}\n"],"mappings":";;;;;;;;;AAYA,IAAM,eAAwC;AAAA,EAC5C,KAAK;AAAA,IACH,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,0BAA0B;AAAA,IAC1B,wBAAwB;AAAA,EAC1B;AAAA,EACA,YAAY,EAAE,WAAW,GAAG,MAAM,MAAM,UAAU,GAAG,UAAU,EAAE;AAAA,EACjE,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,eAAe;AACjB;AACA,IAAM,iBAAiB,IAAI,IAAI,OAAO,KAAK,iBAAiB,YAAY,CAAC,CAAC;AAC1E,IAAM,aAAa,OAAO,KAAK,cAAc,YAAY,CAAC;AAQnD,SAAS,SACd,WACA,MACsD;AACtD,MAAI,CAAC,UAAW,QAAO,EAAE,QAAQ,QAAW,KAAK;AACjD,QAAM,SAAS,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAC5D,QAAM,UAAU,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,SAAS,CAAC,CAAC;AAC5D,MAAI,QAAQ,SAAS,EAAG,QAAO,EAAE,SAAS,OAAO,WAAW;AAC5D,SAAO,EAAE,QAAQ,MAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE;AAC5E;AAGO,SAAS,YAAY,QAAiB,MAA4B;AACvE,QAAM,OAAO,SAAS,SAAS,OAAO,MAAM,EAAE,MAAM,GAAG,IAAI,QAAW,QAAQ,IAAI,CAAC;AACnF,MAAI,EAAE,aAAa,MAAO,QAAO;AACjC,YAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,qBAAqB,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,MACrD,KAAK;AAAA,QACH,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,MAAM;AAAA,QACN,eAAe,KAAK;AAAA,QACpB,aAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AACD,UAAQ,KAAK,CAAC;AAChB;AAEO,SAAS,OAAO,KAAyB,MAA8C;AAC5F,SAAO,IAAI,IAAI,CAAC,MAAM;AACpB,UAAM,MAAM,oBAAoB,GAA8B,KAAK,IAAI;AACvE,WAAO,KAAK,SAAS,eAAe,KAAK,KAAK,MAAM,IAAI;AAAA,EAC1D,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError
|
|
3
|
+
} from "./chunk-HREWXNTO.js";
|
|
4
|
+
import {
|
|
5
|
+
writeJson
|
|
6
|
+
} from "./chunk-WOTDHRNF.js";
|
|
7
|
+
|
|
8
|
+
// src/commands/winning-ads/shared.ts
|
|
9
|
+
function splitList(value) {
|
|
10
|
+
if (!value) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return value.split(",").map((v) => v.trim()).filter(Boolean);
|
|
14
|
+
}
|
|
15
|
+
function reportError(err) {
|
|
16
|
+
if (err instanceof ApiError) {
|
|
17
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
var PLATFORM_NAMES = {
|
|
24
|
+
meta: "Meta",
|
|
25
|
+
linkedin: "LinkedIn",
|
|
26
|
+
tiktok: "TikTok",
|
|
27
|
+
google: "Google Ads"
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
splitList,
|
|
32
|
+
reportError,
|
|
33
|
+
PLATFORM_NAMES
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunk-752S7JF6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/winning-ads/shared.ts"],"sourcesContent":["import type { AdLibraryPlatform } from \"@baker/api/ad-library\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\n\n/** Split a comma list into trimmed, non-empty tokens. */\nexport function splitList(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n return value\n .split(\",\")\n .map((v) => v.trim())\n .filter(Boolean);\n}\n\n/** Emit the `{ ok: false, error }` envelope and exit non-zero. */\nexport function reportError(err: unknown): never {\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/** Each platform as people name it, for hints. */\nexport const PLATFORM_NAMES: Record<AdLibraryPlatform, string> = {\n meta: \"Meta\",\n linkedin: \"LinkedIn\",\n tiktok: \"TikTok\",\n google: \"Google Ads\",\n};\n"],"mappings":";;;;;;;;AAKO,SAAS,UAAU,OAAqC;AAC7D,MAAI,CAAC,OAAO;AACV,WAAO,CAAC;AAAA,EACV;AACA,SAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACnB;AAGO,SAAS,YAAY,KAAqB;AAC/C,MAAI,eAAe,UAAU;AAC3B,cAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,YAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,kBAAkB,SAAS,mBAAmB,EAAE,CAAC;AACvF,UAAQ,KAAK,CAAC;AAChB;AAGO,IAAM,iBAAoD;AAAA,EAC/D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AACV;","names":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ANALYTICS_BUSY_FIX,
|
|
3
|
+
isAnalyticsBusy
|
|
4
|
+
} from "./chunk-FYWWTMXP.js";
|
|
5
|
+
import {
|
|
6
|
+
ApiError
|
|
7
|
+
} from "./chunk-HREWXNTO.js";
|
|
8
|
+
|
|
9
|
+
// src/commands/analytics/errorEnvelope.ts
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
function analyticsErrorEnvelope(err) {
|
|
12
|
+
if (err instanceof ApiError) {
|
|
13
|
+
return isAnalyticsBusy(err.message) ? { code: err.code, message: err.message, fix: ANALYTICS_BUSY_FIX } : { code: err.code, message: err.message };
|
|
14
|
+
}
|
|
15
|
+
return { code: "NETWORK_ERROR", message: err instanceof Error ? err.message : "Unexpected error" };
|
|
16
|
+
}
|
|
17
|
+
function requestErrorEnvelope(err, correction, correctsLocalInput) {
|
|
18
|
+
if (err instanceof z.ZodError || err instanceof SyntaxError) {
|
|
19
|
+
const message = err instanceof z.ZodError ? z.prettifyError(err) : err.message;
|
|
20
|
+
return { code: "VALIDATION_ERROR", message, ...correctsLocalInput ? { fix: correction } : {} };
|
|
21
|
+
}
|
|
22
|
+
const envelope = analyticsErrorEnvelope(err);
|
|
23
|
+
return envelope.code === "VALIDATION_ERROR" ? { ...envelope, fix: correction } : envelope;
|
|
24
|
+
}
|
|
25
|
+
function questionnaireErrorEnvelope(err) {
|
|
26
|
+
return requestErrorEnvelope(
|
|
27
|
+
err,
|
|
28
|
+
"Check baker analytics plan --full for missing app events. Resolve the named contract issue or narrow the observation window; never infer abandonment from completion totals.",
|
|
29
|
+
false
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
function trackingPlanErrorEnvelope(err) {
|
|
33
|
+
return requestErrorEnvelope(
|
|
34
|
+
err,
|
|
35
|
+
"Read baker analytics plan --full and baker tag-manager draft list to see what is prepared. Correct the request and repeat; do not publish until every requested installation is staged.",
|
|
36
|
+
true
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export {
|
|
41
|
+
analyticsErrorEnvelope,
|
|
42
|
+
questionnaireErrorEnvelope,
|
|
43
|
+
trackingPlanErrorEnvelope
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=chunk-AFJGYJ7Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/analytics/errorEnvelope.ts"],"sourcesContent":["import { ANALYTICS_BUSY_FIX, isAnalyticsBusy } from \"@baker/api/analytics\";\nimport { z } from \"zod\";\nimport { ApiError, type ErrorCode } from \"../../client.ts\";\n\n/**\n * A failed analytics read, as the agent reads it.\n *\n * Separate from `handleError` — which writes it and exits — so the one decision\n * in it can be checked without a process to kill.\n *\n * ## The one decision\n *\n * Whether the failure is worth stopping for. Almost all of them are: a bad\n * preset, an unmapped role, a window outside retention. One is not — the store\n * refusing a read because a burst spent its per-minute compute allowance. That\n * refusal clears in seconds, loses nothing, and is answered correctly by\n * waiting; an agent that treats it like the others abandons a multi-step report\n * over a hiccup, which is the expensive outcome and the reason this carries a\n * `fix` at all.\n */\nexport function analyticsErrorEnvelope(err: unknown): { code: ErrorCode; message: string; fix?: string } {\n if (err instanceof ApiError) {\n return isAnalyticsBusy(err.message)\n ? { code: err.code, message: err.message, fix: ANALYTICS_BUSY_FIX }\n : { code: err.code, message: err.message };\n }\n return { code: \"NETWORK_ERROR\", message: err instanceof Error ? err.message : \"Unexpected error\" };\n}\n\ntype CommandErrorEnvelope = { code: ErrorCode; message: string; fix?: string };\n\n/**\n * A refused request, with `fix` only where it applies: a rejected request gets\n * the command's correction, and anything else (busy, unavailable, unreachable)\n * keeps its own code, so an agent waits rather than rewriting a valid request.\n */\nfunction requestErrorEnvelope(err: unknown, correction: string, correctsLocalInput: boolean): CommandErrorEnvelope {\n if (err instanceof z.ZodError || err instanceof SyntaxError) {\n const message = err instanceof z.ZodError ? z.prettifyError(err) : err.message;\n return { code: \"VALIDATION_ERROR\", message, ...(correctsLocalInput ? { fix: correction } : {}) };\n }\n const envelope = analyticsErrorEnvelope(err);\n return envelope.code === \"VALIDATION_ERROR\" ? { ...envelope, fix: correction } : envelope;\n}\n\n/** A failed question report: the contract remedy only when the events themselves were refused. */\nexport function questionnaireErrorEnvelope(err: unknown): CommandErrorEnvelope {\n return requestErrorEnvelope(\n err,\n \"Check baker analytics plan --full for missing app events. Resolve the named contract issue or narrow the observation window; never infer abandonment from completion totals.\",\n false,\n );\n}\n\n/** A failed plan read or preparation. */\nexport function trackingPlanErrorEnvelope(err: unknown): CommandErrorEnvelope {\n return requestErrorEnvelope(\n err,\n \"Read baker analytics plan --full and baker tag-manager draft list to see what is prepared. Correct the request and repeat; do not publish until every requested installation is staged.\",\n true,\n );\n}\n"],"mappings":";;;;;;;;;AACA,SAAS,SAAS;AAmBX,SAAS,uBAAuB,KAAkE;AACvG,MAAI,eAAe,UAAU;AAC3B,WAAO,gBAAgB,IAAI,OAAO,IAC9B,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,SAAS,KAAK,mBAAmB,IAChE,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ;AAAA,EAC7C;AACA,SAAO,EAAE,MAAM,iBAAiB,SAAS,eAAe,QAAQ,IAAI,UAAU,mBAAmB;AACnG;AASA,SAAS,qBAAqB,KAAc,YAAoB,oBAAmD;AACjH,MAAI,eAAe,EAAE,YAAY,eAAe,aAAa;AAC3D,UAAM,UAAU,eAAe,EAAE,WAAW,EAAE,cAAc,GAAG,IAAI,IAAI;AACvE,WAAO,EAAE,MAAM,oBAAoB,SAAS,GAAI,qBAAqB,EAAE,KAAK,WAAW,IAAI,CAAC,EAAG;AAAA,EACjG;AACA,QAAM,WAAW,uBAAuB,GAAG;AAC3C,SAAO,SAAS,SAAS,qBAAqB,EAAE,GAAG,UAAU,KAAK,WAAW,IAAI;AACnF;AAGO,SAAS,2BAA2B,KAAoC;AAC7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,0BAA0B,KAAoC;AAC5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MODEL_REGISTRY,
|
|
3
|
+
isRegisteredModel
|
|
4
|
+
} from "./chunk-CAMX6OHF.js";
|
|
5
|
+
|
|
6
|
+
// src/commands/canvas/scaffold-common.ts
|
|
7
|
+
import { access, readFile } from "fs/promises";
|
|
8
|
+
|
|
9
|
+
// src/commands/canvas/composition-path.ts
|
|
10
|
+
import { existsSync } from "fs";
|
|
11
|
+
import path from "path";
|
|
12
|
+
function resolveShippedCanvasDir(name, startDir, exists = existsSync, maxDepth = 8) {
|
|
13
|
+
const rel = path.join("canvas", name);
|
|
14
|
+
let dir = startDir;
|
|
15
|
+
for (let i = 0; i < maxDepth; i++) {
|
|
16
|
+
const candidate = path.join(dir, rel);
|
|
17
|
+
if (exists(path.join(candidate, "meta.json"))) return candidate;
|
|
18
|
+
const parent = path.dirname(dir);
|
|
19
|
+
if (parent === dir) break;
|
|
20
|
+
dir = parent;
|
|
21
|
+
}
|
|
22
|
+
return path.resolve(startDir, "../../../", rel);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// src/commands/canvas/scaffold-common.ts
|
|
26
|
+
var SHIPPED_OVERLAY_COMPOSITION_DIR = resolveShippedCanvasDir(
|
|
27
|
+
"video-overlay-composition",
|
|
28
|
+
import.meta.dirname
|
|
29
|
+
);
|
|
30
|
+
var SHIPPED_CAPTIONS_DIR = resolveShippedCanvasDir("tiktok-captions-composition", import.meta.dirname);
|
|
31
|
+
function resolveModel(kind, requested, fallback) {
|
|
32
|
+
const model = requested ? String(requested) : fallback;
|
|
33
|
+
if (isRegisteredModel(kind, model)) return model;
|
|
34
|
+
const known = Object.keys(MODEL_REGISTRY[kind]).join(", ");
|
|
35
|
+
throw new Error(`"${model}" is not a ${kind} model. Use one of: ${known}`);
|
|
36
|
+
}
|
|
37
|
+
async function loadAssetText(ref, label) {
|
|
38
|
+
const r = ref;
|
|
39
|
+
if (typeof r?.path === "string") return readFile(r.path, "utf8");
|
|
40
|
+
if (typeof r?.url === "string") {
|
|
41
|
+
const res = await fetch(r.url);
|
|
42
|
+
if (!res.ok) throw new Error(`failed to fetch ${label} (${res.status})`);
|
|
43
|
+
return res.text();
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`${label}: output had no readable path or url`);
|
|
46
|
+
}
|
|
47
|
+
function parseElements(raw) {
|
|
48
|
+
const parsed = JSON.parse(raw);
|
|
49
|
+
if (Array.isArray(parsed)) return parsed;
|
|
50
|
+
if (parsed && typeof parsed === "object" && Array.isArray(parsed.elements)) {
|
|
51
|
+
return parsed.elements;
|
|
52
|
+
}
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
function fail(code, message, fix) {
|
|
56
|
+
process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message, ...fix ? { fix } : {} } }, null, 2)}
|
|
57
|
+
`);
|
|
58
|
+
process.exit(2);
|
|
59
|
+
}
|
|
60
|
+
function fileExists(target) {
|
|
61
|
+
return access(target).then(
|
|
62
|
+
() => true,
|
|
63
|
+
() => false
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export {
|
|
68
|
+
SHIPPED_OVERLAY_COMPOSITION_DIR,
|
|
69
|
+
SHIPPED_CAPTIONS_DIR,
|
|
70
|
+
resolveModel,
|
|
71
|
+
loadAssetText,
|
|
72
|
+
parseElements,
|
|
73
|
+
fail,
|
|
74
|
+
fileExists
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=chunk-AR7PU7BB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/canvas/scaffold-common.ts","../src/commands/canvas/composition-path.ts"],"sourcesContent":["// What the three scaffold commands (`scaffold-video`, `scaffold-static-ad`,\n// `scaffold-ad`) share: the compositions they ship, how a model flag resolves, and\n// how an analysis pass's output is read back.\n\nimport { access, readFile } from \"node:fs/promises\";\nimport { isRegisteredModel, MODEL_REGISTRY, type NodeKind } from \"@baker/canvas-contract\";\nimport { resolveShippedCanvasDir } from \"./composition-path.ts\";\n\n// The composition templates that ship with the CLI, resolved by walking up to the\n// package's `canvas/` dir so they work in both the dev (tsx) and bundled dist layout.\n/** The ad's text and brand overlay. */\nexport const SHIPPED_OVERLAY_COMPOSITION_DIR = resolveShippedCanvasDir(\n \"video-overlay-composition\",\n import.meta.dirname,\n);\n/** The TikTok-style word-by-word caption track (sound-off feeds). */\nexport const SHIPPED_CAPTIONS_DIR = resolveShippedCanvasDir(\"tiktok-captions-composition\", import.meta.dirname);\n\n/**\n * The model a scaffold node runs on: the one the caller named, else the role default.\n *\n * Either must be registered for `kind`, and an unknown one is an error naming what\n * the registry does have. This used to fall back to the registry's first id, so a\n * typo in a model flag rendered every node on a model nobody chose.\n */\nexport function resolveModel(kind: NodeKind, requested: unknown, fallback: string): string {\n const model = requested ? String(requested) : fallback;\n if (isRegisteredModel(kind, model)) return model;\n const known = Object.keys(MODEL_REGISTRY[kind]).join(\", \");\n throw new Error(`\"${model}\" is not a ${kind} model. Use one of: ${known}`);\n}\n\ntype LoadableRef = { path?: unknown; url?: unknown };\n\n/** Read an asset's content as text: the locally-ingested file first, else its URL. */\nexport async function loadAssetText(ref: unknown, label: string): Promise<string> {\n const r = ref as LoadableRef;\n if (typeof r?.path === \"string\") return readFile(r.path, \"utf8\");\n if (typeof r?.url === \"string\") {\n const res = await fetch(r.url);\n if (!res.ok) throw new Error(`failed to fetch ${label} (${res.status})`);\n return res.text();\n }\n throw new Error(`${label}: output had no readable path or url`);\n}\n\n/** Parse the selection pass output into the elements array ({elements:[...]} or a bare array). */\nexport function parseElements(raw: string): unknown[] {\n const parsed = JSON.parse(raw) as unknown;\n if (Array.isArray(parsed)) return parsed;\n if (parsed && typeof parsed === \"object\" && Array.isArray((parsed as { elements?: unknown }).elements)) {\n return (parsed as { elements: unknown[] }).elements;\n }\n return [];\n}\n\n/** Print the `{ ok: false, error }` envelope and exit 2. */\nexport function fail(code: string, message: string, fix?: string): never {\n process.stderr.write(`${JSON.stringify({ ok: false, error: { code, message, ...(fix ? { fix } : {}) } }, null, 2)}\\n`);\n process.exit(2);\n}\n\nexport function fileExists(target: string): Promise<boolean> {\n return access(target).then(\n () => true,\n () => false,\n );\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Resolve a shipped `canvas/<name>` asset dir, robust to BOTH module layouts:\n * - dev (tsx): this code lives at `src/commands/canvas/`, so the asset is at\n * `<package root>/canvas/<name>` — three levels up.\n * - published (tsup): `src/**` is flattened into a single `dist/cli.js`, so the\n * same code now lives at `<package root>/dist/`, and the asset is `../canvas/<name>`.\n *\n * A single hardcoded relative path cannot satisfy both layouts (the previous\n * `../../../canvas` worked from src but overshot the package entirely from the\n * bundled dist, throwing ENOENT after the billed deconstruct already ran). So\n * instead of guessing the nesting, walk UP from the module dir until we find a\n * `canvas/<name>` that actually exists on disk. `canvas` must stay in\n * package.json `files` for the published build to ship the asset at all.\n */\nexport function resolveShippedCanvasDir(\n name: string,\n startDir: string,\n exists: (p: string) => boolean = existsSync,\n maxDepth = 8,\n): string {\n const rel = path.join(\"canvas\", name);\n let dir = startDir;\n for (let i = 0; i < maxDepth; i++) {\n const candidate = path.join(dir, rel);\n // `meta.json` is the composition's manifest — its presence proves we found\n // the real asset dir, not an empty `canvas/` that happens to exist higher up.\n if (exists(path.join(candidate, \"meta.json\"))) return candidate;\n const parent = path.dirname(dir);\n if (parent === dir) break; // reached filesystem root\n dir = parent;\n }\n // Fall back to the dev src-relative location so a missing asset still produces\n // a clear \"no such file\" at copy time rather than a silently-wrong path.\n return path.resolve(startDir, \"../../../\", rel);\n}\n"],"mappings":";;;;;;AAIA,SAAS,QAAQ,gBAAgB;;;ACJjC,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AAgBV,SAAS,wBACd,MACA,UACA,SAAiC,YACjC,WAAW,GACH;AACR,QAAM,MAAM,KAAK,KAAK,UAAU,IAAI;AACpC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,UAAM,YAAY,KAAK,KAAK,KAAK,GAAG;AAGpC,QAAI,OAAO,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG,QAAO;AACtD,UAAM,SAAS,KAAK,QAAQ,GAAG;AAC/B,QAAI,WAAW,IAAK;AACpB,UAAM;AAAA,EACR;AAGA,SAAO,KAAK,QAAQ,UAAU,aAAa,GAAG;AAChD;;;AD1BO,IAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA,YAAY;AACd;AAEO,IAAM,uBAAuB,wBAAwB,+BAA+B,YAAY,OAAO;AASvG,SAAS,aAAa,MAAgB,WAAoB,UAA0B;AACzF,QAAM,QAAQ,YAAY,OAAO,SAAS,IAAI;AAC9C,MAAI,kBAAkB,MAAM,KAAK,EAAG,QAAO;AAC3C,QAAM,QAAQ,OAAO,KAAK,eAAe,IAAI,CAAC,EAAE,KAAK,IAAI;AACzD,QAAM,IAAI,MAAM,IAAI,KAAK,cAAc,IAAI,uBAAuB,KAAK,EAAE;AAC3E;AAKA,eAAsB,cAAc,KAAc,OAAgC;AAChF,QAAM,IAAI;AACV,MAAI,OAAO,GAAG,SAAS,SAAU,QAAO,SAAS,EAAE,MAAM,MAAM;AAC/D,MAAI,OAAO,GAAG,QAAQ,UAAU;AAC9B,UAAM,MAAM,MAAM,MAAM,EAAE,GAAG;AAC7B,QAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,mBAAmB,KAAK,KAAK,IAAI,MAAM,GAAG;AACvE,WAAO,IAAI,KAAK;AAAA,EAClB;AACA,QAAM,IAAI,MAAM,GAAG,KAAK,sCAAsC;AAChE;AAGO,SAAS,cAAc,KAAwB;AACpD,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,MAAI,MAAM,QAAQ,MAAM,EAAG,QAAO;AAClC,MAAI,UAAU,OAAO,WAAW,YAAY,MAAM,QAAS,OAAkC,QAAQ,GAAG;AACtG,WAAQ,OAAmC;AAAA,EAC7C;AACA,SAAO,CAAC;AACV;AAGO,SAAS,KAAK,MAAc,SAAiB,KAAqB;AACvE,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,SAAS,GAAI,MAAM,EAAE,IAAI,IAAI,CAAC,EAAG,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AACrH,UAAQ,KAAK,CAAC;AAChB;AAEO,SAAS,WAAW,QAAkC;AAC3D,SAAO,OAAO,MAAM,EAAE;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import {
|
|
2
|
+
loadCompositionMeta
|
|
3
|
+
} from "./chunk-KZUHRZ2C.js";
|
|
4
|
+
import {
|
|
5
|
+
parseRefExpr
|
|
6
|
+
} from "./chunk-66USKCVY.js";
|
|
7
|
+
import {
|
|
8
|
+
resolveAdaptFormats
|
|
9
|
+
} from "./chunk-CAMX6OHF.js";
|
|
10
|
+
|
|
11
|
+
// src/commands/canvas/output-ratio.ts
|
|
12
|
+
import { readFile } from "fs/promises";
|
|
13
|
+
import path from "path";
|
|
14
|
+
function definitionFormats(markdown) {
|
|
15
|
+
const front = markdown.match(/^---\n([\s\S]*?)\n---/)?.[1];
|
|
16
|
+
if (!front) return [];
|
|
17
|
+
const clean = (s) => s.trim().replace(/^["']|["']$/g, "");
|
|
18
|
+
const flow = front.match(/^formats:\s*\[([^\]]*)\]/m);
|
|
19
|
+
if (flow) return (flow[1] ?? "").split(",").map(clean).filter(Boolean);
|
|
20
|
+
const block = front.match(/^formats:\s*\n((?:\s+-\s+.*\n?)+)/m);
|
|
21
|
+
if (!block) return [];
|
|
22
|
+
return (block[1] ?? "").split("\n").map((l) => l.replace(/^\s+-\s+/, "")).map(clean).filter(Boolean);
|
|
23
|
+
}
|
|
24
|
+
function reduce(width, height) {
|
|
25
|
+
const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
|
|
26
|
+
const d = gcd(width, height);
|
|
27
|
+
return `${width / d}:${height / d}`;
|
|
28
|
+
}
|
|
29
|
+
async function ratiosOf(nodes, id, seen) {
|
|
30
|
+
const node = nodes.get(id);
|
|
31
|
+
if (!node || seen.has(id)) return null;
|
|
32
|
+
seen.add(id);
|
|
33
|
+
const p = node.params ?? {};
|
|
34
|
+
switch (node.type) {
|
|
35
|
+
case "image_generate":
|
|
36
|
+
return typeof p.aspect_ratio === "string" ? [p.aspect_ratio] : null;
|
|
37
|
+
case "image_aspect_adapt":
|
|
38
|
+
return [...resolveAdaptFormats(p)];
|
|
39
|
+
case "hyperframe_snapshot": {
|
|
40
|
+
if (typeof p.composition !== "string") return null;
|
|
41
|
+
const meta = await loadCompositionMeta(p.composition).catch(() => null);
|
|
42
|
+
return meta ? [reduce(meta.width, meta.height)] : null;
|
|
43
|
+
}
|
|
44
|
+
case "collect": {
|
|
45
|
+
const images = node.inputs?.images;
|
|
46
|
+
if (!Array.isArray(images)) return null;
|
|
47
|
+
const out = [];
|
|
48
|
+
for (const entry of images) {
|
|
49
|
+
const ref = typeof entry === "string" ? parseRefExpr(entry) : null;
|
|
50
|
+
if (!ref || ref.kind !== "ref") return null;
|
|
51
|
+
const upstream = await ratiosOf(nodes, ref.nodeId, seen);
|
|
52
|
+
if (!upstream) return null;
|
|
53
|
+
out.push(ref.index !== void 0 && upstream.length > 1 ? upstream[ref.index] ?? "" : upstream[0] ?? "");
|
|
54
|
+
}
|
|
55
|
+
return out.filter(Boolean);
|
|
56
|
+
}
|
|
57
|
+
default:
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function producedRatios(canvas) {
|
|
62
|
+
const c = canvas;
|
|
63
|
+
if (!Array.isArray(c?.nodes) || typeof c?.output?.node !== "string") return null;
|
|
64
|
+
const nodes = new Map(c.nodes.flatMap((n) => typeof n.id === "string" ? [[n.id, n]] : []));
|
|
65
|
+
return ratiosOf(nodes, c.output.node, /* @__PURE__ */ new Set());
|
|
66
|
+
}
|
|
67
|
+
function value(ratio) {
|
|
68
|
+
const [w, h] = ratio.split(":").map(Number);
|
|
69
|
+
return w && h ? w / h : null;
|
|
70
|
+
}
|
|
71
|
+
function outputRatioWarnings(declared, produced) {
|
|
72
|
+
if (!produced || produced.length === 0) return [];
|
|
73
|
+
const shapes = produced.flatMap((r) => value(r) ?? []);
|
|
74
|
+
return declared.flatMap((format) => {
|
|
75
|
+
const want = value(format);
|
|
76
|
+
if (want === null || shapes.some((s) => Math.abs(s / want - 1) <= 0.02)) return [];
|
|
77
|
+
return [
|
|
78
|
+
{
|
|
79
|
+
path: "output",
|
|
80
|
+
code: "OUTPUT_RATIO_MISMATCH",
|
|
81
|
+
severity: "warning",
|
|
82
|
+
message: `_definition.md declares ${format}, but this canvas delivers ${produced.join(", ")}. A ${format} placement would get the wrong shape: re-scaffold with that format, or fix the formats the creative declares.`
|
|
83
|
+
}
|
|
84
|
+
];
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async function outputRatioWarningsFor(canvas, canvasPath) {
|
|
88
|
+
const definition = await readFile(path.join(path.dirname(canvasPath), "_definition.md"), "utf8").catch(() => null);
|
|
89
|
+
if (!definition) return [];
|
|
90
|
+
return outputRatioWarnings(definitionFormats(definition), await producedRatios(canvas));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export {
|
|
94
|
+
outputRatioWarningsFor
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=chunk-ASL7JFBD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/canvas/output-ratio.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveAdaptFormats } from \"@baker/canvas-contract\";\nimport type { ValidationIssue } from \"../../engine/engine/errors.ts\";\nimport { loadCompositionMeta } from \"../../engine/engine/composition-meta.ts\";\nimport { parseRefExpr } from \"../../engine/schema/canvas.ts\";\n\n/**\n * Does the canvas deliver the formats its creative says it delivers?\n *\n * A creative declared `formats: [\"4:5\"]` shipped a 1024x1536 image into a staged Meta ad:\n * its hero was generated at 3:4 (gpt-image has no 4:5) and nothing converted it, and\n * `validate` answered `warnings: []`. This compares the shapes the canvas's output is\n * rendered at with the formats `_definition.md` declares, and warns before anything bills.\n */\n\n/** The `formats` a `_definition.md` frontmatter declares (flow or block list). */\nexport function definitionFormats(markdown: string): string[] {\n const front = markdown.match(/^---\\n([\\s\\S]*?)\\n---/)?.[1];\n if (!front) return [];\n const clean = (s: string) => s.trim().replace(/^[\"']|[\"']$/g, \"\");\n const flow = front.match(/^formats:\\s*\\[([^\\]]*)\\]/m);\n if (flow) return (flow[1] ?? \"\").split(\",\").map(clean).filter(Boolean);\n const block = front.match(/^formats:\\s*\\n((?:\\s+-\\s+.*\\n?)+)/m);\n if (!block) return [];\n return (block[1] ?? \"\")\n .split(\"\\n\")\n .map((l) => l.replace(/^\\s+-\\s+/, \"\"))\n .map(clean)\n .filter(Boolean);\n}\n\ntype Node = { id?: unknown; type?: unknown; params?: Record<string, unknown>; inputs?: Record<string, unknown> };\n\nfunction reduce(width: number, height: number): string {\n const gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\n const d = gcd(width, height);\n return `${width / d}:${height / d}`;\n}\n\n/** The ratios one node renders at, or null when its shape cannot be known before the run. */\nasync function ratiosOf(nodes: Map<string, Node>, id: string, seen: Set<string>): Promise<string[] | null> {\n const node = nodes.get(id);\n if (!node || seen.has(id)) return null;\n seen.add(id);\n const p = node.params ?? {};\n switch (node.type) {\n case \"image_generate\":\n return typeof p.aspect_ratio === \"string\" ? [p.aspect_ratio] : null;\n case \"image_aspect_adapt\":\n return [...resolveAdaptFormats(p as Parameters<typeof resolveAdaptFormats>[0])];\n case \"hyperframe_snapshot\": {\n if (typeof p.composition !== \"string\") return null;\n const meta = await loadCompositionMeta(p.composition).catch(() => null);\n return meta ? [reduce(meta.width, meta.height)] : null;\n }\n case \"collect\": {\n const images = node.inputs?.images;\n if (!Array.isArray(images)) return null;\n const out: string[] = [];\n for (const entry of images) {\n const ref = typeof entry === \"string\" ? parseRefExpr(entry) : null;\n if (!ref || ref.kind !== \"ref\") return null;\n const upstream = await ratiosOf(nodes, ref.nodeId, seen);\n if (!upstream) return null;\n out.push(ref.index !== undefined && upstream.length > 1 ? (upstream[ref.index] ?? \"\") : (upstream[0] ?? \"\"));\n }\n return out.filter(Boolean);\n }\n default:\n return null;\n }\n}\n\n/**\n * The ratios the canvas's output is rendered at, in order, or null when any of them\n * cannot be known before the run (a local transform, a hand-built node). Composition\n * paths must already be resolved.\n */\nexport async function producedRatios(canvas: unknown): Promise<string[] | null> {\n const c = canvas as { nodes?: unknown; output?: { node?: unknown } } | null;\n if (!Array.isArray(c?.nodes) || typeof c?.output?.node !== \"string\") return null;\n const nodes = new Map((c.nodes as Node[]).flatMap((n) => (typeof n.id === \"string\" ? [[n.id, n] as const] : [])));\n return ratiosOf(nodes, c.output.node, new Set());\n}\n\nfunction value(ratio: string): number | null {\n const [w, h] = ratio.split(\":\").map(Number);\n return w && h ? w / h : null;\n}\n\n/** One warning per declared format no output is within 2% of. Pure. */\nexport function outputRatioWarnings(declared: string[], produced: string[] | null): ValidationIssue[] {\n if (!produced || produced.length === 0) return [];\n const shapes = produced.flatMap((r) => value(r) ?? []);\n return declared.flatMap((format) => {\n const want = value(format);\n if (want === null || shapes.some((s) => Math.abs(s / want - 1) <= 0.02)) return [];\n return [\n {\n path: \"output\",\n code: \"OUTPUT_RATIO_MISMATCH\",\n severity: \"warning\" as const,\n message: `_definition.md declares ${format}, but this canvas delivers ${produced.join(\", \")}. A ${format} placement would get the wrong shape: re-scaffold with that format, or fix the formats the creative declares.`,\n },\n ];\n });\n}\n\n/** The warnings for the canvas at `canvasPath`, read against its own `_definition.md`. */\nexport async function outputRatioWarningsFor(canvas: unknown, canvasPath: string): Promise<ValidationIssue[]> {\n const definition = await readFile(path.join(path.dirname(canvasPath), \"_definition.md\"), \"utf8\").catch(() => null);\n if (!definition) return [];\n return outputRatioWarnings(definitionFormats(definition), await producedRatios(canvas));\n}\n"],"mappings":"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","names":[]}
|