@qwen-code/qwen-code 0.21.8-nightly.20260810.55e20db328 → 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 (211) hide show
  1. package/README.md +2 -1
  2. package/bundled/qc-helper/docs/configuration/settings.md +2 -1
  3. package/bundled/qc-helper/docs/features/code-review.md +2 -0
  4. package/bundled/qc-helper/docs/qwen-serve.md +38 -37
  5. package/bundled/review/SKILL.md +7 -7
  6. package/chunks/{MaxSizedBox-A52T4GEU.js → MaxSizedBox-6BZANW7X.js} +3 -3
  7. package/chunks/{StandaloneSessionPicker-4J654SOB.js → StandaloneSessionPicker-VDC5KE7T.js} +19 -16
  8. package/chunks/{acpAgent-65AM4AOR.js → acpAgent-F2NSBCUF.js} +49 -40
  9. package/chunks/{agent-SVQ7U7NJ.js → agent-VOHJOEBB.js} +3 -3
  10. package/chunks/{agent-headless-XXGY2SQO.js → agent-headless-J5NFOPHP.js} +3 -3
  11. package/chunks/{bridge-Y32B5S3G.js → bridge-NQIZZLAS.js} +4 -4
  12. package/chunks/{channel-settings-store-OW43U6VB.js → channel-settings-store-VIY2OENO.js} +11 -9
  13. package/chunks/{chunk-OR6R3IUW.js → chunk-23VQTELM.js} +1 -1
  14. package/chunks/{chunk-VHXPSL57.js → chunk-3WDYBTTI.js} +4 -4
  15. package/chunks/{chunk-FAD7OC7V.js → chunk-3XVDTHBJ.js} +2 -2
  16. package/chunks/{chunk-7XX5IBXL.js → chunk-46YJDYCU.js} +6 -6
  17. package/chunks/{chunk-FYB4GIDW.js → chunk-4XQNB3KN.js} +2 -2
  18. package/chunks/chunk-5EJZE3FP.js +140 -0
  19. package/chunks/{chunk-DPMJLKUP.js → chunk-5RBDAGC6.js} +2 -2
  20. package/chunks/{chunk-D2D7J3EW.js → chunk-7AEPJGL4.js} +1 -1
  21. package/chunks/{chunk-HKI3KHAO.js → chunk-7GOYZQPR.js} +19 -1976
  22. package/chunks/{chunk-2ASQDZSJ.js → chunk-7S4JBJLU.js} +3 -3
  23. package/chunks/{chunk-EISUQQPS.js → chunk-ATMO54WE.js} +2 -2
  24. package/chunks/{chunk-NZMXUSKS.js → chunk-BAMN6XSD.js} +1 -1
  25. package/chunks/{chunk-2545EHZR.js → chunk-BIRWP6LU.js} +1 -1
  26. package/chunks/{chunk-UGUKH3SU.js → chunk-BZP4QPNK.js} +9 -9
  27. package/chunks/{chunk-AUWN7BAG.js → chunk-D7BXVKSF.js} +1 -1
  28. package/chunks/{chunk-TXO5BMR2.js → chunk-DH5YXSIF.js} +2 -2
  29. package/chunks/{chunk-OSVH4SMN.js → chunk-FBMCDU63.js} +3 -3
  30. package/chunks/{chunk-GY24H6IA.js → chunk-FCLHHEUK.js} +10 -10
  31. package/chunks/{chunk-FWWQIFDT.js → chunk-G2TX5ZXC.js} +3 -3
  32. package/chunks/{chunk-HDYQYYWB.js → chunk-GAKGOXTC.js} +1 -1
  33. package/chunks/{chunk-TWFFY5BP.js → chunk-HADWBW5R.js} +4 -4
  34. package/chunks/{chunk-E2N554HK.js → chunk-HZGBKOX3.js} +2 -2
  35. package/chunks/{chunk-V47QNK5W.js → chunk-II6G3EY6.js} +288 -72
  36. package/chunks/{chunk-ZV7LTLFE.js → chunk-IOEZE2YT.js} +1 -1
  37. package/chunks/chunk-JUWS2Z5K.js +1995 -0
  38. package/chunks/{chunk-F3II4BTZ.js → chunk-K4ADGWHU.js} +1 -1
  39. package/chunks/{chunk-5ZTS3OQ3.js → chunk-KSAFZ5TA.js} +1 -1
  40. package/chunks/{chunk-KMS57JDD.js → chunk-KTKYGS2P.js} +29 -6
  41. package/chunks/{chunk-HWXGX534.js → chunk-KTQGGPGV.js} +3 -3
  42. package/chunks/{chunk-ZIKTCMQF.js → chunk-LZZLUCRS.js} +5 -5
  43. package/chunks/{chunk-S5CULOHB.js → chunk-MHP476D3.js} +64 -21
  44. package/chunks/{chunk-PNVPFARW.js → chunk-MTCYGTWH.js} +4 -4
  45. package/chunks/{chunk-WQYWK4DG.js → chunk-OGDIJKHK.js} +1 -1
  46. package/chunks/{chunk-WH6QMLUW.js → chunk-OGNFHGIG.js} +3 -3
  47. package/chunks/{chunk-P5ULXPK5.js → chunk-P2FK2HBV.js} +2 -2
  48. package/chunks/{chunk-5WZL724W.js → chunk-P3RBMQ4P.js} +3 -3
  49. package/chunks/{chunk-4EOURKA4.js → chunk-P4ZEZSJZ.js} +177 -17
  50. package/chunks/{chunk-RQ6U2JJQ.js → chunk-PNBBJOCP.js} +1 -1
  51. package/chunks/{chunk-E2T7FLDU.js → chunk-PVOGHGSF.js} +5 -5
  52. package/chunks/{chunk-EUVOKP6Y.js → chunk-QSNSL4R4.js} +1 -1
  53. package/chunks/{chunk-RYQMJCUO.js → chunk-RBHQXGDK.js} +1 -1
  54. package/chunks/{chunk-ZI5IH2HP.js → chunk-RVSTTOJ4.js} +2 -2
  55. package/chunks/{chunk-OW2BWT2P.js → chunk-SCAZZ3Q4.js} +4 -4
  56. package/chunks/{chunk-OBP6QWD5.js → chunk-T5RLUXWJ.js} +2 -2
  57. package/chunks/{chunk-KP25NJNM.js → chunk-T6HEQR2Q.js} +16 -5
  58. package/chunks/{chunk-RMPLEWF3.js → chunk-THIKWITR.js} +2 -2
  59. package/chunks/{chunk-V2226RFW.js → chunk-TQCYNLNJ.js} +1 -1
  60. package/chunks/{chunk-O277O7U6.js → chunk-TZ6KJ44L.js} +1 -1
  61. package/chunks/{chunk-ZCJBCKL5.js → chunk-UJUM2SRN.js} +115 -29
  62. package/chunks/{chunk-3KJQZEN3.js → chunk-UYAUA63Q.js} +1 -1
  63. package/chunks/chunk-VFMASYQA.js +389 -0
  64. package/chunks/chunk-VGHZT6JR.js +51 -0
  65. package/chunks/{chunk-H4JC7LZX.js → chunk-W3FSZSF2.js} +1 -1
  66. package/chunks/{chunk-YFRFZCIP.js → chunk-WGK4TSB7.js} +3 -3
  67. package/chunks/{chunk-BL65MO72.js → chunk-WP5VOXF7.js} +6 -127
  68. package/chunks/{chunk-T2O6NIOY.js → chunk-XTY5DN4Y.js} +1 -1
  69. package/chunks/{chunk-47ZUMGGY.js → chunk-XX7QFP34.js} +56 -55
  70. package/chunks/{chunk-ZSNBQXMZ.js → chunk-YTFDX4PR.js} +8 -3
  71. package/chunks/{chunk-F6TUUA2U.js → chunk-ZBXGWQ4S.js} +2 -2
  72. package/chunks/{chunk-YR7ZQ4RD.js → chunk-ZOSTTOUJ.js} +1 -1
  73. package/chunks/{chunk-UAB6J2IE.js → chunk-ZTQSOV56.js} +3 -3
  74. package/chunks/{computer-use-SLN7DV2E.js → computer-use-PMZ7ICGY.js} +3 -3
  75. package/chunks/{contextCommand-EHFYX6FW.js → contextCommand-GEZU7YHE.js} +6 -5
  76. package/chunks/{core-runtime-FBSP5IIG.js → core-runtime-HRJI2MN6.js} +3 -3
  77. package/chunks/{create-sub-session-WC7YGVSL.js → create-sub-session-VBNVI4YU.js} +3 -3
  78. package/chunks/{daemon-VSX3FHTY.js → daemon-POSQPD3G.js} +26 -3
  79. package/chunks/{daemon-status-provider-WW2AD2T7.js → daemon-status-provider-N4CRQKFI.js} +8 -8
  80. package/chunks/{daemon-trust-policy-E4MAYWPI.js → daemon-trust-policy-BHO3JUHM.js} +11 -9
  81. package/chunks/{daemon-trust-policy-monitor-XVIDV6T4.js → daemon-trust-policy-monitor-YEKJ2726.js} +11 -9
  82. package/chunks/{deferred-core-runtime-5SVUC6UC.js → deferred-core-runtime-SH57E3J3.js} +3 -3
  83. package/chunks/{earlyInputCapture-72FYHYRD.js → earlyInputCapture-B2JJ2HME.js} +3 -3
  84. package/chunks/{edit-SWVVWHXW.js → edit-7FTXENAN.js} +5 -3
  85. package/chunks/{enter-worktree-2HF6WQEO.js → enter-worktree-JPHV2PBG.js} +3 -3
  86. package/chunks/{enterPlanMode-OW6S7L4P.js → enterPlanMode-CGBJ3AHJ.js} +3 -3
  87. package/chunks/{environment-LRTBTDXH.js → environment-LXASZAHD.js} +6 -6
  88. package/chunks/{errors-4CO2DME6.js → errors-XIGVT2AD.js} +5 -5
  89. package/chunks/{exit-worktree-GHJEIRGL.js → exit-worktree-DKSGXW65.js} +3 -3
  90. package/chunks/{exitPlanMode-JVP4FNNK.js → exitPlanMode-THFL2HYN.js} +3 -3
  91. package/chunks/{fast-path-HCCY7GR2.js → fast-path-4NXAT5UL.js} +3 -3
  92. package/chunks/{fast-path-settings-MN5QQQET.js → fast-path-settings-RPAVBD7P.js} +2 -2
  93. package/chunks/{gemini-V3YVRKXU.js → gemini-B3N6FACU.js} +39 -44
  94. package/chunks/{geminiContentGenerator-LVPMQUWX.js → geminiContentGenerator-YYFE2HIE.js} +1 -1
  95. package/chunks/{glob-7HRXHYDR.js → glob-BPHSCFJP.js} +3 -3
  96. package/chunks/{grep-BITQUON5.js → grep-ROZIRFLU.js} +3 -3
  97. package/chunks/{handleAutoUpdate-DKFY454S.js → handleAutoUpdate-WV6SPZQB.js} +8 -7
  98. package/chunks/{i18n-53BQIQSH.js → i18n-YWJWPQKD.js} +8 -6
  99. package/chunks/{image-gen-H62FLDFB.js → image-gen-SISRZ6FS.js} +1 -1
  100. package/chunks/{initializer-Q7NUQRSU.js → initializer-66OAD6GO.js} +11 -9
  101. package/chunks/{installationInfo-BWFHT7WU.js → installationInfo-3YUGIP36.js} +4 -4
  102. package/chunks/{list-OWQKR6JK.js → list-VEYR66XB.js} +14 -12
  103. package/chunks/{loadedSettingsAdapter-HNPKQMFA.js → loadedSettingsAdapter-V2JCPCYD.js} +11 -9
  104. package/chunks/{loggingContentGenerator-A5I3VQUC.js → loggingContentGenerator-RBLNDREC.js} +1 -1
  105. package/chunks/{managed-npm-update-CUUJGUTV.js → managed-npm-update-C5ID5R4R.js} +4 -4
  106. package/chunks/{mcp-GJSC7ZPO.js → mcp-OZ54NZJQ.js} +11 -9
  107. package/chunks/{monitor-TZ2II7JM.js → monitor-7Y4TVFTK.js} +3 -3
  108. package/chunks/{nonInteractiveCli-22RS4EVH.js → nonInteractiveCli-QEK4LHAC.js} +35 -33
  109. package/chunks/{notebook-edit-YZC3YPY2.js → notebook-edit-OG35EBGY.js} +4 -3
  110. package/chunks/{openaiContentGenerator-OIGO5XNF.js → openaiContentGenerator-443BNRPJ.js} +1 -1
  111. package/chunks/{pidfile-QJQ65RJ2.js → pidfile-ZK4OLRZA.js} +3 -3
  112. package/chunks/{processUtils-V5VSDIKS.js → processUtils-4YGB4RUZ.js} +2 -2
  113. package/chunks/{qwenContentGenerator-HXM25BGB.js → qwenContentGenerator-D5C2LCSZ.js} +3 -3
  114. package/chunks/{qwenOAuth2-7MTMS2Z5.js → qwenOAuth2-Z4YQBMYN.js} +1 -1
  115. package/chunks/{read-file-PMGXB3ZB.js → read-file-EXTJLWMU.js} +1 -1
  116. package/chunks/{resumeHistoryUtils-YUTPLHUH.js → resumeHistoryUtils-UPCGRJUL.js} +7 -6
  117. package/chunks/{ripGrep-XUS66YIV.js → ripGrep-QBVIRCU4.js} +3 -3
  118. package/chunks/{run-qwen-serve-4NVSU75L.js → run-qwen-serve-ZYGJNE3E.js} +67 -51
  119. package/chunks/{runtime-QLRVP6HM.js → runtime-BZZ4LWCP.js} +12 -10
  120. package/chunks/{scheduler-PBB2NSOP.js → scheduler-YNQNOU2E.js} +131 -11
  121. package/chunks/{serve-BWKTRX72.js → serve-LJHAXDCH.js} +11 -9
  122. package/chunks/{server-E7CH7WPK.js → server-ADMLELR6.js} +256 -750
  123. package/chunks/{session-QEKSJ6YU.js → session-YKZXFFTM.js} +36 -34
  124. package/chunks/{settings-BRAOSJIM.js → settings-EQBUAQ7Y.js} +10 -8
  125. package/chunks/{shell-OF3CK4AT.js → shell-3QZOJGTT.js} +3 -3
  126. package/chunks/{skill-HLH2NO2H.js → skill-UWSSMXE7.js} +1 -1
  127. package/chunks/{skill-settings-DRPU7YI5.js → skill-settings-T6MLB7NU.js} +10 -8
  128. package/chunks/{spawnChannel-4KO7YTFM.js → spawnChannel-VS7ZFUFP.js} +3 -3
  129. package/chunks/{standalone-update-DJN2R3YW.js → standalone-update-2W26SRRO.js} +6 -5
  130. package/chunks/{startInteractiveUI-O3WQQ2WC.js → startInteractiveUI-CVS7K3D6.js} +55 -45
  131. package/chunks/{team-create-2E4ACBJD.js → team-create-4WFTNNUL.js} +3 -3
  132. package/chunks/{team-plan-approval-LWIDXYOA.js → team-plan-approval-DBYI33S3.js} +3 -3
  133. package/chunks/{terminal-image-renderer-PJM7663W.js → terminal-image-renderer-S5WPPQKH.js} +3 -3
  134. package/chunks/{theme-manager-FDQTM3RP.js → theme-manager-LI2RIOVR.js} +3 -3
  135. package/chunks/{tool-search-TL5ZXBF4.js → tool-search-4773EUQ4.js} +1 -1
  136. package/chunks/{total-session-admission-LS6EY5KT.js → total-session-admission-PAY5CH2Z.js} +4 -4
  137. package/chunks/{trustedFolders-5RWP5OB7.js → trustedFolders-FRSLE674.js} +4 -4
  138. package/chunks/{update-relaunch-HWQ4USKY.js → update-relaunch-ZSFQTU6M.js} +5 -5
  139. package/chunks/{updateCheck-EZMBTEIR.js → updateCheck-AXWSO7KA.js} +7 -6
  140. package/chunks/{useAutoAcceptIndicator-JDMI627A.js → useAutoAcceptIndicator-VHLXIA7U.js} +11 -9
  141. package/chunks/{validateNonInterActiveAuth-RRUHC5RO.js → validateNonInterActiveAuth-PDJECMFU.js} +32 -30
  142. package/chunks/{version-XS4UTKUX.js → version-RBN764QS.js} +1 -1
  143. package/chunks/{web-fetch-2JV7H6OM.js → web-fetch-7BJK42AF.js} +1 -1
  144. package/chunks/{web-search-RCTN2GAM.js → web-search-L2CILQXV.js} +2 -2
  145. package/chunks/{workflow-6MKLKQ6R.js → workflow-5VH2R74I.js} +4 -4
  146. package/chunks/{workspace-providers-status-YZ2IJ4DK.js → workspace-providers-status-OZTQ6JFH.js} +13 -11
  147. package/chunks/{workspace-registration-store-IYN72LBS.js → workspace-registration-store-IX5RJQS5.js} +1 -1
  148. package/chunks/{workspace-registry-7LFBZQLT.js → workspace-registry-73N4BGG4.js} +4 -4
  149. package/chunks/{workspace-service-2EHSPRJB.js → workspace-service-I5RUPSNV.js} +14 -12
  150. package/chunks/{workspace-skills-status-5VJ2D5HN.js → workspace-skills-status-DMK6VYDO.js} +11 -9
  151. package/chunks/{workspace-trust-reconciler-X2LZ6XCI.js → workspace-trust-reconciler-QX4RL3TC.js} +12 -10
  152. package/chunks/{write-file-CJK6SCCF.js → write-file-UGDD5UTS.js} +3 -3
  153. package/chunks/{zoom-image-BVW4RFYW.js → zoom-image-ZAHEO3YP.js} +1 -1
  154. package/cli.js +12 -12
  155. package/package.json +3 -3
  156. package/web-shell/assets/{arc-DDtoJrAW.js → arc-CHY4saMJ.js} +1 -1
  157. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BAInIW4O.js → architectureDiagram-3BPJPVTR-Bu6CwvHj.js} +1 -1
  158. package/web-shell/assets/{blockDiagram-GPEHLZMM-ChPDk7fP.js → blockDiagram-GPEHLZMM-XGt6iGf_.js} +1 -1
  159. package/web-shell/assets/{c4Diagram-AAUBKEIU-Cd9BJuUy.js → c4Diagram-AAUBKEIU-CBbYl19W.js} +1 -1
  160. package/web-shell/assets/channel-B40srHOa.js +1 -0
  161. package/web-shell/assets/{chunk-2J33WTMH-COQkLp56.js → chunk-2J33WTMH-BEhmVrdx.js} +1 -1
  162. package/web-shell/assets/{chunk-4BX2VUAB-GUJshQ_l.js → chunk-4BX2VUAB-fQLyE0Bg.js} +1 -1
  163. package/web-shell/assets/{chunk-55IACEB6-Boaa7c10.js → chunk-55IACEB6-yGdtyx4a.js} +1 -1
  164. package/web-shell/assets/{chunk-727SXJPM-CcRXaly2.js → chunk-727SXJPM-DYbX2GLo.js} +1 -1
  165. package/web-shell/assets/{chunk-AQP2D5EJ-BY0OARHh.js → chunk-AQP2D5EJ-DyKTEsYn.js} +1 -1
  166. package/web-shell/assets/{chunk-FMBD7UC4-DLFQfv0S.js → chunk-FMBD7UC4-D8Uy_GzX.js} +1 -1
  167. package/web-shell/assets/{chunk-ND2GUHAM-C_S0u-D2.js → chunk-ND2GUHAM-C8wNR2K7.js} +1 -1
  168. package/web-shell/assets/{chunk-QZHKN3VN-DP9m64hw.js → chunk-QZHKN3VN-BnybNxnt.js} +1 -1
  169. package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +1 -0
  170. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +1 -0
  171. package/web-shell/assets/{cose-bilkent-S5V4N54A-CGY6zGE1.js → cose-bilkent-S5V4N54A-jq4uiFRp.js} +1 -1
  172. package/web-shell/assets/{dagre-BM42HDAG-yB7whKNn.js → dagre-BM42HDAG-Bs7oye1U.js} +1 -1
  173. package/web-shell/assets/{diagram-2AECGRRQ-Bdlc59La.js → diagram-2AECGRRQ-BHGGJNyM.js} +1 -1
  174. package/web-shell/assets/{diagram-5GNKFQAL-BUClP18L.js → diagram-5GNKFQAL-BJezVLGT.js} +1 -1
  175. package/web-shell/assets/{diagram-KO2AKTUF-aZm08kjn.js → diagram-KO2AKTUF-5JzQN_rL.js} +1 -1
  176. package/web-shell/assets/{diagram-LMA3HP47-7DGwEkxC.js → diagram-LMA3HP47-BlPYOgY9.js} +1 -1
  177. package/web-shell/assets/{diagram-OG6HWLK6-CAGKayxx.js → diagram-OG6HWLK6-CtMHEaFK.js} +1 -1
  178. package/web-shell/assets/{erDiagram-TEJ5UH35-CptoHHQi.js → erDiagram-TEJ5UH35-CRNdq2AB.js} +1 -1
  179. package/web-shell/assets/{flowDiagram-I6XJVG4X-CNOH0s7Q.js → flowDiagram-I6XJVG4X-De1WwLzu.js} +1 -1
  180. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CCQuCU3y.js → ganttDiagram-6RSMTGT7-YbWfL5Zn.js} +1 -1
  181. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-B7gv9f4E.js → gitGraphDiagram-PVQCEYII-DzCN8bmd.js} +1 -1
  182. package/web-shell/assets/index-BDOGGGaN.css +5 -0
  183. package/web-shell/assets/{index-BoUPVvpf.js → index-CocPvF9Q.js} +1 -1
  184. package/web-shell/assets/index-DSH2KrMc.js +1771 -0
  185. package/web-shell/assets/{infoDiagram-5YYISTIA-Bb3KYEbR.js → infoDiagram-5YYISTIA-DLHoopnE.js} +1 -1
  186. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DWEzbAGi.js → ishikawaDiagram-YF4QCWOH-XnbU04SS.js} +1 -1
  187. package/web-shell/assets/{journeyDiagram-JHISSGLW-CmxwEqeb.js → journeyDiagram-JHISSGLW-CipPyEeJ.js} +1 -1
  188. package/web-shell/assets/{kanban-definition-UN3LZRKU-Ci0gDD8O.js → kanban-definition-UN3LZRKU-DrSeyE5d.js} +1 -1
  189. package/web-shell/assets/{linear-BqxZqGhS.js → linear-LrBKnAo_.js} +1 -1
  190. package/web-shell/assets/{mermaid.core-BDAFffHv.js → mermaid.core-C3U9UVmf.js} +5 -5
  191. package/web-shell/assets/{mindmap-definition-RKZ34NQL-Btvx-xvS.js → mindmap-definition-RKZ34NQL-DqRWgC9H.js} +1 -1
  192. package/web-shell/assets/{pieDiagram-4H26LBE5-CKAg7yG7.js → pieDiagram-4H26LBE5-BNXY5p6H.js} +1 -1
  193. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIt8E1mC.js → quadrantDiagram-W4KKPZXB-Ccj9QzE4.js} +1 -1
  194. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BA7mQWQJ.js → requirementDiagram-4Y6WPE33-CjPM2_gx.js} +1 -1
  195. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-D0JppnVU.js → sankeyDiagram-5OEKKPKP-C0RsvKbj.js} +1 -1
  196. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-29DIQFjB.js → sequenceDiagram-3UESZ5HK-ClN1P5z7.js} +1 -1
  197. package/web-shell/assets/{stateDiagram-AJRCARHV-iiXMdK--.js → stateDiagram-AJRCARHV-By0eiB2Y.js} +1 -1
  198. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +1 -0
  199. package/web-shell/assets/{timeline-definition-PNZ67QCA-CeF7ngSW.js → timeline-definition-PNZ67QCA-g_iaSQgv.js} +1 -1
  200. package/web-shell/assets/{vennDiagram-CIIHVFJN-Beilq8D6.js → vennDiagram-CIIHVFJN-y9ZqJ-TD.js} +1 -1
  201. package/web-shell/assets/{wardley-L42UT6IY-DOYjY4zO.js → wardley-L42UT6IY-BVVfaxpF.js} +1 -1
  202. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-Dtqp8o18.js → wardleyDiagram-YWT4CUSO-D3ooZKZT.js} +1 -1
  203. package/web-shell/assets/{xychartDiagram-2RQKCTM6-cdAc0Dfv.js → xychartDiagram-2RQKCTM6-6GXrY6M1.js} +1 -1
  204. package/web-shell/index.html +2 -2
  205. package/chunks/chunk-R4ZA6GBK.js +0 -208
  206. package/web-shell/assets/channel-0OQklTfP.js +0 -1
  207. package/web-shell/assets/classDiagram-4FO5ZUOK-CZ4-apsu.js +0 -1
  208. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CZ4-apsu.js +0 -1
  209. package/web-shell/assets/index-D1YQXYsB.css +0 -5
  210. package/web-shell/assets/index-J4N7zCmU.js +0 -1768
  211. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CEGK3l80.js +0 -1
