@koda-sl/baker-cli 0.447.0 → 0.448.0-dev.0d67e41b9
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 +2 -2
- package/dist/{account-F6MHQ64I.js → account-4H7QVBRK.js} +3 -3
- package/dist/{account-2ZMZFPIU.js → account-DTHGTZCN.js} +4 -4
- package/dist/{account-writes-ISE4U2FQ.js → account-writes-AK42HGRM.js} +3 -3
- package/dist/{accounts-VINHZRWA.js → accounts-5RLG6BBA.js} +3 -3
- package/dist/{accounts-RHGN5WMU.js → accounts-6LSBBXKA.js} +5 -5
- package/dist/{actions-5F4ZP6M4.js → actions-WH5C6Q7I.js} +18 -18
- package/dist/{ad-group-writes-UU5NNKSO.js → ad-group-writes-QQS4223F.js} +3 -3
- package/dist/{ad-groups-CGFXZNIA.js → ad-groups-WGPDPUI2.js} +7 -7
- package/dist/{ad-writes-NALDYWOR.js → ad-writes-XE2IE4DS.js} +3 -3
- package/dist/{add-KBPMSK2P.js → add-BZ4QPLK4.js} +2 -2
- package/dist/{add-OGH4DZZ5.js → add-TRSKOIO6.js} +30 -5
- package/dist/add-TRSKOIO6.js.map +1 -0
- package/dist/{ads-H7GH7A26.js → ads-6UEDYT3O.js} +9 -9
- package/dist/{ads-56OWZBXZ.js → ads-6UG66KA5.js} +6 -6
- package/dist/{ads-PV7GZXPR.js → ads-BCOSQALY.js} +8 -8
- package/dist/{adsets-H7QT42U6.js → adsets-Q5DWGANV.js} +11 -11
- package/dist/{advertisers-PM4WPG4N.js → advertisers-OABQDELT.js} +3 -3
- package/dist/{analytics-JVZKN735.js → analytics-3YAWQF5K.js} +6 -6
- package/dist/{analytics-5FALU2GL.js → analytics-BCZGSSXP.js} +3 -3
- package/dist/{animate-FWWHSYPL.js → animate-AIZ3GS4J.js} +4 -4
- package/dist/{assign-KLYZ6USE.js → assign-O6QNAZD5.js} +3 -3
- package/dist/{audience-size-JHB42DB4.js → audience-size-CXPWERR3.js} +3 -3
- package/dist/{audiences-JACGRBNN.js → audiences-AMRFZRZ7.js} +3 -3
- package/dist/{audiences-VEKGLWBG.js → audiences-TGD5US2M.js} +3 -3
- package/dist/{audit-5XH7WZIM.js → audit-MNOQK3U4.js} +3 -3
- package/dist/{autocomplete-7F3PZLEY.js → autocomplete-TRCMPNW4.js} +3 -3
- package/dist/{avatars-N4SRNQI7.js → avatars-P3WX5TQP.js} +4 -4
- package/dist/{bid-pricing-VYLVGU26.js → bid-pricing-6XXSM7C2.js} +3 -3
- package/dist/{brand-ASBS2HZM.js → brand-LXU7YNCF.js} +2 -2
- package/dist/{brief-JSZKDPGU.js → brief-Y4F37TH5.js} +15 -15
- package/dist/{campaign-groups-ATE2DE4V.js → campaign-groups-CEAM3WRO.js} +8 -8
- package/dist/{campaign-writes-ETT57KLQ.js → campaign-writes-D6BJAULL.js} +3 -3
- package/dist/{campaign-writes-SX52CJYW.js → campaign-writes-SXLZFYF6.js} +3 -3
- package/dist/{campaigns-J6VZBIV6.js → campaigns-CXOKBCPS.js} +11 -11
- package/dist/{campaigns-WBEG5QA4.js → campaigns-D6B6Z67Y.js} +8 -8
- package/dist/{campaigns-FGBAS6AZ.js → campaigns-V3SWBM4E.js} +5 -5
- package/dist/{campaigns-X3DPCCSN.js → campaigns-YS3OGQXO.js} +7 -7
- package/dist/{canvas-K7IN7HLO.js → canvas-VH3Q26TK.js} +14 -14
- package/dist/{capabilities-RDAERPYY.js → capabilities-NZPSSS6T.js} +3 -3
- package/dist/{catalog-MENVHL5U.js → catalog-GWN3WT7J.js} +7 -7
- package/dist/{catalogs-G3YEVG6S.js → catalogs-BRXEDE56.js} +3 -3
- package/dist/{chatgpt-QNUN63YS.js → chatgpt-7W75X3ER.js} +13 -13
- package/dist/{chats-YIAQGQ3X.js → chats-GN3PBFX4.js} +3 -3
- package/dist/{chunk-U3HAMW5W.js → chunk-2BKVVCCV.js} +3 -3
- package/dist/{chunk-EH4C4CZK.js → chunk-2GTYAHDN.js} +2 -2
- package/dist/{chunk-SB3GZFCV.js → chunk-3OFVFHKT.js} +2 -2
- package/dist/{chunk-U6SYRIOB.js → chunk-4QEY2L6U.js} +2 -2
- package/dist/{chunk-PDTB5EX6.js → chunk-4Z7DEN75.js} +2 -2
- package/dist/{chunk-KNWHUMVZ.js → chunk-6Y7SIP2D.js} +7 -5
- package/dist/{chunk-VAISMQQB.js → chunk-7ED5TAFP.js} +4 -4
- package/dist/{chunk-35XWJEWH.js → chunk-7J6EHOH6.js} +2 -2
- package/dist/{chunk-CHSNHVYF.js → chunk-CAMX6OHF.js} +4 -4
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/{chunk-YC2TQ3VC.js → chunk-CFHIW5QZ.js} +3 -3
- package/dist/{chunk-GATKK4RJ.js → chunk-D6744YSX.js} +6 -6
- package/dist/{chunk-ANCSKUWI.js → chunk-DQMZXK27.js} +2 -2
- package/dist/{chunk-HIPDMQZ6.js → chunk-DZSIUEGH.js} +2 -2
- package/dist/{chunk-T3BDNJIX.js → chunk-E4NCRGY3.js} +2 -2
- package/dist/{chunk-YPZYOJP6.js → chunk-EAEOPERX.js} +15 -12
- package/dist/chunk-EAEOPERX.js.map +1 -0
- package/dist/{chunk-2GK33EJV.js → chunk-ESB5DLIP.js} +2 -2
- package/dist/{chunk-KLBTXETO.js → chunk-FTWJFDIN.js} +169 -169
- package/dist/chunk-FTWJFDIN.js.map +1 -0
- package/dist/{chunk-ACANMASG.js → chunk-FVF5SXTZ.js} +3 -3
- package/dist/{chunk-VMDAXFRI.js → chunk-GYU7BWEN.js} +3 -3
- package/dist/{chunk-OTFHEHIU.js → chunk-HRYOZUSK.js} +9 -4
- package/dist/chunk-HRYOZUSK.js.map +1 -0
- package/dist/{chunk-KQTYTCKQ.js → chunk-HZUDRKGR.js} +2 -2
- package/dist/{chunk-DR34ZTWD.js → chunk-IGQZ5U3C.js} +6 -6
- package/dist/{chunk-65RIB7A6.js → chunk-IYU4X5A7.js} +5 -5
- package/dist/{chunk-5R5ADJ47.js → chunk-JVLAV62J.js} +317 -50
- package/dist/chunk-JVLAV62J.js.map +1 -0
- package/dist/{chunk-NDXBU22S.js → chunk-K6WVV74H.js} +40 -7
- package/dist/chunk-K6WVV74H.js.map +1 -0
- package/dist/{chunk-FXED3VZK.js → chunk-L27H2R2N.js} +2 -2
- package/dist/{chunk-BSC33FLJ.js → chunk-L5J3S6B6.js} +47 -4
- package/dist/chunk-L5J3S6B6.js.map +1 -0
- package/dist/{chunk-TIOQ7ZFQ.js → chunk-LLOOWRBB.js} +2 -2
- package/dist/{chunk-XMD4SHFI.js → chunk-ND5MJ3AA.js} +2 -2
- package/dist/{chunk-3CWL2LY4.js → chunk-NECTN6N7.js} +2 -2
- package/dist/{chunk-LW4VSTL5.js → chunk-NIJSXVFT.js} +4 -4
- package/dist/chunk-NIJSXVFT.js.map +1 -0
- package/dist/{chunk-I4NEHDSD.js → chunk-NJXNU2G6.js} +17 -11
- package/dist/{chunk-I4NEHDSD.js.map → chunk-NJXNU2G6.js.map} +1 -1
- package/dist/{chunk-JF47LEPU.js → chunk-OKJWBB2K.js} +33 -7
- package/dist/chunk-OKJWBB2K.js.map +1 -0
- package/dist/{chunk-BA7FDXQC.js → chunk-ORO7VAXB.js} +2 -2
- package/dist/{chunk-HZ5DR5MX.js → chunk-OUTF5JFG.js} +3 -3
- package/dist/{chunk-HQSCJYZO.js → chunk-P5T7OZKV.js} +2 -2
- package/dist/{chunk-DKGTQSLR.js → chunk-PTCIM35Y.js} +2 -2
- package/dist/{chunk-KBP7WJQB.js → chunk-PVUZWHNQ.js} +72 -9
- package/dist/chunk-PVUZWHNQ.js.map +1 -0
- package/dist/{chunk-VB6WJJR3.js → chunk-PZXCWSKV.js} +2 -2
- package/dist/{chunk-6DB2B3GF.js → chunk-QVJDPOEB.js} +2 -2
- package/dist/{chunk-G7UTTEBS.js → chunk-R5RIH3N5.js} +3 -3
- package/dist/{chunk-4NBVGARW.js → chunk-RB5CVIK6.js} +2 -2
- package/dist/{chunk-7SDFKGQ4.js → chunk-RZT263H7.js} +2 -2
- package/dist/{chunk-GIJT3A5U.js → chunk-T4DD5YMP.js} +3 -3
- package/dist/{chunk-ALTBBAYU.js → chunk-TUB34FVS.js} +4 -4
- package/dist/{chunk-Y6QAJNKP.js → chunk-TX7LZWZD.js} +3 -3
- package/dist/{chunk-ZPU3WDVK.js → chunk-V7CTQOHG.js} +5 -5
- package/dist/{chunk-AWMFUGVX.js → chunk-VNUNE5AB.js} +3 -3
- package/dist/{chunk-K3PN7TN5.js → chunk-WTOYCUKH.js} +2 -2
- package/dist/{chunk-ULJ5RFOV.js → chunk-XFGAUP5B.js} +2 -2
- package/dist/{chunk-YBP7O5P4.js → chunk-XQIKDODN.js} +2 -2
- package/dist/{chunk-VDHQJ6HD.js → chunk-XTRAI6CL.js} +2 -2
- package/dist/{chunk-MADAAZZV.js → chunk-XVOI4BIS.js} +2 -2
- package/dist/{chunk-E4MDJBLO.js → chunk-ZDNOCKKY.js} +12 -3
- package/dist/{chunk-E4MDJBLO.js.map → chunk-ZDNOCKKY.js.map} +1 -1
- package/dist/{chunk-UC6BWM5J.js → chunk-ZGTCZ6H4.js} +3 -3
- package/dist/{chunk-IM52NHGL.js → chunk-ZJLETAOO.js} +106 -12
- package/dist/chunk-ZJLETAOO.js.map +1 -0
- package/dist/{chunk-MLU6STIN.js → chunk-ZZQXVYUY.js} +2 -2
- package/dist/{claim-V4F5GZJK.js → claim-25JJM4AG.js} +3 -3
- package/dist/cli.js +28 -28
- package/dist/{companies-NJGJ7XNN.js → companies-VR5M5PAN.js} +3 -3
- package/dist/{complete-MGNF5OAK.js → complete-DRMOTC2W.js} +3 -3
- package/dist/{connect-PJOTRTT4.js → connect-WUDJR2GH.js} +10 -6
- package/dist/{conversation-4DM26FRD.js → conversation-K6LYF2ZP.js} +3 -3
- package/dist/{conversion-report-N4HANYOB.js → conversion-report-XQBJ6LG4.js} +2 -2
- package/dist/{conversion-upload-command-TZTHU2CD.js → conversion-upload-command-AUF3LNTH.js} +6 -6
- package/dist/{conversion-writes-LW4HQKK5.js → conversion-writes-UBCVXP2E.js} +3 -3
- package/dist/{conversions-TS723AZV.js → conversions-D236RTUK.js} +5 -5
- package/dist/{conversions-JGECVZSY.js → conversions-GF32XOWY.js} +7 -7
- package/dist/{create-WOHPIGBK.js → create-2D7AIFJI.js} +6 -6
- package/dist/{create-I2KVDTCQ.js → create-4TFAD6HY.js} +3 -3
- package/dist/{create-DSGQFBI7.js → create-IXYXYLLE.js} +2 -2
- package/dist/{create-SBQWVLXG.js → create-PKJVFJMO.js} +3 -3
- package/dist/{creatives-4JGVZQGC.js → creatives-OHCFHRZ5.js} +8 -8
- package/dist/{creatives-DWO5KEQC.js → creatives-QLSZFOMB.js} +10 -10
- package/dist/{creatives-PSWCNY7U.js → creatives-UEPLNCPN.js} +3 -3
- package/dist/{credentials-UULYCN2L.js → credentials-WSLR5VU4.js} +16 -16
- package/dist/credentials-WSLR5VU4.js.map +1 -0
- package/dist/{critique-TIZJ5GFM.js → critique-5PCQ2CJH.js} +6 -6
- package/dist/{critique-NGMZK5LX.js → critique-WDO6SKK2.js} +13 -13
- package/dist/{crm-2WAR565U.js → crm-HNUOHXAN.js} +4 -4
- package/dist/{crm-VDXUO2YU.js → crm-SNIUADNK.js} +7 -7
- package/dist/{custom-conversions-6P555U2K.js → custom-conversions-2VLJGPRV.js} +2 -2
- package/dist/{customers-ATENMXDO.js → customers-72L2KZHO.js} +9 -9
- package/dist/{delete-AVMZYNVT.js → delete-EVGM5B36.js} +3 -3
- package/dist/{delete-H744GNS4.js → delete-PA2GY5EC.js} +3 -3
- package/dist/{delete-OEYPFATY.js → delete-YNNFTFYV.js} +2 -2
- package/dist/{demographics-M5LJF3RZ.js → demographics-SYS2E7QC.js} +3 -3
- package/dist/{discard-72I6SM7G.js → discard-JS2YJUIM.js} +3 -3
- package/dist/{domain-R4EIZD2W.js → domain-XKKH5NCL.js} +3 -3
- package/dist/{draft-YYYRWF7M.js → draft-4AO4YH3V.js} +8 -8
- package/dist/{draft-BV2QRPZ4.js → draft-5YAYCEYY.js} +6 -6
- package/dist/{draft-34C3F5U4.js → draft-GCUXNPVH.js} +3 -3
- package/dist/{draft-THPZFASM.js → draft-MNFJ4G3C.js} +3 -3
- package/dist/{draft-BBFJNZ5X.js → draft-WWWKSEEE.js} +3 -3
- package/dist/engine/index.d.ts +12 -0
- package/dist/engine/index.js +6 -6
- package/dist/{facets-F2H52MS4.js → facets-NVBX5WDT.js} +3 -3
- package/dist/{feedback-IQKKT4MC.js → feedback-OGAPR45R.js} +2 -2
- package/dist/{feedback-record-UZV4Y7UD.js → feedback-record-GVXGDY5Y.js} +15 -15
- package/dist/{fetch-ZUAZPLAE.js → fetch-U4TJIHZU.js} +3 -3
- package/dist/{fit-2CA4JH7N.js → fit-BOQL6OK3.js} +8 -8
- package/dist/{flows-CWXCXEUD.js → flows-XVZJ6GOI.js} +37 -17
- package/dist/flows-XVZJ6GOI.js.map +1 -0
- package/dist/{fonts-F2XUCIIW.js → fonts-64T6KRZS.js} +8 -8
- package/dist/{forecast-IDKJYM2B.js → forecast-YIIGTHRM.js} +3 -3
- package/dist/{funnel-RLGQGYKO.js → funnel-XHDCXXQ5.js} +4 -4
- package/dist/{generate-MMBYB44G.js → generate-3XYYITU6.js} +3 -3
- package/dist/{get-C6UQ22HH.js → get-6RQFDAIN.js} +6 -4
- package/dist/get-6RQFDAIN.js.map +1 -0
- package/dist/{get-EEUR6SAW.js → get-XJ3AZX35.js} +3 -3
- package/dist/{google-35GDU3G3.js → google-M7KEXVK5.js} +8 -8
- package/dist/{google-ads-Q37I2D5P.js → google-ads-7XAGJVNJ.js} +3 -3
- package/dist/{history-4II5QA4B.js → history-EUG4LE44.js} +3 -3
- package/dist/{history-DBIEYQHY.js → history-Q3QCT64S.js} +3 -3
- package/dist/{hubspot-TTITJFBO.js → hubspot-UULVEYVO.js} +7 -7
- package/dist/{ideas-V4Q6JDKV.js → ideas-7LXYXS5G.js} +7 -7
- package/dist/{images-SP5REF6E.js → images-3SOTFMJV.js} +4 -4
- package/dist/{ingest-574GIFAR.js → ingest-HQUXSBWA.js} +2 -2
- package/dist/{ingest-IC4T76W6.js → ingest-HYSZC3EX.js} +3 -3
- package/dist/{insights-ZIU6FJMS.js → insights-LNAXV2CG.js} +2 -2
- package/dist/{inspect-ATHYY6A2.js → inspect-HZQ7GSVM.js} +5 -5
- package/dist/{keyword-metrics-J4UPUDN7.js → keyword-metrics-YG3K7MQZ.js} +3 -3
- package/dist/{keywords-for-site-MWADFEO2.js → keywords-for-site-V4K744TF.js} +3 -3
- package/dist/{landing-R6DN7XLK.js → landing-3SSX6WK6.js} +2 -2
- package/dist/{leads-7EVHMNUF.js → leads-ARUWPHBM.js} +6 -6
- package/dist/{leads-JM6HUERX.js → leads-FAHQ6KJX.js} +3 -3
- package/dist/{learn-LGS2F5TR.js → learn-XNHGNQE5.js} +11 -11
- package/dist/{line-item-writes-KUYEXSIH.js → line-item-writes-A6BPZQPL.js} +3 -3
- package/dist/{line-items-GIWLP3FL.js → line-items-J7PXJHMD.js} +5 -5
- package/dist/{link-PVM7XJQI.js → link-4GGAQAVH.js} +3 -3
- package/dist/{linkedin-WX54EAX6.js → linkedin-I6JDSTRB.js} +30 -30
- package/dist/{list-MCEFXC6L.js → list-22HZ2S4W.js} +3 -3
- package/dist/{list-WR7QYTON.js → list-AQMGXI4N.js} +3 -3
- package/dist/{list-4ZKQZBCL.js → list-KAJZFHMN.js} +2 -2
- package/dist/{locations-74TPQWAT.js → locations-2NKBJKBT.js} +2 -2
- package/dist/{log-U6IWZGOF.js → log-MUPKKYSJ.js} +3 -3
- package/dist/{make-RXFHEGUI.js → make-3FO76LA7.js} +22 -22
- package/dist/{map-TWL7T4KP.js → map-F4LXTAJV.js} +4 -4
- package/dist/{mcp-HVAVJGGS.js → mcp-NLAQJWG6.js} +2 -2
- package/dist/{media-M7E6V2XU.js → media-53DJRC4N.js} +2 -2
- package/dist/{media-sources-JWGO23BZ.js → media-sources-W2CQFSVQ.js} +2 -2
- package/dist/{members-5FAW4YE7.js → members-3U6GINDF.js} +3 -3
- package/dist/{meta-EZ4SY25M.js → meta-A7KM6TF5.js} +10 -10
- package/dist/{models-7U3GRYHF.js → models-3Z6MDHQW.js} +2 -2
- package/dist/{normalize-GW4GZNVY.js → normalize-FQ6WP5E4.js} +3 -3
- package/dist/{options-NSUCENLU.js → options-K6FNT5A3.js} +6 -6
- package/dist/{performance-FGCDWHMC.js → performance-ZA7VCHOU.js} +4 -4
- package/dist/{pixels-45A55MOP.js → pixels-TZPF746S.js} +3 -3
- package/dist/{promoted-tweet-writes-BPWTDESL.js → promoted-tweet-writes-4H3ZFD6O.js} +3 -3
- package/dist/{promoted-tweets-OS3NHYVE.js → promoted-tweets-MCMKPIHM.js} +3 -3
- package/dist/{publish-SXZEWBVJ.js → publish-CW5YSAAL.js} +5 -5
- package/dist/{reddit-TF6K37SB.js → reddit-P7LLO4TK.js} +4 -4
- package/dist/{refresh-APVDWXRZ.js → refresh-IGHEOA6Y.js} +2 -2
- package/dist/{release-32SEJU4L.js → release-C74JOYDA.js} +3 -3
- package/dist/{remove-U64GTHLQ.js → remove-HPN62MPQ.js} +2 -2
- package/dist/{reopen-5VS233SF.js → reopen-XI53RP7R.js} +3 -3
- package/dist/{rerun-7Z45QOOO.js → rerun-2ITYGAIT.js} +22 -22
- package/dist/{research-QYSQ6LW4.js → research-HAHUTFVJ.js} +2 -2
- package/dist/{research-O7CJV5IS.js → research-O6QXFCD7.js} +10 -10
- package/dist/{reset-47B5VPT4.js → reset-BISRUHT4.js} +2 -2
- package/dist/{reset-22FC7BXQ.js → reset-YMKVEOS4.js} +2 -2
- package/dist/{resolve-7KQGVTQT.js → resolve-D2VESQ45.js} +3 -3
- package/dist/{retry-J5UVLS72.js → retry-CGBATPQX.js} +2 -2
- package/dist/{retry-UJ5UF4BM.js → retry-SUKRXBHX.js} +2 -2
- package/dist/{run-SI4FA32F.js → run-BFERU46Q.js} +3 -3
- package/dist/{run-TFLFBQU2.js → run-HSZFWRYZ.js} +22 -22
- package/dist/{scaffold-ad-SEXNE2K6.js → scaffold-ad-BYQYVB2C.js} +21 -21
- package/dist/{scaffold-static-ad-VBOL6CLN.js → scaffold-static-ad-5MXVTMEE.js} +27 -27
- package/dist/{scaffold-video-Z37MIBDI.js → scaffold-video-KEIHX3UD.js} +19 -19
- package/dist/{schedule-52ZM4KRQ.js → schedule-XJ24PL3K.js} +2 -2
- package/dist/{scheduled-agents-PCWCQAKP.js → scheduled-agents-HWEKBANT.js} +11 -11
- package/dist/{schema-FY6ORDXZ.js → schema-TAAAJHOJ.js} +4 -4
- package/dist/{search-NS7XNRZC.js → search-NVCIIGQS.js} +2 -2
- package/dist/{select-4XCYVV2G.js → select-K3EMTTI3.js} +15 -15
- package/dist/{set-prompt-TRJBYA3D.js → set-prompt-PY7FWYX6.js} +14 -14
- package/dist/{setup-links-V3URI7DL.js → setup-links-5ZCASHAL.js} +3 -3
- package/dist/{site-WIQ7SSU3.js → site-7PSCHITE.js} +4 -4
- package/dist/{sources-DWJXOLEH.js → sources-GEB6OEGY.js} +6 -6
- package/dist/{sources-L453U5MT.js → sources-ICMUQMCJ.js} +6 -6
- package/dist/{stale-6OVG6VME.js → stale-KBY5WARW.js} +14 -14
- package/dist/{status-WXWU54WR.js → status-ZX5WM5PJ.js} +3 -3
- package/dist/{studio-C5K3YX3P.js → studio-RA7QQH4O.js} +4 -4
- package/dist/{sync-CDZUTGV3.js → sync-TZNIPZRX.js} +2 -2
- package/dist/{sync-definition-BAJQUBE3.js → sync-definition-ADXXWWV5.js} +17 -17
- package/dist/{tags-6RY23XOG.js → tags-4OZCALA3.js} +3 -3
- package/dist/{tags-SG3NVC3J.js → tags-4PXXFIPU.js} +4 -4
- package/dist/{tags-VN5HTL35.js → tags-KFVUEPL6.js} +3 -3
- package/dist/{tags-BHFQWNPL.js → tags-TESETZGC.js} +2 -2
- package/dist/{tags-WR6PDIDR.js → tags-WIMUIZHU.js} +3 -3
- package/dist/{targeting-criteria-5EXP2NXF.js → targeting-criteria-VRI7V6C5.js} +3 -3
- package/dist/{targets-WUVEJPSD.js → targets-ERVS2VEU.js} +3 -3
- package/dist/{templates-LOJQX2NG.js → templates-TE6LBUIP.js} +3 -3
- package/dist/{testimonials-6M5DXORT.js → testimonials-FV7KPAPK.js} +6 -6
- package/dist/{top-companies-E2OMMPSV.js → top-companies-B5M43KGJ.js} +3 -3
- package/dist/{translate-AW4CUKDA.js → translate-OKADZCBC.js} +20 -20
- package/dist/{triggers-MRXIDCSN.js → triggers-JLJQOSKI.js} +3 -3
- package/dist/{unlink-HNL747YM.js → unlink-KMWDKVIC.js} +3 -3
- package/dist/{unstage-OL2JDCLK.js → unstage-M4IQKJIO.js} +3 -3
- package/dist/{update-RTTC3SAK.js → update-5MBR4TPK.js} +2 -2
- package/dist/{update-4KGIT4BF.js → update-AHDGHOCP.js} +3 -3
- package/dist/{update-YNNRX5B2.js → update-K6LFJHNI.js} +3 -3
- package/dist/{update-JPBUF7M2.js → update-PNRNYXUW.js} +3 -3
- package/dist/{upload-UIXPCSXJ.js → upload-KAQC4AH7.js} +3 -3
- package/dist/{url-params-K47CE7Y5.js → url-params-SM32OOXZ.js} +3 -3
- package/dist/{validate-TD2BY4VE.js → validate-NCTK5BXD.js} +15 -15
- package/dist/{videos-BP3BKNTY.js → videos-A32DPGHD.js} +5 -5
- package/dist/{viewer-check-HFRUJ4ZU.js → viewer-check-L4B4LIAX.js} +7 -7
- package/dist/{web-RPSGFN4U.js → web-TZEIFUYY.js} +3 -3
- package/dist/{winning-ads-WUENRDVJ.js → winning-ads-THIR7E5S.js} +3 -3
- package/dist/{write-commands-4WARNR2T.js → write-commands-CE4FIQ6Y.js} +8 -8
- package/dist/{write-commands-TAYGTJEZ.js → write-commands-CT74VHH6.js} +6 -6
- package/dist/{x-VZCELH3P.js → x-YXABYM5U.js} +6 -6
- package/package.json +1 -1
- package/dist/add-OGH4DZZ5.js.map +0 -1
- package/dist/chunk-5R5ADJ47.js.map +0 -1
- package/dist/chunk-BSC33FLJ.js.map +0 -1
- package/dist/chunk-CHSNHVYF.js.map +0 -1
- package/dist/chunk-IM52NHGL.js.map +0 -1
- package/dist/chunk-JF47LEPU.js.map +0 -1
- package/dist/chunk-KBP7WJQB.js.map +0 -1
- package/dist/chunk-KLBTXETO.js.map +0 -1
- package/dist/chunk-LW4VSTL5.js.map +0 -1
- package/dist/chunk-NDXBU22S.js.map +0 -1
- package/dist/chunk-OTFHEHIU.js.map +0 -1
- package/dist/chunk-YPZYOJP6.js.map +0 -1
- package/dist/credentials-UULYCN2L.js.map +0 -1
- package/dist/flows-CWXCXEUD.js.map +0 -1
- package/dist/get-C6UQ22HH.js.map +0 -1
- /package/dist/{account-F6MHQ64I.js.map → account-4H7QVBRK.js.map} +0 -0
- /package/dist/{account-2ZMZFPIU.js.map → account-DTHGTZCN.js.map} +0 -0
- /package/dist/{account-writes-ISE4U2FQ.js.map → account-writes-AK42HGRM.js.map} +0 -0
- /package/dist/{accounts-VINHZRWA.js.map → accounts-5RLG6BBA.js.map} +0 -0
- /package/dist/{accounts-RHGN5WMU.js.map → accounts-6LSBBXKA.js.map} +0 -0
- /package/dist/{actions-5F4ZP6M4.js.map → actions-WH5C6Q7I.js.map} +0 -0
- /package/dist/{ad-group-writes-UU5NNKSO.js.map → ad-group-writes-QQS4223F.js.map} +0 -0
- /package/dist/{ad-groups-CGFXZNIA.js.map → ad-groups-WGPDPUI2.js.map} +0 -0
- /package/dist/{ad-writes-NALDYWOR.js.map → ad-writes-XE2IE4DS.js.map} +0 -0
- /package/dist/{add-KBPMSK2P.js.map → add-BZ4QPLK4.js.map} +0 -0
- /package/dist/{ads-H7GH7A26.js.map → ads-6UEDYT3O.js.map} +0 -0
- /package/dist/{ads-56OWZBXZ.js.map → ads-6UG66KA5.js.map} +0 -0
- /package/dist/{ads-PV7GZXPR.js.map → ads-BCOSQALY.js.map} +0 -0
- /package/dist/{adsets-H7QT42U6.js.map → adsets-Q5DWGANV.js.map} +0 -0
- /package/dist/{advertisers-PM4WPG4N.js.map → advertisers-OABQDELT.js.map} +0 -0
- /package/dist/{analytics-JVZKN735.js.map → analytics-3YAWQF5K.js.map} +0 -0
- /package/dist/{analytics-5FALU2GL.js.map → analytics-BCZGSSXP.js.map} +0 -0
- /package/dist/{animate-FWWHSYPL.js.map → animate-AIZ3GS4J.js.map} +0 -0
- /package/dist/{assign-KLYZ6USE.js.map → assign-O6QNAZD5.js.map} +0 -0
- /package/dist/{audience-size-JHB42DB4.js.map → audience-size-CXPWERR3.js.map} +0 -0
- /package/dist/{audiences-JACGRBNN.js.map → audiences-AMRFZRZ7.js.map} +0 -0
- /package/dist/{audiences-VEKGLWBG.js.map → audiences-TGD5US2M.js.map} +0 -0
- /package/dist/{audit-5XH7WZIM.js.map → audit-MNOQK3U4.js.map} +0 -0
- /package/dist/{autocomplete-7F3PZLEY.js.map → autocomplete-TRCMPNW4.js.map} +0 -0
- /package/dist/{avatars-N4SRNQI7.js.map → avatars-P3WX5TQP.js.map} +0 -0
- /package/dist/{bid-pricing-VYLVGU26.js.map → bid-pricing-6XXSM7C2.js.map} +0 -0
- /package/dist/{brand-ASBS2HZM.js.map → brand-LXU7YNCF.js.map} +0 -0
- /package/dist/{brief-JSZKDPGU.js.map → brief-Y4F37TH5.js.map} +0 -0
- /package/dist/{campaign-groups-ATE2DE4V.js.map → campaign-groups-CEAM3WRO.js.map} +0 -0
- /package/dist/{campaign-writes-ETT57KLQ.js.map → campaign-writes-D6BJAULL.js.map} +0 -0
- /package/dist/{campaign-writes-SX52CJYW.js.map → campaign-writes-SXLZFYF6.js.map} +0 -0
- /package/dist/{campaigns-J6VZBIV6.js.map → campaigns-CXOKBCPS.js.map} +0 -0
- /package/dist/{campaigns-WBEG5QA4.js.map → campaigns-D6B6Z67Y.js.map} +0 -0
- /package/dist/{campaigns-FGBAS6AZ.js.map → campaigns-V3SWBM4E.js.map} +0 -0
- /package/dist/{campaigns-X3DPCCSN.js.map → campaigns-YS3OGQXO.js.map} +0 -0
- /package/dist/{canvas-K7IN7HLO.js.map → canvas-VH3Q26TK.js.map} +0 -0
- /package/dist/{capabilities-RDAERPYY.js.map → capabilities-NZPSSS6T.js.map} +0 -0
- /package/dist/{catalog-MENVHL5U.js.map → catalog-GWN3WT7J.js.map} +0 -0
- /package/dist/{catalogs-G3YEVG6S.js.map → catalogs-BRXEDE56.js.map} +0 -0
- /package/dist/{chatgpt-QNUN63YS.js.map → chatgpt-7W75X3ER.js.map} +0 -0
- /package/dist/{chats-YIAQGQ3X.js.map → chats-GN3PBFX4.js.map} +0 -0
- /package/dist/{chunk-U3HAMW5W.js.map → chunk-2BKVVCCV.js.map} +0 -0
- /package/dist/{chunk-EH4C4CZK.js.map → chunk-2GTYAHDN.js.map} +0 -0
- /package/dist/{chunk-SB3GZFCV.js.map → chunk-3OFVFHKT.js.map} +0 -0
- /package/dist/{chunk-U6SYRIOB.js.map → chunk-4QEY2L6U.js.map} +0 -0
- /package/dist/{chunk-PDTB5EX6.js.map → chunk-4Z7DEN75.js.map} +0 -0
- /package/dist/{chunk-KNWHUMVZ.js.map → chunk-6Y7SIP2D.js.map} +0 -0
- /package/dist/{chunk-VAISMQQB.js.map → chunk-7ED5TAFP.js.map} +0 -0
- /package/dist/{chunk-35XWJEWH.js.map → chunk-7J6EHOH6.js.map} +0 -0
- /package/dist/{chunk-YC2TQ3VC.js.map → chunk-CFHIW5QZ.js.map} +0 -0
- /package/dist/{chunk-GATKK4RJ.js.map → chunk-D6744YSX.js.map} +0 -0
- /package/dist/{chunk-ANCSKUWI.js.map → chunk-DQMZXK27.js.map} +0 -0
- /package/dist/{chunk-HIPDMQZ6.js.map → chunk-DZSIUEGH.js.map} +0 -0
- /package/dist/{chunk-T3BDNJIX.js.map → chunk-E4NCRGY3.js.map} +0 -0
- /package/dist/{chunk-2GK33EJV.js.map → chunk-ESB5DLIP.js.map} +0 -0
- /package/dist/{chunk-ACANMASG.js.map → chunk-FVF5SXTZ.js.map} +0 -0
- /package/dist/{chunk-VMDAXFRI.js.map → chunk-GYU7BWEN.js.map} +0 -0
- /package/dist/{chunk-KQTYTCKQ.js.map → chunk-HZUDRKGR.js.map} +0 -0
- /package/dist/{chunk-DR34ZTWD.js.map → chunk-IGQZ5U3C.js.map} +0 -0
- /package/dist/{chunk-65RIB7A6.js.map → chunk-IYU4X5A7.js.map} +0 -0
- /package/dist/{chunk-FXED3VZK.js.map → chunk-L27H2R2N.js.map} +0 -0
- /package/dist/{chunk-TIOQ7ZFQ.js.map → chunk-LLOOWRBB.js.map} +0 -0
- /package/dist/{chunk-XMD4SHFI.js.map → chunk-ND5MJ3AA.js.map} +0 -0
- /package/dist/{chunk-3CWL2LY4.js.map → chunk-NECTN6N7.js.map} +0 -0
- /package/dist/{chunk-BA7FDXQC.js.map → chunk-ORO7VAXB.js.map} +0 -0
- /package/dist/{chunk-HZ5DR5MX.js.map → chunk-OUTF5JFG.js.map} +0 -0
- /package/dist/{chunk-HQSCJYZO.js.map → chunk-P5T7OZKV.js.map} +0 -0
- /package/dist/{chunk-DKGTQSLR.js.map → chunk-PTCIM35Y.js.map} +0 -0
- /package/dist/{chunk-VB6WJJR3.js.map → chunk-PZXCWSKV.js.map} +0 -0
- /package/dist/{chunk-6DB2B3GF.js.map → chunk-QVJDPOEB.js.map} +0 -0
- /package/dist/{chunk-G7UTTEBS.js.map → chunk-R5RIH3N5.js.map} +0 -0
- /package/dist/{chunk-4NBVGARW.js.map → chunk-RB5CVIK6.js.map} +0 -0
- /package/dist/{chunk-7SDFKGQ4.js.map → chunk-RZT263H7.js.map} +0 -0
- /package/dist/{chunk-GIJT3A5U.js.map → chunk-T4DD5YMP.js.map} +0 -0
- /package/dist/{chunk-ALTBBAYU.js.map → chunk-TUB34FVS.js.map} +0 -0
- /package/dist/{chunk-Y6QAJNKP.js.map → chunk-TX7LZWZD.js.map} +0 -0
- /package/dist/{chunk-ZPU3WDVK.js.map → chunk-V7CTQOHG.js.map} +0 -0
- /package/dist/{chunk-AWMFUGVX.js.map → chunk-VNUNE5AB.js.map} +0 -0
- /package/dist/{chunk-K3PN7TN5.js.map → chunk-WTOYCUKH.js.map} +0 -0
- /package/dist/{chunk-ULJ5RFOV.js.map → chunk-XFGAUP5B.js.map} +0 -0
- /package/dist/{chunk-YBP7O5P4.js.map → chunk-XQIKDODN.js.map} +0 -0
- /package/dist/{chunk-VDHQJ6HD.js.map → chunk-XTRAI6CL.js.map} +0 -0
- /package/dist/{chunk-MADAAZZV.js.map → chunk-XVOI4BIS.js.map} +0 -0
- /package/dist/{chunk-UC6BWM5J.js.map → chunk-ZGTCZ6H4.js.map} +0 -0
- /package/dist/{chunk-MLU6STIN.js.map → chunk-ZZQXVYUY.js.map} +0 -0
- /package/dist/{claim-V4F5GZJK.js.map → claim-25JJM4AG.js.map} +0 -0
- /package/dist/{companies-NJGJ7XNN.js.map → companies-VR5M5PAN.js.map} +0 -0
- /package/dist/{complete-MGNF5OAK.js.map → complete-DRMOTC2W.js.map} +0 -0
- /package/dist/{connect-PJOTRTT4.js.map → connect-WUDJR2GH.js.map} +0 -0
- /package/dist/{conversation-4DM26FRD.js.map → conversation-K6LYF2ZP.js.map} +0 -0
- /package/dist/{conversion-report-N4HANYOB.js.map → conversion-report-XQBJ6LG4.js.map} +0 -0
- /package/dist/{conversion-upload-command-TZTHU2CD.js.map → conversion-upload-command-AUF3LNTH.js.map} +0 -0
- /package/dist/{conversion-writes-LW4HQKK5.js.map → conversion-writes-UBCVXP2E.js.map} +0 -0
- /package/dist/{conversions-TS723AZV.js.map → conversions-D236RTUK.js.map} +0 -0
- /package/dist/{conversions-JGECVZSY.js.map → conversions-GF32XOWY.js.map} +0 -0
- /package/dist/{create-WOHPIGBK.js.map → create-2D7AIFJI.js.map} +0 -0
- /package/dist/{create-I2KVDTCQ.js.map → create-4TFAD6HY.js.map} +0 -0
- /package/dist/{create-DSGQFBI7.js.map → create-IXYXYLLE.js.map} +0 -0
- /package/dist/{create-SBQWVLXG.js.map → create-PKJVFJMO.js.map} +0 -0
- /package/dist/{creatives-4JGVZQGC.js.map → creatives-OHCFHRZ5.js.map} +0 -0
- /package/dist/{creatives-DWO5KEQC.js.map → creatives-QLSZFOMB.js.map} +0 -0
- /package/dist/{creatives-PSWCNY7U.js.map → creatives-UEPLNCPN.js.map} +0 -0
- /package/dist/{critique-TIZJ5GFM.js.map → critique-5PCQ2CJH.js.map} +0 -0
- /package/dist/{critique-NGMZK5LX.js.map → critique-WDO6SKK2.js.map} +0 -0
- /package/dist/{crm-2WAR565U.js.map → crm-HNUOHXAN.js.map} +0 -0
- /package/dist/{crm-VDXUO2YU.js.map → crm-SNIUADNK.js.map} +0 -0
- /package/dist/{custom-conversions-6P555U2K.js.map → custom-conversions-2VLJGPRV.js.map} +0 -0
- /package/dist/{customers-ATENMXDO.js.map → customers-72L2KZHO.js.map} +0 -0
- /package/dist/{delete-AVMZYNVT.js.map → delete-EVGM5B36.js.map} +0 -0
- /package/dist/{delete-H744GNS4.js.map → delete-PA2GY5EC.js.map} +0 -0
- /package/dist/{delete-OEYPFATY.js.map → delete-YNNFTFYV.js.map} +0 -0
- /package/dist/{demographics-M5LJF3RZ.js.map → demographics-SYS2E7QC.js.map} +0 -0
- /package/dist/{discard-72I6SM7G.js.map → discard-JS2YJUIM.js.map} +0 -0
- /package/dist/{domain-R4EIZD2W.js.map → domain-XKKH5NCL.js.map} +0 -0
- /package/dist/{draft-YYYRWF7M.js.map → draft-4AO4YH3V.js.map} +0 -0
- /package/dist/{draft-BV2QRPZ4.js.map → draft-5YAYCEYY.js.map} +0 -0
- /package/dist/{draft-34C3F5U4.js.map → draft-GCUXNPVH.js.map} +0 -0
- /package/dist/{draft-THPZFASM.js.map → draft-MNFJ4G3C.js.map} +0 -0
- /package/dist/{draft-BBFJNZ5X.js.map → draft-WWWKSEEE.js.map} +0 -0
- /package/dist/{facets-F2H52MS4.js.map → facets-NVBX5WDT.js.map} +0 -0
- /package/dist/{feedback-IQKKT4MC.js.map → feedback-OGAPR45R.js.map} +0 -0
- /package/dist/{feedback-record-UZV4Y7UD.js.map → feedback-record-GVXGDY5Y.js.map} +0 -0
- /package/dist/{fetch-ZUAZPLAE.js.map → fetch-U4TJIHZU.js.map} +0 -0
- /package/dist/{fit-2CA4JH7N.js.map → fit-BOQL6OK3.js.map} +0 -0
- /package/dist/{fonts-F2XUCIIW.js.map → fonts-64T6KRZS.js.map} +0 -0
- /package/dist/{forecast-IDKJYM2B.js.map → forecast-YIIGTHRM.js.map} +0 -0
- /package/dist/{funnel-RLGQGYKO.js.map → funnel-XHDCXXQ5.js.map} +0 -0
- /package/dist/{generate-MMBYB44G.js.map → generate-3XYYITU6.js.map} +0 -0
- /package/dist/{get-EEUR6SAW.js.map → get-XJ3AZX35.js.map} +0 -0
- /package/dist/{google-35GDU3G3.js.map → google-M7KEXVK5.js.map} +0 -0
- /package/dist/{google-ads-Q37I2D5P.js.map → google-ads-7XAGJVNJ.js.map} +0 -0
- /package/dist/{history-4II5QA4B.js.map → history-EUG4LE44.js.map} +0 -0
- /package/dist/{history-DBIEYQHY.js.map → history-Q3QCT64S.js.map} +0 -0
- /package/dist/{hubspot-TTITJFBO.js.map → hubspot-UULVEYVO.js.map} +0 -0
- /package/dist/{ideas-V4Q6JDKV.js.map → ideas-7LXYXS5G.js.map} +0 -0
- /package/dist/{images-SP5REF6E.js.map → images-3SOTFMJV.js.map} +0 -0
- /package/dist/{ingest-574GIFAR.js.map → ingest-HQUXSBWA.js.map} +0 -0
- /package/dist/{ingest-IC4T76W6.js.map → ingest-HYSZC3EX.js.map} +0 -0
- /package/dist/{insights-ZIU6FJMS.js.map → insights-LNAXV2CG.js.map} +0 -0
- /package/dist/{inspect-ATHYY6A2.js.map → inspect-HZQ7GSVM.js.map} +0 -0
- /package/dist/{keyword-metrics-J4UPUDN7.js.map → keyword-metrics-YG3K7MQZ.js.map} +0 -0
- /package/dist/{keywords-for-site-MWADFEO2.js.map → keywords-for-site-V4K744TF.js.map} +0 -0
- /package/dist/{landing-R6DN7XLK.js.map → landing-3SSX6WK6.js.map} +0 -0
- /package/dist/{leads-7EVHMNUF.js.map → leads-ARUWPHBM.js.map} +0 -0
- /package/dist/{leads-JM6HUERX.js.map → leads-FAHQ6KJX.js.map} +0 -0
- /package/dist/{learn-LGS2F5TR.js.map → learn-XNHGNQE5.js.map} +0 -0
- /package/dist/{line-item-writes-KUYEXSIH.js.map → line-item-writes-A6BPZQPL.js.map} +0 -0
- /package/dist/{line-items-GIWLP3FL.js.map → line-items-J7PXJHMD.js.map} +0 -0
- /package/dist/{link-PVM7XJQI.js.map → link-4GGAQAVH.js.map} +0 -0
- /package/dist/{linkedin-WX54EAX6.js.map → linkedin-I6JDSTRB.js.map} +0 -0
- /package/dist/{list-MCEFXC6L.js.map → list-22HZ2S4W.js.map} +0 -0
- /package/dist/{list-WR7QYTON.js.map → list-AQMGXI4N.js.map} +0 -0
- /package/dist/{list-4ZKQZBCL.js.map → list-KAJZFHMN.js.map} +0 -0
- /package/dist/{locations-74TPQWAT.js.map → locations-2NKBJKBT.js.map} +0 -0
- /package/dist/{log-U6IWZGOF.js.map → log-MUPKKYSJ.js.map} +0 -0
- /package/dist/{make-RXFHEGUI.js.map → make-3FO76LA7.js.map} +0 -0
- /package/dist/{map-TWL7T4KP.js.map → map-F4LXTAJV.js.map} +0 -0
- /package/dist/{mcp-HVAVJGGS.js.map → mcp-NLAQJWG6.js.map} +0 -0
- /package/dist/{media-M7E6V2XU.js.map → media-53DJRC4N.js.map} +0 -0
- /package/dist/{media-sources-JWGO23BZ.js.map → media-sources-W2CQFSVQ.js.map} +0 -0
- /package/dist/{members-5FAW4YE7.js.map → members-3U6GINDF.js.map} +0 -0
- /package/dist/{meta-EZ4SY25M.js.map → meta-A7KM6TF5.js.map} +0 -0
- /package/dist/{models-7U3GRYHF.js.map → models-3Z6MDHQW.js.map} +0 -0
- /package/dist/{normalize-GW4GZNVY.js.map → normalize-FQ6WP5E4.js.map} +0 -0
- /package/dist/{options-NSUCENLU.js.map → options-K6FNT5A3.js.map} +0 -0
- /package/dist/{performance-FGCDWHMC.js.map → performance-ZA7VCHOU.js.map} +0 -0
- /package/dist/{pixels-45A55MOP.js.map → pixels-TZPF746S.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-BPWTDESL.js.map → promoted-tweet-writes-4H3ZFD6O.js.map} +0 -0
- /package/dist/{promoted-tweets-OS3NHYVE.js.map → promoted-tweets-MCMKPIHM.js.map} +0 -0
- /package/dist/{publish-SXZEWBVJ.js.map → publish-CW5YSAAL.js.map} +0 -0
- /package/dist/{reddit-TF6K37SB.js.map → reddit-P7LLO4TK.js.map} +0 -0
- /package/dist/{refresh-APVDWXRZ.js.map → refresh-IGHEOA6Y.js.map} +0 -0
- /package/dist/{release-32SEJU4L.js.map → release-C74JOYDA.js.map} +0 -0
- /package/dist/{remove-U64GTHLQ.js.map → remove-HPN62MPQ.js.map} +0 -0
- /package/dist/{reopen-5VS233SF.js.map → reopen-XI53RP7R.js.map} +0 -0
- /package/dist/{rerun-7Z45QOOO.js.map → rerun-2ITYGAIT.js.map} +0 -0
- /package/dist/{research-QYSQ6LW4.js.map → research-HAHUTFVJ.js.map} +0 -0
- /package/dist/{research-O7CJV5IS.js.map → research-O6QXFCD7.js.map} +0 -0
- /package/dist/{reset-47B5VPT4.js.map → reset-BISRUHT4.js.map} +0 -0
- /package/dist/{reset-22FC7BXQ.js.map → reset-YMKVEOS4.js.map} +0 -0
- /package/dist/{resolve-7KQGVTQT.js.map → resolve-D2VESQ45.js.map} +0 -0
- /package/dist/{retry-J5UVLS72.js.map → retry-CGBATPQX.js.map} +0 -0
- /package/dist/{retry-UJ5UF4BM.js.map → retry-SUKRXBHX.js.map} +0 -0
- /package/dist/{run-SI4FA32F.js.map → run-BFERU46Q.js.map} +0 -0
- /package/dist/{run-TFLFBQU2.js.map → run-HSZFWRYZ.js.map} +0 -0
- /package/dist/{scaffold-ad-SEXNE2K6.js.map → scaffold-ad-BYQYVB2C.js.map} +0 -0
- /package/dist/{scaffold-static-ad-VBOL6CLN.js.map → scaffold-static-ad-5MXVTMEE.js.map} +0 -0
- /package/dist/{scaffold-video-Z37MIBDI.js.map → scaffold-video-KEIHX3UD.js.map} +0 -0
- /package/dist/{schedule-52ZM4KRQ.js.map → schedule-XJ24PL3K.js.map} +0 -0
- /package/dist/{scheduled-agents-PCWCQAKP.js.map → scheduled-agents-HWEKBANT.js.map} +0 -0
- /package/dist/{schema-FY6ORDXZ.js.map → schema-TAAAJHOJ.js.map} +0 -0
- /package/dist/{search-NS7XNRZC.js.map → search-NVCIIGQS.js.map} +0 -0
- /package/dist/{select-4XCYVV2G.js.map → select-K3EMTTI3.js.map} +0 -0
- /package/dist/{set-prompt-TRJBYA3D.js.map → set-prompt-PY7FWYX6.js.map} +0 -0
- /package/dist/{setup-links-V3URI7DL.js.map → setup-links-5ZCASHAL.js.map} +0 -0
- /package/dist/{site-WIQ7SSU3.js.map → site-7PSCHITE.js.map} +0 -0
- /package/dist/{sources-DWJXOLEH.js.map → sources-GEB6OEGY.js.map} +0 -0
- /package/dist/{sources-L453U5MT.js.map → sources-ICMUQMCJ.js.map} +0 -0
- /package/dist/{stale-6OVG6VME.js.map → stale-KBY5WARW.js.map} +0 -0
- /package/dist/{status-WXWU54WR.js.map → status-ZX5WM5PJ.js.map} +0 -0
- /package/dist/{studio-C5K3YX3P.js.map → studio-RA7QQH4O.js.map} +0 -0
- /package/dist/{sync-CDZUTGV3.js.map → sync-TZNIPZRX.js.map} +0 -0
- /package/dist/{sync-definition-BAJQUBE3.js.map → sync-definition-ADXXWWV5.js.map} +0 -0
- /package/dist/{tags-6RY23XOG.js.map → tags-4OZCALA3.js.map} +0 -0
- /package/dist/{tags-SG3NVC3J.js.map → tags-4PXXFIPU.js.map} +0 -0
- /package/dist/{tags-VN5HTL35.js.map → tags-KFVUEPL6.js.map} +0 -0
- /package/dist/{tags-BHFQWNPL.js.map → tags-TESETZGC.js.map} +0 -0
- /package/dist/{tags-WR6PDIDR.js.map → tags-WIMUIZHU.js.map} +0 -0
- /package/dist/{targeting-criteria-5EXP2NXF.js.map → targeting-criteria-VRI7V6C5.js.map} +0 -0
- /package/dist/{targets-WUVEJPSD.js.map → targets-ERVS2VEU.js.map} +0 -0
- /package/dist/{templates-LOJQX2NG.js.map → templates-TE6LBUIP.js.map} +0 -0
- /package/dist/{testimonials-6M5DXORT.js.map → testimonials-FV7KPAPK.js.map} +0 -0
- /package/dist/{top-companies-E2OMMPSV.js.map → top-companies-B5M43KGJ.js.map} +0 -0
- /package/dist/{translate-AW4CUKDA.js.map → translate-OKADZCBC.js.map} +0 -0
- /package/dist/{triggers-MRXIDCSN.js.map → triggers-JLJQOSKI.js.map} +0 -0
- /package/dist/{unlink-HNL747YM.js.map → unlink-KMWDKVIC.js.map} +0 -0
- /package/dist/{unstage-OL2JDCLK.js.map → unstage-M4IQKJIO.js.map} +0 -0
- /package/dist/{update-RTTC3SAK.js.map → update-5MBR4TPK.js.map} +0 -0
- /package/dist/{update-4KGIT4BF.js.map → update-AHDGHOCP.js.map} +0 -0
- /package/dist/{update-YNNRX5B2.js.map → update-K6LFJHNI.js.map} +0 -0
- /package/dist/{update-JPBUF7M2.js.map → update-PNRNYXUW.js.map} +0 -0
- /package/dist/{upload-UIXPCSXJ.js.map → upload-KAQC4AH7.js.map} +0 -0
- /package/dist/{url-params-K47CE7Y5.js.map → url-params-SM32OOXZ.js.map} +0 -0
- /package/dist/{validate-TD2BY4VE.js.map → validate-NCTK5BXD.js.map} +0 -0
- /package/dist/{videos-BP3BKNTY.js.map → videos-A32DPGHD.js.map} +0 -0
- /package/dist/{viewer-check-HFRUJ4ZU.js.map → viewer-check-L4B4LIAX.js.map} +0 -0
- /package/dist/{web-RPSGFN4U.js.map → web-TZEIFUYY.js.map} +0 -0
- /package/dist/{winning-ads-WUENRDVJ.js.map → winning-ads-THIR7E5S.js.map} +0 -0
- /package/dist/{write-commands-4WARNR2T.js.map → write-commands-CE4FIQ6Y.js.map} +0 -0
- /package/dist/{write-commands-TAYGTJEZ.js.map → write-commands-CT74VHH6.js.map} +0 -0
- /package/dist/{x-VZCELH3P.js.map → x-YXABYM5U.js.map} +0 -0
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
adCopyHints,
|
|
10
10
|
booleanWordPositionalError,
|
|
11
11
|
capabilityFix
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-T4DD5YMP.js";
|
|
13
13
|
import {
|
|
14
14
|
withHints
|
|
15
15
|
} from "./chunk-D5FY4FAK.js";
|
|
@@ -171,4 +171,4 @@ export {
|
|
|
171
171
|
stageOp,
|
|
172
172
|
stageStatusChange
|
|
173
173
|
};
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
174
|
+
//# sourceMappingURL=chunk-L27H2R2N.js.map
|
|
@@ -4,8 +4,9 @@ import {
|
|
|
4
4
|
FLOW_RESOURCE_NODE_TYPES,
|
|
5
5
|
FLOW_SECRET_FIELDS,
|
|
6
6
|
FLOW_SECRET_SIDE_EFFECT_TYPES,
|
|
7
|
+
flowCatalogEntry,
|
|
7
8
|
isFlowOauthSideEffect
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-K6WVV74H.js";
|
|
9
10
|
import {
|
|
10
11
|
writeJson
|
|
11
12
|
} from "./chunk-NU7JSWVA.js";
|
|
@@ -60,6 +61,26 @@ function collectSideEffects(tree) {
|
|
|
60
61
|
(node) => Array.isArray(node.sideEffects) ? node.sideEffects.filter((sideEffect) => Boolean(sideEffect) && typeof sideEffect === "object").map((sideEffect) => ({ node, sideEffect })) : []
|
|
61
62
|
);
|
|
62
63
|
}
|
|
64
|
+
function sealedSideEffects(tree) {
|
|
65
|
+
return collectSideEffects(tree).flatMap(({ sideEffect }) => {
|
|
66
|
+
const { id, type, encryptedConfig } = sideEffect;
|
|
67
|
+
const sealed = typeof id === "string" && typeof type === "string" && FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type) && typeof encryptedConfig === "string" && encryptedConfig.length > 0;
|
|
68
|
+
return sealed ? [{ sideEffectId: id, type, encryptedConfig }] : [];
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function describeSettings(settings) {
|
|
72
|
+
if (typeof settings.email === "string") {
|
|
73
|
+
return `to ${settings.email}${typeof settings.subject === "string" ? ` \xB7 subject "${settings.subject}"` : ""}`;
|
|
74
|
+
}
|
|
75
|
+
return Object.entries(settings).filter(([, value]) => typeof value === "string" || typeof value === "number").map(([key, value]) => `${key}: ${String(value)}`).join(" \xB7 ");
|
|
76
|
+
}
|
|
77
|
+
function withSettings(rows, settingsById) {
|
|
78
|
+
return rows.map((row) => {
|
|
79
|
+
const settings = row.sideEffectId ? settingsById[row.sideEffectId] : void 0;
|
|
80
|
+
const described = settings ? describeSettings(settings) : "";
|
|
81
|
+
return described ? { ...row, status: `${row.status} \u2192 ${described}` } : row;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
63
84
|
function flowExists(slug) {
|
|
64
85
|
return existsSync(join(flowsDir(), slug, "_data.json"));
|
|
65
86
|
}
|
|
@@ -109,11 +130,25 @@ function sideEffectNeedsInput(raw) {
|
|
|
109
130
|
if (!isFlowOauthSideEffect(type)) return !configured;
|
|
110
131
|
return !isConfigured(effect?.oauthProviderId) || !configured;
|
|
111
132
|
}
|
|
133
|
+
function trackingStatus(effect, type, meta) {
|
|
134
|
+
if (flowCatalogEntry("side-effect", type)?.owners?.tagIds !== "tags") return null;
|
|
135
|
+
const tags = Array.isArray(effect.tagIds) ? effect.tagIds.length : 0;
|
|
136
|
+
const event = typeof effect.eventName === "string" ? ` "${effect.eventName}"` : "";
|
|
137
|
+
return {
|
|
138
|
+
...meta,
|
|
139
|
+
target: "sideEffect",
|
|
140
|
+
...typeof effect.id === "string" ? { sideEffectId: effect.id } : {},
|
|
141
|
+
kind: type,
|
|
142
|
+
status: `${type}${event} \u2014 ${tags > 0 ? `[${tags} tag${tags === 1 ? "" : "s"}]` : "[no tag]"}`,
|
|
143
|
+
needsInput: false
|
|
144
|
+
};
|
|
145
|
+
}
|
|
112
146
|
function sideEffectStatus(raw, meta) {
|
|
113
147
|
const effect = raw;
|
|
114
148
|
const type = effect?.type;
|
|
115
|
-
if (typeof type !== "string"
|
|
116
|
-
|
|
149
|
+
if (typeof type !== "string") return null;
|
|
150
|
+
if (!FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type)) {
|
|
151
|
+
return effect ? trackingStatus(effect, type, meta) : null;
|
|
117
152
|
}
|
|
118
153
|
const configured = isConfigured(effect?.encryptedConfig);
|
|
119
154
|
const oauth = isFlowOauthSideEffect(type);
|
|
@@ -134,6 +169,12 @@ function requestFlowInputCall(slug, status) {
|
|
|
134
169
|
const card = `request_flow_input with ${args}`;
|
|
135
170
|
const target = status.target === "node" ? `--node ${status.nodeId}` : `--side-effect ${status.sideEffectId}`;
|
|
136
171
|
const fallback = "only if nothing is connected or several could be meant";
|
|
172
|
+
if (status.kind === "email") {
|
|
173
|
+
return `baker flows connect ${slug} ${target} --email "<who receives each lead, comma-separated>" --subject "<New lead \u2014 the Form's name>"`;
|
|
174
|
+
}
|
|
175
|
+
if (status.kind === "httpWebhook") {
|
|
176
|
+
return `baker flows connect ${slug} ${target} --url <https address> \u2014 only a webhook that needs a token or password goes to the user: ${card}`;
|
|
177
|
+
}
|
|
137
178
|
if (status.kind === "hubspotForm") {
|
|
138
179
|
return `baker flows connect ${slug} ${target} --hubspot-form <formId from baker hubspot forms list> \u2014 ${fallback}: ${card}`;
|
|
139
180
|
}
|
|
@@ -205,6 +246,8 @@ export {
|
|
|
205
246
|
writeFlowTree,
|
|
206
247
|
walkNodes,
|
|
207
248
|
collectSideEffects,
|
|
249
|
+
sealedSideEffects,
|
|
250
|
+
withSettings,
|
|
208
251
|
flowExists,
|
|
209
252
|
readFlowTree,
|
|
210
253
|
sideEffectNeedsInput,
|
|
@@ -214,4 +257,4 @@ export {
|
|
|
214
257
|
stepNameKey,
|
|
215
258
|
isUsableStepNameKey
|
|
216
259
|
};
|
|
217
|
-
//# sourceMappingURL=chunk-
|
|
260
|
+
//# sourceMappingURL=chunk-L5J3S6B6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/flows/shared.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n FLOW_ACCOUNT_ONLY_KINDS,\n FLOW_AGENT_DESTINATION_KINDS,\n FLOW_RESOURCE_NODE_TYPES,\n FLOW_SECRET_FIELDS,\n FLOW_SECRET_SIDE_EFFECT_TYPES,\n type FlowConfigStatus,\n type FlowSideEffectType,\n flowCatalogEntry,\n isFlowOauthSideEffect,\n} from \"@baker/api\";\nimport { writeJson } from \"../../output.ts\";\n\nconst FLOWS_DIR = \"src/lib/flow-engine/flows\";\n\n/** Resolve the flows directory from cwd (walk up a few levels to find the repo root). */\nexport function flowsDir(): string {\n let dir = process.cwd();\n for (let i = 0; i < 6; i++) {\n const candidate = join(dir, FLOWS_DIR);\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = join(dir, \"..\");\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n return join(process.cwd(), FLOWS_DIR);\n}\n\nexport function failLocal(message: string): never {\n writeJson({ ok: false, error: { code: \"NOT_FOUND\", message } });\n process.exit(1);\n}\n\nexport function listFlowSlugs(): string[] {\n const dir = flowsDir();\n if (!existsSync(dir)) {\n return [];\n }\n return readdirSync(dir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\"_\") && entry.name !== \".gitkeep\")\n .map((entry) => entry.name)\n .sort();\n}\n\ntype AnyRecord = Record<string, unknown>;\n\n/** Absolute path to a form's `_data.json` — the one file the agent may edit. */\nexport function flowDataPath(slug: string): string {\n return join(flowsDir(), slug, \"_data.json\");\n}\n\n/**\n * Write a form tree back. Two-space JSON with a trailing newline, matching what\n * the scaffolder and the repo's markdown/JSON formatting already produce — a\n * write in any other shape turns a one-field edit into a whole-file diff.\n */\nexport function writeFlowTree(slug: string, tree: AnyRecord): void {\n writeFileSync(flowDataPath(slug), `${JSON.stringify(tree, null, 2)}\\n`, \"utf-8\");\n}\n\n/**\n * Every node in the tree, depth-first, parents before children.\n *\n * `Array.isArray`, not `?? []`: `_data.json` is hand-authored, so `children`\n * can be an object or a string, and `??` only guards null. These walkers are\n * what `flows show` and the pre-commit `normalize` run over, which are the two\n * things reached for when a form file is already wrong — throwing there would\n * take out the diagnosis along with the form.\n */\nexport function walkNodes(node: AnyRecord, acc: AnyRecord[] = []): AnyRecord[] {\n if (!node || typeof node !== \"object\") return acc;\n acc.push(node);\n if (Array.isArray(node.children)) {\n for (const child of node.children as AnyRecord[]) walkNodes(child, acc);\n }\n return acc;\n}\n\n/**\n * Every side effect in the tree, with the node that owns it.\n *\n * Walked rather than read off the root: side effects hang off whichever node\n * fires them, so a multi-step form keeps them on a child step. Reading\n * `tree.sideEffects` alone reports \"no side effects\" for a form that plainly\n * has one.\n */\nexport function collectSideEffects(tree: AnyRecord): Array<{ node: AnyRecord; sideEffect: AnyRecord }> {\n return walkNodes(tree).flatMap((node) =>\n Array.isArray(node.sideEffects)\n ? (node.sideEffects as AnyRecord[])\n .filter((sideEffect): sideEffect is AnyRecord => Boolean(sideEffect) && typeof sideEffect === \"object\")\n .map((sideEffect) => ({ node, sideEffect }))\n : [],\n );\n}\n\n/** A destination with something sealed in it, as `/api/flows/destinations/reveal` takes it. */\nexport type SealedSideEffect = { sideEffectId: string; type: FlowSideEffectType; encryptedConfig: string };\n\nexport function sealedSideEffects(tree: AnyRecord): SealedSideEffect[] {\n return collectSideEffects(tree).flatMap(({ sideEffect }) => {\n const { id, type, encryptedConfig } = sideEffect;\n const sealed =\n typeof id === \"string\" &&\n typeof type === \"string\" &&\n (FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type) &&\n typeof encryptedConfig === \"string\" &&\n encryptedConfig.length > 0;\n return sealed\n ? [{ sideEffectId: id as string, type: type as FlowSideEffectType, encryptedConfig: encryptedConfig as string }]\n : [];\n });\n}\n\nfunction describeSettings(settings: Record<string, unknown>): string {\n if (typeof settings.email === \"string\") {\n return `to ${settings.email}${typeof settings.subject === \"string\" ? ` · subject \"${settings.subject}\"` : \"\"}`;\n }\n return Object.entries(settings)\n .filter(([, value]) => typeof value === \"string\" || typeof value === \"number\")\n .map(([key, value]) => `${key}: ${String(value)}`)\n .join(\" · \");\n}\n\n/** Each sealed destination's row, saying where it sends — credentials never included (the backend strips them). */\nexport function withSettings(\n rows: FlowConfigStatus[],\n settingsById: Record<string, Record<string, unknown>>,\n): FlowConfigStatus[] {\n return rows.map((row) => {\n const settings = row.sideEffectId ? settingsById[row.sideEffectId] : undefined;\n const described = settings ? describeSettings(settings) : \"\";\n return described ? { ...row, status: `${row.status} → ${described}` } : row;\n });\n}\n\n/** Whether this workspace holds a Form by that slug. Never exits. */\nexport function flowExists(slug: string): boolean {\n return existsSync(join(flowsDir(), slug, \"_data.json\"));\n}\n\nexport function readFlowTree(slug: string): AnyRecord {\n const path = join(flowsDir(), slug, \"_data.json\");\n if (!existsSync(path)) {\n failLocal(`No form \"${slug}\". Run \"baker flows list\" to see the forms in this workspace.`);\n }\n try {\n return JSON.parse(readFileSync(path, \"utf-8\")) as AnyRecord;\n } catch (error) {\n failLocal(`Could not read form \"${slug}\": ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nfunction isConfigured(value: unknown): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\ntype NodeMeta = { nodeId: string; nodeName?: string };\n\nfunction nodeMeta(record: AnyRecord): NodeMeta {\n const nodeId = typeof record.id === \"string\" ? record.id : \"\";\n const nodeName = typeof record.name === \"string\" ? record.name : undefined;\n return { nodeId, ...(nodeName ? { nodeName } : {}) };\n}\n\nfunction widgetNodeStatus(record: AnyRecord, meta: NodeMeta): FlowConfigStatus | null {\n const nodeData = record.nodeData as AnyRecord | undefined;\n const nodeType = nodeData?.type;\n if (typeof nodeType !== \"string\" || !(FLOW_RESOURCE_NODE_TYPES as readonly string[]).includes(nodeType)) {\n return null;\n }\n const external = (nodeData?.form as AnyRecord | undefined)?.external;\n const selected = external != null && typeof external === \"object\";\n const name = selected ? (external as AnyRecord).name : undefined;\n return {\n ...meta,\n target: \"node\",\n kind: nodeType,\n status: selected\n ? `${nodeType} — selected${typeof name === \"string\" ? ` \"${name}\"` : \"\"}`\n : `${nodeType} — not selected`,\n needsInput: !selected,\n };\n}\n\n/**\n * Whether this side effect still needs something only the user can give.\n *\n * `false` for a type that has no confidential half at all (a pixel takes a tag\n * ref and nothing else), so a caller can ask the question of any side effect\n * without first checking whether the question applies.\n */\nexport function sideEffectNeedsInput(raw: unknown): boolean {\n const effect = raw as AnyRecord | null;\n const type = effect?.type;\n if (typeof type !== \"string\" || !(FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type)) {\n return false;\n }\n const configured = isConfigured(effect?.encryptedConfig);\n if (!isFlowOauthSideEffect(type as FlowSideEffectType)) return !configured;\n return !isConfigured(effect?.oauthProviderId) || !configured;\n}\n\n/** A pixel has no confidential half; it is listed so a form's tracking is visible before anyone adds to it. */\nfunction trackingStatus(effect: AnyRecord, type: string, meta: NodeMeta): FlowConfigStatus | null {\n if (flowCatalogEntry(\"side-effect\", type)?.owners?.tagIds !== \"tags\") return null;\n const tags = Array.isArray(effect.tagIds) ? effect.tagIds.length : 0;\n const event = typeof effect.eventName === \"string\" ? ` \"${effect.eventName}\"` : \"\";\n return {\n ...meta,\n target: \"sideEffect\",\n ...(typeof effect.id === \"string\" ? { sideEffectId: effect.id } : {}),\n kind: type,\n status: `${type}${event} — ${tags > 0 ? `[${tags} tag${tags === 1 ? \"\" : \"s\"}]` : \"[no tag]\"}`,\n needsInput: false,\n };\n}\n\nfunction sideEffectStatus(raw: unknown, meta: NodeMeta): FlowConfigStatus | null {\n const effect = raw as AnyRecord | null;\n const type = effect?.type;\n if (typeof type !== \"string\") return null;\n if (!(FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type)) {\n return effect ? trackingStatus(effect, type, meta) : null;\n }\n const configured = isConfigured(effect?.encryptedConfig);\n const oauth = isFlowOauthSideEffect(type as FlowSideEffectType);\n const connected = isConfigured(effect?.oauthProviderId);\n const needs = FLOW_SECRET_FIELDS[type as FlowSideEffectType];\n const status = oauth\n ? `${type} — connection ${connected ? \"[connected]\" : \"[needs connection]\"}, config ${configured ? \"[set]\" : \"[missing]\"}`\n : configured\n ? `${type} — [configured]`\n : `${type} — [missing]${needs.length > 0 ? ` (needs: ${needs.join(\", \")})` : \"\"}`;\n return {\n ...meta,\n target: \"sideEffect\",\n ...(typeof effect?.id === \"string\" ? { sideEffectId: effect.id } : {}),\n kind: type,\n status,\n needsInput: sideEffectNeedsInput(effect),\n };\n}\n\n/**\n * The exact call that fills a still-unconfigured item — `baker flows connect`\n * for anything the agent can wire itself, `request_flow_input` for the rest\n * and as the fallback.\n *\n * Emitted as a ready-to-issue call rather than a reminder that one exists. The\n * argument set is not guessable — it needs the node id, and for a side effect\n * the side-effect id too — so a hint that only named the tool would still cost\n * the agent a `flows show --full` to assemble.\n */\nexport function requestFlowInputCall(slug: string, status: FlowConfigStatus): string {\n const args =\n status.target === \"node\"\n ? `{ target: \"node\", flowSlug: \"${slug}\", nodeId: \"${status.nodeId}\", nodeType: \"${status.kind}\" }`\n : `{ target: \"sideEffect\", flowSlug: \"${slug}\", nodeId: \"${status.nodeId}\", sideEffectId: \"${status.sideEffectId}\", sideEffectType: \"${status.kind}\" }`;\n const card = `request_flow_input with ${args}`;\n const target = status.target === \"node\" ? `--node ${status.nodeId}` : `--side-effect ${status.sideEffectId}`;\n const fallback = \"only if nothing is connected or several could be meant\";\n // Nothing in an email is confidential: you state it, and the user is never handed a card for it.\n if (status.kind === \"email\") {\n return `baker flows connect ${slug} ${target} --email \"<who receives each lead, comma-separated>\" --subject \"<New lead — the Form's name>\"`;\n }\n if (status.kind === \"httpWebhook\") {\n return `baker flows connect ${slug} ${target} --url <https address> — only a webhook that needs a token or password goes to the user: ${card}`;\n }\n if (status.kind === \"hubspotForm\") {\n return `baker flows connect ${slug} ${target} --hubspot-form <formId from baker hubspot forms list> — ${fallback}: ${card}`;\n }\n if (status.kind === \"hubspot\" || status.kind === \"hubspotMeeting\") {\n const list = status.kind === \"hubspot\" ? \"forms view <id>\" : \"meetings view <slug>\";\n return `write \\`baker hubspot ${list} --as-node\\` into the step's form.external — ${fallback}: ${card}`;\n }\n if ((FLOW_ACCOUNT_ONLY_KINDS as readonly string[]).includes(status.kind)) {\n return `baker flows connect ${slug} ${target} — ${fallback}: ${card}`;\n }\n if ((FLOW_AGENT_DESTINATION_KINDS as readonly string[]).includes(status.kind)) {\n const sheet = status.kind === \"googleSpreadsheet\" ? ' (or --new-sheet \"<title>\" --columns \"…\")' : \"\";\n return `baker flows connect ${slug} ${target} --resource <id from baker flows options ${status.kind}>${sheet} — ${fallback}: ${card}`;\n }\n return card;\n}\n\n/**\n * Walk a local flow tree collecting the configuration status of every\n * confidential field — WITHOUT decrypting anything. A present `encryptedConfig`\n * string / `oauthProviderId` / `form.external` object means \"configured\"; null /\n * absent means the agent still needs to run `request_flow_input` for it.\n */\nexport function collectConfigStatus(node: unknown, acc: FlowConfigStatus[]): void {\n if (!node || typeof node !== \"object\") {\n return;\n }\n const record = node as AnyRecord;\n const meta = nodeMeta(record);\n\n const widget = widgetNodeStatus(record, meta);\n if (widget) {\n acc.push(widget);\n }\n if (Array.isArray(record.sideEffects)) {\n for (const raw of record.sideEffects) {\n const status = sideEffectStatus(raw, meta);\n if (status) {\n acc.push(status);\n }\n }\n }\n if (Array.isArray(record.children)) {\n for (const child of record.children) {\n collectConfigStatus(child, acc);\n }\n }\n}\n\n/** Replace opaque ciphertext with a status marker so `--full` stays readable and never leaks noise. */\nexport function redactTree(node: unknown): unknown {\n if (Array.isArray(node)) {\n return node.map(redactTree);\n }\n if (!node || typeof node !== \"object\") {\n return node;\n }\n const out: AnyRecord = {};\n for (const [key, value] of Object.entries(node as AnyRecord)) {\n if (key === \"encryptedConfig\") {\n out[key] = isConfigured(value) ? \"[configured]\" : value;\n } else {\n out[key] = redactTree(value);\n }\n }\n return out;\n}\n\n/**\n * The constant a step's name becomes in the generated `_query.ts`.\n *\n * Byte-for-byte the scaffold's own `toScreamingSnake`\n * (`__tooling__/checks/base/flow-typed/flow-typed.mjs`), which is the only implementation\n * that decides anything: the watcher writes `export const <key> = \"<node id>\";`\n * for every step and throws `Duplicate flow node name` when two steps produce\n * the same one. `flows-step-name-key.test.ts` pins the two together.\n *\n * It is copied rather than imported because the CLI ships as a binary into a\n * Session Runtime and the scaffold ships as files — there is no module boundary\n * they share. The copy that was here before was NOT this rule: it uppercased and\n * squashed every non-alphanumeric run, which agrees on `Contact Info` and\n * disagrees on `contactInfo` (`CONTACTINFO` here, `CONTACT_INFO` there). So\n * `add-node` waved through a name that collided in the generator, the watcher\n * then threw, and `_query.ts` stopped regenerating for the whole form.\n */\nexport function stepNameKey(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .replace(/[-\\s]+/g, \"_\")\n .toUpperCase();\n}\n\n/**\n * Whether that constant is one TypeScript will accept.\n *\n * `flow-typed.mjs` interpolates the key straight into `export const <key> = …`\n * without checking, so a step called \"1. Your details\" or \"Thanks!\" writes a\n * `_query.ts` that is a syntax error, and the whole workspace stops building —\n * a failure whose message names the generated file rather than the step that\n * caused it. `add-node` is where a name is minted, so it is where this is worth\n * catching.\n *\n * The real identifier grammar, not `[A-Z0-9_]`: this product is Spanish-first\n * and `INFORMACIÓN_DE_CONTACTO` is both a legal identifier and an ordinary step\n * name. Rejecting it would be the check being wrong, not the name.\n */\nexport function isUsableStepNameKey(key: string): boolean {\n return /^[\\p{ID_Start}$_][\\p{ID_Continue}$]*$/u.test(key);\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,YAAY,aAAa,cAAc,qBAAqB;AACrE,SAAS,YAAY;AAcrB,IAAM,YAAY;AAGX,SAAS,WAAmB;AACjC,MAAI,MAAM,QAAQ,IAAI;AACtB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,YAAY,KAAK,KAAK,SAAS;AACrC,QAAI,WAAW,SAAS,GAAG;AACzB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,KAAK,KAAK,IAAI;AAC7B,QAAI,WAAW,KAAK;AAClB;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACA,SAAO,KAAK,QAAQ,IAAI,GAAG,SAAS;AACtC;AAEO,SAAS,UAAU,SAAwB;AAChD,YAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,aAAa,QAAQ,EAAE,CAAC;AAC9D,UAAQ,KAAK,CAAC;AAChB;AAEO,SAAS,gBAA0B;AACxC,QAAM,MAAM,SAAS;AACrB,MAAI,CAAC,WAAW,GAAG,GAAG;AACpB,WAAO,CAAC;AAAA,EACV;AACA,SAAO,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC,EAC5C,OAAO,CAAC,UAAU,MAAM,YAAY,KAAK,CAAC,MAAM,KAAK,WAAW,GAAG,KAAK,MAAM,SAAS,UAAU,EACjG,IAAI,CAAC,UAAU,MAAM,IAAI,EACzB,KAAK;AACV;AAKO,SAAS,aAAa,MAAsB;AACjD,SAAO,KAAK,SAAS,GAAG,MAAM,YAAY;AAC5C;AAOO,SAAS,cAAc,MAAc,MAAuB;AACjE,gBAAc,aAAa,IAAI,GAAG,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,GAAM,OAAO;AACjF;AAWO,SAAS,UAAU,MAAiB,MAAmB,CAAC,GAAgB;AAC7E,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,MAAI,KAAK,IAAI;AACb,MAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAChC,eAAW,SAAS,KAAK,SAAyB,WAAU,OAAO,GAAG;AAAA,EACxE;AACA,SAAO;AACT;AAUO,SAAS,mBAAmB,MAAoE;AACrG,SAAO,UAAU,IAAI,EAAE;AAAA,IAAQ,CAAC,SAC9B,MAAM,QAAQ,KAAK,WAAW,IACzB,KAAK,YACH,OAAO,CAAC,eAAwC,QAAQ,UAAU,KAAK,OAAO,eAAe,QAAQ,EACrG,IAAI,CAAC,gBAAgB,EAAE,MAAM,WAAW,EAAE,IAC7C,CAAC;AAAA,EACP;AACF;AAKO,SAAS,kBAAkB,MAAqC;AACrE,SAAO,mBAAmB,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,MAAM;AAC1D,UAAM,EAAE,IAAI,MAAM,gBAAgB,IAAI;AACtC,UAAM,SACJ,OAAO,OAAO,YACd,OAAO,SAAS,YACf,8BAAoD,SAAS,IAAI,KAClE,OAAO,oBAAoB,YAC3B,gBAAgB,SAAS;AAC3B,WAAO,SACH,CAAC,EAAE,cAAc,IAAc,MAAkC,gBAA2C,CAAC,IAC7G,CAAC;AAAA,EACP,CAAC;AACH;AAEA,SAAS,iBAAiB,UAA2C;AACnE,MAAI,OAAO,SAAS,UAAU,UAAU;AACtC,WAAO,MAAM,SAAS,KAAK,GAAG,OAAO,SAAS,YAAY,WAAW,kBAAe,SAAS,OAAO,MAAM,EAAE;AAAA,EAC9G;AACA,SAAO,OAAO,QAAQ,QAAQ,EAC3B,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,OAAO,UAAU,YAAY,OAAO,UAAU,QAAQ,EAC5E,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,OAAO,KAAK,CAAC,EAAE,EAChD,KAAK,QAAK;AACf;AAGO,SAAS,aACd,MACA,cACoB;AACpB,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,UAAM,WAAW,IAAI,eAAe,aAAa,IAAI,YAAY,IAAI;AACrE,UAAM,YAAY,WAAW,iBAAiB,QAAQ,IAAI;AAC1D,WAAO,YAAY,EAAE,GAAG,KAAK,QAAQ,GAAG,IAAI,MAAM,WAAM,SAAS,GAAG,IAAI;AAAA,EAC1E,CAAC;AACH;AAGO,SAAS,WAAW,MAAuB;AAChD,SAAO,WAAW,KAAK,SAAS,GAAG,MAAM,YAAY,CAAC;AACxD;AAEO,SAAS,aAAa,MAAyB;AACpD,QAAM,OAAO,KAAK,SAAS,GAAG,MAAM,YAAY;AAChD,MAAI,CAAC,WAAW,IAAI,GAAG;AACrB,cAAU,YAAY,IAAI,+DAA+D;AAAA,EAC3F;AACA,MAAI;AACF,WAAO,KAAK,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,EAC/C,SAAS,OAAO;AACd,cAAU,wBAAwB,IAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACtG;AACF;AAEA,SAAS,aAAa,OAAyB;AAC7C,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AACrD;AAIA,SAAS,SAAS,QAA6B;AAC7C,QAAM,SAAS,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK;AAC3D,QAAM,WAAW,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AACjE,SAAO,EAAE,QAAQ,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC,EAAG;AACrD;AAEA,SAAS,iBAAiB,QAAmB,MAAyC;AACpF,QAAM,WAAW,OAAO;AACxB,QAAM,WAAW,UAAU;AAC3B,MAAI,OAAO,aAAa,YAAY,CAAE,yBAA+C,SAAS,QAAQ,GAAG;AACvG,WAAO;AAAA,EACT;AACA,QAAM,WAAY,UAAU,MAAgC;AAC5D,QAAM,WAAW,YAAY,QAAQ,OAAO,aAAa;AACzD,QAAM,OAAO,WAAY,SAAuB,OAAO;AACvD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,WACJ,GAAG,QAAQ,mBAAc,OAAO,SAAS,WAAW,KAAK,IAAI,MAAM,EAAE,KACrE,GAAG,QAAQ;AAAA,IACf,YAAY,CAAC;AAAA,EACf;AACF;AASO,SAAS,qBAAqB,KAAuB;AAC1D,QAAM,SAAS;AACf,QAAM,OAAO,QAAQ;AACrB,MAAI,OAAO,SAAS,YAAY,CAAE,8BAAoD,SAAS,IAAI,GAAG;AACpG,WAAO;AAAA,EACT;AACA,QAAM,aAAa,aAAa,QAAQ,eAAe;AACvD,MAAI,CAAC,sBAAsB,IAA0B,EAAG,QAAO,CAAC;AAChE,SAAO,CAAC,aAAa,QAAQ,eAAe,KAAK,CAAC;AACpD;AAGA,SAAS,eAAe,QAAmB,MAAc,MAAyC;AAChG,MAAI,iBAAiB,eAAe,IAAI,GAAG,QAAQ,WAAW,OAAQ,QAAO;AAC7E,QAAM,OAAO,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,OAAO,SAAS;AACnE,QAAM,QAAQ,OAAO,OAAO,cAAc,WAAW,KAAK,OAAO,SAAS,MAAM;AAChF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,GAAI,OAAO,OAAO,OAAO,WAAW,EAAE,cAAc,OAAO,GAAG,IAAI,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,QAAQ,GAAG,IAAI,GAAG,KAAK,WAAM,OAAO,IAAI,IAAI,IAAI,OAAO,SAAS,IAAI,KAAK,GAAG,MAAM,UAAU;AAAA,IAC5F,YAAY;AAAA,EACd;AACF;AAEA,SAAS,iBAAiB,KAAc,MAAyC;AAC/E,QAAM,SAAS;AACf,QAAM,OAAO,QAAQ;AACrB,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI,CAAE,8BAAoD,SAAS,IAAI,GAAG;AACxE,WAAO,SAAS,eAAe,QAAQ,MAAM,IAAI,IAAI;AAAA,EACvD;AACA,QAAM,aAAa,aAAa,QAAQ,eAAe;AACvD,QAAM,QAAQ,sBAAsB,IAA0B;AAC9D,QAAM,YAAY,aAAa,QAAQ,eAAe;AACtD,QAAM,QAAQ,mBAAmB,IAA0B;AAC3D,QAAM,SAAS,QACX,GAAG,IAAI,sBAAiB,YAAY,gBAAgB,oBAAoB,YAAY,aAAa,UAAU,WAAW,KACtH,aACE,GAAG,IAAI,yBACP,GAAG,IAAI,oBAAe,MAAM,SAAS,IAAI,YAAY,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AACnF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,GAAI,OAAO,QAAQ,OAAO,WAAW,EAAE,cAAc,OAAO,GAAG,IAAI,CAAC;AAAA,IACpE,MAAM;AAAA,IACN;AAAA,IACA,YAAY,qBAAqB,MAAM;AAAA,EACzC;AACF;AAYO,SAAS,qBAAqB,MAAc,QAAkC;AACnF,QAAM,OACJ,OAAO,WAAW,SACd,gCAAgC,IAAI,eAAe,OAAO,MAAM,iBAAiB,OAAO,IAAI,QAC5F,sCAAsC,IAAI,eAAe,OAAO,MAAM,qBAAqB,OAAO,YAAY,uBAAuB,OAAO,IAAI;AACtJ,QAAM,OAAO,2BAA2B,IAAI;AAC5C,QAAM,SAAS,OAAO,WAAW,SAAS,UAAU,OAAO,MAAM,KAAK,iBAAiB,OAAO,YAAY;AAC1G,QAAM,WAAW;AAEjB,MAAI,OAAO,SAAS,SAAS;AAC3B,WAAO,uBAAuB,IAAI,IAAI,MAAM;AAAA,EAC9C;AACA,MAAI,OAAO,SAAS,eAAe;AACjC,WAAO,uBAAuB,IAAI,IAAI,MAAM,iGAA4F,IAAI;AAAA,EAC9I;AACA,MAAI,OAAO,SAAS,eAAe;AACjC,WAAO,uBAAuB,IAAI,IAAI,MAAM,iEAA4D,QAAQ,KAAK,IAAI;AAAA,EAC3H;AACA,MAAI,OAAO,SAAS,aAAa,OAAO,SAAS,kBAAkB;AACjE,UAAM,OAAO,OAAO,SAAS,YAAY,oBAAoB;AAC7D,WAAO,yBAAyB,IAAI,qDAAgD,QAAQ,KAAK,IAAI;AAAA,EACvG;AACA,MAAK,wBAA8C,SAAS,OAAO,IAAI,GAAG;AACxE,WAAO,uBAAuB,IAAI,IAAI,MAAM,WAAM,QAAQ,KAAK,IAAI;AAAA,EACrE;AACA,MAAK,6BAAmD,SAAS,OAAO,IAAI,GAAG;AAC7E,UAAM,QAAQ,OAAO,SAAS,sBAAsB,mDAA8C;AAClG,WAAO,uBAAuB,IAAI,IAAI,MAAM,4CAA4C,OAAO,IAAI,IAAI,KAAK,WAAM,QAAQ,KAAK,IAAI;AAAA,EACrI;AACA,SAAO;AACT;AAQO,SAAS,oBAAoB,MAAe,KAA+B;AAChF,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC;AAAA,EACF;AACA,QAAM,SAAS;AACf,QAAM,OAAO,SAAS,MAAM;AAE5B,QAAM,SAAS,iBAAiB,QAAQ,IAAI;AAC5C,MAAI,QAAQ;AACV,QAAI,KAAK,MAAM;AAAA,EACjB;AACA,MAAI,MAAM,QAAQ,OAAO,WAAW,GAAG;AACrC,eAAW,OAAO,OAAO,aAAa;AACpC,YAAM,SAAS,iBAAiB,KAAK,IAAI;AACzC,UAAI,QAAQ;AACV,YAAI,KAAK,MAAM;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,OAAO,QAAQ,GAAG;AAClC,eAAW,SAAS,OAAO,UAAU;AACnC,0BAAoB,OAAO,GAAG;AAAA,IAChC;AAAA,EACF;AACF;AAGO,SAAS,WAAW,MAAwB;AACjD,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,KAAK,IAAI,UAAU;AAAA,EAC5B;AACA,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,WAAO;AAAA,EACT;AACA,QAAM,MAAiB,CAAC;AACxB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAiB,GAAG;AAC5D,QAAI,QAAQ,mBAAmB;AAC7B,UAAI,GAAG,IAAI,aAAa,KAAK,IAAI,iBAAiB;AAAA,IACpD,OAAO;AACL,UAAI,GAAG,IAAI,WAAW,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAmBO,SAAS,YAAY,MAAsB;AAChD,SAAO,KACJ,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAY;AACjB;AAgBO,SAAS,oBAAoB,KAAsB;AACxD,SAAO,2CAA2C,KAAK,GAAG;AAC5D;","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
adCopyHints,
|
|
6
6
|
booleanWordPositionalError,
|
|
7
7
|
capabilityFix
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-T4DD5YMP.js";
|
|
9
9
|
import {
|
|
10
10
|
hintLines,
|
|
11
11
|
withHints
|
|
@@ -493,4 +493,4 @@ export {
|
|
|
493
493
|
draftAction,
|
|
494
494
|
draftListAction
|
|
495
495
|
};
|
|
496
|
-
//# sourceMappingURL=chunk-
|
|
496
|
+
//# sourceMappingURL=chunk-LLOOWRBB.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
REF_PREFIX
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6Y7SIP2D.js";
|
|
4
4
|
|
|
5
5
|
// src/commands/canvas/node-preview.ts
|
|
6
6
|
var MAX_PARAMS_PREVIEW_LENGTH = 4e3;
|
|
@@ -57,4 +57,4 @@ ${body}` : header || body || compactJson(record);
|
|
|
57
57
|
export {
|
|
58
58
|
nodeParamsPreview
|
|
59
59
|
};
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
60
|
+
//# sourceMappingURL=chunk-ND5MJ3AA.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RESEARCH_GOOGLE_ADS_MAX_COPY
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K6WVV74H.js";
|
|
4
4
|
|
|
5
5
|
// src/commands/research/hints.ts
|
|
6
6
|
var AD_COPY_ROUTE = 'This returns competing domains and their SERP economics \u2014 no ad copy, no headlines, no creative. For a competitor\'s Google ads and their copy: `baker research google-ads <competitor.com> --copy` (Google\'s Ads Transparency Center: every ad, how long it has run, and the text ads\' headline and description). For Meta and LinkedIn: `baker winning-ads advertisers "<brand>"` \u2192 `baker winning-ads search "<brief>" --advertiser-id <id>` \u2192 `baker winning-ads content <adId>` (`primary_text` / `headline` / `cta`, plus the spoken transcript and on-screen text for video). Do not keep querying this command for copy.';
|
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
redditPageFix,
|
|
204
204
|
googleAdsHints
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=chunk-
|
|
206
|
+
//# sourceMappingURL=chunk-NECTN6N7.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
languageTag
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EAEOPERX.js";
|
|
4
4
|
import {
|
|
5
5
|
parseRefExpr
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6Y7SIP2D.js";
|
|
7
7
|
import {
|
|
8
8
|
AWARENESS_VALUES
|
|
9
9
|
} from "./chunk-5HYSKH77.js";
|
|
10
10
|
import {
|
|
11
11
|
collectAssetRefLikes,
|
|
12
12
|
isPersistedAssetRef
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-HRYOZUSK.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/canvas/creative-definition.ts
|
|
16
16
|
import { parseDocument } from "yaml";
|
|
@@ -301,4 +301,4 @@ export {
|
|
|
301
301
|
buildInitialRunRecord,
|
|
302
302
|
buildFailedRunRecord
|
|
303
303
|
};
|
|
304
|
-
//# sourceMappingURL=chunk-
|
|
304
|
+
//# sourceMappingURL=chunk-NIJSXVFT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/canvas/creative-definition.ts","../src/commands/canvas/run-record.ts"],"sourcesContent":["import { parseDocument } from \"yaml\";\nimport { AWARENESS_VALUES, type ViewerProfile } from \"../../viewer-profile.ts\";\nimport { languageTag } from \"../../language.ts\";\n\n// The scaffold's `creatives` collection (src/collections/creatives.ts) accepts exactly these;\n// `creative-definition.parity.test.ts` fails when the two lists drift. An unknown platform or\n// format degrades to the default rather than emitting a definition the collection would reject.\nexport const PLATFORM_VALUES = [\"meta\", \"google\", \"linkedin\", \"tiktok\", \"youtube\", \"x\", \"other\"] as const;\nexport const FORMAT_VALUES = [\"1:1\", \"4:5\", \"9:16\", \"16:9\", \"1.91:1\"] as const;\nexport const CREATIVE_KIND_VALUES = [\"static\", \"video\"] as const;\nexport const CREATIVE_STATUS_VALUES = [\"draft\", \"rendered\", \"published\", \"archived\"] as const;\nexport const SOURCE_KIND_VALUES = [\"image\", \"video\"] as const;\nexport const EVIDENCE_VALUES = [\"observed\", \"interpreted\", \"hypothesized\", \"generated\"] as const;\n\n/** Frontmatter + body for a creative's `_definition.md`, mirroring the scaffold `creatives` collection schema. */\nexport type CreativeSourceKind = (typeof SOURCE_KIND_VALUES)[number];\n\nexport type CreativeDefinitionInput = {\n title: string;\n kind: (typeof CREATIVE_KIND_VALUES)[number];\n platform: string;\n formats: string[];\n status?: (typeof CREATIVE_STATUS_VALUES)[number];\n sourceReferenceUrl?: string;\n sourceAdvertiser?: string;\n /** The library ad it adapted (`baker winning-ads` ids): what `baker_uses` in reference search counts. */\n sourceAdId?: string;\n sourcePlatform?: string;\n sourceAdvertiserId?: string;\n sourceKind?: CreativeSourceKind;\n /** Repo-relative path to the committed source asset (e.g. \"references/original.jpg\"). */\n sourcePath?: string;\n /** The Meta ad set the ad is made for (`baker ads meta adsets`). */\n targetAdSet?: string;\n /** Who that ad set reaches (`baker ads meta adsets --audience`), or the viewer read from the Knowledge. */\n viewer?: ViewerProfile;\n description?: string;\n};\n\n/** Title-case a slug: \"factorial-hr-4x5\" -> \"Factorial Hr 4x5\". Falls back to the slug when empty. */\nexport function titleFromSlug(slug: string): string {\n const title = slug\n .split(\"-\")\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n return title || slug;\n}\n\n/** Coerce a platform flag to a collection-valid value (default \"meta\"). */\nexport function resolvePlatform(platform: string | undefined): string {\n const value = platform?.trim();\n return value && (PLATFORM_VALUES as readonly string[]).includes(value) ? value : \"meta\";\n}\n\n/** A single-format array from the resolved aspect ratio (default [\"4:5\"] when unknown). */\nexport function resolveFormats(aspect: string | undefined): string[] {\n const value = aspect?.trim();\n return value && (FORMAT_VALUES as readonly string[]).includes(value) ? [value] : [\"4:5\"];\n}\n\n/** A deduped list of collection-valid formats (default [\"4:5\"] when none are recognized). */\nexport function resolveFormatList(formats: readonly string[]): string[] {\n const valid = [...new Set(formats.map((f) => f.trim()))].filter((f) =>\n (FORMAT_VALUES as readonly string[]).includes(f),\n );\n return valid.length > 0 ? valid : [\"4:5\"];\n}\n\n/** Best-effort human summary from an image_describe blueprint's ad_intent (for the definition body). */\nexport function describeBlueprintIntent(blueprint: unknown): string | undefined {\n const intent = (blueprint as { ad_intent?: unknown } | null)?.ad_intent;\n if (typeof intent === \"string\" && intent.trim()) return intent.trim();\n if (intent && typeof intent === \"object\") {\n const summary = (intent as { summary?: unknown }).summary ?? (intent as { feeling?: unknown }).feeling;\n if (typeof summary === \"string\" && summary.trim()) return summary.trim();\n }\n return undefined;\n}\n\n// Double-quoted YAML scalar via JSON.stringify — valid YAML that survives colons, quotes, and unicode.\nfunction yamlScalar(value: string): string {\n return JSON.stringify(value);\n}\n\n/** Render `_definition.md` (YAML frontmatter + body) for a creative. */\nexport function buildCreativeDefinition(input: CreativeDefinitionInput): string {\n const lines = [\"---\", `title: ${yamlScalar(input.title)}`, `kind: ${input.kind}`, `platform: ${input.platform}`];\n lines.push(`formats: [${input.formats.map(yamlScalar).join(\", \")}]`);\n lines.push(`status: ${input.status ?? \"draft\"}`);\n if (input.sourceReferenceUrl) lines.push(`sourceReferenceUrl: ${yamlScalar(input.sourceReferenceUrl)}`);\n if (input.sourceAdvertiser) lines.push(`sourceAdvertiser: ${yamlScalar(input.sourceAdvertiser)}`);\n if (input.sourceAdvertiserId) lines.push(`sourceAdvertiserId: ${yamlScalar(input.sourceAdvertiserId)}`);\n if (input.sourceAdId) lines.push(`sourceAdId: ${yamlScalar(input.sourceAdId)}`);\n if (input.sourcePlatform) lines.push(`sourcePlatform: ${input.sourcePlatform}`);\n if (input.sourceKind) lines.push(`sourceKind: ${input.sourceKind}`);\n if (input.sourcePath) lines.push(`sourcePath: ${yamlScalar(input.sourcePath)}`);\n if (input.targetAdSet) lines.push(`targetAdSet: ${yamlScalar(input.targetAdSet)}`);\n // A JSON object is a YAML flow mapping: one line, and every string in it quoted.\n if (input.viewer) lines.push(`viewer: ${JSON.stringify(input.viewer)}`);\n lines.push(\"---\", \"\");\n lines.push(input.description?.trim() || `${input.title} — canvas-built ${input.kind} ad for ${input.platform}.`);\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\n/** The library ids a `_definition.md` names, as `DefinitionSourceFields`. */\nexport type DefinitionSourceFields = {\n sourceAdId?: string;\n sourcePlatform?: string;\n sourceAdvertiserId?: string;\n};\n\nconst SOURCE_FIELD_KEYS = [\"sourceAdId\", \"sourcePlatform\", \"sourceAdvertiserId\"] as const;\n\n/**\n * Read the library ids back out of a `_definition.md`, so a sync after the agent edited the\n * file still carries them. Tolerant: no frontmatter, a mid-edit parse error, or a non-string\n * value yields nothing for that field rather than a failed sync.\n */\nexport function parseDefinitionSourceFields(raw: string): DefinitionSourceFields {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return {};\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return {};\n const fields: DefinitionSourceFields = {};\n for (const key of SOURCE_FIELD_KEYS) {\n const value = doc.get(key);\n if (typeof value === \"string\" && value.trim()) fields[key] = value.trim();\n }\n return fields;\n}\n\n/** Why the creative exists, as a `_definition.md` states it (its `idea` sent as `ideaSlug`). */\nexport type DefinitionStrategyFields = {\n ideaSlug?: string;\n message?: string;\n evidence?: (typeof EVIDENCE_VALUES)[number];\n angle?: string;\n persona?: string;\n awareness?: (typeof AWARENESS_VALUES)[number];\n hypothesis?: string;\n /** The lead ad of the series this creative is one of (`series`): its picture is the lead's with other words. */\n seriesLead?: string;\n /** The language its words are in (`language`), as a canonical BCP-47 tag (`es-MX`): a translation's. */\n language?: string;\n};\n\nfunction oneOf<T extends string>(values: readonly T[], value: string | undefined): T | undefined {\n return values.find((allowed) => allowed === value);\n}\n\n/**\n * Read the creative's strategy back out of a `_definition.md`, so the dashboard holds it from the\n * first sync rather than from Publish. Tolerant like `parseDefinitionSourceFields`; an `evidence`\n * or `awareness` the collection would reject is dropped rather than sent.\n */\nexport function parseDefinitionStrategyFields(raw: string): DefinitionStrategyFields {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return {};\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return {};\n const text = (key: string): string | undefined => {\n const value = doc.get(key);\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n };\n const ideaSlug = text(\"idea\");\n const message = text(\"message\");\n const evidence = oneOf(EVIDENCE_VALUES, text(\"evidence\"));\n const angle = text(\"angle\");\n const persona = text(\"persona\");\n const awareness = oneOf(AWARENESS_VALUES, text(\"awareness\"));\n const hypothesis = text(\"hypothesis\");\n const seriesLead = text(\"series\");\n const language = languageTag(text(\"language\") ?? \"\");\n return {\n ...(seriesLead ? { seriesLead } : {}),\n ...(language ? { language } : {}),\n ...(ideaSlug ? { ideaSlug } : {}),\n ...(message ? { message } : {}),\n ...(evidence ? { evidence } : {}),\n ...(angle ? { angle } : {}),\n ...(persona ? { persona } : {}),\n ...(awareness ? { awareness } : {}),\n ...(hypothesis ? { hypothesis } : {}),\n };\n}\n\n/** Where a definition places its creative in a series: null for a field it does not name. */\nexport type DefinitionSeriesPlace = { seriesLead: string | null; language: string | null };\n\n/**\n * The series lead and language a `_definition.md` names, each null when it names none, so a\n * sync can tell the backend the creative left its series. Null when the front matter cannot be\n * read (none, or mid-edit invalid YAML): the sync then says nothing and the backend keeps what it has.\n */\nexport function parseDefinitionSeriesPlace(raw: string): DefinitionSeriesPlace | null {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match || parseDocument(match[1] ?? \"\").errors.length > 0) return null;\n const { seriesLead, language } = parseDefinitionStrategyFields(raw);\n return { seriesLead: seriesLead ?? null, language: language ?? null };\n}\n\n/** Who a `_definition.md` says the ad is for: its `targetAdSet` and its recorded `viewer`, unchecked. */\nexport type DefinitionViewerFields = { targetAdSet?: string; viewer?: unknown };\n\n/** Read `targetAdSet` and `viewer` back out of a `_definition.md`; tolerant like `parseDefinitionSourceFields`. */\nexport function parseDefinitionViewerFields(raw: string): DefinitionViewerFields {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return {};\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return {};\n const data = doc.toJS() as { targetAdSet?: unknown; viewer?: unknown } | null;\n const adSet = data?.targetAdSet;\n const targetAdSet = typeof adSet === \"string\" || typeof adSet === \"number\" ? String(adSet).trim() : \"\";\n return {\n ...(targetAdSet ? { targetAdSet } : {}),\n ...(data?.viewer !== undefined ? { viewer: data.viewer } : {}),\n };\n}\n\n/**\n * Record the ad set an ad is for and the viewer it reaches in an existing `_definition.md`,\n * keeping every other field and the body. A file without frontmatter, or one mid-edit, is\n * returned as it is: the viewer is then read again from the ad set on the next run.\n */\nexport function setDefinitionViewer(raw: string, fields: { targetAdSet?: string; viewer?: ViewerProfile }): string {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n if (!match) return raw;\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return raw;\n if (fields.targetAdSet) doc.set(\"targetAdSet\", fields.targetAdSet);\n if (fields.viewer) doc.set(\"viewer\", doc.createNode(fields.viewer, { flow: true }));\n return `---\\n${doc.toString()}---${raw.slice(match[0].length)}`;\n}\n","import path from \"node:path\";\nimport type { CanvasRunVerdict } from \"@baker/api\";\nimport type { NodeRunRecord, RunResult } from \"../../engine/engine/executor.ts\";\nimport { parseRefExpr } from \"../../engine/schema/canvas.ts\";\nimport { collectAssetRefLikes, isPersistedAssetRef } from \"../../engine/storage/remote-cache-store.ts\";\n\n// Mirrors of the backend intake caps (canvas/runRecords.ts) so an in-bounds\n// payload is sent even for pathological runs; the server re-caps defensively.\nconst MAX_RUN_NODES = 200;\nconst MAX_OUTPUTS_PER_NODE = 10;\nconst MAX_FINAL_OUTPUTS = 10;\n\nexport type RunRecordOutput = {\n slot: string;\n /** Variant identity from the collect terminal (branch/scene name) — slot stays the stable key. */\n label?: string;\n kind: \"image\" | \"video\" | \"audio\" | \"json\" | \"text\" | \"font\";\n sha256: string;\n url: string;\n mime: string;\n width?: number;\n height?: number;\n durationMs?: number;\n};\n\n/** Labels for a collect-terminated canvas: the collector's node id + one label per collected image. */\nexport type FinalOutputLabels = { nodeId: string; labels: (string | undefined)[] };\n\nexport type RunNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\";\n\nexport type RunRecordNode = {\n nodeId: string;\n nodeType: string;\n cached: boolean;\n credits: number;\n durationMs: number;\n outputs: RunRecordOutput[];\n /** Upstream node ids ($ref edges) — lets the dashboard render the workflow graph. */\n deps?: string[];\n status?: RunNodeStatus;\n /** Compact params excerpt (prompt text preferred) for graph-node legibility. */\n paramsPreview?: string;\n /** Why this node failed — the real upstream status/provider — set only on `status: \"failed\"`. */\n error?: RunNodeError;\n /** The node's job, from its `tags.role` (e.g. `static_variants`), so readers never parse node ids. */\n role?: string;\n};\n\n/** Display-ready per-node failure detail. Mirrors the engine's `NodeFailureDetail`. */\nexport type RunNodeError = {\n message: string;\n code?: string;\n provider?: string;\n retryable?: boolean;\n};\n\n/** Run attribution stamped on every record post (progress, terminal, initial). */\nexport type RunRecordMeta = {\n creativeSlug?: string;\n canvasPath?: string;\n canvasSha?: string;\n /** Content sha of the rendered source (canvas.json + prompt.json) — powers the dashboard staleness signal. */\n sourceSha?: string;\n chatId?: string;\n /** R2 manifest of the executed canvas + its local file refs — first-write-wins server-side. */\n canvasSnapshotUrl?: string;\n /** R2 copy of the graph this run executes (every node's declaration): what a correction elsewhere grows on. */\n graphUrl?: string;\n /** What the render review found, so it outlives the terminal it was printed to. */\n review?: { severity: \"blocking\" | \"warning\"; what: string; scene?: string }[];\n /**\n * What the review's own model calls cost, as the gateway reported them.\n *\n * The review calls OpenRouter from the Runtime — that is where the finished video is,\n * and shipping 60MB through Convex to reach the same gateway would buy nothing — so\n * this record is what carries the spend back to where it is billed. `costUsd` is\n * OpenRouter's own `usage.cost`, relayed rather than computed: the sandbox never\n * prices anything, which is what makes it safe for the model id to float.\n */\n reviewUsage?: { model: string; inputTokens: number; outputTokens: number; costUsd: number }[];\n /** What the render review said (`@baker/api` CANVAS_RUN_VERDICTS), and whether the run may be shown as a version. */\n verdict?: CanvasRunVerdict;\n presentable?: boolean;\n /** An ad of a series made again from a new version of its lead: a new version of the ad, not a retry. */\n newAsk?: boolean;\n};\n\nexport type RunRecordPayload = {\n runId: string;\n /** `awaiting_approval`: stopped on purpose at a `--until` checkpoint, resumable with the same run id. */\n status: \"running\" | \"completed\" | \"failed\" | \"awaiting_approval\";\n errorMessage?: string;\n stats: { totalNodes: number; cachedNodes: number; totalCredits: number; durationMs: number };\n nodes: RunRecordNode[];\n finalOutputs?: RunRecordOutput[];\n /**\n * What the render review found, sent with the run that produced it.\n *\n * Without this the findings existed only in the CLI's stdout — visible to the agent\n * for one turn and to nobody afterwards. A check whose result leaves no trace cannot\n * be read back, compared between runs, or shown to the person the ad is for, and is\n * indistinguishable from a check that never ran.\n */\n review?: { severity: \"blocking\" | \"warning\"; what: string; scene?: string }[];\n /** Graceful-abort flush (SIGINT/SIGTERM): terminal but resumable — the backend keeps the row adoptable. */\n interrupted?: boolean;\n} & RunRecordMeta;\n\n/** Per-node plan facts (edges + params preview) captured from the engine's plan event. */\nexport type RunPlanInfo = Map<string, { deps: string[]; paramsPreview?: string; role?: string }>;\n\n// Mirrors the backend's CREATIVE_SLUG_MAX_LENGTH — an over-long slug would\n// 400 the whole run record, so attribution is dropped instead.\nconst MAX_CREATIVE_SLUG_LENGTH = 100;\n\n/**\n * A canvas under the repo convention `src/creatives/{slug}/` belongs to that\n * creative; its runs become the creative's generation history. Returns null\n * for canvases anywhere else (and for slugs the backend would reject).\n */\nexport function creativeSlugFromCanvasPath(filePath: string): string | null {\n const normalized = filePath.split(path.sep).join(\"/\");\n const match = normalized.match(/(?:^|\\/)src\\/creatives\\/([a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\\//);\n const slug = match?.[1] ?? null;\n return slug && slug.length <= MAX_CREATIVE_SLUG_LENGTH ? slug : null;\n}\n\n/**\n * Best-effort variant labels from a not-yet-validated canvas: when the declared\n * output is a `collect` node, each final inherits the node's explicit\n * `params.labels[i]`, else the producer node id parsed from the raw `$ref` it\n * collects (`$ref:gen_billboard_03.images#0` → `gen_billboard_03`). Null for\n * every other canvas shape — single-output runs stay unlabeled.\n */\nexport function finalOutputLabelsFromCanvas(parsed: unknown): FinalOutputLabels | null {\n const canvas = parsed as { nodes?: unknown; output?: { node?: unknown } } | null;\n const outputNodeId = canvas?.output?.node;\n if (typeof outputNodeId !== \"string\" || !Array.isArray(canvas?.nodes)) return null;\n const node = canvas.nodes.find((n) => (n as { id?: unknown })?.id === outputNodeId) as\n | { type?: unknown; inputs?: { images?: unknown }; params?: { labels?: unknown } }\n | undefined;\n if (node?.type !== \"collect\") return null;\n const explicit = node.params?.labels;\n if (Array.isArray(explicit) && explicit.every((l) => typeof l === \"string\")) {\n return { nodeId: outputNodeId, labels: explicit };\n }\n const images = node.inputs?.images;\n if (!Array.isArray(images)) return null;\n const labels = images.map((entry) => {\n if (typeof entry !== \"string\") return undefined;\n return parseRefExpr(entry)?.nodeId;\n });\n return { nodeId: outputNodeId, labels };\n}\n\nconst OUTPUT_KINDS = new Set([\"image\", \"video\", \"audio\", \"json\", \"text\", \"font\"]);\n\nfunction toRecordOutput(slot: string, value: unknown, label?: string): RunRecordOutput | null {\n const refs = collectAssetRefLikes(value);\n const ref = refs.length === 1 ? refs[0] : null;\n if (!ref || !isPersistedAssetRef(ref)) return null;\n const kind = typeof ref.kind === \"string\" && OUTPUT_KINDS.has(ref.kind) ? ref.kind : null;\n if (!kind) return null;\n return {\n slot,\n label,\n kind: kind as RunRecordOutput[\"kind\"],\n sha256: ref.sha256,\n url: ref.url,\n mime: ref.mime,\n width: typeof ref.width === \"number\" ? ref.width : undefined,\n height: typeof ref.height === \"number\" ? ref.height : undefined,\n durationMs: typeof ref.duration_ms === \"number\" ? ref.duration_ms : undefined,\n };\n}\n\n/**\n * Flatten one node's outputs into record entries. Single refs keep their slot\n * name; arrays become `slot#i`. Values without a persisted ref (plain JSON\n * manifests, refs whose upload failed) are dropped — every stored output must\n * be renderable from R2.\n */\nexport function nodeOutputsToRecord(\n nodeOutputs: Record<string, unknown>,\n labels?: (string | undefined)[],\n): RunRecordOutput[] {\n const out: RunRecordOutput[] = [];\n for (const [slot, value] of Object.entries(nodeOutputs)) {\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n const rec = toRecordOutput(`${slot}#${i}`, item, labels?.[i]);\n if (rec) out.push(rec);\n });\n } else {\n const rec = toRecordOutput(slot, value);\n if (rec) out.push(rec);\n }\n }\n return out.slice(0, MAX_OUTPUTS_PER_NODE);\n}\n\nfunction finalOutputsToRecord(output: unknown, labels?: (string | undefined)[]): RunRecordOutput[] {\n if (Array.isArray(output)) {\n return output\n .map((item, i) => toRecordOutput(`final#${i}`, item, labels?.[i]))\n .filter((rec): rec is RunRecordOutput => rec !== null)\n .slice(0, MAX_FINAL_OUTPUTS);\n }\n const rec = toRecordOutput(\"final\", output);\n return rec ? [rec] : [];\n}\n\n/** Each delivered size's local file, keyed by its label (or `final#i`), so the agent opens it with Read. */\nexport function finalFiles(output: unknown, labels?: (string | undefined)[]): Record<string, string> {\n const items = Array.isArray(output) ? output : [output];\n const files: Record<string, string> = {};\n items.forEach((item, i) => {\n const ref = collectAssetRefLikes(item)[0];\n if (ref && typeof ref.path === \"string\") files[labels?.[i] ?? `final#${i}`] = ref.path;\n });\n return files;\n}\n\nexport function buildRunRecord(\n result: Pick<RunResult, \"run_id\" | \"output\" | \"outputs_by_node\" | \"stats\"> & { node_runs: NodeRunRecord[] },\n meta: RunRecordMeta,\n plan?: RunPlanInfo,\n finalLabels?: FinalOutputLabels,\n): RunRecordPayload {\n const nodes = result.node_runs.slice(0, MAX_RUN_NODES).map((run): RunRecordNode => {\n const planned = plan?.get(run.node_id);\n return {\n nodeId: run.node_id,\n nodeType: run.node_type,\n cached: run.cached,\n credits: run.credits,\n durationMs: run.duration_ms,\n outputs: nodeOutputsToRecord(\n result.outputs_by_node[run.node_id] ?? {},\n run.node_id === finalLabels?.nodeId ? finalLabels.labels : undefined,\n ),\n deps: planned?.deps,\n status: plan ? \"completed\" : undefined,\n paramsPreview: planned?.paramsPreview,\n ...(planned?.role !== undefined ? { role: planned.role } : {}),\n };\n });\n const finalOutputs = finalOutputsToRecord(result.output, finalLabels?.labels);\n return {\n runId: result.run_id,\n ...meta,\n status: \"completed\",\n stats: {\n totalNodes: result.stats.total_nodes,\n cachedNodes: result.stats.cached_nodes,\n totalCredits: result.stats.total_credits,\n durationMs: result.stats.duration_ms,\n },\n nodes,\n finalOutputs: finalOutputs.length > 0 ? finalOutputs : undefined,\n // Sent whenever the review RAN, empty list included. Sending it only when there\n // were findings makes a clean render and an unreviewed one look identical in the\n // record — which is the exact ambiguity this field was added to remove: proving a\n // review had happened once meant re-running a cached canvas and reading raw JSON.\n // Only the fields the backend keeps: a static review's typed fields (`kind`) stay in the CLI.\n ...(meta.review\n ? { review: meta.review.slice(0, 40).map(({ severity, what, scene }) => ({ severity, what, ...(scene ? { scene } : {}) })) }\n : {}),\n };\n}\n\n/**\n * The empty `running` record posted BEFORE layer 1 executes. This row is the\n * Convex-side in-flight marker: the reconciliation sweep and cross-sandbox\n * resume both key off it, so unlike the fire-and-forget progress stream it is\n * posted synchronously (with retries) at run start.\n */\nexport function buildInitialRunRecord(runId: string, meta: RunRecordMeta): RunRecordPayload {\n return {\n runId,\n ...meta,\n status: \"running\",\n stats: { totalNodes: 0, cachedNodes: 0, totalCredits: 0, durationMs: 0 },\n nodes: [],\n };\n}\n\nexport function buildFailedRunRecord(runId: string, errorMessage: string, meta: RunRecordMeta): RunRecordPayload {\n return {\n runId,\n ...meta,\n status: \"failed\",\n errorMessage: errorMessage.slice(0, 2000),\n stats: { totalNodes: 0, cachedNodes: 0, totalCredits: 0, durationMs: 0 },\n nodes: [],\n };\n}\n"],"mappings":"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","names":["rec"]}
|
|
@@ -9,19 +9,20 @@ import {
|
|
|
9
9
|
} from "./chunk-F2S5BLPE.js";
|
|
10
10
|
import {
|
|
11
11
|
holdUnbilledSpend
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WTOYCUKH.js";
|
|
13
13
|
import {
|
|
14
14
|
findWorkspaceRoot
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-DZSIUEGH.js";
|
|
16
16
|
import {
|
|
17
17
|
requireCredentialsFromEnv
|
|
18
18
|
} from "./chunk-W3B4BHQU.js";
|
|
19
19
|
import {
|
|
20
20
|
readAdSpec
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-PZXCWSKV.js";
|
|
22
22
|
import {
|
|
23
|
-
VIEWER_CHECK_MODEL
|
|
24
|
-
|
|
23
|
+
VIEWER_CHECK_MODEL,
|
|
24
|
+
canonicalize
|
|
25
|
+
} from "./chunk-CAMX6OHF.js";
|
|
25
26
|
import {
|
|
26
27
|
askAboutText
|
|
27
28
|
} from "./chunk-RX6F3GEA.js";
|
|
@@ -39,7 +40,7 @@ import {
|
|
|
39
40
|
} from "./chunk-VAJBWA2U.js";
|
|
40
41
|
import {
|
|
41
42
|
HttpClient
|
|
42
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-HRYOZUSK.js";
|
|
43
44
|
import {
|
|
44
45
|
optionalTurnId
|
|
45
46
|
} from "./chunk-NAWWC5I3.js";
|
|
@@ -149,14 +150,18 @@ var LedgerSchema = z2.object({
|
|
|
149
150
|
)
|
|
150
151
|
});
|
|
151
152
|
var SHOW_AS_IT_STANDS = `Show the best version as a version ("Version 3"), never a file path or a run id, and say in one plain sentence what is left, in the person's words. End there: no question and no options; their next message says what changes.`;
|
|
152
|
-
function
|
|
153
|
+
function mayBeCorrection(run, shownPrompt, promptOnDisk) {
|
|
154
|
+
if (run.fix !== void 0 || run.regenerate !== void 0) return true;
|
|
155
|
+
return shownPrompt !== void 0 && promptOnDisk != null && canonicalize(shownPrompt) !== canonicalize(promptOnDisk);
|
|
156
|
+
}
|
|
157
|
+
function turnRenderRefusal(ledger, turnId, slug, opts = {}) {
|
|
153
158
|
const entry = turnId !== void 0 && ledger?.turnId === turnId ? ledger.creatives[slug] : void 0;
|
|
154
159
|
if (!entry) return null;
|
|
155
|
-
if (entry.verdict === "ready" || entry.verdict === "ready_with_notes") {
|
|
160
|
+
if ((entry.verdict === "ready" || entry.verdict === "ready_with_notes") && opts.correction !== true) {
|
|
156
161
|
return {
|
|
157
162
|
code: "CONFLICT",
|
|
158
|
-
message: `This ad is already ready in this turn (${entry.verdict}): its notes are not defects.`,
|
|
159
|
-
fix:
|
|
163
|
+
message: `This ad is already ready in this turn (${entry.verdict}): its notes are not defects, and new options are not made for them.`,
|
|
164
|
+
fix: 'Show it now. Only a real defect you can name in it (a logo drawn twice, a word wrong) is corrected in this turn: `baker canvas run --slug <slug> --fix "<what to change>"`, or `--regenerate adapt_<size>` for one size. Any other change comes with the person\'s next message.'
|
|
160
165
|
};
|
|
161
166
|
}
|
|
162
167
|
if ((entry.spentMs ?? 0) + RENDER_MS > AD_TURN_MS) {
|
|
@@ -778,6 +783,7 @@ var viewerCheckCommand = defineCommand({
|
|
|
778
783
|
});
|
|
779
784
|
|
|
780
785
|
export {
|
|
786
|
+
mayBeCorrection,
|
|
781
787
|
turnRenderRefusal,
|
|
782
788
|
recordTurnRender,
|
|
783
789
|
roundFitsTurn,
|
|
@@ -810,4 +816,4 @@ export {
|
|
|
810
816
|
viewerCheckBeforeRender,
|
|
811
817
|
viewerCheckCommand
|
|
812
818
|
};
|
|
813
|
-
//# sourceMappingURL=chunk-
|
|
819
|
+
//# sourceMappingURL=chunk-NJXNU2G6.js.map
|