@qwen-code/qwen-code 0.19.11 → 0.19.12-preview.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 (304) hide show
  1. package/bundled/batch/SKILL.md +6 -0
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +11 -0
  3. package/bundled/qc-helper/docs/configuration/settings.md +11 -10
  4. package/bundled/qc-helper/docs/features/channels/overview.md +66 -11
  5. package/bundled/qc-helper/docs/features/sub-agents.md +8 -8
  6. package/bundled/qc-helper/docs/features/worktree.md +2 -2
  7. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +42 -7
  8. package/bundled/qc-helper/docs/qwen-serve.md +102 -40
  9. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  10. package/bundled/review/SKILL.md +60 -49
  11. package/bundled/simplify/SKILL.md +1 -1
  12. package/chunks/{MaxSizedBox-L6TGYDM3.js → MaxSizedBox-3KIWAU6Z.js} +31 -32
  13. package/chunks/{StandaloneSessionPicker-AKEQHU5P.js → StandaloneSessionPicker-TF626NO7.js} +45 -46
  14. package/chunks/acp-startup-profiler-N3RHHXJ3.js +25 -0
  15. package/chunks/{acpAgent-PTNBGJDN.js → acpAgent-JDVJXVBO.js} +1863 -507
  16. package/chunks/{agent-AJOMOZPJ.js → agent-BONWC4VY.js} +26 -27
  17. package/chunks/{agent-headless-CYKOMAXS.js → agent-headless-H7HKMGLZ.js} +26 -27
  18. package/chunks/{anthropicContentGenerator-HBRXJSP4.js → anthropicContentGenerator-ZZRGFEES.js} +35 -12
  19. package/chunks/{artifact-tool-MIZLXBLF.js → artifact-tool-PHO5XEGZ.js} +5 -5
  20. package/chunks/{askUserQuestion-XMJVPNWM.js → askUserQuestion-CEPBT47X.js} +2 -47
  21. package/chunks/{bridge-QKISWPCI.js → bridge-ATN2TLWJ.js} +31 -32
  22. package/chunks/{ca-CODEN7TD.js → ca-2SL2BXTK.js} +3 -2
  23. package/chunks/{channel-worker-group-SOUWTFHC.js → channel-worker-group-S3H5QHTI.js} +4 -4
  24. package/chunks/{channel-worker-manager-LOVSV3WW.js → channel-worker-manager-ZJ4HTMO2.js} +4 -4
  25. package/chunks/{channel-worker-supervisor-XW6MHJBQ.js → channel-worker-supervisor-JA6VZ5V5.js} +3 -3
  26. package/chunks/{chunk-ZIXOTAPZ.js → chunk-2DZ7E27L.js} +92 -3
  27. package/chunks/{chunk-L5U3ELZX.js → chunk-335ECZTA.js} +1 -1
  28. package/chunks/{chunk-2FO5GFKZ.js → chunk-3DJY4IFO.js} +1 -1
  29. package/chunks/{chunk-4AGTGMCQ.js → chunk-3PE7OY2G.js} +12 -12
  30. package/chunks/{chunk-QOTQH4CB.js → chunk-4AGBO6RB.js} +27 -10
  31. package/chunks/{chunk-Y66VOBRP.js → chunk-4CA4WUMS.js} +2 -2
  32. package/chunks/{chunk-LQIDP6K5.js → chunk-4CHDYDG3.js} +1 -1
  33. package/chunks/{chunk-574PTLMU.js → chunk-4OVECYBM.js} +407 -92
  34. package/chunks/{chunk-TV6K2FB4.js → chunk-4RPARQ5D.js} +2 -2
  35. package/chunks/{chunk-TL4R5TRK.js → chunk-4W55BHOC.js} +2 -2
  36. package/chunks/{chunk-RCEEXIOO.js → chunk-4XCVGEEX.js} +3 -3
  37. package/chunks/{chunk-3DWIFU7L.js → chunk-53UMEONK.js} +1 -1
  38. package/chunks/{chunk-AU3MFJPL.js → chunk-54KPEDM2.js} +8 -8
  39. package/chunks/{chunk-T76DGHGG.js → chunk-66F4IJ4L.js} +5 -5
  40. package/chunks/{chunk-YLSSEUAM.js → chunk-675SVDMD.js} +354 -278
  41. package/chunks/{chunk-NVTQZXR7.js → chunk-6QGZVKOO.js} +91 -52
  42. package/chunks/{chunk-NJOFRXTM.js → chunk-6TDA4EVC.js} +4200 -3450
  43. package/chunks/{chunk-BYH2JRK3.js → chunk-6WZZHJSZ.js} +5 -5
  44. package/chunks/{chunk-7X7TEQNX.js → chunk-76BFY7AF.js} +13 -0
  45. package/chunks/chunk-7KS72E2N.js +883 -0
  46. package/chunks/{chunk-CF5VJRGC.js → chunk-7LMAKIWE.js} +1 -1
  47. package/chunks/{chunk-WMNXXRGL.js → chunk-7O7WZH7N.js} +31 -31
  48. package/chunks/{chunk-7ZYHLN67.js → chunk-7OZGMFHC.js} +26 -75
  49. package/chunks/{chunk-6WPJRYLZ.js → chunk-7SX6WZNO.js} +3 -3
  50. package/chunks/{chunk-JGUT3LWZ.js → chunk-ANRANWVE.js} +4 -1
  51. package/chunks/{chunk-JD44PNGJ.js → chunk-AWOU24F6.js} +10 -5
  52. package/chunks/{chunk-6WGZDD67.js → chunk-BEFQGC6H.js} +2 -2
  53. package/chunks/{chunk-KXYJPRT5.js → chunk-BEZPRKD3.js} +28 -6
  54. package/chunks/{chunk-FYQ22K62.js → chunk-CHVH4DVN.js} +6 -5
  55. package/chunks/{chunk-LS56TX3M.js → chunk-CMHJEUVB.js} +1 -1
  56. package/chunks/{chunk-FXKOAEXP.js → chunk-CXWUXRD5.js} +14 -14
  57. package/chunks/{chunk-CAHY5ABC.js → chunk-DULSE2SH.js} +1 -1
  58. package/chunks/{chunk-SQ5BK3GO.js → chunk-DYUPBU7H.js} +1 -1
  59. package/chunks/{chunk-FNX3LGAK.js → chunk-E655RDRL.js} +1 -1
  60. package/chunks/{chunk-N5VIZTND.js → chunk-EWPLL4OT.js} +1 -1
  61. package/chunks/{chunk-FSA7ERJ2.js → chunk-F2RR4HO2.js} +1 -1
  62. package/chunks/{chunk-S63Z5V42.js → chunk-F2YCCUXI.js} +4 -4
  63. package/chunks/{chunk-3AYLDB6B.js → chunk-FEZXQXW2.js} +1 -1
  64. package/chunks/{chunk-OWT2CAEQ.js → chunk-GEHSF7MS.js} +105 -12
  65. package/chunks/{chunk-LXLTBIDP.js → chunk-HCCR43AY.js} +1 -1
  66. package/chunks/{chunk-7NMU22Q3.js → chunk-HQ7MDVBO.js} +18 -7
  67. package/chunks/{chunk-KSZKSE23.js → chunk-HVWPSGDY.js} +1 -1
  68. package/chunks/{chunk-YFVO2HOR.js → chunk-HZXU6YZW.js} +5 -5
  69. package/chunks/{chunk-HASK4LMI.js → chunk-IKLWU6YS.js} +13 -6
  70. package/chunks/{chunk-GNBBAQ6J.js → chunk-ILQ42UG6.js} +111 -40
  71. package/chunks/{chunk-THXDQSTA.js → chunk-IQRQVPGN.js} +49 -154
  72. package/chunks/{chunk-SPJQO2CE.js → chunk-J2MKYJKZ.js} +2 -2
  73. package/chunks/{chunk-SUARMD4Q.js → chunk-J6NT5YTN.js} +28 -2
  74. package/chunks/{chunk-TYLOFD2U.js → chunk-JCJPZMJV.js} +1 -1
  75. package/chunks/{chunk-BYB3GF2T.js → chunk-JCYMQU5F.js} +133 -6
  76. package/chunks/{chunk-6EDDYPI3.js → chunk-JUNVFQVY.js} +4 -4
  77. package/chunks/{chunk-CH2XVB47.js → chunk-K7P34F2J.js} +3 -3
  78. package/chunks/{chunk-5VWYKIMW.js → chunk-KANTXY7B.js} +2 -2
  79. package/chunks/{chunk-K7VD4XLT.js → chunk-LHEQDKAR.js} +1 -1
  80. package/chunks/{chunk-A2HWMJVO.js → chunk-LKR7QQ63.js} +3 -3
  81. package/chunks/{chunk-4HUDDSO5.js → chunk-LLIGYAQU.js} +4 -4
  82. package/chunks/{chunk-5Z452MMD.js → chunk-LODZMRXC.js} +154 -83
  83. package/chunks/{chunk-FBU7WRZI.js → chunk-LPHGXXZX.js} +6 -1
  84. package/chunks/{chunk-CPFIQVZJ.js → chunk-LYFDJTXE.js} +1 -1
  85. package/chunks/{chunk-TIOE2OPE.js → chunk-MCYZTKBV.js} +2 -2
  86. package/chunks/{chunk-ZQIYGQCG.js → chunk-MHEZV3OY.js} +506 -143
  87. package/chunks/{chunk-JWICTOXS.js → chunk-NGTQA57Y.js} +2 -2
  88. package/chunks/{chunk-5CNYZ7TN.js → chunk-NJQPQ4IO.js} +7 -7
  89. package/chunks/chunk-NSZJQACR.js +45 -0
  90. package/chunks/{chunk-DOPUYNXO.js → chunk-NUHSLBJZ.js} +7 -7
  91. package/chunks/{chunk-CITWNIXJ.js → chunk-NVUGS23Y.js} +5 -5
  92. package/chunks/{chunk-2Z5UX4KI.js → chunk-OSSDHJDU.js} +1 -1
  93. package/chunks/{chunk-YUZI3WAC.js → chunk-OWAK7LMW.js} +7 -0
  94. package/chunks/{chunk-Y3KFTWVX.js → chunk-OZWJAFFE.js} +6 -6
  95. package/chunks/{chunk-YGYSMY2R.js → chunk-PSISZNIT.js} +1629 -1142
  96. package/chunks/{chunk-4ROQY23C.js → chunk-PTXVHS2O.js} +7 -7
  97. package/chunks/{chunk-OKAIGAYW.js → chunk-QGONRHUS.js} +3 -3
  98. package/chunks/{chunk-PZL23GTM.js → chunk-QR6U5QPP.js} +8 -0
  99. package/chunks/chunk-QSG4ZFG4.js +257 -0
  100. package/chunks/{chunk-BXBDC476.js → chunk-R32BTEZY.js} +5 -5
  101. package/chunks/{chunk-AVEOWVOM.js → chunk-R3VWUU2E.js} +1 -1
  102. package/chunks/{chunk-RP5R7MB6.js → chunk-R4RIMOJL.js} +12 -12
  103. package/chunks/{chunk-ARKANCNX.js → chunk-SGPFJMRP.js} +1 -1
  104. package/chunks/{chunk-3M75MSVA.js → chunk-SMASS3CY.js} +1 -1
  105. package/chunks/{chunk-4IJMTYCB.js → chunk-SNONG66P.js} +818 -29
  106. package/chunks/chunk-TDKQP3M6.js +201 -0
  107. package/chunks/{chunk-VFX7EZIR.js → chunk-TFV3XVAZ.js} +8 -1
  108. package/chunks/{chunk-4LD5APFL.js → chunk-TYQMGACW.js} +1 -0
  109. package/chunks/{chunk-7NFB7LBQ.js → chunk-UE5TZ55T.js} +8 -0
  110. package/chunks/{chunk-F333XEAU.js → chunk-UOA2IHRI.js} +4 -3
  111. package/chunks/{chunk-VRR65QYW.js → chunk-V4PCIS25.js} +5 -1
  112. package/chunks/{chunk-WIEO4CWB.js → chunk-VAJS2E2D.js} +1 -1
  113. package/chunks/{chunk-GLNHPRZT.js → chunk-W4DFAUAO.js} +1 -1
  114. package/chunks/{chunk-STZQCNN3.js → chunk-W7H223ZZ.js} +1 -1
  115. package/chunks/{chunk-6Y6ORE2G.js → chunk-WACI4VES.js} +288 -20
  116. package/chunks/{chunk-WTNZ6DXB.js → chunk-WEPXQKGP.js} +1 -1
  117. package/chunks/{chunk-4BJVSIS3.js → chunk-WHQNBBWW.js} +2 -2
  118. package/chunks/{chunk-QDJ2R4CM.js → chunk-WTHRMVKB.js} +3 -3
  119. package/chunks/{chunk-L4Y55KIS.js → chunk-X6YQWCIJ.js} +1 -1
  120. package/chunks/{chunk-Q6TUALBE.js → chunk-XAAEDML2.js} +1 -1
  121. package/chunks/{chunk-BUAXJVNP.js → chunk-XACBIZJB.js} +3 -3
  122. package/chunks/{chunk-2OG646IN.js → chunk-XFJU7SVP.js} +4 -4
  123. package/chunks/{chunk-KKRTYONM.js → chunk-XSPFQQRE.js} +3 -3
  124. package/chunks/{chunk-V2DXTLUE.js → chunk-Y5UDBQYF.js} +3 -3
  125. package/chunks/{chunk-MQOVXZAF.js → chunk-YN2I5I42.js} +529 -61
  126. package/chunks/{chunk-FMNYGWOD.js → chunk-Z4ZCVYJ5.js} +14 -8
  127. package/chunks/{chunk-SY7NEYX4.js → chunk-ZFHHBRRA.js} +2 -2
  128. package/chunks/{chunk-QYG4BY6Q.js → chunk-ZPVGEMVC.js} +1 -1
  129. package/chunks/{computer-use-VZZMJEQ7.js → computer-use-UY4A72X7.js} +26 -27
  130. package/chunks/{config-utils-IQQT3GCI.js → config-utils-KWTRFP7D.js} +3 -3
  131. package/chunks/{contextCommand-PORKIZSY.js → contextCommand-3DZ2SVH6.js} +30 -31
  132. package/chunks/{create-sub-session-EAB2U5XW.js → create-sub-session-DIJOV6HV.js} +2 -2
  133. package/chunks/{create-sub-session-XVFKHAFW.js → create-sub-session-OT7WXLDO.js} +27 -28
  134. package/chunks/{cron-create-GMVKSXZT.js → cron-create-X462ERYA.js} +4 -4
  135. package/chunks/{cron-delete-VDZKUAVK.js → cron-delete-SL5UJUM3.js} +4 -4
  136. package/chunks/{cron-list-UG7C7RAR.js → cron-list-3MD6SVXI.js} +4 -4
  137. package/chunks/{daemon-IHR6WSPB.js → daemon-ZW6LHOXT.js} +91 -14
  138. package/chunks/{daemon-status-provider-ABLBA3UJ.js → daemon-status-provider-GTZOYSBO.js} +35 -36
  139. package/chunks/{de-NOXPCSYN.js → de-I7ZIYXZC.js} +3 -2
  140. package/chunks/{dist-PX2ERZ6I.js → dist-HCUUS6IH.js} +2 -2
  141. package/chunks/{dist-VYWUKURL.js → dist-O2IP3G5D.js} +1 -1
  142. package/chunks/{dist-GXJVCOS7.js → dist-RZBJT5O2.js} +2 -1
  143. package/chunks/{dist-V2YVLYOW.js → dist-Y54RURGT.js} +3 -1
  144. package/chunks/{dist-DOPL5LSQ.js → dist-YTPTCUAD.js} +1 -1
  145. package/chunks/{dist-4WCQEZIN.js → dist-ZJHKKWUD.js} +1 -1
  146. package/chunks/{earlyInputCapture-DJCU5SPU.js → earlyInputCapture-GGWVGBZ7.js} +27 -28
  147. package/chunks/{edit-O4VV5AO6.js → edit-JN467GIR.js} +27 -28
  148. package/chunks/{en-JFVULHTB.js → en-XE34GKAA.js} +7 -3
  149. package/chunks/{enter-worktree-XQYDDI2I.js → enter-worktree-MMO4VBQE.js} +26 -27
  150. package/chunks/{enterPlanMode-CESVMQBV.js → enterPlanMode-BRZOG4DB.js} +27 -30
  151. package/chunks/{environment-5KXOLZNR.js → environment-LOCDCWMZ.js} +29 -30
  152. package/chunks/{errors-EBUTCBAQ.js → errors-XXSL5HGG.js} +29 -30
  153. package/chunks/{exit-worktree-MWGNSPNX.js → exit-worktree-UD7PI5H5.js} +26 -27
  154. package/chunks/exitPlanMode-EIUETQI6.js +389 -0
  155. package/chunks/{fast-path-6V73F2T2.js → fast-path-ULGAEUVK.js} +2 -2
  156. package/chunks/{fr-HVFNU42H.js → fr-X7KDVZIY.js} +3 -2
  157. package/chunks/{gemini-TEFJZCIZ.js → gemini-KW3APZ4P.js} +133 -80
  158. package/chunks/{geminiContentGenerator-M56BEXWI.js → geminiContentGenerator-4BQ5QHPR.js} +5 -5
  159. package/chunks/{glob-DMYFEEAZ.js → glob-FPKAMR6B.js} +32 -28
  160. package/chunks/{grep-GYE47MD4.js → grep-MOGRCYB4.js} +32 -28
  161. package/chunks/{handleAutoUpdate-OLUY4L7L.js → handleAutoUpdate-QUMRZZOS.js} +33 -34
  162. package/chunks/{i18n-462JC7IY.js → i18n-F3W6YUYP.js} +28 -29
  163. package/chunks/{initializer-Y7WD4D2I.js → initializer-KLU2KAIZ.js} +33 -34
  164. package/chunks/{installationInfo-I2Z3BKCE.js → installationInfo-P3ZP2SIZ.js} +27 -28
  165. package/chunks/{ja-PY5AF544.js → ja-2ICT3KXF.js} +3 -2
  166. package/chunks/{keychain-token-storage-AU22CQI6.js → keychain-token-storage-K23CFKGN.js} +2 -2
  167. package/chunks/{list-XQ5MSAXP.js → list-4X6D5JD2.js} +35 -36
  168. package/chunks/{loadedSettingsAdapter-TQOWYE7C.js → loadedSettingsAdapter-446B6WKA.js} +32 -33
  169. package/chunks/{loop-wakeup-QXWZSCYM.js → loop-wakeup-6H7OENTB.js} +5 -5
  170. package/chunks/{ls-2OUTG3IZ.js → ls-APTSOOS5.js} +4 -4
  171. package/chunks/{lsp-4VMNXZW6.js → lsp-HPACPJAN.js} +2 -2
  172. package/chunks/{mcp-22LLEEVM.js → mcp-JYVOJZOD.js} +32 -33
  173. package/chunks/{monitor-VKG324X3.js → monitor-KY7YH7TL.js} +26 -27
  174. package/chunks/nonInteractiveCli-EK35TLVJ.js +129 -0
  175. package/chunks/{notebook-edit-FJJRBQ3S.js → notebook-edit-IHGW42QK.js} +27 -28
  176. package/chunks/{openaiContentGenerator-4T2OGTR5.js → openaiContentGenerator-FURUCKQJ.js} +13 -14
  177. package/chunks/{pidfile-XL3MDCBM.js → pidfile-WKUVXDMR.js} +27 -28
  178. package/chunks/{processUtils-7UCFN34D.js → processUtils-LHSRN76X.js} +2 -2
  179. package/chunks/{pt-A3PRQXMU.js → pt-JJ4XPIBP.js} +3 -2
  180. package/chunks/{qwenContentGenerator-PQUXJDIZ.js → qwenContentGenerator-NRLM7R36.js} +30 -31
  181. package/chunks/{qwenOAuth2-LEYOU7RU.js → qwenOAuth2-5FNX3AWH.js} +22 -5
  182. package/chunks/{read-file-3EYQML7E.js → read-file-VLEAEXFP.js} +9 -10
  183. package/chunks/{read-mcp-resource-JUFHCKSC.js → read-mcp-resource-C6NT52T6.js} +2 -2
  184. package/chunks/{record-artifact-DWSMBXYY.js → record-artifact-ENCU7QCL.js} +2 -2
  185. package/chunks/{ripGrep-S6WPGQNA.js → ripGrep-MT23EIDD.js} +26 -27
  186. package/chunks/{ru-IBCWUTOC.js → ru-STR4KTW7.js} +3 -2
  187. package/chunks/{run-qwen-serve-NSKBT3HU.js → run-qwen-serve-5HWOQFLI.js} +63 -47
  188. package/chunks/{runtime-LG5ZZ3VH.js → runtime-6IVKJSLW.js} +38 -37
  189. package/chunks/{scheduler-PLX3VVTB.js → scheduler-63GJG75U.js} +26 -27
  190. package/chunks/{send-message-JZ752NWD.js → send-message-5GZ4FX2V.js} +3 -3
  191. package/chunks/{serve-S2ZLRZZR.js → serve-3LL7RRDP.js} +32 -33
  192. package/chunks/{server-5ECMV4TM.js → server-AA24QLPA.js} +1672 -615
  193. package/chunks/{session-ILSONWG4.js → session-LRVCFQQQ.js} +102 -75
  194. package/chunks/{settings-BOE7WWSA.js → settings-ZX3OKUT4.js} +36 -37
  195. package/chunks/{shell-VW664JIZ.js → shell-KR3IMYH6.js} +26 -27
  196. package/chunks/{skill-COHV6625.js → skill-QLM2LSF7.js} +11 -12
  197. package/chunks/{spawnChannel-5UUR5XOZ.js → spawnChannel-6WFOK3SA.js} +28 -29
  198. package/chunks/{src-XPKFZ3RN.js → src-ADLNIPHD.js} +101 -72
  199. package/chunks/{standalone-update-IOOJ2NZQ.js → standalone-update-C54OTJWJ.js} +29 -30
  200. package/chunks/{startInteractiveUI-3NGJGXXS.js → startInteractiveUI-KFAOS6HC.js} +2342 -1796
  201. package/chunks/{stdioHelpers-UMY72QRP.js → stdioHelpers-HGIYTWAY.js} +3 -1
  202. package/chunks/{syntheticOutput-LELY6HAI.js → syntheticOutput-ULOVVLY4.js} +3 -3
  203. package/chunks/{task-create-QY3BIMNM.js → task-create-DUE2PMNI.js} +7 -7
  204. package/chunks/{task-list-D2U47WBJ.js → task-list-WVPNX7BZ.js} +5 -5
  205. package/chunks/{task-stop-N6E5IYLH.js → task-stop-CPEQWOT6.js} +2 -2
  206. package/chunks/{task-update-HJCQILLB.js → task-update-HY2LNFFB.js} +7 -7
  207. package/chunks/{team-create-UPLVZQFX.js → team-create-Q5B5M7UD.js} +26 -27
  208. package/chunks/{team-delete-RCWYDRF4.js → team-delete-JJV6IUOA.js} +5 -5
  209. package/chunks/{team-plan-approval-F5F432RO.js → team-plan-approval-J55PXNY2.js} +26 -27
  210. package/chunks/{theme-manager-JJE4BJ67.js → theme-manager-QWTDRPHV.js} +27 -28
  211. package/chunks/todoWrite-JHHIDOIV.js +358 -0
  212. package/chunks/{tool-search-LRXI4JLZ.js → tool-search-LSSKWZKH.js} +10 -11
  213. package/chunks/{total-session-admission-I4DHN6UP.js → total-session-admission-S6ATY5HY.js} +32 -33
  214. package/chunks/{trustedFolders-SEH7LNX2.js → trustedFolders-CY4TUPDJ.js} +28 -29
  215. package/chunks/turndown.cjs-FZHGMUTY.js +17670 -0
  216. package/chunks/{update-relaunch-T6ZKBUA6.js → update-relaunch-IOKOUV3K.js} +6 -6
  217. package/chunks/{updateCheck-FWLXZPRO.js → updateCheck-YNRFE4V7.js} +30 -31
  218. package/chunks/{validateNonInterActiveAuth-X6K2VWYT.js → validateNonInterActiveAuth-OXTECS4B.js} +68 -68
  219. package/chunks/{version-LIFSOGSE.js → version-2CZQQDL5.js} +1 -1
  220. package/chunks/web-fetch-7QTEGJI5.js +938 -0
  221. package/chunks/{workflow-NX2DFWGD.js → workflow-G3CZU256.js} +29 -30
  222. package/chunks/{workspace-providers-status-VYD6M2NE.js → workspace-providers-status-UHQOIPAZ.js} +35 -36
  223. package/chunks/{workspace-registration-store-2Y6PWOEL.js → workspace-registration-store-5WPCMX4F.js} +1 -1
  224. package/chunks/{workspace-registry-PKBDBWCA.js → workspace-registry-LAQCRQTH.js} +32 -33
  225. package/chunks/{workspace-service-HHORUHTS.js → workspace-service-6ZEUJY2Z.js} +38 -39
  226. package/chunks/{workspace-skills-status-O5Q26LIY.js → workspace-skills-status-YG6OITSM.js} +33 -34
  227. package/chunks/{write-file-NVAEZ3J2.js → write-file-E7T3PU3B.js} +60 -28
  228. package/chunks/{zh-PAUNIMHQ.js → zh-6ANG2HTL.js} +7 -3
  229. package/chunks/{zh-TW-GNEUIUFF.js → zh-TW-4RR3YHNN.js} +7 -3
  230. package/cli-entry.js +37 -2
  231. package/cli.js +17 -11
  232. package/locales/ca.js +3 -2
  233. package/locales/de.js +3 -2
  234. package/locales/en.js +10 -5
  235. package/locales/fr.js +3 -2
  236. package/locales/ja.js +3 -2
  237. package/locales/pt.js +3 -2
  238. package/locales/ru.js +3 -2
  239. package/locales/zh-TW.js +9 -3
  240. package/locales/zh.js +9 -3
  241. package/package.json +3 -3
  242. package/web-shell/assets/{arc-H74fE8UR.js → arc-_dVIKMdB.js} +1 -1
  243. package/web-shell/assets/{architectureDiagram-3BPJPVTR-DN3kEq-I.js → architectureDiagram-3BPJPVTR-MuN3nKpL.js} +1 -1
  244. package/web-shell/assets/{blockDiagram-GPEHLZMM-BrqbsFUF.js → blockDiagram-GPEHLZMM-BtmvJjzx.js} +1 -1
  245. package/web-shell/assets/{c4Diagram-AAUBKEIU-ClFhU1P-.js → c4Diagram-AAUBKEIU-Dvi58_BU.js} +1 -1
  246. package/web-shell/assets/channel-Bi5TehaT.js +1 -0
  247. package/web-shell/assets/{chunk-2J33WTMH-jCIcG0_M.js → chunk-2J33WTMH-YqxOVhS1.js} +1 -1
  248. package/web-shell/assets/{chunk-4BX2VUAB-DSkGe62-.js → chunk-4BX2VUAB-DoBgbC9z.js} +1 -1
  249. package/web-shell/assets/{chunk-55IACEB6-BxBHOGTd.js → chunk-55IACEB6-3NEQrBAr.js} +1 -1
  250. package/web-shell/assets/{chunk-727SXJPM-v_DS7dH7.js → chunk-727SXJPM-DrCZQxp0.js} +1 -1
  251. package/web-shell/assets/{chunk-AQP2D5EJ-1RzEKRPq.js → chunk-AQP2D5EJ-m_g3zjgv.js} +1 -1
  252. package/web-shell/assets/{chunk-FMBD7UC4-DyrSbLOX.js → chunk-FMBD7UC4-D1_crABJ.js} +1 -1
  253. package/web-shell/assets/{chunk-ND2GUHAM-BCmdsZiy.js → chunk-ND2GUHAM-BdhgVtBx.js} +1 -1
  254. package/web-shell/assets/{chunk-QZHKN3VN-CphHGW2D.js → chunk-QZHKN3VN-BlmThhm-.js} +1 -1
  255. package/web-shell/assets/classDiagram-4FO5ZUOK-BKhhRdd1.js +1 -0
  256. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BKhhRdd1.js +1 -0
  257. package/web-shell/assets/{cose-bilkent-S5V4N54A-D5kRC7Fi.js → cose-bilkent-S5V4N54A-Cbjm_00Z.js} +1 -1
  258. package/web-shell/assets/{dagre-BM42HDAG-DIiyJJ0U.js → dagre-BM42HDAG-C39QNVgC.js} +1 -1
  259. package/web-shell/assets/{diagram-2AECGRRQ-BOcuB8xU.js → diagram-2AECGRRQ-DNXSAixC.js} +1 -1
  260. package/web-shell/assets/{diagram-5GNKFQAL-CMgiZ4d3.js → diagram-5GNKFQAL-BCbGUPEA.js} +1 -1
  261. package/web-shell/assets/{diagram-KO2AKTUF-Ctx8pfN0.js → diagram-KO2AKTUF-1eujKSDC.js} +1 -1
  262. package/web-shell/assets/{diagram-LMA3HP47-BT5REAWC.js → diagram-LMA3HP47-DUMKXgql.js} +1 -1
  263. package/web-shell/assets/{diagram-OG6HWLK6-CJkUqXcp.js → diagram-OG6HWLK6-BFktU3_u.js} +1 -1
  264. package/web-shell/assets/{erDiagram-TEJ5UH35-DyvNNX6v.js → erDiagram-TEJ5UH35-BvJC7DLk.js} +1 -1
  265. package/web-shell/assets/{flowDiagram-I6XJVG4X-VBf8_My8.js → flowDiagram-I6XJVG4X-Cgu3PlOt.js} +1 -1
  266. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CviJnR7B.js → ganttDiagram-6RSMTGT7-DLNXN5Xh.js} +1 -1
  267. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BY66_Oze.js → gitGraphDiagram-PVQCEYII-BQFRDv6R.js} +1 -1
  268. package/web-shell/assets/index-C_ouplMQ.js +1187 -0
  269. package/web-shell/assets/{index-DhYuvi3j.js → index-CdC3pjP3.js} +1 -1
  270. package/web-shell/assets/index-XGDFJE-X.css +5 -0
  271. package/web-shell/assets/{infoDiagram-5YYISTIA-D2jaewWZ.js → infoDiagram-5YYISTIA-DT2mOSvp.js} +1 -1
  272. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BpnNTyi5.js → ishikawaDiagram-YF4QCWOH-9fy_K4bd.js} +1 -1
  273. package/web-shell/assets/{journeyDiagram-JHISSGLW-CA55GNZF.js → journeyDiagram-JHISSGLW-CoGSEuhE.js} +1 -1
  274. package/web-shell/assets/{kanban-definition-UN3LZRKU-DyiSl_Ts.js → kanban-definition-UN3LZRKU-BP9hHYIj.js} +1 -1
  275. package/web-shell/assets/{linear-B-sN3dkV.js → linear-uIroDsmp.js} +1 -1
  276. package/web-shell/assets/{mermaid.core-xf9SXDdb.js → mermaid.core-BUwoStsA.js} +5 -5
  277. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DXhr2kRk.js → mindmap-definition-RKZ34NQL-DZB-FWim.js} +1 -1
  278. package/web-shell/assets/{pieDiagram-4H26LBE5-DUXpbfGQ.js → pieDiagram-4H26LBE5-YPptloKl.js} +1 -1
  279. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-NeDQYeWw.js → quadrantDiagram-W4KKPZXB-dgk3DSzm.js} +1 -1
  280. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BSbFRL1A.js → requirementDiagram-4Y6WPE33-BH2En2i9.js} +1 -1
  281. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-gg27cAaN.js → sankeyDiagram-5OEKKPKP-BB98feeI.js} +1 -1
  282. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Bi_1TSs4.js → sequenceDiagram-3UESZ5HK-CunAIGh8.js} +1 -1
  283. package/web-shell/assets/{stateDiagram-AJRCARHV-CboCCRaf.js → stateDiagram-AJRCARHV-DTJs_-I2.js} +1 -1
  284. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DrfFMYta.js +1 -0
  285. package/web-shell/assets/{timeline-definition-PNZ67QCA-DrGpF_jn.js → timeline-definition-PNZ67QCA-Cd4AN7O0.js} +1 -1
  286. package/web-shell/assets/{vennDiagram-CIIHVFJN-DCaJU67x.js → vennDiagram-CIIHVFJN-xIG-rUU9.js} +1 -1
  287. package/web-shell/assets/{wardley-L42UT6IY-p0QcW1aP.js → wardley-L42UT6IY-D1UyjIcG.js} +1 -1
  288. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DiEVxj1W.js → wardleyDiagram-YWT4CUSO-BVM0Mb99.js} +1 -1
  289. package/web-shell/assets/{xychartDiagram-2RQKCTM6-iQB8nSlA.js → xychartDiagram-2RQKCTM6-BX31JDSz.js} +1 -1
  290. package/web-shell/index.html +2 -2
  291. package/chunks/chunk-2HRYPZT5.js +0 -25
  292. package/chunks/chunk-QAW7PIHT.js +0 -168
  293. package/chunks/chunk-RTV5TUYB.js +0 -143
  294. package/chunks/chunk-ZPAHLFZU.js +0 -172
  295. package/chunks/exitPlanMode-HYQL4XMB.js +0 -909
  296. package/chunks/nonInteractiveCli-UMYUT643.js +0 -129
  297. package/chunks/todoWrite-FKCGATPJ.js +0 -531
  298. package/chunks/web-fetch-CFCWTCAP.js +0 -5673
  299. package/web-shell/assets/channel-NFC5ADAa.js +0 -1
  300. package/web-shell/assets/classDiagram-4FO5ZUOK-DHgwjz3X.js +0 -1
  301. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DHgwjz3X.js +0 -1
  302. package/web-shell/assets/index-8xIBbHV3.js +0 -1143
  303. package/web-shell/assets/index-DLyhlZZO.css +0 -5
  304. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CXRqms6P.js +0 -1