@@ -8,7 +8,7 @@ import {
8
8
  staleArgsWarning,
9
9
  validateAuthMethod,
10
10
  writeSkillArgs
11
- } from "./chunk-V47QNK5W.js";
11
+ } from "./chunk-II6G3EY6.js";
12
12
  import {
13
13
  calculateCost,
14
14
  computeSessionStats,
@@ -17,7 +17,7 @@ import {
17
17
  findInlineMathExpressions,
18
18
  getSystemInfoFields,
19
19
  levelLabel
20
- } from "./chunk-DPMJLKUP.js";
20
+ } from "./chunk-5RBDAGC6.js";
21
21
  import {
22
22
  isKittyProtocolEnabled
23
23
  } from "./chunk-NYX53SV4.js";
@@ -28,16 +28,16 @@ import {
28
28
  } from "./chunk-NV3F44FL.js";
29
29
  import {
30
30
  contextCommand
31
- } from "./chunk-TXO5BMR2.js";
31
+ } from "./chunk-DH5YXSIF.js";
32
32
  import {
33
33
  themeManager
34
34
  } from "./chunk-CTJLZLB5.js";
35
35
  import {
36
36
  rollbackStandaloneUpdate
37
- } from "./chunk-ZI5IH2HP.js";
37
+ } from "./chunk-RVSTTOJ4.js";
38
38
  import {
39
39
  getErrorMessage as getErrorMessage2
40
- } from "./chunk-P5ULXPK5.js";
40
+ } from "./chunk-P2FK2HBV.js";
41
41
  import {
42
42
  GITHUB_WORKFLOW_PATHS,
43
43
  INSIGHT_CSS,
@@ -51,10 +51,11 @@ import {
51
51
  toJson,
52
52
  toJsonl,
53
53
  toMarkdown
54
- } from "./chunk-5WZL724W.js";
54
+ } from "./chunk-P3RBMQ4P.js";
55
55
  import {
56
56
  stripUnsafeCharacters,
57
- toCodePoints
57
+ toCodePoints,
58
+ truncateToWidth
58
59
  } from "./chunk-4NFY2S7N.js";
