@qwen-code/qwen-code 0.19.7-nightly.20260708.394c1a289 → 0.19.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/features/channels/overview.md +6 -3
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -0
- package/bundled/qc-helper/docs/features/hooks.md +36 -34
- package/bundled/qc-helper/docs/features/memory.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +17 -10
- package/bundled/review/SKILL.md +6 -2
- package/chunks/{MaxSizedBox-XS37LWTD.js → MaxSizedBox-5DT2SD7B.js} +7 -7
- package/chunks/{StandaloneSessionPicker-LPALJTKN.js → StandaloneSessionPicker-EYRGH6PJ.js} +23 -21
- package/chunks/{acpAgent-4VE3FGJX.js → acpAgent-GRFTTRHW.js} +74 -69
- package/chunks/{agent-CCHERW6L.js → agent-H2DGKS77.js} +4 -4
- package/chunks/{agent-headless-55N6UBUU.js → agent-headless-KFMFIT6J.js} +4 -4
- package/chunks/{anthropicContentGenerator-AKYPSZIV.js → anthropicContentGenerator-CPF22MA7.js} +28 -1
- package/chunks/{bridge-U6HXOHE7.js → bridge-NA3ZQQKJ.js} +11 -10
- package/chunks/{ca-HCMB2I54.js → ca-MKD32FQL.js} +26 -1
- package/chunks/{channel-worker-supervisor-CRCVYQIE.js → channel-worker-supervisor-NZQUOEFJ.js} +3 -3
- package/chunks/{chunk-J43WPR6U.js → chunk-27BHARDE.js} +8 -8
- package/chunks/{chunk-KKWO4IX2.js → chunk-2EM7ECZD.js} +251 -71
- package/chunks/{chunk-E7HM76PR.js → chunk-3GNOQZDC.js} +1562 -1025
- package/chunks/{chunk-G7ZG7CA6.js → chunk-3UP777ZS.js} +8 -7
- package/chunks/{chunk-VEB3NYSO.js → chunk-5MBO76SL.js} +5 -0
- package/chunks/{chunk-N74BA4VP.js → chunk-6VK6FIMQ.js} +1 -1
- package/chunks/{chunk-2FHWCKWA.js → chunk-A5JOJ77H.js} +35 -14
- package/chunks/{chunk-PLGONYEL.js → chunk-AYNCLGTW.js} +5 -5
- package/chunks/{chunk-K34DD7FH.js → chunk-BOBOCR5H.js} +4 -3
- package/chunks/chunk-BOBRZZKD.js +468 -0
- package/chunks/{chunk-7I4MGFBN.js → chunk-BUZ6HGL4.js} +5 -5
- package/chunks/{chunk-FK77ILF5.js → chunk-BVYU3ZTI.js} +2 -2
- package/chunks/{chunk-TBAZMRW3.js → chunk-CD6USWHZ.js} +1 -1
- package/chunks/{chunk-PVXPDMGP.js → chunk-CHB5SLZZ.js} +2 -2
- package/chunks/{chunk-SJHAUELE.js → chunk-DCZWC4PF.js} +2 -2
- package/chunks/{chunk-YYU6H66M.js → chunk-DHOLNQLC.js} +11 -11
- package/chunks/{chunk-MOQOAH7N.js → chunk-DICGXFAI.js} +1 -1
- package/chunks/{chunk-KT3SI3CQ.js → chunk-DIWVZ3VM.js} +8 -8
- package/chunks/{chunk-2DYY5XUZ.js → chunk-E7EMCSUG.js} +1 -1
- package/chunks/{chunk-XQ2GVLNJ.js → chunk-EEN2TKST.js} +1 -1
- package/chunks/{chunk-DNV4FSN5.js → chunk-FBET5XZ2.js} +6 -4
- package/chunks/{chunk-GIY6JTTC.js → chunk-FQNC62B2.js} +4 -4
- package/chunks/{chunk-B34OV7K2.js → chunk-GGQQA4JW.js} +13 -0
- package/chunks/chunk-GLE2YUPU.js +34 -0
- package/chunks/{chunk-X265R5C6.js → chunk-GN3F6PIU.js} +1 -1
- package/chunks/{chunk-LC4SMGYY.js → chunk-GSHQYYIV.js} +45 -9
- package/chunks/{chunk-BGL43SJ3.js → chunk-HDOH3QYE.js} +1 -1
- package/chunks/{chunk-4AFOWB47.js → chunk-I6WGFJJ3.js} +63 -4
- package/chunks/{chunk-2NPS2UDH.js → chunk-IBY3Q3HG.js} +390 -9
- package/chunks/{chunk-AXTPFMRS.js → chunk-J7RCB6N5.js} +1 -1
- package/chunks/{chunk-QCSLZO6J.js → chunk-JCH35JB3.js} +1 -1
- package/chunks/{chunk-JYOWO2F7.js → chunk-JPALE3PA.js} +3 -3
- package/chunks/{chunk-5FL2K3ZB.js → chunk-JRQ7EVGE.js} +1 -1
- package/chunks/{chunk-BHRU4SDF.js → chunk-JZHIQJOE.js} +3 -3
- package/chunks/{chunk-FB2ULV4M.js → chunk-L46XKEGM.js} +14 -153
- package/chunks/{chunk-LKXDC3AW.js → chunk-L4AMBVQG.js} +9 -9
- package/chunks/{chunk-ME344634.js → chunk-LAXNEOBG.js} +1 -1
- package/chunks/{chunk-QHT5USLK.js → chunk-M7S4GK5Z.js} +66 -445
- package/chunks/{chunk-4RQIB5UZ.js → chunk-O2YT7VB4.js} +0 -34
- package/chunks/{chunk-TBLJNMI7.js → chunk-O33TBKDC.js} +10 -10
- package/chunks/chunk-O7FIRWJV.js +168 -0
- package/chunks/{chunk-4KJ2BPIT.js → chunk-OACJLMLD.js} +2 -38
- package/chunks/{chunk-CR5IU2RX.js → chunk-ON3JA3RU.js} +2 -2
- package/chunks/{chunk-VTCPREC7.js → chunk-OQXDAMKY.js} +3 -3
- package/chunks/{chunk-ELMPRVCB.js → chunk-P3XEEI3X.js} +1 -1
- package/chunks/{chunk-OU6FPTJZ.js → chunk-PMFULMLX.js} +296 -81
- package/chunks/{chunk-2YELHTUE.js → chunk-PUVCVELY.js} +1 -1
- package/chunks/{chunk-5OSSOBZC.js → chunk-RMLZAUWH.js} +4 -4
- package/chunks/{chunk-B6WUEODT.js → chunk-SQ2UATK7.js} +14 -8
- package/chunks/{chunk-TEYGKLIZ.js → chunk-TI3BWD4D.js} +1 -1
- package/chunks/{chunk-T2EJHSE3.js → chunk-TSPB77TG.js} +57 -35
- package/chunks/{chunk-L7IWK7JY.js → chunk-UX6OTBVD.js} +1 -1
- package/chunks/{chunk-XUSONNJ4.js → chunk-UXEW557D.js} +1 -1
- package/chunks/chunk-V35MD7KN.js +13 -0
- package/chunks/{chunk-B5FOCTEZ.js → chunk-VGGOPZUL.js} +6 -5
- package/chunks/{chunk-MYZWWRVW.js → chunk-WF4FAXDL.js} +2 -2
- package/chunks/{chunk-2SWMCXVR.js → chunk-WHJQ3JUS.js} +20 -8
- package/chunks/{chunk-VQJ64BIQ.js → chunk-WQTHLB5T.js} +3 -3
- package/chunks/chunk-XNXVCNAT.js +88 -0
- package/chunks/{chunk-TDGF35EN.js → chunk-XOHNA2S6.js} +1 -1
- package/chunks/{chunk-ZK5EI6NR.js → chunk-XYR5RUA5.js} +14 -5
- package/chunks/{chunk-YMWIKAEE.js → chunk-YDOXPLYL.js} +244 -47
- package/chunks/{chunk-UZCT5OLN.js → chunk-YHKAK72D.js} +11 -11
- package/chunks/{chunk-RFIL6REB.js → chunk-YKZIAK7C.js} +119 -29
- package/chunks/chunk-Z3I3QJK3.js +47 -0
- package/chunks/{chunk-3QDZDAJG.js → chunk-ZE6E424U.js} +1 -1
- package/chunks/chunk-ZL5HN75Q.js +61 -0
- package/chunks/{computer-use-4CTF6WS3.js → computer-use-WMY3UOBX.js} +4 -4
- package/chunks/{contextCommand-Z3XWQCY6.js → contextCommand-LXFZRP4L.js} +6 -6
- package/chunks/{daemon-F3I2RXP6.js → daemon-WPAENEBW.js} +48 -0
- package/chunks/{daemon-status-provider-6A4QCG6Q.js → daemon-status-provider-GJRXY5EN.js} +15 -13
- package/chunks/{de-PLLFDERI.js → de-ZFPPQVSF.js} +26 -1
- package/chunks/{dist-IMFFBMAT.js → dist-BEXOZXLQ.js} +1 -1
- package/chunks/{dist-OT7G2WNM.js → dist-E6UANPIM.js} +1 -1
- package/chunks/{dist-FQ5WRJPL.js → dist-H2AEJCZ5.js} +2 -2
- package/chunks/{dist-YTRKAVUB.js → dist-O2IRTRPP.js} +1 -1
- package/chunks/{dist-573HNSVO.js → dist-SCFLLYMK.js} +1 -1
- package/chunks/{dist-PKFTNUHO.js → dist-Z34QPAQW.js} +1 -1
- package/chunks/{earlyInputCapture-7O47HW62.js → earlyInputCapture-KNOYZ4MJ.js} +4 -4
- package/chunks/{edit-E32KWLF2.js → edit-OTYWAXGP.js} +5 -5
- package/chunks/{en-GA2RMXY5.js → en-N4EPZAQI.js} +26 -1
- package/chunks/{enter-worktree-ZKFFMHUD.js → enter-worktree-HNYBDVCX.js} +4 -4
- package/chunks/{enterPlanMode-HLDC6NGX.js → enterPlanMode-CJCNGT63.js} +4 -4
- package/chunks/environment-ATFTYMLZ.js +88 -0
- package/chunks/{errors-MTIDDXX7.js → errors-A54HAADA.js} +6 -6
- package/chunks/{exit-worktree-YHY72XA2.js → exit-worktree-DUUKOE3X.js} +4 -4
- package/chunks/{exitPlanMode-JNXKBZ2C.js → exitPlanMode-AMMSXOAJ.js} +4 -4
- package/chunks/{fast-path-DVAGBROV.js → fast-path-OV6NIP3K.js} +12 -3
- package/chunks/{fast-path-settings-RCRXH2JG.js → fast-path-settings-7RIFI3PK.js} +3 -2
- package/chunks/{fr-GWNQG4XH.js → fr-5WWMY53B.js} +26 -1
- package/chunks/{gemini-2TMHJVRC.js → gemini-NQ3WWBKB.js} +431 -135
- package/chunks/{geminiContentGenerator-WCH4GWD3.js → geminiContentGenerator-CDUNEJQE.js} +1 -1
- package/chunks/{glob-I6Y4AGKO.js → glob-ROV3YS4R.js} +4 -4
- package/chunks/{grep-3P2J3LU5.js → grep-NRITKDCD.js} +4 -4
- package/chunks/{handleAutoUpdate-4IVRMRG4.js → handleAutoUpdate-CEZJAARW.js} +6 -6
- package/chunks/{initializer-DVNCPVTC.js → initializer-BRFJKRRX.js} +11 -9
- package/chunks/{ja-2HOTA47X.js → ja-CUHZOLEJ.js} +26 -1
- package/chunks/{list-4D6QK2KZ.js → list-KVHF7O4X.js} +13 -11
- package/chunks/{loadedSettingsAdapter-GNGELH6Q.js → loadedSettingsAdapter-LL5PSFKX.js} +11 -9
- package/chunks/{ls-L654WOAT.js → ls-7MFU2QYW.js} +1 -1
- package/chunks/{lsp-M35KE54Y.js → lsp-XHDTPTGV.js} +2 -4
- package/chunks/{mcp-2IL72YJP.js → mcp-3GCXRTOQ.js} +11 -9
- package/chunks/{monitor-BLVCZAVX.js → monitor-FL2ZO33W.js} +4 -4
- package/chunks/{nonInteractiveCli-UD3V7UOO.js → nonInteractiveCli-PTQI3DV6.js} +44 -41
- package/chunks/{notebook-edit-5TVMWIWY.js → notebook-edit-6PULTHL5.js} +5 -5
- package/chunks/{openaiContentGenerator-5LJ5A7YY.js → openaiContentGenerator-YE42PKCY.js} +3 -3
- package/chunks/{pidfile-AN5JQJ2T.js → pidfile-NZYSCFRK.js} +4 -4
- package/chunks/{pt-2THT3YHA.js → pt-OLYN42DS.js} +26 -1
- package/chunks/{qwenContentGenerator-E2JSB4FJ.js → qwenContentGenerator-NX2E7PB7.js} +5 -5
- package/chunks/{read-file-N5DEFUDU.js → read-file-33XGP5HF.js} +2 -2
- package/chunks/{record-artifact-PP3LKHTS.js → record-artifact-SQ2OKRJW.js} +3 -3
- package/chunks/{ripGrep-BLJHTHKE.js → ripGrep-QWZLGTAN.js} +4 -4
- package/chunks/{ru-Z67YJHBG.js → ru-LDM3GWVQ.js} +26 -1
- package/chunks/{run-qwen-serve-4JDO64RN.js → run-qwen-serve-JK2DL7PI.js} +596 -143
- package/chunks/{scheduler-FQR4XA7J.js → scheduler-O4IGVZKK.js} +4 -4
- package/chunks/{send-message-OA6MV4EU.js → send-message-76GT3JMC.js} +1 -1
- package/chunks/{serve-ZOCFC7YM.js → serve-JTMIGANH.js} +13 -10
- package/chunks/{server-GEOYEPYT.js → server-SGNPKX2O.js} +667 -243
- package/chunks/{session-NJCONHGX.js → session-5BNM25EZ.js} +45 -42
- package/chunks/{settings-QBGGXANI.js → settings-3MI4XXP6.js} +20 -16
- package/chunks/{shell-2DVPSEKT.js → shell-YJKBE67T.js} +4 -4
- package/chunks/{skill-HIPXUHV7.js → skill-I22QK5XS.js} +2 -2
- package/chunks/{spawnChannel-3JYXY52G.js → spawnChannel-UNV6W4DU.js} +6 -6
- package/chunks/{src-NLEX4CUC.js → src-BBQSM46M.js} +8 -4
- package/chunks/{startInteractiveUI-TYGZIU27.js → startInteractiveUI-JII36UGN.js} +619 -288
- package/chunks/{task-create-RPFZNB4B.js → task-create-WCHTB435.js} +2 -2
- package/chunks/{task-update-5WUG5MVQ.js → task-update-XYWMHJGJ.js} +2 -2
- package/chunks/{team-create-MGX57SZJ.js → team-create-A7NUU5AQ.js} +4 -4
- package/chunks/{team-plan-approval-BO2N7J3E.js → team-plan-approval-TOQRJ2KI.js} +4 -4
- package/chunks/{theme-manager-WU7LOA64.js → theme-manager-WZ4RRMMB.js} +4 -4
- package/chunks/{tool-search-CLBKVEVK.js → tool-search-SZ4EFS2T.js} +3 -3
- package/chunks/total-session-admission-ULXJWXFV.js +72 -0
- package/chunks/{trustedFolders-GAQM2GHB.js → trustedFolders-LAZZPZ3D.js} +5 -5
- package/chunks/{updateCheck-RIK2YIQE.js → updateCheck-KONLM73X.js} +5 -5
- package/chunks/{validateNonInterActiveAuth-NS3GBIJZ.js → validateNonInterActiveAuth-MPKSRCXD.js} +41 -38
- package/chunks/{version-B3RSLP54.js → version-NO2XSNNP.js} +1 -1
- package/chunks/{workflow-7APPIGND.js → workflow-WO2H6NRI.js} +5 -5
- package/chunks/{workspace-providers-status-SC67GLMY.js → workspace-providers-status-3W7E7DFW.js} +14 -11
- package/chunks/workspace-registry-SXJZNN3O.js +74 -0
- package/chunks/{workspace-service-ZJHF22WA.js → workspace-service-CZRQZ4Q4.js} +17 -15
- package/chunks/{workspace-skills-status-NJEK6P6Y.js → workspace-skills-status-K7WFREPD.js} +12 -10
- package/chunks/{write-file-R6Z3VLRY.js → write-file-PX2Z7IBE.js} +5 -5
- package/chunks/{zh-7XVVRTDH.js → zh-J4F6QWQV.js} +26 -1
- package/chunks/{zh-TW-DPH554OG.js → zh-TW-XVDWOLSW.js} +26 -1
- package/cli.js +11 -11
- package/locales/ca.js +30 -0
- package/locales/de.js +30 -0
- package/locales/en.js +30 -0
- package/locales/fr.js +30 -0
- package/locales/ja.js +30 -0
- package/locales/pt.js +30 -0
- package/locales/ru.js +30 -0
- package/locales/zh-TW.js +30 -0
- package/locales/zh.js +30 -0
- 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-C7hjaa7g.js → arc-BWyoJpY2.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-pm9KtMZY.js → architectureDiagram-3BPJPVTR-BT0mGrz2.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CApElKsU.js → blockDiagram-GPEHLZMM-BLgUWvyf.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BeDe0-9N.js → c4Diagram-AAUBKEIU-DYx9M7oU.js} +1 -1
- package/web-shell/assets/channel-wmPUGHtg.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-DJEkmLdl.js → chunk-2J33WTMH-CfMHWbuZ.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DXX8gdpe.js → chunk-4BX2VUAB-B1URoqEV.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DORmk1kQ.js → chunk-55IACEB6-DAIaM4QF.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DWmO4mCZ.js → chunk-727SXJPM-B2X34knw.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-C7LRaYw2.js → chunk-AQP2D5EJ-Cif-zLTQ.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CCdXgyC5.js → chunk-FMBD7UC4-H18WCXdY.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-SyL_xvWc.js → chunk-ND2GUHAM-YFtetHi0.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BzOuCKxa.js → chunk-QZHKN3VN-By2hiH3r.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BA2ljEjW.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BA2ljEjW.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BMPWyDKc.js → cose-bilkent-S5V4N54A-VrcnnLZu.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-B_GnPWik.js → dagre-BM42HDAG-CGo-IaVV.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-fJqMc3S_.js → diagram-2AECGRRQ-Dl4QjzIB.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-ximV3O9D.js → diagram-5GNKFQAL-qMLmsO0u.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-2vVyjzqw.js → diagram-KO2AKTUF-CHlmuxPI.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-Dckcx1sT.js → diagram-LMA3HP47-BUwU3GwT.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BAVv47ga.js → diagram-OG6HWLK6-HEhwPDUM.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-Bn3nf5J0.js → erDiagram-TEJ5UH35-1n0llBmM.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BIbGF9JT.js → flowDiagram-I6XJVG4X-BN74uMnt.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CDbhb3AH.js → ganttDiagram-6RSMTGT7-BoOq78i3.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CbKG1a_w.js → gitGraphDiagram-PVQCEYII-CN8b00c8.js} +1 -1
- package/web-shell/assets/index-CNwoO1Cn.js +783 -0
- package/web-shell/assets/index-CWQ0z6kZ.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DUFxTy8m.js → infoDiagram-5YYISTIA-CCurnIna.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D69hrBG8.js → ishikawaDiagram-YF4QCWOH-AwuRqdUP.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DsvEw51Y.js → journeyDiagram-JHISSGLW-B7IICk-E.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-lFFjZEYd.js → kanban-definition-UN3LZRKU-BYF0OKhx.js} +1 -1
- package/web-shell/assets/{linear-Bo5bWzvo.js → linear-GWWguGfD.js} +1 -1
- package/web-shell/assets/{mermaid.core-C_HKMJx5.js → mermaid.core-JqtkxvCl.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DlV-NUTs.js → mindmap-definition-RKZ34NQL-B0MmHsZ6.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-B2e6FH2a.js → pieDiagram-4H26LBE5-DhImUZLQ.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D75kSk-b.js → quadrantDiagram-W4KKPZXB-DGeSC3DT.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CQ6xakhM.js → requirementDiagram-4Y6WPE33-DkspY6Re.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-J_XTKrcY.js → sankeyDiagram-5OEKKPKP-CaOofS2x.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D7jTcBtf.js → sequenceDiagram-3UESZ5HK-DFQ_kFnN.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CrlM_OT3.js → stateDiagram-AJRCARHV-D3snw0Tz.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BbSm_9d0.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-5oZi76Ef.js → timeline-definition-PNZ67QCA-l4zH8nLM.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DO5YptPK.js → vennDiagram-CIIHVFJN-BnRlA98M.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-4t1eJDvM.js → wardley-L42UT6IY-BS0xUdmd.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DKZc661S.js → wardleyDiagram-YWT4CUSO-DKGBUWyQ.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-su9hp08G.js → xychartDiagram-2RQKCTM6-DVb2HuOB.js} +1 -1
- package/web-shell/index.html +2 -2
- package/web-shell/assets/channel-BNf1dW-j.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-uOIGlzgi.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-uOIGlzgi.js +0 -1
- package/web-shell/assets/index-CnE2ur2L.js +0 -779
- package/web-shell/assets/index-hSKXrlSE.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Bs4TK_84.js +0 -1
|
@@ -1,11 +1,68 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
DualOutputContext,
|
|
5
|
+
useDualOutput,
|
|
6
|
+
useGeminiStream
|
|
7
|
+
} from "./chunk-L4AMBVQG.js";
|
|
8
|
+
import {
|
|
9
|
+
MAX_SUGGESTIONS_TO_SHOW,
|
|
10
|
+
MAX_WIDTH,
|
|
11
|
+
SuggestionsDisplay,
|
|
12
|
+
buildMcpResourceRef,
|
|
13
|
+
buildMcpServerRef,
|
|
14
|
+
getExtensionSuggestions,
|
|
15
|
+
matchMcpServerPrefix
|
|
16
|
+
} from "./chunk-RMLZAUWH.js";
|
|
3
17
|
import {
|
|
4
18
|
StreamJsonOutputAdapter
|
|
5
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-CHB5SLZZ.js";
|
|
20
|
+
import {
|
|
21
|
+
BuiltinCommandLoader,
|
|
22
|
+
BundledSkillLoader,
|
|
23
|
+
CommandService,
|
|
24
|
+
DISPLAY_HOOK_EVENTS,
|
|
25
|
+
FileCommandLoader,
|
|
26
|
+
MAX_STACKED_SKILLS,
|
|
27
|
+
McpPromptLoader,
|
|
28
|
+
SavedWorkflowLoader,
|
|
29
|
+
SkillCommandLoader,
|
|
30
|
+
addConfigToMatcherGroup,
|
|
31
|
+
appendUserPromptExpansionAdditionalContext,
|
|
32
|
+
createEmptyHookEventInfo,
|
|
33
|
+
findMidInputSlashCommand,
|
|
34
|
+
findSlashCommandTokens,
|
|
35
|
+
formatApprovalModeDescription,
|
|
36
|
+
formatApprovalModeName,
|
|
37
|
+
formatUserPromptExpansionBlockedMessage,
|
|
38
|
+
getAllConfigs,
|
|
39
|
+
getBestSlashCommandMatch,
|
|
40
|
+
getTranslatedSourceDisplayMap,
|
|
41
|
+
hasBlockingBackgroundWork,
|
|
42
|
+
hasSlashCommandPathSeparator,
|
|
43
|
+
isBtwCommand,
|
|
44
|
+
isMidInputCompletableCommand,
|
|
45
|
+
isSlashCommand,
|
|
46
|
+
parseSlashCommand,
|
|
47
|
+
parseStackedSlashCommands,
|
|
48
|
+
refreshExtensionContentRuntime,
|
|
49
|
+
resetBackgroundStateForSessionSwitch,
|
|
50
|
+
restoreGoalFromHistory,
|
|
51
|
+
serializeUserPromptExpansionPrompt,
|
|
52
|
+
supportsMatchers,
|
|
53
|
+
useAutoAcceptIndicator
|
|
54
|
+
} from "./chunk-2EM7ECZD.js";
|
|
55
|
+
import "./chunk-WQTHLB5T.js";
|
|
6
56
|
import {
|
|
7
57
|
startPostRenderPrefetches
|
|
8
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-A5JOJ77H.js";
|
|
59
|
+
import {
|
|
60
|
+
EXTENSION_RELOAD_FAILED_REASON,
|
|
61
|
+
ExtensionRefreshState,
|
|
62
|
+
appEvents,
|
|
63
|
+
loadHierarchicalGeminiMemory
|
|
64
|
+
} from "./chunk-YDOXPLYL.js";
|
|
65
|
+
import "./chunk-JPALE3PA.js";
|
|
9
66
|
import {
|
|
10
67
|
AboutBox,
|
|
11
68
|
BaseSelectionList,
|
|
@@ -73,76 +130,13 @@ import {
|
|
|
73
130
|
useTextBuffer,
|
|
74
131
|
useUIActions,
|
|
75
132
|
useUIState
|
|
76
|
-
} from "./chunk-
|
|
77
|
-
import {
|
|
78
|
-
relaunchApp
|
|
79
|
-
} from "./chunk-AXTPFMRS.js";
|
|
80
|
-
import {
|
|
81
|
-
MaxSizedBox,
|
|
82
|
-
OverflowProvider,
|
|
83
|
-
useOverflowState
|
|
84
|
-
} from "./chunk-CR5IU2RX.js";
|
|
85
|
-
import {
|
|
86
|
-
stopAndGetCapturedInput
|
|
87
|
-
} from "./chunk-CSOTA7KX.js";
|
|
88
|
-
import {
|
|
89
|
-
DualOutputContext,
|
|
90
|
-
useDualOutput,
|
|
91
|
-
useGeminiStream
|
|
92
|
-
} from "./chunk-LKXDC3AW.js";
|
|
93
|
-
import {
|
|
94
|
-
MAX_SUGGESTIONS_TO_SHOW,
|
|
95
|
-
MAX_WIDTH,
|
|
96
|
-
SuggestionsDisplay,
|
|
97
|
-
buildMcpResourceRef,
|
|
98
|
-
buildMcpServerRef,
|
|
99
|
-
getExtensionSuggestions,
|
|
100
|
-
matchMcpServerPrefix
|
|
101
|
-
} from "./chunk-5OSSOBZC.js";
|
|
102
|
-
import {
|
|
103
|
-
BuiltinCommandLoader,
|
|
104
|
-
BundledSkillLoader,
|
|
105
|
-
CommandService,
|
|
106
|
-
DISPLAY_HOOK_EVENTS,
|
|
107
|
-
FileCommandLoader,
|
|
108
|
-
MAX_STACKED_SKILLS,
|
|
109
|
-
McpPromptLoader,
|
|
110
|
-
SavedWorkflowLoader,
|
|
111
|
-
SkillCommandLoader,
|
|
112
|
-
addConfigToMatcherGroup,
|
|
113
|
-
appendUserPromptExpansionAdditionalContext,
|
|
114
|
-
createEmptyHookEventInfo,
|
|
115
|
-
findMidInputSlashCommand,
|
|
116
|
-
findSlashCommandTokens,
|
|
117
|
-
formatApprovalModeDescription,
|
|
118
|
-
formatApprovalModeName,
|
|
119
|
-
formatUserPromptExpansionBlockedMessage,
|
|
120
|
-
getAllConfigs,
|
|
121
|
-
getBestSlashCommandMatch,
|
|
122
|
-
getTranslatedSourceDisplayMap,
|
|
123
|
-
hasBlockingBackgroundWork,
|
|
124
|
-
hasSlashCommandPathSeparator,
|
|
125
|
-
isBtwCommand,
|
|
126
|
-
isMidInputCompletableCommand,
|
|
127
|
-
isSlashCommand,
|
|
128
|
-
parseSlashCommand,
|
|
129
|
-
parseStackedSlashCommands,
|
|
130
|
-
resetBackgroundStateForSessionSwitch,
|
|
131
|
-
restoreGoalFromHistory,
|
|
132
|
-
serializeUserPromptExpansionPrompt,
|
|
133
|
-
supportsMatchers,
|
|
134
|
-
useAutoAcceptIndicator
|
|
135
|
-
} from "./chunk-KKWO4IX2.js";
|
|
136
|
-
import {
|
|
137
|
-
appEvents,
|
|
138
|
-
loadHierarchicalGeminiMemory
|
|
139
|
-
} from "./chunk-YMWIKAEE.js";
|
|
133
|
+
} from "./chunk-TSPB77TG.js";
|
|
140
134
|
import {
|
|
141
135
|
SessionStatsProvider,
|
|
142
136
|
getCommandDisplayName,
|
|
143
137
|
getCommandSourceBadge,
|
|
144
138
|
useSessionStats
|
|
145
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-GSHQYYIV.js";
|
|
146
140
|
import {
|
|
147
141
|
Colors,
|
|
148
142
|
SettingsContext,
|
|
@@ -151,7 +145,7 @@ import {
|
|
|
151
145
|
useMouseEvents,
|
|
152
146
|
useSettings,
|
|
153
147
|
useTerminalSize
|
|
154
|
-
} from "./chunk-
|
|
148
|
+
} from "./chunk-WF4FAXDL.js";
|
|
155
149
|
import {
|
|
156
150
|
BEL,
|
|
157
151
|
KeypressProvider,
|
|
@@ -174,7 +168,17 @@ import {
|
|
|
174
168
|
useKeypressContext,
|
|
175
169
|
wrapForMultiplexer,
|
|
176
170
|
writeOsc52
|
|
177
|
-
} from "./chunk-
|
|
171
|
+
} from "./chunk-27BHARDE.js";
|
|
172
|
+
import "./chunk-UIDXQNMV.js";
|
|
173
|
+
import {
|
|
174
|
+
relaunchApp
|
|
175
|
+
} from "./chunk-J7RCB6N5.js";
|
|
176
|
+
import "./chunk-MRO43B25.js";
|
|
177
|
+
import {
|
|
178
|
+
MaxSizedBox,
|
|
179
|
+
OverflowProvider,
|
|
180
|
+
useOverflowState
|
|
181
|
+
} from "./chunk-ON3JA3RU.js";
|
|
178
182
|
import {
|
|
179
183
|
theme
|
|
180
184
|
} from "./chunk-IFEWJXFS.js";
|
|
@@ -191,46 +195,36 @@ import {
|
|
|
191
195
|
use_is_screen_reader_enabled_default,
|
|
192
196
|
use_stdin_default,
|
|
193
197
|
use_stdout_default
|
|
194
|
-
} from "./chunk-
|
|
198
|
+
} from "./chunk-P3XEEI3X.js";
|
|
199
|
+
import {
|
|
200
|
+
stopAndGetCapturedInput
|
|
201
|
+
} from "./chunk-CSOTA7KX.js";
|
|
195
202
|
import {
|
|
196
203
|
disableKittyProtocol,
|
|
197
204
|
isKittyProtocolEnabled,
|
|
198
205
|
isKittyProtocolSupported
|
|
199
206
|
} from "./chunk-JZSY4WP3.js";
|
|
200
|
-
import "./chunk-
|
|
201
|
-
import "./chunk-UIDXQNMV.js";
|
|
202
|
-
import "./chunk-2DYY5XUZ.js";
|
|
207
|
+
import "./chunk-E7EMCSUG.js";
|
|
203
208
|
import "./chunk-332PWN27.js";
|
|
204
209
|
import {
|
|
205
210
|
setUpdateHandler
|
|
206
|
-
} from "./chunk-
|
|
207
|
-
import "./chunk-
|
|
211
|
+
} from "./chunk-TI3BWD4D.js";
|
|
212
|
+
import "./chunk-6VK6FIMQ.js";
|
|
208
213
|
import "./chunk-SAIILPQ3.js";
|
|
209
214
|
import {
|
|
210
215
|
require_react
|
|
211
216
|
} from "./chunk-KYMBIKIW.js";
|
|
212
|
-
import "./chunk-JYOWO2F7.js";
|
|
213
217
|
import {
|
|
214
218
|
AUTO_THEME_NAME,
|
|
215
219
|
DEFAULT_THEME,
|
|
216
220
|
themeManager
|
|
217
221
|
} from "./chunk-PC4ZXHU2.js";
|
|
218
|
-
import "./chunk-MRO43B25.js";
|
|
219
|
-
import {
|
|
220
|
-
requestConsentInteractive,
|
|
221
|
-
requestConsentOrFail
|
|
222
|
-
} from "./chunk-PLGONYEL.js";
|
|
223
|
-
import "./chunk-3GONHQOA.js";
|
|
224
|
-
import {
|
|
225
|
-
getErrorMessage as getErrorMessage2
|
|
226
|
-
} from "./chunk-SJHAUELE.js";
|
|
227
|
-
import "./chunk-TBAZMRW3.js";
|
|
228
222
|
import {
|
|
229
223
|
openQwenAsrRealtimeStream,
|
|
230
224
|
openVoiceStream,
|
|
231
225
|
openVoiceStreamWithRetry
|
|
232
|
-
} from "./chunk-
|
|
233
|
-
import "./chunk-
|
|
226
|
+
} from "./chunk-PUVCVELY.js";
|
|
227
|
+
import "./chunk-BVYU3ZTI.js";
|
|
234
228
|
import {
|
|
235
229
|
cpLen,
|
|
236
230
|
cpSlice,
|
|
@@ -238,48 +232,62 @@ import {
|
|
|
238
232
|
getAsciiArtWidth,
|
|
239
233
|
getCachedStringWidth,
|
|
240
234
|
sanitizeFilenameForDisplay,
|
|
235
|
+
sanitizeMultilineForDisplay,
|
|
241
236
|
stringWidth,
|
|
242
237
|
stripUnsafeCharacters,
|
|
243
238
|
toCodePoints,
|
|
244
239
|
wrapToVisualLines
|
|
245
|
-
} from "./chunk-
|
|
240
|
+
} from "./chunk-XYR5RUA5.js";
|
|
246
241
|
import "./chunk-LGFAYIKX.js";
|
|
247
242
|
import "./chunk-54YZOP7P.js";
|
|
243
|
+
import "./chunk-AHNXYU4O.js";
|
|
244
|
+
import "./chunk-RNBYOUGV.js";
|
|
245
|
+
import "./chunk-WHJQ3JUS.js";
|
|
246
|
+
import "./chunk-BJBWRCSK.js";
|
|
247
|
+
import {
|
|
248
|
+
requestConsentInteractive,
|
|
249
|
+
requestConsentOrFail
|
|
250
|
+
} from "./chunk-AYNCLGTW.js";
|
|
251
|
+
import "./chunk-3GONHQOA.js";
|
|
252
|
+
import {
|
|
253
|
+
getErrorMessage as getErrorMessage2
|
|
254
|
+
} from "./chunk-DCZWC4PF.js";
|
|
255
|
+
import "./chunk-CD6USWHZ.js";
|
|
248
256
|
import {
|
|
249
257
|
getExtendedSystemInfo
|
|
250
|
-
} from "./chunk-
|
|
258
|
+
} from "./chunk-JZHIQJOE.js";
|
|
251
259
|
import {
|
|
252
260
|
formatDuration,
|
|
253
261
|
formatRelativeTime,
|
|
254
262
|
formatTokenCount
|
|
255
263
|
} from "./chunk-KHDZHZMH.js";
|
|
256
|
-
import "./chunk-
|
|
264
|
+
import "./chunk-DIWVZ3VM.js";
|
|
257
265
|
import {
|
|
258
266
|
assertVoiceBaseUrlNetworkAllowed,
|
|
259
267
|
isKeytermEcho,
|
|
260
268
|
isStreamingVoiceModel,
|
|
261
269
|
resolveVoiceStreamConfig,
|
|
262
270
|
transcribeVoiceAudio
|
|
263
|
-
} from "./chunk-
|
|
271
|
+
} from "./chunk-VGGOPZUL.js";
|
|
264
272
|
import {
|
|
265
273
|
formatUnsupportedVoiceModelMessage,
|
|
266
274
|
isSelectableVoiceModel
|
|
267
|
-
} from "./chunk-
|
|
275
|
+
} from "./chunk-ZE6E424U.js";
|
|
268
276
|
import "./chunk-E7KNELIZ.js";
|
|
269
|
-
import "./chunk-
|
|
270
|
-
import "./chunk-
|
|
271
|
-
import "./chunk-
|
|
272
|
-
import "./chunk-BJBWRCSK.js";
|
|
277
|
+
import "./chunk-3UP777ZS.js";
|
|
278
|
+
import "./chunk-GLE2YUPU.js";
|
|
279
|
+
import "./chunk-ER3BKOLB.js";
|
|
273
280
|
import {
|
|
274
281
|
loadMcpApprovals
|
|
275
|
-
} from "./chunk-
|
|
276
|
-
import "./chunk-2NPS2UDH.js";
|
|
282
|
+
} from "./chunk-FQNC62B2.js";
|
|
277
283
|
import "./chunk-S6RLAIUR.js";
|
|
278
284
|
import "./chunk-MX2YXRER.js";
|
|
285
|
+
import "./chunk-IBY3Q3HG.js";
|
|
286
|
+
import "./chunk-VRDMOSQS.js";
|
|
279
287
|
import "./chunk-MZ7BABX3.js";
|
|
280
288
|
import {
|
|
281
289
|
createLoadedSettingsAdapter
|
|
282
|
-
} from "./chunk-
|
|
290
|
+
} from "./chunk-UX6OTBVD.js";
|
|
283
291
|
import {
|
|
284
292
|
CORRUPTED_SUFFIX,
|
|
285
293
|
SettingScope,
|
|
@@ -301,28 +309,27 @@ import {
|
|
|
301
309
|
settingExistsInScope,
|
|
302
310
|
validateSettingValue,
|
|
303
311
|
writeOutputLanguageAndRegisterPath
|
|
304
|
-
} from "./chunk-
|
|
312
|
+
} from "./chunk-M7S4GK5Z.js";
|
|
305
313
|
import {
|
|
306
314
|
getCurrentLanguage,
|
|
307
315
|
localizeToolDisplayName,
|
|
308
316
|
t,
|
|
309
317
|
ta
|
|
310
|
-
} from "./chunk-
|
|
318
|
+
} from "./chunk-O33TBKDC.js";
|
|
311
319
|
import "./chunk-TLRYABYP.js";
|
|
312
|
-
import "./chunk-
|
|
313
|
-
import "./chunk-
|
|
314
|
-
import "./chunk-
|
|
315
|
-
import "./chunk-VRDMOSQS.js";
|
|
320
|
+
import "./chunk-BOBRZZKD.js";
|
|
321
|
+
import "./chunk-O2YT7VB4.js";
|
|
322
|
+
import "./chunk-Z3I3QJK3.js";
|
|
316
323
|
import "./chunk-3RW4AZJV.js";
|
|
317
324
|
import "./chunk-CJCKDMWO.js";
|
|
318
325
|
import {
|
|
319
326
|
getCliVersion
|
|
320
|
-
} from "./chunk-
|
|
327
|
+
} from "./chunk-UXEW557D.js";
|
|
321
328
|
import "./chunk-43W4YSO6.js";
|
|
322
329
|
import {
|
|
323
330
|
isWorkspaceTrusted,
|
|
324
331
|
loadTrustedFolders
|
|
325
|
-
} from "./chunk-
|
|
332
|
+
} from "./chunk-DICGXFAI.js";
|
|
326
333
|
import {
|
|
327
334
|
clearScreen,
|
|
328
335
|
writeStderrLine
|
|
@@ -419,7 +426,7 @@ import {
|
|
|
419
426
|
validateWorkflowName,
|
|
420
427
|
watchRepoBranch,
|
|
421
428
|
writeRuntimeStatus
|
|
422
|
-
} from "./chunk-
|
|
429
|
+
} from "./chunk-3GNOQZDC.js";
|
|
423
430
|
import "./chunk-5P5XGNYH.js";
|
|
424
431
|
import "./chunk-SKAZWEV5.js";
|
|
425
432
|
import "./chunk-K5PGHDBN.js";
|
|
@@ -438,7 +445,7 @@ import "./chunk-LQ7TMOCE.js";
|
|
|
438
445
|
import "./chunk-E5A7LHNN.js";
|
|
439
446
|
import {
|
|
440
447
|
APPROVAL_MODES
|
|
441
|
-
} from "./chunk-
|
|
448
|
+
} from "./chunk-5MBO76SL.js";
|
|
442
449
|
import "./chunk-GO6LNQXT.js";
|
|
443
450
|
import "./chunk-NQKLOAVJ.js";
|
|
444
451
|
import {
|
|
@@ -471,7 +478,7 @@ import {
|
|
|
471
478
|
recordSkillInvocation,
|
|
472
479
|
removeMCPServerStatus,
|
|
473
480
|
removeMCPStatusChangeListener
|
|
474
|
-
} from "./chunk-
|
|
481
|
+
} from "./chunk-BUZ6HGL4.js";
|
|
475
482
|
import "./chunk-E6US47KI.js";
|
|
476
483
|
import "./chunk-UWCTAVOD.js";
|
|
477
484
|
import {
|
|
@@ -481,7 +488,7 @@ import "./chunk-OMX7CUOE.js";
|
|
|
481
488
|
import {
|
|
482
489
|
getAutoMemoryProjectStateDir,
|
|
483
490
|
getAutoMemoryRoot
|
|
484
|
-
} from "./chunk-
|
|
491
|
+
} from "./chunk-OACJLMLD.js";
|
|
485
492
|
import "./chunk-SUAKHHK7.js";
|
|
486
493
|
import "./chunk-FEJ2FZ3U.js";
|
|
487
494
|
import {
|
|
@@ -520,16 +527,16 @@ import {
|
|
|
520
527
|
shortenPath,
|
|
521
528
|
tildeifyPath
|
|
522
529
|
} from "./chunk-22MNNNXE.js";
|
|
523
|
-
import "./chunk-
|
|
524
|
-
import {
|
|
525
|
-
registerCleanup,
|
|
526
|
-
runExitCleanup
|
|
527
|
-
} from "./chunk-QCSLZO6J.js";
|
|
530
|
+
import "./chunk-HDOH3QYE.js";
|
|
528
531
|
import {
|
|
529
532
|
finalizeStartupProfile,
|
|
530
533
|
profileCheckpoint
|
|
531
534
|
} from "./chunk-ITOGNELQ.js";
|
|
532
535
|
import "./chunk-FXGLL2HL.js";
|
|
536
|
+
import {
|
|
537
|
+
registerCleanup,
|
|
538
|
+
runExitCleanup
|
|
539
|
+
} from "./chunk-JCH35JB3.js";
|
|
533
540
|
import "./chunk-ZERZSAZL.js";
|
|
534
541
|
import "./chunk-QN5NZ3UQ.js";
|
|
535
542
|
import "./chunk-BR4QREVK.js";
|
|
@@ -3337,22 +3344,31 @@ var MainContent = /* @__PURE__ */ __name(() => {
|
|
|
3337
3344
|
`${historyRemountKey}-${uiState.currentModel}`
|
|
3338
3345
|
),
|
|
3339
3346
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(OverflowProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Box_default, { flexDirection: "column", children: [
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3347
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3348
|
+
Box_default,
|
|
3349
|
+
{
|
|
3350
|
+
flexDirection: "column",
|
|
3351
|
+
flexShrink: 0,
|
|
3352
|
+
maxHeight: availableTerminalHeight || void 0,
|
|
3353
|
+
overflow: "hidden",
|
|
3354
|
+
children: pendingHistoryItemsWithSourceCopyOffsets.map(
|
|
3355
|
+
({ item, sourceCopyIndexOffsets }, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3356
|
+
HistoryItemDisplayComponent,
|
|
3357
|
+
{
|
|
3358
|
+
availableTerminalHeight: uiState.constrainHeight ? availableTerminalHeight : void 0,
|
|
3359
|
+
terminalWidth,
|
|
3360
|
+
mainAreaWidth,
|
|
3361
|
+
item: { ...item, id: 0 },
|
|
3362
|
+
isPending: true,
|
|
3363
|
+
isFocused: !uiState.isEditorDialogOpen,
|
|
3364
|
+
activeShellPtyId: uiState.activePtyId,
|
|
3365
|
+
embeddedShellFocused: uiState.embeddedShellFocused,
|
|
3366
|
+
sourceCopyIndexOffsets
|
|
3367
|
+
},
|
|
3368
|
+
i
|
|
3369
|
+
)
|
|
3370
|
+
)
|
|
3371
|
+
}
|
|
3356
3372
|
),
|
|
3357
3373
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ShowMoreLines, { constrainHeight: uiState.constrainHeight })
|
|
3358
3374
|
] }) })
|
|
@@ -21337,8 +21353,9 @@ function MemoryDialog({ onClose }) {
|
|
|
21337
21353
|
"memory.enableAutoSkill",
|
|
21338
21354
|
newValue
|
|
21339
21355
|
);
|
|
21356
|
+
config.setAutoSkillEnabled(newValue);
|
|
21340
21357
|
setAutoSkillOn(newValue);
|
|
21341
|
-
}, [autoSkillOn, loadedSettings]);
|
|
21358
|
+
}, [autoSkillOn, loadedSettings, config]);
|
|
21342
21359
|
const handleToggleAutoSkillConfirm = (0, import_react72.useCallback)(() => {
|
|
21343
21360
|
const newValue = !autoSkillConfirmOn;
|
|
21344
21361
|
loadedSettings.setValue(
|
|
@@ -21527,7 +21544,25 @@ __name(MemoryDialog, "MemoryDialog");
|
|
|
21527
21544
|
// packages/cli/src/ui/components/SkillReviewDialog.tsx
|
|
21528
21545
|
init_esbuild_shims();
|
|
21529
21546
|
var import_react73 = __toESM(require_react(), 1);
|
|
21547
|
+
import { promises as fs10, watch } from "node:fs";
|
|
21530
21548
|
var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1);
|
|
21549
|
+
var debugLogger21 = createDebugLogger("SKILL_REVIEW_DIALOG");
|
|
21550
|
+
var PREVIEW_MAX_HEIGHT = 12;
|
|
21551
|
+
var WATCH_DEBOUNCE_MS = 300;
|
|
21552
|
+
var PREVIEW_MAX_BYTES = 64 * 1024;
|
|
21553
|
+
async function readPreviewChunk(filePath) {
|
|
21554
|
+
const handle = await fs10.open(filePath, "r");
|
|
21555
|
+
try {
|
|
21556
|
+
const buf = Buffer.alloc(PREVIEW_MAX_BYTES + 1);
|
|
21557
|
+
const { bytesRead } = await handle.read(buf, 0, PREVIEW_MAX_BYTES + 1, 0);
|
|
21558
|
+
const truncated = bytesRead > PREVIEW_MAX_BYTES;
|
|
21559
|
+
const end = Math.min(bytesRead, PREVIEW_MAX_BYTES);
|
|
21560
|
+
return { text: buf.toString("utf-8", 0, end), truncated };
|
|
21561
|
+
} finally {
|
|
21562
|
+
await handle.close();
|
|
21563
|
+
}
|
|
21564
|
+
}
|
|
21565
|
+
__name(readPreviewChunk, "readPreviewChunk");
|
|
21531
21566
|
var SkillReviewDialog = /* @__PURE__ */ __name(({
|
|
21532
21567
|
skills,
|
|
21533
21568
|
onAccept,
|
|
@@ -21537,19 +21572,107 @@ var SkillReviewDialog = /* @__PURE__ */ __name(({
|
|
|
21537
21572
|
}) => {
|
|
21538
21573
|
const [snapshot] = (0, import_react73.useState)(() => skills);
|
|
21539
21574
|
const [index, setIndex] = (0, import_react73.useState)(0);
|
|
21575
|
+
const [preview, setPreview] = (0, import_react73.useState)({ status: "loading" });
|
|
21576
|
+
const [actionError, setActionError] = (0, import_react73.useState)(null);
|
|
21577
|
+
const [reloadCounter, setReloadCounter] = (0, import_react73.useState)(0);
|
|
21578
|
+
const launchEditor = useLaunchEditor();
|
|
21579
|
+
const settings = useSettings();
|
|
21580
|
+
const config = useConfig();
|
|
21581
|
+
const { columns } = useTerminalSize();
|
|
21582
|
+
const previewWidth = Math.max(20, Math.min(columns - 4, 100) - 6);
|
|
21583
|
+
const current = snapshot[index];
|
|
21584
|
+
const stagedPath = current?.stagedManifestPath;
|
|
21585
|
+
(0, import_react73.useEffect)(() => {
|
|
21586
|
+
setActionError(null);
|
|
21587
|
+
if (!stagedPath) return;
|
|
21588
|
+
let cancelled = false;
|
|
21589
|
+
let watcher;
|
|
21590
|
+
let debounceTimer;
|
|
21591
|
+
setPreview(
|
|
21592
|
+
(prev) => prev.status === "ready" ? prev : { status: "loading" }
|
|
21593
|
+
);
|
|
21594
|
+
readPreviewChunk(stagedPath).then(({ text, truncated }) => {
|
|
21595
|
+
if (cancelled) return;
|
|
21596
|
+
const allLines = sanitizeMultilineForDisplay(
|
|
21597
|
+
text.replace(/\r\n/g, "\n").replace(/\n+$/, "")
|
|
21598
|
+
).split("\n");
|
|
21599
|
+
const lines = allLines.slice(0, PREVIEW_MAX_HEIGHT);
|
|
21600
|
+
setPreview({
|
|
21601
|
+
status: "ready",
|
|
21602
|
+
path: stagedPath,
|
|
21603
|
+
lines,
|
|
21604
|
+
hiddenLines: allLines.length - lines.length,
|
|
21605
|
+
truncated
|
|
21606
|
+
});
|
|
21607
|
+
try {
|
|
21608
|
+
watcher = watch(stagedPath, () => {
|
|
21609
|
+
if (cancelled) return;
|
|
21610
|
+
clearTimeout(debounceTimer);
|
|
21611
|
+
debounceTimer = setTimeout(() => {
|
|
21612
|
+
if (!cancelled) setReloadCounter((c) => c + 1);
|
|
21613
|
+
}, WATCH_DEBOUNCE_MS);
|
|
21614
|
+
});
|
|
21615
|
+
watcher.on("error", () => {
|
|
21616
|
+
watcher?.close();
|
|
21617
|
+
});
|
|
21618
|
+
} catch {
|
|
21619
|
+
}
|
|
21620
|
+
}).catch((err) => {
|
|
21621
|
+
if (cancelled) return;
|
|
21622
|
+
debugLogger21.warn(`skill preview read failed for ${stagedPath}:`, err);
|
|
21623
|
+
setPreview({ status: "error" });
|
|
21624
|
+
});
|
|
21625
|
+
return () => {
|
|
21626
|
+
cancelled = true;
|
|
21627
|
+
clearTimeout(debounceTimer);
|
|
21628
|
+
watcher?.close();
|
|
21629
|
+
};
|
|
21630
|
+
}, [stagedPath, reloadCounter]);
|
|
21631
|
+
const turnOff = /* @__PURE__ */ __name(() => {
|
|
21632
|
+
try {
|
|
21633
|
+
settings.setValue(
|
|
21634
|
+
"Workspace" /* Workspace */,
|
|
21635
|
+
"memory.enableAutoSkill",
|
|
21636
|
+
false
|
|
21637
|
+
);
|
|
21638
|
+
} catch (err) {
|
|
21639
|
+
setActionError(
|
|
21640
|
+
`Failed to save setting: ${err instanceof Error ? err.message : String(err)}`
|
|
21641
|
+
);
|
|
21642
|
+
return;
|
|
21643
|
+
}
|
|
21644
|
+
config.setAutoSkillEnabled(false);
|
|
21645
|
+
onClose();
|
|
21646
|
+
}, "turnOff");
|
|
21647
|
+
const openInEditor = /* @__PURE__ */ __name(() => {
|
|
21648
|
+
if (!stagedPath) return;
|
|
21649
|
+
setActionError(null);
|
|
21650
|
+
void launchEditor(stagedPath).then(() => {
|
|
21651
|
+
setReloadCounter((c) => c + 1);
|
|
21652
|
+
}).catch((err) => {
|
|
21653
|
+
setActionError(err instanceof Error ? err.message : String(err));
|
|
21654
|
+
});
|
|
21655
|
+
}, "openInEditor");
|
|
21540
21656
|
useKeypress(
|
|
21541
21657
|
(key) => {
|
|
21542
|
-
if (key.
|
|
21658
|
+
if (key.ctrl || key.meta) return;
|
|
21659
|
+
if (key.name === "escape") {
|
|
21660
|
+
onDismiss();
|
|
21661
|
+
return;
|
|
21662
|
+
}
|
|
21663
|
+
if (key.name === "o") {
|
|
21664
|
+
openInEditor();
|
|
21665
|
+
return;
|
|
21666
|
+
}
|
|
21543
21667
|
},
|
|
21544
21668
|
{ isActive: true }
|
|
21545
21669
|
);
|
|
21546
21670
|
(0, import_react73.useEffect)(() => {
|
|
21547
21671
|
if (snapshot.length === 0) onClose();
|
|
21548
21672
|
}, [snapshot.length, onClose]);
|
|
21549
|
-
if (index >= snapshot.length) {
|
|
21673
|
+
if (index >= snapshot.length || !current) {
|
|
21550
21674
|
return null;
|
|
21551
21675
|
}
|
|
21552
|
-
const current = snapshot[index];
|
|
21553
21676
|
const advance = /* @__PURE__ */ __name(() => {
|
|
21554
21677
|
if (index + 1 >= snapshot.length) {
|
|
21555
21678
|
onClose();
|
|
@@ -21579,20 +21702,33 @@ var SkillReviewDialog = /* @__PURE__ */ __name(({
|
|
|
21579
21702
|
}
|
|
21580
21703
|
onClose();
|
|
21581
21704
|
break;
|
|
21705
|
+
case "turnOff":
|
|
21706
|
+
turnOff();
|
|
21707
|
+
break;
|
|
21582
21708
|
default:
|
|
21583
21709
|
break;
|
|
21584
21710
|
}
|
|
21585
21711
|
}, "handleSelect");
|
|
21586
21712
|
const options = [
|
|
21587
21713
|
{ label: t("Keep this skill"), value: "keep", key: "keep" },
|
|
21588
|
-
{ label: t("Discard this skill"), value: "discard", key: "discard" }
|
|
21589
|
-
{ label: t("Keep all remaining"), value: "keepAll", key: "keepAll" },
|
|
21590
|
-
{
|
|
21591
|
-
label: t("Discard all remaining"),
|
|
21592
|
-
value: "discardAll",
|
|
21593
|
-
key: "discardAll"
|
|
21594
|
-
}
|
|
21714
|
+
{ label: t("Discard this skill"), value: "discard", key: "discard" }
|
|
21595
21715
|
];
|
|
21716
|
+
if (snapshot.length - index > 1) {
|
|
21717
|
+
options.push(
|
|
21718
|
+
{ label: t("Keep all remaining"), value: "keepAll", key: "keepAll" },
|
|
21719
|
+
{
|
|
21720
|
+
label: t("Discard all remaining"),
|
|
21721
|
+
value: "discardAll",
|
|
21722
|
+
key: "discardAll"
|
|
21723
|
+
}
|
|
21724
|
+
);
|
|
21725
|
+
}
|
|
21726
|
+
options.push({
|
|
21727
|
+
label: t("Turn off auto-generated skills"),
|
|
21728
|
+
value: "turnOff",
|
|
21729
|
+
key: "turnOff"
|
|
21730
|
+
});
|
|
21731
|
+
const visiblePreview = preview.status === "ready" && preview.path !== stagedPath ? { status: "loading" } : preview;
|
|
21596
21732
|
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
21597
21733
|
Box_default,
|
|
21598
21734
|
{
|
|
@@ -21612,11 +21748,25 @@ var SkillReviewDialog = /* @__PURE__ */ __name(({
|
|
|
21612
21748
|
")"
|
|
21613
21749
|
] }),
|
|
21614
21750
|
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(Box_default, { marginTop: 1, flexDirection: "column", children: [
|
|
21615
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.primary, children: current.name }),
|
|
21616
|
-
current.description ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: current.description }) : null
|
|
21751
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.primary, children: sanitizeFilenameForDisplay(current.name) }),
|
|
21752
|
+
current.description ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: sanitizeMultilineForDisplay(current.description) }) : null
|
|
21617
21753
|
] }),
|
|
21754
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Box_default, { marginTop: 1, flexDirection: "column", children: visiblePreview.status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: t("Loading preview\u2026") }) : visiblePreview.status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: t("Preview unavailable") }) : /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
|
|
21755
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
21756
|
+
MaxSizedBox,
|
|
21757
|
+
{
|
|
21758
|
+
maxHeight: PREVIEW_MAX_HEIGHT,
|
|
21759
|
+
maxWidth: previewWidth,
|
|
21760
|
+
overflowDirection: "bottom",
|
|
21761
|
+
additionalHiddenLinesCount: visiblePreview.hiddenLines,
|
|
21762
|
+
children: visiblePreview.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { wrap: "wrap", color: theme.text.secondary, children: line === "" ? " " : line }) }, i))
|
|
21763
|
+
}
|
|
21764
|
+
),
|
|
21765
|
+
visiblePreview.truncated ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: t("\u2026 preview truncated (file too large) \u2026") }) : null
|
|
21766
|
+
] }) }),
|
|
21767
|
+
actionError ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.status.error, children: sanitizeMultilineForDisplay(actionError) }) }) : null,
|
|
21618
21768
|
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RadioButtonSelect, { items: options, onSelect: handleSelect, isFocused: true }) }),
|
|
21619
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: t("Esc
|
|
21769
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { color: theme.text.secondary, children: t("o open in editor \xB7 Esc decide later") }) })
|
|
21620
21770
|
]
|
|
21621
21771
|
}
|
|
21622
21772
|
);
|
|
@@ -21872,7 +22022,7 @@ __name(useBackgroundTaskView, "useBackgroundTaskView");
|
|
|
21872
22022
|
|
|
21873
22023
|
// packages/cli/src/ui/contexts/BackgroundTaskViewContext.tsx
|
|
21874
22024
|
var import_jsx_runtime97 = __toESM(require_jsx_runtime(), 1);
|
|
21875
|
-
var
|
|
22025
|
+
var debugLogger22 = createDebugLogger("BG_TASK_VIEW");
|
|
21876
22026
|
var BackgroundTaskViewStateContext = (0, import_react75.createContext)(null);
|
|
21877
22027
|
var BackgroundTaskViewActionsContext = (0, import_react75.createContext)(null);
|
|
21878
22028
|
var DEFAULT_STATE = {
|
|
@@ -21990,7 +22140,7 @@ function BackgroundTaskViewProvider({
|
|
|
21990
22140
|
case "dream": {
|
|
21991
22141
|
const ok = config.getMemoryManager().cancelTask(target.dreamId);
|
|
21992
22142
|
if (!ok) {
|
|
21993
|
-
|
|
22143
|
+
debugLogger22.warn(
|
|
21994
22144
|
`cancelSelected: dream task ${target.dreamId} could not be cancelled (internal state inconsistency \u2014 see MemoryManager.cancelTask warn).`
|
|
21995
22145
|
);
|
|
21996
22146
|
}
|
|
@@ -23748,7 +23898,7 @@ var LoadingIndicator = /* @__PURE__ */ __name(({
|
|
|
23748
23898
|
);
|
|
23749
23899
|
const showTokens = !isNarrow && outputTokens > 0;
|
|
23750
23900
|
const tokenArrow = isReceivingContent ? "\u2193" : "\u2191";
|
|
23751
|
-
const timeStr = elapsedTime < 60 ? `${elapsedTime}s` : formatDuration(elapsedTime * 1e3);
|
|
23901
|
+
const timeStr = elapsedTime < 60 ? `${elapsedTime.toFixed(1)}s` : formatDuration(elapsedTime * 1e3);
|
|
23752
23902
|
const tokenStr = showTokens ? ` \xB7 ${tokenArrow} ${formatTokenCount(outputTokens)} tokens` : "";
|
|
23753
23903
|
const tokenRateStr = showTokens && showResponseTokensPerSecond && isReceivingContent && elapsedTime > 0 ? ` \xB7 ${formatTokensPerSecond(outputTokensSinceTimerStart / elapsedTime)}` : "";
|
|
23754
23904
|
const cancelAndTimerContent = streamingState !== "waiting_for_confirmation" /* WaitingForConfirmation */ ? t("({{time}}{{tokens}} \xB7 esc to cancel)", {
|
|
@@ -23885,10 +24035,10 @@ __name(useInputHistory, "useInputHistory");
|
|
|
23885
24035
|
// packages/cli/src/ui/hooks/useShellHistory.ts
|
|
23886
24036
|
init_esbuild_shims();
|
|
23887
24037
|
var import_react81 = __toESM(require_react(), 1);
|
|
23888
|
-
import * as
|
|
24038
|
+
import * as fs11 from "node:fs/promises";
|
|
23889
24039
|
import * as path5 from "node:path";
|
|
23890
24040
|
var MAX_HISTORY_LENGTH = 100;
|
|
23891
|
-
var
|
|
24041
|
+
var debugLogger23 = createDebugLogger("SHELL_HISTORY");
|
|
23892
24042
|
async function getHistoryFilePath(projectRoot, configStorage) {
|
|
23893
24043
|
const storage = configStorage ?? new Storage(projectRoot);
|
|
23894
24044
|
return storage.getHistoryFilePath();
|
|
@@ -23896,13 +24046,13 @@ async function getHistoryFilePath(projectRoot, configStorage) {
|
|
|
23896
24046
|
__name(getHistoryFilePath, "getHistoryFilePath");
|
|
23897
24047
|
async function readHistoryFile(filePath) {
|
|
23898
24048
|
try {
|
|
23899
|
-
const text = await
|
|
24049
|
+
const text = await fs11.readFile(filePath, "utf-8");
|
|
23900
24050
|
const parsed = parseHistoryFile(text);
|
|
23901
24051
|
if (parsed) return parsed;
|
|
23902
24052
|
return parseLegacyHistoryFile(text);
|
|
23903
24053
|
} catch (err) {
|
|
23904
24054
|
if (isNodeError(err) && err.code === "ENOENT") return [];
|
|
23905
|
-
|
|
24055
|
+
debugLogger23.error("Error reading history:", err);
|
|
23906
24056
|
return [];
|
|
23907
24057
|
}
|
|
23908
24058
|
}
|
|
@@ -23938,10 +24088,10 @@ function parseLegacyHistoryFile(text) {
|
|
|
23938
24088
|
__name(parseLegacyHistoryFile, "parseLegacyHistoryFile");
|
|
23939
24089
|
async function writeHistoryFile(filePath, history) {
|
|
23940
24090
|
try {
|
|
23941
|
-
await
|
|
23942
|
-
await
|
|
24091
|
+
await fs11.mkdir(path5.dirname(filePath), { recursive: true });
|
|
24092
|
+
await fs11.writeFile(filePath, JSON.stringify(history));
|
|
23943
24093
|
} catch (error) {
|
|
23944
|
-
|
|
24094
|
+
debugLogger23.error("Error writing shell history:", error);
|
|
23945
24095
|
}
|
|
23946
24096
|
}
|
|
23947
24097
|
__name(writeHistoryFile, "writeHistoryFile");
|
|
@@ -24534,12 +24684,12 @@ __name(useAtCompletion, "useAtCompletion");
|
|
|
24534
24684
|
// packages/cli/src/ui/hooks/useSlashCompletion.ts
|
|
24535
24685
|
init_esbuild_shims();
|
|
24536
24686
|
var import_react85 = __toESM(require_react(), 1);
|
|
24537
|
-
var
|
|
24687
|
+
var debugLogger24 = createDebugLogger("SLASH_COMPLETION");
|
|
24538
24688
|
function logErrorSafely(error, context) {
|
|
24539
24689
|
if (error instanceof Error) {
|
|
24540
|
-
|
|
24690
|
+
debugLogger24.error(`[${context}]`, error);
|
|
24541
24691
|
} else {
|
|
24542
|
-
|
|
24692
|
+
debugLogger24.error(`[${context}] Non-error thrown:`, error);
|
|
24543
24693
|
}
|
|
24544
24694
|
}
|
|
24545
24695
|
__name(logErrorSafely, "logErrorSafely");
|
|
@@ -24714,7 +24864,7 @@ function useCommandSuggestions(parserResult, commandContext, getFzfForCommands,
|
|
|
24714
24864
|
const fetchAndSetSuggestions = /* @__PURE__ */ __name(async () => {
|
|
24715
24865
|
if (signal.aborted) return;
|
|
24716
24866
|
if (!leafCommand?.completion) {
|
|
24717
|
-
|
|
24867
|
+
debugLogger24.warn(
|
|
24718
24868
|
"Attempted argument completion without completion function"
|
|
24719
24869
|
);
|
|
24720
24870
|
return;
|
|
@@ -25669,7 +25819,7 @@ __name(buildSegmentsForVisualSlice, "buildSegmentsForVisualSlice");
|
|
|
25669
25819
|
|
|
25670
25820
|
// packages/cli/src/ui/components/InputPrompt.tsx
|
|
25671
25821
|
import * as path8 from "node:path";
|
|
25672
|
-
import * as
|
|
25822
|
+
import * as fs12 from "node:fs/promises";
|
|
25673
25823
|
|
|
25674
25824
|
// packages/cli/src/ui/contexts/ShellFocusContext.tsx
|
|
25675
25825
|
init_esbuild_shims();
|
|
@@ -26481,6 +26631,7 @@ function getApprovalModeIndicatorColor(approvalMode) {
|
|
|
26481
26631
|
case "yolo" /* YOLO */:
|
|
26482
26632
|
return theme.status.error;
|
|
26483
26633
|
case "default" /* DEFAULT */:
|
|
26634
|
+
return theme.text.secondary;
|
|
26484
26635
|
default:
|
|
26485
26636
|
return void 0;
|
|
26486
26637
|
}
|
|
@@ -26509,7 +26660,7 @@ var VOICE_ERROR_RETRY_DELAY_MS = 2e3;
|
|
|
26509
26660
|
var PREVIOUS_STOP_WAIT_TIMEOUT_MS = 5e3;
|
|
26510
26661
|
var HOLD_FIRST_PRESS_RELEASE_MS = 800;
|
|
26511
26662
|
var HOLD_REPEAT_RELEASE_MS = 250;
|
|
26512
|
-
var
|
|
26663
|
+
var debugLogger25 = createDebugLogger("VOICE_INPUT");
|
|
26513
26664
|
function formatError(error) {
|
|
26514
26665
|
return error instanceof Error ? error.message : String(error);
|
|
26515
26666
|
}
|
|
@@ -26544,7 +26695,7 @@ function isCancelKey(key) {
|
|
|
26544
26695
|
}
|
|
26545
26696
|
__name(isCancelKey, "isCancelKey");
|
|
26546
26697
|
function logRecorderStopError(error) {
|
|
26547
|
-
|
|
26698
|
+
debugLogger25.warn("[voice] recorder stop failed:", error);
|
|
26548
26699
|
}
|
|
26549
26700
|
__name(logRecorderStopError, "logRecorderStopError");
|
|
26550
26701
|
function useVoiceInput({
|
|
@@ -27123,7 +27274,7 @@ __name(createArecordRecorder, "createArecordRecorder");
|
|
|
27123
27274
|
// packages/cli/src/ui/voice/native-audio-recorder.ts
|
|
27124
27275
|
init_esbuild_shims();
|
|
27125
27276
|
var SILENCE_POLL_INTERVAL_MS = 200;
|
|
27126
|
-
var
|
|
27277
|
+
var debugLogger26 = createDebugLogger("VOICE_NATIVE_RECORDER");
|
|
27127
27278
|
var AUDIO_CAPTURE_PACKAGE = "@qwen-code/audio-capture";
|
|
27128
27279
|
var NativeAudioRecorder = class {
|
|
27129
27280
|
constructor(loadBackend) {
|
|
@@ -27188,7 +27339,7 @@ var NativeAudioRecorder = class {
|
|
|
27188
27339
|
}
|
|
27189
27340
|
} catch (error) {
|
|
27190
27341
|
this.clearSilencePoll();
|
|
27191
|
-
|
|
27342
|
+
debugLogger26.warn(
|
|
27192
27343
|
"[voice] silence detection failed, auto-stopping:",
|
|
27193
27344
|
error
|
|
27194
27345
|
);
|
|
@@ -27226,7 +27377,7 @@ function explainMissingNativePackage(error) {
|
|
|
27226
27377
|
if (!(error instanceof Error) || !isMissingNativePackageError(error)) {
|
|
27227
27378
|
return error;
|
|
27228
27379
|
}
|
|
27229
|
-
|
|
27380
|
+
debugLogger26.warn(
|
|
27230
27381
|
"[voice] native package missing:",
|
|
27231
27382
|
error.message,
|
|
27232
27383
|
error.code
|
|
@@ -27387,7 +27538,7 @@ function createSoxRecorder() {
|
|
|
27387
27538
|
__name(createSoxRecorder, "createSoxRecorder");
|
|
27388
27539
|
|
|
27389
27540
|
// packages/cli/src/ui/voice/voice-recorder.ts
|
|
27390
|
-
var
|
|
27541
|
+
var debugLogger27 = createDebugLogger("VOICE_RECORDER");
|
|
27391
27542
|
var FallbackVoiceRecorder = class {
|
|
27392
27543
|
constructor(factories) {
|
|
27393
27544
|
this.factories = factories;
|
|
@@ -27416,7 +27567,7 @@ var FallbackVoiceRecorder = class {
|
|
|
27416
27567
|
} catch (error) {
|
|
27417
27568
|
const message = error instanceof Error ? error.message : String(error);
|
|
27418
27569
|
errors.push(message);
|
|
27419
|
-
|
|
27570
|
+
debugLogger27.warn(
|
|
27420
27571
|
`[voice] recorder backend unavailable, trying fallback: ${message}`
|
|
27421
27572
|
);
|
|
27422
27573
|
}
|
|
@@ -27439,7 +27590,7 @@ var FallbackVoiceRecorder = class {
|
|
|
27439
27590
|
try {
|
|
27440
27591
|
await this.recorderFor(factory).warmup?.();
|
|
27441
27592
|
} catch (error) {
|
|
27442
|
-
|
|
27593
|
+
debugLogger27.warn("[voice] recorder warmup failed:", error);
|
|
27443
27594
|
}
|
|
27444
27595
|
}
|
|
27445
27596
|
}
|
|
@@ -27486,7 +27637,7 @@ init_esbuild_shims();
|
|
|
27486
27637
|
|
|
27487
27638
|
// packages/cli/src/ui/voice/voice-refine.ts
|
|
27488
27639
|
init_esbuild_shims();
|
|
27489
|
-
var
|
|
27640
|
+
var debugLogger28 = createDebugLogger("VOICE_REFINE");
|
|
27490
27641
|
var REFINE_TIMEOUT_MS = 2500;
|
|
27491
27642
|
var MAX_GROWTH_FACTOR = 2;
|
|
27492
27643
|
var REFINE_SYSTEM_INSTRUCTION = [
|
|
@@ -27523,22 +27674,22 @@ async function refineVoiceTranscript(config, raw, signal) {
|
|
|
27523
27674
|
});
|
|
27524
27675
|
const refined = text.trim();
|
|
27525
27676
|
if (!refined) {
|
|
27526
|
-
|
|
27677
|
+
debugLogger28.debug("[voice] refinement returned empty; using raw");
|
|
27527
27678
|
return raw;
|
|
27528
27679
|
}
|
|
27529
27680
|
const introducedCommand = refined.startsWith("/") || refined.startsWith("@");
|
|
27530
27681
|
const ballooned = refined.length > raw.length * MAX_GROWTH_FACTOR;
|
|
27531
27682
|
if (introducedCommand || ballooned) {
|
|
27532
|
-
|
|
27683
|
+
debugLogger28.warn("[voice] refinement looks unsafe; using raw", {
|
|
27533
27684
|
raw,
|
|
27534
27685
|
refined
|
|
27535
27686
|
});
|
|
27536
27687
|
return raw;
|
|
27537
27688
|
}
|
|
27538
|
-
|
|
27689
|
+
debugLogger28.debug("[voice] refined transcript", { raw, refined });
|
|
27539
27690
|
return refined;
|
|
27540
27691
|
} catch (error) {
|
|
27541
|
-
|
|
27692
|
+
debugLogger28.warn("[voice] refinement failed; using raw transcript:", error);
|
|
27542
27693
|
return raw;
|
|
27543
27694
|
} finally {
|
|
27544
27695
|
clearTimeout(timer);
|
|
@@ -27596,7 +27747,7 @@ function classifyPastedImagePaths(pasted) {
|
|
|
27596
27747
|
return { imagePaths, allImages };
|
|
27597
27748
|
}
|
|
27598
27749
|
__name(classifyPastedImagePaths, "classifyPastedImagePaths");
|
|
27599
|
-
var
|
|
27750
|
+
var debugLogger29 = createDebugLogger("INPUT_PROMPT");
|
|
27600
27751
|
var LARGE_PASTE_CHAR_THRESHOLD = 1e3;
|
|
27601
27752
|
var LARGE_PASTE_LINE_THRESHOLD = 10;
|
|
27602
27753
|
var InputPrompt = /* @__PURE__ */ __name(({
|
|
@@ -27994,7 +28145,7 @@ ${finalValue.trim()}`;
|
|
|
27994
28145
|
}
|
|
27995
28146
|
}
|
|
27996
28147
|
} catch (error) {
|
|
27997
|
-
|
|
28148
|
+
debugLogger29.error("Error handling clipboard image:", error);
|
|
27998
28149
|
}
|
|
27999
28150
|
}, []);
|
|
28000
28151
|
const promotePastedImagePaths = (0, import_react96.useCallback)(
|
|
@@ -28005,14 +28156,14 @@ ${finalValue.trim()}`;
|
|
|
28005
28156
|
for (const imagePath of imagePaths) {
|
|
28006
28157
|
const sourcePath = path8.isAbsolute(imagePath) ? imagePath : path8.resolve(cwd3, imagePath);
|
|
28007
28158
|
try {
|
|
28008
|
-
const stats = await
|
|
28159
|
+
const stats = await fs12.stat(sourcePath);
|
|
28009
28160
|
if (!stats.isFile()) continue;
|
|
28010
|
-
await
|
|
28161
|
+
await fs12.mkdir(clipboardDir, { recursive: true });
|
|
28011
28162
|
const destPath = path8.join(
|
|
28012
28163
|
clipboardDir,
|
|
28013
28164
|
`clipboard-${Date.now()}-${attachments2.length}${path8.extname(sourcePath)}`
|
|
28014
28165
|
);
|
|
28015
|
-
await
|
|
28166
|
+
await fs12.copyFile(sourcePath, destPath);
|
|
28016
28167
|
attachments2.push({
|
|
28017
28168
|
id: `${Date.now()}-${attachments2.length}`,
|
|
28018
28169
|
path: destPath,
|
|
@@ -28989,6 +29140,9 @@ var AutoAcceptIndicator = /* @__PURE__ */ __name(({
|
|
|
28989
29140
|
subText = cycleText;
|
|
28990
29141
|
break;
|
|
28991
29142
|
case "default" /* DEFAULT */:
|
|
29143
|
+
textContent = `\u23F8 ${t("Ask permissions")}`;
|
|
29144
|
+
subText = cycleText;
|
|
29145
|
+
break;
|
|
28992
29146
|
default:
|
|
28993
29147
|
break;
|
|
28994
29148
|
}
|
|
@@ -29332,51 +29486,48 @@ function useStatusLine() {
|
|
|
29332
29486
|
);
|
|
29333
29487
|
const doUpdate = (0, import_react99.useCallback)(() => {
|
|
29334
29488
|
const preset = statusLinePresetRef.current;
|
|
29489
|
+
const cmd = statusLineCommandRef.current;
|
|
29490
|
+
if (!preset && !cmd) {
|
|
29491
|
+
clearPullRequestLookup();
|
|
29492
|
+
setOutput([]);
|
|
29493
|
+
return;
|
|
29494
|
+
}
|
|
29495
|
+
const ui = uiStateRef.current;
|
|
29496
|
+
const cfg = configRef.current;
|
|
29497
|
+
const stats = ui.sessionStats;
|
|
29498
|
+
const m = stats.metrics;
|
|
29499
|
+
const contentGeneratorConfig = cfg.getContentGeneratorConfig();
|
|
29500
|
+
const contextWindowSize = contentGeneratorConfig?.contextWindowSize || 0;
|
|
29501
|
+
const modelDisplayName = ui.currentModel ? cfg.getModelsConfig().getModelDisplayName(ui.currentModel) : cfg.getModelDisplayName();
|
|
29502
|
+
const { totalInputTokens, totalOutputTokens } = aggregateModelTokens(m);
|
|
29335
29503
|
if (preset) {
|
|
29336
29504
|
if (activeChildRef.current) {
|
|
29337
29505
|
activeChildRef.current.kill();
|
|
29338
29506
|
activeChildRef.current = void 0;
|
|
29339
29507
|
generationRef.current++;
|
|
29340
29508
|
}
|
|
29341
|
-
const
|
|
29342
|
-
|
|
29343
|
-
const stats2 = ui2.sessionStats;
|
|
29344
|
-
const m2 = stats2.metrics;
|
|
29345
|
-
const currentDir = cfg2.getTargetDir();
|
|
29346
|
-
ensurePullRequestNumber(preset, currentDir, ui2.branchName);
|
|
29347
|
-
const { totalInputTokens: totalInputTokens2, totalOutputTokens: totalOutputTokens2 } = aggregateModelTokens(m2);
|
|
29348
|
-
const contentGeneratorConfig = cfg2.getContentGeneratorConfig();
|
|
29349
|
-
const contextWindowSize2 = contentGeneratorConfig?.contextWindowSize || 0;
|
|
29509
|
+
const currentDir = cfg.getTargetDir();
|
|
29510
|
+
ensurePullRequestNumber(preset, currentDir, ui.branchName);
|
|
29350
29511
|
const data = buildStatusLinePresetData({
|
|
29351
|
-
sessionId:
|
|
29352
|
-
version:
|
|
29353
|
-
modelDisplayName
|
|
29512
|
+
sessionId: stats.sessionId,
|
|
29513
|
+
version: cfg.getCliVersion(),
|
|
29514
|
+
modelDisplayName,
|
|
29354
29515
|
reasoning: contentGeneratorConfig?.reasoning,
|
|
29355
29516
|
currentDir,
|
|
29356
|
-
branch:
|
|
29517
|
+
branch: ui.branchName,
|
|
29357
29518
|
pullRequestNumber: pullRequestNumberRef.current,
|
|
29358
|
-
contextWindowSize
|
|
29359
|
-
currentUsage:
|
|
29360
|
-
totalInputTokens
|
|
29361
|
-
totalOutputTokens
|
|
29362
|
-
totalLinesAdded:
|
|
29363
|
-
totalLinesRemoved:
|
|
29364
|
-
streamingState:
|
|
29519
|
+
contextWindowSize,
|
|
29520
|
+
currentUsage: stats.lastPromptTokenCount,
|
|
29521
|
+
totalInputTokens,
|
|
29522
|
+
totalOutputTokens,
|
|
29523
|
+
totalLinesAdded: m.files.totalLinesAdded,
|
|
29524
|
+
totalLinesRemoved: m.files.totalLinesRemoved,
|
|
29525
|
+
streamingState: ui.streamingState
|
|
29365
29526
|
});
|
|
29366
29527
|
setOutput(buildStatusLinePresetLines(preset, data));
|
|
29367
29528
|
return;
|
|
29368
29529
|
}
|
|
29369
29530
|
clearPullRequestLookup();
|
|
29370
|
-
const cmd = statusLineCommandRef.current;
|
|
29371
|
-
if (!cmd) {
|
|
29372
|
-
setOutput([]);
|
|
29373
|
-
return;
|
|
29374
|
-
}
|
|
29375
|
-
const ui = uiStateRef.current;
|
|
29376
|
-
const cfg = configRef.current;
|
|
29377
|
-
const stats = ui.sessionStats;
|
|
29378
|
-
const m = stats.metrics;
|
|
29379
|
-
const contextWindowSize = cfg.getContentGeneratorConfig()?.contextWindowSize || 0;
|
|
29380
29531
|
const usedPercentage = contextWindowSize > 0 ? Math.min(
|
|
29381
29532
|
100,
|
|
29382
29533
|
Math.max(
|
|
@@ -29386,12 +29537,11 @@ function useStatusLine() {
|
|
|
29386
29537
|
) / 10
|
|
29387
29538
|
)
|
|
29388
29539
|
) : 0;
|
|
29389
|
-
const { totalInputTokens, totalOutputTokens } = aggregateModelTokens(m);
|
|
29390
29540
|
const input = {
|
|
29391
29541
|
session_id: stats.sessionId,
|
|
29392
29542
|
version: cfg.getCliVersion() || "unknown",
|
|
29393
29543
|
model: {
|
|
29394
|
-
display_name:
|
|
29544
|
+
display_name: modelDisplayName
|
|
29395
29545
|
},
|
|
29396
29546
|
context_window: {
|
|
29397
29547
|
context_window_size: contextWindowSize,
|
|
@@ -29756,7 +29906,7 @@ var Footer = /* @__PURE__ */ __name(() => {
|
|
|
29756
29906
|
t("IDE connecting... context may be unavailable")
|
|
29757
29907
|
] }) : uiState.startupIdeConnectionStatus.state === "failed" ? /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(Text, { color: theme.status.warning, children: t("IDE connection unavailable: {{message}}", {
|
|
29758
29908
|
message: uiState.startupIdeConnectionStatus.message
|
|
29759
|
-
}) }) : showAutoAcceptIndicator !== void 0
|
|
29909
|
+
}) }) : showAutoAcceptIndicator !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(AutoAcceptIndicator, { approvalMode: showAutoAcceptIndicator }) : suppressHint ? null : /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(Text, { color: theme.text.secondary, children: t("? for shortcuts") });
|
|
29760
29910
|
const rightItems = [];
|
|
29761
29911
|
if (sandboxInfo) {
|
|
29762
29912
|
rightItems.push({
|
|
@@ -30973,7 +31123,7 @@ var AgentFooter = /* @__PURE__ */ __name(({
|
|
|
30973
31123
|
contextWindowSize,
|
|
30974
31124
|
terminalWidth
|
|
30975
31125
|
}) => {
|
|
30976
|
-
const showApproval = approvalMode !== void 0
|
|
31126
|
+
const showApproval = approvalMode !== void 0;
|
|
30977
31127
|
const showContext = promptTokenCount > 0 && contextWindowSize !== void 0;
|
|
30978
31128
|
if (!showApproval && !showContext) {
|
|
30979
31129
|
return null;
|
|
@@ -31446,7 +31596,7 @@ var DefaultAppLayout = /* @__PURE__ */ __name(() => {
|
|
|
31446
31596
|
}, "DefaultAppLayout");
|
|
31447
31597
|
|
|
31448
31598
|
// packages/cli/src/ui/App.tsx
|
|
31449
|
-
import
|
|
31599
|
+
import fs13 from "node:fs";
|
|
31450
31600
|
var import_jsx_runtime129 = __toESM(require_jsx_runtime(), 1);
|
|
31451
31601
|
var App = /* @__PURE__ */ __name(() => {
|
|
31452
31602
|
const uiState = useUIState();
|
|
@@ -31463,13 +31613,13 @@ var App = /* @__PURE__ */ __name(() => {
|
|
|
31463
31613
|
corruptedPath: settings.corruptedPath,
|
|
31464
31614
|
wasRecovered: settings.wasRecovered,
|
|
31465
31615
|
onExit: () => {
|
|
31466
|
-
if (settings.corruptedPath &&
|
|
31616
|
+
if (settings.corruptedPath && fs13.existsSync(settings.corruptedPath)) {
|
|
31467
31617
|
try {
|
|
31468
31618
|
const settingsPath = settings.corruptedPath.slice(
|
|
31469
31619
|
0,
|
|
31470
31620
|
-CORRUPTED_SUFFIX.length
|
|
31471
31621
|
);
|
|
31472
|
-
|
|
31622
|
+
fs13.copyFileSync(settings.corruptedPath, settingsPath);
|
|
31473
31623
|
} catch (e) {
|
|
31474
31624
|
writeStderrLine(
|
|
31475
31625
|
`Failed to restore corrupted file: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -31478,7 +31628,7 @@ var App = /* @__PURE__ */ __name(() => {
|
|
|
31478
31628
|
return;
|
|
31479
31629
|
}
|
|
31480
31630
|
try {
|
|
31481
|
-
|
|
31631
|
+
fs13.unlinkSync(settings.corruptedPath);
|
|
31482
31632
|
} catch (e) {
|
|
31483
31633
|
writeStderrLine(
|
|
31484
31634
|
`Settings restored, but could not remove ${settings.corruptedPath}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -31488,9 +31638,9 @@ var App = /* @__PURE__ */ __name(() => {
|
|
|
31488
31638
|
process.exit(1);
|
|
31489
31639
|
},
|
|
31490
31640
|
onContinue: () => {
|
|
31491
|
-
if (settings.corruptedPath &&
|
|
31641
|
+
if (settings.corruptedPath && fs13.existsSync(settings.corruptedPath)) {
|
|
31492
31642
|
try {
|
|
31493
|
-
|
|
31643
|
+
fs13.unlinkSync(settings.corruptedPath);
|
|
31494
31644
|
} catch (e) {
|
|
31495
31645
|
writeStderrLine(
|
|
31496
31646
|
`Could not remove ${settings.corruptedPath}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -31515,7 +31665,7 @@ var import_react114 = __toESM(require_react(), 1);
|
|
|
31515
31665
|
import process12 from "node:process";
|
|
31516
31666
|
import os4 from "node:os";
|
|
31517
31667
|
import v8 from "v8";
|
|
31518
|
-
var
|
|
31668
|
+
var debugLogger30 = createDebugLogger("MEMORY_MONITOR");
|
|
31519
31669
|
var MEMORY_WARNING_THRESHOLD = Math.min(
|
|
31520
31670
|
7 * 1024 * 1024 * 1024,
|
|
31521
31671
|
Math.floor(os4.totalmem() * 0.85)
|
|
@@ -31537,23 +31687,23 @@ var useMemoryMonitor = /* @__PURE__ */ __name(({
|
|
|
31537
31687
|
const rss = memUsage.rss / 1024 / 1024;
|
|
31538
31688
|
const external = memUsage.external / 1024 / 1024;
|
|
31539
31689
|
const arrayBuffers = memUsage.arrayBuffers / 1024 / 1024;
|
|
31540
|
-
if (
|
|
31541
|
-
|
|
31690
|
+
if (debugLogger30.isEnabled()) {
|
|
31691
|
+
debugLogger30.debug(
|
|
31542
31692
|
`[MEMORY_USAGE] heapUsed=${heapUsed.toFixed(1)}MB, heapTotal=${heapTotal.toFixed(1)}MB, rss=${rss.toFixed(1)}MB, external=${external.toFixed(1)}MB, arrayBuffers=${arrayBuffers.toFixed(1)}MB, heapUtilization=${(heapUsed / heapTotal * 100).toFixed(1)}%`
|
|
31543
31693
|
);
|
|
31544
31694
|
}
|
|
31545
31695
|
const now = Date.now();
|
|
31546
31696
|
if (compactOldItems && memUsage.heapUsed > MEMORY_UI_COMPACT_THRESHOLD() && now - lastCompactRef.current > UI_COMPACT_COOLDOWN_MS) {
|
|
31547
31697
|
lastCompactRef.current = now;
|
|
31548
|
-
if (
|
|
31549
|
-
|
|
31698
|
+
if (debugLogger30.isEnabled()) {
|
|
31699
|
+
debugLogger30.debug(
|
|
31550
31700
|
`[UI_COMPACT] heapUsed=${heapUsed.toFixed(1)}MB exceeds ${(MEMORY_UI_COMPACT_THRESHOLD() / 1024 / 1024).toFixed(0)}MB threshold, compacting UI history`
|
|
31551
31701
|
);
|
|
31552
31702
|
}
|
|
31553
31703
|
try {
|
|
31554
31704
|
compactOldItems();
|
|
31555
31705
|
} catch (err) {
|
|
31556
|
-
|
|
31706
|
+
debugLogger30.error(
|
|
31557
31707
|
`[UI_COMPACT] compactOldItems failed: ${err instanceof Error ? err.message : String(err)}`
|
|
31558
31708
|
);
|
|
31559
31709
|
}
|
|
@@ -31562,7 +31712,7 @@ var useMemoryMonitor = /* @__PURE__ */ __name(({
|
|
|
31562
31712
|
const warningIntervalId = setInterval(() => {
|
|
31563
31713
|
const usage = process12.memoryUsage();
|
|
31564
31714
|
if (usage.rss > MEMORY_WARNING_THRESHOLD) {
|
|
31565
|
-
|
|
31715
|
+
debugLogger30.warn(
|
|
31566
31716
|
`[MEMORY_WARNING] High memory usage detected: ${(usage.rss / (1024 * 1024 * 1024)).toFixed(2)} GB`
|
|
31567
31717
|
);
|
|
31568
31718
|
addItem(
|
|
@@ -31693,25 +31843,25 @@ var useThemeCommand = /* @__PURE__ */ __name((loadedSettings, setThemeError, add
|
|
|
31693
31843
|
// packages/cli/src/ui/hooks/useFeedbackDialog.ts
|
|
31694
31844
|
init_esbuild_shims();
|
|
31695
31845
|
var import_react117 = __toESM(require_react(), 1);
|
|
31696
|
-
import * as
|
|
31846
|
+
import * as fs14 from "node:fs";
|
|
31697
31847
|
var import_strip_json_comments = __toESM(require_strip_json_comments(), 1);
|
|
31698
31848
|
var FEEDBACK_SHOW_PROBABILITY = 0.25;
|
|
31699
31849
|
var MIN_TOOL_CALLS = 10;
|
|
31700
31850
|
var MIN_USER_MESSAGES = 5;
|
|
31701
31851
|
var FEEDBACK_COOLDOWN_HOURS = 24;
|
|
31702
|
-
var
|
|
31852
|
+
var debugLogger31 = createDebugLogger("FEEDBACK_DIALOG");
|
|
31703
31853
|
var lastMessageIsAIResponse = /* @__PURE__ */ __name((history) => history.length > 0 && history[history.length - 1].type === "gemini" /* GEMINI */, "lastMessageIsAIResponse");
|
|
31704
31854
|
var getFeedbackLastShownTimestampFromFile = /* @__PURE__ */ __name(() => {
|
|
31705
31855
|
try {
|
|
31706
31856
|
const userSettingsPath = Storage.getGlobalSettingsPath();
|
|
31707
|
-
if (
|
|
31708
|
-
const content =
|
|
31857
|
+
if (fs14.existsSync(userSettingsPath)) {
|
|
31858
|
+
const content = fs14.readFileSync(userSettingsPath, "utf-8");
|
|
31709
31859
|
const settings = JSON.parse((0, import_strip_json_comments.default)(content));
|
|
31710
31860
|
return settings?.ui?.feedbackLastShownTimestamp ?? 0;
|
|
31711
31861
|
}
|
|
31712
31862
|
} catch (error) {
|
|
31713
31863
|
if (isNodeError(error) && error.code !== "ENOENT") {
|
|
31714
|
-
|
|
31864
|
+
debugLogger31.warn(
|
|
31715
31865
|
"Failed to read feedbackLastShownTimestamp from settings file:",
|
|
31716
31866
|
error
|
|
31717
31867
|
);
|
|
@@ -32472,7 +32622,7 @@ __name(useDeleteCommand, "useDeleteCommand");
|
|
|
32472
32622
|
// packages/cli/src/ui/hooks/slashCommandProcessor.ts
|
|
32473
32623
|
init_esbuild_shims();
|
|
32474
32624
|
var import_react126 = __toESM(require_react(), 1);
|
|
32475
|
-
var
|
|
32625
|
+
var debugLogger32 = createDebugLogger("SLASH_COMMAND_PROCESSOR");
|
|
32476
32626
|
function hasUserPromptExpansionHooks(config) {
|
|
32477
32627
|
return !!config && !config.getDisableAllHooks?.() && (config.hasHooksForEvent?.("UserPromptExpansion") ?? false);
|
|
32478
32628
|
}
|
|
@@ -32497,11 +32647,19 @@ var SLASH_COMMANDS_SKIP_RECORDING = /* @__PURE__ */ new Set([
|
|
|
32497
32647
|
"btw",
|
|
32498
32648
|
"history"
|
|
32499
32649
|
]);
|
|
32650
|
+
var MAX_EXTENSION_CONTENT_REFRESH_PASSES = 5;
|
|
32500
32651
|
function getSkillCommandName(command) {
|
|
32501
32652
|
return command.skillDetail?.name ?? command.name;
|
|
32502
32653
|
}
|
|
32503
32654
|
__name(getSkillCommandName, "getSkillCommandName");
|
|
32504
|
-
var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history, addItem, clearItems, loadHistory, refreshStatic, toggleVimEnabled, isProcessing, setIsProcessing, isIdleRef, setGeminiMdFileCount, actions, extensionsUpdateState, isConfigInitialized, logger, updateItem, setSessionName) => {
|
|
32655
|
+
var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history, addItem, clearItems, loadHistory, refreshStatic, toggleVimEnabled, isProcessing, setIsProcessing, isIdleRef, setGeminiMdFileCount, actions, extensionsUpdateState, isConfigInitialized, logger, updateItem, setSessionName, extensionRefreshState) => {
|
|
32656
|
+
const fallbackExtensionRefreshStateRef = (0, import_react126.useRef)(
|
|
32657
|
+
null
|
|
32658
|
+
);
|
|
32659
|
+
if (!fallbackExtensionRefreshStateRef.current) {
|
|
32660
|
+
fallbackExtensionRefreshStateRef.current = new ExtensionRefreshState();
|
|
32661
|
+
}
|
|
32662
|
+
const activeExtensionRefreshState = extensionRefreshState ?? fallbackExtensionRefreshStateRef.current;
|
|
32505
32663
|
const historyRef = (0, import_react126.useRef)(history);
|
|
32506
32664
|
(0, import_react126.useLayoutEffect)(() => {
|
|
32507
32665
|
historyRef.current = history;
|
|
@@ -32511,6 +32669,16 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
32511
32669
|
const [recentCommands, setRecentCommands] = (0, import_react126.useState)(/* @__PURE__ */ new Map());
|
|
32512
32670
|
const [reloadTrigger, setReloadTrigger] = (0, import_react126.useState)(0);
|
|
32513
32671
|
const commandReloadResolversRef = (0, import_react126.useRef)([]);
|
|
32672
|
+
const extensionContentRefreshTimerRef = (0, import_react126.useRef)(null);
|
|
32673
|
+
const extensionContentRefreshRunningRef = (0, import_react126.useRef)(false);
|
|
32674
|
+
const extensionContentRefreshPendingRef = (0, import_react126.useRef)(false);
|
|
32675
|
+
const mountedRef = (0, import_react126.useRef)(true);
|
|
32676
|
+
(0, import_react126.useEffect)(() => {
|
|
32677
|
+
mountedRef.current = true;
|
|
32678
|
+
return () => {
|
|
32679
|
+
mountedRef.current = false;
|
|
32680
|
+
};
|
|
32681
|
+
}, []);
|
|
32514
32682
|
const resolveCommandReloads = (0, import_react126.useCallback)((completedTrigger) => {
|
|
32515
32683
|
if (commandReloadResolversRef.current.length === 0) {
|
|
32516
32684
|
return;
|
|
@@ -32540,6 +32708,77 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
32540
32708
|
});
|
|
32541
32709
|
});
|
|
32542
32710
|
}, [config]);
|
|
32711
|
+
const clearPendingExtensionContentRefresh = (0, import_react126.useCallback)(() => {
|
|
32712
|
+
if (!extensionContentRefreshTimerRef.current) {
|
|
32713
|
+
return;
|
|
32714
|
+
}
|
|
32715
|
+
clearTimeout(extensionContentRefreshTimerRef.current);
|
|
32716
|
+
extensionContentRefreshTimerRef.current = null;
|
|
32717
|
+
}, []);
|
|
32718
|
+
const showExtensionContentRefreshError = (0, import_react126.useCallback)(
|
|
32719
|
+
(error) => {
|
|
32720
|
+
if (!mountedRef.current) {
|
|
32721
|
+
return;
|
|
32722
|
+
}
|
|
32723
|
+
addItem(
|
|
32724
|
+
{
|
|
32725
|
+
type: "error" /* ERROR */,
|
|
32726
|
+
text: error instanceof Error ? t(
|
|
32727
|
+
"Failed to refresh extension content: {{message}}. Run /reload-plugins to apply updates.",
|
|
32728
|
+
{ message: error.message }
|
|
32729
|
+
) : t(
|
|
32730
|
+
"Failed to refresh extension content. Run /reload-plugins to apply updates."
|
|
32731
|
+
)
|
|
32732
|
+
},
|
|
32733
|
+
Date.now()
|
|
32734
|
+
);
|
|
32735
|
+
},
|
|
32736
|
+
[addItem]
|
|
32737
|
+
);
|
|
32738
|
+
const runExtensionContentRefresh = (0, import_react126.useCallback)(async () => {
|
|
32739
|
+
if (!config) {
|
|
32740
|
+
return;
|
|
32741
|
+
}
|
|
32742
|
+
if (extensionContentRefreshRunningRef.current) {
|
|
32743
|
+
extensionContentRefreshPendingRef.current = true;
|
|
32744
|
+
return;
|
|
32745
|
+
}
|
|
32746
|
+
extensionContentRefreshRunningRef.current = true;
|
|
32747
|
+
let refreshPasses = 0;
|
|
32748
|
+
try {
|
|
32749
|
+
do {
|
|
32750
|
+
if (refreshPasses >= MAX_EXTENSION_CONTENT_REFRESH_PASSES) {
|
|
32751
|
+
extensionContentRefreshPendingRef.current = false;
|
|
32752
|
+
showExtensionContentRefreshError(
|
|
32753
|
+
new Error("too many extension content changes are still pending")
|
|
32754
|
+
);
|
|
32755
|
+
return;
|
|
32756
|
+
}
|
|
32757
|
+
refreshPasses++;
|
|
32758
|
+
extensionContentRefreshPendingRef.current = false;
|
|
32759
|
+
if (activeExtensionRefreshState.isReloadInProgress()) {
|
|
32760
|
+
return;
|
|
32761
|
+
}
|
|
32762
|
+
if (activeExtensionRefreshState.needsExtensionRefresh()) {
|
|
32763
|
+
return;
|
|
32764
|
+
}
|
|
32765
|
+
await refreshExtensionContentRuntime({
|
|
32766
|
+
config,
|
|
32767
|
+
reloadCommands
|
|
32768
|
+
});
|
|
32769
|
+
} while (extensionContentRefreshPendingRef.current);
|
|
32770
|
+
} catch (error) {
|
|
32771
|
+
extensionContentRefreshPendingRef.current = false;
|
|
32772
|
+
showExtensionContentRefreshError(error);
|
|
32773
|
+
} finally {
|
|
32774
|
+
extensionContentRefreshRunningRef.current = false;
|
|
32775
|
+
}
|
|
32776
|
+
}, [
|
|
32777
|
+
activeExtensionRefreshState,
|
|
32778
|
+
config,
|
|
32779
|
+
reloadCommands,
|
|
32780
|
+
showExtensionContentRefreshError
|
|
32781
|
+
]);
|
|
32543
32782
|
const [shellConfirmationRequest, setShellConfirmationRequest] = (0, import_react126.useState)(null);
|
|
32544
32783
|
const [confirmationRequest, setConfirmationRequest] = (0, import_react126.useState)(null);
|
|
32545
32784
|
const [sessionShellAllowlist, setSessionShellAllowlist] = (0, import_react126.useState)(
|
|
@@ -32652,7 +32891,8 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
32652
32891
|
services: {
|
|
32653
32892
|
config,
|
|
32654
32893
|
settings,
|
|
32655
|
-
logger
|
|
32894
|
+
logger,
|
|
32895
|
+
extensionRefreshState: activeExtensionRefreshState
|
|
32656
32896
|
},
|
|
32657
32897
|
ui: {
|
|
32658
32898
|
get history() {
|
|
@@ -32714,7 +32954,8 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
32714
32954
|
reloadCommands,
|
|
32715
32955
|
setSessionName,
|
|
32716
32956
|
extensionsUpdateState,
|
|
32717
|
-
isIdleRef
|
|
32957
|
+
isIdleRef,
|
|
32958
|
+
activeExtensionRefreshState
|
|
32718
32959
|
]
|
|
32719
32960
|
);
|
|
32720
32961
|
(0, import_react126.useEffect)(() => {
|
|
@@ -32775,6 +33016,79 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
32775
33016
|
reloadCommands();
|
|
32776
33017
|
});
|
|
32777
33018
|
}, [config, isConfigInitialized, reloadCommands]);
|
|
33019
|
+
(0, import_react126.useEffect)(() => {
|
|
33020
|
+
const listener = /* @__PURE__ */ __name((reason) => {
|
|
33021
|
+
clearPendingExtensionContentRefresh();
|
|
33022
|
+
addItem(
|
|
33023
|
+
{
|
|
33024
|
+
type: "info" /* INFO */,
|
|
33025
|
+
text: reason === EXTENSION_RELOAD_FAILED_REASON ? t(
|
|
33026
|
+
"Extension reload did not complete. Run /reload-plugins to try again."
|
|
33027
|
+
) : t(
|
|
33028
|
+
"Extensions changed on disk. Run /reload-plugins to apply updates."
|
|
33029
|
+
)
|
|
33030
|
+
},
|
|
33031
|
+
Date.now()
|
|
33032
|
+
);
|
|
33033
|
+
}, "listener");
|
|
33034
|
+
activeExtensionRefreshState.on("extension-refresh-needed" /* ExtensionRefreshNeeded */, listener);
|
|
33035
|
+
return () => {
|
|
33036
|
+
activeExtensionRefreshState.off(
|
|
33037
|
+
"extension-refresh-needed" /* ExtensionRefreshNeeded */,
|
|
33038
|
+
listener
|
|
33039
|
+
);
|
|
33040
|
+
};
|
|
33041
|
+
}, [
|
|
33042
|
+
activeExtensionRefreshState,
|
|
33043
|
+
addItem,
|
|
33044
|
+
clearPendingExtensionContentRefresh
|
|
33045
|
+
]);
|
|
33046
|
+
(0, import_react126.useEffect)(() => {
|
|
33047
|
+
activeExtensionRefreshState.on(
|
|
33048
|
+
"extensions-reload-started" /* ExtensionsReloadStarted */,
|
|
33049
|
+
clearPendingExtensionContentRefresh
|
|
33050
|
+
);
|
|
33051
|
+
activeExtensionRefreshState.on(
|
|
33052
|
+
"extensions-reloaded" /* ExtensionsReloaded */,
|
|
33053
|
+
clearPendingExtensionContentRefresh
|
|
33054
|
+
);
|
|
33055
|
+
return () => {
|
|
33056
|
+
activeExtensionRefreshState.off(
|
|
33057
|
+
"extensions-reload-started" /* ExtensionsReloadStarted */,
|
|
33058
|
+
clearPendingExtensionContentRefresh
|
|
33059
|
+
);
|
|
33060
|
+
activeExtensionRefreshState.off(
|
|
33061
|
+
"extensions-reloaded" /* ExtensionsReloaded */,
|
|
33062
|
+
clearPendingExtensionContentRefresh
|
|
33063
|
+
);
|
|
33064
|
+
};
|
|
33065
|
+
}, [activeExtensionRefreshState, clearPendingExtensionContentRefresh]);
|
|
33066
|
+
(0, import_react126.useEffect)(() => {
|
|
33067
|
+
if (!config) {
|
|
33068
|
+
return;
|
|
33069
|
+
}
|
|
33070
|
+
const listener = /* @__PURE__ */ __name(() => {
|
|
33071
|
+
clearPendingExtensionContentRefresh();
|
|
33072
|
+
extensionContentRefreshTimerRef.current = setTimeout(() => {
|
|
33073
|
+
extensionContentRefreshTimerRef.current = null;
|
|
33074
|
+
void runExtensionContentRefresh();
|
|
33075
|
+
}, 250);
|
|
33076
|
+
}, "listener");
|
|
33077
|
+
activeExtensionRefreshState.on("extension-content-changed" /* ExtensionContentChanged */, listener);
|
|
33078
|
+
return () => {
|
|
33079
|
+
activeExtensionRefreshState.off(
|
|
33080
|
+
"extension-content-changed" /* ExtensionContentChanged */,
|
|
33081
|
+
listener
|
|
33082
|
+
);
|
|
33083
|
+
clearPendingExtensionContentRefresh();
|
|
33084
|
+
extensionContentRefreshPendingRef.current = false;
|
|
33085
|
+
};
|
|
33086
|
+
}, [
|
|
33087
|
+
clearPendingExtensionContentRefresh,
|
|
33088
|
+
config,
|
|
33089
|
+
activeExtensionRefreshState,
|
|
33090
|
+
runExtensionContentRefresh
|
|
33091
|
+
]);
|
|
32778
33092
|
(0, import_react126.useEffect)(() => {
|
|
32779
33093
|
const controller = new AbortController();
|
|
32780
33094
|
const load = /* @__PURE__ */ __name(async () => {
|
|
@@ -32854,7 +33168,7 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
32854
33168
|
}
|
|
32855
33169
|
setCommands(commandService.getCommandsForMode("interactive"));
|
|
32856
33170
|
} catch (error) {
|
|
32857
|
-
|
|
33171
|
+
debugLogger32.error("Failed to load slash commands:", error);
|
|
32858
33172
|
} finally {
|
|
32859
33173
|
if (!controller.signal.aborted) {
|
|
32860
33174
|
resolveCommandReloads(reloadTrigger);
|
|
@@ -33229,7 +33543,7 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
|
|
|
33229
33543
|
}
|
|
33230
33544
|
if (invocationItemId !== void 0) {
|
|
33231
33545
|
invocationSentToModel = true;
|
|
33232
|
-
|
|
33546
|
+
debugLogger32.debug(
|
|
33233
33547
|
`Marked slash command invocation as model-sent: /${resolvedCommandPath.join(
|
|
33234
33548
|
" "
|
|
33235
33549
|
)}`
|
|
@@ -33375,7 +33689,7 @@ ${commandToExecute.subCommands.map((sc) => ` - ${sc.name}: ${sc.description ||
|
|
|
33375
33689
|
});
|
|
33376
33690
|
}
|
|
33377
33691
|
} catch (recordError) {
|
|
33378
|
-
|
|
33692
|
+
debugLogger32.error(
|
|
33379
33693
|
"[slashCommand] Failed to record slash command:",
|
|
33380
33694
|
recordError
|
|
33381
33695
|
);
|
|
@@ -33459,7 +33773,7 @@ function useDoublePress(onDoublePress, onPending) {
|
|
|
33459
33773
|
__name(useDoublePress, "useDoublePress");
|
|
33460
33774
|
|
|
33461
33775
|
// packages/cli/src/ui/AppContainer.tsx
|
|
33462
|
-
import * as
|
|
33776
|
+
import * as fs17 from "node:fs";
|
|
33463
33777
|
import { basename as basename3 } from "node:path";
|
|
33464
33778
|
|
|
33465
33779
|
// packages/cli/src/utils/windowTitle.ts
|
|
@@ -33535,7 +33849,7 @@ var DIGIT_MULTIPLIER = 10;
|
|
|
33535
33849
|
var DEFAULT_COUNT = 1;
|
|
33536
33850
|
var MAX_COUNT = 9999;
|
|
33537
33851
|
var DIGIT_1_TO_9 = /^[1-9]$/;
|
|
33538
|
-
var
|
|
33852
|
+
var debugLogger33 = createDebugLogger("VIM_MODE");
|
|
33539
33853
|
var CMD_TYPES = {
|
|
33540
33854
|
DELETE_WORD_FORWARD: "dw",
|
|
33541
33855
|
DELETE_WORD_BACKWARD: "db",
|
|
@@ -33678,7 +33992,7 @@ function readClipboard() {
|
|
|
33678
33992
|
}
|
|
33679
33993
|
return "";
|
|
33680
33994
|
} catch (e) {
|
|
33681
|
-
|
|
33995
|
+
debugLogger33.warn("readClipboard failed:", e);
|
|
33682
33996
|
return "";
|
|
33683
33997
|
}
|
|
33684
33998
|
}
|
|
@@ -33724,7 +34038,7 @@ function writeClipboard(text) {
|
|
|
33724
34038
|
const [bin, ...args] = linuxWriteCmd;
|
|
33725
34039
|
const child = execFile7(bin, args, { timeout: 500 }, (err) => {
|
|
33726
34040
|
if (err && !writeOsc52(text)) {
|
|
33727
|
-
|
|
34041
|
+
debugLogger33.warn(
|
|
33728
34042
|
"writeClipboard: cached tool and OSC 52 both failed"
|
|
33729
34043
|
);
|
|
33730
34044
|
}
|
|
@@ -33733,11 +34047,11 @@ function writeClipboard(text) {
|
|
|
33733
34047
|
child.unref();
|
|
33734
34048
|
} else {
|
|
33735
34049
|
if (!writeOsc52(text)) {
|
|
33736
|
-
|
|
34050
|
+
debugLogger33.warn("OSC 52 clipboard write failed - no TTY available");
|
|
33737
34051
|
}
|
|
33738
34052
|
}
|
|
33739
34053
|
} catch (e) {
|
|
33740
|
-
|
|
34054
|
+
debugLogger33.warn("writeClipboard failed:", e);
|
|
33741
34055
|
}
|
|
33742
34056
|
}
|
|
33743
34057
|
__name(writeClipboard, "writeClipboard");
|
|
@@ -34452,7 +34766,7 @@ function useVim(buffer, onSubmit) {
|
|
|
34452
34766
|
try {
|
|
34453
34767
|
normalizedKey = normalizeKey(key);
|
|
34454
34768
|
} catch (error) {
|
|
34455
|
-
|
|
34769
|
+
debugLogger33.warn("Malformed key input in vim mode:", key, error);
|
|
34456
34770
|
return false;
|
|
34457
34771
|
}
|
|
34458
34772
|
const s = stateRef.current;
|
|
@@ -35675,11 +35989,11 @@ var import_react137 = __toESM(require_react(), 1);
|
|
|
35675
35989
|
|
|
35676
35990
|
// packages/cli/src/services/command-migration-tool.ts
|
|
35677
35991
|
init_esbuild_shims();
|
|
35678
|
-
import { promises as
|
|
35992
|
+
import { promises as fs15 } from "node:fs";
|
|
35679
35993
|
import path9 from "node:path";
|
|
35680
35994
|
async function detectTomlCommands(commandDir) {
|
|
35681
35995
|
try {
|
|
35682
|
-
await
|
|
35996
|
+
await fs15.access(commandDir);
|
|
35683
35997
|
} catch {
|
|
35684
35998
|
return [];
|
|
35685
35999
|
}
|
|
@@ -35705,11 +36019,11 @@ async function migrateTomlCommands(options) {
|
|
|
35705
36019
|
for (const relativeFile of tomlFiles) {
|
|
35706
36020
|
const tomlPath = path9.join(commandDir, relativeFile);
|
|
35707
36021
|
try {
|
|
35708
|
-
const tomlContent = await
|
|
36022
|
+
const tomlContent = await fs15.readFile(tomlPath, "utf-8");
|
|
35709
36023
|
const markdownContent = convertTomlToMarkdown(tomlContent);
|
|
35710
36024
|
const markdownPath = tomlPath.replace(/\.toml$/, ".md");
|
|
35711
36025
|
try {
|
|
35712
|
-
await
|
|
36026
|
+
await fs15.access(markdownPath);
|
|
35713
36027
|
throw new Error(
|
|
35714
36028
|
t("Markdown file already exists: {{filename}}", {
|
|
35715
36029
|
filename: path9.basename(markdownPath)
|
|
@@ -35720,12 +36034,12 @@ async function migrateTomlCommands(options) {
|
|
|
35720
36034
|
throw error;
|
|
35721
36035
|
}
|
|
35722
36036
|
}
|
|
35723
|
-
await
|
|
36037
|
+
await fs15.writeFile(markdownPath, markdownContent, "utf-8");
|
|
35724
36038
|
if (createBackup) {
|
|
35725
36039
|
const backupPath = `${tomlPath}.backup`;
|
|
35726
|
-
await
|
|
36040
|
+
await fs15.rename(tomlPath, backupPath);
|
|
35727
36041
|
} else if (deleteOriginal) {
|
|
35728
|
-
await
|
|
36042
|
+
await fs15.unlink(tomlPath);
|
|
35729
36043
|
}
|
|
35730
36044
|
result.convertedFiles.push(relativeFile);
|
|
35731
36045
|
} catch (error) {
|
|
@@ -35776,7 +36090,7 @@ __name(useCommandMigration, "useCommandMigration");
|
|
|
35776
36090
|
|
|
35777
36091
|
// packages/cli/src/services/notificationService.ts
|
|
35778
36092
|
init_esbuild_shims();
|
|
35779
|
-
var
|
|
36093
|
+
var debugLogger34 = createDebugLogger("NOTIFICATION_SERVICE");
|
|
35780
36094
|
var DEFAULT_TITLE = "Qwen Code";
|
|
35781
36095
|
function sendNotification(opts, terminal, enabled) {
|
|
35782
36096
|
if (!enabled) {
|
|
@@ -35804,7 +36118,7 @@ function sendNotification(opts, terminal, enabled) {
|
|
|
35804
36118
|
return "terminal_bell";
|
|
35805
36119
|
}
|
|
35806
36120
|
} catch (error) {
|
|
35807
|
-
|
|
36121
|
+
debugLogger34.warn("Failed to send notification:", error);
|
|
35808
36122
|
return "error";
|
|
35809
36123
|
}
|
|
35810
36124
|
}
|
|
@@ -35907,7 +36221,7 @@ __name(useGitBranchName, "useGitBranchName");
|
|
|
35907
36221
|
// packages/cli/src/ui/hooks/useWorktreeSession.ts
|
|
35908
36222
|
init_esbuild_shims();
|
|
35909
36223
|
var import_react140 = __toESM(require_react(), 1);
|
|
35910
|
-
import
|
|
36224
|
+
import fs16 from "node:fs";
|
|
35911
36225
|
import fsPromises from "node:fs/promises";
|
|
35912
36226
|
import path10 from "node:path";
|
|
35913
36227
|
function useWorktreeSession(config) {
|
|
@@ -35932,7 +36246,7 @@ function useWorktreeSession(config) {
|
|
|
35932
36246
|
try {
|
|
35933
36247
|
await fsPromises.mkdir(dirPath, { recursive: true });
|
|
35934
36248
|
if (cancelled) return;
|
|
35935
|
-
watcher =
|
|
36249
|
+
watcher = fs16.watch(dirPath, (_eventType, filename) => {
|
|
35936
36250
|
if (filename === null || filename.toString() === fileName) {
|
|
35937
36251
|
void safeLoad();
|
|
35938
36252
|
}
|
|
@@ -36945,7 +37259,7 @@ var import_jsx_runtime132 = __toESM(require_jsx_runtime(), 1);
|
|
|
36945
37259
|
var MCP_BATCH_FLUSH_MS = 16;
|
|
36946
37260
|
var STARTUP_PROFILE_FINALIZE_CAP_MS = 35e3;
|
|
36947
37261
|
var CTRL_EXIT_PROMPT_DURATION_MS = 1e3;
|
|
36948
|
-
var
|
|
37262
|
+
var debugLogger35 = createDebugLogger("APP_CONTAINER");
|
|
36949
37263
|
function isRenderModeToggleKey(key) {
|
|
36950
37264
|
return keyMatchers["toggleRenderMode" /* TOGGLE_RENDER_MODE */](key) || key.name === "m" && key.meta && !key.ctrl && !key.paste;
|
|
36951
37265
|
}
|
|
@@ -37039,10 +37353,18 @@ function mergeStartupWarnings(currentWarnings, nextWarnings) {
|
|
|
37039
37353
|
return [.../* @__PURE__ */ new Set([...currentWarnings, ...nextWarnings])];
|
|
37040
37354
|
}
|
|
37041
37355
|
__name(mergeStartupWarnings, "mergeStartupWarnings");
|
|
37356
|
+
function shouldAutoOpenSkillReview(args) {
|
|
37357
|
+
return args.pending !== null && args.pending.skills.length > 0 && args.streamingState === "idle" /* Idle */ && !args.isMemoryDialogOpen && args.autoSkillEnabled && !args.dismissedTaskIds.has(args.pending.taskId);
|
|
37358
|
+
}
|
|
37359
|
+
__name(shouldAutoOpenSkillReview, "shouldAutoOpenSkillReview");
|
|
37042
37360
|
var SHELL_WIDTH_FRACTION = 0.89;
|
|
37043
37361
|
var SHELL_HEIGHT_PADDING = 10;
|
|
37044
37362
|
var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
37045
37363
|
const { settings, config, initializationResult } = props;
|
|
37364
|
+
const extensionRefreshState = (0, import_react157.useMemo)(
|
|
37365
|
+
() => props.extensionRefreshState ?? new ExtensionRefreshState(),
|
|
37366
|
+
[props.extensionRefreshState]
|
|
37367
|
+
);
|
|
37046
37368
|
const historyManager = useHistory();
|
|
37047
37369
|
const historyRef = (0, import_react157.useRef)(historyManager.history);
|
|
37048
37370
|
historyRef.current = historyManager.history;
|
|
@@ -37183,7 +37505,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37183
37505
|
const staticExtraHeight = 3;
|
|
37184
37506
|
(0, import_react157.useEffect)(() => {
|
|
37185
37507
|
void loadLowlight().catch((err) => {
|
|
37186
|
-
|
|
37508
|
+
debugLogger35.warn(
|
|
37187
37509
|
`Failed to load lowlight chunk; code blocks will render as plain text: ${err instanceof Error ? err.message : String(err)}`
|
|
37188
37510
|
);
|
|
37189
37511
|
});
|
|
@@ -37268,9 +37590,9 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37268
37590
|
registerCleanup(async () => {
|
|
37269
37591
|
try {
|
|
37270
37592
|
await config.getHookSystem()?.fireSessionEndEvent("prompt_input_exit" /* PromptInputExit */);
|
|
37271
|
-
|
|
37593
|
+
debugLogger35.debug("SessionEnd event completed successfully!!!");
|
|
37272
37594
|
} catch (err) {
|
|
37273
|
-
|
|
37595
|
+
debugLogger35.error(`SessionEnd hook failed: ${err}`);
|
|
37274
37596
|
}
|
|
37275
37597
|
});
|
|
37276
37598
|
registerCleanup(async () => {
|
|
@@ -37296,7 +37618,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37296
37618
|
flushTimer = null;
|
|
37297
37619
|
}
|
|
37298
37620
|
return geminiClient2.setTools().catch((err) => {
|
|
37299
|
-
|
|
37621
|
+
debugLogger35.error(
|
|
37300
37622
|
`setTools() batch-flush failed: ${err instanceof Error ? err.message : String(err)}`
|
|
37301
37623
|
);
|
|
37302
37624
|
});
|
|
@@ -37314,7 +37636,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37314
37636
|
failureSurfaced = true;
|
|
37315
37637
|
const failedNames = typeof config.getFailedMcpServerNames === "function" ? config.getFailedMcpServerNames() : [];
|
|
37316
37638
|
if (failedNames.length > 0) {
|
|
37317
|
-
|
|
37639
|
+
debugLogger35.warn(
|
|
37318
37640
|
`MCP server(s) failed to start: ${failedNames.join(", ")}. Continuing with built-in tools and any servers that did connect.`
|
|
37319
37641
|
);
|
|
37320
37642
|
}
|
|
@@ -37363,7 +37685,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37363
37685
|
const staticAreaMaxItemHeight = Math.max(terminalHeight * 4, 100);
|
|
37364
37686
|
const isValidPath = (0, import_react157.useCallback)((filePath) => {
|
|
37365
37687
|
try {
|
|
37366
|
-
return
|
|
37688
|
+
return fs17.existsSync(filePath) && fs17.statSync(filePath).isFile();
|
|
37367
37689
|
} catch (_e) {
|
|
37368
37690
|
return false;
|
|
37369
37691
|
}
|
|
@@ -37629,7 +37951,8 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37629
37951
|
taskId: withPending.id,
|
|
37630
37952
|
skills: pendingSkills.map((p) => ({
|
|
37631
37953
|
name: p.name,
|
|
37632
|
-
description: p.description
|
|
37954
|
+
description: p.description,
|
|
37955
|
+
stagedManifestPath: p.stagedManifestPath
|
|
37633
37956
|
}))
|
|
37634
37957
|
});
|
|
37635
37958
|
}, "refresh");
|
|
@@ -37739,7 +38062,8 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37739
38062
|
isConfigInitialized,
|
|
37740
38063
|
logger,
|
|
37741
38064
|
historyManager.updateItem,
|
|
37742
|
-
setSessionName
|
|
38065
|
+
setSessionName,
|
|
38066
|
+
extensionRefreshState
|
|
37743
38067
|
);
|
|
37744
38068
|
const onDebugMessage = (0, import_react157.useCallback)(
|
|
37745
38069
|
(message) => {
|
|
@@ -37866,7 +38190,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37866
38190
|
},
|
|
37867
38191
|
Date.now()
|
|
37868
38192
|
);
|
|
37869
|
-
|
|
38193
|
+
debugLogger35.debug(
|
|
37870
38194
|
`[DEBUG] Refreshed memory content in config: ${memoryContent.substring(
|
|
37871
38195
|
0,
|
|
37872
38196
|
200
|
|
@@ -37881,7 +38205,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37881
38205
|
},
|
|
37882
38206
|
Date.now()
|
|
37883
38207
|
);
|
|
37884
|
-
|
|
38208
|
+
debugLogger35.error("Error refreshing memory:", error);
|
|
37885
38209
|
}
|
|
37886
38210
|
}, [config, historyManager, settings.merged]);
|
|
37887
38211
|
const cancelHandlerRef = (0, import_react157.useRef)(() => {
|
|
@@ -37934,10 +38258,16 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
37934
38258
|
}
|
|
37935
38259
|
}, [streamingState]);
|
|
37936
38260
|
(0, import_react157.useEffect)(() => {
|
|
37937
|
-
if (
|
|
38261
|
+
if (shouldAutoOpenSkillReview({
|
|
38262
|
+
pending: skillReviewPending,
|
|
38263
|
+
streamingState,
|
|
38264
|
+
isMemoryDialogOpen,
|
|
38265
|
+
autoSkillEnabled: config.getAutoSkillEnabled(),
|
|
38266
|
+
dismissedTaskIds: skillReviewDismissedTaskIdsRef.current
|
|
38267
|
+
})) {
|
|
37938
38268
|
setIsSkillReviewDialogOpen(true);
|
|
37939
38269
|
}
|
|
37940
|
-
}, [skillReviewPending, streamingState]);
|
|
38270
|
+
}, [skillReviewPending, streamingState, isMemoryDialogOpen, config]);
|
|
37941
38271
|
const tipsDisabled = !!(settings.merged.ui?.hideTips || config.getScreenReader());
|
|
37942
38272
|
const tipHistory = (0, import_react157.useMemo)(
|
|
37943
38273
|
() => tipsDisabled ? null : getTipHistory(),
|
|
@@ -38262,30 +38592,30 @@ ${buildWorkflowSteeringNotice()}
|
|
|
38262
38592
|
${currentText}` : popped);
|
|
38263
38593
|
}
|
|
38264
38594
|
if (!draftWasEmpty) {
|
|
38265
|
-
|
|
38595
|
+
debugLogger35.debug("auto-restore bail: buffer was non-empty");
|
|
38266
38596
|
return;
|
|
38267
38597
|
}
|
|
38268
38598
|
if (popped !== null) {
|
|
38269
|
-
|
|
38599
|
+
debugLogger35.debug(
|
|
38270
38600
|
"auto-restore bail: queue had items (drained to buffer)"
|
|
38271
38601
|
);
|
|
38272
38602
|
return;
|
|
38273
38603
|
}
|
|
38274
38604
|
if (pendingHistoryItems2.some((item) => !isSyntheticHistoryItem(item))) {
|
|
38275
|
-
|
|
38605
|
+
debugLogger35.debug(
|
|
38276
38606
|
"auto-restore bail: pending stream item has meaningful content"
|
|
38277
38607
|
);
|
|
38278
38608
|
return;
|
|
38279
38609
|
}
|
|
38280
38610
|
if (info?.turnProducedMeaningfulContent) {
|
|
38281
|
-
|
|
38611
|
+
debugLogger35.debug(
|
|
38282
38612
|
"auto-restore bail: turn produced meaningful content during stream/flush"
|
|
38283
38613
|
);
|
|
38284
38614
|
return;
|
|
38285
38615
|
}
|
|
38286
38616
|
const cancelledTurnUserItem = info?.lastTurnUserItem;
|
|
38287
38617
|
if (cancelledTurnUserItem == null) {
|
|
38288
|
-
|
|
38618
|
+
debugLogger35.debug(
|
|
38289
38619
|
"auto-restore bail: cancelled turn did not add a user history item"
|
|
38290
38620
|
);
|
|
38291
38621
|
return;
|
|
@@ -38293,29 +38623,29 @@ ${currentText}` : popped);
|
|
|
38293
38623
|
const history = historyRef.current;
|
|
38294
38624
|
const lastUserIdx = findLastUserItemIndex(history);
|
|
38295
38625
|
if (lastUserIdx === -1) {
|
|
38296
|
-
|
|
38626
|
+
debugLogger35.debug("auto-restore bail: no user item in history");
|
|
38297
38627
|
return;
|
|
38298
38628
|
}
|
|
38299
38629
|
if (!itemsAfterAreOnlySynthetic(history, lastUserIdx)) {
|
|
38300
|
-
|
|
38630
|
+
debugLogger35.debug(
|
|
38301
38631
|
"auto-restore bail: meaningful content committed after last user item"
|
|
38302
38632
|
);
|
|
38303
38633
|
return;
|
|
38304
38634
|
}
|
|
38305
38635
|
const lastUserItem = history[lastUserIdx];
|
|
38306
38636
|
if (lastUserItem.type !== "user") {
|
|
38307
|
-
|
|
38637
|
+
debugLogger35.debug(
|
|
38308
38638
|
"auto-restore bail: lastUserItem type narrowing failed (unexpected)"
|
|
38309
38639
|
);
|
|
38310
38640
|
return;
|
|
38311
38641
|
}
|
|
38312
38642
|
if (lastUserItem.id !== cancelledTurnUserItem.id || lastUserItem.text !== cancelledTurnUserItem.text) {
|
|
38313
|
-
|
|
38643
|
+
debugLogger35.debug(
|
|
38314
38644
|
"auto-restore bail: lastUserItem identity does not match cancelled-turn user item"
|
|
38315
38645
|
);
|
|
38316
38646
|
return;
|
|
38317
38647
|
}
|
|
38318
|
-
|
|
38648
|
+
debugLogger35.debug(
|
|
38319
38649
|
"auto-restore: rewinding cancelled turn and restoring prompt"
|
|
38320
38650
|
);
|
|
38321
38651
|
historyManager.truncateToItem(lastUserItem.id);
|
|
@@ -38323,7 +38653,7 @@ ${currentText}` : popped);
|
|
|
38323
38653
|
buffer.setText(lastUserItem.text);
|
|
38324
38654
|
geminiClient?.stripOrphanedUserEntriesFromHistory?.();
|
|
38325
38655
|
void logger?.removeLastUserMessage().catch((err) => {
|
|
38326
|
-
|
|
38656
|
+
debugLogger35.debug("Failed to undo cancelled prompt from log:", err);
|
|
38327
38657
|
});
|
|
38328
38658
|
},
|
|
38329
38659
|
[
|
|
@@ -39025,7 +39355,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
|
|
|
39025
39355
|
const handleGlobalKeypress = (0, import_react157.useCallback)(
|
|
39026
39356
|
(key) => {
|
|
39027
39357
|
if (settings.merged.general?.debugKeystrokeLogging) {
|
|
39028
|
-
|
|
39358
|
+
debugLogger35.debug("[DEBUG] Keystroke:", JSON.stringify(key));
|
|
39029
39359
|
}
|
|
39030
39360
|
if (thinkingViewerData) {
|
|
39031
39361
|
if (keyMatchers["quit" /* QUIT */](key) || keyMatchers["exit" /* EXIT */](key)) {
|
|
@@ -39157,7 +39487,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
|
|
|
39157
39487
|
);
|
|
39158
39488
|
if (promotableShells.length === 1) {
|
|
39159
39489
|
const executingShell = promotableShells[0];
|
|
39160
|
-
|
|
39490
|
+
debugLogger35.debug(
|
|
39161
39491
|
`Ctrl+B promote: matched executing shell tool call ${executingShell.request.callId}`
|
|
39162
39492
|
);
|
|
39163
39493
|
executingShell.promoteAbortController.abort({
|
|
@@ -39165,7 +39495,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
|
|
|
39165
39495
|
});
|
|
39166
39496
|
return;
|
|
39167
39497
|
}
|
|
39168
|
-
|
|
39498
|
+
debugLogger35.debug(
|
|
39169
39499
|
`Ctrl+B promote: expected exactly one executing shell tool call; falling through (streamingState=${streamingState}, pendingToolCalls=${pendingToolCallsRef.current.length}, promotableShells=${promotableShells.length})`
|
|
39170
39500
|
);
|
|
39171
39501
|
}
|
|
@@ -39977,7 +40307,7 @@ __name(installSynchronizedOutput, "installSynchronizedOutput");
|
|
|
39977
40307
|
|
|
39978
40308
|
// packages/cli/src/ui/startInteractiveUI.tsx
|
|
39979
40309
|
var import_jsx_runtime133 = __toESM(require_jsx_runtime(), 1);
|
|
39980
|
-
var
|
|
40310
|
+
var debugLogger36 = createDebugLogger("STARTUP");
|
|
39981
40311
|
async function startInteractiveUI(config, settings, startupWarnings, workspaceRoot = process.cwd(), initializationResult, options = {}) {
|
|
39982
40312
|
const version = await getCliVersion();
|
|
39983
40313
|
setWindowTitle(settings, basename4(workspaceRoot));
|
|
@@ -40014,7 +40344,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
|
|
|
40014
40344
|
);
|
|
40015
40345
|
}
|
|
40016
40346
|
} catch (err) {
|
|
40017
|
-
|
|
40347
|
+
debugLogger36.error("Failed to initialize dual output bridge:", err);
|
|
40018
40348
|
writeStderrLine(
|
|
40019
40349
|
`Warning: dual output disabled \u2014 ${err instanceof Error ? err.message : String(err)}`
|
|
40020
40350
|
);
|
|
@@ -40025,7 +40355,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
|
|
|
40025
40355
|
try {
|
|
40026
40356
|
remoteInputWatcher = new RemoteInputWatcher(inputFile);
|
|
40027
40357
|
} catch (err) {
|
|
40028
|
-
|
|
40358
|
+
debugLogger36.error("Failed to initialize remote input watcher:", err);
|
|
40029
40359
|
writeStderrLine(
|
|
40030
40360
|
`Warning: remote input disabled \u2014 ${err instanceof Error ? err.message : String(err)}`
|
|
40031
40361
|
);
|
|
@@ -40050,7 +40380,8 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
|
|
|
40050
40380
|
settings,
|
|
40051
40381
|
startupWarnings,
|
|
40052
40382
|
version,
|
|
40053
|
-
initializationResult
|
|
40383
|
+
initializationResult,
|
|
40384
|
+
extensionRefreshState: options.extensionRefreshState
|
|
40054
40385
|
}
|
|
40055
40386
|
) }) }) }) })
|
|
40056
40387
|
}
|