@koda-sl/baker-cli 0.386.0 → 0.387.0-dev.3bafd569e
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 +1090 -211
- package/canvas/tiktok-captions-composition/index.html +5 -6
- package/canvas/tiktok-captions-composition/meta.json +5 -0
- package/dist/account-CLOKMTTC.js +49 -0
- package/dist/account-CLOKMTTC.js.map +1 -0
- package/dist/account-V5Y2QHAK.js +79 -0
- package/dist/account-V5Y2QHAK.js.map +1 -0
- package/dist/account-XFK6VX2R.js +80 -0
- package/dist/account-XFK6VX2R.js.map +1 -0
- package/dist/account-reads-S5VXX2QU.js +218 -0
- package/dist/account-reads-S5VXX2QU.js.map +1 -0
- package/dist/account-writes-Y7EQXDXF.js +66 -0
- package/dist/account-writes-Y7EQXDXF.js.map +1 -0
- package/dist/accounts-7YD457YN.js +114 -0
- package/dist/accounts-7YD457YN.js.map +1 -0
- package/dist/accounts-BJ3X5JQT.js +115 -0
- package/dist/accounts-BJ3X5JQT.js.map +1 -0
- package/dist/accounts-LOJ4WLIX.js +77 -0
- package/dist/accounts-LOJ4WLIX.js.map +1 -0
- package/dist/accounts-RYBDLQ6H.js +75 -0
- package/dist/accounts-RYBDLQ6H.js.map +1 -0
- package/dist/accounts-UO4XBWM2.js +611 -0
- package/dist/accounts-UO4XBWM2.js.map +1 -0
- package/dist/actions-3AW3R63U.js +55 -0
- package/dist/actions-3AW3R63U.js.map +1 -0
- package/dist/active-entities-R6GZIO6Z.js +103 -0
- package/dist/active-entities-R6GZIO6Z.js.map +1 -0
- package/dist/activities-ESBF3GFS.js +74 -0
- package/dist/activities-ESBF3GFS.js.map +1 -0
- package/dist/ad-group-writes-I225OYDZ.js +170 -0
- package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
- package/dist/ad-groups-O35MWNF6.js +68 -0
- package/dist/ad-groups-O35MWNF6.js.map +1 -0
- package/dist/ad-writes-SS5YZO5W.js +174 -0
- package/dist/ad-writes-SS5YZO5W.js.map +1 -0
- package/dist/add-43DUOVNR.js +104 -0
- package/dist/add-43DUOVNR.js.map +1 -0
- package/dist/add-IE5WDELB.js +302 -0
- package/dist/add-IE5WDELB.js.map +1 -0
- package/dist/add-QZHAWUBA.js +97 -0
- package/dist/add-QZHAWUBA.js.map +1 -0
- package/dist/add-TGQIVVXH.js +105 -0
- package/dist/add-TGQIVVXH.js.map +1 -0
- package/dist/add-accounts-6QYPOPR2.js +91 -0
- package/dist/add-accounts-6QYPOPR2.js.map +1 -0
- package/dist/ads-AUSRB4GU.js +128 -0
- package/dist/ads-AUSRB4GU.js.map +1 -0
- package/dist/ads-COYOTEKE.js +77 -0
- package/dist/ads-COYOTEKE.js.map +1 -0
- package/dist/ads-DZ4N5INZ.js +40 -0
- package/dist/ads-DZ4N5INZ.js.map +1 -0
- package/dist/ads-XZCMSPM5.js +113 -0
- package/dist/ads-XZCMSPM5.js.map +1 -0
- package/dist/adsets-AKR75THA.js +176 -0
- package/dist/adsets-AKR75THA.js.map +1 -0
- package/dist/advertisers-52FMMBTQ.js +120 -0
- package/dist/advertisers-52FMMBTQ.js.map +1 -0
- package/dist/advertisers-BCGKUMEH.js +125 -0
- package/dist/advertisers-BCGKUMEH.js.map +1 -0
- package/dist/analytics-JPDBKETM.js +1980 -0
- package/dist/analytics-JPDBKETM.js.map +1 -0
- package/dist/analytics-YVQ6H4BG.js +433 -0
- package/dist/analytics-YVQ6H4BG.js.map +1 -0
- package/dist/animate-JXIT77Y5.js +480 -0
- package/dist/animate-JXIT77Y5.js.map +1 -0
- package/dist/assign-66NTWTR2.js +77 -0
- package/dist/assign-66NTWTR2.js.map +1 -0
- package/dist/audience-size-LVQJWQAS.js +94 -0
- package/dist/audience-size-LVQJWQAS.js.map +1 -0
- package/dist/audiences-DC3IOG34.js +85 -0
- package/dist/audiences-DC3IOG34.js.map +1 -0
- package/dist/audiences-NEW3LLQR.js +268 -0
- package/dist/audiences-NEW3LLQR.js.map +1 -0
- package/dist/audiences-NYGMBGQ3.js +79 -0
- package/dist/audiences-NYGMBGQ3.js.map +1 -0
- package/dist/audit-UIPMTI5C.js +88 -0
- package/dist/audit-UIPMTI5C.js.map +1 -0
- package/dist/audit-XGN2OFLN.js +151 -0
- package/dist/audit-XGN2OFLN.js.map +1 -0
- package/dist/autocomplete-LVPDV3JE.js +111 -0
- package/dist/autocomplete-LVPDV3JE.js.map +1 -0
- package/dist/avatars-S6NSLMJK.js +38 -0
- package/dist/avatars-S6NSLMJK.js.map +1 -0
- package/dist/bid-pricing-2LYULXU2.js +99 -0
- package/dist/bid-pricing-2LYULXU2.js.map +1 -0
- package/dist/brand-WWHUZ72R.js +22 -0
- package/dist/brand-WWHUZ72R.js.map +1 -0
- package/dist/brief-K3FILESK.js +492 -0
- package/dist/brief-K3FILESK.js.map +1 -0
- package/dist/businesses-J7OP7MSK.js +53 -0
- package/dist/businesses-J7OP7MSK.js.map +1 -0
- package/dist/campaign-groups-N4TZ2F3L.js +95 -0
- package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
- package/dist/campaign-writes-5XA727KI.js +170 -0
- package/dist/campaign-writes-5XA727KI.js.map +1 -0
- package/dist/campaign-writes-7YFRQIQT.js +165 -0
- package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
- package/dist/campaigns-JPYNVFQI.js +76 -0
- package/dist/campaigns-JPYNVFQI.js.map +1 -0
- package/dist/campaigns-L43ZUKAI.js +107 -0
- package/dist/campaigns-L43ZUKAI.js.map +1 -0
- package/dist/campaigns-OD7Z332M.js +109 -0
- package/dist/campaigns-OD7Z332M.js.map +1 -0
- package/dist/campaigns-R4DXIR2Q.js +110 -0
- package/dist/campaigns-R4DXIR2Q.js.map +1 -0
- package/dist/canvas-57K7AGAP.js +46 -0
- package/dist/canvas-57K7AGAP.js.map +1 -0
- package/dist/capabilities-FVTZAFPV.js +144 -0
- package/dist/capabilities-FVTZAFPV.js.map +1 -0
- package/dist/cards-7H32TNMO.js +85 -0
- package/dist/cards-7H32TNMO.js.map +1 -0
- package/dist/catalog-OTICZPJA.js +64 -0
- package/dist/catalog-OTICZPJA.js.map +1 -0
- package/dist/catalogs-ABCQLCDU.js +128 -0
- package/dist/catalogs-ABCQLCDU.js.map +1 -0
- package/dist/changes-7ZIGNUW6.js +135 -0
- package/dist/changes-7ZIGNUW6.js.map +1 -0
- package/dist/chatgpt-B3NHRJUE.js +47 -0
- package/dist/chatgpt-B3NHRJUE.js.map +1 -0
- package/dist/chats-E7DBRHBF.js +262 -0
- package/dist/chats-E7DBRHBF.js.map +1 -0
- package/dist/chunk-2CV7LX23.js +474 -0
- package/dist/chunk-2CV7LX23.js.map +1 -0
- package/dist/chunk-2HCI5BXB.js +479 -0
- package/dist/chunk-2HCI5BXB.js.map +1 -0
- package/dist/chunk-2SQJL7ZN.js +56 -0
- package/dist/chunk-2SQJL7ZN.js.map +1 -0
- package/dist/chunk-2Y5V23PU.js +29 -0
- package/dist/chunk-2Y5V23PU.js.map +1 -0
- package/dist/chunk-32CPGJPL.js +149 -0
- package/dist/chunk-32CPGJPL.js.map +1 -0
- package/dist/chunk-3ACMDRSE.js +39 -0
- package/dist/chunk-3ACMDRSE.js.map +1 -0
- package/dist/chunk-3N4PZIIV.js +304 -0
- package/dist/chunk-3N4PZIIV.js.map +1 -0
- package/dist/chunk-3U7TDBIB.js +275 -0
- package/dist/chunk-3U7TDBIB.js.map +1 -0
- package/dist/chunk-3UDSYYND.js +42 -0
- package/dist/chunk-3UDSYYND.js.map +1 -0
- package/dist/chunk-3ZWWXAQZ.js +150 -0
- package/dist/chunk-3ZWWXAQZ.js.map +1 -0
- package/dist/chunk-4MH6LONO.js +274 -0
- package/dist/chunk-4MH6LONO.js.map +1 -0
- package/dist/chunk-4NZ47VXO.js +137 -0
- package/dist/chunk-4NZ47VXO.js.map +1 -0
- package/dist/chunk-564AEU2Q.js +541 -0
- package/dist/chunk-564AEU2Q.js.map +1 -0
- package/dist/chunk-5HYSKH77.js +315 -0
- package/dist/chunk-5HYSKH77.js.map +1 -0
- package/dist/chunk-5MBPIONY.js +29 -0
- package/dist/chunk-5MBPIONY.js.map +1 -0
- package/dist/chunk-5OVOLYY3.js +74 -0
- package/dist/chunk-5OVOLYY3.js.map +1 -0
- package/dist/chunk-5SJ3JNNY.js +6683 -0
- package/dist/chunk-5SJ3JNNY.js.map +1 -0
- package/dist/chunk-66USKCVY.js +4410 -0
- package/dist/chunk-66USKCVY.js.map +1 -0
- package/dist/chunk-6I7SYEYN.js +166 -0
- package/dist/chunk-6I7SYEYN.js.map +1 -0
- package/dist/chunk-6O7ISBC7.js +65 -0
- package/dist/chunk-6O7ISBC7.js.map +1 -0
- package/dist/chunk-752S7JF6.js +35 -0
- package/dist/chunk-752S7JF6.js.map +1 -0
- package/dist/chunk-77DN7R35.js +228 -0
- package/dist/chunk-77DN7R35.js.map +1 -0
- package/dist/chunk-7F7MFMLI.js +175 -0
- package/dist/chunk-7F7MFMLI.js.map +1 -0
- package/dist/chunk-7THBBTJJ.js +183 -0
- package/dist/chunk-7THBBTJJ.js.map +1 -0
- package/dist/chunk-7XU3HKMX.js +1599 -0
- package/dist/chunk-7XU3HKMX.js.map +1 -0
- package/dist/chunk-AEA5JV2X.js +92 -0
- package/dist/chunk-AEA5JV2X.js.map +1 -0
- package/dist/chunk-AFJGYJ7Z.js +45 -0
- package/dist/chunk-AFJGYJ7Z.js.map +1 -0
- package/dist/chunk-AR7PU7BB.js +76 -0
- package/dist/chunk-AR7PU7BB.js.map +1 -0
- package/dist/chunk-ASL7JFBD.js +96 -0
- package/dist/chunk-ASL7JFBD.js.map +1 -0
- package/dist/chunk-AUSKKFVH.js +84 -0
- package/dist/chunk-AUSKKFVH.js.map +1 -0
- package/dist/chunk-B52DCYL2.js +159 -0
- package/dist/chunk-B52DCYL2.js.map +1 -0
- package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
- package/dist/chunk-BVM5IRZW.js.map +1 -0
- package/dist/chunk-CAMX6OHF.js +3182 -0
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/chunk-CYBLKMXQ.js +310 -0
- package/dist/chunk-CYBLKMXQ.js.map +1 -0
- package/dist/chunk-CZENWCBS.js +333 -0
- package/dist/chunk-CZENWCBS.js.map +1 -0
- package/dist/chunk-D5FY4FAK.js +24 -0
- package/dist/chunk-D5FY4FAK.js.map +1 -0
- package/dist/chunk-DGCUPJZD.js +39 -0
- package/dist/chunk-DGCUPJZD.js.map +1 -0
- package/dist/chunk-DNCLWSHO.js +41 -0
- package/dist/chunk-DNCLWSHO.js.map +1 -0
- package/dist/chunk-DX4GIDO7.js +296 -0
- package/dist/chunk-DX4GIDO7.js.map +1 -0
- package/dist/chunk-EDLZGTGN.js +216 -0
- package/dist/chunk-EDLZGTGN.js.map +1 -0
- package/dist/chunk-EDNX3AOS.js +76 -0
- package/dist/chunk-EDNX3AOS.js.map +1 -0
- package/dist/chunk-EF5DP6EB.js +52 -0
- package/dist/chunk-EF5DP6EB.js.map +1 -0
- package/dist/chunk-ERSX3MKH.js +34 -0
- package/dist/chunk-ERSX3MKH.js.map +1 -0
- package/dist/chunk-F3IJSR7O.js +346 -0
- package/dist/chunk-F3IJSR7O.js.map +1 -0
- package/dist/chunk-FKOECEVC.js +126 -0
- package/dist/chunk-FKOECEVC.js.map +1 -0
- package/dist/chunk-FYWWTMXP.js +2902 -0
- package/dist/chunk-FYWWTMXP.js.map +1 -0
- package/dist/chunk-G7AFVTUS.js +106 -0
- package/dist/chunk-G7AFVTUS.js.map +1 -0
- package/dist/chunk-GIW7ABMM.js +74 -0
- package/dist/chunk-GIW7ABMM.js.map +1 -0
- package/dist/chunk-GIWHHCD6.js +145 -0
- package/dist/chunk-GIWHHCD6.js.map +1 -0
- package/dist/chunk-GPZH5ASB.js +3151 -0
- package/dist/chunk-GPZH5ASB.js.map +1 -0
- package/dist/chunk-GRQ2AXDX.js +9 -0
- package/dist/chunk-GRQ2AXDX.js.map +1 -0
- package/dist/chunk-GXDLWBOY.js +73 -0
- package/dist/chunk-GXDLWBOY.js.map +1 -0
- package/dist/chunk-GYABNLWW.js +629 -0
- package/dist/chunk-GYABNLWW.js.map +1 -0
- package/dist/chunk-H7MLHG2I.js +94 -0
- package/dist/chunk-H7MLHG2I.js.map +1 -0
- package/dist/chunk-H7XVKLIY.js +206 -0
- package/dist/chunk-H7XVKLIY.js.map +1 -0
- package/dist/chunk-HAE4WWFQ.js +455 -0
- package/dist/chunk-HAE4WWFQ.js.map +1 -0
- package/dist/chunk-HDHWIEJJ.js +136 -0
- package/dist/chunk-HDHWIEJJ.js.map +1 -0
- package/dist/chunk-HJTIBTF7.js +98 -0
- package/dist/chunk-HJTIBTF7.js.map +1 -0
- package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
- package/dist/chunk-HLXWKMTK.js.map +1 -0
- package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
- package/dist/chunk-HREWXNTO.js.map +1 -0
- package/dist/chunk-HYXKRNRV.js +176 -0
- package/dist/chunk-HYXKRNRV.js.map +1 -0
- package/dist/chunk-I3DIZWN5.js +97 -0
- package/dist/chunk-I3DIZWN5.js.map +1 -0
- package/dist/chunk-IJMWEO4P.js +57 -0
- package/dist/chunk-IJMWEO4P.js.map +1 -0
- package/dist/chunk-IOCSDFF2.js +23992 -0
- package/dist/chunk-IOCSDFF2.js.map +1 -0
- package/dist/chunk-IVIJJXXT.js +62 -0
- package/dist/chunk-IVIJJXXT.js.map +1 -0
- package/dist/chunk-J57GWTPK.js +106 -0
- package/dist/chunk-J57GWTPK.js.map +1 -0
- package/dist/chunk-JPK34QPS.js +134 -0
- package/dist/chunk-JPK34QPS.js.map +1 -0
- package/dist/chunk-JRCFCIE3.js +188 -0
- package/dist/chunk-JRCFCIE3.js.map +1 -0
- package/dist/chunk-JUAIGJ2A.js +76 -0
- package/dist/chunk-JUAIGJ2A.js.map +1 -0
- package/dist/chunk-K5OQES4V.js +58 -0
- package/dist/chunk-K5OQES4V.js.map +1 -0
- package/dist/chunk-KBS5GH4T.js +1626 -0
- package/dist/chunk-KBS5GH4T.js.map +1 -0
- package/dist/chunk-KIGGMKAE.js +66 -0
- package/dist/chunk-KIGGMKAE.js.map +1 -0
- package/dist/chunk-KKJ4KJCW.js +29 -0
- package/dist/chunk-KKJ4KJCW.js.map +1 -0
- package/dist/chunk-KLK6KQLQ.js +55 -0
- package/dist/chunk-KLK6KQLQ.js.map +1 -0
- package/dist/chunk-KUZFWMJN.js +207 -0
- package/dist/chunk-KUZFWMJN.js.map +1 -0
- package/dist/chunk-KXGG6EQM.js +382 -0
- package/dist/chunk-KXGG6EQM.js.map +1 -0
- package/dist/chunk-KXRKPZZY.js +169 -0
- package/dist/chunk-KXRKPZZY.js.map +1 -0
- package/dist/chunk-KZUHRZ2C.js +5187 -0
- package/dist/chunk-KZUHRZ2C.js.map +1 -0
- package/dist/chunk-L45A3IYV.js +1079 -0
- package/dist/chunk-L45A3IYV.js.map +1 -0
- package/dist/chunk-LA6PPSNA.js +65 -0
- package/dist/chunk-LA6PPSNA.js.map +1 -0
- package/dist/chunk-LEIQAHWF.js +25 -0
- package/dist/chunk-LEIQAHWF.js.map +1 -0
- package/dist/chunk-LERWCRY5.js +297 -0
- package/dist/chunk-LERWCRY5.js.map +1 -0
- package/dist/chunk-M6UNISGO.js +66 -0
- package/dist/chunk-M6UNISGO.js.map +1 -0
- package/dist/chunk-MGKHFGLV.js +75 -0
- package/dist/chunk-MGKHFGLV.js.map +1 -0
- package/dist/chunk-MZWC6HHA.js +455 -0
- package/dist/chunk-MZWC6HHA.js.map +1 -0
- package/dist/chunk-N3XJ434P.js +197 -0
- package/dist/chunk-N3XJ434P.js.map +1 -0
- package/dist/chunk-NFSLRRIE.js +77 -0
- package/dist/chunk-NFSLRRIE.js.map +1 -0
- package/dist/chunk-NHU33T2S.js +60 -0
- package/dist/chunk-NHU33T2S.js.map +1 -0
- package/dist/chunk-NJEZM4OB.js +51 -0
- package/dist/chunk-NJEZM4OB.js.map +1 -0
- package/dist/chunk-O6QKCJE4.js +455 -0
- package/dist/chunk-O6QKCJE4.js.map +1 -0
- package/dist/chunk-OFFAMC5H.js +225 -0
- package/dist/chunk-OFFAMC5H.js.map +1 -0
- package/dist/chunk-OHGTCFFE.js +57 -0
- package/dist/chunk-OHGTCFFE.js.map +1 -0
- package/dist/chunk-P4NSJS54.js +20 -0
- package/dist/chunk-P4NSJS54.js.map +1 -0
- package/dist/chunk-P5T7OZKV.js +26 -0
- package/dist/chunk-P5T7OZKV.js.map +1 -0
- package/dist/chunk-PFBQERWX.js +10 -0
- package/dist/chunk-PFBQERWX.js.map +1 -0
- package/dist/chunk-PKTLHYH4.js +509 -0
- package/dist/chunk-PKTLHYH4.js.map +1 -0
- package/dist/chunk-PUPEGICD.js +103 -0
- package/dist/chunk-PUPEGICD.js.map +1 -0
- package/dist/chunk-Q6ULQMWG.js +41 -0
- package/dist/chunk-Q6ULQMWG.js.map +1 -0
- package/dist/chunk-QO23YHLK.js +84 -0
- package/dist/chunk-QO23YHLK.js.map +1 -0
- package/dist/chunk-QSGIWV4P.js +337 -0
- package/dist/chunk-QSGIWV4P.js.map +1 -0
- package/dist/chunk-R5OQM7FF.js +179 -0
- package/dist/chunk-R5OQM7FF.js.map +1 -0
- package/dist/chunk-RFB6RYKA.js +111 -0
- package/dist/chunk-RFB6RYKA.js.map +1 -0
- package/dist/chunk-RGIXQEGJ.js +502 -0
- package/dist/chunk-RGIXQEGJ.js.map +1 -0
- package/dist/chunk-RODLBWIR.js +592 -0
- package/dist/chunk-RODLBWIR.js.map +1 -0
- package/dist/chunk-S4LZ7KTG.js +160 -0
- package/dist/chunk-S4LZ7KTG.js.map +1 -0
- package/dist/chunk-SHTESUB6.js +1442 -0
- package/dist/chunk-SHTESUB6.js.map +1 -0
- package/dist/chunk-SJH4EOZH.js +23 -0
- package/dist/chunk-SJH4EOZH.js.map +1 -0
- package/dist/chunk-SLB46MSS.js +64 -0
- package/dist/chunk-SLB46MSS.js.map +1 -0
- package/dist/chunk-SMIENBNX.js +6212 -0
- package/dist/chunk-SMIENBNX.js.map +1 -0
- package/dist/chunk-T7GT22KA.js +494 -0
- package/dist/chunk-T7GT22KA.js.map +1 -0
- package/dist/chunk-T7M4WFNV.js +172 -0
- package/dist/chunk-T7M4WFNV.js.map +1 -0
- package/dist/chunk-TLQ23DDW.js +19 -0
- package/dist/chunk-TLQ23DDW.js.map +1 -0
- package/dist/chunk-TMIDUSOR.js +665 -0
- package/dist/chunk-TMIDUSOR.js.map +1 -0
- package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
- package/dist/chunk-U6VRBDNQ.js +1830 -0
- package/dist/chunk-U6VRBDNQ.js.map +1 -0
- package/dist/chunk-U7BBXM67.js +1743 -0
- package/dist/chunk-U7BBXM67.js.map +1 -0
- package/dist/chunk-UI6BKYQD.js +225 -0
- package/dist/chunk-UI6BKYQD.js.map +1 -0
- package/dist/chunk-UOI5S62H.js +846 -0
- package/dist/chunk-UOI5S62H.js.map +1 -0
- package/dist/chunk-USL5ARRE.js +26 -0
- package/dist/chunk-USL5ARRE.js.map +1 -0
- package/dist/chunk-UYC45JNS.js +139 -0
- package/dist/chunk-UYC45JNS.js.map +1 -0
- package/dist/chunk-VNKVBY54.js +363 -0
- package/dist/chunk-VNKVBY54.js.map +1 -0
- package/dist/chunk-VS4C7VAR.js +533 -0
- package/dist/chunk-VS4C7VAR.js.map +1 -0
- package/dist/chunk-W4W4ZRBP.js +191 -0
- package/dist/chunk-W4W4ZRBP.js.map +1 -0
- package/dist/chunk-WN4KX7GE.js +25 -0
- package/dist/chunk-WN4KX7GE.js.map +1 -0
- package/dist/chunk-WNFTXSGR.js +111 -0
- package/dist/chunk-WNFTXSGR.js.map +1 -0
- package/dist/chunk-WOTDHRNF.js +2109 -0
- package/dist/chunk-WOTDHRNF.js.map +1 -0
- package/dist/chunk-XGWKTYXQ.js +67 -0
- package/dist/chunk-XGWKTYXQ.js.map +1 -0
- package/dist/chunk-XIGIJJSF.js +66 -0
- package/dist/chunk-XIGIJJSF.js.map +1 -0
- package/dist/chunk-XNUXB63I.js +817 -0
- package/dist/chunk-XNUXB63I.js.map +1 -0
- package/dist/chunk-XQ3CCNJD.js +610 -0
- package/dist/chunk-XQ3CCNJD.js.map +1 -0
- package/dist/chunk-XX6ZMCY5.js +4227 -0
- package/dist/chunk-XX6ZMCY5.js.map +1 -0
- package/dist/chunk-Y362QH54.js +98 -0
- package/dist/chunk-Y362QH54.js.map +1 -0
- package/dist/chunk-Y4T6ATDQ.js +74 -0
- package/dist/chunk-Y4T6ATDQ.js.map +1 -0
- package/dist/chunk-YQSBHWOI.js +41 -0
- package/dist/chunk-YU26SDNT.js +46 -0
- package/dist/chunk-YU26SDNT.js.map +1 -0
- package/dist/chunk-YULENNA7.js +501 -0
- package/dist/chunk-YULENNA7.js.map +1 -0
- package/dist/chunk-YYSZYSAG.js +150 -0
- package/dist/chunk-YYSZYSAG.js.map +1 -0
- package/dist/chunk-Z3ENMCFE.js +94 -0
- package/dist/chunk-Z3ENMCFE.js.map +1 -0
- package/dist/chunk-ZH7ZM3ZM.js +125 -0
- package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
- package/dist/chunk-ZIXHS6AM.js +42 -0
- package/dist/chunk-ZIXHS6AM.js.map +1 -0
- package/dist/chunk-ZLLJKSNS.js +96 -0
- package/dist/chunk-ZLLJKSNS.js.map +1 -0
- package/dist/claim-LF6VQ7OR.js +197 -0
- package/dist/claim-LF6VQ7OR.js.map +1 -0
- package/dist/cli.js +104 -70026
- package/dist/cli.js.map +1 -1
- package/dist/client-26SAJ46D.js +19 -0
- package/dist/code-MOWYJMDH.js +76 -0
- package/dist/code-MOWYJMDH.js.map +1 -0
- package/dist/companies-6HSK5BLK.js +195 -0
- package/dist/companies-6HSK5BLK.js.map +1 -0
- package/dist/complete-2PUAFQEC.js +81 -0
- package/dist/complete-2PUAFQEC.js.map +1 -0
- package/dist/config-X6GKOVQ6.js +88 -0
- package/dist/config-X6GKOVQ6.js.map +1 -0
- package/dist/connect-RXPMAJQI.js +42 -0
- package/dist/content-UYZC4AKN.js +85 -0
- package/dist/content-UYZC4AKN.js.map +1 -0
- package/dist/conversation-Y3NB2VDI.js +93 -0
- package/dist/conversation-Y3NB2VDI.js.map +1 -0
- package/dist/conversion-report-R4GJWWTK.js +125 -0
- package/dist/conversion-report-R4GJWWTK.js.map +1 -0
- package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
- package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
- package/dist/conversion-writes-WHFFUWWL.js +120 -0
- package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
- package/dist/conversions-K7C32DPW.js +135 -0
- package/dist/conversions-K7C32DPW.js.map +1 -0
- package/dist/conversions-OXJAX5GB.js +76 -0
- package/dist/conversions-OXJAX5GB.js.map +1 -0
- package/dist/countries-PBXNB3BR.js +82 -0
- package/dist/countries-PBXNB3BR.js.map +1 -0
- package/dist/create-AJ4KPSJ4.js +59 -0
- package/dist/create-AJ4KPSJ4.js.map +1 -0
- package/dist/create-ALKOAD5J.js +138 -0
- package/dist/create-ALKOAD5J.js.map +1 -0
- package/dist/create-HTKZMXKB.js +207 -0
- package/dist/create-HTKZMXKB.js.map +1 -0
- package/dist/create-TZMAOFBR.js +236 -0
- package/dist/create-TZMAOFBR.js.map +1 -0
- package/dist/creatives-BJYJFVXJ.js +51 -0
- package/dist/creatives-BJYJFVXJ.js.map +1 -0
- package/dist/creatives-OZHVU4WB.js +182 -0
- package/dist/creatives-OZHVU4WB.js.map +1 -0
- package/dist/creatives-VMGY5SU4.js +87 -0
- package/dist/creatives-VMGY5SU4.js.map +1 -0
- package/dist/credentials-FY4UH6TF.js +287 -0
- package/dist/credentials-FY4UH6TF.js.map +1 -0
- package/dist/critique-B3H7QFM2.js +1449 -0
- package/dist/critique-B3H7QFM2.js.map +1 -0
- package/dist/critique-YZBOA27H.js +216 -0
- package/dist/critique-YZBOA27H.js.map +1 -0
- package/dist/crm-2IBLUHDB.js +318 -0
- package/dist/crm-2IBLUHDB.js.map +1 -0
- package/dist/crm-YMYO4U53.js +224 -0
- package/dist/crm-YMYO4U53.js.map +1 -0
- package/dist/crop-U3AD4DDR.js +113 -0
- package/dist/crop-U3AD4DDR.js.map +1 -0
- package/dist/currency-S6KWZSZ6.js +88 -0
- package/dist/currency-S6KWZSZ6.js.map +1 -0
- package/dist/custom-conversions-FABS6YVT.js +125 -0
- package/dist/custom-conversions-FABS6YVT.js.map +1 -0
- package/dist/customers-P6LLLJHK.js +56 -0
- package/dist/decide-YTHCBKM6.js +199 -0
- package/dist/decide-YTHCBKM6.js.map +1 -0
- package/dist/delete-B2TDEW7H.js +63 -0
- package/dist/delete-B2TDEW7H.js.map +1 -0
- package/dist/delete-DZUDLYPC.js +69 -0
- package/dist/delete-DZUDLYPC.js.map +1 -0
- package/dist/delete-NZGZP4YP.js +71 -0
- package/dist/delete-NZGZP4YP.js.map +1 -0
- package/dist/delete-SDOZNDWQ.js +54 -0
- package/dist/delete-SDOZNDWQ.js.map +1 -0
- package/dist/delete-VQMU56OH.js +71 -0
- package/dist/delete-VQMU56OH.js.map +1 -0
- package/dist/delete-WKQPMVAM.js +66 -0
- package/dist/delete-WKQPMVAM.js.map +1 -0
- package/dist/demographics-Q3DCXULY.js +138 -0
- package/dist/demographics-Q3DCXULY.js.map +1 -0
- package/dist/describe-JNTCQZNL.js +97 -0
- package/dist/describe-JNTCQZNL.js.map +1 -0
- package/dist/describe-MT4334NG.js +97 -0
- package/dist/describe-MT4334NG.js.map +1 -0
- package/dist/dimensions-FEZUJRAG.js +101 -0
- package/dist/dimensions-FEZUJRAG.js.map +1 -0
- package/dist/discard-NEZM5CHF.js +66 -0
- package/dist/discard-NEZM5CHF.js.map +1 -0
- package/dist/discover-4GD7QSF5.js +93 -0
- package/dist/discover-4GD7QSF5.js.map +1 -0
- package/dist/discover-6K3IOYXR.js +172 -0
- package/dist/discover-6K3IOYXR.js.map +1 -0
- package/dist/domain-7Y256IDR.js +98 -0
- package/dist/domain-7Y256IDR.js.map +1 -0
- package/dist/download-L27HWEOE.js +299 -0
- package/dist/download-L27HWEOE.js.map +1 -0
- package/dist/draft-25G2P2TE.js +281 -0
- package/dist/draft-25G2P2TE.js.map +1 -0
- package/dist/draft-F6TUGXAY.js +307 -0
- package/dist/draft-F6TUGXAY.js.map +1 -0
- package/dist/draft-KLULNBWP.js +233 -0
- package/dist/draft-KLULNBWP.js.map +1 -0
- package/dist/draft-LY5ZPF73.js +217 -0
- package/dist/draft-LY5ZPF73.js.map +1 -0
- package/dist/draft-M4ZHDQ46.js +306 -0
- package/dist/draft-M4ZHDQ46.js.map +1 -0
- package/dist/draft-MI7RWY2K.js +100 -0
- package/dist/draft-MI7RWY2K.js.map +1 -0
- package/dist/draft-P4IVYTY3.js +103 -0
- package/dist/draft-P4IVYTY3.js.map +1 -0
- package/dist/draft-QQMCVDDS.js +328 -0
- package/dist/draft-QQMCVDDS.js.map +1 -0
- package/dist/engine/index.d.ts +213 -127
- package/dist/engine/index.js +18 -4
- package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
- package/dist/env-FBTHZKGN.js.map +1 -0
- package/dist/experiment-HDYTJPUY.js +1397 -0
- package/dist/experiment-HDYTJPUY.js.map +1 -0
- package/dist/export-TS5GYEMA.js +168 -0
- package/dist/export-TS5GYEMA.js.map +1 -0
- package/dist/extract-QVQFUOIK.js +113 -0
- package/dist/extract-QVQFUOIK.js.map +1 -0
- package/dist/facets-7MBSM7BP.js +114 -0
- package/dist/facets-7MBSM7BP.js.map +1 -0
- package/dist/favorites-7QP7BY5K.js +178 -0
- package/dist/favorites-7QP7BY5K.js.map +1 -0
- package/dist/feed-EETRO2FG.js +177 -0
- package/dist/feed-EETRO2FG.js.map +1 -0
- package/dist/feedback-ZOUL22TP.js +66 -0
- package/dist/feedback-ZOUL22TP.js.map +1 -0
- package/dist/feedback-record-XFFJRKS6.js +177 -0
- package/dist/feedback-record-XFFJRKS6.js.map +1 -0
- package/dist/fetch-QE3EB756.js +176 -0
- package/dist/fetch-QE3EB756.js.map +1 -0
- package/dist/fetch-Z7O3ZL4D.js +139 -0
- package/dist/fetch-Z7O3ZL4D.js.map +1 -0
- package/dist/find-KAQ6JDMO.js +134 -0
- package/dist/find-KAQ6JDMO.js.map +1 -0
- package/dist/fit-MY5GVZZZ.js +45 -0
- package/dist/fit-MY5GVZZZ.js.map +1 -0
- package/dist/flows-C67KEMDU.js +247 -0
- package/dist/flows-C67KEMDU.js.map +1 -0
- package/dist/follow-IX4XVK5Y.js +94 -0
- package/dist/follow-IX4XVK5Y.js.map +1 -0
- package/dist/follow-competitors-UZBUOYTH.js +112 -0
- package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
- package/dist/following-VGOIUCIZ.js +113 -0
- package/dist/following-VGOIUCIZ.js.map +1 -0
- package/dist/fonts-UR7XZ5XZ.js +34 -0
- package/dist/fonts-UR7XZ5XZ.js.map +1 -0
- package/dist/forecast-3F4SZNAK.js +104 -0
- package/dist/forecast-3F4SZNAK.js.map +1 -0
- package/dist/forecast-K5E7CTKX.js +168 -0
- package/dist/forecast-K5E7CTKX.js.map +1 -0
- package/dist/funding-H5YO37OW.js +85 -0
- package/dist/funding-H5YO37OW.js.map +1 -0
- package/dist/funnel-2PPEPAMY.js +394 -0
- package/dist/funnel-2PPEPAMY.js.map +1 -0
- package/dist/ga4-YHJ2XMLC.js +55 -0
- package/dist/ga4-YHJ2XMLC.js.map +1 -0
- package/dist/generate-M2ZX5DMI.js +262 -0
- package/dist/generate-M2ZX5DMI.js.map +1 -0
- package/dist/get-4EYKCZ6F.js +59 -0
- package/dist/get-4EYKCZ6F.js.map +1 -0
- package/dist/get-637GALM2.js +63 -0
- package/dist/get-637GALM2.js.map +1 -0
- package/dist/get-AZARFR6O.js +61 -0
- package/dist/get-AZARFR6O.js.map +1 -0
- package/dist/get-BPMEHRUG.js +56 -0
- package/dist/get-BPMEHRUG.js.map +1 -0
- package/dist/get-MQ6MMIZ7.js +78 -0
- package/dist/get-MQ6MMIZ7.js.map +1 -0
- package/dist/get-N4BPOQCB.js +63 -0
- package/dist/get-N4BPOQCB.js.map +1 -0
- package/dist/get-RPZHLQ56.js +92 -0
- package/dist/get-RPZHLQ56.js.map +1 -0
- package/dist/gif-6PRTB2VR.js +94 -0
- package/dist/gif-6PRTB2VR.js.map +1 -0
- package/dist/google-4XAYE4OI.js +3190 -0
- package/dist/google-4XAYE4OI.js.map +1 -0
- package/dist/google-52JRH7X3.js +136 -0
- package/dist/google-52JRH7X3.js.map +1 -0
- package/dist/google-ads-PWX7OF5Z.js +195 -0
- package/dist/google-ads-PWX7OF5Z.js.map +1 -0
- package/dist/group-AAZ5QKC3.js +43 -0
- package/dist/group-AAZ5QKC3.js.map +1 -0
- package/dist/group-GSYCZORC.js +43 -0
- package/dist/group-GSYCZORC.js.map +1 -0
- package/dist/gsc-TS5T7ML2.js +30 -0
- package/dist/gsc-TS5T7ML2.js.map +1 -0
- package/dist/history-EW6LFFCX.js +67 -0
- package/dist/history-EW6LFFCX.js.map +1 -0
- package/dist/history-XI5ABCFO.js +133 -0
- package/dist/history-XI5ABCFO.js.map +1 -0
- package/dist/hubspot-AVUOILRE.js +779 -0
- package/dist/hubspot-AVUOILRE.js.map +1 -0
- package/dist/icon-K75KI6BV.js +137 -0
- package/dist/icon-K75KI6BV.js.map +1 -0
- package/dist/ideas-UCPV3KTM.js +35 -0
- package/dist/ideas-UCPV3KTM.js.map +1 -0
- package/dist/images-CD53I2W5.js +90 -0
- package/dist/images-CD53I2W5.js.map +1 -0
- package/dist/improve-L3BW4EQG.js +86 -0
- package/dist/improve-L3BW4EQG.js.map +1 -0
- package/dist/ingest-KRJOYTCQ.js +107 -0
- package/dist/ingest-KRJOYTCQ.js.map +1 -0
- package/dist/ingest-WE3SPPND.js +23 -0
- package/dist/ingest-WE3SPPND.js.map +1 -0
- package/dist/insights-PELVD4RY.js +122 -0
- package/dist/insights-PELVD4RY.js.map +1 -0
- package/dist/insights-XCA4BUJW.js +423 -0
- package/dist/insights-XCA4BUJW.js.map +1 -0
- package/dist/inspect-QKETG5UJ.js +189 -0
- package/dist/inspect-QKETG5UJ.js.map +1 -0
- package/dist/inspiration-Y2J2PUPC.js +53 -0
- package/dist/inspiration-Y2J2PUPC.js.map +1 -0
- package/dist/intent-YJOJGNVJ.js +95 -0
- package/dist/intent-YJOJGNVJ.js.map +1 -0
- package/dist/job-E2U4FS5P.js +202 -0
- package/dist/job-E2U4FS5P.js.map +1 -0
- package/dist/job-create-DFYCHVQ7.js +109 -0
- package/dist/job-create-DFYCHVQ7.js.map +1 -0
- package/dist/job-status-FFPMTSHB.js +74 -0
- package/dist/job-status-FFPMTSHB.js.map +1 -0
- package/dist/keep-GYZS2UTL.js +78 -0
- package/dist/keep-GYZS2UTL.js.map +1 -0
- package/dist/keyword-gap-QU7O7UKC.js +130 -0
- package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
- package/dist/keyword-metrics-HLCM3QU7.js +197 -0
- package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
- package/dist/keywords-for-site-BDKPQKWB.js +128 -0
- package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
- package/dist/landing-4K6XYNFM.js +28 -0
- package/dist/landing-4K6XYNFM.js.map +1 -0
- package/dist/landings-F7LOAEJE.js +151 -0
- package/dist/landings-F7LOAEJE.js.map +1 -0
- package/dist/languages-P3ZM6R2A.js +40 -0
- package/dist/languages-P3ZM6R2A.js.map +1 -0
- package/dist/languages-XEJKTIFP.js +55 -0
- package/dist/languages-XEJKTIFP.js.map +1 -0
- package/dist/launches-TCFAYUA5.js +19 -0
- package/dist/launches-TCFAYUA5.js.map +1 -0
- package/dist/layerize-ZSKFIPZA.js +190 -0
- package/dist/layerize-ZSKFIPZA.js.map +1 -0
- package/dist/leads-GDF4S2AM.js +90 -0
- package/dist/leads-GDF4S2AM.js.map +1 -0
- package/dist/leads-TPB5OFSQ.js +293 -0
- package/dist/leads-TPB5OFSQ.js.map +1 -0
- package/dist/learn-NMFEA5H5.js +203 -0
- package/dist/learn-NMFEA5H5.js.map +1 -0
- package/dist/library-IP2UKNRU.js +109 -0
- package/dist/library-IP2UKNRU.js.map +1 -0
- package/dist/lighthouse-57XBJRCO.js +75 -0
- package/dist/lighthouse-57XBJRCO.js.map +1 -0
- package/dist/line-item-writes-O6SSS5NQ.js +208 -0
- package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
- package/dist/line-items-ZZAKH3YZ.js +103 -0
- package/dist/line-items-ZZAKH3YZ.js.map +1 -0
- package/dist/link-CRY57R3E.js +64 -0
- package/dist/link-CRY57R3E.js.map +1 -0
- package/dist/linkedin-WC7LGYPP.js +1008 -0
- package/dist/linkedin-WC7LGYPP.js.map +1 -0
- package/dist/list-6IKPWQGG.js +57 -0
- package/dist/list-6IKPWQGG.js.map +1 -0
- package/dist/list-CAUH3BMG.js +65 -0
- package/dist/list-CAUH3BMG.js.map +1 -0
- package/dist/list-CWAKX5TH.js +63 -0
- package/dist/list-CWAKX5TH.js.map +1 -0
- package/dist/list-FJ5FSVL6.js +151 -0
- package/dist/list-FJ5FSVL6.js.map +1 -0
- package/dist/list-GTOSN7DP.js +50 -0
- package/dist/list-GTOSN7DP.js.map +1 -0
- package/dist/list-HLJP4NVE.js +51 -0
- package/dist/list-HLJP4NVE.js.map +1 -0
- package/dist/list-LCUPF7EF.js +76 -0
- package/dist/list-LCUPF7EF.js.map +1 -0
- package/dist/list-NH4ZRZTL.js +303 -0
- package/dist/list-NH4ZRZTL.js.map +1 -0
- package/dist/locations-2BYWKIYA.js +67 -0
- package/dist/locations-2BYWKIYA.js.map +1 -0
- package/dist/locations-LVVDOSXO.js +40 -0
- package/dist/locations-LVVDOSXO.js.map +1 -0
- package/dist/log-6JOWOY5G.js +92 -0
- package/dist/log-6JOWOY5G.js.map +1 -0
- package/dist/logo-AJK2TDQU.js +18 -0
- package/dist/logo-AJK2TDQU.js.map +1 -0
- package/dist/lookup-H5GEM77H.js +22 -0
- package/dist/lookup-H5GEM77H.js.map +1 -0
- package/dist/make-Q2AMLCWE.js +640 -0
- package/dist/make-Q2AMLCWE.js.map +1 -0
- package/dist/map-4KOYFHAN.js +404 -0
- package/dist/map-4KOYFHAN.js.map +1 -0
- package/dist/mcp-LSS2DHYL.js +463 -0
- package/dist/mcp-LSS2DHYL.js.map +1 -0
- package/dist/media-JBCN6V4X.js +15 -0
- package/dist/media-JBCN6V4X.js.map +1 -0
- package/dist/media-RAGEJTZX.js +89 -0
- package/dist/media-RAGEJTZX.js.map +1 -0
- package/dist/media-sources-GSPAV7HT.js +32 -0
- package/dist/media-sources-GSPAV7HT.js.map +1 -0
- package/dist/members-GUUVEK2Y.js +44 -0
- package/dist/members-GUUVEK2Y.js.map +1 -0
- package/dist/meta-Z37ZR3PJ.js +69 -0
- package/dist/meta-Z37ZR3PJ.js.map +1 -0
- package/dist/metrics-KW6SDULI.js +152 -0
- package/dist/metrics-KW6SDULI.js.map +1 -0
- package/dist/models-5J4WFUD3.js +155 -0
- package/dist/models-5J4WFUD3.js.map +1 -0
- package/dist/normalize-DSFVTRXN.js +806 -0
- package/dist/normalize-DSFVTRXN.js.map +1 -0
- package/dist/normalize-EUDI5HEM.js +141 -0
- package/dist/normalize-EUDI5HEM.js.map +1 -0
- package/dist/options-P4PPJQH4.js +121 -0
- package/dist/options-P4PPJQH4.js.map +1 -0
- package/dist/output-DTCLVPUF.js +24 -0
- package/dist/output-DTCLVPUF.js.map +1 -0
- package/dist/page-N2ZO3O7F.js +105 -0
- package/dist/page-N2ZO3O7F.js.map +1 -0
- package/dist/pages-FQ4CBAJ2.js +66 -0
- package/dist/pages-FQ4CBAJ2.js.map +1 -0
- package/dist/performance-A66LYIZX.js +24 -0
- package/dist/performance-A66LYIZX.js.map +1 -0
- package/dist/pinterest-NV5XTNJE.js +96 -0
- package/dist/pinterest-NV5XTNJE.js.map +1 -0
- package/dist/pixels-CTJ43FZ4.js +108 -0
- package/dist/pixels-CTJ43FZ4.js.map +1 -0
- package/dist/pixels-HKINGZCH.js +60 -0
- package/dist/pixels-HKINGZCH.js.map +1 -0
- package/dist/plan-ZYTWLGWK.js +207 -0
- package/dist/plan-ZYTWLGWK.js.map +1 -0
- package/dist/preview-5ROBOQG7.js +169 -0
- package/dist/preview-5ROBOQG7.js.map +1 -0
- package/dist/profile-Q3PHR6FU.js +159 -0
- package/dist/profile-Q3PHR6FU.js.map +1 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
- package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
- package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
- package/dist/properties-WLL6M2P6.js +101 -0
- package/dist/properties-WLL6M2P6.js.map +1 -0
- package/dist/publish-KHNR5ARF.js +322 -0
- package/dist/publish-KHNR5ARF.js.map +1 -0
- package/dist/query-A34J7BGX.js +61 -0
- package/dist/query-A34J7BGX.js.map +1 -0
- package/dist/query-IYZN5KHO.js +236 -0
- package/dist/query-IYZN5KHO.js.map +1 -0
- package/dist/query-UN2P6DBA.js +247 -0
- package/dist/query-UN2P6DBA.js.map +1 -0
- package/dist/questionnaire-Z2ZIKNBV.js +93 -0
- package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
- package/dist/read-GM7PQYJA.js +141 -0
- package/dist/read-GM7PQYJA.js.map +1 -0
- package/dist/reddit-5NPFULGD.js +26 -0
- package/dist/reddit-5NPFULGD.js.map +1 -0
- package/dist/refresh-FGXW4Y4X.js +94 -0
- package/dist/refresh-FGXW4Y4X.js.map +1 -0
- package/dist/release-OKZMC73N.js +60 -0
- package/dist/release-OKZMC73N.js.map +1 -0
- package/dist/relevant-pages-J76ZKNKF.js +99 -0
- package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
- package/dist/remove-CA2J6ACH.js +50 -0
- package/dist/remove-CA2J6ACH.js.map +1 -0
- package/dist/remove-GOYW2G4R.js +48 -0
- package/dist/remove-GOYW2G4R.js.map +1 -0
- package/dist/reopen-XPKSOE6O.js +63 -0
- package/dist/reopen-XPKSOE6O.js.map +1 -0
- package/dist/rerun-2ERJV4WC.js +86 -0
- package/dist/rerun-2ERJV4WC.js.map +1 -0
- package/dist/research-FZ63UZTE.js +62 -0
- package/dist/research-FZ63UZTE.js.map +1 -0
- package/dist/research-YGQQ6CNG.js +262 -0
- package/dist/research-YGQQ6CNG.js.map +1 -0
- package/dist/reset-BGPZ4HMA.js +54 -0
- package/dist/reset-BGPZ4HMA.js.map +1 -0
- package/dist/reset-HTD6LCIT.js +54 -0
- package/dist/reset-HTD6LCIT.js.map +1 -0
- package/dist/resolve-NRDZ6N2B.js +121 -0
- package/dist/resolve-NRDZ6N2B.js.map +1 -0
- package/dist/retry-PF4BGKJV.js +60 -0
- package/dist/retry-PF4BGKJV.js.map +1 -0
- package/dist/retry-XL26JDAV.js +62 -0
- package/dist/retry-XL26JDAV.js.map +1 -0
- package/dist/retry-failed-BEFWRV4Z.js +45 -0
- package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
- package/dist/run-EMJLI7LR.js +65 -0
- package/dist/run-EMJLI7LR.js.map +1 -0
- package/dist/run-L5K44UEA.js +61 -0
- package/dist/run-L5K44UEA.js.map +1 -0
- package/dist/scaffold-ad-AY2OL7RI.js +1550 -0
- package/dist/scaffold-ad-AY2OL7RI.js.map +1 -0
- package/dist/scaffold-static-ad-FXYE46MT.js +973 -0
- package/dist/scaffold-static-ad-FXYE46MT.js.map +1 -0
- package/dist/scaffold-video-533BT6RX.js +874 -0
- package/dist/scaffold-video-533BT6RX.js.map +1 -0
- package/dist/schedule-KQ7UIR3N.js +66 -0
- package/dist/schedule-KQ7UIR3N.js.map +1 -0
- package/dist/schedule-PKPNSISL.js +61 -0
- package/dist/schedule-PKPNSISL.js.map +1 -0
- package/dist/scheduled-agents-LP5LITA3.js +49 -0
- package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
- package/dist/schema-B6J6VPTO.js +132 -0
- package/dist/schema-B6J6VPTO.js.map +1 -0
- package/dist/schema-QXTDLZVC.js +63 -0
- package/dist/schema-QXTDLZVC.js.map +1 -0
- package/dist/scrape-7YKJWFZE.js +2241 -0
- package/dist/scrape-7YKJWFZE.js.map +1 -0
- package/dist/screenshot-ZHBSG3SI.js +102 -0
- package/dist/screenshot-ZHBSG3SI.js.map +1 -0
- package/dist/search-332KFYZ6.js +224 -0
- package/dist/search-332KFYZ6.js.map +1 -0
- package/dist/search-4PBMXXUY.js +91 -0
- package/dist/search-4PBMXXUY.js.map +1 -0
- package/dist/search-6WNUKCMP.js +174 -0
- package/dist/search-6WNUKCMP.js.map +1 -0
- package/dist/search-AVNUU6TJ.js +26 -0
- package/dist/search-AVNUU6TJ.js.map +1 -0
- package/dist/search-F5INRFFK.js +92 -0
- package/dist/search-F5INRFFK.js.map +1 -0
- package/dist/search-copy-DZVBYG2B.js +168 -0
- package/dist/search-copy-DZVBYG2B.js.map +1 -0
- package/dist/seeds-5JTQN5WI.js +101 -0
- package/dist/seeds-5JTQN5WI.js.map +1 -0
- package/dist/select-RSGLDQ5Z.js +96 -0
- package/dist/select-RSGLDQ5Z.js.map +1 -0
- package/dist/sends-3L6QBS46.js +309 -0
- package/dist/sends-3L6QBS46.js.map +1 -0
- package/dist/sequences-YKFV7BDH.js +146 -0
- package/dist/sequences-YKFV7BDH.js.map +1 -0
- package/dist/set-prompt-7WWJI6XW.js +188 -0
- package/dist/set-prompt-7WWJI6XW.js.map +1 -0
- package/dist/setup-links-6H5ONDCQ.js +141 -0
- package/dist/setup-links-6H5ONDCQ.js.map +1 -0
- package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
- package/dist/shared-QAMP7FZV.js.map +1 -0
- package/dist/shopify-2OY3J3OY.js +3692 -0
- package/dist/shopify-2OY3J3OY.js.map +1 -0
- package/dist/site-TBPERLY3.js +177 -0
- package/dist/site-TBPERLY3.js.map +1 -0
- package/dist/sitemaps-XPGLW24S.js +87 -0
- package/dist/sitemaps-XPGLW24S.js.map +1 -0
- package/dist/sites-WMBY2HJV.js +101 -0
- package/dist/sites-WMBY2HJV.js.map +1 -0
- package/dist/skills-3HEILQCU.js +47 -0
- package/dist/skills-3HEILQCU.js.map +1 -0
- package/dist/sources-JFQKTK2L.js +421 -0
- package/dist/sources-JFQKTK2L.js.map +1 -0
- package/dist/sources-Q3I6DDV7.js +30 -0
- package/dist/sources-Q3I6DDV7.js.map +1 -0
- package/dist/stale-CAXBLZKJ.js +66 -0
- package/dist/stale-CAXBLZKJ.js.map +1 -0
- package/dist/stats-GNILHSKK.js +34 -0
- package/dist/stats-GNILHSKK.js.map +1 -0
- package/dist/status-LIZWJYS4.js +62 -0
- package/dist/status-LIZWJYS4.js.map +1 -0
- package/dist/sticker-KCV3VZHY.js +94 -0
- package/dist/sticker-KCV3VZHY.js.map +1 -0
- package/dist/stock-VTORKR4C.js +179 -0
- package/dist/stock-VTORKR4C.js.map +1 -0
- package/dist/studio-QCRA6BY5.js +49 -0
- package/dist/studio-QCRA6BY5.js.map +1 -0
- package/dist/sync-455DB46Y.js +54 -0
- package/dist/sync-455DB46Y.js.map +1 -0
- package/dist/sync-A4KKQ3B6.js +265 -0
- package/dist/sync-A4KKQ3B6.js.map +1 -0
- package/dist/sync-ULKWDFXM.js +54 -0
- package/dist/sync-ULKWDFXM.js.map +1 -0
- package/dist/sync-definition-P6QTHJJ6.js +55 -0
- package/dist/sync-definition-P6QTHJJ6.js.map +1 -0
- package/dist/tag-manager-E7QTXBWQ.js +43 -0
- package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
- package/dist/tags-4Q4I5GQJ.js +20 -0
- package/dist/tags-4Q4I5GQJ.js.map +1 -0
- package/dist/tags-AMEVAQZ4.js +26 -0
- package/dist/tags-AMEVAQZ4.js.map +1 -0
- package/dist/tags-DPLOLH3E.js +20 -0
- package/dist/tags-DPLOLH3E.js.map +1 -0
- package/dist/tags-LDHXONR3.js +224 -0
- package/dist/tags-LDHXONR3.js.map +1 -0
- package/dist/tags-UW3WJTAQ.js +20 -0
- package/dist/tags-UW3WJTAQ.js.map +1 -0
- package/dist/targeting-constants-D64YO3E7.js +118 -0
- package/dist/targeting-constants-D64YO3E7.js.map +1 -0
- package/dist/targeting-criteria-BP6VJA7X.js +113 -0
- package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
- package/dist/targets-CQWO2UXD.js +102 -0
- package/dist/targets-CQWO2UXD.js.map +1 -0
- package/dist/templates-WZSTNRNZ.js +178 -0
- package/dist/templates-WZSTNRNZ.js.map +1 -0
- package/dist/testimonials-ETHSNWUH.js +32 -0
- package/dist/testimonials-ETHSNWUH.js.map +1 -0
- package/dist/themes-YU663LQH.js +94 -0
- package/dist/themes-YU663LQH.js.map +1 -0
- package/dist/top-companies-KTXHS472.js +108 -0
- package/dist/top-companies-KTXHS472.js.map +1 -0
- package/dist/translate-A7LYHUW3.js +600 -0
- package/dist/translate-A7LYHUW3.js.map +1 -0
- package/dist/triggers-4EDFLNGH.js +141 -0
- package/dist/triggers-4EDFLNGH.js.map +1 -0
- package/dist/tweets-ZUKQAAUQ.js +123 -0
- package/dist/tweets-ZUKQAAUQ.js.map +1 -0
- package/dist/unfollow-A4JVCJBF.js +46 -0
- package/dist/unfollow-A4JVCJBF.js.map +1 -0
- package/dist/unlink-KY2OEKMD.js +67 -0
- package/dist/unlink-KY2OEKMD.js.map +1 -0
- package/dist/unstage-FHUG67RI.js +84 -0
- package/dist/unstage-FHUG67RI.js.map +1 -0
- package/dist/unstage-ZRLLCSQF.js +95 -0
- package/dist/unstage-ZRLLCSQF.js.map +1 -0
- package/dist/update-27LGM65V.js +63 -0
- package/dist/update-27LGM65V.js.map +1 -0
- package/dist/update-AIY46I2Q.js +155 -0
- package/dist/update-AIY46I2Q.js.map +1 -0
- package/dist/update-QYD2XZFM.js +142 -0
- package/dist/update-QYD2XZFM.js.map +1 -0
- package/dist/update-W2OSRNFO.js +98 -0
- package/dist/update-W2OSRNFO.js.map +1 -0
- package/dist/upload-JGBTSKGH.js +126 -0
- package/dist/upload-JGBTSKGH.js.map +1 -0
- package/dist/upload-XEHWYMJG.js +150 -0
- package/dist/upload-XEHWYMJG.js.map +1 -0
- package/dist/upscale-I5P2OHTN.js +109 -0
- package/dist/upscale-I5P2OHTN.js.map +1 -0
- package/dist/url-options-QHGA42RP.js +130 -0
- package/dist/url-options-QHGA42RP.js.map +1 -0
- package/dist/url-params-NWSUHWRE.js +98 -0
- package/dist/url-params-NWSUHWRE.js.map +1 -0
- package/dist/use-U4HG2NF3.js +95 -0
- package/dist/use-U4HG2NF3.js.map +1 -0
- package/dist/validate-VKL3XKQ2.js +91 -0
- package/dist/validate-VKL3XKQ2.js.map +1 -0
- package/dist/variant-FOVE6URJ.js +338 -0
- package/dist/variant-FOVE6URJ.js.map +1 -0
- package/dist/videos-DP3VCSYG.js +39 -0
- package/dist/videos-DP3VCSYG.js.map +1 -0
- package/dist/view-HRI3FHCH.js +121 -0
- package/dist/view-HRI3FHCH.js.map +1 -0
- package/dist/viewer-check-JYUE24M6.js +68 -0
- package/dist/viewer-check-JYUE24M6.js.map +1 -0
- package/dist/web-AFUIWPFU.js +140 -0
- package/dist/web-AFUIWPFU.js.map +1 -0
- package/dist/winners-SMMDN6LW.js +113 -0
- package/dist/winners-SMMDN6LW.js.map +1 -0
- package/dist/winning-ads-PCIJUYVA.js +84 -0
- package/dist/winning-ads-PCIJUYVA.js.map +1 -0
- package/dist/write-commands-7Z34WG2J.js +206 -0
- package/dist/write-commands-7Z34WG2J.js.map +1 -0
- package/dist/write-commands-BLT2SEC4.js +713 -0
- package/dist/write-commands-BLT2SEC4.js.map +1 -0
- package/dist/write-commands-N4FSGRVQ.js +743 -0
- package/dist/write-commands-N4FSGRVQ.js.map +1 -0
- package/dist/write-commands-Q4MQ3BGM.js +1015 -0
- package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
- package/dist/x-AUOZJNWE.js +47 -0
- package/dist/x-AUOZJNWE.js.map +1 -0
- package/package.json +9 -2
- package/dist/chunk-FGHMWBUD.js +0 -9989
- package/dist/chunk-FGHMWBUD.js.map +0 -1
- package/dist/chunk-HJEMOSPH.js +0 -1292
- package/dist/chunk-HJEMOSPH.js.map +0 -1
- package/dist/chunk-MF7YA62W.js.map +0 -1
- package/dist/chunk-VZEDAFAR.js.map +0 -1
- package/dist/chunk-XHC4LMK4.js.map +0 -1
- package/dist/client-GR6YL3YX.js +0 -17
- package/dist/output-NMQXZF3Z.js +0 -18
- /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
- /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
- /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/media-sources/shared.ts"],"sourcesContent":["import type { MediaSourceSummary } from \"@baker/api/media-sources\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\n\n/**\n * A Drive folder is never connected by link: it is chosen in Baker, from the\n * company's Google Drive connection (Add source → Google Drive), which only the\n * Baker team can set up for now. Without this the agent retries or hunts for\n * another way in; with it, it relays the message and carries on.\n */\nexport function driveRefusalFix(input: string, code: string): string | undefined {\n if (!/drive\\.google\\.com/i.test(input) || code !== \"BAD_REQUEST\") return undefined;\n return 'A Google Drive folder is never added by link — don\\'t retry. Call request_connection with platform \"google-drive\" and choose \"media-folder\": the card lets the user pick the folder in the chat (only the Baker team can for now; anyone else is told the team will set it up). A connected result carries the new source\\'s mediaSourceKey; if it is declined, carry on with the rest of the task.';\n}\n\n/** Emit the `{ ok: false, error }` envelope and exit non-zero. */\nexport function reportError(err: unknown, input?: string): never {\n if (err instanceof ApiError) {\n const fix = input ? driveRefusalFix(input, err.code) : undefined;\n writeJson({ ok: false, error: { code: err.code, message: err.message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\ntype Half = NonNullable<MediaSourceSummary[\"images\"]>;\n\nfunction halfState(half: Half | undefined): Record<string, unknown> | null {\n if (!half) return null;\n return {\n status: half.syncStatus === \"fetching\" || half.syncStatus === \"processing\" ? \"importing\" : half.syncStatus,\n stored: half.storedCount ?? 0,\n ...(half.pendingItems ? { pending: half.pendingItems } : {}),\n ...(half.failedItems ? { failed: half.failedItems } : {}),\n ...(half.lastSyncedAt ? { lastSyncedAt: new Date(half.lastSyncedAt).toISOString() } : {}),\n ...(half.errorMessage ? { error: half.errorMessage } : {}),\n };\n}\n\n/**\n * What the agent needs to decide with: which account, whether it is still\n * importing, and how much it has brought in — per library, because a TikTok\n * account can fill the video library and leave the image library empty.\n * Row ids stay out: the key is how every other command names a source.\n */\nexport function compactSource(source: MediaSourceSummary): Record<string, unknown> {\n return {\n key: source.key,\n platform: source.platform,\n label: source.label,\n url: source.profileUrl,\n autoSync: source.refreshInterval,\n images: halfState(source.images),\n videos: halfState(source.videos),\n };\n}\n\nexport function isImporting(source: MediaSourceSummary): boolean {\n return [source.images, source.videos].some(\n (half) => half?.syncStatus === \"fetching\" || half?.syncStatus === \"processing\",\n );\n}\n"],"mappings":";;;;;;;;AAUO,SAAS,gBAAgB,OAAe,MAAkC;AAC/E,MAAI,CAAC,sBAAsB,KAAK,KAAK,KAAK,SAAS,cAAe,QAAO;AACzE,SAAO;AACT;AAGO,SAAS,YAAY,KAAc,OAAuB;AAC/D,MAAI,eAAe,UAAU;AAC3B,UAAM,MAAM,QAAQ,gBAAgB,OAAO,IAAI,IAAI,IAAI;AACvD,cAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,SAAS,GAAI,MAAM,EAAE,IAAI,IAAI,CAAC,EAAG,EAAE,CAAC;AACjG,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,YAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,kBAAkB,SAAS,mBAAmB,EAAE,CAAC;AACvF,UAAQ,KAAK,CAAC;AAChB;AAIA,SAAS,UAAU,MAAwD;AACzE,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO;AAAA,IACL,QAAQ,KAAK,eAAe,cAAc,KAAK,eAAe,eAAe,cAAc,KAAK;AAAA,IAChG,QAAQ,KAAK,eAAe;AAAA,IAC5B,GAAI,KAAK,eAAe,EAAE,SAAS,KAAK,aAAa,IAAI,CAAC;AAAA,IAC1D,GAAI,KAAK,cAAc,EAAE,QAAQ,KAAK,YAAY,IAAI,CAAC;AAAA,IACvD,GAAI,KAAK,eAAe,EAAE,cAAc,IAAI,KAAK,KAAK,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC;AAAA,IACvF,GAAI,KAAK,eAAe,EAAE,OAAO,KAAK,aAAa,IAAI,CAAC;AAAA,EAC1D;AACF;AAQO,SAAS,cAAc,QAAqD;AACjF,SAAO;AAAA,IACL,KAAK,OAAO;AAAA,IACZ,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,KAAK,OAAO;AAAA,IACZ,UAAU,OAAO;AAAA,IACjB,QAAQ,UAAU,OAAO,MAAM;AAAA,IAC/B,QAAQ,UAAU,OAAO,MAAM;AAAA,EACjC;AACF;AAEO,SAAS,YAAY,QAAqC;AAC/D,SAAO,CAAC,OAAO,QAAQ,OAAO,MAAM,EAAE;AAAA,IACpC,CAAC,SAAS,MAAM,eAAe,cAAc,MAAM,eAAe;AAAA,EACpE;AACF;","names":[]}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import {
|
|
2
|
+
nodeParamsPreview
|
|
3
|
+
} from "./chunk-NHU33T2S.js";
|
|
4
|
+
import {
|
|
5
|
+
creativeSlugFromCanvasPath,
|
|
6
|
+
parseDefinitionSeriesPlace,
|
|
7
|
+
parseDefinitionSourceFields,
|
|
8
|
+
parseDefinitionStrategyFields
|
|
9
|
+
} from "./chunk-3N4PZIIV.js";
|
|
10
|
+
import {
|
|
11
|
+
prepareCanvas
|
|
12
|
+
} from "./chunk-5SJ3JNNY.js";
|
|
13
|
+
import {
|
|
14
|
+
BackendClient
|
|
15
|
+
} from "./chunk-KZUHRZ2C.js";
|
|
16
|
+
import {
|
|
17
|
+
nodeDependencies
|
|
18
|
+
} from "./chunk-66USKCVY.js";
|
|
19
|
+
import {
|
|
20
|
+
requireCredentialsFromEnv
|
|
21
|
+
} from "./chunk-U7BBXM67.js";
|
|
22
|
+
|
|
23
|
+
// src/commands/canvas/sync-definition.ts
|
|
24
|
+
import { readdir, readFile, stat } from "fs/promises";
|
|
25
|
+
import path from "path";
|
|
26
|
+
import { parseDocument } from "yaml";
|
|
27
|
+
import { defineCommand } from "citty";
|
|
28
|
+
|
|
29
|
+
// src/commands/canvas/definition-graph.ts
|
|
30
|
+
var MAX_NODES = 300;
|
|
31
|
+
var PREVIEWABLE_INGEST_EXPECTS = /* @__PURE__ */ new Set(["image"]);
|
|
32
|
+
function nodeInputPreviewUrl(type, params) {
|
|
33
|
+
if (type !== "ingest" || !params || typeof params !== "object") return void 0;
|
|
34
|
+
const p = params;
|
|
35
|
+
if (p.source !== "url" || typeof p.url !== "string") return void 0;
|
|
36
|
+
if (!/^https?:\/\//i.test(p.url)) return void 0;
|
|
37
|
+
if (typeof p.expect === "string" && !PREVIEWABLE_INGEST_EXPECTS.has(p.expect)) return void 0;
|
|
38
|
+
return p.url;
|
|
39
|
+
}
|
|
40
|
+
function canvasToDefinitionGraph(canvas) {
|
|
41
|
+
const rawNodes = canvas?.nodes;
|
|
42
|
+
if (!Array.isArray(rawNodes)) return null;
|
|
43
|
+
const parsed = [];
|
|
44
|
+
for (const raw of rawNodes) {
|
|
45
|
+
const id = raw?.id;
|
|
46
|
+
const type = raw?.type;
|
|
47
|
+
if (typeof id !== "string" || typeof type !== "string") continue;
|
|
48
|
+
parsed.push({ id, type, inputs: raw.inputs, params: raw.params });
|
|
49
|
+
if (parsed.length >= MAX_NODES) break;
|
|
50
|
+
}
|
|
51
|
+
if (parsed.length === 0) return null;
|
|
52
|
+
const ids = new Set(parsed.map((n) => n.id));
|
|
53
|
+
const nodes = parsed.map(({ id, type, inputs, params }) => {
|
|
54
|
+
const deps = nodeDependencies({ id, inputs, params }, ids);
|
|
55
|
+
deps.delete(id);
|
|
56
|
+
const depList = [...deps];
|
|
57
|
+
const paramsPreview = nodeParamsPreview(params, depList);
|
|
58
|
+
const base = { id, type };
|
|
59
|
+
if (depList.length > 0) base.deps = depList;
|
|
60
|
+
if (paramsPreview) base.paramsPreview = paramsPreview;
|
|
61
|
+
const inputPreviewUrl = nodeInputPreviewUrl(type, params);
|
|
62
|
+
if (inputPreviewUrl) base.inputPreviewUrl = inputPreviewUrl;
|
|
63
|
+
return base;
|
|
64
|
+
});
|
|
65
|
+
const rawOutput = canvas?.output;
|
|
66
|
+
const outNode = rawOutput?.node;
|
|
67
|
+
const outSlot = rawOutput?.output;
|
|
68
|
+
const output = typeof outNode === "string" && typeof outSlot === "string" ? { node: outNode, output: outSlot } : void 0;
|
|
69
|
+
return { nodes, output };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/commands/canvas/sync-definition.ts
|
|
73
|
+
function buildDefinitionSyncPayload(input, graph, chatId) {
|
|
74
|
+
const { canvas: _canvas, ...fields } = input;
|
|
75
|
+
return Object.fromEntries([
|
|
76
|
+
...Object.entries(fields).filter(([, v]) => v !== void 0),
|
|
77
|
+
["graph", graph],
|
|
78
|
+
["chatId", chatId]
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
async function readDefinitionSourceFields(canvasPath) {
|
|
82
|
+
try {
|
|
83
|
+
return parseDefinitionSourceFields(await readFile(path.join(path.dirname(canvasPath), "_definition.md"), "utf8"));
|
|
84
|
+
} catch {
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function readDefinitionTitle(canvasPath) {
|
|
89
|
+
try {
|
|
90
|
+
const raw = await readFile(path.join(path.dirname(canvasPath), "_definition.md"), "utf8");
|
|
91
|
+
const match = raw.match(/^---\r?\n([\s\S]*?\r?\n)?---/);
|
|
92
|
+
const doc = match ? parseDocument(match[1] ?? "") : null;
|
|
93
|
+
const title = doc && doc.errors.length === 0 ? doc.get("title") : void 0;
|
|
94
|
+
return typeof title === "string" && title.trim() ? title.trim() : void 0;
|
|
95
|
+
} catch {
|
|
96
|
+
return void 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function readDefinitionStrategyFields(canvasPath) {
|
|
100
|
+
try {
|
|
101
|
+
return parseDefinitionStrategyFields(await readFile(path.join(path.dirname(canvasPath), "_definition.md"), "utf8"));
|
|
102
|
+
} catch {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function readDefinitionSeriesPlace(canvasPath) {
|
|
107
|
+
try {
|
|
108
|
+
return parseDefinitionSeriesPlace(await readFile(path.join(path.dirname(canvasPath), "_definition.md"), "utf8")) ?? {};
|
|
109
|
+
} catch {
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function syncCreativeDefinitionBestEffort(input) {
|
|
114
|
+
const chatId = process.env.BAKER_CHAT_ID;
|
|
115
|
+
if (!chatId) return;
|
|
116
|
+
const graph = canvasToDefinitionGraph(input.canvas);
|
|
117
|
+
if (!graph || graph.nodes.length === 0) return;
|
|
118
|
+
try {
|
|
119
|
+
const creds = requireCredentialsFromEnv();
|
|
120
|
+
const client = new BackendClient({ baseUrl: creds.url, apiKey: creds.apiKey });
|
|
121
|
+
await client.syncCreativeDefinition(buildDefinitionSyncPayload(input, graph, chatId));
|
|
122
|
+
process.stdout.write(`[definition] synced workflow graph (${graph.nodes.length} nodes) \u2014 view it in the dashboard
|
|
123
|
+
`);
|
|
124
|
+
} catch (e) {
|
|
125
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
126
|
+
process.stderr.write(`[warn] workflow graph not synced (${msg})
|
|
127
|
+
`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async function resolveCanvasPath(inputPath) {
|
|
131
|
+
const resolved = path.resolve(inputPath);
|
|
132
|
+
let dir = resolved;
|
|
133
|
+
try {
|
|
134
|
+
if ((await stat(resolved)).isFile()) {
|
|
135
|
+
if (resolved.endsWith(".canvas.json")) return resolved;
|
|
136
|
+
dir = path.dirname(resolved);
|
|
137
|
+
}
|
|
138
|
+
} catch {
|
|
139
|
+
dir = resolved.endsWith(".canvas.json") ? path.dirname(resolved) : resolved;
|
|
140
|
+
}
|
|
141
|
+
let entries;
|
|
142
|
+
try {
|
|
143
|
+
entries = await readdir(dir);
|
|
144
|
+
} catch {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const canvases = entries.filter((name) => name.endsWith(".canvas.json"));
|
|
148
|
+
const slug = creativeSlugFromCanvasPath(`${dir}/x/`);
|
|
149
|
+
const chosen = (slug ? canvases.find((name) => name === `${slug}.canvas.json`) : void 0) ?? canvases[0];
|
|
150
|
+
return chosen ? path.join(dir, chosen) : null;
|
|
151
|
+
}
|
|
152
|
+
var syncDefinitionCommand = defineCommand({
|
|
153
|
+
meta: {
|
|
154
|
+
name: "sync-definition",
|
|
155
|
+
description: "Push a creative's current node-graph + input thumbnails to the dashboard without rendering. The graph has the creative's blueprint applied (prompt.json and scenes/*.json edits), exactly as `run` would render it, without changing any file. Runs automatically when you edit a creative's canvas.json or prompt.json."
|
|
156
|
+
},
|
|
157
|
+
args: {
|
|
158
|
+
file: {
|
|
159
|
+
type: "positional",
|
|
160
|
+
required: true,
|
|
161
|
+
description: "A path under src/creatives/<slug>/ (the .canvas.json, its prompt.json, or the folder)"
|
|
162
|
+
},
|
|
163
|
+
title: {
|
|
164
|
+
type: "boolean",
|
|
165
|
+
description: "Also record the title its _definition.md gives. Only for a creative just made from another (a series ad, a translation), never on an edit re-sync."
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
async run({ args }) {
|
|
169
|
+
const canvasPath = await resolveCanvasPath(String(args.file));
|
|
170
|
+
if (!canvasPath) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const slug = creativeSlugFromCanvasPath(canvasPath);
|
|
174
|
+
if (!slug) return;
|
|
175
|
+
let canvas;
|
|
176
|
+
let sourceSha;
|
|
177
|
+
try {
|
|
178
|
+
const prepared = await prepareCanvas(canvasPath, { write: false });
|
|
179
|
+
canvas = prepared.fileGraph;
|
|
180
|
+
sourceSha = prepared.sourceSha;
|
|
181
|
+
} catch {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const title = args.title ? await readDefinitionTitle(canvasPath) : void 0;
|
|
185
|
+
await syncCreativeDefinitionBestEffort({
|
|
186
|
+
slug,
|
|
187
|
+
canvas,
|
|
188
|
+
sourceSha,
|
|
189
|
+
...title ? { title } : {},
|
|
190
|
+
...await readDefinitionSourceFields(canvasPath),
|
|
191
|
+
...await readDefinitionStrategyFields(canvasPath),
|
|
192
|
+
...await readDefinitionSeriesPlace(canvasPath)
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
export {
|
|
198
|
+
buildDefinitionSyncPayload,
|
|
199
|
+
readDefinitionSourceFields,
|
|
200
|
+
readDefinitionTitle,
|
|
201
|
+
readDefinitionStrategyFields,
|
|
202
|
+
readDefinitionSeriesPlace,
|
|
203
|
+
syncCreativeDefinitionBestEffort,
|
|
204
|
+
resolveCanvasPath,
|
|
205
|
+
syncDefinitionCommand
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=chunk-KUZFWMJN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/canvas/sync-definition.ts","../src/commands/canvas/definition-graph.ts"],"sourcesContent":["import { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parseDocument } from \"yaml\";\nimport { defineCommand } from \"citty\";\nimport { BackendClient } from \"../../engine/index.ts\";\nimport { requireCredentialsFromEnv } from \"../../engine/client/env.ts\";\nimport {\n type DefinitionSeriesPlace,\n type DefinitionSourceFields,\n type DefinitionStrategyFields,\n parseDefinitionSeriesPlace,\n parseDefinitionSourceFields,\n parseDefinitionStrategyFields,\n} from \"./creative-definition.ts\";\nimport { canvasToDefinitionGraph } from \"./definition-graph.ts\";\nimport { prepareCanvas } from \"./prepare-canvas.ts\";\nimport { creativeSlugFromCanvasPath } from \"./run-record.ts\";\n\n/** Why the creative exists (`_definition.md` idea / message / evidence / angle / persona / awareness / hypothesis). */\ntype DefinitionSyncInput = Omit<DefinitionStrategyFields, \"seriesLead\" | \"language\"> & {\n slug: string;\n /** The series lead and language: omitted when not read (the backend keeps them), null when the definition names none (cleared). */\n seriesLead?: string | null;\n language?: string | null;\n /** Omitted on an edit re-sync so the backend keeps the creative's existing title. */\n title?: string;\n platform?: string;\n formats?: string[];\n sourceReferenceUrl?: string;\n /** The library ad it adapted (`_definition.md` sourceAdId / sourcePlatform / sourceAdvertiserId). */\n sourceAdId?: string;\n sourcePlatform?: string;\n sourceAdvertiserId?: string;\n canvas: unknown;\n /** The creative's source fingerprint (`computeSourceSha`): powers the \"edited since last render\" staleness signal. */\n sourceSha?: string;\n};\n\n/**\n * The body `POST /api/creatives/definition` receives. Absent fields are left out rather than\n * sent as undefined so the backend's `?? existing` keeps what an earlier sync recorded.\n */\nexport function buildDefinitionSyncPayload(\n input: DefinitionSyncInput,\n graph: unknown,\n chatId: string,\n): Record<string, unknown> {\n const { canvas: _canvas, ...fields } = input;\n return Object.fromEntries([\n ...Object.entries(fields).filter(([, v]) => v !== undefined),\n [\"graph\", graph],\n [\"chatId\", chatId],\n ]);\n}\n\n/** The library ids the creative's `_definition.md` names, read from beside its canvas; empty when there is none. */\nexport async function readDefinitionSourceFields(canvasPath: string): Promise<DefinitionSourceFields> {\n try {\n return parseDefinitionSourceFields(await readFile(path.join(path.dirname(canvasPath), \"_definition.md\"), \"utf8\"));\n } catch {\n return {};\n }\n}\n\n/** The creative's title, read from the `_definition.md` beside its canvas; undefined when it names none. */\nexport async function readDefinitionTitle(canvasPath: string): Promise<string | undefined> {\n try {\n const raw = await readFile(path.join(path.dirname(canvasPath), \"_definition.md\"), \"utf8\");\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/);\n const doc = match ? parseDocument(match[1] ?? \"\") : null;\n const title = doc && doc.errors.length === 0 ? doc.get(\"title\") : undefined;\n return typeof title === \"string\" && title.trim() ? title.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** The creative's strategy, read from the `_definition.md` beside its canvas; empty when there is none. */\nexport async function readDefinitionStrategyFields(canvasPath: string): Promise<DefinitionStrategyFields> {\n try {\n return parseDefinitionStrategyFields(await readFile(path.join(path.dirname(canvasPath), \"_definition.md\"), \"utf8\"));\n } catch {\n return {};\n }\n}\n\n/** The series place the `_definition.md` beside the canvas names; empty when it cannot be read, so nothing is cleared. */\nexport async function readDefinitionSeriesPlace(canvasPath: string): Promise<DefinitionSeriesPlace | Record<never, never>> {\n try {\n return (\n parseDefinitionSeriesPlace(await readFile(path.join(path.dirname(canvasPath), \"_definition.md\"), \"utf8\")) ?? {}\n );\n } catch {\n return {};\n }\n}\n\n/**\n * Push a creative's parsed node-graph to the backend so the dashboard can draw\n * its workflow (and its wired input thumbnails) BEFORE — and BETWEEN — billed\n * runs. Best-effort: a missing chat id, missing creds, an unparseable canvas, or\n * a failed POST warns and returns — it must never fail the caller (a scaffold\n * that just did the real work, or a watcher reacting to an edit).\n */\nexport async function syncCreativeDefinitionBestEffort(input: DefinitionSyncInput): Promise<void> {\n const chatId = process.env.BAKER_CHAT_ID;\n if (!chatId) return; // Not chat-attached — nothing to preview against.\n const graph = canvasToDefinitionGraph(input.canvas);\n if (!graph || graph.nodes.length === 0) return;\n try {\n const creds = requireCredentialsFromEnv();\n const client = new BackendClient({ baseUrl: creds.url, apiKey: creds.apiKey });\n await client.syncCreativeDefinition(buildDefinitionSyncPayload(input, graph, chatId));\n process.stdout.write(`[definition] synced workflow graph (${graph.nodes.length} nodes) — view it in the dashboard\\n`);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n process.stderr.write(`[warn] workflow graph not synced (${msg})\\n`);\n }\n}\n\n/**\n * Resolve the canvas file backing a creative from ANY path under its dir — the\n * `{slug}.canvas.json` itself, its sibling `prompt.json`, or the creative\n * directory. Lets a file watcher hand us whichever file changed and still find\n * the one canvas to project. Prefers `{slug}.canvas.json`, else the sole\n * `*.canvas.json` in the directory; null when there is no single canvas.\n */\nexport async function resolveCanvasPath(inputPath: string): Promise<string | null> {\n const resolved = path.resolve(inputPath);\n let dir = resolved;\n try {\n if ((await stat(resolved)).isFile()) {\n if (resolved.endsWith(\".canvas.json\")) return resolved;\n dir = path.dirname(resolved);\n }\n } catch {\n // A deleted/renamed file: fall back to treating the path as its directory.\n dir = resolved.endsWith(\".canvas.json\") ? path.dirname(resolved) : resolved;\n }\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return null;\n }\n const canvases = entries.filter((name) => name.endsWith(\".canvas.json\"));\n const slug = creativeSlugFromCanvasPath(`${dir}/x/`);\n const chosen = (slug ? canvases.find((name) => name === `${slug}.canvas.json`) : undefined) ?? canvases[0];\n return chosen ? path.join(dir, chosen) : null;\n}\n\nexport const syncDefinitionCommand = defineCommand({\n meta: {\n name: \"sync-definition\",\n description:\n \"Push a creative's current node-graph + input thumbnails to the dashboard without rendering. The graph has the creative's blueprint applied (prompt.json and scenes/*.json edits), exactly as `run` would render it, without changing any file. Runs automatically when you edit a creative's canvas.json or prompt.json.\",\n },\n args: {\n file: {\n type: \"positional\",\n required: true,\n description: \"A path under src/creatives/<slug>/ (the .canvas.json, its prompt.json, or the folder)\",\n },\n title: {\n type: \"boolean\",\n description:\n \"Also record the title its _definition.md gives. Only for a creative just made from another (a series ad, a translation), never on an edit re-sync.\",\n },\n },\n async run({ args }) {\n const canvasPath = await resolveCanvasPath(String(args.file));\n if (!canvasPath) {\n // Nothing to sync (not a creative path, or no canvas yet) — a no-op, not an error.\n return;\n }\n const slug = creativeSlugFromCanvasPath(canvasPath);\n if (!slug) return;\n // The same preflight `run` uses, so the dashboard draws the graph that will render\n // (the scene and copy projections included), in the file's canvas-relative spelling,\n // never this machine's absolute paths. Read-only: the watcher runs this over every\n // creative on every edit, and must never rewrite a creative nobody touched. The\n // fingerprint is taken over the projected graph, as `run` and `baker canvas stale` take it.\n let canvas: unknown;\n let sourceSha: string | undefined;\n try {\n const prepared = await prepareCanvas(canvasPath, { write: false });\n canvas = prepared.fileGraph;\n sourceSha = prepared.sourceSha;\n } catch {\n // Mid-edit invalid JSON (canvas, prompt.json or a scene): skip this tick; the next\n // save re-fires the watcher.\n return;\n }\n // No title/platform/formats: an edit re-sync must never rename or re-classify\n // the creative — the backend preserves what the scaffold already set. The library\n // ids are re-read from `_definition.md`, so an agent that adds or fixes them after\n // the scaffold still gets them recorded without waiting for Publish — and so is the\n // creative's strategy, the moment the agent writes it.\n const title = args.title ? await readDefinitionTitle(canvasPath) : undefined;\n await syncCreativeDefinitionBestEffort({\n slug,\n canvas,\n sourceSha,\n ...(title ? { title } : {}),\n ...(await readDefinitionSourceFields(canvasPath)),\n ...(await readDefinitionStrategyFields(canvasPath)),\n ...(await readDefinitionSeriesPlace(canvasPath)),\n });\n },\n});\n","import { nodeDependencies } from \"../../engine/engine/graph.ts\";\nimport { nodeParamsPreview } from \"./node-preview.ts\";\n\nexport type DefinitionGraphNode = {\n id: string;\n type: string;\n deps?: string[];\n paramsPreview?: string;\n /**\n * A directly-viewable input image/video for the node BEFORE any run — today\n * an `ingest` node's `source:\"url\"` src. Lets the dashboard show a real\n * thumbnail (a swapped logo/hero) the moment the canvas changes, with no\n * render. Path-source ingests carry no preview (their bytes aren't uploaded\n * outside a run); the graph still shows the `path:` line via paramsPreview.\n */\n inputPreviewUrl?: string;\n};\nexport type CanvasDefinitionGraph = {\n nodes: DefinitionGraphNode[];\n output?: { node: string; output: string };\n};\n\n// Keep the synced blueprint bounded — matches the backend's cap.\nconst MAX_NODES = 300;\n\n// Only image ingests become a pre-run thumbnail: absent `expect` defaults to an\n// image, and a still renders unambiguously in the graph card. Video/font/json\n// ingests carry no preview (a video would need its own player wiring) — their\n// `url:`/`path:` line still shows via paramsPreview.\nconst PREVIEWABLE_INGEST_EXPECTS = new Set([\"image\"]);\n\n/**\n * A directly-viewable input URL for a node's pre-run thumbnail: an `ingest`\n * node pulling an image from a `source:\"url\"` src. Everything else (path-source\n * ingests, generators, non-image expects) returns undefined — only image bytes\n * the dashboard can already fetch become a thumbnail without a run.\n */\nfunction nodeInputPreviewUrl(type: string, params: unknown): string | undefined {\n if (type !== \"ingest\" || !params || typeof params !== \"object\") return undefined;\n const p = params as { source?: unknown; url?: unknown; expect?: unknown };\n if (p.source !== \"url\" || typeof p.url !== \"string\") return undefined;\n if (!/^https?:\\/\\//i.test(p.url)) return undefined;\n if (typeof p.expect === \"string\" && !PREVIEWABLE_INGEST_EXPECTS.has(p.expect)) return undefined;\n return p.url;\n}\n\n/**\n * Parse a canvas JSON into the compact node-graph the dashboard draws before any\n * run — shares the engine's `nodeDependencies` ($ref edges from inputs AND params) so\n * the pre-run blueprint matches the eventual run graph. Best-effort and defensive:\n * a not-yet-valid canvas (mid-edit) returns whatever nodes it can read, or null\n * if there are none, so a caller can skip the sync without failing the command.\n */\nexport function canvasToDefinitionGraph(canvas: unknown): CanvasDefinitionGraph | null {\n const rawNodes = (canvas as { nodes?: unknown })?.nodes;\n if (!Array.isArray(rawNodes)) return null;\n\n const parsed: Array<{ id: string; type: string; inputs: unknown; params: unknown }> = [];\n for (const raw of rawNodes) {\n const id = (raw as { id?: unknown })?.id;\n const type = (raw as { type?: unknown })?.type;\n if (typeof id !== \"string\" || typeof type !== \"string\") continue;\n parsed.push({ id, type, inputs: (raw as { inputs?: unknown }).inputs, params: (raw as { params?: unknown }).params });\n if (parsed.length >= MAX_NODES) break;\n }\n if (parsed.length === 0) return null;\n\n const ids = new Set(parsed.map((n) => n.id));\n const nodes: DefinitionGraphNode[] = parsed.map(({ id, type, inputs, params }) => {\n const deps = nodeDependencies({ id, inputs, params }, ids);\n deps.delete(id);\n const depList = [...deps];\n // The pre-run graph carries each node's spec (model / aspect / size / expect …) +\n // its wired props so a freshly-scaffolded creative shows full node detail in the\n // inspector BEFORE the first billed run, matching what a run later records.\n const paramsPreview = nodeParamsPreview(params, depList);\n const base: DefinitionGraphNode = { id, type };\n if (depList.length > 0) base.deps = depList;\n if (paramsPreview) base.paramsPreview = paramsPreview;\n const inputPreviewUrl = nodeInputPreviewUrl(type, params);\n if (inputPreviewUrl) base.inputPreviewUrl = inputPreviewUrl;\n return base;\n });\n\n const rawOutput = (canvas as { output?: unknown })?.output;\n const outNode = (rawOutput as { node?: unknown })?.node;\n const outSlot = (rawOutput as { output?: unknown })?.output;\n const output =\n typeof outNode === \"string\" && typeof outSlot === \"string\" ? { node: outNode, output: outSlot } : undefined;\n\n return { nodes, output };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS,UAAU,YAAY;AACxC,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;;;ACoB9B,IAAM,YAAY;AAMlB,IAAM,6BAA6B,oBAAI,IAAI,CAAC,OAAO,CAAC;AAQpD,SAAS,oBAAoB,MAAc,QAAqC;AAC9E,MAAI,SAAS,YAAY,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AACvE,QAAM,IAAI;AACV,MAAI,EAAE,WAAW,SAAS,OAAO,EAAE,QAAQ,SAAU,QAAO;AAC5D,MAAI,CAAC,gBAAgB,KAAK,EAAE,GAAG,EAAG,QAAO;AACzC,MAAI,OAAO,EAAE,WAAW,YAAY,CAAC,2BAA2B,IAAI,EAAE,MAAM,EAAG,QAAO;AACtF,SAAO,EAAE;AACX;AASO,SAAS,wBAAwB,QAA+C;AACrF,QAAM,WAAY,QAAgC;AAClD,MAAI,CAAC,MAAM,QAAQ,QAAQ,EAAG,QAAO;AAErC,QAAM,SAAgF,CAAC;AACvF,aAAW,OAAO,UAAU;AAC1B,UAAM,KAAM,KAA0B;AACtC,UAAM,OAAQ,KAA4B;AAC1C,QAAI,OAAO,OAAO,YAAY,OAAO,SAAS,SAAU;AACxD,WAAO,KAAK,EAAE,IAAI,MAAM,QAAS,IAA6B,QAAQ,QAAS,IAA6B,OAAO,CAAC;AACpH,QAAI,OAAO,UAAU,UAAW;AAAA,EAClC;AACA,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,QAAM,MAAM,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3C,QAAM,QAA+B,OAAO,IAAI,CAAC,EAAE,IAAI,MAAM,QAAQ,OAAO,MAAM;AAChF,UAAM,OAAO,iBAAiB,EAAE,IAAI,QAAQ,OAAO,GAAG,GAAG;AACzD,SAAK,OAAO,EAAE;AACd,UAAM,UAAU,CAAC,GAAG,IAAI;AAIxB,UAAM,gBAAgB,kBAAkB,QAAQ,OAAO;AACvD,UAAM,OAA4B,EAAE,IAAI,KAAK;AAC7C,QAAI,QAAQ,SAAS,EAAG,MAAK,OAAO;AACpC,QAAI,cAAe,MAAK,gBAAgB;AACxC,UAAM,kBAAkB,oBAAoB,MAAM,MAAM;AACxD,QAAI,gBAAiB,MAAK,kBAAkB;AAC5C,WAAO;AAAA,EACT,CAAC;AAED,QAAM,YAAa,QAAiC;AACpD,QAAM,UAAW,WAAkC;AACnD,QAAM,UAAW,WAAoC;AACrD,QAAM,SACJ,OAAO,YAAY,YAAY,OAAO,YAAY,WAAW,EAAE,MAAM,SAAS,QAAQ,QAAQ,IAAI;AAEpG,SAAO,EAAE,OAAO,OAAO;AACzB;;;ADjDO,SAAS,2BACd,OACA,OACA,QACyB;AACzB,QAAM,EAAE,QAAQ,SAAS,GAAG,OAAO,IAAI;AACvC,SAAO,OAAO,YAAY;AAAA,IACxB,GAAG,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,MAAM,MAAS;AAAA,IAC3D,CAAC,SAAS,KAAK;AAAA,IACf,CAAC,UAAU,MAAM;AAAA,EACnB,CAAC;AACH;AAGA,eAAsB,2BAA2B,YAAqD;AACpG,MAAI;AACF,WAAO,4BAA4B,MAAM,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAAA,EAClH,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAGA,eAAsB,oBAAoB,YAAiD;AACzF,MAAI;AACF,UAAM,MAAM,MAAM,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,GAAG,gBAAgB,GAAG,MAAM;AACxF,UAAM,QAAQ,IAAI,MAAM,8BAA8B;AACtD,UAAM,MAAM,QAAQ,cAAc,MAAM,CAAC,KAAK,EAAE,IAAI;AACpD,UAAM,QAAQ,OAAO,IAAI,OAAO,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI;AAClE,WAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AAAA,EACpE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,6BAA6B,YAAuD;AACxG,MAAI;AACF,WAAO,8BAA8B,MAAM,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAAA,EACpH,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAGA,eAAsB,0BAA0B,YAA2E;AACzH,MAAI;AACF,WACE,2BAA2B,MAAM,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,GAAG,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;AAAA,EAElH,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AASA,eAAsB,iCAAiC,OAA2C;AAChG,QAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,CAAC,OAAQ;AACb,QAAM,QAAQ,wBAAwB,MAAM,MAAM;AAClD,MAAI,CAAC,SAAS,MAAM,MAAM,WAAW,EAAG;AACxC,MAAI;AACF,UAAM,QAAQ,0BAA0B;AACxC,UAAM,SAAS,IAAI,cAAc,EAAE,SAAS,MAAM,KAAK,QAAQ,MAAM,OAAO,CAAC;AAC7E,UAAM,OAAO,uBAAuB,2BAA2B,OAAO,OAAO,MAAM,CAAC;AACpF,YAAQ,OAAO,MAAM,uCAAuC,MAAM,MAAM,MAAM;AAAA,CAAsC;AAAA,EACtH,SAAS,GAAG;AACV,UAAM,MAAM,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACrD,YAAQ,OAAO,MAAM,qCAAqC,GAAG;AAAA,CAAK;AAAA,EACpE;AACF;AASA,eAAsB,kBAAkB,WAA2C;AACjF,QAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,MAAI,MAAM;AACV,MAAI;AACF,SAAK,MAAM,KAAK,QAAQ,GAAG,OAAO,GAAG;AACnC,UAAI,SAAS,SAAS,cAAc,EAAG,QAAO;AAC9C,YAAM,KAAK,QAAQ,QAAQ;AAAA,IAC7B;AAAA,EACF,QAAQ;AAEN,UAAM,SAAS,SAAS,cAAc,IAAI,KAAK,QAAQ,QAAQ,IAAI;AAAA,EACrE;AACA,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,QAAQ,GAAG;AAAA,EAC7B,QAAQ;AACN,WAAO;AAAA,EACT;AACA,QAAM,WAAW,QAAQ,OAAO,CAAC,SAAS,KAAK,SAAS,cAAc,CAAC;AACvE,QAAM,OAAO,2BAA2B,GAAG,GAAG,KAAK;AACnD,QAAM,UAAU,OAAO,SAAS,KAAK,CAAC,SAAS,SAAS,GAAG,IAAI,cAAc,IAAI,WAAc,SAAS,CAAC;AACzG,SAAO,SAAS,KAAK,KAAK,KAAK,MAAM,IAAI;AAC3C;AAEO,IAAM,wBAAwB,cAAc;AAAA,EACjD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,aAAa,MAAM,kBAAkB,OAAO,KAAK,IAAI,CAAC;AAC5D,QAAI,CAAC,YAAY;AAEf;AAAA,IACF;AACA,UAAM,OAAO,2BAA2B,UAAU;AAClD,QAAI,CAAC,KAAM;AAMX,QAAI;AACJ,QAAI;AACJ,QAAI;AACF,YAAM,WAAW,MAAM,cAAc,YAAY,EAAE,OAAO,MAAM,CAAC;AACjE,eAAS,SAAS;AAClB,kBAAY,SAAS;AAAA,IACvB,QAAQ;AAGN;AAAA,IACF;AAMA,UAAM,QAAQ,KAAK,QAAQ,MAAM,oBAAoB,UAAU,IAAI;AACnE,UAAM,iCAAiC;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,MACzB,GAAI,MAAM,2BAA2B,UAAU;AAAA,MAC/C,GAAI,MAAM,6BAA6B,UAAU;AAAA,MACjD,GAAI,MAAM,0BAA0B,UAAU;AAAA,IAChD,CAAC;AAAA,EACH;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AUTO_PUBLISH_REFUSAL,
|
|
3
|
+
TRIGGER_KINDS,
|
|
4
|
+
TRIGGER_KIND_IDS,
|
|
5
|
+
TRIGGER_TARGETS,
|
|
6
|
+
TRIGGER_TARGET_FIELDS,
|
|
7
|
+
TRIGGER_TARGET_FIELD_IDS,
|
|
8
|
+
firstTimes,
|
|
9
|
+
isTriggerKind,
|
|
10
|
+
parseConditionsExpression
|
|
11
|
+
} from "./chunk-SMIENBNX.js";
|
|
12
|
+
import {
|
|
13
|
+
ApiError,
|
|
14
|
+
validateConvexId
|
|
15
|
+
} from "./chunk-HREWXNTO.js";
|
|
16
|
+
import {
|
|
17
|
+
getEnv
|
|
18
|
+
} from "./chunk-O6QKCJE4.js";
|
|
19
|
+
import {
|
|
20
|
+
writeJson
|
|
21
|
+
} from "./chunk-WOTDHRNF.js";
|
|
22
|
+
|
|
23
|
+
// src/commands/scheduled-agents/shared.ts
|
|
24
|
+
var TEMP_SCHEDULED_AGENT_PREFIX = "temp_agent_";
|
|
25
|
+
var TEMP_ID_PREFIX = "temp_";
|
|
26
|
+
function writeOk(data, hints) {
|
|
27
|
+
writeJson({ ok: true, data: data ?? null, ...hints && hints.length > 0 ? { hints } : {} });
|
|
28
|
+
}
|
|
29
|
+
function failValidation(message) {
|
|
30
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message } });
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
function failApi(err) {
|
|
34
|
+
if (err instanceof ApiError) {
|
|
35
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
if (err instanceof Error) {
|
|
39
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: err.message } });
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
var AUTO_PUBLISH_ARG = {
|
|
46
|
+
"auto-publish": {
|
|
47
|
+
type: "string",
|
|
48
|
+
description: "Not available to the agent: publishing every run unreviewed is switched on by the user, on the item, after this chat is published. Passing it is refused and tells you what to ask them.",
|
|
49
|
+
required: false
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
function refuseAutoPublish(args) {
|
|
53
|
+
if (args["auto-publish"] === void 0) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
writeJson({
|
|
57
|
+
ok: false,
|
|
58
|
+
error: {
|
|
59
|
+
code: "FORBIDDEN",
|
|
60
|
+
message: AUTO_PUBLISH_REFUSAL,
|
|
61
|
+
fix: {
|
|
62
|
+
action: "ask_user",
|
|
63
|
+
explanation: 'Run the command again without --auto-publish. After this chat is published, ask the user to open the item in Scheduled agents and switch on "Publish its work on its own" under "When a run finishes" \u2014 until then each run waits for their review.'
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
function isTempScheduledAgentId(id) {
|
|
70
|
+
return id.startsWith(TEMP_SCHEDULED_AGENT_PREFIX);
|
|
71
|
+
}
|
|
72
|
+
function isOtherTempId(id) {
|
|
73
|
+
return id.startsWith(TEMP_ID_PREFIX) && !isTempScheduledAgentId(id);
|
|
74
|
+
}
|
|
75
|
+
function validateScheduledAgentRef(ref) {
|
|
76
|
+
if (isOtherTempId(ref)) {
|
|
77
|
+
failValidation(`Scheduled agent temp IDs must start with ${TEMP_SCHEDULED_AGENT_PREFIX}.`);
|
|
78
|
+
}
|
|
79
|
+
if (!isTempScheduledAgentId(ref)) {
|
|
80
|
+
validateConvexId(ref);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
var TRIGGER_ARG_DESCRIPTION = `What makes this run. ${TRIGGER_KIND_IDS.map(
|
|
84
|
+
(id) => `${id}: ${TRIGGER_KINDS[id].description}`
|
|
85
|
+
).join(" ")} For the two time ones, pass --cron or --run-at instead and the kind is implied.`;
|
|
86
|
+
var TRIGGER_KIND_LIST = [...TRIGGER_KIND_IDS];
|
|
87
|
+
var NARROWING_DESCRIPTIONS = {
|
|
88
|
+
eventName: "With --trigger event.received: only this event name (a source's name, or one your site sends). Omit it to run on any event.",
|
|
89
|
+
toolkit: "With --trigger app.event (required): the connected tool, by its slug \u2014 gmail, slack, googlesheets.",
|
|
90
|
+
account: "With --trigger app.event (required): which connected account of that tool, by id (a tool can be connected more than once).",
|
|
91
|
+
appEvent: "With --trigger app.event (required): what happens in the tool, by the tool's own id \u2014 GMAIL_NEW_GMAIL_MESSAGE. `targets --field appEvent --app <tool>` lists them with the settings each needs.",
|
|
92
|
+
provider: "With --trigger connection.created, connection.removed or connection.needs_reconnect: only this tool (google-ads, hubspot, meta, or a connected tool's slug such as slack). Omit it for any tool.",
|
|
93
|
+
flowId: "With --trigger form.submitted or flow.step.submitted: which Form, by slug. Omit it on form.submitted for any Form.",
|
|
94
|
+
stepId: "With --trigger flow.step.submitted: which step of that Form, by id \u2014 `targets --field stepId --form <slug>` lists them by name.",
|
|
95
|
+
page: "With --trigger landing.created or landing.published: only this page, by slug. Omit it for any page.",
|
|
96
|
+
tag: "With --trigger task.created, task.claimed, task.completed, landing.created or landing.published: only ones carrying this tag. Omit it for any.",
|
|
97
|
+
experimentId: 'With --trigger experiment.decided, experiment.ended or experiment.concluded: only this test. Omit it for any test. Not for experiment.started \u2014 narrow that with --when "page = <page>".',
|
|
98
|
+
taskId: "With --trigger task.claimed or task.completed: only this Task, by id (a temp_ id of a Task staged in this chat works too). Omit it for any Task.",
|
|
99
|
+
agentId: "With --trigger session.published, session.publish_failed or session.publish_incomplete: only the runs of this scheduled agent, by id (a temp_agent_ id staged in this chat works too). Omit it for any agent's work.",
|
|
100
|
+
platform: "With --trigger session.publish_incomplete: only when this platform's changes did not all land \u2014 google-ads, meta-ads, linkedin-ads, x-ads, chatgpt-ads, tag-manager, ga4 or shopify. Omit it for any.",
|
|
101
|
+
collection: "With --trigger knowledge.updated: only this Knowledge collection. Omit it for any of them.",
|
|
102
|
+
sourceId: "With --trigger review.received: only reviews from this review source, by id. Omit it for any source.",
|
|
103
|
+
advertiserId: "With --trigger advertiser.new_ads: only this followed advertiser, by id. Omit it for any of them."
|
|
104
|
+
};
|
|
105
|
+
var NARROWING_ARGS = {
|
|
106
|
+
...Object.fromEntries(
|
|
107
|
+
TRIGGER_TARGET_FIELD_IDS.map((field) => [
|
|
108
|
+
TRIGGER_TARGET_FIELDS[field].flag,
|
|
109
|
+
{
|
|
110
|
+
type: "string",
|
|
111
|
+
description: `${NARROWING_DESCRIPTIONS[field]} \`baker scheduled-agents targets --trigger <kind> --field ${field}\` lists the values.`,
|
|
112
|
+
required: false
|
|
113
|
+
}
|
|
114
|
+
])
|
|
115
|
+
),
|
|
116
|
+
config: {
|
|
117
|
+
type: "string",
|
|
118
|
+
description: `With --trigger app.event: the event's own settings as a JSON object \u2014 they filter inside the tool, before anything is sent. A Gmail search ('{"query":"from:ana@acme.com"}'), a label, a Slack channel, a GitHub repository ('{"owner":"acme","repo":"site"}'). \`targets --field appEvent --app <tool> --event <id>\` lists each setting with its examples.`,
|
|
119
|
+
required: false
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
function validateRunAt(runAt) {
|
|
123
|
+
if (!runAt.endsWith("Z")) {
|
|
124
|
+
failValidation("--run-at must be an ISO UTC timestamp ending in Z.");
|
|
125
|
+
}
|
|
126
|
+
const parsed = Date.parse(runAt);
|
|
127
|
+
if (!Number.isFinite(parsed)) {
|
|
128
|
+
failValidation("--run-at must be a valid ISO timestamp.");
|
|
129
|
+
}
|
|
130
|
+
if (parsed <= Date.now()) {
|
|
131
|
+
failValidation(
|
|
132
|
+
`--run-at ${runAt} has already passed. A one-off item only runs at a time still to come \u2014 pass a later ISO UTC timestamp, and check which timezone you converted from if you worked it out from a local time.`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function buildTriggerBody(args, options) {
|
|
137
|
+
const cron = args.cron;
|
|
138
|
+
const runAt = args["run-at"];
|
|
139
|
+
const timezone = args.timezone;
|
|
140
|
+
const kind = args.trigger;
|
|
141
|
+
const given = [cron, runAt, kind].filter(Boolean).length;
|
|
142
|
+
if (given > 1) {
|
|
143
|
+
failValidation("--cron, --run-at and --trigger are mutually exclusive.");
|
|
144
|
+
}
|
|
145
|
+
refuseNarrowingWithoutKind(args, kind, given);
|
|
146
|
+
if (runAt) {
|
|
147
|
+
validateRunAt(runAt);
|
|
148
|
+
return { runAt, ...timezone ? { timezone } : {} };
|
|
149
|
+
}
|
|
150
|
+
if (cron) {
|
|
151
|
+
return { cron, ...timezone ? { timezone } : {} };
|
|
152
|
+
}
|
|
153
|
+
if (kind) {
|
|
154
|
+
return { trigger: triggerFromFlags(kind, args), ...timezone ? { timezone } : {} };
|
|
155
|
+
}
|
|
156
|
+
if (timezone && !options.required) {
|
|
157
|
+
return { timezone };
|
|
158
|
+
}
|
|
159
|
+
if (options.required) {
|
|
160
|
+
failValidation(
|
|
161
|
+
`A trigger is required. Pass --cron or --run-at for a time-based one, or --trigger with one of: ${TRIGGER_KIND_IDS.join(", ")}.`
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
return void 0;
|
|
165
|
+
}
|
|
166
|
+
function flagText(args, key) {
|
|
167
|
+
const value = args[key];
|
|
168
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
169
|
+
}
|
|
170
|
+
function refuseMisusedKinds(kind, args) {
|
|
171
|
+
if (kind === "time.once") {
|
|
172
|
+
failValidation("Use --run-at for a one-off, rather than --trigger time.once.");
|
|
173
|
+
}
|
|
174
|
+
if (kind === "time.cron") {
|
|
175
|
+
failValidation("Use --cron for a repeating schedule, rather than --trigger time.cron.");
|
|
176
|
+
}
|
|
177
|
+
if (kind === "experiment.started" && flagText(args, "experiment")) {
|
|
178
|
+
failValidation(
|
|
179
|
+
'A test that exists has already started, so --experiment never fires on experiment.started. Leave it off and add --when "page = <page>" to watch one page.'
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function refuseStrayFlags(kind, args) {
|
|
184
|
+
const allowed = new Set(TRIGGER_TARGETS[kind].map((target) => TRIGGER_TARGET_FIELDS[target.field].flag));
|
|
185
|
+
const stray = TRIGGER_TARGET_FIELD_IDS.map((field) => TRIGGER_TARGET_FIELDS[field].flag).filter(
|
|
186
|
+
(flag) => !allowed.has(flag) && flagText(args, flag) !== void 0 && !(kind === "experiment.started" && flag === "experiment")
|
|
187
|
+
);
|
|
188
|
+
if (stray.length === 0) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
failValidation(
|
|
192
|
+
`${stray.map((flag) => `--${flag}`).join(", ")} does not narrow ${kind}. ${allowed.size > 0 ? `It can be pointed with ${[...allowed].map((flag) => `--${flag}`).join(", ")}.` : "It runs every time it happens \u2014 narrow it with --when rules over its payload instead."}`
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
var NARROWING_FLAGS = [...TRIGGER_TARGET_FIELD_IDS.map((field) => TRIGGER_TARGET_FIELDS[field].flag), "config"];
|
|
196
|
+
function refuseNarrowingWithoutKind(args, kind, given) {
|
|
197
|
+
if (kind) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const stray = NARROWING_FLAGS.filter((flag) => flagText(args, flag) !== void 0);
|
|
201
|
+
if (stray.length === 0) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const flags = stray.map((flag) => `--${flag}`).join(", ");
|
|
205
|
+
failValidation(
|
|
206
|
+
given > 0 ? `${flags} does not narrow --cron or --run-at: a time trigger runs every time it comes round. Use --trigger <kind> with ${flags} instead, or leave ${flags} off.` : `${flags} narrows a trigger, and no trigger was given. Pass --trigger <kind> too \u2014 the item's whole trigger, with ${flags} \u2014 or leave ${flags} off.`
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
function configFromFlag(kind, args) {
|
|
210
|
+
const config = flagText(args, "config");
|
|
211
|
+
if (!config) {
|
|
212
|
+
return {};
|
|
213
|
+
}
|
|
214
|
+
if (kind !== "app.event") {
|
|
215
|
+
failValidation("--config is only for --trigger app.event: the settings of what happens in the tool.");
|
|
216
|
+
}
|
|
217
|
+
let parsed;
|
|
218
|
+
try {
|
|
219
|
+
parsed = JSON.parse(config);
|
|
220
|
+
} catch {
|
|
221
|
+
parsed = null;
|
|
222
|
+
}
|
|
223
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
224
|
+
failValidation(`--config must be a JSON object, e.g. '{"labelIds":"INBOX"}'.`);
|
|
225
|
+
}
|
|
226
|
+
return { configJson: config };
|
|
227
|
+
}
|
|
228
|
+
function triggerFromFlags(kind, args) {
|
|
229
|
+
if (!isTriggerKind(kind)) {
|
|
230
|
+
failValidation(`--trigger must be one of: ${TRIGGER_KIND_IDS.join(", ")}.`);
|
|
231
|
+
}
|
|
232
|
+
refuseMisusedKinds(kind, args);
|
|
233
|
+
refuseStrayFlags(kind, args);
|
|
234
|
+
const narrowings = {};
|
|
235
|
+
for (const { field, required } of TRIGGER_TARGETS[kind]) {
|
|
236
|
+
const value = flagText(args, TRIGGER_TARGET_FIELDS[field].flag);
|
|
237
|
+
if (value) {
|
|
238
|
+
narrowings[field] = value;
|
|
239
|
+
} else if (required) {
|
|
240
|
+
failValidation(
|
|
241
|
+
`--trigger ${kind} needs --${TRIGGER_TARGET_FIELDS[field].flag}. \`baker scheduled-agents targets --trigger ${kind} --field ${field}\` lists what it can be.`
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return { kind, ...narrowings, ...configFromFlag(kind, args) };
|
|
246
|
+
}
|
|
247
|
+
function parseOccurrences(raw) {
|
|
248
|
+
if (raw === void 0) {
|
|
249
|
+
return void 0;
|
|
250
|
+
}
|
|
251
|
+
if (typeof raw !== "string") {
|
|
252
|
+
failValidation("--occurrences must be a comma-separated list of whole numbers, e.g. 1 or 1,3.");
|
|
253
|
+
}
|
|
254
|
+
const parts = raw.split(",").map((part) => part.trim()).filter((part) => part.length > 0);
|
|
255
|
+
const numbers = parts.map((part) => Number(part));
|
|
256
|
+
if (numbers.length === 0 || numbers.some((n) => !Number.isInteger(n) || n <= 0)) {
|
|
257
|
+
failValidation("--occurrences must be a comma-separated list of whole numbers above zero, e.g. 1 or 1,3.");
|
|
258
|
+
}
|
|
259
|
+
return numbers;
|
|
260
|
+
}
|
|
261
|
+
function parseBooleanFlag(raw, flagName) {
|
|
262
|
+
if (raw === void 0) {
|
|
263
|
+
return void 0;
|
|
264
|
+
}
|
|
265
|
+
if (raw === true || raw === "true") {
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
if (raw === false || raw === "false") {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
failValidation(`${flagName} must be true or false.`);
|
|
272
|
+
}
|
|
273
|
+
var REACTION_ARGS = {
|
|
274
|
+
when: {
|
|
275
|
+
type: "string",
|
|
276
|
+
description: "Only run when what arrived passes these rules: `<field> <operator> <value>` joined by AND or by OR (either case). Fields are the trigger's payload fields (`baker scheduled-agents triggers --trigger <kind>` lists them; a webhook's are whatever was posted; an app.event's are what `targets --field appEvent --app <tool> --event <id>` says it sends). Operators: =, !=, contains, does not contain, starts with, ends with, >, <, >=, <=, in (comma list), exists, missing. Example: --when \"deal.stage = won AND amount > 10000\". A payload that fails is not counted and starts nothing. `none` clears the rules.",
|
|
277
|
+
required: false
|
|
278
|
+
},
|
|
279
|
+
times: {
|
|
280
|
+
type: "string",
|
|
281
|
+
description: "Only the first N times it fires (and its --when rules pass), then never again. `--times 1` is only the first time. Shorthand for --occurrences 1,2,\u2026,N.",
|
|
282
|
+
required: false
|
|
283
|
+
},
|
|
284
|
+
payload: {
|
|
285
|
+
type: "string",
|
|
286
|
+
description: "include (default) or omit. Whether the run's first message carries what arrived \u2014 the posted body, the event's properties, the Form's answers (emails and phones masked). Place single values in --prompt with {{payload.<field>}} instead; those are filled either way.",
|
|
287
|
+
required: false
|
|
288
|
+
},
|
|
289
|
+
cooldown: {
|
|
290
|
+
type: "string",
|
|
291
|
+
description: "At most one run per this many minutes, however often it fires. 0 removes it.",
|
|
292
|
+
required: false
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
var SLACK_ARG = {
|
|
296
|
+
slack: {
|
|
297
|
+
type: "string",
|
|
298
|
+
description: "Tell each run in Slack: `here` (the Slack conversation this chat came from), `me` (a direct message to the person in this chat), `#channel` (a channel linked to this company), or `off`. Each run opens its own thread there and Baker reports on it: what it found, what it needs, whether to publish.",
|
|
299
|
+
required: false
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
function slackBody(args) {
|
|
303
|
+
return typeof args.slack === "string" && args.slack.trim().length > 0 ? { slack: args.slack.trim() } : {};
|
|
304
|
+
}
|
|
305
|
+
function wholeNumber(raw, flag, { min }) {
|
|
306
|
+
if (raw === void 0) {
|
|
307
|
+
return void 0;
|
|
308
|
+
}
|
|
309
|
+
const value = Number(raw);
|
|
310
|
+
if (!Number.isInteger(value) || value < min) {
|
|
311
|
+
failValidation(`${flag} must be a whole number of at least ${min}.`);
|
|
312
|
+
}
|
|
313
|
+
return value;
|
|
314
|
+
}
|
|
315
|
+
function reactionBody(args) {
|
|
316
|
+
const occurrences = occurrencesFromFlags(args);
|
|
317
|
+
const when = whenFromFlag(args.when);
|
|
318
|
+
const includePayload = payloadFromFlag(args.payload);
|
|
319
|
+
const cooldownMinutes = wholeNumber(args.cooldown, "--cooldown", { min: 0 });
|
|
320
|
+
return {
|
|
321
|
+
...occurrences !== void 0 ? { occurrences } : {},
|
|
322
|
+
...when !== void 0 ? { when } : {},
|
|
323
|
+
...includePayload !== void 0 ? { includePayload } : {},
|
|
324
|
+
...cooldownMinutes !== void 0 ? { cooldownMinutes } : {}
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function occurrencesFromFlags(args) {
|
|
328
|
+
const times = wholeNumber(args.times, "--times", { min: 1 });
|
|
329
|
+
const occurrences = parseOccurrences(args.occurrences);
|
|
330
|
+
if (times !== void 0 && occurrences !== void 0) {
|
|
331
|
+
failValidation("Pass --times or --occurrences, not both \u2014 --times 3 is --occurrences 1,2,3.");
|
|
332
|
+
}
|
|
333
|
+
return times !== void 0 ? firstTimes(times) : occurrences;
|
|
334
|
+
}
|
|
335
|
+
function whenFromFlag(raw) {
|
|
336
|
+
if (typeof raw !== "string") {
|
|
337
|
+
return void 0;
|
|
338
|
+
}
|
|
339
|
+
const text = raw.trim();
|
|
340
|
+
if (text.length === 0 || text.toLowerCase() === "none") {
|
|
341
|
+
return "none";
|
|
342
|
+
}
|
|
343
|
+
const parsed = parseConditionsExpression(text);
|
|
344
|
+
if (!parsed.ok) {
|
|
345
|
+
failValidation(parsed.error);
|
|
346
|
+
}
|
|
347
|
+
return text;
|
|
348
|
+
}
|
|
349
|
+
function payloadFromFlag(raw) {
|
|
350
|
+
if (raw === void 0) {
|
|
351
|
+
return void 0;
|
|
352
|
+
}
|
|
353
|
+
if (raw !== "include" && raw !== "omit") {
|
|
354
|
+
failValidation("--payload must be include or omit.");
|
|
355
|
+
}
|
|
356
|
+
return raw === "include";
|
|
357
|
+
}
|
|
358
|
+
function chatBody() {
|
|
359
|
+
const id = getEnv().BAKER_CHAT_ID;
|
|
360
|
+
return id ? { chatId: id } : {};
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export {
|
|
364
|
+
writeOk,
|
|
365
|
+
failValidation,
|
|
366
|
+
failApi,
|
|
367
|
+
AUTO_PUBLISH_ARG,
|
|
368
|
+
refuseAutoPublish,
|
|
369
|
+
isTempScheduledAgentId,
|
|
370
|
+
validateScheduledAgentRef,
|
|
371
|
+
TRIGGER_ARG_DESCRIPTION,
|
|
372
|
+
TRIGGER_KIND_LIST,
|
|
373
|
+
NARROWING_ARGS,
|
|
374
|
+
buildTriggerBody,
|
|
375
|
+
parseBooleanFlag,
|
|
376
|
+
REACTION_ARGS,
|
|
377
|
+
SLACK_ARG,
|
|
378
|
+
slackBody,
|
|
379
|
+
reactionBody,
|
|
380
|
+
chatBody
|
|
381
|
+
};
|
|
382
|
+
//# sourceMappingURL=chunk-KXGG6EQM.js.map
|