@koda-sl/baker-cli 0.386.0-dev.8b1f99042 → 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 +1091 -211
- 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-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
- package/dist/chunk-BVM5IRZW.js.map +1 -0
- package/dist/chunk-CAMX6OHF.js +3182 -0
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/chunk-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-VLUGGVJL.js → chunk-TPXI2GCW.js} +12 -4
- package/dist/chunk-TPXI2GCW.js.map +1 -0
- 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 -69909
- 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-J7DQZ2ED.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-CHJOTJTZ.js +0 -9989
- package/dist/chunk-CHJOTJTZ.js.map +0 -1
- package/dist/chunk-HJEMOSPH.js +0 -1292
- package/dist/chunk-HJEMOSPH.js.map +0 -1
- package/dist/chunk-MF7YA62W.js.map +0 -1
- package/dist/chunk-VLUGGVJL.js.map +0 -1
- package/dist/chunk-VZEDAFAR.js.map +0 -1
- package/dist/chunk-XHC4LMK4.js.map +0 -1
- package/dist/client-GR6YL3YX.js +0 -17
- package/dist/output-NMQXZF3Z.js +0 -18
- /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → connect-WYUYS5V4.js.map} +0 -0
- /package/dist/{shared-J7DQZ2ED.js.map → customers-HYE7N2H5.js.map} +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import {
|
|
2
|
+
languageTag
|
|
3
|
+
} from "./chunk-QKE7GXZ7.js";
|
|
4
|
+
import {
|
|
5
|
+
parseRefExpr
|
|
6
|
+
} from "./chunk-66USKCVY.js";
|
|
7
|
+
import {
|
|
8
|
+
AWARENESS_VALUES
|
|
9
|
+
} from "./chunk-5HYSKH77.js";
|
|
10
|
+
import {
|
|
11
|
+
collectAssetRefLikes,
|
|
12
|
+
isPersistedAssetRef
|
|
13
|
+
} from "./chunk-U7BBXM67.js";
|
|
14
|
+
|
|
15
|
+
// src/commands/canvas/creative-definition.ts
|
|
16
|
+
import { parseDocument } from "yaml";
|
|
17
|
+
var PLATFORM_VALUES = ["meta", "google", "linkedin", "tiktok", "youtube", "x", "other"];
|
|
18
|
+
var FORMAT_VALUES = ["1:1", "4:5", "9:16", "16:9", "1.91:1"];
|
|
19
|
+
var EVIDENCE_VALUES = ["observed", "interpreted", "hypothesized", "generated"];
|
|
20
|
+
function titleFromSlug(slug) {
|
|
21
|
+
const title = slug.split("-").filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
22
|
+
return title || slug;
|
|
23
|
+
}
|
|
24
|
+
function resolvePlatform(platform) {
|
|
25
|
+
const value = platform?.trim();
|
|
26
|
+
return value && PLATFORM_VALUES.includes(value) ? value : "meta";
|
|
27
|
+
}
|
|
28
|
+
function resolveFormats(aspect) {
|
|
29
|
+
const value = aspect?.trim();
|
|
30
|
+
return value && FORMAT_VALUES.includes(value) ? [value] : ["4:5"];
|
|
31
|
+
}
|
|
32
|
+
function resolveFormatList(formats) {
|
|
33
|
+
const valid = [...new Set(formats.map((f) => f.trim()))].filter(
|
|
34
|
+
(f) => FORMAT_VALUES.includes(f)
|
|
35
|
+
);
|
|
36
|
+
return valid.length > 0 ? valid : ["4:5"];
|
|
37
|
+
}
|
|
38
|
+
function describeBlueprintIntent(blueprint) {
|
|
39
|
+
const intent = blueprint?.ad_intent;
|
|
40
|
+
if (typeof intent === "string" && intent.trim()) return intent.trim();
|
|
41
|
+
if (intent && typeof intent === "object") {
|
|
42
|
+
const summary = intent.summary ?? intent.feeling;
|
|
43
|
+
if (typeof summary === "string" && summary.trim()) return summary.trim();
|
|
44
|
+
}
|
|
45
|
+
return void 0;
|
|
46
|
+
}
|
|
47
|
+
function yamlScalar(value) {
|
|
48
|
+
return JSON.stringify(value);
|
|
49
|
+
}
|
|
50
|
+
function buildCreativeDefinition(input) {
|
|
51
|
+
const lines = ["---", `title: ${yamlScalar(input.title)}`, `kind: ${input.kind}`, `platform: ${input.platform}`];
|
|
52
|
+
lines.push(`formats: [${input.formats.map(yamlScalar).join(", ")}]`);
|
|
53
|
+
lines.push(`status: ${input.status ?? "draft"}`);
|
|
54
|
+
if (input.sourceReferenceUrl) lines.push(`sourceReferenceUrl: ${yamlScalar(input.sourceReferenceUrl)}`);
|
|
55
|
+
if (input.sourceAdvertiser) lines.push(`sourceAdvertiser: ${yamlScalar(input.sourceAdvertiser)}`);
|
|
56
|
+
if (input.sourceAdvertiserId) lines.push(`sourceAdvertiserId: ${yamlScalar(input.sourceAdvertiserId)}`);
|
|
57
|
+
if (input.sourceAdId) lines.push(`sourceAdId: ${yamlScalar(input.sourceAdId)}`);
|
|
58
|
+
if (input.sourcePlatform) lines.push(`sourcePlatform: ${input.sourcePlatform}`);
|
|
59
|
+
if (input.sourceKind) lines.push(`sourceKind: ${input.sourceKind}`);
|
|
60
|
+
if (input.sourcePath) lines.push(`sourcePath: ${yamlScalar(input.sourcePath)}`);
|
|
61
|
+
if (input.targetAdSet) lines.push(`targetAdSet: ${yamlScalar(input.targetAdSet)}`);
|
|
62
|
+
if (input.viewer) lines.push(`viewer: ${JSON.stringify(input.viewer)}`);
|
|
63
|
+
lines.push("---", "");
|
|
64
|
+
lines.push(input.description?.trim() || `${input.title} \u2014 canvas-built ${input.kind} ad for ${input.platform}.`);
|
|
65
|
+
lines.push("");
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
}
|
|
68
|
+
var SOURCE_FIELD_KEYS = ["sourceAdId", "sourcePlatform", "sourceAdvertiserId"];
|
|
69
|
+
function parseDefinitionSourceFields(raw) {
|
|
70
|
+
const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
|
|
71
|
+
if (!match) return {};
|
|
72
|
+
const doc = parseDocument(match[1] ?? "");
|
|
73
|
+
if (doc.errors.length > 0) return {};
|
|
74
|
+
const fields = {};
|
|
75
|
+
for (const key of SOURCE_FIELD_KEYS) {
|
|
76
|
+
const value = doc.get(key);
|
|
77
|
+
if (typeof value === "string" && value.trim()) fields[key] = value.trim();
|
|
78
|
+
}
|
|
79
|
+
return fields;
|
|
80
|
+
}
|
|
81
|
+
function oneOf(values, value) {
|
|
82
|
+
return values.find((allowed) => allowed === value);
|
|
83
|
+
}
|
|
84
|
+
function parseDefinitionStrategyFields(raw) {
|
|
85
|
+
const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
|
|
86
|
+
if (!match) return {};
|
|
87
|
+
const doc = parseDocument(match[1] ?? "");
|
|
88
|
+
if (doc.errors.length > 0) return {};
|
|
89
|
+
const text = (key) => {
|
|
90
|
+
const value = doc.get(key);
|
|
91
|
+
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
92
|
+
};
|
|
93
|
+
const ideaSlug = text("idea");
|
|
94
|
+
const message = text("message");
|
|
95
|
+
const evidence = oneOf(EVIDENCE_VALUES, text("evidence"));
|
|
96
|
+
const angle = text("angle");
|
|
97
|
+
const persona = text("persona");
|
|
98
|
+
const awareness = oneOf(AWARENESS_VALUES, text("awareness"));
|
|
99
|
+
const hypothesis = text("hypothesis");
|
|
100
|
+
const seriesLead = text("series");
|
|
101
|
+
const language = languageTag(text("language") ?? "");
|
|
102
|
+
return {
|
|
103
|
+
...seriesLead ? { seriesLead } : {},
|
|
104
|
+
...language ? { language } : {},
|
|
105
|
+
...ideaSlug ? { ideaSlug } : {},
|
|
106
|
+
...message ? { message } : {},
|
|
107
|
+
...evidence ? { evidence } : {},
|
|
108
|
+
...angle ? { angle } : {},
|
|
109
|
+
...persona ? { persona } : {},
|
|
110
|
+
...awareness ? { awareness } : {},
|
|
111
|
+
...hypothesis ? { hypothesis } : {}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function parseDefinitionSeriesPlace(raw) {
|
|
115
|
+
const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
|
|
116
|
+
if (!match || parseDocument(match[1] ?? "").errors.length > 0) return null;
|
|
117
|
+
const { seriesLead, language } = parseDefinitionStrategyFields(raw);
|
|
118
|
+
return { seriesLead: seriesLead ?? null, language: language ?? null };
|
|
119
|
+
}
|
|
120
|
+
function parseDefinitionViewerFields(raw) {
|
|
121
|
+
const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
|
|
122
|
+
if (!match) return {};
|
|
123
|
+
const doc = parseDocument(match[1] ?? "");
|
|
124
|
+
if (doc.errors.length > 0) return {};
|
|
125
|
+
const data = doc.toJS();
|
|
126
|
+
const adSet = data?.targetAdSet;
|
|
127
|
+
const targetAdSet = typeof adSet === "string" || typeof adSet === "number" ? String(adSet).trim() : "";
|
|
128
|
+
return {
|
|
129
|
+
...targetAdSet ? { targetAdSet } : {},
|
|
130
|
+
...data?.viewer !== void 0 ? { viewer: data.viewer } : {}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function setDefinitionViewer(raw, fields) {
|
|
134
|
+
const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
|
|
135
|
+
if (!match) return raw;
|
|
136
|
+
const doc = parseDocument(match[1] ?? "");
|
|
137
|
+
if (doc.errors.length > 0) return raw;
|
|
138
|
+
if (fields.targetAdSet) doc.set("targetAdSet", fields.targetAdSet);
|
|
139
|
+
if (fields.viewer) doc.set("viewer", doc.createNode(fields.viewer, { flow: true }));
|
|
140
|
+
return `---
|
|
141
|
+
${doc.toString()}---${raw.slice(match[0].length)}`;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// src/commands/canvas/run-record.ts
|
|
145
|
+
import path from "path";
|
|
146
|
+
var MAX_RUN_NODES = 200;
|
|
147
|
+
var MAX_OUTPUTS_PER_NODE = 10;
|
|
148
|
+
var MAX_FINAL_OUTPUTS = 10;
|
|
149
|
+
var MAX_CREATIVE_SLUG_LENGTH = 100;
|
|
150
|
+
function creativeSlugFromCanvasPath(filePath) {
|
|
151
|
+
const normalized = filePath.split(path.sep).join("/");
|
|
152
|
+
const match = normalized.match(/(?:^|\/)src\/creatives\/([a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\//);
|
|
153
|
+
const slug = match?.[1] ?? null;
|
|
154
|
+
return slug && slug.length <= MAX_CREATIVE_SLUG_LENGTH ? slug : null;
|
|
155
|
+
}
|
|
156
|
+
function finalOutputLabelsFromCanvas(parsed) {
|
|
157
|
+
const canvas = parsed;
|
|
158
|
+
const outputNodeId = canvas?.output?.node;
|
|
159
|
+
if (typeof outputNodeId !== "string" || !Array.isArray(canvas?.nodes)) return null;
|
|
160
|
+
const node = canvas.nodes.find((n) => n?.id === outputNodeId);
|
|
161
|
+
if (node?.type !== "collect") return null;
|
|
162
|
+
const explicit = node.params?.labels;
|
|
163
|
+
if (Array.isArray(explicit) && explicit.every((l) => typeof l === "string")) {
|
|
164
|
+
return { nodeId: outputNodeId, labels: explicit };
|
|
165
|
+
}
|
|
166
|
+
const images = node.inputs?.images;
|
|
167
|
+
if (!Array.isArray(images)) return null;
|
|
168
|
+
const labels = images.map((entry) => {
|
|
169
|
+
if (typeof entry !== "string") return void 0;
|
|
170
|
+
return parseRefExpr(entry)?.nodeId;
|
|
171
|
+
});
|
|
172
|
+
return { nodeId: outputNodeId, labels };
|
|
173
|
+
}
|
|
174
|
+
var OUTPUT_KINDS = /* @__PURE__ */ new Set(["image", "video", "audio", "json", "text", "font"]);
|
|
175
|
+
function toRecordOutput(slot, value, label) {
|
|
176
|
+
const refs = collectAssetRefLikes(value);
|
|
177
|
+
const ref = refs.length === 1 ? refs[0] : null;
|
|
178
|
+
if (!ref || !isPersistedAssetRef(ref)) return null;
|
|
179
|
+
const kind = typeof ref.kind === "string" && OUTPUT_KINDS.has(ref.kind) ? ref.kind : null;
|
|
180
|
+
if (!kind) return null;
|
|
181
|
+
return {
|
|
182
|
+
slot,
|
|
183
|
+
label,
|
|
184
|
+
kind,
|
|
185
|
+
sha256: ref.sha256,
|
|
186
|
+
url: ref.url,
|
|
187
|
+
mime: ref.mime,
|
|
188
|
+
width: typeof ref.width === "number" ? ref.width : void 0,
|
|
189
|
+
height: typeof ref.height === "number" ? ref.height : void 0,
|
|
190
|
+
durationMs: typeof ref.duration_ms === "number" ? ref.duration_ms : void 0
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function nodeOutputsToRecord(nodeOutputs, labels) {
|
|
194
|
+
const out = [];
|
|
195
|
+
for (const [slot, value] of Object.entries(nodeOutputs)) {
|
|
196
|
+
if (Array.isArray(value)) {
|
|
197
|
+
value.forEach((item, i) => {
|
|
198
|
+
const rec = toRecordOutput(`${slot}#${i}`, item, labels?.[i]);
|
|
199
|
+
if (rec) out.push(rec);
|
|
200
|
+
});
|
|
201
|
+
} else {
|
|
202
|
+
const rec = toRecordOutput(slot, value);
|
|
203
|
+
if (rec) out.push(rec);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return out.slice(0, MAX_OUTPUTS_PER_NODE);
|
|
207
|
+
}
|
|
208
|
+
function finalOutputsToRecord(output, labels) {
|
|
209
|
+
if (Array.isArray(output)) {
|
|
210
|
+
return output.map((item, i) => toRecordOutput(`final#${i}`, item, labels?.[i])).filter((rec2) => rec2 !== null).slice(0, MAX_FINAL_OUTPUTS);
|
|
211
|
+
}
|
|
212
|
+
const rec = toRecordOutput("final", output);
|
|
213
|
+
return rec ? [rec] : [];
|
|
214
|
+
}
|
|
215
|
+
function finalFiles(output, labels) {
|
|
216
|
+
const items = Array.isArray(output) ? output : [output];
|
|
217
|
+
const files = {};
|
|
218
|
+
items.forEach((item, i) => {
|
|
219
|
+
const ref = collectAssetRefLikes(item)[0];
|
|
220
|
+
if (ref && typeof ref.path === "string") files[labels?.[i] ?? `final#${i}`] = ref.path;
|
|
221
|
+
});
|
|
222
|
+
return files;
|
|
223
|
+
}
|
|
224
|
+
function buildRunRecord(result, meta, plan, finalLabels) {
|
|
225
|
+
const nodes = result.node_runs.slice(0, MAX_RUN_NODES).map((run) => {
|
|
226
|
+
const planned = plan?.get(run.node_id);
|
|
227
|
+
return {
|
|
228
|
+
nodeId: run.node_id,
|
|
229
|
+
nodeType: run.node_type,
|
|
230
|
+
cached: run.cached,
|
|
231
|
+
credits: run.credits,
|
|
232
|
+
durationMs: run.duration_ms,
|
|
233
|
+
outputs: nodeOutputsToRecord(
|
|
234
|
+
result.outputs_by_node[run.node_id] ?? {},
|
|
235
|
+
run.node_id === finalLabels?.nodeId ? finalLabels.labels : void 0
|
|
236
|
+
),
|
|
237
|
+
deps: planned?.deps,
|
|
238
|
+
status: plan ? "completed" : void 0,
|
|
239
|
+
paramsPreview: planned?.paramsPreview,
|
|
240
|
+
...planned?.role !== void 0 ? { role: planned.role } : {}
|
|
241
|
+
};
|
|
242
|
+
});
|
|
243
|
+
const finalOutputs = finalOutputsToRecord(result.output, finalLabels?.labels);
|
|
244
|
+
return {
|
|
245
|
+
runId: result.run_id,
|
|
246
|
+
...meta,
|
|
247
|
+
status: "completed",
|
|
248
|
+
stats: {
|
|
249
|
+
totalNodes: result.stats.total_nodes,
|
|
250
|
+
cachedNodes: result.stats.cached_nodes,
|
|
251
|
+
totalCredits: result.stats.total_credits,
|
|
252
|
+
durationMs: result.stats.duration_ms
|
|
253
|
+
},
|
|
254
|
+
nodes,
|
|
255
|
+
finalOutputs: finalOutputs.length > 0 ? finalOutputs : void 0,
|
|
256
|
+
// Sent whenever the review RAN, empty list included. Sending it only when there
|
|
257
|
+
// were findings makes a clean render and an unreviewed one look identical in the
|
|
258
|
+
// record — which is the exact ambiguity this field was added to remove: proving a
|
|
259
|
+
// review had happened once meant re-running a cached canvas and reading raw JSON.
|
|
260
|
+
// Only the fields the backend keeps: a static review's typed fields (`kind`) stay in the CLI.
|
|
261
|
+
...meta.review ? { review: meta.review.slice(0, 40).map(({ severity, what, scene }) => ({ severity, what, ...scene ? { scene } : {} })) } : {}
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function buildInitialRunRecord(runId, meta) {
|
|
265
|
+
return {
|
|
266
|
+
runId,
|
|
267
|
+
...meta,
|
|
268
|
+
status: "running",
|
|
269
|
+
stats: { totalNodes: 0, cachedNodes: 0, totalCredits: 0, durationMs: 0 },
|
|
270
|
+
nodes: []
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function buildFailedRunRecord(runId, errorMessage, meta) {
|
|
274
|
+
return {
|
|
275
|
+
runId,
|
|
276
|
+
...meta,
|
|
277
|
+
status: "failed",
|
|
278
|
+
errorMessage: errorMessage.slice(0, 2e3),
|
|
279
|
+
stats: { totalNodes: 0, cachedNodes: 0, totalCredits: 0, durationMs: 0 },
|
|
280
|
+
nodes: []
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export {
|
|
285
|
+
titleFromSlug,
|
|
286
|
+
resolvePlatform,
|
|
287
|
+
resolveFormats,
|
|
288
|
+
resolveFormatList,
|
|
289
|
+
describeBlueprintIntent,
|
|
290
|
+
buildCreativeDefinition,
|
|
291
|
+
parseDefinitionSourceFields,
|
|
292
|
+
parseDefinitionStrategyFields,
|
|
293
|
+
parseDefinitionSeriesPlace,
|
|
294
|
+
parseDefinitionViewerFields,
|
|
295
|
+
setDefinitionViewer,
|
|
296
|
+
creativeSlugFromCanvasPath,
|
|
297
|
+
finalOutputLabelsFromCanvas,
|
|
298
|
+
nodeOutputsToRecord,
|
|
299
|
+
finalFiles,
|
|
300
|
+
buildRunRecord,
|
|
301
|
+
buildInitialRunRecord,
|
|
302
|
+
buildFailedRunRecord
|
|
303
|
+
};
|
|
304
|
+
//# sourceMappingURL=chunk-RRIAHUWP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/canvas/creative-definition.ts","../src/commands/canvas/run-record.ts"],"sourcesContent":["import { parseDocument } from \"yaml\";\nimport { AWARENESS_VALUES, type ViewerProfile } from \"../../viewer-profile.ts\";\nimport { languageTag } from \"../../language.ts\";\n\n// The scaffold's `creatives` collection (src/collections/creatives.ts) accepts exactly these;\n// `creative-definition.parity.test.ts` fails when the two lists drift. An unknown platform or\n// format degrades to the default rather than emitting a definition the collection would reject.\nexport const PLATFORM_VALUES = [\"meta\", \"google\", \"linkedin\", \"tiktok\", \"youtube\", \"x\", \"other\"] as const;\nexport const FORMAT_VALUES = [\"1:1\", \"4:5\", \"9:16\", \"16:9\", \"1.91:1\"] as const;\nexport const CREATIVE_KIND_VALUES = [\"static\", \"video\"] as const;\nexport const CREATIVE_STATUS_VALUES = [\"draft\", \"rendered\", \"published\", \"archived\"] as const;\nexport const SOURCE_KIND_VALUES = [\"image\", \"video\"] as const;\nexport const EVIDENCE_VALUES = [\"observed\", \"interpreted\", \"hypothesized\", \"generated\"] as const;\n\n/** Frontmatter + body for a creative's `_definition.md`, mirroring the scaffold `creatives` collection schema. */\nexport type CreativeSourceKind = (typeof SOURCE_KIND_VALUES)[number];\n\nexport type CreativeDefinitionInput = {\n title: string;\n kind: (typeof CREATIVE_KIND_VALUES)[number];\n platform: string;\n formats: string[];\n status?: (typeof CREATIVE_STATUS_VALUES)[number];\n sourceReferenceUrl?: string;\n sourceAdvertiser?: string;\n /** The library ad it adapted (`baker winning-ads` ids): what `baker_uses` in reference search counts. */\n sourceAdId?: string;\n sourcePlatform?: string;\n sourceAdvertiserId?: string;\n sourceKind?: CreativeSourceKind;\n /** Repo-relative path to the committed source asset (e.g. \"references/original.jpg\"). */\n sourcePath?: string;\n /** The Meta ad set the ad is made for (`baker ads meta adsets`). */\n targetAdSet?: string;\n /** Who that ad set reaches (`baker ads meta adsets --audience`), or the viewer read from the Knowledge. */\n viewer?: ViewerProfile;\n description?: string;\n};\n\n/** Title-case a slug: \"factorial-hr-4x5\" -> \"Factorial Hr 4x5\". Falls back to the slug when empty. */\nexport function titleFromSlug(slug: string): string {\n const title = slug\n .split(\"-\")\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n return title || slug;\n}\n\n/** Coerce a platform flag to a collection-valid value (default \"meta\"). */\nexport function resolvePlatform(platform: string | undefined): string {\n const value = platform?.trim();\n return value && (PLATFORM_VALUES as readonly string[]).includes(value) ? value : \"meta\";\n}\n\n/** A single-format array from the resolved aspect ratio (default [\"4:5\"] when unknown). */\nexport function resolveFormats(aspect: string | undefined): string[] {\n const value = aspect?.trim();\n return value && (FORMAT_VALUES as readonly string[]).includes(value) ? [value] : [\"4:5\"];\n}\n\n/** A deduped list of collection-valid formats (default [\"4:5\"] when none are recognized). */\nexport function resolveFormatList(formats: readonly string[]): string[] {\n const valid = [...new Set(formats.map((f) => f.trim()))].filter((f) =>\n (FORMAT_VALUES as readonly string[]).includes(f),\n );\n return valid.length > 0 ? valid : [\"4:5\"];\n}\n\n/** Best-effort human summary from an image_describe blueprint's ad_intent (for the definition body). */\nexport function describeBlueprintIntent(blueprint: unknown): string | undefined {\n const intent = (blueprint as { ad_intent?: unknown } | null)?.ad_intent;\n if (typeof intent === \"string\" && intent.trim()) return intent.trim();\n if (intent && typeof intent === \"object\") {\n const summary = (intent as { summary?: unknown }).summary ?? (intent as { feeling?: unknown }).feeling;\n if (typeof summary === \"string\" && summary.trim()) return summary.trim();\n }\n return undefined;\n}\n\n// Double-quoted YAML scalar via JSON.stringify — valid YAML that survives colons, quotes, and unicode.\nfunction yamlScalar(value: string): string {\n return JSON.stringify(value);\n}\n\n/** Render `_definition.md` (YAML frontmatter + body) for a creative. */\nexport function buildCreativeDefinition(input: CreativeDefinitionInput): string {\n const lines = [\"---\", `title: ${yamlScalar(input.title)}`, `kind: ${input.kind}`, `platform: ${input.platform}`];\n lines.push(`formats: [${input.formats.map(yamlScalar).join(\", \")}]`);\n lines.push(`status: ${input.status ?? \"draft\"}`);\n if (input.sourceReferenceUrl) lines.push(`sourceReferenceUrl: ${yamlScalar(input.sourceReferenceUrl)}`);\n if (input.sourceAdvertiser) lines.push(`sourceAdvertiser: ${yamlScalar(input.sourceAdvertiser)}`);\n if (input.sourceAdvertiserId) lines.push(`sourceAdvertiserId: ${yamlScalar(input.sourceAdvertiserId)}`);\n if (input.sourceAdId) lines.push(`sourceAdId: ${yamlScalar(input.sourceAdId)}`);\n if (input.sourcePlatform) lines.push(`sourcePlatform: ${input.sourcePlatform}`);\n if (input.sourceKind) lines.push(`sourceKind: ${input.sourceKind}`);\n if (input.sourcePath) lines.push(`sourcePath: ${yamlScalar(input.sourcePath)}`);\n if (input.targetAdSet) lines.push(`targetAdSet: ${yamlScalar(input.targetAdSet)}`);\n // A JSON object is a YAML flow mapping: one line, and every string in it quoted.\n if (input.viewer) lines.push(`viewer: ${JSON.stringify(input.viewer)}`);\n lines.push(\"---\", \"\");\n lines.push(input.description?.trim() || `${input.title} — canvas-built ${input.kind} ad for ${input.platform}.`);\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\n/** The library ids a `_definition.md` names, as `DefinitionSourceFields`. */\nexport type DefinitionSourceFields = {\n sourceAdId?: string;\n sourcePlatform?: string;\n sourceAdvertiserId?: string;\n};\n\nconst SOURCE_FIELD_KEYS = [\"sourceAdId\", \"sourcePlatform\", \"sourceAdvertiserId\"] as const;\n\n/**\n * Read the library ids back out of a `_definition.md`, so a sync after the agent edited the\n * file still carries them. Tolerant: no frontmatter, a mid-edit parse error, or a non-string\n * value yields nothing for that field rather than a failed sync.\n */\nexport function parseDefinitionSourceFields(raw: string): DefinitionSourceFields {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return {};\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return {};\n const fields: DefinitionSourceFields = {};\n for (const key of SOURCE_FIELD_KEYS) {\n const value = doc.get(key);\n if (typeof value === \"string\" && value.trim()) fields[key] = value.trim();\n }\n return fields;\n}\n\n/** Why the creative exists, as a `_definition.md` states it (its `idea` sent as `ideaSlug`). */\nexport type DefinitionStrategyFields = {\n ideaSlug?: string;\n message?: string;\n evidence?: (typeof EVIDENCE_VALUES)[number];\n angle?: string;\n persona?: string;\n awareness?: (typeof AWARENESS_VALUES)[number];\n hypothesis?: string;\n /** The lead ad of the series this creative is one of (`series`): its picture is the lead's with other words. */\n seriesLead?: string;\n /** The language its words are in (`language`), as a canonical BCP-47 tag (`es-MX`): a translation's. */\n language?: string;\n};\n\nfunction oneOf<T extends string>(values: readonly T[], value: string | undefined): T | undefined {\n return values.find((allowed) => allowed === value);\n}\n\n/**\n * Read the creative's strategy back out of a `_definition.md`, so the dashboard holds it from the\n * first sync rather than from Publish. Tolerant like `parseDefinitionSourceFields`; an `evidence`\n * or `awareness` the collection would reject is dropped rather than sent.\n */\nexport function parseDefinitionStrategyFields(raw: string): DefinitionStrategyFields {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return {};\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return {};\n const text = (key: string): string | undefined => {\n const value = doc.get(key);\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n };\n const ideaSlug = text(\"idea\");\n const message = text(\"message\");\n const evidence = oneOf(EVIDENCE_VALUES, text(\"evidence\"));\n const angle = text(\"angle\");\n const persona = text(\"persona\");\n const awareness = oneOf(AWARENESS_VALUES, text(\"awareness\"));\n const hypothesis = text(\"hypothesis\");\n const seriesLead = text(\"series\");\n const language = languageTag(text(\"language\") ?? \"\");\n return {\n ...(seriesLead ? { seriesLead } : {}),\n ...(language ? { language } : {}),\n ...(ideaSlug ? { ideaSlug } : {}),\n ...(message ? { message } : {}),\n ...(evidence ? { evidence } : {}),\n ...(angle ? { angle } : {}),\n ...(persona ? { persona } : {}),\n ...(awareness ? { awareness } : {}),\n ...(hypothesis ? { hypothesis } : {}),\n };\n}\n\n/** Where a definition places its creative in a series: null for a field it does not name. */\nexport type DefinitionSeriesPlace = { seriesLead: string | null; language: string | null };\n\n/**\n * The series lead and language a `_definition.md` names, each null when it names none, so a\n * sync can tell the backend the creative left its series. Null when the front matter cannot be\n * read (none, or mid-edit invalid YAML): the sync then says nothing and the backend keeps what it has.\n */\nexport function parseDefinitionSeriesPlace(raw: string): DefinitionSeriesPlace | null {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match || parseDocument(match[1] ?? \"\").errors.length > 0) return null;\n const { seriesLead, language } = parseDefinitionStrategyFields(raw);\n return { seriesLead: seriesLead ?? null, language: language ?? null };\n}\n\n/** Who a `_definition.md` says the ad is for: its `targetAdSet` and its recorded `viewer`, unchecked. */\nexport type DefinitionViewerFields = { targetAdSet?: string; viewer?: unknown };\n\n/** Read `targetAdSet` and `viewer` back out of a `_definition.md`; tolerant like `parseDefinitionSourceFields`. */\nexport function parseDefinitionViewerFields(raw: string): DefinitionViewerFields {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return {};\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return {};\n const data = doc.toJS() as { targetAdSet?: unknown; viewer?: unknown } | null;\n const adSet = data?.targetAdSet;\n const targetAdSet = typeof adSet === \"string\" || typeof adSet === \"number\" ? String(adSet).trim() : \"\";\n return {\n ...(targetAdSet ? { targetAdSet } : {}),\n ...(data?.viewer !== undefined ? { viewer: data.viewer } : {}),\n };\n}\n\n/**\n * Record the ad set an ad is for and the viewer it reaches in an existing `_definition.md`,\n * keeping every other field and the body. A file without frontmatter, or one mid-edit, is\n * returned as it is: the viewer is then read again from the ad set on the next run.\n */\nexport function setDefinitionViewer(raw: string, fields: { targetAdSet?: string; viewer?: ViewerProfile }): string {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return raw;\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return raw;\n if (fields.targetAdSet) doc.set(\"targetAdSet\", fields.targetAdSet);\n if (fields.viewer) doc.set(\"viewer\", doc.createNode(fields.viewer, { flow: true }));\n return `---\\n${doc.toString()}---${raw.slice(match[0].length)}`;\n}\n","import path from \"node:path\";\nimport type { CanvasRunVerdict } from \"@baker/api\";\nimport type { NodeRunRecord, RunResult } from \"../../engine/engine/executor.ts\";\nimport { parseRefExpr } from \"../../engine/schema/canvas.ts\";\nimport { collectAssetRefLikes, isPersistedAssetRef } from \"../../engine/storage/remote-cache-store.ts\";\n\n// Mirrors of the backend intake caps (canvas/runRecords.ts) so an in-bounds\n// payload is sent even for pathological runs; the server re-caps defensively.\nconst MAX_RUN_NODES = 200;\nconst MAX_OUTPUTS_PER_NODE = 10;\nconst MAX_FINAL_OUTPUTS = 10;\n\nexport type RunRecordOutput = {\n slot: string;\n /** Variant identity from the collect terminal (branch/scene name) — slot stays the stable key. */\n label?: string;\n kind: \"image\" | \"video\" | \"audio\" | \"json\" | \"text\" | \"font\";\n sha256: string;\n url: string;\n mime: string;\n width?: number;\n height?: number;\n durationMs?: number;\n};\n\n/** Labels for a collect-terminated canvas: the collector's node id + one label per collected image. */\nexport type FinalOutputLabels = { nodeId: string; labels: (string | undefined)[] };\n\nexport type RunNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\";\n\nexport type RunRecordNode = {\n nodeId: string;\n nodeType: string;\n cached: boolean;\n credits: number;\n durationMs: number;\n outputs: RunRecordOutput[];\n /** Upstream node ids ($ref edges) — lets the dashboard render the workflow graph. */\n deps?: string[];\n status?: RunNodeStatus;\n /** Compact params excerpt (prompt text preferred) for graph-node legibility. */\n paramsPreview?: string;\n /** Why this node failed — the real upstream status/provider — set only on `status: \"failed\"`. */\n error?: RunNodeError;\n /** The node's job, from its `tags.role` (e.g. `static_variants`), so readers never parse node ids. */\n role?: string;\n};\n\n/** Display-ready per-node failure detail. Mirrors the engine's `NodeFailureDetail`. */\nexport type RunNodeError = {\n message: string;\n code?: string;\n provider?: string;\n retryable?: boolean;\n};\n\n/** Run attribution stamped on every record post (progress, terminal, initial). */\nexport type RunRecordMeta = {\n creativeSlug?: string;\n canvasPath?: string;\n canvasSha?: string;\n /** Content sha of the rendered source (canvas.json + prompt.json) — powers the dashboard staleness signal. */\n sourceSha?: string;\n chatId?: string;\n /** R2 manifest of the executed canvas + its local file refs — first-write-wins server-side. */\n canvasSnapshotUrl?: string;\n /** R2 copy of the graph this run executes (every node's declaration): what a correction elsewhere grows on. */\n graphUrl?: string;\n /** What the render review found, so it outlives the terminal it was printed to. */\n review?: { severity: \"blocking\" | \"warning\"; what: string; scene?: string }[];\n /**\n * What the review's own model calls cost, as the gateway reported them.\n *\n * The review calls OpenRouter from the Runtime — that is where the finished video is,\n * and shipping 60MB through Convex to reach the same gateway would buy nothing — so\n * this record is what carries the spend back to where it is billed. `costUsd` is\n * OpenRouter's own `usage.cost`, relayed rather than computed: the sandbox never\n * prices anything, which is what makes it safe for the model id to float.\n */\n reviewUsage?: { model: string; inputTokens: number; outputTokens: number; costUsd: number }[];\n /** What the render review said (`@baker/api` CANVAS_RUN_VERDICTS), and whether the run may be shown as a version. */\n verdict?: CanvasRunVerdict;\n presentable?: boolean;\n /** An ad of a series made again from a new version of its lead: a new version of the ad, not a retry. */\n newAsk?: boolean;\n};\n\nexport type RunRecordPayload = {\n runId: string;\n /** `awaiting_approval`: stopped on purpose at a `--until` checkpoint, resumable with the same run id. */\n status: \"running\" | \"completed\" | \"failed\" | \"awaiting_approval\";\n errorMessage?: string;\n stats: { totalNodes: number; cachedNodes: number; totalCredits: number; durationMs: number };\n nodes: RunRecordNode[];\n finalOutputs?: RunRecordOutput[];\n /**\n * What the render review found, sent with the run that produced it.\n *\n * Without this the findings existed only in the CLI's stdout — visible to the agent\n * for one turn and to nobody afterwards. A check whose result leaves no trace cannot\n * be read back, compared between runs, or shown to the person the ad is for, and is\n * indistinguishable from a check that never ran.\n */\n review?: { severity: \"blocking\" | \"warning\"; what: string; scene?: string }[];\n /** Graceful-abort flush (SIGINT/SIGTERM): terminal but resumable — the backend keeps the row adoptable. */\n interrupted?: boolean;\n} & RunRecordMeta;\n\n/** Per-node plan facts (edges + params preview) captured from the engine's plan event. */\nexport type RunPlanInfo = Map<string, { deps: string[]; paramsPreview?: string; role?: string }>;\n\n// Mirrors the backend's CREATIVE_SLUG_MAX_LENGTH — an over-long slug would\n// 400 the whole run record, so attribution is dropped instead.\nconst MAX_CREATIVE_SLUG_LENGTH = 100;\n\n/**\n * A canvas under the repo convention `src/creatives/{slug}/` belongs to that\n * creative; its runs become the creative's generation history. Returns null\n * for canvases anywhere else (and for slugs the backend would reject).\n */\nexport function creativeSlugFromCanvasPath(filePath: string): string | null {\n const normalized = filePath.split(path.sep).join(\"/\");\n const match = normalized.match(/(?:^|\\/)src\\/creatives\\/([a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\\//);\n const slug = match?.[1] ?? null;\n return slug && slug.length <= MAX_CREATIVE_SLUG_LENGTH ? slug : null;\n}\n\n/**\n * Best-effort variant labels from a not-yet-validated canvas: when the declared\n * output is a `collect` node, each final inherits the node's explicit\n * `params.labels[i]`, else the producer node id parsed from the raw `$ref` it\n * collects (`$ref:gen_billboard_03.images#0` → `gen_billboard_03`). Null for\n * every other canvas shape — single-output runs stay unlabeled.\n */\nexport function finalOutputLabelsFromCanvas(parsed: unknown): FinalOutputLabels | null {\n const canvas = parsed as { nodes?: unknown; output?: { node?: unknown } } | null;\n const outputNodeId = canvas?.output?.node;\n if (typeof outputNodeId !== \"string\" || !Array.isArray(canvas?.nodes)) return null;\n const node = canvas.nodes.find((n) => (n as { id?: unknown })?.id === outputNodeId) as\n | { type?: unknown; inputs?: { images?: unknown }; params?: { labels?: unknown } }\n | undefined;\n if (node?.type !== \"collect\") return null;\n const explicit = node.params?.labels;\n if (Array.isArray(explicit) && explicit.every((l) => typeof l === \"string\")) {\n return { nodeId: outputNodeId, labels: explicit };\n }\n const images = node.inputs?.images;\n if (!Array.isArray(images)) return null;\n const labels = images.map((entry) => {\n if (typeof entry !== \"string\") return undefined;\n return parseRefExpr(entry)?.nodeId;\n });\n return { nodeId: outputNodeId, labels };\n}\n\nconst OUTPUT_KINDS = new Set([\"image\", \"video\", \"audio\", \"json\", \"text\", \"font\"]);\n\nfunction toRecordOutput(slot: string, value: unknown, label?: string): RunRecordOutput | null {\n const refs = collectAssetRefLikes(value);\n const ref = refs.length === 1 ? refs[0] : null;\n if (!ref || !isPersistedAssetRef(ref)) return null;\n const kind = typeof ref.kind === \"string\" && OUTPUT_KINDS.has(ref.kind) ? ref.kind : null;\n if (!kind) return null;\n return {\n slot,\n label,\n kind: kind as RunRecordOutput[\"kind\"],\n sha256: ref.sha256,\n url: ref.url,\n mime: ref.mime,\n width: typeof ref.width === \"number\" ? ref.width : undefined,\n height: typeof ref.height === \"number\" ? ref.height : undefined,\n durationMs: typeof ref.duration_ms === \"number\" ? ref.duration_ms : undefined,\n };\n}\n\n/**\n * Flatten one node's outputs into record entries. Single refs keep their slot\n * name; arrays become `slot#i`. Values without a persisted ref (plain JSON\n * manifests, refs whose upload failed) are dropped — every stored output must\n * be renderable from R2.\n */\nexport function nodeOutputsToRecord(\n nodeOutputs: Record<string, unknown>,\n labels?: (string | undefined)[],\n): RunRecordOutput[] {\n const out: RunRecordOutput[] = [];\n for (const [slot, value] of Object.entries(nodeOutputs)) {\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n const rec = toRecordOutput(`${slot}#${i}`, item, labels?.[i]);\n if (rec) out.push(rec);\n });\n } else {\n const rec = toRecordOutput(slot, value);\n if (rec) out.push(rec);\n }\n }\n return out.slice(0, MAX_OUTPUTS_PER_NODE);\n}\n\nfunction finalOutputsToRecord(output: unknown, labels?: (string | undefined)[]): RunRecordOutput[] {\n if (Array.isArray(output)) {\n return output\n .map((item, i) => toRecordOutput(`final#${i}`, item, labels?.[i]))\n .filter((rec): rec is RunRecordOutput => rec !== null)\n .slice(0, MAX_FINAL_OUTPUTS);\n }\n const rec = toRecordOutput(\"final\", output);\n return rec ? [rec] : [];\n}\n\n/** Each delivered size's local file, keyed by its label (or `final#i`), so the agent opens it with Read. */\nexport function finalFiles(output: unknown, labels?: (string | undefined)[]): Record<string, string> {\n const items = Array.isArray(output) ? output : [output];\n const files: Record<string, string> = {};\n items.forEach((item, i) => {\n const ref = collectAssetRefLikes(item)[0];\n if (ref && typeof ref.path === \"string\") files[labels?.[i] ?? `final#${i}`] = ref.path;\n });\n return files;\n}\n\nexport function buildRunRecord(\n result: Pick<RunResult, \"run_id\" | \"output\" | \"outputs_by_node\" | \"stats\"> & { node_runs: NodeRunRecord[] },\n meta: RunRecordMeta,\n plan?: RunPlanInfo,\n finalLabels?: FinalOutputLabels,\n): RunRecordPayload {\n const nodes = result.node_runs.slice(0, MAX_RUN_NODES).map((run): RunRecordNode => {\n const planned = plan?.get(run.node_id);\n return {\n nodeId: run.node_id,\n nodeType: run.node_type,\n cached: run.cached,\n credits: run.credits,\n durationMs: run.duration_ms,\n outputs: nodeOutputsToRecord(\n result.outputs_by_node[run.node_id] ?? {},\n run.node_id === finalLabels?.nodeId ? finalLabels.labels : undefined,\n ),\n deps: planned?.deps,\n status: plan ? \"completed\" : undefined,\n paramsPreview: planned?.paramsPreview,\n ...(planned?.role !== undefined ? { role: planned.role } : {}),\n };\n });\n const finalOutputs = finalOutputsToRecord(result.output, finalLabels?.labels);\n return {\n runId: result.run_id,\n ...meta,\n status: \"completed\",\n stats: {\n totalNodes: result.stats.total_nodes,\n cachedNodes: result.stats.cached_nodes,\n totalCredits: result.stats.total_credits,\n durationMs: result.stats.duration_ms,\n },\n nodes,\n finalOutputs: finalOutputs.length > 0 ? finalOutputs : undefined,\n // Sent whenever the review RAN, empty list included. Sending it only when there\n // were findings makes a clean render and an unreviewed one look identical in the\n // record — which is the exact ambiguity this field was added to remove: proving a\n // review had happened once meant re-running a cached canvas and reading raw JSON.\n // Only the fields the backend keeps: a static review's typed fields (`kind`) stay in the CLI.\n ...(meta.review\n ? { review: meta.review.slice(0, 40).map(({ severity, what, scene }) => ({ severity, what, ...(scene ? { scene } : {}) })) }\n : {}),\n };\n}\n\n/**\n * The empty `running` record posted BEFORE layer 1 executes. This row is the\n * Convex-side in-flight marker: the reconciliation sweep and cross-sandbox\n * resume both key off it, so unlike the fire-and-forget progress stream it is\n * posted synchronously (with retries) at run start.\n */\nexport function buildInitialRunRecord(runId: string, meta: RunRecordMeta): RunRecordPayload {\n return {\n runId,\n ...meta,\n status: \"running\",\n stats: { totalNodes: 0, cachedNodes: 0, totalCredits: 0, durationMs: 0 },\n nodes: [],\n };\n}\n\nexport function buildFailedRunRecord(runId: string, errorMessage: string, meta: RunRecordMeta): RunRecordPayload {\n return {\n runId,\n ...meta,\n status: \"failed\",\n errorMessage: errorMessage.slice(0, 2000),\n stats: { totalNodes: 0, cachedNodes: 0, totalCredits: 0, durationMs: 0 },\n nodes: [],\n };\n}\n"],"mappings":"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","names":["rec"]}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IDEA_VIDEO_FORMATS,
|
|
3
|
+
figuresIn,
|
|
4
|
+
unsourcedClaims
|
|
5
|
+
} from "./chunk-YULENNA7.js";
|
|
6
|
+
import {
|
|
7
|
+
AD_SPEC_SCHEMA
|
|
8
|
+
} from "./chunk-U6VRBDNQ.js";
|
|
9
|
+
|
|
10
|
+
// src/commands/creatives/make-model.ts
|
|
11
|
+
import { parse, parseDocument, Scalar, visit } from "yaml";
|
|
12
|
+
var REFERENCE_CANDIDATES = 6;
|
|
13
|
+
function isVideoIdea(idea) {
|
|
14
|
+
return IDEA_VIDEO_FORMATS.includes(idea.format);
|
|
15
|
+
}
|
|
16
|
+
var BY_TEMPERATURE = {
|
|
17
|
+
cold: { audienceTemperature: "0_cold", excludeBrandReliant: true },
|
|
18
|
+
warm: { audienceTemperature: "1_warm_engaged,2_hot_visited", excludeBrandReliant: true },
|
|
19
|
+
hot: { audienceTemperature: "3_customer" }
|
|
20
|
+
};
|
|
21
|
+
function referenceSearchFor(idea, temperature, excludeAdvertiser) {
|
|
22
|
+
return {
|
|
23
|
+
query: idea.message,
|
|
24
|
+
scope: "followed-first",
|
|
25
|
+
platform: "meta",
|
|
26
|
+
format: "static",
|
|
27
|
+
formatPattern: idea.format,
|
|
28
|
+
awareness: idea.awareness,
|
|
29
|
+
...BY_TEMPERATURE[temperature],
|
|
30
|
+
...excludeAdvertiser ? { excludeAdvertiser } : {},
|
|
31
|
+
maxPerAdvertiser: 1,
|
|
32
|
+
limit: REFERENCE_CANDIDATES,
|
|
33
|
+
diverse: true
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function referenceSearchesFor(idea, temperature, excludeAdvertiser) {
|
|
37
|
+
const strict = referenceSearchFor(idea, temperature, excludeAdvertiser);
|
|
38
|
+
const { awareness: _awareness, ...anyStage } = strict;
|
|
39
|
+
const { audienceTemperature: _temperature, excludeBrandReliant: _reliant, ...anyViewer } = anyStage;
|
|
40
|
+
const { query: _query, ...winners } = anyStage;
|
|
41
|
+
const { query: _anyQuery, ...anyWinners } = anyViewer;
|
|
42
|
+
return [
|
|
43
|
+
strict,
|
|
44
|
+
anyStage,
|
|
45
|
+
{ ...anyViewer, scope: "all" },
|
|
46
|
+
{ ...winners, sort: "winner" },
|
|
47
|
+
{ ...anyWinners, scope: "all", sort: "winner" }
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
function pooledCandidates(searches, limit) {
|
|
51
|
+
const seen = /* @__PURE__ */ new Set();
|
|
52
|
+
const pooled = [];
|
|
53
|
+
for (const candidate of searches.flat()) {
|
|
54
|
+
if (!candidate.ad_id || seen.has(candidate.ad_id)) continue;
|
|
55
|
+
seen.add(candidate.ad_id);
|
|
56
|
+
pooled.push(candidate);
|
|
57
|
+
}
|
|
58
|
+
return pooled.slice(0, limit);
|
|
59
|
+
}
|
|
60
|
+
function fitsIdea(fit) {
|
|
61
|
+
return fit.verdict !== "reject" && missingElements(fit).length === 0;
|
|
62
|
+
}
|
|
63
|
+
function missingElements(fit) {
|
|
64
|
+
return fit.load_bearing.filter((l) => l.have === "missing" && !l.ours?.trim()).map((l) => l.element);
|
|
65
|
+
}
|
|
66
|
+
function definitionFieldsOf(idea, evidence) {
|
|
67
|
+
return {
|
|
68
|
+
idea: idea.id,
|
|
69
|
+
message: idea.message,
|
|
70
|
+
...evidence !== "explore" ? { evidence } : {},
|
|
71
|
+
angle: idea.angle,
|
|
72
|
+
persona: idea.who,
|
|
73
|
+
awareness: idea.awareness,
|
|
74
|
+
hypothesis: idea.why
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
var FRONTMATTER = /^---\r?\n([\s\S]*?\r?\n)?---/;
|
|
78
|
+
function readsAsText11(text) {
|
|
79
|
+
try {
|
|
80
|
+
return parse(text, { version: "1.1" }) === text;
|
|
81
|
+
} catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function setDefinitionFields(raw, fields) {
|
|
86
|
+
const match = raw.match(FRONTMATTER);
|
|
87
|
+
if (!match) return raw;
|
|
88
|
+
const doc = parseDocument(match[1] ?? "");
|
|
89
|
+
if (doc.errors.length > 0) return raw;
|
|
90
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
91
|
+
if (value === void 0) continue;
|
|
92
|
+
const node = doc.createNode(value);
|
|
93
|
+
visit(node, {
|
|
94
|
+
Scalar(_, scalar) {
|
|
95
|
+
if (typeof scalar.value === "string" && !readsAsText11(scalar.value)) {
|
|
96
|
+
scalar.type = Scalar.QUOTE_DOUBLE;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
doc.set(key, node);
|
|
101
|
+
}
|
|
102
|
+
return `---
|
|
103
|
+
${doc.toString()}---${raw.slice(match[0].length)}`;
|
|
104
|
+
}
|
|
105
|
+
function setSpecMessage(specJson, message) {
|
|
106
|
+
const spec = JSON.parse(specJson);
|
|
107
|
+
return `${JSON.stringify({ ...spec, message }, null, 2)}
|
|
108
|
+
`;
|
|
109
|
+
}
|
|
110
|
+
function withFitConcept(specJson, seeded) {
|
|
111
|
+
const spec = JSON.parse(specJson);
|
|
112
|
+
const held = spec.concept;
|
|
113
|
+
if (held?.reference_ad_id) return specJson;
|
|
114
|
+
return `${JSON.stringify({ ...spec, ...seeded }, null, 2)}
|
|
115
|
+
`;
|
|
116
|
+
}
|
|
117
|
+
function unsourcedCopyLines(specJson, corpus) {
|
|
118
|
+
const spec = JSON.parse(specJson);
|
|
119
|
+
const figures = figuresIn(corpus);
|
|
120
|
+
const lines = Array.isArray(spec.copy) ? spec.copy : [];
|
|
121
|
+
return lines.flatMap((line) => {
|
|
122
|
+
const text = typeof line === "object" && line !== null ? line.text : void 0;
|
|
123
|
+
return typeof text === "string" && unsourcedClaims(text, figures).length > 0 ? [text] : [];
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
var PHOTO_FORMATS = /photo|lifestyle|before_after|ugc|product|selfie|street/;
|
|
127
|
+
function ideaSpec(idea, who) {
|
|
128
|
+
const container = idea.format.replace(/_/g, " ");
|
|
129
|
+
return {
|
|
130
|
+
schema: AD_SPEC_SCHEMA,
|
|
131
|
+
viewer: { who },
|
|
132
|
+
message: idea.message,
|
|
133
|
+
copy: [{ text: "[TODO: the headline, in the customer's words]", lettering: "designed", role: "headline" }],
|
|
134
|
+
scene: {
|
|
135
|
+
description: `[TODO: what the viewer sees, as a ${container}, that shows: ${idea.message}]`,
|
|
136
|
+
look: PHOTO_FORMATS.test(idea.format) ? "photo" : "designed"
|
|
137
|
+
},
|
|
138
|
+
colors: [],
|
|
139
|
+
references: [],
|
|
140
|
+
logo: false,
|
|
141
|
+
third_party_brands: [],
|
|
142
|
+
scene_text: [],
|
|
143
|
+
mechanism: []
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export {
|
|
148
|
+
isVideoIdea,
|
|
149
|
+
referenceSearchesFor,
|
|
150
|
+
pooledCandidates,
|
|
151
|
+
fitsIdea,
|
|
152
|
+
missingElements,
|
|
153
|
+
definitionFieldsOf,
|
|
154
|
+
setDefinitionFields,
|
|
155
|
+
setSpecMessage,
|
|
156
|
+
withFitConcept,
|
|
157
|
+
unsourcedCopyLines,
|
|
158
|
+
ideaSpec
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=chunk-S4LZ7KTG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/creatives/make-model.ts"],"sourcesContent":["/**\n * The rules `baker creatives make` applies to turn an idea into a creative: which reference to\n * look for, which one fits, and what the creative records about the idea it carries. Pure.\n */\nimport { parse, parseDocument, Scalar, visit } from \"yaml\";\nimport { AD_SPEC_SCHEMA, type AdSpec } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport type { ViewerTemperature } from \"../../viewer-profile.ts\";\nimport type { FitAnswer } from \"../winning-ads/fit.ts\";\nimport type { WinningAdsSearchArgs } from \"../winning-ads/search.ts\";\nimport { type EvidenceLevel, figuresIn, IDEA_VIDEO_FORMATS, type Idea, unsourcedClaims } from \"./ideas-model.ts\";\n\nexport const REFERENCE_CANDIDATES = 6;\n\n/** Whether the idea is a video, built from beats, rather than a static from a reference. */\nexport function isVideoIdea(idea: Pick<Idea, \"format\">): boolean {\n return (IDEA_VIDEO_FORMATS as readonly string[]).includes(idea.format);\n}\n\n/** Who a reference was made for, by our viewer: a stranger's ad never leans on its own brand. */\nconst BY_TEMPERATURE: Record<ViewerTemperature, { audienceTemperature: string; excludeBrandReliant?: true }> = {\n cold: { audienceTemperature: \"0_cold\", excludeBrandReliant: true },\n warm: { audienceTemperature: \"1_warm_engaged,2_hot_visited\", excludeBrandReliant: true },\n hot: { audienceTemperature: \"3_customer\" },\n};\n\n/** The library search for a static idea's reference: its container, made for our viewer. */\nexport function referenceSearchFor(\n idea: Idea,\n temperature: ViewerTemperature,\n excludeAdvertiser?: string,\n): WinningAdsSearchArgs {\n return {\n query: idea.message,\n scope: \"followed-first\",\n platform: \"meta\",\n format: \"static\",\n formatPattern: idea.format,\n awareness: idea.awareness,\n ...BY_TEMPERATURE[temperature],\n ...(excludeAdvertiser ? { excludeAdvertiser } : {}),\n maxPerAdvertiser: 1,\n limit: REFERENCE_CANDIDATES,\n diverse: true,\n };\n}\n\n/**\n * The searches whose candidates are tried, best first: the idea's format always holds, since the\n * format is part of the idea. First the idea's message (awareness, then who the ad was made for,\n * then the company's own market loosened in turn), then the container's proven winners with no\n * query, for our viewer and then for anyone. Prod, Oct 2026: the library's judge scores an ad\n * against the query, so a customer's sentence about one product matched no ad of another category\n * and 13 of 15 ideas found nothing, while every container held proven winners whose move transfers.\n */\nexport function referenceSearchesFor(\n idea: Idea,\n temperature: ViewerTemperature,\n excludeAdvertiser?: string,\n): WinningAdsSearchArgs[] {\n const strict = referenceSearchFor(idea, temperature, excludeAdvertiser);\n const { awareness: _awareness, ...anyStage } = strict;\n const { audienceTemperature: _temperature, excludeBrandReliant: _reliant, ...anyViewer } = anyStage;\n const { query: _query, ...winners } = anyStage;\n const { query: _anyQuery, ...anyWinners } = anyViewer;\n return [\n strict,\n anyStage,\n { ...anyViewer, scope: \"all\" },\n { ...winners, sort: \"winner\" },\n { ...anyWinners, scope: \"all\", sort: \"winner\" },\n ];\n}\n\n/** Every search's candidates in one list, the better search's first, each ad once, at most `limit`. Pure. */\nexport function pooledCandidates<T extends { ad_id?: string | null }>(searches: readonly T[][], limit: number): T[] {\n const seen = new Set<string>();\n const pooled: T[] = [];\n for (const candidate of searches.flat()) {\n if (!candidate.ad_id || seen.has(candidate.ad_id)) continue;\n seen.add(candidate.ad_id);\n pooled.push(candidate);\n }\n return pooled.slice(0, limit);\n}\n\n/** A reference fits when what it wins on is something we can supply. */\nexport function fitsIdea(fit: Pick<FitAnswer, \"verdict\" | \"load_bearing\">): boolean {\n return fit.verdict !== \"reject\" && missingElements(fit).length === 0;\n}\n\n/** The load-bearing elements a reference wins on that we have nothing for. Pure. */\nexport function missingElements(fit: Pick<FitAnswer, \"load_bearing\">): string[] {\n return fit.load_bearing.filter((l) => l.have === \"missing\" && !l.ours?.trim()).map((l) => l.element);\n}\n\nexport type DefinitionStrategyFields = {\n idea: string;\n message: string;\n evidence?: EvidenceLevel;\n angle: string;\n persona: string;\n awareness: string;\n hypothesis: string;\n};\n\n/** What a creative records about the idea it executes. */\nexport function definitionFieldsOf(idea: Idea, evidence: EvidenceLevel | \"explore\"): DefinitionStrategyFields {\n return {\n idea: idea.id,\n message: idea.message,\n ...(evidence !== \"explore\" ? { evidence } : {}),\n angle: idea.angle,\n persona: idea.who,\n awareness: idea.awareness,\n hypothesis: idea.why,\n };\n}\n\nconst FRONTMATTER = /^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/;\n\n/** Whether a bare string reads back as the same text under YAML 1.1. */\nfunction readsAsText11(text: string): boolean {\n try {\n return parse(text, { version: \"1.1\" }) === text;\n } catch {\n return false;\n }\n}\n\n/** Set fields in a markdown file's frontmatter, keeping every other field and the body. */\nexport function setDefinitionFields(raw: string, fields: Record<string, unknown>): string {\n const match = raw.match(FRONTMATTER);\n if (!match) return raw;\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return raw;\n for (const [key, value] of Object.entries(fields)) {\n if (value === undefined) continue;\n const node = doc.createNode(value);\n // The site reads frontmatter as YAML 1.1, where a bare 2026-10-04 is a date, not text.\n visit(node, {\n Scalar(_, scalar) {\n if (typeof scalar.value === \"string\" && !readsAsText11(scalar.value)) {\n scalar.type = Scalar.QUOTE_DOUBLE;\n }\n },\n });\n doc.set(key, node);\n }\n return `---\\n${doc.toString()}---${raw.slice(match[0].length)}`;\n}\n\n/** The ad spec with the idea's message as the one thing it tells the viewer. */\nexport function setSpecMessage(specJson: string, message: string): string {\n const spec = JSON.parse(specJson) as Record<string, unknown>;\n return `${JSON.stringify({ ...spec, message }, null, 2)}\\n`;\n}\n\n/**\n * The ad spec with the concept the reference's fit read (`conceptFromFit`): a build started before\n * the fit answered has none, or only the one the scaffold drafted from its describe, which names no\n * reference and nothing of what we have; without the fit's, the render never sees the reference at\n * the level that won. A concept a fit already seeded (it names its reference) stays. Pure.\n */\nexport function withFitConcept(specJson: string, seeded: Record<string, unknown>): string {\n const spec = JSON.parse(specJson) as Record<string, unknown>;\n const held = spec.concept as { reference_ad_id?: unknown } | undefined;\n if (held?.reference_ad_id) return specJson;\n return `${JSON.stringify({ ...spec, ...seeded }, null, 2)}\\n`;\n}\n\n/**\n * The copy lines the scaffold drafted that claim a figure the company never wrote: a draft written\n * beside a competitor's ad can carry the competitor's promise. `corpus` is what the company wrote.\n */\nexport function unsourcedCopyLines(specJson: string, corpus: string): string[] {\n const spec = JSON.parse(specJson) as { copy?: unknown };\n const figures = figuresIn(corpus);\n const lines = Array.isArray(spec.copy) ? spec.copy : [];\n return lines.flatMap((line) => {\n const text = typeof line === \"object\" && line !== null ? (line as { text?: unknown }).text : undefined;\n return typeof text === \"string\" && unsourcedClaims(text, figures).length > 0 ? [text] : [];\n });\n}\n\n/** Containers shown as a photograph; every other container is a designed graphic or a screen. */\nconst PHOTO_FORMATS = /photo|lifestyle|before_after|ugc|product|selfie|street/;\n\n/**\n * The ad spec an idea starts from when no proven ad fits it: the message and who it is for are\n * the idea's; the scene and the copy are placeholders the agent writes before anything renders\n * (`canvas run` refuses a placeholder). Pure.\n */\nexport function ideaSpec(idea: Idea, who: string): AdSpec {\n const container = idea.format.replace(/_/g, \" \");\n return {\n schema: AD_SPEC_SCHEMA,\n viewer: { who },\n message: idea.message,\n copy: [{ text: \"[TODO: the headline, in the customer's words]\", lettering: \"designed\", role: \"headline\" }],\n scene: {\n description: `[TODO: what the viewer sees, as a ${container}, that shows: ${idea.message}]`,\n look: PHOTO_FORMATS.test(idea.format) ? \"photo\" : \"designed\",\n },\n colors: [],\n references: [],\n logo: false,\n third_party_brands: [],\n scene_text: [],\n mechanism: [],\n };\n}\n"],"mappings":";;;;;;;;;;AAIA,SAAS,OAAO,eAAe,QAAQ,aAAa;AAO7C,IAAM,uBAAuB;AAG7B,SAAS,YAAY,MAAqC;AAC/D,SAAQ,mBAAyC,SAAS,KAAK,MAAM;AACvE;AAGA,IAAM,iBAAyG;AAAA,EAC7G,MAAM,EAAE,qBAAqB,UAAU,qBAAqB,KAAK;AAAA,EACjE,MAAM,EAAE,qBAAqB,gCAAgC,qBAAqB,KAAK;AAAA,EACvF,KAAK,EAAE,qBAAqB,aAAa;AAC3C;AAGO,SAAS,mBACd,MACA,aACA,mBACsB;AACtB,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,eAAe,KAAK;AAAA,IACpB,WAAW,KAAK;AAAA,IAChB,GAAG,eAAe,WAAW;AAAA,IAC7B,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,IACjD,kBAAkB;AAAA,IAClB,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AACF;AAUO,SAAS,qBACd,MACA,aACA,mBACwB;AACxB,QAAM,SAAS,mBAAmB,MAAM,aAAa,iBAAiB;AACtE,QAAM,EAAE,WAAW,YAAY,GAAG,SAAS,IAAI;AAC/C,QAAM,EAAE,qBAAqB,cAAc,qBAAqB,UAAU,GAAG,UAAU,IAAI;AAC3F,QAAM,EAAE,OAAO,QAAQ,GAAG,QAAQ,IAAI;AACtC,QAAM,EAAE,OAAO,WAAW,GAAG,WAAW,IAAI;AAC5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,EAAE,GAAG,WAAW,OAAO,MAAM;AAAA,IAC7B,EAAE,GAAG,SAAS,MAAM,SAAS;AAAA,IAC7B,EAAE,GAAG,YAAY,OAAO,OAAO,MAAM,SAAS;AAAA,EAChD;AACF;AAGO,SAAS,iBAAsD,UAA0B,OAAoB;AAClH,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAAc,CAAC;AACrB,aAAW,aAAa,SAAS,KAAK,GAAG;AACvC,QAAI,CAAC,UAAU,SAAS,KAAK,IAAI,UAAU,KAAK,EAAG;AACnD,SAAK,IAAI,UAAU,KAAK;AACxB,WAAO,KAAK,SAAS;AAAA,EACvB;AACA,SAAO,OAAO,MAAM,GAAG,KAAK;AAC9B;AAGO,SAAS,SAAS,KAA2D;AAClF,SAAO,IAAI,YAAY,YAAY,gBAAgB,GAAG,EAAE,WAAW;AACrE;AAGO,SAAS,gBAAgB,KAAgD;AAC9E,SAAO,IAAI,aAAa,OAAO,CAAC,MAAM,EAAE,SAAS,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO;AACrG;AAaO,SAAS,mBAAmB,MAAY,UAA+D;AAC5G,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,SAAS,KAAK;AAAA,IACd,GAAI,aAAa,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,OAAO,KAAK;AAAA,IACZ,SAAS,KAAK;AAAA,IACd,WAAW,KAAK;AAAA,IAChB,YAAY,KAAK;AAAA,EACnB;AACF;AAEA,IAAM,cAAc;AAGpB,SAAS,cAAc,MAAuB;AAC5C,MAAI;AACF,WAAO,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC,MAAM;AAAA,EAC7C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,oBAAoB,KAAa,QAAyC;AACxF,QAAM,QAAQ,IAAI,MAAM,WAAW;AACnC,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,cAAc,MAAM,CAAC,KAAK,EAAE;AACxC,MAAI,IAAI,OAAO,SAAS,EAAG,QAAO;AAClC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,UAAU,OAAW;AACzB,UAAM,OAAO,IAAI,WAAW,KAAK;AAEjC,UAAM,MAAM;AAAA,MACV,OAAO,GAAG,QAAQ;AAChB,YAAI,OAAO,OAAO,UAAU,YAAY,CAAC,cAAc,OAAO,KAAK,GAAG;AACpE,iBAAO,OAAO,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,IAAI,KAAK,IAAI;AAAA,EACnB;AACA,SAAO;AAAA,EAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,MAAM,CAAC,EAAE,MAAM,CAAC;AAC/D;AAGO,SAAS,eAAe,UAAkB,SAAyB;AACxE,QAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,SAAO,GAAG,KAAK,UAAU,EAAE,GAAG,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC;AAAA;AACzD;AAQO,SAAS,eAAe,UAAkB,QAAyC;AACxF,QAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,QAAM,OAAO,KAAK;AAClB,MAAI,MAAM,gBAAiB,QAAO;AAClC,SAAO,GAAG,KAAK,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAAA;AAC3D;AAMO,SAAS,mBAAmB,UAAkB,QAA0B;AAC7E,QAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,QAAM,UAAU,UAAU,MAAM;AAChC,QAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC;AACtD,SAAO,MAAM,QAAQ,CAAC,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,YAAY,SAAS,OAAQ,KAA4B,OAAO;AAC7F,WAAO,OAAO,SAAS,YAAY,gBAAgB,MAAM,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,EAC3F,CAAC;AACH;AAGA,IAAM,gBAAgB;AAOf,SAAS,SAAS,MAAY,KAAqB;AACxD,QAAM,YAAY,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC/C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ,EAAE,IAAI;AAAA,IACd,SAAS,KAAK;AAAA,IACd,MAAM,CAAC,EAAE,MAAM,iDAAiD,WAAW,YAAY,MAAM,WAAW,CAAC;AAAA,IACzG,OAAO;AAAA,MACL,aAAa,qCAAqC,SAAS,iBAAiB,KAAK,OAAO;AAAA,MACxF,MAAM,cAAc,KAAK,KAAK,MAAM,IAAI,UAAU;AAAA,IACpD;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,YAAY,CAAC;AAAA,IACb,MAAM;AAAA,IACN,oBAAoB,CAAC;AAAA,IACrB,YAAY,CAAC;AAAA,IACb,WAAW,CAAC;AAAA,EACd;AACF;","names":[]}
|