@@ -38,14 +38,16 @@ Your goal here is to understand the scope of changes so you can dispatch agents
38
38
 
39
39
  If the args file is genuinely absent (an older CLI, or a write that failed), fall back to `write_file`-ing the raw argument string **verbatim and unmodified** — copying **the user's argument**, not an example from these instructions — and say in your output that you did, so a wrong target is at least attributable. For a no-argument `/review`, no file is written and none is needed; run the parser with an empty stdin.
40
40
 
41
+ **Every command below is written `"${QWEN_CODE_CLI:-qwen}" review …`, and that is not decoration — copy it as written.** `QWEN_CODE_CLI` is the entry of the CLI **running this skill**, exported to your shell for you; a bare `qwen` is whatever the machine's `PATH` happens to resolve to, which is a different program the moment a global install is older than the build you are in. Measured: a `npm run dev:daemon` session issued `qwen review agent-prompt --role 0`, `PATH` found a v0.19.10 whose `agent-prompt` predates `--role` entirely, and the review died on `Missing required argument: chunk` — the skill and the CLI it was talking to were different versions. The `:-qwen` fallback keeps older hosts that do not export it working. It is POSIX parameter expansion, which makes the POSIX-shell requirement this skill already had (Step 0 pipes through `tee`) total: on Windows, run the review from git-bash — cmd.exe passes `${…:-…}` through literally and PowerShell errors on it.
42
+
41
43
  Then run:
