@qwen-code/qwen-code 0.20.0-nightly.20260722.b98306b7e → 0.20.0

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 (341) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +1 -1
  2. package/bundled/qc-helper/docs/features/auto-mode.md +16 -19
  3. package/bundled/qc-helper/docs/features/commands.md +0 -54
  4. package/bundled/qc-helper/docs/features/sub-agents.md +7 -16
  5. package/bundled/qc-helper/docs/integration-github-action.md +10 -10
  6. package/bundled/qc-helper/docs/qwen-serve.md +1 -2
  7. package/bundled/review/DESIGN.md +2 -2
  8. package/bundled/review/SKILL.md +4 -4
  9. package/chunks/{MaxSizedBox-YO432SD4.js → MaxSizedBox-B5YGZSYE.js} +34 -41
  10. package/chunks/{StandaloneSessionPicker-525JBPXC.js → StandaloneSessionPicker-CEGO2AZX.js} +50 -57
  11. package/chunks/{acpAgent-FORCZCBG.js → acpAgent-YUR43TLG.js} +496 -1487
  12. package/chunks/{agent-OZCWHX2J.js → agent-H4JIDL7S.js} +30 -37
  13. package/chunks/agent-headless-TTBEREQV.js +61 -0
  14. package/chunks/{anthropicContentGenerator-NMSS7IMV.js → anthropicContentGenerator-HVKLXOOU.js} +12 -13
  15. package/chunks/{artifact-tool-56T5IMBP.js → artifact-tool-WBCAMD3O.js} +3 -3
  16. package/chunks/{askUserQuestion-E25OBIC2.js → askUserQuestion-6DZC4UV5.js} +3 -3
  17. package/chunks/{bridge-HUUBAUDS.js → bridge-VL7ITBU5.js} +35 -42
  18. package/chunks/{build-GHIZ4MSZ.js → build-SSCNEHZZ.js} +1 -1
  19. package/chunks/{ca-N6VVUFVB.js → ca-2SL2BXTK.js} +201 -611
  20. package/chunks/{channel-worker-group-LFBT7K64.js → channel-worker-group-53CMOPFT.js} +5 -5
  21. package/chunks/{channel-worker-manager-3RUPERG2.js → channel-worker-manager-UTXILKC2.js} +5 -5
  22. package/chunks/{channel-worker-supervisor-A3KVATD3.js → channel-worker-supervisor-ZGO2W2MD.js} +4 -4
  23. package/chunks/{chunk-2LI23QA6.js → chunk-2HOVDT7W.js} +1 -1
  24. package/chunks/{chunk-QSZOJHCQ.js → chunk-2LL7TXB4.js} +2 -2
  25. package/chunks/{chunk-EGMNITTR.js → chunk-333CXMNJ.js} +5 -5
  26. package/chunks/{chunk-DGKZ6QL3.js → chunk-33XUAINQ.js} +21 -61
  27. package/chunks/{chunk-DKT6SIJC.js → chunk-4EP2PYYL.js} +5 -5
  28. package/chunks/{chunk-QW3QUYG5.js → chunk-4ILMYHEI.js} +3 -3
  29. package/chunks/{chunk-B5KE3KNO.js → chunk-4N3KMAIL.js} +32 -128
  30. package/chunks/{chunk-6ZBPS62S.js → chunk-4ODB7WIB.js} +1 -1
  31. package/chunks/{chunk-5XPUJM4N.js → chunk-4XNLIGVA.js} +298 -576
  32. package/chunks/{chunk-67SZUDUH.js → chunk-542SK7KV.js} +1608 -243
  33. package/chunks/{chunk-RZZNAWTE.js → chunk-5JBR5XIK.js} +2 -2
  34. package/chunks/{chunk-E4IMU4Y5.js → chunk-5SCI6E3E.js} +1 -1
  35. package/chunks/{chunk-ZKY7USAE.js → chunk-6AFUCL3D.js} +1 -1
  36. package/chunks/{chunk-5I5BM454.js → chunk-6EFTQYW7.js} +1 -1
  37. package/chunks/{chunk-BXCXDT2T.js → chunk-7PZ2ATFZ.js} +29 -54
  38. package/chunks/{chunk-FJZPCXZM.js → chunk-7RMOXZTC.js} +4 -4
  39. package/chunks/{chunk-XPWXDCW5.js → chunk-7SXZC7ID.js} +6 -7
  40. package/chunks/{chunk-O2WEV2LS.js → chunk-A5LYNIW7.js} +8 -8
  41. package/chunks/{chunk-SEHBVG2S.js → chunk-AJSJ5TTU.js} +1 -1
  42. package/chunks/{chunk-422RQSNN.js → chunk-AKX4WPPP.js} +86 -307
  43. package/chunks/{chunk-QVQCCBMW.js → chunk-ANPINBOF.js} +5 -5
  44. package/chunks/{chunk-JJEFX6U5.js → chunk-AQIEINAY.js} +1766 -28
  45. package/chunks/{chunk-7Z6JQEL6.js → chunk-AYCDXHZB.js} +1 -1
  46. package/chunks/{chunk-BKZEHVPV.js → chunk-B3KGZCQN.js} +169 -177
  47. package/chunks/{chunk-6X4GWOPW.js → chunk-BDBMYST4.js} +1 -1
  48. package/chunks/{chunk-25WFJZL5.js → chunk-BMWMT5Y2.js} +373 -3
  49. package/chunks/{chunk-EDANOBFR.js → chunk-BRRF37CO.js} +6 -6
  50. package/chunks/{chunk-QLJUC7TG.js → chunk-BVLROR2T.js} +1 -1
  51. package/chunks/{chunk-OQB4EXO4.js → chunk-C27BYUX6.js} +11 -14
  52. package/chunks/{chunk-GDBCCE2J.js → chunk-CB2HFGRV.js} +6 -31
  53. package/chunks/chunk-CPCVCKKF.js +358 -0
  54. package/chunks/{chunk-K6YXJ3J5.js → chunk-CV63PP6U.js} +1 -1
  55. package/chunks/{chunk-BWGIRN4Z.js → chunk-CZF3E5GF.js} +1 -1
  56. package/chunks/{chunk-6NAAGP57.js → chunk-D22SX43D.js} +1 -1
  57. package/chunks/{chunk-X6N25LXS.js → chunk-D2VIDMVM.js} +2 -2
  58. package/chunks/{chunk-E7O22QBU.js → chunk-DBE4QFZS.js} +23 -27
  59. package/chunks/{chunk-4ZAHUGSC.js → chunk-DP5GXXNZ.js} +1 -5
  60. package/chunks/{chunk-Q2YKNMLS.js → chunk-EAUYY7SS.js} +3 -3
  61. package/chunks/{chunk-KHOVYUHX.js → chunk-EIAK6Q2B.js} +2 -2
  62. package/chunks/{chunk-NPQDJGKU.js → chunk-EZVDJFZ7.js} +1 -1
  63. package/chunks/{chunk-FODK6UMO.js → chunk-FEOZBUMT.js} +27 -0
  64. package/chunks/{chunk-6NHK6HS7.js → chunk-FLSVD6BS.js} +3 -3
  65. package/chunks/{chunk-LLJNFFFT.js → chunk-FQD7GFSV.js} +3 -3
  66. package/chunks/{chunk-T2L47JJK.js → chunk-FSL5W5TI.js} +3 -3
  67. package/chunks/{chunk-JCW2R7WC.js → chunk-G45X5TRN.js} +72 -1
  68. package/chunks/{chunk-ZHERRXZJ.js → chunk-GKY2OJ7R.js} +1 -1
  69. package/chunks/{chunk-6IL7KRLE.js → chunk-GMGDLUC7.js} +1 -1
  70. package/chunks/{chunk-N2HDLRGT.js → chunk-HZPN55E5.js} +1 -1
  71. package/chunks/{chunk-NTC7J4X7.js → chunk-I2PYAYFM.js} +3 -3
  72. package/chunks/{chunk-RVWSD6GI.js → chunk-IR46U7RB.js} +3 -3
  73. package/chunks/{chunk-W6E7KTQL.js → chunk-IVPSS6EL.js} +4 -4
  74. package/chunks/{chunk-4K56OJFJ.js → chunk-JD3MKVKL.js} +1 -1
  75. package/chunks/{chunk-SP5WRGVG.js → chunk-JNWZQ27S.js} +3 -3
  76. package/chunks/{chunk-VAUDHMX6.js → chunk-KDC6GNQR.js} +4 -4
  77. package/chunks/{chunk-5TSCAYXT.js → chunk-KG3XV6FH.js} +2 -29
  78. package/chunks/{chunk-HCQ2Q3KF.js → chunk-KOR3XKCA.js} +4 -10
  79. package/chunks/{chunk-52Y2T4L3.js → chunk-KQNM4EO7.js} +5 -137
  80. package/chunks/{chunk-4K7VDKAD.js → chunk-KTUQMDEP.js} +1 -1
  81. package/chunks/{chunk-Z2FTZM4Z.js → chunk-KX6UK4VJ.js} +19929 -22391
  82. package/chunks/{chunk-JYS55H6Z.js → chunk-MAQQGNQ5.js} +7 -66
  83. package/chunks/{chunk-7FNV372W.js → chunk-MJ6S23WZ.js} +4 -4
  84. package/chunks/{chunk-D7WXIW7H.js → chunk-NBMIC7DR.js} +4 -4
  85. package/chunks/{chunk-HGGEN2SC.js → chunk-NDMQLV4Y.js} +4 -4
  86. package/chunks/{chunk-FFFM6NJV.js → chunk-NEEB7UEN.js} +2 -1
  87. package/chunks/{chunk-WKGGZF7Z.js → chunk-NGFEPAE6.js} +6 -8
  88. package/chunks/{chunk-RVLZCXEE.js → chunk-NIJEXGV6.js} +10 -79
  89. package/chunks/{chunk-LMY4HCMA.js → chunk-O3OCNYY5.js} +2 -2
  90. package/chunks/{chunk-RIEABAJC.js → chunk-O3Z73NBP.js} +7 -7
  91. package/chunks/{chunk-VBZBVAQ3.js → chunk-OEO2ERWK.js} +33 -54
  92. package/chunks/{chunk-KQQ757OQ.js → chunk-OLMETXLX.js} +2 -2
  93. package/chunks/{chunk-LIZRAKPB.js → chunk-OOCI5VVU.js} +1 -1
  94. package/chunks/{chunk-GPSKDNEE.js → chunk-OONJNQ42.js} +3 -3
  95. package/chunks/{chunk-YM3SZTH4.js → chunk-OP4MOGXF.js} +1 -8
  96. package/chunks/{chunk-FCPNARPD.js → chunk-OWCALFEG.js} +1 -1
  97. package/chunks/{chunk-MPZ34JE7.js → chunk-OYZWQNWG.js} +2 -2
  98. package/chunks/{chunk-QBUDF33N.js → chunk-PBATSWUQ.js} +1 -1
  99. package/chunks/{chunk-6MNDXSG6.js → chunk-PBWEWI4N.js} +69 -76
  100. package/chunks/{chunk-OCCDRJIS.js → chunk-PF4CHQOJ.js} +6 -6
  101. package/chunks/{chunk-BH32VITB.js → chunk-PGEPSDJI.js} +8 -13
  102. package/chunks/{chunk-4LVZNIDO.js → chunk-QKYTTBYW.js} +1 -1
  103. package/chunks/{chunk-VYPFXUCB.js → chunk-R3VWUU2E.js} +1 -1
  104. package/chunks/{chunk-RV4C2ZFG.js → chunk-RFIAR4YL.js} +1 -1
  105. package/chunks/{chunk-P4B4SXDS.js → chunk-S2PD3EZD.js} +1 -1
  106. package/chunks/{chunk-H6T65C7O.js → chunk-S2W2LVDU.js} +3 -3
  107. package/chunks/{chunk-VJ4P64ID.js → chunk-S2XVRHDN.js} +1 -1
  108. package/chunks/chunk-SEKHYHMS.js +45 -0
  109. package/chunks/{chunk-JNEA3NW7.js → chunk-SJMV7ZBK.js} +8 -8
  110. package/chunks/{chunk-THJNPLI4.js → chunk-TB6UDU4T.js} +16 -16
  111. package/chunks/{chunk-R3D7SK6L.js → chunk-TIH2ZTOC.js} +2 -2
  112. package/chunks/{chunk-3FML67YK.js → chunk-TKLLK6XQ.js} +11 -11
  113. package/chunks/{chunk-SMVDDPEJ.js → chunk-TMQ6XQCX.js} +53 -170
  114. package/chunks/{chunk-QNLNLENL.js → chunk-UEY4AYUL.js} +2 -2
  115. package/chunks/{chunk-BLTELXOK.js → chunk-VDWBQ5AW.js} +1 -1
  116. package/chunks/{chunk-WGBLCAVW.js → chunk-VEXFOTEO.js} +3 -3
  117. package/chunks/{chunk-4RAFVWW2.js → chunk-VZQUV7VK.js} +1 -1
  118. package/chunks/chunk-W7FJ3N32.js +49 -0
  119. package/chunks/{chunk-UGYMA4EI.js → chunk-W7H223ZZ.js} +1 -1
  120. package/chunks/{chunk-UH3WSE5L.js → chunk-X6YQWCIJ.js} +1 -13
  121. package/chunks/{chunk-H4AR2JQF.js → chunk-XVVH63JG.js} +3 -3
  122. package/chunks/{chunk-QKTHJXCS.js → chunk-Y2ENGUD6.js} +1 -1
  123. package/chunks/{chunk-QD6BRERJ.js → chunk-YWEW33JY.js} +7 -7
  124. package/chunks/{chunk-57FIIFJN.js → chunk-ZEOZL37W.js} +1 -1
  125. package/chunks/chunk-ZFKNWQGQ.js +74639 -0
  126. package/chunks/{computer-use-XPLRRVJM.js → computer-use-NIWQNUZF.js} +35 -42
  127. package/chunks/{config-utils-WYUQ7II4.js → config-utils-AHQ6YZ66.js} +3 -3
  128. package/chunks/contextCommand-L2COEUHS.js +66 -0
  129. package/chunks/{create-sub-session-5YJR5PAM.js → create-sub-session-MGNX52P3.js} +30 -37
  130. package/chunks/{create-sub-session-AZ77LBL3.js → create-sub-session-P26FE5GG.js} +3 -3
  131. package/chunks/{cron-create-KTWJM7QT.js → cron-create-JWFHBDRQ.js} +5 -5
  132. package/chunks/{cron-delete-2P3I5ULL.js → cron-delete-GDX4E26G.js} +5 -5
  133. package/chunks/{cron-list-PXDPGEDQ.js → cron-list-USMAIWPT.js} +5 -5
  134. package/chunks/{daemon-KLPTQIE4.js → daemon-RG2MAI6T.js} +81 -138
  135. package/chunks/daemon-status-provider-NL4IAG7B.js +74 -0
  136. package/chunks/{de-4IBXM7CN.js → de-I7ZIYXZC.js} +1 -5
  137. package/chunks/{dist-HMU6CYS4.js → dist-2BHAYBKP.js} +2 -2
  138. package/chunks/{dist-PJLG2XYX.js → dist-2MIU4UUH.js} +1 -1
  139. package/chunks/{dist-UIFWIFRO.js → dist-53PZYC5B.js} +2 -2
  140. package/chunks/{dist-OAV7LJGJ.js → dist-AU7NQQRP.js} +1 -1
  141. package/chunks/{dist-OMW6WDEO.js → dist-FUTEXY6A.js} +1 -1
  142. package/chunks/{dist-XRYV6TJP.js → dist-WGTQO7F2.js} +25 -65
  143. package/chunks/{earlyInputCapture-XMECIN6Y.js → earlyInputCapture-L6I2A22T.js} +31 -38
  144. package/chunks/{edit-MMPLBVZU.js → edit-3QV3JZJL.js} +37 -42
  145. package/chunks/{en-USMCCJAJ.js → en-XE34GKAA.js} +1 -5
  146. package/chunks/{enter-worktree-BD7MCCG7.js → enter-worktree-4GMMF7EG.js} +35 -42
  147. package/chunks/{enterPlanMode-BQNJC23R.js → enterPlanMode-L5UWBAUC.js} +36 -48
  148. package/chunks/{environment-F3KL5Z5S.js → environment-3OV7UQOT.js} +32 -39
  149. package/chunks/{errors-VJ544HIS.js → errors-LEOF5QG4.js} +32 -39
  150. package/chunks/{exit-worktree-RDIQXZMI.js → exit-worktree-DDP57JLV.js} +35 -42
  151. package/chunks/{exitPlanMode-UNCZQPTX.js → exitPlanMode-CJBLGPIP.js} +35 -42
  152. package/chunks/{fast-path-H7N32H7D.js → fast-path-M6RP2ING.js} +3 -4
  153. package/chunks/{fast-path-settings-XB3CPUJT.js → fast-path-settings-DAOVFADC.js} +2 -2
  154. package/chunks/{fr-WVHEBDDB.js → fr-X7KDVZIY.js} +1 -5
  155. package/chunks/{gemini-G4VKT5DQ.js → gemini-H4PHBJTL.js} +89 -97
  156. package/chunks/{geminiContentGenerator-MDAL2B4C.js → geminiContentGenerator-VURJYPWP.js} +5 -5
  157. package/chunks/{getMachineId-bsd-QFVLPUPT.js → getMachineId-bsd-EXV7SWPA.js} +1 -1
  158. package/chunks/{getMachineId-darwin-DGMQQE2E.js → getMachineId-darwin-IUOMFXU3.js} +1 -1
  159. package/chunks/{getMachineId-linux-R4Z6CSWC.js → getMachineId-linux-K7XJYFHL.js} +1 -1
  160. package/chunks/{getMachineId-unsupported-Z3SBVBUV.js → getMachineId-unsupported-EA5FDRJ6.js} +1 -1
  161. package/chunks/{getMachineId-win-SCK5UFDT.js → getMachineId-win-KBA6RAI5.js} +1 -1
  162. package/chunks/{glob-JBT6FGZL.js → glob-2KUSRAVQ.js} +35 -42
  163. package/chunks/{grep-5NUIQ63X.js → grep-B5RXVESV.js} +35 -42
  164. package/chunks/handleAutoUpdate-QQVIWXKT.js +67 -0
  165. package/chunks/{i18n-IPHO7BGL.js → i18n-N6OBDORT.js} +31 -38
  166. package/chunks/initializer-6WCFNDLL.js +72 -0
  167. package/chunks/installationInfo-6J3WPXNS.js +64 -0
  168. package/chunks/{ja-KY4ROZTE.js → ja-2ICT3KXF.js} +1 -5
  169. package/chunks/{keychain-token-storage-6ACJDYIB.js → keychain-token-storage-DWRJMNH3.js} +3 -3
  170. package/chunks/list-HOWQSWP6.js +75 -0
  171. package/chunks/loadedSettingsAdapter-AO4YBRXZ.js +69 -0
  172. package/chunks/{loop-wakeup-RNMRVA66.js → loop-wakeup-5GLTUBHA.js} +6 -6
  173. package/chunks/{ls-J2ZI5XYK.js → ls-FHBY3Y7I.js} +5 -5
  174. package/chunks/{lsp-UMS3NUB5.js → lsp-B6VMEW6Y.js} +3 -3
  175. package/chunks/mcp-QH7QNXOH.js +69 -0
  176. package/chunks/{monitor-SIX5LMEK.js → monitor-GLJZDNPS.js} +35 -42
  177. package/chunks/nonInteractiveCli-TI7EMPXD.js +126 -0
  178. package/chunks/{notebook-edit-CWVOTW3I.js → notebook-edit-AVCIWS4F.js} +38 -43
  179. package/chunks/{openaiContentGenerator-FELHHJAN.js → openaiContentGenerator-B7W24G3D.js} +17 -22
  180. package/chunks/{pidfile-2ZQGHGPJ.js → pidfile-UEHAT6DH.js} +31 -38
  181. package/chunks/{processUtils-M3RKQCI4.js → processUtils-XZPY2PBB.js} +2 -2
  182. package/chunks/{pt-OK455PLH.js → pt-JJ4XPIBP.js} +1 -5
  183. package/chunks/{qwenContentGenerator-RBFIZMBC.js → qwenContentGenerator-6GUTWJIC.js} +35 -44
  184. package/chunks/{qwenOAuth2-S2BUDQM3.js → qwenOAuth2-GASEEWGU.js} +15 -18
  185. package/chunks/{read-file-WQCCV6HY.js → read-file-SQJONF6A.js} +11 -13
  186. package/chunks/{read-mcp-resource-F6HYMDUY.js → read-mcp-resource-AKCL7I43.js} +3 -3
  187. package/chunks/{record-artifact-7GCFLDD7.js → record-artifact-PEUB7727.js} +3 -3
  188. package/chunks/{resumeHistoryUtils-NDYMU2WO.js → resumeHistoryUtils-PFQ2A23X.js} +36 -43
  189. package/chunks/ripGrep-QCK22GDU.js +59 -0
  190. package/chunks/{ru-7SPDGMGD.js → ru-STR4KTW7.js} +1 -5
  191. package/chunks/{run-qwen-serve-FY5MMHPN.js → run-qwen-serve-OZGR3FQA.js} +82 -104
  192. package/chunks/{runtime-LONMMWKO.js → runtime-SNVAP6EH.js} +40 -49
  193. package/chunks/{scheduler-KYNL2MHI.js → scheduler-Z7QLMUWA.js} +30 -37
  194. package/chunks/{send-message-PYIJ2PZL.js → send-message-3RHE7HSM.js} +4 -6
  195. package/chunks/{serve-VNORFL4H.js → serve-BT7KS6SC.js} +36 -43
  196. package/chunks/{server-X2KCJKA3.js → server-SO64U3X5.js} +284 -988
  197. package/chunks/{session-CSYW4ELX.js → session-2KL2WQAH.js} +173 -92
  198. package/chunks/{settings-QZJ4XWS3.js → settings-KITVOUSV.js} +39 -46
  199. package/chunks/{shell-ELMKOZKP.js → shell-BITUVH2R.js} +30 -37
  200. package/chunks/{skill-IBUGJX5S.js → skill-SOQHY455.js} +20 -24
  201. package/chunks/{spawnChannel-SWCGOB2N.js → spawnChannel-2BU3AULL.js} +32 -39
  202. package/chunks/{src-FOUKVFPZ.js → src-43LM7JLB.js} +209 -279
  203. package/chunks/{standalone-update-5U5IRIN5.js → standalone-update-YG5JUYCM.js} +32 -39
  204. package/chunks/{startInteractiveUI-B3KIQ363.js → startInteractiveUI-3RGTGEX5.js} +895 -1092
  205. package/chunks/{syntheticOutput-H7RTI5KL.js → syntheticOutput-FG5PQKIR.js} +4 -4
  206. package/chunks/{task-create-7474AJJD.js → task-create-HX32YXO7.js} +8 -10
  207. package/chunks/{task-list-633HGOIB.js → task-list-QWSY4ZIU.js} +6 -6
  208. package/chunks/{task-stop-MNUGHPIA.js → task-stop-GWC6UWAL.js} +3 -3
  209. package/chunks/{task-update-66GQB5LI.js → task-update-NCTAB73Q.js} +8 -10
  210. package/chunks/{team-create-AT3OPBS4.js → team-create-FXN3PEBP.js} +35 -42
  211. package/chunks/{team-delete-BB3CG3QF.js → team-delete-KK37HTOG.js} +6 -6
  212. package/chunks/{team-plan-approval-6AYAQ3KG.js → team-plan-approval-GEIZ356Q.js} +35 -42
  213. package/chunks/theme-manager-IAETOI25.js +63 -0
  214. package/chunks/{todoWrite-KRAUN54W.js → todoWrite-ERCAMLFS.js} +5 -5
  215. package/chunks/{tool-search-2ZFYIVVW.js → tool-search-XKK7DNOK.js} +17 -21
  216. package/chunks/total-session-admission-BJLDHKJN.js +69 -0
  217. package/chunks/{trustedFolders-VHGVDSZU.js → trustedFolders-5XCVNEUU.js} +31 -38
  218. package/chunks/{update-relaunch-RM5E3W4P.js → update-relaunch-FMVZK6XF.js} +17 -17
  219. package/chunks/updateCheck-YZZB7YBU.js +70 -0
  220. package/chunks/{useAutoAcceptIndicator-AAPKHC46.js → useAutoAcceptIndicator-ZSQX4I2H.js} +40 -47
  221. package/chunks/{validateNonInterActiveAuth-7WGVSFOZ.js → validateNonInterActiveAuth-PRVEB6GG.js} +72 -79
  222. package/chunks/{version-M7BDNXTT.js → version-AZMG6KWL.js} +1 -1
  223. package/chunks/{web-fetch-UZSKXY3L.js → web-fetch-EPGJ5OQQ.js} +41 -100
  224. package/chunks/{workflow-OCSRM2L2.js → workflow-UTNVPW22.js} +39 -47
  225. package/chunks/workspace-providers-status-EADV364W.js +72 -0
  226. package/chunks/{workspace-registration-store-QDOLWEMY.js → workspace-registration-store-F3ZX3YHT.js} +2 -8
  227. package/chunks/workspace-registry-W6VMFYZU.js +73 -0
  228. package/chunks/workspace-service-F3KIN2UN.js +84 -0
  229. package/chunks/workspace-skills-status-YVICUR5Y.js +71 -0
  230. package/chunks/write-file-CVGF2OKV.js +596 -0
  231. package/chunks/{zh-WY5DWYZD.js → zh-6ANG2HTL.js} +1 -5
  232. package/chunks/{zh-TW-BM47YBFH.js → zh-TW-4RR3YHNN.js} +1 -5
  233. package/cli-entry.js +12 -164
  234. package/cli.js +11 -18
  235. package/locales/ca.js +203 -772
  236. package/locales/de.js +2 -8
  237. package/locales/en.js +2 -8
  238. package/locales/fr.js +2 -8
  239. package/locales/ja.js +2 -8
  240. package/locales/pt.js +2 -8
  241. package/locales/ru.js +2 -8
  242. package/locales/zh-TW.js +2 -8
  243. package/locales/zh.js +2 -8
  244. package/package.json +3 -3
  245. package/web-shell/assets/{arc-ByltRugA.js → arc-Buk1besA.js} +1 -1
  246. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CCRTto5d.js → architectureDiagram-3BPJPVTR-B1aUKYDC.js} +1 -1
  247. package/web-shell/assets/{blockDiagram-GPEHLZMM-Jfy36u1L.js → blockDiagram-GPEHLZMM-CRTdg3Zx.js} +1 -1
  248. package/web-shell/assets/{c4Diagram-AAUBKEIU-4d5FfEZ0.js → c4Diagram-AAUBKEIU-DFdRMp5g.js} +1 -1
  249. package/web-shell/assets/channel-04R0vLbG.js +1 -0
  250. package/web-shell/assets/{chunk-2J33WTMH-BPwxCEro.js → chunk-2J33WTMH-4rYQdkEI.js} +1 -1
  251. package/web-shell/assets/{chunk-4BX2VUAB-jY7ZmJWY.js → chunk-4BX2VUAB-Coi-pQJy.js} +1 -1
  252. package/web-shell/assets/{chunk-55IACEB6-C98HgCsS.js → chunk-55IACEB6-BtBjz02t.js} +1 -1
  253. package/web-shell/assets/{chunk-727SXJPM-cDu-ge-q.js → chunk-727SXJPM-CGYOWorl.js} +1 -1
  254. package/web-shell/assets/{chunk-AQP2D5EJ-BKdJwxXK.js → chunk-AQP2D5EJ-CH5AKhqx.js} +1 -1
  255. package/web-shell/assets/{chunk-FMBD7UC4-DnuxqwMu.js → chunk-FMBD7UC4-Cd50-w85.js} +1 -1
  256. package/web-shell/assets/{chunk-ND2GUHAM-C4fZNPv0.js → chunk-ND2GUHAM-C2wF3KCK.js} +1 -1
  257. package/web-shell/assets/{chunk-QZHKN3VN-Cf4XWOmz.js → chunk-QZHKN3VN-pCeRTaWi.js} +1 -1
  258. package/web-shell/assets/classDiagram-4FO5ZUOK-Bw9SOwAV.js +1 -0
  259. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Bw9SOwAV.js +1 -0
  260. package/web-shell/assets/{cose-bilkent-S5V4N54A-C82mFiqj.js → cose-bilkent-S5V4N54A-B-_fAB6D.js} +1 -1
  261. package/web-shell/assets/{dagre-BM42HDAG-Df8KACER.js → dagre-BM42HDAG-ChSPNHpL.js} +1 -1
  262. package/web-shell/assets/{diagram-2AECGRRQ-EzNs7s_2.js → diagram-2AECGRRQ-BX7cFOF3.js} +1 -1
  263. package/web-shell/assets/{diagram-5GNKFQAL-BRLNvreg.js → diagram-5GNKFQAL-BQUTW92n.js} +1 -1
  264. package/web-shell/assets/{diagram-KO2AKTUF-2HLYHRjC.js → diagram-KO2AKTUF-BkYPh3e4.js} +1 -1
  265. package/web-shell/assets/{diagram-LMA3HP47-DeH0NzSp.js → diagram-LMA3HP47-Cl6jsNyx.js} +1 -1
  266. package/web-shell/assets/{diagram-OG6HWLK6-k5Gn47-G.js → diagram-OG6HWLK6-DRWoHz8n.js} +1 -1
  267. package/web-shell/assets/{erDiagram-TEJ5UH35-gPHFo79f.js → erDiagram-TEJ5UH35-CGvFcZco.js} +1 -1
  268. package/web-shell/assets/{flowDiagram-I6XJVG4X-DYBOiTRW.js → flowDiagram-I6XJVG4X-vms6oVdv.js} +1 -1
  269. package/web-shell/assets/{ganttDiagram-6RSMTGT7-cxjAuic9.js → ganttDiagram-6RSMTGT7-ukT_sfmi.js} +1 -1
  270. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-3nPqpmCP.js → gitGraphDiagram-PVQCEYII-Bn2ZE2Ut.js} +1 -1
  271. package/web-shell/assets/index-DgkKrjw3.js +1187 -0
  272. package/web-shell/assets/index-Rv6mOAN9.css +5 -0
  273. package/web-shell/assets/{index-Cl8d-1bK.js → index-wFXp7W68.js} +1 -1
  274. package/web-shell/assets/{infoDiagram-5YYISTIA-Dph21pR5.js → infoDiagram-5YYISTIA-DHJdSi7x.js} +1 -1
  275. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Cjg1hSaG.js → ishikawaDiagram-YF4QCWOH-DOvd2Wph.js} +1 -1
  276. package/web-shell/assets/{journeyDiagram-JHISSGLW-CR-IzvnU.js → journeyDiagram-JHISSGLW-CH_urMCT.js} +1 -1
  277. package/web-shell/assets/{kanban-definition-UN3LZRKU-BYmuybuC.js → kanban-definition-UN3LZRKU-FKiBdgbH.js} +1 -1
  278. package/web-shell/assets/{linear-CngEEoy8.js → linear-0ZVQFVKf.js} +1 -1
  279. package/web-shell/assets/{mermaid.core-G6fbZRPf.js → mermaid.core-DJ05ZZIK.js} +5 -5
  280. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtnqnUwJ.js → mindmap-definition-RKZ34NQL-BPuUhkUm.js} +1 -1
  281. package/web-shell/assets/{pieDiagram-4H26LBE5-XTq6UHIA.js → pieDiagram-4H26LBE5-yLFKcXyG.js} +1 -1
  282. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D1J5PrsS.js → quadrantDiagram-W4KKPZXB-irWqc1pE.js} +1 -1
  283. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CLcBUy3t.js → requirementDiagram-4Y6WPE33-B_4uMoIV.js} +1 -1
  284. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-iwKV02_6.js → sankeyDiagram-5OEKKPKP-ciA4GPwk.js} +1 -1
  285. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-7NFYQcEX.js → sequenceDiagram-3UESZ5HK-CRdZvy0U.js} +1 -1
  286. package/web-shell/assets/{stateDiagram-AJRCARHV-Bvm4Wih6.js → stateDiagram-AJRCARHV-DaYIkCCn.js} +1 -1
  287. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DWBoO4UY.js +1 -0
  288. package/web-shell/assets/{timeline-definition-PNZ67QCA-B4FZFE9O.js → timeline-definition-PNZ67QCA-oBUKv6iH.js} +1 -1
  289. package/web-shell/assets/{vennDiagram-CIIHVFJN-CvMBpmtL.js → vennDiagram-CIIHVFJN-CGW9Sdmb.js} +1 -1
  290. package/web-shell/assets/{wardley-L42UT6IY-E3ag2327.js → wardley-L42UT6IY-CvwKJOCm.js} +1 -1
  291. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BEXWlgxC.js → wardleyDiagram-YWT4CUSO-Ipc260sN.js} +1 -1
  292. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CICK05gI.js → xychartDiagram-2RQKCTM6-D6-CM7pK.js} +1 -1
  293. package/web-shell/index.html +2 -2
  294. package/chunks/agent-headless-QTKDKVED.js +0 -68
  295. package/chunks/chunk-2RFKHEXL.js +0 -74
  296. package/chunks/chunk-43T5WDQ7.js +0 -127
  297. package/chunks/chunk-6PVPNMXU.js +0 -29
  298. package/chunks/chunk-7362QS5B.js +0 -2256
  299. package/chunks/chunk-D7ZI5C7O.js +0 -20600
  300. package/chunks/chunk-GLNBDYUX.js +0 -38
  301. package/chunks/chunk-GMLTZG4O.js +0 -391
  302. package/chunks/chunk-HTR4WV6U.js +0 -327
  303. package/chunks/chunk-KWK7UE6L.js +0 -6194
  304. package/chunks/chunk-M7WBGLYP.js +0 -151
  305. package/chunks/chunk-MMT6IQCT.js +0 -121
  306. package/chunks/chunk-NABLFI57.js +0 -82
  307. package/chunks/chunk-OQ5SYCPE.js +0 -10017
  308. package/chunks/chunk-PI6ECBP3.js +0 -1780
  309. package/chunks/chunk-U7ZFW55U.js +0 -2098
  310. package/chunks/chunk-WHGVTP7Q.js +0 -1049
  311. package/chunks/chunk-XHATNRQA.js +0 -1500
  312. package/chunks/contextCommand-2W675HYY.js +0 -73
  313. package/chunks/daemon-status-provider-QZCVTG6N.js +0 -81
  314. package/chunks/handleAutoUpdate-EF3LY7MI.js +0 -74
  315. package/chunks/initializer-HCOCXGBI.js +0 -79
  316. package/chunks/installationInfo-UEBNCLFW.js +0 -73
  317. package/chunks/list-4SKXTNSD.js +0 -82
  318. package/chunks/loadedSettingsAdapter-EQWK5CG6.js +0 -76
  319. package/chunks/managed-npm-update-ZUZU4UFM.js +0 -333
  320. package/chunks/mcp-4Z3EC4SI.js +0 -76
  321. package/chunks/nonInteractiveCli-FTUKIU5R.js +0 -133
  322. package/chunks/ripGrep-K2E3F5ED.js +0 -66
  323. package/chunks/sdk-exporters-grpc-ETLH47EP.js +0 -23214
  324. package/chunks/sdk-exporters-http-T3POX73F.js +0 -563
  325. package/chunks/sdk-impl-NSLPDH6I.js +0 -9193
  326. package/chunks/theme-manager-733OBN7I.js +0 -70
  327. package/chunks/total-session-admission-TZ4NVA6B.js +0 -76
  328. package/chunks/updateCheck-DGY3LFKB.js +0 -89
  329. package/chunks/web-search-EG64C5VB.js +0 -731
  330. package/chunks/workspace-providers-status-HZLYOFRA.js +0 -79
  331. package/chunks/workspace-registry-EVSTTG3G.js +0 -80
  332. package/chunks/workspace-service-DNQMT6FN.js +0 -91
  333. package/chunks/workspace-skills-status-ICGPGD6F.js +0 -78
  334. package/chunks/write-file-K6R5F3IZ.js +0 -66
  335. package/web-shell/assets/channel-4N2UIFcG.js +0 -1
  336. package/web-shell/assets/classDiagram-4FO5ZUOK-Q4dYOtsh.js +0 -1
  337. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Q4dYOtsh.js +0 -1
  338. package/web-shell/assets/index-B7jzUZ_s.css +0 -5
  339. package/web-shell/assets/index-gE8OWwj_.js +0 -1197
  340. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-xXU_zO2Z.js +0 -1
  341. package/chunks/{chunk-QZJY47IE.js → chunk-PEJWA3QQ.js} +5 -5
