@qwen-code/qwen-code 0.21.8 → 0.21.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/bundled/qc-helper/docs/configuration/settings.md +32 -30
- package/bundled/qc-helper/docs/extension/introduction.md +15 -1
- package/bundled/qc-helper/docs/features/code-review.md +2 -0
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +42 -39
- package/bundled/review/SKILL.md +11 -7
- package/chunks/{MaxSizedBox-7PM6BGJ5.js → MaxSizedBox-6BZANW7X.js} +9 -9
- package/chunks/{StandaloneSessionPicker-3UQHM7GV.js → StandaloneSessionPicker-VDC5KE7T.js} +28 -25
- package/chunks/{acpAgent-5UWLFV6V.js → acpAgent-F2NSBCUF.js} +1433 -706
- package/chunks/{agent-624T2BLO.js → agent-VOHJOEBB.js} +8 -8
- package/chunks/{agent-headless-2EE5J2KX.js → agent-headless-J5NFOPHP.js} +8 -8
- package/chunks/{bridge-JENKGFFP.js → bridge-NQIZZLAS.js} +13 -13
- package/chunks/{channel-management-service-DDWUPHMU.js → channel-management-service-PHELKOW2.js} +4 -4
- package/chunks/{channel-settings-store-SA6JZSPH.js → channel-settings-store-VIY2OENO.js} +17 -15
- package/chunks/{channel-worker-group-E67EN3RV.js → channel-worker-group-MSHT6CWR.js} +6 -6
- package/chunks/{channel-worker-manager-SW4C45CF.js → channel-worker-manager-XXD3GDSK.js} +6 -6
- package/chunks/{channel-worker-supervisor-5SRD24FG.js → channel-worker-supervisor-IVSDIMI4.js} +4 -4
- package/chunks/{chunk-S3Y3GBFD.js → chunk-23VQTELM.js} +2 -2
- package/chunks/{chunk-XZKQT2B2.js → chunk-3WDYBTTI.js} +5 -5
- package/chunks/{chunk-YEF7XEO2.js → chunk-3XVDTHBJ.js} +3 -3
- package/chunks/{chunk-IBYULW65.js → chunk-46YJDYCU.js} +145 -10
- package/chunks/chunk-4JRM2BSM.js +48 -0
- package/chunks/{chunk-L4N6TIP7.js → chunk-4TRQPFDP.js} +4 -2
- package/chunks/{chunk-5ZGR6RKJ.js → chunk-4XQNB3KN.js} +3 -3
- package/chunks/chunk-5EJZE3FP.js +140 -0
- package/chunks/{chunk-XHD7CRP2.js → chunk-5RBDAGC6.js} +2 -2
- package/chunks/{chunk-KJZ26VBX.js → chunk-67EWJE77.js} +1 -1
- package/chunks/{chunk-TE3ZAJE7.js → chunk-6Q5ABMTU.js} +1 -1
- package/chunks/{chunk-U5SLIG7E.js → chunk-7AEPJGL4.js} +1 -1
- package/chunks/{chunk-OHKJVAKG.js → chunk-7GOYZQPR.js} +20 -1977
- package/chunks/{chunk-3SE7J4DR.js → chunk-7S4JBJLU.js} +3 -3
- package/chunks/{chunk-TKSZJ5BV.js → chunk-AKJQSWV4.js} +3 -3
- package/chunks/{chunk-E4ZBKMSF.js → chunk-ATMO54WE.js} +6 -6
- package/chunks/{chunk-KKDVZLGL.js → chunk-BAMN6XSD.js} +1 -1
- package/chunks/{chunk-IUQ52YJK.js → chunk-BIRWP6LU.js} +1 -1
- package/chunks/{chunk-AKA24BGO.js → chunk-BT6GQIEJ.js} +1 -1
- package/chunks/{chunk-ZCLLJARV.js → chunk-BZP4QPNK.js} +10 -10
- package/chunks/{chunk-2M5N3DHY.js → chunk-CMOBWHWW.js} +1 -1
- package/chunks/{chunk-WV5J6Q6N.js → chunk-D7BXVKSF.js} +1 -1
- package/chunks/{chunk-NLREQJFK.js → chunk-DA4HRSBW.js} +15 -0
- package/chunks/{chunk-GOEVOFQI.js → chunk-DH5YXSIF.js} +3 -3
- package/chunks/{chunk-DIWZNWZT.js → chunk-DX3RGJMS.js} +13 -2
- package/chunks/{chunk-PLFATELK.js → chunk-DZUO626D.js} +1 -1
- package/chunks/{chunk-NGYI5EF5.js → chunk-E2FPSSKP.js} +8 -8
- package/chunks/{chunk-ZPLALRXZ.js → chunk-FBMCDU63.js} +4 -137
- package/chunks/{chunk-2ILAOM2I.js → chunk-FCLHHEUK.js} +17 -16
- package/chunks/{chunk-SNRT2TJJ.js → chunk-G2TX5ZXC.js} +3 -3
- package/chunks/{chunk-C5VWPTGT.js → chunk-GAKGOXTC.js} +1 -1
- package/chunks/{chunk-QQWD7LZV.js → chunk-HADWBW5R.js} +4 -4
- package/chunks/{chunk-77QVBFCU.js → chunk-HZGBKOX3.js} +3 -3
- package/chunks/{chunk-RPWVIXDB.js → chunk-I5VM3SKY.js} +4 -4
- package/chunks/{chunk-7VUERJHS.js → chunk-II6G3EY6.js} +325 -104
- package/chunks/{chunk-FN6YXJOP.js → chunk-IOEZE2YT.js} +1 -1
- package/chunks/chunk-JUWS2Z5K.js +1995 -0
- package/chunks/{chunk-VXZ5HAOV.js → chunk-K4ADGWHU.js} +1 -1
- package/chunks/{chunk-YOM7DEGB.js → chunk-KSAFZ5TA.js} +2 -2
- package/chunks/{chunk-KAQCJO6Y.js → chunk-KTKYGS2P.js} +35 -9
- package/chunks/{chunk-GBDINRIL.js → chunk-KTQGGPGV.js} +3 -3
- package/chunks/{chunk-6M26GBKX.js → chunk-L2AFWWJE.js} +42 -3
- package/chunks/{chunk-QXVSWG66.js → chunk-LHEC5V6G.js} +2 -2
- package/chunks/{chunk-J26HHFI5.js → chunk-LP2QGNSP.js} +32 -2
- package/chunks/{chunk-HWX5HPUG.js → chunk-LZZLUCRS.js} +108 -11
- package/chunks/{chunk-KTJFU7RT.js → chunk-MFDYOYZZ.js} +2 -2
- package/chunks/{chunk-3WNQOYHQ.js → chunk-MHP476D3.js} +74 -31
- package/chunks/{chunk-Y4TETC74.js → chunk-MTCYGTWH.js} +4 -4
- package/chunks/{chunk-EN2TKTFH.js → chunk-NV3F44FL.js} +6 -2
- package/chunks/{chunk-BF52U4XJ.js → chunk-OGDIJKHK.js} +1 -1
- package/chunks/{chunk-7DVT4LVV.js → chunk-OGNFHGIG.js} +3 -3
- package/chunks/{chunk-IYES5WOT.js → chunk-P2FK2HBV.js} +2 -2
- package/chunks/{chunk-2M4K4KYS.js → chunk-P3RBMQ4P.js} +4 -4
- package/chunks/{chunk-FYAXKJK7.js → chunk-P4ZEZSJZ.js} +692 -106
- package/chunks/{chunk-UFALT4LK.js → chunk-PBRVUF5B.js} +1 -1
- package/chunks/{chunk-LKRMNRSN.js → chunk-PDPFQ2FO.js} +2 -0
- package/chunks/{chunk-6TR7CFXH.js → chunk-PNBBJOCP.js} +1 -1
- package/chunks/{chunk-M3STHEMM.js → chunk-PVOGHGSF.js} +5 -5
- package/chunks/{chunk-4WU6NY7F.js → chunk-QSNSL4R4.js} +2 -2
- package/chunks/{chunk-DQSDACD2.js → chunk-RBHQXGDK.js} +1 -1
- package/chunks/{chunk-ZHA242R4.js → chunk-RVSTTOJ4.js} +2 -2
- package/chunks/{chunk-EIVICVHM.js → chunk-SCAZZ3Q4.js} +4 -4
- package/chunks/{chunk-BF224XHL.js → chunk-T5RLUXWJ.js} +2 -2
- package/chunks/{chunk-B52AWKBB.js → chunk-T6HEQR2Q.js} +16 -5
- package/chunks/{chunk-FWBXMANW.js → chunk-THIKWITR.js} +3 -3
- package/chunks/{chunk-WG6542MA.js → chunk-TQCYNLNJ.js} +1 -1
- package/chunks/chunk-TQOF5KBL.js +71 -0
- package/chunks/{chunk-NPUXXRJI.js → chunk-TZ6KJ44L.js} +1 -1
- package/chunks/{chunk-YHJFF7KH.js → chunk-UJUM2SRN.js} +147 -47
- package/chunks/{chunk-4ALIARFY.js → chunk-UYAUA63Q.js} +1 -1
- package/chunks/chunk-VFMASYQA.js +389 -0
- package/chunks/chunk-VGHZT6JR.js +51 -0
- package/chunks/{chunk-ZWBUH5UP.js → chunk-VKJ4KTPJ.js} +1 -1
- package/chunks/{chunk-QGHSP65Z.js → chunk-VNNWAZSI.js} +2 -2
- package/chunks/{chunk-757GB46F.js → chunk-W3FSZSF2.js} +1 -1
- package/chunks/{chunk-GQCEQPYQ.js → chunk-WGK4TSB7.js} +3 -3
- package/chunks/{chunk-PG62DFWD.js → chunk-WP5VOXF7.js} +6 -127
- package/chunks/{chunk-NVRDQFCX.js → chunk-XTY5DN4Y.js} +1 -1
- package/chunks/{chunk-GXSNGY5M.js → chunk-XX7QFP34.js} +1677 -1307
- package/chunks/{chunk-3PY4LPJF.js → chunk-YGT2AUJ7.js} +84 -4
- package/chunks/{chunk-4DU3NCHG.js → chunk-YTFDX4PR.js} +8 -3
- package/chunks/{chunk-OA4JVLSA.js → chunk-Z7VOMGDC.js} +22 -1
- package/chunks/{chunk-DX5W5AON.js → chunk-ZBXGWQ4S.js} +3 -3
- package/chunks/chunk-ZLBIFIMV.js +1099 -0
- package/chunks/{chunk-HA3SAB64.js → chunk-ZOSTTOUJ.js} +1 -1
- package/chunks/{chunk-VWMUDKLC.js → chunk-ZTQSOV56.js} +4 -4
- package/chunks/{computer-use-ESQYJ3JY.js → computer-use-PMZ7ICGY.js} +8 -8
- package/chunks/{config-utils-XQHBJP7G.js → config-utils-ULCSRMWD.js} +4 -4
- package/chunks/{contextCommand-CX3YF4ZE.js → contextCommand-GEZU7YHE.js} +11 -10
- package/chunks/{core-runtime-DIAU7JMG.js → core-runtime-HRJI2MN6.js} +8 -8
- package/chunks/{create-sub-session-HDPD6HOA.js → create-sub-session-VBNVI4YU.js} +9 -9
- package/chunks/{daemon-VZBGJUNL.js → daemon-POSQPD3G.js} +115 -7
- package/chunks/{daemon-status-provider-H6O4UQ4F.js → daemon-status-provider-N4CRQKFI.js} +18 -18
- package/chunks/{daemon-trust-policy-BNUXG6MT.js → daemon-trust-policy-BHO3JUHM.js} +16 -14
- package/chunks/{daemon-trust-policy-monitor-E4EQ7GF4.js → daemon-trust-policy-monitor-YEKJ2726.js} +16 -14
- package/chunks/{deferred-core-runtime-CBMSHPAU.js → deferred-core-runtime-SH57E3J3.js} +8 -8
- package/chunks/{dist-KVISB2O2.js → dist-3NTTUAHT.js} +1 -1
- package/chunks/{dist-RCH3I7SS.js → dist-6BMOAE3Z.js} +2 -2
- package/chunks/{dist-IRL7WA5Z.js → dist-B2CGTW6T.js} +1 -1
- package/chunks/{dist-TUSWNE2I.js → dist-EWW3J4HQ.js} +1 -1
- package/chunks/{dist-HIACTZEK.js → dist-EZE3V3Q7.js} +1 -1
- package/chunks/{dist-EEEQGCZA.js → dist-J47AXBZC.js} +1 -1
- package/chunks/{dist-MKX5OSFF.js → dist-OTUO3AS2.js} +4 -1088
- package/chunks/{dist-MBF3I5MX.js → dist-Z3CS4OVP.js} +1 -1
- package/chunks/{earlyInputCapture-UIOP7OIN.js → earlyInputCapture-B2JJ2HME.js} +8 -8
- package/chunks/{edit-ITMZYFKA.js → edit-7FTXENAN.js} +10 -8
- package/chunks/{enter-worktree-S4PL5UV6.js → enter-worktree-JPHV2PBG.js} +8 -8
- package/chunks/{enterPlanMode-YV52NNJT.js → enterPlanMode-CGBJ3AHJ.js} +8 -8
- package/chunks/{environment-NGOWPRZV.js → environment-LXASZAHD.js} +11 -11
- package/chunks/{errors-BU26DTDX.js → errors-XIGVT2AD.js} +10 -10
- package/chunks/{exit-worktree-XRM6LH5F.js → exit-worktree-DKSGXW65.js} +8 -8
- package/chunks/{exitPlanMode-ZLI5F7KR.js → exitPlanMode-THFL2HYN.js} +8 -8
- package/chunks/{fast-path-UJWORIED.js → fast-path-4NXAT5UL.js} +4 -3
- package/chunks/{fast-path-settings-37WQD5B2.js → fast-path-settings-RPAVBD7P.js} +2 -2
- package/chunks/{gemini-ZSKNDUMU.js → gemini-B3N6FACU.js} +56 -60
- package/chunks/{geminiContentGenerator-YGEXOEKD.js → geminiContentGenerator-YYFE2HIE.js} +1 -1
- package/chunks/{glob-7KZG44BR.js → glob-BPHSCFJP.js} +8 -8
- package/chunks/{grep-6ZFC7RJ5.js → grep-ROZIRFLU.js} +8 -8
- package/chunks/{handleAutoUpdate-KSEL3TQS.js → handleAutoUpdate-WV6SPZQB.js} +13 -12
- package/chunks/{i18n-ZIUXBW5V.js → i18n-YWJWPQKD.js} +13 -11
- package/chunks/{image-gen-AUIZJJNK.js → image-gen-SISRZ6FS.js} +1 -1
- package/chunks/{initializer-7AHY3N6Q.js → initializer-66OAD6GO.js} +16 -14
- package/chunks/{installationInfo-VGBXMYLY.js → installationInfo-3YUGIP36.js} +9 -9
- package/chunks/{list-PSFKQHLB.js → list-VEYR66XB.js} +19 -17
- package/chunks/{loadedSettingsAdapter-FTMRCTOF.js → loadedSettingsAdapter-V2JCPCYD.js} +16 -14
- package/chunks/{loggingContentGenerator-MZAN52UV.js → loggingContentGenerator-RBLNDREC.js} +6 -6
- package/chunks/main-PXAUXNF2.js +8 -0
- package/chunks/{managed-npm-update-O4NHK45X.js → managed-npm-update-C5ID5R4R.js} +9 -9
- package/chunks/{mcp-6CFP2AYQ.js → mcp-OZ54NZJQ.js} +16 -14
- package/chunks/{monitor-DAKD6OU4.js → monitor-7Y4TVFTK.js} +18 -14
- package/chunks/{nonInteractiveCli-RC7VIUZL.js → nonInteractiveCli-QEK4LHAC.js} +51 -49
- package/chunks/{notebook-edit-474DPMRL.js → notebook-edit-OG35EBGY.js} +9 -8
- package/chunks/{openaiContentGenerator-2NFY2MWO.js → openaiContentGenerator-443BNRPJ.js} +5 -5
- package/chunks/{pidfile-KBFVDNQP.js → pidfile-ZK4OLRZA.js} +8 -8
- package/chunks/{processUtils-6GRYH4Y3.js → processUtils-4YGB4RUZ.js} +2 -2
- package/chunks/{qwenContentGenerator-KAHU6IZY.js → qwenContentGenerator-D5C2LCSZ.js} +9 -9
- package/chunks/{qwenOAuth2-RRQTCP4W.js → qwenOAuth2-Z4YQBMYN.js} +1 -1
- package/chunks/{read-file-3M6WXDXP.js → read-file-EXTJLWMU.js} +4 -4
- package/chunks/{resumeHistoryUtils-D6TAY3HX.js → resumeHistoryUtils-UPCGRJUL.js} +13 -12
- package/chunks/{ripGrep-PLPENT3E.js → ripGrep-QBVIRCU4.js} +8 -8
- package/chunks/{run-qwen-serve-ZAFIJKJC.js → run-qwen-serve-ZYGJNE3E.js} +169 -68
- package/chunks/{runtime-ZED7CYOZ.js → runtime-BZZ4LWCP.js} +21 -19
- package/chunks/{scheduler-MD3AL2W5.js → scheduler-YNQNOU2E.js} +135 -15
- package/chunks/{sdk-exporters-http-KHAB5JSD.js → sdk-exporters-http-XVTZQRCE.js} +2 -2
- package/chunks/{sdk-impl-KD7FSTC3.js → sdk-impl-7W7AKCS4.js} +7 -3
- package/chunks/{serve-E3VUDRZN.js → serve-LJHAXDCH.js} +18 -14
- package/chunks/{server-OWMEMAKR.js → server-ADMLELR6.js} +1229 -1098
- package/chunks/{session-HZ57QK7K.js → session-YKZXFFTM.js} +55 -53
- package/chunks/{settings-V7BR3RKP.js → settings-EQBUAQ7Y.js} +15 -13
- package/chunks/{shell-23OMNMW6.js → shell-3QZOJGTT.js} +8 -8
- package/chunks/{skill-6HBDYZRS.js → skill-UWSSMXE7.js} +5 -5
- package/chunks/{skill-settings-HWJLTU7M.js → skill-settings-T6MLB7NU.js} +15 -13
- package/chunks/{spawnChannel-N6KKUW5B.js → spawnChannel-VS7ZFUFP.js} +11 -11
- package/chunks/{standalone-update-QGIKHATD.js → standalone-update-2W26SRRO.js} +11 -10
- package/chunks/{startInteractiveUI-GX2CRL42.js → startInteractiveUI-CVS7K3D6.js} +86 -75
- package/chunks/{team-create-CFFKU7KL.js → team-create-4WFTNNUL.js} +8 -8
- package/chunks/{team-plan-approval-6EFOKR6A.js → team-plan-approval-DBYI33S3.js} +8 -8
- package/chunks/{terminal-image-renderer-TLDNACQY.js → terminal-image-renderer-S5WPPQKH.js} +8 -8
- package/chunks/{theme-manager-5LJ3H7VO.js → theme-manager-LI2RIOVR.js} +8 -8
- package/chunks/{tool-search-UJV3A24H.js → tool-search-4773EUQ4.js} +4 -4
- package/chunks/{total-session-admission-D63QYXGO.js → total-session-admission-PAY5CH2Z.js} +16 -15
- package/chunks/{trustedFolders-KZCOB53W.js → trustedFolders-FRSLE674.js} +9 -9
- package/chunks/{types-ML3TRJQ5.js → types-WYCFCEHR.js} +5 -3
- package/chunks/{update-relaunch-IFILM3SA.js → update-relaunch-ZSFQTU6M.js} +5 -5
- package/chunks/{updateCheck-YZ2CRCFC.js → updateCheck-AXWSO7KA.js} +12 -11
- package/chunks/{useAutoAcceptIndicator-AXEVNA3Q.js → useAutoAcceptIndicator-VHLXIA7U.js} +18 -16
- package/chunks/{validateNonInterActiveAuth-3WTOJFWA.js → validateNonInterActiveAuth-PDJECMFU.js} +48 -46
- package/chunks/{version-GXK7OHZY.js → version-RBN764QS.js} +1 -1
- package/chunks/{web-fetch-ILB4GAVR.js → web-fetch-7BJK42AF.js} +4 -4
- package/chunks/{web-search-HKRPGPZZ.js → web-search-L2CILQXV.js} +4 -3
- package/chunks/{workflow-FXIPRQQA.js → workflow-5VH2R74I.js} +170 -137
- package/chunks/{workspace-providers-status-NYHC7HSR.js → workspace-providers-status-OZTQ6JFH.js} +19 -17
- package/chunks/{workspace-registration-store-AKEB7OMW.js → workspace-registration-store-IX5RJQS5.js} +1 -1
- package/chunks/{workspace-registry-CDAS5TVZ.js → workspace-registry-73N4BGG4.js} +16 -15
- package/chunks/{workspace-service-PAMUKMAV.js → workspace-service-I5RUPSNV.js} +26 -22
- package/chunks/{workspace-skills-status-YQSHCCMS.js → workspace-skills-status-DMK6VYDO.js} +17 -15
- package/chunks/{workspace-trust-reconciler-RPTXOIY2.js → workspace-trust-reconciler-QX4RL3TC.js} +24 -21
- package/chunks/{write-file-CGS57TS4.js → write-file-UGDD5UTS.js} +8 -8
- package/chunks/{zoom-image-E7D72GYV.js → zoom-image-ZAHEO3YP.js} +4 -4
- package/cli.js +12 -12
- package/package.json +3 -3
- package/web-shell/assets/{arc-DybZaz32.js → arc-CHY4saMJ.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-jN3qBd19.js → architectureDiagram-3BPJPVTR-Bu6CwvHj.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-Ct5DZPrj.js → blockDiagram-GPEHLZMM-XGt6iGf_.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CUAFMlUG.js → c4Diagram-AAUBKEIU-CBbYl19W.js} +1 -1
- package/web-shell/assets/channel-B40srHOa.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CuV8n90B.js → chunk-2J33WTMH-BEhmVrdx.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BUzl_kls.js → chunk-4BX2VUAB-fQLyE0Bg.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-BnDBLX6A.js → chunk-55IACEB6-yGdtyx4a.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-B83uTOjm.js → chunk-727SXJPM-DYbX2GLo.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DM3HLgpT.js → chunk-AQP2D5EJ-DyKTEsYn.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CSQ5hgyb.js → chunk-FMBD7UC4-D8Uy_GzX.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BWOF4SxX.js → chunk-ND2GUHAM-C8wNR2K7.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BsOH9LMi.js → chunk-QZHKN3VN-BnybNxnt.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-IENqH2iJ.js → cose-bilkent-S5V4N54A-jq4uiFRp.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG--dyzDTGo.js → dagre-BM42HDAG-Bs7oye1U.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BE7Dcqof.js → diagram-2AECGRRQ-BHGGJNyM.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-Cr8-5OTj.js → diagram-5GNKFQAL-BJezVLGT.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-Bzey3uAY.js → diagram-KO2AKTUF-5JzQN_rL.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-sErl28Xb.js → diagram-LMA3HP47-BlPYOgY9.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-Dq30ATIo.js → diagram-OG6HWLK6-CtMHEaFK.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-BkCoEfVW.js → erDiagram-TEJ5UH35-CRNdq2AB.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-DHwO0rrI.js → flowDiagram-I6XJVG4X-De1WwLzu.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-s7vAPxWq.js → ganttDiagram-6RSMTGT7-YbWfL5Zn.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CQxhwPOU.js → gitGraphDiagram-PVQCEYII-DzCN8bmd.js} +1 -1
- package/web-shell/assets/index-BDOGGGaN.css +5 -0
- package/web-shell/assets/{index-CF4wApWp.js → index-CocPvF9Q.js} +1 -1
- package/web-shell/assets/index-DSH2KrMc.js +1771 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-BnFrD0bq.js → infoDiagram-5YYISTIA-DLHoopnE.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js → ishikawaDiagram-YF4QCWOH-XnbU04SS.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CyGAhsxi.js → journeyDiagram-JHISSGLW-CipPyEeJ.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-CbsK5akB.js → kanban-definition-UN3LZRKU-DrSeyE5d.js} +1 -1
- package/web-shell/assets/{linear-cQsF4P8D.js → linear-LrBKnAo_.js} +1 -1
- package/web-shell/assets/{mermaid.core-Z4HVqrKY.js → mermaid.core-C3U9UVmf.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-CYnrBo_f.js → mindmap-definition-RKZ34NQL-DqRWgC9H.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CBzOfhrs.js → pieDiagram-4H26LBE5-BNXY5p6H.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D4LK1Ebn.js → quadrantDiagram-W4KKPZXB-Ccj9QzE4.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-Bzti2Lcj.js → requirementDiagram-4Y6WPE33-CjPM2_gx.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-yTBw5Z2s.js → sankeyDiagram-5OEKKPKP-C0RsvKbj.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D07UVRiZ.js → sequenceDiagram-3UESZ5HK-ClN1P5z7.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-UE_lHsTn.js → stateDiagram-AJRCARHV-By0eiB2Y.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DRvYdiTs.js → timeline-definition-PNZ67QCA-g_iaSQgv.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-CQLIXs0u.js → vennDiagram-CIIHVFJN-y9ZqJ-TD.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-JZz_Xqse.js → wardley-L42UT6IY-BVVfaxpF.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO--i7BiJwB.js → wardleyDiagram-YWT4CUSO-D3ooZKZT.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Bkc-bW0S.js → xychartDiagram-2RQKCTM6-6GXrY6M1.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-RXFQM6FQ.js +0 -42
- package/chunks/chunk-UA5H3DS2.js +0 -203
- package/web-shell/assets/channel-BMwLrwLW.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +0 -1
- package/web-shell/assets/index-Bckpjr-I.css +0 -5
- package/web-shell/assets/index-DwEr9HEW.js +0 -1768
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +0 -1
- /package/chunks/{chunk-VXZBKKQR.js → chunk-NTTBXH7U.js} +0 -0
- /package/chunks/{chunk-GRC5HGPI.js → chunk-OIBUG24X.js} +0 -0
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
useKeypress
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-VNNWAZSI.js";
|
|
6
6
|
import {
|
|
7
7
|
require_react
|
|
8
8
|
} from "./chunk-5QWWOFGG.js";
|
|
9
9
|
import {
|
|
10
10
|
t
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-WP5VOXF7.js";
|
|
12
12
|
import {
|
|
13
13
|
APPROVAL_MODES
|
|
14
14
|
} from "./chunk-WAUGQKUU.js";
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
} from "./chunk-
|
|
4
|
+
parseToolWriteOriginMeta
|
|
5
|
+
} from "./chunk-VGHZT6JR.js";
|
|
6
|
+
import {
|
|
7
|
+
isLoopbackBind,
|
|
8
|
+
normalizeSessionIdForLookup
|
|
9
|
+
} from "./chunk-TQOF5KBL.js";
|
|
6
10
|
import {
|
|
7
11
|
MAX_CHILD_HEAP_MB,
|
|
8
12
|
MIN_CHILD_HEAP_MB,
|
|
@@ -831,12 +835,19 @@ function buildAuditContext(params, route) {
|
|
|
831
835
|
};
|
|
832
836
|
}
|
|
833
837
|
__name(buildAuditContext, "buildAuditContext");
|
|
834
|
-
function createBridgeFileSystemAdapter(factory) {
|
|
838
|
+
function createBridgeFileSystemAdapter(factory, options = {}) {
|
|
835
839
|
return {
|
|
836
840
|
async writeText(params) {
|
|
837
|
-
const
|
|
838
|
-
|
|
839
|
-
|
|
841
|
+
const ctx = buildAuditContext(params, ACP_WRITE_ROUTE);
|
|
842
|
+
if (options.allowSameHostToolWritesOutsideWorkspace === true && parseToolWriteOriginMeta(params._meta) !== void 0 && factory.writeSameHostToolText !== void 0) {
|
|
843
|
+
await factory.writeSameHostToolText(ctx, {
|
|
844
|
+
path: params.path,
|
|
845
|
+
content: params.content,
|
|
846
|
+
...sanitizeWriteMeta(params._meta)
|
|
847
|
+
});
|
|
848
|
+
return {};
|
|
849
|
+
}
|
|
850
|
+
const wfs = factory.forRequest(ctx);
|
|
840
851
|
const resolved = await wfs.resolve(params.path, "write");
|
|
841
852
|
await wfs.writeTextOverwrite(resolved, params.content);
|
|
842
853
|
return {};
|
|
@@ -857,6 +868,20 @@ function createBridgeFileSystemAdapter(factory) {
|
|
|
857
868
|
};
|
|
858
869
|
}
|
|
859
870
|
__name(createBridgeFileSystemAdapter, "createBridgeFileSystemAdapter");
|
|
871
|
+
function sanitizeWriteMeta(meta) {
|
|
872
|
+
const sanitized = {};
|
|
873
|
+
if (typeof meta?.["bom"] === "boolean") {
|
|
874
|
+
sanitized.bom = meta["bom"];
|
|
875
|
+
}
|
|
876
|
+
if (typeof meta?.["encoding"] === "string") {
|
|
877
|
+
sanitized.encoding = meta["encoding"];
|
|
878
|
+
}
|
|
879
|
+
if (meta?.["lineEnding"] === "lf" || meta?.["lineEnding"] === "crlf") {
|
|
880
|
+
sanitized.lineEnding = meta["lineEnding"];
|
|
881
|
+
}
|
|
882
|
+
return Object.keys(sanitized).length > 0 ? { meta: sanitized } : {};
|
|
883
|
+
}
|
|
884
|
+
__name(sanitizeWriteMeta, "sanitizeWriteMeta");
|
|
860
885
|
|
|
861
886
|
// packages/cli/src/serve/fs/path-mutex-registry.ts
|
|
862
887
|
init_esbuild_shims();
|
|
@@ -1219,6 +1244,7 @@ var SERVE_CAPABILITY_REGISTRY = {
|
|
|
1219
1244
|
daemon_status: { since: "v1" },
|
|
1220
1245
|
capabilities: { since: "v1" },
|
|
1221
1246
|
session_create: { since: "v1" },
|
|
1247
|
+
session_id_override: { since: "v1" },
|
|
1222
1248
|
session_scope_override: { since: "v1" },
|
|
1223
1249
|
session_load: { since: "v1" },
|
|
1224
1250
|
session_resume: { since: "v1" },
|
|
@@ -1355,6 +1381,7 @@ var SERVE_CAPABILITY_REGISTRY = {
|
|
|
1355
1381
|
// (`tools.disabled` is consulted at `Config` construction time).
|
|
1356
1382
|
workspace_tool_toggle: { since: "v1" },
|
|
1357
1383
|
workspace_skill_toggle: { since: "v1" },
|
|
1384
|
+
workspace_skill_batch_toggle: { since: "v1" },
|
|
1358
1385
|
workspace_skill_manage: { since: "v1" },
|
|
1359
1386
|
workspace_settings: { since: "v1" },
|
|
1360
1387
|
// `GET /workspace/permissions` is always available when this tag is
|
|
@@ -1912,7 +1939,7 @@ function requireSessionId(req, res) {
|
|
|
1912
1939
|
res.status(400).json({ error: "`sessionId` route parameter is required" });
|
|
1913
1940
|
return null;
|
|
1914
1941
|
}
|
|
1915
|
-
return sessionId;
|
|
1942
|
+
return normalizeSessionIdForLookup(sessionId);
|
|
1916
1943
|
}
|
|
1917
1944
|
__name(requireSessionId, "requireSessionId");
|
|
1918
1945
|
function parseClientIdHeader(req, res) {
|
|
@@ -2073,8 +2100,7 @@ var WORKSPACE_QUALIFIED_ACP_PATH = /^\/workspaces\/[^/]+\/acp$/i;
|
|
|
2073
2100
|
function resolveTier(method, path, workspaceQualifiedAcpEnabled) {
|
|
2074
2101
|
const p = path.endsWith("/") && path.length > 1 ? path.slice(0, -1) : path;
|
|
2075
2102
|
if (method === "OPTIONS") return null;
|
|
2076
|
-
if ((method === "GET" || method === "HEAD") &&
|
|
2077
|
-
return null;
|
|
2103
|
+
if ((method === "GET" || method === "HEAD") && p === "/health") return null;
|
|
2078
2104
|
if (method === "POST" && p.startsWith("/session/") && p.endsWith("/heartbeat"))
|
|
2079
2105
|
return null;
|
|
2080
2106
|
if (method === "GET" && p.startsWith("/session/") && p.endsWith("/events"))
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
import {
|
|
4
4
|
resolveModelConfig,
|
|
5
5
|
resolveProviderProtocol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XX7QFP34.js";
|
|
7
7
|
import {
|
|
8
8
|
external_exports
|
|
9
9
|
} from "./chunk-H6XPXXMH.js";
|
|
10
10
|
import {
|
|
11
11
|
stripRuntimeSnapshotPrefix
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-K4ADGWHU.js";
|
|
13
13
|
import {
|
|
14
14
|
REASONING_EFFORT_TIERS,
|
|
15
15
|
normalizeReasoningEffort
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
AuthType,
|
|
19
19
|
MODEL_GENERATION_CONFIG_FIELDS
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-PVOGHGSF.js";
|
|
21
21
|
import {
|
|
22
22
|
init_esbuild_shims
|
|
23
23
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
SPAN_TOOL_EXECUTION,
|
|
13
13
|
TOOL_FAILURE_KIND_ATTRIBUTE,
|
|
14
14
|
TOOL_FAILURE_KIND_CANCELLED
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-PDPFQ2FO.js";
|
|
16
16
|
import {
|
|
17
17
|
createDebugLogger,
|
|
18
18
|
getCurrentSessionId,
|
|
@@ -44,6 +44,7 @@ init_esbuild_shims();
|
|
|
44
44
|
init_esm();
|
|
45
45
|
var TOOL_CALL_COUNT = `${SERVICE_NAME}.tool.call.count`;
|
|
46
46
|
var TOOL_EXECUTION_COUNT = `${SERVICE_NAME}.tool.execution.count`;
|
|
47
|
+
var REPEATED_TOOL_FAILURE_GUARD_COUNT = `${SERVICE_NAME}.repeated_tool_failure_guard.count`;
|
|
47
48
|
var TOOL_CALL_LATENCY = `${SERVICE_NAME}.tool.call.latency`;
|
|
48
49
|
var API_REQUEST_COUNT = `${SERVICE_NAME}.api.request.count`;
|
|
49
50
|
var API_REQUEST_LATENCY = `${SERVICE_NAME}.api.request.latency`;
|
|
@@ -112,6 +113,12 @@ var COUNTER_DEFINITIONS = {
|
|
|
112
113
|
assign: /* @__PURE__ */ __name((c) => toolExecutionCounter = c, "assign"),
|
|
113
114
|
attributes: {}
|
|
114
115
|
},
|
|
116
|
+
[REPEATED_TOOL_FAILURE_GUARD_COUNT]: {
|
|
117
|
+
description: "Counts privacy-safe repeated tool execution failure guard transitions.",
|
|
118
|
+
valueType: ValueType.INT,
|
|
119
|
+
assign: /* @__PURE__ */ __name((c) => repeatedToolFailureGuardCounter = c, "assign"),
|
|
120
|
+
attributes: {}
|
|
121
|
+
},
|
|
115
122
|
[API_REQUEST_COUNT]: {
|
|
116
123
|
description: "Counts API requests, tagged by model and status.",
|
|
117
124
|
valueType: ValueType.INT,
|
|
@@ -272,6 +279,7 @@ var PERFORMANCE_HISTOGRAM_DEFINITIONS = {
|
|
|
272
279
|
var cliMeter;
|
|
273
280
|
var toolCallCounter;
|
|
274
281
|
var toolExecutionCounter;
|
|
282
|
+
var repeatedToolFailureGuardCounter;
|
|
275
283
|
var toolCallLatencyHistogram;
|
|
276
284
|
var apiRequestCounter;
|
|
277
285
|
var apiRequestLatencyHistogram;
|
|
@@ -478,6 +486,11 @@ function recordToolExecutionMetrics(config, attributes) {
|
|
|
478
486
|
});
|
|
479
487
|
}
|
|
480
488
|
__name(recordToolExecutionMetrics, "recordToolExecutionMetrics");
|
|
489
|
+
function recordRepeatedToolFailureGuardMetrics(attributes) {
|
|
490
|
+
if (!repeatedToolFailureGuardCounter || !isMetricsInitialized) return;
|
|
491
|
+
repeatedToolFailureGuardCounter.add(1, attributes);
|
|
492
|
+
}
|
|
493
|
+
__name(recordRepeatedToolFailureGuardMetrics, "recordRepeatedToolFailureGuardMetrics");
|
|
481
494
|
function recordTokenUsageMetrics(config, tokenCount, attributes) {
|
|
482
495
|
if (!tokenUsageCounter || !isMetricsInitialized) return;
|
|
483
496
|
tokenUsageCounter.add(tokenCount, {
|
|
@@ -852,6 +865,31 @@ var telemetryInitialized = false;
|
|
|
852
865
|
var telemetryInitPromise;
|
|
853
866
|
var telemetryShutdownPromise;
|
|
854
867
|
var activeMetricReader;
|
|
868
|
+
var OTEL_EXPORTER_ENV_VARS = [
|
|
869
|
+
"OTEL_TRACES_EXPORTER",
|
|
870
|
+
"OTEL_LOGS_EXPORTER",
|
|
871
|
+
"OTEL_METRICS_EXPORTER"
|
|
872
|
+
];
|
|
873
|
+
function startSdkWithExplicitExporters(currentSdk) {
|
|
874
|
+
const previousValues = /* @__PURE__ */ new Map();
|
|
875
|
+
for (const name of OTEL_EXPORTER_ENV_VARS) {
|
|
876
|
+
previousValues.set(name, process.env[name]);
|
|
877
|
+
delete process.env[name];
|
|
878
|
+
}
|
|
879
|
+
try {
|
|
880
|
+
currentSdk.start();
|
|
881
|
+
} finally {
|
|
882
|
+
for (const name of OTEL_EXPORTER_ENV_VARS) {
|
|
883
|
+
const previousValue = previousValues.get(name);
|
|
884
|
+
if (previousValue === void 0) {
|
|
885
|
+
delete process.env[name];
|
|
886
|
+
} else {
|
|
887
|
+
process.env[name] = previousValue;
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
__name(startSdkWithExplicitExporters, "startSdkWithExplicitExporters");
|
|
855
893
|
function isTelemetrySdkInitialized() {
|
|
856
894
|
return telemetryInitialized;
|
|
857
895
|
}
|
|
@@ -863,12 +901,12 @@ function initializeTelemetry(config) {
|
|
|
863
901
|
telemetryInitPromise ??= (async () => {
|
|
864
902
|
const debugLogger3 = createDebugLogger("OTEL");
|
|
865
903
|
try {
|
|
866
|
-
const { startTelemetrySdk } = await import("./sdk-impl-
|
|
904
|
+
const { startTelemetrySdk } = await import("./sdk-impl-7W7AKCS4.js");
|
|
867
905
|
if (telemetryInitialized) return;
|
|
868
906
|
const started = await startTelemetrySdk(config);
|
|
869
907
|
if (!started) return;
|
|
870
908
|
sdk = started.sdk;
|
|
871
|
-
sdk
|
|
909
|
+
startSdkWithExplicitExporters(sdk);
|
|
872
910
|
debugLogger3.debug("OpenTelemetry SDK started successfully.");
|
|
873
911
|
telemetryInitialized = true;
|
|
874
912
|
activeMetricReader = started.metricReader;
|
|
@@ -1989,6 +2027,7 @@ export {
|
|
|
1989
2027
|
recordChatCompressionMetrics,
|
|
1990
2028
|
recordToolCallMetrics,
|
|
1991
2029
|
recordToolExecutionMetrics,
|
|
2030
|
+
recordRepeatedToolFailureGuardMetrics,
|
|
1992
2031
|
recordTokenUsageMetrics,
|
|
1993
2032
|
recordApiResponseMetrics,
|
|
1994
2033
|
recordApiErrorMetrics,
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
resolveChannelCwd
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-67EWJE77.js";
|
|
6
6
|
import {
|
|
7
7
|
getPlugin,
|
|
8
8
|
supportedTypes
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-E2FPSSKP.js";
|
|
10
10
|
import {
|
|
11
11
|
init_esbuild_shims
|
|
12
12
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -90,6 +90,7 @@ var SessionArchivingError = class extends Error {
|
|
|
90
90
|
this.lockKind = lockKind;
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
+
var RESTORE_IN_PROGRESS_RETRY_AFTER_SECONDS = 5;
|
|
93
94
|
var RestoreInProgressError = class extends Error {
|
|
94
95
|
static {
|
|
95
96
|
__name(this, "RestoreInProgressError");
|
|
@@ -97,14 +98,21 @@ var RestoreInProgressError = class extends Error {
|
|
|
97
98
|
sessionId;
|
|
98
99
|
activeAction;
|
|
99
100
|
requestedAction;
|
|
100
|
-
|
|
101
|
+
reason;
|
|
102
|
+
retryAfterSeconds;
|
|
103
|
+
constructor(sessionId, activeAction, requestedAction, opts) {
|
|
104
|
+
const reason = opts?.reason ?? "restore_in_progress";
|
|
105
|
+
const retryTarget = requestedAction === "spawn" ? "the spawn" : `session/${requestedAction}`;
|
|
106
|
+
const activeTarget = activeAction === "spawn" ? "a caller-supplied-id spawn" : `session/${activeAction}`;
|
|
101
107
|
super(
|
|
102
|
-
`Session "${sessionId}" is already being restored via
|
|
108
|
+
reason === "awaiting_abandoned_cleanup" ? `Session "${sessionId}" timed out during ${activeTarget} and its abandoned restore has not settled yet; retry ${retryTarget} once cleanup completes` : activeAction === "spawn" ? `Session "${sessionId}" is already being registered by ${activeTarget}; retry ${retryTarget} after it completes` : `Session "${sessionId}" is already being restored via ${activeTarget}; retry ${retryTarget} after it completes`
|
|
103
109
|
);
|
|
104
110
|
this.name = "RestoreInProgressError";
|
|
105
111
|
this.sessionId = sessionId;
|
|
106
112
|
this.activeAction = activeAction;
|
|
107
113
|
this.requestedAction = requestedAction;
|
|
114
|
+
this.reason = reason;
|
|
115
|
+
this.retryAfterSeconds = opts?.retryAfterSeconds ?? RESTORE_IN_PROGRESS_RETRY_AFTER_SECONDS;
|
|
108
116
|
}
|
|
109
117
|
};
|
|
110
118
|
var InvalidSessionScopeError = class extends Error {
|
|
@@ -394,6 +402,27 @@ var WorkspaceDrainingError = class extends Error {
|
|
|
394
402
|
this.workspaceCwd = workspaceCwd;
|
|
395
403
|
}
|
|
396
404
|
};
|
|
405
|
+
var BridgeChannelQuarantinedError = class extends Error {
|
|
406
|
+
static {
|
|
407
|
+
__name(this, "BridgeChannelQuarantinedError");
|
|
408
|
+
}
|
|
409
|
+
reason;
|
|
410
|
+
/**
|
|
411
|
+
* How long the caller should wait before retrying fresh session work. This
|
|
412
|
+
* state persists until the workspace channel drains, which is at least a
|
|
413
|
+
* restore budget away — the ordinary 5-second cadence would poll identical
|
|
414
|
+
* 503s, and a fresh id never reaches the 409 that carries the real hint.
|
|
415
|
+
*/
|
|
416
|
+
retryAfterSeconds;
|
|
417
|
+
constructor(reason = "restore_cleanup_failed", retryAfterSeconds = RESTORE_IN_PROGRESS_RETRY_AFTER_SECONDS) {
|
|
418
|
+
super(
|
|
419
|
+
reason === "restore_settlement_overdue" ? "The ACP channel is unavailable for new sessions while an abandoned session restore has not settled" : "The ACP channel is unavailable for new sessions while timed-out restore cleanup is pending"
|
|
420
|
+
);
|
|
421
|
+
this.name = "BridgeChannelQuarantinedError";
|
|
422
|
+
this.reason = reason;
|
|
423
|
+
this.retryAfterSeconds = retryAfterSeconds;
|
|
424
|
+
}
|
|
425
|
+
};
|
|
397
426
|
var InvalidRewindTargetError = class extends Error {
|
|
398
427
|
static {
|
|
399
428
|
__name(this, "InvalidRewindTargetError");
|
|
@@ -463,6 +492,7 @@ export {
|
|
|
463
492
|
McpServerRestartFailedError,
|
|
464
493
|
SessionBusyError,
|
|
465
494
|
WorkspaceDrainingError,
|
|
495
|
+
BridgeChannelQuarantinedError,
|
|
466
496
|
InvalidRewindTargetError,
|
|
467
497
|
BranchWhilePromptActiveError,
|
|
468
498
|
CdWhilePromptActiveError
|
|
@@ -23,10 +23,11 @@ import {
|
|
|
23
23
|
} from "./chunk-BKHCW2BI.js";
|
|
24
24
|
import {
|
|
25
25
|
loadSettings
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-JUWS2Z5K.js";
|
|
27
27
|
import {
|
|
28
|
-
MCP_BUDGET_WARN_FRACTION
|
|
29
|
-
|
|
28
|
+
MCP_BUDGET_WARN_FRACTION,
|
|
29
|
+
sleepInhibitor
|
|
30
|
+
} from "./chunk-XX7QFP34.js";
|
|
30
31
|
import {
|
|
31
32
|
parsePositiveIntegerEnv
|
|
32
33
|
} from "./chunk-6PVPNMXU.js";
|
|
@@ -38,7 +39,8 @@ import {
|
|
|
38
39
|
MEMORY_PROJECT_SCOPES
|
|
39
40
|
} from "./chunk-FVKHVJZQ.js";
|
|
40
41
|
import {
|
|
41
|
-
writeStderrLine
|
|
42
|
+
writeStderrLine,
|
|
43
|
+
writeStdoutLine
|
|
42
44
|
} from "./chunk-KGJGEEVR.js";
|
|
43
45
|
import {
|
|
44
46
|
init_esbuild_shims
|
|
@@ -49,11 +51,52 @@ import {
|
|
|
49
51
|
|
|
50
52
|
// packages/cli/src/commands/serve.ts
|
|
51
53
|
init_esbuild_shims();
|
|
54
|
+
import { randomBytes } from "node:crypto";
|
|
55
|
+
import { networkInterfaces } from "node:os";
|
|
52
56
|
function blockForever() {
|
|
53
57
|
return new Promise(() => {
|
|
54
58
|
});
|
|
55
59
|
}
|
|
56
60
|
__name(blockForever, "blockForever");
|
|
61
|
+
var DEFAULT_SERVE_HOSTNAME = "127.0.0.1";
|
|
62
|
+
function localControlUrls(baseUrl, token, interfaces = networkInterfaces()) {
|
|
63
|
+
const urls = [];
|
|
64
|
+
for (const [interfaceName, addresses] of Object.entries(interfaces).sort()) {
|
|
65
|
+
for (const address of addresses ?? []) {
|
|
66
|
+
if (address.family !== "IPv4" || address.internal) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const target = new URL(baseUrl);
|
|
70
|
+
target.hostname = address.address;
|
|
71
|
+
target.hash = `token=${encodeURIComponent(token)}`;
|
|
72
|
+
urls.push({ interfaceName, url: target.toString() });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return urls;
|
|
76
|
+
}
|
|
77
|
+
__name(localControlUrls, "localControlUrls");
|
|
78
|
+
async function showLocalControlPairing(handle, urls) {
|
|
79
|
+
await handle.runtimeReady;
|
|
80
|
+
if (!handle.webShellMounted || !handle.resolvedToken) {
|
|
81
|
+
throw new Error("Local Control requires the authenticated Web Shell.");
|
|
82
|
+
}
|
|
83
|
+
const { default: qrcode } = await import("./main-PXAUXNF2.js");
|
|
84
|
+
qrcode.setErrorLevel("Q");
|
|
85
|
+
writeStdoutLine(
|
|
86
|
+
"\nLocal Control is on. Scan a QR code from the same network:"
|
|
87
|
+
);
|
|
88
|
+
for (const entry of urls) {
|
|
89
|
+
writeStdoutLine(`
|
|
90
|
+
${entry.interfaceName}: ${entry.url}`);
|
|
91
|
+
qrcode.generate(entry.url, { small: true }, (code) => {
|
|
92
|
+
writeStdoutLine(code.trimEnd());
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
writeStdoutLine(
|
|
96
|
+
"\nKeep this terminal open. Restart after changing networks. Sleep inhibition is best effort. Traffic is encrypted only when --tls-cert and --tls-key are set. Press Ctrl+C to turn Local Control off."
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
__name(showLocalControlPairing, "showLocalControlPairing");
|
|
57
100
|
async function maybeOpenWebShellBrowser(handle, open) {
|
|
58
101
|
if (!open || !handle.webShellMounted || !shouldLaunchBrowser()) return;
|
|
59
102
|
try {
|
|
@@ -96,7 +139,7 @@ var serveCommand = {
|
|
|
96
139
|
description: "TCP port to bind (use 0 for an OS-assigned ephemeral port)"
|
|
97
140
|
}).option("hostname", {
|
|
98
141
|
type: "string",
|
|
99
|
-
default:
|
|
142
|
+
default: DEFAULT_SERVE_HOSTNAME,
|
|
100
143
|
description: "Interface to bind. Loopback (127.0.0.1, localhost, ::1, [::1]) is auth-free; anything else requires a token."
|
|
101
144
|
}).option("token", {
|
|
102
145
|
type: "string",
|
|
@@ -155,6 +198,27 @@ var serveCommand = {
|
|
|
155
198
|
type: "boolean",
|
|
156
199
|
default: false,
|
|
157
200
|
description: "Open the Web Shell in a browser once the daemon is listening. With a token configured, the launch URL (token included) is handed to the browser launcher and is visible in the process list, so prefer opening the URL manually on multi-user hosts. No-op with --no-web, when the UI assets are absent, or in headless/CI/SSH environments."
|
|
201
|
+
}).option("local-control", {
|
|
202
|
+
type: "boolean",
|
|
203
|
+
default: false,
|
|
204
|
+
description: "Share the Web Shell on the local IPv4 network with a fresh token, terminal QR code, and best-effort sleep inhibition. Press Ctrl+C to turn it off."
|
|
205
|
+
}).check((argv) => {
|
|
206
|
+
if (argv["local-control"] === true && argv.token !== void 0) {
|
|
207
|
+
throw new Error("Local Control generates its own token.");
|
|
208
|
+
}
|
|
209
|
+
if (argv["local-control"] === true && argv["allow-origin"] !== void 0) {
|
|
210
|
+
throw new Error("Local Control manages its browser origins.");
|
|
211
|
+
}
|
|
212
|
+
if (argv["local-control"] === true && argv["web"] === false) {
|
|
213
|
+
throw new Error("Local Control requires the Web Shell.");
|
|
214
|
+
}
|
|
215
|
+
if (argv["local-control"] === true && (!Number.isInteger(argv["port"]) || argv["port"] < 1 || argv["port"] > 65535)) {
|
|
216
|
+
throw new Error("Local Control requires a fixed port.");
|
|
217
|
+
}
|
|
218
|
+
if (argv["local-control"] === true && argv.hostname !== DEFAULT_SERVE_HOSTNAME) {
|
|
219
|
+
throw new Error("Local Control manages its hostname.");
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
158
222
|
}).option("event-ring-size", {
|
|
159
223
|
type: "number",
|
|
160
224
|
// Single source of truth — `DEFAULT_RING_SIZE` is also what
|
|
@@ -170,11 +234,11 @@ var serveCommand = {
|
|
|
170
234
|
}).option("max-journal-events", {
|
|
171
235
|
type: "number",
|
|
172
236
|
default: DEFAULT_MAX_JOURNAL_EVENTS,
|
|
173
|
-
description: "Per-session cap on
|
|
237
|
+
description: "Per-session cap on replay entries retained in the in-flight live journal (current unfinished turn). Compatible text/thought chunks share bounded entries. When exceeded, the oldest entries are dropped. Must be a positive safe integer."
|
|
174
238
|
}).option("max-journal-bytes", {
|
|
175
239
|
type: "number",
|
|
176
240
|
default: DEFAULT_MAX_JOURNAL_BYTES,
|
|
177
|
-
description: "Per-session byte cap on the in-flight live journal. When exceeded, the oldest entries are dropped (at least one is always kept). Must be a positive safe integer."
|
|
241
|
+
description: "Per-session source-event byte cap on the in-flight live journal. When exceeded, the oldest entries are dropped whole (at least one is always kept), so the retained tail can be much smaller than the cap. Must be a positive safe integer."
|
|
178
242
|
}).option("http-bridge", {
|
|
179
243
|
type: "boolean",
|
|
180
244
|
default: true,
|
|
@@ -216,6 +280,9 @@ var serveCommand = {
|
|
|
216
280
|
}).option("initialize-timeout-ms", {
|
|
217
281
|
type: "number",
|
|
218
282
|
description: "ACP child request timeout, including the initialize handshake (ms). Default: 10000 (10 s)."
|
|
283
|
+
}).option("session-restore-timeout-ms", {
|
|
284
|
+
type: "number",
|
|
285
|
+
description: "ACP session load/resume timeout (ms). Default: 60000. An explicit --initialize-timeout-ms can raise (but never lower) this default."
|
|
219
286
|
}).option("session-reap-interval-ms", {
|
|
220
287
|
type: "number",
|
|
221
288
|
description: "Session reaper scan interval (ms). 0 = disabled. Default: 60000."
|
|
@@ -354,12 +421,23 @@ var serveCommand = {
|
|
|
354
421
|
}
|
|
355
422
|
const externalToolGuardToken = process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV] ?? "";
|
|
356
423
|
delete process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV];
|
|
357
|
-
const { runQwenServe } = await import("./run-qwen-serve-
|
|
424
|
+
const { runQwenServe } = await import("./run-qwen-serve-ZYGJNE3E.js");
|
|
358
425
|
try {
|
|
426
|
+
const localControlToken = argv["local-control"] ? randomBytes(32).toString("base64url") : void 0;
|
|
427
|
+
const localControlPairing = localControlToken ? localControlUrls(
|
|
428
|
+
`${argv["tls-cert"] ? "https" : "http"}://0.0.0.0:${argv.port}/`,
|
|
429
|
+
localControlToken
|
|
430
|
+
) : [];
|
|
431
|
+
if (argv["local-control"] && localControlPairing.length === 0) {
|
|
432
|
+
throw new Error(
|
|
433
|
+
"Local Control could not find a non-loopback IPv4 address."
|
|
434
|
+
);
|
|
435
|
+
}
|
|
359
436
|
const handle = await runQwenServe({
|
|
360
437
|
port: argv.port,
|
|
361
|
-
|
|
362
|
-
|
|
438
|
+
strictPort: argv["local-control"],
|
|
439
|
+
hostname: argv["local-control"] ? "0.0.0.0" : argv.hostname,
|
|
440
|
+
token: localControlToken ?? argv.token,
|
|
363
441
|
mode: "http-bridge",
|
|
364
442
|
maxSessions: argv["max-sessions"],
|
|
365
443
|
...argv["max-total-sessions"] !== void 0 ? { maxTotalSessions: argv["max-total-sessions"] } : {},
|
|
@@ -382,11 +460,20 @@ var serveCommand = {
|
|
|
382
460
|
...memoryBudgetMb !== void 0 ? { memoryBudgetMb } : {},
|
|
383
461
|
memoryPressureMode: argv["memory-pressure-mode"],
|
|
384
462
|
childHeapMode: argv["child-heap-mode"],
|
|
385
|
-
...argv["
|
|
463
|
+
...argv["local-control"] ? {
|
|
464
|
+
allowOrigins: localControlPairing.map(({ url }) => new URL(url).origin).concat(
|
|
465
|
+
new URL(
|
|
466
|
+
`${argv["tls-cert"] ? "https" : "http"}://127.0.0.1:${argv.port}`
|
|
467
|
+
).origin
|
|
468
|
+
)
|
|
469
|
+
} : argv["allow-origin"] && argv["allow-origin"].length > 0 ? { allowOrigins: argv["allow-origin"] } : {},
|
|
386
470
|
...argv["prompt-deadline-ms"] !== void 0 ? { promptDeadlineMs: argv["prompt-deadline-ms"] } : {},
|
|
387
471
|
...argv["writer-idle-timeout-ms"] !== void 0 ? { writerIdleTimeoutMs: argv["writer-idle-timeout-ms"] } : {},
|
|
388
472
|
...argv["channel-idle-timeout-ms"] !== void 0 ? { channelIdleTimeoutMs: argv["channel-idle-timeout-ms"] } : {},
|
|
389
473
|
...argv["initialize-timeout-ms"] !== void 0 ? { initializeTimeoutMs: argv["initialize-timeout-ms"] } : {},
|
|
474
|
+
...argv["session-restore-timeout-ms"] !== void 0 ? {
|
|
475
|
+
sessionRestoreTimeoutMs: argv["session-restore-timeout-ms"]
|
|
476
|
+
} : {},
|
|
390
477
|
...argv["session-reap-interval-ms"] !== void 0 ? { sessionReapIntervalMs: argv["session-reap-interval-ms"] } : {},
|
|
391
478
|
...argv["session-idle-timeout-ms"] !== void 0 ? { sessionIdleTimeoutMs: argv["session-idle-timeout-ms"] } : {},
|
|
392
479
|
...argv["permission-response-timeout-ms"] !== void 0 ? {
|
|
@@ -410,6 +497,15 @@ var serveCommand = {
|
|
|
410
497
|
...argv.experimentalLsp === true ? { experimentalLsp: true } : {},
|
|
411
498
|
...channelSelection !== void 0 ? { channelSelection } : {}
|
|
412
499
|
});
|
|
500
|
+
if (argv["local-control"]) {
|
|
501
|
+
try {
|
|
502
|
+
await showLocalControlPairing(handle, localControlPairing);
|
|
503
|
+
sleepInhibitor.acquire("Qwen Code Local Control is active");
|
|
504
|
+
} catch (err) {
|
|
505
|
+
await handle.close().catch(() => void 0);
|
|
506
|
+
throw err;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
413
509
|
await maybeOpenWebShellBrowser(handle, argv.open);
|
|
414
510
|
} catch (err) {
|
|
415
511
|
writeStderrLine(
|
|
@@ -422,6 +518,7 @@ var serveCommand = {
|
|
|
422
518
|
};
|
|
423
519
|
|
|
424
520
|
export {
|
|
521
|
+
localControlUrls,
|
|
425
522
|
maybeOpenWebShellBrowser,
|
|
426
523
|
serveCommand
|
|
427
524
|
};
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
createWorkerDiagnosticRedactor,
|
|
36
36
|
normalizeWorkerDiagnostic,
|
|
37
37
|
sanitizeWorkerDiagnostic
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-PBRVUF5B.js";
|
|
39
39
|
import {
|
|
40
40
|
channelSelectionNames
|
|
41
41
|
} from "./chunk-ALMR3E6Q.js";
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
} from "./chunk-5HBA2Z7V.js";
|
|
50
50
|
import {
|
|
51
51
|
sanitizeLogText
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-DX3RGJMS.js";
|
|
53
53
|
import {
|
|
54
54
|
init_esbuild_shims
|
|
55
55
|
} from "./chunk-5O2XNYP6.js";
|