42
44
 
43
45
  ```bash
44
46
  # The CLI wrote this file; you did not, and must not.
45
- qwen review parse-args --stdin < <the path in the <skill-args-file> note> \
47
+ "${QWEN_CODE_CLI:-qwen}" review parse-args --stdin < <the path in the <skill-args-file> note> \
46
48
  | tee .qwen/tmp/qwen-review-parse-args.json
47
49
  # No arguments at all (`/review` bare) — no args file exists:
48
- # : | qwen review parse-args --stdin | tee .qwen/tmp/qwen-review-parse-args.json
50
+ # : | "${QWEN_CODE_CLI:-qwen}" review parse-args --stdin | tee .qwen/tmp/qwen-review-parse-args.json
49
51
  ```
50
52
 
51
53
  (Step 9 removes these files with the other temp files.)
@@ -75,7 +77,7 @@ The parser already classified the target, so there is nothing to disambiguate by
75
77
 
76
78
  For a `pr-url` whose `host` is not `github.com` (GitHub Enterprise), **pass `--host <host>` to every review subcommand that talks to GitHub — `fetch-pr`, `pr-context`, and `presubmit`** — which routes all of their `gh` calls via GH_HOST in code; a forgotten host cannot silently retarget them at github.com. The `gh` commands you run directly are still yours to route: prefix Agent 0's `gh pr view`/`gh issue view`, Step 6's residual body fetch, and the Step 7 submission with `GH_HOST=<host> ` (e.g. `GH_HOST=github.example.com gh api ...`). `gh` defaults to `github.com`, so a dropped host makes a call read from and post to the wrong site's `owner/repo`.
