@qwen-code/qwen-code 0.19.9 → 0.19.10-nightly.20260715.c538bd70d
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/settings.md +8 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +11 -3
- package/bundled/qc-helper/docs/features/code-review.md +88 -44
- package/bundled/qc-helper/docs/features/commands.md +6 -6
- package/bundled/qc-helper/docs/features/hooks.md +29 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
- package/bundled/qc-helper/docs/qwen-serve.md +46 -20
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +219 -33
- package/bundled/review/SKILL.md +449 -153
- package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-LOOBDOTZ.js} +31 -31
- package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-76CLZSH2.js} +51 -49
- package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-DFJOK7EB.js} +567 -482
- package/chunks/{agent-HOLHB3RT.js → agent-OJQWXNHP.js} +26 -26
- package/chunks/{agent-headless-SXL6H56A.js → agent-headless-ND7GOORY.js} +26 -26
- package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-56U3YCP2.js} +5 -5
- package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-MIZLXBLF.js} +2 -2
- package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-XMJVPNWM.js} +2 -2
- package/chunks/{bridge-BCJQ7BBB.js → bridge-SNJK2JLK.js} +32 -32
- package/chunks/{ca-UJ6HC4H2.js → ca-C2JTT2N5.js} +4 -1
- package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
- package/chunks/channel-worker-manager-YSFB4HUU.js +418 -0
- package/chunks/channel-worker-supervisor-QCKIOYZD.js +20 -0
- package/chunks/{chunk-CCDMCZPP.js → chunk-26UABK2C.js} +1 -1
- package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
- package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
- package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
- package/chunks/chunk-3MX7D6QN.js +516 -0
- package/chunks/{chunk-CLFKOZEK.js → chunk-3XULHBC7.js} +1 -1
- package/chunks/chunk-4QZADKJS.js +34 -0
- package/chunks/{chunk-E2IY465S.js → chunk-4UDHAJFV.js} +10 -10
- package/chunks/{chunk-5U27BZ72.js → chunk-55SAYASQ.js} +190 -77
- package/chunks/chunk-5HBA2Z7V.js +28 -0
- package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
- package/chunks/{chunk-HVY356M2.js → chunk-5SQ55XJZ.js} +3 -3
- package/chunks/{chunk-EAXLGSFP.js → chunk-6GRAQNTY.js} +8 -8
- package/chunks/{chunk-K434OPES.js → chunk-6WPJRYLZ.js} +3 -3
- package/chunks/{chunk-VWPVHAMO.js → chunk-7DXHIMXL.js} +5 -1
- package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
- package/chunks/{chunk-5SFOMFG4.js → chunk-7R4DPSRA.js} +36 -2
- package/chunks/{chunk-W2UIXQDL.js → chunk-7STBROEV.js} +1 -1
- package/chunks/{chunk-BMGVRZN4.js → chunk-AETEZU4U.js} +1 -1
- package/chunks/{chunk-HPDUL5MF.js → chunk-AGZWN4WV.js} +1 -1
- package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
- package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
- package/chunks/{chunk-34Z3U5RQ.js → chunk-AU4R7ACM.js} +518 -114
- package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-B7MFJBKE.js} +67 -35
- package/chunks/{chunk-524RQP4Q.js → chunk-B7NUUEXC.js} +10 -4
- package/chunks/{chunk-MC23XKFE.js → chunk-BLPMRN4B.js} +3 -3
- package/chunks/{chunk-A3XKDTSH.js → chunk-BRRKAUGR.js} +4 -4
- package/chunks/{chunk-W3JHSWRP.js → chunk-BUPLOPUA.js} +4 -4
- package/chunks/{chunk-3VAGG5T5.js → chunk-BYOOK22F.js} +121 -16
- package/chunks/{chunk-EMDMPBJ4.js → chunk-C47ENMZJ.js} +3 -3
- package/chunks/{chunk-3AHXV67U.js → chunk-C5TVXLJZ.js} +1 -1
- package/chunks/{chunk-X6TJ3YZV.js → chunk-CGT5TQIZ.js} +159 -57
- package/chunks/{chunk-4C5BQ2D2.js → chunk-CQQD7MDG.js} +82 -12
- package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
- package/chunks/{chunk-P67PFTUT.js → chunk-EPY4ZEU6.js} +4 -4
- package/chunks/{chunk-6PESIEKJ.js → chunk-EZSRHWGS.js} +68 -6
- package/chunks/{chunk-4GORAUCN.js → chunk-F333XEAU.js} +1 -1
- package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
- package/chunks/{chunk-Q6I5QHMH.js → chunk-FGTCZJOD.js} +1 -1
- package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
- package/chunks/{chunk-B4G2WOFA.js → chunk-FTU55ZZ7.js} +3 -3
- package/chunks/{chunk-EGYZ275M.js → chunk-GCD7PEDZ.js} +4 -4
- package/chunks/{chunk-SJHDYNHF.js → chunk-GDQQRV43.js} +3 -3
- package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
- package/chunks/{chunk-GZRTYZ2R.js → chunk-GQKWT45X.js} +154 -1
- package/chunks/chunk-GYTKQYDB.js +23 -0
- package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
- package/chunks/{chunk-N3EMS75V.js → chunk-HKM2TEF7.js} +1268 -1233
- package/chunks/chunk-IDS7MSUP.js +74 -0
- package/chunks/{chunk-PVZM22CK.js → chunk-INKAZNYC.js} +5 -5
- package/chunks/{chunk-3G7CIHVV.js → chunk-IOQ75R4R.js} +4 -4
- package/chunks/{chunk-AURZZYMD.js → chunk-IQOOJSPR.js} +4 -4
- package/chunks/{chunk-AKIVHSJR.js → chunk-J4UQXGVL.js} +111 -93
- package/chunks/{chunk-VTU57BWZ.js → chunk-JEKOCLRN.js} +1 -1
- package/chunks/{chunk-B5ORX3FG.js → chunk-JGUT3LWZ.js} +6 -1
- package/chunks/{chunk-PDZ7MBDG.js → chunk-JIQHT2O6.js} +27 -6
- package/chunks/{chunk-XUOOWUZS.js → chunk-JPAH76WA.js} +1 -1
- package/chunks/{chunk-BAPGSC7U.js → chunk-K4LG6TVJ.js} +23 -9
- package/chunks/chunk-KET3M4K4.js +493 -0
- package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
- package/chunks/{chunk-SCGXUJBT.js → chunk-KPA5QGN2.js} +3 -3
- package/chunks/{chunk-IAVB3HM3.js → chunk-KSO42X3Z.js} +13 -0
- package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
- package/chunks/{chunk-77XJ3SWN.js → chunk-LIUEXYPL.js} +5 -5
- package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
- package/chunks/{chunk-34MW4KTI.js → chunk-LT5CRUA5.js} +2 -2
- package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
- package/chunks/{chunk-VA4KQY6V.js → chunk-MEK7CQJR.js} +3 -3
- package/chunks/{chunk-KHUQZZJ6.js → chunk-MO7O5722.js} +370 -36
- package/chunks/chunk-MR3PXB6E.js +48 -0
- package/chunks/{chunk-PODM4SZ4.js → chunk-MV52C5MA.js} +5 -5
- package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
- package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
- package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
- package/chunks/{chunk-ECNYL4AA.js → chunk-OPNPGO6D.js} +1 -1
- package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
- package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
- package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
- package/chunks/{chunk-5HOMWMCL.js → chunk-QEDYXCLG.js} +4167 -1338
- package/chunks/chunk-QNNTA7IX.js +91 -0
- package/chunks/{chunk-D2GFWEXB.js → chunk-QNT5T4Q2.js} +6 -6
- package/chunks/{chunk-CUMMSHH6.js → chunk-R5XLNDE2.js} +1 -1
- package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
- package/chunks/{chunk-WQUQVGTF.js → chunk-RQWDLG6Z.js} +183 -96
- package/chunks/{chunk-XYQSMABS.js → chunk-SLCVZX6F.js} +4 -4
- package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
- package/chunks/{chunk-JSG7ZSBC.js → chunk-TQBODCFD.js} +1 -1
- package/chunks/chunk-TV6K2FB4.js +224 -0
- package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
- package/chunks/{chunk-CNEIYWSA.js → chunk-UKWAQ7AV.js} +5 -5
- package/chunks/{chunk-7PU4FYLG.js → chunk-US4YQT62.js} +4 -4
- package/chunks/{chunk-Q4YQW46J.js → chunk-UYPPCIJQ.js} +36 -18
- package/chunks/{chunk-YAUFFXDS.js → chunk-UZKG7HFG.js} +12 -11
- package/chunks/{chunk-GWLSNBG4.js → chunk-VQLRHJKL.js} +30 -26
- package/chunks/{chunk-L6P4KPHR.js → chunk-VRUHAVZS.js} +59 -39
- package/chunks/{chunk-HKMAENAO.js → chunk-W2U4RJJU.js} +8 -6
- package/chunks/{chunk-ATAKVRIF.js → chunk-WDSCTLAB.js} +7 -7
- package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
- package/chunks/{chunk-OQ4DRIOA.js → chunk-WJOC24IW.js} +2 -2
- package/chunks/{chunk-J3JA76CF.js → chunk-WTNZ6DXB.js} +1 -1
- package/chunks/{chunk-NVYTCB5Z.js → chunk-XCR44EEA.js} +14589 -13980
- package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
- package/chunks/{chunk-CC2ITGCF.js → chunk-YHN5SUIJ.js} +49 -6
- package/chunks/{chunk-D5SKC4YG.js → chunk-ZBAROUR6.js} +41 -13
- package/chunks/{chunk-U2NNEY4R.js → chunk-ZEEVKDO7.js} +1 -1
- package/chunks/{chunk-5VXNZWGF.js → chunk-ZLOHB76C.js} +1 -1
- package/chunks/{chunk-JZETEN3Z.js → chunk-ZNCLTRNU.js} +3 -3
- package/chunks/{chunk-TO6QE22P.js → chunk-ZP4ZZJJG.js} +26 -22
- package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
- package/chunks/{chunk-XLA62MYB.js → chunk-ZTXZ7FM4.js} +2 -2
- package/chunks/{computer-use-HM37RX6A.js → computer-use-DRETHEQF.js} +26 -26
- package/chunks/{config-utils-NV2SVGPB.js → config-utils-XSHOMMK4.js} +3 -2
- package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-7YJUW23J.js} +28 -28
- package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-EAB2U5XW.js} +2 -2
- package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-L5HOZAEL.js} +26 -26
- package/chunks/{cron-create-AMBKGZX6.js → cron-create-GMVKSXZT.js} +4 -4
- package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-VDZKUAVK.js} +4 -4
- package/chunks/{cron-list-WVP2JXER.js → cron-list-UG7C7RAR.js} +4 -4
- package/chunks/{daemon-ARHTSTXP.js → daemon-MI5HF26N.js} +603 -62
- package/chunks/{daemon-status-provider-B2UTZUJ2.js → daemon-status-provider-2D47GOJT.js} +36 -36
- package/chunks/{de-EBJN3OVN.js → de-2VCDRDGU.js} +4 -1
- package/chunks/{dist-WKPOYU7O.js → dist-IEXZC5ZR.js} +1 -1
- package/chunks/{dist-XKU3ABM5.js → dist-PQK4GCKA.js} +1 -1
- package/chunks/{dist-VHV4EVHG.js → dist-U75JK3PF.js} +1 -1
- package/chunks/{dist-R7LN5AZE.js → dist-VXO7QBON.js} +2 -2
- package/chunks/{dist-PNVLTKTL.js → dist-WH4TZSH3.js} +158 -4
- package/chunks/{dist-QYCAEZIT.js → dist-X2ABIW5R.js} +5 -1
- package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-OJQPGCSX.js} +27 -27
- package/chunks/{edit-VNI4NJ73.js → edit-LZOAFLT2.js} +27 -27
- package/chunks/{en-5A6LA7RK.js → en-NJCA3TAA.js} +5 -1
- package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-VL2TCGI5.js} +26 -26
- package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-QGHBHZWI.js} +42 -27
- package/chunks/{environment-5HSSRMJ7.js → environment-2G5IC2EU.js} +30 -29
- package/chunks/{errors-HMFCJJ7P.js → errors-7QNQDNI2.js} +28 -28
- package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-5V3X2MRH.js} +26 -26
- package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-XDPNQB4H.js} +26 -26
- package/chunks/{fast-path-FRDMDVHG.js → fast-path-NNSD4BVZ.js} +3 -3
- package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
- package/chunks/{fr-YXRABLYZ.js → fr-5F3E7WKD.js} +4 -1
- package/chunks/{gemini-QYSEGHAX.js → gemini-RKDUWGXJ.js} +139 -76
- package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-V7QGHXVF.js} +4 -4
- package/chunks/{glob-BRCSGFOT.js → glob-ZNQUUOTS.js} +28 -27
- package/chunks/{grep-EE2DUOSY.js → grep-NYIGLM7R.js} +26 -26
- package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-UBQ4IQXY.js} +30 -30
- package/chunks/{i18n-BASPENNQ.js → i18n-5T3S6SGP.js} +27 -27
- package/chunks/initializer-TJED246Q.js +73 -0
- package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-OTEU7FKR.js} +27 -27
- package/chunks/{ja-7VQOANVG.js → ja-66J6B53L.js} +5 -2
- package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
- package/chunks/list-6OHS7MFJ.js +76 -0
- package/chunks/loadedSettingsAdapter-5456XIYG.js +70 -0
- package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-C4EXLYVA.js} +5 -5
- package/chunks/{ls-ZB2BDP6T.js → ls-2OUTG3IZ.js} +4 -4
- package/chunks/{lsp-V5DN4YUJ.js → lsp-4VMNXZW6.js} +2 -2
- package/chunks/mcp-NOWRPFKY.js +70 -0
- package/chunks/{monitor-X5Z3H4FY.js → monitor-CVDZO3IZ.js} +26 -26
- package/chunks/nonInteractiveCli-UGI7Y43E.js +129 -0
- package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-NWIA5TEJ.js} +27 -27
- package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-KJONBBJO.js} +12 -12
- package/chunks/{pidfile-D4I4FTVA.js → pidfile-L3TGXMTF.js} +27 -27
- package/chunks/{pt-2C6YCSHL.js → pt-TFZO5Y6T.js} +4 -1
- package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-GXUZB5SJ.js} +28 -28
- package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
- package/chunks/{read-file-7SZSIZOL.js → read-file-I4OUZXTA.js} +8 -8
- package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-JUFHCKSC.js} +2 -2
- package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-DWSMBXYY.js} +2 -2
- package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-XLCXANIO.js} +26 -26
- package/chunks/{ru-6BBHVZZV.js → ru-4L4LFHIT.js} +4 -1
- package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-R6SBP6YS.js} +1232 -371
- package/chunks/{runtime-57WWRVHN.js → runtime-U3S33YUQ.js} +42 -37
- package/chunks/{scheduler-YBLGWSIL.js → scheduler-65QCIELP.js} +26 -26
- package/chunks/{send-message-F36YD6KQ.js → send-message-JZ752NWD.js} +3 -3
- package/chunks/{serve-R63NK3CV.js → serve-PSPOFCOD.js} +36 -34
- package/chunks/{server-Z22GCAXP.js → server-6P5ZB56O.js} +5561 -1377
- package/chunks/{session-HKAAI7BN.js → session-ILLOYW75.js} +298 -98
- package/chunks/{settings-3EYN66GK.js → settings-RMUJGYIK.js} +34 -32
- package/chunks/{shell-6YXINTWJ.js → shell-65GTAN5Q.js} +28 -26
- package/chunks/{skill-OO57P4X6.js → skill-L76U3YCX.js} +10 -10
- package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-LXIGZ4EM.js} +28 -28
- package/chunks/{src-G5UPLZSZ.js → src-DWZT2X3Z.js} +87 -27
- package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-F6SRKPSD.js} +28 -28
- package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-UEJQP7S3.js} +730 -397
- package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-LELY6HAI.js} +3 -3
- package/chunks/{task-create-FRGOEIKY.js → task-create-QY3BIMNM.js} +8 -7
- package/chunks/{task-list-OW766BXZ.js → task-list-D2U47WBJ.js} +6 -5
- package/chunks/{task-stop-SIR5SNBN.js → task-stop-N6E5IYLH.js} +2 -2
- package/chunks/{task-update-YRA532MT.js → task-update-HJCQILLB.js} +8 -7
- package/chunks/{team-create-PECAAPXK.js → team-create-4QBZVOGN.js} +26 -26
- package/chunks/{team-delete-6OSECUZC.js → team-delete-RCWYDRF4.js} +6 -5
- package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-BK4CIOFV.js} +26 -26
- package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-5F2IGW6E.js} +27 -27
- package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-FKCGATPJ.js} +4 -4
- package/chunks/{tool-search-THVIWAPB.js → tool-search-J2ESO33H.js} +9 -9
- package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-U4LZ5QTQ.js} +33 -33
- package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
- package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-TIDOXCJA.js} +29 -28
- package/chunks/types-ML3TRJQ5.js +16 -0
- package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-VRVR26FI.js} +29 -29
- package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-UGKYAVLG.js} +75 -71
- package/chunks/{version-3UEA6ZIR.js → version-7HR6VZAT.js} +1 -1
- package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-QGODBB6S.js} +5 -5
- package/chunks/{workflow-QCCCMYP3.js → workflow-EDQAITEW.js} +27 -27
- package/chunks/workspace-providers-status-27UGAK77.js +73 -0
- package/chunks/workspace-registration-store-5H7577YQ.js +27 -0
- package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-F3THGAXC.js} +33 -33
- package/chunks/workspace-service-4JSAQAHP.js +86 -0
- package/chunks/workspace-skills-status-5JTWZHZU.js +72 -0
- package/chunks/{write-file-I3MUDRIE.js → write-file-UY6XCZZM.js} +27 -27
- package/chunks/{zh-RQE7I22T.js → zh-FSAH32JB.js} +6 -2
- package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-D2YIE2LO.js} +6 -2
- package/cli.js +11 -11
- package/locales/ca.js +6 -0
- package/locales/de.js +6 -0
- package/locales/en.js +8 -0
- package/locales/fr.js +6 -0
- package/locales/ja.js +7 -1
- package/locales/pt.js +6 -0
- package/locales/ru.js +6 -0
- package/locales/zh-TW.js +9 -1
- package/locales/zh.js +9 -1
- package/package.json +3 -3
- package/web-shell/assets/{arc-C15hqnJe.js → arc-CObt_TK9.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-B7aiJ6CK.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-BSK2CrID.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-Bhx2p7T_.js} +1 -1
- package/web-shell/assets/channel-BBaLq8MV.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-c3Hzv0Ni.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-DNXaK7ZF.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-BXjvDj_i.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-B6CaKFp-.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-tij6Mz9B.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-DdlsGk2h.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-CdgGZSHE.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-D8oJn1C0.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-B2ZK6sWE.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B2ZK6sWE.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-BUVmNp1Y.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-CO4q310O.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-C6gFvWkg.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-NG2I_c0h.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-DFKMS6I9.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-BiElfsfP.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-zLWDYUqu.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-DoVaazhK.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-0RLz-mXg.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-C-eX1A39.js} +3 -3
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-BauQu1Bu.js} +1 -1
- package/web-shell/assets/index-3uAT3ehO.css +5 -0
- package/web-shell/assets/index-CVHa2QH7.js +3 -0
- package/web-shell/assets/index-D1KigWat.js +1128 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-C800cFvZ.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-CFK1Jk6e.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-Cjx0WAC4.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-DWMDHbiv.js} +1 -1
- package/web-shell/assets/{linear-C8wKCbIC.js → linear-vpW4FrZs.js} +1 -1
- package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-DsHRUnDd.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-D3Eb1cAK.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-Cr2-6sWt.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-Yd7yUgVp.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-BE6SprL8.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-DzkuMK8d.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-wD9A3Dhi.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-BOp5q1Nm.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDsWUmPG.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-Btc08sUA.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-Bv6upsOA.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-D-XamnCK.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BbP_5Wfp.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-CO5Hh28b.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-CU3L64TP.js +0 -93
- package/chunks/initializer-UTQ7FB7G.js +0 -71
- package/chunks/list-DEICDL65.js +0 -74
- package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
- package/chunks/mcp-L5JXEEIA.js +0 -68
- package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
- package/chunks/types-JNKGKUJT.js +0 -12
- package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
- package/chunks/workspace-service-RVLBMSMZ.js +0 -80
- package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
- package/web-shell/assets/channel-CLiQD50f.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
- package/web-shell/assets/index-D5IWFVk1.css +0 -5
- package/web-shell/assets/index-KFJRDhX7.js +0 -783
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +0 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
|
|
5
|
+
} from "./chunk-5HBA2Z7V.js";
|
|
3
6
|
import {
|
|
4
7
|
init_esbuild_shims
|
|
5
8
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -339,10 +342,12 @@ var RestSseTransport = class {
|
|
|
339
342
|
_disposed = false;
|
|
340
343
|
type = "rest";
|
|
341
344
|
supportsReplay = true;
|
|
345
|
+
restFetch;
|
|
342
346
|
constructor(baseUrl, token, fetchFn) {
|
|
343
347
|
this.baseUrl = baseUrl;
|
|
344
348
|
this.token = token;
|
|
345
349
|
this._fetch = fetchFn;
|
|
350
|
+
this.restFetch = fetchFn;
|
|
346
351
|
}
|
|
347
352
|
get connected() {
|
|
348
353
|
return !this._disposed;
|
|
@@ -477,6 +482,7 @@ var DEFAULT_SESSION_LIST_PAGE_SIZE = 20;
|
|
|
477
482
|
var DEFAULT_FETCH_TIMEOUT_MS = 3e4;
|
|
478
483
|
var VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS = 65e3;
|
|
479
484
|
var GITHUB_SETUP_DEFAULT_TIMEOUT_MS = 9e4;
|
|
485
|
+
var MAX_TIMER_DELAY_MS = 2147483647;
|
|
480
486
|
var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
|
|
481
487
|
var MCP_RESTART_DEFAULT_TIMEOUT_MS = MCP_RESTART_SERVER_DEADLINE_MS + MCP_RESTART_CLIENT_HEADROOM_MS;
|
|
482
488
|
var CLIENT_ID_HEADER = "X-Qwen-Client-Id";
|
|
@@ -567,7 +573,7 @@ var DaemonClient = class {
|
|
|
567
573
|
constructor(opts) {
|
|
568
574
|
this.baseUrl = stripTrailingSlashes(opts.baseUrl);
|
|
569
575
|
this.token = opts.token ?? readTokenFromEnv();
|
|
570
|
-
this._fetch = opts.fetch ?? globalThis.fetch.bind(globalThis);
|
|
576
|
+
this._fetch = opts.fetch ?? opts.transport?.restFetch ?? globalThis.fetch.bind(globalThis);
|
|
571
577
|
const raw = opts.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS;
|
|
572
578
|
this.fetchTimeoutMs = Number.isFinite(raw) && raw > 0 ? raw : 0;
|
|
573
579
|
this.promptLimit = normalizePendingPromptLimit(
|
|
@@ -677,7 +683,8 @@ var DaemonClient = class {
|
|
|
677
683
|
hasBody ? { "Content-Type": "application/json" } : {},
|
|
678
684
|
opts.clientId
|
|
679
685
|
),
|
|
680
|
-
...hasBody ? { body: JSON.stringify(opts.body) } : {}
|
|
686
|
+
...hasBody ? { body: JSON.stringify(opts.body) } : {},
|
|
687
|
+
...opts.signal ? { signal: opts.signal } : {}
|
|
681
688
|
},
|
|
682
689
|
async (res) => {
|
|
683
690
|
if (!res.ok) throw await this.failOnError(res, label);
|
|
@@ -696,6 +703,33 @@ var DaemonClient = class {
|
|
|
696
703
|
);
|
|
697
704
|
}
|
|
698
705
|
/** @internal */
|
|
706
|
+
async sessionExportRequest(path, label, opts = {}) {
|
|
707
|
+
const format = opts.format ?? "html";
|
|
708
|
+
const query = opts.format ? `?format=${urlEncode(opts.format)}` : "";
|
|
709
|
+
return await this.fetchWithTimeout(
|
|
710
|
+
`${this.baseUrl}${path}${query}`,
|
|
711
|
+
{ headers: this.headers({}, opts.clientId) },
|
|
712
|
+
async (res) => {
|
|
713
|
+
if (!res.ok) {
|
|
714
|
+
throw await this.failOnError(res, label);
|
|
715
|
+
}
|
|
716
|
+
const content = await res.text();
|
|
717
|
+
const mimeType = res.headers.get("content-type") ?? "";
|
|
718
|
+
const filename = /filename="([^"]+)"/i.exec(
|
|
719
|
+
res.headers.get("content-disposition") ?? ""
|
|
720
|
+
)?.[1] ?? `export.${format}`;
|
|
721
|
+
return {
|
|
722
|
+
content,
|
|
723
|
+
filename,
|
|
724
|
+
mimeType,
|
|
725
|
+
format
|
|
726
|
+
};
|
|
727
|
+
},
|
|
728
|
+
void 0,
|
|
729
|
+
"rest"
|
|
730
|
+
);
|
|
731
|
+
}
|
|
732
|
+
/** @internal */
|
|
699
733
|
async workspaceNoContentRequest(workspaceSelector, path, label, opts = {}) {
|
|
700
734
|
return await this.fetchWithTimeout(
|
|
701
735
|
`${this.baseUrl}/workspaces/${workspaceSelector}${path}`,
|
|
@@ -790,6 +824,13 @@ var DaemonClient = class {
|
|
|
790
824
|
}
|
|
791
825
|
);
|
|
792
826
|
}
|
|
827
|
+
async workspaceGit() {
|
|
828
|
+
return await this.jsonRequest(
|
|
829
|
+
"/workspace/git",
|
|
830
|
+
"GET /workspace/git",
|
|
831
|
+
{ mode: "rest" }
|
|
832
|
+
);
|
|
833
|
+
}
|
|
793
834
|
async workspaceMcpTools(serverName) {
|
|
794
835
|
return await this.fetchWithTimeout(
|
|
795
836
|
`${this.baseUrl}/workspace/mcp/${urlEncode(serverName)}/tools`,
|
|
@@ -892,64 +933,230 @@ var DaemonClient = class {
|
|
|
892
933
|
async workspaceExtensions() {
|
|
893
934
|
return await this.jsonRequest(
|
|
894
935
|
"/workspace/extensions",
|
|
895
|
-
"GET /workspace/extensions"
|
|
936
|
+
"GET /workspace/extensions",
|
|
937
|
+
{ mode: "rest" }
|
|
896
938
|
);
|
|
897
939
|
}
|
|
898
940
|
async installExtension(params, clientId) {
|
|
899
941
|
return await this.jsonRequest(
|
|
900
942
|
"/workspace/extensions/install",
|
|
901
943
|
"POST /workspace/extensions/install",
|
|
902
|
-
{ method: "POST", body: params, clientId }
|
|
944
|
+
{ method: "POST", body: params, clientId, mode: "rest" }
|
|
903
945
|
);
|
|
904
946
|
}
|
|
905
947
|
async extensionOperationStatus(operationId) {
|
|
906
948
|
return await this.jsonRequest(
|
|
907
949
|
`/workspace/extensions/operations/${urlEncode(operationId)}`,
|
|
908
|
-
"GET /workspace/extensions/operations/:operationId"
|
|
950
|
+
"GET /workspace/extensions/operations/:operationId",
|
|
951
|
+
{ mode: "rest" }
|
|
952
|
+
);
|
|
953
|
+
}
|
|
954
|
+
async activeExtensionOperations() {
|
|
955
|
+
return await this.jsonRequest(
|
|
956
|
+
"/workspace/extensions/operations",
|
|
957
|
+
"GET /workspace/extensions/operations",
|
|
958
|
+
{ mode: "rest" }
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
async respondToExtensionInteraction(operationId, interactionId, response, clientId) {
|
|
962
|
+
return await this.jsonRequest(
|
|
963
|
+
`/workspace/extensions/operations/${urlEncode(operationId)}/interactions/${urlEncode(interactionId)}`,
|
|
964
|
+
"POST /workspace/extensions/operations/:operationId/interactions/:interactionId",
|
|
965
|
+
{ method: "POST", body: response, clientId, mode: "rest" }
|
|
909
966
|
);
|
|
910
967
|
}
|
|
911
968
|
async checkExtensionUpdates(clientId) {
|
|
912
969
|
return await this.jsonRequest(
|
|
913
970
|
"/workspace/extensions/check-updates",
|
|
914
971
|
"POST /workspace/extensions/check-updates",
|
|
915
|
-
{ method: "POST", body: {}, clientId }
|
|
972
|
+
{ method: "POST", body: {}, clientId, mode: "rest" }
|
|
916
973
|
);
|
|
917
974
|
}
|
|
918
975
|
async refreshExtensions(clientId) {
|
|
919
976
|
return await this.jsonRequest(
|
|
920
977
|
"/workspace/extensions/refresh",
|
|
921
978
|
"POST /workspace/extensions/refresh",
|
|
922
|
-
{ method: "POST", body: {}, clientId }
|
|
979
|
+
{ method: "POST", body: {}, clientId, mode: "rest" }
|
|
923
980
|
);
|
|
924
981
|
}
|
|
925
982
|
async enableExtension(name, params, clientId) {
|
|
926
983
|
return await this.jsonRequest(
|
|
927
984
|
`/workspace/extensions/${urlEncode(name)}/enable`,
|
|
928
985
|
"POST /workspace/extensions/:name/enable",
|
|
929
|
-
{ method: "POST", body: params, clientId }
|
|
986
|
+
{ method: "POST", body: params, clientId, mode: "rest" }
|
|
930
987
|
);
|
|
931
988
|
}
|
|
932
989
|
async disableExtension(name, params, clientId) {
|
|
933
990
|
return await this.jsonRequest(
|
|
934
991
|
`/workspace/extensions/${urlEncode(name)}/disable`,
|
|
935
992
|
"POST /workspace/extensions/:name/disable",
|
|
936
|
-
{ method: "POST", body: params, clientId }
|
|
993
|
+
{ method: "POST", body: params, clientId, mode: "rest" }
|
|
937
994
|
);
|
|
938
995
|
}
|
|
939
996
|
async updateExtension(name, clientId) {
|
|
940
997
|
return await this.jsonRequest(
|
|
941
998
|
`/workspace/extensions/${urlEncode(name)}/update`,
|
|
942
999
|
"POST /workspace/extensions/:name/update",
|
|
943
|
-
{ method: "POST", body: {}, clientId }
|
|
1000
|
+
{ method: "POST", body: {}, clientId, mode: "rest" }
|
|
944
1001
|
);
|
|
945
1002
|
}
|
|
946
1003
|
async uninstallExtension(name, clientId) {
|
|
947
1004
|
return await this.jsonRequest(
|
|
948
1005
|
`/workspace/extensions/${urlEncode(name)}`,
|
|
949
1006
|
"DELETE /workspace/extensions/:name",
|
|
950
|
-
{ method: "DELETE", clientId }
|
|
1007
|
+
{ method: "DELETE", clientId, mode: "rest" }
|
|
1008
|
+
);
|
|
1009
|
+
}
|
|
1010
|
+
async extensionCatalog() {
|
|
1011
|
+
return await this.jsonRequest(
|
|
1012
|
+
"/extensions",
|
|
1013
|
+
"GET /extensions",
|
|
1014
|
+
{ mode: "rest" }
|
|
1015
|
+
);
|
|
1016
|
+
}
|
|
1017
|
+
async installUserExtension(params, clientId) {
|
|
1018
|
+
return await this.jsonRequest(
|
|
1019
|
+
"/extensions/install",
|
|
1020
|
+
"POST /extensions/install",
|
|
1021
|
+
{ method: "POST", body: params, clientId, mode: "rest" }
|
|
951
1022
|
);
|
|
952
1023
|
}
|
|
1024
|
+
async checkUserExtensionUpdates(clientId) {
|
|
1025
|
+
return await this.jsonRequest(
|
|
1026
|
+
"/extensions/check-updates",
|
|
1027
|
+
"POST /extensions/check-updates",
|
|
1028
|
+
{ method: "POST", body: {}, clientId, mode: "rest" }
|
|
1029
|
+
);
|
|
1030
|
+
}
|
|
1031
|
+
async updateUserExtension(extensionId, clientId) {
|
|
1032
|
+
return await this.jsonRequest(
|
|
1033
|
+
`/extensions/${urlEncode(extensionId)}/update`,
|
|
1034
|
+
"POST /extensions/:extensionId/update",
|
|
1035
|
+
{ method: "POST", body: {}, clientId, mode: "rest" }
|
|
1036
|
+
);
|
|
1037
|
+
}
|
|
1038
|
+
async uninstallUserExtension(extensionId, clientId) {
|
|
1039
|
+
return await this.fetchWithTimeout(
|
|
1040
|
+
`${this.baseUrl}/extensions/${urlEncode(extensionId)}`,
|
|
1041
|
+
{
|
|
1042
|
+
method: "DELETE",
|
|
1043
|
+
headers: this.headers({}, clientId)
|
|
1044
|
+
},
|
|
1045
|
+
async (res) => {
|
|
1046
|
+
if (res.status === 204) {
|
|
1047
|
+
await res.body?.cancel().catch(() => void 0);
|
|
1048
|
+
return void 0;
|
|
1049
|
+
}
|
|
1050
|
+
if (!res.ok) {
|
|
1051
|
+
throw await this.failOnError(res, "DELETE /extensions/:extensionId");
|
|
1052
|
+
}
|
|
1053
|
+
return await res.json();
|
|
1054
|
+
},
|
|
1055
|
+
void 0,
|
|
1056
|
+
"rest"
|
|
1057
|
+
);
|
|
1058
|
+
}
|
|
1059
|
+
async setExtensionDefaultActivation(extensionId, state, clientId) {
|
|
1060
|
+
return await this.jsonRequest(
|
|
1061
|
+
`/extensions/${urlEncode(extensionId)}/activation`,
|
|
1062
|
+
"PUT /extensions/:extensionId/activation",
|
|
1063
|
+
{ method: "PUT", body: { state }, clientId, mode: "rest" }
|
|
1064
|
+
);
|
|
1065
|
+
}
|
|
1066
|
+
async extensionOperation(operationId, signal) {
|
|
1067
|
+
return await this.jsonRequest(
|
|
1068
|
+
`/extensions/operations/${urlEncode(operationId)}`,
|
|
1069
|
+
"GET /extensions/operations/:operationId",
|
|
1070
|
+
signal ? { signal, mode: "rest" } : { mode: "rest" }
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
async waitForExtensionOperation(handle, options = {}) {
|
|
1074
|
+
const pollIntervalMs = options.pollIntervalMs ?? 1e3;
|
|
1075
|
+
const timeoutMs = options.timeoutMs ?? 10 * 6e4;
|
|
1076
|
+
const hasDeadline = timeoutMs !== Number.POSITIVE_INFINITY;
|
|
1077
|
+
const deadline = Date.now() + timeoutMs;
|
|
1078
|
+
const timeoutError = /* @__PURE__ */ __name(() => new Error(
|
|
1079
|
+
`Timed out waiting for extension operation ${handle.operationId}. The server operation was not cancelled.`
|
|
1080
|
+
), "timeoutError");
|
|
1081
|
+
for (; ; ) {
|
|
1082
|
+
options.signal?.throwIfAborted();
|
|
1083
|
+
const pollBudgetMs = deadline - Date.now();
|
|
1084
|
+
if (pollBudgetMs <= 0 || Number.isNaN(pollBudgetMs)) {
|
|
1085
|
+
throw timeoutError();
|
|
1086
|
+
}
|
|
1087
|
+
let operation;
|
|
1088
|
+
if (!hasDeadline) {
|
|
1089
|
+
operation = await this.extensionOperation(
|
|
1090
|
+
handle.operationId,
|
|
1091
|
+
options.signal
|
|
1092
|
+
);
|
|
1093
|
+
} else {
|
|
1094
|
+
const deadlineController = new AbortController();
|
|
1095
|
+
const pollSignal = options.signal ? composeAbortSignals2([options.signal, deadlineController.signal]) : deadlineController.signal;
|
|
1096
|
+
let deadlineTimer;
|
|
1097
|
+
const deadlinePromise = new Promise((_, reject) => {
|
|
1098
|
+
const expire = /* @__PURE__ */ __name(() => {
|
|
1099
|
+
const error = timeoutError();
|
|
1100
|
+
reject(error);
|
|
1101
|
+
deadlineController.abort(error);
|
|
1102
|
+
}, "expire");
|
|
1103
|
+
const schedule = /* @__PURE__ */ __name(() => {
|
|
1104
|
+
const remainingMs2 = deadline - Date.now();
|
|
1105
|
+
if (remainingMs2 <= 0) {
|
|
1106
|
+
expire();
|
|
1107
|
+
return;
|
|
1108
|
+
}
|
|
1109
|
+
deadlineTimer = setTimeout(
|
|
1110
|
+
() => {
|
|
1111
|
+
if (Date.now() >= deadline) {
|
|
1112
|
+
expire();
|
|
1113
|
+
} else {
|
|
1114
|
+
schedule();
|
|
1115
|
+
}
|
|
1116
|
+
},
|
|
1117
|
+
Math.min(remainingMs2, MAX_TIMER_DELAY_MS)
|
|
1118
|
+
);
|
|
1119
|
+
}, "schedule");
|
|
1120
|
+
schedule();
|
|
1121
|
+
});
|
|
1122
|
+
try {
|
|
1123
|
+
operation = await Promise.race([
|
|
1124
|
+
this.extensionOperation(handle.operationId, pollSignal),
|
|
1125
|
+
deadlinePromise
|
|
1126
|
+
]);
|
|
1127
|
+
} finally {
|
|
1128
|
+
if (deadlineTimer !== void 0) clearTimeout(deadlineTimer);
|
|
1129
|
+
deadlineController.abort();
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
if (operation.status !== "queued" && operation.status !== "running") {
|
|
1133
|
+
return operation;
|
|
1134
|
+
}
|
|
1135
|
+
const remainingMs = deadline - Date.now();
|
|
1136
|
+
if (remainingMs <= 0) {
|
|
1137
|
+
throw timeoutError();
|
|
1138
|
+
}
|
|
1139
|
+
await new Promise((resolve, reject) => {
|
|
1140
|
+
const finish = /* @__PURE__ */ __name(() => {
|
|
1141
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
1142
|
+
resolve();
|
|
1143
|
+
}, "finish");
|
|
1144
|
+
const timer = setTimeout(
|
|
1145
|
+
finish,
|
|
1146
|
+
Math.min(pollIntervalMs, remainingMs, MAX_TIMER_DELAY_MS)
|
|
1147
|
+
);
|
|
1148
|
+
const onAbort = /* @__PURE__ */ __name(() => {
|
|
1149
|
+
clearTimeout(timer);
|
|
1150
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
1151
|
+
reject(
|
|
1152
|
+
options.signal?.reason ?? new DOMException("Aborted", "AbortError")
|
|
1153
|
+
);
|
|
1154
|
+
}, "onAbort");
|
|
1155
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
1156
|
+
if (options.signal?.aborted) onAbort();
|
|
1157
|
+
});
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
953
1160
|
// -- Workspace files (workspace files) -------------------------------
|
|
954
1161
|
async readWorkspaceFile(filePath, opts = {}, clientId) {
|
|
955
1162
|
const url = new URL(`${this.baseUrl}/file`);
|
|
@@ -1359,8 +1566,8 @@ var DaemonClient = class {
|
|
|
1359
1566
|
);
|
|
1360
1567
|
}
|
|
1361
1568
|
/**
|
|
1362
|
-
* Enumerate
|
|
1363
|
-
*
|
|
1569
|
+
* Enumerate the session catalog for a workspace. Used by session-picker UIs.
|
|
1570
|
+
* Returns an empty list (not 404) when the workspace has no sessions.
|
|
1364
1571
|
*/
|
|
1365
1572
|
async listWorkspaceSessions(workspaceCwd, options) {
|
|
1366
1573
|
const page = await this.listWorkspaceSessionsPage(workspaceCwd, options);
|
|
@@ -1438,29 +1645,10 @@ var DaemonClient = class {
|
|
|
1438
1645
|
return this.restoreSession("load", sessionId, req, clientId);
|
|
1439
1646
|
}
|
|
1440
1647
|
async exportSession(sessionId, opts = {}) {
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
{ headers: this.headers({}, opts.clientId) },
|
|
1446
|
-
async (res) => {
|
|
1447
|
-
if (!res.ok) {
|
|
1448
|
-
throw await this.failOnError(res, "GET /session/:id/export");
|
|
1449
|
-
}
|
|
1450
|
-
const content = await res.text();
|
|
1451
|
-
const mimeType = res.headers.get("content-type") ?? "";
|
|
1452
|
-
const filename = /filename="([^"]+)"/i.exec(
|
|
1453
|
-
res.headers.get("content-disposition") ?? ""
|
|
1454
|
-
)?.[1] ?? `export.${format}`;
|
|
1455
|
-
return {
|
|
1456
|
-
content,
|
|
1457
|
-
filename,
|
|
1458
|
-
mimeType,
|
|
1459
|
-
format
|
|
1460
|
-
};
|
|
1461
|
-
},
|
|
1462
|
-
void 0,
|
|
1463
|
-
"rest"
|
|
1648
|
+
return await this.sessionExportRequest(
|
|
1649
|
+
`/session/${urlEncode(sessionId)}/export`,
|
|
1650
|
+
"GET /session/:id/export",
|
|
1651
|
+
opts
|
|
1464
1652
|
);
|
|
1465
1653
|
}
|
|
1466
1654
|
async getSessionTranscriptPage(sessionId, opts = {}) {
|
|
@@ -1715,7 +1903,9 @@ var DaemonClient = class {
|
|
|
1715
1903
|
);
|
|
1716
1904
|
}
|
|
1717
1905
|
return await res.json();
|
|
1718
|
-
}
|
|
1906
|
+
},
|
|
1907
|
+
void 0,
|
|
1908
|
+
"rest"
|
|
1719
1909
|
);
|
|
1720
1910
|
}
|
|
1721
1911
|
async rewindSession(sessionId, promptId, opts) {
|
|
@@ -1737,7 +1927,9 @@ var DaemonClient = class {
|
|
|
1737
1927
|
throw await this.failOnError(res, "POST /session/:id/rewind");
|
|
1738
1928
|
}
|
|
1739
1929
|
return await res.json();
|
|
1740
|
-
}
|
|
1930
|
+
},
|
|
1931
|
+
void 0,
|
|
1932
|
+
"rest"
|
|
1741
1933
|
);
|
|
1742
1934
|
}
|
|
1743
1935
|
/**
|
|
@@ -1932,6 +2124,35 @@ var DaemonClient = class {
|
|
|
1932
2124
|
}
|
|
1933
2125
|
);
|
|
1934
2126
|
}
|
|
2127
|
+
/**
|
|
2128
|
+
* Toggle a user-invocable skill in workspace `skills.disabled` settings.
|
|
2129
|
+
* Active ACP sessions refresh their skill validation and command lists before
|
|
2130
|
+
* the response returns; `activation` reports deferred or partial refreshes.
|
|
2131
|
+
*
|
|
2132
|
+
* Pre-flight `caps.features.includes('workspace_skill_toggle')` before calling.
|
|
2133
|
+
*/
|
|
2134
|
+
async setWorkspaceSkillEnabled(skillName, enabled, opts) {
|
|
2135
|
+
return await this.fetchWithTimeout(
|
|
2136
|
+
`${this.baseUrl}/workspace/skills/${urlEncode(skillName)}/enable`,
|
|
2137
|
+
{
|
|
2138
|
+
method: "POST",
|
|
2139
|
+
headers: this.headers(
|
|
2140
|
+
{ "Content-Type": "application/json" },
|
|
2141
|
+
opts?.clientId
|
|
2142
|
+
),
|
|
2143
|
+
body: JSON.stringify({ enabled })
|
|
2144
|
+
},
|
|
2145
|
+
async (res) => {
|
|
2146
|
+
if (!res.ok) {
|
|
2147
|
+
throw await this.failOnError(
|
|
2148
|
+
res,
|
|
2149
|
+
"POST /workspace/skills/:name/enable"
|
|
2150
|
+
);
|
|
2151
|
+
}
|
|
2152
|
+
return await res.json();
|
|
2153
|
+
}
|
|
2154
|
+
);
|
|
2155
|
+
}
|
|
1935
2156
|
async workspaceSettings(opts) {
|
|
1936
2157
|
return await this.fetchWithTimeout(
|
|
1937
2158
|
`${this.baseUrl}/workspace/settings`,
|
|
@@ -1966,6 +2187,25 @@ var DaemonClient = class {
|
|
|
1966
2187
|
}
|
|
1967
2188
|
);
|
|
1968
2189
|
}
|
|
2190
|
+
async deleteModel(target, opts) {
|
|
2191
|
+
return await this.fetchWithTimeout(
|
|
2192
|
+
`${this.baseUrl}/workspace/models`,
|
|
2193
|
+
{
|
|
2194
|
+
method: "DELETE",
|
|
2195
|
+
headers: this.headers(
|
|
2196
|
+
{ "Content-Type": "application/json" },
|
|
2197
|
+
opts?.clientId
|
|
2198
|
+
),
|
|
2199
|
+
body: JSON.stringify(target)
|
|
2200
|
+
},
|
|
2201
|
+
async (res) => {
|
|
2202
|
+
if (!res.ok) {
|
|
2203
|
+
throw await this.failOnError(res, "DELETE /workspace/models");
|
|
2204
|
+
}
|
|
2205
|
+
return await res.json();
|
|
2206
|
+
}
|
|
2207
|
+
);
|
|
2208
|
+
}
|
|
1969
2209
|
async workspaceVoice(clientId) {
|
|
1970
2210
|
return await this.jsonRequest(
|
|
1971
2211
|
"/workspace/voice",
|
|
@@ -1981,9 +2221,26 @@ var DaemonClient = class {
|
|
|
1981
2221
|
);
|
|
1982
2222
|
}
|
|
1983
2223
|
async transcribeWorkspaceVoice(audio, opts) {
|
|
2224
|
+
return await this.voiceTranscriptionRequest(
|
|
2225
|
+
"/workspace/voice/transcribe",
|
|
2226
|
+
"POST /workspace/voice/transcribe",
|
|
2227
|
+
audio,
|
|
2228
|
+
opts
|
|
2229
|
+
);
|
|
2230
|
+
}
|
|
2231
|
+
/** @internal */
|
|
2232
|
+
async workspaceVoiceTranscriptionRequest(workspaceSelector, audio, opts) {
|
|
2233
|
+
return await this.voiceTranscriptionRequest(
|
|
2234
|
+
`/workspaces/${workspaceSelector}/voice/transcribe`,
|
|
2235
|
+
"POST /workspaces/:workspace/voice/transcribe",
|
|
2236
|
+
audio,
|
|
2237
|
+
opts
|
|
2238
|
+
);
|
|
2239
|
+
}
|
|
2240
|
+
async voiceTranscriptionRequest(path, label, audio, opts) {
|
|
1984
2241
|
const query = opts.voiceModel ? `?${new URLSearchParams({ voiceModel: opts.voiceModel }).toString()}` : "";
|
|
1985
2242
|
return await this.fetchWithTimeout(
|
|
1986
|
-
`${this.baseUrl}
|
|
2243
|
+
`${this.baseUrl}${path}${query}`,
|
|
1987
2244
|
{
|
|
1988
2245
|
method: "POST",
|
|
1989
2246
|
headers: this.headers({ "Content-Type": opts.mimeType }, opts.clientId),
|
|
@@ -1991,11 +2248,11 @@ var DaemonClient = class {
|
|
|
1991
2248
|
},
|
|
1992
2249
|
async (res) => {
|
|
1993
2250
|
if (!res.ok) {
|
|
1994
|
-
throw await this.failOnError(res,
|
|
2251
|
+
throw await this.failOnError(res, label);
|
|
1995
2252
|
}
|
|
1996
2253
|
return await res.json();
|
|
1997
2254
|
},
|
|
1998
|
-
VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS,
|
|
2255
|
+
opts.timeoutMs ?? VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS,
|
|
1999
2256
|
"rest"
|
|
2000
2257
|
);
|
|
2001
2258
|
}
|
|
@@ -2155,8 +2412,8 @@ var DaemonClient = class {
|
|
|
2155
2412
|
/**
|
|
2156
2413
|
* Reload the daemon-managed channel worker: the daemon stops and relaunches
|
|
2157
2414
|
* it so it re-reads settings.json (channels / proxy / per-channel model).
|
|
2158
|
-
* Requires
|
|
2159
|
-
*
|
|
2415
|
+
* Requires an enabled runtime selection; otherwise the route responds 409.
|
|
2416
|
+
* Pre-flight the dynamic `channel_reload` capability.
|
|
2160
2417
|
*/
|
|
2161
2418
|
async reloadChannelWorker(opts) {
|
|
2162
2419
|
return await this.fetchWithTimeout(
|
|
@@ -2175,9 +2432,61 @@ var DaemonClient = class {
|
|
|
2175
2432
|
}
|
|
2176
2433
|
return await res.json();
|
|
2177
2434
|
},
|
|
2435
|
+
opts?.timeoutMs ?? CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
|
|
2436
|
+
);
|
|
2437
|
+
}
|
|
2438
|
+
async getChannelWorkerControl(opts) {
|
|
2439
|
+
return await this.fetchWithTimeout(
|
|
2440
|
+
`${this.baseUrl}/workspace/channel`,
|
|
2441
|
+
{
|
|
2442
|
+
method: "GET",
|
|
2443
|
+
headers: this.headers({}, opts?.clientId)
|
|
2444
|
+
},
|
|
2445
|
+
async (res) => {
|
|
2446
|
+
if (!res.ok) {
|
|
2447
|
+
throw await this.failOnError(res, "GET /workspace/channel");
|
|
2448
|
+
}
|
|
2449
|
+
return await res.json();
|
|
2450
|
+
},
|
|
2178
2451
|
opts?.timeoutMs
|
|
2179
2452
|
);
|
|
2180
2453
|
}
|
|
2454
|
+
async setChannelWorkerSelection(selection, opts) {
|
|
2455
|
+
return await this.fetchWithTimeout(
|
|
2456
|
+
`${this.baseUrl}/workspace/channel`,
|
|
2457
|
+
{
|
|
2458
|
+
method: "PUT",
|
|
2459
|
+
headers: this.headers(
|
|
2460
|
+
{ "Content-Type": "application/json" },
|
|
2461
|
+
opts?.clientId
|
|
2462
|
+
),
|
|
2463
|
+
body: JSON.stringify({ selection })
|
|
2464
|
+
},
|
|
2465
|
+
async (res) => {
|
|
2466
|
+
if (!res.ok) {
|
|
2467
|
+
throw await this.failOnError(res, "PUT /workspace/channel");
|
|
2468
|
+
}
|
|
2469
|
+
return await res.json();
|
|
2470
|
+
},
|
|
2471
|
+
opts?.timeoutMs ?? CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
|
|
2472
|
+
);
|
|
2473
|
+
}
|
|
2474
|
+
async stopChannelWorker(opts) {
|
|
2475
|
+
return await this.fetchWithTimeout(
|
|
2476
|
+
`${this.baseUrl}/workspace/channel`,
|
|
2477
|
+
{
|
|
2478
|
+
method: "DELETE",
|
|
2479
|
+
headers: this.headers({}, opts?.clientId)
|
|
2480
|
+
},
|
|
2481
|
+
async (res) => {
|
|
2482
|
+
if (!res.ok) {
|
|
2483
|
+
throw await this.failOnError(res, "DELETE /workspace/channel");
|
|
2484
|
+
}
|
|
2485
|
+
return await res.json();
|
|
2486
|
+
},
|
|
2487
|
+
opts?.timeoutMs ?? CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
|
|
2488
|
+
);
|
|
2489
|
+
}
|
|
2181
2490
|
async manageMcpServer(serverName, action, opts) {
|
|
2182
2491
|
return await this.fetchWithTimeout(
|
|
2183
2492
|
`${this.baseUrl}/workspace/mcp/${urlEncode(serverName)}/${urlEncode(action)}`,
|
|
@@ -2784,13 +3093,16 @@ var DaemonClient = class {
|
|
|
2784
3093
|
}
|
|
2785
3094
|
);
|
|
2786
3095
|
}
|
|
2787
|
-
async addWorkspace(cwd) {
|
|
3096
|
+
async addWorkspace(cwd, options = {}) {
|
|
2788
3097
|
return await this.fetchWithTimeout(
|
|
2789
3098
|
`${this.baseUrl}/workspaces`,
|
|
2790
3099
|
{
|
|
2791
3100
|
method: "POST",
|
|
2792
3101
|
headers: this.headers({ "Content-Type": "application/json" }),
|
|
2793
|
-
body: JSON.stringify({
|
|
3102
|
+
body: JSON.stringify({
|
|
3103
|
+
cwd,
|
|
3104
|
+
...options.persist ? { persist: true } : {}
|
|
3105
|
+
})
|
|
2794
3106
|
},
|
|
2795
3107
|
async (res) => {
|
|
2796
3108
|
if (!res.ok) {
|
|
@@ -2872,6 +3184,37 @@ var WorkspaceDaemonClient = class {
|
|
|
2872
3184
|
workspaceMcp() {
|
|
2873
3185
|
return this.get("/mcp", "GET /workspaces/:workspace/mcp");
|
|
2874
3186
|
}
|
|
3187
|
+
workspaceVoice(clientId) {
|
|
3188
|
+
return this.client.workspaceJsonRequest(
|
|
3189
|
+
this.workspaceSelector,
|
|
3190
|
+
"/voice",
|
|
3191
|
+
"GET /workspaces/:workspace/voice",
|
|
3192
|
+
{ clientId, mode: "rest" }
|
|
3193
|
+
);
|
|
3194
|
+
}
|
|
3195
|
+
setWorkspaceVoice(update, clientId) {
|
|
3196
|
+
return this.client.workspaceJsonRequest(
|
|
3197
|
+
this.workspaceSelector,
|
|
3198
|
+
"/voice",
|
|
3199
|
+
"POST /workspaces/:workspace/voice",
|
|
3200
|
+
{ method: "POST", body: update, clientId, mode: "rest" }
|
|
3201
|
+
);
|
|
3202
|
+
}
|
|
3203
|
+
transcribeWorkspaceVoice(audio, opts) {
|
|
3204
|
+
return this.client.workspaceVoiceTranscriptionRequest(
|
|
3205
|
+
this.workspaceSelector,
|
|
3206
|
+
audio,
|
|
3207
|
+
opts
|
|
3208
|
+
);
|
|
3209
|
+
}
|
|
3210
|
+
workspaceGit() {
|
|
3211
|
+
return this.client.workspaceJsonRequest(
|
|
3212
|
+
this.workspaceSelector,
|
|
3213
|
+
"/git",
|
|
3214
|
+
"GET /workspaces/:workspace/git",
|
|
3215
|
+
{ mode: "rest" }
|
|
3216
|
+
);
|
|
3217
|
+
}
|
|
2875
3218
|
workspaceSkills() {
|
|
2876
3219
|
return this.get("/skills", "GET /workspaces/:workspace/skills");
|
|
2877
3220
|
}
|
|
@@ -2893,6 +3236,22 @@ var WorkspaceDaemonClient = class {
|
|
|
2893
3236
|
workspaceMemory() {
|
|
2894
3237
|
return this.get("/memory", "GET /workspaces/:workspace/memory");
|
|
2895
3238
|
}
|
|
3239
|
+
remove(options) {
|
|
3240
|
+
const body = options?.force === void 0 ? void 0 : {
|
|
3241
|
+
force: options.force
|
|
3242
|
+
};
|
|
3243
|
+
return this.client.workspaceJsonRequest(
|
|
3244
|
+
this.workspaceSelector,
|
|
3245
|
+
"",
|
|
3246
|
+
"DELETE /workspaces/:workspace",
|
|
3247
|
+
{
|
|
3248
|
+
method: "DELETE",
|
|
3249
|
+
...body ? { body } : {},
|
|
3250
|
+
...options?.timeoutMs !== void 0 ? { timeoutMs: options.timeoutMs } : {},
|
|
3251
|
+
mode: "rest"
|
|
3252
|
+
}
|
|
3253
|
+
);
|
|
3254
|
+
}
|
|
2896
3255
|
writeWorkspaceMemory(req, clientId) {
|
|
2897
3256
|
return this.post(
|
|
2898
3257
|
"/memory",
|
|
@@ -2970,6 +3329,32 @@ var WorkspaceDaemonClient = class {
|
|
|
2970
3329
|
const page = await this.listWorkspaceSessionsPage(options);
|
|
2971
3330
|
return page.sessions;
|
|
2972
3331
|
}
|
|
3332
|
+
/**
|
|
3333
|
+
* Read one page from an active persisted session transcript in this
|
|
3334
|
+
* workspace.
|
|
3335
|
+
* The daemon performs replay locally without attaching to the session or
|
|
3336
|
+
* starting ACP. This method always uses native REST transport.
|
|
3337
|
+
*/
|
|
3338
|
+
getSessionTranscriptPage(sessionId, opts = {}) {
|
|
3339
|
+
const query = new URLSearchParams();
|
|
3340
|
+
if (opts.cursor !== void 0) query.set("cursor", opts.cursor);
|
|
3341
|
+
if (opts.limit !== void 0) query.set("limit", String(opts.limit));
|
|
3342
|
+
const suffix = query.size > 0 ? `?${query.toString()}` : "";
|
|
3343
|
+
return this.client.workspaceJsonRequest(
|
|
3344
|
+
this.workspaceSelector,
|
|
3345
|
+
`/session/${urlEncode(sessionId)}/transcript${suffix}`,
|
|
3346
|
+
"GET /workspaces/:workspace/session/:id/transcript",
|
|
3347
|
+
{ clientId: opts.clientId, mode: "rest" }
|
|
3348
|
+
);
|
|
3349
|
+
}
|
|
3350
|
+
/** Export an active persisted session from this registered workspace. */
|
|
3351
|
+
exportSession(sessionId, opts = {}) {
|
|
3352
|
+
return this.client.sessionExportRequest(
|
|
3353
|
+
`/workspaces/${this.workspaceSelector}/session/${urlEncode(sessionId)}/export`,
|
|
3354
|
+
"GET /workspaces/:workspace/session/:id/export",
|
|
3355
|
+
opts
|
|
3356
|
+
);
|
|
3357
|
+
}
|
|
2973
3358
|
listSessionGroups() {
|
|
2974
3359
|
return this.get(
|
|
2975
3360
|
"/session-groups",
|
|
@@ -3001,6 +3386,14 @@ var WorkspaceDaemonClient = class {
|
|
|
3001
3386
|
{ method: "DELETE" }
|
|
3002
3387
|
);
|
|
3003
3388
|
}
|
|
3389
|
+
updateSessionOrganization(sessionId, update, clientId) {
|
|
3390
|
+
return this.client.workspaceJsonRequest(
|
|
3391
|
+
this.workspaceSelector,
|
|
3392
|
+
`/session/${urlEncode(sessionId)}/organization`,
|
|
3393
|
+
"PATCH /workspaces/:workspace/session/:id/organization",
|
|
3394
|
+
{ method: "PATCH", body: update, clientId }
|
|
3395
|
+
);
|
|
3396
|
+
}
|
|
3004
3397
|
deleteSessionsData(sessionIds, clientId) {
|
|
3005
3398
|
return this.post(
|
|
3006
3399
|
"/sessions/delete",
|
|
@@ -3062,11 +3455,16 @@ var WorkspaceDaemonClient = class {
|
|
|
3062
3455
|
"GET /workspaces/:workspace/list"
|
|
3063
3456
|
);
|
|
3064
3457
|
}
|
|
3065
|
-
glob(pattern) {
|
|
3458
|
+
glob(pattern, opts = {}) {
|
|
3066
3459
|
const query = new URLSearchParams({ pattern });
|
|
3067
|
-
|
|
3460
|
+
if (opts.maxResults !== void 0) {
|
|
3461
|
+
query.set("maxResults", String(opts.maxResults));
|
|
3462
|
+
}
|
|
3463
|
+
return this.client.workspaceJsonRequest(
|
|
3464
|
+
this.workspaceSelector,
|
|
3068
3465
|
`/glob?${query.toString()}`,
|
|
3069
|
-
"GET /workspaces/:workspace/glob"
|
|
3466
|
+
"GET /workspaces/:workspace/glob",
|
|
3467
|
+
{ signal: opts.signal }
|
|
3070
3468
|
);
|
|
3071
3469
|
}
|
|
3072
3470
|
writeWorkspaceFile(req, clientId) {
|
|
@@ -3138,6 +3536,14 @@ var WorkspaceDaemonClient = class {
|
|
|
3138
3536
|
opts?.clientId
|
|
3139
3537
|
);
|
|
3140
3538
|
}
|
|
3539
|
+
setWorkspaceSkillEnabled(skillName, enabled, opts) {
|
|
3540
|
+
return this.post(
|
|
3541
|
+
`/skills/${urlEncode(skillName)}/enable`,
|
|
3542
|
+
"POST /workspaces/:workspace/skills/:name/enable",
|
|
3543
|
+
{ enabled },
|
|
3544
|
+
opts?.clientId
|
|
3545
|
+
);
|
|
3546
|
+
}
|
|
3141
3547
|
restartMcpServer(serverName, opts) {
|
|
3142
3548
|
const query = opts?.entryIndex === void 0 ? "" : `?entryIndex=${urlEncode(String(opts.entryIndex))}`;
|
|
3143
3549
|
return this.post(
|
|
@@ -3165,6 +3571,38 @@ var WorkspaceDaemonClient = class {
|
|
|
3165
3571
|
opts?.clientId
|
|
3166
3572
|
);
|
|
3167
3573
|
}
|
|
3574
|
+
workspaceExtensions() {
|
|
3575
|
+
return this.client.workspaceJsonRequest(
|
|
3576
|
+
this.workspaceSelector,
|
|
3577
|
+
"/extensions",
|
|
3578
|
+
"GET /workspaces/:workspace/extensions",
|
|
3579
|
+
{ mode: "rest" }
|
|
3580
|
+
);
|
|
3581
|
+
}
|
|
3582
|
+
setExtensionActivation(extensionId, state, clientId) {
|
|
3583
|
+
return this.client.workspaceJsonRequest(
|
|
3584
|
+
this.workspaceSelector,
|
|
3585
|
+
`/extensions/${urlEncode(extensionId)}/activation`,
|
|
3586
|
+
"PUT /workspaces/:workspace/extensions/:extensionId/activation",
|
|
3587
|
+
{ method: "PUT", body: { state }, clientId, mode: "rest" }
|
|
3588
|
+
);
|
|
3589
|
+
}
|
|
3590
|
+
clearExtensionActivation(extensionId, clientId) {
|
|
3591
|
+
return this.client.workspaceJsonRequest(
|
|
3592
|
+
this.workspaceSelector,
|
|
3593
|
+
`/extensions/${urlEncode(extensionId)}/activation`,
|
|
3594
|
+
"DELETE /workspaces/:workspace/extensions/:extensionId/activation",
|
|
3595
|
+
{ method: "DELETE", clientId, mode: "rest" }
|
|
3596
|
+
);
|
|
3597
|
+
}
|
|
3598
|
+
refreshExtensionRuntime(clientId) {
|
|
3599
|
+
return this.client.workspaceJsonRequest(
|
|
3600
|
+
this.workspaceSelector,
|
|
3601
|
+
"/extensions/refresh",
|
|
3602
|
+
"POST /workspaces/:workspace/extensions/refresh",
|
|
3603
|
+
{ method: "POST", body: {}, clientId, mode: "rest" }
|
|
3604
|
+
);
|
|
3605
|
+
}
|
|
3168
3606
|
get(path, label, clientId) {
|
|
3169
3607
|
return this.client.workspaceJsonRequest(
|
|
3170
3608
|
this.workspaceSelector,
|
|
@@ -3775,6 +4213,7 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
|
|
|
3775
4213
|
"session_died",
|
|
3776
4214
|
"session_closed",
|
|
3777
4215
|
"session_metadata_updated",
|
|
4216
|
+
"session_recording_degraded",
|
|
3778
4217
|
"artifact_changed",
|
|
3779
4218
|
MID_TURN_MESSAGE_INJECTED_EVENT,
|
|
3780
4219
|
PENDING_PROMPT_ADDED_EVENT,
|
|
@@ -3885,7 +4324,8 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
|
|
|
3885
4324
|
// `replay_complete` when `?snapshot=1` is set on the SSE endpoint.
|
|
3886
4325
|
// Carries `currentModelId` and `currentApprovalMode` so reconnecting
|
|
3887
4326
|
// clients can seed their reducer without an extra round-trip.
|
|
3888
|
-
"session_snapshot"
|
|
4327
|
+
"session_snapshot",
|
|
4328
|
+
"git_branch_changed"
|
|
3889
4329
|
];
|
|
3890
4330
|
var DAEMON_KNOWN_EVENT_TYPES = new Set(
|
|
3891
4331
|
DAEMON_KNOWN_EVENT_TYPE_VALUES
|
|
@@ -3899,6 +4339,7 @@ var RESYNC_PASSTHROUGH_TYPES = /* @__PURE__ */ new Set([
|
|
|
3899
4339
|
"session_closed",
|
|
3900
4340
|
"client_evicted",
|
|
3901
4341
|
"stream_error",
|
|
4342
|
+
"session_recording_degraded",
|
|
3902
4343
|
// A5 (#4511): the snapshot is a full-state authoritative frame, not a
|
|
3903
4344
|
// delta, so it is safe to apply during resync — and it is exactly what
|
|
3904
4345
|
// lets a client that reconnected past the ring recover currentModelId /
|
|
@@ -3913,6 +4354,7 @@ function createDaemonSessionViewState(seed = {}) {
|
|
|
3913
4354
|
sessionId: seed.sessionId,
|
|
3914
4355
|
currentModelId: seed.currentModelId,
|
|
3915
4356
|
displayName: seed.displayName,
|
|
4357
|
+
recordingDegraded: seed.recordingDegraded ?? false,
|
|
3916
4358
|
lastSessionUpdate: seed.lastSessionUpdate,
|
|
3917
4359
|
lastModelSwitchFailure: seed.lastModelSwitchFailure,
|
|
3918
4360
|
terminalEvent: seed.terminalEvent,
|
|
@@ -3998,6 +4440,8 @@ function asKnownDaemonEvent(event) {
|
|
|
3998
4440
|
return isSessionClosedData(event.data) ? event : void 0;
|
|
3999
4441
|
case "session_metadata_updated":
|
|
4000
4442
|
return isSessionMetadataUpdatedData(event.data) ? event : void 0;
|
|
4443
|
+
case "session_recording_degraded":
|
|
4444
|
+
return isSessionRecordingDegradedData(event.data) ? event : void 0;
|
|
4001
4445
|
case "artifact_changed":
|
|
4002
4446
|
return isArtifactChangedData(event.data) ? event : void 0;
|
|
4003
4447
|
case MID_TURN_MESSAGE_INJECTED_EVENT:
|
|
@@ -4380,7 +4824,14 @@ function reduceDaemonSessionEvent(state, rawEvent) {
|
|
|
4380
4824
|
...base,
|
|
4381
4825
|
sessionId: event.data.sessionId,
|
|
4382
4826
|
...event.data.currentModelId != null ? { currentModelId: event.data.currentModelId } : {},
|
|
4383
|
-
...event.data.currentApprovalMode != null ? { approvalMode: event.data.currentApprovalMode } : {}
|
|
4827
|
+
...event.data.currentApprovalMode != null ? { approvalMode: event.data.currentApprovalMode } : {},
|
|
4828
|
+
...event.data.recordingDegraded !== void 0 ? { recordingDegraded: event.data.recordingDegraded } : {}
|
|
4829
|
+
};
|
|
4830
|
+
case "session_recording_degraded":
|
|
4831
|
+
return {
|
|
4832
|
+
...base,
|
|
4833
|
+
sessionId: event.data.sessionId,
|
|
4834
|
+
recordingDegraded: true
|
|
4384
4835
|
};
|
|
4385
4836
|
case "session_branched":
|
|
4386
4837
|
return {
|
|
@@ -4841,9 +5292,14 @@ function isSessionSnapshotData(value) {
|
|
|
4841
5292
|
if (!isRecord(value) || !isNonEmptyString(value["sessionId"])) return false;
|
|
4842
5293
|
const model = value["currentModelId"];
|
|
4843
5294
|
const mode = value["currentApprovalMode"];
|
|
4844
|
-
|
|
5295
|
+
const recordingDegraded = value["recordingDegraded"];
|
|
5296
|
+
return (model === null || typeof model === "string") && (mode === null || typeof mode === "string") && (recordingDegraded === void 0 || typeof recordingDegraded === "boolean");
|
|
4845
5297
|
}
|
|
4846
5298
|
__name(isSessionSnapshotData, "isSessionSnapshotData");
|
|
5299
|
+
function isSessionRecordingDegradedData(value) {
|
|
5300
|
+
return isRecord(value) && isNonEmptyString(value["sessionId"]) && value["reason"] === "write_failed";
|
|
5301
|
+
}
|
|
5302
|
+
__name(isSessionRecordingDegradedData, "isSessionRecordingDegradedData");
|
|
4847
5303
|
function isPermissionOption(value) {
|
|
4848
5304
|
return isRecord(value) && isNonEmptyString(value["optionId"]);
|
|
4849
5305
|
}
|
|
@@ -5171,6 +5627,7 @@ var MCP_RESTART_REFUSED_REASONS2 = /* @__PURE__ */ new Set([
|
|
|
5171
5627
|
]);
|
|
5172
5628
|
var MALFORMED_MEMORY_CHANGED = "malformed memory_changed payload";
|
|
5173
5629
|
var MAX_DETAILS_LENGTH = 4096;
|
|
5630
|
+
var SESSION_RECORDING_DEGRADED_MESSAGE = "Session recording stopped after a write failure. New messages for the affected session will not be saved. Check disk space and permissions, then start a new session to resume recording.";
|
|
5174
5631
|
function normalizeDaemonEvent(event, opts = {}) {
|
|
5175
5632
|
const base = createBase(event, opts);
|
|
5176
5633
|
switch (event.type) {
|
|
@@ -5231,6 +5688,42 @@ function normalizeDaemonEvent(event, opts = {}) {
|
|
|
5231
5688
|
text: `Session closed: ${getString2(event.data, "reason") ?? "closed"}`
|
|
5232
5689
|
}
|
|
5233
5690
|
];
|
|
5691
|
+
case "session_recording_degraded": {
|
|
5692
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
5693
|
+
if (!sessionId || getString2(event.data, "reason") !== "write_failed") {
|
|
5694
|
+
return fallbackDebug(event, base, "malformed recording state");
|
|
5695
|
+
}
|
|
5696
|
+
return [
|
|
5697
|
+
{
|
|
5698
|
+
...base,
|
|
5699
|
+
type: "error",
|
|
5700
|
+
recoverable: true,
|
|
5701
|
+
code: "session_recording_degraded",
|
|
5702
|
+
text: SESSION_RECORDING_DEGRADED_MESSAGE
|
|
5703
|
+
}
|
|
5704
|
+
];
|
|
5705
|
+
}
|
|
5706
|
+
case "session_snapshot": {
|
|
5707
|
+
if (!isRecord2(event.data) || !getString2(event.data, "sessionId")) {
|
|
5708
|
+
return fallbackDebug(event, base, "malformed recording snapshot");
|
|
5709
|
+
}
|
|
5710
|
+
const recordingDegraded = event.data["recordingDegraded"];
|
|
5711
|
+
if (recordingDegraded !== void 0 && typeof recordingDegraded !== "boolean") {
|
|
5712
|
+
return fallbackDebug(event, base, "malformed recording snapshot");
|
|
5713
|
+
}
|
|
5714
|
+
if (recordingDegraded === true) {
|
|
5715
|
+
return [
|
|
5716
|
+
{
|
|
5717
|
+
...base,
|
|
5718
|
+
type: "error",
|
|
5719
|
+
recoverable: true,
|
|
5720
|
+
code: "session_recording_degraded",
|
|
5721
|
+
text: SESSION_RECORDING_DEGRADED_MESSAGE
|
|
5722
|
+
}
|
|
5723
|
+
];
|
|
5724
|
+
}
|
|
5725
|
+
return [];
|
|
5726
|
+
}
|
|
5234
5727
|
case "client_evicted":
|
|
5235
5728
|
return [
|
|
5236
5729
|
{
|
|
@@ -5336,6 +5829,8 @@ function normalizeDaemonEvent(event, opts = {}) {
|
|
|
5336
5829
|
case "approval_mode_changed":
|
|
5337
5830
|
return normalizeApprovalModeChanged(event, base);
|
|
5338
5831
|
// ── Workspace events ──────────────────────────────────────
|
|
5832
|
+
case "git_branch_changed":
|
|
5833
|
+
return [];
|
|
5339
5834
|
case "memory_changed":
|
|
5340
5835
|
return normalizeMemoryChanged(event, base);
|
|
5341
5836
|
case "agent_changed":
|
|
@@ -5362,6 +5857,8 @@ function normalizeDaemonEvent(event, opts = {}) {
|
|
|
5362
5857
|
return normalizeMcpServerRestartRefused(event, base);
|
|
5363
5858
|
case "extensions_changed":
|
|
5364
5859
|
return normalizeExtensionsChanged(event, base);
|
|
5860
|
+
case "artifact_changed":
|
|
5861
|
+
return normalizeArtifactChanged(event, base);
|
|
5365
5862
|
// ── Auth device-flow events (RFC 8628) ─────────────────
|
|
5366
5863
|
case "auth_device_flow_started":
|
|
5367
5864
|
return normalizeAuthDeviceFlowStarted(event, base);
|
|
@@ -5374,16 +5871,20 @@ function normalizeDaemonEvent(event, opts = {}) {
|
|
|
5374
5871
|
case "auth_device_flow_cancelled":
|
|
5375
5872
|
return normalizeAuthDeviceFlowCancelled(event, base);
|
|
5376
5873
|
default:
|
|
5377
|
-
return
|
|
5378
|
-
{
|
|
5379
|
-
...base,
|
|
5380
|
-
type: "debug",
|
|
5381
|
-
text: `${event.type} (unrecognized daemon event): ${stringifyRedactedJson(event.data)}`
|
|
5382
|
-
}
|
|
5383
|
-
];
|
|
5874
|
+
return normalizeUnrecognizedEvent(event, base);
|
|
5384
5875
|
}
|
|
5385
5876
|
}
|
|
5386
5877
|
__name(normalizeDaemonEvent, "normalizeDaemonEvent");
|
|
5878
|
+
function normalizeUnrecognizedEvent(event, base) {
|
|
5879
|
+
return [
|
|
5880
|
+
{
|
|
5881
|
+
...base,
|
|
5882
|
+
type: "debug",
|
|
5883
|
+
text: `${event.type} (unrecognized daemon event): ${stringifyRedactedJson(event.data)}`
|
|
5884
|
+
}
|
|
5885
|
+
];
|
|
5886
|
+
}
|
|
5887
|
+
__name(normalizeUnrecognizedEvent, "normalizeUnrecognizedEvent");
|
|
5387
5888
|
function normalizeStateResyncRequired(event, base) {
|
|
5388
5889
|
const reason = getString2(event.data, "reason");
|
|
5389
5890
|
const lastDeliveredId = numberField(event.data, "lastDeliveredId");
|
|
@@ -5637,8 +6138,13 @@ function normalizeSessionUpdate(event, base, opts) {
|
|
|
5637
6138
|
];
|
|
5638
6139
|
}
|
|
5639
6140
|
case "tool_call":
|
|
5640
|
-
case "tool_call_update":
|
|
6141
|
+
case "tool_call_update": {
|
|
6142
|
+
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
6143
|
+
if (getString2(update, "status") === "in_progress" && getString2(update, "kind") === void 0 && meta?.["shellProgress"] !== void 0) {
|
|
6144
|
+
return [];
|
|
6145
|
+
}
|
|
5641
6146
|
return [normalizeToolUpdate(update, base)];
|
|
6147
|
+
}
|
|
5642
6148
|
case "shell_output":
|
|
5643
6149
|
case "tool_output": {
|
|
5644
6150
|
const text = getOutputText(update);
|
|
@@ -5959,6 +6465,27 @@ function normalizeSessionMetadataUpdated(event, base) {
|
|
|
5959
6465
|
];
|
|
5960
6466
|
}
|
|
5961
6467
|
__name(normalizeSessionMetadataUpdated, "normalizeSessionMetadataUpdated");
|
|
6468
|
+
function normalizeArtifactChanged(event, base) {
|
|
6469
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
6470
|
+
const change = isRecord2(event.data) ? event.data["change"] : void 0;
|
|
6471
|
+
if (!sessionId || !isRecord2(change)) {
|
|
6472
|
+
return fallbackDebug(event, base, "malformed artifact_changed payload");
|
|
6473
|
+
}
|
|
6474
|
+
const action = getString2(change, "action");
|
|
6475
|
+
const artifactId = getString2(change, "artifactId");
|
|
6476
|
+
if (!action || !artifactId) {
|
|
6477
|
+
return fallbackDebug(event, base, "missing action or artifactId");
|
|
6478
|
+
}
|
|
6479
|
+
return [
|
|
6480
|
+
{
|
|
6481
|
+
...base,
|
|
6482
|
+
type: "session.artifact.changed",
|
|
6483
|
+
sessionId,
|
|
6484
|
+
change
|
|
6485
|
+
}
|
|
6486
|
+
];
|
|
6487
|
+
}
|
|
6488
|
+
__name(normalizeArtifactChanged, "normalizeArtifactChanged");
|
|
5962
6489
|
function normalizeApprovalModeChanged(event, base) {
|
|
5963
6490
|
const sessionId = getString2(event.data, "sessionId");
|
|
5964
6491
|
const previous = getString2(event.data, "previous");
|
|
@@ -6819,7 +7346,14 @@ var RESYNC_PASSTHROUGH_TYPES2 = /* @__PURE__ */ new Set([
|
|
|
6819
7346
|
function appendLocalUserTranscriptMessage(state, text, opts = {}) {
|
|
6820
7347
|
const next = cloneTranscriptState(state, opts);
|
|
6821
7348
|
finishAssistant(next);
|
|
6822
|
-
const block = createTextBlock(
|
|
7349
|
+
const block = createTextBlock(
|
|
7350
|
+
next,
|
|
7351
|
+
"user",
|
|
7352
|
+
text,
|
|
7353
|
+
void 0,
|
|
7354
|
+
void 0,
|
|
7355
|
+
opts.meta
|
|
7356
|
+
);
|
|
6823
7357
|
if (opts.images && opts.images.length > 0) {
|
|
6824
7358
|
block.images = [...opts.images];
|
|
6825
7359
|
}
|
|
@@ -6958,6 +7492,7 @@ function applyDaemonTranscriptEvent(next, event) {
|
|
|
6958
7492
|
next.approvalMode = event.next;
|
|
6959
7493
|
break;
|
|
6960
7494
|
case "session.metadata.changed":
|
|
7495
|
+
case "session.artifact.changed":
|
|
6961
7496
|
case "session.available_commands":
|
|
6962
7497
|
break;
|
|
6963
7498
|
case "session.state_resync_required":
|
|
@@ -7912,8 +8447,8 @@ function createDaemonTranscriptStore(seed = {}) {
|
|
|
7912
8447
|
state = reduceDaemonTranscriptEvents(state, events);
|
|
7913
8448
|
scheduleNotify();
|
|
7914
8449
|
},
|
|
7915
|
-
appendLocalUserMessage(text, images) {
|
|
7916
|
-
state = appendLocalUserTranscriptMessage(state, text, { images });
|
|
8450
|
+
appendLocalUserMessage(text, images, meta) {
|
|
8451
|
+
state = appendLocalUserTranscriptMessage(state, text, { images, meta });
|
|
7917
8452
|
scheduleNotify();
|
|
7918
8453
|
},
|
|
7919
8454
|
reset(nextSeed = {}) {
|
|
@@ -8058,6 +8593,12 @@ function daemonUiEventToTerminalText(event) {
|
|
|
8058
8593
|
`metadata: ${event.displayName ?? "(no display name)"}`,
|
|
8059
8594
|
"36"
|
|
8060
8595
|
);
|
|
8596
|
+
case "session.artifact.changed":
|
|
8597
|
+
return terminalLine(
|
|
8598
|
+
"artifact",
|
|
8599
|
+
`${event.change.action} ${event.change.artifact?.title ?? event.change.artifactId}`,
|
|
8600
|
+
"36"
|
|
8601
|
+
);
|
|
8061
8602
|
case "session.approval_mode.changed":
|
|
8062
8603
|
return terminalLine(
|
|
8063
8604
|
"approval-mode",
|