@koda-sl/baker-cli 0.449.0 → 0.450.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/{account-AL2ZDSR7.js → account-2SVI5OK7.js} +4 -4
- package/dist/{accounts-HAFCLSR5.js → accounts-2XAOZX3U.js} +3 -3
- package/dist/{accounts-O5MFO3QQ.js → accounts-U4BGY3QU.js} +5 -5
- package/dist/{actions-P35MEMGN.js → actions-6EJU7CAQ.js} +18 -18
- package/dist/{add-6DTC6X5G.js → add-IPGEYQQG.js} +2 -2
- package/dist/{add-5GAN6CVO.js → add-P7CCVY2J.js} +27 -5
- package/dist/add-P7CCVY2J.js.map +1 -0
- package/dist/{ads-C47NA2HH.js → ads-6MXVIV62.js} +3 -3
- package/dist/{advertisers-AE75CGVE.js → advertisers-JG4DZ6SB.js} +3 -3
- package/dist/{analytics-FKCXIMPO.js → analytics-IMYVNQIX.js} +6 -6
- package/dist/{analytics-FPWQQGRM.js → analytics-RNEUAKC4.js} +3 -3
- package/dist/{assign-ABN2AQ4J.js → assign-46TXQRT5.js} +3 -3
- package/dist/{audience-size-GNBJY35X.js → audience-size-5TNQO3IL.js} +3 -3
- package/dist/{audit-3VS63TBW.js → audit-XRE7XH3Q.js} +3 -3
- package/dist/{autocomplete-VS3XG3B7.js → autocomplete-2ZWSQ6QQ.js} +3 -3
- package/dist/{avatars-EKCKHCC3.js → avatars-M6NSD3KS.js} +4 -4
- package/dist/{bid-pricing-Q72B65AY.js → bid-pricing-OIVPZCWW.js} +3 -3
- package/dist/{brand-C6PFGGQN.js → brand-YDNX7LYQ.js} +2 -2
- package/dist/{brief-UO52ZHFI.js → brief-EK6ULGXD.js} +7 -7
- package/dist/{campaign-groups-KFFYQPU3.js → campaign-groups-TAP6LK6F.js} +8 -8
- package/dist/{campaign-writes-FHOS5XZY.js → campaign-writes-4SWPBZE6.js} +3 -3
- package/dist/{campaigns-KZYZTXDS.js → campaigns-AQAJN23T.js} +5 -5
- package/dist/{campaigns-2NHWBF5C.js → campaigns-ROMLENHI.js} +11 -11
- package/dist/{canvas-DPCBGW7K.js → canvas-XYCDLDRS.js} +12 -12
- package/dist/{capabilities-DJFTRJKS.js → capabilities-GGPTIAFO.js} +3 -3
- package/dist/{chats-D2CSDX5Q.js → chats-G343BSVB.js} +3 -3
- package/dist/{chunk-OZRUJVIQ.js → chunk-355DHOHD.js} +2 -2
- package/dist/{chunk-CSYSX4D2.js → chunk-3URK7DAA.js} +2 -2
- package/dist/{chunk-A4LOJ2VD.js → chunk-3YOFT3AP.js} +2 -2
- package/dist/{chunk-647RO73Q.js → chunk-542XAHNT.js} +2 -2
- package/dist/{chunk-5ZDLTE5T.js → chunk-64WGDUXH.js} +3 -3
- package/dist/{chunk-HBTF25YG.js → chunk-7WD2RW2R.js} +2 -2
- package/dist/{chunk-QRP3PXWN.js → chunk-B6GITCGN.js} +2 -2
- package/dist/{chunk-XF4JUKVF.js → chunk-BAUSWB7O.js} +30 -3
- package/dist/chunk-BAUSWB7O.js.map +1 -0
- package/dist/{chunk-IBURXTL4.js → chunk-D5XAVXUZ.js} +5 -5
- package/dist/{chunk-3HJLHTWP.js → chunk-EIVYFZ4N.js} +12 -3
- package/dist/{chunk-3HJLHTWP.js.map → chunk-EIVYFZ4N.js.map} +1 -1
- package/dist/{chunk-JQJDXPCO.js → chunk-F4F3PLN3.js} +2 -2
- package/dist/{chunk-NPY4QUMQ.js → chunk-LZSXZB2F.js} +2 -2
- package/dist/{chunk-3IBYKLXR.js → chunk-MURPCCLG.js} +2 -2
- package/dist/{chunk-2QHODRR6.js → chunk-NEXCBTBZ.js} +2 -2
- package/dist/{chunk-AEOSAVVL.js → chunk-NR2TDASR.js} +2 -2
- package/dist/{chunk-KHRXPQID.js → chunk-OVT676K6.js} +2 -2
- package/dist/{chunk-FD27ZDVP.js → chunk-P2RE52V7.js} +2 -2
- package/dist/{chunk-Z2EOC6PL.js → chunk-P6ICBEE4.js} +4 -4
- package/dist/{chunk-TT5R35PJ.js → chunk-PLGIETFZ.js} +3 -3
- package/dist/{chunk-YRQYA2LR.js → chunk-Q4JYX424.js} +63 -5
- package/dist/chunk-Q4JYX424.js.map +1 -0
- package/dist/{chunk-4AUMTNVB.js → chunk-QJNTI36W.js} +3 -3
- package/dist/{chunk-5Y5UAJWD.js → chunk-TD6GIMV6.js} +3 -3
- package/dist/{chunk-ZEYEWPK6.js → chunk-TESII3FM.js} +2 -2
- package/dist/{chunk-GBMP4F45.js → chunk-TXI5OWCF.js} +5 -5
- package/dist/{chunk-IR6D7K4H.js → chunk-UC7VFFXR.js} +2 -2
- package/dist/{chunk-7YCRFMXF.js → chunk-UNI5AASR.js} +2 -2
- package/dist/{chunk-3G3ZDLMI.js → chunk-UX5HYEN3.js} +2 -2
- package/dist/{chunk-MXYBTMKB.js → chunk-V4RGDJAN.js} +2 -2
- package/dist/{chunk-SHL7LOC3.js → chunk-W2TJIZS2.js} +3 -3
- package/dist/{chunk-4BQXAE7Z.js → chunk-W5VGWEAG.js} +2 -2
- package/dist/{chunk-S77PZVYM.js → chunk-WDZOVF6P.js} +3 -3
- package/dist/{chunk-Y6O7EWYY.js → chunk-YCOP4FGJ.js} +2 -2
- package/dist/{chunk-DWHIOO7E.js → chunk-YT7SSJFR.js} +163 -12
- package/dist/chunk-YT7SSJFR.js.map +1 -0
- package/dist/{claim-FZ5OQLMU.js → claim-INJHV4FM.js} +3 -3
- package/dist/cli.js +27 -27
- package/dist/{companies-DNI634RC.js → companies-3REQZWKU.js} +3 -3
- package/dist/{complete-2FZMGJV5.js → complete-DX2DAAEZ.js} +3 -3
- package/dist/{connect-QCOGEPP4.js → connect-O4OGKMAK.js} +12 -6
- package/dist/{conversation-6IOGV7B7.js → conversation-6A2X5W64.js} +3 -3
- package/dist/{conversions-4SRZPBBX.js → conversions-PT6UDIX3.js} +7 -7
- package/dist/{create-VXM34ZWH.js → create-BR3Q4A4C.js} +3 -3
- package/dist/{create-BJNMO6HT.js → create-EOLNJGAX.js} +2 -2
- package/dist/{create-FX4OJ2XF.js → create-I2UB7FWX.js} +3 -3
- package/dist/{create-RM7HV77Y.js → create-S47CLYXJ.js} +3 -3
- package/dist/{creatives-SJTJU6VT.js → creatives-D3NXWVUF.js} +10 -10
- package/dist/{creatives-JSWBFQ5R.js → creatives-FBH4DKSX.js} +8 -8
- package/dist/{credentials-VOZTILFO.js → credentials-4BPEXA3E.js} +3 -3
- package/dist/{critique-65W63MFZ.js → critique-3XJG44NG.js} +5 -5
- package/dist/{critique-ZS4ON3SU.js → critique-LU27A765.js} +3 -3
- package/dist/{crm-52ROSWH5.js → crm-GOE6ZO5N.js} +4 -4
- package/dist/{crm-R5IXIFIV.js → crm-NEI6E2T2.js} +4 -4
- package/dist/{customers-4AWBFDUF.js → customers-USB6VCMU.js} +5 -5
- package/dist/{delete-M2GDLPYN.js → delete-67XFFHUY.js} +2 -2
- package/dist/{delete-HGHXY24R.js → delete-BT7I3EMN.js} +3 -3
- package/dist/{delete-AIGE4Y4H.js → delete-ONE22VRX.js} +3 -3
- package/dist/{demographics-NTWB2IMG.js → demographics-R4LCQGDJ.js} +3 -3
- package/dist/{discard-2WWQG6OU.js → discard-BOPTV4V5.js} +3 -3
- package/dist/{domain-Y2LT6JLT.js → domain-B54ILSOO.js} +3 -3
- package/dist/{draft-SLHAKJ2A.js → draft-DWSBVJUF.js} +3 -3
- package/dist/{draft-FJ7WHIXW.js → draft-J4SGNGGW.js} +3 -3
- package/dist/{draft-EJXNNJ3Y.js → draft-ROERDGSK.js} +4 -4
- package/dist/{facets-U7AQC4H6.js → facets-FUTIWQXK.js} +3 -3
- package/dist/{feedback-XNJQ63DS.js → feedback-C6CBUUDA.js} +2 -2
- package/dist/{feedback-record-FDLMWMDG.js → feedback-record-FM5MW2YV.js} +7 -7
- package/dist/{fetch-W7NULDEO.js → fetch-D7JPGEYZ.js} +3 -3
- package/dist/{flows-KABCBS3S.js → flows-L6BF3TDT.js} +20 -17
- package/dist/flows-L6BF3TDT.js.map +1 -0
- package/dist/{fonts-EMMX3KII.js → fonts-THAAZY7Z.js} +5 -5
- package/dist/{forecast-GNODEIIC.js → forecast-RYYVMNYT.js} +3 -3
- package/dist/{funnel-AAX27NH4.js → funnel-SK7WDPRS.js} +4 -4
- package/dist/{get-RTVUZM6E.js → get-3STPGBX3.js} +3 -3
- package/dist/{get-QEYJRLV3.js → get-YBIF3H52.js} +6 -4
- package/dist/get-YBIF3H52.js.map +1 -0
- package/dist/{google-ads-OK6IG3UV.js → google-ads-YD7LYWGY.js} +3 -3
- package/dist/{history-PQUJKK26.js → history-RWWBR4TN.js} +3 -3
- package/dist/{hubspot-Y77VLY6Y.js → hubspot-E65QNOI4.js} +7 -7
- package/dist/{ideas-MIDU7YOA.js → ideas-ZB7O7T5I.js} +2 -2
- package/dist/{images-S254MS6O.js → images-U4DKZQTE.js} +4 -4
- package/dist/{ingest-YV2NLDBE.js → ingest-MZXGMFA5.js} +3 -3
- package/dist/{ingest-J4I3HKM3.js → ingest-ROEMTZMG.js} +2 -2
- package/dist/{inspect-Q5NHBBHX.js → inspect-MCMUJPXU.js} +3 -3
- package/dist/{keyword-metrics-PDY4ZXSP.js → keyword-metrics-MLFTDAS4.js} +3 -3
- package/dist/{keywords-for-site-GALSCV77.js → keywords-for-site-4WUBJNTI.js} +3 -3
- package/dist/{landing-CJYGWCK4.js → landing-5GDWJN4C.js} +2 -2
- package/dist/{leads-PHKG6CP3.js → leads-LDOOJI5K.js} +3 -3
- package/dist/{learn-3VO6DXUX.js → learn-MMIGRLCP.js} +4 -4
- package/dist/{line-item-writes-E6MZPIZZ.js → line-item-writes-LFDWJBQG.js} +3 -3
- package/dist/{line-items-7ZGIKEF2.js → line-items-T3EVXB4M.js} +5 -5
- package/dist/{link-QYAW6A2W.js → link-M5ESAD5Y.js} +3 -3
- package/dist/{linkedin-FFSDSGGS.js → linkedin-4FNKZNIR.js} +26 -26
- package/dist/{list-SAV3LQHY.js → list-EF6QI4JT.js} +3 -3
- package/dist/{list-5IC6KIKO.js → list-FNW254C3.js} +3 -3
- package/dist/{list-NVQC5SNY.js → list-XWUTPJRQ.js} +2 -2
- package/dist/{log-XZPVOALD.js → log-5MESJJLM.js} +3 -3
- package/dist/{make-LCNP76OF.js → make-ATEHKECL.js} +10 -10
- package/dist/{map-4J5WIWIG.js → map-5NONUYFP.js} +4 -4
- package/dist/{mcp-XXD7ZQCP.js → mcp-CGITBQQA.js} +2 -2
- package/dist/{media-sources-O6ZRUA3N.js → media-sources-6TFUGPE2.js} +2 -2
- package/dist/{members-D5ZYLS4Y.js → members-R2GQVSVA.js} +3 -3
- package/dist/{normalize-PCNC6E2N.js → normalize-L6WBNGQA.js} +6 -3
- package/dist/{normalize-PCNC6E2N.js.map → normalize-L6WBNGQA.js.map} +1 -1
- package/dist/{options-MQ65VEVD.js → options-YT2ZGB2Z.js} +6 -6
- package/dist/{performance-6QW2KEEQ.js → performance-52IILAFE.js} +4 -4
- package/dist/{promoted-tweet-writes-JPLHY3GM.js → promoted-tweet-writes-QVIKWEIZ.js} +3 -3
- package/dist/{promoted-tweets-SURKMHFI.js → promoted-tweets-2AALRV5O.js} +3 -3
- package/dist/{publish-HCQ6MXLB.js → publish-XFLOZAOQ.js} +3 -3
- package/dist/{reddit-GIP3ADMS.js → reddit-HFBAGWNP.js} +4 -4
- package/dist/{refresh-UXQSLCR3.js → refresh-INKIU3QV.js} +2 -2
- package/dist/{release-5KVLXNP6.js → release-C2MFXAPJ.js} +3 -3
- package/dist/{remove-6FIVKCJI.js → remove-JWSVNUJ4.js} +2 -2
- package/dist/{reopen-YM5LNOLB.js → reopen-3GM4OSLZ.js} +3 -3
- package/dist/{rerun-CET74VPF.js → rerun-FCZRSS3H.js} +10 -10
- package/dist/{research-EY7C7JJY.js → research-EBQ5KWOS.js} +10 -10
- package/dist/{research-YOGE7GT2.js → research-HUMDT7T4.js} +2 -2
- package/dist/{reset-OLVB6AE6.js → reset-3BEGDSBW.js} +2 -2
- package/dist/{reset-C4UHQ3EU.js → reset-TVDYP2VK.js} +2 -2
- package/dist/{resolve-XYH2GDAE.js → resolve-OQKUGWEI.js} +3 -3
- package/dist/{retry-726GKI6V.js → retry-EJBF6GBJ.js} +2 -2
- package/dist/{retry-7EELDEQP.js → retry-GUHOWYO2.js} +2 -2
- package/dist/{run-P4KR2MXC.js → run-3D6QZC6L.js} +3 -3
- package/dist/{run-XQ7EM3JT.js → run-CUUAWKAZ.js} +10 -10
- package/dist/{scaffold-ad-U2KSHKBC.js → scaffold-ad-AYKWASWY.js} +8 -8
- package/dist/{scaffold-static-ad-63LQKUSO.js → scaffold-static-ad-IEZEQW4N.js} +12 -12
- package/dist/{scaffold-video-MUS6LHJQ.js → scaffold-video-YMN7AJS4.js} +7 -7
- package/dist/{schedule-RDK4GEPI.js → schedule-QVYVMRIY.js} +2 -2
- package/dist/{scheduled-agents-6U44QE76.js → scheduled-agents-CNIGCLAP.js} +11 -11
- package/dist/{schema-CHJDC7GQ.js → schema-7UUVQ4RH.js} +7 -4
- package/dist/{schema-CHJDC7GQ.js.map → schema-7UUVQ4RH.js.map} +1 -1
- package/dist/{search-PMJRU3C4.js → search-XUGIKFW3.js} +2 -2
- package/dist/{select-4Z7BW5RH.js → select-LSS7ZJSB.js} +7 -7
- package/dist/{set-prompt-OB2V3XJP.js → set-prompt-P3WR2TZX.js} +5 -5
- package/dist/{setup-links-REPREN3C.js → setup-links-4VILWID2.js} +3 -3
- package/dist/{site-WFSWIA3S.js → site-TLJVSZQF.js} +4 -4
- package/dist/{sources-YBQ6KPFM.js → sources-4MKBWFWG.js} +6 -6
- package/dist/{sources-AMI2AWKZ.js → sources-7FCRKPXJ.js} +6 -6
- package/dist/{stale-DAYXOY3Z.js → stale-7VJECYYJ.js} +6 -6
- package/dist/{status-7F2KHFGA.js → status-WZKAKUG4.js} +3 -3
- package/dist/{sync-GWTLKZTU.js → sync-DEWLEMTT.js} +2 -2
- package/dist/{sync-definition-ILS2B2BJ.js → sync-definition-ARIX5XWM.js} +7 -7
- package/dist/{tags-3WPW6PTV.js → tags-ANV54THE.js} +4 -4
- package/dist/{tags-FJIBBBRG.js → tags-IWN3QPK5.js} +3 -3
- package/dist/{tags-ABHSX6M5.js → tags-O76MDVID.js} +3 -3
- package/dist/{tags-6342FQEB.js → tags-RBB4TU7U.js} +3 -3
- package/dist/{tags-KFYLZLB3.js → tags-V5FR3DYU.js} +2 -2
- package/dist/{targeting-criteria-NR47AF5C.js → targeting-criteria-6IOXVE4K.js} +3 -3
- package/dist/{targets-L56KOVQE.js → targets-FFLV6OMF.js} +3 -3
- package/dist/{templates-B6XGDYUF.js → templates-Y3ZLB7MK.js} +3 -3
- package/dist/{testimonials-CVC4YIXO.js → testimonials-FCYS4NKB.js} +6 -6
- package/dist/{top-companies-45X3DT7Z.js → top-companies-BL4F7OPI.js} +3 -3
- package/dist/{translate-TA5KQIU7.js → translate-GGONJG62.js} +10 -10
- package/dist/{triggers-22EMIVFD.js → triggers-6Q3YRHZS.js} +3 -3
- package/dist/{unlink-65KUN6ID.js → unlink-WDSOVBFL.js} +3 -3
- package/dist/{unstage-2E3I5SWF.js → unstage-JYJIKPB5.js} +3 -3
- package/dist/{update-2S7CSEAW.js → update-CWZVKOUB.js} +3 -3
- package/dist/{update-7NCOTAQZ.js → update-FUYXN33G.js} +3 -3
- package/dist/{update-KREBPGBH.js → update-IXSCDBM4.js} +3 -3
- package/dist/{update-D6DJC6T7.js → update-WSG6RVFX.js} +2 -2
- package/dist/{upload-O6NHRPS7.js → upload-CKV2XS3G.js} +3 -3
- package/dist/{url-params-3EFGVTZZ.js → url-params-UJSNI4XC.js} +3 -3
- package/dist/{validate-LDBAAXQO.js → validate-FSFELDFZ.js} +5 -5
- package/dist/{videos-YSXYGTBM.js → videos-FAKURRTG.js} +5 -5
- package/dist/{web-IGIGVEKS.js → web-RRGHSAFY.js} +3 -3
- package/dist/{winning-ads-ASH5DSV3.js → winning-ads-HRSCX6O2.js} +2 -2
- package/dist/{write-commands-5C7FUOVN.js → write-commands-TAG7DQKT.js} +4 -4
- package/dist/{x-BFSKFCZD.js → x-FBWHL3PL.js} +6 -6
- package/package.json +1 -1
- package/dist/add-5GAN6CVO.js.map +0 -1
- package/dist/chunk-DWHIOO7E.js.map +0 -1
- package/dist/chunk-XF4JUKVF.js.map +0 -1
- package/dist/chunk-YRQYA2LR.js.map +0 -1
- package/dist/flows-KABCBS3S.js.map +0 -1
- package/dist/get-QEYJRLV3.js.map +0 -1
- /package/dist/{account-AL2ZDSR7.js.map → account-2SVI5OK7.js.map} +0 -0
- /package/dist/{accounts-HAFCLSR5.js.map → accounts-2XAOZX3U.js.map} +0 -0
- /package/dist/{accounts-O5MFO3QQ.js.map → accounts-U4BGY3QU.js.map} +0 -0
- /package/dist/{actions-P35MEMGN.js.map → actions-6EJU7CAQ.js.map} +0 -0
- /package/dist/{add-6DTC6X5G.js.map → add-IPGEYQQG.js.map} +0 -0
- /package/dist/{ads-C47NA2HH.js.map → ads-6MXVIV62.js.map} +0 -0
- /package/dist/{advertisers-AE75CGVE.js.map → advertisers-JG4DZ6SB.js.map} +0 -0
- /package/dist/{analytics-FKCXIMPO.js.map → analytics-IMYVNQIX.js.map} +0 -0
- /package/dist/{analytics-FPWQQGRM.js.map → analytics-RNEUAKC4.js.map} +0 -0
- /package/dist/{assign-ABN2AQ4J.js.map → assign-46TXQRT5.js.map} +0 -0
- /package/dist/{audience-size-GNBJY35X.js.map → audience-size-5TNQO3IL.js.map} +0 -0
- /package/dist/{audit-3VS63TBW.js.map → audit-XRE7XH3Q.js.map} +0 -0
- /package/dist/{autocomplete-VS3XG3B7.js.map → autocomplete-2ZWSQ6QQ.js.map} +0 -0
- /package/dist/{avatars-EKCKHCC3.js.map → avatars-M6NSD3KS.js.map} +0 -0
- /package/dist/{bid-pricing-Q72B65AY.js.map → bid-pricing-OIVPZCWW.js.map} +0 -0
- /package/dist/{brand-C6PFGGQN.js.map → brand-YDNX7LYQ.js.map} +0 -0
- /package/dist/{brief-UO52ZHFI.js.map → brief-EK6ULGXD.js.map} +0 -0
- /package/dist/{campaign-groups-KFFYQPU3.js.map → campaign-groups-TAP6LK6F.js.map} +0 -0
- /package/dist/{campaign-writes-FHOS5XZY.js.map → campaign-writes-4SWPBZE6.js.map} +0 -0
- /package/dist/{campaigns-KZYZTXDS.js.map → campaigns-AQAJN23T.js.map} +0 -0
- /package/dist/{campaigns-2NHWBF5C.js.map → campaigns-ROMLENHI.js.map} +0 -0
- /package/dist/{canvas-DPCBGW7K.js.map → canvas-XYCDLDRS.js.map} +0 -0
- /package/dist/{capabilities-DJFTRJKS.js.map → capabilities-GGPTIAFO.js.map} +0 -0
- /package/dist/{chats-D2CSDX5Q.js.map → chats-G343BSVB.js.map} +0 -0
- /package/dist/{chunk-OZRUJVIQ.js.map → chunk-355DHOHD.js.map} +0 -0
- /package/dist/{chunk-CSYSX4D2.js.map → chunk-3URK7DAA.js.map} +0 -0
- /package/dist/{chunk-A4LOJ2VD.js.map → chunk-3YOFT3AP.js.map} +0 -0
- /package/dist/{chunk-647RO73Q.js.map → chunk-542XAHNT.js.map} +0 -0
- /package/dist/{chunk-5ZDLTE5T.js.map → chunk-64WGDUXH.js.map} +0 -0
- /package/dist/{chunk-HBTF25YG.js.map → chunk-7WD2RW2R.js.map} +0 -0
- /package/dist/{chunk-QRP3PXWN.js.map → chunk-B6GITCGN.js.map} +0 -0
- /package/dist/{chunk-IBURXTL4.js.map → chunk-D5XAVXUZ.js.map} +0 -0
- /package/dist/{chunk-JQJDXPCO.js.map → chunk-F4F3PLN3.js.map} +0 -0
- /package/dist/{chunk-NPY4QUMQ.js.map → chunk-LZSXZB2F.js.map} +0 -0
- /package/dist/{chunk-3IBYKLXR.js.map → chunk-MURPCCLG.js.map} +0 -0
- /package/dist/{chunk-2QHODRR6.js.map → chunk-NEXCBTBZ.js.map} +0 -0
- /package/dist/{chunk-AEOSAVVL.js.map → chunk-NR2TDASR.js.map} +0 -0
- /package/dist/{chunk-KHRXPQID.js.map → chunk-OVT676K6.js.map} +0 -0
- /package/dist/{chunk-FD27ZDVP.js.map → chunk-P2RE52V7.js.map} +0 -0
- /package/dist/{chunk-Z2EOC6PL.js.map → chunk-P6ICBEE4.js.map} +0 -0
- /package/dist/{chunk-TT5R35PJ.js.map → chunk-PLGIETFZ.js.map} +0 -0
- /package/dist/{chunk-4AUMTNVB.js.map → chunk-QJNTI36W.js.map} +0 -0
- /package/dist/{chunk-5Y5UAJWD.js.map → chunk-TD6GIMV6.js.map} +0 -0
- /package/dist/{chunk-ZEYEWPK6.js.map → chunk-TESII3FM.js.map} +0 -0
- /package/dist/{chunk-GBMP4F45.js.map → chunk-TXI5OWCF.js.map} +0 -0
- /package/dist/{chunk-IR6D7K4H.js.map → chunk-UC7VFFXR.js.map} +0 -0
- /package/dist/{chunk-7YCRFMXF.js.map → chunk-UNI5AASR.js.map} +0 -0
- /package/dist/{chunk-3G3ZDLMI.js.map → chunk-UX5HYEN3.js.map} +0 -0
- /package/dist/{chunk-MXYBTMKB.js.map → chunk-V4RGDJAN.js.map} +0 -0
- /package/dist/{chunk-SHL7LOC3.js.map → chunk-W2TJIZS2.js.map} +0 -0
- /package/dist/{chunk-4BQXAE7Z.js.map → chunk-W5VGWEAG.js.map} +0 -0
- /package/dist/{chunk-S77PZVYM.js.map → chunk-WDZOVF6P.js.map} +0 -0
- /package/dist/{chunk-Y6O7EWYY.js.map → chunk-YCOP4FGJ.js.map} +0 -0
- /package/dist/{claim-FZ5OQLMU.js.map → claim-INJHV4FM.js.map} +0 -0
- /package/dist/{companies-DNI634RC.js.map → companies-3REQZWKU.js.map} +0 -0
- /package/dist/{complete-2FZMGJV5.js.map → complete-DX2DAAEZ.js.map} +0 -0
- /package/dist/{connect-QCOGEPP4.js.map → connect-O4OGKMAK.js.map} +0 -0
- /package/dist/{conversation-6IOGV7B7.js.map → conversation-6A2X5W64.js.map} +0 -0
- /package/dist/{conversions-4SRZPBBX.js.map → conversions-PT6UDIX3.js.map} +0 -0
- /package/dist/{create-VXM34ZWH.js.map → create-BR3Q4A4C.js.map} +0 -0
- /package/dist/{create-BJNMO6HT.js.map → create-EOLNJGAX.js.map} +0 -0
- /package/dist/{create-FX4OJ2XF.js.map → create-I2UB7FWX.js.map} +0 -0
- /package/dist/{create-RM7HV77Y.js.map → create-S47CLYXJ.js.map} +0 -0
- /package/dist/{creatives-SJTJU6VT.js.map → creatives-D3NXWVUF.js.map} +0 -0
- /package/dist/{creatives-JSWBFQ5R.js.map → creatives-FBH4DKSX.js.map} +0 -0
- /package/dist/{credentials-VOZTILFO.js.map → credentials-4BPEXA3E.js.map} +0 -0
- /package/dist/{critique-65W63MFZ.js.map → critique-3XJG44NG.js.map} +0 -0
- /package/dist/{critique-ZS4ON3SU.js.map → critique-LU27A765.js.map} +0 -0
- /package/dist/{crm-52ROSWH5.js.map → crm-GOE6ZO5N.js.map} +0 -0
- /package/dist/{crm-R5IXIFIV.js.map → crm-NEI6E2T2.js.map} +0 -0
- /package/dist/{customers-4AWBFDUF.js.map → customers-USB6VCMU.js.map} +0 -0
- /package/dist/{delete-M2GDLPYN.js.map → delete-67XFFHUY.js.map} +0 -0
- /package/dist/{delete-HGHXY24R.js.map → delete-BT7I3EMN.js.map} +0 -0
- /package/dist/{delete-AIGE4Y4H.js.map → delete-ONE22VRX.js.map} +0 -0
- /package/dist/{demographics-NTWB2IMG.js.map → demographics-R4LCQGDJ.js.map} +0 -0
- /package/dist/{discard-2WWQG6OU.js.map → discard-BOPTV4V5.js.map} +0 -0
- /package/dist/{domain-Y2LT6JLT.js.map → domain-B54ILSOO.js.map} +0 -0
- /package/dist/{draft-SLHAKJ2A.js.map → draft-DWSBVJUF.js.map} +0 -0
- /package/dist/{draft-FJ7WHIXW.js.map → draft-J4SGNGGW.js.map} +0 -0
- /package/dist/{draft-EJXNNJ3Y.js.map → draft-ROERDGSK.js.map} +0 -0
- /package/dist/{facets-U7AQC4H6.js.map → facets-FUTIWQXK.js.map} +0 -0
- /package/dist/{feedback-XNJQ63DS.js.map → feedback-C6CBUUDA.js.map} +0 -0
- /package/dist/{feedback-record-FDLMWMDG.js.map → feedback-record-FM5MW2YV.js.map} +0 -0
- /package/dist/{fetch-W7NULDEO.js.map → fetch-D7JPGEYZ.js.map} +0 -0
- /package/dist/{fonts-EMMX3KII.js.map → fonts-THAAZY7Z.js.map} +0 -0
- /package/dist/{forecast-GNODEIIC.js.map → forecast-RYYVMNYT.js.map} +0 -0
- /package/dist/{funnel-AAX27NH4.js.map → funnel-SK7WDPRS.js.map} +0 -0
- /package/dist/{get-RTVUZM6E.js.map → get-3STPGBX3.js.map} +0 -0
- /package/dist/{google-ads-OK6IG3UV.js.map → google-ads-YD7LYWGY.js.map} +0 -0
- /package/dist/{history-PQUJKK26.js.map → history-RWWBR4TN.js.map} +0 -0
- /package/dist/{hubspot-Y77VLY6Y.js.map → hubspot-E65QNOI4.js.map} +0 -0
- /package/dist/{ideas-MIDU7YOA.js.map → ideas-ZB7O7T5I.js.map} +0 -0
- /package/dist/{images-S254MS6O.js.map → images-U4DKZQTE.js.map} +0 -0
- /package/dist/{ingest-YV2NLDBE.js.map → ingest-MZXGMFA5.js.map} +0 -0
- /package/dist/{ingest-J4I3HKM3.js.map → ingest-ROEMTZMG.js.map} +0 -0
- /package/dist/{inspect-Q5NHBBHX.js.map → inspect-MCMUJPXU.js.map} +0 -0
- /package/dist/{keyword-metrics-PDY4ZXSP.js.map → keyword-metrics-MLFTDAS4.js.map} +0 -0
- /package/dist/{keywords-for-site-GALSCV77.js.map → keywords-for-site-4WUBJNTI.js.map} +0 -0
- /package/dist/{landing-CJYGWCK4.js.map → landing-5GDWJN4C.js.map} +0 -0
- /package/dist/{leads-PHKG6CP3.js.map → leads-LDOOJI5K.js.map} +0 -0
- /package/dist/{learn-3VO6DXUX.js.map → learn-MMIGRLCP.js.map} +0 -0
- /package/dist/{line-item-writes-E6MZPIZZ.js.map → line-item-writes-LFDWJBQG.js.map} +0 -0
- /package/dist/{line-items-7ZGIKEF2.js.map → line-items-T3EVXB4M.js.map} +0 -0
- /package/dist/{link-QYAW6A2W.js.map → link-M5ESAD5Y.js.map} +0 -0
- /package/dist/{linkedin-FFSDSGGS.js.map → linkedin-4FNKZNIR.js.map} +0 -0
- /package/dist/{list-SAV3LQHY.js.map → list-EF6QI4JT.js.map} +0 -0
- /package/dist/{list-5IC6KIKO.js.map → list-FNW254C3.js.map} +0 -0
- /package/dist/{list-NVQC5SNY.js.map → list-XWUTPJRQ.js.map} +0 -0
- /package/dist/{log-XZPVOALD.js.map → log-5MESJJLM.js.map} +0 -0
- /package/dist/{make-LCNP76OF.js.map → make-ATEHKECL.js.map} +0 -0
- /package/dist/{map-4J5WIWIG.js.map → map-5NONUYFP.js.map} +0 -0
- /package/dist/{mcp-XXD7ZQCP.js.map → mcp-CGITBQQA.js.map} +0 -0
- /package/dist/{media-sources-O6ZRUA3N.js.map → media-sources-6TFUGPE2.js.map} +0 -0
- /package/dist/{members-D5ZYLS4Y.js.map → members-R2GQVSVA.js.map} +0 -0
- /package/dist/{options-MQ65VEVD.js.map → options-YT2ZGB2Z.js.map} +0 -0
- /package/dist/{performance-6QW2KEEQ.js.map → performance-52IILAFE.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-JPLHY3GM.js.map → promoted-tweet-writes-QVIKWEIZ.js.map} +0 -0
- /package/dist/{promoted-tweets-SURKMHFI.js.map → promoted-tweets-2AALRV5O.js.map} +0 -0
- /package/dist/{publish-HCQ6MXLB.js.map → publish-XFLOZAOQ.js.map} +0 -0
- /package/dist/{reddit-GIP3ADMS.js.map → reddit-HFBAGWNP.js.map} +0 -0
- /package/dist/{refresh-UXQSLCR3.js.map → refresh-INKIU3QV.js.map} +0 -0
- /package/dist/{release-5KVLXNP6.js.map → release-C2MFXAPJ.js.map} +0 -0
- /package/dist/{remove-6FIVKCJI.js.map → remove-JWSVNUJ4.js.map} +0 -0
- /package/dist/{reopen-YM5LNOLB.js.map → reopen-3GM4OSLZ.js.map} +0 -0
- /package/dist/{rerun-CET74VPF.js.map → rerun-FCZRSS3H.js.map} +0 -0
- /package/dist/{research-EY7C7JJY.js.map → research-EBQ5KWOS.js.map} +0 -0
- /package/dist/{research-YOGE7GT2.js.map → research-HUMDT7T4.js.map} +0 -0
- /package/dist/{reset-OLVB6AE6.js.map → reset-3BEGDSBW.js.map} +0 -0
- /package/dist/{reset-C4UHQ3EU.js.map → reset-TVDYP2VK.js.map} +0 -0
- /package/dist/{resolve-XYH2GDAE.js.map → resolve-OQKUGWEI.js.map} +0 -0
- /package/dist/{retry-726GKI6V.js.map → retry-EJBF6GBJ.js.map} +0 -0
- /package/dist/{retry-7EELDEQP.js.map → retry-GUHOWYO2.js.map} +0 -0
- /package/dist/{run-P4KR2MXC.js.map → run-3D6QZC6L.js.map} +0 -0
- /package/dist/{run-XQ7EM3JT.js.map → run-CUUAWKAZ.js.map} +0 -0
- /package/dist/{scaffold-ad-U2KSHKBC.js.map → scaffold-ad-AYKWASWY.js.map} +0 -0
- /package/dist/{scaffold-static-ad-63LQKUSO.js.map → scaffold-static-ad-IEZEQW4N.js.map} +0 -0
- /package/dist/{scaffold-video-MUS6LHJQ.js.map → scaffold-video-YMN7AJS4.js.map} +0 -0
- /package/dist/{schedule-RDK4GEPI.js.map → schedule-QVYVMRIY.js.map} +0 -0
- /package/dist/{scheduled-agents-6U44QE76.js.map → scheduled-agents-CNIGCLAP.js.map} +0 -0
- /package/dist/{search-PMJRU3C4.js.map → search-XUGIKFW3.js.map} +0 -0
- /package/dist/{select-4Z7BW5RH.js.map → select-LSS7ZJSB.js.map} +0 -0
- /package/dist/{set-prompt-OB2V3XJP.js.map → set-prompt-P3WR2TZX.js.map} +0 -0
- /package/dist/{setup-links-REPREN3C.js.map → setup-links-4VILWID2.js.map} +0 -0
- /package/dist/{site-WFSWIA3S.js.map → site-TLJVSZQF.js.map} +0 -0
- /package/dist/{sources-YBQ6KPFM.js.map → sources-4MKBWFWG.js.map} +0 -0
- /package/dist/{sources-AMI2AWKZ.js.map → sources-7FCRKPXJ.js.map} +0 -0
- /package/dist/{stale-DAYXOY3Z.js.map → stale-7VJECYYJ.js.map} +0 -0
- /package/dist/{status-7F2KHFGA.js.map → status-WZKAKUG4.js.map} +0 -0
- /package/dist/{sync-GWTLKZTU.js.map → sync-DEWLEMTT.js.map} +0 -0
- /package/dist/{sync-definition-ILS2B2BJ.js.map → sync-definition-ARIX5XWM.js.map} +0 -0
- /package/dist/{tags-3WPW6PTV.js.map → tags-ANV54THE.js.map} +0 -0
- /package/dist/{tags-FJIBBBRG.js.map → tags-IWN3QPK5.js.map} +0 -0
- /package/dist/{tags-ABHSX6M5.js.map → tags-O76MDVID.js.map} +0 -0
- /package/dist/{tags-6342FQEB.js.map → tags-RBB4TU7U.js.map} +0 -0
- /package/dist/{tags-KFYLZLB3.js.map → tags-V5FR3DYU.js.map} +0 -0
- /package/dist/{targeting-criteria-NR47AF5C.js.map → targeting-criteria-6IOXVE4K.js.map} +0 -0
- /package/dist/{targets-L56KOVQE.js.map → targets-FFLV6OMF.js.map} +0 -0
- /package/dist/{templates-B6XGDYUF.js.map → templates-Y3ZLB7MK.js.map} +0 -0
- /package/dist/{testimonials-CVC4YIXO.js.map → testimonials-FCYS4NKB.js.map} +0 -0
- /package/dist/{top-companies-45X3DT7Z.js.map → top-companies-BL4F7OPI.js.map} +0 -0
- /package/dist/{translate-TA5KQIU7.js.map → translate-GGONJG62.js.map} +0 -0
- /package/dist/{triggers-22EMIVFD.js.map → triggers-6Q3YRHZS.js.map} +0 -0
- /package/dist/{unlink-65KUN6ID.js.map → unlink-WDSOVBFL.js.map} +0 -0
- /package/dist/{unstage-2E3I5SWF.js.map → unstage-JYJIKPB5.js.map} +0 -0
- /package/dist/{update-2S7CSEAW.js.map → update-CWZVKOUB.js.map} +0 -0
- /package/dist/{update-7NCOTAQZ.js.map → update-FUYXN33G.js.map} +0 -0
- /package/dist/{update-KREBPGBH.js.map → update-IXSCDBM4.js.map} +0 -0
- /package/dist/{update-D6DJC6T7.js.map → update-WSG6RVFX.js.map} +0 -0
- /package/dist/{upload-O6NHRPS7.js.map → upload-CKV2XS3G.js.map} +0 -0
- /package/dist/{url-params-3EFGVTZZ.js.map → url-params-UJSNI4XC.js.map} +0 -0
- /package/dist/{validate-LDBAAXQO.js.map → validate-FSFELDFZ.js.map} +0 -0
- /package/dist/{videos-YSXYGTBM.js.map → videos-FAKURRTG.js.map} +0 -0
- /package/dist/{web-IGIGVEKS.js.map → web-RRGHSAFY.js.map} +0 -0
- /package/dist/{winning-ads-ASH5DSV3.js.map → winning-ads-HRSCX6O2.js.map} +0 -0
- /package/dist/{write-commands-5C7FUOVN.js.map → write-commands-TAG7DQKT.js.map} +0 -0
- /package/dist/{x-BFSKFCZD.js.map → x-FBWHL3PL.js.map} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
finalOutputLabelsFromCanvas,
|
|
3
3
|
parseDefinitionStrategyFields
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-P2RE52V7.js";
|
|
5
5
|
import {
|
|
6
6
|
readRenderState
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TD6GIMV6.js";
|
|
8
8
|
import {
|
|
9
9
|
STATIC_AD_ROLE,
|
|
10
10
|
formatOfAdaptId,
|
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
isSignatureLine,
|
|
13
13
|
sameTag,
|
|
14
14
|
seriesMemberAd
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-P6ICBEE4.js";
|
|
16
16
|
import {
|
|
17
17
|
fetchRunRecord
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-3YOFT3AP.js";
|
|
19
19
|
import {
|
|
20
20
|
localPathParam
|
|
21
21
|
} from "./chunk-DZSIUEGH.js";
|
|
@@ -506,4 +506,4 @@ export {
|
|
|
506
506
|
writeSeriesMemberCanvas,
|
|
507
507
|
seriesRunHints
|
|
508
508
|
};
|
|
509
|
-
//# sourceMappingURL=chunk-
|
|
509
|
+
//# sourceMappingURL=chunk-D5XAVXUZ.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ACTION_TEMP_ID_PREFIX
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BAUSWB7O.js";
|
|
4
4
|
import {
|
|
5
5
|
ApiError
|
|
6
6
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -146,6 +146,14 @@ function buildListHints({ returned, limit }) {
|
|
|
146
146
|
`This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog \u2014 re-run with --limit ${limit * 2} (or narrow with --status / --search).`
|
|
147
147
|
];
|
|
148
148
|
}
|
|
149
|
+
function buildGetHints(detail) {
|
|
150
|
+
if (!detail || detail.action.status !== "pending" || detail.activeChat !== null) {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
return [
|
|
154
|
+
`If you are working on this Task in this chat, claim it first so the Tasks page shows it in progress: baker actions claim ${detail.action._id}`
|
|
155
|
+
];
|
|
156
|
+
}
|
|
149
157
|
|
|
150
158
|
export {
|
|
151
159
|
writeOk,
|
|
@@ -158,6 +166,7 @@ export {
|
|
|
158
166
|
parsePriority,
|
|
159
167
|
buildCreateHints,
|
|
160
168
|
ACTIONS_LIST_DEFAULT_LIMIT,
|
|
161
|
-
buildListHints
|
|
169
|
+
buildListHints,
|
|
170
|
+
buildGetHints
|
|
162
171
|
};
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
172
|
+
//# sourceMappingURL=chunk-EIVYFZ4N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/actions/tagError.ts","../src/commands/actions/shared.ts"],"sourcesContent":["/**\n * Structured remediation for the one `actions` failure an agent cannot fix from\n * the message alone: an unknown `--tags` slug.\n *\n * The backend already inlines the valid taxonomy in the rejection text\n * (`unknownActionTagMessage`, packages/backend/convex/actionItems/tags/utils.ts),\n * but only `{ code, message }` crosses the HTTP boundary into `ApiError`. Parsing\n * the two lists back out here is what lets `error.fix` carry them as data, so the\n * agent retries in the same call instead of running `tags list` and trying again\n * — the \"list-then-retry dance\" this file exists to end.\n *\n * Fails closed: anything that doesn't match exactly returns `null` and the caller\n * emits the plain message it would have emitted anyway.\n */\n\nconst UNKNOWN_TAG_RE = /Unknown action tag\\(s\\): ([^.]+)\\. Valid tags: ([^.]+)\\./;\n\n// A type alias, not an interface: the envelope's `fix` slot is\n// `{ action, explanation } & Record<string, unknown>`, and only an alias is\n// structurally assignable to that index signature.\nexport type ActionTagFix = {\n action: \"retry_with_a_valid_tag\";\n explanation: string;\n unknownTags: string[];\n validTags: string[];\n mintCommand: string;\n listCommand: string;\n};\n\nfunction splitSlugs(list: string): string[] {\n return list\n .split(\",\")\n .map((slug) => slug.trim())\n .filter((slug) => slug.length > 0);\n}\n\nexport function actionTagFix(message: string): ActionTagFix | null {\n const match = UNKNOWN_TAG_RE.exec(message);\n if (!match) {\n return null;\n }\n const [, unknownList, validList] = match;\n const unknownTags = splitSlugs(unknownList ?? \"\");\n const validTags = splitSlugs(validList ?? \"\");\n const first = unknownTags[0];\n if (first === undefined || validTags.length === 0) {\n return null;\n }\n return {\n action: \"retry_with_a_valid_tag\",\n explanation:\n `The tag(s) ${unknownTags.join(\", \")} are not in this company's taxonomy. ` +\n `\\`validTags\\` below is the complete accepted set — pick from it and re-run the same command. ` +\n `Only mint a new tag when none of them names this work; a near-duplicate of an existing tag ` +\n `splits the backlog's filter instead of extending it.`,\n unknownTags,\n validTags,\n mintCommand: `baker actions tags create --slug ${first} --description \"<what ${first} groups>\"`,\n listCommand: \"baker actions tags list\",\n };\n}\n","import { ACTION_TEMP_ID_PREFIX } from \"@baker/api\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport type { AdvisoryHint } from \"./advisory.ts\";\nimport { actionTagFix } from \"./tagError.ts\";\n\nexport function writeOk<T = null>(data?: T): void {\n writeJson({ ok: true, data: (data ?? null) as T });\n}\n\nexport function failValidation(message: string): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\n// Every actions command routes its API failures through here, so attaching the\n// tag `fix` at this one point covers `create`, `update`, and any later write\n// path that hits the same strict tag gate. Non-tag errors are untouched.\nexport function failApi(err: unknown): never {\n if (err instanceof ApiError) {\n const fix = actionTagFix(err.message);\n writeJson({ ok: false, error: { code: err.code, message: err.message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n }\n if (err instanceof Error) {\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nexport function generateTempId(): string {\n return `${ACTION_TEMP_ID_PREFIX}${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function isTempId(id: string): boolean {\n return id.startsWith(ACTION_TEMP_ID_PREFIX);\n}\n\n// Parse a `--tags a,b,c` CSV flag into a deduped slug list. Returns undefined\n// when the flag was omitted so callers can distinguish \"not provided\" from\n// \"explicitly cleared\" (empty list).\nexport function parseTagList(value: unknown): string[] | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const tags = value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n return [...new Set(tags)];\n}\n\n// User priority for an action. Drives the dependency-aware \"Do first\" ordering\n// in `baker actions list`. Unset == \"normal\" (ranks as medium).\nexport const ACTION_PRIORITIES = [\"urgent\", \"high\", \"medium\", \"low\"] as const;\ntype ActionPriority = (typeof ACTION_PRIORITIES)[number];\n\n// Parse a `--priority` flag. Returns:\n// - undefined → flag omitted (leave unchanged on update; unset on create)\n// - null → explicit clear (only meaningful on update; \"\" or \"none\")\n// - one of ACTION_PRIORITIES on a valid value\n// Fails validation on any other string so the agent gets an immediate error.\nexport function parsePriority(\n value: unknown,\n { allowClear }: { allowClear: boolean },\n): ActionPriority | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n failValidation(\n `--priority must be one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n }\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"\") {\n if (allowClear) {\n return null;\n }\n return undefined;\n }\n if (allowClear && (trimmed === \"none\" || trimmed === \"clear\")) {\n return null;\n }\n if ((ACTION_PRIORITIES as readonly string[]).includes(trimmed)) {\n return trimmed as ActionPriority;\n }\n failValidation(\n `Unknown --priority \"${value}\". Expected one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n}\n\n// Two tiers, because the two counts want different amounts of words.\n//\n// The mean chat that files anything files ~2, and two Tasks is already above\n// the bar (\"a Task is the exception\"), so a 2→1 merge is the cheapest win\n// available — but firing the full paragraph on the modal chat is how you train\n// the model to skim `hints[]` and miss the do-it-now redirect above it. So 2\n// gets one sentence.\n//\n// Three is where \"capturing follow-ups\" stops looking like a backlog and\n// starts looking like a to-do list handed back to the user. That gets the\n// paragraph, from there on, every time — a legitimate 3-Task chat (an approved\n// plan) still benefits from being asked whether any two merge.\nexport const FAN_OUT_NUDGE_THRESHOLD = 2;\nexport const FAN_OUT_THRESHOLD = 3;\n\n// Every hint `create` returns, in reading order. The two that argue against\n// the action existing come first — by the time the agent reaches \"add tags\" it\n// has already accepted the action as a given.\nexport function buildCreateHints({\n advisory,\n description,\n tempId,\n tags,\n prioritySet,\n draftCreateCount,\n}: {\n /** What the Task reads as (`advisory.ts`), decided before: recurring work, or work a surface does now. */\n advisory: AdvisoryHint | null;\n description: string;\n tempId: string;\n tags: string[] | undefined;\n prioritySet: boolean;\n draftCreateCount: number;\n}): string[] {\n const hints: string[] = [];\n if (advisory) {\n hints.push(\n `${advisory.hint} If nothing actually blocks it: baker actions draft remove ${tempId}, then do the work.`,\n );\n }\n // The advisory reading is a judgment; this count is a fact. It keeps firing on\n // every further create — a chat that fanned out into a to-do list is the\n // failure the whole hint set exists to catch.\n if (draftCreateCount >= FAN_OUT_THRESHOLD) {\n hints.push(\n `${draftCreateCount} Tasks are staged in this chat. Re-read them with \\`baker actions draft\\`: can any be done now with a surface you already have, and do any two touch the same system (same container, same campaign, same page)? Those belong in ONE Task — fold them together with \\`baker actions update\\` and drop the extras with \\`baker actions draft remove <tempId>\\`.`,\n );\n } else if (draftCreateCount === FAN_OUT_NUDGE_THRESHOLD) {\n hints.push(\n `Second Task staged in this chat. If these two land on the same system (same container, same campaign, same page) they are ONE Task — fold them with \\`baker actions update\\` and drop the extra with \\`baker actions draft remove ${tempId}\\`.`,\n );\n }\n hints.push(`Link dependencies: baker actions link --blocker <id> --blocked ${tempId}`);\n if (!description) {\n hints.push(\"Add description: baker actions update <tempId> --description '...' (what/why/where/done-when)\");\n }\n if (!tags || tags.length === 0) {\n hints.push(\n \"MISSING --tags. This action is invisible to the backlog's tag filter. Re-run with --tags <slug,...> (`baker actions tags list` for the taxonomy, `baker actions tags create --slug <slug>` to mint) — or `baker actions update <tempId> --tags <slug,...>`.\",\n );\n }\n if (!prioritySet) {\n hints.push(\n `MISSING --priority. Without it this action ranks as 'normal' (medium) in the do-first ordering, so urgent/high client work won't surface first. Re-run with --priority ${ACTION_PRIORITIES.join(\"|\")} — or \\`baker actions update <tempId> --priority <level>\\`.`,\n );\n }\n return hints;\n}\n\n/**\n * How far back a flat `baker actions list` reads when the caller does not say.\n *\n * Sent explicitly rather than left to the server default so this side knows the\n * window it asked for, and can therefore tell when a read came back exactly full\n * — the only evidence available that older Tasks exist. Without that the agent\n * reads a truncated backlog as a complete one and reports finished work that was\n * never seen.\n */\nexport const ACTIONS_LIST_DEFAULT_LIMIT = 500;\n\nexport function buildListHints({ returned, limit }: { returned: number; limit: number }): string[] {\n if (returned < limit) {\n return [];\n }\n return [\n `This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog — re-run with --limit ${limit * 2} (or narrow with --status / --search).`,\n ];\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/actions/tagError.ts","../src/commands/actions/shared.ts"],"sourcesContent":["/**\n * Structured remediation for the one `actions` failure an agent cannot fix from\n * the message alone: an unknown `--tags` slug.\n *\n * The backend already inlines the valid taxonomy in the rejection text\n * (`unknownActionTagMessage`, packages/backend/convex/actionItems/tags/utils.ts),\n * but only `{ code, message }` crosses the HTTP boundary into `ApiError`. Parsing\n * the two lists back out here is what lets `error.fix` carry them as data, so the\n * agent retries in the same call instead of running `tags list` and trying again\n * — the \"list-then-retry dance\" this file exists to end.\n *\n * Fails closed: anything that doesn't match exactly returns `null` and the caller\n * emits the plain message it would have emitted anyway.\n */\n\nconst UNKNOWN_TAG_RE = /Unknown action tag\\(s\\): ([^.]+)\\. Valid tags: ([^.]+)\\./;\n\n// A type alias, not an interface: the envelope's `fix` slot is\n// `{ action, explanation } & Record<string, unknown>`, and only an alias is\n// structurally assignable to that index signature.\nexport type ActionTagFix = {\n action: \"retry_with_a_valid_tag\";\n explanation: string;\n unknownTags: string[];\n validTags: string[];\n mintCommand: string;\n listCommand: string;\n};\n\nfunction splitSlugs(list: string): string[] {\n return list\n .split(\",\")\n .map((slug) => slug.trim())\n .filter((slug) => slug.length > 0);\n}\n\nexport function actionTagFix(message: string): ActionTagFix | null {\n const match = UNKNOWN_TAG_RE.exec(message);\n if (!match) {\n return null;\n }\n const [, unknownList, validList] = match;\n const unknownTags = splitSlugs(unknownList ?? \"\");\n const validTags = splitSlugs(validList ?? \"\");\n const first = unknownTags[0];\n if (first === undefined || validTags.length === 0) {\n return null;\n }\n return {\n action: \"retry_with_a_valid_tag\",\n explanation:\n `The tag(s) ${unknownTags.join(\", \")} are not in this company's taxonomy. ` +\n `\\`validTags\\` below is the complete accepted set — pick from it and re-run the same command. ` +\n `Only mint a new tag when none of them names this work; a near-duplicate of an existing tag ` +\n `splits the backlog's filter instead of extending it.`,\n unknownTags,\n validTags,\n mintCommand: `baker actions tags create --slug ${first} --description \"<what ${first} groups>\"`,\n listCommand: \"baker actions tags list\",\n };\n}\n","import { ACTION_TEMP_ID_PREFIX } from \"@baker/api\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport type { AdvisoryHint } from \"./advisory.ts\";\nimport { actionTagFix } from \"./tagError.ts\";\n\nexport function writeOk<T = null>(data?: T): void {\n writeJson({ ok: true, data: (data ?? null) as T });\n}\n\nexport function failValidation(message: string): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\n// Every actions command routes its API failures through here, so attaching the\n// tag `fix` at this one point covers `create`, `update`, and any later write\n// path that hits the same strict tag gate. Non-tag errors are untouched.\nexport function failApi(err: unknown): never {\n if (err instanceof ApiError) {\n const fix = actionTagFix(err.message);\n writeJson({ ok: false, error: { code: err.code, message: err.message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n }\n if (err instanceof Error) {\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nexport function generateTempId(): string {\n return `${ACTION_TEMP_ID_PREFIX}${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function isTempId(id: string): boolean {\n return id.startsWith(ACTION_TEMP_ID_PREFIX);\n}\n\n// Parse a `--tags a,b,c` CSV flag into a deduped slug list. Returns undefined\n// when the flag was omitted so callers can distinguish \"not provided\" from\n// \"explicitly cleared\" (empty list).\nexport function parseTagList(value: unknown): string[] | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const tags = value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n return [...new Set(tags)];\n}\n\n// User priority for an action. Drives the dependency-aware \"Do first\" ordering\n// in `baker actions list`. Unset == \"normal\" (ranks as medium).\nexport const ACTION_PRIORITIES = [\"urgent\", \"high\", \"medium\", \"low\"] as const;\ntype ActionPriority = (typeof ACTION_PRIORITIES)[number];\n\n// Parse a `--priority` flag. Returns:\n// - undefined → flag omitted (leave unchanged on update; unset on create)\n// - null → explicit clear (only meaningful on update; \"\" or \"none\")\n// - one of ACTION_PRIORITIES on a valid value\n// Fails validation on any other string so the agent gets an immediate error.\nexport function parsePriority(\n value: unknown,\n { allowClear }: { allowClear: boolean },\n): ActionPriority | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n failValidation(\n `--priority must be one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n }\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"\") {\n if (allowClear) {\n return null;\n }\n return undefined;\n }\n if (allowClear && (trimmed === \"none\" || trimmed === \"clear\")) {\n return null;\n }\n if ((ACTION_PRIORITIES as readonly string[]).includes(trimmed)) {\n return trimmed as ActionPriority;\n }\n failValidation(\n `Unknown --priority \"${value}\". Expected one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n}\n\n// Two tiers, because the two counts want different amounts of words.\n//\n// The mean chat that files anything files ~2, and two Tasks is already above\n// the bar (\"a Task is the exception\"), so a 2→1 merge is the cheapest win\n// available — but firing the full paragraph on the modal chat is how you train\n// the model to skim `hints[]` and miss the do-it-now redirect above it. So 2\n// gets one sentence.\n//\n// Three is where \"capturing follow-ups\" stops looking like a backlog and\n// starts looking like a to-do list handed back to the user. That gets the\n// paragraph, from there on, every time — a legitimate 3-Task chat (an approved\n// plan) still benefits from being asked whether any two merge.\nexport const FAN_OUT_NUDGE_THRESHOLD = 2;\nexport const FAN_OUT_THRESHOLD = 3;\n\n// Every hint `create` returns, in reading order. The two that argue against\n// the action existing come first — by the time the agent reaches \"add tags\" it\n// has already accepted the action as a given.\nexport function buildCreateHints({\n advisory,\n description,\n tempId,\n tags,\n prioritySet,\n draftCreateCount,\n}: {\n /** What the Task reads as (`advisory.ts`), decided before: recurring work, or work a surface does now. */\n advisory: AdvisoryHint | null;\n description: string;\n tempId: string;\n tags: string[] | undefined;\n prioritySet: boolean;\n draftCreateCount: number;\n}): string[] {\n const hints: string[] = [];\n if (advisory) {\n hints.push(\n `${advisory.hint} If nothing actually blocks it: baker actions draft remove ${tempId}, then do the work.`,\n );\n }\n // The advisory reading is a judgment; this count is a fact. It keeps firing on\n // every further create — a chat that fanned out into a to-do list is the\n // failure the whole hint set exists to catch.\n if (draftCreateCount >= FAN_OUT_THRESHOLD) {\n hints.push(\n `${draftCreateCount} Tasks are staged in this chat. Re-read them with \\`baker actions draft\\`: can any be done now with a surface you already have, and do any two touch the same system (same container, same campaign, same page)? Those belong in ONE Task — fold them together with \\`baker actions update\\` and drop the extras with \\`baker actions draft remove <tempId>\\`.`,\n );\n } else if (draftCreateCount === FAN_OUT_NUDGE_THRESHOLD) {\n hints.push(\n `Second Task staged in this chat. If these two land on the same system (same container, same campaign, same page) they are ONE Task — fold them with \\`baker actions update\\` and drop the extra with \\`baker actions draft remove ${tempId}\\`.`,\n );\n }\n hints.push(`Link dependencies: baker actions link --blocker <id> --blocked ${tempId}`);\n if (!description) {\n hints.push(\"Add description: baker actions update <tempId> --description '...' (what/why/where/done-when)\");\n }\n if (!tags || tags.length === 0) {\n hints.push(\n \"MISSING --tags. This action is invisible to the backlog's tag filter. Re-run with --tags <slug,...> (`baker actions tags list` for the taxonomy, `baker actions tags create --slug <slug>` to mint) — or `baker actions update <tempId> --tags <slug,...>`.\",\n );\n }\n if (!prioritySet) {\n hints.push(\n `MISSING --priority. Without it this action ranks as 'normal' (medium) in the do-first ordering, so urgent/high client work won't surface first. Re-run with --priority ${ACTION_PRIORITIES.join(\"|\")} — or \\`baker actions update <tempId> --priority <level>\\`.`,\n );\n }\n return hints;\n}\n\n/**\n * How far back a flat `baker actions list` reads when the caller does not say.\n *\n * Sent explicitly rather than left to the server default so this side knows the\n * window it asked for, and can therefore tell when a read came back exactly full\n * — the only evidence available that older Tasks exist. Without that the agent\n * reads a truncated backlog as a complete one and reports finished work that was\n * never seen.\n */\nexport const ACTIONS_LIST_DEFAULT_LIMIT = 500;\n\nexport function buildListHints({ returned, limit }: { returned: number; limit: number }): string[] {\n if (returned < limit) {\n return [];\n }\n return [\n `This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog — re-run with --limit ${limit * 2} (or narrow with --status / --search).`,\n ];\n}\n\n/**\n * A pending Task nobody is working on is one the agent was most likely asked to\n * solve: without a claim the dashboard shows no work in progress on it.\n */\nexport function buildGetHints(\n detail: { action: { _id: string; status: string }; activeChat: unknown } | null,\n): string[] {\n if (!detail || detail.action.status !== \"pending\" || detail.activeChat !== null) {\n return [];\n }\n return [\n `If you are working on this Task in this chat, claim it first so the Tasks page shows it in progress: baker actions claim ${detail.action._id}`,\n ];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
SITE_COLLECTION_MODES,
|
|
3
3
|
SITE_CONSENT_MODES,
|
|
4
4
|
SITE_HOME_MODES
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BAUSWB7O.js";
|
|
6
6
|
import {
|
|
7
7
|
ApiError
|
|
8
8
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -100,4 +100,4 @@ export {
|
|
|
100
100
|
parseSetArgs,
|
|
101
101
|
failSite
|
|
102
102
|
};
|
|
103
|
-
//# sourceMappingURL=chunk-
|
|
103
|
+
//# sourceMappingURL=chunk-F4F3PLN3.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
flowsDir,
|
|
3
3
|
walkNodes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Q4JYX424.js";
|
|
5
5
|
|
|
6
6
|
// src/commands/flows/value-expression.ts
|
|
7
7
|
import { existsSync, readFileSync } from "fs";
|
|
@@ -619,4 +619,4 @@ export {
|
|
|
619
619
|
otherSlots,
|
|
620
620
|
buildFieldMapping
|
|
621
621
|
};
|
|
622
|
-
//# sourceMappingURL=chunk-
|
|
622
|
+
//# sourceMappingURL=chunk-LZSXZB2F.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-RX6F3GEA.js";
|
|
7
7
|
import {
|
|
8
8
|
brandTokensSchema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BAUSWB7O.js";
|
|
10
10
|
|
|
11
11
|
// src/engine/landing/lib/brand-tokens.ts
|
|
12
12
|
import { readFile as readFile2 } from "fs/promises";
|
|
@@ -334,4 +334,4 @@ export {
|
|
|
334
334
|
brandCommitsAiHue,
|
|
335
335
|
brandCommitsCream
|
|
336
336
|
};
|
|
337
|
-
//# sourceMappingURL=chunk-
|
|
337
|
+
//# sourceMappingURL=chunk-MURPCCLG.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
latestVersion
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TD6GIMV6.js";
|
|
4
4
|
import {
|
|
5
5
|
canvasOutputsRoot
|
|
6
6
|
} from "./chunk-DZSIUEGH.js";
|
|
@@ -16,4 +16,4 @@ async function versionOf(slug, run) {
|
|
|
16
16
|
export {
|
|
17
17
|
versionOf
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-NEXCBTBZ.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
onlyCondition,
|
|
13
13
|
triggerProblem,
|
|
14
14
|
validateEventName
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-BAUSWB7O.js";
|
|
16
16
|
|
|
17
17
|
// ../api/src/event-sources/hubspot.ts
|
|
18
18
|
var HUBSPOT_CONTACT_ID_VARIABLE = "id";
|
|
@@ -307,4 +307,4 @@ export {
|
|
|
307
307
|
hubspotDefaultMapping,
|
|
308
308
|
hubspotTriggerInputSchema
|
|
309
309
|
};
|
|
310
|
-
//# sourceMappingURL=chunk-
|
|
310
|
+
//# sourceMappingURL=chunk-NR2TDASR.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
X_DRAFT_BATCH_MAX,
|
|
13
13
|
xDraftOpInputSchema
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BAUSWB7O.js";
|
|
15
15
|
import {
|
|
16
16
|
ApiError,
|
|
17
17
|
apiPost
|
|
@@ -166,4 +166,4 @@ export {
|
|
|
166
166
|
requireTarget,
|
|
167
167
|
requireTargets
|
|
168
168
|
};
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-OVT676K6.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
languageTag
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-P6ICBEE4.js";
|
|
4
4
|
import {
|
|
5
5
|
parseRefExpr
|
|
6
6
|
} from "./chunk-K66OLA6Y.js";
|
|
@@ -301,4 +301,4 @@ export {
|
|
|
301
301
|
buildInitialRunRecord,
|
|
302
302
|
buildFailedRunRecord
|
|
303
303
|
};
|
|
304
|
-
//# sourceMappingURL=chunk-
|
|
304
|
+
//# sourceMappingURL=chunk-P2RE52V7.js.map
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
GENERIC_FAMILIES,
|
|
7
7
|
resolveBrandFaces
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-B6GITCGN.js";
|
|
9
9
|
import {
|
|
10
10
|
LOGO_FILE,
|
|
11
11
|
readWorkspaceBrandDoc
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MURPCCLG.js";
|
|
13
13
|
import {
|
|
14
14
|
holdUnbilledSpend
|
|
15
15
|
} from "./chunk-WTOYCUKH.js";
|
|
@@ -146,7 +146,7 @@ import {
|
|
|
146
146
|
} from "./chunk-HRYOZUSK.js";
|
|
147
147
|
import {
|
|
148
148
|
brandTokensSchema
|
|
149
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-BAUSWB7O.js";
|
|
150
150
|
import {
|
|
151
151
|
optionalConnection
|
|
152
152
|
} from "./chunk-NAWWC5I3.js";
|
|
@@ -6664,4 +6664,4 @@ export {
|
|
|
6664
6664
|
prepareCanvas,
|
|
6665
6665
|
exitOnPrepareError
|
|
6666
6666
|
};
|
|
6667
|
-
//# sourceMappingURL=chunk-
|
|
6667
|
+
//# sourceMappingURL=chunk-P6ICBEE4.js.map
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
parseDefinitionSeriesPlace,
|
|
7
7
|
parseDefinitionSourceFields,
|
|
8
8
|
parseDefinitionStrategyFields
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-P2RE52V7.js";
|
|
10
10
|
import {
|
|
11
11
|
prepareCanvas
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-P6ICBEE4.js";
|
|
13
13
|
import {
|
|
14
14
|
BackendClient
|
|
15
15
|
} from "./chunk-GLCPTMPG.js";
|
|
@@ -204,4 +204,4 @@ export {
|
|
|
204
204
|
resolveCanvasPath,
|
|
205
205
|
syncDefinitionCommand
|
|
206
206
|
};
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
207
|
+
//# sourceMappingURL=chunk-PLGIETFZ.js.map
|
|
@@ -4,8 +4,12 @@ import {
|
|
|
4
4
|
FLOW_RESOURCE_NODE_TYPES,
|
|
5
5
|
FLOW_SECRET_FIELDS,
|
|
6
6
|
FLOW_SECRET_SIDE_EFFECT_TYPES,
|
|
7
|
+
flowCatalogEntry,
|
|
7
8
|
isFlowOauthSideEffect
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BAUSWB7O.js";
|
|
10
|
+
import {
|
|
11
|
+
apiPost
|
|
12
|
+
} from "./chunk-XBOK23HI.js";
|
|
9
13
|
import {
|
|
10
14
|
writeJson
|
|
11
15
|
} from "./chunk-NU7JSWVA.js";
|
|
@@ -60,6 +64,26 @@ function collectSideEffects(tree) {
|
|
|
60
64
|
(node) => Array.isArray(node.sideEffects) ? node.sideEffects.filter((sideEffect) => Boolean(sideEffect) && typeof sideEffect === "object").map((sideEffect) => ({ node, sideEffect })) : []
|
|
61
65
|
);
|
|
62
66
|
}
|
|
67
|
+
function sealedSideEffects(tree) {
|
|
68
|
+
return collectSideEffects(tree).flatMap(({ sideEffect }) => {
|
|
69
|
+
const { id, type, encryptedConfig } = sideEffect;
|
|
70
|
+
const sealed = typeof id === "string" && typeof type === "string" && FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type) && typeof encryptedConfig === "string" && encryptedConfig.length > 0;
|
|
71
|
+
return sealed ? [{ sideEffectId: id, type, encryptedConfig }] : [];
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function describeSettings(settings) {
|
|
75
|
+
if (typeof settings.email === "string") {
|
|
76
|
+
return `to ${settings.email}${typeof settings.subject === "string" ? ` \xB7 subject "${settings.subject}"` : ""}`;
|
|
77
|
+
}
|
|
78
|
+
return Object.entries(settings).filter(([, value]) => typeof value === "string" || typeof value === "number").map(([key, value]) => `${key}: ${String(value)}`).join(" \xB7 ");
|
|
79
|
+
}
|
|
80
|
+
function withSettings(rows, settingsById) {
|
|
81
|
+
return rows.map((row) => {
|
|
82
|
+
const settings = row.sideEffectId ? settingsById[row.sideEffectId] : void 0;
|
|
83
|
+
const described = settings ? describeSettings(settings) : "";
|
|
84
|
+
return described ? { ...row, status: `${row.status} \u2192 ${described}` } : row;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
63
87
|
function flowExists(slug) {
|
|
64
88
|
return existsSync(join(flowsDir(), slug, "_data.json"));
|
|
65
89
|
}
|
|
@@ -109,11 +133,25 @@ function sideEffectNeedsInput(raw) {
|
|
|
109
133
|
if (!isFlowOauthSideEffect(type)) return !configured;
|
|
110
134
|
return !isConfigured(effect?.oauthProviderId) || !configured;
|
|
111
135
|
}
|
|
136
|
+
function trackingStatus(effect, type, meta) {
|
|
137
|
+
if (flowCatalogEntry("side-effect", type)?.owners?.tagIds !== "tags") return null;
|
|
138
|
+
const tags = Array.isArray(effect.tagIds) ? effect.tagIds.length : 0;
|
|
139
|
+
const event = typeof effect.eventName === "string" ? ` "${effect.eventName}"` : "";
|
|
140
|
+
return {
|
|
141
|
+
...meta,
|
|
142
|
+
target: "sideEffect",
|
|
143
|
+
...typeof effect.id === "string" ? { sideEffectId: effect.id } : {},
|
|
144
|
+
kind: type,
|
|
145
|
+
status: `${type}${event} \u2014 ${tags > 0 ? `[${tags} tag${tags === 1 ? "" : "s"}]` : "[no tag]"}`,
|
|
146
|
+
needsInput: false
|
|
147
|
+
};
|
|
148
|
+
}
|
|
112
149
|
function sideEffectStatus(raw, meta) {
|
|
113
150
|
const effect = raw;
|
|
114
151
|
const type = effect?.type;
|
|
115
|
-
if (typeof type !== "string"
|
|
116
|
-
|
|
152
|
+
if (typeof type !== "string") return null;
|
|
153
|
+
if (!FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type)) {
|
|
154
|
+
return effect ? trackingStatus(effect, type, meta) : null;
|
|
117
155
|
}
|
|
118
156
|
const configured = isConfigured(effect?.encryptedConfig);
|
|
119
157
|
const oauth = isFlowOauthSideEffect(type);
|
|
@@ -134,6 +172,12 @@ function requestFlowInputCall(slug, status) {
|
|
|
134
172
|
const card = `request_flow_input with ${args}`;
|
|
135
173
|
const target = status.target === "node" ? `--node ${status.nodeId}` : `--side-effect ${status.sideEffectId}`;
|
|
136
174
|
const fallback = "only if nothing is connected or several could be meant";
|
|
175
|
+
if (status.kind === "email") {
|
|
176
|
+
return `baker flows connect ${slug} ${target} --email "<who receives each lead, comma-separated>" --subject "<New lead \u2014 the Form's name>"`;
|
|
177
|
+
}
|
|
178
|
+
if (status.kind === "httpWebhook") {
|
|
179
|
+
return `baker flows connect ${slug} ${target} --url <https address> \u2014 only a webhook that needs a token or password goes to the user: ${card}`;
|
|
180
|
+
}
|
|
137
181
|
if (status.kind === "hubspotForm") {
|
|
138
182
|
return `baker flows connect ${slug} ${target} --hubspot-form <formId from baker hubspot forms list> \u2014 ${fallback}: ${card}`;
|
|
139
183
|
}
|
|
@@ -197,6 +241,18 @@ function stepNameKey(name) {
|
|
|
197
241
|
function isUsableStepNameKey(key) {
|
|
198
242
|
return /^[\p{ID_Start}$_][\p{ID_Continue}$]*$/u.test(key);
|
|
199
243
|
}
|
|
244
|
+
async function readSettings(tree) {
|
|
245
|
+
const sealed = sealedSideEffects(tree);
|
|
246
|
+
if (sealed.length === 0) return {};
|
|
247
|
+
try {
|
|
248
|
+
const { data } = await apiPost("/api/flows/destinations/reveal", {
|
|
249
|
+
items: sealed.map(({ type, encryptedConfig }) => ({ type, encryptedConfig }))
|
|
250
|
+
});
|
|
251
|
+
return Object.fromEntries(sealed.map((item, index) => [item.sideEffectId, data.items[index] ?? null]));
|
|
252
|
+
} catch {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
200
256
|
|
|
201
257
|
export {
|
|
202
258
|
flowsDir,
|
|
@@ -205,6 +261,7 @@ export {
|
|
|
205
261
|
writeFlowTree,
|
|
206
262
|
walkNodes,
|
|
207
263
|
collectSideEffects,
|
|
264
|
+
withSettings,
|
|
208
265
|
flowExists,
|
|
209
266
|
readFlowTree,
|
|
210
267
|
sideEffectNeedsInput,
|
|
@@ -212,6 +269,7 @@ export {
|
|
|
212
269
|
collectConfigStatus,
|
|
213
270
|
redactTree,
|
|
214
271
|
stepNameKey,
|
|
215
|
-
isUsableStepNameKey
|
|
272
|
+
isUsableStepNameKey,
|
|
273
|
+
readSettings
|
|
216
274
|
};
|
|
217
|
-
//# sourceMappingURL=chunk-
|
|
275
|
+
//# sourceMappingURL=chunk-Q4JYX424.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/flows/shared.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n FLOW_ACCOUNT_ONLY_KINDS,\n FLOW_AGENT_DESTINATION_KINDS,\n FLOW_RESOURCE_NODE_TYPES,\n FLOW_SECRET_FIELDS,\n FLOW_SECRET_SIDE_EFFECT_TYPES,\n type FlowConfigStatus,\n type FlowSideEffectType,\n type FlowsRevealResponse,\n flowCatalogEntry,\n isFlowOauthSideEffect,\n} from \"@baker/api\";\nimport { apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\n\nconst FLOWS_DIR = \"src/lib/flow-engine/flows\";\n\n/** Resolve the flows directory from cwd (walk up a few levels to find the repo root). */\nexport function flowsDir(): string {\n let dir = process.cwd();\n for (let i = 0; i < 6; i++) {\n const candidate = join(dir, FLOWS_DIR);\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = join(dir, \"..\");\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n return join(process.cwd(), FLOWS_DIR);\n}\n\nexport function failLocal(message: string): never {\n writeJson({ ok: false, error: { code: \"NOT_FOUND\", message } });\n process.exit(1);\n}\n\nexport function listFlowSlugs(): string[] {\n const dir = flowsDir();\n if (!existsSync(dir)) {\n return [];\n }\n return readdirSync(dir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\"_\") && entry.name !== \".gitkeep\")\n .map((entry) => entry.name)\n .sort();\n}\n\ntype AnyRecord = Record<string, unknown>;\n\n/** Absolute path to a form's `_data.json` — the one file the agent may edit. */\nexport function flowDataPath(slug: string): string {\n return join(flowsDir(), slug, \"_data.json\");\n}\n\n/**\n * Write a form tree back. Two-space JSON with a trailing newline, matching what\n * the scaffolder and the repo's markdown/JSON formatting already produce — a\n * write in any other shape turns a one-field edit into a whole-file diff.\n */\nexport function writeFlowTree(slug: string, tree: AnyRecord): void {\n writeFileSync(flowDataPath(slug), `${JSON.stringify(tree, null, 2)}\\n`, \"utf-8\");\n}\n\n/**\n * Every node in the tree, depth-first, parents before children.\n *\n * `Array.isArray`, not `?? []`: `_data.json` is hand-authored, so `children`\n * can be an object or a string, and `??` only guards null. These walkers are\n * what `flows show` and the pre-commit `normalize` run over, which are the two\n * things reached for when a form file is already wrong — throwing there would\n * take out the diagnosis along with the form.\n */\nexport function walkNodes(node: AnyRecord, acc: AnyRecord[] = []): AnyRecord[] {\n if (!node || typeof node !== \"object\") return acc;\n acc.push(node);\n if (Array.isArray(node.children)) {\n for (const child of node.children as AnyRecord[]) walkNodes(child, acc);\n }\n return acc;\n}\n\n/**\n * Every side effect in the tree, with the node that owns it.\n *\n * Walked rather than read off the root: side effects hang off whichever node\n * fires them, so a multi-step form keeps them on a child step. Reading\n * `tree.sideEffects` alone reports \"no side effects\" for a form that plainly\n * has one.\n */\nexport function collectSideEffects(tree: AnyRecord): Array<{ node: AnyRecord; sideEffect: AnyRecord }> {\n return walkNodes(tree).flatMap((node) =>\n Array.isArray(node.sideEffects)\n ? (node.sideEffects as AnyRecord[])\n .filter((sideEffect): sideEffect is AnyRecord => Boolean(sideEffect) && typeof sideEffect === \"object\")\n .map((sideEffect) => ({ node, sideEffect }))\n : [],\n );\n}\n\n/** A destination with something sealed in it, as `/api/flows/destinations/reveal` takes it. */\nexport type SealedSideEffect = { sideEffectId: string; type: FlowSideEffectType; encryptedConfig: string };\n\nexport function sealedSideEffects(tree: AnyRecord): SealedSideEffect[] {\n return collectSideEffects(tree).flatMap(({ sideEffect }) => {\n const { id, type, encryptedConfig } = sideEffect;\n const sealed =\n typeof id === \"string\" &&\n typeof type === \"string\" &&\n (FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type) &&\n typeof encryptedConfig === \"string\" &&\n encryptedConfig.length > 0;\n return sealed\n ? [{ sideEffectId: id as string, type: type as FlowSideEffectType, encryptedConfig: encryptedConfig as string }]\n : [];\n });\n}\n\nfunction describeSettings(settings: Record<string, unknown>): string {\n if (typeof settings.email === \"string\") {\n return `to ${settings.email}${typeof settings.subject === \"string\" ? ` · subject \"${settings.subject}\"` : \"\"}`;\n }\n return Object.entries(settings)\n .filter(([, value]) => typeof value === \"string\" || typeof value === \"number\")\n .map(([key, value]) => `${key}: ${String(value)}`)\n .join(\" · \");\n}\n\n/** Each sealed destination's row, saying where it sends — credentials never included (the backend strips them). */\nexport function withSettings(\n rows: FlowConfigStatus[],\n settingsById: Record<string, Record<string, unknown> | null>,\n): FlowConfigStatus[] {\n return rows.map((row) => {\n const settings = row.sideEffectId ? settingsById[row.sideEffectId] : undefined;\n const described = settings ? describeSettings(settings) : \"\";\n return described ? { ...row, status: `${row.status} → ${described}` } : row;\n });\n}\n\n/** Whether this workspace holds a Form by that slug. Never exits. */\nexport function flowExists(slug: string): boolean {\n return existsSync(join(flowsDir(), slug, \"_data.json\"));\n}\n\nexport function readFlowTree(slug: string): AnyRecord {\n const path = join(flowsDir(), slug, \"_data.json\");\n if (!existsSync(path)) {\n failLocal(`No form \"${slug}\". Run \"baker flows list\" to see the forms in this workspace.`);\n }\n try {\n return JSON.parse(readFileSync(path, \"utf-8\")) as AnyRecord;\n } catch (error) {\n failLocal(`Could not read form \"${slug}\": ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nfunction isConfigured(value: unknown): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\ntype NodeMeta = { nodeId: string; nodeName?: string };\n\nfunction nodeMeta(record: AnyRecord): NodeMeta {\n const nodeId = typeof record.id === \"string\" ? record.id : \"\";\n const nodeName = typeof record.name === \"string\" ? record.name : undefined;\n return { nodeId, ...(nodeName ? { nodeName } : {}) };\n}\n\nfunction widgetNodeStatus(record: AnyRecord, meta: NodeMeta): FlowConfigStatus | null {\n const nodeData = record.nodeData as AnyRecord | undefined;\n const nodeType = nodeData?.type;\n if (typeof nodeType !== \"string\" || !(FLOW_RESOURCE_NODE_TYPES as readonly string[]).includes(nodeType)) {\n return null;\n }\n const external = (nodeData?.form as AnyRecord | undefined)?.external;\n const selected = external != null && typeof external === \"object\";\n const name = selected ? (external as AnyRecord).name : undefined;\n return {\n ...meta,\n target: \"node\",\n kind: nodeType,\n status: selected\n ? `${nodeType} — selected${typeof name === \"string\" ? ` \"${name}\"` : \"\"}`\n : `${nodeType} — not selected`,\n needsInput: !selected,\n };\n}\n\n/**\n * Whether this side effect still needs something only the user can give.\n *\n * `false` for a type that has no confidential half at all (a pixel takes a tag\n * ref and nothing else), so a caller can ask the question of any side effect\n * without first checking whether the question applies.\n */\nexport function sideEffectNeedsInput(raw: unknown): boolean {\n const effect = raw as AnyRecord | null;\n const type = effect?.type;\n if (typeof type !== \"string\" || !(FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type)) {\n return false;\n }\n const configured = isConfigured(effect?.encryptedConfig);\n if (!isFlowOauthSideEffect(type as FlowSideEffectType)) return !configured;\n return !isConfigured(effect?.oauthProviderId) || !configured;\n}\n\n/** A pixel has no confidential half; it is listed so a form's tracking is visible before anyone adds to it. */\nfunction trackingStatus(effect: AnyRecord, type: string, meta: NodeMeta): FlowConfigStatus | null {\n if (flowCatalogEntry(\"side-effect\", type)?.owners?.tagIds !== \"tags\") return null;\n const tags = Array.isArray(effect.tagIds) ? effect.tagIds.length : 0;\n const event = typeof effect.eventName === \"string\" ? ` \"${effect.eventName}\"` : \"\";\n return {\n ...meta,\n target: \"sideEffect\",\n ...(typeof effect.id === \"string\" ? { sideEffectId: effect.id } : {}),\n kind: type,\n status: `${type}${event} — ${tags > 0 ? `[${tags} tag${tags === 1 ? \"\" : \"s\"}]` : \"[no tag]\"}`,\n needsInput: false,\n };\n}\n\nfunction sideEffectStatus(raw: unknown, meta: NodeMeta): FlowConfigStatus | null {\n const effect = raw as AnyRecord | null;\n const type = effect?.type;\n if (typeof type !== \"string\") return null;\n if (!(FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type)) {\n return effect ? trackingStatus(effect, type, meta) : null;\n }\n const configured = isConfigured(effect?.encryptedConfig);\n const oauth = isFlowOauthSideEffect(type as FlowSideEffectType);\n const connected = isConfigured(effect?.oauthProviderId);\n const needs = FLOW_SECRET_FIELDS[type as FlowSideEffectType];\n const status = oauth\n ? `${type} — connection ${connected ? \"[connected]\" : \"[needs connection]\"}, config ${configured ? \"[set]\" : \"[missing]\"}`\n : configured\n ? `${type} — [configured]`\n : `${type} — [missing]${needs.length > 0 ? ` (needs: ${needs.join(\", \")})` : \"\"}`;\n return {\n ...meta,\n target: \"sideEffect\",\n ...(typeof effect?.id === \"string\" ? { sideEffectId: effect.id } : {}),\n kind: type,\n status,\n needsInput: sideEffectNeedsInput(effect),\n };\n}\n\n/**\n * The exact call that fills a still-unconfigured item — `baker flows connect`\n * for anything the agent can wire itself, `request_flow_input` for the rest\n * and as the fallback.\n *\n * Emitted as a ready-to-issue call rather than a reminder that one exists. The\n * argument set is not guessable — it needs the node id, and for a side effect\n * the side-effect id too — so a hint that only named the tool would still cost\n * the agent a `flows show --full` to assemble.\n */\nexport function requestFlowInputCall(slug: string, status: FlowConfigStatus): string {\n const args =\n status.target === \"node\"\n ? `{ target: \"node\", flowSlug: \"${slug}\", nodeId: \"${status.nodeId}\", nodeType: \"${status.kind}\" }`\n : `{ target: \"sideEffect\", flowSlug: \"${slug}\", nodeId: \"${status.nodeId}\", sideEffectId: \"${status.sideEffectId}\", sideEffectType: \"${status.kind}\" }`;\n const card = `request_flow_input with ${args}`;\n const target = status.target === \"node\" ? `--node ${status.nodeId}` : `--side-effect ${status.sideEffectId}`;\n const fallback = \"only if nothing is connected or several could be meant\";\n // Nothing in an email is confidential: you state it, and the user is never handed a card for it.\n if (status.kind === \"email\") {\n return `baker flows connect ${slug} ${target} --email \"<who receives each lead, comma-separated>\" --subject \"<New lead — the Form's name>\"`;\n }\n if (status.kind === \"httpWebhook\") {\n return `baker flows connect ${slug} ${target} --url <https address> — only a webhook that needs a token or password goes to the user: ${card}`;\n }\n if (status.kind === \"hubspotForm\") {\n return `baker flows connect ${slug} ${target} --hubspot-form <formId from baker hubspot forms list> — ${fallback}: ${card}`;\n }\n if (status.kind === \"hubspot\" || status.kind === \"hubspotMeeting\") {\n const list = status.kind === \"hubspot\" ? \"forms view <id>\" : \"meetings view <slug>\";\n return `write \\`baker hubspot ${list} --as-node\\` into the step's form.external — ${fallback}: ${card}`;\n }\n if ((FLOW_ACCOUNT_ONLY_KINDS as readonly string[]).includes(status.kind)) {\n return `baker flows connect ${slug} ${target} — ${fallback}: ${card}`;\n }\n if ((FLOW_AGENT_DESTINATION_KINDS as readonly string[]).includes(status.kind)) {\n const sheet = status.kind === \"googleSpreadsheet\" ? ' (or --new-sheet \"<title>\" --columns \"…\")' : \"\";\n return `baker flows connect ${slug} ${target} --resource <id from baker flows options ${status.kind}>${sheet} — ${fallback}: ${card}`;\n }\n return card;\n}\n\n/**\n * Walk a local flow tree collecting the configuration status of every\n * confidential field — WITHOUT decrypting anything. A present `encryptedConfig`\n * string / `oauthProviderId` / `form.external` object means \"configured\"; null /\n * absent means the agent still needs to run `request_flow_input` for it.\n */\nexport function collectConfigStatus(node: unknown, acc: FlowConfigStatus[]): void {\n if (!node || typeof node !== \"object\") {\n return;\n }\n const record = node as AnyRecord;\n const meta = nodeMeta(record);\n\n const widget = widgetNodeStatus(record, meta);\n if (widget) {\n acc.push(widget);\n }\n if (Array.isArray(record.sideEffects)) {\n for (const raw of record.sideEffects) {\n const status = sideEffectStatus(raw, meta);\n if (status) {\n acc.push(status);\n }\n }\n }\n if (Array.isArray(record.children)) {\n for (const child of record.children) {\n collectConfigStatus(child, acc);\n }\n }\n}\n\n/** Replace opaque ciphertext with a status marker so `--full` stays readable and never leaks noise. */\nexport function redactTree(node: unknown): unknown {\n if (Array.isArray(node)) {\n return node.map(redactTree);\n }\n if (!node || typeof node !== \"object\") {\n return node;\n }\n const out: AnyRecord = {};\n for (const [key, value] of Object.entries(node as AnyRecord)) {\n if (key === \"encryptedConfig\") {\n out[key] = isConfigured(value) ? \"[configured]\" : value;\n } else {\n out[key] = redactTree(value);\n }\n }\n return out;\n}\n\n/**\n * The constant a step's name becomes in the generated `_query.ts`.\n *\n * Byte-for-byte the scaffold's own `toScreamingSnake`\n * (`__tooling__/checks/base/flow-typed/flow-typed.mjs`), which is the only implementation\n * that decides anything: the watcher writes `export const <key> = \"<node id>\";`\n * for every step and throws `Duplicate flow node name` when two steps produce\n * the same one. `flows-step-name-key.test.ts` pins the two together.\n *\n * It is copied rather than imported because the CLI ships as a binary into a\n * Session Runtime and the scaffold ships as files — there is no module boundary\n * they share. The copy that was here before was NOT this rule: it uppercased and\n * squashed every non-alphanumeric run, which agrees on `Contact Info` and\n * disagrees on `contactInfo` (`CONTACTINFO` here, `CONTACT_INFO` there). So\n * `add-node` waved through a name that collided in the generator, the watcher\n * then threw, and `_query.ts` stopped regenerating for the whole form.\n */\nexport function stepNameKey(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .replace(/[-\\s]+/g, \"_\")\n .toUpperCase();\n}\n\n/**\n * Whether that constant is one TypeScript will accept.\n *\n * `flow-typed.mjs` interpolates the key straight into `export const <key> = …`\n * without checking, so a step called \"1. Your details\" or \"Thanks!\" writes a\n * `_query.ts` that is a syntax error, and the whole workspace stops building —\n * a failure whose message names the generated file rather than the step that\n * caused it. `add-node` is where a name is minted, so it is where this is worth\n * catching.\n *\n * The real identifier grammar, not `[A-Z0-9_]`: this product is Spanish-first\n * and `INFORMACIÓN_DE_CONTACTO` is both a legal identifier and an ordinary step\n * name. Rejecting it would be the check being wrong, not the name.\n */\nexport function isUsableStepNameKey(key: string): boolean {\n return /^[\\p{ID_Start}$_][\\p{ID_Continue}$]*$/u.test(key);\n}\n\n/**\n * What each sealed destination holds, minus credentials — so \"add Fran to the\n * leads email\" starts from who gets it today instead of a card for the user.\n * A destination Baker would not open for this company (sealed for another,\n * or saved before destinations recorded whose they are) maps to null; the whole call failing\n * returns null. `flows show` leaves those rows as they were, and `connect`\n * refuses to overwrite what it cannot see.\n */\nexport async function readSettings(\n tree: Record<string, unknown>,\n): Promise<Record<string, Record<string, unknown> | null> | null> {\n const sealed = sealedSideEffects(tree);\n if (sealed.length === 0) return {};\n try {\n const { data } = await apiPost<FlowsRevealResponse>(\"/api/flows/destinations/reveal\", {\n items: sealed.map(({ type, encryptedConfig }) => ({ type, encryptedConfig })),\n });\n return Object.fromEntries(sealed.map((item, index) => [item.sideEffectId, data.items[index] ?? null]));\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
handleLinkedinError,
|
|
3
3
|
resolveAccountIdArg
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3URK7DAA.js";
|
|
5
5
|
import {
|
|
6
6
|
adCopyHints,
|
|
7
7
|
booleanWordPositionalError,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
LINKEDIN_DRAFT_BATCH_MAX,
|
|
18
18
|
linkedinDraftOpInputSchema
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-BAUSWB7O.js";
|
|
20
20
|
import {
|
|
21
21
|
apiPost
|
|
22
22
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
requireTarget,
|
|
344
344
|
requireTargets
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-QJNTI36W.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
prepareCanvas,
|
|
3
3
|
unsuppliedPlaceholderAssets
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-P6ICBEE4.js";
|
|
5
5
|
import {
|
|
6
6
|
isSourceStale
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BAUSWB7O.js";
|
|
8
8
|
|
|
9
9
|
// src/commands/canvas/render-state.ts
|
|
10
10
|
import { mkdir, readdir, readFile, rm, writeFile } from "fs/promises";
|
|
@@ -108,4 +108,4 @@ export {
|
|
|
108
108
|
staleCreatives,
|
|
109
109
|
clearLegacyDirtyMarker
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-TD6GIMV6.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
calendarDaySchema,
|
|
7
7
|
todayUtc,
|
|
8
8
|
windowTooLong
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BAUSWB7O.js";
|
|
10
10
|
|
|
11
11
|
// ../api/src/accounts/crm.ts
|
|
12
12
|
import { z } from "zod";
|
|
@@ -1076,4 +1076,4 @@ export {
|
|
|
1076
1076
|
accountsCampaignsRequestSchema,
|
|
1077
1077
|
ACCOUNTS_NO_SETTINGS_MESSAGE
|
|
1078
1078
|
};
|
|
1079
|
-
//# sourceMappingURL=chunk-
|
|
1079
|
+
//# sourceMappingURL=chunk-TESII3FM.js.map
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
variantImage,
|
|
31
31
|
versionRun,
|
|
32
32
|
writeSeriesMemberCanvas
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-D5XAVXUZ.js";
|
|
34
34
|
import {
|
|
35
35
|
buildFailedRunRecord,
|
|
36
36
|
buildInitialRunRecord,
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
finalFiles,
|
|
40
40
|
finalOutputLabelsFromCanvas,
|
|
41
41
|
nodeOutputsToRecord
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-P2RE52V7.js";
|
|
43
43
|
import {
|
|
44
44
|
clearLegacyDirtyMarker,
|
|
45
45
|
readRenderState,
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
recordReviewOutcome,
|
|
49
49
|
recordSeriesLeadRun,
|
|
50
50
|
recordSnapshot
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-TD6GIMV6.js";
|
|
52
52
|
import {
|
|
53
53
|
BRAND_LOGO_ROLE,
|
|
54
54
|
CLAIMS_MODEL,
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
uncastPeople,
|
|
77
77
|
wireNamedPeople,
|
|
78
78
|
wireProofBadges
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-P6ICBEE4.js";
|
|
80
80
|
import {
|
|
81
81
|
advanceDefinitionStatus
|
|
82
82
|
} from "./chunk-3ACMDRSE.js";
|
|
@@ -3144,4 +3144,4 @@ export {
|
|
|
3144
3144
|
executeCanvasRun,
|
|
3145
3145
|
buildBackendClient
|
|
3146
3146
|
};
|
|
3147
|
-
//# sourceMappingURL=chunk-
|
|
3147
|
+
//# sourceMappingURL=chunk-TXI5OWCF.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
firstTimes,
|
|
9
9
|
isTriggerKind,
|
|
10
10
|
parseConditionsExpression
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-BAUSWB7O.js";
|
|
12
12
|
import {
|
|
13
13
|
ApiError,
|
|
14
14
|
validateConvexId
|
|
@@ -379,4 +379,4 @@ export {
|
|
|
379
379
|
reactionBody,
|
|
380
380
|
chatBody
|
|
381
381
|
};
|
|
382
|
-
//# sourceMappingURL=chunk-
|
|
382
|
+
//# sourceMappingURL=chunk-UC7VFFXR.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
MAX_EVENT_NAME,
|
|
14
14
|
REJECTION_CODES,
|
|
15
15
|
STANDARD_EVENT_NAMES
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-BAUSWB7O.js";
|
|
17
17
|
|
|
18
18
|
// ../api/src/event-ingest/arrivals.ts
|
|
19
19
|
import { z } from "zod";
|
|
@@ -430,4 +430,4 @@ export {
|
|
|
430
430
|
eventIngestUrl,
|
|
431
431
|
ingestBrief
|
|
432
432
|
};
|
|
433
|
-
//# sourceMappingURL=chunk-
|
|
433
|
+
//# sourceMappingURL=chunk-UNI5AASR.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
mediaTagsCreateRequestSchema,
|
|
3
3
|
mediaTagsDeleteRequestSchema,
|
|
4
4
|
mediaTagsUpdateRequestSchema
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BAUSWB7O.js";
|
|
6
6
|
import {
|
|
7
7
|
ApiError,
|
|
8
8
|
apiGet,
|
|
@@ -194,4 +194,4 @@ Examples:
|
|
|
194
194
|
export {
|
|
195
195
|
makeTagsCommand
|
|
196
196
|
};
|
|
197
|
-
//# sourceMappingURL=chunk-
|
|
197
|
+
//# sourceMappingURL=chunk-UX5HYEN3.js.map
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-VVZBBKRC.js";
|
|
24
24
|
import {
|
|
25
25
|
videosIngestRequestSchema
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-BAUSWB7O.js";
|
|
27
27
|
import {
|
|
28
28
|
ApiError,
|
|
29
29
|
apiPost
|
|
@@ -360,4 +360,4 @@ export {
|
|
|
360
360
|
runVideoIngest,
|
|
361
361
|
ingestHints
|
|
362
362
|
};
|
|
363
|
-
//# sourceMappingURL=chunk-
|
|
363
|
+
//# sourceMappingURL=chunk-V4RGDJAN.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
failApi
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EIVYFZ4N.js";
|
|
4
4
|
import {
|
|
5
5
|
HUBSPOT_MISSING_GRANT_MARKER,
|
|
6
6
|
HUBSPOT_NOT_CONNECTED_MESSAGE
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BAUSWB7O.js";
|
|
8
8
|
import {
|
|
9
9
|
ApiError
|
|
10
10
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -48,4 +48,4 @@ export {
|
|
|
48
48
|
hubspotRefusal,
|
|
49
49
|
failNotConnected
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=chunk-
|
|
51
|
+
//# sourceMappingURL=chunk-W2TJIZS2.js.map
|