77
79
 
78
- 3. If **no remote matches**, use **lightweight mode**: run `gh pr diff <url>` to get the diff directly. Skip Step 2 (no local rules) and Step 8 (no local reports or cache). In Step 9, skip worktree removal (none was created) but still clean up temp files (`.qwen/tmp/qwen-review-{target}-*`). Also run `qwen review pr-context <number> <owner>/<repo> --out .qwen/tmp/qwen-review-pr-<number>-context.md` — it is pure GitHub API and works cross-repo. Agent 0 and Step 6's open-Critical re-check depend on it: a `Refs #123`-style target issue is only discoverable from the PR body, and open Critical threads only from the context file, so skipping it lets a wrong-root fix sail through blocker-free. If `pr-context` fails here (auth, network), warn and continue with the diff alone — but skip Agent 0 (it has nothing to work from) and treat every open-Critical re-check verdict as "cannot tell", which forbids an Approve. Carry this forward as the **context-unavailable** state: Step 7's invariant caps **every** `C=0` outcome of such a run at `COMMENT` with a diff-only body (both the would-be APPROVE and the Suggestion-only "no blockers" sentence), so a run that could not see the PR's existing discussion can post findings but never certify the absence of blockers. In Step 7, use the owner/repo from the URL. Inform the user: "Cross-repo review: running in lightweight mode (no build/test)."
80
+ 3. If **no remote matches**, use **lightweight mode**: run `gh pr diff <url>` to get the diff directly. Skip Step 2 (no local rules) and Step 8 (no local reports or cache). In Step 9, skip worktree removal (none was created) but still clean up temp files (`.qwen/tmp/qwen-review-{target}-*`). Also run `"${QWEN_CODE_CLI:-qwen}" review pr-context <number> <owner>/<repo> --out .qwen/tmp/qwen-review-pr-<number>-context.md` — it is pure GitHub API and works cross-repo. Agent 0 and Step 6's open-Critical re-check depend on it: a `Refs #123`-style target issue is only discoverable from the PR body, and open Critical threads only from the context file, so skipping it lets a wrong-root fix sail through blocker-free. If `pr-context` fails here (auth, network), warn and continue with the diff alone — but skip Agent 0 (it has nothing to work from) and treat every open-Critical re-check verdict as "cannot tell", which forbids an Approve. Carry this forward as the **context-unavailable** state: Step 7's invariant caps **every** `C=0` outcome of such a run at `COMMENT` with a diff-only body (both the would-be APPROVE and the Suggestion-only "no blockers" sentence), so a run that could not see the PR's existing discussion can post findings but never certify the absence of blockers. In Step 7, use the owner/repo from the URL. Inform the user: "Cross-repo review: running in lightweight mode (no build/test)."
79
81
 
80
82
  Based on the parsed `target.type`:
81
83
 
@@ -88,7 +90,7 @@ Based on the parsed `target.type`:
88
90
  - **Run `qwen review fetch-pr`** to set up the working state in one pass — it cleans any stale worktree, fetches the PR HEAD into `qwen-review/pr-<n>`, queries `gh pr view` for metadata, and creates an ephemeral worktree at `.qwen/tmp/review-pr-<n>`:
89
91
 
90
92
  ```bash
91
- qwen review fetch-pr <pr_number> <owner>/<repo> \
93
+ "${QWEN_CODE_CLI:-qwen}" review fetch-pr <pr_number> <owner>/<repo> \
92
94
  --remote <remote> \
93
95
  --out .qwen/tmp/qwen-review-pr-<pr_number>-fetch.json
94
96
  ```
@@ -109,14 +111,14 @@ Based on the parsed `target.type`:
109
111
 
110
112
  - **Incremental review check** (high effort only — a low/medium quick pass neither consults nor updates the cache): if `.qwen/review-cache/pr-<n>.json` exists, read `lastCommitSha` and `lastModelId`. Compare to `fetchedSha` from the fetch report and the current model ID (`{{model}}`):
111
113
  - If SHAs differ → continue with the worktree just created. Compute the incremental diff (`git diff <lastCommitSha>..HEAD` inside the worktree) and use as the review scope; if the cached commit was rebased away, fall back to the full diff and log a warning.
112
- - If SHAs match **and** model matches **and** `--comment` was NOT specified → inform the user "No new changes since last review", run `qwen review cleanup pr-<n>` to remove the worktree just created, and stop.
114
+ - If SHAs match **and** model matches **and** `--comment` was NOT specified → inform the user "No new changes since last review", run `"${QWEN_CODE_CLI:-qwen}" review cleanup pr-<n>` to remove the worktree just created, and stop.
113
115
  - If SHAs match **and** model matches **but** `--comment` WAS specified → run the full review anyway. Inform the user: "No new code changes. Running review to post inline comments."
114
116
  - If SHAs match **but** model differs → continue. Inform: "Previous review used {cached_model}. Running full review with {{model}} for a second opinion."
115
117
 
116
118
  - **Fetch PR context** (metadata + already-discussed issues) in one pass:
117
119
 
118
120
  ```bash
119
- qwen review pr-context <pr_number> <owner>/<repo> \
121
+ "${QWEN_CODE_CLI:-qwen}" review pr-context <pr_number> <owner>/<repo> \
120
122
  --out .qwen/tmp/qwen-review-pr-<pr_number>-context.md
121
123
  ```
122
124
 
@@ -140,7 +142,7 @@ Based on the parsed `target.type`:
140
142
  - **Do not install dependencies here.** The install belongs to Agent 7, and `qwen review build-test` runs it — nothing before Agent 7 needs `node_modules`: the diff-reading agents read the diff and grep the worktree's _sources_. Run from here it is a **blocking prefix** to the whole fan-out — measured at ~161 seconds on a cold worktree of this repo, because `npm ci` triggers this project's `prepare` hook, which builds and bundles every workspace; run from inside `build-test` (which sets `QWEN_SKIP_PREPARE=1`) the install skips that wasted full build and overlaps the other agents, still reading. At low/medium effort nothing builds or tests at all, so there is no install on any path.
141
143
 
142
144
  - **`file`** (e.g., `src/foo.ts`):
143
- - Run `qwen review capture-local --file <file> --target <filename> --out .qwen/tmp/qwen-review-<filename>-plan.json` to get its changes (`--out` is required — see the capture block below for the full form). An **untracked** target file is captured whole (every line reads as added), which is the right frame for a file that does not exist upstream yet. The path is taken relative to **your** working directory and must be inside the repo.
145
+ - Run `"${QWEN_CODE_CLI:-qwen}" review capture-local --file <file> --target <filename> --out .qwen/tmp/qwen-review-<filename>-plan.json` to get its changes (`--out` is required — see the capture block below for the full form). An **untracked** target file is captured whole (every line reads as added), which is the right frame for a file that does not exist upstream yet. The path is taken relative to **your** working directory and must be inside the repo.
144
146
  - If the plan is empty (the file is tracked and unmodified), read the file and review its current state — see the no-diff branch below
145
147
 
146
148
  ### Diff capture and the review topology
@@ -167,9 +169,9 @@ A chunk is read with `read_file(file_path=diffPathAbsolute, offset=startLine - 1
167
169
  For **local-diff and file-path reviews**, capture and plan in one command:
168
170
 
169
171
  ```bash
170
- qwen review capture-local --out .qwen/tmp/qwen-review-local-plan.json
172
+ "${QWEN_CODE_CLI:-qwen}" review capture-local --out .qwen/tmp/qwen-review-local-plan.json
171
173
  # for a file-path review:
