@koda-sl/baker-cli 0.489.0 → 0.491.0
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 +169 -7
- package/dist/account-3H6BZO5H.js +80 -0
- package/dist/account-IKFDY52P.js +138 -0
- package/dist/account-IKFDY52P.js.map +1 -0
- package/dist/account-VGSYM7LY.js +79 -0
- package/dist/account-assets-LKZVWZAR.js +289 -0
- package/dist/account-assets-LKZVWZAR.js.map +1 -0
- package/dist/account-level-UJOZDVXY.js +608 -0
- package/dist/account-level-UJOZDVXY.js.map +1 -0
- package/dist/account-writes-AE5IJGGW.js +66 -0
- package/dist/accounts-2ARS6XP2.js +77 -0
- package/dist/accounts-AQFW4ZUM.js +611 -0
- package/dist/accounts-K4INATCW.js +75 -0
- package/dist/actions-QMUHOAXG.js +55 -0
- package/dist/activecampaign-J3QN5FMG.js +935 -0
- package/dist/activities-T253KK4Q.js +74 -0
- package/dist/ad-group-writes-VRSBI2Z2.js +170 -0
- package/dist/ad-groups-IEBVEAMS.js +68 -0
- package/dist/ad-writes-ALV4KFPZ.js +174 -0
- package/dist/add-VDUA6OWM.js +104 -0
- package/dist/add-XHOKCSW5.js +302 -0
- package/dist/ads-CQZHD7FC.js +77 -0
- package/dist/ads-HGDPNIT6.js +40 -0
- package/dist/ads-ZEY72UBN.js +114 -0
- package/dist/ads-ZEY72UBN.js.map +1 -0
- package/dist/adsets-5H3MOT3D.js +177 -0
- package/dist/adsets-5H3MOT3D.js.map +1 -0
- package/dist/advertisers-UDSEFMP7.js +120 -0
- package/dist/analytics-TBETZOPJ.js +433 -0
- package/dist/analytics-VH74LMMC.js +1976 -0
- package/dist/asset-writes-L5TMKIZC.js +47 -0
- package/dist/assign-6IE2ASFC.js +77 -0
- package/dist/audience-size-CSBWDFEP.js +73 -0
- package/dist/audience-writes-X52VG35Y.js +324 -0
- package/dist/audience-writes-X52VG35Y.js.map +1 -0
- package/dist/audiences-AAZH56WD.js +268 -0
- package/dist/audiences-X3RLGOVM.js +84 -0
- package/dist/audiences-X3RLGOVM.js.map +1 -0
- package/dist/audit-AEENRVGD.js +151 -0
- package/dist/autocomplete-AAGTJHVL.js +111 -0
- package/dist/avatars-VEATUUKU.js +38 -0
- package/dist/bid-pricing-SZTGCZTV.js +100 -0
- package/dist/brand-MXGETE4R.js +22 -0
- package/dist/brief-3GHSHOGM.js +538 -0
- package/dist/businesses-H3HIDQX6.js +53 -0
- package/dist/campaign-groups-WRI56M5X.js +95 -0
- package/dist/campaign-writes-PYGKSCPS.js +165 -0
- package/dist/campaign-writes-PYGKSCPS.js.map +1 -0
- package/dist/campaign-writes-U5PUVSMT.js +170 -0
- package/dist/campaigns-4QWC2JE7.js +109 -0
- package/dist/campaigns-AV6G3AUU.js +127 -0
- package/dist/campaigns-AV6G3AUU.js.map +1 -0
- package/dist/campaigns-JEIKY2M4.js +76 -0
- package/dist/campaigns-Q4HN7HBY.js +107 -0
- package/dist/canvas-VJ3XKCAC.js +46 -0
- package/dist/capabilities-SNGGAOV3.js +144 -0
- package/dist/catalog-S32MX453.js +65 -0
- package/dist/catalogs-OCVXZLIF.js +128 -0
- package/dist/catalogs-RXJTZTVX.js +778 -0
- package/dist/catalogs-RXJTZTVX.js.map +1 -0
- package/dist/chatgpt-QVF2FD3E.js +47 -0
- package/dist/chats-2DRTB7GK.js +276 -0
- package/dist/chats-2DRTB7GK.js.map +1 -0
- package/dist/check-Z6UMIQKD.js +104 -0
- package/dist/chunk-2C7AHPM4.js +191 -0
- package/dist/chunk-2C7AHPM4.js.map +1 -0
- package/dist/chunk-2WZI36D3.js +317 -0
- package/dist/chunk-3AMLOCXY.js +392 -0
- package/dist/chunk-3CVAEQMZ.js +156 -0
- package/dist/chunk-3WAYZQNV.js +61 -0
- package/dist/chunk-46GWHUKN.js +225 -0
- package/dist/chunk-4O6T76A3.js +191 -0
- package/dist/chunk-5C35OW7L.js +205 -0
- package/dist/chunk-5C35OW7L.js.map +1 -0
- package/dist/chunk-5GQCN2QZ.js +391 -0
- package/dist/chunk-5GQCN2QZ.js.map +1 -0
- package/dist/chunk-5MCVK4A3.js +903 -0
- package/dist/chunk-5ZLN23V5.js +97 -0
- package/dist/chunk-65Y3RCWP.js +68 -0
- package/dist/chunk-65Y3RCWP.js.map +1 -0
- package/dist/chunk-77ULVP62.js +547 -0
- package/dist/chunk-A4MVVPJ2.js +4204 -0
- package/dist/chunk-A4MVVPJ2.js.map +1 -0
- package/dist/chunk-AQM4JH62.js +274 -0
- package/dist/chunk-AQM4JH62.js.map +1 -0
- package/dist/chunk-AW2GKIGS.js +433 -0
- package/dist/chunk-BRLY6XD6.js +249 -0
- package/dist/chunk-C7NWUCLQ.js +64 -0
- package/dist/chunk-CP4P6YKM.js +287 -0
- package/dist/chunk-CP4P6YKM.js.map +1 -0
- package/dist/chunk-D4HKJBEW.js +23 -0
- package/dist/chunk-DAO63OOP.js +6352 -0
- package/dist/chunk-DAO63OOP.js.map +1 -0
- package/dist/chunk-DCBZ5CHZ.js +139 -0
- package/dist/chunk-G6XKD7QE.js +77 -0
- package/dist/chunk-GBFL4TD2.js +172 -0
- package/dist/chunk-H5SCKWFT.js +224 -0
- package/dist/chunk-HLVRHBKL.js +1078 -0
- package/dist/chunk-HLVRHBKL.js.map +1 -0
- package/dist/chunk-HXPK6KAL.js +363 -0
- package/dist/chunk-I7GOSMWT.js +197 -0
- package/dist/chunk-IBY44U2M.js +1079 -0
- package/dist/chunk-ITNHIZKK.js +275 -0
- package/dist/chunk-J33P2JNS.js +455 -0
- package/dist/chunk-JH2L5CQD.js +206 -0
- package/dist/chunk-JQH5VG6F.js +5368 -0
- package/dist/chunk-JVH5A3XC.js +8914 -0
- package/dist/chunk-KTOYQP6D.js +169 -0
- package/dist/chunk-LO3IF5PS.js +399 -0
- package/dist/chunk-LRRFGOW3.js +604 -0
- package/dist/chunk-LTPTJWZC.js +942 -0
- package/dist/chunk-MRQHJW5U.js +159 -0
- package/dist/chunk-NHYI7ORL.js +346 -0
- package/dist/chunk-NLI7C3K2.js +51 -0
- package/dist/chunk-NSEMXBUB.js +91 -0
- package/dist/chunk-OM2BRYXJ.js +3868 -0
- package/dist/chunk-OY4SKCIU.js +103 -0
- package/dist/chunk-OYAJNTRO.js +494 -0
- package/dist/chunk-PL7J3DPQ.js +831 -0
- package/dist/chunk-PUSBUMYM.js +89 -0
- package/dist/chunk-QTOZ32SU.js +163 -0
- package/dist/chunk-QTOZ32SU.js.map +1 -0
- package/dist/chunk-RRADFRPI.js +297 -0
- package/dist/chunk-SGEPZB3D.js +344 -0
- package/dist/chunk-SVAB6KV5.js +219 -0
- package/dist/chunk-SVAB6KV5.js.map +1 -0
- package/dist/chunk-TFTZDWCX.js +66 -0
- package/dist/chunk-TG4NCHFS.js +142 -0
- package/dist/chunk-TTHM66TA.js +207 -0
- package/dist/chunk-VL2GNXZY.js +19 -0
- package/dist/chunk-VQPZDM6N.js +160 -0
- package/dist/chunk-XCKINS7K.js +57 -0
- package/dist/chunk-YLYXSJ6O.js +8939 -0
- package/dist/chunk-ZAPO6UWS.js +592 -0
- package/dist/chunk-ZEPUDYPL.js +122 -0
- package/dist/chunk-ZJSGGJ5R.js +167 -0
- package/dist/claim-J2LYNHZK.js +197 -0
- package/dist/cli.js +34 -34
- package/dist/companies-VYY22B6T.js +195 -0
- package/dist/complete-5I32XM7P.js +81 -0
- package/dist/connect-EUFFQQ7O.js +42 -0
- package/dist/conversation-D6KZHGPP.js +93 -0
- package/dist/conversion-writes-ECZBVY7D.js +120 -0
- package/dist/conversions-5QCSCRLI.js +76 -0
- package/dist/conversions-Y3X6ZTTF.js +135 -0
- package/dist/copy-writes-D2RTHAL6.js +167 -0
- package/dist/copy-writes-D2RTHAL6.js.map +1 -0
- package/dist/create-2JCRTQJL.js +59 -0
- package/dist/create-LMSQPHPB.js +235 -0
- package/dist/create-MBLNB5RY.js +132 -0
- package/dist/create-VR7RXKL7.js +207 -0
- package/dist/creatives-5C42BDMW.js +182 -0
- package/dist/creatives-HYPSTANO.js +58 -0
- package/dist/creatives-MZ6ICNSY.js +88 -0
- package/dist/creatives-MZ6ICNSY.js.map +1 -0
- package/dist/credentials-4H4AUYJN.js +287 -0
- package/dist/critique-UOJZWDG2.js +1458 -0
- package/dist/critique-WCWMQQVV.js +227 -0
- package/dist/crm-B7OTHMBP.js +318 -0
- package/dist/crm-DZRWKJ6V.js +224 -0
- package/dist/custom-conversions-FIP6ZS34.js +127 -0
- package/dist/custom-conversions-FIP6ZS34.js.map +1 -0
- package/dist/customers-AOFJJCGD.js +56 -0
- package/dist/delete-DEG5KOBY.js +64 -0
- package/dist/delete-EFIODCXG.js +54 -0
- package/dist/delete-PQIMW2LK.js +66 -0
- package/dist/demographics-F26DIOCM.js +138 -0
- package/dist/discard-2EJY6UGP.js +66 -0
- package/dist/domain-XLJABLWB.js +98 -0
- package/dist/draft-2YND6T4U.js +217 -0
- package/dist/draft-34CGWUVA.js +281 -0
- package/dist/draft-L45PGCYZ.js +237 -0
- package/dist/draft-L45PGCYZ.js.map +1 -0
- package/dist/draft-TCPK6XYW.js +332 -0
- package/dist/draft-TCPK6XYW.js.map +1 -0
- package/dist/draft-WRVEANL5.js +306 -0
- package/dist/engine/index.js +4 -4
- package/dist/experiment-7N4QFRWV.js +1397 -0
- package/dist/facets-OPTNDPW2.js +114 -0
- package/dist/feedback-43BPXNBI.js +106 -0
- package/dist/feedback-record-35ZSDL6Z.js +260 -0
- package/dist/fetch-O46XBA7S.js +176 -0
- package/dist/find-FSQAEGGF.js +134 -0
- package/dist/fit-CWJ5QQ4R.js +62 -0
- package/dist/flows-CVORIQ4B.js +247 -0
- package/dist/fonts-6TPYR6IW.js +36 -0
- package/dist/forecast-2VLA6NJA.js +118 -0
- package/dist/funnel-XLKDLXMG.js +394 -0
- package/dist/ga4-LPDIBNYP.js +55 -0
- package/dist/get-O56GGN3V.js +56 -0
- package/dist/get-WFQ4XEAW.js +79 -0
- package/dist/google-5ESVO76E.js +136 -0
- package/dist/google-ads-DZMOTUY5.js +195 -0
- package/dist/gsc-FIZTQX3N.js +30 -0
- package/dist/history-43BBQZOB.js +133 -0
- package/dist/history-QKDYBSYM.js +67 -0
- package/dist/hubspot-S44MPK3G.js +779 -0
- package/dist/icon-CSVAZ7NE.js +137 -0
- package/dist/ideas-SLP5WXFF.js +40 -0
- package/dist/images-TWZOROCT.js +92 -0
- package/dist/ingest-5GCZ5ZBV.js +23 -0
- package/dist/ingest-P54J4W3V.js +107 -0
- package/dist/insights-YWVJMATY.js +424 -0
- package/dist/insights-YWVJMATY.js.map +1 -0
- package/dist/inspect-S4COGUBC.js +189 -0
- package/dist/inspiration-IX5N724J.js +53 -0
- package/dist/instant-experiences-NQ2GWIWL.js +257 -0
- package/dist/instant-experiences-NQ2GWIWL.js.map +1 -0
- package/dist/keyword-metrics-26CCKFZK.js +197 -0
- package/dist/keywords-for-site-JWWECF63.js +128 -0
- package/dist/landing-VFDRADZY.js +28 -0
- package/dist/leads-DTKKYSKH.js +90 -0
- package/dist/leads-THI37ZMD.js +537 -0
- package/dist/leads-THI37ZMD.js.map +1 -0
- package/dist/learn-GQ75IPRK.js +204 -0
- package/dist/line-item-writes-DVVHVR3Y.js +208 -0
- package/dist/line-items-EOZMK7A5.js +103 -0
- package/dist/link-R5NGCQ5H.js +64 -0
- package/dist/linkedin-DHZO3IJX.js +1057 -0
- package/dist/list-57QBEGLM.js +303 -0
- package/dist/list-Q44BBHDI.js +64 -0
- package/dist/list-W6G2NTG5.js +151 -0
- package/dist/locations-HM56X2MK.js +67 -0
- package/dist/locations-HM56X2MK.js.map +1 -0
- package/dist/log-B6X5EPKA.js +92 -0
- package/dist/logo-VHXH4J6A.js +18 -0
- package/dist/make-OIFLF3QS.js +1353 -0
- package/dist/map-PIOZT2MQ.js +433 -0
- package/dist/mcp-GFKHLWDB.js +714 -0
- package/dist/media-H6B7VDON.js +18 -0
- package/dist/media-H6B7VDON.js.map +1 -0
- package/dist/media-sources-VMMMW5UM.js +32 -0
- package/dist/members-W2QBMNIW.js +44 -0
- package/dist/meta-YHDTGJQ6.js +122 -0
- package/dist/meta-YHDTGJQ6.js.map +1 -0
- package/dist/normalize-N6XC3SLC.js +141 -0
- package/dist/options-XYJY2OEQ.js +122 -0
- package/dist/organization-BVTXCZIV.js +942 -0
- package/dist/organization-BVTXCZIV.js.map +1 -0
- package/dist/page-photos-CXRG4AXV.js +115 -0
- package/dist/page-photos-CXRG4AXV.js.map +1 -0
- package/dist/pages-PTWRXAZT.js +66 -0
- package/dist/performance-7NEZTOJ5.js +24 -0
- package/dist/pixels-MYT3TCHZ.js +60 -0
- package/dist/pixels-ZZCQUS3J.js +108 -0
- package/dist/preview-XOXAAPMQ.js +215 -0
- package/dist/preview-XOXAAPMQ.js.map +1 -0
- package/dist/promoted-tweet-writes-X2F7R2AE.js +180 -0
- package/dist/promoted-tweets-XCSD6VKP.js +119 -0
- package/dist/publish-OBY6E43R.js +341 -0
- package/dist/reddit-WJ6KHYBC.js +26 -0
- package/dist/refresh-G5BQ2LWU.js +94 -0
- package/dist/release-PBZO35KY.js +60 -0
- package/dist/remove-VJ2MEUPM.js +50 -0
- package/dist/reopen-W3LYOHSR.js +63 -0
- package/dist/rerun-4GDNBFNM.js +90 -0
- package/dist/research-4YTFPGH7.js +262 -0
- package/dist/research-LOQRIBO6.js +62 -0
- package/dist/reset-55CCQGXB.js +54 -0
- package/dist/reset-AVTQEJPZ.js +54 -0
- package/dist/resolve-E6FNMFE3.js +121 -0
- package/dist/retry-HBJ7MKVI.js +60 -0
- package/dist/retry-QBRYM6MG.js +62 -0
- package/dist/rule-writes-6ZCAJDYZ.js +522 -0
- package/dist/rule-writes-6ZCAJDYZ.js.map +1 -0
- package/dist/rules-BMYOY2BM.js +216 -0
- package/dist/rules-BMYOY2BM.js.map +1 -0
- package/dist/rules-XNDBGOIS.js +96 -0
- package/dist/rules-add-UM3ZKSVD.js +462 -0
- package/dist/run-D4YHZ4Z4.js +66 -0
- package/dist/run-ZCJ7NP63.js +65 -0
- package/dist/scaffold-ad-VQZAP32M.js +1511 -0
- package/dist/scaffold-static-ad-LEU4M44N.js +1005 -0
- package/dist/scaffold-video-PSWSYRSC.js +883 -0
- package/dist/schedule-AAH7HYFK.js +61 -0
- package/dist/scheduled-agents-HDABMHZI.js +50 -0
- package/dist/schema-OH5OWMVQ.js +132 -0
- package/dist/search-BSDPVSGA.js +174 -0
- package/dist/select-EI4QF4YZ.js +101 -0
- package/dist/set-prompt-RKDAGUWG.js +193 -0
- package/dist/setup-links-CNNJA7AB.js +141 -0
- package/dist/shared-3IBNDEFL.js +31 -0
- package/dist/site-NV4U7PIF.js +177 -0
- package/dist/sources-ATONL7W5.js +454 -0
- package/dist/sources-C3TGHKLQ.js +30 -0
- package/dist/stale-6QPXL6BZ.js +71 -0
- package/dist/stats-ZAGJH4AD.js +34 -0
- package/dist/status-BML3F4MZ.js +62 -0
- package/dist/stock-6SHHLSKG.js +179 -0
- package/dist/studies-4NIV4D5Y.js +249 -0
- package/dist/studies-4NIV4D5Y.js.map +1 -0
- package/dist/studio-ZLCGXFAN.js +49 -0
- package/dist/study-writes-L2AA2PGL.js +467 -0
- package/dist/study-writes-L2AA2PGL.js.map +1 -0
- package/dist/sync-DZAOUQPE.js +54 -0
- package/dist/sync-definition-RFEL65JE.js +64 -0
- package/dist/tag-manager-3CJ66GKJ.js +43 -0
- package/dist/tags-2KSXCJRZ.js +20 -0
- package/dist/tags-662KZJLV.js +26 -0
- package/dist/tags-6QBVW25V.js +20 -0
- package/dist/tags-LQCEJGIL.js +20 -0
- package/dist/tags-RIVD54ZG.js +224 -0
- package/dist/targeting-LNDQV4EK.js +759 -0
- package/dist/targeting-LNDQV4EK.js.map +1 -0
- package/dist/targeting-criteria-XNLYPIL2.js +113 -0
- package/dist/targets-OYIVS5KJ.js +103 -0
- package/dist/testimonials-WT43CF7V.js +32 -0
- package/dist/top-companies-6QQMOS2Y.js +108 -0
- package/dist/translate-7QN7JFGU.js +604 -0
- package/dist/triggers-LVQY3QJ2.js +142 -0
- package/dist/unlink-5ASZTCS2.js +67 -0
- package/dist/unstage-LNZTEATR.js +85 -0
- package/dist/update-7BIR4GYO.js +152 -0
- package/dist/update-BRLM5DB3.js +98 -0
- package/dist/update-DRZAAJQ2.js +63 -0
- package/dist/update-NOWC3ICD.js +188 -0
- package/dist/upload-457Q4ANZ.js +126 -0
- package/dist/url-params-KM4NJGYC.js +98 -0
- package/dist/validate-COLEPJBA.js +117 -0
- package/dist/videos-5IDZTEWC.js +39 -0
- package/dist/viewer-check-433AZPBC.js +80 -0
- package/dist/viewer-check-433AZPBC.js.map +1 -0
- package/dist/web-FZYOCCYN.js +140 -0
- package/dist/winning-ads-I4DMP7RU.js +84 -0
- package/dist/write-commands-FYB6QG7K.js +1024 -0
- package/dist/write-commands-PEJBTME6.js +1165 -0
- package/dist/write-commands-PEJBTME6.js.map +1 -0
- package/dist/x-OMN5DDLM.js +47 -0
- package/package.json +1 -1
- package/dist/account-7LUQWY6Q.js +0 -49
- package/dist/account-7LUQWY6Q.js.map +0 -1
- package/dist/account-KNRDOUJP.js +0 -79
- package/dist/account-Z65CPOWE.js +0 -80
- package/dist/account-writes-4N2MA2ZR.js +0 -66
- package/dist/accounts-RTN5ZGTU.js +0 -611
- package/dist/accounts-RW6KXBOQ.js +0 -77
- package/dist/accounts-UA2ZWRN4.js +0 -75
- package/dist/actions-HNLISA7T.js +0 -55
- package/dist/activecampaign-I5CILZPU.js +0 -935
- package/dist/activities-IQPJPP4B.js +0 -74
- package/dist/ad-group-writes-EUTMPBMK.js +0 -170
- package/dist/ad-groups-OVPAI5RM.js +0 -68
- package/dist/ad-writes-DACTYFEO.js +0 -174
- package/dist/add-6WKPFMLG.js +0 -302
- package/dist/add-XF5COUAS.js +0 -104
- package/dist/ads-G6AS5L7G.js +0 -40
- package/dist/ads-HXX2IAFF.js +0 -113
- package/dist/ads-HXX2IAFF.js.map +0 -1
- package/dist/ads-L65JIKCD.js +0 -77
- package/dist/adsets-LPN6WFGF.js +0 -176
- package/dist/adsets-LPN6WFGF.js.map +0 -1
- package/dist/advertisers-6NUM2Q3A.js +0 -120
- package/dist/analytics-QKP3A5F3.js +0 -1976
- package/dist/analytics-VLHE5A2M.js +0 -433
- package/dist/assign-6HI6TNLP.js +0 -77
- package/dist/audience-size-25LP2OBF.js +0 -73
- package/dist/audiences-RPLVMO4H.js +0 -268
- package/dist/audiences-XEZHACKH.js +0 -78
- package/dist/audiences-XEZHACKH.js.map +0 -1
- package/dist/audit-YY6X2MPA.js +0 -151
- package/dist/autocomplete-SAWJK4NF.js +0 -111
- package/dist/avatars-MXTI74VC.js +0 -38
- package/dist/bid-pricing-HZ74SLEB.js +0 -100
- package/dist/brand-T3OACVQX.js +0 -22
- package/dist/brief-BN4UGUXF.js +0 -538
- package/dist/businesses-PRRYPR7H.js +0 -53
- package/dist/campaign-groups-YJK767AP.js +0 -95
- package/dist/campaign-writes-BAFB5E7A.js +0 -165
- package/dist/campaign-writes-BAFB5E7A.js.map +0 -1
- package/dist/campaign-writes-U5LTDTYK.js +0 -170
- package/dist/campaigns-4SOLY7OR.js +0 -110
- package/dist/campaigns-4SOLY7OR.js.map +0 -1
- package/dist/campaigns-GALDR5KK.js +0 -109
- package/dist/campaigns-NR6TNQFN.js +0 -107
- package/dist/campaigns-TFEQTSO3.js +0 -76
- package/dist/canvas-GJAQAVS6.js +0 -46
- package/dist/capabilities-2KT6TCGZ.js +0 -144
- package/dist/catalog-USZL4SGX.js +0 -65
- package/dist/catalogs-A7XMEEEP.js +0 -128
- package/dist/chatgpt-4PEWDJKP.js +0 -47
- package/dist/chats-INN2OHSH.js +0 -262
- package/dist/chats-INN2OHSH.js.map +0 -1
- package/dist/check-MMJGFFZS.js +0 -104
- package/dist/chunk-2LI6746F.js +0 -103
- package/dist/chunk-2PWNIEW4.js +0 -197
- package/dist/chunk-2XRMPSEV.js +0 -142
- package/dist/chunk-3TZVZXM6.js +0 -224
- package/dist/chunk-3UXMQ3K2.js +0 -274
- package/dist/chunk-3UXMQ3K2.js.map +0 -1
- package/dist/chunk-5HJRZFMW.js +0 -207
- package/dist/chunk-62JQQUAU.js +0 -5368
- package/dist/chunk-66QHX566.js +0 -6306
- package/dist/chunk-66QHX566.js.map +0 -1
- package/dist/chunk-6JWEGFM5.js +0 -174
- package/dist/chunk-6JWEGFM5.js.map +0 -1
- package/dist/chunk-6WCAV27H.js +0 -494
- package/dist/chunk-6WXV5GTA.js +0 -8914
- package/dist/chunk-7RBJ2Z7Z.js +0 -172
- package/dist/chunk-7RBJ2Z7Z.js.map +0 -1
- package/dist/chunk-AVNSH2JE.js +0 -8939
- package/dist/chunk-BITS62MF.js +0 -77
- package/dist/chunk-BL2MX6CR.js +0 -249
- package/dist/chunk-BOPC3D6I.js +0 -604
- package/dist/chunk-C6EYCD5J.js +0 -942
- package/dist/chunk-CSZFZKVX.js +0 -97
- package/dist/chunk-D5CUAOQX.js +0 -297
- package/dist/chunk-D5UXWKLQ.js +0 -903
- package/dist/chunk-FA4YZFRV.js +0 -392
- package/dist/chunk-FUKDI2UK.js +0 -122
- package/dist/chunk-G4STCTY3.js +0 -399
- package/dist/chunk-GOJXKIFQ.js +0 -1605
- package/dist/chunk-GOJXKIFQ.js.map +0 -1
- package/dist/chunk-H5HDZ7IC.js +0 -139
- package/dist/chunk-HSPMBLKE.js +0 -363
- package/dist/chunk-IJ22WP3G.js +0 -275
- package/dist/chunk-ILSKYRDR.js +0 -169
- package/dist/chunk-JQU2LUZG.js +0 -57
- package/dist/chunk-JWSEPW7F.js +0 -225
- package/dist/chunk-KIGGMKAE.js +0 -66
- package/dist/chunk-KIGGMKAE.js.map +0 -1
- package/dist/chunk-KPYDTIAI.js +0 -317
- package/dist/chunk-LBO2YAZY.js +0 -3868
- package/dist/chunk-LOMH4TTC.js +0 -1079
- package/dist/chunk-LPXSM2DI.js +0 -66
- package/dist/chunk-MVB32GPI.js +0 -592
- package/dist/chunk-MXH35PJ5.js +0 -51
- package/dist/chunk-NEIUVSDK.js +0 -206
- package/dist/chunk-NPMAATZG.js +0 -64
- package/dist/chunk-NXZCCGES.js +0 -159
- package/dist/chunk-OP7DNHD2.js +0 -137
- package/dist/chunk-OP7DNHD2.js.map +0 -1
- package/dist/chunk-OWA7ZLC4.js +0 -547
- package/dist/chunk-P3W6SRSQ.js +0 -455
- package/dist/chunk-PA4W7BCQ.js +0 -23
- package/dist/chunk-PTGYM4J6.js +0 -89
- package/dist/chunk-QE3JEJXF.js +0 -831
- package/dist/chunk-QNLJ3GNZ.js +0 -433
- package/dist/chunk-R3EKM2P2.js +0 -191
- package/dist/chunk-SISA4HQR.js +0 -61
- package/dist/chunk-TP7HKSBX.js +0 -172
- package/dist/chunk-TPANP5A2.js +0 -91
- package/dist/chunk-TRPJJMCS.js +0 -346
- package/dist/chunk-TZEVD4Q6.js +0 -160
- package/dist/chunk-UWXDNVS5.js +0 -167
- package/dist/chunk-VD73V44J.js +0 -344
- package/dist/chunk-X7F4Z6UM.js +0 -156
- package/dist/chunk-ZL23HA4N.js +0 -19
- package/dist/claim-SLGYOOWD.js +0 -197
- package/dist/companies-IVMH6YII.js +0 -195
- package/dist/complete-45L2FI2X.js +0 -81
- package/dist/connect-WBGCBBFJ.js +0 -42
- package/dist/conversation-RIOL3OJ7.js +0 -93
- package/dist/conversion-writes-JU7Q2MUO.js +0 -120
- package/dist/conversions-3ISBR3TS.js +0 -76
- package/dist/conversions-TKIXNSYR.js +0 -135
- package/dist/create-7JY2PTIZ.js +0 -132
- package/dist/create-ACLCRXQP.js +0 -59
- package/dist/create-KYBMFD32.js +0 -207
- package/dist/create-VAPJ52GJ.js +0 -235
- package/dist/creatives-S5QUWUL6.js +0 -58
- package/dist/creatives-VQO2TKE3.js +0 -182
- package/dist/creatives-YJ3CXZQC.js +0 -87
- package/dist/creatives-YJ3CXZQC.js.map +0 -1
- package/dist/credentials-YTQ6BHWV.js +0 -287
- package/dist/critique-5LCG5TYF.js +0 -227
- package/dist/critique-BHYJYZDV.js +0 -1458
- package/dist/crm-IKTWHWEB.js +0 -318
- package/dist/crm-N7K57LZJ.js +0 -224
- package/dist/custom-conversions-YRYE65PU.js +0 -125
- package/dist/custom-conversions-YRYE65PU.js.map +0 -1
- package/dist/customers-NLU7NYDC.js +0 -56
- package/dist/delete-26J3X3ZH.js +0 -64
- package/dist/delete-A4F5Z54J.js +0 -66
- package/dist/delete-EVXOFT2H.js +0 -54
- package/dist/demographics-VZKFMM4X.js +0 -138
- package/dist/discard-ULRVUJDV.js +0 -66
- package/dist/domain-L4WCCX7R.js +0 -98
- package/dist/draft-57OQKHZI.js +0 -306
- package/dist/draft-EWDOIXSH.js +0 -233
- package/dist/draft-EWDOIXSH.js.map +0 -1
- package/dist/draft-GPN3HOAG.js +0 -328
- package/dist/draft-GPN3HOAG.js.map +0 -1
- package/dist/draft-O4S5RKWK.js +0 -217
- package/dist/draft-Y2QJE2NM.js +0 -281
- package/dist/experiment-G3FQVAJU.js +0 -1397
- package/dist/facets-EHQKGGJ2.js +0 -114
- package/dist/feedback-CAOZPGTT.js +0 -106
- package/dist/feedback-record-EXV5H6OS.js +0 -260
- package/dist/fetch-ETKT2RBC.js +0 -176
- package/dist/find-EVY4XEIQ.js +0 -134
- package/dist/fit-UJQ47C4A.js +0 -62
- package/dist/flows-Z7355RMD.js +0 -247
- package/dist/fonts-7VWBQPJF.js +0 -36
- package/dist/forecast-OI7YWZ6F.js +0 -118
- package/dist/funnel-2B3JXJPX.js +0 -394
- package/dist/ga4-2BL5YAYN.js +0 -55
- package/dist/get-2RSN4N3J.js +0 -56
- package/dist/get-6N7QJMIP.js +0 -79
- package/dist/google-7STODZQR.js +0 -136
- package/dist/google-ads-G7REKD4A.js +0 -195
- package/dist/gsc-UU3T2C6B.js +0 -30
- package/dist/history-IQ33J5PB.js +0 -67
- package/dist/history-YMK2JNZU.js +0 -133
- package/dist/hubspot-BUFS7S33.js +0 -779
- package/dist/icon-GB7UH5RF.js +0 -137
- package/dist/ideas-F6CIGTVU.js +0 -40
- package/dist/images-WCKTD6Z2.js +0 -92
- package/dist/ingest-RQUJGS7K.js +0 -107
- package/dist/ingest-XLTRLCDV.js +0 -23
- package/dist/insights-4HT2NAYP.js +0 -423
- package/dist/insights-4HT2NAYP.js.map +0 -1
- package/dist/inspect-KFVAMD4N.js +0 -189
- package/dist/inspiration-XQYHBJY2.js +0 -53
- package/dist/keyword-metrics-WYF3QMCW.js +0 -197
- package/dist/keywords-for-site-G5L5EP3T.js +0 -128
- package/dist/landing-WUILAWDS.js +0 -28
- package/dist/leads-2XOSAYP4.js +0 -293
- package/dist/leads-2XOSAYP4.js.map +0 -1
- package/dist/leads-4SJ4NJOI.js +0 -90
- package/dist/learn-CC6Q5IK2.js +0 -204
- package/dist/line-item-writes-YXKYR25W.js +0 -208
- package/dist/line-items-CKUD2UU4.js +0 -103
- package/dist/link-VBYFI7AM.js +0 -64
- package/dist/linkedin-XKVPSCLV.js +0 -1057
- package/dist/list-6ZNZGRRK.js +0 -151
- package/dist/list-ENYDGT3F.js +0 -64
- package/dist/list-VSUF2IWT.js +0 -303
- package/dist/locations-YA7NZY44.js +0 -67
- package/dist/locations-YA7NZY44.js.map +0 -1
- package/dist/log-AACKGBDW.js +0 -92
- package/dist/logo-YSNUUT33.js +0 -18
- package/dist/make-ED7HBLH3.js +0 -1353
- package/dist/map-63CQHWPI.js +0 -433
- package/dist/mcp-RKAXC6IP.js +0 -714
- package/dist/media-ES2UBGYW.js +0 -15
- package/dist/media-ES2UBGYW.js.map +0 -1
- package/dist/media-sources-PEHUMH7C.js +0 -32
- package/dist/members-SELIA674.js +0 -44
- package/dist/meta-AOIPEDV5.js +0 -69
- package/dist/meta-AOIPEDV5.js.map +0 -1
- package/dist/normalize-VAZPTBDX.js +0 -141
- package/dist/options-6FCNFWUF.js +0 -122
- package/dist/organization-SHREKDST.js +0 -881
- package/dist/organization-SHREKDST.js.map +0 -1
- package/dist/pages-FTI44OSH.js +0 -66
- package/dist/performance-K7E5KAZW.js +0 -24
- package/dist/pixels-6IUB3Y3H.js +0 -60
- package/dist/pixels-MBKR4XPX.js +0 -108
- package/dist/preview-V4YBD45S.js +0 -169
- package/dist/preview-V4YBD45S.js.map +0 -1
- package/dist/promoted-tweet-writes-PKEO6WUK.js +0 -180
- package/dist/promoted-tweets-7MXVZRBI.js +0 -119
- package/dist/publish-MPMGRV72.js +0 -341
- package/dist/reddit-XIHRI3CN.js +0 -26
- package/dist/refresh-A27N75NH.js +0 -94
- package/dist/release-UKRB5IUN.js +0 -60
- package/dist/remove-AFNFVPZY.js +0 -50
- package/dist/reopen-M5HE6J3G.js +0 -63
- package/dist/rerun-A2XHGFZS.js +0 -90
- package/dist/research-BLDY5UWH.js +0 -62
- package/dist/research-U7RQXMYH.js +0 -262
- package/dist/reset-4CCWB2RT.js +0 -54
- package/dist/reset-J3KCWFMZ.js +0 -54
- package/dist/resolve-HEK27ANI.js +0 -121
- package/dist/retry-HPZIUG2S.js +0 -62
- package/dist/retry-VVI6N6UR.js +0 -60
- package/dist/rules-SK5DFFPY.js +0 -96
- package/dist/rules-add-YQNYSME7.js +0 -462
- package/dist/run-KBN5K7LE.js +0 -65
- package/dist/run-M7ZDE6IA.js +0 -66
- package/dist/scaffold-ad-6BN5LWQH.js +0 -1511
- package/dist/scaffold-static-ad-VVZRAWBR.js +0 -1005
- package/dist/scaffold-video-LFIYI4GP.js +0 -883
- package/dist/schedule-QMOKWTJ3.js +0 -61
- package/dist/scheduled-agents-FCQHQ6KR.js +0 -50
- package/dist/schema-THFLCMBN.js +0 -132
- package/dist/search-XIUYSWO6.js +0 -174
- package/dist/select-QBU6ED4K.js +0 -101
- package/dist/set-prompt-TL64CRBQ.js +0 -193
- package/dist/setup-links-QVI6NAOK.js +0 -141
- package/dist/shared-NDRFKAH7.js +0 -31
- package/dist/site-PZPJY33N.js +0 -177
- package/dist/sources-ER7ANNG3.js +0 -454
- package/dist/sources-RMNFV4CA.js +0 -30
- package/dist/stale-ITFCPOER.js +0 -71
- package/dist/stats-RCLQE4HJ.js +0 -34
- package/dist/status-ABMJBCPJ.js +0 -62
- package/dist/stock-ECRBD7RP.js +0 -179
- package/dist/studio-MARZ22J2.js +0 -49
- package/dist/sync-QDD3MRJ6.js +0 -54
- package/dist/sync-definition-C6ROLKJ4.js +0 -64
- package/dist/tag-manager-G3LBQZUL.js +0 -43
- package/dist/tags-5JYOEYIT.js +0 -20
- package/dist/tags-B473RWAA.js +0 -224
- package/dist/tags-EWHPUM2V.js +0 -20
- package/dist/tags-KBCX6BDU.js +0 -26
- package/dist/tags-PEWN6GNZ.js +0 -20
- package/dist/targeting-criteria-EU65WUUF.js +0 -113
- package/dist/targets-KVXS5QKM.js +0 -103
- package/dist/testimonials-YMMA5YWL.js +0 -32
- package/dist/top-companies-OOX3DITI.js +0 -108
- package/dist/translate-OXVIMYHE.js +0 -604
- package/dist/triggers-OX2GKG4Y.js +0 -142
- package/dist/unlink-3USEPJSA.js +0 -67
- package/dist/unstage-VSCNPTAC.js +0 -85
- package/dist/update-6JKTH65B.js +0 -152
- package/dist/update-FG4ELXYJ.js +0 -98
- package/dist/update-GZFKHA3A.js +0 -188
- package/dist/update-HZHG67N6.js +0 -63
- package/dist/upload-BKCQ6FRW.js +0 -126
- package/dist/url-params-UN4DRN2H.js +0 -98
- package/dist/validate-ZS2M5Q3V.js +0 -117
- package/dist/videos-I6YXFBFT.js +0 -39
- package/dist/viewer-check-7ZG7KHEN.js +0 -80
- package/dist/web-UGU7YMII.js +0 -140
- package/dist/winning-ads-ABN5OULS.js +0 -84
- package/dist/write-commands-6VR2UD3T.js +0 -1024
- package/dist/write-commands-HCQI4Y27.js +0 -737
- package/dist/write-commands-HCQI4Y27.js.map +0 -1
- package/dist/x-WK2VQDPF.js +0 -47
- /package/dist/{account-Z65CPOWE.js.map → account-3H6BZO5H.js.map} +0 -0
- /package/dist/{account-KNRDOUJP.js.map → account-VGSYM7LY.js.map} +0 -0
- /package/dist/{account-writes-4N2MA2ZR.js.map → account-writes-AE5IJGGW.js.map} +0 -0
- /package/dist/{accounts-RW6KXBOQ.js.map → accounts-2ARS6XP2.js.map} +0 -0
- /package/dist/{accounts-RTN5ZGTU.js.map → accounts-AQFW4ZUM.js.map} +0 -0
- /package/dist/{accounts-UA2ZWRN4.js.map → accounts-K4INATCW.js.map} +0 -0
- /package/dist/{actions-HNLISA7T.js.map → actions-QMUHOAXG.js.map} +0 -0
- /package/dist/{activecampaign-I5CILZPU.js.map → activecampaign-J3QN5FMG.js.map} +0 -0
- /package/dist/{activities-IQPJPP4B.js.map → activities-T253KK4Q.js.map} +0 -0
- /package/dist/{ad-group-writes-EUTMPBMK.js.map → ad-group-writes-VRSBI2Z2.js.map} +0 -0
- /package/dist/{ad-groups-OVPAI5RM.js.map → ad-groups-IEBVEAMS.js.map} +0 -0
- /package/dist/{ad-writes-DACTYFEO.js.map → ad-writes-ALV4KFPZ.js.map} +0 -0
- /package/dist/{add-XF5COUAS.js.map → add-VDUA6OWM.js.map} +0 -0
- /package/dist/{add-6WKPFMLG.js.map → add-XHOKCSW5.js.map} +0 -0
- /package/dist/{ads-L65JIKCD.js.map → ads-CQZHD7FC.js.map} +0 -0
- /package/dist/{ads-G6AS5L7G.js.map → ads-HGDPNIT6.js.map} +0 -0
- /package/dist/{advertisers-6NUM2Q3A.js.map → advertisers-UDSEFMP7.js.map} +0 -0
- /package/dist/{analytics-VLHE5A2M.js.map → analytics-TBETZOPJ.js.map} +0 -0
- /package/dist/{analytics-QKP3A5F3.js.map → analytics-VH74LMMC.js.map} +0 -0
- /package/dist/{connect-WBGCBBFJ.js.map → asset-writes-L5TMKIZC.js.map} +0 -0
- /package/dist/{assign-6HI6TNLP.js.map → assign-6IE2ASFC.js.map} +0 -0
- /package/dist/{audience-size-25LP2OBF.js.map → audience-size-CSBWDFEP.js.map} +0 -0
- /package/dist/{audiences-RPLVMO4H.js.map → audiences-AAZH56WD.js.map} +0 -0
- /package/dist/{audit-YY6X2MPA.js.map → audit-AEENRVGD.js.map} +0 -0
- /package/dist/{autocomplete-SAWJK4NF.js.map → autocomplete-AAGTJHVL.js.map} +0 -0
- /package/dist/{avatars-MXTI74VC.js.map → avatars-VEATUUKU.js.map} +0 -0
- /package/dist/{bid-pricing-HZ74SLEB.js.map → bid-pricing-SZTGCZTV.js.map} +0 -0
- /package/dist/{brand-T3OACVQX.js.map → brand-MXGETE4R.js.map} +0 -0
- /package/dist/{brief-BN4UGUXF.js.map → brief-3GHSHOGM.js.map} +0 -0
- /package/dist/{businesses-PRRYPR7H.js.map → businesses-H3HIDQX6.js.map} +0 -0
- /package/dist/{campaign-groups-YJK767AP.js.map → campaign-groups-WRI56M5X.js.map} +0 -0
- /package/dist/{campaign-writes-U5LTDTYK.js.map → campaign-writes-U5PUVSMT.js.map} +0 -0
- /package/dist/{campaigns-GALDR5KK.js.map → campaigns-4QWC2JE7.js.map} +0 -0
- /package/dist/{campaigns-TFEQTSO3.js.map → campaigns-JEIKY2M4.js.map} +0 -0
- /package/dist/{campaigns-NR6TNQFN.js.map → campaigns-Q4HN7HBY.js.map} +0 -0
- /package/dist/{canvas-GJAQAVS6.js.map → canvas-VJ3XKCAC.js.map} +0 -0
- /package/dist/{capabilities-2KT6TCGZ.js.map → capabilities-SNGGAOV3.js.map} +0 -0
- /package/dist/{catalog-USZL4SGX.js.map → catalog-S32MX453.js.map} +0 -0
- /package/dist/{catalogs-A7XMEEEP.js.map → catalogs-OCVXZLIF.js.map} +0 -0
- /package/dist/{chatgpt-4PEWDJKP.js.map → chatgpt-QVF2FD3E.js.map} +0 -0
- /package/dist/{check-MMJGFFZS.js.map → check-Z6UMIQKD.js.map} +0 -0
- /package/dist/{chunk-KPYDTIAI.js.map → chunk-2WZI36D3.js.map} +0 -0
- /package/dist/{chunk-FA4YZFRV.js.map → chunk-3AMLOCXY.js.map} +0 -0
- /package/dist/{chunk-X7F4Z6UM.js.map → chunk-3CVAEQMZ.js.map} +0 -0
- /package/dist/{chunk-SISA4HQR.js.map → chunk-3WAYZQNV.js.map} +0 -0
- /package/dist/{chunk-JWSEPW7F.js.map → chunk-46GWHUKN.js.map} +0 -0
- /package/dist/{chunk-R3EKM2P2.js.map → chunk-4O6T76A3.js.map} +0 -0
- /package/dist/{chunk-D5UXWKLQ.js.map → chunk-5MCVK4A3.js.map} +0 -0
- /package/dist/{chunk-CSZFZKVX.js.map → chunk-5ZLN23V5.js.map} +0 -0
- /package/dist/{chunk-OWA7ZLC4.js.map → chunk-77ULVP62.js.map} +0 -0
- /package/dist/{chunk-QNLJ3GNZ.js.map → chunk-AW2GKIGS.js.map} +0 -0
- /package/dist/{chunk-BL2MX6CR.js.map → chunk-BRLY6XD6.js.map} +0 -0
- /package/dist/{chunk-NPMAATZG.js.map → chunk-C7NWUCLQ.js.map} +0 -0
- /package/dist/{chunk-PA4W7BCQ.js.map → chunk-D4HKJBEW.js.map} +0 -0
- /package/dist/{chunk-H5HDZ7IC.js.map → chunk-DCBZ5CHZ.js.map} +0 -0
- /package/dist/{chunk-BITS62MF.js.map → chunk-G6XKD7QE.js.map} +0 -0
- /package/dist/{chunk-TP7HKSBX.js.map → chunk-GBFL4TD2.js.map} +0 -0
- /package/dist/{chunk-3TZVZXM6.js.map → chunk-H5SCKWFT.js.map} +0 -0
- /package/dist/{chunk-HSPMBLKE.js.map → chunk-HXPK6KAL.js.map} +0 -0
- /package/dist/{chunk-2PWNIEW4.js.map → chunk-I7GOSMWT.js.map} +0 -0
- /package/dist/{chunk-LOMH4TTC.js.map → chunk-IBY44U2M.js.map} +0 -0
- /package/dist/{chunk-IJ22WP3G.js.map → chunk-ITNHIZKK.js.map} +0 -0
- /package/dist/{chunk-P3W6SRSQ.js.map → chunk-J33P2JNS.js.map} +0 -0
- /package/dist/{chunk-NEIUVSDK.js.map → chunk-JH2L5CQD.js.map} +0 -0
- /package/dist/{chunk-62JQQUAU.js.map → chunk-JQH5VG6F.js.map} +0 -0
- /package/dist/{chunk-6WXV5GTA.js.map → chunk-JVH5A3XC.js.map} +0 -0
- /package/dist/{chunk-ILSKYRDR.js.map → chunk-KTOYQP6D.js.map} +0 -0
- /package/dist/{chunk-G4STCTY3.js.map → chunk-LO3IF5PS.js.map} +0 -0
- /package/dist/{chunk-BOPC3D6I.js.map → chunk-LRRFGOW3.js.map} +0 -0
- /package/dist/{chunk-C6EYCD5J.js.map → chunk-LTPTJWZC.js.map} +0 -0
- /package/dist/{chunk-NXZCCGES.js.map → chunk-MRQHJW5U.js.map} +0 -0
- /package/dist/{chunk-TRPJJMCS.js.map → chunk-NHYI7ORL.js.map} +0 -0
- /package/dist/{chunk-MXH35PJ5.js.map → chunk-NLI7C3K2.js.map} +0 -0
- /package/dist/{chunk-TPANP5A2.js.map → chunk-NSEMXBUB.js.map} +0 -0
- /package/dist/{chunk-LBO2YAZY.js.map → chunk-OM2BRYXJ.js.map} +0 -0
- /package/dist/{chunk-2LI6746F.js.map → chunk-OY4SKCIU.js.map} +0 -0
- /package/dist/{chunk-6WCAV27H.js.map → chunk-OYAJNTRO.js.map} +0 -0
- /package/dist/{chunk-QE3JEJXF.js.map → chunk-PL7J3DPQ.js.map} +0 -0
- /package/dist/{chunk-PTGYM4J6.js.map → chunk-PUSBUMYM.js.map} +0 -0
- /package/dist/{chunk-D5CUAOQX.js.map → chunk-RRADFRPI.js.map} +0 -0
- /package/dist/{chunk-VD73V44J.js.map → chunk-SGEPZB3D.js.map} +0 -0
- /package/dist/{chunk-LPXSM2DI.js.map → chunk-TFTZDWCX.js.map} +0 -0
- /package/dist/{chunk-2XRMPSEV.js.map → chunk-TG4NCHFS.js.map} +0 -0
- /package/dist/{chunk-5HJRZFMW.js.map → chunk-TTHM66TA.js.map} +0 -0
- /package/dist/{chunk-ZL23HA4N.js.map → chunk-VL2GNXZY.js.map} +0 -0
- /package/dist/{chunk-TZEVD4Q6.js.map → chunk-VQPZDM6N.js.map} +0 -0
- /package/dist/{chunk-JQU2LUZG.js.map → chunk-XCKINS7K.js.map} +0 -0
- /package/dist/{chunk-AVNSH2JE.js.map → chunk-YLYXSJ6O.js.map} +0 -0
- /package/dist/{chunk-MVB32GPI.js.map → chunk-ZAPO6UWS.js.map} +0 -0
- /package/dist/{chunk-FUKDI2UK.js.map → chunk-ZEPUDYPL.js.map} +0 -0
- /package/dist/{chunk-UWXDNVS5.js.map → chunk-ZJSGGJ5R.js.map} +0 -0
- /package/dist/{claim-SLGYOOWD.js.map → claim-J2LYNHZK.js.map} +0 -0
- /package/dist/{companies-IVMH6YII.js.map → companies-VYY22B6T.js.map} +0 -0
- /package/dist/{complete-45L2FI2X.js.map → complete-5I32XM7P.js.map} +0 -0
- /package/dist/{customers-NLU7NYDC.js.map → connect-EUFFQQ7O.js.map} +0 -0
- /package/dist/{conversation-RIOL3OJ7.js.map → conversation-D6KZHGPP.js.map} +0 -0
- /package/dist/{conversion-writes-JU7Q2MUO.js.map → conversion-writes-ECZBVY7D.js.map} +0 -0
- /package/dist/{conversions-3ISBR3TS.js.map → conversions-5QCSCRLI.js.map} +0 -0
- /package/dist/{conversions-TKIXNSYR.js.map → conversions-Y3X6ZTTF.js.map} +0 -0
- /package/dist/{create-ACLCRXQP.js.map → create-2JCRTQJL.js.map} +0 -0
- /package/dist/{create-VAPJ52GJ.js.map → create-LMSQPHPB.js.map} +0 -0
- /package/dist/{create-7JY2PTIZ.js.map → create-MBLNB5RY.js.map} +0 -0
- /package/dist/{create-KYBMFD32.js.map → create-VR7RXKL7.js.map} +0 -0
- /package/dist/{creatives-VQO2TKE3.js.map → creatives-5C42BDMW.js.map} +0 -0
- /package/dist/{creatives-S5QUWUL6.js.map → creatives-HYPSTANO.js.map} +0 -0
- /package/dist/{credentials-YTQ6BHWV.js.map → credentials-4H4AUYJN.js.map} +0 -0
- /package/dist/{critique-BHYJYZDV.js.map → critique-UOJZWDG2.js.map} +0 -0
- /package/dist/{critique-5LCG5TYF.js.map → critique-WCWMQQVV.js.map} +0 -0
- /package/dist/{crm-IKTWHWEB.js.map → crm-B7OTHMBP.js.map} +0 -0
- /package/dist/{crm-N7K57LZJ.js.map → crm-DZRWKJ6V.js.map} +0 -0
- /package/dist/{fit-UJQ47C4A.js.map → customers-AOFJJCGD.js.map} +0 -0
- /package/dist/{delete-26J3X3ZH.js.map → delete-DEG5KOBY.js.map} +0 -0
- /package/dist/{delete-EVXOFT2H.js.map → delete-EFIODCXG.js.map} +0 -0
- /package/dist/{delete-A4F5Z54J.js.map → delete-PQIMW2LK.js.map} +0 -0
- /package/dist/{demographics-VZKFMM4X.js.map → demographics-F26DIOCM.js.map} +0 -0
- /package/dist/{discard-ULRVUJDV.js.map → discard-2EJY6UGP.js.map} +0 -0
- /package/dist/{domain-L4WCCX7R.js.map → domain-XLJABLWB.js.map} +0 -0
- /package/dist/{draft-O4S5RKWK.js.map → draft-2YND6T4U.js.map} +0 -0
- /package/dist/{draft-Y2QJE2NM.js.map → draft-34CGWUVA.js.map} +0 -0
- /package/dist/{draft-57OQKHZI.js.map → draft-WRVEANL5.js.map} +0 -0
- /package/dist/{experiment-G3FQVAJU.js.map → experiment-7N4QFRWV.js.map} +0 -0
- /package/dist/{facets-EHQKGGJ2.js.map → facets-OPTNDPW2.js.map} +0 -0
- /package/dist/{feedback-CAOZPGTT.js.map → feedback-43BPXNBI.js.map} +0 -0
- /package/dist/{feedback-record-EXV5H6OS.js.map → feedback-record-35ZSDL6Z.js.map} +0 -0
- /package/dist/{fetch-ETKT2RBC.js.map → fetch-O46XBA7S.js.map} +0 -0
- /package/dist/{find-EVY4XEIQ.js.map → find-FSQAEGGF.js.map} +0 -0
- /package/dist/{fonts-7VWBQPJF.js.map → fit-CWJ5QQ4R.js.map} +0 -0
- /package/dist/{flows-Z7355RMD.js.map → flows-CVORIQ4B.js.map} +0 -0
- /package/dist/{ideas-F6CIGTVU.js.map → fonts-6TPYR6IW.js.map} +0 -0
- /package/dist/{forecast-OI7YWZ6F.js.map → forecast-2VLA6NJA.js.map} +0 -0
- /package/dist/{funnel-2B3JXJPX.js.map → funnel-XLKDLXMG.js.map} +0 -0
- /package/dist/{ga4-2BL5YAYN.js.map → ga4-LPDIBNYP.js.map} +0 -0
- /package/dist/{get-2RSN4N3J.js.map → get-O56GGN3V.js.map} +0 -0
- /package/dist/{get-6N7QJMIP.js.map → get-WFQ4XEAW.js.map} +0 -0
- /package/dist/{google-7STODZQR.js.map → google-5ESVO76E.js.map} +0 -0
- /package/dist/{google-ads-G7REKD4A.js.map → google-ads-DZMOTUY5.js.map} +0 -0
- /package/dist/{gsc-UU3T2C6B.js.map → gsc-FIZTQX3N.js.map} +0 -0
- /package/dist/{history-YMK2JNZU.js.map → history-43BBQZOB.js.map} +0 -0
- /package/dist/{history-IQ33J5PB.js.map → history-QKDYBSYM.js.map} +0 -0
- /package/dist/{hubspot-BUFS7S33.js.map → hubspot-S44MPK3G.js.map} +0 -0
- /package/dist/{icon-GB7UH5RF.js.map → icon-CSVAZ7NE.js.map} +0 -0
- /package/dist/{ingest-XLTRLCDV.js.map → ideas-SLP5WXFF.js.map} +0 -0
- /package/dist/{images-WCKTD6Z2.js.map → images-TWZOROCT.js.map} +0 -0
- /package/dist/{logo-YSNUUT33.js.map → ingest-5GCZ5ZBV.js.map} +0 -0
- /package/dist/{ingest-RQUJGS7K.js.map → ingest-P54J4W3V.js.map} +0 -0
- /package/dist/{inspect-KFVAMD4N.js.map → inspect-S4COGUBC.js.map} +0 -0
- /package/dist/{inspiration-XQYHBJY2.js.map → inspiration-IX5N724J.js.map} +0 -0
- /package/dist/{keyword-metrics-WYF3QMCW.js.map → keyword-metrics-26CCKFZK.js.map} +0 -0
- /package/dist/{keywords-for-site-G5L5EP3T.js.map → keywords-for-site-JWWECF63.js.map} +0 -0
- /package/dist/{landing-WUILAWDS.js.map → landing-VFDRADZY.js.map} +0 -0
- /package/dist/{leads-4SJ4NJOI.js.map → leads-DTKKYSKH.js.map} +0 -0
- /package/dist/{learn-CC6Q5IK2.js.map → learn-GQ75IPRK.js.map} +0 -0
- /package/dist/{line-item-writes-YXKYR25W.js.map → line-item-writes-DVVHVR3Y.js.map} +0 -0
- /package/dist/{line-items-CKUD2UU4.js.map → line-items-EOZMK7A5.js.map} +0 -0
- /package/dist/{link-VBYFI7AM.js.map → link-R5NGCQ5H.js.map} +0 -0
- /package/dist/{linkedin-XKVPSCLV.js.map → linkedin-DHZO3IJX.js.map} +0 -0
- /package/dist/{list-VSUF2IWT.js.map → list-57QBEGLM.js.map} +0 -0
- /package/dist/{list-ENYDGT3F.js.map → list-Q44BBHDI.js.map} +0 -0
- /package/dist/{list-6ZNZGRRK.js.map → list-W6G2NTG5.js.map} +0 -0
- /package/dist/{log-AACKGBDW.js.map → log-B6X5EPKA.js.map} +0 -0
- /package/dist/{performance-K7E5KAZW.js.map → logo-VHXH4J6A.js.map} +0 -0
- /package/dist/{make-ED7HBLH3.js.map → make-OIFLF3QS.js.map} +0 -0
- /package/dist/{map-63CQHWPI.js.map → map-PIOZT2MQ.js.map} +0 -0
- /package/dist/{mcp-RKAXC6IP.js.map → mcp-GFKHLWDB.js.map} +0 -0
- /package/dist/{media-sources-PEHUMH7C.js.map → media-sources-VMMMW5UM.js.map} +0 -0
- /package/dist/{members-SELIA674.js.map → members-W2QBMNIW.js.map} +0 -0
- /package/dist/{normalize-VAZPTBDX.js.map → normalize-N6XC3SLC.js.map} +0 -0
- /package/dist/{options-6FCNFWUF.js.map → options-XYJY2OEQ.js.map} +0 -0
- /package/dist/{pages-FTI44OSH.js.map → pages-PTWRXAZT.js.map} +0 -0
- /package/dist/{reddit-XIHRI3CN.js.map → performance-7NEZTOJ5.js.map} +0 -0
- /package/dist/{pixels-6IUB3Y3H.js.map → pixels-MYT3TCHZ.js.map} +0 -0
- /package/dist/{pixels-MBKR4XPX.js.map → pixels-ZZCQUS3J.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-PKEO6WUK.js.map → promoted-tweet-writes-X2F7R2AE.js.map} +0 -0
- /package/dist/{promoted-tweets-7MXVZRBI.js.map → promoted-tweets-XCSD6VKP.js.map} +0 -0
- /package/dist/{publish-MPMGRV72.js.map → publish-OBY6E43R.js.map} +0 -0
- /package/dist/{run-KBN5K7LE.js.map → reddit-WJ6KHYBC.js.map} +0 -0
- /package/dist/{refresh-A27N75NH.js.map → refresh-G5BQ2LWU.js.map} +0 -0
- /package/dist/{release-UKRB5IUN.js.map → release-PBZO35KY.js.map} +0 -0
- /package/dist/{remove-AFNFVPZY.js.map → remove-VJ2MEUPM.js.map} +0 -0
- /package/dist/{reopen-M5HE6J3G.js.map → reopen-W3LYOHSR.js.map} +0 -0
- /package/dist/{rerun-A2XHGFZS.js.map → rerun-4GDNBFNM.js.map} +0 -0
- /package/dist/{research-U7RQXMYH.js.map → research-4YTFPGH7.js.map} +0 -0
- /package/dist/{research-BLDY5UWH.js.map → research-LOQRIBO6.js.map} +0 -0
- /package/dist/{reset-4CCWB2RT.js.map → reset-55CCQGXB.js.map} +0 -0
- /package/dist/{reset-J3KCWFMZ.js.map → reset-AVTQEJPZ.js.map} +0 -0
- /package/dist/{resolve-HEK27ANI.js.map → resolve-E6FNMFE3.js.map} +0 -0
- /package/dist/{retry-VVI6N6UR.js.map → retry-HBJ7MKVI.js.map} +0 -0
- /package/dist/{retry-HPZIUG2S.js.map → retry-QBRYM6MG.js.map} +0 -0
- /package/dist/{rules-SK5DFFPY.js.map → rules-XNDBGOIS.js.map} +0 -0
- /package/dist/{rules-add-YQNYSME7.js.map → rules-add-UM3ZKSVD.js.map} +0 -0
- /package/dist/{run-M7ZDE6IA.js.map → run-D4YHZ4Z4.js.map} +0 -0
- /package/dist/{shared-NDRFKAH7.js.map → run-ZCJ7NP63.js.map} +0 -0
- /package/dist/{scaffold-ad-6BN5LWQH.js.map → scaffold-ad-VQZAP32M.js.map} +0 -0
- /package/dist/{scaffold-static-ad-VVZRAWBR.js.map → scaffold-static-ad-LEU4M44N.js.map} +0 -0
- /package/dist/{scaffold-video-LFIYI4GP.js.map → scaffold-video-PSWSYRSC.js.map} +0 -0
- /package/dist/{schedule-QMOKWTJ3.js.map → schedule-AAH7HYFK.js.map} +0 -0
- /package/dist/{scheduled-agents-FCQHQ6KR.js.map → scheduled-agents-HDABMHZI.js.map} +0 -0
- /package/dist/{schema-THFLCMBN.js.map → schema-OH5OWMVQ.js.map} +0 -0
- /package/dist/{search-XIUYSWO6.js.map → search-BSDPVSGA.js.map} +0 -0
- /package/dist/{select-QBU6ED4K.js.map → select-EI4QF4YZ.js.map} +0 -0
- /package/dist/{set-prompt-TL64CRBQ.js.map → set-prompt-RKDAGUWG.js.map} +0 -0
- /package/dist/{setup-links-QVI6NAOK.js.map → setup-links-CNNJA7AB.js.map} +0 -0
- /package/dist/{sync-definition-C6ROLKJ4.js.map → shared-3IBNDEFL.js.map} +0 -0
- /package/dist/{site-PZPJY33N.js.map → site-NV4U7PIF.js.map} +0 -0
- /package/dist/{sources-ER7ANNG3.js.map → sources-ATONL7W5.js.map} +0 -0
- /package/dist/{sources-RMNFV4CA.js.map → sources-C3TGHKLQ.js.map} +0 -0
- /package/dist/{stale-ITFCPOER.js.map → stale-6QPXL6BZ.js.map} +0 -0
- /package/dist/{stats-RCLQE4HJ.js.map → stats-ZAGJH4AD.js.map} +0 -0
- /package/dist/{status-ABMJBCPJ.js.map → status-BML3F4MZ.js.map} +0 -0
- /package/dist/{stock-ECRBD7RP.js.map → stock-6SHHLSKG.js.map} +0 -0
- /package/dist/{studio-MARZ22J2.js.map → studio-ZLCGXFAN.js.map} +0 -0
- /package/dist/{sync-QDD3MRJ6.js.map → sync-DZAOUQPE.js.map} +0 -0
- /package/dist/{viewer-check-7ZG7KHEN.js.map → sync-definition-RFEL65JE.js.map} +0 -0
- /package/dist/{tag-manager-G3LBQZUL.js.map → tag-manager-3CJ66GKJ.js.map} +0 -0
- /package/dist/{tags-EWHPUM2V.js.map → tags-2KSXCJRZ.js.map} +0 -0
- /package/dist/{tags-KBCX6BDU.js.map → tags-662KZJLV.js.map} +0 -0
- /package/dist/{tags-5JYOEYIT.js.map → tags-6QBVW25V.js.map} +0 -0
- /package/dist/{tags-PEWN6GNZ.js.map → tags-LQCEJGIL.js.map} +0 -0
- /package/dist/{tags-B473RWAA.js.map → tags-RIVD54ZG.js.map} +0 -0
- /package/dist/{targeting-criteria-EU65WUUF.js.map → targeting-criteria-XNLYPIL2.js.map} +0 -0
- /package/dist/{targets-KVXS5QKM.js.map → targets-OYIVS5KJ.js.map} +0 -0
- /package/dist/{testimonials-YMMA5YWL.js.map → testimonials-WT43CF7V.js.map} +0 -0
- /package/dist/{top-companies-OOX3DITI.js.map → top-companies-6QQMOS2Y.js.map} +0 -0
- /package/dist/{translate-OXVIMYHE.js.map → translate-7QN7JFGU.js.map} +0 -0
- /package/dist/{triggers-OX2GKG4Y.js.map → triggers-LVQY3QJ2.js.map} +0 -0
- /package/dist/{unlink-3USEPJSA.js.map → unlink-5ASZTCS2.js.map} +0 -0
- /package/dist/{unstage-VSCNPTAC.js.map → unstage-LNZTEATR.js.map} +0 -0
- /package/dist/{update-6JKTH65B.js.map → update-7BIR4GYO.js.map} +0 -0
- /package/dist/{update-FG4ELXYJ.js.map → update-BRLM5DB3.js.map} +0 -0
- /package/dist/{update-HZHG67N6.js.map → update-DRZAAJQ2.js.map} +0 -0
- /package/dist/{update-GZFKHA3A.js.map → update-NOWC3ICD.js.map} +0 -0
- /package/dist/{upload-BKCQ6FRW.js.map → upload-457Q4ANZ.js.map} +0 -0
- /package/dist/{url-params-UN4DRN2H.js.map → url-params-KM4NJGYC.js.map} +0 -0
- /package/dist/{validate-ZS2M5Q3V.js.map → validate-COLEPJBA.js.map} +0 -0
- /package/dist/{videos-I6YXFBFT.js.map → videos-5IDZTEWC.js.map} +0 -0
- /package/dist/{web-UGU7YMII.js.map → web-FZYOCCYN.js.map} +0 -0
- /package/dist/{winning-ads-ABN5OULS.js.map → winning-ads-I4DMP7RU.js.map} +0 -0
- /package/dist/{write-commands-6VR2UD3T.js.map → write-commands-FYB6QG7K.js.map} +0 -0
- /package/dist/{x-WK2VQDPF.js.map → x-OMN5DDLM.js.map} +0 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Phrases,
|
|
3
|
+
RULE_APPLIES,
|
|
4
|
+
RULE_STRENGTHS,
|
|
5
|
+
declaredRules,
|
|
6
|
+
readLearnedRules
|
|
7
|
+
} from "./chunk-G2LGMWNG.js";
|
|
8
|
+
import {
|
|
9
|
+
readWorkspaceBrandDoc
|
|
10
|
+
} from "./chunk-JYALBYN7.js";
|
|
11
|
+
import {
|
|
12
|
+
holdUnbilledSpend
|
|
13
|
+
} from "./chunk-5WMTPYKT.js";
|
|
14
|
+
import {
|
|
15
|
+
askAboutText,
|
|
16
|
+
rulesDigest,
|
|
17
|
+
selectRules
|
|
18
|
+
} from "./chunk-IKCP5NCE.js";
|
|
19
|
+
import {
|
|
20
|
+
CREATIVE_FEEDBACK_REASON_LABELS
|
|
21
|
+
} from "./chunk-DAO63OOP.js";
|
|
22
|
+
import {
|
|
23
|
+
apiPost
|
|
24
|
+
} from "./chunk-XDZVBX6L.js";
|
|
25
|
+
|
|
26
|
+
// src/engine/creative-context/company.ts
|
|
27
|
+
import { createHash } from "crypto";
|
|
28
|
+
import { mkdir, readdir, readFile, writeFile } from "fs/promises";
|
|
29
|
+
import path from "path";
|
|
30
|
+
import { z } from "zod";
|
|
31
|
+
var text = z.string().transform((s) => s.trim()).pipe(z.string().min(1).max(300)).optional().catch(void 0);
|
|
32
|
+
var Answer = z.object({
|
|
33
|
+
sells: text,
|
|
34
|
+
category: text,
|
|
35
|
+
industry: text,
|
|
36
|
+
buyer: z.enum(["consumer", "small_business", "enterprise"]).optional().catch(void 0),
|
|
37
|
+
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),
|
|
38
|
+
humour: z.enum(["fits", "risky", "off_brand"]).optional().catch(void 0),
|
|
39
|
+
voice: z.enum(["playful", "peer", "neutral", "reassuring", "formal"]).optional().catch(void 0),
|
|
40
|
+
memes: z.enum(["fits", "off_brand"]).optional().catch(void 0),
|
|
41
|
+
memes_why: text,
|
|
42
|
+
brands: z.array(z.string()).transform(
|
|
43
|
+
(list) => list.map((s) => s.trim()).filter(Boolean).slice(0, 4)
|
|
44
|
+
).catch([])
|
|
45
|
+
});
|
|
46
|
+
function parseCompanyReading(answer) {
|
|
47
|
+
const parsed = Answer.safeParse(answer);
|
|
48
|
+
if (!parsed.success || !parsed.data.category) return null;
|
|
49
|
+
const { brands, ...rest } = parsed.data;
|
|
50
|
+
return { ...Object.fromEntries(Object.entries(rest).filter(([, v]) => v !== void 0)), brands };
|
|
51
|
+
}
|
|
52
|
+
var COMPANY_READING_MODEL = "google/gemini-3.5-flash-lite";
|
|
53
|
+
var REQUEST = {
|
|
54
|
+
provider: { order: ["google-vertex"], allow_fallbacks: false },
|
|
55
|
+
seed: 0,
|
|
56
|
+
temperature: 0,
|
|
57
|
+
response_format: { type: "json_object" }
|
|
58
|
+
};
|
|
59
|
+
var PROMPT_VERSION = 5;
|
|
60
|
+
var TIMEOUT_MS = 2e4;
|
|
61
|
+
var COMPANY_CHARS = 12e3;
|
|
62
|
+
function companyReadingPrompt(companyDoc, audience) {
|
|
63
|
+
const notes = [
|
|
64
|
+
audience?.personas ? `Its personas (who buys):
|
|
65
|
+
${audience.personas}` : "",
|
|
66
|
+
audience?.voice ? `BRAND.md, how the brand speaks:
|
|
67
|
+
${audience.voice}` : ""
|
|
68
|
+
].filter(Boolean);
|
|
69
|
+
return `You read a company's own notes (COMPANY.md), in whatever language they are written, for the people who make its ads. Extract only what they say; never invent.
|
|
70
|
+
|
|
71
|
+
"""
|
|
72
|
+
${companyDoc.slice(0, COMPANY_CHARS)}
|
|
73
|
+
"""
|
|
74
|
+
${notes.length > 0 ? `
|
|
75
|
+
${notes.join("\n\n")}
|
|
76
|
+
` : ""}
|
|
77
|
+
Answer only JSON:
|
|
78
|
+
{
|
|
79
|
+
"sells": "what the company sells and to whom, one plain sentence of at most 20 words in the notes' own language, no brand names (e.g. 'Cursos de electricidad y fontaner\xEDa para desempleados que buscan un oficio estable')",
|
|
80
|
+
"category": "what it sells, 2-6 plain English words an ads library would file it under, no brand names (e.g. 'electrician training course', 'pet health insurance', 'ecommerce customer service AI'); for a company selling several lines, the line its notes lead with",
|
|
81
|
+
"industry": "the broader industry, 1-3 English words (e.g. 'vocational education', 'insurance', 'customer service software')",
|
|
82
|
+
"buyer": "consumer" | "small_business" | "enterprise",
|
|
83
|
+
"country": "the ISO country code it sells in, or '' when several",
|
|
84
|
+
"humour": "fits" | "risky" | "off_brand",
|
|
85
|
+
"voice": "playful" | "peer" | "neutral" | "reassuring" | "formal" (how the brand talks, from the BRAND.md voice and how it speaks on its site, ads and social, never from who buys: playful = witty, casual, irreverent, internet-native; peer = talks as an insider to its own crowd, developer-to-developer, builder to builder; neutral = plain, direct, informative with no personality signal; reassuring = warm, caring, guaranteeing, protecting, calming a fear about money, time or risk; formal = premium, institutional, solemn, corporate-confident),
|
|
86
|
+
"memes": "fits" | "off_brand" (does that voice run a meme or a reaction-face ad? playful and peer fit, enterprise included; neutral, reassuring and formal are off_brand, consumer brands included),
|
|
87
|
+
"memes_why": "the voice line that decides it, at most 20 words, quoting it (e.g. 'voice: "playful, a little irreverent"' or 'voice: "formal, premium, understated"')",
|
|
88
|
+
"brands": ["the company's own brand and product names, as an advertiser name would show them, at most 4"]
|
|
89
|
+
}`;
|
|
90
|
+
}
|
|
91
|
+
var RUNS_MEMES = /* @__PURE__ */ new Set(["playful", "peer"]);
|
|
92
|
+
function memeRegister(reading3) {
|
|
93
|
+
const memes = reading3?.voice ? RUNS_MEMES.has(reading3.voice) ? "fits" : "off_brand" : reading3?.memes;
|
|
94
|
+
if (!memes) return void 0;
|
|
95
|
+
const why = reading3?.memes_why;
|
|
96
|
+
return { memes, ...why ? { why } : {} };
|
|
97
|
+
}
|
|
98
|
+
function companyLine(reading3) {
|
|
99
|
+
if (!reading3) return "";
|
|
100
|
+
const what = reading3.sells ?? reading3.category ?? "";
|
|
101
|
+
return reading3.industry && what ? `${what} (${reading3.industry})` : what;
|
|
102
|
+
}
|
|
103
|
+
function firstLineSells(companyDoc) {
|
|
104
|
+
const first = companyDoc.split("\n").find((line) => line.trim() && !line.trim().startsWith("#")) ?? "";
|
|
105
|
+
if (/^\s*TODO\b/.test(first)) return "";
|
|
106
|
+
const what = first.replace(/^\s*[-*]\s+/, "").replace(/^\*\*[^*]+\*\*\s*[—–:-]?\s*/, "").split(/\s+for\s+|[,.;:(]|\s[—–-]\s/)[0];
|
|
107
|
+
return (what ?? "").trim().split(/\s+/).filter(Boolean).slice(0, SELLS_WORDS).join(" ");
|
|
108
|
+
}
|
|
109
|
+
var SELLS_WORDS = 6;
|
|
110
|
+
var askModel = (root) => async (prompt) => {
|
|
111
|
+
const spent = [];
|
|
112
|
+
const answer = await askAboutText(COMPANY_READING_MODEL, prompt, (u) => spent.push(u), {
|
|
113
|
+
timeoutMs: TIMEOUT_MS,
|
|
114
|
+
request: REQUEST
|
|
115
|
+
}).catch(() => null);
|
|
116
|
+
await holdUnbilledSpend(path.join(root, "canvas", ".cache"), spent).catch(() => void 0);
|
|
117
|
+
return answer;
|
|
118
|
+
};
|
|
119
|
+
async function readCompanyReading(root, ask = askModel(root)) {
|
|
120
|
+
const doc = await readFile(path.join(root, "COMPANY.md"), "utf8").catch(() => "");
|
|
121
|
+
const fallback = firstLineSells(doc);
|
|
122
|
+
if (!fallback) return null;
|
|
123
|
+
const prompt = companyReadingPrompt(doc, await audienceNotes(root));
|
|
124
|
+
const key = createHash("sha256").update(JSON.stringify([PROMPT_VERSION, COMPANY_READING_MODEL, prompt])).digest("hex").slice(0, 16);
|
|
125
|
+
const file = path.join(root, "canvas", ".cache", "company-reading", `${key}.json`);
|
|
126
|
+
const inFlight = reading.get(file);
|
|
127
|
+
if (inFlight) return await inFlight;
|
|
128
|
+
const read = readOrAsk(file, prompt, ask, fallback).finally(() => reading.delete(file));
|
|
129
|
+
reading.set(file, read);
|
|
130
|
+
return await read;
|
|
131
|
+
}
|
|
132
|
+
var PERSONA_CHARS = 600;
|
|
133
|
+
var VOICE_CHARS = 800;
|
|
134
|
+
async function audienceNotes(root) {
|
|
135
|
+
const dir = path.join(root, "src", "content", "personas");
|
|
136
|
+
const files = (await readdir(dir).catch(() => [])).filter((f) => f.endsWith(".md")).sort();
|
|
137
|
+
const personas = [];
|
|
138
|
+
for (const file of files.slice(0, 8)) {
|
|
139
|
+
const raw = await readFile(path.join(dir, file), "utf8").catch(() => "");
|
|
140
|
+
const front = /^---\n([\s\S]*?)\n---/.exec(raw)?.[1] ?? raw.slice(0, 300);
|
|
141
|
+
const lines = front.split("\n").filter((l) => /^\s*(title|name|role|job|description)\s*:/i.test(l));
|
|
142
|
+
const line = (lines.length > 0 ? lines.join("; ") : file.replace(/\.md$/, "")).slice(0, PERSONA_CHARS);
|
|
143
|
+
personas.push(`- ${line}`);
|
|
144
|
+
}
|
|
145
|
+
const brand = await readFile(path.join(root, "src", "brand", "BRAND.md"), "utf8").catch(() => "");
|
|
146
|
+
const section = /^##\s+[^\n]*\b(?:tone|voice)\b[^\n]*\n([\s\S]*?)(?=^##\s|(?![\s\S]))/im.exec(brand)?.[1] ?? "";
|
|
147
|
+
return { personas: personas.join("\n"), voice: section.trim().slice(0, VOICE_CHARS) };
|
|
148
|
+
}
|
|
149
|
+
var reading = /* @__PURE__ */ new Map();
|
|
150
|
+
async function readOrAsk(file, prompt, ask, fallback) {
|
|
151
|
+
const cached = await readFile(file, "utf8").then((raw) => parseCompanyReading(JSON.parse(raw))).catch(() => null);
|
|
152
|
+
if (cached) return cached;
|
|
153
|
+
const answer = parseCompanyReading(await ask(prompt).catch(() => null));
|
|
154
|
+
if (!answer) return { sells: fallback, brands: [] };
|
|
155
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
156
|
+
await writeFile(file, `${JSON.stringify(answer, null, 2)}
|
|
157
|
+
`, "utf8");
|
|
158
|
+
return answer;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// src/engine/creative-context/case-file.ts
|
|
162
|
+
var CASE_FILE_CHARS = 3e3;
|
|
163
|
+
function caseFileNotes(entries) {
|
|
164
|
+
const seen = /* @__PURE__ */ new Set();
|
|
165
|
+
const lines = [];
|
|
166
|
+
let used = 0;
|
|
167
|
+
for (const entry of entries) {
|
|
168
|
+
if (entry.verdict !== "rejected") continue;
|
|
169
|
+
const note = entry.note?.trim();
|
|
170
|
+
const reasons = entry.reasons.map((r) => CREATIVE_FEEDBACK_REASON_LABELS[r].toLowerCase()).join(", ");
|
|
171
|
+
const key = note ?? reasons;
|
|
172
|
+
if (!key || seen.has(key)) continue;
|
|
173
|
+
seen.add(key);
|
|
174
|
+
const line = `Rejected${reasons ? ` (${reasons})` : ""}${note ? `: "${note}"` : ""}`;
|
|
175
|
+
if (used + line.length > CASE_FILE_CHARS && lines.length > 0) break;
|
|
176
|
+
used += line.length;
|
|
177
|
+
lines.push(line);
|
|
178
|
+
}
|
|
179
|
+
return lines;
|
|
180
|
+
}
|
|
181
|
+
async function readCaseFile(slug, read = (body) => apiPost("/api/creatives/feedback", body)) {
|
|
182
|
+
const response = await read({ slug }).catch(() => null);
|
|
183
|
+
return response?.ok ? caseFileNotes(response.data.recent) : [];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// src/engine/creative-context/index.ts
|
|
187
|
+
import path3 from "path";
|
|
188
|
+
|
|
189
|
+
// src/engine/brand/brand-rules.ts
|
|
190
|
+
import { createHash as createHash2 } from "crypto";
|
|
191
|
+
import { mkdir as mkdir2, readFile as readFile2, writeFile as writeFile2 } from "fs/promises";
|
|
192
|
+
import path2 from "path";
|
|
193
|
+
import { z as z2 } from "zod";
|
|
194
|
+
var BRAND_RULES_MODEL = "google/gemini-3.5-flash";
|
|
195
|
+
var REQUEST2 = {
|
|
196
|
+
provider: { order: ["google-vertex"], allow_fallbacks: false },
|
|
197
|
+
seed: 0,
|
|
198
|
+
reasoning: { effort: "low" },
|
|
199
|
+
response_format: { type: "json_object" }
|
|
200
|
+
};
|
|
201
|
+
var PROMPT_VERSION2 = 2;
|
|
202
|
+
var TIMEOUT_MS2 = 6e4;
|
|
203
|
+
var BRAND_MD_CHARS = 6e4;
|
|
204
|
+
var MAX_RULES = 60;
|
|
205
|
+
var RULE_CHARS = 400;
|
|
206
|
+
var optionalPhrases = Phrases.optional().catch(void 0);
|
|
207
|
+
var Rule = z2.object({
|
|
208
|
+
text: z2.string().trim().min(1).max(RULE_CHARS),
|
|
209
|
+
strength: z2.enum(RULE_STRENGTHS).catch("must"),
|
|
210
|
+
applies: z2.enum(RULE_APPLIES).catch("any"),
|
|
211
|
+
forbid: optionalPhrases,
|
|
212
|
+
require: optionalPhrases,
|
|
213
|
+
allow: optionalPhrases
|
|
214
|
+
});
|
|
215
|
+
var Answer2 = z2.object({ rules: z2.array(z2.unknown()) });
|
|
216
|
+
function parseBrandRules(answer) {
|
|
217
|
+
const parsed = Answer2.safeParse(answer);
|
|
218
|
+
if (!parsed.success) return null;
|
|
219
|
+
return parsed.data.rules.flatMap((raw) => {
|
|
220
|
+
const rule = Rule.safeParse(raw);
|
|
221
|
+
if (!rule.success) return [];
|
|
222
|
+
const { forbid, require: require2, allow, ...rest } = rule.data;
|
|
223
|
+
return [
|
|
224
|
+
{
|
|
225
|
+
...rest,
|
|
226
|
+
...forbid?.length ? { forbid } : {},
|
|
227
|
+
...require2?.length ? { require: require2 } : {},
|
|
228
|
+
...allow?.length ? { allow } : {}
|
|
229
|
+
}
|
|
230
|
+
];
|
|
231
|
+
}).slice(0, MAX_RULES);
|
|
232
|
+
}
|
|
233
|
+
var RULE_HEADING = /rule|never|copy|voice|tone|logo|imag|photo|illustrat|legal|claim|checklist|reflex|prohibit|say|regla|nunca|voz|tono|imagen|foto|prohib|decir|règle|jamais|regel|stimme|bild|regra|imagem/i;
|
|
234
|
+
function ruleSections(brandMd) {
|
|
235
|
+
const headings = [...brandMd.slice(0, BRAND_MD_CHARS).matchAll(/^#{2,4}\s+(.+)$/gm)].map((m) => (m[1] ?? "").trim()).filter((h) => RULE_HEADING.test(h));
|
|
236
|
+
const fence = /```generation-style/.test(brandMd) ? ["the ```generation-style block"] : [];
|
|
237
|
+
return [.../* @__PURE__ */ new Set([...headings, ...fence])];
|
|
238
|
+
}
|
|
239
|
+
var PRIVATE_QUOTE_LINE = "Never publish a customer quote or an identifiable customer conversation.";
|
|
240
|
+
var PRIVATE_QUOTE_MEANT = "Never publish what a customer said in a private call, chat or note, nor a conversation that identifies them. A testimonial, review or case study the customer published or agreed to is not a private call: an ad may quote it.";
|
|
241
|
+
function brandRulesPrompt(document) {
|
|
242
|
+
const brandMd = document.replaceAll(PRIVATE_QUOTE_LINE, PRIVATE_QUOTE_MEANT);
|
|
243
|
+
const sections = ruleSections(brandMd);
|
|
244
|
+
return [
|
|
245
|
+
"You read a company's brand guidelines (BRAND.md), written in any language, for the people who make its ads. List every standing rule they set that an ad, its words, its pictures, its people or its logo must follow. Extract only what they state; never invent a rule.",
|
|
246
|
+
"",
|
|
247
|
+
"Go through the document section by section: every bullet or sentence of a section about copy or wording, voice, what the brand never says, things to reject, legal risk or claims it may not make, a checklist before publishing, how its name, numbers or prices are written, which logo to use and what never to do to it, photography, illustration, imagery or a generation-style block is one rule; keep each, a style taste included (as a prefer), whatever language the section is in. Leave out only rules about web pages, components, code, spacing, typefaces, colours' hex values and where a colour goes on a page.",
|
|
248
|
+
...sections.length > 0 ? [
|
|
249
|
+
"",
|
|
250
|
+
`Sections that most likely hold rules, each to be read to its end: ${sections.map((h) => `"${h}"`).join(", ")}.`
|
|
251
|
+
] : [],
|
|
252
|
+
"",
|
|
253
|
+
`Return JSON only: {"rules": [{"text": string, "strength": "never" | "must" | "prefer", "applies": "copy" | "picture" | "cast" | "logo" | "voice" | "sound" | "subtitles" | "any", "forbid": string[], "require": string[], "allow": string[]}]}, at most ${MAX_RULES}, each rule once.`,
|
|
254
|
+
`- text: the rule quoted from the document in its own language, whole but short (one bullet, at most one sentence of why). It must make sense read alone, as an ad's reviewer reads it: when a bullet leans on its heading or table, name what it is about ("Brand red: never for text or buttons", not "Never text, never a button").`,
|
|
255
|
+
'- strength: "never" for a ban, "must" for something every ad has to do, "prefer" for a taste or a default.',
|
|
256
|
+
`- applies: "copy" for words, "picture" for what is shown, "cast" for who appears, "logo", "voice" or "sound" for a video's voice and audio, "subtitles", else "any".`,
|
|
257
|
+
'- forbid: the exact words the rule bans in every case, as the document quotes them ("\u2014" for em-dashes, "usted"); [] when the ban depends on the context or names no words. allow: the right spelling when the rule is about how a word is written or capitalised ("ZentIA"). require: words every ad must say; usually [].',
|
|
258
|
+
"",
|
|
259
|
+
"<brand_md>",
|
|
260
|
+
brandMd.slice(0, BRAND_MD_CHARS),
|
|
261
|
+
"</brand_md>"
|
|
262
|
+
].join("\n");
|
|
263
|
+
}
|
|
264
|
+
function brandRulesReader(cacheDir, onSpend) {
|
|
265
|
+
return async (brandMd) => {
|
|
266
|
+
const prompt = brandRulesPrompt(brandMd);
|
|
267
|
+
const key = createHash2("sha256").update(JSON.stringify([PROMPT_VERSION2, BRAND_RULES_MODEL, prompt])).digest("hex");
|
|
268
|
+
const file = path2.join(cacheDir, "brand-rules", `${key}.json`);
|
|
269
|
+
const inFlight = reading2.get(file);
|
|
270
|
+
if (inFlight) return await inFlight;
|
|
271
|
+
if (failed.has(file)) return null;
|
|
272
|
+
const read = readOrAsk2(file, prompt, onSpend, cacheDir).then((rules) => {
|
|
273
|
+
if (rules === null) failed.add(file);
|
|
274
|
+
return rules;
|
|
275
|
+
}).finally(() => reading2.delete(file));
|
|
276
|
+
reading2.set(file, read);
|
|
277
|
+
return await read;
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
var reading2 = /* @__PURE__ */ new Map();
|
|
281
|
+
var failed = /* @__PURE__ */ new Set();
|
|
282
|
+
async function readOrAsk2(file, prompt, onSpend, cacheDir) {
|
|
283
|
+
const cached = parseBrandRules(await readFile2(file, "utf8").then(JSON.parse, () => null));
|
|
284
|
+
if (cached) return cached;
|
|
285
|
+
const spent = [];
|
|
286
|
+
const answer = await askAboutText(BRAND_RULES_MODEL, prompt, (u) => onSpend ? onSpend(u) : spent.push(u), {
|
|
287
|
+
timeoutMs: TIMEOUT_MS2,
|
|
288
|
+
request: REQUEST2
|
|
289
|
+
}).catch(() => null);
|
|
290
|
+
await holdUnbilledSpend(cacheDir, spent).catch(() => void 0);
|
|
291
|
+
const rules = parseBrandRules(answer);
|
|
292
|
+
if (rules) {
|
|
293
|
+
await mkdir2(path2.dirname(file), { recursive: true }).catch(() => void 0);
|
|
294
|
+
await writeFile2(file, JSON.stringify({ rules }), "utf8").catch(() => void 0);
|
|
295
|
+
}
|
|
296
|
+
return rules;
|
|
297
|
+
}
|
|
298
|
+
async function readWorkspaceBrandRules(root, opts = {}) {
|
|
299
|
+
const brandMd = await readFile2(path2.join(root, "src", "brand", "BRAND.md"), "utf8").catch(() => "");
|
|
300
|
+
if (!brandMd.trim()) return [];
|
|
301
|
+
const read = opts.read ?? brandRulesReader(path2.join(root, "canvas", ".cache"), opts.onSpend);
|
|
302
|
+
return await read(brandMd).catch(() => null) ?? [];
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// src/engine/creative-context/index.ts
|
|
306
|
+
async function readAllRules(root, readers = {}) {
|
|
307
|
+
const [declared, learned] = await Promise.all([
|
|
308
|
+
readWorkspaceBrandRules(root, {
|
|
309
|
+
...readers.brandRules ? { read: readers.brandRules } : {},
|
|
310
|
+
...readers.onSpend ? { onSpend: readers.onSpend } : {}
|
|
311
|
+
}),
|
|
312
|
+
readLearnedRules(root)
|
|
313
|
+
]);
|
|
314
|
+
return [...learned, ...declaredRules(declared)];
|
|
315
|
+
}
|
|
316
|
+
async function readCreativeContext(root, target = {}, opts = {}) {
|
|
317
|
+
const readers = opts.readers ?? {};
|
|
318
|
+
const [company, brand, rules] = await Promise.all([
|
|
319
|
+
readCompanyReading(root, ...readers.company ? [readers.company] : []).catch(() => null),
|
|
320
|
+
readWorkspaceBrandDoc(root, {
|
|
321
|
+
...readers.brand ? { read: readers.brand } : {},
|
|
322
|
+
...readers.onSpend ? { onSpend: readers.onSpend } : {}
|
|
323
|
+
}).catch(() => null),
|
|
324
|
+
readAllRules(root, readers).catch(() => [])
|
|
325
|
+
]);
|
|
326
|
+
const held = selectRules(rules, target, opts.waived);
|
|
327
|
+
return { company, brand, rules: held, rulesDigest: rulesDigest(held), caseFile: (slug) => readCaseFile(slug) };
|
|
328
|
+
}
|
|
329
|
+
var workspaceOfCreative = (creativeDir) => path3.resolve(creativeDir, "../../..");
|
|
330
|
+
function avoidOf(rules, max = 5) {
|
|
331
|
+
return rules.filter((r) => r.strength === "never" && r.applies !== "voice" && r.applies !== "sound").slice(0, max).map((r) => r.text.length > 90 ? `${r.text.slice(0, 89)}\u2026` : r.text);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export {
|
|
335
|
+
memeRegister,
|
|
336
|
+
companyLine,
|
|
337
|
+
readCompanyReading,
|
|
338
|
+
readCaseFile,
|
|
339
|
+
readAllRules,
|
|
340
|
+
readCreativeContext,
|
|
341
|
+
workspaceOfCreative,
|
|
342
|
+
avoidOf
|
|
343
|
+
};
|
|
344
|
+
//# sourceMappingURL=chunk-SGEPZB3D.js.map
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import {
|
|
2
|
+
bareAccountId,
|
|
3
|
+
failWriteValidation,
|
|
4
|
+
numberFlag,
|
|
5
|
+
requireTarget,
|
|
6
|
+
stageOp,
|
|
7
|
+
stageOps
|
|
8
|
+
} from "./chunk-5C35OW7L.js";
|
|
9
|
+
import {
|
|
10
|
+
repeatedValues
|
|
11
|
+
} from "./chunk-ERSX3MKH.js";
|
|
12
|
+
import {
|
|
13
|
+
registerSchema
|
|
14
|
+
} from "./chunk-WNSE7N75.js";
|
|
15
|
+
|
|
16
|
+
// src/commands/ads/meta/asset-writes.ts
|
|
17
|
+
import { defineCommand } from "citty";
|
|
18
|
+
var STAGED_NOTE = "Staged until publish \u2014 review with `baker ads meta draft`.";
|
|
19
|
+
var accountArg = { type: "string", description: "Meta ad account ID (act_123)" };
|
|
20
|
+
var schemaId = (what) => ({ type: "positional", description: what, required: true });
|
|
21
|
+
function command(input) {
|
|
22
|
+
registerSchema({
|
|
23
|
+
command: input.schema,
|
|
24
|
+
description: input.schemaDescription,
|
|
25
|
+
args: Object.fromEntries(
|
|
26
|
+
Object.entries(input.args).map(([key, arg]) => [
|
|
27
|
+
key,
|
|
28
|
+
{ type: arg.type, description: arg.description, required: arg.required === true }
|
|
29
|
+
])
|
|
30
|
+
)
|
|
31
|
+
});
|
|
32
|
+
return defineCommand({
|
|
33
|
+
meta: { name: input.name, description: `${input.description} ${STAGED_NOTE}` },
|
|
34
|
+
args: input.args,
|
|
35
|
+
run: async ({ args, rawArgs }) => {
|
|
36
|
+
await input.run(args, rawArgs);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
var creativesDeleteCommand = command({
|
|
41
|
+
schema: "ads.meta.creatives.delete",
|
|
42
|
+
name: "delete",
|
|
43
|
+
description: "Stage deleting an ad creative. Meta deletes only a creative no ad runs \u2014 repoint or delete the ad first. Permanent.",
|
|
44
|
+
schemaDescription: "Stage deleting a Meta ad creative (status DELETED) \u2014 applied at publish, permanent. Meta refuses a creative an ad still runs.",
|
|
45
|
+
args: { id: { type: "positional", description: "Creative id", required: true }, "account-id": accountArg },
|
|
46
|
+
run: async (args) => {
|
|
47
|
+
await stageOp({
|
|
48
|
+
kind: "adCreative.update",
|
|
49
|
+
accountId: bareAccountId(args),
|
|
50
|
+
target: requireTarget(args, "creative"),
|
|
51
|
+
payload: { status: "DELETED" }
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
var mediaDeleteCommand = command({
|
|
56
|
+
schema: "ads.meta.media.delete",
|
|
57
|
+
name: "delete",
|
|
58
|
+
description: "Stage taking an image out of the ad account's image library, by its hash (`baker ads meta images`), or one of its videos by id (`--video-id`, from `baker ads meta media`). Meta refuses an image a creative still uses.",
|
|
59
|
+
schemaDescription: "Stage deleting an image from a Meta ad account's image library by hash, or a video from its video library by id \u2014 applied at publish. Meta refuses an image a creative uses.",
|
|
60
|
+
args: {
|
|
61
|
+
"account-id": accountArg,
|
|
62
|
+
"image-hash": { type: "string", description: "The image's hash" },
|
|
63
|
+
"video-id": { type: "string", description: "Or a video of the ad account, by id" }
|
|
64
|
+
},
|
|
65
|
+
run: async (args) => {
|
|
66
|
+
const imageHash = typeof args["image-hash"] === "string" ? args["image-hash"] : void 0;
|
|
67
|
+
const videoId = typeof args["video-id"] === "string" ? args["video-id"] : void 0;
|
|
68
|
+
if (imageHash === void 0 === (videoId === void 0)) {
|
|
69
|
+
failWriteValidation("pass --image-hash (from `baker ads meta images`) or --video-id \u2014 one of them");
|
|
70
|
+
}
|
|
71
|
+
await stageOp({ kind: "media.delete", accountId: bareAccountId(args), payload: { imageHash, videoId } });
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
var customConversionsUpdateCommand = command({
|
|
75
|
+
schema: "ads.meta.custom-conversions.update",
|
|
76
|
+
name: "update",
|
|
77
|
+
description: "Stage renaming a Custom Conversion, its description or its value per conversion. Meta keeps a conversion's rule and event category for good \u2014 a conversion that counts something else is a new one.",
|
|
78
|
+
schemaDescription: "Stage a change to a Meta Custom Conversion: --name, --description, --value (value per conversion, account currency). The rule and event category cannot change (Meta accepts and ignores them).",
|
|
79
|
+
args: {
|
|
80
|
+
id: { type: "positional", description: "Custom conversion id", required: true },
|
|
81
|
+
"account-id": accountArg,
|
|
82
|
+
name: { type: "string", description: "New name" },
|
|
83
|
+
description: { type: "string", description: "New description" },
|
|
84
|
+
value: { type: "string", description: "Value of one conversion, in the account currency" }
|
|
85
|
+
},
|
|
86
|
+
run: async (args) => {
|
|
87
|
+
const payload = Object.fromEntries(
|
|
88
|
+
Object.entries({
|
|
89
|
+
name: args.name,
|
|
90
|
+
description: args.description,
|
|
91
|
+
default_conversion_value: numberFlag(args.value, "--value")
|
|
92
|
+
}).filter(([, value]) => value !== void 0)
|
|
93
|
+
);
|
|
94
|
+
await stageOp({
|
|
95
|
+
kind: "customConversion.update",
|
|
96
|
+
accountId: bareAccountId(args),
|
|
97
|
+
target: requireTarget(args, "custom conversion"),
|
|
98
|
+
payload
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
var customConversionsDeleteCommand = command({
|
|
103
|
+
schema: "ads.meta.custom-conversions.delete",
|
|
104
|
+
name: "delete",
|
|
105
|
+
description: "Stage deleting a Custom Conversion. Meta archives it: it stops counting and leaves the active list, and still uses one of the account's slots. Ad sets optimizing toward it stop finding conversions.",
|
|
106
|
+
schemaDescription: "Stage deleting (archiving) a Meta Custom Conversion \u2014 applied at publish. Not reversible; it keeps its slot in the account's cap.",
|
|
107
|
+
args: { id: schemaId("Custom conversion id"), "account-id": accountArg },
|
|
108
|
+
run: async (args) => {
|
|
109
|
+
await stageOp({
|
|
110
|
+
kind: "customConversion.update",
|
|
111
|
+
accountId: bareAccountId(args),
|
|
112
|
+
target: requireTarget(args, "custom conversion"),
|
|
113
|
+
payload: { status: "DELETED" }
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
var labelsCreateCommand = command({
|
|
118
|
+
schema: "ads.meta.labels.create",
|
|
119
|
+
name: "create",
|
|
120
|
+
description: 'Stage a new ad label. File things under it with `labels attach <ref> --campaigns \u2026` in the same chat. Example: baker ads meta labels create --name "Q4 launch"',
|
|
121
|
+
schemaDescription: "Stage a new Meta ad label (created at publish). Returns a meta_temp_* ref `labels attach` takes.",
|
|
122
|
+
args: { "account-id": accountArg, name: { type: "string", description: "Label name" } },
|
|
123
|
+
run: async (args) => {
|
|
124
|
+
await stageOp({ kind: "adLabel.create", accountId: bareAccountId(args), payload: { name: args.name } });
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
var labelsRenameCommand = command({
|
|
128
|
+
schema: "ads.meta.labels.rename",
|
|
129
|
+
name: "rename",
|
|
130
|
+
description: "Stage renaming an ad label.",
|
|
131
|
+
schemaDescription: "Stage renaming a Meta ad label.",
|
|
132
|
+
args: { id: schemaId("Label id"), "account-id": accountArg, name: { type: "string", description: "New name" } },
|
|
133
|
+
run: async (args) => {
|
|
134
|
+
await stageOp({
|
|
135
|
+
kind: "adLabel.update",
|
|
136
|
+
accountId: bareAccountId(args),
|
|
137
|
+
target: requireTarget(args, "label"),
|
|
138
|
+
payload: { name: args.name }
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
var labelsDeleteCommand = command({
|
|
143
|
+
schema: "ads.meta.labels.delete",
|
|
144
|
+
name: "delete",
|
|
145
|
+
description: "Stage deleting an ad label. Everything filed under it keeps running, unlabelled.",
|
|
146
|
+
schemaDescription: "Stage deleting a Meta ad label \u2014 applied at publish; labelled objects keep running.",
|
|
147
|
+
args: { id: schemaId("Label id"), "account-id": accountArg },
|
|
148
|
+
run: async (args) => {
|
|
149
|
+
await stageOp({
|
|
150
|
+
kind: "adLabel.update",
|
|
151
|
+
accountId: bareAccountId(args),
|
|
152
|
+
target: requireTarget(args, "label"),
|
|
153
|
+
payload: { status: "DELETED" }
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
var LABELLED = [
|
|
158
|
+
["campaigns", "campaign.update"],
|
|
159
|
+
["adsets", "adSet.update"],
|
|
160
|
+
["ads", "ad.update"],
|
|
161
|
+
["creatives", "adCreative.update"]
|
|
162
|
+
];
|
|
163
|
+
var targetArgs = {
|
|
164
|
+
campaigns: { type: "string", description: "Campaign ids (comma-separated or repeated)" },
|
|
165
|
+
adsets: { type: "string", description: "Ad set ids" },
|
|
166
|
+
ads: { type: "string", description: "Ad ids" },
|
|
167
|
+
creatives: {
|
|
168
|
+
type: "string",
|
|
169
|
+
description: "Creative ids (live ones \u2014 a creative created in this chat is labelled later)"
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
function idsOf(rawArgs, flag, parsed) {
|
|
173
|
+
return repeatedValues(rawArgs, flag, parsed).flatMap((value) => value.split(",")).map((value) => value.trim()).filter(Boolean);
|
|
174
|
+
}
|
|
175
|
+
async function stageLabelChange(verb, args, rawArgs) {
|
|
176
|
+
const accountId = bareAccountId(args);
|
|
177
|
+
const label = requireTarget(args, "label");
|
|
178
|
+
const targets = LABELLED.flatMap(([flag, kind]) => idsOf(rawArgs, flag, args[flag]).map((id) => ({ kind, id })));
|
|
179
|
+
if (targets.length === 0) {
|
|
180
|
+
failWriteValidation("name what to label: --campaigns, --adsets, --ads or --creatives");
|
|
181
|
+
}
|
|
182
|
+
await stageOps(
|
|
183
|
+
targets.map((target) => ({ kind: target.kind, accountId, target: target.id, payload: { [verb]: [label] } }))
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
var labelsAttachCommand = command({
|
|
187
|
+
schema: "ads.meta.labels.attach",
|
|
188
|
+
name: "attach",
|
|
189
|
+
description: "Stage filing campaigns, ad sets, ads or creatives under a label (a label id, or a meta_temp_* ref from `labels create`). Their other labels stay. Example: baker ads meta labels attach 120249 --campaigns 6123,6124",
|
|
190
|
+
schemaDescription: "Stage adding a Meta ad label to campaigns/ad sets/ads/creatives (--campaigns, --adsets, --ads, --creatives; comma-separated). One staged change per object; other labels kept.",
|
|
191
|
+
args: { id: schemaId("Label id or meta_temp_* ref"), "account-id": accountArg, ...targetArgs },
|
|
192
|
+
run: async (args, rawArgs) => {
|
|
193
|
+
await stageLabelChange("addLabels", args, rawArgs);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
var labelsDetachCommand = command({
|
|
197
|
+
schema: "ads.meta.labels.detach",
|
|
198
|
+
name: "detach",
|
|
199
|
+
description: "Stage taking a label off campaigns, ad sets, ads or creatives. Their other labels stay.",
|
|
200
|
+
schemaDescription: "Stage removing a Meta ad label from campaigns/ad sets/ads/creatives (--campaigns, --adsets, --ads, --creatives). Other labels kept.",
|
|
201
|
+
args: { id: schemaId("Label id"), "account-id": accountArg, ...targetArgs },
|
|
202
|
+
run: async (args, rawArgs) => {
|
|
203
|
+
await stageLabelChange("removeLabels", args, rawArgs);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
export {
|
|
208
|
+
command,
|
|
209
|
+
creativesDeleteCommand,
|
|
210
|
+
mediaDeleteCommand,
|
|
211
|
+
customConversionsUpdateCommand,
|
|
212
|
+
customConversionsDeleteCommand,
|
|
213
|
+
labelsCreateCommand,
|
|
214
|
+
labelsRenameCommand,
|
|
215
|
+
labelsDeleteCommand,
|
|
216
|
+
labelsAttachCommand,
|
|
217
|
+
labelsDetachCommand
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=chunk-SVAB6KV5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/meta/asset-writes.ts"],"sourcesContent":["import { type ArgsDef, type CommandDef, defineCommand } from \"citty\";\nimport { repeatedValues } from \"../../../lib/repeatedFlags.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { bareAccountId, failWriteValidation, numberFlag, requireTarget, stageOp, stageOps } from \"./write-shared.ts\";\n\n/**\n * Staged writes on the account's own assets: deleting a creative or an image,\n * changing or deleting a Custom Conversion, and ad labels — creating, renaming,\n * deleting them, and filing campaigns, ad sets, ads and creatives under them.\n * Nothing reaches Meta until the chat publishes.\n */\n\nconst STAGED_NOTE = \"Staged until publish — review with `baker ads meta draft`.\";\nconst accountArg = { type: \"string\", description: \"Meta ad account ID (act_123)\" } as const;\nconst schemaId = (what: string) => ({ type: \"positional\", description: what, required: true });\n\nexport function command(input: {\n schema: string;\n name: string;\n description: string;\n schemaDescription: string;\n args: Record<string, { type: string; description: string; required?: boolean }>;\n run: (args: Record<string, unknown>, rawArgs: readonly string[] | undefined) => Promise<void>;\n}): CommandDef<ArgsDef> {\n registerSchema({\n command: input.schema,\n description: input.schemaDescription,\n args: Object.fromEntries(\n Object.entries(input.args).map(([key, arg]) => [\n key,\n { type: arg.type, description: arg.description, required: arg.required === true },\n ]),\n ),\n });\n return defineCommand<ArgsDef>({\n meta: { name: input.name, description: `${input.description} ${STAGED_NOTE}` },\n args: input.args as ArgsDef,\n run: async ({ args, rawArgs }) => {\n await input.run(args as Record<string, unknown>, rawArgs);\n },\n });\n}\n\n// --- Creatives ---\n\nexport const creativesDeleteCommand = command({\n schema: \"ads.meta.creatives.delete\",\n name: \"delete\",\n description:\n \"Stage deleting an ad creative. Meta deletes only a creative no ad runs — repoint or delete the ad first. Permanent.\",\n schemaDescription:\n \"Stage deleting a Meta ad creative (status DELETED) — applied at publish, permanent. Meta refuses a creative an ad still runs.\",\n args: { id: { type: \"positional\", description: \"Creative id\", required: true }, \"account-id\": accountArg },\n run: async (args) => {\n await stageOp({\n kind: \"adCreative.update\",\n accountId: bareAccountId(args),\n target: requireTarget(args, \"creative\"),\n payload: { status: \"DELETED\" },\n });\n },\n});\n\n// --- Images ---\n\nexport const mediaDeleteCommand = command({\n schema: \"ads.meta.media.delete\",\n name: \"delete\",\n description:\n \"Stage taking an image out of the ad account's image library, by its hash (`baker ads meta images`), or one of its videos by id (`--video-id`, from `baker ads meta media`). Meta refuses an image a creative still uses.\",\n schemaDescription:\n \"Stage deleting an image from a Meta ad account's image library by hash, or a video from its video library by id — applied at publish. Meta refuses an image a creative uses.\",\n args: {\n \"account-id\": accountArg,\n \"image-hash\": { type: \"string\", description: \"The image's hash\" },\n \"video-id\": { type: \"string\", description: \"Or a video of the ad account, by id\" },\n },\n run: async (args) => {\n const imageHash = typeof args[\"image-hash\"] === \"string\" ? args[\"image-hash\"] : undefined;\n const videoId = typeof args[\"video-id\"] === \"string\" ? args[\"video-id\"] : undefined;\n if ((imageHash === undefined) === (videoId === undefined)) {\n failWriteValidation(\"pass --image-hash (from `baker ads meta images`) or --video-id — one of them\");\n }\n await stageOp({ kind: \"media.delete\", accountId: bareAccountId(args), payload: { imageHash, videoId } });\n },\n});\n\n// --- Custom conversions ---\n\nexport const customConversionsUpdateCommand = command({\n schema: \"ads.meta.custom-conversions.update\",\n name: \"update\",\n description:\n \"Stage renaming a Custom Conversion, its description or its value per conversion. Meta keeps a conversion's rule and event category for good — a conversion that counts something else is a new one.\",\n schemaDescription:\n \"Stage a change to a Meta Custom Conversion: --name, --description, --value (value per conversion, account currency). The rule and event category cannot change (Meta accepts and ignores them).\",\n args: {\n id: { type: \"positional\", description: \"Custom conversion id\", required: true },\n \"account-id\": accountArg,\n name: { type: \"string\", description: \"New name\" },\n description: { type: \"string\", description: \"New description\" },\n value: { type: \"string\", description: \"Value of one conversion, in the account currency\" },\n },\n run: async (args) => {\n const payload = Object.fromEntries(\n Object.entries({\n name: args.name,\n description: args.description,\n default_conversion_value: numberFlag(args.value, \"--value\"),\n }).filter(([, value]) => value !== undefined),\n );\n await stageOp({\n kind: \"customConversion.update\",\n accountId: bareAccountId(args),\n target: requireTarget(args, \"custom conversion\"),\n payload,\n });\n },\n});\n\nexport const customConversionsDeleteCommand = command({\n schema: \"ads.meta.custom-conversions.delete\",\n name: \"delete\",\n description:\n \"Stage deleting a Custom Conversion. Meta archives it: it stops counting and leaves the active list, and still uses one of the account's slots. Ad sets optimizing toward it stop finding conversions.\",\n schemaDescription:\n \"Stage deleting (archiving) a Meta Custom Conversion — applied at publish. Not reversible; it keeps its slot in the account's cap.\",\n args: { id: schemaId(\"Custom conversion id\"), \"account-id\": accountArg },\n run: async (args) => {\n await stageOp({\n kind: \"customConversion.update\",\n accountId: bareAccountId(args),\n target: requireTarget(args, \"custom conversion\"),\n payload: { status: \"DELETED\" },\n });\n },\n});\n\n// --- Labels ---\n\nexport const labelsCreateCommand = command({\n schema: \"ads.meta.labels.create\",\n name: \"create\",\n description:\n 'Stage a new ad label. File things under it with `labels attach <ref> --campaigns …` in the same chat. Example: baker ads meta labels create --name \"Q4 launch\"',\n schemaDescription: \"Stage a new Meta ad label (created at publish). Returns a meta_temp_* ref `labels attach` takes.\",\n args: { \"account-id\": accountArg, name: { type: \"string\", description: \"Label name\" } },\n run: async (args) => {\n await stageOp({ kind: \"adLabel.create\", accountId: bareAccountId(args), payload: { name: args.name } });\n },\n});\n\nexport const labelsRenameCommand = command({\n schema: \"ads.meta.labels.rename\",\n name: \"rename\",\n description: \"Stage renaming an ad label.\",\n schemaDescription: \"Stage renaming a Meta ad label.\",\n args: { id: schemaId(\"Label id\"), \"account-id\": accountArg, name: { type: \"string\", description: \"New name\" } },\n run: async (args) => {\n await stageOp({\n kind: \"adLabel.update\",\n accountId: bareAccountId(args),\n target: requireTarget(args, \"label\"),\n payload: { name: args.name },\n });\n },\n});\n\nexport const labelsDeleteCommand = command({\n schema: \"ads.meta.labels.delete\",\n name: \"delete\",\n description: \"Stage deleting an ad label. Everything filed under it keeps running, unlabelled.\",\n schemaDescription: \"Stage deleting a Meta ad label — applied at publish; labelled objects keep running.\",\n args: { id: schemaId(\"Label id\"), \"account-id\": accountArg },\n run: async (args) => {\n await stageOp({\n kind: \"adLabel.update\",\n accountId: bareAccountId(args),\n target: requireTarget(args, \"label\"),\n payload: { status: \"DELETED\" },\n });\n },\n});\n\nconst LABELLED = [\n [\"campaigns\", \"campaign.update\"],\n [\"adsets\", \"adSet.update\"],\n [\"ads\", \"ad.update\"],\n [\"creatives\", \"adCreative.update\"],\n] as const;\n\nconst targetArgs = {\n campaigns: { type: \"string\", description: \"Campaign ids (comma-separated or repeated)\" },\n adsets: { type: \"string\", description: \"Ad set ids\" },\n ads: { type: \"string\", description: \"Ad ids\" },\n creatives: {\n type: \"string\",\n description: \"Creative ids (live ones — a creative created in this chat is labelled later)\",\n },\n} as const;\n\nfunction idsOf(rawArgs: readonly string[] | undefined, flag: string, parsed: unknown): string[] {\n return repeatedValues(rawArgs, flag, parsed)\n .flatMap((value) => value.split(\",\"))\n .map((value) => value.trim())\n .filter(Boolean);\n}\n\n/**\n * One staged update per object. Each names only the label to add or take\n * away; staging reads the labels the object has now and stages the whole set,\n * because Meta replaces an object's labels with the set it is sent.\n */\nasync function stageLabelChange(\n verb: \"addLabels\" | \"removeLabels\",\n args: Record<string, unknown>,\n rawArgs: readonly string[] | undefined,\n): Promise<void> {\n const accountId = bareAccountId(args);\n const label = requireTarget(args, \"label\");\n const targets = LABELLED.flatMap(([flag, kind]) => idsOf(rawArgs, flag, args[flag]).map((id) => ({ kind, id })));\n if (targets.length === 0) {\n failWriteValidation(\"name what to label: --campaigns, --adsets, --ads or --creatives\");\n }\n await stageOps(\n targets.map((target) => ({ kind: target.kind, accountId, target: target.id, payload: { [verb]: [label] } })),\n );\n}\n\nexport const labelsAttachCommand = command({\n schema: \"ads.meta.labels.attach\",\n name: \"attach\",\n description:\n \"Stage filing campaigns, ad sets, ads or creatives under a label (a label id, or a meta_temp_* ref from `labels create`). Their other labels stay. Example: baker ads meta labels attach 120249 --campaigns 6123,6124\",\n schemaDescription:\n \"Stage adding a Meta ad label to campaigns/ad sets/ads/creatives (--campaigns, --adsets, --ads, --creatives; comma-separated). One staged change per object; other labels kept.\",\n args: { id: schemaId(\"Label id or meta_temp_* ref\"), \"account-id\": accountArg, ...targetArgs },\n run: async (args, rawArgs) => {\n await stageLabelChange(\"addLabels\", args, rawArgs);\n },\n});\n\nexport const labelsDetachCommand = command({\n schema: \"ads.meta.labels.detach\",\n name: \"detach\",\n description: \"Stage taking a label off campaigns, ad sets, ads or creatives. Their other labels stay.\",\n schemaDescription:\n \"Stage removing a Meta ad label from campaigns/ad sets/ads/creatives (--campaigns, --adsets, --ads, --creatives). Other labels kept.\",\n args: { id: schemaId(\"Label id\"), \"account-id\": accountArg, ...targetArgs },\n run: async (args, rawArgs) => {\n await stageLabelChange(\"removeLabels\", args, rawArgs);\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
recordIdeaLines
|
|
3
|
+
} from "./chunk-ZEPUDYPL.js";
|
|
4
|
+
import {
|
|
5
|
+
anchorLines,
|
|
6
|
+
readIdeaAnchor
|
|
7
|
+
} from "./chunk-YLYXSJ6O.js";
|
|
8
|
+
import {
|
|
9
|
+
findWorkspaceRoot
|
|
10
|
+
} from "./chunk-23H4ZJRP.js";
|
|
11
|
+
|
|
12
|
+
// src/commands/creatives/idea-hint.ts
|
|
13
|
+
import path from "path";
|
|
14
|
+
function present(fields) {
|
|
15
|
+
const said = Object.entries(fields).filter(([, v]) => v !== void 0 && !(Array.isArray(v) && v.length === 0));
|
|
16
|
+
return Object.fromEntries(said);
|
|
17
|
+
}
|
|
18
|
+
function anchorOut(view, full) {
|
|
19
|
+
const reference = view.reference ? {
|
|
20
|
+
...present({ adId: view.reference.adId, advertiser: view.advertiser }),
|
|
21
|
+
carry: view.reference.carry,
|
|
22
|
+
mustKeep: view.reference.mustKeep
|
|
23
|
+
} : void 0;
|
|
24
|
+
const compact = present({
|
|
25
|
+
message: view.message,
|
|
26
|
+
language: view.language,
|
|
27
|
+
reference,
|
|
28
|
+
seriesLead: view.seriesLead,
|
|
29
|
+
accent: view.accent,
|
|
30
|
+
cast: view.cast,
|
|
31
|
+
who: view.who,
|
|
32
|
+
survives: view.survives
|
|
33
|
+
});
|
|
34
|
+
if (!full) return compact;
|
|
35
|
+
return {
|
|
36
|
+
...compact,
|
|
37
|
+
...present({ why: view.why, voices: view.voices, voiceIds: view.voiceIds, route: view.route }),
|
|
38
|
+
changes: view.changes
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function ideaHint(view) {
|
|
42
|
+
return `Its idea: ${anchorLines(view).join(" \xB7 ").replace(
|
|
43
|
+
/[.!?…]+$/u,
|
|
44
|
+
""
|
|
45
|
+
)}. An edit keeps it: change exactly what they named; a change of the idea they asked for is one line under "## Changes" in _definition.md, the reason after the dash.`;
|
|
46
|
+
}
|
|
47
|
+
function withAnchor(response, view, opts) {
|
|
48
|
+
return {
|
|
49
|
+
...response,
|
|
50
|
+
data: { ...response.data, anchor: anchorOut(view, opts.full) },
|
|
51
|
+
hints: [ideaHint(view), ...response.hints ?? []]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async function readCreativeIdea(slug) {
|
|
55
|
+
const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
|
|
56
|
+
const read = await readIdeaAnchor(path.join(root, "src", "creatives", slug));
|
|
57
|
+
if (!read) return null;
|
|
58
|
+
await recordIdeaLines(path.join(root, "canvas"), slug, anchorLines(read.view)).catch(() => void 0);
|
|
59
|
+
return read.view;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export {
|
|
63
|
+
withAnchor,
|
|
64
|
+
readCreativeIdea
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=chunk-TFTZDWCX.js.map
|