@@ -748,7 +748,7 @@ For sandbox image selection, precedence is:
748
748
  | `--extensions` | `-e` | Specifies a list of extensions to use for the session. | Extension names | If not provided, all available extensions are used. Use the special term `qwen -e none` to disable all extensions. Example: `qwen -e my-extension -e my-other-extension` |
749
749
  | `--list-extensions` | `-l` | Lists all available extensions and exits. | | |
750
750
  | `--proxy` | | Sets the proxy for the CLI. | Proxy URL | Example: `--proxy http://localhost:7890`. |
751
- | `--include-directories` | | Includes additional directories in the workspace for multi-directory support. | Directory paths | Can be specified multiple times or as comma-separated values. Example: `--include-directories /path/to/project1,/path/to/project2` or `--include-directories /path/to/project1 --include-directories /path/to/project2` |
751
+ | `--include-directories` | | Includes additional directories in the workspace for multi-directory support. | Directory paths | Can be specified multiple times or as comma-separated values. 5 directories can be added at maximum. Example: `--include-directories /path/to/project1,/path/to/project2` or `--include-directories /path/to/project1 --include-directories /path/to/project2` |
752
752
  | `--screen-reader` | | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | | |
753
753
  | `--version` | | Displays the version of the CLI. | | |
754
754
  | `--openai-logging` | | Enables logging of OpenAI API calls for debugging and analysis. | | This flag overrides the `enableOpenAILogging` setting in `settings.json`. |
