@qwen-code/qwen-code 0.21.1-simplify-system-prompt.0 → 0.21.2
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/qc-helper/docs/configuration/model-providers.md +2 -0
- package/bundled/qc-helper/docs/configuration/settings.md +39 -28
- package/bundled/qc-helper/docs/features/channels/_meta.ts +2 -0
- package/bundled/qc-helper/docs/features/channels/github.md +139 -0
- package/bundled/qc-helper/docs/features/channels/gitlab.md +171 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +61 -6
- package/bundled/qc-helper/docs/features/code-review.md +21 -1
- package/bundled/qc-helper/docs/features/hooks.md +72 -15
- package/bundled/qc-helper/docs/features/mcp.md +9 -1
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +3 -1
- package/bundled/qc-helper/docs/features/sub-agents.md +42 -8
- package/bundled/qc-helper/docs/qwen-serve.md +11 -7
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +2 -2
- package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
- package/bundled/review/DESIGN.md +19 -0
- package/bundled/review/SKILL.md +120 -61
- package/chunks/MaxSizedBox-TQBQ247P.js +88 -0
- package/chunks/{StandaloneSessionPicker-O6RKBPU4.js → StandaloneSessionPicker-2HPTKCLX.js} +71 -69
- package/chunks/{acp-startup-profiler-RV3IV562.js → acp-startup-profiler-2C4A5ZTJ.js} +2 -2
- package/chunks/{acpAgent-HYFVXVDR.js → acpAgent-PS6EDGH3.js} +1628 -590
- package/chunks/agent-VDOUB35F.js +84 -0
- package/chunks/agent-headless-EO53EFS2.js +78 -0
- package/chunks/{anthropicContentGenerator-LXUXMOE7.js → anthropicContentGenerator-OFHSZJBF.js} +61 -20
- package/chunks/{artifact-tool-Y5T7GG7F.js → artifact-tool-RDN2W7ND.js} +4 -4
- package/chunks/{askUserQuestion-2H6747FR.js → askUserQuestion-OZERWH5R.js} +4 -4
- package/chunks/bridge-W7AZSRZQ.js +94 -0
- package/chunks/{build-RV63TIRH.js → build-GDBLPA24.js} +1 -1
- package/chunks/{ca-25EDXPFZ.js → ca-6W3SK7OQ.js} +6 -1
- package/chunks/{channel-management-service-G74LFADV.js → channel-management-service-5S7YCWX5.js} +20 -5
- package/chunks/channel-settings-store-JFVRSNER.js +91 -0
- package/chunks/{channel-worker-group-PTJIJSKC.js → channel-worker-group-OVWGYMZS.js} +9 -5
- package/chunks/{channel-worker-manager-WIMGM2FD.js → channel-worker-manager-H55GKOQA.js} +9 -5
- package/chunks/{channel-worker-supervisor-KUFTR6P5.js → channel-worker-supervisor-CABBXYHK.js} +5 -4
- package/chunks/{chunk-6GMVPFB2.js → chunk-2IIJTXYF.js} +45 -16
- package/chunks/{chunk-BPJSQIJX.js → chunk-2J3OJGTL.js} +0 -2
- package/chunks/{chunk-I7XZ3RY5.js → chunk-2KKCCLPT.js} +1 -1
- package/chunks/{chunk-MSLKI6C2.js → chunk-2LEOZTBT.js} +49 -26
- package/chunks/{chunk-3QMGYBFN.js → chunk-3APUUXRF.js} +1 -80
- package/chunks/{chunk-VV6XU5L7.js → chunk-3F2WDAV6.js} +16 -11
- package/chunks/{chunk-MUP3T3AD.js → chunk-3I6DUGQD.js} +1 -35
- package/chunks/{chunk-66RMLJHC.js → chunk-44F4LBWZ.js} +577 -208
- package/chunks/{chunk-VAK25FTU.js → chunk-45IOTAUS.js} +1 -1
- package/chunks/{chunk-JZA3JUDJ.js → chunk-4KP2F2TE.js} +1 -1
- package/chunks/{chunk-DM4Q4JJH.js → chunk-54YCNSK5.js} +36562 -45062
- package/chunks/{chunk-2Q3OT4OV.js → chunk-56Z7QEAQ.js} +200 -77
- package/chunks/{chunk-ZOIFNCKL.js → chunk-5NNHICSA.js} +3 -23
- package/chunks/{chunk-A4UCTEB5.js → chunk-5WV5S2GT.js} +0 -1
- package/chunks/{chunk-RHLZR4E5.js → chunk-675H6PLP.js} +1 -1
- package/chunks/{chunk-YAF5VNU7.js → chunk-6CQWRWUC.js} +4 -5
- package/chunks/chunk-6FMJLI5M.js +1591 -0
- package/chunks/{chunk-HV3G62R6.js → chunk-6MPDY6ZG.js} +1 -1
- package/chunks/{chunk-32MVHM4T.js → chunk-6PQPKTXP.js} +1 -1
- package/chunks/{chunk-LG4GZIVV.js → chunk-6TAASXWL.js} +4 -4
- package/chunks/{chunk-OJGCZBB7.js → chunk-77V3VIKL.js} +41 -36
- package/chunks/{chunk-2OM7GEXO.js → chunk-7KAXXBER.js} +3 -3
- package/chunks/{chunk-2JM6GZ5D.js → chunk-7SJN2IWT.js} +8 -13
- package/chunks/{chunk-UUUTRMI2.js → chunk-7ULQIS27.js} +1 -1
- package/chunks/{chunk-2YZJCM5T.js → chunk-A7Y5H4TX.js} +4 -4
- package/chunks/{chunk-TOFQCPDC.js → chunk-AOHY3QJ3.js} +14 -8
- package/chunks/chunk-AQ37AY7B.js +93 -0
- package/chunks/{chunk-B6ZJ7SI6.js → chunk-AUOULH6Q.js} +383 -320
- package/chunks/{chunk-PJIZUQVC.js → chunk-AZQ3DT76.js} +2 -2
- package/chunks/{chunk-UH3WSE5L.js → chunk-B4AJNNOL.js} +1 -6
- package/chunks/{chunk-7FZEBPKS.js → chunk-BBIQAX4V.js} +23 -18
- package/chunks/{chunk-L26JL52R.js → chunk-CBBP4BMC.js} +64 -67
- package/chunks/{chunk-ZD6UTE4A.js → chunk-CNTR4GR6.js} +1 -1
- package/chunks/{chunk-4M377AZG.js → chunk-CO2U743O.js} +6 -6
- package/chunks/{chunk-3SJ43L4W.js → chunk-CPZAH673.js} +6 -0
- package/chunks/{chunk-VFSJ5VRH.js → chunk-CU47KXB5.js} +3 -3
- package/chunks/{chunk-EPDRMGT4.js → chunk-D4HTUMGX.js} +4 -28
- package/chunks/{chunk-XHRTVPG2.js → chunk-D6MDRSZ6.js} +7 -7
- package/chunks/{chunk-BYFNTGKI.js → chunk-DEEABGH2.js} +3111 -989
- package/chunks/{chunk-XVNQMZ2I.js → chunk-DGEIYUC3.js} +0 -1
- package/chunks/{chunk-BPZALHVR.js → chunk-DI35ZN7T.js} +1 -1
- package/chunks/{chunk-B4UMZKMU.js → chunk-DQ2O5QOJ.js} +1 -1
- package/chunks/{chunk-DLWL3Z7A.js → chunk-DSFHVTWD.js} +3 -3
- package/chunks/{chunk-RWS5VYWC.js → chunk-DUNI4EBW.js} +950 -446
- package/chunks/{chunk-NL7LTRLR.js → chunk-E2BHWIDT.js} +48 -72
- package/chunks/{chunk-3MSHSCSN.js → chunk-E2FN6SM7.js} +93 -3
- package/chunks/{chunk-USTWD7QV.js → chunk-E6CJ2SMM.js} +26 -16
- package/chunks/{chunk-TF2X2WCT.js → chunk-EQNUDTL6.js} +2 -2
- package/chunks/{chunk-PANH4R3B.js → chunk-EU5TBFJI.js} +18 -12
- package/chunks/{chunk-W4CQXHT6.js → chunk-FANRZEAJ.js} +1 -1
- package/chunks/{chunk-WBL3FJEU.js → chunk-FC4KQFCS.js} +1 -1
- package/chunks/{chunk-N3FAY5CM.js → chunk-FCYYAB4S.js} +157 -4
- package/chunks/{chunk-OKY7HXPG.js → chunk-FJ5WUMUQ.js} +2 -2
- package/chunks/{chunk-M4UKFCZ2.js → chunk-FNDXMN7I.js} +231 -171
- package/chunks/{chunk-FQK6JAFG.js → chunk-FS674JW4.js} +4 -4
- package/chunks/chunk-FYJ7W2PI.js +194 -0
- package/chunks/{chunk-INADJJGW.js → chunk-G7XXKQYS.js} +2 -2
- package/chunks/{chunk-LNARWLZQ.js → chunk-GJ2GBPBD.js} +2 -2
- package/chunks/{chunk-E5WH5O3C.js → chunk-GL4JOZXU.js} +4 -4
- package/chunks/{chunk-LS77BEZP.js → chunk-GLCZKT5V.js} +1 -5
- package/chunks/{chunk-KU5XMLDK.js → chunk-GURGAJTX.js} +4 -1
- package/chunks/{chunk-5THCYPLO.js → chunk-H6I4PGRV.js} +15 -8
- package/chunks/{chunk-A5L3JMUA.js → chunk-HC45LTEN.js} +18 -4
- package/chunks/{chunk-U7TXFVUN.js → chunk-HIVKI6O6.js} +118 -95
- package/chunks/{chunk-QY5MMZ6O.js → chunk-HX6RLYUO.js} +3 -3
- package/chunks/{chunk-GZXCZHCT.js → chunk-I3G5JWBV.js} +1 -1
- package/chunks/{chunk-ER5LWJR6.js → chunk-I5BT7ADR.js} +3 -3
- package/chunks/{chunk-L5UHQJTJ.js → chunk-IGTHU3T4.js} +1 -1
- package/chunks/{chunk-BIQWWWJN.js → chunk-IIUGIWWY.js} +1 -1
- package/chunks/{chunk-ML52PL6O.js → chunk-JCJ7LKNA.js} +5856 -5334
- package/chunks/{chunk-B7QDM6Z7.js → chunk-JE2CEOBO.js} +2 -2
- package/chunks/{chunk-S3TWXGKA.js → chunk-JE7KQ2UP.js} +4 -2
- package/chunks/{chunk-P5V4T7NK.js → chunk-JJPKFJBT.js} +11 -3
- package/chunks/{chunk-J6D3VXCC.js → chunk-JLZ3RBQG.js} +18 -5
- package/chunks/{chunk-PWTZEM3C.js → chunk-JXVC2PL3.js} +3 -37
- package/chunks/chunk-JYBU6YUE.js +378 -0
- package/chunks/{chunk-JCW2R7WC.js → chunk-K623ENWT.js} +3 -79
- package/chunks/{chunk-T2NCM2ET.js → chunk-K6KS3LTN.js} +2 -749
- package/chunks/{chunk-Z5BLYMZM.js → chunk-KR32NIAN.js} +6 -6
- package/chunks/{chunk-MK7VQDN3.js → chunk-KWHKHSIS.js} +8 -6
- package/chunks/{chunk-5U4IPFBR.js → chunk-KXDONCPU.js} +4 -4
- package/chunks/{chunk-DHHOYAPR.js → chunk-L2E5GFAG.js} +7 -7
- package/chunks/{chunk-V6VRAM7B.js → chunk-L32VV3ZJ.js} +12 -12
- package/chunks/{chunk-2W3OOD4W.js → chunk-L55JWS76.js} +6 -3
- package/chunks/{chunk-E5TUC6CA.js → chunk-LHKCY7DY.js} +3 -3
- package/chunks/{chunk-NH6KE4JX.js → chunk-LOY7RWQG.js} +3 -3
- package/chunks/{chunk-CC4N4M36.js → chunk-LYI2PZDK.js} +1 -1
- package/chunks/{chunk-3JAQDSXN.js → chunk-MB32MS4U.js} +80 -9
- package/chunks/{chunk-PR75REBZ.js → chunk-MM7TH7ZM.js} +12 -82
- package/chunks/{chunk-FODK6UMO.js → chunk-MPHPFVKK.js} +0 -2
- package/chunks/{chunk-M5JM7OSF.js → chunk-N4ACHWNH.js} +2 -3
- package/chunks/{chunk-JESCGQM3.js → chunk-NAVJD2PQ.js} +8 -7
- package/chunks/{chunk-J56UI34H.js → chunk-NBD76HUW.js} +4 -2
- package/chunks/{chunk-C3NS4F2Q.js → chunk-NHFEMWAZ.js} +1 -1
- package/chunks/{chunk-6PSLCFQ2.js → chunk-NTDH4IML.js} +18 -9
- package/chunks/{chunk-6OUGMXDC.js → chunk-NWNEANAT.js} +7 -7
- package/chunks/chunk-O6GEWCJA.js +21 -0
- package/chunks/chunk-OCPBI7J5.js +18 -0
- package/chunks/{chunk-ZE5WPL4I.js → chunk-OFZKFPYG.js} +3 -3
- package/chunks/{chunk-KIUFNBHR.js → chunk-P5VC5USY.js} +1 -1
- package/chunks/chunk-P755N4CS.js +2196 -0
- package/chunks/{chunk-BRRAJXPA.js → chunk-PCK4B6LR.js} +1 -1
- package/chunks/{chunk-TQCBGUHN.js → chunk-PJOHNFIY.js} +5 -5
- package/chunks/{chunk-G4WFQUYQ.js → chunk-PVNQRENX.js} +1 -1
- package/chunks/{chunk-DM22XS4K.js → chunk-PZEXDV3H.js} +357 -13
- package/chunks/{chunk-2JZBVYTU.js → chunk-Q3T5KA2V.js} +1 -8
- package/chunks/{chunk-SASBXAQL.js → chunk-Q5WZTTWE.js} +4 -4
- package/chunks/{chunk-SRZ6DXVG.js → chunk-QARJNL2V.js} +44 -136
- package/chunks/{chunk-YH6G52F2.js → chunk-QCXGC7QB.js} +4 -4
- package/chunks/{chunk-SQBYH7PX.js → chunk-QDK4F2N5.js} +1 -1
- package/chunks/{chunk-VDDGDZMA.js → chunk-QHWCP53L.js} +14 -7
- package/chunks/{chunk-H5FFA6TH.js → chunk-QTHQ6Z5X.js} +16 -3
- package/chunks/{chunk-5I2IWRSH.js → chunk-R2XWGR75.js} +2 -2
- package/chunks/{chunk-PHVR5UUY.js → chunk-RDJOB6S3.js} +1 -1
- package/chunks/{chunk-GDIPH4JY.js → chunk-RG64CDT2.js} +6 -6
- package/chunks/{chunk-3HBZKBMQ.js → chunk-RSVPYAGK.js} +5 -5
- package/chunks/{chunk-6AM5D4ME.js → chunk-S6LOFUVP.js} +0 -12
- package/chunks/{chunk-K4XWPEWB.js → chunk-SHN4KHDK.js} +4 -33
- package/chunks/{chunk-VYPFXUCB.js → chunk-SZ3KHTDR.js} +1 -1
- package/chunks/chunk-T26EAKDL.js +13 -0
- package/chunks/chunk-T3CHYWJZ.js +758 -0
- package/chunks/{chunk-FNQ6T3CV.js → chunk-TEGJSJDF.js} +10 -7
- package/chunks/{chunk-OHNBB4XR.js → chunk-THVU3RNH.js} +1 -1
- package/chunks/{record-artifact-RQKFYO5B.js → chunk-TIRRPCFS.js} +22 -7
- package/chunks/chunk-TTJZAIFP.js +319 -0
- package/chunks/{chunk-63P4EL5V.js → chunk-TZTAV5RH.js} +1 -1
- package/chunks/{chunk-52O2CIUL.js → chunk-UV6KF7T3.js} +130 -5
- package/chunks/{chunk-QPDRAXDJ.js → chunk-V25K5ID7.js} +1 -1
- package/chunks/{chunk-3IXOIAKE.js → chunk-V4XNUDPE.js} +18 -6
- package/chunks/{chunk-WDSWXQU3.js → chunk-VEMNQMHA.js} +2 -2
- package/chunks/{chunk-LNURQEMZ.js → chunk-VMX5RZQH.js} +12 -10
- package/chunks/{chunk-JALU3ZDU.js → chunk-W3UKBMSI.js} +154 -16
- package/chunks/{chunk-DN6ZX5AY.js → chunk-WWCMSZII.js} +61 -14
- package/chunks/{chunk-COH43MRJ.js → chunk-XCGIMOLN.js} +27 -1
- package/chunks/{chunk-FY3M44RD.js → chunk-XP4L6KS3.js} +3 -3
- package/chunks/{chunk-6FGBXPWM.js → chunk-XQK4XXTN.js} +38 -44
- package/chunks/{chunk-A6UO2C7C.js → chunk-XUGZYLDH.js} +167 -81
- package/chunks/{chunk-LZEMEFKY.js → chunk-YANIWTRZ.js} +1 -1
- package/chunks/{chunk-IPUUTYMV.js → chunk-YDLJGZHL.js} +1 -1
- package/chunks/{chunk-HIJQF5B5.js → chunk-YGE3IXJP.js} +1 -1
- package/chunks/{chunk-BJX6ZSUK.js → chunk-YUFIEIWC.js} +2 -2
- package/chunks/{chunk-BO4XCS7P.js → chunk-Z3S5EMOW.js} +20 -85
- package/chunks/chunk-Z4X5MTRT.js +133 -0
- package/chunks/{chunk-UW5EOVUN.js → chunk-ZBVS26BY.js} +4 -4
- package/chunks/{chunk-PSWQZHEA.js → chunk-ZMOJ7ISP.js} +1 -1
- package/chunks/{chunk-HTO4JFDZ.js → chunk-ZPJWUGCS.js} +0 -1
- package/chunks/{chunk-MVS3NS2N.js → chunk-ZPZ7ZJEE.js} +28 -5
- package/chunks/{computer-use-DOFAHZAB.js → computer-use-5QWCFNKD.js} +52 -50
- package/chunks/{config-utils-VFQXVGNR.js → config-utils-WADIDWGG.js} +4 -4
- package/chunks/contextCommand-4Z7T7TUM.js +83 -0
- package/chunks/core-runtime-6N4EFC2Q.js +137 -0
- package/chunks/{create-sub-session-IWW2IZ2T.js → create-sub-session-62YZWVAY.js} +3 -3
- package/chunks/{create-sub-session-7543K2QA.js → create-sub-session-AEREHZBQ.js} +49 -47
- package/chunks/{cron-create-YIID5XAW.js → cron-create-6E7GIQTG.js} +6 -6
- package/chunks/{cron-delete-ZVHYCEP2.js → cron-delete-JD26XY3W.js} +5 -5
- package/chunks/{cron-list-XEGS463Q.js → cron-list-CUWFB44G.js} +6 -6
- package/chunks/{daemon-VOMQW7KZ.js → daemon-PCNCI5YU.js} +239 -18
- package/chunks/daemon-status-provider-DDF7C5M7.js +93 -0
- package/chunks/daemon-trust-policy-Q4KSOJTR.js +88 -0
- package/chunks/daemon-trust-policy-monitor-V6FTE3IY.js +175 -0
- package/chunks/{de-HGRCYDEJ.js → de-SY6O76BF.js} +6 -1
- package/chunks/deferred-core-runtime-GHJ5GQHK.js +92 -0
- package/chunks/dist-26BIMQT6.js +4487 -0
- package/chunks/{dist-KTYYJ2C5.js → dist-2PERFI23.js} +12 -9
- package/chunks/{dist-NNVBBOGU.js → dist-OAOC5OV4.js} +2 -2
- package/chunks/{dist-K6Y4E7FX.js → dist-PVEAFLHY.js} +5 -4
- package/chunks/{dist-RTJFMNEZ.js → dist-SL2LUMML.js} +1449 -14
- package/chunks/dist-ULIG4M5H.js +13415 -0
- package/chunks/{dist-ANLAT3GS.js → dist-WGMNT3JQ.js} +2 -1
- package/chunks/{dist-BRB6EXK4.js → dist-ZHXOBXDN.js} +3 -3
- package/chunks/earlyInputCapture-TQXLLISD.js +85 -0
- package/chunks/{edit-RIEOJWKB.js → edit-FJEUV6KZ.js} +51 -49
- package/chunks/{en-MTWBNGDO.js → en-NBK3JKCE.js} +9 -1
- package/chunks/{enter-worktree-OGK5FQ3R.js → enter-worktree-7GE3TZ4P.js} +51 -49
- package/chunks/{enterPlanMode-IWZYALIB.js → enterPlanMode-KR5TMPCJ.js} +51 -49
- package/chunks/environment-SWL3CMB3.js +105 -0
- package/chunks/errors-XQE7BGZV.js +91 -0
- package/chunks/esm-K5FARBNI.js +5548 -0
- package/chunks/{exit-worktree-4TEYVIVP.js → exit-worktree-CHKTYNCV.js} +51 -49
- package/chunks/exitPlanMode-QYAG6LWX.js +76 -0
- package/chunks/{fast-path-HYE7IFEV.js → fast-path-Z2K7W6DC.js} +13 -3
- package/chunks/{fr-45RLL55O.js → fr-4KG5V7UT.js} +6 -1
- package/chunks/{gemini-NGRQX3YJ.js → gemini-YU4XKEDG.js} +107 -103
- package/chunks/{geminiContentGenerator-FQHPFZSR.js → geminiContentGenerator-ZZX6NBO4.js} +7 -7
- package/chunks/{getMachineId-bsd-V7W3GODC.js → getMachineId-bsd-FG7IUY6U.js} +1 -1
- package/chunks/{getMachineId-darwin-TDO75DQP.js → getMachineId-darwin-GLCJI2RA.js} +1 -1
- package/chunks/{getMachineId-linux-TF43WQT2.js → getMachineId-linux-O6OPPAKO.js} +1 -1
- package/chunks/{getMachineId-unsupported-ZGUO3TXT.js → getMachineId-unsupported-S6CKYVGC.js} +1 -1
- package/chunks/{getMachineId-win-ECFYZZFQ.js → getMachineId-win-X5SRNEH7.js} +1 -1
- package/chunks/{glob-FRTM3X2E.js → glob-VYF5CXSX.js} +51 -49
- package/chunks/goal-tools-HGO6VXPB.js +335 -0
- package/chunks/{grep-RKWVROCW.js → grep-5DP5ZUTW.js} +53 -50
- package/chunks/handleAutoUpdate-UVBJ56DL.js +84 -0
- package/chunks/i18n-UQNYHEUD.js +100 -0
- package/chunks/{image-gen-WIEM7KZA.js → image-gen-WHPIZNWF.js} +12 -12
- package/chunks/initializer-GMIICF4W.js +89 -0
- package/chunks/installationInfo-4MGG4WVI.js +83 -0
- package/chunks/{ja-B7DF7DFG.js → ja-F3GSQXMF.js} +6 -1
- package/chunks/{keychain-token-storage-MDTG3WRM.js → keychain-token-storage-IKO4G53C.js} +3 -3
- package/chunks/lib-RUF3WZA6.js +9 -0
- package/chunks/list-CPN2W334.js +92 -0
- package/chunks/{list-agents-5KJJHR6I.js → list-agents-PXJ7ZUFB.js} +3 -3
- package/chunks/loadedSettingsAdapter-ZQAV5NDO.js +86 -0
- package/chunks/{loggingContentGenerator-WGM27QAW.js → loggingContentGenerator-5E7W4IEP.js} +31 -30
- package/chunks/{loop-wakeup-FXKNNYSY.js → loop-wakeup-Y26NQZ5I.js} +15 -8
- package/chunks/{ls-NTK6VOQJ.js → ls-ONQTTMQR.js} +5 -5
- package/chunks/{lsp-2JI24STP.js → lsp-YGHHRGMD.js} +3 -3
- package/chunks/{managed-npm-update-JQ2CG3RH.js → managed-npm-update-MKKAXYXA.js} +50 -48
- package/chunks/mcp-V5NTJF6X.js +86 -0
- package/chunks/{monitor-7FEWXX5F.js → monitor-CO3ASY6E.js} +51 -49
- package/chunks/nonInteractiveCli-ZJYEOO7U.js +148 -0
- package/chunks/{notebook-edit-JGJV2K6J.js → notebook-edit-Z7AEE6FM.js} +51 -49
- package/chunks/{openaiContentGenerator-JPVXDTAO.js → openaiContentGenerator-CA3MQOP3.js} +25 -27
- package/chunks/pidfile-NL7MKDRU.js +89 -0
- package/chunks/process-registry-2CHQBXH5.js +157 -0
- package/chunks/{processUtils-V2LCK6T6.js → processUtils-PB5K2DYH.js} +2 -2
- package/chunks/{pt-22Q3FP73.js → pt-EQ33KWEN.js} +6 -1
- package/chunks/{qwenContentGenerator-TICV2W2Z.js → qwenContentGenerator-JYFNDCOS.js} +55 -53
- package/chunks/{qwenOAuth2-XGFI5XJG.js → qwenOAuth2-W2ALKQDD.js} +10 -10
- package/chunks/read-file-IEOR5H5W.js +29 -0
- package/chunks/{read-mcp-resource-4DKQWGHD.js → read-mcp-resource-U2IJN5HM.js} +4 -4
- package/chunks/record-artifact-MGPJ7EG4.js +21 -0
- package/chunks/resumeHistoryUtils-BNBTP5AS.js +94 -0
- package/chunks/ripGrep-UMQODKEB.js +76 -0
- package/chunks/{ru-FZCNZHDC.js → ru-7OZAUKGG.js} +6 -1
- package/chunks/{run-qwen-serve-3VCV4I7E.js → run-qwen-serve-RN2R6QQW.js} +982 -263
- package/chunks/runtime-QFJ2MJF5.js +122 -0
- package/chunks/{scheduler-RS2I6RU5.js → scheduler-AMYUFOZI.js} +49 -47
- package/chunks/{sdk-exporters-grpc-AK3LGHNO.js → sdk-exporters-grpc-54L4LS5L.js} +4 -4
- package/chunks/{sdk-exporters-http-FS6ZV7MF.js → sdk-exporters-http-4BQANSJ6.js} +7 -7
- package/chunks/{sdk-impl-7FZSCSXB.js → sdk-impl-Z4VXWVFX.js} +10 -10
- package/chunks/{send-message-Q6OOR6BR.js → send-message-PMP4ATVM.js} +8 -13
- package/chunks/serve-EIIYJVX3.js +92 -0
- package/chunks/{server-HRZ23U7M.js → server-EP2LLAPD.js} +4816 -1298
- package/chunks/{session-7XHZKTVV.js → session-GMPZBLOW.js} +101 -97
- package/chunks/{settings-7ZGZDXAS.js → settings-LN7RNKBS.js} +53 -51
- package/chunks/shell-EM2OWU5X.js +86 -0
- package/chunks/{skill-LIWXNLDW.js → skill-T5VPSK73.js} +22 -23
- package/chunks/skill-settings-GMR3GMNY.js +94 -0
- package/chunks/spawnChannel-YPCU62DI.js +85 -0
- package/chunks/standalone-update-JAKIM2NF.js +95 -0
- package/chunks/{startInteractiveUI-IW3CSKHA.js → startInteractiveUI-YETQWGYF.js} +1240 -903
- package/chunks/{syntheticOutput-I3757IWH.js → syntheticOutput-D7E6ZFKR.js} +4 -4
- package/chunks/task-create-NFCYD43L.js +26 -0
- package/chunks/{task-list-FOPULZEP.js → task-list-TAVMGEVD.js} +7 -7
- package/chunks/{task-stop-H6RHXFVQ.js → task-stop-ZDF2UJRM.js} +3 -3
- package/chunks/{task-update-M57TFZJT.js → task-update-6L7LHGEX.js} +12 -11
- package/chunks/{team-create-O2FROQ4R.js → team-create-LFJ6HGNY.js} +53 -51
- package/chunks/{team-delete-QE2UXJL7.js → team-delete-DPGGRQBU.js} +7 -7
- package/chunks/{team-plan-approval-Q6WDBXTQ.js → team-plan-approval-C2KLSDGO.js} +51 -49
- package/chunks/theme-manager-JQ3ZGBP5.js +80 -0
- package/chunks/{todoWrite-VQ7FKOHL.js → todoWrite-2UO5G6G6.js} +34 -6
- package/chunks/{tool-search-APECNQ3Z.js → tool-search-FAZBFRJZ.js} +21 -22
- package/chunks/total-session-admission-5CALIVYO.js +88 -0
- package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
- package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
- package/chunks/trustedFolders-KOPSP44S.js +98 -0
- package/chunks/{update-relaunch-ON5MDJQG.js → update-relaunch-6QL2TICS.js} +5 -5
- package/chunks/updateCheck-4Q6RIKFW.js +95 -0
- package/chunks/useAutoAcceptIndicator-Q5BMKZV3.js +96 -0
- package/chunks/{validateNonInterActiveAuth-JBLKBKRD.js → validateNonInterActiveAuth-GKOC5F6Z.js} +95 -91
- package/chunks/{version-LTNUBQJY.js → version-VSATY2LD.js} +1 -1
- package/chunks/{web-fetch-L5UTI53V.js → web-fetch-JCLKL6NL.js} +19 -21
- package/chunks/{web-search-KM33JOS3.js → web-search-DSQTFUBX.js} +13 -13
- package/chunks/{workflow-K7FAWV77.js → workflow-M6QAVKVJ.js} +52 -50
- package/chunks/workspace-providers-status-YKLTLMJA.js +89 -0
- package/chunks/{workspace-registration-store-6TGVDJV5.js → workspace-registration-store-5DMGKU64.js} +1 -1
- package/chunks/workspace-registry-PTYUSYXX.js +96 -0
- package/chunks/workspace-service-25ML3T47.js +103 -0
- package/chunks/workspace-skills-status-YKZWOYRX.js +89 -0
- package/chunks/workspace-trust-reconciler-5FI2S3OS.js +349 -0
- package/chunks/write-file-AY7VLP5X.js +78 -0
- package/chunks/xterm-headless-NTYVIBT3.js +3475 -0
- package/chunks/{zh-LUIGBD55.js → zh-H3YDK5QW.js} +9 -1
- package/chunks/{zh-TW-F5KG2IYD.js → zh-TW-JYCP7XUA.js} +9 -1
- package/chunks/zoom-image-S4LJZMD5.js +224 -0
- package/cli.js +50 -16
- package/locales/ca.js +7 -2
- package/locales/de.js +7 -2
- package/locales/en.js +10 -2
- package/locales/fr.js +7 -2
- package/locales/ja.js +7 -2
- package/locales/pt.js +7 -2
- package/locales/ru.js +7 -2
- package/locales/zh-TW.js +10 -2
- package/locales/zh.js +10 -2
- package/package.json +5 -4
- package/web-shell/assets/{arc-BbHijhiN.js → arc-xjArKHU2.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-Cb4B_JD0.js → architectureDiagram-3BPJPVTR-BgrQDNYG.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-Dsjlh3H-.js → blockDiagram-GPEHLZMM-CXxWC-1_.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Cp5AeR4U.js → c4Diagram-AAUBKEIU-Dx1tLm3v.js} +1 -1
- package/web-shell/assets/channel-B1cyk94G.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CLcY7W2e.js → chunk-2J33WTMH-CBxjogVR.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BUhvY2LR.js → chunk-4BX2VUAB-izb-rY5W.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-kDIFC_71.js → chunk-55IACEB6-NzLyvSb8.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-CIBO15f2.js → chunk-727SXJPM-DVyKb0dl.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BJ_T_slV.js → chunk-AQP2D5EJ-BtqL7NzB.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BEkW35J8.js → chunk-FMBD7UC4-iNpdKIO0.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-GGPxofay.js → chunk-ND2GUHAM-DI7cbFmX.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-Bifllrb6.js → chunk-QZHKN3VN-3Y_-xFYs.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-C-Add_Dp.js → cose-bilkent-S5V4N54A--raRatZn.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-B7MfwNq2.js → dagre-BM42HDAG-B8SU70mO.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CY_0zuDz.js → diagram-2AECGRRQ-ewgoakXo.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-VyYSbCgA.js → diagram-5GNKFQAL-Bm_JLTnS.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CBiIZ2PL.js → diagram-KO2AKTUF-DEIUjUy9.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BL3CrVOx.js → diagram-LMA3HP47-C2Wmrpj-.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CZUPx96P.js → diagram-OG6HWLK6-CtYe6bFx.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-B81xHr1-.js → erDiagram-TEJ5UH35-DfpHcWLV.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-EZWhir-J.js → flowDiagram-I6XJVG4X-CAiUhio5.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CVFSuIAg.js → ganttDiagram-6RSMTGT7-CYc7ezr4.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-C1H2uQDv.js → gitGraphDiagram-PVQCEYII-70lbkcRS.js} +1 -1
- package/web-shell/assets/index-C1k3PDuU.css +5 -0
- package/web-shell/assets/index-C2GE3DAF.js +74 -0
- package/web-shell/assets/index-DZLIXILO.js +1750 -0
- package/web-shell/assets/{index-BYo99NBH.js → index-Ww86nT9f.js} +1 -1
- package/web-shell/assets/{infoDiagram-5YYISTIA-BwyFMlF8.js → infoDiagram-5YYISTIA-C7e8DWPa.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CQ7Yhn2Y.js → ishikawaDiagram-YF4QCWOH-BYLr2op-.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CJn2sf0l.js → journeyDiagram-JHISSGLW-hEibAHKX.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DaNRqwVN.js → kanban-definition-UN3LZRKU-F2rt8Uhp.js} +1 -1
- package/web-shell/assets/{linear-DCKODZe2.js → linear-DPhyNezd.js} +1 -1
- package/web-shell/assets/{mermaid.core-CTGJOk27.js → mermaid.core-ZUtnug0n.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BKU3_3rg.js → mindmap-definition-RKZ34NQL-DDWcMoi8.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-COcwBJ82.js → pieDiagram-4H26LBE5-CTRKzw1_.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CQnQ443x.js → quadrantDiagram-W4KKPZXB-CAEwYG_z.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CZ2oj5cD.js → requirementDiagram-4Y6WPE33-CRjnH9D9.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BxAv5mNu.js → sankeyDiagram-5OEKKPKP-LPQT_sOd.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CztaySPs.js → sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CTQT1oGD.js → stateDiagram-AJRCARHV-CIUdqOXu.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BmqqQZ6w.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-K9Mkex5A.js → timeline-definition-PNZ67QCA-BcilneZF.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-B2rVIw76.js → vennDiagram-CIIHVFJN-BljwiiH1.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-Z1w2JR4M.js → wardley-L42UT6IY-DeKjkYjq.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CIX9aKXf.js → wardleyDiagram-YWT4CUSO-L3U1H7KG.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-CI9DLIKB.js → xychartDiagram-2RQKCTM6-IJnWsgMT.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/MaxSizedBox-INHRH72H.js +0 -86
- package/chunks/agent-VXDAN5JK.js +0 -82
- package/chunks/agent-headless-K4ZMMNBD.js +0 -76
- package/chunks/bridge-LGPZCFHO.js +0 -91
- package/chunks/channel-settings-store-CHCDRTPY.js +0 -89
- package/chunks/chunk-SZRN75WQ.js +0 -29
- package/chunks/chunk-UGYMA4EI.js +0 -219
- package/chunks/chunk-VCBZUOSI.js +0 -8575
- package/chunks/contextCommand-QIZYHDR5.js +0 -81
- package/chunks/daemon-status-provider-OS5UWBHV.js +0 -90
- package/chunks/earlyInputCapture-WQT24RWD.js +0 -83
- package/chunks/environment-VZ7BRI4Q.js +0 -103
- package/chunks/errors-PCX25DVP.js +0 -89
- package/chunks/exitPlanMode-GHPUHBZJ.js +0 -423
- package/chunks/handleAutoUpdate-2CZQRJ66.js +0 -82
- package/chunks/i18n-XEQVMRKN.js +0 -98
- package/chunks/initializer-OVGZ4FLY.js +0 -87
- package/chunks/installationInfo-5UUQJI6Y.js +0 -81
- package/chunks/list-HODU6RXD.js +0 -90
- package/chunks/loadedSettingsAdapter-TYNLBALY.js +0 -84
- package/chunks/mcp-J3DFWX4A.js +0 -84
- package/chunks/nonInteractiveCli-F4GYSMHT.js +0 -144
- package/chunks/pidfile-4VNAR3EP.js +0 -87
- package/chunks/read-file-LZXUR4TO.js +0 -31
- package/chunks/resumeHistoryUtils-65OX3SGJ.js +0 -92
- package/chunks/ripGrep-2U2FRGMV.js +0 -74
- package/chunks/runtime-AXJWIEDU.js +0 -120
- package/chunks/serve-W2GC47CM.js +0 -90
- package/chunks/shell-45IPBDP5.js +0 -84
- package/chunks/spawnChannel-PVXQ5AGV.js +0 -83
- package/chunks/src-AY65BYR7.js +0 -3166
- package/chunks/standalone-update-ZMFNKAEY.js +0 -93
- package/chunks/task-create-N7WQSGYA.js +0 -25
- package/chunks/theme-manager-YYPZFBAH.js +0 -78
- package/chunks/total-session-admission-JXES723M.js +0 -85
- package/chunks/trustedFolders-HVI7IXUH.js +0 -94
- package/chunks/updateCheck-WUJGHWZZ.js +0 -93
- package/chunks/useAutoAcceptIndicator-CHSTZLZD.js +0 -94
- package/chunks/workspace-providers-status-GAKSF4LL.js +0 -87
- package/chunks/workspace-registry-A7NQUONG.js +0 -89
- package/chunks/workspace-service-STGVSO4N.js +0 -99
- package/chunks/workspace-skills-status-66AK3DUA.js +0 -86
- package/chunks/write-file-HUUCEG4P.js +0 -74
- package/web-shell/assets/channel-Bzdx6E8P.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-Cd6wbiuK.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cd6wbiuK.js +0 -1
- package/web-shell/assets/index-B2bXx96W.js +0 -1249
- package/web-shell/assets/index-_8mKjx8q.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BjMdT6E_.js +0 -1
- package/chunks/{chunk-TARRHLLG.js → chunk-QUGAUQGJ.js} +25 -25
- package/chunks/{chunk-U7ZFW55U.js → chunk-VOQXFAY5.js} +977 -977
- /package/chunks/{chunk-LXXMOYPL.js → chunk-VXZBKKQR.js} +0 -0
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
buildPermissionSettings
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YANIWTRZ.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveVoiceStreamConfig,
|
|
8
8
|
resolveVoiceTranscriptionConfig,
|
|
9
9
|
transcribeVoiceAudio
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7KAXXBER.js";
|
|
11
11
|
import {
|
|
12
12
|
getVoiceSettingsScope,
|
|
13
13
|
isSelectableVoiceModel,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
readVoiceMode,
|
|
17
17
|
readVoiceModel,
|
|
18
18
|
resolveVoiceTransport
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-P5VC5USY.js";
|
|
20
20
|
import {
|
|
21
21
|
WorkspacePermissionRulesSessionRequiredError,
|
|
22
22
|
WorkspaceSettingsPartialPersistError,
|
|
@@ -24,15 +24,8 @@ import {
|
|
|
24
24
|
WorkspaceSkillNotToggleableError
|
|
25
25
|
} from "./chunk-OA4JVLSA.js";
|
|
26
26
|
import {
|
|
27
|
-
MCP_RESTART_SERVER_DEADLINE_MS
|
|
28
|
-
|
|
29
|
-
McpServerRestartFailedError,
|
|
30
|
-
SessionNotFoundError,
|
|
31
|
-
WorkspaceInitConflictError,
|
|
32
|
-
WorkspaceInitPathEscapeError,
|
|
33
|
-
WorkspaceInitRaceError,
|
|
34
|
-
WorkspaceInitSymlinkError
|
|
35
|
-
} from "./chunk-UH3WSE5L.js";
|
|
27
|
+
MCP_RESTART_SERVER_DEADLINE_MS
|
|
28
|
+
} from "./chunk-OCPBI7J5.js";
|
|
36
29
|
import {
|
|
37
30
|
BridgeChannelClosedError,
|
|
38
31
|
SERVE_CONTROL_EXT_METHODS,
|
|
@@ -46,14 +39,26 @@ import {
|
|
|
46
39
|
createIdleWorkspaceProvidersStatus,
|
|
47
40
|
createIdleWorkspaceSkillsStatus,
|
|
48
41
|
mapDomainErrorToErrorKind
|
|
49
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-GURGAJTX.js";
|
|
43
|
+
import {
|
|
44
|
+
resolveSkillSettings
|
|
45
|
+
} from "./chunk-Z4X5MTRT.js";
|
|
46
|
+
import {
|
|
47
|
+
McpServerNotFoundError,
|
|
48
|
+
McpServerRestartFailedError,
|
|
49
|
+
SessionNotFoundError,
|
|
50
|
+
WorkspaceInitConflictError,
|
|
51
|
+
WorkspaceInitPathEscapeError,
|
|
52
|
+
WorkspaceInitRaceError,
|
|
53
|
+
WorkspaceInitSymlinkError
|
|
54
|
+
} from "./chunk-B4AJNNOL.js";
|
|
50
55
|
import {
|
|
51
56
|
getPersistScopeForModelSelection,
|
|
52
57
|
loadSettings
|
|
53
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-W3UKBMSI.js";
|
|
54
59
|
import {
|
|
55
60
|
getWorkspaceTrustStatus
|
|
56
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-P755N4CS.js";
|
|
57
62
|
import {
|
|
58
63
|
writeStderrLine,
|
|
59
64
|
writeStderrLineSafe
|
|
@@ -62,11 +67,11 @@ import {
|
|
|
62
67
|
ModelsConfig,
|
|
63
68
|
SkillManager,
|
|
64
69
|
require_yauzl
|
|
65
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-54YCNSK5.js";
|
|
66
71
|
import {
|
|
67
72
|
Storage,
|
|
68
73
|
createDebugLogger
|
|
69
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-E2BHWIDT.js";
|
|
70
75
|
import {
|
|
71
76
|
init_esbuild_shims
|
|
72
77
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -885,7 +890,7 @@ function skillBaseDir(workspace, scope) {
|
|
|
885
890
|
return scope === "workspace" ? path.join(workspace, ".qwen", "skills") : path.join(Storage.getGlobalQwenDir(), "skills");
|
|
886
891
|
}
|
|
887
892
|
__name(skillBaseDir, "skillBaseDir");
|
|
888
|
-
async function removeInstallArtifacts(baseDir, skillName) {
|
|
893
|
+
async function removeInstallArtifacts(baseDir, skillName, assertGenerationOpen) {
|
|
889
894
|
const workDir = path.dirname(baseDir);
|
|
890
895
|
const workPrefix = `.${path.basename(baseDir)}-${skillName}`;
|
|
891
896
|
const locations = [
|
|
@@ -903,17 +908,18 @@ async function removeInstallArtifacts(baseDir, skillName) {
|
|
|
903
908
|
await Promise.all(
|
|
904
909
|
entries.filter(
|
|
905
910
|
(entry) => prefixes.some((prefix) => entry.name.startsWith(prefix))
|
|
906
|
-
).map(
|
|
907
|
-
(
|
|
911
|
+
).map(async (entry) => {
|
|
912
|
+
assertGenerationOpen?.();
|
|
913
|
+
await fs.rm(path.join(directory, entry.name), {
|
|
908
914
|
recursive: true,
|
|
909
915
|
force: true
|
|
910
|
-
})
|
|
911
|
-
)
|
|
916
|
+
});
|
|
917
|
+
})
|
|
912
918
|
);
|
|
913
919
|
}
|
|
914
920
|
}
|
|
915
921
|
__name(removeInstallArtifacts, "removeInstallArtifacts");
|
|
916
|
-
async function ensureDirectoryWithoutSymlinks(directory) {
|
|
922
|
+
async function ensureDirectoryWithoutSymlinks(directory, assertGenerationOpen) {
|
|
917
923
|
const missing = [];
|
|
918
924
|
let current = directory;
|
|
919
925
|
while (true) {
|
|
@@ -931,15 +937,21 @@ async function ensureDirectoryWithoutSymlinks(directory) {
|
|
|
931
937
|
current = parent;
|
|
932
938
|
}
|
|
933
939
|
}
|
|
934
|
-
for (const entry of missing.reverse())
|
|
940
|
+
for (const entry of missing.reverse()) {
|
|
941
|
+
assertGenerationOpen?.();
|
|
942
|
+
await fs.mkdir(entry);
|
|
943
|
+
}
|
|
935
944
|
}
|
|
936
945
|
__name(ensureDirectoryWithoutSymlinks, "ensureDirectoryWithoutSymlinks");
|
|
937
|
-
async function installWorkspaceSkill(workspace, request, githubToken) {
|
|
946
|
+
async function installWorkspaceSkill(workspace, request, githubToken, assertGenerationOpen) {
|
|
947
|
+
assertGenerationOpen?.();
|
|
938
948
|
const skillName = validateWorkspaceSkillName(request.name);
|
|
939
949
|
const files = await filesFromSource(request.source, githubToken);
|
|
940
950
|
const baseDir = skillBaseDir(workspace, request.scope);
|
|
941
|
-
|
|
942
|
-
await
|
|
951
|
+
assertGenerationOpen?.();
|
|
952
|
+
await ensureDirectoryWithoutSymlinks(baseDir, assertGenerationOpen);
|
|
953
|
+
assertGenerationOpen?.();
|
|
954
|
+
await removeInstallArtifacts(baseDir, skillName, assertGenerationOpen);
|
|
943
955
|
const destination = path.join(baseDir, skillName);
|
|
944
956
|
const existing = await fs.lstat(destination).catch(() => void 0);
|
|
945
957
|
if (existing?.isSymbolicLink() || existing && !existing.isDirectory()) {
|
|
@@ -947,15 +959,19 @@ async function installWorkspaceSkill(workspace, request, githubToken) {
|
|
|
947
959
|
}
|
|
948
960
|
const workDir = path.dirname(baseDir);
|
|
949
961
|
const workPrefix = `.${path.basename(baseDir)}-${skillName}`;
|
|
962
|
+
assertGenerationOpen?.();
|
|
950
963
|
const staging = await fs.mkdtemp(
|
|
951
964
|
path.join(workDir, `${workPrefix}.installing-`)
|
|
952
965
|
);
|
|
953
966
|
const backup = path.join(workDir, `${workPrefix}.backup-${Date.now()}`);
|
|
954
967
|
let movedExisting = false;
|
|
968
|
+
let committedStaging = false;
|
|
955
969
|
try {
|
|
956
970
|
for (const file of files) {
|
|
957
971
|
const target = path.join(staging, ...file.relativePath.split("/"));
|
|
972
|
+
assertGenerationOpen?.();
|
|
958
973
|
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
974
|
+
assertGenerationOpen?.();
|
|
959
975
|
await fs.writeFile(target, file.content);
|
|
960
976
|
}
|
|
961
977
|
const skillFile = path.join(staging, "SKILL.md");
|
|
@@ -979,12 +995,19 @@ async function installWorkspaceSkill(workspace, request, githubToken) {
|
|
|
979
995
|
);
|
|
980
996
|
}
|
|
981
997
|
if (existing) {
|
|
998
|
+
assertGenerationOpen?.();
|
|
982
999
|
await fs.rename(destination, backup);
|
|
983
1000
|
movedExisting = true;
|
|
984
1001
|
}
|
|
1002
|
+
assertGenerationOpen?.();
|
|
985
1003
|
await fs.rename(staging, destination);
|
|
1004
|
+
committedStaging = true;
|
|
1005
|
+
assertGenerationOpen?.();
|
|
986
1006
|
} catch (error) {
|
|
987
|
-
await fs.rm(
|
|
1007
|
+
await fs.rm(committedStaging ? destination : staging, {
|
|
1008
|
+
recursive: true,
|
|
1009
|
+
force: true
|
|
1010
|
+
}).catch(() => void 0);
|
|
988
1011
|
if (movedExisting) {
|
|
989
1012
|
await fs.rename(backup, destination).catch(() => void 0);
|
|
990
1013
|
}
|
|
@@ -1000,7 +1023,8 @@ async function installWorkspaceSkill(workspace, request, githubToken) {
|
|
|
1000
1023
|
};
|
|
1001
1024
|
}
|
|
1002
1025
|
__name(installWorkspaceSkill, "installWorkspaceSkill");
|
|
1003
|
-
async function deleteWorkspaceSkill(workspace, scope, skillNameInput, installedPath) {
|
|
1026
|
+
async function deleteWorkspaceSkill(workspace, scope, skillNameInput, installedPath, assertGenerationOpen) {
|
|
1027
|
+
assertGenerationOpen?.();
|
|
1004
1028
|
const skillName = validateWorkspaceSkillName(skillNameInput);
|
|
1005
1029
|
const skillDir = path.resolve(path.dirname(installedPath));
|
|
1006
1030
|
const skillFile = path.resolve(installedPath);
|
|
@@ -1036,12 +1060,14 @@ async function deleteWorkspaceSkill(workspace, scope, skillNameInput, installedP
|
|
|
1036
1060
|
"Skill name does not match its installed directory"
|
|
1037
1061
|
);
|
|
1038
1062
|
}
|
|
1063
|
+
assertGenerationOpen?.();
|
|
1039
1064
|
await fs.rm(skillDir, { recursive: true, force: true });
|
|
1040
1065
|
return { skillName, scope, deleted: true };
|
|
1041
1066
|
}
|
|
1042
1067
|
__name(deleteWorkspaceSkill, "deleteWorkspaceSkill");
|
|
1043
1068
|
|
|
1044
1069
|
// packages/cli/src/serve/workspace-service/index.ts
|
|
1070
|
+
var WORKSPACE_SKILLS_SNAPSHOT_TTL_MS = 5e3;
|
|
1045
1071
|
async function canonicalizeExistingAncestor(inputPath) {
|
|
1046
1072
|
let current = inputPath;
|
|
1047
1073
|
while (true) {
|
|
@@ -1098,6 +1124,8 @@ __name(withTimeout, "withTimeout");
|
|
|
1098
1124
|
function createDaemonWorkspaceService(deps) {
|
|
1099
1125
|
const {
|
|
1100
1126
|
boundWorkspace,
|
|
1127
|
+
isWorkspaceTrusted,
|
|
1128
|
+
assertGenerationOpen,
|
|
1101
1129
|
contextFilename,
|
|
1102
1130
|
statusProvider,
|
|
1103
1131
|
workspaceProvidersStatusProvider,
|
|
@@ -1116,9 +1144,27 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1116
1144
|
refreshExtensionsForAllSessions: refreshExtensionsForAllSessionsOnBridge,
|
|
1117
1145
|
publishWorkspaceEvent
|
|
1118
1146
|
} = deps;
|
|
1147
|
+
const loadBoundSettings = /* @__PURE__ */ __name((skipLoadEnvironment = false) => {
|
|
1148
|
+
const workspaceTrusted = isWorkspaceTrusted();
|
|
1149
|
+
return loadSettings(boundWorkspace, {
|
|
1150
|
+
skipLoadEnvironment: skipLoadEnvironment || !workspaceTrusted,
|
|
1151
|
+
skipWorkspaceSettings: !workspaceTrusted,
|
|
1152
|
+
workspaceTrusted
|
|
1153
|
+
});
|
|
1154
|
+
}, "loadBoundSettings");
|
|
1155
|
+
const assertActiveGeneration = /* @__PURE__ */ __name(() => assertGenerationOpen?.(), "assertActiveGeneration");
|
|
1119
1156
|
let lastWorkspaceSkillsStatus;
|
|
1157
|
+
let lastWorkspaceSkillsStatusAt = 0;
|
|
1158
|
+
let workspaceSkillsGeneration = 0;
|
|
1159
|
+
let inFlightWorkspaceSkillsStatus;
|
|
1120
1160
|
let inFlightAcpPreheat;
|
|
1121
|
-
const
|
|
1161
|
+
const invalidateWorkspaceSkillsSnapshot = /* @__PURE__ */ __name(() => {
|
|
1162
|
+
workspaceSkillsGeneration += 1;
|
|
1163
|
+
lastWorkspaceSkillsStatus = void 0;
|
|
1164
|
+
lastWorkspaceSkillsStatusAt = 0;
|
|
1165
|
+
workspaceSkillsStatusProvider?.invalidate?.(boundWorkspace);
|
|
1166
|
+
}, "invalidateWorkspaceSkillsSnapshot");
|
|
1167
|
+
const readWorkspaceSkillsStatus = /* @__PURE__ */ __name(async (generation) => {
|
|
1122
1168
|
let status;
|
|
1123
1169
|
try {
|
|
1124
1170
|
status = await queryWorkspaceStatus(
|
|
@@ -1131,14 +1177,25 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1131
1177
|
);
|
|
1132
1178
|
status = createIdleWorkspaceSkillsStatus(boundWorkspace);
|
|
1133
1179
|
}
|
|
1134
|
-
if (status.initialized) {
|
|
1180
|
+
if (status.initialized && generation === workspaceSkillsGeneration) {
|
|
1135
1181
|
lastWorkspaceSkillsStatus = status;
|
|
1182
|
+
lastWorkspaceSkillsStatusAt = Date.now();
|
|
1136
1183
|
return status;
|
|
1137
1184
|
}
|
|
1138
|
-
if (lastWorkspaceSkillsStatus)
|
|
1185
|
+
if (lastWorkspaceSkillsStatus) {
|
|
1186
|
+
if (generation === workspaceSkillsGeneration) {
|
|
1187
|
+
lastWorkspaceSkillsStatusAt = Date.now();
|
|
1188
|
+
}
|
|
1189
|
+
return lastWorkspaceSkillsStatus;
|
|
1190
|
+
}
|
|
1139
1191
|
if (workspaceSkillsStatusProvider) {
|
|
1140
1192
|
try {
|
|
1141
|
-
|
|
1193
|
+
const localStatus = await workspaceSkillsStatusProvider(boundWorkspace);
|
|
1194
|
+
if (localStatus.initialized && generation === workspaceSkillsGeneration) {
|
|
1195
|
+
lastWorkspaceSkillsStatus = localStatus;
|
|
1196
|
+
lastWorkspaceSkillsStatusAt = Date.now();
|
|
1197
|
+
}
|
|
1198
|
+
return localStatus;
|
|
1142
1199
|
} catch (err) {
|
|
1143
1200
|
writeStderrLine(
|
|
1144
1201
|
`qwen serve: getWorkspaceSkillsStatus local provider failed: ${err instanceof Error ? err.message : String(err)}`
|
|
@@ -1146,22 +1203,47 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1146
1203
|
}
|
|
1147
1204
|
}
|
|
1148
1205
|
return status;
|
|
1206
|
+
}, "readWorkspaceSkillsStatus");
|
|
1207
|
+
const getWorkspaceSkillsStatus = /* @__PURE__ */ __name(() => {
|
|
1208
|
+
const cacheAgeMs = Date.now() - lastWorkspaceSkillsStatusAt;
|
|
1209
|
+
if (lastWorkspaceSkillsStatus && cacheAgeMs >= 0 && cacheAgeMs < WORKSPACE_SKILLS_SNAPSHOT_TTL_MS) {
|
|
1210
|
+
return Promise.resolve(lastWorkspaceSkillsStatus);
|
|
1211
|
+
}
|
|
1212
|
+
const generation = workspaceSkillsGeneration;
|
|
1213
|
+
if (inFlightWorkspaceSkillsStatus?.generation === generation) {
|
|
1214
|
+
return inFlightWorkspaceSkillsStatus.promise;
|
|
1215
|
+
}
|
|
1216
|
+
const promise = readWorkspaceSkillsStatus(generation);
|
|
1217
|
+
inFlightWorkspaceSkillsStatus = { generation, promise };
|
|
1218
|
+
const clearInFlight = /* @__PURE__ */ __name(() => {
|
|
1219
|
+
if (inFlightWorkspaceSkillsStatus?.promise === promise) {
|
|
1220
|
+
inFlightWorkspaceSkillsStatus = void 0;
|
|
1221
|
+
}
|
|
1222
|
+
}, "clearInFlight");
|
|
1223
|
+
void promise.then(clearInFlight, clearInFlight);
|
|
1224
|
+
return promise;
|
|
1149
1225
|
}, "getWorkspaceSkillsStatus");
|
|
1150
1226
|
const refreshWorkspaceSkillsAfterMutation = /* @__PURE__ */ __name(async () => {
|
|
1151
|
-
|
|
1152
|
-
workspaceSkillsStatusProvider?.invalidate?.(boundWorkspace);
|
|
1227
|
+
invalidateWorkspaceSkillsSnapshot();
|
|
1153
1228
|
if (!(isChannelLive?.() ?? false)) return;
|
|
1154
1229
|
try {
|
|
1155
|
-
await invokeWorkspaceCommand(
|
|
1230
|
+
const refreshed = await invokeWorkspaceCommand(
|
|
1156
1231
|
SERVE_CONTROL_EXT_METHODS.workspaceSkillsRefresh,
|
|
1157
|
-
{ cwd: boundWorkspace }
|
|
1232
|
+
{ cwd: boundWorkspace, reason: "content" }
|
|
1158
1233
|
);
|
|
1234
|
+
if ((refreshed.configsFailed ?? 0) > 0) {
|
|
1235
|
+
writeStderrLine(
|
|
1236
|
+
`qwen serve: ${refreshed.configsFailed} skill cache refresh(es) failed after mutation`
|
|
1237
|
+
);
|
|
1238
|
+
}
|
|
1159
1239
|
} catch (err) {
|
|
1160
1240
|
if (!(err instanceof SessionNotFoundError) && !(err instanceof BridgeChannelClosedError)) {
|
|
1161
1241
|
writeStderrLine(
|
|
1162
1242
|
`qwen serve: workspace skill refresh after mutation failed: ${err instanceof Error ? err.message : String(err)}`
|
|
1163
1243
|
);
|
|
1164
1244
|
}
|
|
1245
|
+
} finally {
|
|
1246
|
+
invalidateWorkspaceSkillsSnapshot();
|
|
1165
1247
|
}
|
|
1166
1248
|
}, "refreshWorkspaceSkillsAfterMutation");
|
|
1167
1249
|
return {
|
|
@@ -1188,6 +1270,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1188
1270
|
);
|
|
1189
1271
|
},
|
|
1190
1272
|
async preheatAcpChild(_ctx, opts) {
|
|
1273
|
+
assertActiveGeneration();
|
|
1191
1274
|
const startedAt = performance.now();
|
|
1192
1275
|
const channelLive = /* @__PURE__ */ __name(() => isChannelLive?.() ?? false, "channelLive");
|
|
1193
1276
|
const finish = /* @__PURE__ */ __name((result) => ({
|
|
@@ -1346,24 +1429,22 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1346
1429
|
},
|
|
1347
1430
|
async getWorkspaceTrustStatus(_ctx) {
|
|
1348
1431
|
return getWorkspaceTrustStatus(
|
|
1349
|
-
|
|
1432
|
+
loadBoundSettings(true).merged,
|
|
1350
1433
|
boundWorkspace
|
|
1351
1434
|
);
|
|
1352
1435
|
},
|
|
1353
1436
|
async getWorkspacePermissionsStatus(_ctx) {
|
|
1354
|
-
return buildPermissionSettings(
|
|
1437
|
+
return buildPermissionSettings(loadBoundSettings());
|
|
1355
1438
|
},
|
|
1356
1439
|
async getWorkspaceVoiceStatus(_ctx) {
|
|
1357
1440
|
return buildWorkspaceVoiceStatus(
|
|
1358
1441
|
boundWorkspace,
|
|
1359
|
-
|
|
1360
|
-
boundWorkspace,
|
|
1361
|
-
voiceEnv ? { skipLoadEnvironment: true } : true
|
|
1362
|
-
)
|
|
1442
|
+
loadBoundSettings(Boolean(voiceEnv))
|
|
1363
1443
|
);
|
|
1364
1444
|
},
|
|
1365
1445
|
// -- Mutations --
|
|
1366
1446
|
async requestWorkspaceTrustChange(ctx, request) {
|
|
1447
|
+
assertActiveGeneration();
|
|
1367
1448
|
publishWorkspaceEvent({
|
|
1368
1449
|
type: "trust_change_requested",
|
|
1369
1450
|
data: {
|
|
@@ -1380,6 +1461,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1380
1461
|
};
|
|
1381
1462
|
},
|
|
1382
1463
|
async setWorkspacePermissionRules(ctx, request) {
|
|
1464
|
+
assertActiveGeneration();
|
|
1383
1465
|
const key = `permissions.${request.ruleType}`;
|
|
1384
1466
|
try {
|
|
1385
1467
|
const result = await invokeWorkspaceCommand(
|
|
@@ -1391,6 +1473,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1391
1473
|
rules: request.rules
|
|
1392
1474
|
}
|
|
1393
1475
|
);
|
|
1476
|
+
assertActiveGeneration();
|
|
1394
1477
|
publishWorkspaceEvent({
|
|
1395
1478
|
type: "settings_changed",
|
|
1396
1479
|
data: { key, value: request.rules, scope: request.scope },
|
|
@@ -1405,6 +1488,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1405
1488
|
}
|
|
1406
1489
|
},
|
|
1407
1490
|
async setWorkspaceVoiceSettings(ctx, request) {
|
|
1491
|
+
assertActiveGeneration();
|
|
1408
1492
|
if (!persistSettings && !persistSetting) {
|
|
1409
1493
|
throw new WorkspaceVoiceError(
|
|
1410
1494
|
501,
|
|
@@ -1412,14 +1496,10 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1412
1496
|
"Workspace voice settings persistence is not available"
|
|
1413
1497
|
);
|
|
1414
1498
|
}
|
|
1415
|
-
const settings =
|
|
1416
|
-
boundWorkspace,
|
|
1417
|
-
voiceEnv ? { skipLoadEnvironment: true } : true
|
|
1418
|
-
);
|
|
1499
|
+
const settings = loadBoundSettings(Boolean(voiceEnv));
|
|
1419
1500
|
validateWorkspaceVoiceState(settings, request, { env: voiceEnv });
|
|
1420
|
-
const workspaceTrusted = getWorkspaceTrustStatus(settings.merged, boundWorkspace).effective.state === "trusted";
|
|
1421
1501
|
const writes = buildWorkspaceVoiceSettingsWrites(settings, request, {
|
|
1422
|
-
workspaceTrusted,
|
|
1502
|
+
workspaceTrusted: isWorkspaceTrusted(),
|
|
1423
1503
|
...voiceSettingsScope ? { scopeOverride: voiceSettingsScope } : {}
|
|
1424
1504
|
});
|
|
1425
1505
|
const publishWrite = /* @__PURE__ */ __name((write) => {
|
|
@@ -1435,15 +1515,17 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1435
1515
|
}, "publishWrite");
|
|
1436
1516
|
if (persistSettings) {
|
|
1437
1517
|
try {
|
|
1438
|
-
await persistSettings(boundWorkspace, writes);
|
|
1518
|
+
await persistSettings(boundWorkspace, writes, assertGenerationOpen);
|
|
1439
1519
|
} catch (err) {
|
|
1440
1520
|
if (err instanceof WorkspaceSettingsPartialPersistError) {
|
|
1521
|
+
assertActiveGeneration();
|
|
1441
1522
|
for (const write of err.committedWrites) {
|
|
1442
1523
|
publishWrite(write);
|
|
1443
1524
|
}
|
|
1444
1525
|
}
|
|
1445
1526
|
throw err;
|
|
1446
1527
|
}
|
|
1528
|
+
assertActiveGeneration();
|
|
1447
1529
|
for (const write of writes) {
|
|
1448
1530
|
publishWrite(write);
|
|
1449
1531
|
}
|
|
@@ -1455,9 +1537,11 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1455
1537
|
boundWorkspace,
|
|
1456
1538
|
write.scope,
|
|
1457
1539
|
write.key,
|
|
1458
|
-
write.value
|
|
1540
|
+
write.value,
|
|
1541
|
+
assertGenerationOpen
|
|
1459
1542
|
);
|
|
1460
1543
|
} catch (err) {
|
|
1544
|
+
assertActiveGeneration();
|
|
1461
1545
|
writeStderrLine(
|
|
1462
1546
|
`qwen serve: workspace voice partial persist error (workspace=${boundWorkspace}, committed=${committed.length}/${writes.length}, failedKey=${write.key}, failedScope=${voiceSettingsScopeToWire(write.scope)}): ${err instanceof Error ? err.message : String(err)}`
|
|
1463
1547
|
);
|
|
@@ -1470,22 +1554,28 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1470
1554
|
err
|
|
1471
1555
|
);
|
|
1472
1556
|
}
|
|
1557
|
+
assertActiveGeneration();
|
|
1473
1558
|
committed.push(write);
|
|
1474
1559
|
}
|
|
1560
|
+
assertActiveGeneration();
|
|
1475
1561
|
for (const write of committed) {
|
|
1476
1562
|
publishWrite(write);
|
|
1477
1563
|
}
|
|
1478
1564
|
}
|
|
1479
1565
|
return buildWorkspaceVoiceStatus(
|
|
1480
1566
|
boundWorkspace,
|
|
1481
|
-
|
|
1482
|
-
boundWorkspace,
|
|
1483
|
-
voiceEnv ? { skipLoadEnvironment: true } : true
|
|
1484
|
-
)
|
|
1567
|
+
loadBoundSettings(Boolean(voiceEnv))
|
|
1485
1568
|
);
|
|
1486
1569
|
},
|
|
1487
1570
|
async setWorkspaceToolEnabled(ctx, toolName, enabled) {
|
|
1488
|
-
|
|
1571
|
+
assertActiveGeneration();
|
|
1572
|
+
await persistDisabledTools(
|
|
1573
|
+
boundWorkspace,
|
|
1574
|
+
toolName,
|
|
1575
|
+
enabled,
|
|
1576
|
+
assertGenerationOpen
|
|
1577
|
+
);
|
|
1578
|
+
assertActiveGeneration();
|
|
1489
1579
|
publishWorkspaceEvent({
|
|
1490
1580
|
type: "tool_toggled",
|
|
1491
1581
|
data: { toolName, enabled },
|
|
@@ -1494,6 +1584,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1494
1584
|
return { toolName, enabled };
|
|
1495
1585
|
},
|
|
1496
1586
|
async setWorkspaceSkillEnabled(ctx, requestedSkillName, enabled) {
|
|
1587
|
+
assertActiveGeneration();
|
|
1497
1588
|
const normalizedName = requestedSkillName.trim().toLowerCase();
|
|
1498
1589
|
const status = await getWorkspaceSkillsStatus();
|
|
1499
1590
|
const skill = status.skills.find(
|
|
@@ -1506,11 +1597,11 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1506
1597
|
"not_user_invocable"
|
|
1507
1598
|
);
|
|
1508
1599
|
}
|
|
1509
|
-
const
|
|
1510
|
-
const
|
|
1511
|
-
|
|
1600
|
+
const needsLegacyInactiveCheck = skill.level === "extension" && skill.status === "disabled" && skill.disabledReason === void 0;
|
|
1601
|
+
const disabledBySettings = needsLegacyInactiveCheck && resolveSkillSettings(loadBoundSettings(true)).disabledNames.has(
|
|
1602
|
+
normalizedName
|
|
1512
1603
|
);
|
|
1513
|
-
if (skill.level === "extension" && skill.status === "disabled" && !
|
|
1604
|
+
if (skill.level === "extension" && skill.status === "disabled" && (skill.disabledReason === "inactive_extension" || skill.disabledReason === void 0 && !disabledBySettings)) {
|
|
1514
1605
|
throw new WorkspaceSkillNotToggleableError(
|
|
1515
1606
|
skill.name,
|
|
1516
1607
|
"inactive_extension"
|
|
@@ -1519,21 +1610,23 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1519
1610
|
const persisted = await persistDisabledSkills(
|
|
1520
1611
|
boundWorkspace,
|
|
1521
1612
|
skill.name,
|
|
1522
|
-
enabled
|
|
1613
|
+
enabled,
|
|
1614
|
+
assertGenerationOpen
|
|
1523
1615
|
);
|
|
1616
|
+
assertActiveGeneration();
|
|
1524
1617
|
const channelLive = isChannelLive?.() ?? false;
|
|
1525
1618
|
let activation = channelLive ? "applied" : "deferred";
|
|
1526
1619
|
let sessionsRefreshed = 0;
|
|
1527
1620
|
let sessionsFailed = 0;
|
|
1528
1621
|
if (persisted.changed) {
|
|
1529
|
-
|
|
1530
|
-
workspaceSkillsStatusProvider?.invalidate?.(boundWorkspace);
|
|
1622
|
+
invalidateWorkspaceSkillsSnapshot();
|
|
1531
1623
|
if (channelLive) {
|
|
1532
1624
|
try {
|
|
1533
1625
|
const refreshed = await invokeWorkspaceCommand(
|
|
1534
1626
|
SERVE_CONTROL_EXT_METHODS.workspaceSkillsRefresh,
|
|
1535
|
-
{ cwd: boundWorkspace }
|
|
1627
|
+
{ cwd: boundWorkspace, reason: "settings" }
|
|
1536
1628
|
);
|
|
1629
|
+
assertActiveGeneration();
|
|
1537
1630
|
sessionsRefreshed = refreshed.sessionsRefreshed;
|
|
1538
1631
|
sessionsFailed = refreshed.sessionsFailed;
|
|
1539
1632
|
if (sessionsFailed > 0) activation = "partial";
|
|
@@ -1548,16 +1641,26 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1548
1641
|
);
|
|
1549
1642
|
}
|
|
1550
1643
|
}
|
|
1644
|
+
invalidateWorkspaceSkillsSnapshot();
|
|
1551
1645
|
}
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1646
|
+
assertActiveGeneration();
|
|
1647
|
+
const settingsChanges = persisted.settingsChanges ?? [
|
|
1648
|
+
{
|
|
1555
1649
|
key: "skills.disabled",
|
|
1556
|
-
value: persisted.disabled.length > 0 ? persisted.disabled : void 0
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1650
|
+
value: persisted.disabled.length > 0 ? persisted.disabled : void 0
|
|
1651
|
+
}
|
|
1652
|
+
];
|
|
1653
|
+
for (const change of settingsChanges) {
|
|
1654
|
+
publishWorkspaceEvent({
|
|
1655
|
+
type: "settings_changed",
|
|
1656
|
+
data: {
|
|
1657
|
+
key: change.key,
|
|
1658
|
+
value: change.value,
|
|
1659
|
+
scope: "workspace"
|
|
1660
|
+
},
|
|
1661
|
+
originatorClientId: ctx.originatorClientId
|
|
1662
|
+
});
|
|
1663
|
+
}
|
|
1561
1664
|
}
|
|
1562
1665
|
return {
|
|
1563
1666
|
skillName: skill.name,
|
|
@@ -1569,15 +1672,20 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1569
1672
|
};
|
|
1570
1673
|
},
|
|
1571
1674
|
async installWorkspaceSkill(_ctx, request) {
|
|
1675
|
+
assertActiveGeneration();
|
|
1572
1676
|
const result = await installWorkspaceSkill(
|
|
1573
1677
|
boundWorkspace,
|
|
1574
1678
|
request,
|
|
1575
|
-
skillInstallEnv?.["GH_TOKEN"] ?? skillInstallEnv?.["GITHUB_TOKEN"]
|
|
1679
|
+
skillInstallEnv?.["GH_TOKEN"] ?? skillInstallEnv?.["GITHUB_TOKEN"],
|
|
1680
|
+
assertGenerationOpen
|
|
1576
1681
|
);
|
|
1682
|
+
assertActiveGeneration();
|
|
1577
1683
|
await refreshWorkspaceSkillsAfterMutation();
|
|
1684
|
+
assertActiveGeneration();
|
|
1578
1685
|
return result;
|
|
1579
1686
|
},
|
|
1580
1687
|
async deleteWorkspaceSkill(_ctx, requestedSkillName, scope) {
|
|
1688
|
+
assertActiveGeneration();
|
|
1581
1689
|
const normalizedName = requestedSkillName.trim().toLowerCase();
|
|
1582
1690
|
const status = await getWorkspaceSkillsStatus();
|
|
1583
1691
|
const skill = status.skills.find(
|
|
@@ -1596,12 +1704,16 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1596
1704
|
boundWorkspace,
|
|
1597
1705
|
scope,
|
|
1598
1706
|
skill.name,
|
|
1599
|
-
skill.installedPath
|
|
1707
|
+
skill.installedPath,
|
|
1708
|
+
assertGenerationOpen
|
|
1600
1709
|
);
|
|
1710
|
+
assertActiveGeneration();
|
|
1601
1711
|
await refreshWorkspaceSkillsAfterMutation();
|
|
1712
|
+
assertActiveGeneration();
|
|
1602
1713
|
return result;
|
|
1603
1714
|
},
|
|
1604
1715
|
async initWorkspace(ctx, opts) {
|
|
1716
|
+
assertActiveGeneration();
|
|
1605
1717
|
const filename = contextFilename;
|
|
1606
1718
|
const target = path2.resolve(boundWorkspace, filename);
|
|
1607
1719
|
const withinWorkspace = target === boundWorkspace || target.startsWith(boundWorkspace + path2.sep);
|
|
@@ -1661,6 +1773,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1661
1773
|
if (action === "created") {
|
|
1662
1774
|
let fh;
|
|
1663
1775
|
try {
|
|
1776
|
+
assertActiveGeneration();
|
|
1664
1777
|
fh = await fs2.open(target, "wx");
|
|
1665
1778
|
} catch (err) {
|
|
1666
1779
|
const code = err?.code;
|
|
@@ -1675,6 +1788,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1675
1788
|
}
|
|
1676
1789
|
try {
|
|
1677
1790
|
await verifyParentPostOpen(target, wsCanonical, fh);
|
|
1791
|
+
assertActiveGeneration();
|
|
1678
1792
|
await fh.writeFile("", "utf8");
|
|
1679
1793
|
} finally {
|
|
1680
1794
|
await fh.close();
|
|
@@ -1682,6 +1796,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1682
1796
|
} else if (action === "overwrote") {
|
|
1683
1797
|
let overwriteFh;
|
|
1684
1798
|
try {
|
|
1799
|
+
assertActiveGeneration();
|
|
1685
1800
|
overwriteFh = await fs2.open(
|
|
1686
1801
|
target,
|
|
1687
1802
|
fsConstants.O_WRONLY | (fsConstants.O_NOFOLLOW ?? 0)
|
|
@@ -1706,11 +1821,13 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1706
1821
|
}
|
|
1707
1822
|
try {
|
|
1708
1823
|
await verifyParentPostOpen(target, wsCanonical, overwriteFh);
|
|
1824
|
+
assertActiveGeneration();
|
|
1709
1825
|
await overwriteFh.truncate(0);
|
|
1710
1826
|
} finally {
|
|
1711
1827
|
await overwriteFh.close();
|
|
1712
1828
|
}
|
|
1713
1829
|
}
|
|
1830
|
+
assertActiveGeneration();
|
|
1714
1831
|
publishWorkspaceEvent({
|
|
1715
1832
|
type: "workspace_initialized",
|
|
1716
1833
|
data: { path: target, action },
|
|
@@ -1719,6 +1836,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1719
1836
|
return { path: target, action };
|
|
1720
1837
|
},
|
|
1721
1838
|
async restartMcpServer(ctx, serverName, opts) {
|
|
1839
|
+
assertActiveGeneration();
|
|
1722
1840
|
const params = { serverName };
|
|
1723
1841
|
if (opts?.entryIndex !== void 0) {
|
|
1724
1842
|
params["entryIndex"] = opts.entryIndex;
|
|
@@ -1748,6 +1866,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1748
1866
|
}
|
|
1749
1867
|
throw err;
|
|
1750
1868
|
}
|
|
1869
|
+
assertActiveGeneration();
|
|
1751
1870
|
if ("entries" in result) {
|
|
1752
1871
|
const entries = Array.isArray(result.entries) ? result.entries : [];
|
|
1753
1872
|
if (!Array.isArray(result.entries)) {
|
|
@@ -1807,15 +1926,17 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1807
1926
|
return result;
|
|
1808
1927
|
},
|
|
1809
1928
|
async reload(ctx) {
|
|
1929
|
+
assertActiveGeneration();
|
|
1810
1930
|
if (deps.reloadDaemonEnv) {
|
|
1811
1931
|
try {
|
|
1812
|
-
await deps.reloadDaemonEnv(boundWorkspace);
|
|
1932
|
+
await deps.reloadDaemonEnv(boundWorkspace, assertGenerationOpen);
|
|
1813
1933
|
} catch (err) {
|
|
1814
1934
|
writeStderrLine(
|
|
1815
1935
|
`qwen serve: daemon reload failed: ${err instanceof Error ? err.message : String(err)}`
|
|
1816
1936
|
);
|
|
1817
1937
|
}
|
|
1818
1938
|
}
|
|
1939
|
+
assertActiveGeneration();
|
|
1819
1940
|
let childReloaded = false;
|
|
1820
1941
|
let env = {
|
|
1821
1942
|
updatedKeys: [],
|
|
@@ -1844,6 +1965,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1844
1965
|
writeStderrLine(`qwen serve: reload failed: ${childError}`);
|
|
1845
1966
|
}
|
|
1846
1967
|
}
|
|
1968
|
+
assertActiveGeneration();
|
|
1847
1969
|
publishWorkspaceEvent({
|
|
1848
1970
|
type: "settings_reloaded",
|
|
1849
1971
|
data: {
|
|
@@ -1866,9 +1988,10 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1866
1988
|
};
|
|
1867
1989
|
},
|
|
1868
1990
|
invalidateWorkspaceSkillsStatus() {
|
|
1869
|
-
|
|
1991
|
+
invalidateWorkspaceSkillsSnapshot();
|
|
1870
1992
|
},
|
|
1871
1993
|
async refreshExtensionsForAllSessions() {
|
|
1994
|
+
assertActiveGeneration();
|
|
1872
1995
|
try {
|
|
1873
1996
|
if (!refreshExtensionsForAllSessionsOnBridge) {
|
|
1874
1997
|
throw new Error("refreshExtensionsForAllSessions is not wired");
|
|
@@ -1880,7 +2003,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
1880
2003
|
);
|
|
1881
2004
|
return { refreshed: 0, failed: 1 };
|
|
1882
2005
|
} finally {
|
|
1883
|
-
|
|
2006
|
+
invalidateWorkspaceSkillsSnapshot();
|
|
1884
2007
|
}
|
|
1885
2008
|
}
|
|
1886
2009
|
};
|