@koda-sl/baker-cli 0.445.0-dev.a2eb3621e → 0.446.0-dev.c97e2d09a
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 +5 -3
- package/dist/{account-RDRK7NOE.js → account-JYAHNWTU.js} +4 -4
- package/dist/{accounts-6COLJJHM.js → accounts-IOXUP35Y.js} +5 -5
- package/dist/{accounts-4TYIUVWY.js → accounts-YQMXWDQL.js} +3 -3
- package/dist/{actions-PEI6ZQAG.js → actions-EGCRZ3ZL.js} +18 -18
- package/dist/{add-XEDSBYLM.js → add-ID4XAPM5.js} +3 -3
- package/dist/{add-XDOQQCHS.js → add-ZFWSN3HT.js} +2 -2
- package/dist/{ads-TJ7ACFHG.js → ads-GL2H5TJE.js} +3 -3
- package/dist/{analytics-PT2GKCFU.js → analytics-FDEH3HFH.js} +6 -6
- package/dist/{analytics-ZVWUY66X.js → analytics-TTBGPXHL.js} +3 -3
- package/dist/{assign-B26AJLGN.js → assign-3ZPQAQWD.js} +3 -3
- package/dist/{audience-size-ZX565D5P.js → audience-size-LRAGY3F5.js} +3 -3
- package/dist/{audit-SAXVPGWS.js → audit-FQARJWOU.js} +3 -3
- package/dist/{avatars-2UQJXHPV.js → avatars-JZSFFUC5.js} +4 -4
- package/dist/{bid-pricing-WSHACGX4.js → bid-pricing-4653K7RN.js} +3 -3
- package/dist/{brand-XBABUT52.js → brand-PLQUPMXV.js} +2 -2
- package/dist/{brief-KKNC32TA.js → brief-UVMPQB6T.js} +6 -6
- package/dist/{campaign-groups-G35366AW.js → campaign-groups-UQ6EZQMA.js} +8 -8
- package/dist/{campaign-writes-ZQGN7FQ3.js → campaign-writes-UK3GMOQK.js} +3 -3
- package/dist/{campaigns-WECN54WV.js → campaigns-5JVA6FCV.js} +5 -5
- package/dist/{campaigns-GXUCHQ2S.js → campaigns-THNNAQNO.js} +11 -11
- package/dist/{canvas-DNIREYCF.js → canvas-XT6KSCJH.js} +12 -12
- package/dist/{capabilities-74I5AQ36.js → capabilities-ELXIQ4R7.js} +3 -3
- package/dist/{chats-DWHF64IU.js → chats-V3KB5FCU.js} +3 -3
- package/dist/{chunk-AN447DQB.js → chunk-2SMGPLIW.js} +3 -3
- package/dist/{chunk-QXZYAIWS.js → chunk-2YJNBTXE.js} +5 -5
- package/dist/{chunk-SBMIQDCX.js → chunk-3U3RUPKR.js} +2 -2
- package/dist/{chunk-VWCELTQE.js → chunk-633BRRZO.js} +2 -2
- package/dist/{chunk-XYMPS526.js → chunk-65IJ6BDS.js} +2 -2
- package/dist/{chunk-75VNSKS3.js → chunk-676WE6CY.js} +2 -2
- package/dist/{chunk-OKJYCCHY.js → chunk-7H2VLDYU.js} +5 -5
- package/dist/{chunk-LL2CD5WU.js → chunk-7LT6UP2W.js} +2 -2
- package/dist/{chunk-KXRXS6BZ.js → chunk-7RUYWECB.js} +3 -3
- package/dist/{chunk-SJDPHVGE.js → chunk-AST5XJKZ.js} +2 -2
- package/dist/{chunk-XWH7CCBL.js → chunk-ASVKZQUU.js} +22 -7
- package/dist/chunk-ASVKZQUU.js.map +1 -0
- package/dist/{chunk-NPE7EWBE.js → chunk-B3AKIYBA.js} +2 -2
- package/dist/{chunk-JM73NDCM.js → chunk-DQPTUBCB.js} +2 -2
- package/dist/{chunk-FHXIEMCG.js → chunk-DXB5YV6S.js} +2 -2
- package/dist/{chunk-ZJ47BR6X.js → chunk-ENUZU5LQ.js} +2 -2
- package/dist/{chunk-FEXDI4NM.js → chunk-EO7NHHEZ.js} +2 -2
- package/dist/{chunk-UKJNLP4A.js → chunk-GT54GEDT.js} +2 -2
- package/dist/{chunk-73QKIIIR.js → chunk-GZVZ7CQI.js} +2 -2
- package/dist/{chunk-MRLT6YQM.js → chunk-JSN6LLHX.js} +5 -5
- package/dist/{chunk-RSW6QJPH.js → chunk-MJABIGKT.js} +2 -2
- package/dist/{chunk-3RJ3VGJP.js → chunk-ML3ZIQ7K.js} +2 -2
- package/dist/{chunk-HSTEQ3RF.js → chunk-NEZLPWD4.js} +4 -4
- package/dist/{chunk-IPAETHU2.js → chunk-OWK5WYFZ.js} +2 -2
- package/dist/{chunk-7QJVPMVB.js → chunk-P3WRQED4.js} +2 -2
- package/dist/{chunk-VBHDZSI5.js → chunk-S42CGOGT.js} +2 -2
- package/dist/{chunk-BYDF22T4.js → chunk-W33XBKLZ.js} +3 -3
- package/dist/{chunk-IXKEWS7X.js → chunk-X5TFU7ET.js} +2 -2
- package/dist/{chunk-7GPDUS3P.js → chunk-XL3UIAMJ.js} +2 -2
- package/dist/{chunk-5CGZ54YS.js → chunk-XZPREXCE.js} +2 -2
- package/dist/{chunk-LO6GEJ4Z.js → chunk-YY6CIVRY.js} +3 -3
- package/dist/{chunk-OKG6GX2F.js → chunk-ZEYFPIKH.js} +2 -2
- package/dist/{chunk-LO72ZSRR.js → chunk-ZN63N3EP.js} +3 -3
- package/dist/{claim-EIL4ZBSN.js → claim-Y5ZYM3Y3.js} +3 -3
- package/dist/cli.js +27 -27
- package/dist/{companies-2UG7RDYN.js → companies-2R4QXPSF.js} +3 -3
- package/dist/{complete-I4KRFYMD.js → complete-SG2VVAGA.js} +3 -3
- package/dist/{connect-TA5W6YGW.js → connect-A3SJQKSE.js} +6 -6
- package/dist/{conversation-BJI54MI6.js → conversation-5WIHZLPU.js} +3 -3
- package/dist/{conversions-VJOJ5S4U.js → conversions-7PGKDZVN.js} +7 -7
- package/dist/{create-VY3RQXOY.js → create-5PKVRJUD.js} +3 -3
- package/dist/{create-E7BIZNUC.js → create-EYSGANKH.js} +3 -3
- package/dist/{create-JLQCXAT2.js → create-UVVII4GB.js} +2 -2
- package/dist/{create-HKOO7O5L.js → create-XOLEMSB2.js} +3 -3
- package/dist/{creatives-KM2XH4G7.js → creatives-4DRALRUE.js} +10 -10
- package/dist/{creatives-VXQQUH2F.js → creatives-OB77VU5H.js} +8 -8
- package/dist/{credentials-G5BJK7OR.js → credentials-IVV3T4JD.js} +3 -3
- package/dist/{critique-CMLAPVUB.js → critique-MZBGOV3K.js} +3 -3
- package/dist/{critique-6MIZLNCN.js → critique-NM6GK2KW.js} +5 -5
- package/dist/{crm-CL7R67FT.js → crm-5GCGLHKD.js} +4 -4
- package/dist/{crm-GJCAM3DI.js → crm-IYAWE47A.js} +4 -4
- package/dist/{customers-4RJGRR2Y.js → customers-L3D3YCTM.js} +4 -4
- package/dist/{delete-R57JFJ3A.js → delete-E2IGHOBY.js} +2 -2
- package/dist/{delete-IJNJTAGW.js → delete-JYPEYYKM.js} +3 -3
- package/dist/{delete-4QXLTL24.js → delete-WMT2GDDN.js} +3 -3
- package/dist/{demographics-VMARSTTE.js → demographics-VTOJJK5E.js} +3 -3
- package/dist/{discard-Y2BKPW4Z.js → discard-62REOO2E.js} +3 -3
- package/dist/{domain-YTHDTRWN.js → domain-7ACHLP2Y.js} +3 -3
- package/dist/{draft-ZVVUAMMQ.js → draft-FPD6BOUC.js} +4 -4
- package/dist/{draft-KOLU5BRR.js → draft-MAGMH5FJ.js} +3 -3
- package/dist/{draft-ABGQYDHP.js → draft-ZZQ4GGIG.js} +3 -3
- package/dist/{facets-UXN4MYPO.js → facets-DZCAWR32.js} +3 -3
- package/dist/{feedback-C4VDRNUM.js → feedback-X7RG7PRM.js} +2 -2
- package/dist/{feedback-record-KNIYAUTC.js → feedback-record-JFLBXQWA.js} +7 -7
- package/dist/{flows-PB4K66NJ.js → flows-Q454EFMN.js} +10 -10
- package/dist/{fonts-NTOQS2KU.js → fonts-YWGD2B4N.js} +5 -5
- package/dist/{forecast-RWDIDDWP.js → forecast-TQNRU5ZY.js} +3 -3
- package/dist/{funnel-XCKPRYTV.js → funnel-YVSYSLT4.js} +4 -4
- package/dist/{get-WO22OCMZ.js → get-756GD6EF.js} +3 -3
- package/dist/{get-67IG7SZI.js → get-7PZP4HJ3.js} +3 -3
- package/dist/{history-PBFRKLU6.js → history-MECEOLRV.js} +3 -3
- package/dist/{hubspot-PMOZST7W.js → hubspot-KF5J4AEB.js} +7 -7
- package/dist/{ideas-PU7IAX6F.js → ideas-AFJ5U7PK.js} +2 -2
- package/dist/{images-QI2HTX6B.js → images-P4JQZJZW.js} +4 -4
- package/dist/{ingest-ZQM47NVZ.js → ingest-7LRGIUIK.js} +2 -2
- package/dist/{ingest-BYJNFOOT.js → ingest-OLPYRECF.js} +3 -3
- package/dist/{inspect-CQH55Q6G.js → inspect-ETUZZCVT.js} +3 -3
- package/dist/{keyword-metrics-E3NJUSEQ.js → keyword-metrics-6K2LQZVQ.js} +2 -2
- package/dist/{landing-4PA7GCPM.js → landing-NXZYGBVA.js} +2 -2
- package/dist/{leads-I7BO5V7P.js → leads-J5Z3K72L.js} +3 -3
- package/dist/{learn-HZU3QWNN.js → learn-YK2NNAXT.js} +4 -4
- package/dist/{line-item-writes-JSR53MID.js → line-item-writes-OQKDQBRR.js} +3 -3
- package/dist/{line-items-2WFLKOOR.js → line-items-N32SUQW2.js} +5 -5
- package/dist/{link-AYXOJQDV.js → link-YOUYN4HW.js} +3 -3
- package/dist/{linkedin-M2PVZYLV.js → linkedin-UZX3LTGS.js} +26 -26
- package/dist/{list-QGLIL7J6.js → list-5XOP7RXP.js} +3 -3
- package/dist/{list-3OKEMUFD.js → list-CXB5L7W3.js} +2 -2
- package/dist/{list-4MQC23JH.js → list-NEH7CXA4.js} +3 -3
- package/dist/{log-QHR2JNKW.js → log-Y22VMQMW.js} +3 -3
- package/dist/{make-HRCWP2C6.js → make-AYTOHWHD.js} +10 -10
- package/dist/{map-3BVFAP33.js → map-62RLXP7R.js} +4 -4
- package/dist/{mcp-LH5KR6RO.js → mcp-CNDPFOWE.js} +2 -2
- package/dist/{media-sources-3D246I3O.js → media-sources-KIM7FTIH.js} +2 -2
- package/dist/{members-4DUQHLZH.js → members-I5JNM2PJ.js} +3 -3
- package/dist/{normalize-CD4PQRYY.js → normalize-YALLU2FS.js} +3 -3
- package/dist/{options-6TE5E34Z.js → options-OZGAYIXG.js} +6 -6
- package/dist/{performance-7LQQCEAW.js → performance-FYV43RZU.js} +4 -4
- package/dist/{promoted-tweet-writes-F76YIMB6.js → promoted-tweet-writes-DV6W6BRF.js} +3 -3
- package/dist/{promoted-tweets-EJL37P7K.js → promoted-tweets-KD4755XT.js} +3 -3
- package/dist/{publish-H5S2IKZP.js → publish-A6C6AIDN.js} +3 -3
- package/dist/{reddit-INGPFGP4.js → reddit-BRHSTRV3.js} +3 -3
- package/dist/{refresh-MKSKISPX.js → refresh-MDM2AGBY.js} +2 -2
- package/dist/{release-J5LIAIZT.js → release-HKAOMV22.js} +3 -3
- package/dist/{remove-LYEK7VFV.js → remove-JDWMPK2C.js} +2 -2
- package/dist/{reopen-FR4UBOG7.js → reopen-3X47UVTN.js} +3 -3
- package/dist/{rerun-XPWGIVTT.js → rerun-SMGRCAVF.js} +10 -10
- package/dist/{research-PA53M335.js → research-BLHRRMIJ.js} +4 -4
- package/dist/{research-RPJSOWPT.js → research-L2R3IXZL.js} +55 -19
- package/dist/research-L2R3IXZL.js.map +1 -0
- package/dist/{reset-H3ES4WV5.js → reset-MUR2L6KX.js} +2 -2
- package/dist/{reset-RCYRE5WO.js → reset-RC25CNM5.js} +2 -2
- package/dist/{resolve-QIDQJCE6.js → resolve-GYFMTEKE.js} +3 -3
- package/dist/{retry-WLVMR7XP.js → retry-BZIV5J4F.js} +2 -2
- package/dist/{retry-PLLCFOJW.js → retry-WRJ3G5X2.js} +2 -2
- package/dist/{run-WMJPDX6U.js → run-6JPWF5S6.js} +10 -10
- package/dist/{run-4D7ZCLMF.js → run-L5J2JKMZ.js} +3 -3
- package/dist/{scaffold-ad-VYYZIEQ2.js → scaffold-ad-YKS6BZ47.js} +8 -8
- package/dist/{scaffold-static-ad-B3SZ2HLW.js → scaffold-static-ad-EPWJHAYS.js} +12 -12
- package/dist/{scaffold-video-2QISC5CW.js → scaffold-video-LKLEA4TM.js} +7 -7
- package/dist/{schedule-RXUUCNNI.js → schedule-B3QDOMSR.js} +2 -2
- package/dist/{scheduled-agents-2NCGSD76.js → scheduled-agents-OKXW6GYL.js} +11 -11
- package/dist/{schema-SFODURN7.js → schema-UW772MB2.js} +4 -4
- package/dist/{search-7QVZOWSI.js → search-36WKJO5Z.js} +2 -2
- package/dist/{select-C6CFCOEM.js → select-JJTZNNBZ.js} +7 -7
- package/dist/{set-prompt-MIMQYMGM.js → set-prompt-626I74ZW.js} +5 -5
- package/dist/{setup-links-XW4A6L2I.js → setup-links-CZ56WG7K.js} +3 -3
- package/dist/{site-6UTQSYIK.js → site-YGY6IGLQ.js} +4 -4
- package/dist/{sources-UGMZFZ2E.js → sources-DPE7HS2L.js} +6 -6
- package/dist/{sources-QQNWQLUM.js → sources-LFKRFJ6E.js} +6 -6
- package/dist/{stale-NOSV6ONW.js → stale-HZB4L5VZ.js} +6 -6
- package/dist/{status-NXGKJGH7.js → status-TGMY37OX.js} +3 -3
- package/dist/{sync-RXS6BPLM.js → sync-GY3YWXZ4.js} +2 -2
- package/dist/{sync-definition-2DQN2KN3.js → sync-definition-BREENUVW.js} +7 -7
- package/dist/{tags-CMBKEXIZ.js → tags-B6FTBKE7.js} +3 -3
- package/dist/{tags-C65JB762.js → tags-BOXRDIP2.js} +2 -2
- package/dist/{tags-R3K35KTL.js → tags-KDCOIXY5.js} +4 -4
- package/dist/{tags-IJN2SPSM.js → tags-MBGOC3C5.js} +3 -3
- package/dist/{tags-GFFQLLG2.js → tags-OEQA35YM.js} +3 -3
- package/dist/{targeting-criteria-IHBPLHSX.js → targeting-criteria-OSIGTYIK.js} +3 -3
- package/dist/{targets-JH37NVJF.js → targets-EZDJE2BR.js} +3 -3
- package/dist/{templates-HXSHQ23T.js → templates-43CM65YU.js} +3 -3
- package/dist/{testimonials-5QGCPZ6K.js → testimonials-TGSG33XN.js} +6 -6
- package/dist/{top-companies-FJEFKVI7.js → top-companies-AU2Y2JBL.js} +3 -3
- package/dist/{translate-XQDRDI6P.js → translate-UAQN3UP6.js} +165 -44
- package/dist/translate-UAQN3UP6.js.map +1 -0
- package/dist/{triggers-SEOAAJSS.js → triggers-KANOVASP.js} +3 -3
- package/dist/{unlink-UZDVSHBO.js → unlink-3O34M3RC.js} +3 -3
- package/dist/{unstage-CE5RRGM5.js → unstage-IU3X67HQ.js} +3 -3
- package/dist/{update-JZ4I6WW7.js → update-2MSRC7SF.js} +3 -3
- package/dist/{update-DGZKEP6T.js → update-3T2GI5UT.js} +3 -3
- package/dist/{update-ZXOG2V34.js → update-4AKUKIHY.js} +2 -2
- package/dist/{update-JOS4ITAV.js → update-L575JJ26.js} +3 -3
- package/dist/{upload-SSOPA7ZT.js → upload-YGKEXFZX.js} +3 -3
- package/dist/{url-params-OR5N5EWT.js → url-params-JO6DMUNT.js} +3 -3
- package/dist/{validate-4YXSJA4S.js → validate-C2AJIWOF.js} +5 -5
- package/dist/{videos-GIYDCCKR.js → videos-73IKG7QH.js} +5 -5
- package/dist/{winning-ads-7QWEIMRU.js → winning-ads-UCDDPWFM.js} +2 -2
- package/dist/{write-commands-SVJ43D7G.js → write-commands-WBBS3C5L.js} +4 -4
- package/dist/{x-OEAKQBB7.js → x-VOG2EPI6.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-XWH7CCBL.js.map +0 -1
- package/dist/research-RPJSOWPT.js.map +0 -1
- package/dist/translate-XQDRDI6P.js.map +0 -1
- /package/dist/{account-RDRK7NOE.js.map → account-JYAHNWTU.js.map} +0 -0
- /package/dist/{accounts-6COLJJHM.js.map → accounts-IOXUP35Y.js.map} +0 -0
- /package/dist/{accounts-4TYIUVWY.js.map → accounts-YQMXWDQL.js.map} +0 -0
- /package/dist/{actions-PEI6ZQAG.js.map → actions-EGCRZ3ZL.js.map} +0 -0
- /package/dist/{add-XEDSBYLM.js.map → add-ID4XAPM5.js.map} +0 -0
- /package/dist/{add-XDOQQCHS.js.map → add-ZFWSN3HT.js.map} +0 -0
- /package/dist/{ads-TJ7ACFHG.js.map → ads-GL2H5TJE.js.map} +0 -0
- /package/dist/{analytics-PT2GKCFU.js.map → analytics-FDEH3HFH.js.map} +0 -0
- /package/dist/{analytics-ZVWUY66X.js.map → analytics-TTBGPXHL.js.map} +0 -0
- /package/dist/{assign-B26AJLGN.js.map → assign-3ZPQAQWD.js.map} +0 -0
- /package/dist/{audience-size-ZX565D5P.js.map → audience-size-LRAGY3F5.js.map} +0 -0
- /package/dist/{audit-SAXVPGWS.js.map → audit-FQARJWOU.js.map} +0 -0
- /package/dist/{avatars-2UQJXHPV.js.map → avatars-JZSFFUC5.js.map} +0 -0
- /package/dist/{bid-pricing-WSHACGX4.js.map → bid-pricing-4653K7RN.js.map} +0 -0
- /package/dist/{brand-XBABUT52.js.map → brand-PLQUPMXV.js.map} +0 -0
- /package/dist/{brief-KKNC32TA.js.map → brief-UVMPQB6T.js.map} +0 -0
- /package/dist/{campaign-groups-G35366AW.js.map → campaign-groups-UQ6EZQMA.js.map} +0 -0
- /package/dist/{campaign-writes-ZQGN7FQ3.js.map → campaign-writes-UK3GMOQK.js.map} +0 -0
- /package/dist/{campaigns-WECN54WV.js.map → campaigns-5JVA6FCV.js.map} +0 -0
- /package/dist/{campaigns-GXUCHQ2S.js.map → campaigns-THNNAQNO.js.map} +0 -0
- /package/dist/{canvas-DNIREYCF.js.map → canvas-XT6KSCJH.js.map} +0 -0
- /package/dist/{capabilities-74I5AQ36.js.map → capabilities-ELXIQ4R7.js.map} +0 -0
- /package/dist/{chats-DWHF64IU.js.map → chats-V3KB5FCU.js.map} +0 -0
- /package/dist/{chunk-AN447DQB.js.map → chunk-2SMGPLIW.js.map} +0 -0
- /package/dist/{chunk-QXZYAIWS.js.map → chunk-2YJNBTXE.js.map} +0 -0
- /package/dist/{chunk-SBMIQDCX.js.map → chunk-3U3RUPKR.js.map} +0 -0
- /package/dist/{chunk-VWCELTQE.js.map → chunk-633BRRZO.js.map} +0 -0
- /package/dist/{chunk-XYMPS526.js.map → chunk-65IJ6BDS.js.map} +0 -0
- /package/dist/{chunk-75VNSKS3.js.map → chunk-676WE6CY.js.map} +0 -0
- /package/dist/{chunk-OKJYCCHY.js.map → chunk-7H2VLDYU.js.map} +0 -0
- /package/dist/{chunk-LL2CD5WU.js.map → chunk-7LT6UP2W.js.map} +0 -0
- /package/dist/{chunk-KXRXS6BZ.js.map → chunk-7RUYWECB.js.map} +0 -0
- /package/dist/{chunk-SJDPHVGE.js.map → chunk-AST5XJKZ.js.map} +0 -0
- /package/dist/{chunk-NPE7EWBE.js.map → chunk-B3AKIYBA.js.map} +0 -0
- /package/dist/{chunk-JM73NDCM.js.map → chunk-DQPTUBCB.js.map} +0 -0
- /package/dist/{chunk-FHXIEMCG.js.map → chunk-DXB5YV6S.js.map} +0 -0
- /package/dist/{chunk-ZJ47BR6X.js.map → chunk-ENUZU5LQ.js.map} +0 -0
- /package/dist/{chunk-FEXDI4NM.js.map → chunk-EO7NHHEZ.js.map} +0 -0
- /package/dist/{chunk-UKJNLP4A.js.map → chunk-GT54GEDT.js.map} +0 -0
- /package/dist/{chunk-73QKIIIR.js.map → chunk-GZVZ7CQI.js.map} +0 -0
- /package/dist/{chunk-MRLT6YQM.js.map → chunk-JSN6LLHX.js.map} +0 -0
- /package/dist/{chunk-RSW6QJPH.js.map → chunk-MJABIGKT.js.map} +0 -0
- /package/dist/{chunk-3RJ3VGJP.js.map → chunk-ML3ZIQ7K.js.map} +0 -0
- /package/dist/{chunk-HSTEQ3RF.js.map → chunk-NEZLPWD4.js.map} +0 -0
- /package/dist/{chunk-IPAETHU2.js.map → chunk-OWK5WYFZ.js.map} +0 -0
- /package/dist/{chunk-7QJVPMVB.js.map → chunk-P3WRQED4.js.map} +0 -0
- /package/dist/{chunk-VBHDZSI5.js.map → chunk-S42CGOGT.js.map} +0 -0
- /package/dist/{chunk-BYDF22T4.js.map → chunk-W33XBKLZ.js.map} +0 -0
- /package/dist/{chunk-IXKEWS7X.js.map → chunk-X5TFU7ET.js.map} +0 -0
- /package/dist/{chunk-7GPDUS3P.js.map → chunk-XL3UIAMJ.js.map} +0 -0
- /package/dist/{chunk-5CGZ54YS.js.map → chunk-XZPREXCE.js.map} +0 -0
- /package/dist/{chunk-LO6GEJ4Z.js.map → chunk-YY6CIVRY.js.map} +0 -0
- /package/dist/{chunk-OKG6GX2F.js.map → chunk-ZEYFPIKH.js.map} +0 -0
- /package/dist/{chunk-LO72ZSRR.js.map → chunk-ZN63N3EP.js.map} +0 -0
- /package/dist/{claim-EIL4ZBSN.js.map → claim-Y5ZYM3Y3.js.map} +0 -0
- /package/dist/{companies-2UG7RDYN.js.map → companies-2R4QXPSF.js.map} +0 -0
- /package/dist/{complete-I4KRFYMD.js.map → complete-SG2VVAGA.js.map} +0 -0
- /package/dist/{connect-TA5W6YGW.js.map → connect-A3SJQKSE.js.map} +0 -0
- /package/dist/{conversation-BJI54MI6.js.map → conversation-5WIHZLPU.js.map} +0 -0
- /package/dist/{conversions-VJOJ5S4U.js.map → conversions-7PGKDZVN.js.map} +0 -0
- /package/dist/{create-VY3RQXOY.js.map → create-5PKVRJUD.js.map} +0 -0
- /package/dist/{create-E7BIZNUC.js.map → create-EYSGANKH.js.map} +0 -0
- /package/dist/{create-JLQCXAT2.js.map → create-UVVII4GB.js.map} +0 -0
- /package/dist/{create-HKOO7O5L.js.map → create-XOLEMSB2.js.map} +0 -0
- /package/dist/{creatives-KM2XH4G7.js.map → creatives-4DRALRUE.js.map} +0 -0
- /package/dist/{creatives-VXQQUH2F.js.map → creatives-OB77VU5H.js.map} +0 -0
- /package/dist/{credentials-G5BJK7OR.js.map → credentials-IVV3T4JD.js.map} +0 -0
- /package/dist/{critique-CMLAPVUB.js.map → critique-MZBGOV3K.js.map} +0 -0
- /package/dist/{critique-6MIZLNCN.js.map → critique-NM6GK2KW.js.map} +0 -0
- /package/dist/{crm-CL7R67FT.js.map → crm-5GCGLHKD.js.map} +0 -0
- /package/dist/{crm-GJCAM3DI.js.map → crm-IYAWE47A.js.map} +0 -0
- /package/dist/{customers-4RJGRR2Y.js.map → customers-L3D3YCTM.js.map} +0 -0
- /package/dist/{delete-R57JFJ3A.js.map → delete-E2IGHOBY.js.map} +0 -0
- /package/dist/{delete-IJNJTAGW.js.map → delete-JYPEYYKM.js.map} +0 -0
- /package/dist/{delete-4QXLTL24.js.map → delete-WMT2GDDN.js.map} +0 -0
- /package/dist/{demographics-VMARSTTE.js.map → demographics-VTOJJK5E.js.map} +0 -0
- /package/dist/{discard-Y2BKPW4Z.js.map → discard-62REOO2E.js.map} +0 -0
- /package/dist/{domain-YTHDTRWN.js.map → domain-7ACHLP2Y.js.map} +0 -0
- /package/dist/{draft-ZVVUAMMQ.js.map → draft-FPD6BOUC.js.map} +0 -0
- /package/dist/{draft-KOLU5BRR.js.map → draft-MAGMH5FJ.js.map} +0 -0
- /package/dist/{draft-ABGQYDHP.js.map → draft-ZZQ4GGIG.js.map} +0 -0
- /package/dist/{facets-UXN4MYPO.js.map → facets-DZCAWR32.js.map} +0 -0
- /package/dist/{feedback-C4VDRNUM.js.map → feedback-X7RG7PRM.js.map} +0 -0
- /package/dist/{feedback-record-KNIYAUTC.js.map → feedback-record-JFLBXQWA.js.map} +0 -0
- /package/dist/{flows-PB4K66NJ.js.map → flows-Q454EFMN.js.map} +0 -0
- /package/dist/{fonts-NTOQS2KU.js.map → fonts-YWGD2B4N.js.map} +0 -0
- /package/dist/{forecast-RWDIDDWP.js.map → forecast-TQNRU5ZY.js.map} +0 -0
- /package/dist/{funnel-XCKPRYTV.js.map → funnel-YVSYSLT4.js.map} +0 -0
- /package/dist/{get-WO22OCMZ.js.map → get-756GD6EF.js.map} +0 -0
- /package/dist/{get-67IG7SZI.js.map → get-7PZP4HJ3.js.map} +0 -0
- /package/dist/{history-PBFRKLU6.js.map → history-MECEOLRV.js.map} +0 -0
- /package/dist/{hubspot-PMOZST7W.js.map → hubspot-KF5J4AEB.js.map} +0 -0
- /package/dist/{ideas-PU7IAX6F.js.map → ideas-AFJ5U7PK.js.map} +0 -0
- /package/dist/{images-QI2HTX6B.js.map → images-P4JQZJZW.js.map} +0 -0
- /package/dist/{ingest-ZQM47NVZ.js.map → ingest-7LRGIUIK.js.map} +0 -0
- /package/dist/{ingest-BYJNFOOT.js.map → ingest-OLPYRECF.js.map} +0 -0
- /package/dist/{inspect-CQH55Q6G.js.map → inspect-ETUZZCVT.js.map} +0 -0
- /package/dist/{keyword-metrics-E3NJUSEQ.js.map → keyword-metrics-6K2LQZVQ.js.map} +0 -0
- /package/dist/{landing-4PA7GCPM.js.map → landing-NXZYGBVA.js.map} +0 -0
- /package/dist/{leads-I7BO5V7P.js.map → leads-J5Z3K72L.js.map} +0 -0
- /package/dist/{learn-HZU3QWNN.js.map → learn-YK2NNAXT.js.map} +0 -0
- /package/dist/{line-item-writes-JSR53MID.js.map → line-item-writes-OQKDQBRR.js.map} +0 -0
- /package/dist/{line-items-2WFLKOOR.js.map → line-items-N32SUQW2.js.map} +0 -0
- /package/dist/{link-AYXOJQDV.js.map → link-YOUYN4HW.js.map} +0 -0
- /package/dist/{linkedin-M2PVZYLV.js.map → linkedin-UZX3LTGS.js.map} +0 -0
- /package/dist/{list-QGLIL7J6.js.map → list-5XOP7RXP.js.map} +0 -0
- /package/dist/{list-3OKEMUFD.js.map → list-CXB5L7W3.js.map} +0 -0
- /package/dist/{list-4MQC23JH.js.map → list-NEH7CXA4.js.map} +0 -0
- /package/dist/{log-QHR2JNKW.js.map → log-Y22VMQMW.js.map} +0 -0
- /package/dist/{make-HRCWP2C6.js.map → make-AYTOHWHD.js.map} +0 -0
- /package/dist/{map-3BVFAP33.js.map → map-62RLXP7R.js.map} +0 -0
- /package/dist/{mcp-LH5KR6RO.js.map → mcp-CNDPFOWE.js.map} +0 -0
- /package/dist/{media-sources-3D246I3O.js.map → media-sources-KIM7FTIH.js.map} +0 -0
- /package/dist/{members-4DUQHLZH.js.map → members-I5JNM2PJ.js.map} +0 -0
- /package/dist/{normalize-CD4PQRYY.js.map → normalize-YALLU2FS.js.map} +0 -0
- /package/dist/{options-6TE5E34Z.js.map → options-OZGAYIXG.js.map} +0 -0
- /package/dist/{performance-7LQQCEAW.js.map → performance-FYV43RZU.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-F76YIMB6.js.map → promoted-tweet-writes-DV6W6BRF.js.map} +0 -0
- /package/dist/{promoted-tweets-EJL37P7K.js.map → promoted-tweets-KD4755XT.js.map} +0 -0
- /package/dist/{publish-H5S2IKZP.js.map → publish-A6C6AIDN.js.map} +0 -0
- /package/dist/{reddit-INGPFGP4.js.map → reddit-BRHSTRV3.js.map} +0 -0
- /package/dist/{refresh-MKSKISPX.js.map → refresh-MDM2AGBY.js.map} +0 -0
- /package/dist/{release-J5LIAIZT.js.map → release-HKAOMV22.js.map} +0 -0
- /package/dist/{remove-LYEK7VFV.js.map → remove-JDWMPK2C.js.map} +0 -0
- /package/dist/{reopen-FR4UBOG7.js.map → reopen-3X47UVTN.js.map} +0 -0
- /package/dist/{rerun-XPWGIVTT.js.map → rerun-SMGRCAVF.js.map} +0 -0
- /package/dist/{research-PA53M335.js.map → research-BLHRRMIJ.js.map} +0 -0
- /package/dist/{reset-H3ES4WV5.js.map → reset-MUR2L6KX.js.map} +0 -0
- /package/dist/{reset-RCYRE5WO.js.map → reset-RC25CNM5.js.map} +0 -0
- /package/dist/{resolve-QIDQJCE6.js.map → resolve-GYFMTEKE.js.map} +0 -0
- /package/dist/{retry-WLVMR7XP.js.map → retry-BZIV5J4F.js.map} +0 -0
- /package/dist/{retry-PLLCFOJW.js.map → retry-WRJ3G5X2.js.map} +0 -0
- /package/dist/{run-WMJPDX6U.js.map → run-6JPWF5S6.js.map} +0 -0
- /package/dist/{run-4D7ZCLMF.js.map → run-L5J2JKMZ.js.map} +0 -0
- /package/dist/{scaffold-ad-VYYZIEQ2.js.map → scaffold-ad-YKS6BZ47.js.map} +0 -0
- /package/dist/{scaffold-static-ad-B3SZ2HLW.js.map → scaffold-static-ad-EPWJHAYS.js.map} +0 -0
- /package/dist/{scaffold-video-2QISC5CW.js.map → scaffold-video-LKLEA4TM.js.map} +0 -0
- /package/dist/{schedule-RXUUCNNI.js.map → schedule-B3QDOMSR.js.map} +0 -0
- /package/dist/{scheduled-agents-2NCGSD76.js.map → scheduled-agents-OKXW6GYL.js.map} +0 -0
- /package/dist/{schema-SFODURN7.js.map → schema-UW772MB2.js.map} +0 -0
- /package/dist/{search-7QVZOWSI.js.map → search-36WKJO5Z.js.map} +0 -0
- /package/dist/{select-C6CFCOEM.js.map → select-JJTZNNBZ.js.map} +0 -0
- /package/dist/{set-prompt-MIMQYMGM.js.map → set-prompt-626I74ZW.js.map} +0 -0
- /package/dist/{setup-links-XW4A6L2I.js.map → setup-links-CZ56WG7K.js.map} +0 -0
- /package/dist/{site-6UTQSYIK.js.map → site-YGY6IGLQ.js.map} +0 -0
- /package/dist/{sources-UGMZFZ2E.js.map → sources-DPE7HS2L.js.map} +0 -0
- /package/dist/{sources-QQNWQLUM.js.map → sources-LFKRFJ6E.js.map} +0 -0
- /package/dist/{stale-NOSV6ONW.js.map → stale-HZB4L5VZ.js.map} +0 -0
- /package/dist/{status-NXGKJGH7.js.map → status-TGMY37OX.js.map} +0 -0
- /package/dist/{sync-RXS6BPLM.js.map → sync-GY3YWXZ4.js.map} +0 -0
- /package/dist/{sync-definition-2DQN2KN3.js.map → sync-definition-BREENUVW.js.map} +0 -0
- /package/dist/{tags-CMBKEXIZ.js.map → tags-B6FTBKE7.js.map} +0 -0
- /package/dist/{tags-C65JB762.js.map → tags-BOXRDIP2.js.map} +0 -0
- /package/dist/{tags-R3K35KTL.js.map → tags-KDCOIXY5.js.map} +0 -0
- /package/dist/{tags-IJN2SPSM.js.map → tags-MBGOC3C5.js.map} +0 -0
- /package/dist/{tags-GFFQLLG2.js.map → tags-OEQA35YM.js.map} +0 -0
- /package/dist/{targeting-criteria-IHBPLHSX.js.map → targeting-criteria-OSIGTYIK.js.map} +0 -0
- /package/dist/{targets-JH37NVJF.js.map → targets-EZDJE2BR.js.map} +0 -0
- /package/dist/{templates-HXSHQ23T.js.map → templates-43CM65YU.js.map} +0 -0
- /package/dist/{testimonials-5QGCPZ6K.js.map → testimonials-TGSG33XN.js.map} +0 -0
- /package/dist/{top-companies-FJEFKVI7.js.map → top-companies-AU2Y2JBL.js.map} +0 -0
- /package/dist/{triggers-SEOAAJSS.js.map → triggers-KANOVASP.js.map} +0 -0
- /package/dist/{unlink-UZDVSHBO.js.map → unlink-3O34M3RC.js.map} +0 -0
- /package/dist/{unstage-CE5RRGM5.js.map → unstage-IU3X67HQ.js.map} +0 -0
- /package/dist/{update-JZ4I6WW7.js.map → update-2MSRC7SF.js.map} +0 -0
- /package/dist/{update-DGZKEP6T.js.map → update-3T2GI5UT.js.map} +0 -0
- /package/dist/{update-ZXOG2V34.js.map → update-4AKUKIHY.js.map} +0 -0
- /package/dist/{update-JOS4ITAV.js.map → update-L575JJ26.js.map} +0 -0
- /package/dist/{upload-SSOPA7ZT.js.map → upload-YGKEXFZX.js.map} +0 -0
- /package/dist/{url-params-OR5N5EWT.js.map → url-params-JO6DMUNT.js.map} +0 -0
- /package/dist/{validate-4YXSJA4S.js.map → validate-C2AJIWOF.js.map} +0 -0
- /package/dist/{videos-GIYDCCKR.js.map → videos-73IKG7QH.js.map} +0 -0
- /package/dist/{winning-ads-7QWEIMRU.js.map → winning-ads-UCDDPWFM.js.map} +0 -0
- /package/dist/{write-commands-SVJ43D7G.js.map → write-commands-WBBS3C5L.js.map} +0 -0
- /package/dist/{x-OEAKQBB7.js.map → x-VOG2EPI6.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/avatars/research.ts","../src/commands/avatars/researchHints.ts"],"sourcesContent":["import { AVATAR_HANDLE_PATTERN, type AvatarsResearchRequest, type AvatarsResearchResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { chatIdFromEnv } from \"./casting.ts\";\nimport { failAvatarApi, failValidation } from \"./failures.ts\";\nimport { type ResearchCall, researchHints } from \"./researchHints.ts\";\nimport { writeAvatars } from \"./transport.ts\";\n\n/** Searches, profile reads, a vision check and the photo ingests — well past the default minute on a slow day. */\nconst RESEARCH_TIMEOUT_MS = 180_000;\n\nregisterSchema({\n command: \"avatars.research\",\n description:\n 'Find a REAL, named person from a description and gather their public photos — and, with --create, build their avatar from them. Start here: `baker avatars research \"Lautaro Suarez, CTO at Vibiz\" --create`. Use it whenever copy shows a real person by name: a testimonial author with their role and company, the company\\'s founder or CEO, a named team member. Describe them, never pass a profile link: \"<name>, <role> at <company>\", or \"the CEO of <company>\" when the copy names a role. Identity is checked in code (name AND company must match a public profile): `found` returns their photos (now in the image library) and a subject description; `possible` returns the half-matches to pick from with --linkedin; `not_found` means fall back to an invented one-off person. The company naming them in its copy is the go-ahead to use their likeness — no confirmation question. A person who already has an avatar comes back with it (`reused: true`) — nothing searched, nothing billed — so run it every time copy names someone.',\n args: {\n who: {\n type: \"string\",\n description: 'How the copy names them, e.g. \"Lautaro Suarez, CTO at Vibiz\" or \"the CEO of Vibiz\"',\n required: true,\n },\n name: {\n type: \"string\",\n description: \"Their full name, when the description leaves it out or reads it wrong\",\n required: false,\n },\n role: { type: \"string\", description: 'Their role, e.g. \"CTO\", \"Founder\"', required: false },\n company: { type: \"string\", description: \"The company they are at\", required: false },\n linkedin: {\n type: \"string\",\n description:\n \"Only to pick one of the candidates a `possible` answer listed. Never go looking for a link yourself.\",\n required: false,\n },\n create: {\n type: \"boolean\",\n description: \"Build their avatar from the photos right away (likeness `licensed`, no face picker)\",\n required: false,\n },\n handle: {\n type: \"string\",\n description: \"Mention handle for the avatar --create builds (derived from the name when omitted)\",\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"Include their about text, location and every search that was run\",\n required: false,\n },\n },\n});\n\n/**\n * Compact by default: what an agent needs to decide — who, how sure, which photos,\n * which avatar. The about text is paragraphs long and only matters to a reader.\n */\nfunction compact(data: AvatarsResearchResponse, full: boolean): Record<string, unknown> {\n if (full) return data;\n const { searched, person, ...rest } = data;\n const { about: _about, location: _location, ...who } = person ?? { socials: {} };\n return {\n ...rest,\n ...(person ? { person: who } : {}),\n // A `not_found` is only useful with what was tried.\n ...(data.status === \"not_found\" ? { searched } : {}),\n };\n}\n\nexport const researchCommand = defineCommand({\n meta: {\n name: \"research\",\n description:\n 'Find a real, named person from a description and build their avatar from their public photos. Example: baker avatars research \"Lautaro Suarez, CTO at Vibiz\" --create',\n },\n args: {\n who: {\n type: \"positional\",\n description: 'Who: \"<name>, <role> at <company>\" or \"the CEO of <company>\"',\n required: false,\n },\n name: { type: \"string\", description: \"Their full name (overrides the description)\", required: false },\n role: { type: \"string\", description: \"Their role (overrides the description)\", required: false },\n company: { type: \"string\", description: \"Their company (overrides the description)\", required: false },\n linkedin: { type: \"string\", description: \"Pick one candidate from a `possible` answer\", required: false },\n create: { type: \"boolean\", description: \"Build their avatar from the photos\", required: false, default: false },\n handle: { type: \"string\", description: \"Mention handle for the new avatar\", required: false },\n full: {\n type: \"boolean\",\n description: \"Include about, location and the searches run\",\n required: false,\n default: false,\n },\n },\n run: async ({ args }) => {\n const text = (key: string) => {\n const value = (args as Record<string, unknown>)[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n };\n const call = callOf(text, Boolean(args.create));\n const { who, name, company, handle } = call;\n if (!who && !name && !company) {\n failValidation(\n 'Say who to research, e.g. `baker avatars research \"Lautaro Suarez, CTO at Vibiz\"` or `baker avatars research \"the CEO of Vibiz\"`.',\n );\n }\n if (handle && !AVATAR_HANDLE_PATTERN.test(handle)) {\n failValidation(\n `--handle \"${handle}\" is not usable. Use lowercase letters, numbers and dashes, starting with a letter — \"lautaro-suarez\". Leave it off to have one derived from the name.`,\n );\n }\n\n const linkedinUrl = text(\"linkedin\");\n const chatId = chatIdFromEnv();\n const body: AvatarsResearchRequest = {\n ...call,\n ...(linkedinUrl ? { linkedinUrl } : {}),\n ...(chatId ? { chatId } : {}),\n };\n\n try {\n const data = await writeAvatars<AvatarsResearchResponse>(\"/api/avatars/research\", body, {\n timeoutMs: RESEARCH_TIMEOUT_MS,\n });\n writeJson({ ok: true, data: compact(data, Boolean(args.full)), hints: researchHints(data, call) });\n } catch (err) {\n failAvatarApi(err, handle);\n }\n },\n});\n\n/** The call as it was made: the description and the flags given, each only when set. */\nfunction callOf(text: (key: string) => string | undefined, create: boolean): ResearchCall {\n const who = text(\"who\");\n const name = text(\"name\");\n const role = text(\"role\");\n const company = text(\"company\");\n const handle = text(\"handle\")?.toLowerCase();\n const linkedin = text(\"linkedin\");\n return {\n ...(who ? { who } : {}),\n ...(name ? { name } : {}),\n ...(role ? { role } : {}),\n ...(company ? { company } : {}),\n ...(handle ? { handle } : {}),\n ...(linkedin ? { linkedin } : {}),\n create,\n };\n}\n","import type { AvatarsResearchResponse } from \"@baker/api\";\n\n/** How the command was called, so a hint can hand back the exact next command. */\nexport interface ResearchCall {\n who?: string;\n name?: string;\n role?: string;\n company?: string;\n handle?: string;\n linkedin?: string;\n create: boolean;\n}\n\n/** The person as the call described them. */\nfunction described(call: ResearchCall): string {\n return call.who ?? [call.name, call.role, call.company].filter(Boolean).join(\", \");\n}\n\n/** The call again, exactly as it was made (without `--create`, which each hint adds when it applies). */\nfunction rerunOf(call: ResearchCall): string {\n return [\n \"baker avatars research\",\n call.who ? quoted(call.who) : undefined,\n call.name ? `--name ${quoted(call.name)}` : undefined,\n call.role ? `--role ${quoted(call.role)}` : undefined,\n call.company ? `--company ${quoted(call.company)}` : undefined,\n call.handle ? `--handle ${call.handle}` : undefined,\n call.linkedin ? `--linkedin ${call.linkedin}` : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction quoted(text: string): string {\n return `\"${text.replaceAll('\"', '\\\\\"')}\"`;\n}\n\nfunction possibleHints(data: AvatarsResearchResponse, rerun: string, create: string): string[] {\n const lines = (data.candidates ?? []).map((candidate) =>\n [candidate.name, candidate.headline, candidate.linkedin].filter(Boolean).join(\" — \"),\n );\n const example = data.candidates?.[0]?.linkedin ?? \"<profile url>\";\n return [\n `Not sure it is them: these profiles matched only in part, so no photo was taken.\\n${lines.map((line) => ` - ${line}`).join(\"\\n\")}`,\n `If the copy makes clear which one is the person (same company, same role), take it: \\`${rerun} --linkedin ${example}${create}\\`. If none of them clearly is, treat this as not found — never put a face in an ad on a guess.`,\n ];\n}\n\nfunction notFoundHints(data: AvatarsResearchResponse): string[] {\n const searched = data.searched.map((query) => `\"${query}\"`).join(\", \");\n return [\n `No public profile could be tied to this person${searched ? ` (searched ${searched})` : \"\"}, so no photo was taken. Carry on with an invented one-off person drawn from the description, exactly as for anyone unnamed — never a photo of somebody else, and never stall the job over it. If you have their exact name or company and it differs from what was searched, run this again with \\`--name\\` / \\`--company\\`.`,\n ];\n}\n\nfunction avatarHints(avatar: NonNullable<AvatarsResearchResponse[\"avatar\"]>, name: string): string[] {\n const where = avatar.reused\n ? `@${avatar.handle} is already ${name}'s avatar — reused, not built again.`\n : `@${avatar.handle} is ${name}'s avatar, built from their real photos. Its sheet settles in about 30s: if the next thing you do needs it, \\`baker avatars get ${avatar.handle} --wait\\`.`;\n return [\n where,\n `Use it everywhere ${name} appears: \\`--avatar ${avatar.handle}\\` on static ads, video and Studio renders; on a landing, their photo is the avatar's \\`coverUrl\\` from \\`baker avatars get ${avatar.handle}\\` (upscale it when it is shown large). Never invent another face for them.`,\n ];\n}\n\nfunction foundHints(data: AvatarsResearchResponse, call: ResearchCall, rerun: string): string[] {\n const name = data.person?.name ?? described(call);\n if (data.avatar) return avatarHints(data.avatar, name);\n\n const photoIds = (data.photos ?? []).map((photo) => photo.imageId).join(\",\");\n if (!photoIds) {\n return [\n `Found ${name}, but no usable photo of them was public${call.create ? \", so no avatar was built\" : \"\"}. Carry on with an invented one-off person drawn from the description.`,\n ];\n }\n if (call.create) {\n return [\n `Found ${name}, but their avatar could not be built automatically. Build it from the photos yourself: \\`baker avatars create --name ${quoted(name)} --subject \"<one person, plainly: age, build, hair, skin, face>\" --source-image ${photoIds} --likeness-confirmed\\`.`,\n ];\n }\n return [\n `Found ${name}; their photos are in the image library (${photoIds}). Build their avatar from them: \\`${rerun} --create\\`.`,\n ];\n}\n\n/** What the agent should do next with a research answer, keyed off its status. */\nexport function researchHints(data: AvatarsResearchResponse, call: ResearchCall): string[] {\n const rerun = rerunOf(call);\n if (data.status === \"possible\") {\n return possibleHints(data, rerunOf({ ...call, linkedin: undefined }), call.create ? \" --create\" : \"\");\n }\n if (data.status === \"not_found\") return notFoundHints(data);\n return foundHints(data, call, rerun);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/creatives/translate.ts","../src/commands/creatives/translate-ad.ts","../src/commands/creatives/translate-model.ts"],"sourcesContent":["/**\n * `baker creatives translate --slug <ad> --to es-MX,es-CO`: the command around `translateAd`. Local\n * file work and one text call, so no backend route: the new ads reach the dashboard through\n * `canvas sync-definition`, as `creatives make --series` does, and the call's spend waits in the\n * canvas cache for the next run record to bill (`holdUnbilledSpend`).\n */\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport { askJev } from \"../../engine/nodes/local/lib/jev.ts\";\nimport { askAboutImages, RENDER_REVIEW_MODEL, type ReviewUsage } from \"../../engine/nodes/local/lib/render-review.ts\";\nimport { optionalChatId } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { runBaker as baker } from \"../baker-child.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { holdUnbilledSpend } from \"../canvas/unbilled-spend.ts\";\nimport { translateAd, translateEnvelope } from \"./translate-ad.ts\";\nimport { type Failure, quoteLineQuestion } from \"./translate-model.ts\";\n\n/** How long the one call for every language may take. */\nconst TRANSLATE_TIMEOUT_MS = 120_000;\n\nconst DESCRIPTION = `The same static ad in other languages. Each language becomes its own creative, <ad>-<lang>, made as an ad of the series <ad> leads: its ready picture with only the words changed, so the design is never made again per language. Every language is translated in one call (transcreated for the market, same role and length per line, brand names, prices and numbers kept); seconds, nothing rendered. The ad must have a ready version.\n\nStart here:\n baker creatives translate --slug spring-offer --to es-MX,es-CO,pt-BR # one ad per country: Mexico and Colombia are two ads\n baker creatives translate --slug spring-offer --to de,fr # a language with no country: its neutral variety\n baker creatives translate --slug spring-offer --to de --copy-file de.json # your own lines: {\"de\": [\"line 1\", \"line 2\"]}\nTen angle ads in three languages: one design (the lead), the angle ads (creatives make <idea> --series <lead>), then translate each angle ad. Never a new canvas or a new design per language.\nThen: baker canvas run --series spring-offer (renders every language at once). Adding a language later leaves the ones made as they are.`;\n\nconst ARGS = {\n slug: {\n type: \"string\",\n required: true,\n description: \"The ad to translate (its creative slug); it must have a ready version\",\n },\n to: {\n type: \"string\",\n required: true,\n description:\n \"The languages, comma-separated BCP-47 codes: es-MX,es-CO,pt-BR (a country's own variety) or de,fr. One new creative each: <slug>-<tag in lowercase>\",\n },\n \"copy-file\": {\n type: \"string\",\n required: false,\n description:\n 'A JSON file with the lines yourself, no model asked: {\"es\": [\"line 1\", \"line 2\"]}, one line per line of the ad, in its order',\n },\n again: {\n type: \"boolean\",\n required: false,\n default: false,\n description:\n \"Translate a language already made again (after the ad's words changed); without it, a made language is left as it is\",\n },\n} as const;\n\nregisterSchema({ command: \"creatives.translate\", description: DESCRIPTION, args: ARGS });\n\nfunction fail(error: Failure): never {\n writeJson({ ok: false, error });\n process.exit(1);\n}\n\nasync function readCopyFile(file: string): Promise<unknown> {\n try {\n return JSON.parse(await readFile(path.resolve(file), \"utf8\"));\n } catch (e) {\n fail({\n code: \"translate_copy_file_unreadable\",\n message: `The copy file ${file} could not be read as JSON (${e instanceof Error ? e.message : String(e)}).`,\n fix: 'Write it as {\"<lang>\": [\"line 1\", \"line 2\"]}, one array per language.',\n });\n }\n}\n\nexport const translateCommand = defineCommand({\n meta: { name: \"translate\", description: DESCRIPTION },\n args: ARGS,\n async run({ args }) {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const copyFile = typeof args[\"copy-file\"] === \"string\" && args[\"copy-file\"] ? args[\"copy-file\"] : undefined;\n const copy = copyFile ? await readCopyFile(copyFile) : undefined;\n const spent: ReviewUsage[] = [];\n const result = await translateAd(root, String(args.slug), String(args.to), {\n ask: (prompt) =>\n askAboutImages(RENDER_REVIEW_MODEL, [], prompt, (usage) => spent.push(usage), TRANSLATE_TIMEOUT_MS).catch(\n () => null,\n ),\n ...(copy !== undefined ? { copy } : {}),\n again: args.again === true,\n sync: (dir) => baker([\"canvas\", \"sync-definition\", dir, \"--title\"]),\n chatId: optionalChatId() ?? null,\n judgeQuotes: (texts) => askJev(texts.map(quoteLineQuestion), (usage) => spent.push(usage)),\n });\n // No run record carries this call: the next render of this workspace bills it. The ads are made\n // by now, so a cache that cannot be written never costs the command its answer.\n await holdUnbilledSpend(path.join(root, \"canvas\", \".cache\"), spent).catch(() => undefined);\n if (\"code\" in result) fail(result);\n writeJson(translateEnvelope(result));\n },\n});\n","/**\n * `baker creatives translate --slug <ad> --to es,de`: the same ad in other languages. Each\n * language is a new creative, `<ad>-<lang>`, made as an ad of the series `<ad>` leads: the ad's\n * ready picture with only its words changed to theirs, so the design is never made again per\n * language. Every language is translated in one text call (or read from the agent's own file);\n * nothing is rendered here: `baker canvas run --series <ad>` renders them all at once.\n */\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { CreativesRunData } from \"@baker/api\";\nimport { readAdSpec } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport { languageName, languageTag, sameTag, tagSlug } from \"../../language.ts\";\nimport { parseDefinitionStrategyFields } from \"../canvas/creative-definition.ts\";\nimport { claimNewCreativeInWorkspace, creativeLimitRefusal } from \"../canvas/creative-limit.ts\";\nimport { leadVersion, seriesLeadsAbove, writeSeriesMemberCanvas } from \"../canvas/series-member.ts\";\nimport {\n acceptTranslations,\n buildTranslatePrompt,\n customersWordsAmong,\n type Failure,\n MESSAGE_ROLE,\n parseLanguages,\n translatedDefinition,\n translatedSpec,\n} from \"./translate-model.ts\";\n\n/** What became of one language. */\nexport type Translation = {\n language: string;\n creative: string;\n status: \"made\" | \"exists\" | \"refused\";\n error?: Failure;\n};\n\nexport type Translated = { source: string; sourceLanguage?: string; leadsAbove: string[]; translations: Translation[] };\n\ntype Deps = {\n /** The text model, asked once for every language; its parsed JSON answer, or null. */\n ask: (prompt: string) => Promise<unknown>;\n /** The lines the agent wrote itself (`--copy-file`): no model is asked. */\n copy?: unknown;\n /** Translate a language already made again (its words), instead of leaving it as it is. */\n again?: boolean;\n sync: (dir: string) => Promise<unknown>;\n chatId: string | null;\n fetchRecord?: (runId: string) => Promise<CreativesRunData | null>;\n /** Jev: how likely each line is a customer's own words; null when it could not answer. */\n judgeQuotes?: (texts: string[]) => Promise<number[] | null>;\n};\n\n/** The creative a language of `source` is: `<source>-<tag>`, the tag lowercase (`spring-offer-es-mx`). */\nexport const translationSlug = (source: string, language: string) => `${source}-${tagSlug(language)}`;\n\nconst creativeDir = (root: string, slug: string) => path.join(root, \"src\", \"creatives\", slug);\n\nfunction definitionOf(root: string, slug: string): Promise<string | null> {\n return readFile(path.join(creativeDir(root, slug), \"_definition.md\"), \"utf8\").catch(() => null);\n}\n\n/** The language the source is in: its `_definition.md`'s, else its market's. */\nfunction sourceLanguageOf(definition: string, spec: Record<string, unknown>): string | undefined {\n const market = (spec.viewer as { market?: { language?: unknown } } | undefined)?.market?.language;\n return (\n parseDefinitionStrategyFields(definition).language ??\n (typeof market === \"string\" ? (languageTag(market) ?? undefined) : undefined)\n );\n}\n\n/**\n * What each language asked comes to before any words are written: already made (left as it is\n * unless `again`), its slug taken by another creative, or to translate.\n */\nasync function planLanguages(\n root: string,\n source: string,\n languages: readonly string[],\n again: boolean,\n): Promise<{ settled: Translation[]; pending: string[] }> {\n const settled: Translation[] = [];\n const pending: string[] = [];\n for (const language of languages) {\n const creative = translationSlug(source, language);\n const existing = await definitionOf(root, creative);\n const fields = existing === null ? null : parseDefinitionStrategyFields(existing);\n const ours = fields?.seriesLead === source && sameTag(fields.language ?? \"\", language);\n if (!fields || (again && ours)) {\n pending.push(language);\n } else if (ours) {\n settled.push({ language, creative, status: \"exists\" });\n } else {\n settled.push({\n language,\n creative,\n status: \"refused\",\n error: {\n code: \"translate_slug_taken\",\n message: `\"${creative}\" is already another creative, not the ${languageName(language) ?? language} version of \"${source}\".`,\n fix: `Rename or remove src/creatives/${creative}/ if it is a leftover, then translate again.`,\n },\n });\n }\n }\n return { settled, pending };\n}\n\n/** Each pending language's lines: the agent's own (`copy`), else one model call for all of them. */\nasync function wordsFor(\n pending: readonly string[],\n lines: ReadonlyArray<{ text: string; role?: string }>,\n context: { from?: string; brand?: string },\n deps: Pick<Deps, \"ask\" | \"copy\">,\n): Promise<Record<string, string[]>> {\n if (pending.length === 0) return {};\n const answer = deps.copy ?? (await deps.ask(buildTranslatePrompt(lines, pending, context)));\n const full = acceptTranslations(answer, pending, lines.length);\n // An agent's own file may give the printed lines alone: the message then stays the source's.\n const asked = lines.filter((l) => l.role !== MESSAGE_ROLE).length;\n const printedOnly = deps.copy !== undefined && asked < lines.length ? acceptTranslations(answer, pending, asked) : {};\n return { ...printedOnly, ...full };\n}\n\n/** The ad `source` in each language `to` names, or why none could be made. */\nexport async function translateAd(root: string, source: string, to: string, deps: Deps): Promise<Translated | Failure> {\n const version = await leadVersion(root, source, deps.fetchRecord);\n if (\"refused\" in version) return version.refused;\n const spec = version.spec as Record<string, unknown>;\n if (spec.native) {\n return {\n code: \"translate_native_unsupported\",\n message: `\"${source}\" is a copy of a screen people know (a post, a chat, a review wall): its words are not lines of copy to translate.`,\n fix: \"Make it in the other language as its own ad: baker creatives make <idea> with the words written in that language.\",\n };\n }\n const sourceDefinition = (await definitionOf(root, source)) ?? \"---\\nkind: static\\n---\\n\";\n const sourceLanguage = sourceLanguageOf(sourceDefinition, spec);\n const asked = parseLanguages(to, sourceLanguage);\n if (\"code\" in asked) return asked;\n\n const { settled, pending } = await planLanguages(root, source, asked.languages, deps.again === true);\n const lines = version.lead.copy;\n // A customer's words stay theirs: translated, they would be words nobody said under their name.\n const quoted = pending.length > 0 ? await customersWordsAmong(lines, deps.judgeQuotes) : new Set<number>();\n if (pending.length > 0 && lines.every((_, i) => quoted.has(i))) {\n return {\n source,\n ...(sourceLanguage ? { sourceLanguage } : {}),\n leadsAbove: await seriesLeadsAbove(root, source),\n translations: [...settled, ...pending.map((language) => nothingToTranslate(source, language))],\n };\n }\n const brand = readAdSpec(spec).brand?.name;\n // What the ad says is asked in the same call, so the team reads it in the ad's own language.\n const message = parseDefinitionStrategyFields(sourceDefinition).message;\n const marked = lines.map((line, i) => (quoted.has(i) ? { ...line, customersWords: true } : line));\n const asks = message ? [...marked, { text: message, role: MESSAGE_ROLE }] : marked;\n const words = await wordsFor(\n pending,\n asks,\n { ...(sourceLanguage ? { from: sourceLanguage } : {}), ...(brand ? { brand } : {}) },\n deps,\n );\n const translations = [...settled];\n for (const language of pending) {\n translations.push(\n await makeTranslation(\n root,\n { source, language, sourceDefinition, spec, lines, quoted, words: words[language] },\n deps,\n ),\n );\n }\n const order = new Map(asked.languages.map((l, i) => [l, i]));\n translations.sort((a, b) => (order.get(a.language) ?? 0) - (order.get(b.language) ?? 0));\n return {\n source,\n ...(sourceLanguage ? { sourceLanguage } : {}),\n leadsAbove: await seriesLeadsAbove(root, source),\n translations,\n };\n}\n\n/**\n * A language for an ad whose every line is a customer's words, kept as they said them: it would be\n * the same ad, which the series run refuses, and the words left to change are the customer's. Pure.\n */\nfunction nothingToTranslate(source: string, language: string): Translation {\n const name = languageName(language) ?? language;\n return {\n language,\n creative: translationSlug(source, language),\n status: \"refused\",\n error: {\n code: \"translate_nothing_to_translate\",\n message: `Every line of \"${source}\" is a customer's own words, kept as they said them, so in ${name} it would be the same ad.`,\n fix: `Never translate a customer's words yourself: that puts words they never said under their name. To reach ${name} speakers, run \"${source}\" as it is, or give it a line of your own (a headline or a call to action), render it, then translate again.`,\n },\n };\n}\n\n/** One language written as an ad of the source's series: its words, its definition and its canvas. */\nasync function makeTranslation(\n root: string,\n t: {\n source: string;\n language: string;\n sourceDefinition: string;\n spec: Record<string, unknown>;\n lines: ReadonlyArray<{ text: string; role?: string }>;\n quoted: ReadonlySet<number>;\n words: string[] | undefined;\n },\n deps: Deps,\n): Promise<Translation> {\n const creative = translationSlug(t.source, t.language);\n const refused = (error: Failure): Translation => ({ language: t.language, creative, status: \"refused\", error });\n const name = languageName(t.language) ?? t.language;\n if (!t.words) {\n return refused(\n deps.copy !== undefined\n ? {\n code: \"translate_copy_missing\",\n message: `The copy file has no ${name} lines, or not one for each of the ad's ${t.lines.length} lines.`,\n fix: `Give \"${t.language}\" an array of ${t.lines.length} lines in the ad's order in the copy file.`,\n }\n : {\n code: \"translate_failed\",\n message: `The ${name} words could not be written.`,\n fix: `Write them yourself: --copy-file <json> with {\"${t.language}\": [${t.lines.length} lines in the ad's order]}.`,\n },\n );\n }\n const dir = creativeDir(root, creative);\n const definitionPath = path.join(dir, \"_definition.md\");\n const claim = await claimNewCreativeInWorkspace(path.join(root, \"canvas\"), creative, deps.chatId, definitionPath);\n if (!claim.allowed) return refused(creativeLimitRefusal(creative).error);\n await mkdir(dir, { recursive: true });\n await writeFile(\n path.join(dir, \"prompt.json\"),\n `${JSON.stringify(translatedSpec(t.spec, t.words, t.language, t.quoted), null, 2)}\\n`,\n \"utf8\",\n );\n const headline = Math.max(\n 0,\n t.lines.findIndex((l) => l.role === \"headline\"),\n );\n await writeFile(\n definitionPath,\n translatedDefinition(t.sourceDefinition, {\n source: t.source,\n language: t.language,\n title: t.words[headline] ?? creative,\n ...(t.words.length > t.lines.length ? { message: t.words[t.lines.length] } : {}),\n }),\n \"utf8\",\n );\n const made = await writeSeriesMemberCanvas(root, creative, {\n leadWords: true,\n ...(deps.fetchRecord ? { fetchRecord: deps.fetchRecord } : {}),\n });\n if (made === null || \"refused\" in made) {\n return refused(made?.refused ?? { code: \"translate_not_made\", message: `\"${creative}\" could not be made.` });\n }\n // The dashboard learns the translation and its series now, not at Publish.\n await deps.sync(dir);\n return { language: t.language, creative, status: \"made\" };\n}\n\n/** What `translate` prints: each language's ad, then the one series run that renders them all. Pure. */\nexport function translateEnvelope(result: Translated) {\n const made = result.translations.filter((t) => t.status !== \"refused\").map((t) => t.creative);\n const refused = result.translations.filter((t) => t.status === \"refused\");\n const order = [...result.leadsAbove].reverse().concat(result.source);\n return {\n ok: true as const,\n data: {\n source: result.source,\n made,\n translations: result.translations.map((t) => ({ ...t, name: languageName(t.language) ?? t.language })),\n },\n hints: [\n ...(made.length > 0\n ? [\n `Next: baker canvas run --series ${result.source} renders every language at once, each the ${result.source} picture with its own words, reviewed and corrected on its own. A language already rendered from the current version of ${result.source} is not rendered again.`,\n ]\n : []),\n `A later change to ${result.source} (its picture or design) reaches every language on the next ${order.map((slug) => `baker canvas run --series ${slug}`).join(\", then \")}. A change to its words does not: translate again with --again for the languages to update.`,\n ...refused.map((t) => `${t.creative}: ${t.error?.message ?? \"not made\"}${t.error?.fix ? ` ${t.error.fix}` : \"\"}`),\n ],\n };\n}\n","/**\n * `baker creatives translate`, its decisions: which languages, what the model is asked, which\n * answer is kept, and what each translation is on disk (its words in the source's spec, its\n * `_definition.md`). A translation is an ad of the series the source leads: the source's picture\n * with only its words changed, so ten ads in three languages stay one design. Pure.\n */\nimport { z } from \"zod\";\nimport { isAdSpec, readAdSpec } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport { isCustomersWords, isSignatureLine, maybeSigned } from \"../../engine/scaffold/static-proof.ts\";\nimport { languageName, languageRegion, languageTag, sameTag } from \"../../language.ts\";\nimport { setDefinitionFields } from \"./make-model.ts\";\nimport { withoutFields } from \"./make-series.ts\";\n\nexport type Failure = { code: string; message: string; fix?: string };\n\n/** The languages `--to` names, as lowercase tags, once each; refused when one names none or is the ad's own. */\nexport function parseLanguages(raw: string, sourceLanguage: string | undefined): { languages: string[] } | Failure {\n const asked = raw\n .split(\",\")\n .map((code) => code.trim())\n .filter(Boolean);\n if (asked.length === 0) {\n return {\n code: \"translate_language_invalid\",\n message: \"No language was named.\",\n fix: \"Name each language as a code, comma-separated: --to es,de,fr (pt-BR, es-MX for a regional variant).\",\n };\n }\n const languages: string[] = [];\n for (const code of asked) {\n const tag = languageTag(code);\n if (!tag) {\n return {\n code: \"translate_language_invalid\",\n message: `\"${code}\" is not a language code.`,\n fix: \"Name each language as a BCP-47 code: es, de, fr, pt-BR, es-MX.\",\n };\n }\n if (sourceLanguage && sameTag(tag, sourceLanguage)) {\n return {\n code: \"translate_same_language\",\n message: `The ad is already in ${languageName(tag) ?? tag}.`,\n fix: `Leave ${code} out of --to.`,\n };\n }\n if (!languages.some((l) => sameTag(l, tag))) languages.push(tag);\n }\n return { languages };\n}\n\ntype Line = { text: string; role?: string; customersWords?: boolean };\n\n/** Jev's question for one copy line: whether it is a customer's own words, the advertiser's copy aside. */\nexport const quoteLineQuestion = (text: string) => ({\n instructions: {\n question:\n \"Is `line` a customer's or reviewer's own words (a testimonial, or a quote signed with the name of the person who said it), rather than the advertiser's own copy, in whatever language it is written?\",\n line: text,\n },\n});\n\n/** At or above, Jev holds a line to be a customer's own words (scripts/quote-line-evals). */\nexport const CUSTOMERS_WORDS = 0.5;\n\n/**\n * The indexes of `lines` that are a customer's own words: set as a quote, signed by its shape\n * alone or by a signature on the line below it, else held so by `judge` (Jev, one probability per\n * text), a line below that may sign it asked with it. Without a judge only the shape and the role\n * decide: a line nobody can tell is translated, as the advertiser's copy is.\n */\nexport async function customersWordsAmong(\n lines: readonly Line[],\n judge?: (texts: string[]) => Promise<number[] | null>,\n): Promise<Set<number>> {\n const kept = new Set<number>();\n const open: number[] = [];\n lines.forEach((line, i) => {\n if (line.role === MESSAGE_ROLE) return;\n // A signature on a line of its own signs the line right above it: that line is the quote.\n const below = lines[i + 1];\n if (isCustomersWords(line) || (below !== undefined && isSignatureLine(below))) kept.add(i);\n else open.push(i);\n });\n if (!judge || open.length === 0) return kept;\n // A hyphen opening the line below may sign this one or be the advertiser's own: asked together.\n const asked = (i: number) => {\n const text = lines[i]?.text ?? \"\";\n const below = lines[i + 1]?.text;\n return below !== undefined && maybeSigned(below) && !maybeSigned(text) ? `${text}\\n${below}` : text;\n };\n const answers = await judge(open.map(asked));\n if (answers?.length !== open.length) return kept;\n for (const [k, i] of open.entries()) if ((answers[k] ?? 0) >= CUSTOMERS_WORDS) kept.add(i);\n return kept;\n}\n\n/** The role of the extra line a translation asks for: the ad's message, said in the language for the team. */\nexport const MESSAGE_ROLE = \"message\";\n\nconst Answer = z.object({ translations: z.record(z.string(), z.array(z.string()).catch([])) });\n\n/**\n * The languages the model translated fully: each line of the source answered by one non-empty\n * line, in order. A language answered short or blank is left out (refused, never half an ad). Pure.\n */\nexport function acceptTranslations(\n answer: unknown,\n languages: readonly string[],\n lineCount: number,\n): Record<string, string[]> {\n // `--copy-file` may hold the languages bare; a model may answer \"pt-BR\" for \"pt-br\".\n const wrapped =\n answer && typeof answer === \"object\" && !(\"translations\" in answer) ? { translations: answer } : answer;\n const parsed = Answer.safeParse(wrapped);\n if (!parsed.success) return {};\n const byTag = new Map(Object.entries(parsed.data.translations).map(([key, lines]) => [key.toLowerCase(), lines]));\n const kept: Record<string, string[]> = {};\n for (const language of languages) {\n const lines = byTag.get(language.toLowerCase())?.map((line) => line.trim());\n if (lines && lines.length === lineCount && lines.every(Boolean)) kept[language] = lines;\n }\n return kept;\n}\n\n/** What the model is asked: every language at once, line by line, for the same picture. Pure. */\nexport function buildTranslatePrompt(\n lines: readonly Line[],\n languages: readonly string[],\n context: { from?: string; brand?: string },\n): string {\n const from = context.from ? languageName(context.from) : null;\n return [\n `These are the lines of copy printed on a finished static ad${from ? `, written in ${from}` : \"\"}. Translate them${from ? ` from ${from}` : \"\"} into each of these languages: ${languages.map((l) => `${l} (${languageName(l) ?? l})`).join(\", \")}.`,\n \"\",\n ...lines.map(\n (line, i) =>\n `${i + 1}. ${line.role === MESSAGE_ROLE ? \"[not printed: what the ad says, in one sentence, for the team that runs it] \" : line.role ? `[${line.role}] ` : \"\"}${line.customersWords ? \"[a customer's own words: copy it exactly as written, untranslated] \" : \"\"}${JSON.stringify(line.text)}`,\n ),\n \"\",\n \"Rules:\",\n \"- Transcreate as a native copywriter of that market would write the ad, not word for word: the same promise and tone, natural for the people who will see it.\",\n \"- Each line keeps its role: a headline stays a headline, a button stays a short button.\",\n \"- Keep each line about as long as the original: it is set in the same layout, in the same space, so a much longer line will not fit.\",\n `- Keep brand names${context.brand ? ` (${JSON.stringify(context.brand)})` : \"\"}, product names, numbers, prices, currencies, percentages and URLs exactly as they are.`,\n \"- Use the language's own accents and punctuation (¿ ¡ « » ß ç ã).\",\n ...varieties(languages),\n \"\",\n `Reply with only this JSON, one array per language with exactly ${lines.length} lines in the order above: {\"translations\": {${languages.map((l) => `\"${l}\": [\"...\"]`).join(\", \")}}}`,\n ].join(\"\\n\");\n}\n\n/**\n * The translation's spec: the source's as it was drawn, each line's words replaced in place (its\n * role, lettering and placement kept) and, when the source names its market, that market's\n * language set, and its country when the tag names one (es-MX: Mexico). The currency stays the\n * source's: its prices are kept as they are. Everything else is the source's: the design is never the translation's own. Pure.\n */\nexport function translatedSpec(\n source: Record<string, unknown>,\n lines: readonly string[],\n language: string,\n customersWords: ReadonlySet<number> = new Set(),\n): Record<string, unknown> {\n // An older blueprint carries its words in its own shape: it is written as the ad spec it reads as.\n const spec: Record<string, unknown> = isAdSpec(source) ? source : readAdSpec(source);\n const copy = Array.isArray(spec.copy) ? (spec.copy as Array<Record<string, unknown>>) : [];\n const viewer = spec.viewer as { market?: Record<string, unknown> } | undefined;\n return {\n ...spec,\n // A customer's words stay theirs: translated, they would be words nobody said under their name.\n copy: copy.map((line, i) => (customersWords.has(i) ? line : { ...line, text: lines[i] ?? line.text })),\n ...(viewer?.market ? { viewer: { ...viewer, market: { ...viewer.market, ...marketOf(language) } } } : {}),\n };\n}\n\n/** What a translation's `_definition.md` keeps of its source's: everything but these, which are its own. */\nconst OWN_FIELDS = [\"series\", \"language\", \"title\", \"status\"];\n\n/** The translation's `_definition.md`: the source's reasons, as an ad of the source's series in `language`. Pure. */\nexport function translatedDefinition(\n source: string,\n translation: { source: string; language: string; title: string; message?: string },\n): string {\n return setDefinitionFields(withoutFields(source, OWN_FIELDS), {\n title: translation.title.slice(0, 120),\n series: translation.source,\n language: translation.language,\n status: \"draft\",\n ...(translation.message ? { message: translation.message } : {}),\n });\n}\n\n/** For each tag naming a country, the instruction to write as people there write ads. */\nfunction varieties(languages: readonly string[]): string[] {\n const regional = languages.flatMap((tag) => {\n const region = languageRegion(tag);\n return region\n ? [\n `- ${tag}: write it as people in ${region.name} write ads: its own vocabulary, spelling, idioms and form of address (tú, usted or vos as ads there use it), not a neutral one and not a neighbouring country's variety of the same language.`,\n ]\n : [];\n });\n return regional.length > 0 ? [\"\", \"Each regional variant is its own ad:\", ...regional] : [];\n}\n\n/** The market fields a tag decides: its language, and its country when it names one. */\nfunction marketOf(language: string): { language: string; country?: string } {\n const region = languageRegion(language);\n return region ? { language, country: region.code } : { language };\n}\n"],"mappings":"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","names":["readFile","path","readFile","path"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/{promoted-tweet-writes-F76YIMB6.js.map → promoted-tweet-writes-DV6W6BRF.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|