@@ -175,8 +175,8 @@ This is useful for production or high-security environments where you
175
175
  want defense-in-depth: even seemingly harmless commands are reviewed by
176
176
  the classifier before execution. The trade-off is added latency (~300ms
177
177
  per read-only shell call) and reliance on classifier availability — if
178
- the classifier API is unreachable, read-only shell commands will also require
179
- manual approval.
178
+ the classifier API is unreachable, read-only shell commands will also be
179
+ blocked (fail-closed).
180
180
 
181
181
  > [!note]
182
182
  >
@@ -187,13 +187,18 @@ manual approval.
187
187
 
188
188
  ## Reading the decision
189
189
 
190
- When the classifier blocks an action, the tool call fails with:
190
+ When the classifier blocks an action, the tool call fails with one of
191
+ the following error texts:
191
192
 
192
193
  - **`Blocked by auto mode policy: <reason>`** —
193
194
  the classifier judged the action unsafe. The reason comes from Stage
194
195
  2 of the classifier.
196
+ - **`Auto mode classifier unavailable; action blocked for safety`** —
197
+ the classifier API was unreachable, timed out, or returned an
198
+ un-parseable response. This is fail-closed behavior: when in doubt,
199
+ block.
195
200
 
196
- This message is followed by a trailing guidance line telling the agent
201
+ Both messages are followed by a trailing guidance line telling the agent
197
202
  that the **denied action specifically** must not be completed through