172
- qwen review capture-local --file <file> --target <filename> \
174
+ "${QWEN_CODE_CLI:-qwen}" review capture-local --file <file> --target <filename> \
173
175
  --out .qwen/tmp/qwen-review-<filename>-plan.json
174
176
  ```
175
177
 
@@ -190,10 +192,13 @@ For **cross-repo lightweight reviews**, do the same with the diff GitHub hands y
190
192
  ```bash
191
193
  mkdir -p .qwen/tmp
192
194
  gh pr diff <pr_number> --repo <owner>/<repo> > .qwen/tmp/qwen-review-pr-<n>-diff.txt
193
- qwen review plan-diff .qwen/tmp/qwen-review-pr-<n>-diff.txt \
195
+ "${QWEN_CODE_CLI:-qwen}" review plan-diff .qwen/tmp/qwen-review-pr-<n>-diff.txt \
196
+ --pr <pr_number> --repo <owner>/<repo> \
194
197
  --out .qwen/tmp/qwen-review-pr-<n>-plan.json
195
198
  ```
196
199
 
200
+ **Pass `--pr`/`--repo` only when the `pr-context` fetch above succeeded** — they put the PR identity into the plan, which makes the roster REQUIRE Agent 0 (`check-coverage` will name it if it never runs, exactly as in worktree mode). If `pr-context` failed, omit them: the run is in the context-unavailable state, Agent 0 has nothing to work from, and a roster demanding an agent nobody can brief would wedge the review.
201
+
197
202
  `plan-diff` and `capture-local` emit the same `diffPathAbsolute`, `chunks[]`, `files[]` and topology counts as `fetch-pr`, so Steps 3A, 3B and 7 work identically on all four review paths. Neither can decide `heavy` — that needs a tree to read the post-change file from — so no invariant agents run on a bare diff.
198
203
 
199
204
  If `diffPath` is `null` (merge-base could not be resolved), fall back to giving agents the `git diff` command and **tell the user coverage will be partial on a large diff**.
@@ -216,7 +221,7 @@ Skip this step at **low** effort — the low pass checks hunk-visible correctnes
216
221
  Run `qwen review load-rules` to read project-specific rules. **For PR reviews, read from the base branch** (the PR branch is untrusted — a malicious PR could otherwise inject bypass rules):
217
222
 
218
223
  ```bash
219
- qwen review load-rules <resolved_base_ref> \
224
+ "${QWEN_CODE_CLI:-qwen}" review load-rules <resolved_base_ref> \
220
225
  --out .qwen/tmp/qwen-review-<target>-rules.md
221
226
  ```
222
227
 
@@ -245,14 +250,17 @@ Use **Step 3A** or **Step 3B** as the topology gate in Step 1 decided. The dimen
245
250
 
246
251
  Launch **12 agents** for same-repo **PR** reviews (Agent 1 has three procedural variants 1a/1b/1c and Agent 6 has three persona variants 6a/6b/6c — each variant counts as a separate parallel agent), plus up to 2 optional diff-specialized finders (Agent 8) when the diff's domain calls for them. For cross-repo lightweight **PR** mode launch **10 agents** — skip Agent 7 (Build & Test) and Agent 1c (Cross-file tracer), since there is no local codebase to build, test, or grep. (Agent 8 finders need only the diff, so the up-to-2 option applies in every mode — lightweight and local included.) Lightweight mode also degrades Agents 1a and 1b, whose briefs assume a source tree: tell them they have the diff ONLY — 1a reviews hunks without enclosing-function reads, and 1b, when it cannot find a deleted invariant re-established because the evidence would live outside the diff, reports the candidate at `Confidence: low` and says the re-establishment could not be checked, instead of asserting it is missing. Step 4's verifiers operate under the same limit, so lightweight-mode findings that depend on unseen source must stay low-confidence (terminal-only) rather than becoming public blockers. **Agent 0 (Issue Fidelity) runs only when the review target is a PR** — a local-diff or file-path review has no PR and no linked issue, so skip Agent 0 and launch **11 agents** (Agents 1a–7). Each agent should focus exclusively on its dimension. (Agent counts are maxima: on a diff with no removed or replaced lines, Agent 1b has nothing to audit and is skipped — one fewer agent.)
247
252
 
248
- **Do not write these prompts. Ask for each one:**
253
+ **Do not write these prompts, and do not ask for them one at a time. One call builds all of them:**
249
254
 
250
255
  ```bash
251
- qwen review agent-prompt --plan <the plan report from Step 1> --role <role> \
252
- [--rules <the rules file from Step 2, if the project has any>]
256
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> --roster \
257
+ [--rules <the rules file from Step 2, if the project has any>] \
258
+ > .qwen/tmp/qwen-review-{target}-roster.txt
253
259
  ```
254
260
 
255
- One call per agent, and **pass what it prints to that agent verbatim.** The roles are `0`, `1a`, `1b`, `1c`, `2`, `3`, `4`, `5`, `6a`, `6b`, `6c`, `7`.
261
+ **Redirected to a file, then `read_file` it, paging until `isTruncated` is false** the same rule as every other large output in this skill: shell output truncates at 30 000 characters, and a large plan's roster exceeds that, which would silently swallow the middle blocks. The output is self-checking: blocks are numbered `agent k of N` and the file ends with an `end of roster` line — if any `k` is missing or the end line is absent, rebuild just those blocks with `--chunk <id>` / `--role <r>` (every prompt is also recorded on disk regardless).
262
+
263
+ It prints one labelled block per required agent — which roles this review owes is read out of the plan, so the paragraph above is the _why_ and the roster is the _list_ — and **each block goes to its agent verbatim**, all launched in one response. To rebuild a single agent's prompt (a relaunch after Step 3D): `--role <role>` in place of `--roster`; the roles are `0`, `1a`, `1b`, `1c`, `2`, `3`, `4`, `5`, `6a`, `6b`, `6c`, `7`.
256
264
 
257
265
  **What it prints is short — a few hundred characters — and it is short on purpose.** It names the agent's role, points at the **brief file** the command just wrote, and lists the `read_file` calls for the diff. The brief itself — the dimension, the finding format, the severity definitions, the project rules — is on disk, and the agent reads it, exactly as it reads the diff. That is not an optimisation. Asked to paste a 4 652-character prompt to each of twelve agents, a real run delivered **2 893** characters of one: it kept the head, added a preamble of its own, and cut nineteen hundred characters out of the middle. Then it read the coverage check's refusal, concluded that "the agents clearly did their job", skipped `compose-review`, and filed an **Approve it had written itself**. What you are asked to carry is now small enough that you will carry it. Copy it; do not retype it. (Agent 8, when you launch one, is the exception — its brief is the one you write, so give it `--whole-diff` and append your domain brief.)
258
266
 
@@ -264,16 +272,15 @@ Why: **the roles this command does not build are the roles that go missing.** Me
264
272
 
265
273
  Eleven agents all reading the same diff (every 3A agent except Build & Test walks the whole chunk plan) multiplies redundant reading of the early hunks; it does not add coverage. Once there is enough production code to divide, fan out along **territory** as well: one agent per chunk, with the review dimensions folded into that agent's brief, plus a small set of whole-diff agents for the concerns that only exist at diff scale.
266
274
 
267
- **Chunk agents — one per entry in `chunks[]`.** Each is a `general-purpose` subagent. **Do not write its prompt. Ask for it:**
275
+ **Chunk agents — one per entry in `chunks[]`.** Each is a `general-purpose` subagent. **Do not write their prompts, and do not ask for them one at a time — one call builds the whole 3B fan-out, chunk agents, whole-diff agents and invariant agents alike:**
268
276
 
269
277
  ```bash
270
- qwen review agent-prompt \
271
- --plan <the plan report from Step 1> \
272
- --chunk <id> \
273
- [--rules <the rules file from Step 2, if the project has any>]
278
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> --roster \
279
+ [--rules <the rules file from Step 2, if the project has any>] \
280
+ > .qwen/tmp/qwen-review-{target}-roster.txt
274
281
  ```
275
282
 
276
- Pass what it prints to the agent **verbatim**. **Pass `--rules` whenever Step 2 found any** — this command builds the whole prompt, so there is no later step in which you would staple them on, and a review that silently enforces no project rule is one of the things this skill exists to prevent.
283
+ Redirect and `read_file` it paged, exactly as in Step 3A — a 3B roster is the large case, and shell output truncates at 30 000 characters. Check every `agent k of N` block is present (the file ends with an `end of roster` line); rebuild any missing one with `--chunk <id>` / `--role <r>`. One labelled block per agent; each goes to its agent **verbatim**. (To rebuild a single chunk agent's prompt for a relaunch: `--chunk <id>` in place of `--roster`.) **Pass `--rules` whenever Step 2 found any** — this command builds the whole prompt, so there is no later step in which you would staple them on, and a review that silently enforces no project rule is one of the things this skill exists to prevent.
277
284
 
278
285
  **What it prints is short — a few hundred characters.** It names the chunk, points at the **brief file** the command just wrote, and gives the one `read_file` that defines the territory. The brief — the territory's files, the paging rule, the uncoverable rule, what to review, the finding format, the severity definitions, the project rules and the receipt — is on disk, and the agent reads it, exactly as it reads the diff. A chunk agent's brief runs to about five kilobytes with the project rules in it, and a Step 3B review of a real pull request has **seventeen** of them: eighty-seven kilobytes, in one response, pasted without an edit. That is not a thing that happens. At a twelfth of that load, a real run cut nineteen hundred characters out of a single prompt and then talked its way past the check that caught it.
279
286
 
@@ -295,14 +302,7 @@ Everything below still governs what the agent is asked to do; the command builds
295
302
 
296
303
  **Whole-diff agents — launched alongside the chunk agents, in the same response.**
297
304
 
298
- **Their prompts are built in code too. Ask for each one:**
299
-
300
- ```bash
301
- qwen review agent-prompt --plan <the plan report from Step 1> --role <role> \
302
- [--rules <the rules file from Step 2, if the project has any>]
303
- ```
304
-
305
- Roles here: `0` (PR reviews), `1b` (when the diff removes anything), `1c`, `test-matrix`, `7` (same-repo). For a **heavy** file, three more, one per checklist slice: `--role invariant-a|invariant-b|invariant-c --file <path>`. Pass each **verbatim**. `check-coverage` derives the same list from the plan and will name any role that did not run.
305
+ **Their blocks are already in the `--roster` output above — you have them.** Roles there: `0` (PR reviews), `1b` (when the diff removes anything), `1c`, `test-matrix`, `7` (same-repo), and for a **heavy** file three more, one per checklist slice (their blocks are labelled `Invariant agent A|B|C: … — <path>`). Pass each **verbatim**. To rebuild one for a relaunch: `--role <role>` (an invariant agent adds `--file <path>`). `check-coverage` derives the same list from the plan and will name any role that did not run.
306
306
 
307
307
  Why: **the chunk agents got the diff and these did not.** Measured against the harness's record of one real 3B run, all three whole-diff agents — cross-file tracer, test-coverage matrix, build & test — were launched with a prompt that named **no diff file at all**. The test-coverage matrix was told, in prose, to "Read the diff chunks and the test files", and given no path to read them from. It went and read the post-change source instead, and on a diff with deletions that shows an agent precisely nothing: the removed line is not in that file, and nothing marks where it was. These are the agents that own the classes a chunk agent is structurally blind to — the cross-file trace, the cross-chunk removed-behaviour pairing, the test matrix. The review's only coverage of all three was done by agents that never opened the diff, and the coverage check could not see it, because it only ever asked that question of agents whose prompt said `chunk N of M`.
308
308
 
@@ -320,10 +320,10 @@ The sections below say what each agent is _for_. They are no longer what it is _
320
320
 
321
321
  When a file is largely rewritten, reviewing it as a diff is the wrong frame. The bugs are not inside any one hunk; they are **between** the new lines, which can sit two thousand lines apart — a timer armed near the top of the file and a teardown path near the bottom. No chunk agent, and no reader of a diff with three lines of context, can see that pair.
322
322
 
323
- Three agents per `heavy` file, one checklist slice each:
323
+ Three agents per `heavy` file, one checklist slice each — their blocks are in the `--roster` output; to rebuild one for a relaunch:
324
324
 
325
325
  ```bash
