@qwen-code/qwen-code 0.21.7-nightly.20260808.4ec0371e6 → 0.21.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/bundled/qc-helper/docs/configuration/settings.md +12 -8
- package/bundled/qc-helper/docs/features/commands.md +1 -1
- package/bundled/qc-helper/docs/features/hooks.md +50 -0
- package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
- package/bundled/qc-helper/docs/qwen-serve.md +1 -1
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +50 -36
- package/bundled/review/SKILL.md +24 -5
- package/chunks/{MaxSizedBox-COZBVNCI.js → MaxSizedBox-7PM6BGJ5.js} +13 -10
- package/chunks/{StandaloneSessionPicker-3OF2FS6S.js → StandaloneSessionPicker-3UQHM7GV.js} +29 -26
- package/chunks/{acp-startup-profiler-ORIQ2CCQ.js → acp-startup-profiler-B5BYAMYQ.js} +2 -2
- package/chunks/{acpAgent-3JCJ6KWG.js → acpAgent-5UWLFV6V.js} +369 -148
- package/chunks/{agent-DBSC47CD.js → agent-624T2BLO.js} +13 -10
- package/chunks/{agent-headless-ZJHZ7I3S.js → agent-headless-2EE5J2KX.js} +13 -10
- package/chunks/{bridge-NFBYT4ZI.js → bridge-JENKGFFP.js} +15 -12
- package/chunks/{ca-NYKNH222.js → ca-ZLKAB4K3.js} +6 -0
- package/chunks/{channel-management-service-LXSJXQGM.js → channel-management-service-DDWUPHMU.js} +1 -1
- package/chunks/{channel-settings-store-LABKDKSI.js → channel-settings-store-SA6JZSPH.js} +21 -18
- package/chunks/{channel-worker-group-MTW2AGT3.js → channel-worker-group-E67EN3RV.js} +2 -2
- package/chunks/{channel-worker-manager-UU6PTQSI.js → channel-worker-manager-SW4C45CF.js} +2 -2
- package/chunks/{chunk-CJXIIILK.js → chunk-2FRY5CRX.js} +1 -1
- package/chunks/{chunk-HKCYGZZ4.js → chunk-2ILAOM2I.js} +30 -13
- package/chunks/{chunk-LDY4J4G6.js → chunk-2M4K4KYS.js} +176 -119
- package/chunks/{chunk-22NBYCPD.js → chunk-3P2LV43B.js} +1 -1
- package/chunks/{chunk-XCG76UE6.js → chunk-3PY4LPJF.js} +17 -129
- package/chunks/{chunk-26ISE5EG.js → chunk-3SE7J4DR.js} +3 -3
- package/chunks/{chunk-APMRLB2H.js → chunk-3WNQOYHQ.js} +12 -12
- package/chunks/{chunk-O7VQ3F22.js → chunk-4ALIARFY.js} +1 -1
- package/chunks/{chunk-FJ6YHWHZ.js → chunk-4DU3NCHG.js} +47 -54
- package/chunks/{chunk-BGG4MBYD.js → chunk-4PYCZH2V.js} +4 -187
- package/chunks/{chunk-3HS6Y4UA.js → chunk-4WU6NY7F.js} +2 -2
- package/chunks/{chunk-JRIJOZXO.js → chunk-5ZGR6RKJ.js} +3 -3
- package/chunks/{chunk-3K7FH2KQ.js → chunk-67N6HB5H.js} +1310 -171
- package/chunks/{chunk-ZQGHESAS.js → chunk-6TR7CFXH.js} +1 -1
- package/chunks/{chunk-EZ53KMUN.js → chunk-757GB46F.js} +1 -1
- package/chunks/{chunk-5YT3Y33M.js → chunk-77QVBFCU.js} +3 -3
- package/chunks/{chunk-5PGKKSO6.js → chunk-7DVT4LVV.js} +35 -28
- package/chunks/{chunk-IMK3SJ43.js → chunk-7VUERJHS.js} +1066 -597
- package/chunks/{chunk-KPMB4JEZ.js → chunk-B52AWKBB.js} +64 -20
- package/chunks/{chunk-R2KZWK5Z.js → chunk-BF224XHL.js} +2 -2
- package/chunks/{chunk-TSYIQDG7.js → chunk-BF52U4XJ.js} +1 -1
- package/chunks/{chunk-LDUGDB5H.js → chunk-C5VWPTGT.js} +1 -1
- package/chunks/{chunk-W7U4ESW2.js → chunk-CG3WBKJK.js} +1 -1
- package/chunks/chunk-COBO5EBO.js +135 -0
- package/chunks/{chunk-ACHMWGC5.js → chunk-DQSDACD2.js} +1 -1
- package/chunks/{chunk-VT3VNFVW.js → chunk-DX5W5AON.js} +2 -2
- package/chunks/{chunk-JACAHYEN.js → chunk-E4ZBKMSF.js} +4 -4
- package/chunks/{chunk-MV7VUCIG.js → chunk-EIVICVHM.js} +4 -4
- package/chunks/{chunk-YHEEE624.js → chunk-EN2TKTFH.js} +1 -1
- package/chunks/chunk-F6WFNA7U.js +22 -0
- package/chunks/{chunk-Z6W3XDLN.js → chunk-FN6YXJOP.js} +1 -1
- package/chunks/{chunk-BJKFFPX2.js → chunk-FWBXMANW.js} +3 -3
- package/chunks/{chunk-764F335K.js → chunk-FYAXKJK7.js} +314 -63
- package/chunks/{chunk-XIDHBXUI.js → chunk-GBDINRIL.js} +3 -3
- package/chunks/{chunk-Z5ZAWED3.js → chunk-GOEVOFQI.js} +3 -3
- package/chunks/{chunk-ZKUJ4AO7.js → chunk-GQCEQPYQ.js} +3 -3
- package/chunks/{chunk-BFSQBXHV.js → chunk-GXSNGY5M.js} +399 -534
- package/chunks/{chunk-3ARO4N5G.js → chunk-HA3SAB64.js} +22 -69
- package/chunks/{chunk-3ULCB3NE.js → chunk-HV76SFIA.js} +1 -1
- package/chunks/{chunk-LMEIS6WW.js → chunk-HWX5HPUG.js} +3 -3
- package/chunks/{chunk-VLFX3L3X.js → chunk-IBYULW65.js} +6 -6
- package/chunks/{chunk-SDUDZNF4.js → chunk-IUQ52YJK.js} +1 -1
- package/chunks/{chunk-H2352CX2.js → chunk-IYES5WOT.js} +2 -2
- package/chunks/{chunk-CE5UCTKO.js → chunk-KAQCJO6Y.js} +1 -1
- package/chunks/{chunk-DPH3MUAP.js → chunk-KKDVZLGL.js} +1 -1
- package/chunks/{chunk-R574ATRM.js → chunk-M2PNLYGY.js} +41 -0
- package/chunks/{chunk-P7HUJDBZ.js → chunk-M3STHEMM.js} +11 -16
- package/chunks/{chunk-VDS2WYM5.js → chunk-NGYI5EF5.js} +2 -2
- package/chunks/{chunk-ALGGS7UH.js → chunk-NPQ5ZKRP.js} +82 -1
- package/chunks/{chunk-GUFY6D3E.js → chunk-NPUXXRJI.js} +1 -1
- package/chunks/{chunk-4Q6N3SNL.js → chunk-NVRDQFCX.js} +1 -1
- package/chunks/{chunk-77WOUGCA.js → chunk-OHKJVAKG.js} +7 -7
- package/chunks/{chunk-TAOSTUHI.js → chunk-PG62DFWD.js} +10 -10
- package/chunks/{chunk-REHWPCG2.js → chunk-PLFATELK.js} +1 -1
- package/chunks/{chunk-APNNM3JC.js → chunk-QGHSP65Z.js} +2 -2
- package/chunks/{chunk-HY2INPTA.js → chunk-QQWD7LZV.js} +4 -4
- package/chunks/{chunk-P74TZRXD.js → chunk-QXVSWG66.js} +1 -1
- package/chunks/{chunk-TX3KSSDN.js → chunk-S3Y3GBFD.js} +1 -1
- package/chunks/{chunk-B23P3YWE.js → chunk-SNRT2TJJ.js} +6 -23
- package/chunks/chunk-SR7RZ4MS.js +202 -0
- package/chunks/{chunk-F3LPXDJP.js → chunk-TE3ZAJE7.js} +13 -3
- package/chunks/{chunk-AB4A73VL.js → chunk-TKSZJ5BV.js} +1 -1
- package/chunks/{chunk-RZMGG3HP.js → chunk-U5SLIG7E.js} +1 -1
- package/chunks/chunk-UA5H3DS2.js +203 -0
- package/chunks/{chunk-JSJTZ6GO.js → chunk-VWMUDKLC.js} +3 -3
- package/chunks/{chunk-RGTB44BO.js → chunk-VXZ5HAOV.js} +1 -1
- package/chunks/{chunk-BCMJPTXV.js → chunk-WG6542MA.js} +1 -1
- package/chunks/{chunk-AG3P2RES.js → chunk-WV5J6Q6N.js} +1 -1
- package/chunks/{chunk-MIA37QO3.js → chunk-XHD7CRP2.js} +2 -2
- package/chunks/{chunk-KKRGVSHC.js → chunk-XZKQT2B2.js} +4 -4
- package/chunks/{chunk-4QJJHIZ5.js → chunk-Y4TETC74.js} +5 -5
- package/chunks/{chunk-QKJT5K4Q.js → chunk-YEF7XEO2.js} +3 -3
- package/chunks/{chunk-UKAYEQDU.js → chunk-YHJFF7KH.js} +131 -38
- package/chunks/{chunk-64YLXLMY.js → chunk-YOM7DEGB.js} +2 -2
- package/chunks/{chunk-BN3OROB3.js → chunk-ZCLLJARV.js} +9 -9
- package/chunks/{chunk-RFA6VDCR.js → chunk-ZHA242R4.js} +2 -2
- package/chunks/{chunk-L4OW63GW.js → chunk-ZPLALRXZ.js} +17 -9
- package/chunks/{computer-use-QLJ27OCZ.js → computer-use-ESQYJ3JY.js} +13 -10
- package/chunks/{config-utils-KIEXWA4F.js → config-utils-XQHBJP7G.js} +2 -2
- package/chunks/{contextCommand-JDTOJRBO.js → contextCommand-CX3YF4ZE.js} +15 -12
- package/chunks/{core-runtime-MZIAVYQC.js → core-runtime-DIAU7JMG.js} +13 -10
- package/chunks/{create-sub-session-YBBCNSHE.js → create-sub-session-HDPD6HOA.js} +13 -10
- package/chunks/{daemon-SCTQMM7Z.js → daemon-VZBGJUNL.js} +30 -0
- package/chunks/{daemon-status-provider-BZ7RD4ZJ.js → daemon-status-provider-H6O4UQ4F.js} +19 -16
- package/chunks/{daemon-trust-policy-2E4C3M7S.js → daemon-trust-policy-BNUXG6MT.js} +20 -17
- package/chunks/{daemon-trust-policy-monitor-UYLFH6RW.js → daemon-trust-policy-monitor-E4EQ7GF4.js} +20 -17
- package/chunks/{de-VL76CPLV.js → de-LIW4XVLN.js} +5 -0
- package/chunks/{deferred-core-runtime-6XZYMJZB.js → deferred-core-runtime-CBMSHPAU.js} +13 -10
- package/chunks/{dist-BATY7GI4.js → dist-EEEQGCZA.js} +731 -136
- package/chunks/{dist-26RK5XZO.js → dist-MKX5OSFF.js} +4 -3
- package/chunks/{earlyInputCapture-LATQCGDC.js → earlyInputCapture-UIOP7OIN.js} +13 -10
- package/chunks/{edit-72DP57CD.js → edit-ITMZYFKA.js} +13 -10
- package/chunks/{en-IRJ2WN5T.js → en-SY5GTIGX.js} +6 -0
- package/chunks/{enter-worktree-B4FY2ZPP.js → enter-worktree-S4PL5UV6.js} +13 -10
- package/chunks/{enterPlanMode-TQBWGCPL.js → enterPlanMode-YV52NNJT.js} +13 -10
- package/chunks/{environment-MOGZGZDS.js → environment-NGOWPRZV.js} +17 -14
- package/chunks/{errors-PGON5GH7.js → errors-BU26DTDX.js} +15 -12
- package/chunks/{exit-worktree-EYUD4YP2.js → exit-worktree-XRM6LH5F.js} +13 -10
- package/chunks/{exitPlanMode-4Q7BSQXR.js → exitPlanMode-ZLI5F7KR.js} +13 -10
- package/chunks/{fast-path-WI7D5MER.js → fast-path-UJWORIED.js} +3 -3
- package/chunks/{fast-path-settings-YBRL24DB.js → fast-path-settings-37WQD5B2.js} +6 -3
- package/chunks/{fr-GK3HQYVB.js → fr-RQFO7U4P.js} +5 -0
- package/chunks/{gemini-ZXURGM6Y.js → gemini-ZSKNDUMU.js} +55 -48
- package/chunks/{geminiContentGenerator-EOODO75Y.js → geminiContentGenerator-YGEXOEKD.js} +1 -1
- package/chunks/{glob-QNRIUOS6.js → glob-7KZG44BR.js} +13 -10
- package/chunks/{goal-tools-QSYW65HV.js → goal-tools-PXWN5VK3.js} +3 -1
- package/chunks/{grep-56MTW67B.js → grep-6ZFC7RJ5.js} +13 -10
- package/chunks/{handleAutoUpdate-XGFIPVT4.js → handleAutoUpdate-KSEL3TQS.js} +17 -14
- package/chunks/{i18n-RZB35L4B.js → i18n-ZIUXBW5V.js} +14 -11
- package/chunks/{image-gen-OE2EEKN3.js → image-gen-AUIZJJNK.js} +6 -4
- package/chunks/{initializer-YPVMTMKD.js → initializer-7AHY3N6Q.js} +20 -17
- package/chunks/{installationInfo-ZTMTMYNW.js → installationInfo-VGBXMYLY.js} +14 -11
- package/chunks/{ja-3FA46IKD.js → ja-KOZKHJHZ.js} +5 -0
- package/chunks/{list-NIW3WID5.js → list-PSFKQHLB.js} +23 -20
- package/chunks/{loadedSettingsAdapter-VSLILTOZ.js → loadedSettingsAdapter-FTMRCTOF.js} +20 -17
- package/chunks/{loggingContentGenerator-KFZYVAGV.js → loggingContentGenerator-MZAN52UV.js} +5 -3
- package/chunks/{managed-npm-update-WHTA2K5V.js → managed-npm-update-O4NHK45X.js} +14 -11
- package/chunks/{mcp-7KGK3CS3.js → mcp-6CFP2AYQ.js} +20 -17
- package/chunks/{monitor-FDWEJQWP.js → monitor-DAKD6OU4.js} +13 -10
- package/chunks/{nonInteractiveCli-2MVJ6TCS.js → nonInteractiveCli-RC7VIUZL.js} +49 -44
- package/chunks/{notebook-edit-ZUVK2XWE.js → notebook-edit-474DPMRL.js} +13 -10
- package/chunks/{openaiContentGenerator-TNLWOPH5.js → openaiContentGenerator-2NFY2MWO.js} +6 -3
- package/chunks/{pidfile-BB6SKPH2.js → pidfile-KBFVDNQP.js} +13 -10
- package/chunks/{processUtils-WKHJOPDH.js → processUtils-6GRYH4Y3.js} +2 -2
- package/chunks/{pt-3AOBKPIJ.js → pt-U6AOCTMF.js} +5 -0
- package/chunks/{qwenContentGenerator-FZS2DYF7.js → qwenContentGenerator-KAHU6IZY.js} +14 -11
- package/chunks/{qwenOAuth2-UYMYRXBB.js → qwenOAuth2-RRQTCP4W.js} +6 -4
- package/chunks/{read-file-FMTE6LPA.js → read-file-3M6WXDXP.js} +4 -2
- package/chunks/{resumeHistoryUtils-Z34RCZFF.js → resumeHistoryUtils-D6TAY3HX.js} +16 -13
- package/chunks/{ripGrep-DUIYUZGM.js → ripGrep-PLPENT3E.js} +13 -10
- package/chunks/{ru-VJRAMC4W.js → ru-CMX4UMYP.js} +5 -0
- package/chunks/{run-qwen-serve-KOHHR3F4.js → run-qwen-serve-ZAFIJKJC.js} +93 -40
- package/chunks/{runtime-K4NTZSAU.js → runtime-ZED7CYOZ.js} +23 -20
- package/chunks/{scheduler-6G6AMURS.js → scheduler-MD3AL2W5.js} +13 -10
- package/chunks/{serve-NMG2TM5K.js → serve-E3VUDRZN.js} +20 -17
- package/chunks/{server-FS7KDELS.js → server-OWMEMAKR.js} +381 -192
- package/chunks/{session-XZADUVKJ.js → session-HZ57QK7K.js} +141 -81
- package/chunks/{settings-G75R6FOA.js → settings-V7BR3RKP.js} +19 -16
- package/chunks/{shell-3D3PMQHE.js → shell-23OMNMW6.js} +13 -10
- package/chunks/{skill-TSEYMVQ2.js → skill-6HBDYZRS.js} +4 -2
- package/chunks/{skill-settings-HJC2CPBJ.js → skill-settings-HWJLTU7M.js} +19 -16
- package/chunks/{spawnChannel-YWCN74G5.js → spawnChannel-N6KKUW5B.js} +13 -10
- package/chunks/{standalone-update-HLYOLX6V.js → standalone-update-QGIKHATD.js} +15 -12
- package/chunks/{startInteractiveUI-ROUIQ5KU.js → startInteractiveUI-GX2CRL42.js} +269 -118
- package/chunks/{team-create-OTP5SSB2.js → team-create-CFFKU7KL.js} +13 -10
- package/chunks/{team-plan-approval-TQX5TMXU.js → team-plan-approval-6EFOKR6A.js} +13 -10
- package/chunks/{terminal-image-renderer-KF3GKNWW.js → terminal-image-renderer-TLDNACQY.js} +13 -10
- package/chunks/{theme-manager-XVWAAGAM.js → theme-manager-5LJ3H7VO.js} +13 -10
- package/chunks/{tool-search-7N4D4O56.js → tool-search-UJV3A24H.js} +4 -2
- package/chunks/{total-session-admission-ZQ4VKIRW.js → total-session-admission-D63QYXGO.js} +15 -12
- package/chunks/{trustedFolders-4XYFPWVV.js → trustedFolders-KZCOB53W.js} +17 -12
- package/chunks/{update-relaunch-L4GSBLUU.js → update-relaunch-IFILM3SA.js} +5 -5
- package/chunks/{updateCheck-PCUTVRFE.js → updateCheck-YZ2CRCFC.js} +16 -13
- package/chunks/{useAutoAcceptIndicator-WMXY7MND.js → useAutoAcceptIndicator-AXEVNA3Q.js} +22 -19
- package/chunks/{validateNonInterActiveAuth-5S3U2D56.js → validateNonInterActiveAuth-3WTOJFWA.js} +44 -41
- package/chunks/{version-P57IQU2T.js → version-GXK7OHZY.js} +1 -1
- package/chunks/{web-fetch-5ZLLLCDD.js → web-fetch-ILB4GAVR.js} +10 -6
- package/chunks/{web-search-NELKANTW.js → web-search-HKRPGPZZ.js} +5 -3
- package/chunks/{workflow-RXKBF3LO.js → workflow-FXIPRQQA.js} +735 -134
- package/chunks/{workspace-providers-status-HAEMNAWC.js → workspace-providers-status-NYHC7HSR.js} +22 -19
- package/chunks/{workspace-registration-store-U3U3YM6V.js → workspace-registration-store-AKEB7OMW.js} +1 -1
- package/chunks/{workspace-registry-ZFP33GVB.js → workspace-registry-CDAS5TVZ.js} +15 -12
- package/chunks/{workspace-service-QMISJBMA.js → workspace-service-PAMUKMAV.js} +23 -20
- package/chunks/{workspace-skills-status-K7EOUGXL.js → workspace-skills-status-YQSHCCMS.js} +20 -17
- package/chunks/{workspace-trust-reconciler-BFPKULDZ.js → workspace-trust-reconciler-RPTXOIY2.js} +22 -19
- package/chunks/{write-file-2F76RRFE.js → write-file-CGS57TS4.js} +13 -10
- package/chunks/{zh-ARWDLDLR.js → zh-AGL2FVBI.js} +6 -0
- package/chunks/{zh-TW-Y4RGI3P7.js → zh-TW-KI66MHQY.js} +6 -0
- package/chunks/{zoom-image-DPR22XWY.js → zoom-image-E7D72GYV.js} +4 -2
- package/cli.js +13 -13
- package/locales/ca.js +10 -0
- package/locales/de.js +9 -0
- package/locales/en.js +10 -0
- package/locales/fr.js +9 -0
- package/locales/ja.js +9 -0
- package/locales/pt.js +9 -0
- package/locales/ru.js +9 -0
- package/locales/zh-TW.js +10 -0
- package/locales/zh.js +10 -0
- package/package.json +3 -3
- package/web-shell/assets/{arc-CunFPPcQ.js → arc-DybZaz32.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-D3SqCgeM.js → architectureDiagram-3BPJPVTR-jN3qBd19.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CPRx90S_.js → blockDiagram-GPEHLZMM-Ct5DZPrj.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CahP9Ue4.js → c4Diagram-AAUBKEIU-CUAFMlUG.js} +1 -1
- package/web-shell/assets/channel-BMwLrwLW.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-DckIWZ12.js → chunk-2J33WTMH-CuV8n90B.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-D2Kfctyn.js → chunk-4BX2VUAB-BUzl_kls.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DkI11FTX.js → chunk-55IACEB6-BnDBLX6A.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-rR-TSCIi.js → chunk-727SXJPM-B83uTOjm.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DFGKcGRO.js → chunk-AQP2D5EJ-DM3HLgpT.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CjWqcTPE.js → chunk-FMBD7UC4-CSQ5hgyb.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-RXe-87UV.js → chunk-ND2GUHAM-BWOF4SxX.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-Dz0c_Yrn.js → chunk-QZHKN3VN-BsOH9LMi.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-ZHF0-jvV.js → cose-bilkent-S5V4N54A-IENqH2iJ.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-7Umz_ygJ.js → dagre-BM42HDAG--dyzDTGo.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-DomN8nxq.js → diagram-2AECGRRQ-BE7Dcqof.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-eebvj2OL.js → diagram-5GNKFQAL-Cr8-5OTj.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-IR1mmn9d.js → diagram-KO2AKTUF-Bzey3uAY.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-CKysx5KF.js → diagram-LMA3HP47-sErl28Xb.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-cBy5puHn.js → diagram-OG6HWLK6-Dq30ATIo.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-B5RJagPG.js → erDiagram-TEJ5UH35-BkCoEfVW.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-CfHgDmPg.js → flowDiagram-I6XJVG4X-DHwO0rrI.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-DUfFF5nb.js → ganttDiagram-6RSMTGT7-s7vAPxWq.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-M9dt57k5.js → gitGraphDiagram-PVQCEYII-CQxhwPOU.js} +1 -1
- package/web-shell/assets/{index-B8e-CkuC.css → index-Bckpjr-I.css} +1 -1
- package/web-shell/assets/{index-CKjO4myk.js → index-CF4wApWp.js} +1 -1
- package/web-shell/assets/{index-Dc-fTO0V.js → index-DwEr9HEW.js} +316 -316
- package/web-shell/assets/{infoDiagram-5YYISTIA-CTKMmIro.js → infoDiagram-5YYISTIA-BnFrD0bq.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DJIJDP4s.js → ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DgRnvn6S.js → journeyDiagram-JHISSGLW-CyGAhsxi.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-VUwO8yrg.js → kanban-definition-UN3LZRKU-CbsK5akB.js} +1 -1
- package/web-shell/assets/{linear-BCvgV5I_.js → linear-cQsF4P8D.js} +1 -1
- package/web-shell/assets/{mermaid.core-mv_kVV6q.js → mermaid.core-Z4HVqrKY.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-sfnjMlOd.js → mindmap-definition-RKZ34NQL-CYnrBo_f.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BlhICse4.js → pieDiagram-4H26LBE5-CBzOfhrs.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-BgTQzwen.js → quadrantDiagram-W4KKPZXB-D4LK1Ebn.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CZ-FTrrN.js → requirementDiagram-4Y6WPE33-Bzti2Lcj.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-G5Wp_jn3.js → sankeyDiagram-5OEKKPKP-yTBw5Z2s.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-C8MKZ3i1.js → sequenceDiagram-3UESZ5HK-D07UVRiZ.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-Bo0ZDm7y.js → stateDiagram-AJRCARHV-UE_lHsTn.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-M3L9E01f.js → timeline-definition-PNZ67QCA-DRvYdiTs.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DD4eHCrm.js → vennDiagram-CIIHVFJN-CQLIXs0u.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-DNEL_3g4.js → wardley-L42UT6IY-JZz_Xqse.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-q484OoqI.js → wardleyDiagram-YWT4CUSO--i7BiJwB.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-4mcNt1Yg.js → xychartDiagram-2RQKCTM6-Bkc-bW0S.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-ALFTV7GA.js +0 -92
- package/web-shell/assets/channel-zbv7GWAw.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-DSjLkJJZ.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DSjLkJJZ.js +0 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-31TSCPcH.js +0 -1
|
@@ -28,6 +28,16 @@ import {
|
|
|
28
28
|
createIdleWorkspaceHooksStatus
|
|
29
29
|
} from "./chunk-NLREQJFK.js";
|
|
30
30
|
import {
|
|
31
|
+
ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM,
|
|
32
|
+
ACTIVE_WORK_CLOSE_TIMEOUT_MS,
|
|
33
|
+
ACTIVE_WORK_HEARTBEAT_INTERVAL_MS,
|
|
34
|
+
ACTIVE_WORK_HEARTBEAT_META_KEY,
|
|
35
|
+
ACTIVE_WORK_HEARTBEAT_VERSION,
|
|
36
|
+
ACTIVE_WORK_HOLD_CATEGORIES,
|
|
37
|
+
ACTIVE_WORK_MAX_SESSION_HOLDS,
|
|
38
|
+
ACTIVE_WORK_MAX_SNAPSHOT_SESSIONS,
|
|
39
|
+
ACTIVE_WORK_NOTIFICATION_METHOD,
|
|
40
|
+
ACTIVE_WORK_STALE_INTERVALS,
|
|
31
41
|
CHANNEL_STARTUP_PROFILE_META_KEY,
|
|
32
42
|
CHANNEL_STARTUP_PROFILE_VERSION,
|
|
33
43
|
DAEMON_CHANNEL_DELIVERY_META_KEY,
|
|
@@ -44,8 +54,9 @@ import {
|
|
|
44
54
|
TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD,
|
|
45
55
|
TODO_STOP_GUARD_QUEUE_RELEASE_METHOD,
|
|
46
56
|
WORKTREE_MCP_DEFER_META_KEY,
|
|
57
|
+
clampActiveWorkIntervalMs,
|
|
47
58
|
isValidTrustedModelPrompt
|
|
48
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-M2PNLYGY.js";
|
|
49
60
|
import {
|
|
50
61
|
BranchWhilePromptActiveError,
|
|
51
62
|
CancelSentinelCollisionError,
|
|
@@ -100,7 +111,7 @@ import {
|
|
|
100
111
|
metadataBudgetBytes,
|
|
101
112
|
normalizeSnapshotPayload,
|
|
102
113
|
stableSessionArtifactId
|
|
103
|
-
} from "./chunk-
|
|
114
|
+
} from "./chunk-GXSNGY5M.js";
|
|
104
115
|
import {
|
|
105
116
|
DAEMON_TRACEPARENT_META_KEY,
|
|
106
117
|
DAEMON_TRACESTATE_META_KEY
|
|
@@ -109,7 +120,7 @@ import {
|
|
|
109
120
|
INVOCATION_CONTEXT_META_KEY,
|
|
110
121
|
PRIVATE_ACP_CAPABILITY_ENV,
|
|
111
122
|
PRIVATE_PARENT_CAPABILITY_META_KEY
|
|
112
|
-
} from "./chunk-
|
|
123
|
+
} from "./chunk-3PY4LPJF.js";
|
|
113
124
|
import {
|
|
114
125
|
init_esbuild_shims
|
|
115
126
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -1580,6 +1591,42 @@ var MultiClientPermissionMediator = class {
|
|
|
1580
1591
|
};
|
|
1581
1592
|
|
|
1582
1593
|
// packages/acp-bridge/src/bridgeClient.ts
|
|
1594
|
+
function parseActiveWorkSnapshot(params) {
|
|
1595
|
+
const seq = params["seq"];
|
|
1596
|
+
const sessions = params["sessions"];
|
|
1597
|
+
if (params["v"] !== ACTIVE_WORK_HEARTBEAT_VERSION || typeof seq !== "number" || !Number.isSafeInteger(seq) || seq <= 0 || !Array.isArray(sessions) || sessions.length > ACTIVE_WORK_MAX_SNAPSHOT_SESSIONS) {
|
|
1598
|
+
return void 0;
|
|
1599
|
+
}
|
|
1600
|
+
const parsed = [];
|
|
1601
|
+
for (const raw of sessions) {
|
|
1602
|
+
if (typeof raw !== "object" || raw === null) return void 0;
|
|
1603
|
+
const entry = raw;
|
|
1604
|
+
const sessionId = entry["sessionId"];
|
|
1605
|
+
const holds = entry["holds"];
|
|
1606
|
+
if (typeof sessionId !== "string" || !Array.isArray(holds) || holds.length > ACTIVE_WORK_MAX_SESSION_HOLDS) {
|
|
1607
|
+
return void 0;
|
|
1608
|
+
}
|
|
1609
|
+
const parsedHolds = [];
|
|
1610
|
+
for (const rawHold of holds) {
|
|
1611
|
+
if (typeof rawHold !== "object" || rawHold === null) return void 0;
|
|
1612
|
+
const hold = rawHold;
|
|
1613
|
+
const category = hold["category"];
|
|
1614
|
+
const id = hold["id"];
|
|
1615
|
+
if (typeof id !== "string" || typeof category !== "string" || !ACTIVE_WORK_HOLD_CATEGORIES.includes(
|
|
1616
|
+
category
|
|
1617
|
+
)) {
|
|
1618
|
+
return void 0;
|
|
1619
|
+
}
|
|
1620
|
+
parsedHolds.push({
|
|
1621
|
+
category,
|
|
1622
|
+
id
|
|
1623
|
+
});
|
|
1624
|
+
}
|
|
1625
|
+
parsed.push({ sessionId, holds: parsedHolds });
|
|
1626
|
+
}
|
|
1627
|
+
return { v: ACTIVE_WORK_HEARTBEAT_VERSION, seq, sessions: parsed };
|
|
1628
|
+
}
|
|
1629
|
+
__name(parseActiveWorkSnapshot, "parseActiveWorkSnapshot");
|
|
1583
1630
|
var PUBLISH_ARTIFACT_TOOL_NAME = "artifact";
|
|
1584
1631
|
var MAX_CHANNEL_DELIVERY_TEXT_CHARS = 1e5;
|
|
1585
1632
|
var MAX_CHANNEL_DELIVERY_FIELD_CHARS = 2048;
|
|
@@ -1840,7 +1887,7 @@ function sliceLineRange(content, startLine, endLine) {
|
|
|
1840
1887
|
}
|
|
1841
1888
|
__name(sliceLineRange, "sliceLineRange");
|
|
1842
1889
|
var BridgeClient = class {
|
|
1843
|
-
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender, ownsSession = () => true, onTokenUsage, onCreateSubSession, onGenerationEvent, onWorkspaceGenerationEvent, onChannelDelivery, hasSessionSpawnInFlight = () => false, getLiveScreenContextCaptureHandler = () => void 0, getLiveTaskToolRequestHandler = () => void 0, getLiveSpeakToUserHandler = () => void 0, externalToolGuard) {
|
|
1890
|
+
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender, ownsSession = () => true, onTokenUsage, onCreateSubSession, onGenerationEvent, onWorkspaceGenerationEvent, onChannelDelivery, hasSessionSpawnInFlight = () => false, getLiveScreenContextCaptureHandler = () => void 0, getLiveTaskToolRequestHandler = () => void 0, getLiveSpeakToUserHandler = () => void 0, externalToolGuard, onActiveWork) {
|
|
1844
1891
|
this.resolveEntry = resolveEntry;
|
|
1845
1892
|
this.resolvePendingRestoreEvents = resolvePendingRestoreEvents;
|
|
1846
1893
|
this.mediator = mediator;
|
|
@@ -1861,6 +1908,7 @@ var BridgeClient = class {
|
|
|
1861
1908
|
this.getLiveTaskToolRequestHandler = getLiveTaskToolRequestHandler;
|
|
1862
1909
|
this.getLiveSpeakToUserHandler = getLiveSpeakToUserHandler;
|
|
1863
1910
|
this.externalToolGuard = externalToolGuard;
|
|
1911
|
+
this.onActiveWork = onActiveWork;
|
|
1864
1912
|
}
|
|
1865
1913
|
static {
|
|
1866
1914
|
__name(this, "BridgeClient");
|
|
@@ -2581,6 +2629,19 @@ var BridgeClient = class {
|
|
|
2581
2629
|
* forward-compat.
|
|
2582
2630
|
*/
|
|
2583
2631
|
async extNotification(method, params) {
|
|
2632
|
+
if (method === ACTIVE_WORK_NOTIFICATION_METHOD) {
|
|
2633
|
+
const snapshot = parseActiveWorkSnapshot(params);
|
|
2634
|
+
if (snapshot) {
|
|
2635
|
+
this.onActiveWork?.({
|
|
2636
|
+
v: ACTIVE_WORK_HEARTBEAT_VERSION,
|
|
2637
|
+
seq: snapshot.seq,
|
|
2638
|
+
sessions: snapshot.sessions.filter(
|
|
2639
|
+
(session) => this.ownsSession(session.sessionId)
|
|
2640
|
+
)
|
|
2641
|
+
});
|
|
2642
|
+
}
|
|
2643
|
+
return;
|
|
2644
|
+
}
|
|
2584
2645
|
if (method === "_qwencode/end_turn") {
|
|
2585
2646
|
const sessionId2 = params["sessionId"];
|
|
2586
2647
|
const reason = params["reason"];
|
|
@@ -6207,6 +6268,149 @@ function createAcpSessionBridge(opts) {
|
|
|
6207
6268
|
lastActivityTimestamp = Date.now();
|
|
6208
6269
|
}
|
|
6209
6270
|
__name(touchActivity, "touchActivity");
|
|
6271
|
+
function entryHasLocalWork(entry) {
|
|
6272
|
+
return entry.pendingPromptCount > 0 || entry.pendingAgentNotificationCount > 0;
|
|
6273
|
+
}
|
|
6274
|
+
__name(entryHasLocalWork, "entryHasLocalWork");
|
|
6275
|
+
function childHoldsAreFresh(entry, capability) {
|
|
6276
|
+
if (entry.childHoldsAt === null) return false;
|
|
6277
|
+
return Date.now() - entry.childHoldsAt <= capability.intervalMs * ACTIVE_WORK_STALE_INTERVALS;
|
|
6278
|
+
}
|
|
6279
|
+
__name(childHoldsAreFresh, "childHoldsAreFresh");
|
|
6280
|
+
function childReportsHeldWork(entry) {
|
|
6281
|
+
const owner = channelInfoForEntry(entry);
|
|
6282
|
+
if (!owner?.activeWork) return false;
|
|
6283
|
+
if (!childHoldsAreFresh(entry, owner.activeWork)) return false;
|
|
6284
|
+
return entry.childHolds !== null && entry.childHolds.size > 0;
|
|
6285
|
+
}
|
|
6286
|
+
__name(childReportsHeldWork, "childReportsHeldWork");
|
|
6287
|
+
function childWorkIsUnknown(entry) {
|
|
6288
|
+
const owner = channelInfoForEntry(entry);
|
|
6289
|
+
if (!owner?.activeWork) return false;
|
|
6290
|
+
return !childHoldsAreFresh(entry, owner.activeWork);
|
|
6291
|
+
}
|
|
6292
|
+
__name(childWorkIsUnknown, "childWorkIsUnknown");
|
|
6293
|
+
function entryHasActiveWork(entry) {
|
|
6294
|
+
return entryHasLocalWork(entry) || childReportsHeldWork(entry) || childWorkIsUnknown(entry);
|
|
6295
|
+
}
|
|
6296
|
+
__name(entryHasActiveWork, "entryHasActiveWork");
|
|
6297
|
+
function entryIsAutoCloseCandidate(entry) {
|
|
6298
|
+
if (byId.get(entry.sessionId) !== entry) return false;
|
|
6299
|
+
if (isClosingOrAuthorizingClose(entry)) return false;
|
|
6300
|
+
if (entry.events.subscriberCount > 0) return false;
|
|
6301
|
+
if (entryHasLocalWork(entry)) return false;
|
|
6302
|
+
const owner = channelInfoForEntry(entry);
|
|
6303
|
+
if (owner?.pendingRestoreIds.has(entry.sessionId)) return false;
|
|
6304
|
+
return !childReportsHeldWork(entry);
|
|
6305
|
+
}
|
|
6306
|
+
__name(entryIsAutoCloseCandidate, "entryIsAutoCloseCandidate");
|
|
6307
|
+
function isClosingOrAuthorizingClose(entry) {
|
|
6308
|
+
return entry.closing || entry.activeWorkCloseInFlight;
|
|
6309
|
+
}
|
|
6310
|
+
__name(isClosingOrAuthorizingClose, "isClosingOrAuthorizingClose");
|
|
6311
|
+
async function maybeCloseIdleSession(entry, reason) {
|
|
6312
|
+
if (!entryIsAutoCloseCandidate(entry)) return;
|
|
6313
|
+
if (entry.spawnOwnerWantedKill && entry.attachCount === 0) {
|
|
6314
|
+
await bridgeApi.killSession(entry.sessionId).catch(() => {
|
|
6315
|
+
});
|
|
6316
|
+
return;
|
|
6317
|
+
}
|
|
6318
|
+
if (entry.clientIds.size > 0) return;
|
|
6319
|
+
await closeIfChildUnheld(entry, {
|
|
6320
|
+
trigger: reason,
|
|
6321
|
+
closeReason: "last_client_detached"
|
|
6322
|
+
});
|
|
6323
|
+
}
|
|
6324
|
+
__name(maybeCloseIdleSession, "maybeCloseIdleSession");
|
|
6325
|
+
async function closeIfChildUnheld(entry, opts2) {
|
|
6326
|
+
entry.activeWorkCloseInFlight = true;
|
|
6327
|
+
try {
|
|
6328
|
+
if (!await confirmChildUnheld(entry)) return;
|
|
6329
|
+
if (byId.get(entry.sessionId) !== entry) return;
|
|
6330
|
+
await closeSessionImpl(entry.sessionId, void 0, {
|
|
6331
|
+
reason: opts2.closeReason
|
|
6332
|
+
}).catch((err) => {
|
|
6333
|
+
writeStderrLine(
|
|
6334
|
+
`qwen serve: deferred close (${opts2.trigger}) failed for ${JSON.stringify(entry.sessionId)}: ${err instanceof Error ? err.stack ?? err.message : String(err)}`
|
|
6335
|
+
);
|
|
6336
|
+
});
|
|
6337
|
+
} finally {
|
|
6338
|
+
entry.activeWorkCloseInFlight = false;
|
|
6339
|
+
}
|
|
6340
|
+
}
|
|
6341
|
+
__name(closeIfChildUnheld, "closeIfChildUnheld");
|
|
6342
|
+
async function confirmChildUnheld(entry) {
|
|
6343
|
+
const info = channelInfoForEntry(entry);
|
|
6344
|
+
if (!info?.activeWork) return true;
|
|
6345
|
+
if (info.isDying) return false;
|
|
6346
|
+
try {
|
|
6347
|
+
const response = await withTimeout(
|
|
6348
|
+
entry.connection.extMethod(SERVE_CONTROL_EXT_METHODS.sessionClose, {
|
|
6349
|
+
sessionId: entry.sessionId,
|
|
6350
|
+
[ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM]: true
|
|
6351
|
+
}),
|
|
6352
|
+
ACTIVE_WORK_CLOSE_TIMEOUT_MS,
|
|
6353
|
+
SERVE_CONTROL_EXT_METHODS.sessionClose
|
|
6354
|
+
);
|
|
6355
|
+
if (response["closed"] === true) {
|
|
6356
|
+
return true;
|
|
6357
|
+
}
|
|
6358
|
+
const holds = response["holds"];
|
|
6359
|
+
if (Array.isArray(holds)) {
|
|
6360
|
+
const adopted = /* @__PURE__ */ new Map();
|
|
6361
|
+
for (const hold of holds) {
|
|
6362
|
+
if (typeof hold !== "object" || hold === null) continue;
|
|
6363
|
+
const record = hold;
|
|
6364
|
+
const id = record["id"];
|
|
6365
|
+
const category = record["category"];
|
|
6366
|
+
if (typeof id === "string" && typeof category === "string" && ACTIVE_WORK_HOLD_CATEGORIES.includes(
|
|
6367
|
+
category
|
|
6368
|
+
)) {
|
|
6369
|
+
adopted.set(id, category);
|
|
6370
|
+
}
|
|
6371
|
+
}
|
|
6372
|
+
entry.childHolds = adopted;
|
|
6373
|
+
entry.childHoldsAt = Date.now();
|
|
6374
|
+
}
|
|
6375
|
+
return false;
|
|
6376
|
+
} catch (err) {
|
|
6377
|
+
writeStderrLine(
|
|
6378
|
+
`qwen serve: close-if-unheld for session ${JSON.stringify(entry.sessionId)} did not resolve (${err instanceof Error ? err.message : String(err)}); leaving it in place for the next snapshot to settle`
|
|
6379
|
+
);
|
|
6380
|
+
return false;
|
|
6381
|
+
}
|
|
6382
|
+
}
|
|
6383
|
+
__name(confirmChildUnheld, "confirmChildUnheld");
|
|
6384
|
+
function applyActiveWorkSnapshot(info, snapshot) {
|
|
6385
|
+
if (!info.activeWork || info.isDying) return;
|
|
6386
|
+
if (snapshot.seq <= info.activeWork.seq) return;
|
|
6387
|
+
info.activeWork.seq = snapshot.seq;
|
|
6388
|
+
const now = Date.now();
|
|
6389
|
+
const reported = /* @__PURE__ */ new Map();
|
|
6390
|
+
for (const session of snapshot.sessions) {
|
|
6391
|
+
const holds = /* @__PURE__ */ new Map();
|
|
6392
|
+
for (const hold of session.holds) holds.set(hold.id, hold.category);
|
|
6393
|
+
reported.set(session.sessionId, holds);
|
|
6394
|
+
}
|
|
6395
|
+
for (const sessionId of Array.from(info.sessionIds)) {
|
|
6396
|
+
const entry = byId.get(sessionId);
|
|
6397
|
+
if (!entry || entry.channel !== info.channel) continue;
|
|
6398
|
+
const holds = reported.get(sessionId) ?? /* @__PURE__ */ new Map();
|
|
6399
|
+
const previouslyHeld = entry.childHolds ? entry.childHolds.size > 0 : void 0;
|
|
6400
|
+
entry.childHolds = holds;
|
|
6401
|
+
entry.childHoldsAt = now;
|
|
6402
|
+
if (previouslyHeld !== void 0 && previouslyHeld !== holds.size > 0) {
|
|
6403
|
+
touchActivity();
|
|
6404
|
+
}
|
|
6405
|
+
if (holds.size === 0) {
|
|
6406
|
+
void maybeCloseIdleSession(
|
|
6407
|
+
entry,
|
|
6408
|
+
reported.has(sessionId) ? "child_idle" : "child_dropped"
|
|
6409
|
+
);
|
|
6410
|
+
}
|
|
6411
|
+
}
|
|
6412
|
+
}
|
|
6413
|
+
__name(applyActiveWorkSnapshot, "applyActiveWorkSnapshot");
|
|
6210
6414
|
function settleActivePromptState(entry, promptId) {
|
|
6211
6415
|
if (entry.activePromptId !== promptId) return;
|
|
6212
6416
|
delete entry.activePromptId;
|
|
@@ -6335,21 +6539,17 @@ function createAcpSessionBridge(opts) {
|
|
|
6335
6539
|
if (shuttingDown) return;
|
|
6336
6540
|
const now = Date.now();
|
|
6337
6541
|
for (const [id, entry] of byId) {
|
|
6338
|
-
if (entry
|
|
6339
|
-
if (entry.events.subscriberCount > 0) continue;
|
|
6542
|
+
if (!entryIsAutoCloseCandidate(entry)) continue;
|
|
6340
6543
|
const lastActive = entry.sessionLastSeenAt ?? Date.parse(entry.createdAt);
|
|
6341
6544
|
const idle = now - lastActive;
|
|
6342
6545
|
if (idle < sessionIdleTimeoutMs) continue;
|
|
6343
6546
|
writeStderrLine(
|
|
6344
6547
|
`qwen serve: reaping idle session ${JSON.stringify(id)} (idle for ${Math.round(idle / 1e3)}s, threshold ${Math.round(sessionIdleTimeoutMs / 1e3)}s)`
|
|
6345
6548
|
);
|
|
6346
|
-
void
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6350
|
-
);
|
|
6351
|
-
}
|
|
6352
|
-
);
|
|
6549
|
+
void closeIfChildUnheld(entry, {
|
|
6550
|
+
trigger: "idle_timeout",
|
|
6551
|
+
closeReason: "idle_timeout"
|
|
6552
|
+
});
|
|
6353
6553
|
}
|
|
6354
6554
|
}, sessionReapIntervalMs);
|
|
6355
6555
|
sessionReaper.unref();
|
|
@@ -6523,18 +6723,7 @@ function createAcpSessionBridge(opts) {
|
|
|
6523
6723
|
entry.attachCount - (released + (attachCountDelta - 1))
|
|
6524
6724
|
);
|
|
6525
6725
|
unregisterClient(entry, clientId);
|
|
6526
|
-
|
|
6527
|
-
await bridgeApi.killSession(entry.sessionId).catch(() => {
|
|
6528
|
-
});
|
|
6529
|
-
} else if (entry.clientIds.size === 0 && entry.events.subscriberCount === 0 && entry.pendingPromptCount === 0) {
|
|
6530
|
-
await closeSessionImpl(entry.sessionId, void 0, {
|
|
6531
|
-
reason: "last_client_detached"
|
|
6532
|
-
}).catch((err) => {
|
|
6533
|
-
writeStderrLine(
|
|
6534
|
-
`qwen serve: close-on-attach-rollback failed for ${JSON.stringify(entry.sessionId)}: ${err instanceof Error ? err.stack ?? err.message : String(err)}`
|
|
6535
|
-
);
|
|
6536
|
-
});
|
|
6537
|
-
}
|
|
6726
|
+
await maybeCloseIdleSession(entry, "attach_rollback");
|
|
6538
6727
|
}, "rollbackAttachRegistration");
|
|
6539
6728
|
const resolveTrustedClientId = /* @__PURE__ */ __name((entry, clientId) => {
|
|
6540
6729
|
if (clientId === void 0) return void 0;
|
|
@@ -6563,6 +6752,7 @@ function createAcpSessionBridge(opts) {
|
|
|
6563
6752
|
})
|
|
6564
6753
|
);
|
|
6565
6754
|
const sessionIds = /* @__PURE__ */ new Set();
|
|
6755
|
+
const infoRef = {};
|
|
6566
6756
|
let client;
|
|
6567
6757
|
let connection;
|
|
6568
6758
|
try {
|
|
@@ -6664,7 +6854,12 @@ function createAcpSessionBridge(opts) {
|
|
|
6664
6854
|
() => liveScreenContextCaptureHandler,
|
|
6665
6855
|
() => liveTaskToolRequestHandler,
|
|
6666
6856
|
() => liveSpeakToUserHandler,
|
|
6667
|
-
opts.externalToolGuard
|
|
6857
|
+
opts.externalToolGuard,
|
|
6858
|
+
(snapshot) => {
|
|
6859
|
+
const currentInfo = infoRef.current;
|
|
6860
|
+
if (!currentInfo) return;
|
|
6861
|
+
applyActiveWorkSnapshot(currentInfo, snapshot);
|
|
6862
|
+
}
|
|
6668
6863
|
);
|
|
6669
6864
|
connection = new ClientSideConnection(() => client, channel.stream);
|
|
6670
6865
|
} catch (error) {
|
|
@@ -6702,6 +6897,7 @@ function createAcpSessionBridge(opts) {
|
|
|
6702
6897
|
isDying: false,
|
|
6703
6898
|
handshakeComplete: false
|
|
6704
6899
|
};
|
|
6900
|
+
infoRef.current = info;
|
|
6705
6901
|
aliveChannels.add(info);
|
|
6706
6902
|
if (aliveChannels.size > 2) {
|
|
6707
6903
|
writeStderrLine(
|
|
@@ -6789,6 +6985,10 @@ function createAcpSessionBridge(opts) {
|
|
|
6789
6985
|
connection.initialize({
|
|
6790
6986
|
protocolVersion: PROTOCOL_VERSION,
|
|
6791
6987
|
_meta: {
|
|
6988
|
+
[ACTIVE_WORK_HEARTBEAT_META_KEY]: {
|
|
6989
|
+
v: ACTIVE_WORK_HEARTBEAT_VERSION,
|
|
6990
|
+
intervalMs: ACTIVE_WORK_HEARTBEAT_INTERVAL_MS
|
|
6991
|
+
},
|
|
6792
6992
|
[CHANNEL_STARTUP_PROFILE_META_KEY]: {
|
|
6793
6993
|
v: CHANNEL_STARTUP_PROFILE_VERSION
|
|
6794
6994
|
},
|
|
@@ -6813,6 +7013,19 @@ function createAcpSessionBridge(opts) {
|
|
|
6813
7013
|
);
|
|
6814
7014
|
}
|
|
6815
7015
|
}
|
|
7016
|
+
const activeWorkCapability = isRecord3(response._meta) ? response._meta[ACTIVE_WORK_HEARTBEAT_META_KEY] : void 0;
|
|
7017
|
+
if (isRecord3(activeWorkCapability) && activeWorkCapability["v"] === ACTIVE_WORK_HEARTBEAT_VERSION) {
|
|
7018
|
+
const advertised = activeWorkCapability["categories"];
|
|
7019
|
+
info.activeWork = {
|
|
7020
|
+
intervalMs: clampActiveWorkIntervalMs(
|
|
7021
|
+
activeWorkCapability["intervalMs"]
|
|
7022
|
+
),
|
|
7023
|
+
categories: Array.isArray(advertised) ? ACTIVE_WORK_HOLD_CATEGORIES.filter(
|
|
7024
|
+
(category) => advertised.includes(category)
|
|
7025
|
+
) : [],
|
|
7026
|
+
seq: 0
|
|
7027
|
+
};
|
|
7028
|
+
}
|
|
6816
7029
|
try {
|
|
6817
7030
|
const attributes = getChannelStartupProfileAttributes(
|
|
6818
7031
|
response,
|
|
@@ -7697,6 +7910,7 @@ function createAcpSessionBridge(opts) {
|
|
|
7697
7910
|
cwdChangeQueue: Promise.resolve(),
|
|
7698
7911
|
promptQueue: Promise.resolve(),
|
|
7699
7912
|
pendingPromptCount: 0,
|
|
7913
|
+
pendingAgentNotificationCount: 0,
|
|
7700
7914
|
pendingPromptList: [],
|
|
7701
7915
|
midTurnMessageQueue: [],
|
|
7702
7916
|
modelChangeQueue: Promise.resolve(),
|
|
@@ -7711,6 +7925,9 @@ function createAcpSessionBridge(opts) {
|
|
|
7711
7925
|
attachRefs: /* @__PURE__ */ new Map(),
|
|
7712
7926
|
spawnOwnerWantedKill: false,
|
|
7713
7927
|
promptActive: false,
|
|
7928
|
+
childHolds: null,
|
|
7929
|
+
childHoldsAt: null,
|
|
7930
|
+
activeWorkCloseInFlight: false,
|
|
7714
7931
|
retryAllowed: false
|
|
7715
7932
|
};
|
|
7716
7933
|
ci.sessionIds.add(entry.sessionId);
|
|
@@ -8021,7 +8238,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8021
8238
|
const hideInheritedHistory = action === "load" && req.hideInheritedHistory === true;
|
|
8022
8239
|
const existing = byId.get(req.sessionId);
|
|
8023
8240
|
if (existing) {
|
|
8024
|
-
if (existing
|
|
8241
|
+
if (isClosingOrAuthorizingClose(existing)) {
|
|
8025
8242
|
throw new SessionNotFoundError(
|
|
8026
8243
|
req.sessionId,
|
|
8027
8244
|
"The session is closing; retry after close completes"
|
|
@@ -8029,7 +8246,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8029
8246
|
}
|
|
8030
8247
|
const replayFields = action === "load" && req.historyPageSize !== void 0 ? await refreshedReplayFieldsFor(existing, req.historyPageSize) : replayFieldsFor(existing, action);
|
|
8031
8248
|
const historyAnchorRecordId = action === "load" ? await resolveHistoryAnchorRecordId(existing, replayFields) : void 0;
|
|
8032
|
-
if (byId.get(req.sessionId) !== existing || existing
|
|
8249
|
+
if (byId.get(req.sessionId) !== existing || isClosingOrAuthorizingClose(existing)) {
|
|
8033
8250
|
throw new SessionNotFoundError(req.sessionId);
|
|
8034
8251
|
}
|
|
8035
8252
|
existing.attachCount++;
|
|
@@ -8216,6 +8433,12 @@ function createAcpSessionBridge(opts) {
|
|
|
8216
8433
|
const racedEntry = byId.get(req.sessionId);
|
|
8217
8434
|
if (racedEntry) {
|
|
8218
8435
|
restoreEvents.close();
|
|
8436
|
+
if (isClosingOrAuthorizingClose(racedEntry)) {
|
|
8437
|
+
throw new SessionNotFoundError(
|
|
8438
|
+
req.sessionId,
|
|
8439
|
+
"The session is closing; retry after close completes"
|
|
8440
|
+
);
|
|
8441
|
+
}
|
|
8219
8442
|
racedEntry.attachCount += 1 + coalesceState.count;
|
|
8220
8443
|
const clientId2 = registerClient(racedEntry, req.clientId);
|
|
8221
8444
|
recordAttachRef(racedEntry, clientId2);
|
|
@@ -8537,6 +8760,44 @@ function createAcpSessionBridge(opts) {
|
|
|
8537
8760
|
get activePromptCount() {
|
|
8538
8761
|
return activePromptCounter;
|
|
8539
8762
|
},
|
|
8763
|
+
get activeWork() {
|
|
8764
|
+
for (const entry of byId.values()) {
|
|
8765
|
+
if (entryHasActiveWork(entry)) return true;
|
|
8766
|
+
}
|
|
8767
|
+
return false;
|
|
8768
|
+
},
|
|
8769
|
+
/**
|
|
8770
|
+
* Raw coverage counts rather than a pre-collapsed grade.
|
|
8771
|
+
*
|
|
8772
|
+
* The grade has to be computed over the whole daemon, not per runtime and
|
|
8773
|
+
* then combined: a runtime with zero Sessions is vacuously `full`, and
|
|
8774
|
+
* folding that in as evidence made a deployment whose only real Sessions
|
|
8775
|
+
* were unreported aggregate to `partial`. Counts compose; grades do not.
|
|
8776
|
+
*/
|
|
8777
|
+
get activeWorkCoverage() {
|
|
8778
|
+
let covered = 0;
|
|
8779
|
+
let onNegotiatedChannel = 0;
|
|
8780
|
+
let total = 0;
|
|
8781
|
+
let oldestCoveredReportAt = null;
|
|
8782
|
+
for (const entry of byId.values()) {
|
|
8783
|
+
total++;
|
|
8784
|
+
const owner = channelInfoForEntry(entry);
|
|
8785
|
+
const capability = owner?.activeWork;
|
|
8786
|
+
if (!capability) continue;
|
|
8787
|
+
onNegotiatedChannel++;
|
|
8788
|
+
if (ACTIVE_WORK_HOLD_CATEGORIES.some(
|
|
8789
|
+
(category) => !capability.categories.includes(category)
|
|
8790
|
+
)) {
|
|
8791
|
+
continue;
|
|
8792
|
+
}
|
|
8793
|
+
if (!childHoldsAreFresh(entry, capability)) continue;
|
|
8794
|
+
covered++;
|
|
8795
|
+
if (entry.childHoldsAt !== null && (oldestCoveredReportAt === null || entry.childHoldsAt < oldestCoveredReportAt)) {
|
|
8796
|
+
oldestCoveredReportAt = entry.childHoldsAt;
|
|
8797
|
+
}
|
|
8798
|
+
}
|
|
8799
|
+
return { total, covered, onNegotiatedChannel, oldestCoveredReportAt };
|
|
8800
|
+
},
|
|
8540
8801
|
get lastActivityAt() {
|
|
8541
8802
|
return lastActivityTimestamp;
|
|
8542
8803
|
},
|
|
@@ -8579,7 +8840,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8579
8840
|
if (effectiveScope === "single") {
|
|
8580
8841
|
const existing = defaultEntry;
|
|
8581
8842
|
if (existing) {
|
|
8582
|
-
if (existing
|
|
8843
|
+
if (isClosingOrAuthorizingClose(existing)) {
|
|
8583
8844
|
throw new SessionNotFoundError(
|
|
8584
8845
|
existing.sessionId,
|
|
8585
8846
|
"The session is closing; retry after close completes"
|
|
@@ -8699,7 +8960,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8699
8960
|
const queuedAt = Date.now();
|
|
8700
8961
|
const entry = byId.get(sessionId);
|
|
8701
8962
|
if (!entry) return Promise.reject(new SessionNotFoundError(sessionId));
|
|
8702
|
-
if (entry
|
|
8963
|
+
if (isClosingOrAuthorizingClose(entry)) {
|
|
8703
8964
|
return Promise.reject(
|
|
8704
8965
|
new SessionNotFoundError(
|
|
8705
8966
|
sessionId,
|
|
@@ -9076,15 +9337,7 @@ function createAcpSessionBridge(opts) {
|
|
|
9076
9337
|
);
|
|
9077
9338
|
entry.midTurnMessageQueue.length = 0;
|
|
9078
9339
|
}
|
|
9079
|
-
|
|
9080
|
-
void closeSessionImpl(sessionId, void 0, {
|
|
9081
|
-
reason: "last_client_detached"
|
|
9082
|
-
}).catch((err) => {
|
|
9083
|
-
writeStderrLine(
|
|
9084
|
-
`qwen serve: deferred close-on-prompt-complete failed for ${JSON.stringify(sessionId)}: ${err instanceof Error ? err.stack ?? err.message : String(err)}`
|
|
9085
|
-
);
|
|
9086
|
-
});
|
|
9087
|
-
}
|
|
9340
|
+
void maybeCloseIdleSession(entry, "prompt_settled");
|
|
9088
9341
|
}).catch(() => {
|
|
9089
9342
|
});
|
|
9090
9343
|
return result;
|
|
@@ -10405,18 +10658,27 @@ function createAcpSessionBridge(opts) {
|
|
|
10405
10658
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
10406
10659
|
const info = channelInfoForEntry(entry);
|
|
10407
10660
|
if (!info || info.isDying) throw new SessionNotFoundError(sessionId);
|
|
10408
|
-
|
|
10409
|
-
|
|
10410
|
-
|
|
10411
|
-
|
|
10412
|
-
|
|
10661
|
+
entry.pendingAgentNotificationCount++;
|
|
10662
|
+
try {
|
|
10663
|
+
const response = await Promise.race([
|
|
10664
|
+
withTimeout(
|
|
10665
|
+
entry.connection.extMethod(
|
|
10666
|
+
SERVE_CONTROL_EXT_METHODS.sessionBackgroundNotification,
|
|
10667
|
+
{ sessionId, ...notification }
|
|
10668
|
+
),
|
|
10669
|
+
initTimeoutMs,
|
|
10670
|
+
SERVE_CONTROL_EXT_METHODS.sessionBackgroundNotification
|
|
10413
10671
|
),
|
|
10414
|
-
|
|
10415
|
-
|
|
10416
|
-
|
|
10417
|
-
|
|
10418
|
-
|
|
10419
|
-
|
|
10672
|
+
getTransportClosedReject(entry)
|
|
10673
|
+
]);
|
|
10674
|
+
return { sessionId, accepted: response["accepted"] === true };
|
|
10675
|
+
} finally {
|
|
10676
|
+
entry.pendingAgentNotificationCount = Math.max(
|
|
10677
|
+
0,
|
|
10678
|
+
entry.pendingAgentNotificationCount - 1
|
|
10679
|
+
);
|
|
10680
|
+
void maybeCloseIdleSession(entry, "agent_notification_settled");
|
|
10681
|
+
}
|
|
10420
10682
|
},
|
|
10421
10683
|
async generateSessionBtw(sessionId, question, signal, _context) {
|
|
10422
10684
|
const entry = byId.get(sessionId);
|
|
@@ -10657,7 +10919,7 @@ function createAcpSessionBridge(opts) {
|
|
|
10657
10919
|
async rewindSession(sessionId, req, context) {
|
|
10658
10920
|
const entry = byId.get(sessionId);
|
|
10659
10921
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
10660
|
-
if (entry
|
|
10922
|
+
if (isClosingOrAuthorizingClose(entry)) {
|
|
10661
10923
|
throw new SessionNotFoundError(sessionId, "The session is closing");
|
|
10662
10924
|
}
|
|
10663
10925
|
const info = channelInfoForEntry(entry);
|
|
@@ -11147,18 +11409,7 @@ function createAcpSessionBridge(opts) {
|
|
|
11147
11409
|
if (entry.attachCount > 0) entry.attachCount--;
|
|
11148
11410
|
}
|
|
11149
11411
|
unregisterClient(entry, clientId);
|
|
11150
|
-
|
|
11151
|
-
await this.killSession(sessionId).catch(() => {
|
|
11152
|
-
});
|
|
11153
|
-
} else if (entry.clientIds.size === 0 && entry.events.subscriberCount === 0 && entry.pendingPromptCount === 0) {
|
|
11154
|
-
await closeSessionImpl(sessionId, void 0, {
|
|
11155
|
-
reason: "last_client_detached"
|
|
11156
|
-
}).catch((err) => {
|
|
11157
|
-
writeStderrLine(
|
|
11158
|
-
`qwen serve: close-on-last-detach failed for ${JSON.stringify(sessionId)}: ${err instanceof Error ? err.stack ?? err.message : String(err)}`
|
|
11159
|
-
);
|
|
11160
|
-
});
|
|
11161
|
-
}
|
|
11412
|
+
await maybeCloseIdleSession(entry, "last_client_detached");
|
|
11162
11413
|
},
|
|
11163
11414
|
killAllSync() {
|
|
11164
11415
|
shuttingDown = true;
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
import {
|
|
4
4
|
resolveModelConfig,
|
|
5
5
|
resolveProviderProtocol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GXSNGY5M.js";
|
|
7
7
|
import {
|
|
8
8
|
external_exports
|
|
9
9
|
} from "./chunk-H6XPXXMH.js";
|
|
10
10
|
import {
|
|
11
11
|
stripRuntimeSnapshotPrefix
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VXZ5HAOV.js";
|
|
13
13
|
import {
|
|
14
14
|
REASONING_EFFORT_TIERS,
|
|
15
15
|
normalizeReasoningEffort
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
AuthType,
|
|
19
19
|
MODEL_GENERATION_CONFIG_FIELDS
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-M3STHEMM.js";
|
|
21
21
|
import {
|
|
22
22
|
init_esbuild_shims
|
|
23
23
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
t
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PG62DFWD.js";
|
|
6
6
|
import {
|
|
7
7
|
computeThresholds,
|
|
8
8
|
getCoreSystemPrompt,
|
|
9
9
|
resolveInteractionMode
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GXSNGY5M.js";
|
|
11
11
|
import {
|
|
12
12
|
buildSkillLlmContent
|
|
13
13
|
} from "./chunk-K623ENWT.js";
|
|
14
14
|
import {
|
|
15
15
|
DiscoveredMCPTool,
|
|
16
16
|
uiTelemetryService
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-3PY4LPJF.js";
|
|
18
18
|
import {
|
|
19
19
|
ToolNames
|
|
20
20
|
} from "./chunk-PYQADEFD.js";
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
performStandaloneUpdate
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZHA242R4.js";
|
|
6
6
|
import {
|
|
7
7
|
updateEventEmitter
|
|
8
8
|
} from "./chunk-YAF2MQZ6.js";
|
|
9
9
|
import {
|
|
10
10
|
t
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-PG62DFWD.js";
|
|
12
12
|
import {
|
|
13
13
|
getInstallationInfo,
|
|
14
14
|
resolveUpdateCommand
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-IUQ52YJK.js";
|
|
16
16
|
import {
|
|
17
17
|
createDebugLogger
|
|
18
18
|
} from "./chunk-OIVKILPI.js";
|