198
203
  another tool, shell indirection, generated script, alias, symlink,
199
204
  config change, hook, command file, MCP configuration, encoded payload,
@@ -214,24 +219,16 @@ want non-English reasons, add a hint like
214
219
 
215
220
  Auto Mode protects you from getting stuck:
216
221
 
217
- - If the classifier API is unreachable, times out, exceeds its context window,
218
- or returns an invalid response, the current action immediately falls back to
219
- manual approval. The confirmation recommends Default Mode and offers
220
- **Switch to Default Mode and allow once** alongside Allow once and Reject.
221
- Switching affects only the current runtime session; it does not change your
222
- saved settings.
223
-
224
222
  - After **3 consecutive policy blocks** the next tool call falls back to
225
223
  the standard manual-approval prompt. This catches the case where the
226
224
  agent keeps trying minor variants of a forbidden command.
227
- - After **2 consecutive unavailable** results (classifier API failures),
228
- later calls skip the known-broken classifier and go directly to manual
229
- approval. The first unavailable result already asks; the threshold avoids
230
- repeatedly waiting for classifier retries.
231
-
232
- The session stays in Auto Mode unless you explicitly select the switch option.
233
- Only the fallback call goes through manual approval. The counters reset when
234
- you approve the fallback call or switch modes.
225
+ - After **2 consecutive unavailable** results (classifier API failures)
226
+ the next tool call also falls back. This avoids waiting on a broken
227
+ classifier.
228
+
229
+ The session itself stays in Auto Mode — only the single fallback call
230
+ goes through manual approval. The counters reset when you approve the
231
+ fallback call or switch modes.
235
232
 
