@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.
Files changed (258) hide show
  1. package/README.md +2 -1
  2. package/bundled/qc-helper/docs/configuration/settings.md +32 -30
  3. package/bundled/qc-helper/docs/extension/introduction.md +15 -1
  4. package/bundled/qc-helper/docs/features/code-review.md +2 -0
  5. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
  6. package/bundled/qc-helper/docs/qwen-serve.md +42 -39
  7. package/bundled/review/SKILL.md +11 -7
  8. package/chunks/{MaxSizedBox-7PM6BGJ5.js → MaxSizedBox-6BZANW7X.js} +9 -9
  9. package/chunks/{StandaloneSessionPicker-3UQHM7GV.js → StandaloneSessionPicker-VDC5KE7T.js} +28 -25
  10. package/chunks/{acpAgent-5UWLFV6V.js → acpAgent-F2NSBCUF.js} +1433 -706
  11. package/chunks/{agent-624T2BLO.js → agent-VOHJOEBB.js} +8 -8
  12. package/chunks/{agent-headless-2EE5J2KX.js → agent-headless-J5NFOPHP.js} +8 -8
  13. package/chunks/{bridge-JENKGFFP.js → bridge-NQIZZLAS.js} +13 -13
  14. package/chunks/{channel-management-service-DDWUPHMU.js → channel-management-service-PHELKOW2.js} +4 -4
  15. package/chunks/{channel-settings-store-SA6JZSPH.js → channel-settings-store-VIY2OENO.js} +17 -15
  16. package/chunks/{channel-worker-group-E67EN3RV.js → channel-worker-group-MSHT6CWR.js} +6 -6
  17. package/chunks/{channel-worker-manager-SW4C45CF.js → channel-worker-manager-XXD3GDSK.js} +6 -6
  18. package/chunks/{channel-worker-supervisor-5SRD24FG.js → channel-worker-supervisor-IVSDIMI4.js} +4 -4
  19. package/chunks/{chunk-S3Y3GBFD.js → chunk-23VQTELM.js} +2 -2
  20. package/chunks/{chunk-XZKQT2B2.js → chunk-3WDYBTTI.js} +5 -5
  21. package/chunks/{chunk-YEF7XEO2.js → chunk-3XVDTHBJ.js} +3 -3
  22. package/chunks/{chunk-IBYULW65.js → chunk-46YJDYCU.js} +145 -10
  23. package/chunks/chunk-4JRM2BSM.js +48 -0
  24. package/chunks/{chunk-L4N6TIP7.js → chunk-4TRQPFDP.js} +4 -2
  25. package/chunks/{chunk-5ZGR6RKJ.js → chunk-4XQNB3KN.js} +3 -3
  26. package/chunks/chunk-5EJZE3FP.js +140 -0
  27. package/chunks/{chunk-XHD7CRP2.js → chunk-5RBDAGC6.js} +2 -2
  28. package/chunks/{chunk-KJZ26VBX.js → chunk-67EWJE77.js} +1 -1
  29. package/chunks/{chunk-TE3ZAJE7.js → chunk-6Q5ABMTU.js} +1 -1
  30. package/chunks/{chunk-U5SLIG7E.js → chunk-7AEPJGL4.js} +1 -1
  31. package/chunks/{chunk-OHKJVAKG.js → chunk-7GOYZQPR.js} +20 -1977
  32. package/chunks/{chunk-3SE7J4DR.js → chunk-7S4JBJLU.js} +3 -3
  33. package/chunks/{chunk-TKSZJ5BV.js → chunk-AKJQSWV4.js} +3 -3
  34. package/chunks/{chunk-E4ZBKMSF.js → chunk-ATMO54WE.js} +6 -6
  35. package/chunks/{chunk-KKDVZLGL.js → chunk-BAMN6XSD.js} +1 -1
  36. package/chunks/{chunk-IUQ52YJK.js → chunk-BIRWP6LU.js} +1 -1
  37. package/chunks/{chunk-AKA24BGO.js → chunk-BT6GQIEJ.js} +1 -1
  38. package/chunks/{chunk-ZCLLJARV.js → chunk-BZP4QPNK.js} +10 -10
  39. package/chunks/{chunk-2M5N3DHY.js → chunk-CMOBWHWW.js} +1 -1
  40. package/chunks/{chunk-WV5J6Q6N.js → chunk-D7BXVKSF.js} +1 -1
  41. package/chunks/{chunk-NLREQJFK.js → chunk-DA4HRSBW.js} +15 -0
  42. package/chunks/{chunk-GOEVOFQI.js → chunk-DH5YXSIF.js} +3 -3
  43. package/chunks/{chunk-DIWZNWZT.js → chunk-DX3RGJMS.js} +13 -2
  44. package/chunks/{chunk-PLFATELK.js → chunk-DZUO626D.js} +1 -1
  45. package/chunks/{chunk-NGYI5EF5.js → chunk-E2FPSSKP.js} +8 -8
  46. package/chunks/{chunk-ZPLALRXZ.js → chunk-FBMCDU63.js} +4 -137
  47. package/chunks/{chunk-2ILAOM2I.js → chunk-FCLHHEUK.js} +17 -16
  48. package/chunks/{chunk-SNRT2TJJ.js → chunk-G2TX5ZXC.js} +3 -3
  49. package/chunks/{chunk-C5VWPTGT.js → chunk-GAKGOXTC.js} +1 -1
  50. package/chunks/{chunk-QQWD7LZV.js → chunk-HADWBW5R.js} +4 -4
  51. package/chunks/{chunk-77QVBFCU.js → chunk-HZGBKOX3.js} +3 -3
  52. package/chunks/{chunk-RPWVIXDB.js → chunk-I5VM3SKY.js} +4 -4
  53. package/chunks/{chunk-7VUERJHS.js → chunk-II6G3EY6.js} +325 -104
  54. package/chunks/{chunk-FN6YXJOP.js → chunk-IOEZE2YT.js} +1 -1
  55. package/chunks/chunk-JUWS2Z5K.js +1995 -0
  56. package/chunks/{chunk-VXZ5HAOV.js → chunk-K4ADGWHU.js} +1 -1
  57. package/chunks/{chunk-YOM7DEGB.js → chunk-KSAFZ5TA.js} +2 -2
  58. package/chunks/{chunk-KAQCJO6Y.js → chunk-KTKYGS2P.js} +35 -9
  59. package/chunks/{chunk-GBDINRIL.js → chunk-KTQGGPGV.js} +3 -3
  60. package/chunks/{chunk-6M26GBKX.js → chunk-L2AFWWJE.js} +42 -3
  61. package/chunks/{chunk-QXVSWG66.js → chunk-LHEC5V6G.js} +2 -2
  62. package/chunks/{chunk-J26HHFI5.js → chunk-LP2QGNSP.js} +32 -2
  63. package/chunks/{chunk-HWX5HPUG.js → chunk-LZZLUCRS.js} +108 -11
  64. package/chunks/{chunk-KTJFU7RT.js → chunk-MFDYOYZZ.js} +2 -2
  65. package/chunks/{chunk-3WNQOYHQ.js → chunk-MHP476D3.js} +74 -31
  66. package/chunks/{chunk-Y4TETC74.js → chunk-MTCYGTWH.js} +4 -4
  67. package/chunks/{chunk-EN2TKTFH.js → chunk-NV3F44FL.js} +6 -2
  68. package/chunks/{chunk-BF52U4XJ.js → chunk-OGDIJKHK.js} +1 -1
  69. package/chunks/{chunk-7DVT4LVV.js → chunk-OGNFHGIG.js} +3 -3
  70. package/chunks/{chunk-IYES5WOT.js → chunk-P2FK2HBV.js} +2 -2
  71. package/chunks/{chunk-2M4K4KYS.js → chunk-P3RBMQ4P.js} +4 -4
  72. package/chunks/{chunk-FYAXKJK7.js → chunk-P4ZEZSJZ.js} +692 -106
  73. package/chunks/{chunk-UFALT4LK.js → chunk-PBRVUF5B.js} +1 -1
  74. package/chunks/{chunk-LKRMNRSN.js → chunk-PDPFQ2FO.js} +2 -0
  75. package/chunks/{chunk-6TR7CFXH.js → chunk-PNBBJOCP.js} +1 -1
  76. package/chunks/{chunk-M3STHEMM.js → chunk-PVOGHGSF.js} +5 -5
  77. package/chunks/{chunk-4WU6NY7F.js → chunk-QSNSL4R4.js} +2 -2
  78. package/chunks/{chunk-DQSDACD2.js → chunk-RBHQXGDK.js} +1 -1
  79. package/chunks/{chunk-ZHA242R4.js → chunk-RVSTTOJ4.js} +2 -2
  80. package/chunks/{chunk-EIVICVHM.js → chunk-SCAZZ3Q4.js} +4 -4
  81. package/chunks/{chunk-BF224XHL.js → chunk-T5RLUXWJ.js} +2 -2
  82. package/chunks/{chunk-B52AWKBB.js → chunk-T6HEQR2Q.js} +16 -5
  83. package/chunks/{chunk-FWBXMANW.js → chunk-THIKWITR.js} +3 -3
  84. package/chunks/{chunk-WG6542MA.js → chunk-TQCYNLNJ.js} +1 -1
  85. package/chunks/chunk-TQOF5KBL.js +71 -0
  86. package/chunks/{chunk-NPUXXRJI.js → chunk-TZ6KJ44L.js} +1 -1
  87. package/chunks/{chunk-YHJFF7KH.js → chunk-UJUM2SRN.js} +147 -47
  88. package/chunks/{chunk-4ALIARFY.js → chunk-UYAUA63Q.js} +1 -1
  89. package/chunks/chunk-VFMASYQA.js +389 -0
  90. package/chunks/chunk-VGHZT6JR.js +51 -0
  91. package/chunks/{chunk-ZWBUH5UP.js → chunk-VKJ4KTPJ.js} +1 -1
  92. package/chunks/{chunk-QGHSP65Z.js → chunk-VNNWAZSI.js} +2 -2
  93. package/chunks/{chunk-757GB46F.js → chunk-W3FSZSF2.js} +1 -1
  94. package/chunks/{chunk-GQCEQPYQ.js → chunk-WGK4TSB7.js} +3 -3
  95. package/chunks/{chunk-PG62DFWD.js → chunk-WP5VOXF7.js} +6 -127
  96. package/chunks/{chunk-NVRDQFCX.js → chunk-XTY5DN4Y.js} +1 -1
  97. package/chunks/{chunk-GXSNGY5M.js → chunk-XX7QFP34.js} +1677 -1307
  98. package/chunks/{chunk-3PY4LPJF.js → chunk-YGT2AUJ7.js} +84 -4
  99. package/chunks/{chunk-4DU3NCHG.js → chunk-YTFDX4PR.js} +8 -3
  100. package/chunks/{chunk-OA4JVLSA.js → chunk-Z7VOMGDC.js} +22 -1
  101. package/chunks/{chunk-DX5W5AON.js → chunk-ZBXGWQ4S.js} +3 -3
  102. package/chunks/chunk-ZLBIFIMV.js +1099 -0
  103. package/chunks/{chunk-HA3SAB64.js → chunk-ZOSTTOUJ.js} +1 -1
  104. package/chunks/{chunk-VWMUDKLC.js → chunk-ZTQSOV56.js} +4 -4
  105. package/chunks/{computer-use-ESQYJ3JY.js → computer-use-PMZ7ICGY.js} +8 -8
  106. package/chunks/{config-utils-XQHBJP7G.js → config-utils-ULCSRMWD.js} +4 -4
  107. package/chunks/{contextCommand-CX3YF4ZE.js → contextCommand-GEZU7YHE.js} +11 -10
  108. package/chunks/{core-runtime-DIAU7JMG.js → core-runtime-HRJI2MN6.js} +8 -8
  109. package/chunks/{create-sub-session-HDPD6HOA.js → create-sub-session-VBNVI4YU.js} +9 -9
  110. package/chunks/{daemon-VZBGJUNL.js → daemon-POSQPD3G.js} +115 -7
  111. package/chunks/{daemon-status-provider-H6O4UQ4F.js → daemon-status-provider-N4CRQKFI.js} +18 -18
  112. package/chunks/{daemon-trust-policy-BNUXG6MT.js → daemon-trust-policy-BHO3JUHM.js} +16 -14
  113. package/chunks/{daemon-trust-policy-monitor-E4EQ7GF4.js → daemon-trust-policy-monitor-YEKJ2726.js} +16 -14
  114. package/chunks/{deferred-core-runtime-CBMSHPAU.js → deferred-core-runtime-SH57E3J3.js} +8 -8
  115. package/chunks/{dist-KVISB2O2.js → dist-3NTTUAHT.js} +1 -1
  116. package/chunks/{dist-RCH3I7SS.js → dist-6BMOAE3Z.js} +2 -2
  117. package/chunks/{dist-IRL7WA5Z.js → dist-B2CGTW6T.js} +1 -1
  118. package/chunks/{dist-TUSWNE2I.js → dist-EWW3J4HQ.js} +1 -1
  119. package/chunks/{dist-HIACTZEK.js → dist-EZE3V3Q7.js} +1 -1
  120. package/chunks/{dist-EEEQGCZA.js → dist-J47AXBZC.js} +1 -1
  121. package/chunks/{dist-MKX5OSFF.js → dist-OTUO3AS2.js} +4 -1088
  122. package/chunks/{dist-MBF3I5MX.js → dist-Z3CS4OVP.js} +1 -1
  123. package/chunks/{earlyInputCapture-UIOP7OIN.js → earlyInputCapture-B2JJ2HME.js} +8 -8
  124. package/chunks/{edit-ITMZYFKA.js → edit-7FTXENAN.js} +10 -8
  125. package/chunks/{enter-worktree-S4PL5UV6.js → enter-worktree-JPHV2PBG.js} +8 -8
  126. package/chunks/{enterPlanMode-YV52NNJT.js → enterPlanMode-CGBJ3AHJ.js} +8 -8
  127. package/chunks/{environment-NGOWPRZV.js → environment-LXASZAHD.js} +11 -11
  128. package/chunks/{errors-BU26DTDX.js → errors-XIGVT2AD.js} +10 -10
  129. package/chunks/{exit-worktree-XRM6LH5F.js → exit-worktree-DKSGXW65.js} +8 -8
  130. package/chunks/{exitPlanMode-ZLI5F7KR.js → exitPlanMode-THFL2HYN.js} +8 -8
  131. package/chunks/{fast-path-UJWORIED.js → fast-path-4NXAT5UL.js} +4 -3
  132. package/chunks/{fast-path-settings-37WQD5B2.js → fast-path-settings-RPAVBD7P.js} +2 -2
  133. package/chunks/{gemini-ZSKNDUMU.js → gemini-B3N6FACU.js} +56 -60
  134. package/chunks/{geminiContentGenerator-YGEXOEKD.js → geminiContentGenerator-YYFE2HIE.js} +1 -1
  135. package/chunks/{glob-7KZG44BR.js → glob-BPHSCFJP.js} +8 -8
  136. package/chunks/{grep-6ZFC7RJ5.js → grep-ROZIRFLU.js} +8 -8
  137. package/chunks/{handleAutoUpdate-KSEL3TQS.js → handleAutoUpdate-WV6SPZQB.js} +13 -12
  138. package/chunks/{i18n-ZIUXBW5V.js → i18n-YWJWPQKD.js} +13 -11
  139. package/chunks/{image-gen-AUIZJJNK.js → image-gen-SISRZ6FS.js} +1 -1
  140. package/chunks/{initializer-7AHY3N6Q.js → initializer-66OAD6GO.js} +16 -14
  141. package/chunks/{installationInfo-VGBXMYLY.js → installationInfo-3YUGIP36.js} +9 -9
  142. package/chunks/{list-PSFKQHLB.js → list-VEYR66XB.js} +19 -17
  143. package/chunks/{loadedSettingsAdapter-FTMRCTOF.js → loadedSettingsAdapter-V2JCPCYD.js} +16 -14
  144. package/chunks/{loggingContentGenerator-MZAN52UV.js → loggingContentGenerator-RBLNDREC.js} +6 -6
  145. package/chunks/main-PXAUXNF2.js +8 -0
  146. package/chunks/{managed-npm-update-O4NHK45X.js → managed-npm-update-C5ID5R4R.js} +9 -9
  147. package/chunks/{mcp-6CFP2AYQ.js → mcp-OZ54NZJQ.js} +16 -14
  148. package/chunks/{monitor-DAKD6OU4.js → monitor-7Y4TVFTK.js} +18 -14
  149. package/chunks/{nonInteractiveCli-RC7VIUZL.js → nonInteractiveCli-QEK4LHAC.js} +51 -49
  150. package/chunks/{notebook-edit-474DPMRL.js → notebook-edit-OG35EBGY.js} +9 -8
  151. package/chunks/{openaiContentGenerator-2NFY2MWO.js → openaiContentGenerator-443BNRPJ.js} +5 -5
  152. package/chunks/{pidfile-KBFVDNQP.js → pidfile-ZK4OLRZA.js} +8 -8
  153. package/chunks/{processUtils-6GRYH4Y3.js → processUtils-4YGB4RUZ.js} +2 -2
  154. package/chunks/{qwenContentGenerator-KAHU6IZY.js → qwenContentGenerator-D5C2LCSZ.js} +9 -9
  155. package/chunks/{qwenOAuth2-RRQTCP4W.js → qwenOAuth2-Z4YQBMYN.js} +1 -1
  156. package/chunks/{read-file-3M6WXDXP.js → read-file-EXTJLWMU.js} +4 -4
  157. package/chunks/{resumeHistoryUtils-D6TAY3HX.js → resumeHistoryUtils-UPCGRJUL.js} +13 -12
  158. package/chunks/{ripGrep-PLPENT3E.js → ripGrep-QBVIRCU4.js} +8 -8
  159. package/chunks/{run-qwen-serve-ZAFIJKJC.js → run-qwen-serve-ZYGJNE3E.js} +169 -68
  160. package/chunks/{runtime-ZED7CYOZ.js → runtime-BZZ4LWCP.js} +21 -19
  161. package/chunks/{scheduler-MD3AL2W5.js → scheduler-YNQNOU2E.js} +135 -15
  162. package/chunks/{sdk-exporters-http-KHAB5JSD.js → sdk-exporters-http-XVTZQRCE.js} +2 -2
  163. package/chunks/{sdk-impl-KD7FSTC3.js → sdk-impl-7W7AKCS4.js} +7 -3
  164. package/chunks/{serve-E3VUDRZN.js → serve-LJHAXDCH.js} +18 -14
  165. package/chunks/{server-OWMEMAKR.js → server-ADMLELR6.js} +1229 -1098
  166. package/chunks/{session-HZ57QK7K.js → session-YKZXFFTM.js} +55 -53
  167. package/chunks/{settings-V7BR3RKP.js → settings-EQBUAQ7Y.js} +15 -13
  168. package/chunks/{shell-23OMNMW6.js → shell-3QZOJGTT.js} +8 -8
  169. package/chunks/{skill-6HBDYZRS.js → skill-UWSSMXE7.js} +5 -5
  170. package/chunks/{skill-settings-HWJLTU7M.js → skill-settings-T6MLB7NU.js} +15 -13
  171. package/chunks/{spawnChannel-N6KKUW5B.js → spawnChannel-VS7ZFUFP.js} +11 -11
  172. package/chunks/{standalone-update-QGIKHATD.js → standalone-update-2W26SRRO.js} +11 -10
  173. package/chunks/{startInteractiveUI-GX2CRL42.js → startInteractiveUI-CVS7K3D6.js} +86 -75
  174. package/chunks/{team-create-CFFKU7KL.js → team-create-4WFTNNUL.js} +8 -8
  175. package/chunks/{team-plan-approval-6EFOKR6A.js → team-plan-approval-DBYI33S3.js} +8 -8
  176. package/chunks/{terminal-image-renderer-TLDNACQY.js → terminal-image-renderer-S5WPPQKH.js} +8 -8
  177. package/chunks/{theme-manager-5LJ3H7VO.js → theme-manager-LI2RIOVR.js} +8 -8
  178. package/chunks/{tool-search-UJV3A24H.js → tool-search-4773EUQ4.js} +4 -4
  179. package/chunks/{total-session-admission-D63QYXGO.js → total-session-admission-PAY5CH2Z.js} +16 -15
  180. package/chunks/{trustedFolders-KZCOB53W.js → trustedFolders-FRSLE674.js} +9 -9
  181. package/chunks/{types-ML3TRJQ5.js → types-WYCFCEHR.js} +5 -3
  182. package/chunks/{update-relaunch-IFILM3SA.js → update-relaunch-ZSFQTU6M.js} +5 -5
  183. package/chunks/{updateCheck-YZ2CRCFC.js → updateCheck-AXWSO7KA.js} +12 -11
  184. package/chunks/{useAutoAcceptIndicator-AXEVNA3Q.js → useAutoAcceptIndicator-VHLXIA7U.js} +18 -16
  185. package/chunks/{validateNonInterActiveAuth-3WTOJFWA.js → validateNonInterActiveAuth-PDJECMFU.js} +48 -46
  186. package/chunks/{version-GXK7OHZY.js → version-RBN764QS.js} +1 -1
  187. package/chunks/{web-fetch-ILB4GAVR.js → web-fetch-7BJK42AF.js} +4 -4
  188. package/chunks/{web-search-HKRPGPZZ.js → web-search-L2CILQXV.js} +4 -3
  189. package/chunks/{workflow-FXIPRQQA.js → workflow-5VH2R74I.js} +170 -137
  190. package/chunks/{workspace-providers-status-NYHC7HSR.js → workspace-providers-status-OZTQ6JFH.js} +19 -17
  191. package/chunks/{workspace-registration-store-AKEB7OMW.js → workspace-registration-store-IX5RJQS5.js} +1 -1
  192. package/chunks/{workspace-registry-CDAS5TVZ.js → workspace-registry-73N4BGG4.js} +16 -15
  193. package/chunks/{workspace-service-PAMUKMAV.js → workspace-service-I5RUPSNV.js} +26 -22
  194. package/chunks/{workspace-skills-status-YQSHCCMS.js → workspace-skills-status-DMK6VYDO.js} +17 -15
  195. package/chunks/{workspace-trust-reconciler-RPTXOIY2.js → workspace-trust-reconciler-QX4RL3TC.js} +24 -21
  196. package/chunks/{write-file-CGS57TS4.js → write-file-UGDD5UTS.js} +8 -8
  197. package/chunks/{zoom-image-E7D72GYV.js → zoom-image-ZAHEO3YP.js} +4 -4
  198. package/cli.js +12 -12
  199. package/package.json +3 -3
  200. package/web-shell/assets/{arc-DybZaz32.js → arc-CHY4saMJ.js} +1 -1
  201. package/web-shell/assets/{architectureDiagram-3BPJPVTR-jN3qBd19.js → architectureDiagram-3BPJPVTR-Bu6CwvHj.js} +1 -1
  202. package/web-shell/assets/{blockDiagram-GPEHLZMM-Ct5DZPrj.js → blockDiagram-GPEHLZMM-XGt6iGf_.js} +1 -1
  203. package/web-shell/assets/{c4Diagram-AAUBKEIU-CUAFMlUG.js → c4Diagram-AAUBKEIU-CBbYl19W.js} +1 -1
  204. package/web-shell/assets/channel-B40srHOa.js +1 -0
  205. package/web-shell/assets/{chunk-2J33WTMH-CuV8n90B.js → chunk-2J33WTMH-BEhmVrdx.js} +1 -1
  206. package/web-shell/assets/{chunk-4BX2VUAB-BUzl_kls.js → chunk-4BX2VUAB-fQLyE0Bg.js} +1 -1
  207. package/web-shell/assets/{chunk-55IACEB6-BnDBLX6A.js → chunk-55IACEB6-yGdtyx4a.js} +1 -1
  208. package/web-shell/assets/{chunk-727SXJPM-B83uTOjm.js → chunk-727SXJPM-DYbX2GLo.js} +1 -1
  209. package/web-shell/assets/{chunk-AQP2D5EJ-DM3HLgpT.js → chunk-AQP2D5EJ-DyKTEsYn.js} +1 -1
  210. package/web-shell/assets/{chunk-FMBD7UC4-CSQ5hgyb.js → chunk-FMBD7UC4-D8Uy_GzX.js} +1 -1
  211. package/web-shell/assets/{chunk-ND2GUHAM-BWOF4SxX.js → chunk-ND2GUHAM-C8wNR2K7.js} +1 -1
  212. package/web-shell/assets/{chunk-QZHKN3VN-BsOH9LMi.js → chunk-QZHKN3VN-BnybNxnt.js} +1 -1
  213. package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +1 -0
  214. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +1 -0
  215. package/web-shell/assets/{cose-bilkent-S5V4N54A-IENqH2iJ.js → cose-bilkent-S5V4N54A-jq4uiFRp.js} +1 -1
  216. package/web-shell/assets/{dagre-BM42HDAG--dyzDTGo.js → dagre-BM42HDAG-Bs7oye1U.js} +1 -1
  217. package/web-shell/assets/{diagram-2AECGRRQ-BE7Dcqof.js → diagram-2AECGRRQ-BHGGJNyM.js} +1 -1
  218. package/web-shell/assets/{diagram-5GNKFQAL-Cr8-5OTj.js → diagram-5GNKFQAL-BJezVLGT.js} +1 -1
  219. package/web-shell/assets/{diagram-KO2AKTUF-Bzey3uAY.js → diagram-KO2AKTUF-5JzQN_rL.js} +1 -1
  220. package/web-shell/assets/{diagram-LMA3HP47-sErl28Xb.js → diagram-LMA3HP47-BlPYOgY9.js} +1 -1
  221. package/web-shell/assets/{diagram-OG6HWLK6-Dq30ATIo.js → diagram-OG6HWLK6-CtMHEaFK.js} +1 -1
  222. package/web-shell/assets/{erDiagram-TEJ5UH35-BkCoEfVW.js → erDiagram-TEJ5UH35-CRNdq2AB.js} +1 -1
  223. package/web-shell/assets/{flowDiagram-I6XJVG4X-DHwO0rrI.js → flowDiagram-I6XJVG4X-De1WwLzu.js} +1 -1
  224. package/web-shell/assets/{ganttDiagram-6RSMTGT7-s7vAPxWq.js → ganttDiagram-6RSMTGT7-YbWfL5Zn.js} +1 -1
  225. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CQxhwPOU.js → gitGraphDiagram-PVQCEYII-DzCN8bmd.js} +1 -1
  226. package/web-shell/assets/index-BDOGGGaN.css +5 -0
  227. package/web-shell/assets/{index-CF4wApWp.js → index-CocPvF9Q.js} +1 -1
  228. package/web-shell/assets/index-DSH2KrMc.js +1771 -0
  229. package/web-shell/assets/{infoDiagram-5YYISTIA-BnFrD0bq.js → infoDiagram-5YYISTIA-DLHoopnE.js} +1 -1
  230. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js → ishikawaDiagram-YF4QCWOH-XnbU04SS.js} +1 -1
  231. package/web-shell/assets/{journeyDiagram-JHISSGLW-CyGAhsxi.js → journeyDiagram-JHISSGLW-CipPyEeJ.js} +1 -1
  232. package/web-shell/assets/{kanban-definition-UN3LZRKU-CbsK5akB.js → kanban-definition-UN3LZRKU-DrSeyE5d.js} +1 -1
  233. package/web-shell/assets/{linear-cQsF4P8D.js → linear-LrBKnAo_.js} +1 -1
  234. package/web-shell/assets/{mermaid.core-Z4HVqrKY.js → mermaid.core-C3U9UVmf.js} +5 -5
  235. package/web-shell/assets/{mindmap-definition-RKZ34NQL-CYnrBo_f.js → mindmap-definition-RKZ34NQL-DqRWgC9H.js} +1 -1
  236. package/web-shell/assets/{pieDiagram-4H26LBE5-CBzOfhrs.js → pieDiagram-4H26LBE5-BNXY5p6H.js} +1 -1
  237. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D4LK1Ebn.js → quadrantDiagram-W4KKPZXB-Ccj9QzE4.js} +1 -1
  238. package/web-shell/assets/{requirementDiagram-4Y6WPE33-Bzti2Lcj.js → requirementDiagram-4Y6WPE33-CjPM2_gx.js} +1 -1
  239. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-yTBw5Z2s.js → sankeyDiagram-5OEKKPKP-C0RsvKbj.js} +1 -1
  240. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D07UVRiZ.js → sequenceDiagram-3UESZ5HK-ClN1P5z7.js} +1 -1
  241. package/web-shell/assets/{stateDiagram-AJRCARHV-UE_lHsTn.js → stateDiagram-AJRCARHV-By0eiB2Y.js} +1 -1
  242. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +1 -0
  243. package/web-shell/assets/{timeline-definition-PNZ67QCA-DRvYdiTs.js → timeline-definition-PNZ67QCA-g_iaSQgv.js} +1 -1
  244. package/web-shell/assets/{vennDiagram-CIIHVFJN-CQLIXs0u.js → vennDiagram-CIIHVFJN-y9ZqJ-TD.js} +1 -1
  245. package/web-shell/assets/{wardley-L42UT6IY-JZz_Xqse.js → wardley-L42UT6IY-BVVfaxpF.js} +1 -1
  246. package/web-shell/assets/{wardleyDiagram-YWT4CUSO--i7BiJwB.js → wardleyDiagram-YWT4CUSO-D3ooZKZT.js} +1 -1
  247. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Bkc-bW0S.js → xychartDiagram-2RQKCTM6-6GXrY6M1.js} +1 -1
  248. package/web-shell/index.html +2 -2
  249. package/chunks/chunk-RXFQM6FQ.js +0 -42
  250. package/chunks/chunk-UA5H3DS2.js +0 -203
  251. package/web-shell/assets/channel-BMwLrwLW.js +0 -1
  252. package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +0 -1
  253. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +0 -1
  254. package/web-shell/assets/index-Bckpjr-I.css +0 -5
  255. package/web-shell/assets/index-DwEr9HEW.js +0 -1768
  256. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +0 -1
  257. /package/chunks/{chunk-VXZBKKQR.js → chunk-NTTBXH7U.js} +0 -0
  258. /package/chunks/{chunk-GRC5HGPI.js → chunk-OIBUG24X.js} +0 -0
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  AuthType
5
- } from "./chunk-M3STHEMM.js";
5
+ } from "./chunk-PVOGHGSF.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -2,13 +2,13 @@
2
2
  "use strict";