59
60
  import {
60
61
  isValidSessionId
@@ -66,12 +67,12 @@ import {
66
67
  isVoiceEnabled,
67
68
  readVoiceMode,
68
69
  readVoiceModel
69
- } from "./chunk-HDYQYYWB.js";
70
+ } from "./chunk-GAKGOXTC.js";
70
71
  import {
71
72
  getExtendedSystemInfo,
72
73
  getGitVersion,
73
74
  getNpmVersion
74
- } from "./chunk-2ASQDZSJ.js";
75
+ } from "./chunk-7S4JBJLU.js";
75
76
  import {
76
77
  formatDuration,
77
78
  formatTokenCount
@@ -79,7 +80,7 @@ import {
79
80
  import {
80
81
  isInlineModelOverrideAllowed,
81
82
  parseAcpModelOption
82
- } from "./chunk-HWXGX534.js";
83
+ } from "./chunk-KTQGGPGV.js";
83
84
  import {
84
85
  OUTPUT_LANGUAGE_AUTO,
85
86
  getAllSettingKeys,
@@ -91,22 +92,24 @@ import {
91
92
  resolveOutputLanguageOrPreserveAuto,
92
93
  validateSettingValue,
93
94
  writeOutputLanguageAndRegisterPath
94
- } from "./chunk-HKI3KHAO.js";
95
+ } from "./chunk-JUWS2Z5K.js";
95
96
  import {
96
- SUPPORTED_LANGUAGES,
97
97
  getCurrentLanguage,
98
- getSupportedLanguageIds,
99
- resolveSupportedLanguage,
100
98
  setLanguageAsync,
101
99
  t
102
- } from "./chunk-BL65MO72.js";
100
+ } from "./chunk-WP5VOXF7.js";
101
+ import {
102
+ SUPPORTED_LANGUAGES,
103
+ getSupportedLanguageIds,
104
+ resolveSupportedLanguage
105
+ } from "./chunk-5EJZE3FP.js";
103
106
  import {
104
107
  getInstallationInfo
105
- } from "./chunk-2545EHZR.js";
108
+ } from "./chunk-BIRWP6LU.js";
106
109
  import {
107
110
  isFolderTrustEnabled,
108
111
  loadTrustedFolders
109
- } from "./chunk-YR7ZQ4RD.js";
112
+ } from "./chunk-ZOSTTOUJ.js";
110
113
  import {
111
114
  require_strip_json_comments
112
115
  } from "./chunk-NPQ5ZKRP.js";