236
233
  If you find yourself constantly hitting fallback, the most likely causes
237
234
  are an outage on the classifier API or hints that need tuning. Switch to
@@ -49,7 +49,6 @@ Commands for adjusting interface appearance and work environment.
49
49
  | → `detail` | Show per-item context usage breakdown | `/context detail` |
50
50
  | `/history` | Control history display preferences and visibility | `/history collapse-on-resume`, `/history expand-on-resume`, `/history expand-now` |
51
51
  | `/diff` | Open an interactive diff viewer showing uncommitted changes and per-turn diffs. Use ←/→ to switch between current git diff and individual conversation turns, ↑/↓ to browse files | `/diff` |
52
- | `/log` | Open a commit history viewer for the workspace (Web Shell only) | `/log` |
53
52
  | `/theme` | Change Qwen Code visual theme | `/theme` |
54
53
  | `/vim` | Turn input area Vim editing mode on/off | `/vim` |
55
54
  | `/voice` | Toggle voice dictation input | `/voice`, `/voice hold`, `/voice tap`, `/voice off`, `/voice status` |
@@ -311,59 +310,6 @@ In headless (`--prompt`) or non-interactive contexts, `/diff` prints a plain-tex
311
310
  +3 -2 README.md
312
311
  ```
313
312
 
314
- **Web Shell:** In the Web Shell UI (`qwen serve`), `/diff` opens a graphical diff dialog. A tab bar at the top lets you switch between the **Changes** view and the **History** view (`/log`).
315
-
316
- #### History Viewer (`/log`) — Web Shell only
317
-
318
- The `/log` command opens a commit history browser for the current workspace. It is available only in the Web Shell UI; the CLI/TUI does not have this command.
319
-
320
- **How it works:**
321
-
322
- `/log` opens a dialog listing commits in reverse chronological order (newest first). Each row shows:
323
-
324
- - Short SHA (monospace, with a copy button for the full SHA)
325
- - Commit subject (single line)
326
- - Author name and relative time (e.g. "2h ago")
327
- - Branch/tag ref labels, when present
328
- - A merge icon (⎇) for merge commits
329
-
330
- Click a commit row to expand its details on demand:
331
-
332
- - Full commit message body
333
- - File change statistics (files changed, lines added/removed, per-file breakdown)
334
-
335
- Use **Load more** at the bottom to fetch the next page of commits (50 per page).
336
-
337
- **Example:**
338
-
339
- ```
340
- ┌─ History ──────────────────────────── 50 commits ─ ✕ ┐
341
- │ │
342
- │ a1b2c3d feat(cli): add --json flag 2h ago │
343
- │ wenshao │
344
- │ │
345
- │ e4f5g6h fix(core): handle null config 5h ago │
346
- │ dev · main v1.2.0 │
347
- │ │
348
- │ ▼ 789abcd refactor: simplify parser 1d ago │
349
- │ ┌─────────────────────────────────────────────┐ │
350
- │ │ Broke the monolithic parse() into smaller │ │
351
- │ │ functions for readability. │ │
352
- │ │ │ │
353
- │ │ 3 files · +45 −12 │ │
354
- │ │ +30 −8 src/parser.ts │ │
355
- │ │ +10 −2 src/utils.ts │ │
356
- │ │ +5 −2 test/parser.test.ts │ │
357
- │ └─────────────────────────────────────────────┘ │
358
- │ │
359
- │ [ Load more ] │
360
- └───────────────────────────────────────────────────────┘
361
- ```
362
-
363
- > [!note]
364
- >
365
- > `/log` requires a git repository workspace. If the workspace is not a git repository or has no commits, the dialog shows a placeholder message.
366
-
367
313
  ### 1.9 Information, Settings, and Help
368
314
 
369
315
  Commands for obtaining information and performing system settings.
@@ -16,23 +16,14 @@ Subagents are independent AI assistants that:
16
16
 
17
17
  In addition to named subagents, Qwen Code supports **forking** — selected explicitly with `subagent_type: "fork"` (available in interactive sessions). A fork inherits the parent's full conversation context and runs detached in the background. Omitting `subagent_type` does **not** fork; it launches the general-purpose subagent. Top-level named subagents run in the background by default and deliver their results through completion notifications. Set `run_in_background: false` when the current turn must wait for the result inline.
18
18
 
19
- ## Fork Context with `fork_turns`
20
-
21
- Only `subagent_type: "fork"` accepts `fork_turns`:
22
-
23
- - Omitting it or using `all` inherits the full parent conversation.
24
- - A positive integer string such as `"3"` inherits the most recent three real user turns.
25
-
26
- Tool responses and pure system reminders do not count as user turns. Regular named subagents and agent-team teammates do not accept `fork_turns`; they keep their separate conversation context.
27
-
28
19
  ### How Fork Differs from Named Subagents
29
20
 
30
- | | Named Subagent | Fork Subagent |
31
- | ------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
32
- | Context | Starts fresh with no parent conversation history | Inherits all parent history by default; `fork_turns` can select a bounded recent window |
33
- | System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing) |
34
- | Execution | Background by default; supports an explicit foreground opt-out | Always detached; parent continues immediately |
35
- | Use case | Specialized tasks (testing, docs) | Parallel tasks that need the current context |
21
+ | | Named Subagent | Fork Subagent |
22
+ | ------------- | -------------------------------------------------------------- | ----------------------------------------------------- |
23
+ | Context | Starts fresh, no parent history | Inherits parent's full conversation history |
24
+ | System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing) |
25
+ | Execution | Background by default; supports an explicit foreground opt-out | Always detached; parent continues immediately |
26
+ | Use case | Specialized tasks (testing, docs) | Parallel tasks that need the current context |
36
27
 
37
28
  ### When Fork is Used
38
29
 
@@ -59,7 +50,7 @@ Fork children cannot create further forks. This is enforced at runtime — if a
59
50
 
60
51
  - **Task Specialization**: Create agents optimized for specific workflows (testing, documentation, refactoring, etc.)
61
52
  - **Context Isolation**: Keep specialized work separate from your main conversation
62
- - **Context Inheritance**: Fork subagents inherit the full conversation by default and can select a bounded number of recent parent turns
53
+ - **Context Inheritance**: Fork subagents inherit the full conversation for context-heavy parallel tasks
63
54
  - **Prompt Cache Sharing**: Fork subagents share the parent's cache prefix, reducing token costs
64
55
  - **Reusability**: Save and reuse agent configurations across projects and sessions
65
56
  - **Controlled Access**: Limit which tools each agent can use for security and focus
@@ -96,7 +96,7 @@ This workflow acts as a central dispatcher for Qwen Code CLI, routing requests t
96
96
 
97
97
  ### Issue Triage
98
98
 
99
- This action can be used to triage GitHub Issues automatically or on demand. For a working issue triage setup, see the [Qwen triage workflow](https://github.com/QwenLM/qwen-code/blob/main/.github/workflows/qwen-triage.yml).
99
+ This action can be used to triage GitHub Issues automatically or on a schedule. For a working issue triage setup, see the [automated issue triage workflow](https://github.com/QwenLM/qwen-code/blob/main/.github/workflows/qwen-automated-issue-triage.yml).
100
100
 
101
101
  ### Pull Request Review
102
102
 
@@ -112,32 +112,32 @@ This type of action can be used to invoke a general-purpose, conversational Qwen
112
112
 
113
113
  <!-- BEGIN_AUTOGEN_INPUTS -->
114
114
 
115
- - <a name="__input_qwen_api_key"></a><a href="#user-content-__input_qwen_api_key"><code>qwen_api_key</code></a>: _(Optional)_ The API key for the Qwen API.
115
+ - <a name="__input_qwen_api_key"></a><a href="#user-content-__input_qwen_api_key"><code>qwen*api_key</code></a>: *(Optional)\_ The API key for the Qwen API.
116
116
 
117
- - <a name="__input_qwen_cli_version"></a><a href="#user-content-__input_qwen_cli_version"><code>qwen_cli_version</code></a>: _(Optional, default: `latest`)_ The version of the Qwen Code CLI to install. Can be "latest", "preview", "nightly", a specific version number, or a git branch, tag, or commit. For more information, see [Qwen Code CLI releases](https://github.com/QwenLM/qwen-code-action/blob/main/docs/releases.md).
117
+ - <a name="__input_qwen_cli_version"></a><a href="#user-content-__input_qwen_cli_version"><code>qwen*cli_version</code></a>: *(Optional, default: `latest`)\_ The version of the Qwen Code CLI to install. Can be "latest", "preview", "nightly", a specific version number, or a git branch, tag, or commit. For more information, see [Qwen Code CLI releases](https://github.com/QwenLM/qwen-code-action/blob/main/docs/releases.md).
118
118
 
119
- - <a name="__input_qwen_debug"></a><a href="#user-content-__input_qwen_debug"><code>qwen_debug</code></a>: _(Optional)_ Enable debug logging and output streaming.
119
+ - <a name="__input_qwen_debug"></a><a href="#user-content-__input_qwen_debug"><code>qwen*debug</code></a>: *(Optional)\_ Enable debug logging and output streaming.
120
120
 
121
- - <a name="__input_qwen_model"></a><a href="#user-content-__input_qwen_model"><code>qwen_model</code></a>: _(Optional)_ The model to use with Qwen Code.
121
+ - <a name="__input_qwen_model"></a><a href="#user-content-__input_qwen_model"><code>qwen*model</code></a>: *(Optional)\_ The model to use with Qwen Code.
122
122
 
123
123
  - <a name="__input_prompt"></a><a href="#user-content-__input_prompt"><code>prompt</code></a>: _(Optional, default: `You are a helpful assistant.`)_ A string passed to the Qwen Code CLI's [`--prompt` argument](https://github.com/QwenLM/qwen-code-action/blob/main/docs/cli/configuration.md#command-line-arguments).
124
124
 
125
125
  - <a name="__input_settings"></a><a href="#user-content-__input_settings"><code>settings</code></a>: _(Optional)_ A JSON string written to `.qwen/settings.json` to configure the CLI's _project_ settings.
126
126
  For more details, see the documentation on [settings files](https://github.com/QwenLM/qwen-code-action/blob/main/docs/cli/configuration.md#settings-files).
127
127
 
128
- - <a name="__input_use_qwen_code_assist"></a><a href="#user-content-__input_use_qwen_code_assist"><code>use_qwen_code_assist</code></a>: _(Optional, default: `false`)_ Whether to use Code Assist for Qwen Code model access instead of the default Qwen Code API key.
128
+ - <a name="__input_use_qwen_code_assist"></a><a href="#user-content-__input_use_qwen_code_assist"><code>use*qwen_code_assist</code></a>: *(Optional, default: `false`)\_ Whether to use Code Assist for Qwen Code model access instead of the default Qwen Code API key.
129
129
  For more information, see the [Qwen Code CLI documentation](https://github.com/QwenLM/qwen-code-action/blob/main/docs/cli/authentication.md).
130
130
 
131
- - <a name="__input_use_vertex_ai"></a><a href="#user-content-__input_use_vertex_ai"><code>use_vertex_ai</code></a>: _(Optional, default: `false`)_ Whether to use Vertex AI for Qwen Code model access instead of the default Qwen Code API key.
131
+ - <a name="__input_use_vertex_ai"></a><a href="#user-content-__input_use_vertex_ai"><code>use*vertex_ai</code></a>: *(Optional, default: `false`)\_ Whether to use Vertex AI for Qwen Code model access instead of the default Qwen Code API key.
132
132
  For more information, see the [Qwen Code CLI documentation](https://github.com/QwenLM/qwen-code-action/blob/main/docs/cli/authentication.md).
133
133
 
134
134
  - <a name="__input_extensions"></a><a href="#user-content-__input_extensions"><code>extensions</code></a>: _(Optional)_ A list of Qwen Code CLI extensions to install.
135
135
 
136
- - <a name="__input_upload_artifacts"></a><a href="#user-content-__input_upload_artifacts"><code>upload_artifacts</code></a>: _(Optional, default: `false`)_ Whether to upload artifacts to the github action.
136
+ - <a name="__input_upload_artifacts"></a><a href="#user-content-__input_upload_artifacts"><code>upload*artifacts</code></a>: *(Optional, default: `false`)\_ Whether to upload artifacts to the github action.
137
137
 
138
- - <a name="__input_use_pnpm"></a><a href="#user-content-__input_use_pnpm"><code>use_pnpm</code></a>: _(Optional, default: `false`)_ Whether or not to use pnpm instead of npm to install qwen-code-cli
138
+ - <a name="__input_use_pnpm"></a><a href="#user-content-__input_use_pnpm"><code>use*pnpm</code></a>: *(Optional, default: `false`)\_ Whether or not to use pnpm instead of npm to install qwen-code-cli
139
139
 
140
- - <a name="__input_workflow_name"></a><a href="#user-content-__input_workflow_name"><code>workflow_name</code></a>: _(Optional, default: `${{ github.workflow }}`)_ The GitHub workflow name, used for telemetry purposes.
140
+ - <a name="__input_workflow_name"></a><a href="#user-content-__input_workflow_name"><code>workflow*name</code></a>: *(Optional, default: `${{ github.workflow }}`)\_ The GitHub workflow name, used for telemetry purposes.
141
141
 
142
142
  <!-- END_AUTOGEN_INPUTS -->
143
143
 
@@ -66,7 +66,7 @@ qwen serve
66
66
 
67
67
  The default bind is `127.0.0.1:4170`. Bearer auth is **off** on loopback so local development "just works". The daemon registers the current working directory as its primary workspace; use an absolute `--workspace /path/to/dir` to override it, and repeat the flag to register additional isolated runtimes.
68
68
 
69
- **Open the Web Shell UI.** Browse to `http://127.0.0.1:4170/` (or start the daemon with `qwen serve --open` to launch it automatically) for the full browser terminal — chat, diffs, commit history, tool calls, and permission prompts. The UI is served at the daemon root on the same origin as the API. The rest of this guide uses raw HTTP so you can script against the API directly.
69
+ **Open the Web Shell UI.** Browse to `http://127.0.0.1:4170/` (or start the daemon with `qwen serve --open` to launch it automatically) for the full browser terminal — chat, diffs, tool calls, and permission prompts. The UI is served at the daemon root on the same origin as the API. The rest of this guide uses raw HTTP so you can script against the API directly.
70
70
 
