@koda-sl/baker-cli 0.489.0 → 0.490.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-Z65CPOWE.js → account-3H6BZO5H.js} +2 -2
- package/dist/account-IKFDY52P.js +138 -0
- package/dist/account-IKFDY52P.js.map +1 -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-4N2MA2ZR.js → account-writes-AE5IJGGW.js} +2 -2
- package/dist/{accounts-UA2ZWRN4.js → accounts-K4INATCW.js} +2 -2
- package/dist/{activities-IQPJPP4B.js → activities-T253KK4Q.js} +4 -4
- package/dist/{ad-group-writes-EUTMPBMK.js → ad-group-writes-VRSBI2Z2.js} +2 -2
- package/dist/{ad-groups-OVPAI5RM.js → ad-groups-IEBVEAMS.js} +6 -6
- package/dist/{ad-writes-DACTYFEO.js → ad-writes-ALV4KFPZ.js} +2 -2
- package/dist/{ads-L65JIKCD.js → ads-CQZHD7FC.js} +7 -7
- package/dist/{ads-G6AS5L7G.js → ads-QIKZ6O2N.js} +5 -5
- package/dist/{ads-HXX2IAFF.js → ads-ZEY72UBN.js} +14 -13
- package/dist/ads-ZEY72UBN.js.map +1 -0
- package/dist/{adsets-LPN6WFGF.js → adsets-5H3MOT3D.js} +15 -14
- package/dist/{adsets-LPN6WFGF.js.map → adsets-5H3MOT3D.js.map} +1 -1
- package/dist/{analytics-QKP3A5F3.js → analytics-ALOZ7ZZ4.js} +1 -1
- package/dist/asset-writes-L5TMKIZC.js +47 -0
- package/dist/audience-writes-X52VG35Y.js +324 -0
- package/dist/audience-writes-X52VG35Y.js.map +1 -0
- package/dist/{audiences-RPLVMO4H.js → audiences-AAZH56WD.js} +2 -2
- package/dist/{audiences-XEZHACKH.js → audiences-X3RLGOVM.js} +12 -6
- package/dist/audiences-X3RLGOVM.js.map +1 -0
- package/dist/{avatars-MXTI74VC.js → avatars-YSFFRHDK.js} +1 -1
- package/dist/{brief-BN4UGUXF.js → brief-7S6XCJIA.js} +15 -15
- package/dist/{businesses-PRRYPR7H.js → businesses-H3HIDQX6.js} +2 -2
- package/dist/{campaign-writes-BAFB5E7A.js → campaign-writes-7ZF57KLH.js} +3 -3
- package/dist/campaign-writes-7ZF57KLH.js.map +1 -0
- package/dist/{campaign-writes-U5LTDTYK.js → campaign-writes-U5PUVSMT.js} +2 -2
- package/dist/{campaigns-4SOLY7OR.js → campaigns-AV6G3AUU.js} +32 -15
- package/dist/campaigns-AV6G3AUU.js.map +1 -0
- package/dist/{campaigns-TFEQTSO3.js → campaigns-JEIKY2M4.js} +6 -6
- package/dist/{campaigns-NR6TNQFN.js → campaigns-VTRMKSAT.js} +5 -5
- package/dist/{canvas-GJAQAVS6.js → canvas-SVJEQO4V.js} +13 -13
- package/dist/{catalog-USZL4SGX.js → catalog-S32MX453.js} +5 -5
- package/dist/{catalogs-A7XMEEEP.js → catalogs-OCVXZLIF.js} +2 -2
- package/dist/catalogs-RXJTZTVX.js +778 -0
- package/dist/catalogs-RXJTZTVX.js.map +1 -0
- package/dist/{chatgpt-4PEWDJKP.js → chatgpt-QVF2FD3E.js} +12 -12
- package/dist/{chats-INN2OHSH.js → chats-QG72JB6Y.js} +22 -8
- package/dist/chats-QG72JB6Y.js.map +1 -0
- package/dist/{check-MMJGFFZS.js → check-SLNHVYGS.js} +4 -4
- package/dist/{chunk-7RBJ2Z7Z.js → chunk-2C7AHPM4.js} +25 -6
- package/dist/chunk-2C7AHPM4.js.map +1 -0
- package/dist/{chunk-KPYDTIAI.js → chunk-2WZI36D3.js} +2 -2
- package/dist/{chunk-FUKDI2UK.js → chunk-3W6G6ARX.js} +2 -2
- package/dist/{chunk-JWSEPW7F.js → chunk-46GWHUKN.js} +2 -2
- package/dist/{chunk-3TZVZXM6.js → chunk-4KJMLYCD.js} +6 -6
- package/dist/{chunk-6JWEGFM5.js → chunk-5C35OW7L.js} +38 -7
- 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-KIGGMKAE.js → chunk-65Y3RCWP.js} +4 -2
- package/dist/chunk-65Y3RCWP.js.map +1 -0
- package/dist/{chunk-R3EKM2P2.js → chunk-6NCJGU6I.js} +5 -5
- package/dist/chunk-A4MVVPJ2.js +4204 -0
- package/dist/chunk-A4MVVPJ2.js.map +1 -0
- package/dist/{chunk-LPXSM2DI.js → chunk-AO45BX6Q.js} +3 -3
- package/dist/{chunk-3UXMQ3K2.js → chunk-AQM4JH62.js} +2 -2
- package/dist/chunk-AQM4JH62.js.map +1 -0
- package/dist/{chunk-NPMAATZG.js → chunk-C7NWUCLQ.js} +2 -2
- package/dist/chunk-CP4P6YKM.js +287 -0
- package/dist/chunk-CP4P6YKM.js.map +1 -0
- package/dist/{chunk-OWA7ZLC4.js → chunk-D4CKCNGW.js} +4 -4
- package/dist/{chunk-H5HDZ7IC.js → chunk-DCBZ5CHZ.js} +4 -4
- package/dist/{chunk-C6EYCD5J.js → chunk-FVHJCERJ.js} +5 -5
- package/dist/{chunk-BITS62MF.js → chunk-G6XKD7QE.js} +2 -2
- package/dist/{chunk-QE3JEJXF.js → chunk-GSZZLW5Q.js} +4 -4
- package/dist/chunk-HLVRHBKL.js +1078 -0
- package/dist/chunk-HLVRHBKL.js.map +1 -0
- package/dist/{chunk-TPANP5A2.js → chunk-JKJQWRLO.js} +2 -2
- package/dist/{chunk-62JQQUAU.js → chunk-JQH5VG6F.js} +2 -2
- package/dist/{chunk-6WXV5GTA.js → chunk-JVH5A3XC.js} +2 -2
- package/dist/{chunk-AVNSH2JE.js → chunk-KOXDXSKN.js} +7 -7
- package/dist/{chunk-2XRMPSEV.js → chunk-LXQB4ZGE.js} +2 -2
- package/dist/{chunk-ZL23HA4N.js → chunk-M6PN3VH6.js} +2 -2
- package/dist/{chunk-TZEVD4Q6.js → chunk-P5FRWPG7.js} +2 -2
- package/dist/{chunk-CSZFZKVX.js → chunk-PQJXIY64.js} +5 -5
- package/dist/{chunk-OP7DNHD2.js → chunk-QTOZ32SU.js} +27 -1
- package/dist/chunk-QTOZ32SU.js.map +1 -0
- package/dist/chunk-SVAB6KV5.js +219 -0
- package/dist/chunk-SVAB6KV5.js.map +1 -0
- package/dist/{chunk-LBO2YAZY.js → chunk-UNX6BS4U.js} +15 -15
- package/dist/{chunk-UWXDNVS5.js → chunk-ZJSGGJ5R.js} +2 -2
- package/dist/cli.js +20 -20
- package/dist/{connect-WBGCBBFJ.js → connect-S54TJ6OV.js} +3 -3
- package/dist/{conversion-writes-JU7Q2MUO.js → conversion-writes-ECZBVY7D.js} +2 -2
- package/dist/{conversions-3ISBR3TS.js → conversions-5QCSCRLI.js} +3 -3
- package/dist/copy-writes-D2RTHAL6.js +167 -0
- package/dist/copy-writes-D2RTHAL6.js.map +1 -0
- package/dist/{creatives-VQO2TKE3.js → creatives-5I3G5YP3.js} +2 -2
- package/dist/{creatives-YJ3CXZQC.js → creatives-MZ6ICNSY.js} +5 -4
- package/dist/{creatives-YJ3CXZQC.js.map → creatives-MZ6ICNSY.js.map} +1 -1
- package/dist/{creatives-S5QUWUL6.js → creatives-PCAGWPW3.js} +10 -10
- package/dist/{critique-5LCG5TYF.js → critique-NRHUPIWF.js} +7 -7
- package/dist/{custom-conversions-YRYE65PU.js → custom-conversions-FIP6ZS34.js} +5 -3
- package/dist/{custom-conversions-YRYE65PU.js.map → custom-conversions-FIP6ZS34.js.map} +1 -1
- package/dist/{draft-Y2QJE2NM.js → draft-34CGWUVA.js} +2 -2
- package/dist/{draft-GPN3HOAG.js → draft-4P3YO67N.js} +9 -5
- package/dist/draft-4P3YO67N.js.map +1 -0
- package/dist/{draft-EWDOIXSH.js → draft-L45PGCYZ.js} +7 -3
- package/dist/draft-L45PGCYZ.js.map +1 -0
- package/dist/engine/index.js +4 -4
- package/dist/{experiment-G3FQVAJU.js → experiment-7N4QFRWV.js} +4 -4
- package/dist/{feedback-CAOZPGTT.js → feedback-O3H42V4I.js} +10 -10
- package/dist/{feedback-record-EXV5H6OS.js → feedback-record-FAPN2GBS.js} +12 -12
- package/dist/{find-EVY4XEIQ.js → find-FSQAEGGF.js} +4 -4
- package/dist/{flows-Z7355RMD.js → flows-T22B77J3.js} +3 -3
- package/dist/{funnel-2B3JXJPX.js → funnel-7OA33VRP.js} +5 -5
- package/dist/{ga4-2BL5YAYN.js → ga4-LPDIBNYP.js} +1 -1
- package/dist/{google-7STODZQR.js → google-5ESVO76E.js} +5 -5
- package/dist/{gsc-UU3T2C6B.js → gsc-FIZTQX3N.js} +1 -1
- package/dist/{history-IQ33J5PB.js → history-QKDYBSYM.js} +2 -2
- package/dist/{icon-GB7UH5RF.js → icon-CSVAZ7NE.js} +4 -4
- package/dist/{ideas-F6CIGTVU.js → ideas-JQT422P7.js} +4 -4
- package/dist/{images-WCKTD6Z2.js → images-WBNWK2ZH.js} +6 -6
- package/dist/{insights-4HT2NAYP.js → insights-YWVJMATY.js} +4 -3
- package/dist/{insights-4HT2NAYP.js.map → insights-YWVJMATY.js.map} +1 -1
- package/dist/{inspiration-XQYHBJY2.js → inspiration-IX5N724J.js} +1 -1
- package/dist/instant-experiences-NQ2GWIWL.js +257 -0
- package/dist/instant-experiences-NQ2GWIWL.js.map +1 -0
- package/dist/{landing-WUILAWDS.js → landing-Y6QCTXCZ.js} +2 -2
- package/dist/leads-THI37ZMD.js +537 -0
- package/dist/leads-THI37ZMD.js.map +1 -0
- package/dist/{learn-CC6Q5IK2.js → learn-3BDZUWDT.js} +5 -5
- package/dist/{linkedin-XKVPSCLV.js → linkedin-UGMAFSGO.js} +2 -2
- package/dist/{locations-YA7NZY44.js → locations-HM56X2MK.js} +2 -2
- package/dist/locations-HM56X2MK.js.map +1 -0
- package/dist/{logo-YSNUUT33.js → logo-VHXH4J6A.js} +3 -3
- package/dist/{make-ED7HBLH3.js → make-W2PYZXYF.js} +39 -39
- package/dist/media-H6B7VDON.js +18 -0
- package/dist/media-H6B7VDON.js.map +1 -0
- package/dist/{media-sources-PEHUMH7C.js → media-sources-EZKAJNVD.js} +1 -1
- package/dist/meta-YHDTGJQ6.js +122 -0
- package/dist/meta-YHDTGJQ6.js.map +1 -0
- package/dist/{options-6FCNFWUF.js → options-NSCZSQ5P.js} +3 -3
- package/dist/page-photos-CXRG4AXV.js +115 -0
- package/dist/page-photos-CXRG4AXV.js.map +1 -0
- package/dist/{pages-FTI44OSH.js → pages-PTWRXAZT.js} +2 -2
- package/dist/{pixels-6IUB3Y3H.js → pixels-MYT3TCHZ.js} +2 -2
- package/dist/{pixels-MBKR4XPX.js → pixels-ZZCQUS3J.js} +2 -2
- package/dist/{preview-V4YBD45S.js → preview-XOXAAPMQ.js} +73 -27
- package/dist/preview-XOXAAPMQ.js.map +1 -0
- package/dist/{rerun-A2XHGFZS.js → rerun-5THJLQQJ.js} +18 -18
- package/dist/{research-BLDY5UWH.js → research-JHDWWFL7.js} +1 -1
- 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-SK5DFFPY.js → rules-YLLFDZEM.js} +3 -3
- package/dist/{rules-add-YQNYSME7.js → rules-add-U2GU4AGP.js} +4 -4
- package/dist/{run-KBN5K7LE.js → run-V5YQB6TH.js} +18 -18
- package/dist/{scaffold-ad-6BN5LWQH.js → scaffold-ad-H4GJOKAW.js} +12 -12
- package/dist/{scaffold-static-ad-VVZRAWBR.js → scaffold-static-ad-2YIFHCTL.js} +25 -25
- package/dist/{scaffold-video-LFIYI4GP.js → scaffold-video-3EJLKR2O.js} +14 -14
- package/dist/{select-QBU6ED4K.js → select-I22NPSIW.js} +9 -9
- package/dist/{set-prompt-TL64CRBQ.js → set-prompt-S75OMQ7L.js} +8 -8
- package/dist/{shared-NDRFKAH7.js → shared-3IBNDEFL.js} +2 -2
- package/dist/{sources-RMNFV4CA.js → sources-VA23PDND.js} +1 -1
- package/dist/{stale-ITFCPOER.js → stale-MHTU2NQJ.js} +8 -8
- package/dist/{stats-RCLQE4HJ.js → stats-ZAGJH4AD.js} +1 -1
- package/dist/{stock-ECRBD7RP.js → stock-6SHHLSKG.js} +5 -5
- package/dist/studies-4NIV4D5Y.js +249 -0
- package/dist/studies-4NIV4D5Y.js.map +1 -0
- package/dist/{studio-MARZ22J2.js → studio-ZLCGXFAN.js} +1 -1
- package/dist/study-writes-L2AA2PGL.js +467 -0
- package/dist/study-writes-L2AA2PGL.js.map +1 -0
- package/dist/{sync-definition-C6ROLKJ4.js → sync-definition-2EBSQA6A.js} +11 -11
- package/dist/{tag-manager-G3LBQZUL.js → tag-manager-3CJ66GKJ.js} +1 -1
- package/dist/targeting-LNDQV4EK.js +759 -0
- package/dist/targeting-LNDQV4EK.js.map +1 -0
- package/dist/{testimonials-YMMA5YWL.js → testimonials-GR6TIS5S.js} +2 -2
- package/dist/{translate-OXVIMYHE.js → translate-GEFUP6KQ.js} +18 -18
- package/dist/{validate-ZS2M5Q3V.js → validate-NOWIOAHE.js} +11 -11
- package/dist/{videos-I6YXFBFT.js → videos-XMTDEHEJ.js} +1 -1
- package/dist/{viewer-check-7ZG7KHEN.js → viewer-check-U4XZMMS7.js} +6 -6
- package/dist/viewer-check-U4XZMMS7.js.map +1 -0
- package/dist/{winning-ads-ABN5OULS.js → winning-ads-QOAYIR5U.js} +1 -1
- package/dist/{write-commands-HCQI4Y27.js → write-commands-PEJBTME6.js} +485 -57
- package/dist/write-commands-PEJBTME6.js.map +1 -0
- package/dist/{x-WK2VQDPF.js → x-VCSMV7T5.js} +4 -4
- package/package.json +1 -1
- package/dist/account-7LUQWY6Q.js +0 -49
- package/dist/account-7LUQWY6Q.js.map +0 -1
- package/dist/ads-HXX2IAFF.js.map +0 -1
- package/dist/audiences-XEZHACKH.js.map +0 -1
- package/dist/campaign-writes-BAFB5E7A.js.map +0 -1
- package/dist/campaigns-4SOLY7OR.js.map +0 -1
- package/dist/chats-INN2OHSH.js.map +0 -1
- package/dist/chunk-3UXMQ3K2.js.map +0 -1
- package/dist/chunk-6JWEGFM5.js.map +0 -1
- package/dist/chunk-7RBJ2Z7Z.js.map +0 -1
- package/dist/chunk-GOJXKIFQ.js +0 -1605
- package/dist/chunk-GOJXKIFQ.js.map +0 -1
- package/dist/chunk-KIGGMKAE.js.map +0 -1
- package/dist/chunk-OP7DNHD2.js.map +0 -1
- package/dist/draft-EWDOIXSH.js.map +0 -1
- package/dist/draft-GPN3HOAG.js.map +0 -1
- package/dist/leads-2XOSAYP4.js +0 -293
- package/dist/leads-2XOSAYP4.js.map +0 -1
- package/dist/locations-YA7NZY44.js.map +0 -1
- package/dist/media-ES2UBGYW.js +0 -15
- package/dist/media-ES2UBGYW.js.map +0 -1
- package/dist/meta-AOIPEDV5.js +0 -69
- package/dist/meta-AOIPEDV5.js.map +0 -1
- package/dist/preview-V4YBD45S.js.map +0 -1
- package/dist/write-commands-HCQI4Y27.js.map +0 -1
- /package/dist/{account-Z65CPOWE.js.map → account-3H6BZO5H.js.map} +0 -0
- /package/dist/{account-writes-4N2MA2ZR.js.map → account-writes-AE5IJGGW.js.map} +0 -0
- /package/dist/{accounts-UA2ZWRN4.js.map → accounts-K4INATCW.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/{ads-L65JIKCD.js.map → ads-CQZHD7FC.js.map} +0 -0
- /package/dist/{ads-G6AS5L7G.js.map → ads-QIKZ6O2N.js.map} +0 -0
- /package/dist/{analytics-QKP3A5F3.js.map → analytics-ALOZ7ZZ4.js.map} +0 -0
- /package/dist/{connect-WBGCBBFJ.js.map → asset-writes-L5TMKIZC.js.map} +0 -0
- /package/dist/{audiences-RPLVMO4H.js.map → audiences-AAZH56WD.js.map} +0 -0
- /package/dist/{avatars-MXTI74VC.js.map → avatars-YSFFRHDK.js.map} +0 -0
- /package/dist/{brief-BN4UGUXF.js.map → brief-7S6XCJIA.js.map} +0 -0
- /package/dist/{businesses-PRRYPR7H.js.map → businesses-H3HIDQX6.js.map} +0 -0
- /package/dist/{campaign-writes-U5LTDTYK.js.map → campaign-writes-U5PUVSMT.js.map} +0 -0
- /package/dist/{campaigns-TFEQTSO3.js.map → campaigns-JEIKY2M4.js.map} +0 -0
- /package/dist/{campaigns-NR6TNQFN.js.map → campaigns-VTRMKSAT.js.map} +0 -0
- /package/dist/{canvas-GJAQAVS6.js.map → canvas-SVJEQO4V.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-SLNHVYGS.js.map} +0 -0
- /package/dist/{chunk-KPYDTIAI.js.map → chunk-2WZI36D3.js.map} +0 -0
- /package/dist/{chunk-FUKDI2UK.js.map → chunk-3W6G6ARX.js.map} +0 -0
- /package/dist/{chunk-JWSEPW7F.js.map → chunk-46GWHUKN.js.map} +0 -0
- /package/dist/{chunk-3TZVZXM6.js.map → chunk-4KJMLYCD.js.map} +0 -0
- /package/dist/{chunk-R3EKM2P2.js.map → chunk-6NCJGU6I.js.map} +0 -0
- /package/dist/{chunk-LPXSM2DI.js.map → chunk-AO45BX6Q.js.map} +0 -0
- /package/dist/{chunk-NPMAATZG.js.map → chunk-C7NWUCLQ.js.map} +0 -0
- /package/dist/{chunk-OWA7ZLC4.js.map → chunk-D4CKCNGW.js.map} +0 -0
- /package/dist/{chunk-H5HDZ7IC.js.map → chunk-DCBZ5CHZ.js.map} +0 -0
- /package/dist/{chunk-C6EYCD5J.js.map → chunk-FVHJCERJ.js.map} +0 -0
- /package/dist/{chunk-BITS62MF.js.map → chunk-G6XKD7QE.js.map} +0 -0
- /package/dist/{chunk-QE3JEJXF.js.map → chunk-GSZZLW5Q.js.map} +0 -0
- /package/dist/{chunk-TPANP5A2.js.map → chunk-JKJQWRLO.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-AVNSH2JE.js.map → chunk-KOXDXSKN.js.map} +0 -0
- /package/dist/{chunk-2XRMPSEV.js.map → chunk-LXQB4ZGE.js.map} +0 -0
- /package/dist/{chunk-ZL23HA4N.js.map → chunk-M6PN3VH6.js.map} +0 -0
- /package/dist/{chunk-TZEVD4Q6.js.map → chunk-P5FRWPG7.js.map} +0 -0
- /package/dist/{chunk-CSZFZKVX.js.map → chunk-PQJXIY64.js.map} +0 -0
- /package/dist/{chunk-LBO2YAZY.js.map → chunk-UNX6BS4U.js.map} +0 -0
- /package/dist/{chunk-UWXDNVS5.js.map → chunk-ZJSGGJ5R.js.map} +0 -0
- /package/dist/{ideas-F6CIGTVU.js.map → connect-S54TJ6OV.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/{creatives-VQO2TKE3.js.map → creatives-5I3G5YP3.js.map} +0 -0
- /package/dist/{creatives-S5QUWUL6.js.map → creatives-PCAGWPW3.js.map} +0 -0
- /package/dist/{critique-5LCG5TYF.js.map → critique-NRHUPIWF.js.map} +0 -0
- /package/dist/{draft-Y2QJE2NM.js.map → draft-34CGWUVA.js.map} +0 -0
- /package/dist/{experiment-G3FQVAJU.js.map → experiment-7N4QFRWV.js.map} +0 -0
- /package/dist/{feedback-CAOZPGTT.js.map → feedback-O3H42V4I.js.map} +0 -0
- /package/dist/{feedback-record-EXV5H6OS.js.map → feedback-record-FAPN2GBS.js.map} +0 -0
- /package/dist/{find-EVY4XEIQ.js.map → find-FSQAEGGF.js.map} +0 -0
- /package/dist/{flows-Z7355RMD.js.map → flows-T22B77J3.js.map} +0 -0
- /package/dist/{funnel-2B3JXJPX.js.map → funnel-7OA33VRP.js.map} +0 -0
- /package/dist/{ga4-2BL5YAYN.js.map → ga4-LPDIBNYP.js.map} +0 -0
- /package/dist/{google-7STODZQR.js.map → google-5ESVO76E.js.map} +0 -0
- /package/dist/{gsc-UU3T2C6B.js.map → gsc-FIZTQX3N.js.map} +0 -0
- /package/dist/{history-IQ33J5PB.js.map → history-QKDYBSYM.js.map} +0 -0
- /package/dist/{icon-GB7UH5RF.js.map → icon-CSVAZ7NE.js.map} +0 -0
- /package/dist/{logo-YSNUUT33.js.map → ideas-JQT422P7.js.map} +0 -0
- /package/dist/{images-WCKTD6Z2.js.map → images-WBNWK2ZH.js.map} +0 -0
- /package/dist/{inspiration-XQYHBJY2.js.map → inspiration-IX5N724J.js.map} +0 -0
- /package/dist/{landing-WUILAWDS.js.map → landing-Y6QCTXCZ.js.map} +0 -0
- /package/dist/{learn-CC6Q5IK2.js.map → learn-3BDZUWDT.js.map} +0 -0
- /package/dist/{linkedin-XKVPSCLV.js.map → linkedin-UGMAFSGO.js.map} +0 -0
- /package/dist/{run-KBN5K7LE.js.map → logo-VHXH4J6A.js.map} +0 -0
- /package/dist/{make-ED7HBLH3.js.map → make-W2PYZXYF.js.map} +0 -0
- /package/dist/{media-sources-PEHUMH7C.js.map → media-sources-EZKAJNVD.js.map} +0 -0
- /package/dist/{options-6FCNFWUF.js.map → options-NSCZSQ5P.js.map} +0 -0
- /package/dist/{pages-FTI44OSH.js.map → pages-PTWRXAZT.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/{rerun-A2XHGFZS.js.map → rerun-5THJLQQJ.js.map} +0 -0
- /package/dist/{research-BLDY5UWH.js.map → research-JHDWWFL7.js.map} +0 -0
- /package/dist/{rules-SK5DFFPY.js.map → rules-YLLFDZEM.js.map} +0 -0
- /package/dist/{rules-add-YQNYSME7.js.map → rules-add-U2GU4AGP.js.map} +0 -0
- /package/dist/{shared-NDRFKAH7.js.map → run-V5YQB6TH.js.map} +0 -0
- /package/dist/{scaffold-ad-6BN5LWQH.js.map → scaffold-ad-H4GJOKAW.js.map} +0 -0
- /package/dist/{scaffold-static-ad-VVZRAWBR.js.map → scaffold-static-ad-2YIFHCTL.js.map} +0 -0
- /package/dist/{scaffold-video-LFIYI4GP.js.map → scaffold-video-3EJLKR2O.js.map} +0 -0
- /package/dist/{select-QBU6ED4K.js.map → select-I22NPSIW.js.map} +0 -0
- /package/dist/{set-prompt-TL64CRBQ.js.map → set-prompt-S75OMQ7L.js.map} +0 -0
- /package/dist/{sync-definition-C6ROLKJ4.js.map → shared-3IBNDEFL.js.map} +0 -0
- /package/dist/{sources-RMNFV4CA.js.map → sources-VA23PDND.js.map} +0 -0
- /package/dist/{stale-ITFCPOER.js.map → stale-MHTU2NQJ.js.map} +0 -0
- /package/dist/{stats-RCLQE4HJ.js.map → stats-ZAGJH4AD.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/{viewer-check-7ZG7KHEN.js.map → sync-definition-2EBSQA6A.js.map} +0 -0
- /package/dist/{tag-manager-G3LBQZUL.js.map → tag-manager-3CJ66GKJ.js.map} +0 -0
- /package/dist/{testimonials-YMMA5YWL.js.map → testimonials-GR6TIS5S.js.map} +0 -0
- /package/dist/{translate-OXVIMYHE.js.map → translate-GEFUP6KQ.js.map} +0 -0
- /package/dist/{validate-ZS2M5Q3V.js.map → validate-NOWIOAHE.js.map} +0 -0
- /package/dist/{videos-I6YXFBFT.js.map → videos-XMTDEHEJ.js.map} +0 -0
- /package/dist/{winning-ads-ABN5OULS.js.map → winning-ads-QOAYIR5U.js.map} +0 -0
- /package/dist/{x-WK2VQDPF.js.map → x-VCSMV7T5.js.map} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
versionOf
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-2XRMPSEV.js";
|
|
3
|
+
} from "./chunk-M6PN3VH6.js";
|
|
4
|
+
import "./chunk-3W6G6ARX.js";
|
|
5
|
+
import "./chunk-KOXDXSKN.js";
|
|
6
|
+
import "./chunk-LXQB4ZGE.js";
|
|
8
7
|
import "./chunk-PTGYM4J6.js";
|
|
9
8
|
import "./chunk-LCW3U4EA.js";
|
|
9
|
+
import "./chunk-EOY6BK4C.js";
|
|
10
10
|
import "./chunk-VD73V44J.js";
|
|
11
11
|
import "./chunk-G2LGMWNG.js";
|
|
12
12
|
import "./chunk-P3W6SRSQ.js";
|
|
@@ -15,15 +15,15 @@ import "./chunk-JYALBYN7.js";
|
|
|
15
15
|
import "./chunk-FNA277HP.js";
|
|
16
16
|
import "./chunk-5WMTPYKT.js";
|
|
17
17
|
import "./chunk-23H4ZJRP.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-JQH5VG6F.js";
|
|
19
19
|
import "./chunk-E2RFM6R2.js";
|
|
20
20
|
import "./chunk-DGCUPJZD.js";
|
|
21
21
|
import "./chunk-BTY4LZBG.js";
|
|
22
22
|
import "./chunk-4AMIHNNP.js";
|
|
23
23
|
import "./chunk-IKCP5NCE.js";
|
|
24
24
|
import "./chunk-MCJ5I5LR.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-2WZI36D3.js";
|
|
26
|
+
import "./chunk-65Y3RCWP.js";
|
|
27
27
|
import "./chunk-DWX44QL6.js";
|
|
28
28
|
import "./chunk-2FSEESJU.js";
|
|
29
29
|
import "./chunk-CVBKW75S.js";
|
|
@@ -98,4 +98,4 @@ var selectCommand = defineCommand({
|
|
|
98
98
|
export {
|
|
99
99
|
selectCommand
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=select-
|
|
101
|
+
//# sourceMappingURL=select-I22NPSIW.js.map
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
compiledPromptNodeIds,
|
|
5
5
|
prepareCanvas,
|
|
6
6
|
sceneOwnedPrompts
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-2XRMPSEV.js";
|
|
7
|
+
} from "./chunk-KOXDXSKN.js";
|
|
8
|
+
import "./chunk-LXQB4ZGE.js";
|
|
10
9
|
import "./chunk-PTGYM4J6.js";
|
|
11
10
|
import "./chunk-LCW3U4EA.js";
|
|
11
|
+
import "./chunk-EOY6BK4C.js";
|
|
12
12
|
import "./chunk-VD73V44J.js";
|
|
13
13
|
import "./chunk-G2LGMWNG.js";
|
|
14
14
|
import "./chunk-P3W6SRSQ.js";
|
|
@@ -20,8 +20,8 @@ import "./chunk-23H4ZJRP.js";
|
|
|
20
20
|
import {
|
|
21
21
|
defaultRegistry,
|
|
22
22
|
validateCanvasDeep
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
} from "./chunk-JVH5A3XC.js";
|
|
24
|
+
import "./chunk-JQH5VG6F.js";
|
|
25
25
|
import "./chunk-E2RFM6R2.js";
|
|
26
26
|
import "./chunk-DGCUPJZD.js";
|
|
27
27
|
import "./chunk-BTY4LZBG.js";
|
|
@@ -30,8 +30,8 @@ import {
|
|
|
30
30
|
} from "./chunk-4AMIHNNP.js";
|
|
31
31
|
import "./chunk-IKCP5NCE.js";
|
|
32
32
|
import "./chunk-MCJ5I5LR.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-2WZI36D3.js";
|
|
34
|
+
import "./chunk-65Y3RCWP.js";
|
|
35
35
|
import "./chunk-DWX44QL6.js";
|
|
36
36
|
import "./chunk-2FSEESJU.js";
|
|
37
37
|
import "./chunk-CVBKW75S.js";
|
|
@@ -190,4 +190,4 @@ export {
|
|
|
190
190
|
setPromptCommand,
|
|
191
191
|
setPromptInCanvasFile
|
|
192
192
|
};
|
|
193
|
-
//# sourceMappingURL=set-prompt-
|
|
193
|
+
//# sourceMappingURL=set-prompt-S75OMQ7L.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
resolveEffectiveStatus,
|
|
10
10
|
statusFilterHints,
|
|
11
11
|
todayIso
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-QTOZ32SU.js";
|
|
13
13
|
import "./chunk-SWL4AAPP.js";
|
|
14
14
|
import "./chunk-XDZVBX6L.js";
|
|
15
15
|
import "./chunk-N5O67GK5.js";
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
statusFilterHints,
|
|
29
29
|
todayIso
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=shared-
|
|
31
|
+
//# sourceMappingURL=shared-3IBNDEFL.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
staleCreatives
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-2XRMPSEV.js";
|
|
3
|
+
} from "./chunk-3W6G6ARX.js";
|
|
4
|
+
import "./chunk-KOXDXSKN.js";
|
|
5
|
+
import "./chunk-LXQB4ZGE.js";
|
|
7
6
|
import "./chunk-PTGYM4J6.js";
|
|
8
7
|
import "./chunk-LCW3U4EA.js";
|
|
8
|
+
import "./chunk-EOY6BK4C.js";
|
|
9
9
|
import "./chunk-VD73V44J.js";
|
|
10
10
|
import "./chunk-G2LGMWNG.js";
|
|
11
11
|
import "./chunk-P3W6SRSQ.js";
|
|
@@ -16,15 +16,15 @@ import "./chunk-5WMTPYKT.js";
|
|
|
16
16
|
import {
|
|
17
17
|
findWorkspaceRoot
|
|
18
18
|
} from "./chunk-23H4ZJRP.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-JQH5VG6F.js";
|
|
20
20
|
import "./chunk-E2RFM6R2.js";
|
|
21
21
|
import "./chunk-DGCUPJZD.js";
|
|
22
22
|
import "./chunk-BTY4LZBG.js";
|
|
23
23
|
import "./chunk-4AMIHNNP.js";
|
|
24
24
|
import "./chunk-IKCP5NCE.js";
|
|
25
25
|
import "./chunk-MCJ5I5LR.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-2WZI36D3.js";
|
|
27
|
+
import "./chunk-65Y3RCWP.js";
|
|
28
28
|
import "./chunk-DWX44QL6.js";
|
|
29
29
|
import "./chunk-2FSEESJU.js";
|
|
30
30
|
import "./chunk-CVBKW75S.js";
|
|
@@ -68,4 +68,4 @@ var staleCommand = defineCommand({
|
|
|
68
68
|
export {
|
|
69
69
|
staleCommand
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=stale-
|
|
71
|
+
//# sourceMappingURL=stale-MHTU2NQJ.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
activeFilterFlags,
|
|
3
|
-
emptyResultHints
|
|
4
|
-
} from "./chunk-Q6ULQMWG.js";
|
|
5
1
|
import {
|
|
6
2
|
AUTO_INGEST_MAX,
|
|
7
3
|
parseAutoIngest
|
|
8
4
|
} from "./chunk-KKJ4KJCW.js";
|
|
5
|
+
import {
|
|
6
|
+
activeFilterFlags,
|
|
7
|
+
emptyResultHints
|
|
8
|
+
} from "./chunk-Q6ULQMWG.js";
|
|
9
9
|
import {
|
|
10
10
|
ApiError,
|
|
11
11
|
apiPost
|
|
@@ -176,4 +176,4 @@ export {
|
|
|
176
176
|
partialLibraryHints,
|
|
177
177
|
stockCommand
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=stock-
|
|
179
|
+
//# sourceMappingURL=stock-6SHHLSKG.js.map
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import {
|
|
2
|
+
adStudyFromWire,
|
|
3
|
+
cellObjects,
|
|
4
|
+
unixSeconds
|
|
5
|
+
} from "./chunk-HLVRHBKL.js";
|
|
6
|
+
import {
|
|
7
|
+
handleMetaError,
|
|
8
|
+
resolveAccountIdArg
|
|
9
|
+
} from "./chunk-QTOZ32SU.js";
|
|
10
|
+
import {
|
|
11
|
+
writeJsonEnvelope
|
|
12
|
+
} from "./chunk-SWL4AAPP.js";
|
|
13
|
+
import {
|
|
14
|
+
NO_CACHE_ARG
|
|
15
|
+
} from "./chunk-K3TNTBZJ.js";
|
|
16
|
+
import {
|
|
17
|
+
apiGet
|
|
18
|
+
} from "./chunk-XDZVBX6L.js";
|
|
19
|
+
import "./chunk-N5O67GK5.js";
|
|
20
|
+
import "./chunk-EE72SSB2.js";
|
|
21
|
+
import {
|
|
22
|
+
registerSchema
|
|
23
|
+
} from "./chunk-WNSE7N75.js";
|
|
24
|
+
import "./chunk-YQSBHWOI.js";
|
|
25
|
+
|
|
26
|
+
// ../api/src/ads-meta/adStudyDescription.ts
|
|
27
|
+
var MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
28
|
+
function adStudyTime(seconds) {
|
|
29
|
+
const date = new Date(seconds * 1e3);
|
|
30
|
+
const hh = String(date.getUTCHours()).padStart(2, "0");
|
|
31
|
+
const mm = String(date.getUTCMinutes()).padStart(2, "0");
|
|
32
|
+
return `${date.getUTCDate()} ${MONTHS[date.getUTCMonth()]} ${date.getUTCFullYear()}, ${hh}:${mm} UTC`;
|
|
33
|
+
}
|
|
34
|
+
function daysLabel(seconds) {
|
|
35
|
+
const days = Math.round(seconds / 86400 * 10) / 10;
|
|
36
|
+
return `${days} ${days === 1 ? "day" : "days"}`;
|
|
37
|
+
}
|
|
38
|
+
function quoted(id, names) {
|
|
39
|
+
const name = names[id];
|
|
40
|
+
return name ? `"${name}"` : id;
|
|
41
|
+
}
|
|
42
|
+
function cellWords(cell, names) {
|
|
43
|
+
const [noun, ids] = cell.ads ? ["ad", cell.ads] : cell.adsets ? ["ad set", cell.adsets] : ["campaign", cell.campaigns ?? []];
|
|
44
|
+
const plural = ids.length > 1 ? `${noun}s` : noun;
|
|
45
|
+
const runs = ids.length > 0 ? ` (${plural} ${ids.map((id) => quoted(id, names)).join(", ")})` : "";
|
|
46
|
+
const share = cell.control_percentage === void 0 ? `${cell.treatment_percentage}%` : `${cell.treatment_percentage}% see the ads, ${cell.control_percentage}% held out`;
|
|
47
|
+
return `${cell.name}${runs} ${share}`;
|
|
48
|
+
}
|
|
49
|
+
var STUDY_KIND = {
|
|
50
|
+
SPLIT_TEST: "Split test",
|
|
51
|
+
LIFT: "Lift study",
|
|
52
|
+
SPLIT_TEST_V2: "Creative test"
|
|
53
|
+
};
|
|
54
|
+
function primaryObjective(objectives) {
|
|
55
|
+
if (!objectives || objectives.length === 0) {
|
|
56
|
+
return void 0;
|
|
57
|
+
}
|
|
58
|
+
return objectives.find((objective) => objective.is_primary === true) ?? objectives[0];
|
|
59
|
+
}
|
|
60
|
+
var SOURCE_NOUN = {
|
|
61
|
+
adspixels: "pixel",
|
|
62
|
+
applications: "app",
|
|
63
|
+
offsite_datasets: "dataset"
|
|
64
|
+
};
|
|
65
|
+
function sourceWords(objective, names) {
|
|
66
|
+
const words = [];
|
|
67
|
+
for (const key of ["adspixels", "applications", "offsite_datasets"]) {
|
|
68
|
+
for (const source of objective[key] ?? []) {
|
|
69
|
+
const events = source.event_names?.join(" or ") ?? "any event";
|
|
70
|
+
words.push(`${events} on ${SOURCE_NOUN[key]} ${quoted(source.id, names)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const source of objective.customconversions ?? []) {
|
|
74
|
+
words.push(`custom conversion ${quoted(source.id, names)}`);
|
|
75
|
+
}
|
|
76
|
+
return words;
|
|
77
|
+
}
|
|
78
|
+
function measuringWords(objectives, names) {
|
|
79
|
+
const primary = primaryObjective(objectives);
|
|
80
|
+
if (!primary) {
|
|
81
|
+
return "cost per result on the campaigns' objective";
|
|
82
|
+
}
|
|
83
|
+
const sources = sourceWords(primary, names);
|
|
84
|
+
return `cost per "${primary.name}"${sources.length > 0 ? ` (${sources.join(", ")})` : ""}`;
|
|
85
|
+
}
|
|
86
|
+
function measuringPhrase(type, primary, measuring) {
|
|
87
|
+
if (type === "LIFT") return `measuring the lift in ${primary ? `"${primary.name}"` : "results"}`;
|
|
88
|
+
return `measuring ${primary ? `cost per "${primary.name}"` : measuring}`;
|
|
89
|
+
}
|
|
90
|
+
function describeAdStudy(study, { names = {} } = {}) {
|
|
91
|
+
const versions = study.cells && study.cells.length > 0 ? study.cells.map((cell) => cellWords(cell, names)).join(" vs ") : void 0;
|
|
92
|
+
const measuring = measuringWords(study.objectives, names);
|
|
93
|
+
const primary = primaryObjective(study.objectives);
|
|
94
|
+
const others = (study.objectives ?? []).filter((objective) => objective !== primary);
|
|
95
|
+
const alsoMeasured = others.length > 0 ? others.map((objective) => `"${objective.name}"`).join(", ") : void 0;
|
|
96
|
+
const hasSchedule = study.start_time !== void 0 && study.end_time !== void 0;
|
|
97
|
+
const length = hasSchedule ? daysLabel((study.end_time ?? 0) - (study.start_time ?? 0)) : void 0;
|
|
98
|
+
const schedule = hasSchedule ? `${adStudyTime(study.start_time ?? 0)} \u2192 ${adStudyTime(study.end_time ?? 0)} \xB7 ${length}` : void 0;
|
|
99
|
+
const confidence = study.confidence_level !== void 0 ? `${Math.round(study.confidence_level * 100)}%` : void 0;
|
|
100
|
+
const parts = [
|
|
101
|
+
versions,
|
|
102
|
+
measuringPhrase(study.type, primary, measuring),
|
|
103
|
+
length,
|
|
104
|
+
confidence ? `${confidence} confidence` : void 0
|
|
105
|
+
].filter((part) => part !== void 0);
|
|
106
|
+
const kind = STUDY_KIND[study.type ?? "SPLIT_TEST"] ?? "Split test";
|
|
107
|
+
return { sentence: `${kind}: ${parts.join(", ")}`, versions, measuring, alsoMeasured, schedule, confidence };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// src/commands/ads/meta/studies.ts
|
|
111
|
+
import { defineCommand } from "citty";
|
|
112
|
+
function studyState(row, nowSeconds) {
|
|
113
|
+
if (row.canceled_time) return "cancelled";
|
|
114
|
+
const start = unixSeconds(row.start_time) ?? 0;
|
|
115
|
+
const end = unixSeconds(row.end_time) ?? Number.POSITIVE_INFINITY;
|
|
116
|
+
if (nowSeconds < start) return "scheduled";
|
|
117
|
+
return nowSeconds < end ? "running" : "ended";
|
|
118
|
+
}
|
|
119
|
+
function compactStudy(row, nowSeconds) {
|
|
120
|
+
const study = adStudyFromWire(row);
|
|
121
|
+
const words = describeAdStudy(study, { names: study.names });
|
|
122
|
+
return {
|
|
123
|
+
id: study.id,
|
|
124
|
+
name: study.name,
|
|
125
|
+
state: studyState(row, nowSeconds),
|
|
126
|
+
compares: words.versions,
|
|
127
|
+
...study.start_time !== void 0 ? { starts: adStudyTime(study.start_time) } : {},
|
|
128
|
+
...study.end_time !== void 0 ? { ends: adStudyTime(study.end_time) } : {},
|
|
129
|
+
...row.results_first_available_date ? { results_from: row.results_first_available_date } : {}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function studyDetail(row, nowSeconds) {
|
|
133
|
+
const study = adStudyFromWire(row);
|
|
134
|
+
const measures = (row.objectives?.data ?? []).map((objective) => ({
|
|
135
|
+
id: objective.id,
|
|
136
|
+
name: objective.name,
|
|
137
|
+
primary: objective.is_primary === true,
|
|
138
|
+
...objective.results !== void 0 ? { results: objective.results } : {}
|
|
139
|
+
}));
|
|
140
|
+
return {
|
|
141
|
+
...compactStudy(row, nowSeconds),
|
|
142
|
+
...study.description ? { description: study.description } : {},
|
|
143
|
+
versions: study.cells.map((cell) => ({
|
|
144
|
+
cell_id: cell.id,
|
|
145
|
+
name: cell.name,
|
|
146
|
+
share: `${cell.treatment_percentage}%`,
|
|
147
|
+
runs: cellObjects(cell).map((id) => ({ id, name: study.names[id] })),
|
|
148
|
+
level: cell.ads ? "ad" : cell.adsets ? "ad set" : "campaign"
|
|
149
|
+
})),
|
|
150
|
+
measures
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function studyHints(detail) {
|
|
154
|
+
const state = detail.state;
|
|
155
|
+
if (state === "scheduled") {
|
|
156
|
+
return [
|
|
157
|
+
"Not started: it can still be re-timed, re-split (`studies update --split <cell_id>=60 \u2026`) or deleted. Results appear once it runs."
|
|
158
|
+
];
|
|
159
|
+
}
|
|
160
|
+
const measures = detail.measures ?? [];
|
|
161
|
+
const hasResults = measures.some((measure) => measure.results !== void 0);
|
|
162
|
+
return [
|
|
163
|
+
hasResults ? "Meta's verdict is in each measure's results, with its confidence. Report a winner only when Meta names one at the test's confidence level; otherwise say the versions performed alike." : "No results yet \u2014 Meta publishes them once the test has gathered enough. Compare per-version delivery meanwhile with `baker ads meta insights --object <ad set or campaign id>`, and do not call a winner from it.",
|
|
164
|
+
state === "running" ? "Running: its split and start are fixed; it can be renamed, its end moved, ended now (`studies end`) or deleted (results and all)." : "Over. Read the per-version numbers with `baker ads meta insights --object <id>` for the period it ran."
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
registerSchema({
|
|
168
|
+
command: "ads.meta.studies",
|
|
169
|
+
description: "Meta A/B tests (ad studies) whose versions run in an ad account \u2014 what each compares, when it runs and its state (scheduled, running, ended). --study-id reads one: every version with its cell id and share, and each measure with Meta's results. --business-id lists every test on a Business. Stage new ones with `studies create`.",
|
|
170
|
+
args: {
|
|
171
|
+
"account-id": { type: "string", description: "Meta ad account ID (act_123)", required: false },
|
|
172
|
+
"business-id": { type: "string", description: "List every test on this Business instead", required: false },
|
|
173
|
+
"study-id": { type: "string", description: "One test: its versions and results", required: false },
|
|
174
|
+
full: { type: "boolean", description: "The tests as Meta returns them", required: false },
|
|
175
|
+
"no-cache": { type: "boolean", description: "Bypass the cache", required: false }
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
var listArgs = {
|
|
179
|
+
"account-id": { type: "string", description: "Meta ad account ID" },
|
|
180
|
+
"business-id": { type: "string", description: "List every test on this Business instead" },
|
|
181
|
+
"study-id": { type: "string", description: "Read one test: versions, cell ids, results" },
|
|
182
|
+
full: { type: "boolean", description: "The tests as Meta returns them" },
|
|
183
|
+
"no-cache": NO_CACHE_ARG
|
|
184
|
+
};
|
|
185
|
+
async function read(path, params, noCache) {
|
|
186
|
+
if (noCache) params["skip-cache"] = "true";
|
|
187
|
+
return await apiGet(path, params);
|
|
188
|
+
}
|
|
189
|
+
var listCommand = defineCommand({
|
|
190
|
+
meta: {
|
|
191
|
+
name: "list",
|
|
192
|
+
description: "List A/B tests. Runs by default. Example: baker ads meta studies --account-id act_123 \xB7 one test: baker ads meta studies --study-id 6123"
|
|
193
|
+
},
|
|
194
|
+
args: listArgs,
|
|
195
|
+
run: async ({ args }) => {
|
|
196
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
197
|
+
try {
|
|
198
|
+
if (args["study-id"]) {
|
|
199
|
+
const row = await read(
|
|
200
|
+
"/api/ads/meta/study-results",
|
|
201
|
+
{ "study-id": String(args["study-id"]) },
|
|
202
|
+
args["no-cache"]
|
|
203
|
+
);
|
|
204
|
+
const detail = studyDetail(row, now);
|
|
205
|
+
writeJsonEnvelope({ ok: true, data: args.full ? row : detail, hints: studyHints(detail) });
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const params = args["business-id"] ? { "business-id": String(args["business-id"]) } : { "account-id": resolveAccountIdArg(args) };
|
|
209
|
+
const rows = await read("/api/ads/meta/studies", params, args["no-cache"]);
|
|
210
|
+
const hints = rows.length === 0 ? [
|
|
211
|
+
"No A/B tests. To set one up: duplicate the ad set (`adsets duplicate`), change ONE thing on the copy, then `studies create --adsets <original>,<copy>`."
|
|
212
|
+
] : ["`studies --study-id <id>` reads one test's versions and results."];
|
|
213
|
+
writeJsonEnvelope({ ok: true, data: args.full ? rows : rows.map((row) => compactStudy(row, now)), hints });
|
|
214
|
+
} catch (err) {
|
|
215
|
+
handleMetaError(err);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
var studiesCommand = defineCommand({
|
|
220
|
+
meta: {
|
|
221
|
+
name: "studies",
|
|
222
|
+
description: `Meta A/B tests (ad studies): Meta splits one audience between versions \u2014 ad sets or campaigns \u2014 so each person sees one, and calls the winner.
|
|
223
|
+
Not Baker's own page experiments (\`baker experiment\`), which test landing pages.
|
|
224
|
+
|
|
225
|
+
Examples:
|
|
226
|
+
baker ads meta studies --account-id act_123 # tests on this account and their state
|
|
227
|
+
baker ads meta studies --study-id 6123 # versions, cell ids, Meta's results
|
|
228
|
+
baker ads meta studies create --name "Broad vs lookalike" --adsets 6123,6124 --start 2026-10-20T08:00Z --days 14 --confidence 90
|
|
229
|
+
baker ads meta studies update 6123 --end 2026-11-10T08:00Z
|
|
230
|
+
baker ads meta studies end 6123 | delete 6123`
|
|
231
|
+
},
|
|
232
|
+
subCommands: {
|
|
233
|
+
list: listCommand,
|
|
234
|
+
create: () => import("./study-writes-L2AA2PGL.js").then((m) => m.studiesCreateCommand),
|
|
235
|
+
update: () => import("./study-writes-L2AA2PGL.js").then((m) => m.studiesUpdateCommand),
|
|
236
|
+
end: () => import("./study-writes-L2AA2PGL.js").then((m) => m.studiesEndCommand),
|
|
237
|
+
delete: () => import("./study-writes-L2AA2PGL.js").then((m) => m.studiesDeleteCommand)
|
|
238
|
+
},
|
|
239
|
+
args: listArgs,
|
|
240
|
+
default: "list"
|
|
241
|
+
});
|
|
242
|
+
export {
|
|
243
|
+
compactStudy,
|
|
244
|
+
studiesCommand,
|
|
245
|
+
studyDetail,
|
|
246
|
+
studyHints,
|
|
247
|
+
studyState
|
|
248
|
+
};
|
|
249
|
+
//# sourceMappingURL=studies-4NIV4D5Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../api/src/ads-meta/adStudyDescription.ts","../src/commands/ads/meta/studies.ts"],"sourcesContent":["/**\n * A Meta A/B test in words — the one reading shared by the staged summary, the\n * draft review rows and the CLI, so all three say the same thing: what each\n * version runs and how much of the audience it gets, what decides the winner,\n * for how long, and how sure Meta has to be.\n */\nimport type { AdStudyCell, AdStudyObjective } from \"./adStudies\";\n\nexport interface AdStudyWordsInput {\n type?: string;\n start_time?: number;\n end_time?: number;\n confidence_level?: number;\n cells?: readonly Pick<\n AdStudyCell,\n \"name\" | \"treatment_percentage\" | \"control_percentage\" | \"adsets\" | \"campaigns\" | \"ads\"\n >[];\n objectives?: readonly AdStudyObjective[];\n}\n\nexport interface AdStudyWords {\n sentence: string;\n versions?: string;\n measuring: string;\n /** The measures besides the primary one, by name. */\n alsoMeasured?: string;\n schedule?: string;\n confidence?: string;\n}\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport function adStudyTime(seconds: number): string {\n const date = new Date(seconds * 1000);\n const hh = String(date.getUTCHours()).padStart(2, \"0\");\n const mm = String(date.getUTCMinutes()).padStart(2, \"0\");\n return `${date.getUTCDate()} ${MONTHS[date.getUTCMonth()]} ${date.getUTCFullYear()}, ${hh}:${mm} UTC`;\n}\n\nfunction daysLabel(seconds: number): string {\n const days = Math.round((seconds / 86_400) * 10) / 10;\n return `${days} ${days === 1 ? \"day\" : \"days\"}`;\n}\n\nfunction quoted(id: string, names: Record<string, string>): string {\n const name = names[id];\n return name ? `\"${name}\"` : id;\n}\n\nfunction cellWords(\n cell: Pick<AdStudyCell, \"name\" | \"treatment_percentage\" | \"control_percentage\" | \"adsets\" | \"campaigns\" | \"ads\">,\n names: Record<string, string>,\n): string {\n const [noun, ids] = cell.ads\n ? [\"ad\", cell.ads]\n : cell.adsets\n ? [\"ad set\", cell.adsets]\n : [\"campaign\", cell.campaigns ?? []];\n const plural = ids.length > 1 ? `${noun}s` : noun;\n const runs = ids.length > 0 ? ` (${plural} ${ids.map((id) => quoted(id, names)).join(\", \")})` : \"\";\n const share =\n cell.control_percentage === undefined\n ? `${cell.treatment_percentage}%`\n : `${cell.treatment_percentage}% see the ads, ${cell.control_percentage}% held out`;\n return `${cell.name}${runs} ${share}`;\n}\n\nconst STUDY_KIND: Record<string, string> = {\n SPLIT_TEST: \"Split test\",\n LIFT: \"Lift study\",\n SPLIT_TEST_V2: \"Creative test\",\n};\n\nfunction primaryObjective(objectives: readonly AdStudyObjective[] | undefined): AdStudyObjective | undefined {\n if (!objectives || objectives.length === 0) {\n return undefined;\n }\n return objectives.find((objective) => objective.is_primary === true) ?? objectives[0];\n}\n\nconst SOURCE_NOUN: Record<\"adspixels\" | \"applications\" | \"offsite_datasets\", string> = {\n adspixels: \"pixel\",\n applications: \"app\",\n offsite_datasets: \"dataset\",\n};\n\n/** \"Lead on pixel \"Site\"\", one per event source. */\nfunction sourceWords(objective: AdStudyObjective, names: Record<string, string>): string[] {\n const words: string[] = [];\n for (const key of [\"adspixels\", \"applications\", \"offsite_datasets\"] as const) {\n for (const source of objective[key] ?? []) {\n const events = source.event_names?.join(\" or \") ?? \"any event\";\n words.push(`${events} on ${SOURCE_NOUN[key]} ${quoted(source.id, names)}`);\n }\n }\n for (const source of objective.customconversions ?? []) {\n words.push(`custom conversion ${quoted(source.id, names)}`);\n }\n return words;\n}\n\n/** What decides the winner. Meta's split test compares cost per result of the primary measure. */\nfunction measuringWords(objectives: readonly AdStudyObjective[] | undefined, names: Record<string, string>): string {\n const primary = primaryObjective(objectives);\n if (!primary) {\n return \"cost per result on the campaigns' objective\";\n }\n const sources = sourceWords(primary, names);\n return `cost per \"${primary.name}\"${sources.length > 0 ? ` (${sources.join(\", \")})` : \"\"}`;\n}\n\n/** What the sentence says the study measures: a lift study reads the lift, a test the cost per result. */\nfunction measuringPhrase(type: string | undefined, primary: AdStudyObjective | undefined, measuring: string): string {\n if (type === \"LIFT\") return `measuring the lift in ${primary ? `\"${primary.name}\"` : \"results\"}`;\n return `measuring ${primary ? `cost per \"${primary.name}\"` : measuring}`;\n}\n\nexport function describeAdStudy(\n study: AdStudyWordsInput,\n { names = {} }: { names?: Record<string, string> } = {},\n): AdStudyWords {\n const versions =\n study.cells && study.cells.length > 0 ? study.cells.map((cell) => cellWords(cell, names)).join(\" vs \") : undefined;\n const measuring = measuringWords(study.objectives, names);\n const primary = primaryObjective(study.objectives);\n const others = (study.objectives ?? []).filter((objective) => objective !== primary);\n const alsoMeasured = others.length > 0 ? others.map((objective) => `\"${objective.name}\"`).join(\", \") : undefined;\n const hasSchedule = study.start_time !== undefined && study.end_time !== undefined;\n const length = hasSchedule ? daysLabel((study.end_time ?? 0) - (study.start_time ?? 0)) : undefined;\n const schedule = hasSchedule\n ? `${adStudyTime(study.start_time ?? 0)} → ${adStudyTime(study.end_time ?? 0)} · ${length}`\n : undefined;\n const confidence = study.confidence_level !== undefined ? `${Math.round(study.confidence_level * 100)}%` : undefined;\n const parts = [\n versions,\n measuringPhrase(study.type, primary, measuring),\n length,\n confidence ? `${confidence} confidence` : undefined,\n ].filter((part): part is string => part !== undefined);\n const kind = STUDY_KIND[study.type ?? \"SPLIT_TEST\"] ?? \"Split test\";\n return { sentence: `${kind}: ${parts.join(\", \")}`, versions, measuring, alsoMeasured, schedule, confidence };\n}\n","import { adStudyFromWire, cellObjects, unixSeconds } from \"@baker/api/ads-meta/adStudies\";\nimport { adStudyTime, describeAdStudy } from \"@baker/api/ads-meta/adStudyDescription\";\nimport { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { handleMetaError, resolveAccountIdArg } from \"./shared.ts\";\n\n/**\n * Meta A/B tests (ad studies) — reads. A test splits one audience between\n * versions (ad sets, campaigns, or a creative test's ads) so each person sees one, and Meta calls the\n * winner. Writes (create / update / end / delete) stage like every Meta change\n * and live in `study-writes.ts`.\n */\n\ntype Row = Record<string, unknown>;\n\nexport type StudyState = \"scheduled\" | \"running\" | \"ended\" | \"cancelled\";\n\nexport function studyState(row: Row, nowSeconds: number): StudyState {\n if (row.canceled_time) return \"cancelled\";\n const start = unixSeconds(row.start_time) ?? 0;\n const end = unixSeconds(row.end_time) ?? Number.POSITIVE_INFINITY;\n if (nowSeconds < start) return \"scheduled\";\n return nowSeconds < end ? \"running\" : \"ended\";\n}\n\n/** What an agent needs to pick a test and know what it compares. The raw node sits behind --full. */\nexport function compactStudy(row: Row, nowSeconds: number): Row {\n const study = adStudyFromWire(row);\n const words = describeAdStudy(study, { names: study.names });\n return {\n id: study.id,\n name: study.name,\n state: studyState(row, nowSeconds),\n compares: words.versions,\n ...(study.start_time !== undefined ? { starts: adStudyTime(study.start_time) } : {}),\n ...(study.end_time !== undefined ? { ends: adStudyTime(study.end_time) } : {}),\n ...(row.results_first_available_date ? { results_from: row.results_first_available_date } : {}),\n };\n}\n\n/** One test in full: each version with its cell id (what `studies update --split` names), each measure with Meta's results. */\nexport function studyDetail(row: Row, nowSeconds: number): Row {\n const study = adStudyFromWire(row);\n const measures = ((row.objectives as { data?: Row[] } | undefined)?.data ?? []).map((objective) => ({\n id: objective.id,\n name: objective.name,\n primary: objective.is_primary === true,\n ...(objective.results !== undefined ? { results: objective.results } : {}),\n }));\n return {\n ...compactStudy(row, nowSeconds),\n ...(study.description ? { description: study.description } : {}),\n versions: study.cells.map((cell) => ({\n cell_id: cell.id,\n name: cell.name,\n share: `${cell.treatment_percentage}%`,\n runs: cellObjects(cell).map((id) => ({ id, name: study.names[id] })),\n level: cell.ads ? \"ad\" : cell.adsets ? \"ad set\" : \"campaign\",\n })),\n measures,\n };\n}\n\nexport function studyHints(detail: Row): string[] {\n const state = detail.state as StudyState;\n if (state === \"scheduled\") {\n return [\n \"Not started: it can still be re-timed, re-split (`studies update --split <cell_id>=60 …`) or deleted. Results appear once it runs.\",\n ];\n }\n const measures = (detail.measures as Row[] | undefined) ?? [];\n const hasResults = measures.some((measure) => measure.results !== undefined);\n return [\n hasResults\n ? \"Meta's verdict is in each measure's results, with its confidence. Report a winner only when Meta names one at the test's confidence level; otherwise say the versions performed alike.\"\n : \"No results yet — Meta publishes them once the test has gathered enough. Compare per-version delivery meanwhile with `baker ads meta insights --object <ad set or campaign id>`, and do not call a winner from it.\",\n state === \"running\"\n ? \"Running: its split and start are fixed; it can be renamed, its end moved, ended now (`studies end`) or deleted (results and all).\"\n : \"Over. Read the per-version numbers with `baker ads meta insights --object <id>` for the period it ran.\",\n ];\n}\n\nregisterSchema({\n command: \"ads.meta.studies\",\n description:\n \"Meta A/B tests (ad studies) whose versions run in an ad account — what each compares, when it runs and its state (scheduled, running, ended). --study-id reads one: every version with its cell id and share, and each measure with Meta's results. --business-id lists every test on a Business. Stage new ones with `studies create`.\",\n args: {\n \"account-id\": { type: \"string\", description: \"Meta ad account ID (act_123)\", required: false },\n \"business-id\": { type: \"string\", description: \"List every test on this Business instead\", required: false },\n \"study-id\": { type: \"string\", description: \"One test: its versions and results\", required: false },\n full: { type: \"boolean\", description: \"The tests as Meta returns them\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Bypass the cache\", required: false },\n },\n});\n\nconst listArgs = {\n \"account-id\": { type: \"string\", description: \"Meta ad account ID\" },\n \"business-id\": { type: \"string\", description: \"List every test on this Business instead\" },\n \"study-id\": { type: \"string\", description: \"Read one test: versions, cell ids, results\" },\n full: { type: \"boolean\", description: \"The tests as Meta returns them\" },\n \"no-cache\": NO_CACHE_ARG,\n} as const;\n\nasync function read<T>(path: string, params: Record<string, string>, noCache: unknown): Promise<T> {\n if (noCache) params[\"skip-cache\"] = \"true\";\n return await apiGet<T>(path, params);\n}\n\nconst listCommand = defineCommand({\n meta: {\n name: \"list\",\n description:\n \"List A/B tests. Runs by default. Example: baker ads meta studies --account-id act_123 · one test: baker ads meta studies --study-id 6123\",\n },\n args: listArgs,\n run: async ({ args }) => {\n const now = Math.floor(Date.now() / 1000);\n try {\n if (args[\"study-id\"]) {\n const row = await read<Row>(\n \"/api/ads/meta/study-results\",\n { \"study-id\": String(args[\"study-id\"]) },\n args[\"no-cache\"],\n );\n const detail = studyDetail(row, now);\n writeJsonEnvelope({ ok: true, data: args.full ? row : detail, hints: studyHints(detail) });\n return;\n }\n const params: Record<string, string> = args[\"business-id\"]\n ? { \"business-id\": String(args[\"business-id\"]) }\n : { \"account-id\": resolveAccountIdArg(args) };\n const rows = await read<Row[]>(\"/api/ads/meta/studies\", params, args[\"no-cache\"]);\n const hints =\n rows.length === 0\n ? [\n \"No A/B tests. To set one up: duplicate the ad set (`adsets duplicate`), change ONE thing on the copy, then `studies create --adsets <original>,<copy>`.\",\n ]\n : [\"`studies --study-id <id>` reads one test's versions and results.\"];\n writeJsonEnvelope({ ok: true, data: args.full ? rows : rows.map((row) => compactStudy(row, now)), hints });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nexport const studiesCommand = defineCommand({\n meta: {\n name: \"studies\",\n description: `Meta A/B tests (ad studies): Meta splits one audience between versions — ad sets or campaigns — so each person sees one, and calls the winner.\nNot Baker's own page experiments (\\`baker experiment\\`), which test landing pages.\n\nExamples:\n baker ads meta studies --account-id act_123 # tests on this account and their state\n baker ads meta studies --study-id 6123 # versions, cell ids, Meta's results\n baker ads meta studies create --name \"Broad vs lookalike\" --adsets 6123,6124 --start 2026-10-20T08:00Z --days 14 --confidence 90\n baker ads meta studies update 6123 --end 2026-11-10T08:00Z\n baker ads meta studies end 6123 | delete 6123`,\n },\n subCommands: {\n list: listCommand,\n create: () => import(\"./study-writes.ts\").then((m) => m.studiesCreateCommand),\n update: () => import(\"./study-writes.ts\").then((m) => m.studiesUpdateCommand),\n end: () => import(\"./study-writes.ts\").then((m) => m.studiesEndCommand),\n delete: () => import(\"./study-writes.ts\").then((m) => m.studiesDeleteCommand),\n },\n args: listArgs,\n default: \"list\",\n});\n"],"mappings":"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","names":[]}
|