@@ -180,13 +183,13 @@ import {
180
183
  runForkedAgent,
181
184
  tryGenerateSessionTitle,
182
185
  unregisterGoalHook
183
- } from "./chunk-47ZUMGGY.js";
186
+ } from "./chunk-XX7QFP34.js";
184
187
  import {
185
188
  external_exports
186
189
  } from "./chunk-H6XPXXMH.js";
187
190
  import {
188
191
  resolveModelId
189
- } from "./chunk-F3II4BTZ.js";
192
+ } from "./chunk-K4ADGWHU.js";
190
193
  import {
191
194
  getAutoSkillCuratorStatus,
192
195
  parse,
@@ -259,7 +262,7 @@ import {
259
262
  isCpuProfileRecording,
260
263
  startCpuProfile,
261
264
  stopCpuProfile
262
- } from "./chunk-WQYWK4DG.js";
265
+ } from "./chunk-OGDIJKHK.js";
263
266
  import {
264
267
  init_esbuild_shims
265
268
  } from "./chunk-5O2XNYP6.js";
@@ -2049,7 +2052,7 @@ var approvalModeCommand = {
2049
2052
  };
2050
2053
  }
2051
2054
  }
2052
- const autoModeNotices = mode === "auto" /* AUTO */ && priorMode !== "auto" /* AUTO */ && config ? await import("./useAutoAcceptIndicator-JDMI627A.js") : void 0;
2055
+ const autoModeNotices = mode === "auto" /* AUTO */ && priorMode !== "auto" /* AUTO */ && config ? await import("./useAutoAcceptIndicator-VHLXIA7U.js") : void 0;
2053
2056
  if (config) {
2054
2057
  try {
2055
2058
  config.setApprovalMode(mode);
@@ -2816,6 +2819,88 @@ function resetBackgroundStateForSessionSwitch(config) {
2816
2819
  config.getWorkflowRunRegistry().reset();
2817
2820
  }
2818
2821
  __name(resetBackgroundStateForSessionSwitch, "resetBackgroundStateForSessionSwitch");
2822
+ var MAX_LISTED_BLOCKING_ENTRIES = 10;
2823
+ var MAX_BLOCKING_LABEL_WIDTH = 80;
2824
+ function describeBlockingBackgroundWork(config) {
2825
+ const now = Date.now();
2826
+ const entries = [];
2827
+ for (const entry of config.getBackgroundTaskRegistry().getAll()) {
2828
+ if (!entry.isBackgrounded || entry.status !== "running") continue;
2829
+ entries.push({
2830
+ startTime: entry.startTime,
2831
+ id: entry.agentId,
2832
+ label: buildBackgroundEntryLabel(entry),
2833
+ status: entry.status,
2834
+ isWorkflowRun: false
2835
+ });
2836
+ }
2837
+ for (const entry of config.getMonitorRegistry().getRunning()) {
2838
+ entries.push({
2839
+ startTime: entry.startTime,
2840
+ id: entry.monitorId,
2841
+ label: entry.description,
2842
+ status: entry.status,
2843
+ isWorkflowRun: false
2844
+ });
2845
+ }
2846
+ for (const entry of config.getBackgroundShellRegistry().getAll()) {
2847
+ if (entry.status !== "running") continue;
2848
+ entries.push({
2849
+ startTime: entry.startTime,
2850
+ id: entry.shellId,
2851
+ label: entry.command,
2852
+ status: entry.status,
2853
+ isWorkflowRun: false
2854
+ });
2855
+ }
2856
+ for (const entry of config.getWorkflowRunRegistry().list()) {
2857
+ if (entry.status !== "running" && entry.status !== "pausing") continue;
2858
+ entries.push({
2859
+ startTime: entry.startTime,
2860
+ id: entry.runId,
2861
+ label: entry.meta?.name ?? entry.runId,
2862
+ status: entry.status,
2863
+ isWorkflowRun: true
2864
+ });
2865
+ }
2866
+ if (entries.length === 0) return void 0;
2867
+ entries.sort((a, b) => a.startTime - b.startTime);
2868
+ const listed = entries.slice(0, MAX_LISTED_BLOCKING_ENTRIES);
2869
+ const lines = listed.map((entry) => {
2870
+ const label = truncateToWidth(
2871
+ stripUnsafeCharacters(entry.label).replace(/[\r\n]+/g, " "),
2872
+ MAX_BLOCKING_LABEL_WIDTH
2873
+ );
2874
+ return ` [${entry.id}] ${label} (${entry.status} ${formatDuration(
2875
+ now - entry.startTime,
2876
+ { hideTrailingZeros: true }
2877
+ )})`;
2878
+ });
2879
+ const overflow = entries.length - listed.length;
2880
+ if (overflow > 0) {
2881
+ lines.push(` \u2026and ${overflow} more`);
2882
+ }
2883
+ return {
2884
+ lines,
2885
+ hasTaskEntries: entries.some((entry) => !entry.isWorkflowRun),
2886
+ hasWorkflowRuns: entries.some((entry) => entry.isWorkflowRun)
2887
+ };
2888
+ }
2889
+ __name(describeBlockingBackgroundWork, "describeBlockingBackgroundWork");
2890
+ function buildBackgroundWorkBlockedMessage(config, baseMessage) {
2891
+ const blocking = describeBlockingBackgroundWork(config);
2892
+ if (!blocking) return baseMessage;
2893
+ const surfaces = [
2894
+ ...blocking.hasTaskEntries ? ["/tasks"] : [],
2895
+ ...blocking.hasWorkflowRuns ? ["/workflows"] : []
2896
+ ].join(" and ");
2897
+ return [
2898
+ baseMessage,
2899
+ ...blocking.lines,
2900
+ `Use ${surfaces} to inspect them, then retry.`
2901
+ ].join("\n");
2902
+ }
2903
+ __name(buildBackgroundWorkBlockedMessage, "buildBackgroundWorkBlockedMessage");
2819
2904
 
2820
2905
  // packages/cli/src/ui/commands/clearCommand.ts
2821
2906
  import process2 from "node:process";
@@ -2838,12 +2923,12 @@ var clearCommand = {
2838
2923
  }
2839
2924
  if (config) {
2840
2925
  if (hasBlockingBackgroundWork(config)) {
2841
- const content = "Stop the current session's running background tasks before starting a new session.";
2842
- context.ui.setDebugMessage(content);
2926
+ const baseMessage = "Stop the current session's running background tasks before starting a new session.";
2927
+ context.ui.setDebugMessage(baseMessage);
2843
2928
  return {
2844
2929
  type: "message",
2845
2930
  messageType: "error",
2846
- content
2931
+ content: buildBackgroundWorkBlockedMessage(config, baseMessage)
2847
2932
  };
2848
2933
  }
2849
2934
  config.getHookSystem()?.fireSessionEndEvent("clear" /* Clear */).catch((err) => {
@@ -6787,7 +6872,7 @@ var expandNowCommand = {
6787
6872
  content: t("History is already expanded in this session.")
6788
6873
  };
6789
6874
  }
6790
- const { expandCollapsedHistory } = await import("./resumeHistoryUtils-YUTPLHUH.js");
6875
+ const { expandCollapsedHistory } = await import("./resumeHistoryUtils-UPCGRJUL.js");
6791
6876
  const updated = expandCollapsedHistory(history);
6792
6877
  loadHistory(updated);
6793
6878
  refreshStatic();
@@ -14023,10 +14108,10 @@ var updateCommand = {
14023
14108
  { performStandaloneUpdate },
14024
14109
  installationInfo
14025
14110
  ] = await Promise.all([
14026
- import("./updateCheck-EZMBTEIR.js"),
14027
- import("./processUtils-V5VSDIKS.js"),
14028
- import("./standalone-update-DJN2R3YW.js"),
14029
- import("./installationInfo-BWFHT7WU.js")
14111
+ import("./updateCheck-AXWSO7KA.js"),
14112
+ import("./processUtils-4YGB4RUZ.js"),
14113
+ import("./standalone-update-2W26SRRO.js"),
14114
+ import("./installationInfo-3YUGIP36.js")
14030
14115
  ]);
14031
14116
  const { formatUpdateInstructions, getInstallationInfo: getInstallationInfo2 } = installationInfo;
14032
14117
  const settings = context.services.settings;
@@ -16280,6 +16365,7 @@ export {
16280
16365
  formatApprovalModeDescription,
16281
16366
  hasBlockingBackgroundWork,
16282
16367
  resetBackgroundStateForSessionSwitch,
16368
+ buildBackgroundWorkBlockedMessage,
16283
16369
  isAtCommand,
16284
16370
  hasSlashCommandPathSeparator,
16285
16371
  isSlashCommand,
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  t
5
- } from "./chunk-BL65MO72.js";
5
+ } from "./chunk-WP5VOXF7.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -0,0 +1,389 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ writeStderrLineSafe
5
+ } from "./chunk-KGJGEEVR.js";
6
+ import {
7
+ init_esbuild_shims
8
+ } from "./chunk-5O2XNYP6.js";
9
+ import {
10
+ __name
11
+ } from "./chunk-J2S4EL5Y.js";
12
+
13
+ // packages/cli/src/config/acp-channel-fallback.ts
14
+ init_esbuild_shims();
15
+ var QWEN_CODE_SERVE_ENV = "QWEN_CODE_SERVE";
16
+ var QWEN_CODE_DESKTOP_ENV = "QWEN_CODE_DESKTOP";
17
+ function resolveAcpChannelFallback(env = process.env) {
18
+ if (env[QWEN_CODE_DESKTOP_ENV] === "1") {
19
+ return "desktop";
20
+ }
21
+ if (env[QWEN_CODE_SERVE_ENV] === "1") {
22
+ return "daemon";
23
+ }
24
+ return "ACP";
25
+ }
26
+ __name(resolveAcpChannelFallback, "resolveAcpChannelFallback");
27
+
28
+ // packages/cli/src/config/shared-env-keys.ts
29
+ init_esbuild_shims();
30
+ var DEFAULT_EXCLUDED_ENV_VARS = ["DEBUG", "DEBUG_MODE"];
31
+ var ENV_CORRUPTED_PATH = "QWEN_CODE_SETTINGS_CORRUPTED_PATH";
32
+ var ENV_WAS_RECOVERED = "QWEN_CODE_SETTINGS_WAS_RECOVERED";
33
+ var ENV_ACP_REPEATED_TOOL_FAILURE_GUARD = "QWEN_CODE_ACP_REPEATED_TOOL_FAILURE_GUARD";
34
+ var PROJECT_ENV_HARDCODED_EXCLUSIONS = [
35
+ "QWEN_HOME",
36
+ "QWEN_RUNTIME_DIR",
37
+ "QWEN_CODE_MCP_APPROVALS_PATH",
38
+ "QWEN_CODE_TRUSTED_FOLDERS_PATH",
39
+ // Runtime attribution markers are stamped by trusted launchers. A project
40
+ // `.env` must not spoof client channel telemetry.
41
+ QWEN_CODE_SERVE_ENV,
42
+ QWEN_CODE_DESKTOP_ENV,
43
+ ENV_CORRUPTED_PATH,
44
+ ENV_WAS_RECOVERED,
45
+ // This is an operator rollout policy. A project must not be able to promote
46
+ // itself from the default shadow cohort into warning or enforcement.
47
+ ENV_ACP_REPEATED_TOOL_FAILURE_GUARD,
48
+ // QWEN_TLS_INSECURE (and NODE_TLS_REJECT_UNAUTHORIZED, which it mirrors)
49
+ // disable TLS certificate verification for all outbound API connections. A
50
+ // project `.env` must never enable either — that would let an untrusted repo
51
+ // silently turn off MITM protection. Opt-in stays with the user via the
52
+ // `--insecure` flag, the shell environment, or a home `.env`. The initial
53
+ // `.env` load only consults this list, so both keys must be here (not just
54
+ // RELOAD_EXCLUDED_KEYS, which only applies on reload).
55
+ "QWEN_TLS_INSECURE",
56
+ "NODE_TLS_REJECT_UNAUTHORIZED",
57
+ // NODE_EXTRA_CA_CERTS reaches the same outcome by adding a TLS trust
58
+ // anchor instead of disabling verification.
59
+ "NODE_EXTRA_CA_CERTS",
60
+ // The non-Node TLS trust-anchor vars reach the SAME MITM outcome for the
61
+ // curl/git/openssl/python tools a session subprocess routinely shells out
62
+ // to: they are honored unconditionally as a CA bundle/dir, and npm/pip
63
+ // honor their own equivalents (npm_config_cafile / npm_config_ca / PIP_CERT
64
+ // as attacker CAs, npm_config_strict_ssl=false disables verification with
65
+ // no CA at all; GIT_SSL_CAPATH is git's directory-form twin of
66
+ // GIT_SSL_CAINFO). A project `.env` pointing any of them at an attacker CA
67
+ // lets an untrusted repo silently intercept token-bearing traffic
68
+ // (git/npm/pip fetches) for every workspace's sessions — the exact outcome
69
+ // NODE_EXTRA_CA_CERTS is blocked for. Like NODE_EXTRA_CA_CERTS these stay
70
+ // reject-from-project-`.env` only: a value the operator set in their own
71
+ // login shell or home `.env` is their trusted choice and is preserved.
72
+ "SSL_CERT_FILE",
73
+ "SSL_CERT_DIR",
74
+ "CURL_CA_BUNDLE",
75
+ "REQUESTS_CA_BUNDLE",
76
+ "GIT_SSL_CAINFO",
77
+ "GIT_SSL_CAPATH",
78
+ "npm_config_cafile",
79
+ "npm_config_ca",
80
+ // npm treats underscore/hyphen spellings of a config key as the same key
81
+ // (see canonicalLoaderKey below), so both forms of strict-ssl are listed.
82
+ "npm_config_strict_ssl",
83
+ "npm_config_strict-ssl",
84
+ "PIP_CERT",
85
+ // CURL_HOME / WGETRC redirect curl/wget at attacker rc files
86
+ // (`$CURL_HOME/.curlrc`, the file WGETRC names) whose `proxy`, `cacert`, or
87
+ // `insecure` directives intercept or downgrade the same token-bearing
88
+ // traffic — the config-file-redirect class this list already blocks for npm
89
+ // (`npm_config_userconfig`), git (`GIT_CONFIG_GLOBAL`), and OpenSSL
90
+ // (`OPENSSL_CONF`).
91
+ "CURL_HOME",
92
+ "WGETRC",
93
+ // PIP_CONFIG_FILE redirects all of pip's configuration at the file it
94
+ // names — index-url, trusted-host, proxy, cert, or client-cert in an
95
+ // attacker file sends session pip traffic or credentials to attacker
96
+ // infrastructure — the same config-file-redirect class as
97
+ // npm_config_userconfig and GIT_CONFIG_GLOBAL.
98
+ "PIP_CONFIG_FILE",
99
+ // The git command-execution env family: git runs these on any invocation in
100
+ // a session subprocess. GIT_SSH_COMMAND / GIT_SSH (its documented legacy
101
+ // counterpart, still exec'd by git for SSH transports) / GIT_EXTERNAL_DIFF
102
+ // execute a command directly; GIT_ASKPASS / GIT_PROXY_COMMAND / GIT_EDITOR
103
+ // / GIT_SEQUENCE_EDITOR are exec'd conditionally (credential prompt, proxy
104
+ // transport, editor, `git rebase -i` todo-list edit);
105
+ // GIT_EXEC_PATH redirects git's own remote-helper/subcommand lookup at an
106
+ // attacker directory and GIT_TEMPLATE_DIR plants hooks that run after the
107
+ // next clone/init; GIT_CONFIG_* injects arbitrary config (`core.hooksPath`,
108
+ // `core.fsmonitor`, …) that turns a routine `git commit` into
109
+ // attacker-code execution as the daemon user — GIT_CONFIG_PARAMETERS
110
+ // carries the same injection as one quoted string, so it is blocked with
111
+ // GIT_CONFIG_COUNT and the numbered pairs. core/utils/git-branches.ts
112
+ // scrubs the config-injection subset from the repo's own git invocations,
113
+ // so a project `.env` setting this family contradicts that model. Numbered
114
+ // GIT_CONFIG_KEY_<n>/GIT_CONFIG_VALUE_<n> pairs are matched by numeric
115
+ // suffix below.
116
+ "GIT_SSH_COMMAND",
117
+ "GIT_SSH",
118
+ "GIT_EXEC_PATH",
119
+ "GIT_TEMPLATE_DIR",
120
+ "GIT_ASKPASS",
121
+ "GIT_PROXY_COMMAND",
122
+ "GIT_EDITOR",
123
+ "GIT_SEQUENCE_EDITOR",
124
+ "GIT_EXTERNAL_DIFF",
125
+ "GIT_CONFIG_GLOBAL",
126
+ "GIT_CONFIG_SYSTEM",
127
+ // git merges `$XDG_CONFIG_HOME/git/config` with `~/.gitconfig`, so a
128
+ // project `.env` redirecting XDG_CONFIG_HOME plants the same config
129
+ // injection (`core.hooksPath`, …) the GIT_CONFIG_* keys block — without
130
+ // naming a git config file at all.
131
+ "XDG_CONFIG_HOME",
132
+ "GIT_CONFIG_COUNT",
133
+ "GIT_CONFIG_PARAMETERS",
134
+ // git falls back to executing $SSH_ASKPASS for passphrase prompts (its
135
+ // askpass order is GIT_ASKPASS > core.askPass > SSH_ASKPASS, and ssh runs
136
+ // it whenever SSH_ASKPASS_REQUIRE=force or no terminal is available), so a
137
+ // project `.env` pointing it at an attacker script is code execution on
138
+ // any git/ssh auth challenge. SSH_ASKPASS_REQUIRE stays settable: it only
139
+ // selects *when* the askpass program runs, and with SSH_ASKPASS
140
+ // project-blocked it has no program to execute.
141
+ "SSH_ASKPASS",
142
+ // less executes $LESSOPEN as an input preprocessor on every file a session
143
+ // views (and $LESSCLOSE on exit whenever the preprocessor ran), so a
144
+ // project `.env` setting either is attacker command execution the first
145
+ // time a session runs `less`.
146
+ "LESSOPEN",
147
+ "LESSCLOSE",
148
+ // node-gyp interpreter selection: node-gyp's find-python.js executes
149
+ // NODE_GYP_FORCE_PYTHON / npm_config_python / PYTHON as the build Python,
150
+ // so a project `.env` pointing them at an attacker script is code execution
151
+ // during any native-addon `npm install` in another workspace's session.
152
+ // Unlike the pure-injection loader keys these have a legitimate
153
+ // operator-shell use (selecting a real interpreter), so they are
154
+ // reject-from-project-`.env` only, not scrubbed from the launch env.
155
+ "NODE_GYP_FORCE_PYTHON",
156
+ "npm_config_python",
157
+ "PYTHON",
158
+ // CPython executes $PYTHONSTARTUP at interactive startup — the Python
159
+ // analogue of NODE_REPL_EXTERNAL_MODULE. It stays reject-only (like
160
+ // PYTHON) because operators legitimately set it in their own shells.
161
+ "PYTHONSTARTUP",
162
+ // git's documented editor fallback chain (GIT_EDITOR → core.editor →
163
+ // $VISUAL → $EDITOR) executes these exactly like the blocked GIT_EDITOR,
164
+ // and the CLI's own useLaunchEditor spawns them from ordinary interactive
165
+ // flows.
166
+ "VISUAL",
167
+ "EDITOR",
168
+ // npm runs `$npm_config_git` as the git binary for install-from-git and
169
+ // similar flows, so a project `.env` pointing it at an attacker script is
170
+ // the same exec redirect as the interpreter keys above.
171
+ "npm_config_git",
172
+ // The CLI itself execs $BROWSER via openBrowserSecurely (core/utils/
173
+ // secure-browser-launcher.ts) before any CI/DISPLAY gate, so a project
174
+ // `.env` pointing it at an attacker script runs on any browser-launch
175
+ // flow.
176
+ "BROWSER",
177
+ // QWEN_CLI_ENTRY is the script path daemon-spawned session processes run.
178
+ // A project `.env` or settings.env fixing it turns
179
+ // `cd <untrusted repo> && qwen serve` into code execution as the daemon
180
+ // via an attacker-chosen ACP entrypoint, for every workspace's sessions.
181
+ "QWEN_CLI_ENTRY",
182
+ // QWEN_CDP_MCP_COMMAND is the command the daemon spawns as the
183
+ // browser-automation MCP adapter, and QWEN_SERVE_CDP_TUNNEL_OVER_WS
184
+ // switches that tunnel surface on. A project `.env` or settings.env fixing
185
+ // either hijacks the daemon the same way QWEN_CLI_ENTRY does; values the
186
+ // operator set in the daemon's launch env still apply.
187
+ "QWEN_CDP_MCP_COMMAND",
188
+ "QWEN_SERVE_CDP_TUNNEL_OVER_WS",
189
+ // DEV gates the daemon's inherited-loader-env scrub (run-qwen-serve.ts);
190
+ // only the dev harness (scripts/dev.js) stamps it into the launch env. A
191
+ // project file setting it would silently keep loader vars in the base env
192
+ // distributed to every workspace's session children — reopening the #8653
193
+ // vector for any repo whose .env happens to carry DEV=true.
194
+ "DEV"
195
+ ];
196
+ var HARDCODED_PROJECT_ENV_EXCLUSIONS = new Set(
197
+ PROJECT_ENV_HARDCODED_EXCLUSIONS.map((key) => key.toLowerCase())
198
+ );
199
+ var HARDCODED_PROJECT_ENV_EXCLUSION_PATTERNS = [
200
+ /^git_config_key_\d+$/u,
201
+ /^git_config_value_\d+$/u
202
+ ];
203
+ function isHardcodedProjectEnvExclusion(key) {
204
+ const lowerKey = key.toLowerCase();
205
+ return HARDCODED_PROJECT_ENV_EXCLUSIONS.has(lowerKey) || HARDCODED_PROJECT_ENV_EXCLUSION_PATTERNS.some(
206
+ (pattern) => pattern.test(lowerKey)
207
+ );
208
+ }
209
+ __name(isHardcodedProjectEnvExclusion, "isHardcodedProjectEnvExclusion");
210
+ var HOME_ENV_BOOTSTRAP_KEYS = [
211
+ "QWEN_HOME",
212
+ "QWEN_RUNTIME_DIR",
213
+ "QWEN_CODE_MCP_APPROVALS_PATH",
214
+ "QWEN_CODE_TRUSTED_FOLDERS_PATH"
215
+ ];
216
+ var INHERITED_LOADER_ENV_KEYS = [
217
+ "NODE_OPTIONS",
218
+ // npm maps its `node-options` config onto npm_config_node_options in the
219
+ // environment, and `npm run` lifecycle scripts apply it like NODE_OPTIONS —
220
+ // the same hijack through an adjacent key. The config-file keys are the
221
+ // same hijack one level up: they point npm at an attacker-chosen .npmrc
222
+ // that can itself set node-options/script-shell/ignore-scripts, and `npm
223
+ // run` itself exports them into the script environment.
224
+ "npm_config_node_options",
225
+ "npm_config_userconfig",
226
+ "npm_config_globalconfig",
227
+ "npm_config_script_shell",
228
+ "npm_config_prefix",
229
+ "NODE_PATH",
230
+ // OPENSSL_CONF points Node's startup crypto init at an attacker `.cnf`
231
+ // whose `nodejs_conf` section can dlopen an arbitrary engine/provider `.so`
232
+ // before any user code runs — a pure code-injection vector with no benign
233
+ // cross-workspace inheritance, so it is scrubbed like NODE_OPTIONS.
234
+ "OPENSSL_CONF",
235
+ // NODE_REPL_EXTERNAL_MODULE makes a spawned `node` REPL require() an
236
+ // attacker file at startup. npm_config_node_gyp overrides the node-gyp
237
+ // *script* npm's shim runs verbatim (`"$npm_config_node_gyp" "$@"`), and
238
+ // npm_config_init_module is require()d by `npm init` (even `-y`). All three
239
+ // are executable/module redirects with no legitimate login-shell use, so
240
+ // they join the scrubbed loader set rather than the reject-only tier.
241
+ "NODE_REPL_EXTERNAL_MODULE",
242
+ "npm_config_node_gyp",
243
+ "npm_config_init_module",
244
+ "LD_PRELOAD",
245
+ "LD_AUDIT",
246
+ "DYLD_INSERT_LIBRARIES",
247
+ "BASH_ENV",
248
+ // zsh sources $ZDOTDIR/.zshenv on every invocation, including
249
+ // non-interactive `zsh -c` — the zsh analogue of BASH_ENV.
250
+ "ZDOTDIR"
251
+ // BASH_FUNC_* exported-function definitions are bash's other env-driven
252
+ // code-import channel (non-interactive `bash -c` still imports them);
253
+ // matched by prefix in isLoaderEnvKey, not listed here.
254
+ ];
255
+ var canonicalLoaderKey = /* @__PURE__ */ __name((key) => key.toLowerCase().replace(/_/gu, "-"), "canonicalLoaderKey");
256
+ var LOADER_ENV_KEYS = new Set(
257
+ INHERITED_LOADER_ENV_KEYS.map(canonicalLoaderKey)
258
+ );
259
+ function isLoaderEnvKey(key) {
260
+ const canonical = canonicalLoaderKey(key);
261
+ return canonical.startsWith("bash-func-") || LOADER_ENV_KEYS.has(canonical);
262
+ }
263
+ __name(isLoaderEnvKey, "isLoaderEnvKey");
264
+ function scrubInheritedLoaderEnv(env, snapshotInto) {
265
+ const removedKeys = [];
266
+ for (const key of Object.keys(env)) {
267
+ if (isLoaderEnvKey(key)) {
268
+ const value = env[key];
269
+ if (snapshotInto && value !== void 0) snapshotInto.set(key, value);
270
+ delete env[key];
271
+ removedKeys.push(key);
272
+ }
273
+ }
274
+ return removedKeys;
275
+ }
276
+ __name(scrubInheritedLoaderEnv, "scrubInheritedLoaderEnv");
277
+ function scrubAndReportInheritedLoaderEnv(env, commandLabel, processLabel, snapshotInto) {
278
+ const removedKeys = scrubInheritedLoaderEnv(env, snapshotInto);
279
+ if (removedKeys.length > 0) {
280
+ writeStderrLineSafe(
281
+ `${commandLabel}: scrubbed inherited loader env vars from the ${processLabel} process; session subprocesses will not inherit them: ${removedKeys.join(", ")}`
282
+ );
283
+ }
284
+ return removedKeys;
285
+ }
286
+ __name(scrubAndReportInheritedLoaderEnv, "scrubAndReportInheritedLoaderEnv");
287
+ var sharedProcessEnvScrubDepth = 0;
288
+ var sharedProcessEnvScrubOriginals = /* @__PURE__ */ new Map();
289
+ function acquireInheritedLoaderEnvScrub(env, commandLabel, processLabel) {
290
+ sharedProcessEnvScrubDepth++;
291
+ const removedKeys = scrubAndReportInheritedLoaderEnv(
292
+ env,
293
+ commandLabel,
294
+ processLabel,
295
+ sharedProcessEnvScrubOriginals
296
+ );
297
+ let released = false;
298
+ return {
299
+ removedKeys,
300
+ release() {
301
+ if (released) return;
302
+ released = true;
303
+ sharedProcessEnvScrubDepth--;
304
+ if (sharedProcessEnvScrubDepth > 0) return;
305
+ for (const [key, value] of sharedProcessEnvScrubOriginals) {
306
+ if (!Object.hasOwn(env, key)) env[key] = value;
307
+ }
308
+ sharedProcessEnvScrubOriginals.clear();
309
+ }
310
+ };
311
+ }
312
+ __name(acquireInheritedLoaderEnvScrub, "acquireInheritedLoaderEnvScrub");
313
+ var reportedLoaderKeyRejections = /* @__PURE__ */ new Map();
314
+ var loaderKeyRejectionReporter;
315
+ function setLoaderKeyRejectionReporter(reporter) {
316
+ loaderKeyRejectionReporter = reporter;
317
+ }
318
+ __name(setLoaderKeyRejectionReporter, "setLoaderKeyRejectionReporter");
319
+ function clearLoaderKeyRejectionReporterIfCurrent(reporter) {
320
+ if (loaderKeyRejectionReporter === reporter) {
321
+ loaderKeyRejectionReporter = void 0;
322
+ }
323
+ }
324
+ __name(clearLoaderKeyRejectionReporterIfCurrent, "clearLoaderKeyRejectionReporterIfCurrent");
325
+ function reportRejectedLoaderKeys(source, candidateKeys) {
326
+ const rejectedKeys = candidateKeys.filter(isLoaderEnvKey);
327
+ const warnedKeys = reportedLoaderKeyRejections.get(source) ?? /* @__PURE__ */ new Set();
328
+ const freshKeys = rejectedKeys.filter((key) => !warnedKeys.has(key));
329
+ if (freshKeys.length === 0) return rejectedKeys;
330
+ for (const key of freshKeys) warnedKeys.add(key);
331
+ reportedLoaderKeyRejections.set(source, warnedKeys);
332
+ if (loaderKeyRejectionReporter) {
333
+ loaderKeyRejectionReporter(source, freshKeys);
334
+ } else {
335
+ writeStderrLineSafe(
336
+ `qwen: ${source} cannot set loader-affecting env vars; ignored: ` + freshKeys.join(", ")
337
+ );
338
+ }
339
+ return rejectedKeys;
340
+ }
341
+ __name(reportRejectedLoaderKeys, "reportRejectedLoaderKeys");
342
+ function resetLoaderKeyRejectionReportingForTesting() {
343
+ reportedLoaderKeyRejections.clear();
344
+ }
345
+ __name(resetLoaderKeyRejectionReportingForTesting, "resetLoaderKeyRejectionReportingForTesting");
346
+
347
+ // packages/cli/src/config/compile-cache.ts
348
+ init_esbuild_shims();
349
+ var PENDING_COMPILE_CACHE_ENV = "QWEN_CODE_PENDING_COMPILE_CACHE";
350
+ function publishPendingCompileCache(env = process.env) {
351
+ const pendingDirectory = env[PENDING_COMPILE_CACHE_ENV];
352
+ delete env[PENDING_COMPILE_CACHE_ENV];
353
+ if (pendingDirectory && !env["NODE_COMPILE_CACHE"] && env["NODE_DISABLE_COMPILE_CACHE"] !== "1") {
354
+ env["NODE_COMPILE_CACHE"] = pendingDirectory;
355
+ }
356
+ }
357
+ __name(publishPendingCompileCache, "publishPendingCompileCache");
358
+
359
+ export {
360
+ QWEN_CODE_SERVE_ENV,
361
+ QWEN_CODE_DESKTOP_ENV,
362
+ resolveAcpChannelFallback,
363
+ DEFAULT_EXCLUDED_ENV_VARS,
364
+ ENV_CORRUPTED_PATH,
365
+ ENV_WAS_RECOVERED,
366
+ ENV_ACP_REPEATED_TOOL_FAILURE_GUARD,
367
+ PROJECT_ENV_HARDCODED_EXCLUSIONS,
368
+ isHardcodedProjectEnvExclusion,
369
+ HOME_ENV_BOOTSTRAP_KEYS,
370
+ isLoaderEnvKey,
371
+ scrubInheritedLoaderEnv,
372
+ scrubAndReportInheritedLoaderEnv,
373
+ acquireInheritedLoaderEnvScrub,
374
+ setLoaderKeyRejectionReporter,
375
+ clearLoaderKeyRejectionReporterIfCurrent,
376
+ reportRejectedLoaderKeys,
377
+ resetLoaderKeyRejectionReportingForTesting,
378
+ publishPendingCompileCache
379
+ };
380
+ /**
381
+ * @license
382
+ * Copyright 2026 Qwen Team
383
+ * SPDX-License-Identifier: Apache-2.0
384
+ */
385
+ /**
386
+ * @license
387
+ * Copyright 2025 Qwen Team
388
+ * SPDX-License-Identifier: Apache-2.0
389
+ */