71
71
  ### 2. Sanity-check it
72
72
 
@@ -397,7 +397,6 @@ Notes:
397
397
  | `--mcp-client-budget <n>` | — | Positive integer cap on live MCP clients. When `mcp_workspace_pool` is advertised, the cap and transports are shared per workspace runtime; when the tag is absent, the legacy per-session manager enforces it. Combine with `--mcp-budget-mode`. When unset, no accounting-driven enforcement (but `GET /workspace/mcp` still reports `clientCount`). Distinct from claude-code's `MCP_SERVER_CONNECTION_BATCH_SIZE`, which gates startup concurrency rather than total live clients. Pre-flight `caps.features.mcp_guardrails` and `caps.features.mcp_workspace_pool`. |
398
398
  | `--mcp-budget-mode <m>` | `warn` / `off` | How `--mcp-client-budget` is enforced. `warn` (default when budget set): no refusal, snapshot's `budgets[0].status` flips to `warning` at ≥75% of budget. `enforce`: connects past the cap are refused, per-server cell shows `disabledReason: 'budget'`, deterministic by `mcpServers` declaration order. `off` (default when budget unset): pure observability. Boot rejects `enforce` without a budget. |
399
399
  | `--http-bridge` | `true` | Stage 1 mode: production attempts to preheat one primary `qwen --acp` child for compatibility and retries on first use after failure, while each trusted secondary can start one child on demand. Sessions targeting a runtime multiplex onto its child via ACP `newSession()`; untrusted secondaries cannot start ACP. Stage 2 native in-process becomes available later. |