326
- qwen review agent-prompt --plan <the plan report from Step 1> \
326
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> \
327
327
  --role invariant-a --file <path> [--rules <the rules file from Step 2>]
328
328
  # ...and --role invariant-b, --role invariant-c, for the same file
329
329
  ```
@@ -339,7 +339,7 @@ Three ranges exist in the report and they are not interchangeable, which is why
339
339
  **Do not check the coverage. It is checked for you, from what the agents actually did.** You do not copy their returns anywhere — the harness already recorded them, along with every tool call each agent made and the prompt each was launched with. Run:
340
340
 
341
341
  ```bash
342
- qwen review check-coverage \
342
+ "${QWEN_CODE_CLI:-qwen}" review check-coverage \
343
343
  --plan <the plan report from Step 1> \
344
344
  --out .qwen/tmp/qwen-review-{target}-coverage.json
345
345
  ```
@@ -380,11 +380,11 @@ A check you perform silently is a check you skip, and this one has been skipped:
380
380
 
381
381
  ## Agent dimensions (used by 3A and 3B; reused inline by 3C)
382
382
 
383
- **Every agent MUST be an awaitable subagent: set `subagent_type: "general-purpose"` on every `agent` call.** Do NOT fork them — do not omit `subagent_type`, and 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.
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
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
- **You no longer compose these prompts. `qwen review agent-prompt` does** — one call per agent, and what it prints goes to that 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.
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
 
389
389
  The one thing you still add per agent is **a one-sentence summary of what the change is about**, ahead of the block. Add it before, never inside: the delivered prompt must _contain_ what the command printed, and Step 3D checks that it does.
390
390
 
@@ -426,7 +426,7 @@ Two things the command's briefs carry that no orchestrator should be relaying by
426
426
 
427
427
  The fixed dimensions are domain-blind. When a diff concentrates in a domain with a recognizable failure grammar — a reconnect/backoff state machine, a module loader, a cron scheduler, a wire-protocol codec, a cache layer, a data migration — write 1–2 additional finder briefs specialized to that domain and launch them alongside the standard set, labeled `Agent 8a/8b: <domain> angle`.
428
428
 
429
- **This is the one brief you write**, so it is the one place `--role` does not help: build the diff-reading block with `qwen review agent-prompt --plan <plan> --whole-diff` and append your domain brief to it. A specialized brief names the domain's specific invariants to walk, the way the invariant checklist does for a rewritten file. Examples: for a module loader — resolution order, ESM/CJS interop, circular-import timing, cache invalidation; for reconnect logic — state flags reset on every exit path, backoff growth and cap, timer cancellation on teardown, buffered-data loss when a retry is abandoned.
429
+ **This is the one brief you write**, so it is the one place `--role` does not help: build the diff-reading block with `"${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <plan> --whole-diff` and append your domain brief to it. A specialized brief names the domain's specific invariants to walk, the way the invariant checklist does for a rewritten file. Examples: for a module loader — resolution order, ESM/CJS interop, circular-import timing, cache invalidation; for reconnect logic — state flags reset on every exit path, backoff growth and cap, timer cancellation on teardown, buffered-data loss when a retry is abandoned.
430
430
 
431
431
  Rules: at most 2; launch none when no domain stands out (the common case — most diffs get zero). They are not in the roster, so nothing will ask for them. Their findings are `Source: [review]`, use the standard finding format including the failure scenario, and go through Step 4 verification like any other finding.
432
432
 
@@ -445,7 +445,7 @@ At low and medium effort there are no subagents: you are the finder, in this con
445
445
  **Medium — the finder angles run in sequence, by you.** Do NOT spawn subagents — inline sequencing is what makes this level cheap. The angles, in order: Agent 1a (line-by-line, with the language-pitfall and wrapper-routing checks — in lightweight mode, diff-only: there is no tree for enclosing-function reads), Agent 1b (removed behavior — in lightweight mode it degrades exactly as in Step 3A: with no tree to grep, a missing re-establishment is a candidate at `Confidence: low`, not an assertion), Agent 1c (cross-file trace — same-repo only, skip in lightweight mode), Agent 3 (code quality including altitude), Agent 4 (performance), and a conventions pass over the Step 2 rules (quote the exact rule and the exact line, or report nothing). **Get the dimension briefs; do not work from the table.** The table in the agent-dimensions section says what each angle is _for_; the brief says how to walk it — the language-pitfall checklist, the producer-direction grep, the altitude test, the Exclusion Criteria. Build the ones you need and read them:
446
446
 
447
447
  ```bash
448
- qwen review agent-prompt --plan <the plan report from Step 1> --role 1a \
448
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> --role 1a \
449
449
  [--rules <the rules file from Step 2, if the project has any>]
450
450
  # ...same for 1b, 1c, 3, 4. Each writes its brief to disk and prints where.
451
451
  ```
@@ -479,12 +479,12 @@ A single verifier for every finding was cheaper, but on a large review it become
479
479
  Write this shard's findings to a file — each with its file, line, issue and failure scenario (the scenario is the claim under test); for any **Agent 0 (Issue Fidelity)** finding, include the **issue evidence it quoted** (issue body + comments), because a root-cause claim rests on linked-issue evidence the codebase does not contain and the verifier must check against it. Then:
480
480
 
481
481
  ```bash
482
- qwen review agent-prompt --plan <the plan report from Step 1> --role verify \
482
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> --role verify \
483
483
  --findings <the file of this shard's findings> \
484
484
  [--rules <the rules file from Step 2, if the project has any>]
485
485
  ```
486
486
 
487
- **Paste what it prints verbatim — the whole block, findings and all. Do not prepend, append, reword, or add a shard number.** `--findings` folds the list in for you precisely so there is no hand-assembly step left to drift: dogfooded, the step that used to have you prepend the list by hand is where the prompt got paraphrased — a summary inserted, the "nothing replaces the brief" line truncated — and Step 6's check caught it and capped the verdict. The command records the findings-free launch block, so every shard's record still matches (the findings are an add-only prefix). In worktree mode the verifier's `working_dir` is the PR worktree (same rule as Step 3), so its reads and re-checks resolve against the PR's code.
487
+ **`--findings` is required for this role — the command refuses without it**, because a bare block is a block you would assemble by hand, and hand-assembly is the one step this skill measured drifting. **Paste what it prints verbatim — the whole block, findings and all. Do not prepend, append, reword, or add a shard number.** Dogfooded twice: the step that used to have you prepend the list by hand is where the prompt got paraphrased — a summary inserted, the "nothing replaces the brief" line truncated — and Step 6's check caught it and capped the verdict. The command records the exact block it prints — findings included, keyed per findings digest — so a launch that drops or rewrites the findings matches no record. In worktree mode the verifier's `working_dir` is the PR worktree (same rule as Step 3), so its reads and re-checks resolve against the PR's code.
488
488
 
489
489
  The brief holds the method the orchestrator used to spell out here and that a paraphrase kept dropping: trace the failure scenario through the real code rather than voting on the finding's prose; engage the diff's own documented intent before calling a documented change a regression (the rule a run skipped when it auto-posted a false "leaks tokens" Critical); and the one-way, quote-the-contradiction bar on **rejecting a Critical**. Read the brief to know what a verdict means; do not re-derive it here.
490
490
 
