@qwen-code/qwen-code 0.22.2-preview.1 → 0.22.3-nightly.20260829.e5cb60ad48
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/bundled/computer-use/SKILL.md +3 -3
- package/bundled/goal-draft/SKILL.md +109 -0
- package/bundled/qc-helper/docs/configuration/settings.md +37 -36
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +34 -3
- package/bundled/qc-helper/docs/features/code-review.md +3 -3
- package/bundled/qc-helper/docs/features/commands.md +2 -1
- package/bundled/qc-helper/docs/features/computer-use.md +2 -2
- package/bundled/qc-helper/docs/features/goals.md +58 -0
- package/bundled/qc-helper/docs/features/headless.md +13 -11
- package/bundled/qc-helper/docs/features/status-line.md +3 -3
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +1 -1
- package/bundled/review/SKILL.md +81 -31
- package/bundled/review/references/persistence.md +7 -3
- package/bundled/review/references/posting.md +10 -4
- package/chunks/MaxSizedBox-JK4LFKJ3.js +111 -0
- package/chunks/{StandaloneSessionPicker-5D2L22SF.js → StandaloneSessionPicker-UA2MQCCS.js} +83 -84
- package/chunks/{acpAgent-4DCKLA32.js → acpAgent-ZKIVHQKW.js} +1159 -360
- package/chunks/{agent-B4AFZL6H.js → agent-Z3Q5C3RX.js} +46 -47
- package/chunks/agent-headless-BIVZ3KYZ.js +86 -0
- package/chunks/{anthropicContentGenerator-U76GTVB6.js → anthropicContentGenerator-YVTB6QX7.js} +46 -50
- package/chunks/{artifact-tool-XDJCZZCF.js → artifact-tool-XSMPHZBT.js} +11 -3
- package/chunks/{askUserQuestion-ZXXERLEV.js → askUserQuestion-66I3U2QX.js} +31 -7
- package/chunks/bridge-KDQTHAR7.js +120 -0
- package/chunks/{channel-management-service-HXXS3HOZ.js → channel-management-service-HQ6KDS7C.js} +6 -6
- package/chunks/channel-settings-store-X4WWBVYW.js +121 -0
- package/chunks/{channel-worker-group-EVDC2P4K.js → channel-worker-group-6NA6BBZV.js} +8 -7
- package/chunks/{channel-worker-manager-IJJZHGEI.js → channel-worker-manager-NEZ2J6RK.js} +10 -8
- package/chunks/{channel-worker-supervisor-YSKB5GVB.js → channel-worker-supervisor-FKU7DIHJ.js} +6 -5
- package/chunks/{chunk-7QGEJI7M.js → chunk-23RFD54N.js} +1 -1
- package/chunks/{chunk-7DPKPBOQ.js → chunk-2AEHQRY2.js} +2 -2
- package/chunks/{chunk-LJP2BBMK.js → chunk-2SXSLSQE.js} +4 -4
- package/chunks/chunk-2TNL5KPM.js +49 -0
- package/chunks/chunk-36LGBEM6.js +130 -0
- package/chunks/{chunk-QR4AHMGQ.js → chunk-3CAI35FS.js} +13 -13
- package/chunks/{chunk-ZWKGZB2K.js → chunk-3JXM2CVW.js} +3 -3
- package/chunks/{chunk-CZFQ62RM.js → chunk-3WJLDA3X.js} +4 -4
- package/chunks/{chunk-ILPXSKGQ.js → chunk-3WK3QDNV.js} +2 -2
- package/chunks/{chunk-IKN3IUJP.js → chunk-3XKLXHGK.js} +17 -9
- package/chunks/{chunk-ZLTEQYNC.js → chunk-42IDLQWS.js} +26 -20
- package/chunks/{chunk-7UJTY5V3.js → chunk-44LKG3IY.js} +1 -1
- package/chunks/chunk-4CMJKUND.js +95 -0
- package/chunks/{chunk-77TOMRBG.js → chunk-4K7KNVWH.js} +3 -3
- package/chunks/{chunk-SQPOJ4ZI.js → chunk-4NDLQAY2.js} +27 -270
- package/chunks/{chunk-V3GINY6K.js → chunk-4QHPPXK2.js} +16 -8
- package/chunks/chunk-4VQBQLIZ.js +293 -0
- package/chunks/{chunk-FJAITR4L.js → chunk-5CALJAH7.js} +2 -2
- package/chunks/{chunk-TDQBVEPK.js → chunk-5SBVOOA2.js} +10 -8
- package/chunks/{chunk-R7G7GKOX.js → chunk-5ZJL3AIV.js} +3 -3
- package/chunks/{chunk-UCSV2IZW.js → chunk-62GQFYID.js} +3 -3
- package/chunks/{chunk-SLEWBQWM.js → chunk-6DIGWMGT.js} +2 -2
- package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
- package/chunks/{chunk-PVBT5QPD.js → chunk-6PJOTWAN.js} +1 -1
- package/chunks/{chunk-5CMWFBML.js → chunk-6XOIV7MI.js} +1 -1
- package/chunks/{chunk-ELY4QVIB.js → chunk-7EQQR46F.js} +1 -1
- package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
- package/chunks/chunk-7GUOXWPY.js +2597 -0
- package/chunks/chunk-7J6OTNGO.js +424 -0
- package/chunks/{chunk-DIMEPKCW.js → chunk-7S226YTK.js} +1 -1
- package/chunks/{chunk-2MHGD7EE.js → chunk-A3LWD5MK.js} +1 -1
- package/chunks/{chunk-E4I5MVBR.js → chunk-ABS25QER.js} +1 -1
- package/chunks/{chunk-F7M6ZFGU.js → chunk-AMLXTTJJ.js} +8 -8
- package/chunks/{chunk-AA7VBRBG.js → chunk-ARF6IJHM.js} +8 -8
- package/chunks/{chunk-NEZZHGEI.js → chunk-AYFA7MZV.js} +6 -6
- package/chunks/{chunk-XMSMTU6H.js → chunk-B42A5ZHA.js} +4 -4
- package/chunks/{chunk-FVDQ5E67.js → chunk-B466ZSHZ.js} +3 -3
- package/chunks/{chunk-6US7BF3G.js → chunk-B5PHIJGI.js} +183 -5
- package/chunks/{chunk-4TPAG3O7.js → chunk-BFPESSTR.js} +1 -1
- package/chunks/{chunk-5URK47RN.js → chunk-BFYGL2XL.js} +11629 -10405
- package/chunks/{chunk-66GIFJ63.js → chunk-BIJEBAAQ.js} +1 -1
- package/chunks/{chunk-WBT3STGU.js → chunk-BKWNKLZB.js} +20 -20
- package/chunks/{chunk-T45CL2NT.js → chunk-BOWFGCEU.js} +3 -3
- package/chunks/{chunk-GTUZ3R6I.js → chunk-BP5PTNCU.js} +357 -117
- package/chunks/{chunk-IPQA4SR5.js → chunk-BWORX6FA.js} +1 -1
- package/chunks/{chunk-BKDAF7ES.js → chunk-BXDAPVQU.js} +2 -2
- package/chunks/{chunk-ZEADBZLO.js → chunk-C2X7KY45.js} +3 -3
- package/chunks/{chunk-7OBH4AM2.js → chunk-CAJTKR6W.js} +5 -5
- package/chunks/{chunk-2FN2HNTI.js → chunk-CFJY4DGX.js} +2 -2
- package/chunks/{chunk-W2WRNJKX.js → chunk-CLWO3B77.js} +6 -6
- package/chunks/{chunk-U45D46O5.js → chunk-CMHFCLBU.js} +1 -1
- package/chunks/{chunk-LRKMQPMD.js → chunk-CQH5KTKC.js} +1 -1
- package/chunks/{chunk-TR7G7XFQ.js → chunk-CVUBULIX.js} +5 -5
- package/chunks/{chunk-MCKJTBZN.js → chunk-CWQZUDB7.js} +2 -2
- package/chunks/{chunk-JECO75XD.js → chunk-D5LUXLUH.js} +2 -2
- package/chunks/chunk-DJBQCO2E.js +842 -0
- package/chunks/{chunk-BQBUZDDH.js → chunk-DJECZIJX.js} +42 -42
- package/chunks/{chunk-VYWCFWI5.js → chunk-DMLVSW7L.js} +542 -654
- package/chunks/{chunk-EB4VDXNI.js → chunk-DYXFD5RO.js} +182 -3
- package/chunks/{chunk-ZKAZP2ZG.js → chunk-EB6QRGHM.js} +3 -3
- package/chunks/{chunk-XIRDDFRS.js → chunk-ECE3UYVO.js} +5266 -6055
- package/chunks/{chunk-3UZCLCXR.js → chunk-EKSCLBBF.js} +3 -3
- package/chunks/{chunk-624NHDGB.js → chunk-ERFDKH32.js} +11 -0
- package/chunks/{chunk-3JKUX4PB.js → chunk-F5RB4S23.js} +9 -9
- package/chunks/{chunk-VBF4KZRQ.js → chunk-FIKYKQOO.js} +1 -1
- package/chunks/{chunk-DID6IRGC.js → chunk-FKET6VOO.js} +56 -39
- package/chunks/{chunk-4K44OMLI.js → chunk-FROAFEFB.js} +3 -3
- package/chunks/{chunk-MZS7GEC7.js → chunk-FTF2YIZ5.js} +1 -1
- package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
- package/chunks/{chunk-ZJG323IA.js → chunk-G6FECKTJ.js} +7 -5
- package/chunks/{chunk-H3HZ4AWW.js → chunk-GIHXH2KO.js} +1 -1
- package/chunks/{chunk-ZGWDHSUM.js → chunk-H4LCV44K.js} +4 -4
- package/chunks/{chunk-OLS3MAXQ.js → chunk-H5WQZTAW.js} +15 -9
- package/chunks/chunk-H72BQNM3.js +645 -0
- package/chunks/{chunk-Z4X5MTRT.js → chunk-HCOBAG2L.js} +2 -4
- package/chunks/{chunk-ATLGYSYH.js → chunk-HHQJANFM.js} +4 -4
- package/chunks/{chunk-7JPW6IYH.js → chunk-HVC3PNVC.js} +1 -1
- package/chunks/{chunk-OI2DR6QB.js → chunk-I6LYRJPB.js} +3 -3
- package/chunks/{chunk-E55H6BZ7.js → chunk-ICURCKIU.js} +1335 -119
- package/chunks/{chunk-2YDYDDE2.js → chunk-IJMEPQ5N.js} +3 -3
- package/chunks/{chunk-PAJGKZAA.js → chunk-ISKH4QX3.js} +14 -12
- package/chunks/{chunk-VOEMVOM4.js → chunk-IZDKYNKN.js} +2 -2
- package/chunks/{chunk-FCSWZAS3.js → chunk-J7SS77YW.js} +5 -5
- package/chunks/{chunk-AYVIGUUK.js → chunk-JB4JIVTJ.js} +1 -1
- package/chunks/chunk-JCMS65DJ.js +1584 -0
- package/chunks/{chunk-BHTJAO36.js → chunk-JHDPOPQG.js} +7 -7
- package/chunks/{chunk-FN5C6C7G.js → chunk-JHYH6PYQ.js} +192 -478
- package/chunks/{chunk-T6OODF2U.js → chunk-JWALNCLT.js} +1 -1
- package/chunks/{chunk-KQYW2GB5.js → chunk-JWDMKJG5.js} +6 -6
- package/chunks/{chunk-SKNVVYIJ.js → chunk-K5KXUXWC.js} +3 -3
- package/chunks/{chunk-TFV4RXPU.js → chunk-K6CTN5TU.js} +1 -1
- package/chunks/{chunk-X3XGCJ32.js → chunk-KEIMKAM4.js} +28 -111
- package/chunks/{chunk-XUX6O2ZT.js → chunk-KID24ZFN.js} +4 -1
- package/chunks/{chunk-I6DY753S.js → chunk-KJO2LBUK.js} +944 -18
- package/chunks/{chunk-5T4LWWNX.js → chunk-KYWTPLBJ.js} +18 -21
- package/chunks/chunk-LGO7DEXL.js +1186 -0
- package/chunks/{chunk-TOF4UZHH.js → chunk-LUEHOUHM.js} +3 -3
- package/chunks/{chunk-GNMJNDZE.js → chunk-M6FOJXW3.js} +1 -1
- package/chunks/{chunk-JLU3FPQR.js → chunk-MAQ2W4IF.js} +5 -5
- package/chunks/{chunk-K3LPAED5.js → chunk-MQM5PJML.js} +24 -4
- package/chunks/{chunk-AKQA3WCH.js → chunk-MVDPFLWM.js} +723 -3399
- package/chunks/{chunk-5PA6UEYA.js → chunk-MZCJWS5Y.js} +1 -1
- package/chunks/{chunk-BGXZBI5B.js → chunk-N4X7G4J2.js} +2 -1
- package/chunks/{chunk-WXDZZFH3.js → chunk-NEBSNUMX.js} +6 -6
- package/chunks/{chunk-J3CBIEDS.js → chunk-NENQE7VH.js} +32 -15
- package/chunks/{chunk-TMGAS5TO.js → chunk-NHDNYMBU.js} +26 -4
- package/chunks/{chunk-27ONXAFY.js → chunk-NIFYWDYN.js} +1 -1
- package/chunks/{chunk-IJVDHPKD.js → chunk-NU7RKEZR.js} +2 -2
- package/chunks/{chunk-CDUN63IN.js → chunk-OJEMXKA4.js} +3 -3
- package/chunks/{chunk-RRKNX553.js → chunk-PDQGMSZK.js} +1 -1
- package/chunks/{chunk-R3T33BG5.js → chunk-PI6HYGBE.js} +3 -3
- package/chunks/{chunk-5SM2AK65.js → chunk-PO6YCWIQ.js} +5 -5
- package/chunks/{chunk-GTUKW3I6.js → chunk-PPKZ7JOE.js} +1 -1
- package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
- package/chunks/{chunk-ALTQLFEG.js → chunk-PQZBDDNG.js} +5 -194
- package/chunks/{chunk-WEGXPP5E.js → chunk-QFCDF5PL.js} +1 -1
- package/chunks/{chunk-DEYPMJPD.js → chunk-QJNDUTOL.js} +45 -239
- package/chunks/{chunk-OF2DPXUS.js → chunk-QYMAKPY5.js} +119 -24
- package/chunks/{chunk-JVPFTDBK.js → chunk-RFIDDFAL.js} +1 -1
- package/chunks/chunk-RKFGE7JH.js +93 -0
- package/chunks/{chunk-CPPYZHBN.js → chunk-RU7BK6B3.js} +1 -1
- package/chunks/{chunk-KPF2K55D.js → chunk-RZKOA4JE.js} +39 -8
- package/chunks/{chunk-AWFZDYSD.js → chunk-SEDFP3ZI.js} +1 -1
- package/chunks/chunk-SEONHUS3.js +275 -0
- package/chunks/chunk-SS4MRMKE.js +3525 -0
- package/chunks/{chunk-BPMVPWBT.js → chunk-SS5SDCD3.js} +6 -6
- package/chunks/{chunk-J5352S3S.js → chunk-ST5V3ZOC.js} +3 -3
- package/chunks/{chunk-7CWEZQ6T.js → chunk-STUJ7IMZ.js} +0 -77
- package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
- package/chunks/{chunk-TWSKM647.js → chunk-T7KMERIX.js} +1 -1
- package/chunks/{chunk-HPECDZ6X.js → chunk-TGJ2PKCW.js} +4341 -1408
- package/chunks/{chunk-EC5BONC3.js → chunk-TPI7O7HR.js} +1 -1
- package/chunks/{chunk-T2CRBIDJ.js → chunk-TTX2JUE6.js} +1 -1
- package/chunks/{chunk-AP7WZONS.js → chunk-TU6WVK67.js} +19 -9
- package/chunks/chunk-U54AYGEC.js +337 -0
- package/chunks/{chunk-3WBMPR3S.js → chunk-UAOTD2BN.js} +1 -1
- package/chunks/{chunk-2NNTE2ED.js → chunk-UHQFIS7N.js} +15 -0
- package/chunks/{chunk-SUE2ZMUH.js → chunk-UI4DXRZW.js} +49 -31
- package/chunks/{chunk-76WGY6LW.js → chunk-URE3QBBB.js} +3 -3
- package/chunks/{chunk-KOJ6MHD5.js → chunk-UTLCH2FK.js} +1 -1
- package/chunks/chunk-UVY67MSH.js +205 -0
- package/chunks/{chunk-FJWICLG7.js → chunk-V4264FEG.js} +9 -9
- package/chunks/{chunk-XR7OIAQF.js → chunk-V5J4J5TP.js} +2 -2
- package/chunks/{chunk-Z6L3C4VF.js → chunk-VBCPNIQD.js} +39 -39
- package/chunks/{chunk-HABT2Z7R.js → chunk-VKCJPNGU.js} +4 -4
- package/chunks/{chunk-UCQOSV6A.js → chunk-VKIGT4OG.js} +3 -3
- package/chunks/{chunk-JSY43GMI.js → chunk-VNMZLAVG.js} +185 -174
- package/chunks/{chunk-X2UOOG5V.js → chunk-VQUGEVGR.js} +1 -1
- package/chunks/{chunk-XJS54K4A.js → chunk-VTHREBQM.js} +2 -2
- package/chunks/{chunk-PTQF7WRA.js → chunk-W3CY4QIO.js} +6 -6
- package/chunks/{chunk-LWLEPXKK.js → chunk-W4XG7IZ4.js} +19 -2
- package/chunks/{chunk-IOGKXPL3.js → chunk-W7HH77GN.js} +6 -6
- package/chunks/{chunk-FPH6TXD3.js → chunk-WAOIHTJS.js} +1 -1
- package/chunks/{chunk-3D6PDLNJ.js → chunk-WD3WSEW3.js} +49 -32
- package/chunks/chunk-WLEYH7CD.js +332 -0
- package/chunks/{chunk-JLGFGPZJ.js → chunk-WNPDGUJO.js} +22 -3
- package/chunks/{chunk-O3BUXIPM.js → chunk-WXEA74YB.js} +3 -3
- package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
- package/chunks/{chunk-VL4YX3FH.js → chunk-XF63PKEN.js} +1 -1
- package/chunks/{chunk-3FSBMAYD.js → chunk-XQFT3QUF.js} +1 -1
- package/chunks/{chunk-5JCZ3UKB.js → chunk-Y5S7LBOZ.js} +44 -7
- package/chunks/{chunk-WZ3QKPMQ.js → chunk-YN44TEOZ.js} +19 -31
- package/chunks/{chunk-2SERYG4T.js → chunk-YTDVNSUQ.js} +1 -1
- package/chunks/{chunk-UWICO5KN.js → chunk-Z44FUM77.js} +3 -3
- package/chunks/{chunk-OT4YKUUV.js → chunk-ZU4UDIWX.js} +2 -2
- package/chunks/{chunk-L436XFLJ.js → chunk-ZZUKP7HV.js} +1 -1
- package/chunks/config-utils-NOCNFTQP.js +114 -0
- package/chunks/contextCommand-DH2NOQBI.js +107 -0
- package/chunks/{core-runtime-CEJRHCRF.js → core-runtime-OLW4OXMV.js} +61 -62
- package/chunks/{create-sub-session-RVHSWVAP.js → create-sub-session-23ITIELI.js} +3 -3
- package/chunks/{create-sub-session-DFZVIG56.js → create-sub-session-ZCGPQTIE.js} +166 -86
- package/chunks/{cron-create-IJGVR5R2.js → cron-create-KJ4IY6PP.js} +57 -10
- package/chunks/{cron-delete-4N5BI6GL.js → cron-delete-MBLQCAYY.js} +4 -4
- package/chunks/{cron-list-2CATIPUX.js → cron-list-DWH2PQ47.js} +4 -4
- package/chunks/{daemon-NAYK4XXU.js → daemon-3GNHB3M2.js} +523 -8
- package/chunks/{daemon-git-worktree-guard-L6ZUFKF7.js → daemon-git-worktree-guard-SHIU7MPJ.js} +58 -59
- package/chunks/daemon-status-provider-WECDBDF7.js +118 -0
- package/chunks/daemon-trust-policy-MX4OYXF3.js +113 -0
- package/chunks/{daemon-trust-policy-monitor-2G3EKQEU.js → daemon-trust-policy-monitor-73WXIKNL.js} +66 -67
- package/chunks/deferred-core-runtime-BKS7O3D6.js +115 -0
- package/chunks/{display-image-6KHQNEAE.js → display-image-BE7I6ZB6.js} +5 -5
- package/chunks/{dist-DJBNNPLN.js → dist-4WXLCBDR.js} +1 -1
- package/chunks/{dist-TJUDJTCB.js → dist-5VXFRTWU.js} +280 -48
- package/chunks/{dist-6H6RZ5H6.js → dist-6BPYWHVD.js} +89 -65
- package/chunks/{dist-ZBVOXSKF.js → dist-GFN5DCBX.js} +74 -65
- package/chunks/{dist-SATKXKUR.js → dist-HZNT6GQS.js} +1 -1
- package/chunks/{dist-FVJZSIO4.js → dist-LVZCXVPF.js} +72 -20
- package/chunks/{dist-7CKN54NL.js → dist-N6W6E753.js} +71 -64
- package/chunks/{dist-4Q7NTUNB.js → dist-NSV4NBPK.js} +31 -14
- package/chunks/{dist-UQUFZDIY.js → dist-SWQMYP2Q.js} +18 -16
- package/chunks/earlyInputCapture-5NNZSVL7.js +108 -0
- package/chunks/{edit-ZERGX3RV.js → edit-IGHPT4I2.js} +47 -48
- package/chunks/{en-6MDBWMTG.js → en-YLXBXM4Z.js} +2 -1
- package/chunks/{enter-worktree-UOZ6ZTP7.js → enter-worktree-35QCAAFP.js} +7 -7
- package/chunks/{enterPlanMode-W2RP3P5B.js → enterPlanMode-LVTPJSAA.js} +51 -52
- package/chunks/environment-HC2PPYDO.js +130 -0
- package/chunks/errors-VCWSG25A.js +114 -0
- package/chunks/{exit-worktree-G2QATUCV.js → exit-worktree-XQD6D543.js} +7 -7
- package/chunks/exitPlanMode-RHI2K2O7.js +84 -0
- package/chunks/{fast-path-4MWBCEUF.js → fast-path-IQNCJOPE.js} +7 -7
- package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-XH426LUU.js} +3 -3
- package/chunks/{glob-DKTNG32L.js → glob-EANAXPNR.js} +46 -47
- package/chunks/{goal-tools-CNVXMSZD.js → goal-tools-PTD3MBA7.js} +10 -8
- package/chunks/{grep-3NLSS32D.js → grep-3REG7TO6.js} +9 -7
- package/chunks/handleAutoUpdate-PVVFLDQ4.js +110 -0
- package/chunks/i18n-VOKX5QIF.js +125 -0
- package/chunks/{image-gen-63NN2H5N.js → image-gen-J6FDGUZP.js} +8 -10
- package/chunks/initializer-SZVVTGZL.js +114 -0
- package/chunks/installationInfo-R22453J5.js +108 -0
- package/chunks/{keychain-token-storage-3MGFRYGM.js → keychain-token-storage-37XPR34V.js} +2 -2
- package/chunks/list-LK5M5W2N.js +117 -0
- package/chunks/{list-agents-EXRSHIDJ.js → list-agents-DI3YFTDT.js} +2 -2
- package/chunks/{gemini-X5GQHQYF.js → llm-6RQJUVIS.js} +120 -115
- package/chunks/{geminiContentGenerator-UDSWXZXL.js → llm-content-generator-Q7JJDSJR.js} +29 -29
- package/chunks/loadedSettingsAdapter-KF2ZPSPG.js +111 -0
- package/chunks/{loggingContentGenerator-73C7TKDK.js → loggingContentGenerator-SBCIJG2J.js} +330 -37
- package/chunks/{loop-wakeup-XBPB2BRO.js → loop-wakeup-XJFONSQ7.js} +5 -5
- package/chunks/{ls-WFONAND2.js → ls-3VAT2J7A.js} +4 -4
- package/chunks/{lsp-DUKPDUXN.js → lsp-5W7IRUBH.js} +2 -2
- package/chunks/{managed-npm-update-H2KOLQZU.js → managed-npm-update-UG324XFY.js} +59 -60
- package/chunks/mcp-PUSCFGS5.js +111 -0
- package/chunks/{monitor-TGCMNJJH.js → monitor-RJW5AP64.js} +46 -47
- package/chunks/nonInteractiveCli-OIXN4WSR.js +187 -0
- package/chunks/{notebook-edit-YEUNZYDX.js → notebook-edit-5MWEIMS2.js} +47 -48
- package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-YN3QZHVM.js} +1 -1
- package/chunks/{openaiContentGenerator-J7LD4VSL.js → openaiContentGenerator-AGTNYSCJ.js} +26 -28
- package/chunks/pidfile-LTA6NT3P.js +112 -0
- package/chunks/process-registry-OAEG6WGC.js +662 -0
- package/chunks/{processUtils-ZHFC7CSL.js → processUtils-GY3Q66CJ.js} +2 -2
- package/chunks/prompt-terminal-ledger-3QS6TCMF.js +106 -0
- package/chunks/{qwenContentGenerator-YEWWK3JQ.js → qwenContentGenerator-NU6PCDA7.js} +51 -52
- package/chunks/{qwenOAuth2-JIYAWXTW.js → qwenOAuth2-OF5WRBQT.js} +7 -9
- package/chunks/{read-file-ZQI3WPVK.js → read-file-DTQL5V62.js} +13 -13
- package/chunks/{read-mcp-resource-7A7NFSFL.js → read-mcp-resource-XD257PGJ.js} +2 -2
- package/chunks/{record-artifact-CPJ4IJSD.js → record-artifact-VW23GS4F.js} +4 -4
- package/chunks/{report-findings-VFM5DENC.js → report-findings-AO5VYFLR.js} +9 -5
- package/chunks/{request-shutdown-6IW46GD7.js → request-shutdown-BCLA3JV2.js} +7 -7
- package/chunks/resumeHistoryUtils-PZ4BER55.js +119 -0
- package/chunks/ripGrep-A2FGBZGY.js +39 -0
- package/chunks/{run-qwen-serve-WHWU7NZ6.js → run-qwen-serve-AESOSKFC.js} +371 -357
- package/chunks/{runtime-E7BSPWQP.js → runtime-YQHSEKG4.js} +71 -72
- package/chunks/scheduled-tasks-XG6KK6NY.js +128 -0
- package/chunks/{scheduler-TJPATFOM.js → scheduler-I4WKXWRZ.js} +60 -61
- package/chunks/{sdk-exporters-http-XXSKBD2C.js → sdk-exporters-http-TTU2CHBU.js} +2 -2
- package/chunks/{sdk-impl-VPNBLV7I.js → sdk-impl-UUMVYMAL.js} +11 -5
- package/chunks/{send-message-OXZK6USO.js → send-message-AJ4OCUBV.js} +25 -9
- package/chunks/serve-MQDTVC7X.js +119 -0
- package/chunks/{server-AXCN7QBJ.js → server-L5ETIKEW.js} +6083 -4965
- package/chunks/{session-HO4US3AG.js → session-LKKXRUJM.js} +116 -114
- package/chunks/session-pr-refresh-5OWA6MC2.js +365 -0
- package/chunks/{settings-B2PFJJN4.js → settings-S6KG7JST.js} +65 -66
- package/chunks/shell-JEQE5AHC.js +94 -0
- package/chunks/{skill-NL3VH562.js → skill-QEGMZXKI.js} +68 -24
- package/chunks/skill-settings-EVY7QF4H.js +119 -0
- package/chunks/spawnChannel-AQP72WPN.js +113 -0
- package/chunks/standalone-update-JUJA4BKV.js +119 -0
- package/chunks/{startInteractiveUI-G2XKSCQ7.js → startInteractiveUI-5ZMSJZ3J.js} +3081 -2477
- package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
- package/chunks/{syntheticOutput-5AJ444QT.js → syntheticOutput-ML43GEFN.js} +3 -3
- package/chunks/{task-create-TY7P6UHG.js → task-create-QN4LYRSE.js} +11 -11
- package/chunks/{task-list-BELMPA75.js → task-list-JPLGK45U.js} +5 -5
- package/chunks/{task-stop-U3S3KZG2.js → task-stop-CXEH5L2D.js} +2 -2
- package/chunks/{task-update-O4IGDPCK.js → task-update-IWEOJFV2.js} +11 -11
- package/chunks/{team-create-IYBUOORE.js → team-create-ZEGP7KVD.js} +46 -47
- package/chunks/{team-delete-YWFXX77L.js → team-delete-RZVVSGCY.js} +5 -5
- package/chunks/{team-plan-approval-YKU57LBM.js → team-plan-approval-SXWT2WZN.js} +46 -47
- package/chunks/terminal-image-renderer-42B6N55E.js +115 -0
- package/chunks/theme-manager-DDYUBC25.js +103 -0
- package/chunks/{todoWrite-435EO2CS.js → todoWrite-WDJNQEMW.js} +43 -25
- package/chunks/{tool-search-4Q3KASIQ.js → tool-search-GDDBA4X4.js} +22 -22
- package/chunks/total-session-admission-6MYP4GBA.js +115 -0
- package/chunks/trustedFolders-LPEIY3GE.js +123 -0
- package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
- package/chunks/{update-relaunch-4DC2KKFS.js → update-relaunch-BOIIZNT3.js} +6 -6
- package/chunks/updateCheck-KSVHYJYE.js +119 -0
- package/chunks/useAutoAcceptIndicator-43D2A4ZN.js +121 -0
- package/chunks/{validateNonInterActiveAuth-YAE4YPO3.js → validateNonInterActiveAuth-WSD4SOIM.js} +108 -106
- package/chunks/{version-QFP7OGWX.js → version-B4CM7RNG.js} +1 -1
- package/chunks/{web-fetch-6T23IK6Q.js → web-fetch-MOHILUZL.js} +16 -18
- package/chunks/{web-search-WBWTCZK2.js → web-search-G4HIMY2V.js} +9 -11
- package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-HNB4FDOE.js} +2 -2
- package/chunks/{workflow-FMAA3D4R.js → workflow-H3PCYU5F.js} +130 -95
- package/chunks/workspace-providers-status-AAX7VWMT.js +115 -0
- package/chunks/{workspace-registration-store-CMMX7EPX.js → workspace-registration-store-YTHZ6SL4.js} +1 -1
- package/chunks/workspace-registry-URHGBL4U.js +124 -0
- package/chunks/workspace-service-XJMSLRCU.js +127 -0
- package/chunks/workspace-skills-status-JGEDANNT.js +114 -0
- package/chunks/{workspace-trust-reconciler-PJDQUTJL.js → workspace-trust-reconciler-ZHI5TDYB.js} +74 -73
- package/chunks/write-file-5O4S63L6.js +89 -0
- package/chunks/{zh-TW-MV4FWFB6.js → zh-TW-RPTMRTHG.js} +2 -1
- package/chunks/{zh-X3WGU6SI.js → zh-UNY63FR3.js} +2 -1
- package/chunks/{zoom-image-WVYVFRXF.js → zoom-image-N2IBUVXE.js} +13 -13
- package/cli.js +130 -93
- package/locales/en.js +2 -0
- package/locales/zh-TW.js +2 -0
- package/locales/zh.js +2 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-d-8xa8uz.js → abnfDiagram-VCTEODGH-OJQpqC9m.js} +1 -1
- package/web-shell/assets/{arc-BhB7CrGK.js → arc-BxH0YR17.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BDCd_IcJ.js → architectureDiagram-5GKGNRK7-CxyWiGfF.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-C-AHu6mi.js → blockDiagram-NRAW4CY4-DukXbJQ7.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-CFjQt0vl.js → c4Diagram-UCG6FXSJ-DvS1T6pK.js} +1 -1
- package/web-shell/assets/channel-Dbbg7P-u.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-DRjwqaDq.js → chunk-2Q5K7J3B-qvqfJ7VZ.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-eHM9noJE.js → chunk-5VM5RSS4-BJ3kJYte.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-CcSWUYn1.js → chunk-F27PBJKO-BYPVESil.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-DNr-RF5S.js → chunk-G27WJ6UU-B4UYFElk.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-rVJHoNF8.js → chunk-JWPE2WC7-8zGKVNUU.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-B2aX0Gzy.js → chunk-LCL6LL3I-CbaHONpI.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-DVp07n32.js → chunk-POPQ4Y6H-f8kAjzlF.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-C6QB_KUr.js → chunk-SVP7TREG-Dm8ahq7K.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CLVxDNCy.js → chunk-XXDRQBXY-yrcLzv8z.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-cDYs8iT0.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-cDYs8iT0.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-B_aKX3A3.js → cose-bilkent-JH36ORCC-DN1C22IH.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-BBw2pPUa.js → cynefin-OW5HDTMX-B2oF7XD_.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-WWPiBTwk.js → cynefinDiagram-5FMLGOSQ-DGgIKpiM.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-CPtIdka-.js → dagre-3AP2YEHR-BHKawzoP.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-Dj5og1Xi.js → diagram-S7CK7UJ4-6UgKqreR.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-CC_x70YC.js → diagram-UQ7AKVKN-BXJbPJ6F.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-rXMfsO4n.js → diagram-VSXAHHWV-DVnYFPkS.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-DEmLYQbh.js → diagram-VX7I27RA-CjBoC0Rq.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-B0ys6Vxx.js → diagram-Z3DM3KII-KZdUceQT.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-Bq6y6lKH.js → ebnfDiagram-PWID7BFC-5UekGScM.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-l69JeBZ4.js → erDiagram-SSCWMZ5O-TRWexoj1.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-Cm-EzGY4.js → flowDiagram-A5DVABFB-Di5bhBVo.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BRS9ZOp7.js → ganttDiagram-EL5Y4UJY-DpJUJ8Dp.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DAMRKgLk.js → gitGraphDiagram-WWUBYQGX-b08xIx2C.js} +1 -1
- package/web-shell/assets/index-BvDpDHTN.css +36 -0
- package/web-shell/assets/index-Cg60lhnI.js +1913 -0
- package/web-shell/assets/{index-Bncx8E8M.js → index-n6dFH09O.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-DasffaZp.js → infoDiagram-RXCK75RN-Cz14FAt7.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-CmRUt3C-.js → ishikawaDiagram-5VMMS53U-7nxp2bIU.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-DzhE_c1Z.js → journeyDiagram-EYS64GPL-CjL47fk0.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-BH5b6nn3.js → kanban-definition-3QL26DDD-CWFl-mHs.js} +1 -1
- package/web-shell/assets/{layout-BxoLK-LY.js → layout-BUP1BcwB.js} +1 -1
- package/web-shell/assets/{linear-CqDPvVI7.js → linear-CqbwqSbW.js} +1 -1
- package/web-shell/assets/{mermaid.core-DBoN4plo.js → mermaid.core-C_50HLol.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-DJJtXPEM.js → mindmap-definition-FBJOCRG2-DbyD_AoU.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DmgPXP5l.js → pegDiagram-XKGWAZYB-VozWyqyY.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-1ezjzcI5.js → pieDiagram-E7YTZNPT-O7EKamBL.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-ChKARz3k.js → quadrantDiagram-AXDQQJYC-DOmPZxHg.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-k7mNB_QT.js → railroadDiagram-O6MQD6OU-ElyfC2zE.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-B0XFsii0.js → requirementDiagram-EFPCY7ZU-DbnqPbzR.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-repJ2Ukk.js → sankeyDiagram-P5KCCOFB-yPWliSHr.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D0gUSKGu.js → sequenceDiagram-WJ2MYXX4-BImQFomC.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CE463F74.js → sizeCapture-X5ZJPWSS-DEvqeEHo.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-003zYtJa.js → stateDiagram-HBIQ2CUA-BbLtiF9u.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DGtlzdpx.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-DBj8MFpu.js → swimlanes-XN3QIQJK-RFewDF6v.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-CITCVFdx.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-D2aCh4a9.js → timeline-definition-24CTP7MA-DF4L3-UR.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-BHMfWBpl.js → vennDiagram-4TSXK5OY-BtlSJXaA.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-RdHAj66j.js → wardleyDiagram-VM6X3IG4-C8ogG8Fh.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-BgJWOvq0.js → xychartDiagram-S5SC5T6Z-C5QVfsGQ.js} +1 -1
- package/web-shell/index.html +3 -3
- package/chunks/MaxSizedBox-BFVLZP2E.js +0 -112
- package/chunks/agent-headless-UCBCS4V4.js +0 -87
- package/chunks/bridge-FRNYLYY7.js +0 -119
- package/chunks/channel-settings-store-IV4KDL7N.js +0 -117
- package/chunks/chunk-I6VVOZDK.js +0 -202
- package/chunks/chunk-JS73NNWF.js +0 -30
- package/chunks/chunk-K2OJUPOE.js +0 -78
- package/chunks/chunk-P3QQPMQA.js +0 -19
- package/chunks/chunk-SDVF6A42.js +0 -945
- package/chunks/chunk-T26EAKDL.js +0 -13
- package/chunks/chunk-VGHZT6JR.js +0 -51
- package/chunks/config-utils-PMX4QZ5Y.js +0 -113
- package/chunks/contextCommand-NZRLVAFC.js +0 -108
- package/chunks/daemon-status-provider-FTTYZEKN.js +0 -118
- package/chunks/daemon-trust-policy-WMGFPA3Z.js +0 -114
- package/chunks/deferred-core-runtime-BUFEFYNA.js +0 -116
- package/chunks/earlyInputCapture-ROPLMXA7.js +0 -109
- package/chunks/environment-ZBJ23YVR.js +0 -131
- package/chunks/errors-U5KNAADB.js +0 -115
- package/chunks/exitPlanMode-VFJ5R5DD.js +0 -85
- package/chunks/handleAutoUpdate-W4BUYFT7.js +0 -111
- package/chunks/i18n-KX7FEKJJ.js +0 -126
- package/chunks/initializer-SNVVLS7Y.js +0 -115
- package/chunks/installationInfo-D4XGQNHJ.js +0 -109
- package/chunks/list-WYECMLXZ.js +0 -118
- package/chunks/loadedSettingsAdapter-5WZBXBCR.js +0 -112
- package/chunks/mcp-CBWAROY3.js +0 -112
- package/chunks/nonInteractiveCli-O232UUV7.js +0 -185
- package/chunks/pidfile-MSPQ255Y.js +0 -113
- package/chunks/process-registry-PMJOA5CO.js +0 -172
- package/chunks/prompt-terminal-ledger-YPGMNDXT.js +0 -107
- package/chunks/resumeHistoryUtils-35D4KAVT.js +0 -120
- package/chunks/ripGrep-46N4FLOS.js +0 -39
- package/chunks/serve-WQ54UIYG.js +0 -120
- package/chunks/shell-7XMSANI3.js +0 -95
- package/chunks/skill-settings-SKMN5YXC.js +0 -120
- package/chunks/spawnChannel-NE43EEO3.js +0 -113
- package/chunks/standalone-update-XOCWGXAH.js +0 -120
- package/chunks/terminal-image-renderer-NREKYTAD.js +0 -116
- package/chunks/theme-manager-IJS6OICX.js +0 -104
- package/chunks/total-session-admission-L5RPEFZ2.js +0 -114
- package/chunks/trustedFolders-OILZCHRD.js +0 -124
- package/chunks/updateCheck-AK4COHNK.js +0 -120
- package/chunks/useAutoAcceptIndicator-O2N2Q6KG.js +0 -122
- package/chunks/workspace-providers-status-OCFEWIPQ.js +0 -116
- package/chunks/workspace-registry-WJLZPRTG.js +0 -123
- package/chunks/workspace-service-5ZOBMMIB.js +0 -131
- package/chunks/workspace-skills-status-B6NJZD4B.js +0 -115
- package/chunks/write-file-B2RNX6SU.js +0 -90
- package/web-shell/assets/channel-CU-Zyv0r.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C0J2_LKs.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C0J2_LKs.js +0 -1
- package/web-shell/assets/index-C-XlQn24.css +0 -5
- package/web-shell/assets/index-gdvMN4J1.js +0 -1860
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-2uACDdJN.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C4JJkavU.js +0 -8
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
OpenAIContentConverter,
|
|
8
8
|
TaggedThinkingParser,
|
|
9
9
|
openaiRequestCaptureContext
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DJECZIJX.js";
|
|
11
11
|
import {
|
|
12
12
|
safeJsonParse
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABS25QER.js";
|
|
14
14
|
import {
|
|
15
15
|
runtimeDiagnostics
|
|
16
16
|
} from "./chunk-VNOVK4I7.js";
|
|
@@ -18,18 +18,22 @@ import {
|
|
|
18
18
|
reportOpenAiChunk,
|
|
19
19
|
reportOpenAiRequest,
|
|
20
20
|
reportOpenAiResponse
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-KYWTPLBJ.js";
|
|
22
22
|
import {
|
|
23
23
|
applyOfficialOpenAIPromptCaching,
|
|
24
24
|
isOfficialOpenAIEndpoint
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-PQEISIKS.js";
|
|
26
26
|
import {
|
|
27
27
|
DashScopeOpenAICompatibleProvider,
|
|
28
28
|
DefaultOpenAICompatibleProvider
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-EB6QRGHM.js";
|
|
30
30
|
import {
|
|
31
31
|
getCurrentAgentId
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-CMHFCLBU.js";
|
|
33
|
+
import {
|
|
34
|
+
InvalidStreamError,
|
|
35
|
+
getToolCallPreparations
|
|
36
|
+
} from "./chunk-CFKIH3D3.js";
|
|
33
37
|
import {
|
|
34
38
|
DEFAULT_STREAM_IDLE_TIMEOUT_MS,
|
|
35
39
|
DEFAULT_STREAM_MAX_LIFETIME_MS,
|
|
@@ -42,39 +46,33 @@ import {
|
|
|
42
46
|
createChildAbortController
|
|
43
47
|
} from "./chunk-DJ2GSRLV.js";
|
|
44
48
|
import {
|
|
49
|
+
getRateLimitErrorDetails,
|
|
45
50
|
getTransportCode
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import {
|
|
48
|
-
InvalidStreamError,
|
|
49
|
-
getToolCallPreparations
|
|
50
|
-
} from "./chunk-CFKIH3D3.js";
|
|
51
|
-
import {
|
|
52
|
-
getRateLimitErrorDetails
|
|
53
|
-
} from "./chunk-EB4VDXNI.js";
|
|
51
|
+
} from "./chunk-DYXFD5RO.js";
|
|
54
52
|
import {
|
|
55
53
|
ProtocolTagSanitizedEvent,
|
|
56
54
|
logProtocolTagSanitized
|
|
57
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-QYMAKPY5.js";
|
|
58
56
|
import {
|
|
59
57
|
isQwenFamilyWireModel,
|
|
60
58
|
isTieredEffortWireModel
|
|
61
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-XBVNNDPK.js";
|
|
62
60
|
import {
|
|
63
61
|
reconcileMaxTokens
|
|
64
62
|
} from "./chunk-FPGTNKCP.js";
|
|
65
63
|
import {
|
|
66
64
|
redactProxyError
|
|
67
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-PPKZ7JOE.js";
|
|
68
66
|
import {
|
|
69
67
|
isInForkExecution
|
|
70
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-CAJTKR6W.js";
|
|
71
69
|
import {
|
|
72
70
|
createDebugLogger,
|
|
73
71
|
getErrorMessage,
|
|
74
72
|
getErrorStatus,
|
|
75
73
|
getErrorType,
|
|
76
74
|
isAbortError
|
|
77
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-UHQFIS7N.js";
|
|
78
76
|
import {
|
|
79
77
|
GenerateContentResponse
|
|
80
78
|
} from "./chunk-64REQJJ2.js";
|
|
@@ -190,16 +188,17 @@ var DeepSeekOpenAICompatibleProvider = class extends DefaultOpenAICompatibleProv
|
|
|
190
188
|
return isDeepSeekHostname(this.contentGeneratorConfig) ? REASONING_EFFORT_TIERS : super.supportedReasoningEffortsFor(model);
|
|
191
189
|
}
|
|
192
190
|
/**
|
|
193
|
-
* DeepSeek
|
|
194
|
-
* array of content parts. Flatten
|
|
195
|
-
* strings; non-text parts (image_url, audio, …) are replaced with
|
|
196
|
-
* `[Unsupported content type: <type>]` placeholder so the request still
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
191
|
+
* Text-only DeepSeek APIs require message content to be a plain string, not
|
|
192
|
+
* an array of content parts. Flatten text-only request arrays into joined
|
|
193
|
+
* strings; non-text parts (image_url, audio, …) are replaced with an
|
|
194
|
+
* `[Unsupported content type: <type>]` placeholder so the request still goes
|
|
195
|
+
* through with a textual breadcrumb rather than silently dropping the part
|
|
196
|
+
* or raising mid-conversation. Models that explicitly declare image input
|
|
197
|
+
* retain multipart content for compatible gateways. Also translate the
|
|
198
|
+
* standard `reasoning.effort` config into DeepSeek's flat `reasoning_effort`
|
|
199
|
+
* body parameter — but only on actual DeepSeek hostnames, since the model-name
|
|
200
|
+
* fallback above can match self-hosted/strict OpenAI-compat backends that
|
|
201
|
+
* don't accept the DeepSeek extension.
|
|
203
202
|
*/
|
|
204
203
|
buildRequest(request, userPromptId) {
|
|
205
204
|
const baseRequest = super.buildRequest(request, userPromptId);
|
|
@@ -207,10 +206,11 @@ var DeepSeekOpenAICompatibleProvider = class extends DefaultOpenAICompatibleProv
|
|
|
207
206
|
if (!reshaped.messages?.length) {
|
|
208
207
|
return reshaped;
|
|
209
208
|
}
|
|
210
|
-
const messages = reshaped.messages.map(
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
209
|
+
const messages = reshaped.messages.map(
|
|
210
|
+
(message) => ensureReasoningContentOnAssistantMessage(
|
|
211
|
+
this.contentGeneratorConfig.modalities?.image ? message : flattenContentParts(message)
|
|
212
|
+
)
|
|
213
|
+
);
|
|
214
214
|
return {
|
|
215
215
|
...reshaped,
|
|
216
216
|
messages
|
|
@@ -1061,7 +1061,7 @@ var StreamContentError = class extends Error {
|
|
|
1061
1061
|
var StreamInactivityTimeoutError = class extends Error {
|
|
1062
1062
|
constructor(idleMs, chunksReceived, streamLifetimeMs) {
|
|
1063
1063
|
super(
|
|
1064
|
-
`No stream activity for ${idleMs}ms after ${chunksReceived} chunks (stream lifetime: ${streamLifetimeMs}ms).
|
|
1064
|
+
`No stream activity for ${idleMs}ms after ${chunksReceived} chunks (stream lifetime: ${streamLifetimeMs}ms). For provider-backed models, increase modelProviders[providerId][].generationConfig.streamIdleTimeoutMs; provider configuration takes precedence, so model.generationConfig is ignored for those models. For runtime models, increase model.generationConfig.streamIdleTimeoutMs. Built-in Qwen OAuth models cannot be overridden via settings. Use ${QWEN_STREAM_IDLE_TIMEOUT_MS_ENV} for them or whenever no explicit value is active. Set the active value to 0 to disable it.`
|
|
1065
1065
|
);
|
|
1066
1066
|
this.idleMs = idleMs;
|
|
1067
1067
|
this.chunksReceived = chunksReceived;
|
|
@@ -1299,11 +1299,11 @@ var ContentGenerationPipeline = class {
|
|
|
1299
1299
|
}
|
|
1300
1300
|
);
|
|
1301
1301
|
reportOpenAiResponse(telemetryAttempt, openaiResponse);
|
|
1302
|
-
const
|
|
1302
|
+
const llmResponse = OpenAIContentConverter.convertOpenAIResponseToLlm(
|
|
1303
1303
|
openaiResponse,
|
|
1304
1304
|
context
|
|
1305
1305
|
);
|
|
1306
|
-
return
|
|
1306
|
+
return llmResponse;
|
|
1307
1307
|
} finally {
|
|
1308
1308
|
perRequestAc?.abort();
|
|
1309
1309
|
}
|
|
@@ -1424,7 +1424,7 @@ var ContentGenerationPipeline = class {
|
|
|
1424
1424
|
const errorContent = chunk.choices?.[0]?.delta?.content?.trim() || "Unknown stream error";
|
|
1425
1425
|
throw new StreamContentError(errorContent);
|
|
1426
1426
|
}
|
|
1427
|
-
const response = OpenAIContentConverter.
|
|
1427
|
+
const response = OpenAIContentConverter.convertOpenAIChunkToLlm(
|
|
1428
1428
|
chunk,
|
|
1429
1429
|
context
|
|
1430
1430
|
);
|
|
@@ -1583,7 +1583,7 @@ var ContentGenerationPipeline = class {
|
|
|
1583
1583
|
return true;
|
|
1584
1584
|
}
|
|
1585
1585
|
async buildRequest(request, userPromptId, context, isStreaming) {
|
|
1586
|
-
const messages = OpenAIContentConverter.
|
|
1586
|
+
const messages = OpenAIContentConverter.convertLlmRequestToOpenAI(
|
|
1587
1587
|
request,
|
|
1588
1588
|
context
|
|
1589
1589
|
);
|
|
@@ -1600,7 +1600,7 @@ var ContentGenerationPipeline = class {
|
|
|
1600
1600
|
baseRequest.stream = false;
|
|
1601
1601
|
}
|
|
1602
1602
|
if (request.config?.tools && request.config.tools.length > 0) {
|
|
1603
|
-
baseRequest.tools = await OpenAIContentConverter.
|
|
1603
|
+
baseRequest.tools = await OpenAIContentConverter.convertLlmToolsToOpenAI(
|
|
1604
1604
|
request.config.tools,
|
|
1605
1605
|
this.contentGeneratorConfig.schemaCompliance ?? "auto"
|
|
1606
1606
|
);
|
|
@@ -3,23 +3,23 @@
|
|
|
3
3
|
import {
|
|
4
4
|
resolveModelConfig,
|
|
5
5
|
resolveProviderProtocol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ECE3UYVO.js";
|
|
7
7
|
import {
|
|
8
8
|
external_exports
|
|
9
9
|
} from "./chunk-CQ35AJ4Z.js";
|
|
10
10
|
import {
|
|
11
11
|
stripRuntimeSnapshotPrefix
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-JB4JIVTJ.js";
|
|
13
13
|
import {
|
|
14
14
|
REASONING_EFFORT_TIERS,
|
|
15
15
|
normalizeReasoningEffort
|
|
16
16
|
} from "./chunk-2LD5U7Q3.js";
|
|
17
17
|
import {
|
|
18
18
|
MODEL_GENERATION_CONFIG_FIELDS
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ARF6IJHM.js";
|
|
20
20
|
import {
|
|
21
21
|
AuthType
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-PPKZ7JOE.js";
|
|
23
23
|
import {
|
|
24
24
|
init_esbuild_shims
|
|
25
25
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
STATUS_SCHEMA_VERSION
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-KID24ZFN.js";
|
|
6
6
|
import {
|
|
7
7
|
formatMemoryUsage
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ECE3UYVO.js";
|
|
9
9
|
import {
|
|
10
10
|
detectRuntime,
|
|
11
11
|
redactProxyCredentials
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PPKZ7JOE.js";
|
|
13
13
|
import {
|
|
14
14
|
init_esbuild_shims
|
|
15
15
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
isTerminalWorkflowStatus
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ECE3UYVO.js";
|
|
6
6
|
import {
|
|
7
7
|
Storage,
|
|
8
8
|
createDebugLogger
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UHQFIS7N.js";
|
|
10
10
|
import {
|
|
11
11
|
init_esbuild_shims
|
|
12
12
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -14,10 +14,177 @@ import {
|
|
|
14
14
|
__name
|
|
15
15
|
} from "./chunk-J2S4EL5Y.js";
|
|
16
16
|
|
|
17
|
-
// packages/core/src/agents/workflow-
|
|
17
|
+
// packages/core/src/agents/runtime/workflow-saved.ts
|
|
18
18
|
init_esbuild_shims();
|
|
19
19
|
import { promises as fs } from "node:fs";
|
|
20
|
-
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
var debugLogger = createDebugLogger("WORKFLOW_SAVED");
|
|
22
|
+
var WORKFLOW_NAME_PATTERN = /^[a-z][a-z0-9-]{0,40}$/;
|
|
23
|
+
function validateWorkflowName(name) {
|
|
24
|
+
if (!name) return "Workflow name is required.";
|
|
25
|
+
if (!WORKFLOW_NAME_PATTERN.test(name)) {
|
|
26
|
+
return `Invalid workflow name "${name}". Use lower-case letters, digits, and hyphens only (must start with a letter, max 41 chars).`;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
__name(validateWorkflowName, "validateWorkflowName");
|
|
31
|
+
function getSavedWorkflowDirs(config) {
|
|
32
|
+
return [
|
|
33
|
+
{ dir: config.storage.getProjectWorkflowsDir(), source: "project" },
|
|
34
|
+
{ dir: Storage.getUserWorkflowsDir(), source: "user" }
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
__name(getSavedWorkflowDirs, "getSavedWorkflowDirs");
|
|
38
|
+
function getWorkflowScriptRoots(config) {
|
|
39
|
+
return [
|
|
40
|
+
...getSavedWorkflowDirs(config).map(({ dir }) => dir),
|
|
41
|
+
config.storage.getGeneratedWorkflowsDir()
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
__name(getWorkflowScriptRoots, "getWorkflowScriptRoots");
|
|
45
|
+
async function isSymlinkedRoot(dir) {
|
|
46
|
+
return fs.lstat(dir).then((st) => st.isSymbolicLink()).catch(() => false);
|
|
47
|
+
}
|
|
48
|
+
__name(isSymlinkedRoot, "isSymlinkedRoot");
|
|
49
|
+
async function listJsFiles(dir) {
|
|
50
|
+
if (await isSymlinkedRoot(dir)) {
|
|
51
|
+
debugLogger.warn(`refusing symlinked saved-workflow dir: ${dir}`);
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const names = await fs.readdir(dir);
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const n of names) {
|
|
58
|
+
if (!n.endsWith(".js")) continue;
|
|
59
|
+
const st = await fs.lstat(path.join(dir, n)).catch(() => null);
|
|
60
|
+
if (!st || st.isSymbolicLink()) continue;
|
|
61
|
+
out.push(n);
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
} catch (e) {
|
|
65
|
+
const code = e?.code;
|
|
66
|
+
if (code !== "ENOENT") {
|
|
67
|
+
debugLogger.warn(`listJsFiles failed for ${dir}: ${e}`);
|
|
68
|
+
}
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
__name(listJsFiles, "listJsFiles");
|
|
73
|
+
async function readWorkflowFileSecurely(filePath, config) {
|
|
74
|
+
const real = await fs.realpath(filePath);
|
|
75
|
+
const roots = await Promise.all(
|
|
76
|
+
getWorkflowScriptRoots(config).map(async (dir) => {
|
|
77
|
+
if (await isSymlinkedRoot(dir)) return { dir, real: null };
|
|
78
|
+
try {
|
|
79
|
+
return { dir, real: await fs.realpath(dir) };
|
|
80
|
+
} catch {
|
|
81
|
+
return { dir, real: path.resolve(dir) };
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
);
|
|
85
|
+
const dirs = roots.flatMap((r) => r.real === null ? [] : [r.real]);
|
|
86
|
+
const inside = dirs.some((d) => real === d || real.startsWith(d + path.sep));
|
|
87
|
+
if (!inside) {
|
|
88
|
+
const refused = roots.flatMap((r) => r.real === null ? [r.dir] : []);
|
|
89
|
+
const refusedNote = refused.length > 0 ? `; refused symlinked ${refused.length === 1 ? "root" : "roots"}: ${refused.join(", ")}` : "";
|
|
90
|
+
throw new Error(
|
|
91
|
+
`refusing to load a workflow file outside the workflow script roots (checked: ${dirs.join(", ")}${refusedNote}): '${filePath}'.`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
return fs.readFile(real, "utf8");
|
|
95
|
+
}
|
|
96
|
+
__name(readWorkflowFileSecurely, "readWorkflowFileSecurely");
|
|
97
|
+
async function listSavedWorkflows(config) {
|
|
98
|
+
const byName = /* @__PURE__ */ new Map();
|
|
99
|
+
for (const { dir, source } of [...getSavedWorkflowDirs(config)].reverse()) {
|
|
100
|
+
for (const file of await listJsFiles(dir)) {
|
|
101
|
+
const name = file.slice(0, -".js".length);
|
|
102
|
+
if (!WORKFLOW_NAME_PATTERN.test(name)) continue;
|
|
103
|
+
byName.set(name, { name, scriptPath: path.join(dir, file), source });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return Array.from(byName.values()).sort(
|
|
107
|
+
(a, b) => a.name.localeCompare(b.name)
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
__name(listSavedWorkflows, "listSavedWorkflows");
|
|
111
|
+
async function resolveSavedWorkflowScript(nameOrRef, config) {
|
|
112
|
+
if (typeof nameOrRef === "object" && nameOrRef !== null) {
|
|
113
|
+
const scriptPath = nameOrRef.scriptPath;
|
|
114
|
+
if (typeof scriptPath !== "string" || scriptPath.length === 0) {
|
|
115
|
+
throw new Error(
|
|
116
|
+
"workflow() expects a workflow name (string) or {scriptPath: string}."
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
let script;
|
|
120
|
+
try {
|
|
121
|
+
script = await readWorkflowFileSecurely(scriptPath, config);
|
|
122
|
+
} catch (e) {
|
|
123
|
+
throw new Error(
|
|
124
|
+
`workflow({scriptPath: '${scriptPath}'}): ${e instanceof Error ? e.message : String(e)}`
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
const name2 = path.basename(scriptPath).replace(/\.js$/, "");
|
|
128
|
+
return { name: name2, scriptPath, script };
|
|
129
|
+
}
|
|
130
|
+
if (typeof nameOrRef !== "string") {
|
|
131
|
+
throw new Error(
|
|
132
|
+
"workflow() expects a workflow name (string) or {scriptPath: string}."
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
const name = nameOrRef;
|
|
136
|
+
const nameError = validateWorkflowName(name);
|
|
137
|
+
if (nameError) {
|
|
138
|
+
throw new Error(`workflow('${name}'): ${nameError}`);
|
|
139
|
+
}
|
|
140
|
+
for (const { dir } of getSavedWorkflowDirs(config)) {
|
|
141
|
+
const scriptPath = path.join(dir, `${name}.js`);
|
|
142
|
+
try {
|
|
143
|
+
const script = await readWorkflowFileSecurely(scriptPath, config);
|
|
144
|
+
return { name, scriptPath, script };
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const available = (await listSavedWorkflows(config)).map((e) => e.name);
|
|
149
|
+
throw new Error(
|
|
150
|
+
`workflow('${name}'): no workflow with that name. Available: ${available.length > 0 ? available.join(", ") : "(none)"}.`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
__name(resolveSavedWorkflowScript, "resolveSavedWorkflowScript");
|
|
154
|
+
async function saveWorkflowScript(config, opts) {
|
|
155
|
+
const { name, scope, script, overwrite = false } = opts;
|
|
156
|
+
const nameError = validateWorkflowName(name);
|
|
157
|
+
if (nameError) return { status: "invalid-name", error: nameError };
|
|
158
|
+
if (!script || script.trim().length === 0) {
|
|
159
|
+
return {
|
|
160
|
+
status: "empty-script",
|
|
161
|
+
error: "This run has no script source to save."
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const dir = scope === "project" ? config.storage.getProjectWorkflowsDir() : Storage.getUserWorkflowsDir();
|
|
165
|
+
if (await isSymlinkedRoot(dir)) {
|
|
166
|
+
throw new Error(
|
|
167
|
+
`refusing to save into a symlinked saved-workflow directory: '${dir}'.`
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
const filePath = path.join(dir, `${name}.js`);
|
|
171
|
+
if (!overwrite) {
|
|
172
|
+
try {
|
|
173
|
+
await fs.access(filePath);
|
|
174
|
+
return { status: "exists", name, scope, path: filePath };
|
|
175
|
+
} catch {
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
await fs.mkdir(dir, { recursive: true });
|
|
179
|
+
await fs.writeFile(filePath, script, "utf8");
|
|
180
|
+
return { status: "saved", name, scope, path: filePath };
|
|
181
|
+
}
|
|
182
|
+
__name(saveWorkflowScript, "saveWorkflowScript");
|
|
183
|
+
|
|
184
|
+
// packages/core/src/agents/workflow-snapshot.ts
|
|
185
|
+
init_esbuild_shims();
|
|
186
|
+
import { promises as fs2 } from "node:fs";
|
|
187
|
+
var debugLogger2 = createDebugLogger("WORKFLOW_SNAPSHOT");
|
|
21
188
|
var MAX_RETAINED_SNAPSHOTS = 30;
|
|
22
189
|
function toSnapshot(task) {
|
|
23
190
|
if (!isTerminalWorkflowStatus(task.status)) {
|
|
@@ -68,15 +235,15 @@ async function writeWorkflowSnapshot(config, task) {
|
|
|
68
235
|
try {
|
|
69
236
|
const snapshot = toSnapshot(task);
|
|
70
237
|
const dir = storage.getWorkflowRunsDir();
|
|
71
|
-
await
|
|
72
|
-
await
|
|
238
|
+
await fs2.mkdir(dir, { recursive: true });
|
|
239
|
+
await fs2.writeFile(
|
|
73
240
|
storage.getWorkflowRunSnapshotPath(task.runId),
|
|
74
241
|
JSON.stringify(snapshot, null, 2),
|
|
75
242
|
"utf8"
|
|
76
243
|
);
|
|
77
244
|
await pruneSnapshots(dir);
|
|
78
245
|
} catch (e) {
|
|
79
|
-
|
|
246
|
+
debugLogger2.warn(`writeWorkflowSnapshot failed for ${task.runId}: ${e}`);
|
|
80
247
|
}
|
|
81
248
|
}
|
|
82
249
|
__name(writeWorkflowSnapshot, "writeWorkflowSnapshot");
|
|
@@ -86,22 +253,22 @@ async function listWorkflowSnapshots(config) {
|
|
|
86
253
|
const dir = storage.getWorkflowRunsDir();
|
|
87
254
|
let files;
|
|
88
255
|
try {
|
|
89
|
-
files = (await
|
|
256
|
+
files = (await fs2.readdir(dir)).filter((f) => f.endsWith(".json"));
|
|
90
257
|
} catch {
|
|
91
258
|
return [];
|
|
92
259
|
}
|
|
93
260
|
const snapshots = [];
|
|
94
261
|
for (const file of files) {
|
|
95
262
|
try {
|
|
96
|
-
const raw = await
|
|
263
|
+
const raw = await fs2.readFile(`${dir}/${file}`, "utf8");
|
|
97
264
|
const parsed = JSON.parse(raw);
|
|
98
265
|
if (!isWorkflowSnapshot(parsed)) {
|
|
99
|
-
|
|
266
|
+
debugLogger2.warn(`skipping invalid workflow snapshot ${file}`);
|
|
100
267
|
continue;
|
|
101
268
|
}
|
|
102
269
|
snapshots.push(parsed);
|
|
103
270
|
} catch (e) {
|
|
104
|
-
|
|
271
|
+
debugLogger2.warn(`skipping unparseable snapshot ${file}: ${e}`);
|
|
105
272
|
}
|
|
106
273
|
}
|
|
107
274
|
snapshots.sort((a, b) => (b.startTime ?? 0) - (a.startTime ?? 0));
|
|
@@ -199,7 +366,7 @@ __name(isWorkflowSnapshot, "isWorkflowSnapshot");
|
|
|
199
366
|
async function pruneSnapshots(dir) {
|
|
200
367
|
let files;
|
|
201
368
|
try {
|
|
202
|
-
files = (await
|
|
369
|
+
files = (await fs2.readdir(dir)).filter((f) => f.endsWith(".json"));
|
|
203
370
|
} catch {
|
|
204
371
|
return;
|
|
205
372
|
}
|
|
@@ -207,7 +374,7 @@ async function pruneSnapshots(dir) {
|
|
|
207
374
|
const stats = await Promise.all(
|
|
208
375
|
files.map(async (f) => {
|
|
209
376
|
try {
|
|
210
|
-
const s = await
|
|
377
|
+
const s = await fs2.stat(`${dir}/${f}`);
|
|
211
378
|
return { f, mtime: s.mtimeMs };
|
|
212
379
|
} catch {
|
|
213
380
|
return { f, mtime: 0 };
|
|
@@ -221,12 +388,12 @@ async function pruneSnapshots(dir) {
|
|
|
221
388
|
const runId = s.f.replace(/\.json$/, "");
|
|
222
389
|
const isRunDir = /^wf_[0-9a-f]+$/.test(runId);
|
|
223
390
|
return Promise.all([
|
|
224
|
-
|
|
225
|
-
(e) =>
|
|
391
|
+
fs2.unlink(`${dir}/${s.f}`).catch(
|
|
392
|
+
(e) => debugLogger2.warn(`prune unlink failed for ${s.f}: ${e}`)
|
|
226
393
|
),
|
|
227
394
|
...isRunDir ? [
|
|
228
|
-
|
|
229
|
-
(e) =>
|
|
395
|
+
fs2.rm(`${dir}/${runId}`, { recursive: true, force: true }).catch(
|
|
396
|
+
(e) => debugLogger2.warn(
|
|
230
397
|
`prune journal dir failed for ${runId}: ${e}`
|
|
231
398
|
)
|
|
232
399
|
)
|
|
@@ -237,167 +404,11 @@ async function pruneSnapshots(dir) {
|
|
|
237
404
|
}
|
|
238
405
|
__name(pruneSnapshots, "pruneSnapshots");
|
|
239
406
|
|
|
240
|
-
// packages/core/src/agents/runtime/workflow-saved.ts
|
|
241
|
-
init_esbuild_shims();
|
|
242
|
-
import { promises as fs2 } from "node:fs";
|
|
243
|
-
import * as path from "node:path";
|
|
244
|
-
var debugLogger2 = createDebugLogger("WORKFLOW_SAVED");
|
|
245
|
-
var WORKFLOW_NAME_PATTERN = /^[a-z][a-z0-9-]{0,40}$/;
|
|
246
|
-
function validateWorkflowName(name) {
|
|
247
|
-
if (!name) return "Workflow name is required.";
|
|
248
|
-
if (!WORKFLOW_NAME_PATTERN.test(name)) {
|
|
249
|
-
return `Invalid workflow name "${name}". Use lower-case letters, digits, and hyphens only (must start with a letter, max 41 chars).`;
|
|
250
|
-
}
|
|
251
|
-
return null;
|
|
252
|
-
}
|
|
253
|
-
__name(validateWorkflowName, "validateWorkflowName");
|
|
254
|
-
function getSavedWorkflowDirs(config) {
|
|
255
|
-
return [
|
|
256
|
-
{ dir: config.storage.getProjectWorkflowsDir(), source: "project" },
|
|
257
|
-
{ dir: Storage.getUserWorkflowsDir(), source: "user" }
|
|
258
|
-
];
|
|
259
|
-
}
|
|
260
|
-
__name(getSavedWorkflowDirs, "getSavedWorkflowDirs");
|
|
261
|
-
async function isSymlinkedRoot(dir) {
|
|
262
|
-
return fs2.lstat(dir).then((st) => st.isSymbolicLink()).catch(() => false);
|
|
263
|
-
}
|
|
264
|
-
__name(isSymlinkedRoot, "isSymlinkedRoot");
|
|
265
|
-
async function listJsFiles(dir) {
|
|
266
|
-
if (await isSymlinkedRoot(dir)) {
|
|
267
|
-
debugLogger2.warn(`refusing symlinked saved-workflow dir: ${dir}`);
|
|
268
|
-
return [];
|
|
269
|
-
}
|
|
270
|
-
try {
|
|
271
|
-
const names = await fs2.readdir(dir);
|
|
272
|
-
const out = [];
|
|
273
|
-
for (const n of names) {
|
|
274
|
-
if (!n.endsWith(".js")) continue;
|
|
275
|
-
const st = await fs2.lstat(path.join(dir, n)).catch(() => null);
|
|
276
|
-
if (!st || st.isSymbolicLink()) continue;
|
|
277
|
-
out.push(n);
|
|
278
|
-
}
|
|
279
|
-
return out;
|
|
280
|
-
} catch (e) {
|
|
281
|
-
const code = e?.code;
|
|
282
|
-
if (code !== "ENOENT") {
|
|
283
|
-
debugLogger2.warn(`listJsFiles failed for ${dir}: ${e}`);
|
|
284
|
-
}
|
|
285
|
-
return [];
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
__name(listJsFiles, "listJsFiles");
|
|
289
|
-
async function readWorkflowFileSecurely(filePath, config) {
|
|
290
|
-
const real = await fs2.realpath(filePath);
|
|
291
|
-
const dirs = (await Promise.all(
|
|
292
|
-
getSavedWorkflowDirs(config).map(async ({ dir }) => {
|
|
293
|
-
if (await isSymlinkedRoot(dir)) return null;
|
|
294
|
-
try {
|
|
295
|
-
return await fs2.realpath(dir);
|
|
296
|
-
} catch {
|
|
297
|
-
return path.resolve(dir);
|
|
298
|
-
}
|
|
299
|
-
})
|
|
300
|
-
)).filter((d) => d !== null);
|
|
301
|
-
const inside = dirs.some((d) => real === d || real.startsWith(d + path.sep));
|
|
302
|
-
if (!inside) {
|
|
303
|
-
throw new Error(
|
|
304
|
-
`refusing to load a workflow file outside the saved-workflow directories: '${filePath}'.`
|
|
305
|
-
);
|
|
306
|
-
}
|
|
307
|
-
return fs2.readFile(real, "utf8");
|
|
308
|
-
}
|
|
309
|
-
__name(readWorkflowFileSecurely, "readWorkflowFileSecurely");
|
|
310
|
-
async function listSavedWorkflows(config) {
|
|
311
|
-
const byName = /* @__PURE__ */ new Map();
|
|
312
|
-
for (const { dir, source } of [...getSavedWorkflowDirs(config)].reverse()) {
|
|
313
|
-
for (const file of await listJsFiles(dir)) {
|
|
314
|
-
const name = file.slice(0, -".js".length);
|
|
315
|
-
if (!WORKFLOW_NAME_PATTERN.test(name)) continue;
|
|
316
|
-
byName.set(name, { name, scriptPath: path.join(dir, file), source });
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return Array.from(byName.values()).sort(
|
|
320
|
-
(a, b) => a.name.localeCompare(b.name)
|
|
321
|
-
);
|
|
322
|
-
}
|
|
323
|
-
__name(listSavedWorkflows, "listSavedWorkflows");
|
|
324
|
-
async function resolveSavedWorkflowScript(nameOrRef, config) {
|
|
325
|
-
if (typeof nameOrRef === "object" && nameOrRef !== null) {
|
|
326
|
-
const scriptPath = nameOrRef.scriptPath;
|
|
327
|
-
if (typeof scriptPath !== "string" || scriptPath.length === 0) {
|
|
328
|
-
throw new Error(
|
|
329
|
-
"workflow() expects a workflow name (string) or {scriptPath: string}."
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
let script;
|
|
333
|
-
try {
|
|
334
|
-
script = await readWorkflowFileSecurely(scriptPath, config);
|
|
335
|
-
} catch (e) {
|
|
336
|
-
throw new Error(
|
|
337
|
-
`workflow({scriptPath: '${scriptPath}'}): ${e instanceof Error ? e.message : String(e)}`
|
|
338
|
-
);
|
|
339
|
-
}
|
|
340
|
-
const name2 = path.basename(scriptPath).replace(/\.js$/, "");
|
|
341
|
-
return { name: name2, scriptPath, script };
|
|
342
|
-
}
|
|
343
|
-
if (typeof nameOrRef !== "string") {
|
|
344
|
-
throw new Error(
|
|
345
|
-
"workflow() expects a workflow name (string) or {scriptPath: string}."
|
|
346
|
-
);
|
|
347
|
-
}
|
|
348
|
-
const name = nameOrRef;
|
|
349
|
-
const nameError = validateWorkflowName(name);
|
|
350
|
-
if (nameError) {
|
|
351
|
-
throw new Error(`workflow('${name}'): ${nameError}`);
|
|
352
|
-
}
|
|
353
|
-
for (const { dir } of getSavedWorkflowDirs(config)) {
|
|
354
|
-
const scriptPath = path.join(dir, `${name}.js`);
|
|
355
|
-
try {
|
|
356
|
-
const script = await readWorkflowFileSecurely(scriptPath, config);
|
|
357
|
-
return { name, scriptPath, script };
|
|
358
|
-
} catch {
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
const available = (await listSavedWorkflows(config)).map((e) => e.name);
|
|
362
|
-
throw new Error(
|
|
363
|
-
`workflow('${name}'): no workflow with that name. Available: ${available.length > 0 ? available.join(", ") : "(none)"}.`
|
|
364
|
-
);
|
|
365
|
-
}
|
|
366
|
-
__name(resolveSavedWorkflowScript, "resolveSavedWorkflowScript");
|
|
367
|
-
async function saveWorkflowScript(config, opts) {
|
|
368
|
-
const { name, scope, script, overwrite = false } = opts;
|
|
369
|
-
const nameError = validateWorkflowName(name);
|
|
370
|
-
if (nameError) return { status: "invalid-name", error: nameError };
|
|
371
|
-
if (!script || script.trim().length === 0) {
|
|
372
|
-
return {
|
|
373
|
-
status: "empty-script",
|
|
374
|
-
error: "This run has no script source to save."
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
const dir = scope === "project" ? config.storage.getProjectWorkflowsDir() : Storage.getUserWorkflowsDir();
|
|
378
|
-
if (await isSymlinkedRoot(dir)) {
|
|
379
|
-
throw new Error(
|
|
380
|
-
`refusing to save into a symlinked saved-workflow directory: '${dir}'.`
|
|
381
|
-
);
|
|
382
|
-
}
|
|
383
|
-
const filePath = path.join(dir, `${name}.js`);
|
|
384
|
-
if (!overwrite) {
|
|
385
|
-
try {
|
|
386
|
-
await fs2.access(filePath);
|
|
387
|
-
return { status: "exists", name, scope, path: filePath };
|
|
388
|
-
} catch {
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
await fs2.mkdir(dir, { recursive: true });
|
|
392
|
-
await fs2.writeFile(filePath, script, "utf8");
|
|
393
|
-
return { status: "saved", name, scope, path: filePath };
|
|
394
|
-
}
|
|
395
|
-
__name(saveWorkflowScript, "saveWorkflowScript");
|
|
396
|
-
|
|
397
407
|
export {
|
|
398
408
|
writeWorkflowSnapshot,
|
|
399
409
|
listWorkflowSnapshots,
|
|
400
410
|
validateWorkflowName,
|
|
411
|
+
isSymlinkedRoot,
|
|
401
412
|
listSavedWorkflows,
|
|
402
413
|
resolveSavedWorkflowScript,
|
|
403
414
|
saveWorkflowScript
|