400
- | `--initialize-timeout-ms <n>` | `10000` | ACP child request timeout, including the `initialize` handshake (ms). Must be a positive integer up to `2147483647`. Values above the JS timer ceiling (`2^31-1`) are rejected at boot because Node silently compresses them to 1 ms. Cold-container deployments that need extra headroom for child startup can raise this; the same value governs `newSession`, workspace-status polls, and other ACP ext-method deadlines. |
401
400
  | `--allow-origin <pat>` | — | T2.4 ([#4514](https://github.com/QwenLM/qwen-code/issues/4514)). Cross-origin allowlist for browser webui clients. Repeatable. Each value is `*` (any origin — boot refuses if no bearer token is configured; `--require-auth` on loopback is recommended so `/health` and `/demo` are also bearer-gated, since both are pre-auth on loopback by default) or a canonical URL origin (`<scheme>://<host>[:<port>]`, no trailing slash / path / userinfo / query). **Subdomain wildcards (`https://*.example.com`) are intentionally unsupported** — list each subdomain explicitly, or use `*` with a configured token (and `--require-auth` for full hardening). Matched origins receive CORS response headers (`Access-Control-Allow-Origin`, `Vary: Origin`, methods, headers, max-age, and exposed `Retry-After`); unmatched origins still get a 403 with the same envelope as today's wall. `Origin: null` (sandboxed iframes, file:// docs) is always rejected, even under `*`. Pre-flight via `caps.features.allow_origin`. Loopback self-origin hits are unaffected. |
402
401
  | `--web` / `--no-web` | `true` | Serve the built Web Shell SPA at the daemon root (`GET /`, `/assets/*`, and SPA deep-link fallback). The static shell is registered **before** the bearer-auth gate — a browser can't attach a token to a `<script>` subresource or an address-bar navigation, the shell carries no secrets, and every API route stays token-gated regardless. On non-loopback binds a one-line stderr warning notes the UI is reachable without auth. Use `--no-web` for an API-only daemon. No effect when the build omits the Web Shell assets (the daemon logs a breadcrumb and runs API-only). |
403
402
  | `--open` | `false` | After the listener is up, open the Web Shell in your default browser at the daemon URL (with `#token=` appended as a URL fragment when a token is configured — a fragment is never sent to the server, keeping the token out of access logs and Referer headers). No-op with `--no-web`, or in headless / CI / SSH environments where no browser is available. |
@@ -112,7 +112,7 @@ Chunking itself is unchanged: the plan still tiles every line, tests and generat
112
112
 
113
113
  Step 3B's chunk agents are defined as "one per entry in `chunks[]`", and only `fetch-pr` produced a chunk plan. A local-diff review, or a cross-repo review in lightweight mode, therefore routed into a topology it had no chunk list for: no receipts, no tiling guarantee, and the orchestrator left to improvise line ranges. Two of the four review paths were promised a mechanism the skill could not deliver.
114
114
 
115
- `qwen review plan-diff <diff-file>` reads a captured diff and emits the same `chunks[]`, `files[]` and topology counts. Redirecting `git diff` or `gh pr diff` to a file bypasses Shell model-output truncation, so all four paths now share one code path. It cannot decide `heavy` — that needs a tree to read the post-change file from — so a bare diff gets chunk agents but no invariant agents.
115
+ `qwen review plan-diff <diff-file>` reads a captured diff and emits the same `chunks[]`, `files[]` and topology counts. Redirecting `git diff` or `gh pr diff` to a file already bypasses the 30 000-char shell cap, so all four paths now share one code path. It cannot decide `heavy` — that needs a tree to read the post-change file from — so a bare diff gets chunk agents but no invariant agents.
116
116
 
117
117
  ### Why the topology gate ignores prose
118
118
 
@@ -448,7 +448,7 @@ Competitors: Copilot uses 1 call, Gemini uses 2, Claude /ultrareview uses 5-20 (
448
448
 
449
449
  ## Why the diff is a file, not a command
450
450
 
451
- Agents used to be handed `git diff main...HEAD` and told to run it. At the time of the measurements below, Shell tool output passed through `truncateToolOutput` with `ShellTool.maxOutputChars = 30_000` and `keep: 'both'`, and the 30K trigger was also the preview budget: `threshold / 5` characters went to the head and the remainder to the tail. Shell now keeps the 30K persistence trigger but uses an approximately 4K head-and-tail model preview. That makes direct `git diff` output even less suitable for complete review coverage; the file-and-chunk design below remains authoritative.
451
+ Agents used to be handed `git diff main...HEAD` and told to run it. Shell tool output passes through `truncateToolOutput` with `ShellTool.maxOutputChars = 30_000` and `keep: 'both'`, which allocates `threshold / 5` characters to the head and the remainder to the tail.
452
452
 
453
453
  On PR #6457's 211 000-character diff that yields a 6 000-char head (`QQChannel.ts` lines 41-250) and a 24 000-char tail (`stream.test.ts` and `types.ts`, which sort last by path and together changed 9 lines). 85.8% of the diff — including 19 of the 20 Criticals eventually reported on that PR — was replaced by a `[CONTENT TRUNCATED]` marker. Every agent saw the same window, so the ten-way dimension fan-out multiplied redundancy rather than coverage, and each round of `/review` sampled a different subset of the bugs depending on which files an agent happened to `read_file` on its own initiative.
454
454
 
@@ -147,7 +147,7 @@ Based on the parsed `target.type`:
147
147
 
148
148
  ### Diff capture and the review topology
149
149
 
150
- **Never let a review agent obtain the diff by running `git diff` itself.** Shell keeps a 30 000-character persistence trigger but returns only an approximately 4 000-character head-and-tail model preview, so on a large PR every agent receives a small slice from the first and last files plus a `[CONTENT TRUNCATED]` marker in place of everything between. Under the older 30 000-character preview, a 211 000-character diff exposed only 14% of the changeset; the current preview is smaller still. Every diff-reading agent receives the same slice, so coverage does not grow with the number of agents. The diff is read from a file with `read_file` instead.
150
+ **Never let a review agent obtain the diff by running `git diff` itself.** Shell tool output is capped at 30 000 characters and split head-1/5 / tail-4/5, so on a large PR every agent receives a few hundred lines off the top of the first file, the tail of the last file, and a `[CONTENT TRUNCATED]` marker in place of everything between. On a 211 000-character diff that is 14% of the changeset and it is the _same_ 14% for every diff-reading agent, so coverage does not grow with the number of agents. The diff is read from a file with `read_file` instead.
151
151
 
152
152
  Truncation is only half the reason. The other half is the **base**. An agent handed a diff command has to choose a base, and `main..HEAD` and `main...HEAD` differ by one character and by the entire meaning of the review. Two-dot diffs against a `main` that has moved on show every commit main gained since the branch forked, **reversed** — main's fixes appear as the branch's regressions. On PR #6626 a review approved four files and then warned the author, publicly, that their branch carried "typo regressions in `ide-client.ts`" and should be rebased. The branch had done nothing: main had corrected `compatability` → `compatibility` after the fork point, and a two-dot diff showed the branch putting the typo back. The PR's real change set, `merge-base..head`, is four files and does not touch that file at all.
153
153
 
@@ -187,7 +187,7 @@ Do **not** hand-type a `git diff` here. Two reasons, and the second is why this
187
187
 
188
188
  **If the plan comes back empty** (`chunks: []`), stop and take the no-diff branch. Every agent would be given nothing to read, and the review would return a clean verdict over no code at all. For a **file-path** review of a tracked, unmodified file, skip planning entirely: hand every agent the file's absolute path and tell it to read the whole file, paging until `isTruncated` is false. For a **local** review with a genuinely clean tree — nothing staged, nothing unstaged, nothing untracked — tell the user there is nothing to review and stop.
189
189
 
190
- For **cross-repo lightweight reviews**, do the same with the diff GitHub hands you. Redirecting to a file keeps Shell model-output truncation out of it:
190
+ For **cross-repo lightweight reviews**, do the same with the diff GitHub hands you. Redirecting to a file is what keeps the 30 000-char shell cap out of it:
191
191
 
192
192
  ```bash
193
193
  mkdir -p .qwen/tmp
@@ -382,7 +382,7 @@ A check you perform silently is a check you skip, and this one has been skipped:
382
382
 
383
383
  **Every agent MUST return inline: set `subagent_type: "general-purpose"` and `run_in_background: false` on every `agent` call.** Do NOT fork them — never set `subagent_type: "fork"`. A fork runs fire-and-forget and its findings never come back to you, so the review would stall in Step 4 with nothing to aggregate. You need every agent's findings returned to you inline.
384
384
 
385
- **For same-repo PR reviews (worktree mode), every `agent` call MUST also set `working_dir: "<worktreePath>"`** — the `worktreePath` from the Step 1 fetch report (a repo-relative path like `.qwen/tmp/review-pr-<n>`; pass it through as-is). This sets each agent's working directory to the PR worktree, so its `git diff`, `grep_search`, file reads, and Agent 7's build/test **resolve against the PR's code, not the user's main checkout**. It is a deterministic, harness-level cwd pin — it does NOT depend on the agent remembering to `cd`, and it is what makes reviewing multiple PRs concurrently safe. (It pins the working directory; it is not a hard filesystem sandbox — an absolute path could still reach elsewhere — but normal review operations stay inside the worktree.) This rule applies to **every** agent the review workflow launches — not just the Step 3 dimension agents, but also the Step 4 verification agent and the Step 5 reverse-audit agents (both restated below). Do NOT set `working_dir` for **local-diff, file-path, or cross-repo lightweight** reviews — those have no worktree, so the agents run in the main project directory. **Do NOT set `isolation` on review agents.** The review worktree already exists at `worktreePath`, so `isolation: "worktree"` is redundant. The Agent runtime tolerates strict providers that send both by ignoring `isolation`, but the orchestrator must emit only the specific `working_dir` instruction.
385
+ **For same-repo PR reviews (worktree mode), every `agent` call MUST also set `working_dir: "<worktreePath>"`** — the `worktreePath` from the Step 1 fetch report (a repo-relative path like `.qwen/tmp/review-pr-<n>`; pass it through as-is). This sets each agent's working directory to the PR worktree, so its `git diff`, `grep_search`, file reads, and Agent 7's build/test **resolve against the PR's code, not the user's main checkout**. It is a deterministic, harness-level cwd pin — it does NOT depend on the agent remembering to `cd`, and it is what makes reviewing multiple PRs concurrently safe. (It pins the working directory; it is not a hard filesystem sandbox — an absolute path could still reach elsewhere — but normal review operations stay inside the worktree.) This rule applies to **every** agent the review workflow launches — not just the Step 3 dimension agents, but also the Step 4 verification agent and the Step 5 reverse-audit agents (both restated below). Do NOT set `working_dir` for **local-diff, file-path, or cross-repo lightweight** reviews — those have no worktree, so the agents run in the main project directory.
386
386
 
387
387
  **You no longer compose these prompts. `qwen review agent-prompt` does** — one `--roster` call builds every one of them, and each block it prints goes to its agent unedited. It already contains everything the list below used to ask you to remember: `diffPathAbsolute` and the exact `read_file` ranges for that role (its own `offset`/`limit` for a chunk agent; every chunk for a whole-diff or 3A agent; the post-change file plus `addedRanges[]` and its own `diffRange` for an invariant agent), the agent's focus areas, the severity definitions verbatim, the finding format, and the project rules. **Never give an agent a `git diff` command** — see "Diff capture and the review topology" in Step 1 for why. In worktree-mode PR reviews the agent's `working_dir` is the PR worktree, so `grep_search` and source-file reads resolve against the PR's code automatically — the agent must NOT `cd` into the worktree or prefix absolute paths for those.
388
388
 
@@ -609,7 +609,7 @@ If there are none of these, omit this section.
609
609
 
610
610
  ### Before an Approve or a zero-Critical verdict: re-check the open Criticals
611
611
 
612
- A `C=0` outcome — Approve, or a Comment with no Critical — is a claim that nothing blocks the merge. It is not the default you fall back to when your own agents surfaced nothing. **If Step 1 set the context-unavailable state** (`pr-context` failed — lightweight or same-repo), there is no context file to read: skip the walk below, record every existing Critical as `cannot tell` by construction, and carry that into the verdict — which the Step 7 invariant already caps at `COMMENT`. Otherwise, take **each live blocker already on the PR — from every comment-bearing section of the context file: "Open inline comments", "Blockers to re-check", "Review summaries", and "Already discussed" (both its inline threads and its issue-level comments)** — and check it against the code as it stands at the reviewed commit. Select **semantically, not by the literal marker**: a `**[Critical]**` prefix qualifies, but so does any body that asserts a blocking defect in other words — a "Critical findings could not be anchored" preamble, an explicit must-fix claim (legacy body-only blockers were emitted markerless, and one such review is exactly what a marker filter once discarded). When unsure whether a body asserts a blocker, re-check it — the cost is one ruling; the alternative is certifying a merge past it. ("Already discussed" stays in scope even though `pr-context` now promotes blocker-bearing bodies out of it: `carriesBlockerSignal` is a **fail-safe floor, not a ceiling** — it recognises the phrasings we have seen, not every phrasing that exists, and a blocker worded around all of them still settles there. That section's "do NOT re-report" header governs duplicate-_reporting_ by the finder agents; it does not exempt a body from this re-check. Read it with the same eyes you bring to the promoted section.) Review-level bodies matter because an unmappable or 422-relocated blocker lives **only** there — and the context file now carries them **in full**: `pr-context` renders every meaningful review body whole under "Review summaries" (no more 240-character snippets), and pulls every blocker-bearing body — replied inline thread or issue comment, marker or no marker — into the "Blockers to re-check" section, rendered in full, because a reply alone never settles a blocker. So the re-check usually needs no separate fetch: read those sections under the file's untrusted-data preamble, paging with `offset`/`limit` until `isTruncated` is false. Review summaries and blocker bodies are rendered in full; the Open and Already-discussed sections use one-line snippets, and **every snippet the renderer cut carries its own `_(truncated — fetch …)_` note naming the exact, already-filled-in command for the rest** — a candidate blocker whose snippet was cut is ruled on only after running that fetch; ruling on the visible prefix alone is the fail-closed violation. Run any such fetch **redirected to a file, never into the terminal** (Shell returns only an approximately 4 000-character model preview for output beyond its 30 000-character persistence trigger, which would re-truncate the very body being completed): append `--jq .body > .qwen/tmp/qwen-review-{target}-body-<id>.md` to the command the note names, then `read_file` that file, paging until `isTruncated` is false, before ruling. **Fail closed either way:** a body you could not read whole — the capped tail unfetched, or the single-object fetch failing (auth, rate limit, network) — is `cannot tell`, not "no Critical in it": it goes to compose-review's `cannotTellCriticals` input, which serializes it and caps the event at `COMMENT`; a blocker you could not read is never approved past. A reply alone does not retire a blocker — "I disagree" or "wontfix" is a reply, which is exactly why `pr-context` quarantines blocker-bearing threads in their own section instead of letting them settle into "Already discussed". Only the code decides: a blocker counts as closed exactly when the re-check below lands on "fixed by this diff", never because the thread has an answer. Record one verdict per blocker:
612
+ A `C=0` outcome — Approve, or a Comment with no Critical — is a claim that nothing blocks the merge. It is not the default you fall back to when your own agents surfaced nothing. **If Step 1 set the context-unavailable state** (`pr-context` failed — lightweight or same-repo), there is no context file to read: skip the walk below, record every existing Critical as `cannot tell` by construction, and carry that into the verdict — which the Step 7 invariant already caps at `COMMENT`. Otherwise, take **each live blocker already on the PR — from every comment-bearing section of the context file: "Open inline comments", "Blockers to re-check", "Review summaries", and "Already discussed" (both its inline threads and its issue-level comments)** — and check it against the code as it stands at the reviewed commit. Select **semantically, not by the literal marker**: a `**[Critical]**` prefix qualifies, but so does any body that asserts a blocking defect in other words — a "Critical findings could not be anchored" preamble, an explicit must-fix claim (legacy body-only blockers were emitted markerless, and one such review is exactly what a marker filter once discarded). When unsure whether a body asserts a blocker, re-check it — the cost is one ruling; the alternative is certifying a merge past it. ("Already discussed" stays in scope even though `pr-context` now promotes blocker-bearing bodies out of it: `carriesBlockerSignal` is a **fail-safe floor, not a ceiling** — it recognises the phrasings we have seen, not every phrasing that exists, and a blocker worded around all of them still settles there. That section's "do NOT re-report" header governs duplicate-_reporting_ by the finder agents; it does not exempt a body from this re-check. Read it with the same eyes you bring to the promoted section.) Review-level bodies matter because an unmappable or 422-relocated blocker lives **only** there — and the context file now carries them **in full**: `pr-context` renders every meaningful review body whole under "Review summaries" (no more 240-character snippets), and pulls every blocker-bearing body — replied inline thread or issue comment, marker or no marker — into the "Blockers to re-check" section, rendered in full, because a reply alone never settles a blocker. So the re-check usually needs no separate fetch: read those sections under the file's untrusted-data preamble, paging with `offset`/`limit` until `isTruncated` is false. Review summaries and blocker bodies are rendered in full; the Open and Already-discussed sections use one-line snippets, and **every snippet the renderer cut carries its own `_(truncated — fetch …)_` note naming the exact, already-filled-in command for the rest** — a candidate blocker whose snippet was cut is ruled on only after running that fetch; ruling on the visible prefix alone is the fail-closed violation. Run any such fetch **redirected to a file, never into the terminal** (shell output truncates at 30 000 chars, which would re-truncate the very body being completed): append `--jq .body > .qwen/tmp/qwen-review-{target}-body-<id>.md` to the command the note names, then `read_file` that file, paging until `isTruncated` is false, before ruling. **Fail closed either way:** a body you could not read whole — the capped tail unfetched, or the single-object fetch failing (auth, rate limit, network) — is `cannot tell`, not "no Critical in it": it goes to compose-review's `cannotTellCriticals` input, which serializes it and caps the event at `COMMENT`; a blocker you could not read is never approved past. A reply alone does not retire a blocker — "I disagree" or "wontfix" is a reply, which is exactly why `pr-context` quarantines blocker-bearing threads in their own section instead of letting them settle into "Already discussed". Only the code decides: a blocker counts as closed exactly when the re-check below lands on "fixed by this diff", never because the thread has an answer. Record one verdict per blocker:
613
613
 
614
614
  - **still stands** — the defect is present in the code you just read. It blocks: the event is `REQUEST_CHANGES`, and the finding goes inline (or into the body if it cannot be anchored).
615
615
  - **fixed by this diff** — you traced the blocker's **mechanism** through the code as it now stands and it can no longer fire. Say nothing; do not re-report it. A GitHub thread can read `isResolved: false, isOutdated: false` for a bug a later commit fixed on an adjacent line — the flag tracks the anchored line, not the fix, so the flag is not evidence either way. Only the code is.
@@ -4,72 +4,65 @@ import {
4
4
  MINIMUM_MAX_HEIGHT,
5
5
  MaxSizedBox,
6
6
  setMaxSizedBoxDebugging
7
- } from "./chunk-SP5WRGVG.js";
8
- import "./chunk-6IL7KRLE.js";
7
+ } from "./chunk-JNWZQ27S.js";
8
+ import "./chunk-GMGDLUC7.js";
9
9
  import "./chunk-SV5PQVQE.js";
10
- import "./chunk-FFFM6NJV.js";
10
+ import "./chunk-AYCDXHZB.js";
11
+ import "./chunk-NEEB7UEN.js";
11
12
  import "./chunk-5QWWOFGG.js";
12
13
  import "./chunk-NHDKSOEY.js";
13
- import "./chunk-7Z6JQEL6.js";
14
14
  import "./chunk-RS7MT2QG.js";
15
15
  import "./chunk-H2XVO6NE.js";
16
16
  import "./chunk-QHTIBUWB.js";
17
17
  import "./chunk-RKUWKYED.js";
18
- import "./chunk-Z2FTZM4Z.js";
18
+ import "./chunk-KX6UK4VJ.js";
19
+ import "./chunk-5M6IDOMF.js";
19
20
  import "./chunk-T4TZQJ7W.js";
20
21
  import "./chunk-H6XPXXMH.js";
21
- import "./chunk-5M6IDOMF.js";
22
- import "./chunk-T2L47JJK.js";
23
- import "./chunk-GPSKDNEE.js";
24
- import "./chunk-X6N25LXS.js";
22
+ import "./chunk-EAUYY7SS.js";
23
+ import "./chunk-FSL5W5TI.js";
24
+ import "./chunk-OONJNQ42.js";
25
+ import "./chunk-D2VIDMVM.js";
25
26
  import "./chunk-E2UVIFI2.js";
26
- import "./chunk-Q2YKNMLS.js";
27
27
  import "./chunk-XU457J4V.js";
28
28
  import "./chunk-VDDGDZMA.js";
29
- import "./chunk-KHOVYUHX.js";
29
+ import "./chunk-EIAK6Q2B.js";
30
30
  import "./chunk-SZRN75WQ.js";
31
- import "./chunk-6PVPNMXU.js";
32
- import "./chunk-MMT6IQCT.js";
31
+ import "./chunk-HTO4JFDZ.js";
33
32
  import "./chunk-CPBF7KYF.js";
34
- import "./chunk-NABLFI57.js";
35
- import "./chunk-QBUDF33N.js";
36
- import "./chunk-LIZRAKPB.js";
37
- import "./chunk-WHGVTP7Q.js";
33
+ import "./chunk-CPCVCKKF.js";
38
34
  import "./chunk-6AM5D4ME.js";
39
- import "./chunk-JCW2R7WC.js";
40
- import "./chunk-57FIIFJN.js";
41
- import "./chunk-HTO4JFDZ.js";
42
- import "./chunk-XVNQMZ2I.js";
43
- import "./chunk-FODK6UMO.js";
44
- import "./chunk-GLNBDYUX.js";
45
- import "./chunk-EDANOBFR.js";
35
+ import "./chunk-G45X5TRN.js";
36
+ import "./chunk-PBATSWUQ.js";
37
+ import "./chunk-ZEOZL37W.js";
38
+ import "./chunk-OOCI5VVU.js";
39
+ import "./chunk-BRRF37CO.js";
40
+ import "./chunk-BMWMT5Y2.js";
46
41
  import "./chunk-JESCGQM3.js";
47
- import "./chunk-GMLTZG4O.js";
48
- import "./chunk-25WFJZL5.js";
49
- import "./chunk-DJ2GSRLV.js";
50
- import "./chunk-5I5BM454.js";
51
- import "./chunk-D7ZI5C7O.js";
42
+ import "./chunk-ZFKNWQGQ.js";
43
+ import "./chunk-4WKAA4KS.js";
44
+ import "./chunk-CR3C7WXL.js";
52
45
  import "./chunk-VGC4I5JJ.js";
53
- import "./chunk-4K56OJFJ.js";
54
- import "./chunk-JYS55H6Z.js";
46
+ import "./chunk-JD3MKVKL.js";
47
+ import "./chunk-UEY4AYUL.js";
48
+ import "./chunk-BDBMYST4.js";
49
+ import "./chunk-EZVDJFZ7.js";
50
+ import "./chunk-OP4MOGXF.js";
51
+ import "./chunk-XVNQMZ2I.js";
52
+ import "./chunk-FEOZBUMT.js";
53
+ import "./chunk-DJ2GSRLV.js";
54
+ import "./chunk-6EFTQYW7.js";
55
+ import "./chunk-MAQQGNQ5.js";
55
56
  import "./chunk-A4UCTEB5.js";
56
57
  import "./chunk-XWRJCPHC.js";
57
- import "./chunk-QNLNLENL.js";
58
- import "./chunk-6X4GWOPW.js";
59
58
  import "./chunk-TYQMGACW.js";
60
59
  import "./chunk-TYAMGABM.js";
61
60
  import "./chunk-FCMNKVXT.js";
62
- import "./chunk-7362QS5B.js";
63
- import "./chunk-HTR4WV6U.js";
64
- import "./chunk-M7WBGLYP.js";
65
- import "./chunk-U7ZFW55U.js";
66
- import "./chunk-NPQDJGKU.js";
67
- import "./chunk-YM3SZTH4.js";
68
- import "./chunk-OQB4EXO4.js";
61
+ import "./chunk-C27BYUX6.js";
69
62
  import "./chunk-75DOP5OR.js";
70
63
  import "./chunk-DMTGGOSA.js";
71
64
  import "./chunk-YQ3U5MUC.js";
72
- import "./chunk-THJNPLI4.js";
65
+ import "./chunk-TB6UDU4T.js";
73
66
  import "./chunk-5O2XNYP6.js";
74
67
  import "./chunk-J2S4EL5Y.js";
75
68
  export {