@qwen-code/qwen-code 0.19.3 → 0.19.4
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/loop/SKILL.md +22 -3
- package/bundled/loop/SKILL.test.ts +20 -0
- package/bundled/loop/autonomous-loop.test.ts +59 -0
- package/bundled/loop/autonomous-loop.ts +102 -0
- package/bundled/loop/loop-task-file.test.ts +1064 -0
- package/bundled/loop/loop-task-file.ts +404 -0
- package/bundled/loop/loop-tick-resolver.test.ts +906 -0
- package/bundled/loop/loop-tick-resolver.ts +416 -0
- package/bundled/qc-helper/SKILL.md +12 -5
- package/bundled/qc-helper/docs/configuration/auth.md +1 -1
- package/bundled/qc-helper/docs/configuration/settings.md +40 -26
- package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
- package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
- package/bundled/qc-helper/docs/features/code-review.md +17 -61
- package/bundled/qc-helper/docs/features/commands.md +6 -6
- package/bundled/qc-helper/docs/features/hooks.md +6 -1
- package/bundled/qc-helper/docs/features/mcp.md +3 -1
- package/bundled/qc-helper/docs/features/memory.md +1 -1
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
- package/bundled/qc-helper/docs/features/status-line.md +3 -3
- package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
- package/bundled/qc-helper/docs/qwen-serve.md +19 -0
- package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
- package/bundled/review/DESIGN.md +21 -26
- package/bundled/review/SKILL.md +45 -129
- package/chunks/MaxSizedBox-ERTNFI22.js +68 -0
- package/chunks/{StandaloneSessionPicker-Z52JTYST.js → StandaloneSessionPicker-Y5NGRLRY.js} +48 -42
- package/chunks/{acpAgent-7RZUOWOM.js → acpAgent-UMN6OYTR.js} +1319 -361
- package/chunks/{agent-4FG7WTHJ.js → agent-56DZU4ZU.js} +30 -25
- package/chunks/agent-headless-SR7N2IJG.js +61 -0
- package/chunks/{anthropicContentGenerator-PFITVL7Y.js → anthropicContentGenerator-5OZFO6WQ.js} +11 -8
- package/chunks/{artifact-tool-D2X7G3C3.js → artifact-tool-JVZMHA4B.js} +3 -3
- package/chunks/{askUserQuestion-UGETICJQ.js → askUserQuestion-CMJZ2F3D.js} +2 -2
- package/chunks/bridge-AUHNFOUS.js +72 -0
- package/chunks/{ca-IUFWESZL.js → ca-RYOETBUW.js} +9 -9
- package/chunks/channel-worker-supervisor-A74FV522.js +308 -0
- package/chunks/{chunk-T4T2FNV4.js → chunk-2X2JUE47.js} +2 -2
- package/chunks/{chunk-BX5YO7UW.js → chunk-4VZH35PN.js} +540 -370
- package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
- package/chunks/chunk-5P5XGNYH.js +93 -0
- package/chunks/{chunk-QWFNTRH4.js → chunk-6AQR7732.js} +1 -1
- package/chunks/{chunk-HZT4UCFB.js → chunk-6CIIP6OE.js} +4 -4
- package/chunks/{chunk-ADCIHOQZ.js → chunk-6TLY5W3B.js} +16 -8
- package/chunks/{chunk-BXSHL2SF.js → chunk-73H73ASU.js} +1 -1
- package/chunks/{chunk-3TV3HUWZ.js → chunk-75X2VLSH.js} +60 -30
- package/chunks/{chunk-6V4NZFUS.js → chunk-7KPI4LAI.js} +5 -5
- package/chunks/{chunk-PDE7CSDS.js → chunk-7VPC7D7O.js} +2 -2
- package/chunks/chunk-AHNXYU4O.js +24 -0
- package/chunks/{chunk-UX4SGCGN.js → chunk-AVQDCKNF.js} +96 -22
- package/chunks/{chunk-HYCC3XM3.js → chunk-B236XPGF.js} +1 -1
- package/chunks/{chunk-N4EJFBN5.js → chunk-B7KGXIPZ.js} +419 -262
- package/chunks/{chunk-YAINVQ3Q.js → chunk-BFG6OZN7.js} +17392 -16335
- package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
- package/chunks/{chunk-BTLJ2MF5.js → chunk-BNJLLAQ7.js} +3 -3
- package/chunks/{chunk-UYT3MWEB.js → chunk-BQNJBEUA.js} +16 -2
- package/chunks/{chunk-SKQZZVAV.js → chunk-BZHLWC6T.js} +2 -2
- package/chunks/{chunk-HPZTOP4I.js → chunk-C2IHHGBZ.js} +131 -21
- package/chunks/chunk-CG7SVARK.js +367 -0
- package/chunks/{chunk-CNLEDYE3.js → chunk-CS5XYDBO.js} +5 -5
- package/chunks/{chunk-O75BHFQW.js → chunk-CUGEBAKG.js} +2 -2
- package/chunks/{chunk-U3KSMM7G.js → chunk-D5KISTLW.js} +339 -383
- package/chunks/{chunk-STUWFKGD.js → chunk-DQ74W65K.js} +431 -535
- package/chunks/{chunk-VVLOGDB6.js → chunk-DX3TKXNT.js} +2 -2
- package/chunks/chunk-E5A7LHNN.js +51 -0
- package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
- package/chunks/chunk-EDAGQADF.js +21 -0
- package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
- package/chunks/{chunk-4QK3O43S.js → chunk-FNLXLI4I.js} +4 -4
- package/chunks/{chunk-I2LYBGNI.js → chunk-FYKX6XOT.js} +1 -1
- package/chunks/{chunk-QLDPRILK.js → chunk-G7OQ3RFJ.js} +3 -3
- package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
- package/chunks/{chunk-L7OKCI7T.js → chunk-GICCHL2Q.js} +15 -1
- package/chunks/{chunk-KMGMKW5Q.js → chunk-GLPV75ES.js} +9 -3
- package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
- package/chunks/chunk-HI55Z6PR.js +3523 -0
- package/chunks/{chunk-QNKBEJO2.js → chunk-HJDF3ZVU.js} +2776 -1289
- package/chunks/{chunk-JJXWTVSK.js → chunk-HRZB5CSC.js} +34 -1
- package/chunks/{chunk-I4H7PRWQ.js → chunk-HTWHAN44.js} +1 -1
- package/chunks/{chunk-EJYJYJZ2.js → chunk-IRJWHZWU.js} +3 -70
- package/chunks/{chunk-CKQA6AWF.js → chunk-J3F7X3LW.js} +1 -1
- package/chunks/{chunk-QI7GOGJR.js → chunk-KKQWC6WS.js} +1 -1
- package/chunks/{chunk-VBZ452JT.js → chunk-KVPFPC4J.js} +494 -114
- package/chunks/{chunk-NDOC6M5S.js → chunk-L7QPM2YD.js} +2 -2
- package/chunks/{chunk-SLNKLLEO.js → chunk-L7VH7HQA.js} +12 -8
- package/chunks/{chunk-BVSVIN45.js → chunk-LKWAVAB5.js} +3 -3
- package/chunks/{chunk-ZP6UKOPB.js → chunk-LWGLBVWA.js} +1 -1
- package/chunks/{chunk-SBBN4BWR.js → chunk-MEQWZGK5.js} +1 -1
- package/chunks/{chunk-FKAVULLM.js → chunk-MKHC4BYZ.js} +58 -10
- package/chunks/{chunk-UFLGERMB.js → chunk-MNDTD5E5.js} +178 -124
- package/chunks/{chunk-RD6YJJJ6.js → chunk-MOUXUCXQ.js} +1 -1
- package/chunks/{chunk-EDMZZFDU.js → chunk-MVZXZWGT.js} +905 -795
- package/chunks/chunk-MX2YXRER.js +44 -0
- package/chunks/{chunk-JVHEVCAU.js → chunk-ND25GXEU.js} +23 -6
- package/chunks/chunk-NIOPRZNN.js +27 -0
- package/chunks/{chunk-DDMOU62Q.js → chunk-NPQWQYU6.js} +1 -1
- package/chunks/{chunk-PR32FRT6.js → chunk-OAFUMTWW.js} +3 -3
- package/chunks/chunk-OJCECIJA.js +238 -0
- package/chunks/{chunk-GGBIN5K7.js → chunk-PIYV6COW.js} +1 -1
- package/chunks/{chunk-CF6BB3LT.js → chunk-PPFWEV7G.js} +10 -1
- package/chunks/{chunk-4LUZAKMK.js → chunk-Q7VHIRDD.js} +1 -1
- package/chunks/{chunk-ODLIHNOY.js → chunk-QAFQLTXG.js} +1 -1
- package/chunks/{chunk-Y6YMRS3U.js → chunk-QMIND2AS.js} +3 -3
- package/chunks/{chunk-XJYUPHRC.js → chunk-QOMAHFYI.js} +3 -3
- package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
- package/chunks/chunk-RM3PGSGL.js +66 -0
- package/chunks/chunk-RNBYOUGV.js +42 -0
- package/chunks/chunk-S5EQPDTM.js +91 -0
- package/chunks/chunk-SEZC2725.js +36 -0
- package/chunks/{chunk-FNJ7BDPH.js → chunk-SFN4TEHY.js} +10 -7
- package/chunks/{chunk-O2VBQ3Y2.js → chunk-SJBIFVD2.js} +2 -2
- package/chunks/chunk-SYCJMSIJ.js +82 -0
- package/chunks/{chunk-JE5FVRPC.js → chunk-T22H4V4R.js} +48 -23
- package/chunks/{chunk-3227DZO4.js → chunk-T42ACHFI.js} +1 -1
- package/chunks/{chunk-UO5GVXQE.js → chunk-TENOUWY2.js} +3 -3
- package/chunks/{chunk-JOLIREYR.js → chunk-TOAUDIS7.js} +1 -1
- package/chunks/{chunk-J7FA27RO.js → chunk-TTFNVEO5.js} +3 -3
- package/chunks/{chunk-S7AKE7HL.js → chunk-UANCYOOQ.js} +63 -9
- package/chunks/{chunk-BUUQ5HPX.js → chunk-UQFP2FEF.js} +1 -1
- package/chunks/{chunk-R5OP2ATH.js → chunk-UQYOMM6J.js} +11 -11
- package/chunks/{chunk-J33ZR6OJ.js → chunk-UT5JU5DJ.js} +16 -16
- package/chunks/{chunk-QE6KJYLT.js → chunk-VKGG724L.js} +122 -25
- package/chunks/{chunk-SMXULRAN.js → chunk-VXGPYF7U.js} +1 -1
- package/chunks/{chunk-MNF6S5PR.js → chunk-W2ZOAX7F.js} +4 -4
- package/chunks/{chunk-GT2FGICD.js → chunk-W6X4FGWX.js} +1 -1
- package/chunks/{chunk-SMYQZVZ3.js → chunk-XCUFHOAD.js} +1 -1
- package/chunks/{chunk-K5XU6E4T.js → chunk-XKSCTXPK.js} +2 -2
- package/chunks/{chunk-FXKVLFFY.js → chunk-YBDZ63KI.js} +3 -3
- package/chunks/{chunk-BKXBARJZ.js → chunk-YPCPZSZB.js} +1 -1
- package/chunks/chunk-YTFBURQD.js +313 -0
- package/chunks/{chunk-NL4C3H6C.js → chunk-YXK4GPYO.js} +1 -1
- package/chunks/{chunk-F3ZYSEY6.js → chunk-ZJP5T7IA.js} +3 -3
- package/chunks/{chunk-RYLJU2DY.js → chunk-ZN5T4BHI.js} +1 -1
- package/chunks/{chunk-RRFZXMYP.js → chunk-ZXCVPMIK.js} +553 -138
- package/chunks/{computer-use-JGB36FDW.js → computer-use-VWN5HH6A.js} +33 -28
- package/chunks/contextCommand-DFFG5KDJ.js +66 -0
- package/chunks/{cron-create-SKEY55RG.js → cron-create-CSSWJ67I.js} +4 -4
- package/chunks/{cron-delete-I3NAT32Z.js → cron-delete-E56CFQ7A.js} +4 -4
- package/chunks/{cron-list-6XRRL6TH.js → cron-list-BKSINY6Y.js} +4 -4
- package/chunks/daemon-5T6IHWJV.js +8430 -0
- package/chunks/daemon-status-provider-V5UY7O7J.js +70 -0
- package/chunks/{de-EOW5PVHF.js → de-HB5NJXGB.js} +9 -9
- package/chunks/{dist-NHEYYB2B.js → dist-2HDL5SHQ.js} +2 -2
- package/chunks/{dist-663NZ6MI.js → dist-B7SSDVWT.js} +116 -11
- package/chunks/{dist-PQPZ5Q4N.js → dist-BL3SL665.js} +20 -9
- package/chunks/{dist-J37VXPLD.js → dist-TAVAGZU6.js} +40 -15
- package/chunks/{dist-LB6OGPVM.js → dist-XBOVZ3R5.js} +26 -5
- package/chunks/{earlyInputCapture-44RISVVJ.js → earlyInputCapture-VVYU4FDO.js} +31 -26
- package/chunks/{edit-NN6GM5DT.js → edit-F35PTMBA.js} +35 -29
- package/chunks/{en-HPWEJBTR.js → en-FZREZFPO.js} +30 -10
- package/chunks/{enter-worktree-PB3O2C7D.js → enter-worktree-3DIW7EGJ.js} +30 -25
- package/chunks/{enterPlanMode-YQFNNSUA.js → enterPlanMode-QNXT77KP.js} +40 -25
- package/chunks/{errors-LS7XU5DZ.js → errors-M53YG76R.js} +32 -27
- package/chunks/{exit-worktree-E2FTNSBK.js → exit-worktree-BSDWNWHZ.js} +30 -25
- package/chunks/{exitPlanMode-GLYK2BUB.js → exitPlanMode-EL7AY327.js} +54 -33
- package/chunks/{fast-path-WQ6M7LI7.js → fast-path-DUCSMUFW.js} +30 -13
- package/chunks/{fast-path-settings-OAGU3X5H.js → fast-path-settings-UQLRFDQP.js} +2 -2
- package/chunks/{fr-BN5NKSAC.js → fr-XY3NQFCM.js} +9 -9
- package/chunks/{gemini-2YFLVA2M.js → gemini-F3IERB37.js} +80 -67
- package/chunks/{geminiContentGenerator-XV6SV6CD.js → geminiContentGenerator-6OULAKFQ.js} +4 -4
- package/chunks/{glob-2H6CDDMK.js → glob-ZMLFTD4T.js} +30 -25
- package/chunks/{grep-VXIUXM3C.js → grep-H5X66EI7.js} +30 -25
- package/chunks/initializer-LEOT2OLH.js +66 -0
- package/chunks/{ja-7DEUB2TS.js → ja-J7YAG7SA.js} +9 -9
- package/chunks/{keychain-token-storage-YLMDLKXT.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
- package/chunks/list-M3DKXML6.js +70 -0
- package/chunks/loadedSettingsAdapter-OKMQFGGG.js +65 -0
- package/chunks/{loop-wakeup-CITGGQHA.js → loop-wakeup-FPBAVVPR.js} +5 -5
- package/chunks/{ls-R5WP4BGZ.js → ls-UGWQXPTY.js} +4 -4
- package/chunks/{lsp-GSICJMMW.js → lsp-24WV7NXB.js} +2 -2
- package/chunks/{monitor-HKLRS2HQ.js → monitor-ARL5P45R.js} +32 -26
- package/chunks/nonInteractiveCli-NUVLF3YR.js +108 -0
- package/chunks/{notebook-edit-Y6SKSGTT.js → notebook-edit-ANTZ2DDY.js} +31 -26
- package/chunks/{openaiContentGenerator-J7G2FYJT.js → openaiContentGenerator-TFGMKGHN.js} +15 -13
- package/chunks/pidfile-AWTL4C63.js +72 -0
- package/chunks/{pt-TNZRNLQB.js → pt-6RTAA6SS.js} +9 -9
- package/chunks/{qwenContentGenerator-5XIEM5GV.js → qwenContentGenerator-6QWAYTWS.js} +32 -27
- package/chunks/{qwenOAuth2-AG3PFFLZ.js → qwenOAuth2-LWLA6MQG.js} +5 -4
- package/chunks/{read-file-J7D552ZJ.js → read-file-EJY73XQ3.js} +11 -10
- package/chunks/{read-mcp-resource-DQQW7H7T.js → read-mcp-resource-NCBTPP7X.js} +2 -2
- package/chunks/ripGrep-HC4SA6CQ.js +59 -0
- package/chunks/{ru-NIAUBKCN.js → ru-AUBGJ2C4.js} +9 -9
- package/chunks/{run-qwen-serve-SGEEVMXD.js → run-qwen-serve-AGLZ642J.js} +454 -94
- package/chunks/{scheduler-7CQI3S4Q.js → scheduler-TURO7NGY.js} +30 -25
- package/chunks/{send-message-EE4TWKVU.js → send-message-3S2NYS3O.js} +6 -4
- package/chunks/serve-5DAMOIDW.js +70 -0
- package/chunks/{server-4QMUWXPW.js → server-4AGEK2HC.js} +4098 -1173
- package/chunks/{session-NRO7UFOY.js → session-7ZOQUC4Y.js} +204 -64
- package/chunks/{settings-SGWRDQSC.js → settings-DR4V6L5Y.js} +34 -29
- package/chunks/{shell-62ANGIHL.js → shell-H5WFKUXH.js} +30 -25
- package/chunks/{skill-VWAQAWW6.js → skill-ANHU5ZCR.js} +13 -12
- package/chunks/spawnChannel-VN5LJV7Z.js +68 -0
- package/chunks/{src-KUV5J5Q2.js → src-OVZLTVVM.js} +114 -30
- package/chunks/{startInteractiveUI-6EYJN3JV.js → startInteractiveUI-OA22V32P.js} +15970 -15430
- package/chunks/{syntheticOutput-T5YHQ6S2.js → syntheticOutput-SV7GBHZ5.js} +3 -3
- package/chunks/{task-create-BLY7RHXX.js → task-create-W2H2UJCH.js} +8 -7
- package/chunks/{task-list-3QUYNVYR.js → task-list-THBOPV4G.js} +7 -6
- package/chunks/{task-stop-U4RATK2V.js → task-stop-33FVCNCJ.js} +2 -2
- package/chunks/{task-update-U54O7KJX.js → task-update-LVFQLXEI.js} +8 -7
- package/chunks/{team-create-LPOGCPM7.js → team-create-OYL5CAQO.js} +30 -25
- package/chunks/{team-delete-LKBYPASD.js → team-delete-NTUQ25UY.js} +7 -6
- package/chunks/theme-manager-XCMPF2SI.js +63 -0
- package/chunks/{todoWrite-OYXKTVYN.js → todoWrite-SEPO2RI3.js} +4 -4
- package/chunks/{tool-search-YPUFJ3ZQ.js → tool-search-YXW55X6Z.js} +36 -11
- package/chunks/{trustedFolders-5B24TMEA.js → trustedFolders-TEPGM5YL.js} +31 -26
- package/chunks/{validateNonInterActiveAuth-BTDTYOVT.js → validateNonInterActiveAuth-OQIS7WUE.js} +65 -55
- package/chunks/{web-fetch-EEB5LZYU.js → web-fetch-OE7LHURA.js} +5 -4
- package/chunks/{workflow-LAWIW5LI.js → workflow-RTUWORAP.js} +67 -39
- package/chunks/workspace-providers-status-DM2XANVB.js +67 -0
- package/chunks/workspace-service-VKBI2KZD.js +77 -0
- package/chunks/{write-file-PCV226DJ.js → write-file-WGALQ53L.js} +35 -30
- package/chunks/{zh-TW-TR3XYGE5.js → zh-TW-6GIKXEAN.js} +30 -10
- package/chunks/{zh-5EUYXASN.js → zh-V3B4TFWL.js} +30 -10
- package/cli.js +6 -6
- package/locales/ca.js +13 -13
- package/locales/de.js +13 -13
- package/locales/en.js +49 -15
- package/locales/fr.js +13 -14
- package/locales/ja.js +13 -14
- package/locales/pt.js +13 -13
- package/locales/ru.js +13 -13
- package/locales/zh-TW.js +47 -14
- package/locales/zh.js +47 -14
- 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 +15 -6
- package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
- package/postinstall.js +50 -0
- package/web-shell/assets/{arc-DA7r8Ueo.js → arc-Det5Ccum.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-ZDUxPtZ2.js → architectureDiagram-3BPJPVTR-DqNWVFpl.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-vrtOf1kJ.js → blockDiagram-GPEHLZMM-CYl7tYBi.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BHFjzIi4.js → c4Diagram-AAUBKEIU-DaAEi0NQ.js} +1 -1
- package/web-shell/assets/channel-Bm0bFauD.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-mdeQVz59.js → chunk-2J33WTMH-Df2CDEE2.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BkKMlwBX.js → chunk-4BX2VUAB-DNBFcyL2.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-B7bnXNfu.js → chunk-55IACEB6-BKjF-0HI.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DGz8Mm6i.js → chunk-727SXJPM-DYwAwfIM.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BQAydUNk.js → chunk-AQP2D5EJ-C6FswLqy.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-GHr2LN_p.js → chunk-FMBD7UC4-DRWAcZSY.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-7R91lnUx.js → chunk-ND2GUHAM-AoL16mNR.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-aTJD3lSQ.js → chunk-QZHKN3VN-a8PtLMck.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BTf8t1RL.js → cose-bilkent-S5V4N54A-C4Aeu5qf.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-_sgp3WuA.js → dagre-BM42HDAG-BOulamjo.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CROtRy1w.js → diagram-2AECGRRQ-D1wt2ykO.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BqGRzwSc.js → diagram-5GNKFQAL-BRseus-O.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMrcEtA7.js → diagram-KO2AKTUF-XSMkNzpZ.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BRydGNW5.js → diagram-LMA3HP47-21KNLqoi.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-D0ilgNjV.js → diagram-OG6HWLK6-DnUI8F5G.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-2lnQeJUM.js → erDiagram-TEJ5UH35-BVSOMuM2.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-C_ZMdQiC.js → flowDiagram-I6XJVG4X-fYtDPJsW.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dw9V_Ny0.js → ganttDiagram-6RSMTGT7-CmRXosW_.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-HDXI-F1B.js → gitGraphDiagram-PVQCEYII-DPrmySxO.js} +1 -1
- package/web-shell/assets/index-BpKnmyFV.js +717 -0
- package/web-shell/assets/index-fLrtxpOG.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CuB8Ebua.js → infoDiagram-5YYISTIA-x3VbEuCV.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D_tyhVwh.js → ishikawaDiagram-YF4QCWOH-SmitHRMC.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CgCwJQNU.js → journeyDiagram-JHISSGLW-BxvA551S.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-PZUtcbPx.js → kanban-definition-UN3LZRKU-DNHC16jY.js} +1 -1
- package/web-shell/assets/{linear-CZqRdJIU.js → linear-CQ6irBL9.js} +1 -1
- package/web-shell/assets/{mermaid.core-CPW_4UEF.js → mermaid.core-DtB6NO1e.js} +72 -72
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_Y75ID7.js → mindmap-definition-RKZ34NQL-QKMAgV2v.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-Q4dTyLeF.js → pieDiagram-4H26LBE5-bvb6dGn6.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-ckw329Ft.js → quadrantDiagram-W4KKPZXB-DLgdlG4D.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-DbVDm4It.js → requirementDiagram-4Y6WPE33-2M9YH4GF.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CHuZ_ecH.js → sankeyDiagram-5OEKKPKP-DzwfclTH.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DU2YSpq-.js → sequenceDiagram-3UESZ5HK-BvPmTuy2.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CA9PEBUo.js → stateDiagram-AJRCARHV-BjwUmrJF.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-Bhlo4WVc.js → timeline-definition-PNZ67QCA-CXzS6qqz.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-6xtPLsyl.js → vennDiagram-CIIHVFJN-yRSolF5B.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3eozmXPf.js → wardley-L42UT6IY-ClLJjHPG.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BOn6hKss.js → wardleyDiagram-YWT4CUSO-VIa6t2p2.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-BsP4-I_y.js → xychartDiagram-2RQKCTM6-CtmrkezW.js} +1 -1
- package/web-shell/index.html +18 -2
- package/chunks/MaxSizedBox-QNF3EIGU.js +0 -63
- package/chunks/agent-headless-RQ5BTX3G.js +0 -56
- package/chunks/bridge-JL2PMCIW.js +0 -66
- package/chunks/chunk-5GOVVXEV.js +0 -73
- package/chunks/chunk-BC3C4F3Q.js +0 -40
- package/chunks/chunk-BW4KCQFD.js +0 -1103
- package/chunks/chunk-RKIZXJMB.js +0 -13
- package/chunks/contextCommand-WYU6OQ2F.js +0 -61
- package/chunks/daemon-status-provider-HH2EC5FI.js +0 -65
- package/chunks/headlessSafetyWarnings-TBE35GJ4.js +0 -55
- package/chunks/initializer-2Y7SLOKV.js +0 -61
- package/chunks/list-ZAFHZ7OS.js +0 -65
- package/chunks/loadedSettingsAdapter-6KJXD6M3.js +0 -60
- package/chunks/nonInteractiveCli-5W4GIZQM.js +0 -96
- package/chunks/ripGrep-IEIFIWP4.js +0 -54
- package/chunks/serve-V6GVZR6U.js +0 -65
- package/chunks/spawnChannel-3VHW5EPY.js +0 -63
- package/chunks/theme-manager-LYLGAERF.js +0 -58
- package/chunks/workspace-providers-status-PIAFVYHA.js +0 -62
- package/chunks/workspace-service-YAIOD4HG.js +0 -71
- package/web-shell/assets/channel-iRo68q4Q.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +0 -1
- package/web-shell/assets/index-CHmzAWys.css +0 -5
- package/web-shell/assets/index-w6GTOHh1.js +0 -713
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +0 -1
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
require_undici
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-54YZOP7P.js";
|
|
6
6
|
import {
|
|
7
7
|
writeStderrLine
|
|
8
8
|
} from "./chunk-Y6Z2O3WR.js";
|
|
9
9
|
import {
|
|
10
10
|
createDebugLogger
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-AVQDCKNF.js";
|
|
12
12
|
import {
|
|
13
13
|
init_esbuild_shims
|
|
14
14
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -6,20 +6,20 @@ import {
|
|
|
6
6
|
parseAcpBaseModelId,
|
|
7
7
|
resolveCliGenerationConfig,
|
|
8
8
|
sanitizeProviderBaseUrl
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import {
|
|
11
|
-
loadSettings
|
|
12
|
-
} from "./chunk-FKAVULLM.js";
|
|
9
|
+
} from "./chunk-BQNJBEUA.js";
|
|
13
10
|
import {
|
|
14
11
|
STATUS_SCHEMA_VERSION
|
|
15
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GICCHL2Q.js";
|
|
13
|
+
import {
|
|
14
|
+
loadSettings
|
|
15
|
+
} from "./chunk-MKHC4BYZ.js";
|
|
16
16
|
import {
|
|
17
17
|
ModelsConfig,
|
|
18
18
|
resolveProviderProtocol
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-BFG6OZN7.js";
|
|
20
20
|
import {
|
|
21
21
|
tokenLimit
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-YTFBURQD.js";
|
|
23
23
|
import {
|
|
24
24
|
init_esbuild_shims
|
|
25
25
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -70,7 +70,7 @@ function buildWorkspaceProvidersStatus(workspaceCwd, acpChannelLive, options) {
|
|
|
70
70
|
settings.modelProviders,
|
|
71
71
|
settings.providerProtocol
|
|
72
72
|
);
|
|
73
|
-
for (const model of modelsConfig.getAllConfiguredModels()) {
|
|
73
|
+
for (const model of modelsConfig.getAllConfiguredModels().filter(isMainSelectableModel)) {
|
|
74
74
|
if (model.isRuntimeModel) continue;
|
|
75
75
|
const authType = String(model.authType);
|
|
76
76
|
let provider = providers.get(authType);
|
|
@@ -149,6 +149,10 @@ function buildWorkspaceProvidersStatus(workspaceCwd, acpChannelLive, options) {
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
__name(buildWorkspaceProvidersStatus, "buildWorkspaceProvidersStatus");
|
|
152
|
+
function isMainSelectableModel(model) {
|
|
153
|
+
return model.fastOnly !== true && model.voiceOnly !== true;
|
|
154
|
+
}
|
|
155
|
+
__name(isMainSelectableModel, "isMainSelectableModel");
|
|
152
156
|
function matchesCurrentModel(currentModelId, baseModelId, acpModelId) {
|
|
153
157
|
return currentModelId === baseModelId || currentModelId === acpModelId;
|
|
154
158
|
}
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
TEAMMATE_COLORS,
|
|
8
8
|
TEAMS_DIR,
|
|
9
9
|
TEAM_CONFIG_FILENAME
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-E5A7LHNN.js";
|
|
11
11
|
import {
|
|
12
12
|
atomicWriteJSON
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-T42ACHFI.js";
|
|
14
14
|
import {
|
|
15
15
|
Storage,
|
|
16
16
|
isNodeError
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-AVQDCKNF.js";
|
|
18
18
|
import {
|
|
19
19
|
init_esbuild_shims
|
|
20
20
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
getLanguageNameFromLocale,
|
|
7
7
|
getLanguageSettingsOptions,
|
|
8
8
|
t
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UQYOMM6J.js";
|
|
10
10
|
import {
|
|
11
11
|
DEFAULT_DARK_THEME_NAME,
|
|
12
12
|
DEFAULT_LIGHT_THEME_NAME
|
|
@@ -25,11 +25,11 @@ import {
|
|
|
25
25
|
getSystemDefaultsPath,
|
|
26
26
|
getSystemSettingsPath,
|
|
27
27
|
resolveEnvVarsInObject
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-PPFWEV7G.js";
|
|
29
29
|
import {
|
|
30
30
|
isWorkspaceTrusted,
|
|
31
31
|
updateSettingsFilePreservingFormat
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-ZJP5T7IA.js";
|
|
33
33
|
import {
|
|
34
34
|
require_strip_json_comments
|
|
35
35
|
} from "./chunk-QYUE6W3T.js";
|
|
@@ -40,24 +40,24 @@ import {
|
|
|
40
40
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
41
41
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
42
42
|
stripRuntimeSnapshotPrefix
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-BFG6OZN7.js";
|
|
44
44
|
import {
|
|
45
45
|
require_main
|
|
46
46
|
} from "./chunk-SKAZWEV5.js";
|
|
47
47
|
import {
|
|
48
48
|
DEFAULT_QWEN_CUSTOM_IGNORE_FILE_NAMES
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-TOAUDIS7.js";
|
|
50
50
|
import {
|
|
51
51
|
DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH,
|
|
52
52
|
SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-HJDF3ZVU.js";
|
|
54
54
|
import {
|
|
55
55
|
FatalConfigError,
|
|
56
56
|
QWEN_DIR,
|
|
57
57
|
Storage,
|
|
58
58
|
createDebugLogger,
|
|
59
59
|
getErrorMessage
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-AVQDCKNF.js";
|
|
61
61
|
import {
|
|
62
62
|
init_esbuild_shims
|
|
63
63
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -689,6 +689,15 @@ var SETTINGS_SCHEMA = {
|
|
|
689
689
|
default: false,
|
|
690
690
|
description: "Whether to collapse history by default when resuming a session.",
|
|
691
691
|
showInDialog: false
|
|
692
|
+
},
|
|
693
|
+
collapsePreviewCount: {
|
|
694
|
+
type: "number",
|
|
695
|
+
label: "Collapse Preview Count",
|
|
696
|
+
category: "UI",
|
|
697
|
+
requiresRestart: false,
|
|
698
|
+
default: 0,
|
|
699
|
+
description: "Number of most recent user turns to keep visible when collapsing history on resume. 0 collapses all restored history by default; -1 shows all restored history.",
|
|
700
|
+
showInDialog: false
|
|
692
701
|
}
|
|
693
702
|
}
|
|
694
703
|
},
|
|
@@ -848,7 +857,7 @@ var SETTINGS_SCHEMA = {
|
|
|
848
857
|
category: "UI",
|
|
849
858
|
requiresRestart: false,
|
|
850
859
|
default: false,
|
|
851
|
-
description: "Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions, after Ctrl+O, after Ctrl+E / Ctrl+F (expand), after window resize, or when alt-tabbing back. Scroll with Shift+\u2191/\u2193 (line), PgUp/PgDn (page), Ctrl+Home/End (top/bottom), or the mouse wheel. Does NOT use the host terminal scrollback while enabled; for native text selection, hold Shift (or Option on macOS) while dragging.",
|
|
860
|
+
description: "Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions, after Ctrl+O, after Ctrl+E / Ctrl+F (expand), after window resize, or when alt-tabbing back. Scroll with Shift+\u2191/\u2193 (line), PgUp/PgDn (page), Ctrl+Home/End (top/bottom), or the mouse wheel. Also enables mouse interactions: click an option in a menu/dialog to select it, hover to highlight it, and click in the prompt to position the cursor. Does NOT use the host terminal scrollback while enabled; for native text selection, hold Shift (or Option on macOS) while dragging.",
|
|
852
861
|
showInDialog: true
|
|
853
862
|
},
|
|
854
863
|
shellOutputMaxLines: {
|
|
@@ -1472,6 +1481,20 @@ var SETTINGS_SCHEMA = {
|
|
|
1472
1481
|
showInDialog: true
|
|
1473
1482
|
}
|
|
1474
1483
|
}
|
|
1484
|
+
},
|
|
1485
|
+
autoCompactThreshold: {
|
|
1486
|
+
type: "number",
|
|
1487
|
+
label: "Auto-Compact Threshold",
|
|
1488
|
+
category: "Context",
|
|
1489
|
+
requiresRestart: false,
|
|
1490
|
+
default: void 0,
|
|
1491
|
+
description: "Fraction of context window at which auto-compaction triggers (greater than 0, up to 1). Default is 0.7 (70%).",
|
|
1492
|
+
showInDialog: false,
|
|
1493
|
+
jsonSchemaOverride: {
|
|
1494
|
+
type: "number",
|
|
1495
|
+
minimum: 0.01,
|
|
1496
|
+
maximum: 1
|
|
1497
|
+
}
|
|
1475
1498
|
}
|
|
1476
1499
|
}
|
|
1477
1500
|
},
|
|
@@ -1750,6 +1773,15 @@ var SETTINGS_SCHEMA = {
|
|
|
1750
1773
|
description: "Environment / context lines injected into the classifier system prompt.",
|
|
1751
1774
|
showInDialog: false,
|
|
1752
1775
|
mergeStrategy: "union" /* UNION */
|
|
1776
|
+
},
|
|
1777
|
+
classifyAllShell: {
|
|
1778
|
+
type: "boolean",
|
|
1779
|
+
label: "Classify All Shell Commands",
|
|
1780
|
+
category: "Tools",
|
|
1781
|
+
requiresRestart: true,
|
|
1782
|
+
default: false,
|
|
1783
|
+
description: "Route ALL shell commands through the auto-mode classifier, including read-only commands that would otherwise be auto-approved. Provides defense-in-depth for production environments.",
|
|
1784
|
+
showInDialog: false
|
|
1753
1785
|
}
|
|
1754
1786
|
}
|
|
1755
1787
|
}
|
|
@@ -2085,7 +2117,7 @@ var SETTINGS_SCHEMA = {
|
|
|
2085
2117
|
// restart-required.
|
|
2086
2118
|
requiresRestart: false,
|
|
2087
2119
|
default: void 0,
|
|
2088
|
-
description:
|
|
2120
|
+
description: 'A list of MCP servers to allow. Supports glob patterns (e.g. "*puppeteer*").',
|
|
2089
2121
|
showInDialog: false,
|
|
2090
2122
|
mergeStrategy: "concat" /* CONCAT */
|
|
2091
2123
|
},
|
|
@@ -2098,9 +2130,20 @@ var SETTINGS_SCHEMA = {
|
|
|
2098
2130
|
// restart-required.
|
|
2099
2131
|
requiresRestart: false,
|
|
2100
2132
|
default: void 0,
|
|
2101
|
-
description:
|
|
2133
|
+
description: 'A list of MCP servers to exclude. Supports glob patterns (e.g. "*puppeteer*"). Takes precedence over mcp.allowed.',
|
|
2102
2134
|
showInDialog: false,
|
|
2103
2135
|
mergeStrategy: "concat" /* CONCAT */
|
|
2136
|
+
},
|
|
2137
|
+
toolIdleTimeoutMs: {
|
|
2138
|
+
type: "number",
|
|
2139
|
+
label: "MCP Tool Idle Timeout (ms)",
|
|
2140
|
+
category: "MCP",
|
|
2141
|
+
requiresRestart: false,
|
|
2142
|
+
default: 3e5,
|
|
2143
|
+
minimum: 1e4,
|
|
2144
|
+
maximum: 36e5,
|
|
2145
|
+
description: "Idle timeout in milliseconds for MCP tool calls. If the MCP server does not produce any response or progress update within this time, the call is aborted. Default: 300000 (5 minutes). Can be overridden via QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS environment variable.",
|
|
2146
|
+
showInDialog: false
|
|
2104
2147
|
}
|
|
2105
2148
|
}
|
|
2106
2149
|
},
|
|
@@ -2955,6 +2998,10 @@ function getEffectiveValue(key, settings, mergedSettings) {
|
|
|
2955
2998
|
return definition.default;
|
|
2956
2999
|
}
|
|
2957
3000
|
__name(getEffectiveValue, "getEffectiveValue");
|
|
3001
|
+
function getAllSettingKeys() {
|
|
3002
|
+
return Object.keys(getFlattenedSchema());
|
|
3003
|
+
}
|
|
3004
|
+
__name(getAllSettingKeys, "getAllSettingKeys");
|
|
2958
3005
|
var SETTINGS_DIALOG_ORDER = [
|
|
2959
3006
|
// Workflow Control - most impactful setting
|
|
2960
3007
|
"tools.approvalMode",
|
|
@@ -4859,6 +4906,7 @@ export {
|
|
|
4859
4906
|
getNestedValue,
|
|
4860
4907
|
getNestedProperty,
|
|
4861
4908
|
getEffectiveValue,
|
|
4909
|
+
getAllSettingKeys,
|
|
4862
4910
|
validateSettingValue,
|
|
4863
4911
|
getDialogSettingKeys,
|
|
4864
4912
|
settingExistsInScope,
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
|
-
Colors
|
|
5
|
-
|
|
4
|
+
Colors,
|
|
5
|
+
RowMouseController
|
|
6
|
+
} from "./chunk-CG7SVARK.js";
|
|
6
7
|
import {
|
|
7
8
|
theme
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VXGPYF7U.js";
|
|
9
10
|
import {
|
|
10
11
|
Box_default,
|
|
11
12
|
Text,
|
|
12
13
|
require_jsx_runtime
|
|
13
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2X2JUE47.js";
|
|
14
15
|
import {
|
|
15
16
|
require_react
|
|
16
17
|
} from "./chunk-KYMBIKIW.js";
|
|
17
18
|
import {
|
|
18
19
|
t
|
|
19
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-UQYOMM6J.js";
|
|
20
21
|
import {
|
|
21
22
|
readManyFiles,
|
|
22
23
|
shouldRunVisionBridge,
|
|
23
24
|
stripTerminalControlSequences
|
|
24
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-BFG6OZN7.js";
|
|
25
26
|
import {
|
|
26
27
|
emptyMcpResourceText,
|
|
27
28
|
formatMcpResourceContents,
|
|
@@ -33,7 +34,7 @@ import {
|
|
|
33
34
|
isNodeError,
|
|
34
35
|
isSubpath,
|
|
35
36
|
unescapePath
|
|
36
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-AVQDCKNF.js";
|
|
37
38
|
import {
|
|
38
39
|
init_esbuild_shims
|
|
39
40
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -44,7 +45,7 @@ import {
|
|
|
44
45
|
|
|
45
46
|
// packages/cli/src/ui/hooks/atCommandProcessor.ts
|
|
46
47
|
init_esbuild_shims();
|
|
47
|
-
import * as
|
|
48
|
+
import * as fs2 from "node:fs/promises";
|
|
48
49
|
import * as path from "node:path";
|
|
49
50
|
|
|
50
51
|
// packages/cli/src/ui/hooks/mcpResourceRef.ts
|
|
@@ -70,6 +71,7 @@ init_esbuild_shims();
|
|
|
70
71
|
|
|
71
72
|
// packages/cli/src/ui/components/SuggestionsDisplay.tsx
|
|
72
73
|
init_esbuild_shims();
|
|
74
|
+
var import_react2 = __toESM(require_react(), 1);
|
|
73
75
|
|
|
74
76
|
// packages/cli/src/ui/components/PrepareLabel.tsx
|
|
75
77
|
init_esbuild_shims();
|
|
@@ -158,8 +160,13 @@ function SuggestionsDisplay({
|
|
|
158
160
|
scrollOffset,
|
|
159
161
|
userInput,
|
|
160
162
|
mode,
|
|
161
|
-
expandedIndex
|
|
163
|
+
expandedIndex,
|
|
164
|
+
onHoverIndex,
|
|
165
|
+
onSelectIndex,
|
|
166
|
+
mouseEnabled
|
|
162
167
|
}) {
|
|
168
|
+
const containerRef = (0, import_react2.useRef)(null);
|
|
169
|
+
const itemRefs = (0, import_react2.useRef)([]);
|
|
163
170
|
if (isLoading) {
|
|
164
171
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Box_default, { width, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: "gray", children: t("Loading suggestions...") }) });
|
|
165
172
|
}
|
|
@@ -182,7 +189,17 @@ function SuggestionsDisplay({
|
|
|
182
189
|
Math.max(...describedLabelLengths),
|
|
183
190
|
Math.max(contentWidth - MIN_DESCRIPTION_WIDTH - 2, 1)
|
|
184
191
|
) : 0;
|
|
185
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Box_default, { flexDirection: "column", width, children: [
|
|
192
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Box_default, { flexDirection: "column", width, ref: containerRef, children: [
|
|
193
|
+
mouseEnabled && onHoverIndex && onSelectIndex && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
194
|
+
RowMouseController,
|
|
195
|
+
{
|
|
196
|
+
containerRef,
|
|
197
|
+
itemRefs,
|
|
198
|
+
scrollOffset: startIndex,
|
|
199
|
+
onHoverIndex,
|
|
200
|
+
onSelectIndex
|
|
201
|
+
}
|
|
202
|
+
),
|
|
186
203
|
scrollOffset > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: theme.text.primary, children: "\u25B2" }),
|
|
187
204
|
visibleSuggestions.map((suggestion, index) => {
|
|
188
205
|
const originalIndex = startIndex + index;
|
|
@@ -206,37 +223,47 @@ function SuggestionsDisplay({
|
|
|
206
223
|
isExpanded
|
|
207
224
|
}
|
|
208
225
|
);
|
|
209
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
{
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
226
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
227
|
+
Box_default,
|
|
228
|
+
{
|
|
229
|
+
flexDirection: "row",
|
|
230
|
+
ref: (node) => {
|
|
231
|
+
itemRefs.current[index] = node;
|
|
232
|
+
},
|
|
233
|
+
children: [
|
|
234
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Box_default, { width: ACTIVE_MARKER_WIDTH, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: textColor, children: isActive ? "> " : " " }) }),
|
|
235
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
236
|
+
Box_default,
|
|
237
|
+
{
|
|
238
|
+
...mode === "slash" || suggestion.description ? { width: labelColumnWidth, flexShrink: 0 } : { flexShrink: 1 },
|
|
239
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Box_default, { children: [
|
|
240
|
+
labelElement,
|
|
241
|
+
suggestion.argumentHint && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Text, { color: theme.text.secondary, children: [
|
|
242
|
+
" ",
|
|
243
|
+
suggestion.argumentHint
|
|
244
|
+
] }),
|
|
245
|
+
suggestion.sourceBadge && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Text, { color: textColor, children: [
|
|
246
|
+
" ",
|
|
247
|
+
suggestion.sourceBadge
|
|
248
|
+
] })
|
|
249
|
+
] })
|
|
250
|
+
}
|
|
251
|
+
),
|
|
252
|
+
suggestion.description && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
253
|
+
Box_default,
|
|
254
|
+
{
|
|
255
|
+
width: descriptionColumnWidth,
|
|
256
|
+
flexGrow: 1,
|
|
257
|
+
flexShrink: 1,
|
|
258
|
+
paddingLeft: 2,
|
|
259
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: textColor, wrap: "truncate-end", children: normalizeDescription(suggestion.description) })
|
|
260
|
+
}
|
|
261
|
+
),
|
|
262
|
+
isActive && isLong && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: Colors.Gray, children: isExpanded ? " \u2190 " : " \u2192 " }) })
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
`${suggestion.value}-${originalIndex}`
|
|
266
|
+
);
|
|
240
267
|
}),
|
|
241
268
|
endIndex < suggestions.length && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text, { color: "gray", children: "\u25BC" }),
|
|
242
269
|
suggestions.length > MAX_SUGGESTIONS_TO_SHOW && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Text, { color: "gray", children: [
|
|
@@ -250,8 +277,12 @@ function SuggestionsDisplay({
|
|
|
250
277
|
}
|
|
251
278
|
__name(SuggestionsDisplay, "SuggestionsDisplay");
|
|
252
279
|
|
|
253
|
-
// packages/cli/src/
|
|
280
|
+
// packages/cli/src/utils/extension-mention.ts
|
|
281
|
+
init_esbuild_shims();
|
|
282
|
+
import * as fs from "node:fs/promises";
|
|
254
283
|
var EXTENSION_REF_PREFIX = "ext:";
|
|
284
|
+
var EXTENSION_CONTEXT_BUDGET = 2e5;
|
|
285
|
+
var EXTENSION_CONTEXT_FILE_CAP = 5e4;
|
|
255
286
|
function parseExtensionRef(pathName) {
|
|
256
287
|
if (!pathName.startsWith(EXTENSION_REF_PREFIX)) return null;
|
|
257
288
|
const name = pathName.slice(EXTENSION_REF_PREFIX.length);
|
|
@@ -276,37 +307,12 @@ function sanitizeDisplayText(raw) {
|
|
|
276
307
|
return stripped.length > 0 ? stripped : null;
|
|
277
308
|
}
|
|
278
309
|
__name(sanitizeDisplayText, "sanitizeDisplayText");
|
|
279
|
-
function
|
|
280
|
-
|
|
281
|
-
if (config.isTrustedFolder?.() === false) return [];
|
|
282
|
-
const extensions = config.getActiveExtensions?.() ?? [];
|
|
283
|
-
if (extensions.length === 0) return [];
|
|
284
|
-
const query = pattern.toLowerCase();
|
|
285
|
-
return extensions.map((ext) => ({
|
|
286
|
-
ext,
|
|
287
|
-
safeLabel: sanitizeDisplayText(ext.displayName || ext.name) || ext.name
|
|
288
|
-
})).filter(({ safeLabel, ext }) => {
|
|
289
|
-
const label = safeLabel.toLowerCase();
|
|
290
|
-
const name = ext.name.toLowerCase();
|
|
291
|
-
return label.includes(query) || name.includes(query);
|
|
292
|
-
}).sort((a, b) => {
|
|
293
|
-
const aName = a.safeLabel.toLowerCase();
|
|
294
|
-
const bName = b.safeLabel.toLowerCase();
|
|
295
|
-
const aPrefix = aName.startsWith(query) ? 0 : 1;
|
|
296
|
-
const bPrefix = bName.startsWith(query) ? 0 : 1;
|
|
297
|
-
if (aPrefix !== bPrefix) return aPrefix - bPrefix;
|
|
298
|
-
return aName.localeCompare(bName);
|
|
299
|
-
}).slice(0, MAX_SUGGESTIONS_TO_SHOW).map(({ ext, safeLabel }) => ({
|
|
300
|
-
label: safeLabel,
|
|
301
|
-
value: buildExtensionRef(ext.name),
|
|
302
|
-
description: ext.config.description ? sanitizeDisplayText(ext.config.description) ?? void 0 : void 0,
|
|
303
|
-
sourceBadge: t("Extension"),
|
|
304
|
-
isDirectory: false
|
|
305
|
-
}));
|
|
310
|
+
function getExtensionDisplayName(extension) {
|
|
311
|
+
return sanitizeDisplayText(extension.displayName || extension.name) || extension.name;
|
|
306
312
|
}
|
|
307
|
-
__name(
|
|
313
|
+
__name(getExtensionDisplayName, "getExtensionDisplayName");
|
|
308
314
|
function buildExtensionContextText(extension) {
|
|
309
|
-
const displayName =
|
|
315
|
+
const displayName = getExtensionDisplayName(extension);
|
|
310
316
|
const lines = [];
|
|
311
317
|
lines.push(
|
|
312
318
|
`--- Extension: ${displayName} (untrusted third-party content) ---`
|
|
@@ -340,6 +346,94 @@ function buildExtensionContextText(extension) {
|
|
|
340
346
|
return lines.join("\n");
|
|
341
347
|
}
|
|
342
348
|
__name(buildExtensionContextText, "buildExtensionContextText");
|
|
349
|
+
async function buildExtensionMentionContext(extension, options) {
|
|
350
|
+
let contextText = buildExtensionContextText(extension);
|
|
351
|
+
let remainingBudget = options.remainingBudget;
|
|
352
|
+
if (extension.contextFiles.length === 0) {
|
|
353
|
+
return { text: contextText, remainingBudget };
|
|
354
|
+
}
|
|
355
|
+
const fileReads = await Promise.allSettled(
|
|
356
|
+
extension.contextFiles.map(async (contextFilePath) => {
|
|
357
|
+
let realPath;
|
|
358
|
+
let realExtPath;
|
|
359
|
+
try {
|
|
360
|
+
realPath = await fs.realpath(contextFilePath);
|
|
361
|
+
realExtPath = await fs.realpath(extension.path);
|
|
362
|
+
} catch {
|
|
363
|
+
options.onDebugMessage?.(
|
|
364
|
+
`Skipping unreadable context file: ${contextFilePath}`
|
|
365
|
+
);
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
if (!isSubpath(realExtPath, realPath)) {
|
|
369
|
+
options.onDebugMessage?.(
|
|
370
|
+
`Skipping context file outside extension directory: ${contextFilePath}`
|
|
371
|
+
);
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
return fs.readFile(realPath, {
|
|
375
|
+
encoding: "utf-8",
|
|
376
|
+
signal: options.signal
|
|
377
|
+
});
|
|
378
|
+
})
|
|
379
|
+
);
|
|
380
|
+
for (let i = 0; i < fileReads.length; i++) {
|
|
381
|
+
const outcome = fileReads[i];
|
|
382
|
+
if (outcome.status === "rejected") {
|
|
383
|
+
options.onDebugMessage?.(
|
|
384
|
+
`Failed to read extension context file ${extension.contextFiles[i]}: ${getErrorMessage(outcome.reason)}`
|
|
385
|
+
);
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
const content = outcome.value;
|
|
389
|
+
if (!content || !content.trim()) continue;
|
|
390
|
+
if (remainingBudget <= 0) {
|
|
391
|
+
options.onDebugMessage?.(
|
|
392
|
+
"Extension context budget exhausted, skipping remaining files."
|
|
393
|
+
);
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
const cap = Math.min(EXTENSION_CONTEXT_FILE_CAP, remainingBudget);
|
|
397
|
+
const cappedContent = content.length > cap ? content.slice(0, cap) + "\n... (truncated)" : content;
|
|
398
|
+
contextText += `
|
|
399
|
+
|
|
400
|
+
${cappedContent}`;
|
|
401
|
+
remainingBudget -= cappedContent.length;
|
|
402
|
+
}
|
|
403
|
+
return { text: contextText, remainingBudget };
|
|
404
|
+
}
|
|
405
|
+
__name(buildExtensionMentionContext, "buildExtensionMentionContext");
|
|
406
|
+
|
|
407
|
+
// packages/cli/src/ui/hooks/extension-mention-ref.ts
|
|
408
|
+
function getExtensionSuggestions(config, pattern) {
|
|
409
|
+
if (!config) return [];
|
|
410
|
+
if (config.isTrustedFolder?.() === false) return [];
|
|
411
|
+
const extensions = config.getActiveExtensions?.() ?? [];
|
|
412
|
+
if (extensions.length === 0) return [];
|
|
413
|
+
const query = pattern.toLowerCase();
|
|
414
|
+
return extensions.map((ext) => ({
|
|
415
|
+
ext,
|
|
416
|
+
safeLabel: sanitizeDisplayText(ext.displayName || ext.name) || ext.name
|
|
417
|
+
})).filter(({ safeLabel, ext }) => {
|
|
418
|
+
const label = safeLabel.toLowerCase();
|
|
419
|
+
const name = ext.name.toLowerCase();
|
|
420
|
+
return label.includes(query) || name.includes(query);
|
|
421
|
+
}).sort((a, b) => {
|
|
422
|
+
const aName = a.safeLabel.toLowerCase();
|
|
423
|
+
const bName = b.safeLabel.toLowerCase();
|
|
424
|
+
const aPrefix = aName.startsWith(query) ? 0 : 1;
|
|
425
|
+
const bPrefix = bName.startsWith(query) ? 0 : 1;
|
|
426
|
+
if (aPrefix !== bPrefix) return aPrefix - bPrefix;
|
|
427
|
+
return aName.localeCompare(bName);
|
|
428
|
+
}).slice(0, MAX_SUGGESTIONS_TO_SHOW).map(({ ext, safeLabel }) => ({
|
|
429
|
+
label: safeLabel,
|
|
430
|
+
value: buildExtensionRef(ext.name),
|
|
431
|
+
description: ext.config.description ? sanitizeDisplayText(ext.config.description) ?? void 0 : void 0,
|
|
432
|
+
sourceBadge: t("Extension"),
|
|
433
|
+
isDirectory: false
|
|
434
|
+
}));
|
|
435
|
+
}
|
|
436
|
+
__name(getExtensionSuggestions, "getExtensionSuggestions");
|
|
343
437
|
|
|
344
438
|
// packages/cli/src/ui/hooks/atCommandProcessor.ts
|
|
345
439
|
function parseAllAtCommands(query) {
|
|
@@ -489,7 +583,7 @@ async function resolveAtCommandQuery({
|
|
|
489
583
|
let currentPathSpec = pathName;
|
|
490
584
|
try {
|
|
491
585
|
const absolutePath = path.resolve(dir, pathName);
|
|
492
|
-
const stats = await
|
|
586
|
+
const stats = await fs2.stat(absolutePath);
|
|
493
587
|
if (stats.isDirectory()) {
|
|
494
588
|
currentPathSpec = pathName;
|
|
495
589
|
onDebugMessage(`Path ${pathName} resolved to directory.`);
|
|
@@ -615,65 +709,21 @@ ${messages.join("\n")}`;
|
|
|
615
709
|
shouldProceed: true
|
|
616
710
|
};
|
|
617
711
|
}
|
|
618
|
-
const EXTENSION_CONTEXT_BUDGET = 2e5;
|
|
619
|
-
const PER_FILE_CAP = 5e4;
|
|
620
712
|
let extensionContextBudgetRemaining = EXTENSION_CONTEXT_BUDGET;
|
|
621
713
|
const extensionParts = [];
|
|
622
714
|
const extensionDisplays = [];
|
|
623
715
|
const extensionLabels = [];
|
|
624
716
|
for (let i = 0; i < extensionMentions.length; i++) {
|
|
625
717
|
const { extension } = extensionMentions[i];
|
|
626
|
-
const displayName =
|
|
718
|
+
const displayName = getExtensionDisplayName(extension);
|
|
627
719
|
const callId = `client-extension-${userMessageTimestamp}-${i}`;
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
realPath = await fs.realpath(contextFilePath);
|
|
636
|
-
realExtPath = await fs.realpath(extension.path);
|
|
637
|
-
} catch {
|
|
638
|
-
onDebugMessage(
|
|
639
|
-
`Skipping unreadable context file: ${contextFilePath}`
|
|
640
|
-
);
|
|
641
|
-
return null;
|
|
642
|
-
}
|
|
643
|
-
if (!isSubpath(realExtPath, realPath)) {
|
|
644
|
-
onDebugMessage(
|
|
645
|
-
`Skipping context file outside extension directory: ${contextFilePath}`
|
|
646
|
-
);
|
|
647
|
-
return null;
|
|
648
|
-
}
|
|
649
|
-
return fs.readFile(realPath, { encoding: "utf-8", signal });
|
|
650
|
-
})
|
|
651
|
-
);
|
|
652
|
-
for (let j = 0; j < fileReads.length; j++) {
|
|
653
|
-
const outcome = fileReads[j];
|
|
654
|
-
if (outcome.status === "rejected") {
|
|
655
|
-
onDebugMessage(
|
|
656
|
-
`Failed to read extension context file ${extension.contextFiles[j]}: ${getErrorMessage(outcome.reason)}`
|
|
657
|
-
);
|
|
658
|
-
continue;
|
|
659
|
-
}
|
|
660
|
-
const content = outcome.value;
|
|
661
|
-
if (!content || !content.trim()) continue;
|
|
662
|
-
if (extensionContextBudgetRemaining <= 0) {
|
|
663
|
-
onDebugMessage(
|
|
664
|
-
`Extension context budget exhausted, skipping remaining files.`
|
|
665
|
-
);
|
|
666
|
-
break;
|
|
667
|
-
}
|
|
668
|
-
const cap = Math.min(PER_FILE_CAP, extensionContextBudgetRemaining);
|
|
669
|
-
const cappedContent = content.length > cap ? content.slice(0, cap) + "\n... (truncated)" : content;
|
|
670
|
-
contextText += `
|
|
671
|
-
|
|
672
|
-
${cappedContent}`;
|
|
673
|
-
extensionContextBudgetRemaining -= cappedContent.length;
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
extensionParts.push({ text: contextText });
|
|
720
|
+
const context = await buildExtensionMentionContext(extension, {
|
|
721
|
+
remainingBudget: extensionContextBudgetRemaining,
|
|
722
|
+
signal,
|
|
723
|
+
onDebugMessage
|
|
724
|
+
});
|
|
725
|
+
extensionContextBudgetRemaining = context.remainingBudget;
|
|
726
|
+
extensionParts.push({ text: context.text });
|
|
677
727
|
extensionLabels.push(buildExtensionRef(extension.name));
|
|
678
728
|
extensionDisplays.push({
|
|
679
729
|
callId,
|
|
@@ -797,6 +847,10 @@ export {
|
|
|
797
847
|
MAX_WIDTH,
|
|
798
848
|
MAX_SUGGESTIONS_TO_SHOW,
|
|
799
849
|
SuggestionsDisplay,
|
|
850
|
+
EXTENSION_CONTEXT_BUDGET,
|
|
851
|
+
parseExtensionRef,
|
|
852
|
+
matchExtensionByRef,
|
|
853
|
+
buildExtensionMentionContext,
|
|
800
854
|
getExtensionSuggestions,
|
|
801
855
|
resolveAtCommandQuery,
|
|
802
856
|
handleAtCommand
|