3
3
  import {
4
4
  useKeypress
5
- } from "./chunk-QGHSP65Z.js";
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-PG62DFWD.js";
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
- isLoopbackBind
5
- } from "./chunk-RXFQM6FQ.js";
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 wfs = factory.forRequest(
838
- buildAuditContext(params, ACP_WRITE_ROUTE)
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") && (p === "/health" || p === "/demo"))
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-GXSNGY5M.js";
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-VXZ5HAOV.js";
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-M3STHEMM.js";
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-LKRMNRSN.js";
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-KD7FSTC3.js");
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.start();
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-KJZ26VBX.js";
5
+ } from "./chunk-67EWJE77.js";
6
6
  import {
7
7
  getPlugin,
8
8
  supportedTypes
9
- } from "./chunk-NGYI5EF5.js";
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
- constructor(sessionId, activeAction, requestedAction) {
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 session/${activeAction}; retry session/${requestedAction} after it completes`
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-OHKJVAKG.js";
26
+ } from "./chunk-JUWS2Z5K.js";
27
27
  import {
28
- MCP_BUDGET_WARN_FRACTION
29
- } from "./chunk-GXSNGY5M.js";
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: "127.0.0.1",
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 raw events retained in the in-flight live journal (current unfinished turn). When exceeded, the oldest entries are dropped. Must be a positive safe integer."
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-ZAFIJKJC.js");
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
- hostname: argv.hostname,
362
- token: argv.token,
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["allow-origin"] && argv["allow-origin"].length > 0 ? { allowOrigins: argv["allow-origin"] } : {},
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-UFALT4LK.js";
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-DIWZNWZT.js";
52
+ } from "./chunk-DX3RGJMS.js";
53
53
  import {
54
54
  init_esbuild_shims
55
55
  } from "./chunk-5O2XNYP6.js";