@koda-sl/baker-cli 0.512.0 → 0.514.0-dev.555f7007e
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 +20 -3
- package/dist/account-QX4G4BJ7.js +82 -0
- package/dist/account-QX4G4BJ7.js.map +1 -0
- package/dist/account-UFYZS3K6.js +82 -0
- package/dist/account-UFYZS3K6.js.map +1 -0
- package/dist/account-assets-J5Z4URLQ.js +290 -0
- package/dist/account-level-4SBYYHRS.js +611 -0
- package/dist/account-level-4SBYYHRS.js.map +1 -0
- package/dist/account-reads-FOEVPWDP.js +219 -0
- package/dist/account-users-UTIF7MIT.js +64 -0
- package/dist/account-users-UTIF7MIT.js.map +1 -0
- package/dist/account-writes-QAQXRIEY.js +68 -0
- package/dist/account-writes-QAQXRIEY.js.map +1 -0
- package/dist/accounts-JK3OAS5U.js +701 -0
- package/dist/accounts-JK3OAS5U.js.map +1 -0
- package/dist/accounts-OE33CKWD.js +80 -0
- package/dist/accounts-OE33CKWD.js.map +1 -0
- package/dist/actions-QZDSLFFK.js +55 -0
- package/dist/activecampaign-U6TKRR45.js +938 -0
- package/dist/activecampaign-U6TKRR45.js.map +1 -0
- package/dist/ad-group-writes-XY5JYTKT.js +172 -0
- package/dist/ad-group-writes-XY5JYTKT.js.map +1 -0
- package/dist/ad-groups-YEO5ZS5U.js +70 -0
- package/dist/ad-groups-YEO5ZS5U.js.map +1 -0
- package/dist/ad-writes-XRCPK4SP.js +176 -0
- package/dist/ad-writes-XRCPK4SP.js.map +1 -0
- package/dist/add-2EF7S4NK.js +305 -0
- package/dist/add-2EF7S4NK.js.map +1 -0
- package/dist/add-YCJ6RXPG.js +107 -0
- package/dist/add-YCJ6RXPG.js.map +1 -0
- package/dist/ads-AYJAYLFR.js +48 -0
- package/dist/ads-H7H7H2CM.js +79 -0
- package/dist/ads-H7H7H2CM.js.map +1 -0
- package/dist/ads-MAOI7S6V.js +115 -0
- package/dist/adsets-QRKICEFD.js +182 -0
- package/dist/advertisers-JLSU3G35.js +123 -0
- package/dist/advertisers-JLSU3G35.js.map +1 -0
- package/dist/analytics-ADIWEM6G.js +2437 -0
- package/dist/analytics-ADIWEM6G.js.map +1 -0
- package/dist/analytics-XB6FRNVJ.js +447 -0
- package/dist/analytics-XB6FRNVJ.js.map +1 -0
- package/dist/animate-HRWFVE2N.js +480 -0
- package/dist/asset-writes-JLVUAVUZ.js +50 -0
- package/dist/assign-IWZ2OPFL.js +80 -0
- package/dist/assign-IWZ2OPFL.js.map +1 -0
- package/dist/audience-size-P5L6MZ4C.js +76 -0
- package/dist/audience-size-P5L6MZ4C.js.map +1 -0
- package/dist/audience-writes-CDKQB3SM.js +327 -0
- package/dist/audience-writes-CDKQB3SM.js.map +1 -0
- package/dist/audiences-CDDI5HR5.js +86 -0
- package/dist/audiences-XKERWKKE.js +280 -0
- package/dist/audiences-XKERWKKE.js.map +1 -0
- package/dist/audit-SEADLC6F.js +154 -0
- package/dist/audit-SEADLC6F.js.map +1 -0
- package/dist/autocomplete-AJQBJS5R.js +114 -0
- package/dist/autocomplete-AJQBJS5R.js.map +1 -0
- package/dist/avatars-4HCGWBOL.js +38 -0
- package/dist/bid-pricing-NWSUO3VM.js +103 -0
- package/dist/bid-pricing-NWSUO3VM.js.map +1 -0
- package/dist/brand-C6OB6Q4U.js +22 -0
- package/dist/brief-LCWWQ4OC.js +543 -0
- package/dist/brief-LCWWQ4OC.js.map +1 -0
- package/dist/campaign-groups-PH64UXZJ.js +99 -0
- package/dist/campaign-groups-PH64UXZJ.js.map +1 -0
- package/dist/campaign-writes-BN3EGDK5.js +168 -0
- package/dist/campaign-writes-BN3EGDK5.js.map +1 -0
- package/dist/campaign-writes-CLV5ZSUK.js +176 -0
- package/dist/campaign-writes-CLV5ZSUK.js.map +1 -0
- package/dist/campaigns-5XRY27JZ.js +78 -0
- package/dist/campaigns-5XRY27JZ.js.map +1 -0
- package/dist/campaigns-HES5MDUG.js +130 -0
- package/dist/campaigns-JF4TYYUP.js +113 -0
- package/dist/campaigns-JF4TYYUP.js.map +1 -0
- package/dist/campaigns-ZYU4BXDP.js +111 -0
- package/dist/canvas-AI34UBGU.js +46 -0
- package/dist/capabilities-TRHAPTUU.js +147 -0
- package/dist/capabilities-TRHAPTUU.js.map +1 -0
- package/dist/catalog-ZY3MFT55.js +65 -0
- package/dist/catalogs-6XLBWAUS.js +130 -0
- package/dist/catalogs-6XLBWAUS.js.map +1 -0
- package/dist/catalogs-TGLSJEK5.js +781 -0
- package/dist/catalogs-TGLSJEK5.js.map +1 -0
- package/dist/changes-OOUVQDBY.js +135 -0
- package/dist/chatgpt-NAXIFWXV.js +47 -0
- package/dist/chats-I5RHBRS5.js +279 -0
- package/dist/chats-I5RHBRS5.js.map +1 -0
- package/dist/check-3E64VBUE.js +107 -0
- package/dist/check-3E64VBUE.js.map +1 -0
- package/dist/chunk-3CHYJYSS.js +319 -0
- package/dist/chunk-3G3GC5N4.js +429 -0
- package/dist/chunk-3M45PYU7.js +274 -0
- package/dist/chunk-3QHXF3QI.js +23 -0
- package/dist/chunk-3XPHUMLJ.js +3868 -0
- package/dist/chunk-45EERHDB.js +783 -0
- package/dist/chunk-4FGTANFK.js +387 -0
- package/dist/chunk-4IHWT7PH.js +167 -0
- package/dist/chunk-4LF4AYPT.js +846 -0
- package/dist/chunk-4UQRXKYJ.js +219 -0
- package/dist/chunk-5JJD33Y2.js +455 -0
- package/dist/chunk-5K4QYYOJ.js +831 -0
- package/dist/chunk-5LJ6E4YU.js +163 -0
- package/dist/chunk-5T73MMBL.js +275 -0
- package/dist/chunk-64MAHLTK.js +363 -0
- package/dist/chunk-6OIKNJ7G.js +26 -0
- package/dist/chunk-6ZFSDYWV.js +131 -0
- package/dist/chunk-7BUIOP36.js +287 -0
- package/dist/chunk-7I6ZVBLM.js +358 -0
- package/dist/chunk-7I6ZVBLM.js.map +1 -0
- package/dist/chunk-AN4OEQXE.js +122 -0
- package/dist/chunk-AULSX5ZA.js +5368 -0
- package/dist/chunk-AVYUFJQQ.js +46 -0
- package/dist/chunk-B4YF7VQF.js +97 -0
- package/dist/chunk-BDOYNGUL.js +98 -0
- package/dist/chunk-BJOK7QD4.js +207 -0
- package/dist/chunk-CMCGFSUS.js +197 -0
- package/dist/chunk-DMJUIUAL.js +676 -0
- package/dist/chunk-DUCUOZLS.js +225 -0
- package/dist/chunk-EW7JSTRZ.js +24026 -0
- package/dist/chunk-EW7JSTRZ.js.map +1 -0
- package/dist/chunk-F3CZFUXZ.js +3187 -0
- package/dist/chunk-F3CZFUXZ.js.map +1 -0
- package/dist/chunk-FJZYOVSW.js +843 -0
- package/dist/chunk-FKP4ECJY.js +19 -0
- package/dist/chunk-G4FG5EQO.js +110 -0
- package/dist/chunk-G4FG5EQO.js.map +1 -0
- package/dist/chunk-GAYRBIEF.js +712 -0
- package/dist/chunk-GAYRBIEF.js.map +1 -0
- package/dist/chunk-GNMEOU46.js +8954 -0
- package/dist/chunk-GYKYXWUQ.js +156 -0
- package/dist/chunk-GYPLRU4Y.js +297 -0
- package/dist/chunk-I43ZEWJQ.js +285 -0
- package/dist/chunk-IZABTTW5.js +228 -0
- package/dist/chunk-JOE42ZW6.js +2984 -0
- package/dist/chunk-JOE42ZW6.js.map +1 -0
- package/dist/chunk-K7IE6UYV.js +1646 -0
- package/dist/chunk-KH5YHHJV.js +604 -0
- package/dist/chunk-KMY7AD3N.js +51 -0
- package/dist/chunk-KPCHWDJM.js +8914 -0
- package/dist/chunk-KTZCLJ2D.js +148 -0
- package/dist/chunk-MKUA54QE.js +638 -0
- package/dist/chunk-MTV2RSGY.js +63 -0
- package/dist/chunk-MUS2UTWU.js +4254 -0
- package/dist/chunk-MUS2UTWU.js.map +1 -0
- package/dist/chunk-N2QX57K3.js +392 -0
- package/dist/chunk-NB2FU6EZ.js +179 -0
- package/dist/chunk-NEYWS2DQ.js +479 -0
- package/dist/chunk-NKQWDEB7.js +115 -0
- package/dist/chunk-NKQWDEB7.js.map +1 -0
- package/dist/chunk-NWF2LRKO.js +188 -0
- package/dist/chunk-NZ34KM46.js +7211 -0
- package/dist/chunk-NZ34KM46.js.map +1 -0
- package/dist/chunk-OTC6UMJ2.js +191 -0
- package/dist/chunk-OUY2IAWL.js +224 -0
- package/dist/chunk-PJXNCRMR.js +344 -0
- package/dist/chunk-PYQ3GF7R.js +91 -0
- package/dist/chunk-Q3EIVZAR.js +170 -0
- package/dist/chunk-Q3GSVLE5.js +4274 -0
- package/dist/chunk-Q3GSVLE5.js.map +1 -0
- package/dist/chunk-QDQZ62FL.js +207 -0
- package/dist/chunk-QHZE62GP.js +1919 -0
- package/dist/chunk-RGR6TSTJ.js +103 -0
- package/dist/chunk-SAAXU7QR.js +203 -0
- package/dist/chunk-SHTKLRI6.js +66 -0
- package/dist/chunk-SIKCVWM3.js +76 -0
- package/dist/chunk-SOPVIIUW.js +68 -0
- package/dist/chunk-SOPVIIUW.js.map +1 -0
- package/dist/chunk-SSXG53CZ.js +89 -0
- package/dist/chunk-TBWAM577.js +547 -0
- package/dist/chunk-TGPGQTZA.js +169 -0
- package/dist/chunk-UMIX2BMM.js +1518 -0
- package/dist/chunk-URMAEVZO.js +150 -0
- package/dist/chunk-VBO3ZVUU.js +61 -0
- package/dist/chunk-VFLYMHTO.js +592 -0
- package/dist/chunk-VGYIVXIZ.js +249 -0
- package/dist/chunk-VIB7R533.js +57 -0
- package/dist/chunk-WLESMH4J.js +45 -0
- package/dist/chunk-WVWLPXBO.js +910 -0
- package/dist/chunk-XEH5XAP6.js +494 -0
- package/dist/chunk-XEOKVL4E.js +142 -0
- package/dist/chunk-XOGQJYXH.js +64 -0
- package/dist/chunk-XOQNM7I4.js +396 -0
- package/dist/chunk-XOQNM7I4.js.map +1 -0
- package/dist/chunk-XUXRA7IB.js +942 -0
- package/dist/claim-FIK2YTLM.js +200 -0
- package/dist/claim-FIK2YTLM.js.map +1 -0
- package/dist/cli.js +34 -33
- package/dist/cli.js.map +1 -1
- package/dist/companies-KMMV6EJW.js +198 -0
- package/dist/companies-KMMV6EJW.js.map +1 -0
- package/dist/company-B54URPJG.js +308 -0
- package/dist/company-B54URPJG.js.map +1 -0
- package/dist/complete-PPCWEXS3.js +84 -0
- package/dist/complete-PPCWEXS3.js.map +1 -0
- package/dist/connect-IAXSZPGA.js +45 -0
- package/dist/conversation-KHTZBGX2.js +96 -0
- package/dist/conversation-KHTZBGX2.js.map +1 -0
- package/dist/conversion-report-U66HW6JM.js +127 -0
- package/dist/conversion-report-U66HW6JM.js.map +1 -0
- package/dist/conversion-upload-command-IHFKVX2M.js +439 -0
- package/dist/conversion-writes-RSGDOAET.js +122 -0
- package/dist/conversion-writes-RSGDOAET.js.map +1 -0
- package/dist/conversions-BVOL43W4.js +78 -0
- package/dist/conversions-BVOL43W4.js.map +1 -0
- package/dist/conversions-SUMZAV2T.js +140 -0
- package/dist/conversions-SUMZAV2T.js.map +1 -0
- package/dist/copy-writes-CIHIFLY6.js +170 -0
- package/dist/copy-writes-CIHIFLY6.js.map +1 -0
- package/dist/create-732HQL3C.js +210 -0
- package/dist/create-732HQL3C.js.map +1 -0
- package/dist/create-TFR6R2KF.js +239 -0
- package/dist/create-TFR6R2KF.js.map +1 -0
- package/dist/create-UC57ULRL.js +62 -0
- package/dist/create-UC57ULRL.js.map +1 -0
- package/dist/create-UL2OYXOA.js +135 -0
- package/dist/create-UL2OYXOA.js.map +1 -0
- package/dist/creatives-BB6S2OF6.js +89 -0
- package/dist/creatives-BZEVJ6ER.js +58 -0
- package/dist/creatives-FU3YELGU.js +223 -0
- package/dist/creatives-FU3YELGU.js.map +1 -0
- package/dist/credentials-AYV5YQE4.js +290 -0
- package/dist/credentials-AYV5YQE4.js.map +1 -0
- package/dist/critique-FKIJB72I.js +1451 -0
- package/dist/critique-FKIJB72I.js.map +1 -0
- package/dist/critique-IQYNDXCN.js +232 -0
- package/dist/critique-IQYNDXCN.js.map +1 -0
- package/dist/crm-ILQMNJPX.js +323 -0
- package/dist/crm-ILQMNJPX.js.map +1 -0
- package/dist/crm-MQQRBITZ.js +227 -0
- package/dist/crm-MQQRBITZ.js.map +1 -0
- package/dist/currency-CGKO5GKH.js +88 -0
- package/dist/custom-conversions-HAGG72LF.js +128 -0
- package/dist/customers-NKKU6S7G.js +59 -0
- package/dist/delete-2TCCNRMH.js +57 -0
- package/dist/delete-2TCCNRMH.js.map +1 -0
- package/dist/delete-HCZTISBT.js +69 -0
- package/dist/delete-HCZTISBT.js.map +1 -0
- package/dist/delete-UIKB5ZXS.js +67 -0
- package/dist/delete-UIKB5ZXS.js.map +1 -0
- package/dist/demographics-ABZODD45.js +141 -0
- package/dist/demographics-ABZODD45.js.map +1 -0
- package/dist/discard-V3K5PZ4W.js +69 -0
- package/dist/discard-V3K5PZ4W.js.map +1 -0
- package/dist/discover-VM3O7CQM.js +172 -0
- package/dist/domain-A66DHOTQ.js +101 -0
- package/dist/domain-A66DHOTQ.js.map +1 -0
- package/dist/download-LSAZD5JO.js +172 -0
- package/dist/download-LSAZD5JO.js.map +1 -0
- package/dist/draft-5UUJC675.js +335 -0
- package/dist/draft-5UUJC675.js.map +1 -0
- package/dist/draft-BATA5CVI.js +283 -0
- package/dist/draft-BATA5CVI.js.map +1 -0
- package/dist/draft-CRDBU6LF.js +308 -0
- package/dist/draft-P7IDMXWR.js +310 -0
- package/dist/draft-P7IDMXWR.js.map +1 -0
- package/dist/draft-YBNL4ZZA.js +220 -0
- package/dist/draft-YBNL4ZZA.js.map +1 -0
- package/dist/engine/index.js +7 -7
- package/dist/experiments-MLLTHMMS.js +236 -0
- package/dist/experiments-MLLTHMMS.js.map +1 -0
- package/dist/facets-KSHR3MBE.js +117 -0
- package/dist/facets-KSHR3MBE.js.map +1 -0
- package/dist/feedback-4GCPXZSI.js +111 -0
- package/dist/feedback-4GCPXZSI.js.map +1 -0
- package/dist/feedback-record-VEFHUIUJ.js +265 -0
- package/dist/feedback-record-VEFHUIUJ.js.map +1 -0
- package/dist/fetch-42QL56JC.js +179 -0
- package/dist/fetch-42QL56JC.js.map +1 -0
- package/dist/fit-Q5GRVF2O.js +65 -0
- package/dist/flows-M3WBZQET.js +250 -0
- package/dist/flows-M3WBZQET.js.map +1 -0
- package/dist/fonts-GD4YRXQU.js +39 -0
- package/dist/forecast-HT46MFL4.js +121 -0
- package/dist/forecast-HT46MFL4.js.map +1 -0
- package/dist/forecast-ONVS2QAI.js +169 -0
- package/dist/funnel-76BAD64Q.js +397 -0
- package/dist/funnel-76BAD64Q.js.map +1 -0
- package/dist/generate-VBEY3N3L.js +263 -0
- package/dist/get-4KFAO475.js +82 -0
- package/dist/get-4KFAO475.js.map +1 -0
- package/dist/get-QV5NIADE.js +59 -0
- package/dist/get-QV5NIADE.js.map +1 -0
- package/dist/google-7EZP7I6J.js +3267 -0
- package/dist/google-ads-J7WHTJO4.js +198 -0
- package/dist/google-ads-J7WHTJO4.js.map +1 -0
- package/dist/history-EULKWQUS.js +136 -0
- package/dist/history-EULKWQUS.js.map +1 -0
- package/dist/history-FEBJHFHJ.js +69 -0
- package/dist/history-FEBJHFHJ.js.map +1 -0
- package/dist/history-RDVV7KBN.js +102 -0
- package/dist/history-RDVV7KBN.js.map +1 -0
- package/dist/hubspot-A3RQNMYN.js +782 -0
- package/dist/hubspot-A3RQNMYN.js.map +1 -0
- package/dist/ideas-WX7EBPSF.js +45 -0
- package/dist/images-4AXF4LAC.js +92 -0
- package/dist/ingest-AM5YDTRH.js +110 -0
- package/dist/ingest-AM5YDTRH.js.map +1 -0
- package/dist/ingest-C3M4GUO6.js +26 -0
- package/dist/insights-UTCMSWSC.js +132 -0
- package/dist/insights-UTCMSWSC.js.map +1 -0
- package/dist/insights-XZL2EM53.js +439 -0
- package/dist/insights-XZL2EM53.js.map +1 -0
- package/dist/inspect-DWCLRZGR.js +192 -0
- package/dist/inspect-DWCLRZGR.js.map +1 -0
- package/dist/instant-experiences-RM4MLJTL.js +260 -0
- package/dist/instant-experiences-RM4MLJTL.js.map +1 -0
- package/dist/intent-ZMYMFGB4.js +95 -0
- package/dist/keyword-gap-XSJO2R77.js +130 -0
- package/dist/keyword-metrics-M46FCTAS.js +200 -0
- package/dist/keyword-metrics-M46FCTAS.js.map +1 -0
- package/dist/keywords-for-site-XNSLX7EA.js +131 -0
- package/dist/keywords-for-site-XNSLX7EA.js.map +1 -0
- package/dist/landing-MUNYZQNA.js +28 -0
- package/dist/languages-DIQ3OG3E.js +40 -0
- package/dist/lead-routes-XBO2GOBL.js +608 -0
- package/dist/lead-routes-XBO2GOBL.js.map +1 -0
- package/dist/leads-LAATTW5G.js +115 -0
- package/dist/leads-LAATTW5G.js.map +1 -0
- package/dist/leads-ULYHTG22.js +540 -0
- package/dist/leads-ULYHTG22.js.map +1 -0
- package/dist/learn-3GLY4G3H.js +207 -0
- package/dist/learn-3GLY4G3H.js.map +1 -0
- package/dist/line-item-writes-XJTTA3X5.js +211 -0
- package/dist/line-item-writes-XJTTA3X5.js.map +1 -0
- package/dist/line-items-JR25T2C5.js +107 -0
- package/dist/link-7DSLIF3I.js +67 -0
- package/dist/link-7DSLIF3I.js.map +1 -0
- package/dist/linkedin-W5BJ6HEH.js +1316 -0
- package/dist/linkedin-W5BJ6HEH.js.map +1 -0
- package/dist/linkedin-person-2ZYSOHYR.js +139 -0
- package/dist/linkedin-person-2ZYSOHYR.js.map +1 -0
- package/dist/list-3653DIYB.js +67 -0
- package/dist/list-3653DIYB.js.map +1 -0
- package/dist/list-G66HVYCR.js +306 -0
- package/dist/list-G66HVYCR.js.map +1 -0
- package/dist/list-Z4M53MS5.js +154 -0
- package/dist/list-Z4M53MS5.js.map +1 -0
- package/dist/locations-HTVYJSDJ.js +40 -0
- package/dist/locations-M2B5XDU4.js +69 -0
- package/dist/locations-M2B5XDU4.js.map +1 -0
- package/dist/log-2RJU5BOW.js +95 -0
- package/dist/log-2RJU5BOW.js.map +1 -0
- package/dist/lookup-S5VG7AWH.js +23 -0
- package/dist/make-MJ6JMU5T.js +1370 -0
- package/dist/make-MJ6JMU5T.js.map +1 -0
- package/dist/map-27IPOBY6.js +436 -0
- package/dist/map-27IPOBY6.js.map +1 -0
- package/dist/mcp-TFQTME4P.js +717 -0
- package/dist/mcp-TFQTME4P.js.map +1 -0
- package/dist/media-P4T4ZBNS.js +18 -0
- package/dist/media-sources-P246GM7W.js +35 -0
- package/dist/members-KOKBTUC2.js +47 -0
- package/dist/members-KOKBTUC2.js.map +1 -0
- package/dist/meta-IPLWNYC7.js +122 -0
- package/dist/metrics-WYWUX6Y5.js +152 -0
- package/dist/models-HJ7Y55AH.js +155 -0
- package/dist/normalize-GXBUNTYJ.js +144 -0
- package/dist/normalize-GXBUNTYJ.js.map +1 -0
- package/dist/options-MA25RNXF.js +125 -0
- package/dist/options-MA25RNXF.js.map +1 -0
- package/dist/organization-NLEVNGKQ.js +949 -0
- package/dist/organization-NLEVNGKQ.js.map +1 -0
- package/dist/page-photos-OQ5QATQH.js +118 -0
- package/dist/page-photos-OQ5QATQH.js.map +1 -0
- package/dist/performance-34EUP5KL.js +5541 -0
- package/dist/performance-34EUP5KL.js.map +1 -0
- package/dist/performance-J3DLNI2W.js +27 -0
- package/dist/pixels-THEGYRXT.js +62 -0
- package/dist/pixels-THEGYRXT.js.map +1 -0
- package/dist/plan-7UF76Q6U.js +208 -0
- package/dist/plan-7UF76Q6U.js.map +1 -0
- package/dist/preview-LRJOQ7LM.js +218 -0
- package/dist/preview-LRJOQ7LM.js.map +1 -0
- package/dist/promoted-tweet-writes-SBXWKO23.js +183 -0
- package/dist/promoted-tweet-writes-SBXWKO23.js.map +1 -0
- package/dist/promoted-tweets-W42FNWS7.js +119 -0
- package/dist/publish-YG76GOA7.js +344 -0
- package/dist/publish-YG76GOA7.js.map +1 -0
- package/dist/query-IQICLABN.js +62 -0
- package/dist/questionnaire-DWEH5II4.js +94 -0
- package/dist/questionnaire-DWEH5II4.js.map +1 -0
- package/dist/reddit-X4CERXYF.js +29 -0
- package/dist/refresh-A36GA7JN.js +97 -0
- package/dist/refresh-A36GA7JN.js.map +1 -0
- package/dist/release-3NCMZIDI.js +63 -0
- package/dist/release-3NCMZIDI.js.map +1 -0
- package/dist/relevant-pages-UDDQOYLD.js +99 -0
- package/dist/remove-6LE3XNRG.js +53 -0
- package/dist/remove-6LE3XNRG.js.map +1 -0
- package/dist/reopen-XLADJ2UU.js +66 -0
- package/dist/reopen-XLADJ2UU.js.map +1 -0
- package/dist/rerun-QVMFJZA2.js +95 -0
- package/dist/rerun-QVMFJZA2.js.map +1 -0
- package/dist/research-D5UUJF74.js +72 -0
- package/dist/research-QCI5ISUE.js +265 -0
- package/dist/research-QCI5ISUE.js.map +1 -0
- package/dist/reset-DD37KDXQ.js +57 -0
- package/dist/reset-DD37KDXQ.js.map +1 -0
- package/dist/reset-FLZPKY2N.js +57 -0
- package/dist/reset-FLZPKY2N.js.map +1 -0
- package/dist/resolve-KRKIJKT7.js +124 -0
- package/dist/resolve-KRKIJKT7.js.map +1 -0
- package/dist/retry-ALXYEKFV.js +65 -0
- package/dist/retry-ALXYEKFV.js.map +1 -0
- package/dist/retry-MIXKW4EW.js +63 -0
- package/dist/retry-MIXKW4EW.js.map +1 -0
- package/dist/revenue-UBZUTSXN.js +91 -0
- package/dist/revenue-UBZUTSXN.js.map +1 -0
- package/dist/rule-writes-UAVWT4XS.js +525 -0
- package/dist/rule-writes-UAVWT4XS.js.map +1 -0
- package/dist/rules-SO6P44B6.js +99 -0
- package/dist/rules-SO6P44B6.js.map +1 -0
- package/dist/rules-ZVS2MWED.js +217 -0
- package/dist/rules-add-XN3BZKFO.js +465 -0
- package/dist/rules-add-XN3BZKFO.js.map +1 -0
- package/dist/run-K2DOMOAN.js +69 -0
- package/dist/run-K2DOMOAN.js.map +1 -0
- package/dist/run-T7XAH2W5.js +70 -0
- package/dist/scaffold-ad-TWIT7R4U.js +1516 -0
- package/dist/scaffold-ad-TWIT7R4U.js.map +1 -0
- package/dist/scaffold-static-ad-GPJKOGOI.js +1015 -0
- package/dist/scaffold-static-ad-GPJKOGOI.js.map +1 -0
- package/dist/scaffold-video-7BQNOJ4S.js +888 -0
- package/dist/scaffold-video-7BQNOJ4S.js.map +1 -0
- package/dist/schedule-UTRVEWPE.js +64 -0
- package/dist/schedule-UTRVEWPE.js.map +1 -0
- package/dist/scheduled-agents-ZGCUZ6SB.js +55 -0
- package/dist/schema-D6BMZAPB.js +69 -0
- package/dist/schema-DSMF6ELE.js +135 -0
- package/dist/schema-DSMF6ELE.js.map +1 -0
- package/dist/search-2P72GSKY.js +177 -0
- package/dist/search-2P72GSKY.js.map +1 -0
- package/dist/select-N7VWQ2ZQ.js +106 -0
- package/dist/select-N7VWQ2ZQ.js.map +1 -0
- package/dist/sends-LAY5C74B.js +349 -0
- package/dist/sends-LAY5C74B.js.map +1 -0
- package/dist/set-prompt-3N3HMHT6.js +198 -0
- package/dist/set-prompt-3N3HMHT6.js.map +1 -0
- package/dist/setup-links-I5RFZTS4.js +144 -0
- package/dist/setup-links-I5RFZTS4.js.map +1 -0
- package/dist/shopify-LXSR37XI.js +3958 -0
- package/dist/shopify-LXSR37XI.js.map +1 -0
- package/dist/site-AI3BFWRK.js +180 -0
- package/dist/site-AI3BFWRK.js.map +1 -0
- package/dist/sources-AOF2YDYX.js +457 -0
- package/dist/sources-AOF2YDYX.js.map +1 -0
- package/dist/sources-DVMJEXEX.js +30 -0
- package/dist/stale-P4GGOLIB.js +76 -0
- package/dist/stale-P4GGOLIB.js.map +1 -0
- package/dist/status-O25MXHU4.js +65 -0
- package/dist/status-O25MXHU4.js.map +1 -0
- package/dist/studies-EPO2AM4M.js +250 -0
- package/dist/studio-5Z4NMA4K.js +49 -0
- package/dist/study-writes-7FP443QQ.js +470 -0
- package/dist/study-writes-7FP443QQ.js.map +1 -0
- package/dist/sync-2AI7LKKN.js +57 -0
- package/dist/sync-2AI7LKKN.js.map +1 -0
- package/dist/sync-definition-F3CXG6KG.js +69 -0
- package/dist/tags-SEZ2CQJM.js +26 -0
- package/dist/tags-TJDZXOXS.js +227 -0
- package/dist/tags-TJDZXOXS.js.map +1 -0
- package/dist/tags-YSC7ZILI.js +23 -0
- package/dist/tags-YSC7ZILI.js.map +1 -0
- package/dist/tags-Z6EALYOS.js +23 -0
- package/dist/tags-Z6EALYOS.js.map +1 -0
- package/dist/tags-ZXSVW6XO.js +23 -0
- package/dist/tags-ZXSVW6XO.js.map +1 -0
- package/dist/targeting-NKZFEZD7.js +762 -0
- package/dist/targeting-NKZFEZD7.js.map +1 -0
- package/dist/targeting-criteria-AU5CSMAU.js +113 -0
- package/dist/targets-IOIH5JYS.js +106 -0
- package/dist/targets-IOIH5JYS.js.map +1 -0
- package/dist/testimonials-Y6PUV6AL.js +32 -0
- package/dist/themes-PGPIAKAO.js +95 -0
- package/dist/top-companies-FSITN3ZR.js +111 -0
- package/dist/top-companies-FSITN3ZR.js.map +1 -0
- package/dist/transcript-CGPX7Y37.js +165 -0
- package/dist/transcript-CGPX7Y37.js.map +1 -0
- package/dist/translate-QCBMGOKR.js +609 -0
- package/dist/translate-QCBMGOKR.js.map +1 -0
- package/dist/triggers-MONMZSKT.js +144 -0
- package/dist/triggers-MONMZSKT.js.map +1 -0
- package/dist/unlink-I7QFQQKO.js +70 -0
- package/dist/unlink-I7QFQQKO.js.map +1 -0
- package/dist/unstage-JXG5AU5Q.js +88 -0
- package/dist/unstage-JXG5AU5Q.js.map +1 -0
- package/dist/unstage-ZA3WQBEA.js +96 -0
- package/dist/unstage-ZA3WQBEA.js.map +1 -0
- package/dist/update-BVZGM54I.js +66 -0
- package/dist/update-BVZGM54I.js.map +1 -0
- package/dist/update-EI2BHUM2.js +101 -0
- package/dist/update-EI2BHUM2.js.map +1 -0
- package/dist/update-RZSV4NYP.js +155 -0
- package/dist/update-RZSV4NYP.js.map +1 -0
- package/dist/update-WLDNOZ5U.js +192 -0
- package/dist/update-WLDNOZ5U.js.map +1 -0
- package/dist/upload-BP3YEQSF.js +129 -0
- package/dist/upload-BP3YEQSF.js.map +1 -0
- package/dist/url-options-63DED6CR.js +131 -0
- package/dist/url-options-63DED6CR.js.map +1 -0
- package/dist/url-params-TRFI2PMD.js +101 -0
- package/dist/url-params-TRFI2PMD.js.map +1 -0
- package/dist/validate-SNCR25A7.js +122 -0
- package/dist/validate-SNCR25A7.js.map +1 -0
- package/dist/videos-SVZV5YYC.js +41 -0
- package/dist/viewer-check-LUAEGV6H.js +83 -0
- package/dist/web-MJQEK7BB.js +143 -0
- package/dist/web-MJQEK7BB.js.map +1 -0
- package/dist/winning-ads-KNLJHHCO.js +86 -0
- package/dist/write-commands-NVCX7IAU.js +1502 -0
- package/dist/write-commands-NVCX7IAU.js.map +1 -0
- package/dist/write-commands-OGVDWWBV.js +1172 -0
- package/dist/write-commands-OGVDWWBV.js.map +1 -0
- package/dist/x-ZQNHYIDU.js +47 -0
- package/package.json +1 -1
- package/dist/account-C635ATVM.js +0 -80
- package/dist/account-C635ATVM.js.map +0 -1
- package/dist/account-WLQBAQMD.js +0 -80
- package/dist/account-WLQBAQMD.js.map +0 -1
- package/dist/account-assets-O7IA37RE.js +0 -290
- package/dist/account-level-EU7BWCO7.js +0 -609
- package/dist/account-level-EU7BWCO7.js.map +0 -1
- package/dist/account-reads-SNOWDHHF.js +0 -219
- package/dist/account-users-XYYENK6X.js +0 -62
- package/dist/account-users-XYYENK6X.js.map +0 -1
- package/dist/account-writes-TU3WJRSI.js +0 -66
- package/dist/account-writes-TU3WJRSI.js.map +0 -1
- package/dist/accounts-A2FBLZ5H.js +0 -78
- package/dist/accounts-A2FBLZ5H.js.map +0 -1
- package/dist/accounts-V2IZZ5KU.js +0 -699
- package/dist/accounts-V2IZZ5KU.js.map +0 -1
- package/dist/actions-Y4SULW2E.js +0 -55
- package/dist/activecampaign-63XG6CLL.js +0 -936
- package/dist/activecampaign-63XG6CLL.js.map +0 -1
- package/dist/ad-group-writes-HLBWN4E4.js +0 -170
- package/dist/ad-group-writes-HLBWN4E4.js.map +0 -1
- package/dist/ad-groups-33NZD6J3.js +0 -68
- package/dist/ad-groups-33NZD6J3.js.map +0 -1
- package/dist/ad-writes-7ZDNDZ2E.js +0 -174
- package/dist/ad-writes-7ZDNDZ2E.js.map +0 -1
- package/dist/add-FOLFVGQO.js +0 -303
- package/dist/add-FOLFVGQO.js.map +0 -1
- package/dist/add-RYB4JSYC.js +0 -105
- package/dist/add-RYB4JSYC.js.map +0 -1
- package/dist/ads-2TVWICGM.js +0 -48
- package/dist/ads-KBE5JXCH.js +0 -115
- package/dist/ads-X3AM6M7L.js +0 -77
- package/dist/ads-X3AM6M7L.js.map +0 -1
- package/dist/adsets-YWBJFPAZ.js +0 -182
- package/dist/advertisers-IGUMSK5Q.js +0 -121
- package/dist/advertisers-IGUMSK5Q.js.map +0 -1
- package/dist/analytics-3DKM7J43.js +0 -445
- package/dist/analytics-3DKM7J43.js.map +0 -1
- package/dist/analytics-R3QDSX2K.js +0 -2435
- package/dist/analytics-R3QDSX2K.js.map +0 -1
- package/dist/animate-2BMHZ4FM.js +0 -480
- package/dist/asset-writes-72DEVXGO.js +0 -48
- package/dist/assign-EKCGLNZB.js +0 -78
- package/dist/assign-EKCGLNZB.js.map +0 -1
- package/dist/audience-size-IKXK32HU.js +0 -74
- package/dist/audience-size-IKXK32HU.js.map +0 -1
- package/dist/audience-writes-KCHLNFSI.js +0 -325
- package/dist/audience-writes-KCHLNFSI.js.map +0 -1
- package/dist/audiences-QAH42HIM.js +0 -86
- package/dist/audiences-WCDWN64L.js +0 -268
- package/dist/audiences-WCDWN64L.js.map +0 -1
- package/dist/audit-CY76S4V7.js +0 -152
- package/dist/audit-CY76S4V7.js.map +0 -1
- package/dist/autocomplete-G2S5HNUS.js +0 -112
- package/dist/autocomplete-G2S5HNUS.js.map +0 -1
- package/dist/avatars-P4UPNZM4.js +0 -38
- package/dist/bid-pricing-AJT4QU2C.js +0 -101
- package/dist/bid-pricing-AJT4QU2C.js.map +0 -1
- package/dist/brand-HALQWZWB.js +0 -22
- package/dist/brief-NW7TGG2Q.js +0 -541
- package/dist/brief-NW7TGG2Q.js.map +0 -1
- package/dist/campaign-groups-I43KMAJP.js +0 -97
- package/dist/campaign-groups-I43KMAJP.js.map +0 -1
- package/dist/campaign-writes-DLLPFAGG.js +0 -166
- package/dist/campaign-writes-DLLPFAGG.js.map +0 -1
- package/dist/campaign-writes-XO74BALZ.js +0 -174
- package/dist/campaign-writes-XO74BALZ.js.map +0 -1
- package/dist/campaigns-LS65QM6W.js +0 -76
- package/dist/campaigns-LS65QM6W.js.map +0 -1
- package/dist/campaigns-UIYSYCF3.js +0 -111
- package/dist/campaigns-UIYSYCF3.js.map +0 -1
- package/dist/campaigns-XZOQ2VTK.js +0 -130
- package/dist/campaigns-YMM5TQVO.js +0 -111
- package/dist/canvas-IJS7H3VE.js +0 -46
- package/dist/capabilities-XMQPM3UL.js +0 -145
- package/dist/capabilities-XMQPM3UL.js.map +0 -1
- package/dist/catalog-TZLU5NWI.js +0 -65
- package/dist/catalogs-JLCSFZYC.js +0 -779
- package/dist/catalogs-JLCSFZYC.js.map +0 -1
- package/dist/catalogs-T23RKYFC.js +0 -128
- package/dist/catalogs-T23RKYFC.js.map +0 -1
- package/dist/changes-36C754R4.js +0 -135
- package/dist/chatgpt-3WFOPURY.js +0 -47
- package/dist/chats-ZI6EYDAF.js +0 -277
- package/dist/chats-ZI6EYDAF.js.map +0 -1
- package/dist/check-CHJ2OLAU.js +0 -105
- package/dist/check-CHJ2OLAU.js.map +0 -1
- package/dist/chunk-2TOIY2WN.js +0 -4254
- package/dist/chunk-2TOIY2WN.js.map +0 -1
- package/dist/chunk-3YJNSUNF.js +0 -131
- package/dist/chunk-4GAEB6NK.js +0 -228
- package/dist/chunk-5RVQK3SP.js +0 -494
- package/dist/chunk-5SRUAGTG.js +0 -547
- package/dist/chunk-5XTGG4PV.js +0 -274
- package/dist/chunk-6KWEF6HF.js +0 -8914
- package/dist/chunk-6Z7Y4KQB.js +0 -275
- package/dist/chunk-7HZSORAB.js +0 -843
- package/dist/chunk-7J3NZBPV.js +0 -2982
- package/dist/chunk-7J3NZBPV.js.map +0 -1
- package/dist/chunk-A3IQAONL.js +0 -638
- package/dist/chunk-AIRD6T4W.js +0 -169
- package/dist/chunk-AQOFQNKQ.js +0 -57
- package/dist/chunk-ARUXGKZO.js +0 -91
- package/dist/chunk-ASRS37QE.js +0 -710
- package/dist/chunk-ASRS37QE.js.map +0 -1
- package/dist/chunk-AYPBARKP.js +0 -156
- package/dist/chunk-BRLZX3VP.js +0 -207
- package/dist/chunk-BTJSGJNQ.js +0 -604
- package/dist/chunk-C7QQQVBS.js +0 -51
- package/dist/chunk-CCEDZTP7.js +0 -391
- package/dist/chunk-CCEDZTP7.js.map +0 -1
- package/dist/chunk-D3KLDIPQ.js +0 -45
- package/dist/chunk-DUR7PEJI.js +0 -170
- package/dist/chunk-EDLZGTGN.js +0 -216
- package/dist/chunk-EDLZGTGN.js.map +0 -1
- package/dist/chunk-F4YQ5PVR.js +0 -1518
- package/dist/chunk-FFFJBNHA.js +0 -63
- package/dist/chunk-FFG2OYVV.js +0 -64
- package/dist/chunk-FPWQA7TK.js +0 -344
- package/dist/chunk-G5Y7OIPL.js +0 -392
- package/dist/chunk-GACSA5A6.js +0 -1646
- package/dist/chunk-GMHCHHAA.js +0 -19
- package/dist/chunk-H4NNQGG6.js +0 -66
- package/dist/chunk-HML3VQIW.js +0 -225
- package/dist/chunk-HSQRITKG.js +0 -203
- package/dist/chunk-I47BEKYK.js +0 -831
- package/dist/chunk-JAC6JVCI.js +0 -26
- package/dist/chunk-JND6XSGZ.js +0 -7192
- package/dist/chunk-JND6XSGZ.js.map +0 -1
- package/dist/chunk-KBRJSPIM.js +0 -676
- package/dist/chunk-KQTNUDKD.js +0 -97
- package/dist/chunk-LRV6M2WB.js +0 -1919
- package/dist/chunk-M7HD42M6.js +0 -24017
- package/dist/chunk-M7HD42M6.js.map +0 -1
- package/dist/chunk-MBSFEVOG.js +0 -163
- package/dist/chunk-MCJ5I5LR.js +0 -3187
- package/dist/chunk-MCJ5I5LR.js.map +0 -1
- package/dist/chunk-MGYC2IRC.js +0 -783
- package/dist/chunk-MUXKYSTI.js +0 -297
- package/dist/chunk-MVD7QIXI.js +0 -46
- package/dist/chunk-MZCTX37B.js +0 -3868
- package/dist/chunk-MZPS46OR.js +0 -76
- package/dist/chunk-N7M2TWR5.js +0 -592
- package/dist/chunk-NDFS3APP.js +0 -319
- package/dist/chunk-OBJCNGZL.js +0 -207
- package/dist/chunk-OJGYYH6K.js +0 -179
- package/dist/chunk-P6BKKUSX.js +0 -142
- package/dist/chunk-PLAOK4AK.js +0 -103
- package/dist/chunk-PLBITHV6.js +0 -846
- package/dist/chunk-PNKIOTCK.js +0 -349
- package/dist/chunk-PNKIOTCK.js.map +0 -1
- package/dist/chunk-PX3PUDK7.js +0 -167
- package/dist/chunk-QBRPM3DQ.js +0 -61
- package/dist/chunk-QMDMTZAW.js +0 -224
- package/dist/chunk-QW6HL7D6.js +0 -429
- package/dist/chunk-R53XMPDO.js +0 -363
- package/dist/chunk-RFIUOQLN.js +0 -89
- package/dist/chunk-RVEY7BTT.js +0 -8954
- package/dist/chunk-SCL7PM6P.js +0 -479
- package/dist/chunk-SM7G7RUA.js +0 -910
- package/dist/chunk-SVBJ56T7.js +0 -455
- package/dist/chunk-SWN6OHXG.js +0 -148
- package/dist/chunk-TVAIOC77.js +0 -287
- package/dist/chunk-TVTSA4EN.js +0 -188
- package/dist/chunk-TX7CQTD4.js +0 -5368
- package/dist/chunk-UKSSNYLU.js +0 -98
- package/dist/chunk-VIPKDXGU.js +0 -4229
- package/dist/chunk-VIPKDXGU.js.map +0 -1
- package/dist/chunk-W574NV67.js +0 -191
- package/dist/chunk-XGPU2VDU.js +0 -219
- package/dist/chunk-XQXZJ5IR.js +0 -249
- package/dist/chunk-YMF2RG4Z.js +0 -942
- package/dist/chunk-YNYAT2TZ.js +0 -285
- package/dist/chunk-Z2DRGXBB.js +0 -197
- package/dist/chunk-Z7YMSHRZ.js +0 -23
- package/dist/chunk-ZEC46NWW.js +0 -122
- package/dist/chunk-ZFC562TP.js +0 -387
- package/dist/chunk-ZNRGH4NS.js +0 -150
- package/dist/claim-OUYHVGB4.js +0 -198
- package/dist/claim-OUYHVGB4.js.map +0 -1
- package/dist/companies-XDNSG7ME.js +0 -196
- package/dist/companies-XDNSG7ME.js.map +0 -1
- package/dist/company-4FAYYPEJ.js +0 -306
- package/dist/company-4FAYYPEJ.js.map +0 -1
- package/dist/complete-M2PAUMDP.js +0 -82
- package/dist/complete-M2PAUMDP.js.map +0 -1
- package/dist/connect-PP6Z3F7Y.js +0 -43
- package/dist/conversation-B5NPTLFQ.js +0 -94
- package/dist/conversation-B5NPTLFQ.js.map +0 -1
- package/dist/conversion-report-DKXFHLLX.js +0 -125
- package/dist/conversion-report-DKXFHLLX.js.map +0 -1
- package/dist/conversion-upload-command-KTYAY7IG.js +0 -439
- package/dist/conversion-writes-7ODJDAUP.js +0 -120
- package/dist/conversion-writes-7ODJDAUP.js.map +0 -1
- package/dist/conversions-BKVGNNC6.js +0 -76
- package/dist/conversions-BKVGNNC6.js.map +0 -1
- package/dist/conversions-QRJL6JIO.js +0 -138
- package/dist/conversions-QRJL6JIO.js.map +0 -1
- package/dist/copy-writes-P4WK6OPM.js +0 -168
- package/dist/copy-writes-P4WK6OPM.js.map +0 -1
- package/dist/create-4DWCJ2UA.js +0 -208
- package/dist/create-4DWCJ2UA.js.map +0 -1
- package/dist/create-OYV33CQ6.js +0 -60
- package/dist/create-OYV33CQ6.js.map +0 -1
- package/dist/create-U6JVIYFY.js +0 -237
- package/dist/create-U6JVIYFY.js.map +0 -1
- package/dist/create-V4FNRO63.js +0 -133
- package/dist/create-V4FNRO63.js.map +0 -1
- package/dist/creatives-64FKWEGL.js +0 -221
- package/dist/creatives-64FKWEGL.js.map +0 -1
- package/dist/creatives-JPKA2RHU.js +0 -89
- package/dist/creatives-UJDPD4CI.js +0 -58
- package/dist/credentials-EIPEZ2C2.js +0 -288
- package/dist/credentials-EIPEZ2C2.js.map +0 -1
- package/dist/critique-BADMZAZP.js +0 -230
- package/dist/critique-BADMZAZP.js.map +0 -1
- package/dist/critique-M3DEVEDA.js +0 -1449
- package/dist/critique-M3DEVEDA.js.map +0 -1
- package/dist/crm-GIYSLLY7.js +0 -321
- package/dist/crm-GIYSLLY7.js.map +0 -1
- package/dist/crm-HXKSJRY3.js +0 -225
- package/dist/crm-HXKSJRY3.js.map +0 -1
- package/dist/currency-R4ORE2U3.js +0 -88
- package/dist/custom-conversions-5HJBB5XL.js +0 -128
- package/dist/customers-7J3QGSOJ.js +0 -57
- package/dist/delete-EDWJQMMV.js +0 -65
- package/dist/delete-EDWJQMMV.js.map +0 -1
- package/dist/delete-O24CVQMJ.js +0 -67
- package/dist/delete-O24CVQMJ.js.map +0 -1
- package/dist/delete-QN2OYUCS.js +0 -55
- package/dist/delete-QN2OYUCS.js.map +0 -1
- package/dist/demographics-MPYYF2OI.js +0 -139
- package/dist/demographics-MPYYF2OI.js.map +0 -1
- package/dist/discard-FJCFB6SA.js +0 -67
- package/dist/discard-FJCFB6SA.js.map +0 -1
- package/dist/discover-GSJRZUOC.js +0 -172
- package/dist/domain-UILPSEA5.js +0 -99
- package/dist/domain-UILPSEA5.js.map +0 -1
- package/dist/download-ZMAI7QSG.js +0 -170
- package/dist/download-ZMAI7QSG.js.map +0 -1
- package/dist/draft-5OQT3APG.js +0 -308
- package/dist/draft-5OQT3APG.js.map +0 -1
- package/dist/draft-LPVK6YHI.js +0 -281
- package/dist/draft-LPVK6YHI.js.map +0 -1
- package/dist/draft-MSESA5UE.js +0 -333
- package/dist/draft-MSESA5UE.js.map +0 -1
- package/dist/draft-WYDMLNYA.js +0 -308
- package/dist/draft-XOOSEVY5.js +0 -218
- package/dist/draft-XOOSEVY5.js.map +0 -1
- package/dist/experiments-PVOQUL47.js +0 -234
- package/dist/experiments-PVOQUL47.js.map +0 -1
- package/dist/facets-5RW4Z3D3.js +0 -115
- package/dist/facets-5RW4Z3D3.js.map +0 -1
- package/dist/feedback-GC56R2EJ.js +0 -109
- package/dist/feedback-GC56R2EJ.js.map +0 -1
- package/dist/feedback-record-JX7ZU6J7.js +0 -263
- package/dist/feedback-record-JX7ZU6J7.js.map +0 -1
- package/dist/fetch-WUTXAPBL.js +0 -177
- package/dist/fetch-WUTXAPBL.js.map +0 -1
- package/dist/fit-N7WDGWYZ.js +0 -63
- package/dist/flows-ULZACISF.js +0 -248
- package/dist/flows-ULZACISF.js.map +0 -1
- package/dist/fonts-TTUAP7HS.js +0 -37
- package/dist/forecast-4AG5F7YC.js +0 -169
- package/dist/forecast-RQJJRN5D.js +0 -119
- package/dist/forecast-RQJJRN5D.js.map +0 -1
- package/dist/funnel-QPWJIXWK.js +0 -395
- package/dist/funnel-QPWJIXWK.js.map +0 -1
- package/dist/generate-NWHPM2GQ.js +0 -263
- package/dist/get-35D7YHWJ.js +0 -57
- package/dist/get-35D7YHWJ.js.map +0 -1
- package/dist/get-GIETDPF4.js +0 -80
- package/dist/get-GIETDPF4.js.map +0 -1
- package/dist/google-NAA4BASO.js +0 -3267
- package/dist/google-ads-2IZFZO4C.js +0 -196
- package/dist/google-ads-2IZFZO4C.js.map +0 -1
- package/dist/history-5MRLNTCI.js +0 -67
- package/dist/history-5MRLNTCI.js.map +0 -1
- package/dist/history-RPLWWPLQ.js +0 -134
- package/dist/history-RPLWWPLQ.js.map +0 -1
- package/dist/history-TQYLUYVU.js +0 -100
- package/dist/history-TQYLUYVU.js.map +0 -1
- package/dist/hubspot-EPK43X4C.js +0 -780
- package/dist/hubspot-EPK43X4C.js.map +0 -1
- package/dist/ideas-SUXKKZC7.js +0 -43
- package/dist/images-VKVZ3DWG.js +0 -92
- package/dist/ingest-BBBFT6FZ.js +0 -24
- package/dist/ingest-EM2UY42Z.js +0 -108
- package/dist/ingest-EM2UY42Z.js.map +0 -1
- package/dist/insights-M3CYB22P.js +0 -437
- package/dist/insights-M3CYB22P.js.map +0 -1
- package/dist/insights-XCT3ONC7.js +0 -130
- package/dist/insights-XCT3ONC7.js.map +0 -1
- package/dist/inspect-ZPOVOENK.js +0 -190
- package/dist/inspect-ZPOVOENK.js.map +0 -1
- package/dist/instant-experiences-HT3HB4QZ.js +0 -258
- package/dist/instant-experiences-HT3HB4QZ.js.map +0 -1
- package/dist/intent-NSHW7EJT.js +0 -95
- package/dist/keyword-gap-ITTWKBWZ.js +0 -130
- package/dist/keyword-metrics-7DPR264W.js +0 -198
- package/dist/keyword-metrics-7DPR264W.js.map +0 -1
- package/dist/keywords-for-site-IXL22UKQ.js +0 -129
- package/dist/keywords-for-site-IXL22UKQ.js.map +0 -1
- package/dist/landing-KZ4OSHHR.js +0 -28
- package/dist/languages-MEFQQBJ2.js +0 -40
- package/dist/leads-DNQTRYIR.js +0 -113
- package/dist/leads-DNQTRYIR.js.map +0 -1
- package/dist/leads-SZOGCQFK.js +0 -538
- package/dist/leads-SZOGCQFK.js.map +0 -1
- package/dist/learn-Q7WZG7FA.js +0 -205
- package/dist/learn-Q7WZG7FA.js.map +0 -1
- package/dist/line-item-writes-3K7FT5GO.js +0 -209
- package/dist/line-item-writes-3K7FT5GO.js.map +0 -1
- package/dist/line-items-G5YJG25N.js +0 -107
- package/dist/link-2QVSIZJT.js +0 -65
- package/dist/link-2QVSIZJT.js.map +0 -1
- package/dist/linkedin-VAFPZNWZ.js +0 -1314
- package/dist/linkedin-VAFPZNWZ.js.map +0 -1
- package/dist/linkedin-person-EHTYVNZY.js +0 -137
- package/dist/linkedin-person-EHTYVNZY.js.map +0 -1
- package/dist/list-5TS2VPQZ.js +0 -152
- package/dist/list-5TS2VPQZ.js.map +0 -1
- package/dist/list-PSSQXQRJ.js +0 -65
- package/dist/list-PSSQXQRJ.js.map +0 -1
- package/dist/list-UMVIFQ3X.js +0 -304
- package/dist/list-UMVIFQ3X.js.map +0 -1
- package/dist/locations-RLWAS6AC.js +0 -40
- package/dist/locations-UKBOT6SB.js +0 -67
- package/dist/locations-UKBOT6SB.js.map +0 -1
- package/dist/log-ZZK3QMZB.js +0 -93
- package/dist/log-ZZK3QMZB.js.map +0 -1
- package/dist/lookup-ZJIP2M4X.js +0 -22
- package/dist/make-DB2BDVB3.js +0 -1368
- package/dist/make-DB2BDVB3.js.map +0 -1
- package/dist/map-UJ23GKRH.js +0 -434
- package/dist/map-UJ23GKRH.js.map +0 -1
- package/dist/mcp-SS2ALFRJ.js +0 -715
- package/dist/mcp-SS2ALFRJ.js.map +0 -1
- package/dist/media-ZWN7E777.js +0 -18
- package/dist/media-sources-GKSEDSE3.js +0 -35
- package/dist/members-KD2XRYPZ.js +0 -45
- package/dist/members-KD2XRYPZ.js.map +0 -1
- package/dist/meta-EHKXH257.js +0 -122
- package/dist/metrics-K6FDCMK7.js +0 -152
- package/dist/models-JQEPSPNQ.js +0 -155
- package/dist/normalize-ZNTXNX6D.js +0 -142
- package/dist/normalize-ZNTXNX6D.js.map +0 -1
- package/dist/options-TBIFJF3E.js +0 -123
- package/dist/options-TBIFJF3E.js.map +0 -1
- package/dist/organization-26J2ZIKM.js +0 -947
- package/dist/organization-26J2ZIKM.js.map +0 -1
- package/dist/page-photos-HWKQOSCU.js +0 -116
- package/dist/page-photos-HWKQOSCU.js.map +0 -1
- package/dist/performance-6TPJGM6A.js +0 -25
- package/dist/performance-O5BXZGS6.js +0 -5539
- package/dist/performance-O5BXZGS6.js.map +0 -1
- package/dist/pixels-Z7ZGXAGB.js +0 -60
- package/dist/pixels-Z7ZGXAGB.js.map +0 -1
- package/dist/plan-TVQSEKYL.js +0 -207
- package/dist/plan-TVQSEKYL.js.map +0 -1
- package/dist/preview-CWRGDFCP.js +0 -216
- package/dist/preview-CWRGDFCP.js.map +0 -1
- package/dist/promoted-tweet-writes-SZN74JHY.js +0 -181
- package/dist/promoted-tweet-writes-SZN74JHY.js.map +0 -1
- package/dist/promoted-tweets-7P4TSQU7.js +0 -119
- package/dist/publish-3DUERLGT.js +0 -342
- package/dist/publish-3DUERLGT.js.map +0 -1
- package/dist/query-QM7MBQD7.js +0 -62
- package/dist/questionnaire-LEZJLMAV.js +0 -93
- package/dist/questionnaire-LEZJLMAV.js.map +0 -1
- package/dist/reddit-SN5CESF4.js +0 -27
- package/dist/refresh-2ICQBTK4.js +0 -95
- package/dist/refresh-2ICQBTK4.js.map +0 -1
- package/dist/release-JSZ4JXYJ.js +0 -61
- package/dist/release-JSZ4JXYJ.js.map +0 -1
- package/dist/relevant-pages-VOICMQ7U.js +0 -99
- package/dist/remove-TFUAVRFM.js +0 -51
- package/dist/remove-TFUAVRFM.js.map +0 -1
- package/dist/reopen-5T2PE7MU.js +0 -64
- package/dist/reopen-5T2PE7MU.js.map +0 -1
- package/dist/rerun-EZJ4MLYG.js +0 -93
- package/dist/rerun-EZJ4MLYG.js.map +0 -1
- package/dist/research-BKYSU2C6.js +0 -263
- package/dist/research-BKYSU2C6.js.map +0 -1
- package/dist/research-QU63CJB5.js +0 -72
- package/dist/reset-DKTKZF7G.js +0 -55
- package/dist/reset-DKTKZF7G.js.map +0 -1
- package/dist/reset-SXABIVP6.js +0 -55
- package/dist/reset-SXABIVP6.js.map +0 -1
- package/dist/resolve-L47U2T77.js +0 -122
- package/dist/resolve-L47U2T77.js.map +0 -1
- package/dist/retry-JEWPK2B5.js +0 -63
- package/dist/retry-JEWPK2B5.js.map +0 -1
- package/dist/retry-SXFVLT3W.js +0 -61
- package/dist/retry-SXFVLT3W.js.map +0 -1
- package/dist/revenue-2MAYTXRM.js +0 -89
- package/dist/revenue-2MAYTXRM.js.map +0 -1
- package/dist/rule-writes-S3RN47OG.js +0 -523
- package/dist/rule-writes-S3RN47OG.js.map +0 -1
- package/dist/rules-CHWTFASP.js +0 -97
- package/dist/rules-CHWTFASP.js.map +0 -1
- package/dist/rules-KTJ2ZZ62.js +0 -217
- package/dist/rules-add-3M5TALWN.js +0 -463
- package/dist/rules-add-3M5TALWN.js.map +0 -1
- package/dist/run-2DLA6YO4.js +0 -68
- package/dist/run-JCGH2NHD.js +0 -67
- package/dist/run-JCGH2NHD.js.map +0 -1
- package/dist/scaffold-ad-VEW7JDY7.js +0 -1514
- package/dist/scaffold-ad-VEW7JDY7.js.map +0 -1
- package/dist/scaffold-static-ad-DYRL7DOS.js +0 -1013
- package/dist/scaffold-static-ad-DYRL7DOS.js.map +0 -1
- package/dist/scaffold-video-YRAVVKUH.js +0 -886
- package/dist/scaffold-video-YRAVVKUH.js.map +0 -1
- package/dist/schedule-WYIC6VNW.js +0 -62
- package/dist/schedule-WYIC6VNW.js.map +0 -1
- package/dist/scheduled-agents-FRBF4EOK.js +0 -55
- package/dist/schema-6Y3IXFDC.js +0 -69
- package/dist/schema-TC2O3FYY.js +0 -133
- package/dist/schema-TC2O3FYY.js.map +0 -1
- package/dist/search-VDW242BN.js +0 -175
- package/dist/search-VDW242BN.js.map +0 -1
- package/dist/select-O5HSSC36.js +0 -104
- package/dist/select-O5HSSC36.js.map +0 -1
- package/dist/sends-6FI7WELX.js +0 -348
- package/dist/sends-6FI7WELX.js.map +0 -1
- package/dist/set-prompt-TI7N64PJ.js +0 -196
- package/dist/set-prompt-TI7N64PJ.js.map +0 -1
- package/dist/setup-links-BM2FTXUZ.js +0 -142
- package/dist/setup-links-BM2FTXUZ.js.map +0 -1
- package/dist/shopify-FIHG5PYP.js +0 -3956
- package/dist/shopify-FIHG5PYP.js.map +0 -1
- package/dist/site-S3IGBMVC.js +0 -178
- package/dist/site-S3IGBMVC.js.map +0 -1
- package/dist/sources-77WLFY4Y.js +0 -30
- package/dist/sources-A4B3R5JC.js +0 -455
- package/dist/sources-A4B3R5JC.js.map +0 -1
- package/dist/stale-YIRCXDOK.js +0 -74
- package/dist/stale-YIRCXDOK.js.map +0 -1
- package/dist/status-6YNR647D.js +0 -63
- package/dist/status-6YNR647D.js.map +0 -1
- package/dist/studies-ZOEUY6YP.js +0 -250
- package/dist/studio-T5L7UEX6.js +0 -49
- package/dist/study-writes-DTGMCNFP.js +0 -468
- package/dist/study-writes-DTGMCNFP.js.map +0 -1
- package/dist/sync-FFVWHGLE.js +0 -55
- package/dist/sync-FFVWHGLE.js.map +0 -1
- package/dist/sync-definition-K4XOAG2B.js +0 -67
- package/dist/tags-5KIOGEKN.js +0 -21
- package/dist/tags-5KIOGEKN.js.map +0 -1
- package/dist/tags-BKAN5EAJ.js +0 -21
- package/dist/tags-BKAN5EAJ.js.map +0 -1
- package/dist/tags-ETOOYQ57.js +0 -26
- package/dist/tags-RPNK7TMO.js +0 -225
- package/dist/tags-RPNK7TMO.js.map +0 -1
- package/dist/tags-UM4QO46J.js +0 -21
- package/dist/tags-UM4QO46J.js.map +0 -1
- package/dist/targeting-VBQY3HUN.js +0 -760
- package/dist/targeting-VBQY3HUN.js.map +0 -1
- package/dist/targeting-criteria-L4DYIJZI.js +0 -113
- package/dist/targets-S6N7327Q.js +0 -104
- package/dist/targets-S6N7327Q.js.map +0 -1
- package/dist/testimonials-65N7IYN7.js +0 -32
- package/dist/themes-B4LCQUXB.js +0 -95
- package/dist/top-companies-SJKND75M.js +0 -109
- package/dist/top-companies-SJKND75M.js.map +0 -1
- package/dist/transcript-5I7I6DWL.js +0 -163
- package/dist/transcript-5I7I6DWL.js.map +0 -1
- package/dist/translate-SH6IG5Y7.js +0 -607
- package/dist/translate-SH6IG5Y7.js.map +0 -1
- package/dist/triggers-YRY3HTYU.js +0 -142
- package/dist/triggers-YRY3HTYU.js.map +0 -1
- package/dist/unlink-4B4YTQE4.js +0 -68
- package/dist/unlink-4B4YTQE4.js.map +0 -1
- package/dist/unstage-H5NTDJ6A.js +0 -86
- package/dist/unstage-H5NTDJ6A.js.map +0 -1
- package/dist/unstage-MDSSPUKV.js +0 -95
- package/dist/unstage-MDSSPUKV.js.map +0 -1
- package/dist/update-DI52JJGB.js +0 -99
- package/dist/update-DI52JJGB.js.map +0 -1
- package/dist/update-DMPDLMMV.js +0 -64
- package/dist/update-DMPDLMMV.js.map +0 -1
- package/dist/update-TUS4PJIG.js +0 -190
- package/dist/update-TUS4PJIG.js.map +0 -1
- package/dist/update-Z66LMXNS.js +0 -153
- package/dist/update-Z66LMXNS.js.map +0 -1
- package/dist/upload-7KQYZ7T7.js +0 -127
- package/dist/upload-7KQYZ7T7.js.map +0 -1
- package/dist/url-options-IHL4OU4C.js +0 -130
- package/dist/url-options-IHL4OU4C.js.map +0 -1
- package/dist/url-params-SDA2MWB5.js +0 -99
- package/dist/url-params-SDA2MWB5.js.map +0 -1
- package/dist/validate-ZABZNCSB.js +0 -120
- package/dist/validate-ZABZNCSB.js.map +0 -1
- package/dist/videos-BKVCCKIH.js +0 -41
- package/dist/viewer-check-B5O7ZY3Q.js +0 -81
- package/dist/web-KN3BTVG4.js +0 -141
- package/dist/web-KN3BTVG4.js.map +0 -1
- package/dist/winning-ads-JIDPISKM.js +0 -86
- package/dist/write-commands-K6M3RTVK.js +0 -1170
- package/dist/write-commands-K6M3RTVK.js.map +0 -1
- package/dist/write-commands-RVHLLLDR.js +0 -1498
- package/dist/write-commands-RVHLLLDR.js.map +0 -1
- package/dist/x-NLGWZCGX.js +0 -47
- /package/dist/{account-assets-O7IA37RE.js.map → account-assets-J5Z4URLQ.js.map} +0 -0
- /package/dist/{account-reads-SNOWDHHF.js.map → account-reads-FOEVPWDP.js.map} +0 -0
- /package/dist/{actions-Y4SULW2E.js.map → actions-QZDSLFFK.js.map} +0 -0
- /package/dist/{ads-2TVWICGM.js.map → ads-AYJAYLFR.js.map} +0 -0
- /package/dist/{ads-KBE5JXCH.js.map → ads-MAOI7S6V.js.map} +0 -0
- /package/dist/{adsets-YWBJFPAZ.js.map → adsets-QRKICEFD.js.map} +0 -0
- /package/dist/{animate-2BMHZ4FM.js.map → animate-HRWFVE2N.js.map} +0 -0
- /package/dist/{asset-writes-72DEVXGO.js.map → asset-writes-JLVUAVUZ.js.map} +0 -0
- /package/dist/{audiences-QAH42HIM.js.map → audiences-CDDI5HR5.js.map} +0 -0
- /package/dist/{avatars-P4UPNZM4.js.map → avatars-4HCGWBOL.js.map} +0 -0
- /package/dist/{brand-HALQWZWB.js.map → brand-C6OB6Q4U.js.map} +0 -0
- /package/dist/{campaigns-XZOQ2VTK.js.map → campaigns-HES5MDUG.js.map} +0 -0
- /package/dist/{campaigns-YMM5TQVO.js.map → campaigns-ZYU4BXDP.js.map} +0 -0
- /package/dist/{canvas-IJS7H3VE.js.map → canvas-AI34UBGU.js.map} +0 -0
- /package/dist/{catalog-TZLU5NWI.js.map → catalog-ZY3MFT55.js.map} +0 -0
- /package/dist/{changes-36C754R4.js.map → changes-OOUVQDBY.js.map} +0 -0
- /package/dist/{chatgpt-3WFOPURY.js.map → chatgpt-NAXIFWXV.js.map} +0 -0
- /package/dist/{chunk-NDFS3APP.js.map → chunk-3CHYJYSS.js.map} +0 -0
- /package/dist/{chunk-QW6HL7D6.js.map → chunk-3G3GC5N4.js.map} +0 -0
- /package/dist/{chunk-5XTGG4PV.js.map → chunk-3M45PYU7.js.map} +0 -0
- /package/dist/{chunk-Z7YMSHRZ.js.map → chunk-3QHXF3QI.js.map} +0 -0
- /package/dist/{chunk-MZCTX37B.js.map → chunk-3XPHUMLJ.js.map} +0 -0
- /package/dist/{chunk-MGYC2IRC.js.map → chunk-45EERHDB.js.map} +0 -0
- /package/dist/{chunk-ZFC562TP.js.map → chunk-4FGTANFK.js.map} +0 -0
- /package/dist/{chunk-PX3PUDK7.js.map → chunk-4IHWT7PH.js.map} +0 -0
- /package/dist/{chunk-PLBITHV6.js.map → chunk-4LF4AYPT.js.map} +0 -0
- /package/dist/{chunk-XGPU2VDU.js.map → chunk-4UQRXKYJ.js.map} +0 -0
- /package/dist/{chunk-SVBJ56T7.js.map → chunk-5JJD33Y2.js.map} +0 -0
- /package/dist/{chunk-I47BEKYK.js.map → chunk-5K4QYYOJ.js.map} +0 -0
- /package/dist/{chunk-MBSFEVOG.js.map → chunk-5LJ6E4YU.js.map} +0 -0
- /package/dist/{chunk-6Z7Y4KQB.js.map → chunk-5T73MMBL.js.map} +0 -0
- /package/dist/{chunk-R53XMPDO.js.map → chunk-64MAHLTK.js.map} +0 -0
- /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
- /package/dist/{chunk-3YJNSUNF.js.map → chunk-6ZFSDYWV.js.map} +0 -0
- /package/dist/{chunk-TVAIOC77.js.map → chunk-7BUIOP36.js.map} +0 -0
- /package/dist/{chunk-ZEC46NWW.js.map → chunk-AN4OEQXE.js.map} +0 -0
- /package/dist/{chunk-TX7CQTD4.js.map → chunk-AULSX5ZA.js.map} +0 -0
- /package/dist/{chunk-MVD7QIXI.js.map → chunk-AVYUFJQQ.js.map} +0 -0
- /package/dist/{chunk-KQTNUDKD.js.map → chunk-B4YF7VQF.js.map} +0 -0
- /package/dist/{chunk-UKSSNYLU.js.map → chunk-BDOYNGUL.js.map} +0 -0
- /package/dist/{chunk-BRLZX3VP.js.map → chunk-BJOK7QD4.js.map} +0 -0
- /package/dist/{chunk-Z2DRGXBB.js.map → chunk-CMCGFSUS.js.map} +0 -0
- /package/dist/{chunk-KBRJSPIM.js.map → chunk-DMJUIUAL.js.map} +0 -0
- /package/dist/{chunk-HML3VQIW.js.map → chunk-DUCUOZLS.js.map} +0 -0
- /package/dist/{chunk-7HZSORAB.js.map → chunk-FJZYOVSW.js.map} +0 -0
- /package/dist/{chunk-GMHCHHAA.js.map → chunk-FKP4ECJY.js.map} +0 -0
- /package/dist/{chunk-RVEY7BTT.js.map → chunk-GNMEOU46.js.map} +0 -0
- /package/dist/{chunk-AYPBARKP.js.map → chunk-GYKYXWUQ.js.map} +0 -0
- /package/dist/{chunk-MUXKYSTI.js.map → chunk-GYPLRU4Y.js.map} +0 -0
- /package/dist/{chunk-YNYAT2TZ.js.map → chunk-I43ZEWJQ.js.map} +0 -0
- /package/dist/{chunk-4GAEB6NK.js.map → chunk-IZABTTW5.js.map} +0 -0
- /package/dist/{chunk-GACSA5A6.js.map → chunk-K7IE6UYV.js.map} +0 -0
- /package/dist/{chunk-BTJSGJNQ.js.map → chunk-KH5YHHJV.js.map} +0 -0
- /package/dist/{chunk-C7QQQVBS.js.map → chunk-KMY7AD3N.js.map} +0 -0
- /package/dist/{chunk-6KWEF6HF.js.map → chunk-KPCHWDJM.js.map} +0 -0
- /package/dist/{chunk-SWN6OHXG.js.map → chunk-KTZCLJ2D.js.map} +0 -0
- /package/dist/{chunk-A3IQAONL.js.map → chunk-MKUA54QE.js.map} +0 -0
- /package/dist/{chunk-FFFJBNHA.js.map → chunk-MTV2RSGY.js.map} +0 -0
- /package/dist/{chunk-G5Y7OIPL.js.map → chunk-N2QX57K3.js.map} +0 -0
- /package/dist/{chunk-OJGYYH6K.js.map → chunk-NB2FU6EZ.js.map} +0 -0
- /package/dist/{chunk-SCL7PM6P.js.map → chunk-NEYWS2DQ.js.map} +0 -0
- /package/dist/{chunk-TVTSA4EN.js.map → chunk-NWF2LRKO.js.map} +0 -0
- /package/dist/{chunk-W574NV67.js.map → chunk-OTC6UMJ2.js.map} +0 -0
- /package/dist/{chunk-QMDMTZAW.js.map → chunk-OUY2IAWL.js.map} +0 -0
- /package/dist/{chunk-FPWQA7TK.js.map → chunk-PJXNCRMR.js.map} +0 -0
- /package/dist/{chunk-ARUXGKZO.js.map → chunk-PYQ3GF7R.js.map} +0 -0
- /package/dist/{chunk-DUR7PEJI.js.map → chunk-Q3EIVZAR.js.map} +0 -0
- /package/dist/{chunk-OBJCNGZL.js.map → chunk-QDQZ62FL.js.map} +0 -0
- /package/dist/{chunk-LRV6M2WB.js.map → chunk-QHZE62GP.js.map} +0 -0
- /package/dist/{chunk-PLAOK4AK.js.map → chunk-RGR6TSTJ.js.map} +0 -0
- /package/dist/{chunk-HSQRITKG.js.map → chunk-SAAXU7QR.js.map} +0 -0
- /package/dist/{chunk-H4NNQGG6.js.map → chunk-SHTKLRI6.js.map} +0 -0
- /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
- /package/dist/{chunk-RFIUOQLN.js.map → chunk-SSXG53CZ.js.map} +0 -0
- /package/dist/{chunk-5SRUAGTG.js.map → chunk-TBWAM577.js.map} +0 -0
- /package/dist/{chunk-AIRD6T4W.js.map → chunk-TGPGQTZA.js.map} +0 -0
- /package/dist/{chunk-F4YQ5PVR.js.map → chunk-UMIX2BMM.js.map} +0 -0
- /package/dist/{chunk-ZNRGH4NS.js.map → chunk-URMAEVZO.js.map} +0 -0
- /package/dist/{chunk-QBRPM3DQ.js.map → chunk-VBO3ZVUU.js.map} +0 -0
- /package/dist/{chunk-N7M2TWR5.js.map → chunk-VFLYMHTO.js.map} +0 -0
- /package/dist/{chunk-XQXZJ5IR.js.map → chunk-VGYIVXIZ.js.map} +0 -0
- /package/dist/{chunk-AQOFQNKQ.js.map → chunk-VIB7R533.js.map} +0 -0
- /package/dist/{chunk-D3KLDIPQ.js.map → chunk-WLESMH4J.js.map} +0 -0
- /package/dist/{chunk-SM7G7RUA.js.map → chunk-WVWLPXBO.js.map} +0 -0
- /package/dist/{chunk-5RVQK3SP.js.map → chunk-XEH5XAP6.js.map} +0 -0
- /package/dist/{chunk-P6BKKUSX.js.map → chunk-XEOKVL4E.js.map} +0 -0
- /package/dist/{chunk-FFG2OYVV.js.map → chunk-XOGQJYXH.js.map} +0 -0
- /package/dist/{chunk-YMF2RG4Z.js.map → chunk-XUXRA7IB.js.map} +0 -0
- /package/dist/{connect-PP6Z3F7Y.js.map → connect-IAXSZPGA.js.map} +0 -0
- /package/dist/{conversion-upload-command-KTYAY7IG.js.map → conversion-upload-command-IHFKVX2M.js.map} +0 -0
- /package/dist/{creatives-JPKA2RHU.js.map → creatives-BB6S2OF6.js.map} +0 -0
- /package/dist/{creatives-UJDPD4CI.js.map → creatives-BZEVJ6ER.js.map} +0 -0
- /package/dist/{currency-R4ORE2U3.js.map → currency-CGKO5GKH.js.map} +0 -0
- /package/dist/{custom-conversions-5HJBB5XL.js.map → custom-conversions-HAGG72LF.js.map} +0 -0
- /package/dist/{customers-7J3QGSOJ.js.map → customers-NKKU6S7G.js.map} +0 -0
- /package/dist/{discover-GSJRZUOC.js.map → discover-VM3O7CQM.js.map} +0 -0
- /package/dist/{draft-WYDMLNYA.js.map → draft-CRDBU6LF.js.map} +0 -0
- /package/dist/{fit-N7WDGWYZ.js.map → fit-Q5GRVF2O.js.map} +0 -0
- /package/dist/{fonts-TTUAP7HS.js.map → fonts-GD4YRXQU.js.map} +0 -0
- /package/dist/{forecast-4AG5F7YC.js.map → forecast-ONVS2QAI.js.map} +0 -0
- /package/dist/{generate-NWHPM2GQ.js.map → generate-VBEY3N3L.js.map} +0 -0
- /package/dist/{google-NAA4BASO.js.map → google-7EZP7I6J.js.map} +0 -0
- /package/dist/{ideas-SUXKKZC7.js.map → ideas-WX7EBPSF.js.map} +0 -0
- /package/dist/{images-VKVZ3DWG.js.map → images-4AXF4LAC.js.map} +0 -0
- /package/dist/{ingest-BBBFT6FZ.js.map → ingest-C3M4GUO6.js.map} +0 -0
- /package/dist/{intent-NSHW7EJT.js.map → intent-ZMYMFGB4.js.map} +0 -0
- /package/dist/{keyword-gap-ITTWKBWZ.js.map → keyword-gap-XSJO2R77.js.map} +0 -0
- /package/dist/{landing-KZ4OSHHR.js.map → landing-MUNYZQNA.js.map} +0 -0
- /package/dist/{languages-MEFQQBJ2.js.map → languages-DIQ3OG3E.js.map} +0 -0
- /package/dist/{line-items-G5YJG25N.js.map → line-items-JR25T2C5.js.map} +0 -0
- /package/dist/{locations-RLWAS6AC.js.map → locations-HTVYJSDJ.js.map} +0 -0
- /package/dist/{lookup-ZJIP2M4X.js.map → lookup-S5VG7AWH.js.map} +0 -0
- /package/dist/{media-ZWN7E777.js.map → media-P4T4ZBNS.js.map} +0 -0
- /package/dist/{media-sources-GKSEDSE3.js.map → media-sources-P246GM7W.js.map} +0 -0
- /package/dist/{meta-EHKXH257.js.map → meta-IPLWNYC7.js.map} +0 -0
- /package/dist/{metrics-K6FDCMK7.js.map → metrics-WYWUX6Y5.js.map} +0 -0
- /package/dist/{models-JQEPSPNQ.js.map → models-HJ7Y55AH.js.map} +0 -0
- /package/dist/{performance-6TPJGM6A.js.map → performance-J3DLNI2W.js.map} +0 -0
- /package/dist/{promoted-tweets-7P4TSQU7.js.map → promoted-tweets-W42FNWS7.js.map} +0 -0
- /package/dist/{query-QM7MBQD7.js.map → query-IQICLABN.js.map} +0 -0
- /package/dist/{reddit-SN5CESF4.js.map → reddit-X4CERXYF.js.map} +0 -0
- /package/dist/{relevant-pages-VOICMQ7U.js.map → relevant-pages-UDDQOYLD.js.map} +0 -0
- /package/dist/{research-QU63CJB5.js.map → research-D5UUJF74.js.map} +0 -0
- /package/dist/{rules-KTJ2ZZ62.js.map → rules-ZVS2MWED.js.map} +0 -0
- /package/dist/{run-2DLA6YO4.js.map → run-T7XAH2W5.js.map} +0 -0
- /package/dist/{scheduled-agents-FRBF4EOK.js.map → scheduled-agents-ZGCUZ6SB.js.map} +0 -0
- /package/dist/{schema-6Y3IXFDC.js.map → schema-D6BMZAPB.js.map} +0 -0
- /package/dist/{sources-77WLFY4Y.js.map → sources-DVMJEXEX.js.map} +0 -0
- /package/dist/{studies-ZOEUY6YP.js.map → studies-EPO2AM4M.js.map} +0 -0
- /package/dist/{studio-T5L7UEX6.js.map → studio-5Z4NMA4K.js.map} +0 -0
- /package/dist/{sync-definition-K4XOAG2B.js.map → sync-definition-F3CXG6KG.js.map} +0 -0
- /package/dist/{tags-ETOOYQ57.js.map → tags-SEZ2CQJM.js.map} +0 -0
- /package/dist/{targeting-criteria-L4DYIJZI.js.map → targeting-criteria-AU5CSMAU.js.map} +0 -0
- /package/dist/{testimonials-65N7IYN7.js.map → testimonials-Y6PUV6AL.js.map} +0 -0
- /package/dist/{themes-B4LCQUXB.js.map → themes-PGPIAKAO.js.map} +0 -0
- /package/dist/{videos-BKVCCKIH.js.map → videos-SVZV5YYC.js.map} +0 -0
- /package/dist/{viewer-check-B5O7ZY3Q.js.map → viewer-check-LUAEGV6H.js.map} +0 -0
- /package/dist/{winning-ads-JIDPISKM.js.map → winning-ads-KNLJHHCO.js.map} +0 -0
- /package/dist/{x-NLGWZCGX.js.map → x-ZQNHYIDU.js.map} +0 -0
|
@@ -0,0 +1,1370 @@
|
|
|
1
|
+
import {
|
|
2
|
+
scaffoldDelivery
|
|
3
|
+
} from "./chunk-PYQ3GF7R.js";
|
|
4
|
+
import {
|
|
5
|
+
NO_FIT_HINT,
|
|
6
|
+
conceptFromFit,
|
|
7
|
+
fitReference,
|
|
8
|
+
notADesignReference,
|
|
9
|
+
pictureOf,
|
|
10
|
+
resolveSourcePlatform
|
|
11
|
+
} from "./chunk-KH5YHHJV.js";
|
|
12
|
+
import {
|
|
13
|
+
makeSeriesAd,
|
|
14
|
+
seriesMadeEnvelope
|
|
15
|
+
} from "./chunk-B4YF7VQF.js";
|
|
16
|
+
import "./chunk-XVFZDPEW.js";
|
|
17
|
+
import {
|
|
18
|
+
runBaker
|
|
19
|
+
} from "./chunk-XUXRA7IB.js";
|
|
20
|
+
import "./chunk-4IHWT7PH.js";
|
|
21
|
+
import "./chunk-3QHXF3QI.js";
|
|
22
|
+
import {
|
|
23
|
+
audienceQuery,
|
|
24
|
+
definitionFieldsOf,
|
|
25
|
+
fitBetOf,
|
|
26
|
+
fitsIdea,
|
|
27
|
+
freshReferencesFirst,
|
|
28
|
+
ideaSpec,
|
|
29
|
+
isOwnBrand,
|
|
30
|
+
isTakenReference,
|
|
31
|
+
isVideoIdea,
|
|
32
|
+
missingElements,
|
|
33
|
+
personaWho,
|
|
34
|
+
pooledCandidates,
|
|
35
|
+
rankedForOf,
|
|
36
|
+
referenceSearchesFor,
|
|
37
|
+
referenceWhereOf,
|
|
38
|
+
setDefinitionFields,
|
|
39
|
+
setSpecMessage,
|
|
40
|
+
setSpecViewer,
|
|
41
|
+
unsourcedCopyLines,
|
|
42
|
+
whyUnfit,
|
|
43
|
+
withFitConcept
|
|
44
|
+
} from "./chunk-I43ZEWJQ.js";
|
|
45
|
+
import "./chunk-AN4OEQXE.js";
|
|
46
|
+
import {
|
|
47
|
+
parseDefinitionDelivery,
|
|
48
|
+
parseDefinitionSourceFields,
|
|
49
|
+
platformsNamedIn,
|
|
50
|
+
projectAdaptBriefs,
|
|
51
|
+
projectFormatBriefs,
|
|
52
|
+
projectStaticBriefs,
|
|
53
|
+
recordedShape,
|
|
54
|
+
reroutedOnSpec,
|
|
55
|
+
thinkingOutline,
|
|
56
|
+
withThinking
|
|
57
|
+
} from "./chunk-GNMEOU46.js";
|
|
58
|
+
import {
|
|
59
|
+
liveViewerLookups,
|
|
60
|
+
readPersonas
|
|
61
|
+
} from "./chunk-5K4QYYOJ.js";
|
|
62
|
+
import "./chunk-XEOKVL4E.js";
|
|
63
|
+
import {
|
|
64
|
+
castInventory,
|
|
65
|
+
companyName
|
|
66
|
+
} from "./chunk-SSXG53CZ.js";
|
|
67
|
+
import "./chunk-WHBFXR6F.js";
|
|
68
|
+
import {
|
|
69
|
+
buildSearchBody
|
|
70
|
+
} from "./chunk-TT7RFKUE.js";
|
|
71
|
+
import "./chunk-NNLVFRF6.js";
|
|
72
|
+
import "./chunk-XB63MQ6E.js";
|
|
73
|
+
import {
|
|
74
|
+
storeProductReads
|
|
75
|
+
} from "./chunk-DQVI7GCX.js";
|
|
76
|
+
import "./chunk-EKX37C3T.js";
|
|
77
|
+
import {
|
|
78
|
+
IDEAS_DIR,
|
|
79
|
+
coverageOf,
|
|
80
|
+
readCreativeRecords,
|
|
81
|
+
readIdeas,
|
|
82
|
+
readInsights,
|
|
83
|
+
readKnowledgeCorpus,
|
|
84
|
+
readPersonaIds
|
|
85
|
+
} from "./chunk-KTZCLJ2D.js";
|
|
86
|
+
import {
|
|
87
|
+
avoidOf,
|
|
88
|
+
memeRegister,
|
|
89
|
+
readCompanyReading,
|
|
90
|
+
readCreativeContext
|
|
91
|
+
} from "./chunk-PJXNCRMR.js";
|
|
92
|
+
import {
|
|
93
|
+
checkIdeas,
|
|
94
|
+
sourcesClaims
|
|
95
|
+
} from "./chunk-MKUA54QE.js";
|
|
96
|
+
import "./chunk-5JJD33Y2.js";
|
|
97
|
+
import "./chunk-VGYIVXIZ.js";
|
|
98
|
+
import "./chunk-6ZFSDYWV.js";
|
|
99
|
+
import "./chunk-G6XKD7QE.js";
|
|
100
|
+
import "./chunk-QPESDKZC.js";
|
|
101
|
+
import {
|
|
102
|
+
holdUnbilledSpend
|
|
103
|
+
} from "./chunk-E44NXCTL.js";
|
|
104
|
+
import {
|
|
105
|
+
findWorkspaceRoot
|
|
106
|
+
} from "./chunk-EJGAJHLB.js";
|
|
107
|
+
import "./chunk-AULSX5ZA.js";
|
|
108
|
+
import "./chunk-UMIX2BMM.js";
|
|
109
|
+
import "./chunk-DGCUPJZD.js";
|
|
110
|
+
import "./chunk-AVYUFJQQ.js";
|
|
111
|
+
import {
|
|
112
|
+
SPEC_SHAPES_HINT,
|
|
113
|
+
decisionOf,
|
|
114
|
+
isVital,
|
|
115
|
+
readAdSpec,
|
|
116
|
+
unwrittenProblems
|
|
117
|
+
} from "./chunk-QHZE62GP.js";
|
|
118
|
+
import {
|
|
119
|
+
askAboutImages,
|
|
120
|
+
askAboutText
|
|
121
|
+
} from "./chunk-FJZYOVSW.js";
|
|
122
|
+
import "./chunk-F3CZFUXZ.js";
|
|
123
|
+
import {
|
|
124
|
+
describeMarket,
|
|
125
|
+
marketFromCompanyDoc,
|
|
126
|
+
viewerFromKnowledge
|
|
127
|
+
} from "./chunk-2WZI36D3.js";
|
|
128
|
+
import "./chunk-65Y3RCWP.js";
|
|
129
|
+
import {
|
|
130
|
+
askJevQuestions
|
|
131
|
+
} from "./chunk-LNNTHEL7.js";
|
|
132
|
+
import "./chunk-FOMFU2RX.js";
|
|
133
|
+
import "./chunk-PSGIHSNC.js";
|
|
134
|
+
import "./chunk-PONLPYD7.js";
|
|
135
|
+
import "./chunk-NZ34KM46.js";
|
|
136
|
+
import "./chunk-CAZGM2NX.js";
|
|
137
|
+
import "./chunk-NZS3KEQ2.js";
|
|
138
|
+
import "./chunk-GIWHHCD6.js";
|
|
139
|
+
import "./chunk-SOPVIIUW.js";
|
|
140
|
+
import "./chunk-G4FG5EQO.js";
|
|
141
|
+
import "./chunk-NSBNIPIW.js";
|
|
142
|
+
import "./chunk-MUS2UTWU.js";
|
|
143
|
+
import {
|
|
144
|
+
apiPost
|
|
145
|
+
} from "./chunk-X7VQFLHI.js";
|
|
146
|
+
import "./chunk-LU4HI4KI.js";
|
|
147
|
+
import {
|
|
148
|
+
optionalChatId
|
|
149
|
+
} from "./chunk-LGK7UWBN.js";
|
|
150
|
+
import {
|
|
151
|
+
registerSchema,
|
|
152
|
+
writeJson
|
|
153
|
+
} from "./chunk-Q7US4OOA.js";
|
|
154
|
+
import "./chunk-YQSBHWOI.js";
|
|
155
|
+
|
|
156
|
+
// src/commands/creatives/make.ts
|
|
157
|
+
import { mkdir as mkdir2, mkdtemp, readdir, readFile as readFile2, rm, stat, writeFile as writeFile2 } from "fs/promises";
|
|
158
|
+
import { tmpdir } from "os";
|
|
159
|
+
import path2 from "path";
|
|
160
|
+
import { defineCommand } from "citty";
|
|
161
|
+
|
|
162
|
+
// src/commands/creatives/reference-brief.ts
|
|
163
|
+
import { createHash } from "crypto";
|
|
164
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
165
|
+
import path from "path";
|
|
166
|
+
import { z } from "zod";
|
|
167
|
+
var text = z.string().transform((s) => s.trim()).pipe(z.string().min(1)).optional().catch(void 0);
|
|
168
|
+
var shortList = (max) => z.array(z.string()).transform(
|
|
169
|
+
(list) => list.map((s) => s.trim()).filter(Boolean).slice(0, max)
|
|
170
|
+
).catch([]);
|
|
171
|
+
var BriefSchema = z.object({
|
|
172
|
+
category: text,
|
|
173
|
+
industry: text,
|
|
174
|
+
audience: text,
|
|
175
|
+
buyer: z.enum(["consumer", "small_business", "enterprise"]).optional().catch(void 0),
|
|
176
|
+
country: z.string().transform((s) => s.trim().toUpperCase()).pipe(z.union([z.literal("").transform(() => null), z.string().regex(/^[A-Z]{2}$/)])).optional().catch(void 0),
|
|
177
|
+
humour: z.enum(["fits", "risky", "off_brand"]).optional().catch(void 0),
|
|
178
|
+
avoid: shortList(5),
|
|
179
|
+
brands: shortList(4),
|
|
180
|
+
wider: shortList(4),
|
|
181
|
+
shows: shortList(2)
|
|
182
|
+
});
|
|
183
|
+
function parseReferenceBrief(reply) {
|
|
184
|
+
const parsed = BriefSchema.safeParse(reply);
|
|
185
|
+
if (!parsed.success || !parsed.data.category) return null;
|
|
186
|
+
const { category, avoid, brands, wider, shows, ...rest } = parsed.data;
|
|
187
|
+
const known = Object.fromEntries(Object.entries(rest).filter(([, v]) => v !== void 0));
|
|
188
|
+
return { category, ...known, avoid, brands, wider, ...shows.length > 0 ? { shows } : {} };
|
|
189
|
+
}
|
|
190
|
+
var REFERENCE_BRIEF_MODEL = "google/gemini-3.5-flash-lite";
|
|
191
|
+
var REFERENCE_BRIEF_REQUEST = {
|
|
192
|
+
provider: { order: ["google-vertex"], allow_fallbacks: false },
|
|
193
|
+
seed: 0,
|
|
194
|
+
temperature: 0,
|
|
195
|
+
response_format: { type: "json_object" }
|
|
196
|
+
};
|
|
197
|
+
var REFERENCE_BRIEF_TIMEOUT_MS = 2e4;
|
|
198
|
+
var MAX_COMPANY_CHARS = 12e3;
|
|
199
|
+
function referenceBriefPrompt(companyDoc, ad) {
|
|
200
|
+
return `You prepare a search of a library of proven ads (Meta, LinkedIn, TikTok, Google) for the ad below. The library's search reads short English phrases the way it files ads: by what the ad sells, its industry and who it is for.
|
|
201
|
+
|
|
202
|
+
The company (its own notes):
|
|
203
|
+
"""
|
|
204
|
+
${companyDoc.slice(0, MAX_COMPANY_CHARS)}
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
The ad we are making:
|
|
208
|
+
- Says: ${ad.message}
|
|
209
|
+
- For: ${ad.who}${ad.shows ? `
|
|
210
|
+
- Shows first: ${ad.shows}` : ""}
|
|
211
|
+
|
|
212
|
+
Answer only JSON:
|
|
213
|
+
{
|
|
214
|
+
"category": "what THIS ad sells, 2-6 plain English words a library would file it under, no brand names (e.g. 'electrician training course', 'pet health insurance', 'ecommerce customer service AI')",
|
|
215
|
+
"industry": "the broader industry, 1-3 English words (e.g. 'vocational education', 'insurance', 'customer service software')",
|
|
216
|
+
"audience": "who the ad is for and the problem they have, 4-9 plain English words (e.g. 'unemployed adults looking for a stable trade')",
|
|
217
|
+
"wider": ["4 library searches of 2-6 English words that widen from this ad, closest first, for when ads of exactly this product are few. 1: an adjacent product the same buyer weighs (e.g. 'tennis court construction'). 2: the same buyer buying something else (e.g. 'gym and sports club owners'). 3 and 4: the same kind of decision with NO word of this product's category, as other industries sell it (e.g. for a padel-court builder: 'turnkey franchise investment', 'commercial real estate investment'; for an acne serum: 'skincare before and after'). Never brand names"]${ad.shows ? `,
|
|
218
|
+
"shows": ["2 library searches of 6-14 English words for the KIND of picture 'Shows first' describes, the way the library describes an ad's visual: the device and what it contrasts or proves, with no word of this product, no numbers and no brand (e.g. for 'a calendar strip, 9 days green against 31 grey': 'time comparison graphic: the usual long wait against a much shorter one', 'two bars side by side, ours far shorter than the competition'; for 'a phone with missed calls next to a quote': 'phone screen full of missed calls and notifications, the stress of chasing')"]` : ""}
|
|
219
|
+
}`;
|
|
220
|
+
}
|
|
221
|
+
var askBriefModel = (root) => async (prompt) => {
|
|
222
|
+
const spent = [];
|
|
223
|
+
const answer = await askAboutText(REFERENCE_BRIEF_MODEL, prompt, (u) => spent.push(u), {
|
|
224
|
+
timeoutMs: REFERENCE_BRIEF_TIMEOUT_MS,
|
|
225
|
+
request: REFERENCE_BRIEF_REQUEST
|
|
226
|
+
}).catch(() => null);
|
|
227
|
+
await holdUnbilledSpend(path.join(root, "canvas", ".cache"), spent).catch(() => void 0);
|
|
228
|
+
return answer;
|
|
229
|
+
};
|
|
230
|
+
var briefCachePath = (root, key) => path.join(root, "canvas", ".cache", "reference-brief", `${key}.json`);
|
|
231
|
+
async function referenceBriefFor(root, ad, ask = askBriefModel(root)) {
|
|
232
|
+
const companyDoc = await readFile(path.join(root, "COMPANY.md"), "utf8").catch(() => "");
|
|
233
|
+
const [company, own] = await Promise.all([readCompanyReading(root, ask), adBrief(root, companyDoc, ad, ask)]);
|
|
234
|
+
if (!own) return null;
|
|
235
|
+
const {
|
|
236
|
+
sells: _sells,
|
|
237
|
+
category: _category,
|
|
238
|
+
industry,
|
|
239
|
+
memes: _memes,
|
|
240
|
+
memes_why: _why,
|
|
241
|
+
...facts
|
|
242
|
+
} = company ?? { brands: [] };
|
|
243
|
+
const register = memeRegister(company);
|
|
244
|
+
return {
|
|
245
|
+
...facts,
|
|
246
|
+
...register ? { memes: register.memes, ...register.why ? { memesWhy: register.why } : {} } : {},
|
|
247
|
+
...own,
|
|
248
|
+
...own.industry ?? industry ? { industry: own.industry ?? industry } : {},
|
|
249
|
+
brands: own.brands.length > 0 ? own.brands : facts.brands
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
async function adBrief(root, companyDoc, ad, ask) {
|
|
253
|
+
const prompt = referenceBriefPrompt(companyDoc, ad);
|
|
254
|
+
const file = briefCachePath(root, createHash("sha256").update(prompt).digest("hex").slice(0, 16));
|
|
255
|
+
const cached = await readFile(file, "utf8").then((raw) => parseReferenceBrief(JSON.parse(raw))).catch(() => null);
|
|
256
|
+
if (cached) return cached;
|
|
257
|
+
const brief = parseReferenceBrief(await ask(prompt));
|
|
258
|
+
if (!brief) return null;
|
|
259
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
260
|
+
await writeFile(file, `${JSON.stringify(brief, null, 2)}
|
|
261
|
+
`, "utf8");
|
|
262
|
+
return brief;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// src/commands/creatives/reference-rank.ts
|
|
266
|
+
var BUYERS = {
|
|
267
|
+
consumer: "people buying for themselves",
|
|
268
|
+
small_business: "small businesses buying for work",
|
|
269
|
+
enterprise: "large companies buying for work"
|
|
270
|
+
};
|
|
271
|
+
function memesLine(bet) {
|
|
272
|
+
return bet.memes === "off_brand" ? ` Our brand's voice does not run memes${bet.memesWhy ? ` (${bet.memesWhy})` : ""}: rank meme and reaction-face ads last.` : "";
|
|
273
|
+
}
|
|
274
|
+
function oursText(bet) {
|
|
275
|
+
const sells = `${bet.category}${bet.industry ? ` (${bet.industry})` : ""}`;
|
|
276
|
+
const buyer = bet.buyer ? `, to ${BUYERS[bet.buyer]}` : "";
|
|
277
|
+
const humour = bet.humour === "off_brand" ? " Our brand does not joke in ads." : "";
|
|
278
|
+
const avoid = bet.avoid?.length ? ` Our brand never uses: ${bet.avoid.join(", ")}.` : "";
|
|
279
|
+
const shows = bet.shows ? ` It shows: ${bet.shows}.` : "";
|
|
280
|
+
return `We sell: ${sells}${buyer}. Our ad says: "${bet.message}". It is for: ${bet.who}.${shows}${humour}${memesLine(bet)}${avoid}`;
|
|
281
|
+
}
|
|
282
|
+
function cardText(c) {
|
|
283
|
+
const d = c.dna ?? {};
|
|
284
|
+
const line = (label, value) => value ? `${label}: ${value}` : "";
|
|
285
|
+
return [
|
|
286
|
+
line("Advertiser", c.advertiser),
|
|
287
|
+
line("Industry", [d.industry, d.business_model].filter(Boolean).join(", ")),
|
|
288
|
+
line("Made for", d.target_persona),
|
|
289
|
+
line("Looks like", [d.container ?? c.format, d.visual].filter(Boolean).join(": ")),
|
|
290
|
+
line("Concept", d.creative_concept),
|
|
291
|
+
line("Why it works", d.mechanism)
|
|
292
|
+
].filter(Boolean).join("\n").slice(0, 1400);
|
|
293
|
+
}
|
|
294
|
+
var QUESTIONS_PER_REQUEST = 60;
|
|
295
|
+
var QUESTIONS = [
|
|
296
|
+
"Was `ad` made for the same kind of buyer as `ours`: a person buying for themselves, or a business buying for work, of a similar size?",
|
|
297
|
+
"Would the viewer `ours` is for feel that `ad` speaks to someone like them, about a problem like theirs?",
|
|
298
|
+
"Could the brand of `ours` run an ad made like `ad` (its look, its tone, its kind of hook) without breaking its own rules or looking out of character?"
|
|
299
|
+
];
|
|
300
|
+
var SHOWS_QUESTION = "Does `ad` show what `ours` shows (its `It shows:`), or the same kind of picture doing the same job, so that ours could be made in its image?";
|
|
301
|
+
var REMADE_QUESTION = "Remade with the product, people and words of `ours`, would a picture made like `ad` speak to the viewer `ours` is for, about a problem like theirs?";
|
|
302
|
+
function questionsFor(bet) {
|
|
303
|
+
return bet.shows ? [SHOWS_QUESTION, REMADE_QUESTION, QUESTIONS[2] ?? ""] : QUESTIONS;
|
|
304
|
+
}
|
|
305
|
+
async function rankForBet(candidates, bet, askOverride, onSpend) {
|
|
306
|
+
const ask = askOverride ?? ((questions2) => askJevQuestions(questions2, onSpend));
|
|
307
|
+
if (candidates.length < 2) return [...candidates];
|
|
308
|
+
const ours = oursText(bet);
|
|
309
|
+
const asks = questionsFor(bet);
|
|
310
|
+
const questions = candidates.flatMap(
|
|
311
|
+
(c) => asks.map((question) => ({ type: "noul", instructions: { ours, ad: cardText(c), question } }))
|
|
312
|
+
);
|
|
313
|
+
const parts = [];
|
|
314
|
+
for (let start = 0; start < questions.length; start += QUESTIONS_PER_REQUEST) {
|
|
315
|
+
parts.push(questions.slice(start, start + QUESTIONS_PER_REQUEST));
|
|
316
|
+
}
|
|
317
|
+
const replies = await Promise.all(parts.map((part) => ask(part).catch(() => null)));
|
|
318
|
+
if (replies.some((r, i) => !r || r.length !== parts[i]?.length)) return [...candidates];
|
|
319
|
+
const answers = replies.flatMap((r) => r ?? []);
|
|
320
|
+
const scored = candidates.map((c, i) => ({
|
|
321
|
+
c,
|
|
322
|
+
i,
|
|
323
|
+
score: asks.reduce((product, _, k) => {
|
|
324
|
+
const answer = answers[i * asks.length + k];
|
|
325
|
+
return product * (answer && "noul" in answer ? answer.noul : 0.5);
|
|
326
|
+
}, 1)
|
|
327
|
+
}));
|
|
328
|
+
return scored.sort((a, b) => b.score - a.score || a.i - b.i).map((s) => s.c);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// src/commands/creatives/reference-pick.ts
|
|
332
|
+
var REFERENCE_PICK_MODEL = "~google/gemini-pro-latest";
|
|
333
|
+
var REFERENCE_PICK_TIMEOUT_MS = 6e4;
|
|
334
|
+
function vitalRead(fit) {
|
|
335
|
+
const vital = (fit.load_bearing ?? []).filter(isVital).map((l) => {
|
|
336
|
+
const ours = decisionOf(l) === "keep" ? "kept as it is" : l.ours?.trim() ? `ours: ${l.ours.trim()}` : "";
|
|
337
|
+
return `${l.job === "stop" ? "stops the scroll with" : "proof:"} ${l.element}${ours ? ` (${ours})` : ""}`;
|
|
338
|
+
});
|
|
339
|
+
return vital.length > 0 ? ` It ${vital.join("; ")}.` : "";
|
|
340
|
+
}
|
|
341
|
+
var TAKE_ELEMENTS = ["hook", "visual", "who_appears", "proof", "layout", "call_to_action"];
|
|
342
|
+
function referencePickPrompt(options, bet) {
|
|
343
|
+
const reads = options.map((o, i) => {
|
|
344
|
+
const wins = Object.values(o.fit.why_it_wins ?? {}).filter(Boolean).join("; ");
|
|
345
|
+
const viewer = o.fit.our_viewer ? ` Our viewer: ${o.fit.our_viewer.stops}, ${o.fit.our_viewer.why}` : "";
|
|
346
|
+
return `${i + 1}. ${o.advertiser ?? "an advertiser"}: wins on ${wins || "(not read)"}.${vitalRead(o.fit)}${viewer}`;
|
|
347
|
+
}).join("\n");
|
|
348
|
+
const avoid = bet.avoid?.length ? ` The brand never uses: ${bet.avoid.join(", ").replace(/\.$/, "")}. Its rules forbid only what they name: "no stock photography" never rules out a meme's reaction face, our own people or our Avatars.` : "";
|
|
349
|
+
const humour = `${bet.humour === "off_brand" ? " The brand does not joke in ads." : ""}${memesLine(bet)}`;
|
|
350
|
+
return `Pick the proven ad our next ad should be built on. Images 1..${options.length} are proven ads of other advertisers, each already checked to be adaptable.
|
|
351
|
+
|
|
352
|
+
We sell: ${bet.category}${bet.industry ? ` (${bet.industry})` : ""}. Our ad says: "${bet.message}". It is for: ${bet.who}.${bet.shows ? ` It shows first: ${bet.shows}; the ad built on wins only if it can show that as strongly as its own picture shows its offer.` : ""}${humour}${avoid}
|
|
353
|
+
|
|
354
|
+
What the check read of each:
|
|
355
|
+
${reads}
|
|
356
|
+
|
|
357
|
+
Rank them by how likely a version of each, made for us, stops this exact viewer and makes them act: the viewer must see themselves and their problem in it, its winning move must carry our offer as strongly as theirs, and our brand must be able to run it.
|
|
358
|
+
|
|
359
|
+
Then, as a media buyer does, say what our ad takes. Our ad may combine several: the hook of one, the visual of another, the proof of a third. For each element worth taking (${TAKE_ELEMENTS.join(", ")}), the image whose version of it would work best for us, exactly what to take, and why it applies to this viewer. Leave out an element no image does well for us. Then what our ad must not copy from them: a device that misleads or that the platform restricts (a fake newspaper or news page, a fake app notification), dated urgency, another brand's marks, words that hide what is sold; never what stops the scroll or the proof, which ours keeps as named above. A rule forbids only what it names: "no stock photography" never rules out a meme's reaction face, our own people or our Avatars; when a rule of ours is why, quote the rule word for word.
|
|
360
|
+
|
|
361
|
+
Answer only JSON: {"ranking": [image numbers, best first], "why": "one sentence on why the first beats the others", "takes": [{"element": "hook", "from": image number, "what": "...", "applies": "..."}], "avoid": [{"from": image number, "what": "...", "why": "..."}]}`;
|
|
362
|
+
}
|
|
363
|
+
function readPickRanking(reply, count) {
|
|
364
|
+
const ranking = reply?.ranking;
|
|
365
|
+
if (!Array.isArray(ranking)) return null;
|
|
366
|
+
const order = [];
|
|
367
|
+
for (const n of ranking) {
|
|
368
|
+
const index = Number(n) - 1;
|
|
369
|
+
if (Number.isInteger(index) && index >= 0 && index < count && !order.includes(index)) order.push(index);
|
|
370
|
+
}
|
|
371
|
+
if (order.length === 0) return null;
|
|
372
|
+
for (let i = 0; i < count; i++) if (!order.includes(i)) order.push(i);
|
|
373
|
+
return order;
|
|
374
|
+
}
|
|
375
|
+
var text2 = (value) => typeof value === "string" ? value.trim() : "";
|
|
376
|
+
function adOf(from, options) {
|
|
377
|
+
return options[Number(from) - 1]?.adId ?? null;
|
|
378
|
+
}
|
|
379
|
+
function readTakes(reply, options) {
|
|
380
|
+
const takes = reply?.takes;
|
|
381
|
+
if (!Array.isArray(takes)) return [];
|
|
382
|
+
const read = [];
|
|
383
|
+
for (const t of takes) {
|
|
384
|
+
const element = TAKE_ELEMENTS.find((e) => e === t?.element);
|
|
385
|
+
const adId = adOf(t?.from, options);
|
|
386
|
+
if (!element || !adId || !text2(t.what) || read.some((r) => r.element === element)) continue;
|
|
387
|
+
read.push({ element, adId, what: text2(t.what), applies: text2(t.applies) });
|
|
388
|
+
}
|
|
389
|
+
return read;
|
|
390
|
+
}
|
|
391
|
+
function readAvoid(reply, options) {
|
|
392
|
+
const avoid = reply?.avoid;
|
|
393
|
+
if (!Array.isArray(avoid)) return [];
|
|
394
|
+
return avoid.flatMap((a) => {
|
|
395
|
+
const adId = adOf(a?.from, options);
|
|
396
|
+
return adId && text2(a.what) ? [{ adId, what: text2(a.what), why: text2(a.why) }] : [];
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
var askPickModel = (onSpend) => (pictures, prompt) => askAboutImages(REFERENCE_PICK_MODEL, pictures, prompt, onSpend, REFERENCE_PICK_TIMEOUT_MS).catch(() => null);
|
|
400
|
+
async function pickAmong(options, bet, ask = askPickModel()) {
|
|
401
|
+
const reply = await ask(
|
|
402
|
+
options.map((o) => o.picture),
|
|
403
|
+
referencePickPrompt(options, bet)
|
|
404
|
+
);
|
|
405
|
+
const order = readPickRanking(reply, options.length);
|
|
406
|
+
if (!order) return null;
|
|
407
|
+
const why = text2(reply.why);
|
|
408
|
+
const takes = readTakes(reply, options);
|
|
409
|
+
const avoid = readAvoid(reply, options);
|
|
410
|
+
return {
|
|
411
|
+
order,
|
|
412
|
+
...why ? { why } : {},
|
|
413
|
+
...takes.length > 0 ? { takes } : {},
|
|
414
|
+
...avoid.length > 0 ? { avoid } : {}
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// src/commands/creatives/make.ts
|
|
419
|
+
var FITS_TRIED = 6;
|
|
420
|
+
var FITS_AT_ONCE = 3;
|
|
421
|
+
var RANKED_POOL = 24;
|
|
422
|
+
var SEARCH_TIMEOUT_MS = 12e4;
|
|
423
|
+
var REFERENCE_MS = 15e4;
|
|
424
|
+
var DESCRIPTION = `Build one idea from src/creatives/_ideas/ into a creative. For a static it builds on a proven winning ad: it reads what this ad sells and for whom, searches ads of that in its market (the idea's container first, then any), then ads made for the idea's persona, its industry, the idea's message, then the container's strongest winners from any category; leaves out the company's own ads, ranks the rest for this ad's buyer, viewer and brand (a proven ad, or brand, another creative is already built on last, so a batch of ideas builds on different winners), checks which fit us (one whose scroll-stopper or proof cannot be ours is passed over, and the first hint says which and why) and, when several do, compares them side by side, scaffolds the creative on the best-ranked one, records the idea on it and sets the ad's message. The fit says what made that ad win, so what ours carries of it (\`reference.carry\`: whole_ad, layout, hook or angle); its first hint names the ad: tell the person. When no proven ad fits, it starts the ad from the idea itself and says why (never a dead end, never retry with another format). You then write the copy lines and the scene in prompt.json and run it. Takes up to about two and a half minutes: run it in the foreground, once per idea.
|
|
425
|
+
|
|
426
|
+
Where the ad runs decides its sizes (Meta 4:5 + 9:16, LinkedIn 1:1, TikTok 9:16): it is the idea's \`platforms\`, or --platforms from the person's request; nothing saying so is refused, never defaulted to Meta.
|
|
427
|
+
|
|
428
|
+
Start here, with an idea from \`baker creatives ideas\` build_next:
|
|
429
|
+
baker creatives make phone-payroll # static: reference found and checked for you
|
|
430
|
+
baker creatives make phone-payroll --platforms linkedin # where it runs, when the idea does not say
|
|
431
|
+
baker creatives make phone-payroll --adset 120210000000 # written for that ad set's viewer
|
|
432
|
+
baker creatives make phone-payroll --reference 1310524137919413 # your own reference instead
|
|
433
|
+
baker creatives make founder-story --spec beats.json # a video idea: from its beats spec
|
|
434
|
+
baker creatives make phone-payroll --slug phone-payroll-h2 # another hook of the same idea
|
|
435
|
+
baker creatives make tiktok-speed --series zernio-live # another message in the style of a ready ad
|
|
436
|
+
Then: edit src/creatives/<slug>/prompt.json (copy + scene; the message is set), and \`baker canvas run src/creatives/<slug>/<slug>.canvas.json\`.`;
|
|
437
|
+
var ARGS = {
|
|
438
|
+
idea: { type: "positional", required: true, description: "The idea id (src/creatives/_ideas/<idea>.md)" },
|
|
439
|
+
slug: { type: "string", required: false, description: "Creative slug (default: the idea id)" },
|
|
440
|
+
adset: { type: "string", required: false, description: "Meta ad set the ad is for: its viewer and placements" },
|
|
441
|
+
reference: {
|
|
442
|
+
type: "string",
|
|
443
|
+
required: false,
|
|
444
|
+
description: "A library ad id to build on instead of searching (statics)"
|
|
445
|
+
},
|
|
446
|
+
platforms: {
|
|
447
|
+
type: "string",
|
|
448
|
+
required: false,
|
|
449
|
+
description: "Where the ad runs, the main platform first: meta (4:5 + 9:16), linkedin (1:1), tiktok (9:16), google_demandgen, \u2026 Take it from the person's request; default the creative's definition (and the sizes it records), then the idea's `platforms`, then the ad set's (Meta). Nothing saying so is refused, never defaulted."
|
|
450
|
+
},
|
|
451
|
+
formats: {
|
|
452
|
+
type: "string",
|
|
453
|
+
required: false,
|
|
454
|
+
description: "Exactly the sizes to make, when the person asks for others than the platform's (`--platforms linkedin --formats 1:1,4:5`)."
|
|
455
|
+
},
|
|
456
|
+
"reference-platform": {
|
|
457
|
+
type: "string",
|
|
458
|
+
required: false,
|
|
459
|
+
description: "Library platform of --reference: meta|linkedin|tiktok|google (default meta). On google only display ads are built on (a static needs a picture)"
|
|
460
|
+
},
|
|
461
|
+
platform: {
|
|
462
|
+
type: "string",
|
|
463
|
+
required: false,
|
|
464
|
+
description: "Retired: --platforms says where the ad runs; --reference-platform says which library --reference is in."
|
|
465
|
+
},
|
|
466
|
+
spec: {
|
|
467
|
+
type: "string",
|
|
468
|
+
required: false,
|
|
469
|
+
description: "Video ideas: the beats spec for `baker canvas scaffold-ad --spec`"
|
|
470
|
+
},
|
|
471
|
+
series: {
|
|
472
|
+
type: "string",
|
|
473
|
+
required: false,
|
|
474
|
+
description: "Statics: make this idea as another ad of the series led by this creative (its slug): the same design, only its words changed. No reference is searched; seconds. The lead must have a ready version. Then write its words and run the whole series: baker canvas run --series <lead>"
|
|
475
|
+
},
|
|
476
|
+
avatar: {
|
|
477
|
+
type: "string",
|
|
478
|
+
required: false,
|
|
479
|
+
description: "Statics: the Avatar(s) the ad's people are cast as (`@eduard` or `eduard,lucia`; `baker avatars list`). Run make again with it once the definition decides the cast, before prompt.json is written: it rebuilds the canvas on them and keeps the thinking"
|
|
480
|
+
},
|
|
481
|
+
"from-idea": {
|
|
482
|
+
type: "boolean",
|
|
483
|
+
required: false,
|
|
484
|
+
default: false,
|
|
485
|
+
description: "Statics: skip the reference search and start from the idea (what make does by itself when no proven ad fits)"
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
registerSchema({ command: "creatives.make", description: DESCRIPTION, args: ARGS });
|
|
489
|
+
function fail(error) {
|
|
490
|
+
writeJson({ ok: false, error });
|
|
491
|
+
process.exit(1);
|
|
492
|
+
}
|
|
493
|
+
async function viewerTemperature(root, adSet, awareness) {
|
|
494
|
+
if (adSet) {
|
|
495
|
+
const read = await liveViewerLookups(root).adSetViewer(adSet).catch(() => null);
|
|
496
|
+
if (read) return read.temperature;
|
|
497
|
+
}
|
|
498
|
+
return viewerFromKnowledge({ personas: [], awareness }).temperature;
|
|
499
|
+
}
|
|
500
|
+
var PASSED_SAID = 3;
|
|
501
|
+
function passedOver(candidates, fits) {
|
|
502
|
+
return candidates.flatMap((candidate, i) => {
|
|
503
|
+
const fit = fits[i];
|
|
504
|
+
if (!fit?.ok || fitsIdea(fit.fit)) return [];
|
|
505
|
+
return [
|
|
506
|
+
{
|
|
507
|
+
adId: String(candidate.ad_id),
|
|
508
|
+
...candidate.advertiser ? { advertiser: candidate.advertiser } : {},
|
|
509
|
+
why: whyUnfit(fit.fit)
|
|
510
|
+
}
|
|
511
|
+
];
|
|
512
|
+
}).slice(0, PASSED_SAID);
|
|
513
|
+
}
|
|
514
|
+
function candidatePlatform(c) {
|
|
515
|
+
const resolved = resolveSourcePlatform(typeof c.platform === "string" ? c.platform : void 0);
|
|
516
|
+
return resolved.ok ? resolved.platform : null;
|
|
517
|
+
}
|
|
518
|
+
function buildable(c) {
|
|
519
|
+
const platform = candidatePlatform(c);
|
|
520
|
+
if (!platform || notADesignReference(platform, String(c.ad_id), { format: c.format ?? null })) return [];
|
|
521
|
+
return [{ ...c, platform }];
|
|
522
|
+
}
|
|
523
|
+
function liveReferenceDeps(root, bet, rankedFor, brands = []) {
|
|
524
|
+
return {
|
|
525
|
+
search: async (body) => {
|
|
526
|
+
const ask = () => apiPost("/api/ad-library/winners/search", body, {
|
|
527
|
+
timeoutMs: SEARCH_TIMEOUT_MS
|
|
528
|
+
}).catch(() => null);
|
|
529
|
+
return (await ask() ?? await ask())?.results ?? null;
|
|
530
|
+
},
|
|
531
|
+
fit: (platform, adId) => fitReference(root, platform, adId, bet),
|
|
532
|
+
...rankedFor ? {
|
|
533
|
+
rank: async (found) => {
|
|
534
|
+
const spent = [];
|
|
535
|
+
try {
|
|
536
|
+
return await rankForBet(
|
|
537
|
+
found.filter((c) => !isOwnBrand(c.advertiser, brands)),
|
|
538
|
+
rankedFor,
|
|
539
|
+
void 0,
|
|
540
|
+
(u) => spent.push(u)
|
|
541
|
+
);
|
|
542
|
+
} finally {
|
|
543
|
+
await holdUnbilledSpend(path2.join(root, "canvas", ".cache"), spent).catch(() => void 0);
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
choose: (fitting) => chooseLive(root, fitting, rankedFor)
|
|
547
|
+
} : {}
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
async function chooseLive(root, fitting, rankedFor) {
|
|
551
|
+
const options = (await Promise.all(
|
|
552
|
+
fitting.map(async (f) => {
|
|
553
|
+
const picture = await pictureOf(f.candidate.media_url);
|
|
554
|
+
return picture ? [
|
|
555
|
+
{
|
|
556
|
+
adId: f.adId,
|
|
557
|
+
picture,
|
|
558
|
+
fit: f.fit,
|
|
559
|
+
...f.candidate.advertiser ? { advertiser: f.candidate.advertiser } : {}
|
|
560
|
+
}
|
|
561
|
+
] : [];
|
|
562
|
+
})
|
|
563
|
+
)).flat();
|
|
564
|
+
if (options.length < 2) return null;
|
|
565
|
+
const spent = [];
|
|
566
|
+
const picked = await pickAmong(
|
|
567
|
+
options,
|
|
568
|
+
rankedFor,
|
|
569
|
+
askPickModel((u) => spent.push(u))
|
|
570
|
+
);
|
|
571
|
+
await holdUnbilledSpend(path2.join(root, "canvas", ".cache"), spent).catch(() => void 0);
|
|
572
|
+
if (!picked) return null;
|
|
573
|
+
const byAd = new Map(fitting.map((f, i) => [f.adId, i]));
|
|
574
|
+
const order = picked.order.flatMap((i) => {
|
|
575
|
+
const at = byAd.get(options[i]?.adId ?? "");
|
|
576
|
+
return at === void 0 ? [] : [at];
|
|
577
|
+
});
|
|
578
|
+
return { ...picked, order };
|
|
579
|
+
}
|
|
580
|
+
async function findCandidates(searches, deps) {
|
|
581
|
+
const results = await Promise.all(searches.map((search) => deps.search(search).catch(() => null)));
|
|
582
|
+
const topics = searches.flatMap((search, i) => search.free_text_query ? [results[i]] : []);
|
|
583
|
+
if (topics.length > 0 && topics.every((found) => found === null)) return "unavailable";
|
|
584
|
+
const pooled = pooledCandidates(
|
|
585
|
+
results.map((found) => (found ?? []).flatMap(buildable)),
|
|
586
|
+
deps.rank ? RANKED_POOL : FITS_TRIED
|
|
587
|
+
);
|
|
588
|
+
const fresh = (found) => deps.taken ? freshReferencesFirst(found, deps.taken) : found;
|
|
589
|
+
if (!deps.rank) return fresh(pooled);
|
|
590
|
+
const ranked = await deps.rank(pooled).catch(() => pooled);
|
|
591
|
+
return fresh(ranked.flatMap(buildable)).slice(0, FITS_TRIED);
|
|
592
|
+
}
|
|
593
|
+
var candidateOf = (c) => ({
|
|
594
|
+
adId: String(c.ad_id),
|
|
595
|
+
platform: c.platform,
|
|
596
|
+
...c.advertiser_id ? { advertiserId: c.advertiser_id } : {}
|
|
597
|
+
});
|
|
598
|
+
async function pickReference(root, searches, deps = liveReferenceDeps(root), prepare, within) {
|
|
599
|
+
const out = whenAborted(within);
|
|
600
|
+
const found = await Promise.race([findCandidates(searches, deps), out]);
|
|
601
|
+
if (found === "out") return slowReference();
|
|
602
|
+
if (found === "unavailable") return searchUnavailable();
|
|
603
|
+
const candidates = found.slice(0, FITS_TRIED);
|
|
604
|
+
const first = candidates[0];
|
|
605
|
+
const stop = new AbortController();
|
|
606
|
+
const building = first && prepare ? prepare(candidateOf(first), stop.signal) : void 0;
|
|
607
|
+
void building?.catch(() => void 0);
|
|
608
|
+
let settled = false;
|
|
609
|
+
const asked = [];
|
|
610
|
+
const askNext = () => {
|
|
611
|
+
const index = asked.length;
|
|
612
|
+
const candidate = candidates[index];
|
|
613
|
+
if (settled || !candidate) return;
|
|
614
|
+
asked.push(
|
|
615
|
+
askFit(deps, candidate).then((fit) => {
|
|
616
|
+
if (!(fit.ok && fitsIdea(fit.fit))) askNext();
|
|
617
|
+
return fit;
|
|
618
|
+
})
|
|
619
|
+
);
|
|
620
|
+
};
|
|
621
|
+
for (let slot = 0; slot < FITS_AT_ONCE; slot++) askNext();
|
|
622
|
+
const deciding = deps.choose ? chosenFitting(candidates, asked, deps.choose, deps.taken) : firstFitting(candidates, asked);
|
|
623
|
+
const kept = await Promise.race([deciding, out]);
|
|
624
|
+
settled = true;
|
|
625
|
+
if (kept === "out") {
|
|
626
|
+
stop.abort();
|
|
627
|
+
return { ...slowReference(), ...building ? { discarded: building } : {} };
|
|
628
|
+
}
|
|
629
|
+
if (kept.index !== 0) stop.abort();
|
|
630
|
+
const speculated = building ? kept.index === 0 ? { prepared: building } : { discarded: building } : {};
|
|
631
|
+
return { ...kept.picked, ...speculated };
|
|
632
|
+
}
|
|
633
|
+
var askFit = (deps, c) => Promise.resolve().then(() => deps.fit(c.platform, String(c.ad_id))).catch((e) => ({ ok: false, error: { code: "UNAVAILABLE", message: String(e), fix: "" } }));
|
|
634
|
+
var whenAborted = (signal) => new Promise((resolve) => {
|
|
635
|
+
if (signal?.aborted) resolve("out");
|
|
636
|
+
signal?.addEventListener("abort", () => resolve("out"), { once: true });
|
|
637
|
+
});
|
|
638
|
+
function pickedOf(candidate, fit, index, preferred) {
|
|
639
|
+
const layers = fit.why_it_wins;
|
|
640
|
+
return {
|
|
641
|
+
...candidateOf(candidate),
|
|
642
|
+
why: [layers.disguise, layers.trigger, layers.logic].filter(Boolean).join("; "),
|
|
643
|
+
tried: index + 1,
|
|
644
|
+
fit,
|
|
645
|
+
...candidate.dna?.container ? { container: candidate.dna.container } : {},
|
|
646
|
+
...preferred ? { preferred } : {}
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
async function firstFitting(candidates, fits) {
|
|
650
|
+
let unchecked = null;
|
|
651
|
+
let checked = 0;
|
|
652
|
+
const lacking = [];
|
|
653
|
+
const answered = [];
|
|
654
|
+
for (const [index, candidate] of candidates.entries()) {
|
|
655
|
+
const fit = await fits[index];
|
|
656
|
+
answered.push(fit);
|
|
657
|
+
if (!fit) continue;
|
|
658
|
+
if (!fit.ok) unchecked = fit.error;
|
|
659
|
+
else checked += 1;
|
|
660
|
+
if (fit.ok && !fitsIdea(fit.fit)) lacking.push(...missingElements(fit.fit));
|
|
661
|
+
if (!(fit.ok && fitsIdea(fit.fit))) continue;
|
|
662
|
+
const passed = passedOver(candidates, answered);
|
|
663
|
+
return { picked: { ...pickedOf(candidate, fit.fit, index), ...passed.length > 0 ? { passed } : {} }, index };
|
|
664
|
+
}
|
|
665
|
+
return { picked: noReference(candidates.length, checked, unchecked, lacking), index: -1 };
|
|
666
|
+
}
|
|
667
|
+
async function allFits(fits) {
|
|
668
|
+
let seen = -1;
|
|
669
|
+
while (seen !== fits.length) {
|
|
670
|
+
seen = fits.length;
|
|
671
|
+
await Promise.all(fits);
|
|
672
|
+
}
|
|
673
|
+
return await Promise.all(fits);
|
|
674
|
+
}
|
|
675
|
+
async function chosenFitting(candidates, fits, choose, taken) {
|
|
676
|
+
const answered = await allFits(fits);
|
|
677
|
+
const fitted = answered.flatMap((fit, index) => {
|
|
678
|
+
const candidate = candidates[index];
|
|
679
|
+
return candidate && fit.ok && fitsIdea(fit.fit) ? [{ index, candidate, fit: fit.fit }] : [];
|
|
680
|
+
});
|
|
681
|
+
const fresh = taken ? fitted.filter((f) => !isTakenReference(f.candidate, taken)) : [];
|
|
682
|
+
const fitting = fresh.length > 0 ? fresh : fitted;
|
|
683
|
+
if (fitting.length < 2) return await firstFitting(candidates, fits);
|
|
684
|
+
const chosen = await choose(
|
|
685
|
+
fitting.map((f) => ({ adId: String(f.candidate.ad_id), candidate: f.candidate, fit: f.fit }))
|
|
686
|
+
).catch(() => null);
|
|
687
|
+
const kept = chosen && fitting[chosen.order[0] ?? 0] || fitting[0];
|
|
688
|
+
if (!kept) return await firstFitting(candidates, fits);
|
|
689
|
+
const ordered = chosen ? chosen.order.flatMap((i) => fitting[i] ?? []) : fitting;
|
|
690
|
+
const passed = passedOver(candidates, answered);
|
|
691
|
+
return {
|
|
692
|
+
picked: {
|
|
693
|
+
...pickedOf(kept.candidate, kept.fit, kept.index, chosen?.why),
|
|
694
|
+
board: [kept, ...ordered.filter((f) => f !== kept)].map((f) => boardAdOf(f.candidate)),
|
|
695
|
+
...chosen?.takes ? { takes: chosen.takes } : {},
|
|
696
|
+
...chosen?.avoid ? { avoid: chosen.avoid } : {},
|
|
697
|
+
...passed.length > 0 ? { passed } : {}
|
|
698
|
+
},
|
|
699
|
+
index: kept.index
|
|
700
|
+
};
|
|
701
|
+
}
|
|
702
|
+
var boardAdOf = (c) => ({
|
|
703
|
+
adId: String(c.ad_id),
|
|
704
|
+
...c.advertiser ? { advertiser: c.advertiser } : {},
|
|
705
|
+
...c.media_url ? { mediaUrl: c.media_url } : {}
|
|
706
|
+
});
|
|
707
|
+
var lackingText = (lacking) => {
|
|
708
|
+
const named = [...new Set(lacking.map((l) => l.trim()).filter(Boolean))].slice(0, 3);
|
|
709
|
+
return named.length > 0 ? ` (they won on ${named.join(", ")})` : "";
|
|
710
|
+
};
|
|
711
|
+
var searchUnavailable = () => ({
|
|
712
|
+
code: "REFERENCE_SEARCH_UNAVAILABLE",
|
|
713
|
+
message: "The ads library could not search for this ad's category just now.",
|
|
714
|
+
fix: "Run make again in a minute: every ad is built on a proven one. Only when the person asks for an ad without one, pass --from-idea."
|
|
715
|
+
});
|
|
716
|
+
var slowReference = () => ({
|
|
717
|
+
code: "REFERENCE_SLOW",
|
|
718
|
+
message: `Finding and checking a proven ad took longer than ${REFERENCE_MS / 1e3} s.`,
|
|
719
|
+
fix: "Run make again: the searches and checks already made are kept, so it goes further each time. Or pass --reference <adId> for one you looked at (`baker winning-ads search`). Never start the ad from the idea for this."
|
|
720
|
+
});
|
|
721
|
+
function startsFromIdea(failure) {
|
|
722
|
+
return failure.code === "FROM_IDEA" || failure.code === "NO_REFERENCE_FITS";
|
|
723
|
+
}
|
|
724
|
+
function noReference(found, checked, unchecked, lacking = []) {
|
|
725
|
+
if (found > 0 && checked === 0 && unchecked) {
|
|
726
|
+
return {
|
|
727
|
+
code: "FIT_UNAVAILABLE",
|
|
728
|
+
message: `Could not check whether the references fit (${unchecked.message})`,
|
|
729
|
+
fix: "Run make again in a moment. To build now, pass --reference <adId> with one you looked at yourself (`baker winning-ads search`)."
|
|
730
|
+
};
|
|
731
|
+
}
|
|
732
|
+
return {
|
|
733
|
+
code: "NO_REFERENCE_FITS",
|
|
734
|
+
message: found === 0 ? "The library has no proven ad in this idea's format." : `None of the ${found} proven ads checked wins on something this company has, for a viewer who would stop for it${lackingText(lacking)}.`,
|
|
735
|
+
fix: "Nothing to do to go on: the ad starts from the idea. To build on a proven ad instead, pass --reference <adId> for one you looked at (`baker winning-ads search --format static` with what the company sells or who the ad is for). Do not stop the batch: build the other ideas."
|
|
736
|
+
};
|
|
737
|
+
}
|
|
738
|
+
function alreadyWritten(promptJson, slug, draft) {
|
|
739
|
+
if (promptJson === null || promptJson === void 0) return null;
|
|
740
|
+
if (draft !== void 0 && sameJson(promptJson, draft)) return null;
|
|
741
|
+
try {
|
|
742
|
+
if (unwrittenProblems(readAdSpec(promptJson)).length > 0) return null;
|
|
743
|
+
} catch {
|
|
744
|
+
}
|
|
745
|
+
return {
|
|
746
|
+
code: "ALREADY_MADE",
|
|
747
|
+
message: `"${slug}" is already made and its ad is written: building it again would replace that ad with placeholders.`,
|
|
748
|
+
fix: `To change this ad, edit src/creatives/${slug}/prompt.json and run \`baker canvas run\` on it. For another ad of the same idea, run make again with --slug <new-slug>.`
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
function sameJson(parsed, text3) {
|
|
752
|
+
try {
|
|
753
|
+
return JSON.stringify(parsed) === JSON.stringify(JSON.parse(text3));
|
|
754
|
+
} catch {
|
|
755
|
+
return false;
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
var draftPath = (root, slug) => path2.join(root, "canvas", ".cache", "make-drafts", `${slug}.json`);
|
|
759
|
+
function castRebuild(definition, args) {
|
|
760
|
+
if (!definition || !args.avatar || args.reference || args.fromIdea) return null;
|
|
761
|
+
const { sourceAdId, sourcePlatform } = parseDefinitionSourceFields(definition);
|
|
762
|
+
return sourceAdId ? { adId: sourceAdId, platform: sourcePlatform ?? "meta" } : null;
|
|
763
|
+
}
|
|
764
|
+
function ideaRecast(definition, args) {
|
|
765
|
+
if (!definition || !args.avatar || args.reference || args.fromIdea) return false;
|
|
766
|
+
return !parseDefinitionSourceFields(definition).sourceAdId;
|
|
767
|
+
}
|
|
768
|
+
function castFlags(avatar) {
|
|
769
|
+
const handles = (avatar ?? "").split(/[\s,]+/).map((h) => h.replace(/^@/, "").toLowerCase()).filter(Boolean);
|
|
770
|
+
return handles.length > 0 ? ["--avatar", handles.join(",")] : [];
|
|
771
|
+
}
|
|
772
|
+
var flag = (value) => typeof value === "string" && value ? value : void 0;
|
|
773
|
+
async function loadIdea(root, ideaId) {
|
|
774
|
+
const { ideas, unreadable } = await readIdeas(root);
|
|
775
|
+
const bad = unreadable.find((u) => u.id === ideaId);
|
|
776
|
+
if (bad) {
|
|
777
|
+
fail({
|
|
778
|
+
code: "INVALID_IDEA",
|
|
779
|
+
message: bad.problems.join("; "),
|
|
780
|
+
fix: `Fix ${IDEAS_DIR}/${ideaId}.md, then run make again.`
|
|
781
|
+
});
|
|
782
|
+
}
|
|
783
|
+
const idea = ideas.find((i) => i.id === ideaId);
|
|
784
|
+
if (!idea) {
|
|
785
|
+
fail({
|
|
786
|
+
code: "NOT_FOUND",
|
|
787
|
+
message: `No idea "${ideaId}" in ${IDEAS_DIR}/.`,
|
|
788
|
+
fix: `Ideas on file: ${ideas.map((i) => i.id).join(", ") || "none"}. Write it there first.`
|
|
789
|
+
});
|
|
790
|
+
}
|
|
791
|
+
const [insights, knowledge, personas, creatives, products] = await Promise.all([
|
|
792
|
+
readInsights(root),
|
|
793
|
+
readKnowledgeCorpus(root),
|
|
794
|
+
readPersonaIds(root),
|
|
795
|
+
readCreativeRecords(root),
|
|
796
|
+
storeProductReads([idea.product])
|
|
797
|
+
]);
|
|
798
|
+
const check = checkIdeas({ ideas, insights, knowledge, personas, products, ...coverageOf(ideas, creatives) }).find(
|
|
799
|
+
(c) => c.id === idea.id
|
|
800
|
+
);
|
|
801
|
+
if (check && check.problems.length > 0) {
|
|
802
|
+
fail({
|
|
803
|
+
code: "IDEA_HAS_PROBLEMS",
|
|
804
|
+
message: check.problems.join("; "),
|
|
805
|
+
fix: "Fix the idea file and run `baker creatives ideas` again."
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
const product = idea.product ? products.get(idea.product) : void 0;
|
|
809
|
+
return { idea, check, productRecord: product && "record" in product ? product.record : "" };
|
|
810
|
+
}
|
|
811
|
+
async function scaffoldIdea(root, idea, args, slug, temperature, whereFlags) {
|
|
812
|
+
const viewerFlags = [
|
|
813
|
+
...args.adset ? ["--target-adset", args.adset] : ["--viewer-temperature", temperature],
|
|
814
|
+
...whereFlags
|
|
815
|
+
];
|
|
816
|
+
if (isVideoIdea(idea)) {
|
|
817
|
+
if (!args.spec) {
|
|
818
|
+
fail({
|
|
819
|
+
code: "SPEC_REQUIRED",
|
|
820
|
+
message: `"${idea.id}" is a video idea (${idea.format}): it is built from its beats.`,
|
|
821
|
+
fix: `Write the beats spec (one spoken line plus one shot each; references/video-flow.md), message first, then: baker creatives make ${idea.id} --spec <file>.`
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
return {
|
|
825
|
+
scaffold: await runBaker(["canvas", "scaffold-ad", "--spec", args.spec, "--slug", slug, ...viewerFlags]),
|
|
826
|
+
reference: null
|
|
827
|
+
};
|
|
828
|
+
}
|
|
829
|
+
return await scaffoldStatic(root, idea, args, slug, temperature, [...viewerFlags, ...castFlags(args.avatar)]);
|
|
830
|
+
}
|
|
831
|
+
async function checkedByHand(adId, platform, deps) {
|
|
832
|
+
const byHand = handPickedReference(adId, platform);
|
|
833
|
+
if ("code" in byHand) return byHand;
|
|
834
|
+
const fit = await deps.fit(byHand.platform, byHand.adId).catch(() => null);
|
|
835
|
+
if (!fit?.ok) return byHand;
|
|
836
|
+
if (!fitsIdea(fit.fit)) {
|
|
837
|
+
return {
|
|
838
|
+
code: "REFERENCE_UNFIT",
|
|
839
|
+
message: `The proven ad ${adId} does not fit this idea: ${whyUnfit(fit.fit)}.`,
|
|
840
|
+
fix: "Pick another proven ad (`baker winning-ads search`), or run make without --reference to build from the idea."
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
const layers = fit.fit.why_it_wins;
|
|
844
|
+
return { ...byHand, why: [layers.disguise, layers.trigger, layers.logic].filter(Boolean).join("; "), fit: fit.fit };
|
|
845
|
+
}
|
|
846
|
+
async function chooseReference(args, deps, pick) {
|
|
847
|
+
if (args.reference) {
|
|
848
|
+
const byHand = await checkedByHand(args.reference, args.referencePlatform, deps);
|
|
849
|
+
if ("code" in byHand) fail(byHand);
|
|
850
|
+
return byHand;
|
|
851
|
+
}
|
|
852
|
+
if (args.fromIdea) return { code: "FROM_IDEA", message: "Asked to start from the idea." };
|
|
853
|
+
return await pick();
|
|
854
|
+
}
|
|
855
|
+
async function referenceTarget(root, idea) {
|
|
856
|
+
const market = marketFromCompanyDoc(await readFile2(path2.join(root, "COMPANY.md"), "utf8").catch(() => ""));
|
|
857
|
+
const personas = await readPersonas(root).catch(() => []);
|
|
858
|
+
const [found, company, context] = await Promise.all([
|
|
859
|
+
referenceBriefFor(root, {
|
|
860
|
+
message: idea.message,
|
|
861
|
+
who: personaWho(idea, personas),
|
|
862
|
+
...idea.shows ? { shows: idea.shows } : {}
|
|
863
|
+
}),
|
|
864
|
+
readCompanyReading(root),
|
|
865
|
+
readCreativeContext(root, { kind: "static" })
|
|
866
|
+
]);
|
|
867
|
+
const brief = found && { ...found, avoid: avoidOf(context.rules) };
|
|
868
|
+
const category = company?.category ?? company?.sells;
|
|
869
|
+
const where = referenceWhereOf(brief, {
|
|
870
|
+
...market && market.country !== "global" ? { country: market.country } : {},
|
|
871
|
+
...category ? { category } : {},
|
|
872
|
+
audience: audienceQuery(idea, personas)
|
|
873
|
+
});
|
|
874
|
+
return { market, personas, brief, where };
|
|
875
|
+
}
|
|
876
|
+
async function takenReferencesIn(root, slug) {
|
|
877
|
+
const creatives = path2.join(root, "src", "creatives");
|
|
878
|
+
const names = await readdir(creatives).catch(() => []);
|
|
879
|
+
const sources = await Promise.all(
|
|
880
|
+
names.filter((name) => name !== slug && !name.startsWith("_")).map(
|
|
881
|
+
(name) => readFile2(path2.join(creatives, name, "_definition.md"), "utf8").then(
|
|
882
|
+
parseDefinitionSourceFields,
|
|
883
|
+
() => ({})
|
|
884
|
+
)
|
|
885
|
+
)
|
|
886
|
+
);
|
|
887
|
+
return {
|
|
888
|
+
adIds: new Set(sources.flatMap((s) => s.sourceAdId ? [s.sourceAdId] : [])),
|
|
889
|
+
advertiserIds: new Set(sources.flatMap((s) => s.sourceAdvertiserId ? [s.sourceAdvertiserId] : []))
|
|
890
|
+
};
|
|
891
|
+
}
|
|
892
|
+
async function scaffoldStatic(root, idea, args, slug, temperature, viewerFlags) {
|
|
893
|
+
const onReference = (c, signal) => runBaker(
|
|
894
|
+
[
|
|
895
|
+
"canvas",
|
|
896
|
+
"scaffold-static-ad",
|
|
897
|
+
"--source-ad-id",
|
|
898
|
+
c.adId,
|
|
899
|
+
"--source-platform",
|
|
900
|
+
c.platform,
|
|
901
|
+
...c.advertiserId ? ["--source-advertiser-id", c.advertiserId] : [],
|
|
902
|
+
"--slug",
|
|
903
|
+
slug,
|
|
904
|
+
"--title",
|
|
905
|
+
idea.message.slice(0, 120),
|
|
906
|
+
...viewerFlags
|
|
907
|
+
],
|
|
908
|
+
signal
|
|
909
|
+
);
|
|
910
|
+
const dir = path2.join(root, "src", "creatives", slug);
|
|
911
|
+
const fresh = !await stat(dir).catch(() => null);
|
|
912
|
+
const budget = AbortSignal.timeout(REFERENCE_MS);
|
|
913
|
+
const { market, personas, brief, where } = await referenceTarget(root, idea);
|
|
914
|
+
const bet = fitBetOf(
|
|
915
|
+
idea,
|
|
916
|
+
personas,
|
|
917
|
+
await readInsights(root).catch(() => []),
|
|
918
|
+
market ? describeMarket(market) : void 0
|
|
919
|
+
);
|
|
920
|
+
const deps = {
|
|
921
|
+
...liveReferenceDeps(root, bet, rankedForOf(brief, where, bet), brief?.brands),
|
|
922
|
+
taken: await takenReferencesIn(root, slug)
|
|
923
|
+
};
|
|
924
|
+
const definition = await readFile2(path2.join(dir, "_definition.md"), "utf8").catch(() => null);
|
|
925
|
+
const recast = castRebuild(definition, args);
|
|
926
|
+
const fromIdea = args.fromIdea || ideaRecast(definition, args);
|
|
927
|
+
const reference = await chooseReference({ ...args, fromIdea }, deps, async () => {
|
|
928
|
+
if (recast) {
|
|
929
|
+
const kept = await checkedByHand(recast.adId, recast.platform, deps);
|
|
930
|
+
if ("code" in kept) fail(kept);
|
|
931
|
+
return kept;
|
|
932
|
+
}
|
|
933
|
+
return await pickReference(
|
|
934
|
+
root,
|
|
935
|
+
referenceSearchesFor(idea, temperature, where).map(buildSearchBody),
|
|
936
|
+
deps,
|
|
937
|
+
fresh ? (c, signal) => onReference(c, AbortSignal.any([signal, budget])) : void 0,
|
|
938
|
+
budget
|
|
939
|
+
);
|
|
940
|
+
});
|
|
941
|
+
if ("discarded" in reference && reference.discarded) {
|
|
942
|
+
await reference.discarded.catch(() => void 0);
|
|
943
|
+
await rm(dir, { recursive: true, force: true });
|
|
944
|
+
}
|
|
945
|
+
if ("code" in reference) return await fromIdeaWhenNoneFits(reference, idea, slug, viewerFlags);
|
|
946
|
+
const prepared = "prepared" in reference ? await reference.prepared?.catch(() => null) : null;
|
|
947
|
+
if (prepared?.ok !== true && budget.aborted && !args.reference) {
|
|
948
|
+
await rm(dir, { recursive: true, force: true });
|
|
949
|
+
fail(slowReference());
|
|
950
|
+
}
|
|
951
|
+
const scaffold = prepared?.ok === true ? prepared : await onReference(reference);
|
|
952
|
+
if (scaffold.ok !== true && scaffold.error?.code === "avatar") {
|
|
953
|
+
fail(scaffoldFailure(scaffold));
|
|
954
|
+
}
|
|
955
|
+
const unbuilt = unbuiltReference(scaffold, { adId: reference.adId, byHand: Boolean(args.reference || recast) });
|
|
956
|
+
if (!unbuilt) return await withKeptConcept(dir, slug, scaffold, reference);
|
|
957
|
+
if (fresh) await rm(dir, { recursive: true, force: true });
|
|
958
|
+
return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: unbuilt };
|
|
959
|
+
}
|
|
960
|
+
async function fromIdeaWhenNoneFits(failure, idea, slug, viewerFlags) {
|
|
961
|
+
if (!startsFromIdea(failure)) fail(failure);
|
|
962
|
+
return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: failure.message };
|
|
963
|
+
}
|
|
964
|
+
function handPickedReference(adId, platform) {
|
|
965
|
+
const resolved = resolveSourcePlatform(platform);
|
|
966
|
+
if (!resolved.ok) {
|
|
967
|
+
return {
|
|
968
|
+
code: "INVALID_ARGUMENT",
|
|
969
|
+
message: resolved.message.replace("--source-platform", "--platform"),
|
|
970
|
+
fix: "Pass the platform `baker winning-ads search` names beside the ad."
|
|
971
|
+
};
|
|
972
|
+
}
|
|
973
|
+
return { adId, platform: resolved.platform, why: "chosen by hand", tried: 0 };
|
|
974
|
+
}
|
|
975
|
+
function unbuiltReference(scaffold, reference) {
|
|
976
|
+
if (scaffold.ok === true || reference.byHand) return null;
|
|
977
|
+
return `The proven ad ${reference.adId} could not be read to build on.`;
|
|
978
|
+
}
|
|
979
|
+
async function withKeptConcept(dir, slug, scaffold, reference) {
|
|
980
|
+
if (scaffold.ok !== true || !reference.fit) return { scaffold, reference };
|
|
981
|
+
const unseeded = await seedConcept(dir, slug, conceptFromFit(reference.fit, reference.adId));
|
|
982
|
+
return { scaffold, reference, ...unseeded ? { conceptUnseeded: unseeded } : {} };
|
|
983
|
+
}
|
|
984
|
+
async function seedConcept(dir, slug, seeded) {
|
|
985
|
+
const promptPath = path2.join(dir, "prompt.json");
|
|
986
|
+
const canvasPath = path2.join(dir, `${slug}.canvas.json`);
|
|
987
|
+
let prompt;
|
|
988
|
+
try {
|
|
989
|
+
prompt = withFitConcept(await readFile2(promptPath, "utf8"), seeded);
|
|
990
|
+
await writeFile2(promptPath, prompt, "utf8");
|
|
991
|
+
} catch (e) {
|
|
992
|
+
return `prompt.json could not take the proven ad's concept (${e instanceof Error ? e.message : String(e)})`;
|
|
993
|
+
}
|
|
994
|
+
try {
|
|
995
|
+
const spec = JSON.parse(prompt);
|
|
996
|
+
const { canvas, rerouted } = reroutedOnSpec(JSON.parse(await readFile2(canvasPath, "utf8")), spec);
|
|
997
|
+
const briefed = projectStaticBriefs(canvas, spec) + projectAdaptBriefs(canvas, spec) + projectFormatBriefs(canvas, spec);
|
|
998
|
+
if (rerouted || briefed > 0) {
|
|
999
|
+
await writeFile2(canvasPath, `${JSON.stringify(canvas, null, 2)}
|
|
1000
|
+
`, "utf8");
|
|
1001
|
+
}
|
|
1002
|
+
} catch {
|
|
1003
|
+
}
|
|
1004
|
+
return null;
|
|
1005
|
+
}
|
|
1006
|
+
async function scaffoldFromIdea(idea, slug, viewerFlags) {
|
|
1007
|
+
const dir = await mkdtemp(path2.join(tmpdir(), "idea-spec-"));
|
|
1008
|
+
const specPath = path2.join(dir, "prompt.json");
|
|
1009
|
+
await writeFile2(specPath, JSON.stringify(ideaSpec(idea, idea.who.replace(/[-_]/g, " ")), null, 2), "utf8");
|
|
1010
|
+
try {
|
|
1011
|
+
return await runBaker([
|
|
1012
|
+
"canvas",
|
|
1013
|
+
"scaffold-static-ad",
|
|
1014
|
+
"--spec",
|
|
1015
|
+
specPath,
|
|
1016
|
+
"--slug",
|
|
1017
|
+
slug,
|
|
1018
|
+
"--title",
|
|
1019
|
+
idea.message.slice(0, 120),
|
|
1020
|
+
...viewerFlags
|
|
1021
|
+
]);
|
|
1022
|
+
} finally {
|
|
1023
|
+
await rm(dir, { recursive: true, force: true });
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
function referencePictureUrl(canvas) {
|
|
1027
|
+
const nodes = canvas?.nodes;
|
|
1028
|
+
if (!Array.isArray(nodes)) return null;
|
|
1029
|
+
const original = nodes.find(
|
|
1030
|
+
(n) => n?.id === "original"
|
|
1031
|
+
);
|
|
1032
|
+
const url = original?.params?.url;
|
|
1033
|
+
return typeof url === "string" && /^https?:\/\//.test(url) ? url : null;
|
|
1034
|
+
}
|
|
1035
|
+
async function saveReferencePicture(root, canvasPath, adId) {
|
|
1036
|
+
const url = await readFile2(canvasPath, "utf8").then(
|
|
1037
|
+
(text3) => referencePictureUrl(JSON.parse(text3)),
|
|
1038
|
+
() => null
|
|
1039
|
+
);
|
|
1040
|
+
return url ? await savePicture(root, url, adId) : null;
|
|
1041
|
+
}
|
|
1042
|
+
async function savePicture(root, url, adId) {
|
|
1043
|
+
try {
|
|
1044
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(2e4) });
|
|
1045
|
+
if (!response.ok) return null;
|
|
1046
|
+
const ext = path2.extname(new URL(url).pathname).toLowerCase() || ".jpg";
|
|
1047
|
+
const relative = path2.join("canvas", "references", `${adId}${ext}`);
|
|
1048
|
+
await mkdir2(path2.join(root, "canvas", "references"), { recursive: true });
|
|
1049
|
+
await writeFile2(path2.join(root, relative), Buffer.from(await response.arrayBuffer()));
|
|
1050
|
+
return relative;
|
|
1051
|
+
} catch {
|
|
1052
|
+
return null;
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
async function withPictures(root, canvasPath, reference) {
|
|
1056
|
+
const picture = await saveReferencePicture(root, canvasPath, reference.adId);
|
|
1057
|
+
const board = reference.board ? await savedBoard(root, reference.board, reference.adId, picture) : void 0;
|
|
1058
|
+
return { ...reference, ...picture ? { picture } : {}, ...board ? { board } : {} };
|
|
1059
|
+
}
|
|
1060
|
+
async function savedBoard(root, board, keptId, keptPicture) {
|
|
1061
|
+
return await Promise.all(
|
|
1062
|
+
board.map(async ({ adId, advertiser, mediaUrl }) => {
|
|
1063
|
+
const picture = adId === keptId ? keptPicture : mediaUrl ? await savePicture(root, mediaUrl, adId) : null;
|
|
1064
|
+
return { adId, ...advertiser ? { advertiser } : {}, ...picture ? { picture } : {} };
|
|
1065
|
+
})
|
|
1066
|
+
);
|
|
1067
|
+
}
|
|
1068
|
+
async function recordIdea(root, slug, idea, evidence, productRecord, reference) {
|
|
1069
|
+
const dir = path2.join(root, "src", "creatives", slug);
|
|
1070
|
+
const definitionPath = path2.join(dir, "_definition.md");
|
|
1071
|
+
const definition = await readFile2(definitionPath, "utf8").catch(() => null);
|
|
1072
|
+
if (definition !== null) {
|
|
1073
|
+
const recorded = setDefinitionFields(definition, { ...definitionFieldsOf(idea, evidence) });
|
|
1074
|
+
const thinkingReference = reference ? await withPictures(root, path2.join(dir, `${slug}.canvas.json`), reference) : null;
|
|
1075
|
+
const inventory = await castInventory(root, idea.message, await companyName(root));
|
|
1076
|
+
const castRules = (await readCreativeContext(root, { kind: idea.format?.startsWith("video_") ? "video" : "static" })).rules.filter((r) => r.applies === "cast" || r.applies === "picture" || r.applies === "logo").map((r) => ({ id: r.id, strength: r.strength, text: r.text }));
|
|
1077
|
+
const audience = memeRegister(await readCompanyReading(root).catch(() => null));
|
|
1078
|
+
await writeFile2(
|
|
1079
|
+
definitionPath,
|
|
1080
|
+
withThinking(
|
|
1081
|
+
recorded,
|
|
1082
|
+
thinkingOutline({
|
|
1083
|
+
idea,
|
|
1084
|
+
reference: thinkingReference,
|
|
1085
|
+
inventory,
|
|
1086
|
+
rules: castRules,
|
|
1087
|
+
...audience ? { audience } : {}
|
|
1088
|
+
})
|
|
1089
|
+
),
|
|
1090
|
+
"utf8"
|
|
1091
|
+
);
|
|
1092
|
+
}
|
|
1093
|
+
const promptPath = path2.join(dir, "prompt.json");
|
|
1094
|
+
const prompt = isVideoIdea(idea) ? null : await readFile2(promptPath, "utf8").catch(() => null);
|
|
1095
|
+
if (prompt !== null) {
|
|
1096
|
+
const personas = await readPersonas(root).catch(() => []);
|
|
1097
|
+
const written = (() => {
|
|
1098
|
+
try {
|
|
1099
|
+
return setSpecViewer(setSpecMessage(prompt, idea.message), idea, personas);
|
|
1100
|
+
} catch {
|
|
1101
|
+
return null;
|
|
1102
|
+
}
|
|
1103
|
+
})();
|
|
1104
|
+
if (written !== null) await writeFile2(promptPath, written, "utf8").catch(() => void 0);
|
|
1105
|
+
}
|
|
1106
|
+
const unsourcedCopy = prompt === null ? [] : await draftedClaims(root, prompt, productRecord);
|
|
1107
|
+
await keepDraft(root, slug, promptPath);
|
|
1108
|
+
if (idea.status === "idea") {
|
|
1109
|
+
const ideaPath = path2.join(root, IDEAS_DIR, `${idea.id}.md`);
|
|
1110
|
+
await writeFile2(ideaPath, setDefinitionFields(await readFile2(ideaPath, "utf8"), { status: "built" }), "utf8");
|
|
1111
|
+
}
|
|
1112
|
+
await runBaker(["canvas", "sync-definition", dir]);
|
|
1113
|
+
return { dir, unsourcedCopy };
|
|
1114
|
+
}
|
|
1115
|
+
async function keepDraft(root, slug, promptPath) {
|
|
1116
|
+
const written = await readFile2(promptPath, "utf8").catch(() => null);
|
|
1117
|
+
if (written === null) return;
|
|
1118
|
+
await mkdir2(path2.dirname(draftPath(root, slug)), { recursive: true });
|
|
1119
|
+
await writeFile2(draftPath(root, slug), written, "utf8");
|
|
1120
|
+
}
|
|
1121
|
+
async function draftedClaims(root, prompt, productRecord) {
|
|
1122
|
+
const [knowledge, insights] = await Promise.all([readKnowledgeCorpus(root), readInsights(root)]);
|
|
1123
|
+
const own = insights.filter(sourcesClaims).map((i) => i.quote);
|
|
1124
|
+
try {
|
|
1125
|
+
return unsourcedCopyLines(prompt, `${knowledge}
|
|
1126
|
+
${own.join("\n")}
|
|
1127
|
+
${productRecord}`);
|
|
1128
|
+
} catch {
|
|
1129
|
+
return [];
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
function makeArgsOf(args) {
|
|
1133
|
+
const opts = {};
|
|
1134
|
+
for (const key of ["slug", "adset", "reference", "platforms", "formats", "spec", "series", "avatar"]) {
|
|
1135
|
+
const value = flag(args[key]);
|
|
1136
|
+
if (value) opts[key] = value;
|
|
1137
|
+
}
|
|
1138
|
+
const referencePlatform = flag(args["reference-platform"]) ?? (opts.reference ? flag(args.platform) : void 0);
|
|
1139
|
+
if (referencePlatform) opts.referencePlatform = referencePlatform;
|
|
1140
|
+
if (flag(args.platform) && !opts.reference) {
|
|
1141
|
+
return {
|
|
1142
|
+
code: "INVALID_ARGUMENT",
|
|
1143
|
+
message: `--platform ${flag(args.platform)} is ambiguous: it named the library of --reference.`,
|
|
1144
|
+
fix: "--platforms says where the ad runs (baker creatives make <idea> --platforms linkedin); --reference-platform says which library the reference is in."
|
|
1145
|
+
};
|
|
1146
|
+
}
|
|
1147
|
+
if (args["from-idea"] === true) opts.fromIdea = true;
|
|
1148
|
+
return opts;
|
|
1149
|
+
}
|
|
1150
|
+
function deliveryFlags(delivery, args, kind = "static") {
|
|
1151
|
+
const sizes = args.formats && kind === "static" ? ["--formats", args.formats] : [];
|
|
1152
|
+
return ["--platforms", delivery.platforms.join(","), ...sizes];
|
|
1153
|
+
}
|
|
1154
|
+
function scaffoldFailure(scaffold) {
|
|
1155
|
+
const error = scaffold.error ?? {};
|
|
1156
|
+
return {
|
|
1157
|
+
code: error.code ?? "SCAFFOLD_FAILED",
|
|
1158
|
+
message: error.message ?? "The creative could not be scaffolded.",
|
|
1159
|
+
...error.fix ? { fix: error.fix } : {}
|
|
1160
|
+
};
|
|
1161
|
+
}
|
|
1162
|
+
var CARRY_WORDS = {
|
|
1163
|
+
whole_ad: "the whole ad (its disguise, layout and hook)",
|
|
1164
|
+
layout: "its layout",
|
|
1165
|
+
hook: "its hook",
|
|
1166
|
+
angle: "its angle"
|
|
1167
|
+
};
|
|
1168
|
+
function builtOnHint(reference) {
|
|
1169
|
+
const tell = "Tell the person which proven ad this builds on";
|
|
1170
|
+
const ours = "the words, brand, people and claims stay ours.";
|
|
1171
|
+
if (!reference.fit) {
|
|
1172
|
+
return `Built on proven ad ${reference.adId}, the one chosen for it; no check read what made it win. The canvas shows that ad as \`original\`. ${tell}; ${ours}`;
|
|
1173
|
+
}
|
|
1174
|
+
const carried = CARRY_WORDS[reference.fit.carry ?? "whole_ad"];
|
|
1175
|
+
const why = reference.fit.carry_why ? ` (${reference.fit.carry_why})` : "";
|
|
1176
|
+
const won = reference.why ? ` It won on: ${reference.why}.` : "";
|
|
1177
|
+
const chosen = reference.preferred ? ` Chosen over the other proven ads that fit because ${reference.preferred.replace(/\.$/, "")}.` : "";
|
|
1178
|
+
const passed = (reference.passed ?? []).map(
|
|
1179
|
+
(p) => ` Passed over ${p.advertiser ? `${p.advertiser}'s proven ad` : "proven ad"} ${p.adId}: ${p.why.replace(/\.$/, "")}.`
|
|
1180
|
+
).join("");
|
|
1181
|
+
const whyNot = passed ? ", and in one line why not the ones passed over" : "";
|
|
1182
|
+
const byHand = reference.tried === 0 ? ", the one chosen for it" : "";
|
|
1183
|
+
return `Built on proven ad ${reference.adId}${byHand}: it carries ${carried}${why}.${won}${chosen}${passed} The canvas shows that ad as \`original\`. ${tell} and what it takes from it${whyNot}; ${ours}`;
|
|
1184
|
+
}
|
|
1185
|
+
var unseededHint = (reference, slug, why) => `${why}, so the render does not see proven ad ${reference.adId} yet. \`baker winning-ads fit ${reference.adId} --platform ${reference.platform} --full\` prints the check already made (free): write its \`read\` into src/creatives/${slug}/prompt.json as \`concept\`, with \`reference_ad_id: "${reference.adId}"\`.`;
|
|
1186
|
+
function thinkFirstHint(made) {
|
|
1187
|
+
const basis = made.reference ? "what the proven ad is and why it won" : "why this bet should work";
|
|
1188
|
+
const board = (made.reference?.board?.length ?? 0) > 1 ? " what to take from which of the proven ads that fit (the hook of one, the proof of another)," : "";
|
|
1189
|
+
const survives = made.reference ? " what of it must survive," : "";
|
|
1190
|
+
const read = made.reference ? "first open the proven ads' pictures the outline names and read .claude/skills/creative-canvas-ads/references/reading-a-winner.md, then " : "";
|
|
1191
|
+
const recast = made.reference ? ` When the cast is an Avatar the canvas was not built with, \`baker creatives make ${made.idea.id}${made.slug === made.idea.id ? "" : ` --slug ${made.slug}`} --avatar <handle>\` rebuilds it on the same proven ad before you write prompt.json.` : "";
|
|
1192
|
+
return `Think first: ${read}answer every question under "Thinking" in src/creatives/${made.slug}/_definition.md before you touch prompt.json (how: .claude/skills/creative-canvas-ads/references/creative-intent.md): ${basis},${board} whether it fits our viewer, our hook, who appears and what of the product shows (decided from what the company has, listed there: its Avatars, real customers, founder, product pictures, logos),${survives} and the plan.${recast} This thinking decides the ad; the run renders nothing while a question is open or the cast is not ours.`;
|
|
1193
|
+
}
|
|
1194
|
+
function writeTheAdHint(made, quote) {
|
|
1195
|
+
const words = `say the message in the customer's words${quote ? ` ("${quote.slice(0, 80)}")` : ""}; keep \`message\` as it is`;
|
|
1196
|
+
if (made.idea.format?.startsWith("video_")) {
|
|
1197
|
+
return `Then write the ad from "The plan": its scene files and prompt.json carry every decision (the render never reads the definition); ${words}.`;
|
|
1198
|
+
}
|
|
1199
|
+
const drafted = made.reference ? " The drafted lines are the reference's: keep one only if the Knowledge says it (badges, ratings and guarantees too)." : "";
|
|
1200
|
+
return `Then write the ad from "The plan" in src/creatives/${made.slug}/prompt.json, every decision in its fields (the render never reads the definition); ${words}.${drafted} Read static-image-flow.md first. Inspect existing Avatars before creating an actor. Keep interfaces native and requested overlays separate. Preserve plausible anatomy, device proportions, scale, perspective and support; reflow text rather than distort it. Honour the requested sizes.`;
|
|
1201
|
+
}
|
|
1202
|
+
function makeEnvelope(made) {
|
|
1203
|
+
const quote = made.check?.quote;
|
|
1204
|
+
return {
|
|
1205
|
+
ok: true,
|
|
1206
|
+
data: {
|
|
1207
|
+
creative: made.slug,
|
|
1208
|
+
idea: made.idea.id,
|
|
1209
|
+
message: made.idea.message,
|
|
1210
|
+
evidence: made.check?.evidence ?? "explore",
|
|
1211
|
+
...quote ? { customer_quote: quote } : {},
|
|
1212
|
+
...made.fromIdea ? { built_from: "idea" } : {},
|
|
1213
|
+
...made.reference ? {
|
|
1214
|
+
reference: {
|
|
1215
|
+
ad_id: made.reference.adId,
|
|
1216
|
+
platform: made.reference.platform,
|
|
1217
|
+
why_it_wins: made.reference.why,
|
|
1218
|
+
...made.reference.fit?.carry ? { carry: made.reference.fit.carry } : {},
|
|
1219
|
+
...made.reference.preferred ? { chosen_because: made.reference.preferred } : {}
|
|
1220
|
+
}
|
|
1221
|
+
} : {},
|
|
1222
|
+
viewer: made.viewer,
|
|
1223
|
+
...made.delivery ? { platforms: made.delivery.platforms, lead: made.delivery.lead } : {},
|
|
1224
|
+
...made.shape ? { master_shape: made.shape } : {},
|
|
1225
|
+
canvas_path: made.canvasPath
|
|
1226
|
+
},
|
|
1227
|
+
hints: [
|
|
1228
|
+
...made.reference ? [builtOnHint(made.reference)] : [],
|
|
1229
|
+
...made.reference && made.conceptUnseeded ? [unseededHint(made.reference, made.slug, made.conceptUnseeded)] : [],
|
|
1230
|
+
...made.fromIdea ? [
|
|
1231
|
+
`${made.fromIdea} So this ad starts from the idea: write the scene and every line of copy in src/creatives/${made.slug}/prompt.json (a placeholder refuses to run). Tell the person this ad is not built on a proven ad, and why, in plain words.`
|
|
1232
|
+
] : [],
|
|
1233
|
+
...made.unsourcedCopy.length > 0 ? [
|
|
1234
|
+
`Rewrite before running: ${made.unsourcedCopy.map((l) => JSON.stringify(l)).join(", ")} claim a figure nothing the company wrote holds (the reference's promise, not ours).`
|
|
1235
|
+
] : [],
|
|
1236
|
+
thinkFirstHint(made),
|
|
1237
|
+
writeTheAdHint(made, quote),
|
|
1238
|
+
SPEC_SHAPES_HINT,
|
|
1239
|
+
`Then: baker canvas run ${made.canvasPath} (it validates and asks the viewer itself: nothing to run before it).`,
|
|
1240
|
+
// The scaffold's own next steps name a separate validate; the run does it (dev, Oct 2026: five validates before one run).
|
|
1241
|
+
...made.scaffoldHints.filter((h) => !/canvas (?:validate|viewer-check)/.test(h)).filter((h) => !(made.reference?.fit && h.startsWith(NO_FIT_HINT))).slice(0, 4)
|
|
1242
|
+
]
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
function ideaPlatforms(idea) {
|
|
1246
|
+
if (idea.platforms && idea.platforms.length > 0) return idea.platforms;
|
|
1247
|
+
const named = platformsNamedIn([idea.message, idea.who, idea.why, idea.format].join(" "));
|
|
1248
|
+
return named.length > 0 ? named : void 0;
|
|
1249
|
+
}
|
|
1250
|
+
async function makeDelivery(root, idea, args, slug) {
|
|
1251
|
+
const definition = await readFile2(path2.join(root, "src", "creatives", slug, "_definition.md"), "utf8").catch(
|
|
1252
|
+
() => null
|
|
1253
|
+
);
|
|
1254
|
+
const flags = { platforms: args.platforms, formats: args.formats, "target-adset": args.adset };
|
|
1255
|
+
const resolved = await scaffoldDelivery(flags, definition, ideaPlatforms(idea));
|
|
1256
|
+
const video = isVideoIdea(idea);
|
|
1257
|
+
if (resolved.ok)
|
|
1258
|
+
return { delivery: resolved.delivery, flags: deliveryFlags(resolved.delivery, args, video ? "video" : "static") };
|
|
1259
|
+
if (video && resolved.error.code === "platform_required") return { flags: [] };
|
|
1260
|
+
return fail({ code: resolved.error.code.toUpperCase(), message: resolved.error.message, fix: resolved.error.fix });
|
|
1261
|
+
}
|
|
1262
|
+
async function makeInSeries(root, idea, slug, lead, evidence) {
|
|
1263
|
+
if (isVideoIdea(idea)) {
|
|
1264
|
+
fail({
|
|
1265
|
+
code: "SERIES_STATIC_ONLY",
|
|
1266
|
+
message: `"${idea.id}" is a video idea: a series repeats one static ad with other words.`,
|
|
1267
|
+
fix: `Make it on its own: baker creatives make ${idea.id} --spec <beats file>.`
|
|
1268
|
+
});
|
|
1269
|
+
}
|
|
1270
|
+
const made = await makeSeriesAd(root, idea, slug, lead, evidence, {
|
|
1271
|
+
sync: (dir) => runBaker(["canvas", "sync-definition", dir, "--title"]),
|
|
1272
|
+
chatId: optionalChatId() ?? null
|
|
1273
|
+
});
|
|
1274
|
+
if ("code" in made) fail(made);
|
|
1275
|
+
const leadDefinition = await readFile2(path2.join(root, "src", "creatives", lead, "_definition.md"), "utf8").catch(
|
|
1276
|
+
() => ""
|
|
1277
|
+
);
|
|
1278
|
+
const leadPlatforms = parseDefinitionDelivery(leadDefinition)?.platforms;
|
|
1279
|
+
writeJson(
|
|
1280
|
+
seriesMadeEnvelope(
|
|
1281
|
+
{ ...made, canvasPath: path2.relative(root, made.canvasPath), ...leadPlatforms ? { leadPlatforms } : {} },
|
|
1282
|
+
idea
|
|
1283
|
+
)
|
|
1284
|
+
);
|
|
1285
|
+
}
|
|
1286
|
+
var makeCommand = defineCommand({
|
|
1287
|
+
meta: { name: "make", description: DESCRIPTION },
|
|
1288
|
+
args: ARGS,
|
|
1289
|
+
async run({ args }) {
|
|
1290
|
+
const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
|
|
1291
|
+
const opts = makeArgsOf(args);
|
|
1292
|
+
if ("code" in opts) return fail(opts);
|
|
1293
|
+
const { idea, check, productRecord } = await loadIdea(root, String(args.idea));
|
|
1294
|
+
const slug = opts.slug ?? idea.id;
|
|
1295
|
+
const written = await readFile2(path2.join(root, "src", "creatives", slug, "prompt.json"), "utf8").then(
|
|
1296
|
+
(text3) => {
|
|
1297
|
+
try {
|
|
1298
|
+
return JSON.parse(text3);
|
|
1299
|
+
} catch {
|
|
1300
|
+
return {};
|
|
1301
|
+
}
|
|
1302
|
+
},
|
|
1303
|
+
(err) => err.code === "ENOENT" ? null : {}
|
|
1304
|
+
);
|
|
1305
|
+
const draft = await readFile2(draftPath(root, slug), "utf8").catch(() => void 0);
|
|
1306
|
+
const refused = alreadyWritten(written, slug, draft);
|
|
1307
|
+
if (refused) fail(refused);
|
|
1308
|
+
if (opts.series) {
|
|
1309
|
+
await makeInSeries(root, idea, slug, opts.series, check?.evidence ?? "explore");
|
|
1310
|
+
return;
|
|
1311
|
+
}
|
|
1312
|
+
const { delivery, flags } = await makeDelivery(root, idea, opts, slug);
|
|
1313
|
+
const temperature = await viewerTemperature(root, opts.adset, idea.awareness);
|
|
1314
|
+
const { scaffold, reference, fromIdea, conceptUnseeded } = await scaffoldIdea(
|
|
1315
|
+
root,
|
|
1316
|
+
idea,
|
|
1317
|
+
opts,
|
|
1318
|
+
slug,
|
|
1319
|
+
temperature,
|
|
1320
|
+
flags
|
|
1321
|
+
);
|
|
1322
|
+
if (scaffold.ok !== true) fail(scaffoldFailure(scaffold));
|
|
1323
|
+
const { dir, unsourcedCopy } = await recordIdea(
|
|
1324
|
+
root,
|
|
1325
|
+
slug,
|
|
1326
|
+
idea,
|
|
1327
|
+
check?.evidence ?? "explore",
|
|
1328
|
+
productRecord,
|
|
1329
|
+
reference
|
|
1330
|
+
);
|
|
1331
|
+
const canvasPath = String(scaffold.canvas_path ?? path2.join(dir, `${slug}.canvas.json`));
|
|
1332
|
+
const shape = recordedShape(await readFile2(canvasPath, "utf8").then(JSON.parse, () => null));
|
|
1333
|
+
writeJson(
|
|
1334
|
+
makeEnvelope({
|
|
1335
|
+
slug,
|
|
1336
|
+
idea,
|
|
1337
|
+
check,
|
|
1338
|
+
reference,
|
|
1339
|
+
...fromIdea ? { fromIdea } : {},
|
|
1340
|
+
...conceptUnseeded ? { conceptUnseeded } : {},
|
|
1341
|
+
viewer: opts.adset ? { adset: opts.adset } : { temperature },
|
|
1342
|
+
canvasPath: path2.relative(root, canvasPath),
|
|
1343
|
+
scaffoldHints: Array.isArray(scaffold.hints) ? scaffold.hints : [],
|
|
1344
|
+
unsourcedCopy,
|
|
1345
|
+
...delivery ? { delivery } : {},
|
|
1346
|
+
...shape ? { shape } : {}
|
|
1347
|
+
})
|
|
1348
|
+
);
|
|
1349
|
+
}
|
|
1350
|
+
});
|
|
1351
|
+
export {
|
|
1352
|
+
alreadyWritten,
|
|
1353
|
+
castFlags,
|
|
1354
|
+
castRebuild,
|
|
1355
|
+
checkedByHand,
|
|
1356
|
+
deliveryFlags,
|
|
1357
|
+
handPickedReference,
|
|
1358
|
+
ideaPlatforms,
|
|
1359
|
+
ideaRecast,
|
|
1360
|
+
makeArgsOf,
|
|
1361
|
+
makeCommand,
|
|
1362
|
+
makeEnvelope,
|
|
1363
|
+
noReference,
|
|
1364
|
+
pickReference,
|
|
1365
|
+
referencePictureUrl,
|
|
1366
|
+
seedConcept,
|
|
1367
|
+
startsFromIdea,
|
|
1368
|
+
unbuiltReference
|
|
1369
|
+
};
|
|
1370
|
+
//# sourceMappingURL=make-MJ6JMU5T.js.map
|