@qwen-code/qwen-code 0.19.6 → 0.19.7-nightly.20260708.394c1a289
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 +5 -1
- package/bundled/qc-helper/docs/configuration/settings.md +33 -1
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +41 -31
- package/bundled/qc-helper/docs/features/channels/wecom.md +111 -0
- package/bundled/qc-helper/docs/features/code-review.md +16 -6
- package/bundled/qc-helper/docs/features/commands.md +1 -1
- package/bundled/qc-helper/docs/features/hooks.md +6 -0
- package/bundled/qc-helper/docs/features/skills.md +5 -3
- package/bundled/qc-helper/docs/integration-github-action.md +1 -1
- package/bundled/review/DESIGN.md +50 -18
- package/bundled/review/SKILL.md +102 -12
- package/chunks/{MaxSizedBox-SK7CUWZQ.js → MaxSizedBox-XS37LWTD.js} +31 -29
- package/chunks/{StandaloneSessionPicker-G44HGSAP.js → StandaloneSessionPicker-LPALJTKN.js} +44 -41
- package/chunks/{acpAgent-PKCTYWJV.js → acpAgent-4VE3FGJX.js} +769 -366
- package/chunks/{agent-IYMHUXWB.js → agent-CCHERW6L.js} +24 -24
- package/chunks/{agent-headless-L2DAW6I5.js → agent-headless-55N6UBUU.js} +24 -24
- package/chunks/{anthropicContentGenerator-H5ZOEENQ.js → anthropicContentGenerator-AKYPSZIV.js} +7 -7
- package/chunks/{artifact-tool-SLYPWG3C.js → artifact-tool-D233YJFH.js} +27 -8
- package/chunks/{askUserQuestion-OKPTECON.js → askUserQuestion-MKL5ZTMC.js} +2 -2
- package/chunks/{bridge-DF3IJQ5V.js → bridge-U6HXOHE7.js} +34 -32
- package/chunks/{channel-worker-supervisor-JUYQ5Z4R.js → channel-worker-supervisor-CRCVYQIE.js} +1 -1
- package/chunks/{chunk-AVQDCKNF.js → chunk-22MNNNXE.js} +4 -0
- package/chunks/chunk-2DYY5XUZ.js +8223 -0
- package/chunks/chunk-2FHWCKWA.js +262 -0
- package/chunks/{chunk-6BEOH4KK.js → chunk-2NPS2UDH.js} +767 -122
- package/chunks/{chunk-N2IJLN2L.js → chunk-2SWMCXVR.js} +13 -5
- package/chunks/{chunk-OBVBTAX5.js → chunk-2YELHTUE.js} +2 -2
- package/chunks/chunk-332PWN27.js +19 -0
- package/chunks/{chunk-CLQPBI4H.js → chunk-3B26UVCX.js} +132 -26
- package/chunks/{chunk-HCFSKO6K.js → chunk-3QDZDAJG.js} +1 -1
- package/chunks/{chunk-G7OQ3RFJ.js → chunk-42XGFRJS.js} +3 -3
- package/chunks/{chunk-SL2P3JUA.js → chunk-43W4YSO6.js} +1 -12
- package/chunks/{chunk-JA5KWZTJ.js → chunk-44NROQYV.js} +5 -3
- package/chunks/{chunk-BOAWGUY6.js → chunk-4AFOWB47.js} +121 -49
- package/chunks/{chunk-MOUXUCXQ.js → chunk-4KJ2BPIT.js} +1 -1
- package/chunks/{chunk-YTWX5TT2.js → chunk-5FL2K3ZB.js} +1 -1
- package/chunks/{chunk-UNXGEDX2.js → chunk-5OSSOBZC.js} +133 -25
- package/chunks/{chunk-JN2VJ33O.js → chunk-7I4MGFBN.js} +966 -121
- package/chunks/{chunk-T42ACHFI.js → chunk-7LTB54MK.js} +1 -1
- package/chunks/chunk-A2X3KLC3.js +3807 -0
- package/chunks/{chunk-EWALXUAD.js → chunk-AGHU5VRK.js} +8 -0
- package/chunks/{chunk-GLPV75ES.js → chunk-AHNJGLFV.js} +2 -2
- package/chunks/{chunk-IUSKVKH5.js → chunk-AXTPFMRS.js} +1 -1
- package/chunks/{chunk-T22H4V4R.js → chunk-B34OV7K2.js} +1 -1
- package/chunks/{chunk-FZ5NVRVK.js → chunk-B5FOCTEZ.js} +3 -3
- package/chunks/{chunk-3UC7ZC43.js → chunk-B6WUEODT.js} +7 -7
- package/chunks/{chunk-MJKEQSZI.js → chunk-BGL43SJ3.js} +1 -1
- package/chunks/{chunk-OAYOHSGP.js → chunk-BHRU4SDF.js} +4 -4
- package/chunks/{chunk-YPCPZSZB.js → chunk-CCGOFQV3.js} +56 -4
- package/chunks/{chunk-FDY3XOTM.js → chunk-CR5IU2RX.js} +4 -4
- package/chunks/{chunk-LWGLBVWA.js → chunk-CSOTA7KX.js} +1 -1
- package/chunks/{chunk-AGZF43UV.js → chunk-E7HM76PR.js} +7153 -4406
- package/chunks/{chunk-NIOPRZNN.js → chunk-E7KNELIZ.js} +1 -1
- package/chunks/{chunk-YSU33ACT.js → chunk-ELMPRVCB.js} +5 -13
- package/chunks/{chunk-SEZC2725.js → chunk-ER3BKOLB.js} +13 -0
- package/chunks/{chunk-3VJ7MT3N.js → chunk-EXPMGZZV.js} +14 -3
- package/chunks/{chunk-DBF3HTLT.js → chunk-FB2ULV4M.js} +4 -4
- package/chunks/{chunk-RZORUN6X.js → chunk-FEJ2FZ3U.js} +1 -1
- package/chunks/chunk-FK77ILF5.js +2477 -0
- package/chunks/{chunk-DMSNJDWG.js → chunk-FV7425LN.js} +38 -3
- package/chunks/{chunk-ALX6BUYW.js → chunk-G7ZG7CA6.js} +186 -27
- package/chunks/{chunk-2INJBYLJ.js → chunk-GIY6JTTC.js} +6 -6
- package/chunks/{chunk-D5KISTLW.js → chunk-H6EMK6QK.js} +1 -1
- package/chunks/{chunk-KYTQOCDE.js → chunk-HW4N45EE.js} +17 -46
- package/chunks/{chunk-VXGPYF7U.js → chunk-IFEWJXFS.js} +1 -1
- package/chunks/chunk-II73RK2S.js +158 -0
- package/chunks/{chunk-TENOUWY2.js → chunk-IJRL2S3D.js} +3 -3
- package/chunks/{chunk-GQBRGBLS.js → chunk-J43WPR6U.js} +9 -9
- package/chunks/{chunk-SRNPMG7J.js → chunk-JYOWO2F7.js} +16 -10
- package/chunks/{chunk-57NRQM3P.js → chunk-K34DD7FH.js} +2 -2
- package/chunks/{chunk-O2RJARYU.js → chunk-KKWO4IX2.js} +1409 -4088
- package/chunks/{chunk-SOT7OMGL.js → chunk-KT3SI3CQ.js} +2 -2
- package/chunks/{chunk-NUK2PFSU.js → chunk-L7IWK7JY.js} +1 -1
- package/chunks/{chunk-MHQKYQDS.js → chunk-LC4SMGYY.js} +158 -3
- package/chunks/chunk-LGFAYIKX.js +115 -0
- package/chunks/{chunk-MBWLP5OT.js → chunk-LKXDC3AW.js} +162 -40
- package/chunks/{chunk-7Z6UEJA4.js → chunk-ME344634.js} +5 -2
- package/chunks/{chunk-V6NH3CUC.js → chunk-MOQOAH7N.js} +3 -3
- package/chunks/{chunk-FPHA7WIZ.js → chunk-MYZWWRVW.js} +3 -3
- package/chunks/{chunk-YHTNWGRR.js → chunk-MZ7BABX3.js} +1 -1
- package/chunks/chunk-N74BA4VP.js +949 -0
- package/chunks/{chunk-B236XPGF.js → chunk-NQKLOAVJ.js} +29 -2
- package/chunks/{chunk-LXFCHX4X.js → chunk-OU6FPTJZ.js} +312 -25
- package/chunks/{chunk-HTWHAN44.js → chunk-PC4ZXHU2.js} +1 -1
- package/chunks/{chunk-3X76L4UF.js → chunk-PLGONYEL.js} +5 -5
- package/chunks/{chunk-WXUDZHOJ.js → chunk-PVXPDMGP.js} +10 -2
- package/chunks/{chunk-ZO5EA3XJ.js → chunk-QCSLZO6J.js} +1 -1
- package/chunks/{chunk-CEYA7K7C.js → chunk-QHT5USLK.js} +62 -12
- package/chunks/{chunk-NPQWQYU6.js → chunk-QYNNN7BK.js} +1 -1
- package/chunks/{chunk-N4YJQTRL.js → chunk-RFIL6REB.js} +71 -2
- package/chunks/{chunk-KSPVDFE4.js → chunk-SAIILPQ3.js} +0 -3
- package/chunks/{chunk-OIFSBXSP.js → chunk-SJHAUELE.js} +3 -3
- package/chunks/{chunk-BZHLWC6T.js → chunk-SUAKHHK7.js} +2 -2
- package/chunks/{chunk-QOKV6AO4.js → chunk-T2EJHSE3.js} +184 -147
- package/chunks/{chunk-ZI4MGBB5.js → chunk-TBAZMRW3.js} +1 -1
- package/chunks/{chunk-6QVRLKTZ.js → chunk-TBLJNMI7.js} +7 -7
- package/chunks/{chunk-J6ABRKAB.js → chunk-TDGF35EN.js} +2 -2
- package/chunks/chunk-TEYGKLIZ.js +167 -0
- package/chunks/{chunk-TOAUDIS7.js → chunk-TLWA7TPR.js} +6 -2
- package/chunks/chunk-UIDXQNMV.js +13 -0
- package/chunks/{chunk-MX7CTJHR.js → chunk-UZCT5OLN.js} +9 -9
- package/chunks/{chunk-LM3YCCZJ.js → chunk-VEB3NYSO.js} +1 -1
- package/chunks/{chunk-UTL7KABL.js → chunk-VQJ64BIQ.js} +7 -7
- package/chunks/{chunk-C2QKQZEQ.js → chunk-VTCPREC7.js} +3 -3
- package/chunks/{chunk-5ES5YPED.js → chunk-VZ7HY3YU.js} +1 -1
- package/chunks/{chunk-QOMAHFYI.js → chunk-W7EEOR7D.js} +3 -3
- package/chunks/{chunk-NVFJSIAX.js → chunk-WMPVYQ4P.js} +1 -1
- package/chunks/{chunk-V5VTULL5.js → chunk-X265R5C6.js} +3 -3
- package/chunks/{chunk-LKWAVAB5.js → chunk-X2XNQQJI.js} +2 -2
- package/chunks/{chunk-MJKMIQMK.js → chunk-X3YGAX7V.js} +1 -1
- package/chunks/{chunk-5WQF27GW.js → chunk-XQ2GVLNJ.js} +1 -1
- package/chunks/chunk-XUSONNJ4.js +28 -0
- package/chunks/{chunk-DXXNMPJH.js → chunk-YMWIKAEE.js} +460 -93
- package/chunks/{chunk-A34EPIUV.js → chunk-YYU6H66M.js} +18 -15
- package/chunks/{chunk-XH7H6YG4.js → chunk-ZK5EI6NR.js} +4 -107
- package/chunks/{computer-use-5S3NVXRA.js → computer-use-4CTF6WS3.js} +24 -24
- package/chunks/{contextCommand-DPBALZFK.js → contextCommand-Z3XWQCY6.js} +28 -27
- package/chunks/{cron-create-7JYUDTUY.js → cron-create-JSXEIPVS.js} +4 -4
- package/chunks/{cron-delete-YPULQQAK.js → cron-delete-OIFVEPGU.js} +4 -4
- package/chunks/{cron-list-HJIW5MHP.js → cron-list-D4ZX4IOE.js} +11 -7
- package/chunks/{daemon-7XYW4BC3.js → daemon-F3I2RXP6.js} +208 -63
- package/chunks/daemon-status-provider-6A4QCG6Q.js +74 -0
- package/chunks/dist-573HNSVO.js +3217 -0
- package/chunks/{dist-ABQ7VWRR.js → dist-FQ5WRJPL.js} +2 -2
- package/chunks/{dist-JPSVN367.js → dist-IMFFBMAT.js} +6 -3792
- package/chunks/{dist-BV56HW3W.js → dist-OT7G2WNM.js} +250 -1
- package/chunks/{dist-AW5ZYMUI.js → dist-PKFTNUHO.js} +10 -11
- package/chunks/{dist-AAO65DPC.js → dist-YTRKAVUB.js} +1 -1
- package/chunks/{earlyInputCapture-GGPV4IFT.js → earlyInputCapture-7O47HW62.js} +25 -25
- package/chunks/{edit-HJ7ISN4C.js → edit-E32KWLF2.js} +25 -25
- package/chunks/{en-XR3S5VWY.js → en-GA2RMXY5.js} +6 -1
- package/chunks/{enter-worktree-2BQT675D.js → enter-worktree-ZKFFMHUD.js} +24 -24
- package/chunks/{enterPlanMode-SJXHJ3WD.js → enterPlanMode-HLDC6NGX.js} +24 -24
- package/chunks/{errors-EVGER4AZ.js → errors-MTIDDXX7.js} +26 -26
- package/chunks/{exit-worktree-RPDDOSPM.js → exit-worktree-YHY72XA2.js} +24 -24
- package/chunks/{exitPlanMode-BQEROAJ7.js → exitPlanMode-JNXKBZ2C.js} +24 -24
- package/chunks/{fast-path-FX2ICJ2O.js → fast-path-DVAGBROV.js} +5 -2
- package/chunks/{fr-MBMNQSQ6.js → fr-GWNQG4XH.js} +4 -0
- package/chunks/{gemini-EHUXCOUI.js → gemini-2TMHJVRC.js} +444 -256
- package/chunks/{geminiContentGenerator-YDUUKAM2.js → geminiContentGenerator-WCH4GWD3.js} +4 -4
- package/chunks/{glob-3VIGV2DL.js → glob-I6Y4AGKO.js} +52 -28
- package/chunks/{grep-4D3S4NUC.js → grep-3P2J3LU5.js} +24 -24
- package/chunks/handleAutoUpdate-4IVRMRG4.js +65 -0
- package/chunks/{initializer-QZTZSSLW.js → initializer-DVNCPVTC.js} +31 -29
- package/chunks/{ja-HFV5QCHR.js → ja-2HOTA47X.js} +4 -0
- package/chunks/{keychain-token-storage-GPAKRDKQ.js → keychain-token-storage-UJV5XP4Z.js} +2 -2
- package/chunks/{list-WQ24EAMK.js → list-4D6QK2KZ.js} +30 -30
- package/chunks/{loadedSettingsAdapter-XV74KOSR.js → loadedSettingsAdapter-GNGELH6Q.js} +28 -28
- package/chunks/{loop-wakeup-34YK7T7O.js → loop-wakeup-OHWEMFP5.js} +5 -5
- package/chunks/{ls-MPD5OJUX.js → ls-L654WOAT.js} +4 -4
- package/chunks/{lsp-72PWTDW7.js → lsp-M35KE54Y.js} +2 -2
- package/chunks/{mcp-CO3MKM7N.js → mcp-2IL72YJP.js} +28 -28
- package/chunks/{monitor-GB56T65A.js → monitor-BLVCZAVX.js} +32 -27
- package/chunks/nonInteractiveCli-UD3V7UOO.js +116 -0
- package/chunks/{notebook-edit-VMXAAE3R.js → notebook-edit-5TVMWIWY.js} +25 -25
- package/chunks/{openaiContentGenerator-GM77FLII.js → openaiContentGenerator-5LJ5A7YY.js} +12 -12
- package/chunks/{pidfile-HFXSHR64.js → pidfile-AN5JQJ2T.js} +25 -25
- package/chunks/{qwenContentGenerator-QSCXQIKJ.js → qwenContentGenerator-E2JSB4FJ.js} +26 -26
- package/chunks/{qwenOAuth2-LWLA6MQG.js → qwenOAuth2-ZV7YLMND.js} +5 -5
- package/chunks/{read-file-SVH6CGQY.js → read-file-N5DEFUDU.js} +8 -8
- package/chunks/{read-mcp-resource-OWOBJY72.js → read-mcp-resource-CNQHBSJM.js} +2 -2
- package/chunks/{record-artifact-URK3YUDJ.js → record-artifact-PP3LKHTS.js} +2 -2
- package/chunks/{ripGrep-JD5O2FLX.js → ripGrep-BLJHTHKE.js} +24 -24
- package/chunks/{run-qwen-serve-FADLRJUN.js → run-qwen-serve-4JDO64RN.js} +785 -35
- package/chunks/{scheduler-Q65SB7DJ.js → scheduler-FQR4XA7J.js} +24 -24
- package/chunks/{send-message-L7OLQEKH.js → send-message-OA6MV4EU.js} +3 -3
- package/chunks/{serve-6ZXAMQ4M.js → serve-ZOCFC7YM.js} +29 -29
- package/chunks/{server-WKDQA6XR.js → server-GEOYEPYT.js} +2504 -439
- package/chunks/{session-STWOX7RA.js → session-NJCONHGX.js} +66 -61
- package/chunks/{settings-LC4CCWQQ.js → settings-QBGGXANI.js} +27 -27
- package/chunks/{shell-FEG3RLPW.js → shell-2DVPSEKT.js} +24 -24
- package/chunks/{skill-XTXAMDAP.js → skill-HIPXUHV7.js} +24 -12
- package/chunks/{spawnChannel-B6JJPBPV.js → spawnChannel-3JYXY52G.js} +27 -27
- package/chunks/{src-HITDGVRM.js → src-NLEX4CUC.js} +91 -36
- package/chunks/{startInteractiveUI-IT423PW4.js → startInteractiveUI-TYGZIU27.js} +6213 -14273
- package/chunks/{syntheticOutput-J3MLCQAR.js → syntheticOutput-F7LSDCAR.js} +3 -3
- package/chunks/{task-create-ELEBZ7H2.js → task-create-RPFZNB4B.js} +7 -7
- package/chunks/{task-list-IEUZLF3Y.js → task-list-TGGJX7EA.js} +5 -5
- package/chunks/{task-stop-QEZW3UDY.js → task-stop-W7NGTMYQ.js} +2 -2
- package/chunks/{task-update-DW36J5P5.js → task-update-5WUG5MVQ.js} +7 -7
- package/chunks/{team-create-DAG6SNHZ.js → team-create-MGX57SZJ.js} +24 -24
- package/chunks/{team-delete-SVITIMBO.js → team-delete-UHQQ2QQX.js} +5 -5
- package/chunks/{team-plan-approval-DRDY5OPC.js → team-plan-approval-BO2N7J3E.js} +24 -24
- package/chunks/{theme-manager-N67EZC6B.js → theme-manager-WU7LOA64.js} +25 -25
- package/chunks/{todoWrite-SFFQHZYY.js → todoWrite-C4ZAMSR3.js} +4 -4
- package/chunks/{tool-search-CMDJ5HGM.js → tool-search-CLBKVEVK.js} +11 -28
- package/chunks/{trustedFolders-JD4QX6UJ.js → trustedFolders-GAQM2GHB.js} +25 -25
- package/chunks/updateCheck-RIK2YIQE.js +65 -0
- package/chunks/{validateNonInterActiveAuth-ADDCGZ6A.js → validateNonInterActiveAuth-NS3GBIJZ.js} +61 -56
- package/chunks/{version-VAONYVE5.js → version-B3RSLP54.js} +2 -1
- package/chunks/{web-fetch-SXAXJHIO.js → web-fetch-UYGMOHW4.js} +5 -5
- package/chunks/{workflow-DG2BR42M.js → workflow-7APPIGND.js} +25 -25
- package/chunks/{workspace-providers-status-XGW5OZTD.js → workspace-providers-status-SC67GLMY.js} +30 -30
- package/chunks/{workspace-service-GX3GGZLU.js → workspace-service-ZJHF22WA.js} +35 -35
- package/chunks/{workspace-skills-status-LFK5WV2V.js → workspace-skills-status-NJEK6P6Y.js} +29 -29
- package/chunks/{write-file-UR7FXWOU.js → write-file-R6Z3VLRY.js} +25 -25
- package/chunks/{zh-FSVJTXA4.js → zh-7XVVRTDH.js} +6 -1
- package/chunks/{zh-TW-66MG4LWL.js → zh-TW-DPH554OG.js} +6 -1
- package/cli.js +19 -11
- package/locales/en.js +9 -2
- package/locales/fr.js +6 -0
- package/locales/ja.js +6 -0
- package/locales/zh-TW.js +9 -2
- package/locales/zh.js +9 -2
- package/node_modules/@qwen-code/audio-capture/package.json +1 -1
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/package.json +3 -3
- package/web-shell/assets/{arc-CUpe0ibu.js → arc-C7hjaa7g.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-JvyrY_mK.js → architectureDiagram-3BPJPVTR-pm9KtMZY.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CK3Y_vom.js → blockDiagram-GPEHLZMM-CApElKsU.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-DprSnyrf.js → c4Diagram-AAUBKEIU-BeDe0-9N.js} +1 -1
- package/web-shell/assets/channel-BNf1dW-j.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-DJtRJPmu.js → chunk-2J33WTMH-DJEkmLdl.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-ON6Q2-BG.js → chunk-4BX2VUAB-DXX8gdpe.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-c60ou5HZ.js → chunk-55IACEB6-DORmk1kQ.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-BamtPKxx.js → chunk-727SXJPM-DWmO4mCZ.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-CsVgpu-T.js → chunk-AQP2D5EJ-C7LRaYw2.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-vZrpjAx4.js → chunk-FMBD7UC4-CCdXgyC5.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-qxyNOd5t.js → chunk-ND2GUHAM-SyL_xvWc.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BvTJSM_S.js → chunk-QZHKN3VN-BzOuCKxa.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-uOIGlzgi.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-uOIGlzgi.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-1tXB4pju.js → cose-bilkent-S5V4N54A-BMPWyDKc.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-DglBzme8.js → dagre-BM42HDAG-B_GnPWik.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-DEJpqsWz.js → diagram-2AECGRRQ-fJqMc3S_.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-CsQ1NrMG.js → diagram-5GNKFQAL-ximV3O9D.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-Z-3codAi.js → diagram-KO2AKTUF-2vVyjzqw.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-mBuPTA2i.js → diagram-LMA3HP47-Dckcx1sT.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-tcA3K3s9.js → diagram-OG6HWLK6-BAVv47ga.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-D9bXFRyZ.js → erDiagram-TEJ5UH35-Bn3nf5J0.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-Ck0Py04s.js → flowDiagram-I6XJVG4X-BIbGF9JT.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-rOevCekE.js → ganttDiagram-6RSMTGT7-CDbhb3AH.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CoPQaLj0.js → gitGraphDiagram-PVQCEYII-CbKG1a_w.js} +1 -1
- package/web-shell/assets/index-CnE2ur2L.js +779 -0
- package/web-shell/assets/index-hSKXrlSE.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-a77CUKoI.js → infoDiagram-5YYISTIA-DUFxTy8m.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DlLgUAO-.js → ishikawaDiagram-YF4QCWOH-D69hrBG8.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-BXR5kVAZ.js → journeyDiagram-JHISSGLW-DsvEw51Y.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-h5CoHZg7.js → kanban-definition-UN3LZRKU-lFFjZEYd.js} +1 -1
- package/web-shell/assets/{linear-BkaREbyD.js → linear-Bo5bWzvo.js} +1 -1
- package/web-shell/assets/{mermaid.core-Bkagz0ng.js → mermaid.core-C_HKMJx5.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-D7EMKR_5.js → mindmap-definition-RKZ34NQL-DlV-NUTs.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-DAmPOjsL.js → pieDiagram-4H26LBE5-B2e6FH2a.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-e4WFQkQu.js → quadrantDiagram-W4KKPZXB-D75kSk-b.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-v1zo7OiV.js → requirementDiagram-4Y6WPE33-CQ6xakhM.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Bstm4aW_.js → sankeyDiagram-5OEKKPKP-J_XTKrcY.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DzcZy6xN.js → sequenceDiagram-3UESZ5HK-D7jTcBtf.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-BEJH6YbH.js → stateDiagram-AJRCARHV-CrlM_OT3.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Bs4TK_84.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-TI1wH-Pm.js → timeline-definition-PNZ67QCA-5oZi76Ef.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-YaH8VDMS.js → vennDiagram-CIIHVFJN-DO5YptPK.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-B80co7OP.js → wardley-L42UT6IY-4t1eJDvM.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-4fHNDEMl.js → wardleyDiagram-YWT4CUSO-DKZc661S.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DT3q4Z3J.js → xychartDiagram-2RQKCTM6-su9hp08G.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-L7QPM2YD.js +0 -481
- package/chunks/daemon-status-provider-2EWTHT7Y.js +0 -73
- package/chunks/nonInteractiveCli-HNZRIM5I.js +0 -111
- package/web-shell/assets/channel-BAxQ2-aZ.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-Cvd_xhZI.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cvd_xhZI.js +0 -1
- package/web-shell/assets/index-Cr7MYW6T.css +0 -5
- package/web-shell/assets/index-DCHPAUp3.js +0 -730
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BopifCBI.js +0 -1
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
sanitizeLogText,
|
|
8
8
|
sanitizePromptText,
|
|
9
9
|
sanitizeSenderName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2NPS2UDH.js";
|
|
11
11
|
import "./chunk-VRDMOSQS.js";
|
|
12
12
|
import "./chunk-K5PGHDBN.js";
|
|
13
13
|
import {
|
|
@@ -1464,6 +1464,8 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1464
1464
|
beforeExitHook = null;
|
|
1465
1465
|
/** Timer for reconnectWithRetry fallback (unref'd so it doesn't block exit). */
|
|
1466
1466
|
reconnectTimer = null;
|
|
1467
|
+
/** 30s READY timeout to prevent hanging on gateway without response. */
|
|
1468
|
+
readyTimeout = null;
|
|
1467
1469
|
/** Guard against parallel reconnectWithRetry chains from stale close events. */
|
|
1468
1470
|
isReconnecting = false;
|
|
1469
1471
|
/** Track whether a chatId is a group or C2C for correct API routing. */
|
|
@@ -1476,7 +1478,40 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1476
1478
|
replyMsgIdCleanupTimer = null;
|
|
1477
1479
|
/** 5-minute TTL for replyMsgId entries and seenMessages dedup. */
|
|
1478
1480
|
static REPLY_MSG_ID_TTL_MS = 3e5;
|
|
1481
|
+
/** Idle-flush timeout: buffer is sent after this many ms of silence. */
|
|
1482
|
+
static IDLE_FLUSH_MS = 2e3;
|
|
1483
|
+
/** Max consecutive send failures before the stream is abandoned. */
|
|
1484
|
+
static MAX_FLUSH_RETRIES = 3;
|
|
1485
|
+
/** Retry delay for subsequent attempts (backoff beyond first retry). */
|
|
1486
|
+
static IDLE_FLUSH_BACKOFF_MS = 4e3;
|
|
1487
|
+
/** Max buffer length before forcing an immediate flush. */
|
|
1488
|
+
static MAX_BUFFER_LENGTH = 4096;
|
|
1479
1489
|
/** Path to persisted QQ routing state: chatTypeMap, replyMsgId, msgSeqMap. */
|
|
1490
|
+
/**
|
|
1491
|
+
* Streaming state machine with per-session buffers.
|
|
1492
|
+
*
|
|
1493
|
+
* Three states for each session:
|
|
1494
|
+
* active — accumulating chunks in buffer (onResponseChunk extends timer)
|
|
1495
|
+
* flushing — sendMessage() is in-flight (prevents parallel sends)
|
|
1496
|
+
* idle — waiting for next chunk (timer counting down to idleFlush)
|
|
1497
|
+
*
|
|
1498
|
+
* Transitions:
|
|
1499
|
+
* active → flushing: idleFlush timer fires, or onToolCall cancels timer
|
|
1500
|
+
* flushing → idle: send settles, idle timer restarts on retry
|
|
1501
|
+
* any → done: onResponseComplete sends remaining content
|
|
1502
|
+
*
|
|
1503
|
+
* Guards:
|
|
1504
|
+
* - flushingSessions prevents concurrent sends per session
|
|
1505
|
+
* - pendingStreamDelete defers cleanup until in-flight send resolves
|
|
1506
|
+
* - flushedSessions tracks already-sent sessions to skip final fullText
|
|
1507
|
+
*/
|
|
1508
|
+
// ── Streaming state ───────────────────────────────────────────
|
|
1509
|
+
streamState = /* @__PURE__ */ new Map();
|
|
1510
|
+
flushingSessions = /* @__PURE__ */ new Set();
|
|
1511
|
+
pendingStreamDelete = /* @__PURE__ */ new Set();
|
|
1512
|
+
reconnectId = 0;
|
|
1513
|
+
blockStreaming = false;
|
|
1514
|
+
flushedSessions = /* @__PURE__ */ new Set();
|
|
1480
1515
|
qqStatePath;
|
|
1481
1516
|
/**
|
|
1482
1517
|
* Path to the SessionRouter persistence file we back up before shutdown.
|
|
@@ -1499,6 +1534,7 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1499
1534
|
registerBridgeEvents: options?.registerBridgeEvents ?? !hasExternalRouter
|
|
1500
1535
|
});
|
|
1501
1536
|
this.qqConfig = config;
|
|
1537
|
+
this.blockStreaming = this.config.blockStreaming === "on";
|
|
1502
1538
|
this.qqStatePath = join2(stateDir, `${safeName}-state.json`);
|
|
1503
1539
|
this.globalSessionsPath = hasExternalRouter ? join2(stateDir, "sessions.json") : sessionsPath;
|
|
1504
1540
|
this.sessionsBackupPath = join2(stateDir, `${safeName}-sessions-backup.json`);
|
|
@@ -1506,6 +1542,7 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1506
1542
|
// ── ChannelBase interface ──────────────────────────────────────
|
|
1507
1543
|
async connect() {
|
|
1508
1544
|
this.disposed = false;
|
|
1545
|
+
this.reconnectId++;
|
|
1509
1546
|
if (!this.config.instructions) {
|
|
1510
1547
|
this.config.instructions = [
|
|
1511
1548
|
"## QQ Bot Channel",
|
|
@@ -1690,6 +1727,10 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1690
1727
|
}
|
|
1691
1728
|
this.flushQQState();
|
|
1692
1729
|
this.backupGlobalSessions();
|
|
1730
|
+
if (this.readyTimeout) {
|
|
1731
|
+
clearTimeout(this.readyTimeout);
|
|
1732
|
+
this.readyTimeout = null;
|
|
1733
|
+
}
|
|
1693
1734
|
if (this.ws) {
|
|
1694
1735
|
this.ws.close(1e3);
|
|
1695
1736
|
this.ws = null;
|
|
@@ -1701,6 +1742,16 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1701
1742
|
this.chatTypeMap.clear();
|
|
1702
1743
|
this.replyMsgId.clear();
|
|
1703
1744
|
this.msgSeqMap.clear();
|
|
1745
|
+
for (const [, state] of this.streamState) {
|
|
1746
|
+
if (state.timer)
|
|
1747
|
+
clearTimeout(state.timer);
|
|
1748
|
+
}
|
|
1749
|
+
this.streamState.clear();
|
|
1750
|
+
this.flushingSessions.clear();
|
|
1751
|
+
this.pendingStreamDelete.clear();
|
|
1752
|
+
this.flushedSessions.clear();
|
|
1753
|
+
this.seenMessages.clear();
|
|
1754
|
+
this.reconnectId++;
|
|
1704
1755
|
}
|
|
1705
1756
|
/**
|
|
1706
1757
|
* QQ Bot API V2 does not provide a typing indicator endpoint.
|
|
@@ -1711,6 +1762,182 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
1711
1762
|
}
|
|
1712
1763
|
onPromptEnd(_chatId, _sessionId, _messageId) {
|
|
1713
1764
|
}
|
|
1765
|
+
// ── Streaming (idle-flush with per-session buffers) ────────────
|
|
1766
|
+
onResponseChunk(chatId, chunk, sessionId) {
|
|
1767
|
+
if (this.blockStreaming)
|
|
1768
|
+
return;
|
|
1769
|
+
let state = this.streamState.get(sessionId);
|
|
1770
|
+
if (!state) {
|
|
1771
|
+
state = { chatId, buffer: chunk, timer: null, retryCount: 0 };
|
|
1772
|
+
this.streamState.set(sessionId, state);
|
|
1773
|
+
} else {
|
|
1774
|
+
state.buffer += chunk;
|
|
1775
|
+
if (state.timer) {
|
|
1776
|
+
clearTimeout(state.timer);
|
|
1777
|
+
state.timer = null;
|
|
1778
|
+
}
|
|
1779
|
+
if (state.buffer.length >= _QQChannel.MAX_BUFFER_LENGTH) {
|
|
1780
|
+
const buf = state.buffer;
|
|
1781
|
+
state.buffer = "";
|
|
1782
|
+
this.flushAndTrack(sessionId, buf, state, "idleFlush");
|
|
1783
|
+
return;
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1786
|
+
const reconnectId = this.reconnectId;
|
|
1787
|
+
state.timer = setTimeout(() => {
|
|
1788
|
+
this.idleFlush(sessionId, reconnectId);
|
|
1789
|
+
}, _QQChannel.IDLE_FLUSH_MS);
|
|
1790
|
+
state.timer.unref?.();
|
|
1791
|
+
}
|
|
1792
|
+
idleFlush(sessionId, reconnectId) {
|
|
1793
|
+
if (this.reconnectId !== reconnectId) {
|
|
1794
|
+
process.stderr.write(`[QQ:${this.name}] idleFlush discarded (reconnect) session=${sanitizeLogText(sessionId, 32)}
|
|
1795
|
+
`);
|
|
1796
|
+
return;
|
|
1797
|
+
}
|
|
1798
|
+
const state = this.streamState.get(sessionId);
|
|
1799
|
+
if (!state || !state.buffer)
|
|
1800
|
+
return;
|
|
1801
|
+
if (this.flushingSessions.has(sessionId)) {
|
|
1802
|
+
if (!state.timer) {
|
|
1803
|
+
const retryReconnectId = this.reconnectId;
|
|
1804
|
+
state.timer = setTimeout(() => {
|
|
1805
|
+
this.idleFlush(sessionId, retryReconnectId);
|
|
1806
|
+
}, _QQChannel.IDLE_FLUSH_MS);
|
|
1807
|
+
state.timer.unref?.();
|
|
1808
|
+
}
|
|
1809
|
+
return;
|
|
1810
|
+
}
|
|
1811
|
+
const buffer = state.buffer;
|
|
1812
|
+
state.buffer = "";
|
|
1813
|
+
state.timer = null;
|
|
1814
|
+
this.flushAndTrack(sessionId, buffer, state, "idleFlush");
|
|
1815
|
+
}
|
|
1816
|
+
/**
|
|
1817
|
+
* Shared send-and-track helper used by idleFlush and onToolCall.
|
|
1818
|
+
* Encapsulates .then() (cleanup on success) and .catch() (retry/re-buffer
|
|
1819
|
+
* on failure) logic to eliminate duplication.
|
|
1820
|
+
*/
|
|
1821
|
+
flushAndTrack(sessionId, buffer, state, logLabel) {
|
|
1822
|
+
this.flushingSessions.add(sessionId);
|
|
1823
|
+
this.sendMessage(state.chatId, buffer).then(() => {
|
|
1824
|
+
const current = this.streamState.get(sessionId);
|
|
1825
|
+
if (current !== state)
|
|
1826
|
+
return;
|
|
1827
|
+
current.retryCount = 0;
|
|
1828
|
+
this.flushedSessions.add(sessionId);
|
|
1829
|
+
if (this.pendingStreamDelete.has(sessionId)) {
|
|
1830
|
+
this.pendingStreamDelete.delete(sessionId);
|
|
1831
|
+
const s2 = this.streamState.get(sessionId);
|
|
1832
|
+
if (s2 === state && s2.buffer) {
|
|
1833
|
+
this.idleFlush(sessionId, this.reconnectId);
|
|
1834
|
+
}
|
|
1835
|
+
}
|
|
1836
|
+
const s = this.streamState.get(sessionId);
|
|
1837
|
+
if (s === state && !s.buffer) {
|
|
1838
|
+
this.streamState.delete(sessionId);
|
|
1839
|
+
}
|
|
1840
|
+
}).catch((e) => {
|
|
1841
|
+
process.stderr.write(`[QQ:${this.name}] ${logLabel} send failed: ${sanitizeLogText(e instanceof Error ? e.message : String(e), 200)}
|
|
1842
|
+
`);
|
|
1843
|
+
if (this.pendingStreamDelete.has(sessionId)) {
|
|
1844
|
+
this.pendingStreamDelete.delete(sessionId);
|
|
1845
|
+
const current = this.streamState.get(sessionId);
|
|
1846
|
+
if (current === state) {
|
|
1847
|
+
current.buffer = buffer;
|
|
1848
|
+
current.retryCount++;
|
|
1849
|
+
if (current.retryCount < _QQChannel.MAX_FLUSH_RETRIES) {
|
|
1850
|
+
const reconnectId = this.reconnectId;
|
|
1851
|
+
const delay = current.retryCount > 1 ? _QQChannel.IDLE_FLUSH_BACKOFF_MS : _QQChannel.IDLE_FLUSH_MS;
|
|
1852
|
+
current.timer = setTimeout(() => {
|
|
1853
|
+
this.idleFlush(sessionId, reconnectId);
|
|
1854
|
+
}, delay);
|
|
1855
|
+
current.timer.unref?.();
|
|
1856
|
+
} else {
|
|
1857
|
+
this.streamState.delete(sessionId);
|
|
1858
|
+
this.flushedSessions.delete(sessionId);
|
|
1859
|
+
process.stderr.write(`[QQ:${this.name}] ${logLabel} retries exhausted for ${sanitizeLogText(sessionId, 64)}
|
|
1860
|
+
`);
|
|
1861
|
+
}
|
|
1862
|
+
}
|
|
1863
|
+
} else {
|
|
1864
|
+
const current = this.streamState.get(sessionId);
|
|
1865
|
+
if (current === state) {
|
|
1866
|
+
current.buffer = buffer + (current.buffer || "");
|
|
1867
|
+
if (current.buffer.length >= _QQChannel.MAX_BUFFER_LENGTH) {
|
|
1868
|
+
this.idleFlush(sessionId, this.reconnectId);
|
|
1869
|
+
} else {
|
|
1870
|
+
current.retryCount++;
|
|
1871
|
+
if (current.retryCount < _QQChannel.MAX_FLUSH_RETRIES) {
|
|
1872
|
+
if (!current.timer) {
|
|
1873
|
+
const reconnectId = this.reconnectId;
|
|
1874
|
+
const delay = current.retryCount > 1 ? _QQChannel.IDLE_FLUSH_BACKOFF_MS : _QQChannel.IDLE_FLUSH_MS;
|
|
1875
|
+
current.timer = setTimeout(() => {
|
|
1876
|
+
this.idleFlush(sessionId, reconnectId);
|
|
1877
|
+
}, delay);
|
|
1878
|
+
current.timer.unref?.();
|
|
1879
|
+
}
|
|
1880
|
+
} else {
|
|
1881
|
+
this.streamState.delete(sessionId);
|
|
1882
|
+
this.flushedSessions.delete(sessionId);
|
|
1883
|
+
process.stderr.write(`[QQ:${this.name}] ${logLabel} retries exhausted for ${sanitizeLogText(sessionId, 64)}
|
|
1884
|
+
`);
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
}
|
|
1889
|
+
}).finally(() => {
|
|
1890
|
+
const current = this.streamState.get(sessionId);
|
|
1891
|
+
if (!current || current === state) {
|
|
1892
|
+
this.flushingSessions.delete(sessionId);
|
|
1893
|
+
}
|
|
1894
|
+
});
|
|
1895
|
+
}
|
|
1896
|
+
onToolCall(_chatId, event) {
|
|
1897
|
+
const state = this.streamState.get(event.sessionId);
|
|
1898
|
+
if (!state || !state.buffer)
|
|
1899
|
+
return;
|
|
1900
|
+
if (this.flushingSessions.has(event.sessionId))
|
|
1901
|
+
return;
|
|
1902
|
+
if (state.timer) {
|
|
1903
|
+
clearTimeout(state.timer);
|
|
1904
|
+
state.timer = null;
|
|
1905
|
+
}
|
|
1906
|
+
const buffer = state.buffer;
|
|
1907
|
+
state.buffer = "";
|
|
1908
|
+
this.flushAndTrack(event.sessionId, buffer, state, "toolCallFlush");
|
|
1909
|
+
}
|
|
1910
|
+
async onResponseComplete(chatId, fullText, sessionId) {
|
|
1911
|
+
const state = this.streamState.get(sessionId);
|
|
1912
|
+
if (state?.timer) {
|
|
1913
|
+
clearTimeout(state.timer);
|
|
1914
|
+
state.timer = null;
|
|
1915
|
+
}
|
|
1916
|
+
if (state && this.flushingSessions.has(sessionId)) {
|
|
1917
|
+
this.pendingStreamDelete.add(sessionId);
|
|
1918
|
+
process.stderr.write(`[QQ:${this.name}] onResponseComplete deferred (flush in-flight) session=${sanitizeLogText(sessionId, 32)}
|
|
1919
|
+
`);
|
|
1920
|
+
return;
|
|
1921
|
+
}
|
|
1922
|
+
const wasFlushed = this.flushedSessions.has(sessionId);
|
|
1923
|
+
const remaining = state?.buffer ?? (wasFlushed ? "" : fullText);
|
|
1924
|
+
this.streamState.delete(sessionId);
|
|
1925
|
+
this.flushedSessions.delete(sessionId);
|
|
1926
|
+
if (remaining) {
|
|
1927
|
+
await super.onResponseComplete(chatId, remaining, sessionId);
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
onSessionDied(sessionId) {
|
|
1931
|
+
const state = this.streamState.get(sessionId);
|
|
1932
|
+
if (state?.timer) {
|
|
1933
|
+
clearTimeout(state.timer);
|
|
1934
|
+
}
|
|
1935
|
+
this.streamState.delete(sessionId);
|
|
1936
|
+
this.flushingSessions.delete(sessionId);
|
|
1937
|
+
this.pendingStreamDelete.delete(sessionId);
|
|
1938
|
+
this.flushedSessions.delete(sessionId);
|
|
1939
|
+
super.onSessionDied(sessionId);
|
|
1940
|
+
}
|
|
1714
1941
|
// ── State Persistence (cross-server context continuation) ──────
|
|
1715
1942
|
/** Debounced state persistence to avoid blocking event loop. */
|
|
1716
1943
|
saveQQState() {
|
|
@@ -2008,6 +2235,13 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
2008
2235
|
dialGateway(url, resolve, reject) {
|
|
2009
2236
|
this.ws = new wrapper_default(url);
|
|
2010
2237
|
const dialed = this.ws;
|
|
2238
|
+
this.readyTimeout = setTimeout(() => {
|
|
2239
|
+
if (this.ws !== dialed)
|
|
2240
|
+
return;
|
|
2241
|
+
this.ws.close(4002, "READY timeout");
|
|
2242
|
+
reject(new Error(`[QQ:${this.name}] READY timeout after 30s`));
|
|
2243
|
+
}, 3e4);
|
|
2244
|
+
this.readyTimeout.unref?.();
|
|
2011
2245
|
this.ws.on("open", () => {
|
|
2012
2246
|
process.stderr.write(`[QQ:${this.name}] WebSocket connected
|
|
2013
2247
|
`);
|
|
@@ -2026,6 +2260,10 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
2026
2260
|
return;
|
|
2027
2261
|
process.stderr.write(`[QQ:${this.name}] WebSocket closed (code=${code})
|
|
2028
2262
|
`);
|
|
2263
|
+
if (this.readyTimeout) {
|
|
2264
|
+
clearTimeout(this.readyTimeout);
|
|
2265
|
+
this.readyTimeout = null;
|
|
2266
|
+
}
|
|
2029
2267
|
this.stopHeartbeat();
|
|
2030
2268
|
this.ws = null;
|
|
2031
2269
|
const shouldReconnect = this.serverRequestedReconnect || code !== 1e3 && this.reconnectAttempts < this.maxReconnectAttempts;
|
|
@@ -2080,6 +2318,10 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
2080
2318
|
if (t === "READY") {
|
|
2081
2319
|
this.reconnectAttempts = 0;
|
|
2082
2320
|
this.isReconnecting = false;
|
|
2321
|
+
if (this.readyTimeout) {
|
|
2322
|
+
clearTimeout(this.readyTimeout);
|
|
2323
|
+
this.readyTimeout = null;
|
|
2324
|
+
}
|
|
2083
2325
|
this.sessionId = msg["d"]?.["session_id"] || "";
|
|
2084
2326
|
this.tryResume = true;
|
|
2085
2327
|
this.connectReject = null;
|
|
@@ -2101,6 +2343,10 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
2101
2343
|
} else if (t === "RESUMED") {
|
|
2102
2344
|
this.reconnectAttempts = 0;
|
|
2103
2345
|
this.isReconnecting = false;
|
|
2346
|
+
if (this.readyTimeout) {
|
|
2347
|
+
clearTimeout(this.readyTimeout);
|
|
2348
|
+
this.readyTimeout = null;
|
|
2349
|
+
}
|
|
2104
2350
|
this.connectReject = null;
|
|
2105
2351
|
this.startHeartbeat();
|
|
2106
2352
|
onReady();
|
|
@@ -2218,6 +2464,7 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
2218
2464
|
}
|
|
2219
2465
|
this.ws.send(JSON.stringify({ op: OpCode.HEARTBEAT, d: this.seq }));
|
|
2220
2466
|
}, this.heartbeatInterval);
|
|
2467
|
+
this.heartbeatTimer.unref();
|
|
2221
2468
|
}
|
|
2222
2469
|
stopHeartbeat() {
|
|
2223
2470
|
if (this.heartbeatTimer) {
|
|
@@ -2252,6 +2499,8 @@ var QQChannel = class _QQChannel extends ChannelBase {
|
|
|
2252
2499
|
return;
|
|
2253
2500
|
if (!event.content?.trim())
|
|
2254
2501
|
return;
|
|
2502
|
+
if (!event.author)
|
|
2503
|
+
return;
|
|
2255
2504
|
const chatId = event.author.user_openid || event.author.id;
|
|
2256
2505
|
this.chatTypeMap.set(chatId, "c2c");
|
|
2257
2506
|
this.setReplyMsgId(chatId, event.id);
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
isTerminalTaskLifecycleType,
|
|
12
12
|
sanitizeLogText,
|
|
13
13
|
sanitizeSenderName
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2NPS2UDH.js";
|
|
15
15
|
import "./chunk-VRDMOSQS.js";
|
|
16
16
|
import "./chunk-K5PGHDBN.js";
|
|
17
17
|
import "./chunk-UWCTAVOD.js";
|
|
@@ -4309,8 +4309,8 @@ function isTableSeparator(line) {
|
|
|
4309
4309
|
const trimmed = line.trim();
|
|
4310
4310
|
if (!trimmed.includes("-"))
|
|
4311
4311
|
return false;
|
|
4312
|
-
const cells = trimmed.replace(/^\|/, "").replace(/\|$/, "").split("|").map((
|
|
4313
|
-
return cells.length > 0 && cells.every((
|
|
4312
|
+
const cells = trimmed.replace(/^\|/, "").replace(/\|$/, "").split("|").map((cell) => cell.trim());
|
|
4313
|
+
return cells.length > 0 && cells.every((cell) => /^:?-{3,}:?$/.test(cell));
|
|
4314
4314
|
}
|
|
4315
4315
|
__name(isTableSeparator, "isTableSeparator");
|
|
4316
4316
|
function isTableRow(line) {
|
|
@@ -4319,7 +4319,7 @@ function isTableRow(line) {
|
|
|
4319
4319
|
}
|
|
4320
4320
|
__name(isTableRow, "isTableRow");
|
|
4321
4321
|
function parseTableRow(line) {
|
|
4322
|
-
return line.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map((
|
|
4322
|
+
return line.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map((cell) => cell.trim());
|
|
4323
4323
|
}
|
|
4324
4324
|
__name(parseTableRow, "parseTableRow");
|
|
4325
4325
|
function renderTable(lines) {
|
|
@@ -4432,8 +4432,7 @@ function extractTitle(text) {
|
|
|
4432
4432
|
}
|
|
4433
4433
|
__name(extractTitle, "extractTitle");
|
|
4434
4434
|
function normalizeDingTalkMarkdown(text) {
|
|
4435
|
-
|
|
4436
|
-
return splitChunks(converted);
|
|
4435
|
+
return splitChunks(convertTables(text));
|
|
4437
4436
|
}
|
|
4438
4437
|
__name(normalizeDingTalkMarkdown, "normalizeDingTalkMarkdown");
|
|
4439
4438
|
|
|
@@ -4760,13 +4759,13 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
4760
4759
|
return this.client.getConfig().access_token;
|
|
4761
4760
|
}
|
|
4762
4761
|
async emotionApi(endpoint, msgId, conversationId) {
|
|
4763
|
-
const token = this.getAccessToken();
|
|
4764
|
-
if (!token)
|
|
4765
|
-
return;
|
|
4766
4762
|
const robotCode = this.config.clientId;
|
|
4767
4763
|
if (!robotCode || !msgId || !conversationId)
|
|
4768
4764
|
return;
|
|
4769
4765
|
try {
|
|
4766
|
+
const token = this.config.clientSecret ? await this.getProactiveToken() : this.getAccessToken();
|
|
4767
|
+
if (!token)
|
|
4768
|
+
return;
|
|
4770
4769
|
const resp = await fetch(`${EMOTION_API}/${endpoint}`, {
|
|
4771
4770
|
method: "POST",
|
|
4772
4771
|
headers: {
|
|
@@ -4788,7 +4787,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
4788
4787
|
})
|
|
4789
4788
|
});
|
|
4790
4789
|
if (!resp.ok) {
|
|
4791
|
-
const detail = await resp.text().catch(() => "");
|
|
4790
|
+
const detail = sanitizeLogText(await resp.text().catch(() => ""), 500);
|
|
4792
4791
|
process.stderr.write(`[DingTalk:${this.name}] emotion/${endpoint} failed: ${resp.status} ${detail}
|
|
4793
4792
|
`);
|
|
4794
4793
|
}
|
|
@@ -5117,7 +5116,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
5117
5116
|
const content = this.extractContent(data);
|
|
5118
5117
|
let cleanText = content.text;
|
|
5119
5118
|
if (isMentioned) {
|
|
5120
|
-
cleanText = cleanText.replace(
|
|
5119
|
+
cleanText = cleanText.replace(/@[^\s\p{Cf}]+/u, "").trim();
|
|
5121
5120
|
}
|
|
5122
5121
|
const quoted = this.extractQuotedContext(data);
|
|
5123
5122
|
const chatId = conversationId || sessionWebhook;
|
|
@@ -7,52 +7,52 @@ import {
|
|
|
7
7
|
startEarlyInputCapture,
|
|
8
8
|
stopAndGetCapturedInput,
|
|
9
9
|
stopEarlyInputCapture
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-CSOTA7KX.js";
|
|
11
|
+
import "./chunk-E7HM76PR.js";
|
|
12
12
|
import "./chunk-5P5XGNYH.js";
|
|
13
13
|
import "./chunk-SKAZWEV5.js";
|
|
14
14
|
import "./chunk-K5PGHDBN.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-3B26UVCX.js";
|
|
16
|
+
import "./chunk-W7EEOR7D.js";
|
|
17
|
+
import "./chunk-42XGFRJS.js";
|
|
18
|
+
import "./chunk-X2XNQQJI.js";
|
|
19
|
+
import "./chunk-VZ7HY3YU.js";
|
|
20
20
|
import "./chunk-2MPVVENX.js";
|
|
21
21
|
import "./chunk-ZTQ26VBE.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-FV7425LN.js";
|
|
23
23
|
import "./chunk-MLZQVCF3.js";
|
|
24
24
|
import "./chunk-LQ7TMOCE.js";
|
|
25
25
|
import "./chunk-E5A7LHNN.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-VEB3NYSO.js";
|
|
27
27
|
import "./chunk-GO6LNQXT.js";
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-NQKLOAVJ.js";
|
|
29
|
+
import "./chunk-WMPVYQ4P.js";
|
|
30
|
+
import "./chunk-TLWA7TPR.js";
|
|
31
|
+
import "./chunk-QYNNN7BK.js";
|
|
32
|
+
import "./chunk-7I4MGFBN.js";
|
|
33
33
|
import "./chunk-E6US47KI.js";
|
|
34
34
|
import "./chunk-UWCTAVOD.js";
|
|
35
35
|
import "./chunk-OFEVLU4C.js";
|
|
36
36
|
import "./chunk-OMX7CUOE.js";
|
|
37
|
-
import "./chunk-
|
|
38
|
-
import "./chunk-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-
|
|
37
|
+
import "./chunk-4KJ2BPIT.js";
|
|
38
|
+
import "./chunk-SUAKHHK7.js";
|
|
39
|
+
import "./chunk-FEJ2FZ3U.js";
|
|
40
|
+
import "./chunk-X3YGAX7V.js";
|
|
41
|
+
import "./chunk-IJRL2S3D.js";
|
|
42
|
+
import "./chunk-AHNJGLFV.js";
|
|
43
43
|
import "./chunk-22IFUCVR.js";
|
|
44
|
-
import "./chunk-
|
|
44
|
+
import "./chunk-7LTB54MK.js";
|
|
45
45
|
import "./chunk-SIUQ3YYX.js";
|
|
46
|
-
import "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
import "./chunk-HW4N45EE.js";
|
|
47
|
+
import "./chunk-CCGOFQV3.js";
|
|
48
48
|
import "./chunk-IRJWHZWU.js";
|
|
49
49
|
import "./chunk-SYCJMSIJ.js";
|
|
50
50
|
import "./chunk-55ZMG67I.js";
|
|
51
51
|
import "./chunk-H6BD2ELD.js";
|
|
52
52
|
import "./chunk-5IFG2VC4.js";
|
|
53
53
|
import "./chunk-64WXLC72.js";
|
|
54
|
-
import "./chunk-
|
|
55
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-H6EMK6QK.js";
|
|
55
|
+
import "./chunk-22MNNNXE.js";
|
|
56
56
|
import "./chunk-ZERZSAZL.js";
|
|
57
57
|
import "./chunk-QN5NZ3UQ.js";
|
|
58
58
|
import "./chunk-BR4QREVK.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
checkTeamMemorySecrets
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TDGF35EN.js";
|
|
6
6
|
import {
|
|
7
7
|
CommitAttributionService,
|
|
8
8
|
FileEncoding,
|
|
@@ -13,27 +13,27 @@ import {
|
|
|
13
13
|
getDiffStat,
|
|
14
14
|
needsUtf8Bom,
|
|
15
15
|
safeLiteralReplace
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-E7HM76PR.js";
|
|
17
17
|
import "./chunk-5P5XGNYH.js";
|
|
18
18
|
import "./chunk-SKAZWEV5.js";
|
|
19
19
|
import "./chunk-K5PGHDBN.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-3B26UVCX.js";
|
|
21
|
+
import "./chunk-W7EEOR7D.js";
|
|
22
|
+
import "./chunk-42XGFRJS.js";
|
|
23
|
+
import "./chunk-X2XNQQJI.js";
|
|
24
|
+
import "./chunk-VZ7HY3YU.js";
|
|
25
25
|
import "./chunk-2MPVVENX.js";
|
|
26
26
|
import "./chunk-ZTQ26VBE.js";
|
|
27
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-FV7425LN.js";
|
|
28
28
|
import "./chunk-MLZQVCF3.js";
|
|
29
29
|
import "./chunk-LQ7TMOCE.js";
|
|
30
30
|
import "./chunk-E5A7LHNN.js";
|
|
31
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-VEB3NYSO.js";
|
|
32
32
|
import "./chunk-GO6LNQXT.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-NQKLOAVJ.js";
|
|
34
|
+
import "./chunk-WMPVYQ4P.js";
|
|
35
|
+
import "./chunk-TLWA7TPR.js";
|
|
36
|
+
import "./chunk-QYNNN7BK.js";
|
|
37
37
|
import {
|
|
38
38
|
FileOperationEvent,
|
|
39
39
|
ReadFileTool,
|
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
getLanguageFromFilePath,
|
|
42
42
|
getSpecificMimeType,
|
|
43
43
|
logFileOperation
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-7I4MGFBN.js";
|
|
45
45
|
import "./chunk-E6US47KI.js";
|
|
46
46
|
import "./chunk-UWCTAVOD.js";
|
|
47
47
|
import "./chunk-OFEVLU4C.js";
|
|
@@ -49,28 +49,28 @@ import "./chunk-OMX7CUOE.js";
|
|
|
49
49
|
import {
|
|
50
50
|
isAnyAutoMemPath,
|
|
51
51
|
isTeamAutoMemPath
|
|
52
|
-
} from "./chunk-
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
52
|
+
} from "./chunk-4KJ2BPIT.js";
|
|
53
|
+
import "./chunk-SUAKHHK7.js";
|
|
54
|
+
import "./chunk-FEJ2FZ3U.js";
|
|
55
55
|
import {
|
|
56
56
|
BaseDeclarativeTool,
|
|
57
57
|
ToolDisplayNames,
|
|
58
58
|
ToolNames
|
|
59
|
-
} from "./chunk-
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-
|
|
59
|
+
} from "./chunk-X3YGAX7V.js";
|
|
60
|
+
import "./chunk-IJRL2S3D.js";
|
|
61
|
+
import "./chunk-AHNJGLFV.js";
|
|
62
62
|
import "./chunk-22IFUCVR.js";
|
|
63
|
-
import "./chunk-
|
|
63
|
+
import "./chunk-7LTB54MK.js";
|
|
64
64
|
import "./chunk-SIUQ3YYX.js";
|
|
65
|
-
import "./chunk-
|
|
66
|
-
import "./chunk-
|
|
65
|
+
import "./chunk-HW4N45EE.js";
|
|
66
|
+
import "./chunk-CCGOFQV3.js";
|
|
67
67
|
import "./chunk-IRJWHZWU.js";
|
|
68
68
|
import "./chunk-SYCJMSIJ.js";
|
|
69
69
|
import "./chunk-55ZMG67I.js";
|
|
70
70
|
import "./chunk-H6BD2ELD.js";
|
|
71
71
|
import "./chunk-5IFG2VC4.js";
|
|
72
72
|
import "./chunk-64WXLC72.js";
|
|
73
|
-
import "./chunk-
|
|
73
|
+
import "./chunk-H6EMK6QK.js";
|
|
74
74
|
import {
|
|
75
75
|
createDebugLogger,
|
|
76
76
|
getErrorMessage,
|
|
@@ -78,7 +78,7 @@ import {
|
|
|
78
78
|
makeRelative,
|
|
79
79
|
shortenPath,
|
|
80
80
|
unescapePath
|
|
81
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-22MNNNXE.js";
|
|
82
82
|
import "./chunk-ZERZSAZL.js";
|
|
83
83
|
import "./chunk-QN5NZ3UQ.js";
|
|
84
84
|
import "./chunk-BR4QREVK.js";
|
|
@@ -1056,6 +1056,7 @@ var en_default = {
|
|
|
1056
1056
|
"Size:": "Size:",
|
|
1057
1057
|
"{{count}} bytes": "{{count}} bytes",
|
|
1058
1058
|
"Reference in chat": "Reference in chat",
|
|
1059
|
+
"MCP server": "MCP server",
|
|
1059
1060
|
"MCP resource server": "MCP resource server",
|
|
1060
1061
|
// Invalid tool related translations
|
|
1061
1062
|
"{{count}} invalid tools": "{{count}} invalid tools",
|
|
@@ -1087,7 +1088,7 @@ var en_default = {
|
|
|
1087
1088
|
// ============================================================================
|
|
1088
1089
|
"Switch the model for this session (--fast for suggestion model, [model-id] to switch immediately).": "Switch the model for this session (--fast for suggestion model, [model-id] to switch immediately).",
|
|
1089
1090
|
"Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, [model-id] to switch immediately).": "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, [model-id] to switch immediately).",
|
|
1090
|
-
"Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion).": "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion).",
|
|
1091
|
+
"Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, --project to persist to project settings, --global to persist to user settings, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion).": "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, --project to persist to project settings, --global to persist to user settings, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion).",
|
|
1091
1092
|
"Inline one-shot override isn't supported in this mode \u2014 run '/model {{model}}' first, then send your prompt.": "Inline one-shot override isn't supported in this mode \u2014 run '/model {{model}}' first, then send your prompt.",
|
|
1092
1093
|
"Inline one-shot override can't switch providers. '{{model}}' belongs to a different provider \u2014 run '/model {{model}}' first, then send your prompt.": "Inline one-shot override can't switch providers. '{{model}}' belongs to a different provider \u2014 run '/model {{model}}' first, then send your prompt.",
|
|
1093
1094
|
"\u26A0 '{{model}}' is not a known image-capable model; the vision bridge may fail on images.": "\u26A0 '{{model}}' is not a known image-capable model; the vision bridge may fail on images.",
|
|
@@ -1095,6 +1096,8 @@ var en_default = {
|
|
|
1095
1096
|
"Toggle voice dictation input": "Toggle voice dictation input",
|
|
1096
1097
|
"Set the model for voice transcription": "Set the model for voice transcription",
|
|
1097
1098
|
"Set the image-capable model used to transcribe images for a text-only main model": "Set the image-capable model used to transcribe images for a text-only main model",
|
|
1099
|
+
"Persist the model selection to the project settings (workspace scope)": "Persist the model selection to the project settings (workspace scope)",
|
|
1100
|
+
"Persist the model selection to the user settings (global scope)": "Persist the model selection to the user settings (global scope)",
|
|
1098
1101
|
"Select Fast Model": "Select Fast Model",
|
|
1099
1102
|
"Select Vision Model": "Select Vision Model",
|
|
1100
1103
|
"Select Voice Model": "Select Voice Model",
|
|
@@ -1257,6 +1260,8 @@ var en_default = {
|
|
|
1257
1260
|
// Dialogs - Model
|
|
1258
1261
|
// ============================================================================
|
|
1259
1262
|
"Select Model": "Select Model",
|
|
1263
|
+
" (this project)": " (this project)",
|
|
1264
|
+
" (global)": " (global)",
|
|
1260
1265
|
"API Key": "API Key",
|
|
1261
1266
|
"(default)": "(default)",
|
|
1262
1267
|
"(not set)": "(not set)",
|