@@ -528,17 +528,20 @@ Write **the cumulative list of every confirmed finding so far** (Steps 3-4 plus
528
528
 
529
529
  ```bash
530
530
  # Step 3A (small diff): one auditor per round, the whole diff.
531
- qwen review agent-prompt --plan <the plan report from Step 1> --role reverse-audit \
531
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> --role reverse-audit \
532
532
  --findings <the cumulative findings file> \
533
533
  [--rules <the rules file from Step 2>]
534
534
 
535
- # Step 3B (large diff): one auditor PER CHUNK per round, launched together.
536
- qwen review agent-prompt --plan <the plan report from Step 1> --role reverse-audit --chunk <id> \
535
+ # Step 3B (large diff): one auditor PER CHUNK per round ONE call builds them all.
536
+ "${QWEN_CODE_CLI:-qwen}" review agent-prompt --plan <the plan report from Step 1> --role reverse-audit --all-chunks \
537
537
  --findings <the cumulative findings file> \
538
- [--rules <the rules file from Step 2>]
538
+ [--rules <the rules file from Step 2>] \
539
+ > .qwen/tmp/qwen-review-{target}-ra-round<k>.txt
539
540
  ```
540
541
 
541
- **Paste what it prints verbatim the whole block. Do not prepend, append, reword, or add a round number** (track the round in your own notes, not in the prompt). `--findings` folds the cumulative list in so there is no hand-assembly step to drift the same paraphrase Step 6's check caught and capped a real run on, even though the auditor had opened its brief. The command records the findings-free launch block, so every round's record still matches. It also gives each auditor its diff reads the whole plan in 3A, one chunk's range in 3B (a Step 3B auditor handed the whole 5 800-line diff is the most context-starved agent in the pipeline, on exactly the PRs where the reverse audit matters most). In worktree mode its `working_dir` is the PR worktree.
542
+ Redirect and `read_file` it paged, exactly as with `--roster`: one labelled block per chunk, numbered `auditor k of N`, closed by an `end of round` line launch one agent per block, verbatim. **Never sample the builder's output** (`| head`, `| tail`, a truncated read): the text IS the deliverable, and a real run that sampled each build with `| head -5` never possessed the prompts, hand-reconstructed all ten launches, and had every one flagged rewritten a full repair round spent recovering from a shortcut that saved nothing. To rebuild a single auditor after a gap: `--chunk <id>` in place of `--all-chunks`.
543
+
544
+ **`--findings` is required for this role — the command refuses without it** (an early round with nothing confirmed yet passes an empty file; the command tells the auditor so). **Paste what it prints verbatim — the whole block. Do not prepend, append, reword, or add a round number** (track the round in your own notes, not in the prompt). A real run skipped `--findings`, hand-wrote the auditor's launch keeping only the brief pointer, and Step 6's check capped the verdict — the auditors had run and read their brief, but not one of them got the prompt the CLI built. The command records the exact block it prints — findings included, keyed per round's findings digest — so a launch that drops the confirmed list matches no record. It also gives each auditor its diff reads — the whole plan in 3A, one chunk's range in 3B (a Step 3B auditor handed the whole 5 800-line diff is the most context-starved agent in the pipeline, on exactly the PRs where the reverse audit matters most). In worktree mode its `working_dir` is the PR worktree.
542
545
 
543
546
  The brief holds what the auditor is for: hunt only the **gaps** no prior agent caught, report only Critical or Suggestion, apply the Exclusion Criteria, and end with a substantive receipt (`No issues found — <what it re-examined>`) — a bare "No issues found." fails the substantive-return check below and triggers the one relaunch.
544
547
 
@@ -623,7 +626,7 @@ Two failure modes this closes, both observed in this repo's own dogfood: reporti
623
626
  **You do not decide the verdict, and you do not write it. Ask for it:**
624
627
 
625
628
  ```bash
626
- qwen review compose-review --input .qwen/tmp/qwen-review-{target}-compose.json \
629
+ "${QWEN_CODE_CLI:-qwen}" review compose-review --input .qwen/tmp/qwen-review-{target}-compose.json \
627
630
  --out .qwen/tmp/qwen-review-{target}-composed.json
628
631
  ```
629
632
 
@@ -640,6 +643,10 @@ The rules it applies — so you can read the line it gives you, not so you can a
640
643
 
641
644
  **Why this is a command and not a paragraph.** It was a paragraph, and the paragraph was skipped. Dogfooded, a run read the coverage check's refusal, concluded that "the agents clearly did their job", never called `compose-review` at all, and printed **`Review complete — Approve`** — a verdict it had composed itself, from prose, on a review whose gate had just refused. There is now one place a verdict exists. Skipping the command does not get you a different one; it gets you none.
642
645
 
646
+ **And you may not overrule the line it gives you.** The failure came back in a subtler shape, on a later dogfood: the run _did_ call `compose-review`, _did_ read `Verdict: Comment — an Approve was NOT available: a dimension nobody reviewed`, and then wrote — in its next thought — _"the compose-review flagged reverse audit as unreviewed (transcript visibility issue — the reverse audit did run substantively)"_, and reported **Approve** to the user and into the saved report. It was wrong: the auditors had run, but the orchestrator had hand-written their launch prompts, so they never got the prompt the CLI built — which is precisely what the gap said, and precisely the run's own doing. **A cap you can explain is still a cap.** If you believe a gap is wrong, the answer is to make the step verifiable — relaunch it with the prompt `agent-prompt` printed, verbatim — and run `compose-review` again. It is never to keep the verdict you preferred and narrate the gap away. The verdict you print, and the verdict in the report you save, are the one this command computed; when they differ from it, the review is lying to the person who trusted it.
647
+
648
+ **The `FIX:` lines on stderr are that repair, spelled out.** For every repairable gap it capped on, `compose-review` prints one `FIX:` line naming the command — with this run's plan path already substituted. The parts that vary per agent stay as selectors: take `<id>`, `<r>` and `<path>` from the labels in the same report (never paste a literal `<...>` into a shell — it parses as a redirection), and add the `--rules` file whenever Step 2 loaded one. Execute them — **one repair round, then `compose-review` again**. If the same gap survives the round, stop: the cap stands, post with it, and disclose the gap. Do not loop repairs hoping for a different verdict, and do not skip the round and post a capped verdict the FIX lines could have lifted — both are the same failure, choosing the verdict over the evidence, in opposite directions.
649
+
643
650
  Append a follow-up tip after the verdict (high effort only — a quick pass emits no verdict and uses Step 3C's tip instead; its "post comments" follow-up is declined per Step 3C). Choose based on remaining state:
644
651
 
645
652
  - **Local review with unfixed findings**: "Tip: type `fix these issues` to apply fixes interactively."
@@ -656,7 +663,7 @@ If the user responds with "post comments" (or similar intent like "yes post them
656
663
  **You do not post. `qwen review submit` posts, and it refuses when the run is not authorised.** Do NOT call `gh api repos/.../pulls/<n>/reviews` yourself — not to submit the review, not to "test" an anchor, not at all. That command is the one write in this skill, and it now lives behind a check:
657
664
 
658
665
  ```bash
659
- qwen review submit \
666
+ "${QWEN_CODE_CLI:-qwen}" review submit \
660
667
  --pr <pr_number> --repo <owner>/<repo> \
661
668
  --review .qwen/tmp/qwen-review-{target}-review.json \
662
669
  [--user-authorized] [--host <host>]
@@ -687,7 +694,7 @@ Also skip this step (independently of the gate above) if the review target is no
687
694
  # "anchor": " if (amt < 0) return;\n charge(amt);", "line": 42}]
688
695
  # `line` is OPTIONAL — omit it when the finder gave no number; it only breaks ties.
689
696
 
690
- qwen review resolve-anchors \
697
+ "${QWEN_CODE_CLI:-qwen}" review resolve-anchors \
691
698
  --diff <diffPathAbsolute> \
692
699
  --input .qwen/tmp/qwen-review-{target}-anchors.json \
693
700
  --out .qwen/tmp/qwen-review-{target}-anchors-resolved.json
@@ -719,7 +726,7 @@ echo '[{"path":"src/foo.ts","line":42}, ...]' > .qwen/tmp/qwen-review-{target}-f
719
726
  Then run:
720
727
 
721
728
  ```bash
722
- qwen review presubmit \
729
+ "${QWEN_CODE_CLI:-qwen}" review presubmit \
723
730
  {pr_number} {commit_sha} {owner}/{repo} \
724
731
  .qwen/tmp/qwen-review-{target}-presubmit.json \
725
732
  [--new-findings .qwen/tmp/qwen-review-{target}-findings.json]
@@ -838,7 +845,7 @@ The verdict is a computed fact and this is the second place it must not be re-de
838
845
  Then submit it — through `submit`, which checks the authorisation and the payload before anything reaches GitHub:
839
846
 
840
847
  ```bash
841
- qwen review submit \
848
+ "${QWEN_CODE_CLI:-qwen}" review submit \
842
849
  --pr {pr_number} --repo {owner}/{repo} \
843
850
  --review .qwen/tmp/qwen-review-{target}-review.json \
844
851
  [--host <host>] # required for GitHub Enterprise; omit on github.com
@@ -875,6 +882,10 @@ Report content should include:
875
882
  - All findings with verification status
876
883
  - Verdict (high effort only — a quick pass claims none)
877
884
 
885
+ **The report's verdict is not yours to type.** `compose-review` printed the exact `Verdict:` line in Step 6 and persisted the same line as `verdictLine` inside `.qwen/tmp/qwen-review-{target}-composed.json` — copy either, verbatim. Do not reconstruct it from `event` + `cappedBy`: a presubmit downgrade also depends on fields that pair does not carry, and a rebuilt line can differ from the computed one. (And not `$(jq …)`: a `jq` binary is not guaranteed on the host, and a substitution that fails leaves the archived verdict blank or literal — worse than absent, because it looks written.)
886
+
887
+ A run that had read `Verdict: Comment — an Approve was NOT available` wrote `**Verdict:** Approve` into its saved report minutes later. The terminal is prose and the archive is forever; this line is the one place the archive can be made to tell the truth for free. If the composed event is not the one you expected, fix the run — not the report.
888
+
878
889
  ### Incremental review cache
879
890
 
880
891
  If reviewing a PR **at high effort**, update the review cache for incremental review support. Low/medium quick passes must NOT write it — a cache hit would make a later high-effort review of the same SHA report "No new changes since last review", silently converting a quick pass into a full-review verdict.
@@ -901,7 +912,7 @@ If reviewing a PR **at high effort**, update the review cache for incremental re
901
912
  Run the bundled cleanup subcommand:
902
913
 
903
914
  ```bash
904
- qwen review cleanup <target>
915
+ "${QWEN_CODE_CLI:-qwen}" review cleanup <target>
905
916
  ```
906
917
 
907
918
  `<target>` is the same suffix used throughout (`pr-<n>`, `local`, or filename). The command removes the worktree at `.qwen/tmp/review-pr-<n>` (PR targets only), deletes the local branch ref `qwen-review/pr-<n>`, and clears any `.qwen/tmp/qwen-review-<target>-*` side files (review JSON, PR context, presubmit / findings reports). It is idempotent — missing files are silent OK. Also remove `.qwen/tmp/qwen-review-parse-args.json` and the session args directory `.qwen/tmp/s-<session>/` (the path from the `<skill-args>` note) — both are written before the target suffix is known, so the pattern above misses them. (Leave the args file in place if you had to fall back to writing it yourself and the run failed: it is the only record of what the review was actually asked to do.)
@@ -39,7 +39,7 @@ Use `git diff HEAD` whenever staged changes exist. Otherwise use `git diff`.
39
39
 
40
40
  ## Step 2: Launch three review passes in parallel
41
41
 
42
- Use the `agent` tool and launch all review passes in a single response so they run concurrently. **Set `subagent_type: "general-purpose"` on every call — each pass must be an awaitable subagent whose findings return to you inline. Do NOT fork them: do not omit `subagent_type`, and never set `subagent_type: "fork"`. A fork runs fire-and-forget and never returns its findings, so there would be nothing to aggregate in Step 3.** Each pass must receive the same review scope and diff command. These passes are read-only: each one inspects and reports findings only and must not modify files — all edits happen later in Step 4.
42
+ Use the `agent` tool and launch all review passes in a single response so they run concurrently. **Set `subagent_type: "general-purpose"` and `run_in_background: false` on every call — each pass must return its findings inline. Do NOT fork them: never set `subagent_type: "fork"`. A fork runs fire-and-forget and never returns its findings, so there would be nothing to aggregate in Step 3.** Each pass must receive the same review scope and diff command. These passes are read-only: each one inspects and reports findings only and must not modify files — all edits happen later in Step 4.
43
43
 
44
44
  Keep each review prompt short and focused. Do not paste the full diff into the prompt. Tell each pass to read the diff itself and inspect only files relevant to its findings.
45
45
 
@@ -4,59 +4,58 @@ import {
4
4
  MINIMUM_MAX_HEIGHT,
5
5
  MaxSizedBox,
6
6
  setMaxSizedBoxDebugging
7
- } from "./chunk-DOPUYNXO.js";
8
- import "./chunk-OWT2CAEQ.js";
7
+ } from "./chunk-NUHSLBJZ.js";
8
+ import "./chunk-GEHSF7MS.js";
9
+ import "./chunk-XAAEDML2.js";
9
10
  import "./chunk-NHDKSOEY.js";
10
- import "./chunk-HTHUX2T5.js";
11
- import "./chunk-Q6TUALBE.js";
12
- import "./chunk-SUARMD4Q.js";
11
+ import "./chunk-J6NT5YTN.js";
13
12
  import "./chunk-QHTIBUWB.js";
13
+ import "./chunk-HTHUX2T5.js";
14
14
  import "./chunk-RKUWKYED.js";
15
- import "./chunk-NJOFRXTM.js";
15
+ import "./chunk-6TDA4EVC.js";
16
+ import "./chunk-5M6IDOMF.js";
16
17
  import "./chunk-T4TZQJ7W.js";
17
18
  import "./chunk-H6XPXXMH.js";
18
- import "./chunk-5M6IDOMF.js";
19
- import "./chunk-A2HWMJVO.js";
20
- import "./chunk-RCEEXIOO.js";
21
- import "./chunk-KKRTYONM.js";
22
- import "./chunk-TV6K2FB4.js";
19
+ import "./chunk-LKR7QQ63.js";
20
+ import "./chunk-4XCVGEEX.js";
21
+ import "./chunk-XSPFQQRE.js";
22
+ import "./chunk-4RPARQ5D.js";
23
23
  import "./chunk-E2UVIFI2.js";
24
24
  import "./chunk-XU457J4V.js";
25
25
  import "./chunk-VDDGDZMA.js";
26
- import "./chunk-SPJQO2CE.js";
26
+ import "./chunk-J2MKYJKZ.js";
27
27
  import "./chunk-SZRN75WQ.js";
28
28
  import "./chunk-HTO4JFDZ.js";
29
29
  import "./chunk-CPBF7KYF.js";
30
- import "./chunk-F333XEAU.js";
30
+ import "./chunk-UOA2IHRI.js";
31
31
  import "./chunk-6AM5D4ME.js";
32
- import "./chunk-2Z5UX4KI.js";
33
- import "./chunk-ARKANCNX.js";
34
- import "./chunk-L5U3ELZX.js";
35
- import "./chunk-TYLOFD2U.js";
36
- import "./chunk-MQOVXZAF.js";
32
+ import "./chunk-OSSDHJDU.js";
33
+ import "./chunk-SGPFJMRP.js";
34
+ import "./chunk-335ECZTA.js";
35
+ import "./chunk-JCJPZMJV.js";
36
+ import "./chunk-QGONRHUS.js";
37
+ import "./chunk-7KS72E2N.js";
38
+ import "./chunk-JESCGQM3.js";
39
+ import "./chunk-YN2I5I42.js";
37
40
  import "./chunk-4WKAA4KS.js";
38
41
  import "./chunk-CR3C7WXL.js";
39
- import "./chunk-RTV5TUYB.js";
40
42
  import "./chunk-VGC4I5JJ.js";
41
- import "./chunk-FBU7WRZI.js";
42
- import "./chunk-Y66VOBRP.js";
43
- import "./chunk-WTNZ6DXB.js";
44
- import "./chunk-JGUT3LWZ.js";
45
- import "./chunk-OKAIGAYW.js";
46
- import "./chunk-ZPAHLFZU.js";
47
- import "./chunk-JESCGQM3.js";
48
- import "./chunk-WIEO4CWB.js";
43
+ import "./chunk-LPHGXXZX.js";
44
+ import "./chunk-4CA4WUMS.js";
45
+ import "./chunk-VAJS2E2D.js";
46
+ import "./chunk-WEPXQKGP.js";
47
+ import "./chunk-ANRANWVE.js";
49
48
  import "./chunk-XVNQMZ2I.js";
50
49
  import "./chunk-FEOZBUMT.js";
51
- import "./chunk-VRR65QYW.js";
50
+ import "./chunk-DJ2GSRLV.js";
51
+ import "./chunk-4CHDYDG3.js";
52
+ import "./chunk-V4PCIS25.js";
52
53
  import "./chunk-A4UCTEB5.js";
53
54
  import "./chunk-XWRJCPHC.js";
54
- import "./chunk-4LD5APFL.js";
55
+ import "./chunk-TYQMGACW.js";
55
56
  import "./chunk-TYAMGABM.js";
56
57
  import "./chunk-FCMNKVXT.js";
57
- import "./chunk-DJ2GSRLV.js";
58
- import "./chunk-LQIDP6K5.js";
59
- import "./chunk-7NFB7LBQ.js";
58
+ import "./chunk-UE5TZ55T.js";
60
59
  import "./chunk-75DOP5OR.js";
61
60
  import "./chunk-DMTGGOSA.js";
62
61
  import "./chunk-YQ3U5MUC.js";
@@ -3,98 +3,97 @@
3
3
  import {
4
4
  ConfigContext,
5
5
  SessionPicker
6
- } from "./chunk-5Z452MMD.js";
7
- import "./chunk-BYB3GF2T.js";
6
+ } from "./chunk-LODZMRXC.js";
7
+ import "./chunk-JCYMQU5F.js";
8
8
  import {
9
9
  SettingsContext
10
- } from "./chunk-FYQ22K62.js";
10
+ } from "./chunk-CHVH4DVN.js";
11
11
  import {
12
12
  KeypressProvider
13
- } from "./chunk-NVTQZXR7.js";
13
+ } from "./chunk-6QGZVKOO.js";
14
14
  import "./chunk-4WGODMVR.js";
15
15
  import "./chunk-KW7NOTN6.js";
16
- import "./chunk-DOPUYNXO.js";
16
+ import "./chunk-NUHSLBJZ.js";
17
17
  import {
18
18
  Box_default,
19
19
  render_default,
20
20
  require_jsx_runtime,
21
21
  use_app_default
22
- } from "./chunk-OWT2CAEQ.js";
22
+ } from "./chunk-GEHSF7MS.js";
23
+ import "./chunk-XAAEDML2.js";
23
24
  import "./chunk-NHDKSOEY.js";
24
- import "./chunk-LS56TX3M.js";
25
- import "./chunk-7X7TEQNX.js";
25
+ import "./chunk-CMHJEUVB.js";
26
+ import "./chunk-7LMAKIWE.js";
27
+ import "./chunk-J6NT5YTN.js";
28
+ import "./chunk-QHTIBUWB.js";
29
+ import "./chunk-76BFY7AF.js";
26
30
  import {
27
31
  require_react
28
32
  } from "./chunk-HTHUX2T5.js";
29
- import "./chunk-Q6TUALBE.js";
30
- import "./chunk-CF5VJRGC.js";
31
- import "./chunk-SUARMD4Q.js";
32
- import "./chunk-QHTIBUWB.js";
33
33
  import "./chunk-E5Z2AVNV.js";
34
34
  import "./chunk-57OAHC2Y.js";
35
- import "./chunk-SQ5BK3GO.js";
36
- import "./chunk-GNBBAQ6J.js";
35
+ import "./chunk-DYUPBU7H.js";
36
+ import "./chunk-ILQ42UG6.js";
37
37
  import "./chunk-RKUWKYED.js";
38
- import "./chunk-4AGTGMCQ.js";
39
- import "./chunk-JWICTOXS.js";
40
38
  import "./chunk-GOXKNSDZ.js";
41
39
  import "./chunk-IDS7MSUP.js";
40
+ import "./chunk-3PE7OY2G.js";
41
+ import "./chunk-NGTQA57Y.js";
42
42
  import "./chunk-QRUIS3DN.js";
43
- import "./chunk-2OG646IN.js";
43
+ import "./chunk-XFJU7SVP.js";
44
44
  import "./chunk-ALGGS7UH.js";
45
45
  import "./chunk-MR3PXB6E.js";
46
46
  import {
47
47
  writeStdoutLine
48
- } from "./chunk-YUZI3WAC.js";
48
+ } from "./chunk-OWAK7LMW.js";
49
49
  import {
50
50
  SessionService,
51
51
  getGitBranch
52
- } from "./chunk-NJOFRXTM.js";
52
+ } from "./chunk-6TDA4EVC.js";
53
+ import "./chunk-5M6IDOMF.js";
53
54
  import "./chunk-T4TZQJ7W.js";
54
55
  import "./chunk-H6XPXXMH.js";
55
- import "./chunk-5M6IDOMF.js";
56
- import "./chunk-A2HWMJVO.js";
57
- import "./chunk-RCEEXIOO.js";
58
- import "./chunk-KKRTYONM.js";
59
- import "./chunk-TV6K2FB4.js";
56
+ import "./chunk-LKR7QQ63.js";
57
+ import "./chunk-4XCVGEEX.js";
58
+ import "./chunk-XSPFQQRE.js";
59
+ import "./chunk-4RPARQ5D.js";
60
60
  import "./chunk-E2UVIFI2.js";
61
61
  import "./chunk-XU457J4V.js";
62
62
  import "./chunk-VDDGDZMA.js";
63
- import "./chunk-SPJQO2CE.js";
63
+ import "./chunk-J2MKYJKZ.js";
64
64
  import "./chunk-SZRN75WQ.js";
65
65
  import "./chunk-HTO4JFDZ.js";
66
66
  import "./chunk-CPBF7KYF.js";
67
- import "./chunk-F333XEAU.js";
67
+ import "./chunk-UOA2IHRI.js";
68
68
  import "./chunk-6AM5D4ME.js";
69
- import "./chunk-2Z5UX4KI.js";
70
- import "./chunk-ARKANCNX.js";
71
- import "./chunk-L5U3ELZX.js";
72
- import "./chunk-TYLOFD2U.js";
73
- import "./chunk-MQOVXZAF.js";
69
+ import "./chunk-OSSDHJDU.js";
70
+ import "./chunk-SGPFJMRP.js";
71
+ import "./chunk-335ECZTA.js";
72
+ import "./chunk-JCJPZMJV.js";
73
+ import "./chunk-QGONRHUS.js";
74
+ import "./chunk-7KS72E2N.js";
75
+ import "./chunk-JESCGQM3.js";
76
+ import "./chunk-YN2I5I42.js";
74
77
  import "./chunk-4WKAA4KS.js";
75
78
  import "./chunk-CR3C7WXL.js";
76
- import "./chunk-RTV5TUYB.js";
77
79
  import "./chunk-VGC4I5JJ.js";
78
- import "./chunk-FBU7WRZI.js";
79
- import "./chunk-Y66VOBRP.js";
80
- import "./chunk-WTNZ6DXB.js";
81
- import "./chunk-JGUT3LWZ.js";
82
- import "./chunk-OKAIGAYW.js";
83
- import "./chunk-ZPAHLFZU.js";
84
- import "./chunk-JESCGQM3.js";
85
- import "./chunk-WIEO4CWB.js";
80
+ import "./chunk-LPHGXXZX.js";
81
+ import "./chunk-4CA4WUMS.js";
82
+ import "./chunk-VAJS2E2D.js";
83
+ import "./chunk-WEPXQKGP.js";
84
+ import "./chunk-ANRANWVE.js";
86
85
  import "./chunk-XVNQMZ2I.js";
87
86
  import "./chunk-FEOZBUMT.js";
88
- import "./chunk-VRR65QYW.js";
87
+ import "./chunk-DJ2GSRLV.js";
88
+ import "./chunk-4CHDYDG3.js";
89
+ import "./chunk-V4PCIS25.js";
89
90
  import "./chunk-A4UCTEB5.js";
90
91
  import "./chunk-XWRJCPHC.js";
91
- import "./chunk-4LD5APFL.js";
92
+ import "./chunk-TYQMGACW.js";
92
93
  import "./chunk-TYAMGABM.js";
93
94
  import "./chunk-FCMNKVXT.js";
94
- import "./chunk-DJ2GSRLV.js";
95
- import "./chunk-LQIDP6K5.js";
96
- import "./chunk-7NFB7LBQ.js";
97
- import "./chunk-CAHY5ABC.js";
95
+ import "./chunk-UE5TZ55T.js";
96
+ import "./chunk-DULSE2SH.js";
98
97
  import "./chunk-75DOP5OR.js";
99
98
  import "./chunk-DMTGGOSA.js";
100
99
  import "./chunk-YQ3U5MUC.js";