@qwen-code/qwen-code 0.21.4 → 0.21.5

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 (242) hide show
  1. package/bundled/qc-helper/docs/configuration/model-providers.md +8 -7
  2. package/bundled/qc-helper/docs/configuration/settings.md +1 -1
  3. package/bundled/qc-helper/docs/features/code-review.md +2 -0
  4. package/bundled/qc-helper/docs/features/mcp.md +11 -3
  5. package/bundled/review/SKILL.md +32 -1
  6. package/chunks/{MaxSizedBox-5XDFQHTQ.js → MaxSizedBox-2MWU5JYB.js} +16 -16
  7. package/chunks/{StandaloneSessionPicker-DLADA54K.js → StandaloneSessionPicker-B6MI5NTB.js} +30 -30
  8. package/chunks/{acpAgent-MVEFZSBS.js → acpAgent-MRPYN6FH.js} +674 -290
  9. package/chunks/{agent-RB6LCRZX.js → agent-NAOXNW4I.js} +16 -16
  10. package/chunks/{agent-headless-272ZACJV.js → agent-headless-L4PPVFKW.js} +16 -16
  11. package/chunks/{artifact-tool-TBOYEKTY.js → artifact-tool-RROCCJDA.js} +1 -1
  12. package/chunks/{askUserQuestion-23Y5WZFJ.js → askUserQuestion-2EPPBPUZ.js} +1 -1
  13. package/chunks/{bridge-GXUXFSHK.js → bridge-LHXGYNCO.js} +17 -17
  14. package/chunks/{channel-settings-store-5UA2SABE.js → channel-settings-store-QB54TLYE.js} +21 -21
  15. package/chunks/{chunk-PWCQRLM5.js → chunk-2AGOQ7QO.js} +1 -1
  16. package/chunks/{chunk-XSOAW7FC.js → chunk-2JBETW4S.js} +5 -5
  17. package/chunks/{chunk-O4IWFYUW.js → chunk-3GOCVBYR.js} +4 -4
  18. package/chunks/{chunk-3PHUGFPH.js → chunk-3H5RFLTS.js} +1 -1
  19. package/chunks/{chunk-OOPFAIWP.js → chunk-3P4GP4S2.js} +1 -1
  20. package/chunks/{chunk-YXEVDA66.js → chunk-4LLUH3A7.js} +19 -18
  21. package/chunks/{chunk-ZRQY5BBS.js → chunk-4NEBUDWS.js} +10 -10
  22. package/chunks/{chunk-C5YFS6VR.js → chunk-4NNR24EP.js} +4 -4
  23. package/chunks/{chunk-RL2NPV5E.js → chunk-4O6HLCOF.js} +1 -1
  24. package/chunks/{chunk-AFJSRJTO.js → chunk-5HWAJ4BK.js} +1 -1
  25. package/chunks/{chunk-O2ZYHG33.js → chunk-5L6CQ4ZU.js} +131 -67
  26. package/chunks/{chunk-AWTLFUVN.js → chunk-5XNO4AW7.js} +13 -13
  27. package/chunks/{chunk-LLMGP5IC.js → chunk-6WBWIPBF.js} +2 -2
  28. package/chunks/{chunk-4CTV3FZH.js → chunk-7M2RLFNX.js} +23 -19
  29. package/chunks/{chunk-X6QNZOTC.js → chunk-7MFQLOHZ.js} +1 -1
  30. package/chunks/{chunk-DZPOYHBT.js → chunk-7W5KOBYU.js} +1 -1
  31. package/chunks/{chunk-SBBHZ3YT.js → chunk-AEWOKOJY.js} +1 -1
  32. package/chunks/{chunk-2CCUHZP5.js → chunk-B2RBYP7Z.js} +2 -2
  33. package/chunks/{chunk-URVJ4AZC.js → chunk-B3EBIZUY.js} +1 -1
  34. package/chunks/{chunk-GDREW3U5.js → chunk-BWLUCN35.js} +1 -1
  35. package/chunks/{chunk-DJA7YBLJ.js → chunk-C6ARWPCG.js} +2 -2
  36. package/chunks/{chunk-RNKGMZEW.js → chunk-CAX76R46.js} +1 -1
  37. package/chunks/{chunk-CFDR3GNL.js → chunk-D7D7RXIJ.js} +11 -0
  38. package/chunks/{chunk-PCVMRBLN.js → chunk-D7QAZ5DF.js} +1 -1
  39. package/chunks/{chunk-THLV7YGY.js → chunk-EXHQZBVJ.js} +2 -2
  40. package/chunks/{chunk-DOCBJIBL.js → chunk-FEUXV3DC.js} +1 -1
  41. package/chunks/{chunk-QZQ72YF6.js → chunk-G2UXFO2B.js} +1 -1
  42. package/chunks/{chunk-QXTGHZCX.js → chunk-GBY3ODW7.js} +3 -3
  43. package/chunks/{chunk-LPLMUGIM.js → chunk-GEP54CHX.js} +5 -5
  44. package/chunks/{chunk-2T3RYG4L.js → chunk-GP4IMBX5.js} +420 -94
  45. package/chunks/{chunk-XPAY4EMH.js → chunk-IK3RYLAD.js} +3 -3
  46. package/chunks/{chunk-I32URQI7.js → chunk-IWGMDSC3.js} +5 -5
  47. package/chunks/{chunk-WDLQGFWP.js → chunk-IWYXZAGT.js} +27 -27
  48. package/chunks/{chunk-HBCKZF2A.js → chunk-IZ2CMEYO.js} +1 -1
  49. package/chunks/{chunk-PQEIKQXN.js → chunk-J7I2BZHS.js} +4 -3
  50. package/chunks/{chunk-PQ5JFCNL.js → chunk-JDNWIXHJ.js} +3 -3
  51. package/chunks/{chunk-KHSJSMFS.js → chunk-K2ETEWG6.js} +1 -1
  52. package/chunks/{chunk-FV4TUUDE.js → chunk-K64OI7S7.js} +1 -1
  53. package/chunks/{chunk-C6FU76AA.js → chunk-K6VEL5KP.js} +1 -1
  54. package/chunks/{chunk-B3EBXISV.js → chunk-KH2BIJ4H.js} +3 -3
  55. package/chunks/{chunk-G7XXKQYS.js → chunk-LKRMNRSN.js} +27 -1
  56. package/chunks/{chunk-G6KI6B5L.js → chunk-LMNM37OE.js} +1 -1
  57. package/chunks/{chunk-SV5X2EUV.js → chunk-LSYVASZS.js} +1 -1
  58. package/chunks/{chunk-4PZ7SPD5.js → chunk-LYPXNRBX.js} +1 -1
  59. package/chunks/{chunk-HFVW54NL.js → chunk-MBEMTXQT.js} +9 -2
  60. package/chunks/{chunk-RPYYTL7E.js → chunk-MGSSJT27.js} +2 -2
  61. package/chunks/{chunk-M2L4TMH3.js → chunk-N3RERU5N.js} +3 -3
  62. package/chunks/{chunk-HI4YGRJD.js → chunk-NLQIEY6W.js} +3 -3
  63. package/chunks/{chunk-UATJZOAJ.js → chunk-OGAARVN7.js} +3 -3
  64. package/chunks/{chunk-6KQUOXT5.js → chunk-OIGB253L.js} +6 -6
  65. package/chunks/{chunk-EIAPOG76.js → chunk-P3SLTSNY.js} +3 -3
  66. package/chunks/{chunk-BC4LTKEG.js → chunk-Q2V4AOQL.js} +1 -1
  67. package/chunks/{chunk-KB6VSG2U.js → chunk-RM3F46UT.js} +6 -6
  68. package/chunks/{chunk-6ME3PVMM.js → chunk-SJMCYCUQ.js} +5 -5
  69. package/chunks/{chunk-2JN5V3I7.js → chunk-SQTA6PAY.js} +1 -1
  70. package/chunks/{chunk-2ON2O4MD.js → chunk-SVIEVA3L.js} +3 -3
  71. package/chunks/{chunk-FPPVCCAH.js → chunk-TCOJPG2P.js} +1 -1
  72. package/chunks/{chunk-BOWKLLWA.js → chunk-TJ56V3AR.js} +2 -2
  73. package/chunks/{chunk-A7PONO5G.js → chunk-URJHXOSO.js} +2 -2
  74. package/chunks/{chunk-EJXATV5R.js → chunk-VJPF6GF2.js} +2 -2
  75. package/chunks/{chunk-5XGI4IPK.js → chunk-VOA2UPZM.js} +3 -3
  76. package/chunks/{chunk-XGA6XHH3.js → chunk-WTM5QONI.js} +3 -3
  77. package/chunks/{chunk-IMGNGOGC.js → chunk-WU5NBSLD.js} +3 -3
  78. package/chunks/{chunk-7UXI6P72.js → chunk-WVAESIM6.js} +2 -2
  79. package/chunks/{chunk-TXZDRD36.js → chunk-XD2PNH3K.js} +5 -5
  80. package/chunks/{chunk-E2SYUEIA.js → chunk-YLL3SC5S.js} +743 -312
  81. package/chunks/{chunk-M6RNMBUO.js → chunk-YMUZQ3MQ.js} +4 -4
  82. package/chunks/{chunk-DHNFB7NC.js → chunk-YO4JI7B4.js} +5 -5
  83. package/chunks/{chunk-VA5NLVPT.js → chunk-Z7JILXGX.js} +1 -1
  84. package/chunks/{chunk-P5UJMCVS.js → chunk-ZLGPHA34.js} +4 -4
  85. package/chunks/{chunk-JDJ7SC4E.js → chunk-ZPGMDT4S.js} +237 -106
  86. package/chunks/{chunk-UEJESCS7.js → chunk-ZPPP6VCL.js} +1 -1
  87. package/chunks/{computer-use-MDOMIVTL.js → computer-use-XDOGP2KA.js} +16 -16
  88. package/chunks/{contextCommand-FCK3CB37.js → contextCommand-N3LQDCYJ.js} +18 -18
  89. package/chunks/{core-runtime-UHRHHU2O.js → core-runtime-STAFP45W.js} +16 -16
  90. package/chunks/{create-sub-session-MIXUVLWW.js → create-sub-session-2B3JENWD.js} +16 -16
  91. package/chunks/{create-sub-session-J32WC64U.js → create-sub-session-6EWLAZD5.js} +1 -1
  92. package/chunks/{cron-create-HMFSHIAR.js → cron-create-CCRIULJE.js} +1 -1
  93. package/chunks/{cron-delete-ZJFHOX57.js → cron-delete-FCFW6BGP.js} +1 -1
  94. package/chunks/{cron-list-ZEX2NBMN.js → cron-list-QDBVCHRF.js} +1 -1
  95. package/chunks/{daemon-status-provider-6LC7LUNR.js → daemon-status-provider-PPAH3ATF.js} +21 -21
  96. package/chunks/{daemon-trust-policy-Y36HGRAM.js → daemon-trust-policy-X6XL3MB4.js} +21 -21
  97. package/chunks/{daemon-trust-policy-monitor-ROTBBDOH.js → daemon-trust-policy-monitor-M5LBL2HD.js} +21 -21
  98. package/chunks/{deferred-core-runtime-ZQ4JIAJD.js → deferred-core-runtime-O54YPTBU.js} +16 -16
  99. package/chunks/{display-image-2WOG27DY.js → display-image-GUJA352B.js} +2 -2
  100. package/chunks/{earlyInputCapture-GPRUNXTP.js → earlyInputCapture-CBIT2RGT.js} +16 -16
  101. package/chunks/{edit-YK3UP6D2.js → edit-KW2TOC6A.js} +17 -17
  102. package/chunks/{enter-worktree-QMVQW7UG.js → enter-worktree-YL34NEU5.js} +16 -16
  103. package/chunks/{enterPlanMode-TZAYQ5MP.js → enterPlanMode-JFJTDASQ.js} +16 -16
  104. package/chunks/{environment-3UQURCZG.js → environment-IATU5GXG.js} +18 -18
  105. package/chunks/{errors-VBIMTNNI.js → errors-SAVRDE7Q.js} +18 -18
  106. package/chunks/{exit-worktree-4EC7LBBC.js → exit-worktree-5M43QPBB.js} +16 -16
  107. package/chunks/{exitPlanMode-K5Y3REU2.js → exitPlanMode-W4EICZ4N.js} +16 -16
  108. package/chunks/{fast-path-KS6IE7YR.js → fast-path-YQJPIKMP.js} +2 -2
  109. package/chunks/{gemini-LTUCUOJH.js → gemini-FUF5SSPR.js} +47 -47
  110. package/chunks/{geminiContentGenerator-M3HJTHKR.js → geminiContentGenerator-LLLZBOUG.js} +1 -1
  111. package/chunks/{glob-SKUYGTF2.js → glob-LJFFMN4D.js} +16 -16
  112. package/chunks/{goal-tools-SPQ5M6D3.js → goal-tools-3AZKX5WQ.js} +2 -18
  113. package/chunks/{grep-SQ7RD7SV.js → grep-Q64EAM73.js} +16 -16
  114. package/chunks/{handleAutoUpdate-OK7OX23A.js → handleAutoUpdate-QBMPRTSQ.js} +20 -20
  115. package/chunks/{i18n-P77YBKY4.js → i18n-LDUW5DMN.js} +17 -17
  116. package/chunks/{image-gen-2ZWPS42A.js → image-gen-G7RLG3KR.js} +2 -2
  117. package/chunks/{initializer-PIOYXVW7.js → initializer-74A7DMMD.js} +21 -21
  118. package/chunks/{installationInfo-IWMM6DPV.js → installationInfo-OFDYLDFD.js} +17 -17
  119. package/chunks/{list-3DCR4TRI.js → list-JA2EWRHJ.js} +24 -24
  120. package/chunks/{list-agents-TWEGRJWO.js → list-agents-GC4BRET7.js} +1 -1
  121. package/chunks/{loadedSettingsAdapter-EJC6CU5N.js → loadedSettingsAdapter-2GNJOQ3L.js} +21 -21
  122. package/chunks/{loggingContentGenerator-2JEFU25T.js → loggingContentGenerator-B6B5EGB3.js} +8 -8
  123. package/chunks/{loop-wakeup-6LLEOQYV.js → loop-wakeup-SQQSBMEY.js} +2 -2
  124. package/chunks/{ls-H5WX22VK.js → ls-63CC3NNX.js} +1 -1
  125. package/chunks/{lsp-G6FXYEIS.js → lsp-P6NVJVNT.js} +1 -1
  126. package/chunks/{managed-npm-update-EGVQPSBR.js → managed-npm-update-4YZHLUER.js} +17 -17
  127. package/chunks/{mcp-KFFH2MBV.js → mcp-LLK5YJVH.js} +21 -21
  128. package/chunks/{monitor-6Y3NDMTI.js → monitor-NYJPAWVP.js} +16 -16
  129. package/chunks/{nonInteractiveCli-426IQDPE.js → nonInteractiveCli-HZBBBDJD.js} +45 -45
  130. package/chunks/{notebook-edit-373IQQLE.js → notebook-edit-LLM6UXFX.js} +17 -17
  131. package/chunks/{openaiContentGenerator-PGFSOMIQ.js → openaiContentGenerator-2AEXDN55.js} +8 -8
  132. package/chunks/{pidfile-Y4INDMHG.js → pidfile-3JUWX7G2.js} +16 -16
  133. package/chunks/{processUtils-6BCPCJZW.js → processUtils-JLLRVZHT.js} +2 -2
  134. package/chunks/{qwenContentGenerator-QC3KSHSX.js → qwenContentGenerator-2FESCF27.js} +17 -17
  135. package/chunks/{qwenOAuth2-IOAXKJ3L.js → qwenOAuth2-2KKPYA5J.js} +1 -1
  136. package/chunks/{read-file-2T54FYZV.js → read-file-5GVXLY74.js} +6 -6
  137. package/chunks/{read-mcp-resource-DRZSI3HE.js → read-mcp-resource-RTSSEER5.js} +1 -1
  138. package/chunks/{record-artifact-IPIRWMFY.js → record-artifact-L3BAHQFN.js} +2 -2
  139. package/chunks/{resumeHistoryUtils-O62RDCZ3.js → resumeHistoryUtils-Z4OFBXPM.js} +19 -19
  140. package/chunks/{ripGrep-3H72KY7S.js → ripGrep-TKOJTIAB.js} +16 -16
  141. package/chunks/{run-qwen-serve-3AIDNNHO.js → run-qwen-serve-K5W6MM6M.js} +27 -27
  142. package/chunks/{runtime-AZ4EHHFV.js → runtime-IADXMRCY.js} +22 -22
  143. package/chunks/{scheduler-L4UUCU4Z.js → scheduler-T7AV37LD.js} +16 -16
  144. package/chunks/{sdk-exporters-http-IKNWQJNV.js → sdk-exporters-http-IL2346MJ.js} +6 -2
  145. package/chunks/{sdk-impl-7CUUMQDB.js → sdk-impl-SYKGVWOZ.js} +2 -2
  146. package/chunks/{send-message-LHJLVWFD.js → send-message-TL6FIMMN.js} +3 -3
  147. package/chunks/{serve-CLXGSYOE.js → serve-ROEGMS3I.js} +21 -21
  148. package/chunks/{server-MEAE3WMM.js → server-NGXMRODI.js} +40 -40
  149. package/chunks/{session-OSLD2LT5.js → session-RCDLDJA4.js} +46 -46
  150. package/chunks/{settings-ILWAOKA4.js → settings-E6H3AURD.js} +20 -20
  151. package/chunks/{shell-RT5DBH6B.js → shell-RHGGJ6BE.js} +16 -16
  152. package/chunks/{skill-LVGA3ATZ.js → skill-GQ7PBS25.js} +7 -7
  153. package/chunks/{skill-settings-WTZE7EPE.js → skill-settings-E2F7OCBL.js} +20 -20
  154. package/chunks/{spawnChannel-BOBS7DVM.js → spawnChannel-Q2IQBHME.js} +16 -16
  155. package/chunks/{standalone-update-Y5JB4S2K.js → standalone-update-NYYZEHLD.js} +18 -18
  156. package/chunks/{startInteractiveUI-ZV25CD2S.js → startInteractiveUI-IX6I3Y2Z.js} +62 -59
  157. package/chunks/{syntheticOutput-EYL7DWO7.js → syntheticOutput-BN7E626U.js} +2 -2
  158. package/chunks/{task-create-4ALZMGP5.js → task-create-2X4UP4F3.js} +4 -4
  159. package/chunks/{task-list-6CVQPORX.js → task-list-WOLJPZ64.js} +1 -1
  160. package/chunks/{task-stop-Y5ZTFVRX.js → task-stop-TNXRNAL2.js} +1 -1
  161. package/chunks/{task-update-IKCEEWJ6.js → task-update-VDUSN36E.js} +4 -4
  162. package/chunks/{team-create-ZVPQIXCP.js → team-create-UTRVUEDA.js} +16 -16
  163. package/chunks/{team-delete-CE7DC53R.js → team-delete-D2VMSDOT.js} +1 -1
  164. package/chunks/{team-plan-approval-5UHUBY3W.js → team-plan-approval-YZNB4U5U.js} +16 -16
  165. package/chunks/{terminal-image-renderer-NWC2RALG.js → terminal-image-renderer-QRSCS2BE.js} +17 -17
  166. package/chunks/{theme-manager-5KICSBOB.js → theme-manager-EKZBY34I.js} +16 -16
  167. package/chunks/{todoWrite-FTZWQRZH.js → todoWrite-MHWHO5UO.js} +1 -1
  168. package/chunks/{tool-search-2AOU77H4.js → tool-search-N2R7LVMC.js} +8 -8
  169. package/chunks/{total-session-admission-FR7RMHVL.js → total-session-admission-HBIYARPO.js} +17 -17
  170. package/chunks/{trustedFolders-V7UUPQXO.js → trustedFolders-ZQLYRCSY.js} +17 -17
  171. package/chunks/{update-relaunch-TBWRMQD6.js → update-relaunch-PJWXMPCR.js} +5 -5
  172. package/chunks/{updateCheck-42SPCLH7.js → updateCheck-ZXRCGY66.js} +19 -19
  173. package/chunks/{useAutoAcceptIndicator-4C2KM345.js → useAutoAcceptIndicator-ZYQW5SGJ.js} +22 -22
  174. package/chunks/{validateNonInterActiveAuth-UVFRXV3Z.js → validateNonInterActiveAuth-M7J7OTRH.js} +42 -42
  175. package/chunks/{version-HKTV6TPN.js → version-2AOHMPK3.js} +1 -1
  176. package/chunks/{web-fetch-ZRXSV5AN.js → web-fetch-DS34CJ3R.js} +6 -6
  177. package/chunks/{web-search-WOLV3L6T.js → web-search-ITFPD7V4.js} +4 -4
  178. package/chunks/{workflow-F63ES3OB.js → workflow-LZQ4PGNS.js} +17 -17
  179. package/chunks/{workspace-providers-status-PJMGMYMC.js → workspace-providers-status-ZPTLKOBM.js} +23 -23
  180. package/chunks/{workspace-registration-store-LNBOX5TJ.js → workspace-registration-store-OTFKSGG7.js} +1 -1
  181. package/chunks/{workspace-registry-4PR7VDQ3.js → workspace-registry-YZ3OXPHP.js} +17 -17
  182. package/chunks/{workspace-service-PVI3VUNQ.js → workspace-service-OCZXOOSQ.js} +24 -24
  183. package/chunks/{workspace-skills-status-2Q5ZISO6.js → workspace-skills-status-K2ALGUCD.js} +21 -21
  184. package/chunks/{workspace-trust-reconciler-NOILUH3C.js → workspace-trust-reconciler-KMRZISJP.js} +22 -22
  185. package/chunks/{write-file-MOM4JDHG.js → write-file-AWBI4GJS.js} +16 -16
  186. package/chunks/{zoom-image-E3VHRCFU.js → zoom-image-NHKN6F77.js} +6 -6
  187. package/cli.js +12 -12
  188. package/package.json +3 -3
  189. package/web-shell/assets/{arc-GpdmhIxr.js → arc-Dpg66jw7.js} +1 -1
  190. package/web-shell/assets/{architectureDiagram-3BPJPVTR-C-LhCgH_.js → architectureDiagram-3BPJPVTR-BJ4FIBxN.js} +1 -1
  191. package/web-shell/assets/{blockDiagram-GPEHLZMM-CzNdTCm-.js → blockDiagram-GPEHLZMM-VXmYdtYT.js} +1 -1
  192. package/web-shell/assets/{c4Diagram-AAUBKEIU-Ce7hbrRM.js → c4Diagram-AAUBKEIU-BNLDb8FE.js} +1 -1
  193. package/web-shell/assets/channel-Bd9wOnaA.js +1 -0
  194. package/web-shell/assets/{chunk-2J33WTMH-BBSEn1PK.js → chunk-2J33WTMH-DR5yHxr0.js} +1 -1
  195. package/web-shell/assets/{chunk-4BX2VUAB-_llgjfe5.js → chunk-4BX2VUAB-Czkq8UZU.js} +1 -1
  196. package/web-shell/assets/{chunk-55IACEB6-9fJZ_oZE.js → chunk-55IACEB6-DugUgM6s.js} +1 -1
  197. package/web-shell/assets/{chunk-727SXJPM-DgEzQWOu.js → chunk-727SXJPM-Dw6quA1K.js} +1 -1
  198. package/web-shell/assets/{chunk-AQP2D5EJ-B4RthUTc.js → chunk-AQP2D5EJ-BoVYOTTz.js} +1 -1
  199. package/web-shell/assets/{chunk-FMBD7UC4-CDI-emMW.js → chunk-FMBD7UC4--Amcse-j.js} +1 -1
  200. package/web-shell/assets/{chunk-ND2GUHAM-jM2-yOd8.js → chunk-ND2GUHAM-ajaEYAC8.js} +1 -1
  201. package/web-shell/assets/{chunk-QZHKN3VN-XGZHlKPF.js → chunk-QZHKN3VN-CUNDZ7im.js} +1 -1
  202. package/web-shell/assets/classDiagram-4FO5ZUOK-XhCT8FE3.js +1 -0
  203. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-XhCT8FE3.js +1 -0
  204. package/web-shell/assets/{cose-bilkent-S5V4N54A-90nbW1xQ.js → cose-bilkent-S5V4N54A-BnfkD-m1.js} +1 -1
  205. package/web-shell/assets/{dagre-BM42HDAG-BtzlyqZ9.js → dagre-BM42HDAG-BuUdFk7Z.js} +1 -1
  206. package/web-shell/assets/{diagram-2AECGRRQ-DAaqGWaH.js → diagram-2AECGRRQ-B2ZXxoab.js} +1 -1
  207. package/web-shell/assets/{diagram-5GNKFQAL-CxlzSIFa.js → diagram-5GNKFQAL-BsgOICzM.js} +1 -1
  208. package/web-shell/assets/{diagram-KO2AKTUF-8kj-1H6u.js → diagram-KO2AKTUF-DTTjG6U-.js} +1 -1
  209. package/web-shell/assets/{diagram-LMA3HP47-6NhjFwRF.js → diagram-LMA3HP47-temLf1x7.js} +1 -1
  210. package/web-shell/assets/{diagram-OG6HWLK6-Bn9kvInz.js → diagram-OG6HWLK6-CRFjScs2.js} +1 -1
  211. package/web-shell/assets/{erDiagram-TEJ5UH35-CaRoGsAt.js → erDiagram-TEJ5UH35-D4oaY-rQ.js} +1 -1
  212. package/web-shell/assets/{flowDiagram-I6XJVG4X-TkLweHdf.js → flowDiagram-I6XJVG4X-BqG8B49b.js} +1 -1
  213. package/web-shell/assets/{ganttDiagram-6RSMTGT7-ruwhCKBl.js → ganttDiagram-6RSMTGT7-DffQBdd5.js} +1 -1
  214. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DNI_PxoU.js → gitGraphDiagram-PVQCEYII-CMDPfseF.js} +1 -1
  215. package/web-shell/assets/{index-T4KluHvu.js → index-2F4RsNzd.js} +322 -322
  216. package/web-shell/assets/index-CaucmEO_.css +5 -0
  217. package/web-shell/assets/{index-p1gz-sxE.js → index-qTQR_smP.js} +1 -1
  218. package/web-shell/assets/{infoDiagram-5YYISTIA-DarXq1-A.js → infoDiagram-5YYISTIA-Cn3T83MA.js} +1 -1
  219. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-GxDaDlT0.js → ishikawaDiagram-YF4QCWOH-ijFs7e25.js} +1 -1
  220. package/web-shell/assets/{journeyDiagram-JHISSGLW-mDEoGBzY.js → journeyDiagram-JHISSGLW-CINTv8VB.js} +1 -1
  221. package/web-shell/assets/{kanban-definition-UN3LZRKU-Ds0t-Mup.js → kanban-definition-UN3LZRKU-CMGRZCxx.js} +1 -1
  222. package/web-shell/assets/{linear-05nJ0xZ7.js → linear-Co-2_37d.js} +1 -1
  223. package/web-shell/assets/{mermaid.core-Bua24ThM.js → mermaid.core-DijbyaN5.js} +5 -5
  224. package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_zRdvUS.js → mindmap-definition-RKZ34NQL-k_sDYDPZ.js} +1 -1
  225. package/web-shell/assets/{pieDiagram-4H26LBE5-DZHr1x16.js → pieDiagram-4H26LBE5-CG-oz8V3.js} +1 -1
  226. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-HA06Wf0h.js → quadrantDiagram-W4KKPZXB-Baq7HIG2.js} +1 -1
  227. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DH3urmJf.js → requirementDiagram-4Y6WPE33-CDM3ZvBt.js} +1 -1
  228. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C4xgz0TT.js → sankeyDiagram-5OEKKPKP-C2dJbWKN.js} +1 -1
  229. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DAUoZWgv.js → sequenceDiagram-3UESZ5HK-Cf1_h59p.js} +1 -1
  230. package/web-shell/assets/{stateDiagram-AJRCARHV-v7NzXy4l.js → stateDiagram-AJRCARHV-CI5clUEc.js} +1 -1
  231. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDc8asKD.js +1 -0
  232. package/web-shell/assets/{timeline-definition-PNZ67QCA-B3GTYR2W.js → timeline-definition-PNZ67QCA-B2O8cAZX.js} +1 -1
  233. package/web-shell/assets/{vennDiagram-CIIHVFJN-BWHjSPAq.js → vennDiagram-CIIHVFJN-BLsJ_h9s.js} +1 -1
  234. package/web-shell/assets/{wardley-L42UT6IY-m9r6IUBC.js → wardley-L42UT6IY-BlPU4FTA.js} +1 -1
  235. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-kT0FkVfK.js → wardleyDiagram-YWT4CUSO-D_U-RdU4.js} +1 -1
  236. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CYRm10z5.js → xychartDiagram-2RQKCTM6-BynXGSTl.js} +1 -1
  237. package/web-shell/index.html +2 -2
  238. package/web-shell/assets/channel-95y6Rcp3.js +0 -1
  239. package/web-shell/assets/classDiagram-4FO5ZUOK-pfzVkmjQ.js +0 -1
  240. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-pfzVkmjQ.js +0 -1
  241. package/web-shell/assets/index-WxSvj2tI.css +0 -5
  242. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CtdFexEf.js +0 -1
@@ -2,13 +2,13 @@
2
2
  "use strict";
3
3
  import {
4
4
  serveCommand
5
- } from "./chunk-2ON2O4MD.js";
5
+ } from "./chunk-SVIEVA3L.js";
6
6
  import {
7
7
  listCommand
8
- } from "./chunk-P5UJMCVS.js";
8
+ } from "./chunk-ZLGPHA34.js";
9
9
  import {
10
10
  getErrorMessage as getErrorMessage2
11
- } from "./chunk-EJXATV5R.js";
11
+ } from "./chunk-VJPF6GF2.js";
12
12
  import {
13
13
  ObservedChannelContactStore
14
14
  } from "./chunk-DYA25Y7U.js";
@@ -46,19 +46,19 @@ import {
46
46
  registerToolCallDispatch,
47
47
  selectFirstModel,
48
48
  sessionsPath
49
- } from "./chunk-5XGI4IPK.js";
49
+ } from "./chunk-VOA2UPZM.js";
50
50
  import {
51
51
  getExtensionManager,
52
52
  requestChoicePluginNonInteractive,
53
53
  requestConsentNonInteractive,
54
54
  requestConsentOrFail,
55
55
  resolveExtensionCommandScope
56
- } from "./chunk-O4IWFYUW.js";
56
+ } from "./chunk-3GOCVBYR.js";
57
57
  import {
58
58
  collectProviderModelsForProtocol,
59
59
  getAuthTypeFromEnv,
60
60
  resolveCliGenerationConfig
61
- } from "./chunk-IMGNGOGC.js";
61
+ } from "./chunk-WU5NBSLD.js";
62
62
  import {
63
63
  parseChannelConfig
64
64
  } from "./chunk-LEZFUYPM.js";
@@ -128,29 +128,29 @@ import {
128
128
  assembleMcpServers,
129
129
  getPendingGatedMcpServers,
130
130
  mcpCommand
131
- } from "./chunk-6ME3PVMM.js";
131
+ } from "./chunk-SJMCYCUQ.js";
132
132
  import {
133
133
  loadSettings
134
- } from "./chunk-KB6VSG2U.js";
134
+ } from "./chunk-RM3F46UT.js";
135
135
  import {
136
136
  detectSystemLanguage,
137
137
  getCurrentLanguage,
138
138
  initializeI18n,
139
139
  resolveLanguageSetting,
140
140
  t
141
- } from "./chunk-FV4TUUDE.js";
141
+ } from "./chunk-K64OI7S7.js";
142
142
  import {
143
143
  loadEnvironment
144
- } from "./chunk-4PZ7SPD5.js";
144
+ } from "./chunk-LYPXNRBX.js";
145
145
  import {
146
146
  getCliVersion
147
- } from "./chunk-HBCKZF2A.js";
147
+ } from "./chunk-IZ2CMEYO.js";
148
148
  import {
149
149
  getPackageJson
150
150
  } from "./chunk-VJNBRRZG.js";
151
151
  import {
152
152
  isWorkspaceTrusted
153
- } from "./chunk-URVJ4AZC.js";
153
+ } from "./chunk-B3EBIZUY.js";
154
154
  import {
155
155
  require_strip_json_comments
156
156
  } from "./chunk-ALGGS7UH.js";
@@ -191,7 +191,7 @@ import {
191
191
  unquoteCStylePath,
192
192
  updateChannelMemoryEntry,
193
193
  updateSetting
194
- } from "./chunk-E2SYUEIA.js";
194
+ } from "./chunk-YLL3SC5S.js";
195
195
  import {
196
196
  nextFireTime,
197
197
  parseCron
@@ -202,18 +202,18 @@ import {
202
202
  import {
203
203
  parseBooleanEnvFlag,
204
204
  resolveTelemetrySettings
205
- } from "./chunk-RPYYTL7E.js";
205
+ } from "./chunk-MGSSJT27.js";
206
206
  import {
207
207
  getAllGeminiMdFilenames,
208
208
  setGeminiMdFilename
209
- } from "./chunk-JDJ7SC4E.js";
209
+ } from "./chunk-ZPGMDT4S.js";
210
210
  import {
211
211
  SchemaValidator,
212
212
  ToolNames
213
- } from "./chunk-CFDR3GNL.js";
213
+ } from "./chunk-D7D7RXIJ.js";
214
214
  import {
215
215
  DEFAULT_QWEN_EMBEDDING_MODEL
216
- } from "./chunk-TXZDRD36.js";
216
+ } from "./chunk-XD2PNH3K.js";
217
217
  import {
218
218
  isTlsVerificationDisabled
219
219
  } from "./chunk-BFHXDAR7.js";
@@ -222,7 +222,7 @@ import {
222
222
  } from "./chunk-UH7Z7Y45.js";
223
223
  import {
224
224
  recordChannelMemoryRecallMetrics
225
- } from "./chunk-O2ZYHG33.js";
225
+ } from "./chunk-5L6CQ4ZU.js";
226
226
  import {
227
227
  FatalConfigError,
228
228
  FatalSandboxError,
@@ -358,9 +358,9 @@ var require_command_exists = __commonJS({
358
358
  cleanInput = /* @__PURE__ */ __name(function(s) {
359
359
  var isPathName = /[\\]/.test(s);
360
360
  if (isPathName) {
361
- var dirname23 = '"' + path3.dirname(s) + '"';
361
+ var dirname24 = '"' + path3.dirname(s) + '"';
362
362
  var basename6 = '"' + path3.basename(s) + '"';
363
- return dirname23 + ":" + basename6;
363
+ return dirname24 + ":" + basename6;
364
364
  }
365
365
  return '"' + s + '"';
366
366
  }, "cleanInput");
@@ -368,10 +368,10 @@ var require_command_exists = __commonJS({
368
368
  module.exports = /* @__PURE__ */ __name(function commandExists2(commandName, callback) {
369
369
  var cleanedCommandName = cleanInput(commandName);
370
370
  if (!callback && typeof Promise !== "undefined") {
371
- return new Promise(function(resolve23, reject) {
371
+ return new Promise(function(resolve24, reject) {
372
372
  commandExists2(commandName, function(error, output) {
373
373
  if (output) {
374
- resolve23(commandName);
374
+ resolve24(commandName);
375
375
  } else {
376
376
  reject(error);
377
377
  }
@@ -2255,8 +2255,8 @@ function createBridgeReadinessGate() {
2255
2255
  current: /* @__PURE__ */ __name(() => pending, "current"),
2256
2256
  block: /* @__PURE__ */ __name(() => {
2257
2257
  if (pending) return;
2258
- pending = new Promise((resolve23) => {
2259
- releasePending = resolve23;
2258
+ pending = new Promise((resolve24) => {
2259
+ releasePending = resolve24;
2260
2260
  });
2261
2261
  }, "block"),
2262
2262
  release: /* @__PURE__ */ __name(() => {
@@ -2338,7 +2338,7 @@ function createBridgeRecovery(options) {
2338
2338
  writeStderrLine(
2339
2339
  `[Channel] Bridge crashed (${recentCrashCount}/${MAX_CRASH_RESTARTS} in window). Restarting in ${RESTART_DELAY_MS / 1e3}s...`
2340
2340
  );
2341
- await new Promise((resolve23) => setTimeout(resolve23, RESTART_DELAY_MS));
2341
+ await new Promise((resolve24) => setTimeout(resolve24, RESTART_DELAY_MS));
2342
2342
  const bridge = new AcpBridge(bridgeOpts);
2343
2343
  setBridge(bridge);
2344
2344
  attachDisconnectHandler(bridge);
@@ -3206,12 +3206,12 @@ async function abortableStartup(value, signal) {
3206
3206
  const promise = Promise.resolve(value);
3207
3207
  if (!signal) return await promise;
3208
3208
  if (signal.aborted) throw startupAbortError();
3209
- return await new Promise((resolve23, reject) => {
3209
+ return await new Promise((resolve24, reject) => {
3210
3210
  const onAbort = /* @__PURE__ */ __name(() => {
3211
3211
  reject(startupAbortError());
3212
3212
  }, "onAbort");
3213
3213
  signal.addEventListener("abort", onAbort, { once: true });
3214
- promise.then(resolve23, reject).finally(() => {
3214
+ promise.then(resolve24, reject).finally(() => {
3215
3215
  signal.removeEventListener("abort", onAbort);
3216
3216
  });
3217
3217
  });
@@ -3619,7 +3619,7 @@ function reportStartupToSupervisor(message, signal, subscribeMessage = (listener
3619
3619
  if (!send) {
3620
3620
  return Promise.reject(new Error("Channel worker IPC is unavailable."));
3621
3621
  }
3622
- return new Promise((resolve23, reject) => {
3622
+ return new Promise((resolve24, reject) => {
3623
3623
  let settled = false;
3624
3624
  let unsubscribeMessage = /* @__PURE__ */ __name(() => {
3625
3625
  }, "unsubscribeMessage");
@@ -3633,7 +3633,7 @@ function reportStartupToSupervisor(message, signal, subscribeMessage = (listener
3633
3633
  settled = true;
3634
3634
  cleanup();
3635
3635
  if (error) reject(error);
3636
- else resolve23();
3636
+ else resolve24();
3637
3637
  }, "finish");
3638
3638
  const onMessage = /* @__PURE__ */ __name((value) => {
3639
3639
  if (isChannelStartupReportAckMessage(value)) {
@@ -3881,8 +3881,8 @@ var daemonWorkerCommand = {
3881
3881
  let shuttingDown = false;
3882
3882
  let exitCode = 0;
3883
3883
  let finish;
3884
- const finished = new Promise((resolve23) => {
3885
- finish = resolve23;
3884
+ const finished = new Promise((resolve24) => {
3885
+ finish = resolve24;
3886
3886
  });
3887
3887
  const shutdown = /* @__PURE__ */ __name(async (reason) => {
3888
3888
  if (shuttingDown) {
@@ -3910,8 +3910,8 @@ var daemonWorkerCommand = {
3910
3910
  ...activeChannelDeliveries.values(),
3911
3911
  ...activeWebhookTasks.values()
3912
3912
  ]),
3913
- new Promise((resolve23) => {
3914
- const timer = setTimeout(resolve23, WORKER_SHUTDOWN_DRAIN_MS);
3913
+ new Promise((resolve24) => {
3914
+ const timer = setTimeout(resolve24, WORKER_SHUTDOWN_DRAIN_MS);
3915
3915
  timer.unref();
3916
3916
  })
3917
3917
  ]);
@@ -6283,6 +6283,11 @@ function coverageFromTranscripts(planPath, env = process.env) {
6283
6283
  const idleAgents = [];
6284
6284
  const unopenedAgents = [];
6285
6285
  const rewrittenPrompts = [];
6286
+ const driftedLaunches = [];
6287
+ const openedBriefOf = /* @__PURE__ */ __name((rec, key) => {
6288
+ const needle = JSON.stringify(briefPath(planPath, key));
6289
+ return rec.successfulCallArgs.some((a) => a.includes(needle));
6290
+ }, "openedBriefOf");
6286
6291
  const disclosures = [];
6287
6292
  const disclose = /* @__PURE__ */ __name((subject, reason, pub) => {
6288
6293
  disclosures.push({
@@ -6355,15 +6360,23 @@ function coverageFromTranscripts(planPath, env = process.env) {
6355
6360
  );
6356
6361
  }
6357
6362
  } else if (!wasDeliveredVerbatim(rec.launchPrompt, b)) {
6358
- rewrittenThisRecord = true;
6359
- if (!superseded(rec, chunk2)) {
6360
- rewrittenPrompts.push(
6361
- disclose(
6362
- name,
6363
- "launched with a prompt that is not the one the CLI built",
6364
- { reasonZh: "\u542F\u52A8\u65F6\u4F7F\u7528\u7684 prompt \u4E0D\u662F CLI \u6784\u5EFA\u7684\u90A3\u4E00\u4EFD" }
6365
- )
6366
- );
6363
+ if (openedBriefOf(rec, `chunk-${chunk2}`) && rec.diffToolCalls > 0) {
6364
+ if (!superseded(rec, chunk2)) {
6365
+ driftedLaunches.push(
6366
+ `${name} \u2014 launched with a near-verbatim prompt; its brief was opened and the diff was read, so the delivery stands`
6367
+ );
6368
+ }
6369
+ } else {
6370
+ rewrittenThisRecord = true;
6371
+ if (!superseded(rec, chunk2)) {
6372
+ rewrittenPrompts.push(
6373
+ disclose(
6374
+ name,
6375
+ "launched with a prompt that is not the one the CLI built",
6376
+ { reasonZh: "\u542F\u52A8\u65F6\u4F7F\u7528\u7684 prompt \u4E0D\u662F CLI \u6784\u5EFA\u7684\u90A3\u4E00\u4EFD" }
6377
+ )
6378
+ );
6379
+ }
6367
6380
  }
6368
6381
  }
6369
6382
  }
@@ -6407,16 +6420,12 @@ function coverageFromTranscripts(planPath, env = process.env) {
6407
6420
  );
6408
6421
  }
6409
6422
  const buildable = roster.filter((r) => builtOf(r.key) !== void 0);
6410
- const openedBrief = /* @__PURE__ */ __name((rec, key) => {
6411
- const needle = JSON.stringify(briefPath(planPath, key));
6412
- return rec.successfulCallArgs.some((a) => a.includes(needle));
6413
- }, "openedBrief");
6414
6423
  const candidatesOf = buildable.map((req) => {
6415
6424
  const b = builtOf(req.key);
6416
6425
  return records.filter((r) => wasDeliveredVerbatim(r.launchPrompt, b));
6417
6426
  });
6418
6427
  const openedOfReq = buildable.map(
6419
- (req, i) => candidatesOf[i].filter((r) => openedBrief(r, req.key))
6428
+ (req, i) => candidatesOf[i].filter((r) => openedBriefOf(r, req.key))
6420
6429
  );
6421
6430
  const matchedRec = /* @__PURE__ */ new Map();
6422
6431
  const augment = /* @__PURE__ */ __name((i, edges, seen) => {
@@ -6441,6 +6450,7 @@ function coverageFromTranscripts(planPath, env = process.env) {
6441
6450
  }
6442
6451
  const assignment = /* @__PURE__ */ new Map();
6443
6452
  for (const [rec, i] of matchedRec) assignment.set(i, rec);
6453
+ const rescued = /* @__PURE__ */ new Set();
6444
6454
  let buildableIdx = -1;
6445
6455
  for (const req of roster) {
6446
6456
  const b = builtOf(req.key);
@@ -6465,6 +6475,21 @@ function coverageFromTranscripts(planPath, env = process.env) {
6465
6475
  const pick2 = assignment.get(buildableIdx);
6466
6476
  if (pick2 === void 0) {
6467
6477
  const anyMatch = candidatesOf[buildableIdx].length > 0;
6478
+ if (!anyMatch) {
6479
+ const needsDiff = req.role === "chunk" || BRIEFS[req.role].readsDiff;
6480
+ const rescue = records.find(
6481
+ (r) => !matchedRec.has(r) && !rescued.has(r) && r.successfulToolCalls > 0 && (!needsDiff || r.diffToolCalls > 0) && openedBriefOf(r, req.key)
6482
+ );
6483
+ if (rescue !== void 0) {
6484
+ rescued.add(rescue);
6485
+ if (req.role !== "chunk") {
6486
+ driftedLaunches.push(
6487
+ `${roleLabel(req)} \u2014 no launch matched its block verbatim, but an agent opened this role's brief and did the work, so the delivery stands`
6488
+ );
6489
+ }
6490
+ continue;
6491
+ }
6492
+ }
6468
6493
  missingRoles.push(
6469
6494
  disclose(
6470
6495
  roleLabel(req),
@@ -6512,6 +6537,7 @@ function coverageFromTranscripts(planPath, env = process.env) {
6512
6537
  idleAgents,
6513
6538
  unopenedAgents,
6514
6539
  rewrittenPrompts,
6540
+ driftedLaunches,
6515
6541
  missingRoles,
6516
6542
  missingRoleSelectors,
6517
6543
  disclosures,
@@ -7217,25 +7243,25 @@ function composeReviewBody(input, cliVersion) {
7217
7243
  }
7218
7244
  if (contextUnavailable) cappedBy.push("context-unavailable");
7219
7245
  if (criticalsUnverified) cappedBy.push("criticals-unverified");
7220
- let event = baseEvent;
7221
- if (event === "APPROVE" && cappedBy.length > 0) event = "COMMENT";
7246
+ let event2 = baseEvent;
7247
+ if (event2 === "APPROVE" && cappedBy.length > 0) event2 = "COMMENT";
7222
7248
  const deterministicBodyCriticals = bodyCriticals.length - nonDeterministicBodyCriticals;
7223
- if (event === "REQUEST_CHANGES" && criticalsUnverified && deterministicBodyCriticals === 0) {
7224
- event = "COMMENT";
7249
+ if (event2 === "REQUEST_CHANGES" && criticalsUnverified && deterministicBodyCriticals === 0) {
7250
+ event2 = "COMMENT";
7225
7251
  }
7226
7252
  let downgraded = false;
7227
7253
  let downgradedFrom = null;
7228
- if (event === "APPROVE" && downgradeApprove) {
7229
- event = "COMMENT";
7254
+ if (event2 === "APPROVE" && downgradeApprove) {
7255
+ event2 = "COMMENT";
7230
7256
  downgraded = true;
7231
7257
  downgradedFrom = "Approve";
7232
- } else if ((event === "REQUEST_CHANGES" || baseEvent === "REQUEST_CHANGES" && criticalsUnverified) && downgradeRequestChanges) {
7233
- event = "COMMENT";
7258
+ } else if ((event2 === "REQUEST_CHANGES" || baseEvent === "REQUEST_CHANGES" && criticalsUnverified) && downgradeRequestChanges) {
7259
+ event2 = "COMMENT";
7234
7260
  downgraded = true;
7235
7261
  downgradedFrom = "Request changes";
7236
7262
  }
7237
7263
  let lowSignal = null;
7238
- if (event === "APPROVE" && input.planPath) {
7264
+ if (event2 === "APPROVE" && input.planPath) {
7239
7265
  try {
7240
7266
  const plan = JSON.parse(
7241
7267
  readFileSync8(input.planPath, "utf8")
@@ -7249,10 +7275,10 @@ function composeReviewBody(input, cliVersion) {
7249
7275
  }
7250
7276
  const footer = `_\u2014 ${modelId} via Qwen Code /review (v${cliVersion})_`;
7251
7277
  const bilingual = bilingualFromPlan(input.planPath, input.prBodyFetcher);
7252
- const render = /* @__PURE__ */ __name((parts, sep4) => {
7253
- const en = parts.map((p) => p.en).join(sep4);
7278
+ const render = /* @__PURE__ */ __name((parts, sep5) => {
7279
+ const en = parts.map((p) => p.en).join(sep5);
7254
7280
  if (en === "") return "";
7255
- const zh = parts.map((p) => p.zh).join(sep4);
7281
+ const zh = parts.map((p) => p.zh).join(sep5);
7256
7282
  const text = bilingual && zh !== en ? `${en}
7257
7283
 
7258
7284
  <details>
@@ -7386,7 +7412,7 @@ ${footer}`;
7386
7412
  zh: `Test Plan\uFF08\u975E\u963B\u65AD\uFF09\uFF1A${testPlanNotes.join("; ")}\u3002`
7387
7413
  }
7388
7414
  ] : [];
7389
- if (event === "REQUEST_CHANGES") {
7415
+ if (event2 === "REQUEST_CHANGES") {
7390
7416
  const parts = [
7391
7417
  ...contextUnavailable ? [contextUnavailableClause] : [],
7392
7418
  ...cannotTellBlock,
@@ -7396,7 +7422,7 @@ ${footer}`;
7396
7422
  ...bodyCriticalBlock
7397
7423
  ];
7398
7424
  return {
7399
- event,
7425
+ event: event2,
7400
7426
  body: render(parts, "\n\n"),
7401
7427
  baseEvent,
7402
7428
  cappedBy,
@@ -7406,9 +7432,9 @@ ${footer}`;
7406
7432
  lowSignal
7407
7433
  };
7408
7434
  }
7409
- if (event === "APPROVE") {
7435
+ if (event2 === "APPROVE") {
7410
7436
  return {
7411
- event,
7437
+ event: event2,
7412
7438
  body: render(
7413
7439
  [
7414
7440
  { en: "No issues found. LGTM! \u2705", zh: "\u672A\u53D1\u73B0\u95EE\u9898\u3002LGTM\uFF01\u2705" },
@@ -7471,7 +7497,7 @@ ${footer}`;
7471
7497
  clauses.push(...bodyCriticalBlock);
7472
7498
  }
7473
7499
  return {
7474
- event,
7500
+ event: event2,
7475
7501
  body: render(clauses, " "),
7476
7502
  baseEvent,
7477
7503
  cappedBy,
@@ -7901,8 +7927,8 @@ function parseLocations(o, index) {
7901
7927
  const lo = l;
7902
7928
  const file2 = asString(lo, "file");
7903
7929
  if (!file2) fail(index, `location ${j} is missing a non-empty "file".`);
7904
- if (lo["line"] !== void 0 && typeof lo["line"] !== "number") {
7905
- fail(index, `location ${j} has a non-numeric "line".`);
7930
+ if (lo["line"] !== void 0 && (typeof lo["line"] !== "number" || !Number.isSafeInteger(lo["line"]) || lo["line"] <= 0)) {
7931
+ fail(index, `location ${j} has an invalid "line".`);
7906
7932
  }
7907
7933
  return {
7908
7934
  file: file2,
@@ -7918,8 +7944,8 @@ function parseLocations(o, index) {
7918
7944
  'needs a non-empty "file" (or a "locations" array for a pattern aggregate).'
7919
7945
  );
7920
7946
  }
7921
- if (o["line"] !== void 0 && typeof o["line"] !== "number") {
7922
- fail(index, 'has a non-numeric "line".');
7947
+ if (o["line"] !== void 0 && (typeof o["line"] !== "number" || !Number.isSafeInteger(o["line"]) || o["line"] <= 0)) {
7948
+ fail(index, 'has an invalid "line".');
7923
7949
  }
7924
7950
  return [
7925
7951
  {
@@ -11398,8 +11424,8 @@ function validateRequests(raw) {
11398
11424
  );
11399
11425
  }
11400
11426
  }
11401
- if (o["line"] !== void 0 && typeof o["line"] !== "number") {
11402
- throw new Error(`Finding "${o["id"]}" has a non-numeric "line".`);
11427
+ if (o["line"] !== void 0 && (typeof o["line"] !== "number" || !Number.isSafeInteger(o["line"]) || o["line"] <= 0)) {
11428
+ throw new Error(`Finding "${o["id"]}" has an invalid "line".`);
11403
11429
  }
11404
11430
  return {
11405
11431
  id: o["id"],
@@ -11547,6 +11573,11 @@ This is an environment problem, not a finding about the agents. Coverage cannot
11547
11573
  `ERROR: ${report.rewrittenPrompts.length} agent(s) were not launched with the prompt this CLI built for them \u2014 ${report.rewrittenPrompts.join("; ")}. \`agent-prompt\` prints a prompt to be passed VERBATIM; a summary of it is not it. The last run to paraphrase one dropped the rule against reciting a stock sentence and replaced the project's review rules with three sentences of its own. Re-run \`"\${QWEN_CODE_CLI:-qwen}" review agent-prompt\` and pass its output unedited \u2014 copy it, do not retype it.`
11548
11574
  );
11549
11575
  }
11576
+ if (report.driftedLaunches.length > 0) {
11577
+ writeStderrLine(
11578
+ `NOTE: ${report.driftedLaunches.length} agent(s) launched with a near-verbatim prompt \u2014 ${report.driftedLaunches.join("; ")}. Their briefs were opened and the work is on record, so the delivery stands and NO relaunch is owed. Copy future blocks exactly \u2014 one edited word is what turns a clean pass into this note.`
11579
+ );
11580
+ }
11550
11581
  if (report.missingRoles.length > 0) {
11551
11582
  writeStderrLine(
11552
11583
  // No count: when no role was briefed at all, `missingRoles` collapses to one
@@ -14762,12 +14793,12 @@ function structuralProblems(payload) {
14762
14793
  return problems;
14763
14794
  }
14764
14795
  __name(structuralProblems, "structuralProblems");
14765
- function inconsistencies(payload, event) {
14796
+ function inconsistencies(payload, event2) {
14766
14797
  const problems = [];
14767
14798
  const comments = payload.comments ?? [];
14768
- if (!EVENTS.has(event)) {
14799
+ if (!EVENTS.has(event2)) {
14769
14800
  problems.push(
14770
- `computed \`event\` is ${JSON.stringify(event)}; GitHub accepts only ${[...EVENTS].join(", ")}`
14801
+ `computed \`event\` is ${JSON.stringify(event2)}; GitHub accepts only ${[...EVENTS].join(", ")}`
14771
14802
  );
14772
14803
  }
14773
14804
  comments.forEach((c, i) => {
@@ -14849,18 +14880,18 @@ Posting is a public, irreversible write, and this run has no authorisation for o
14849
14880
  ` + structural.map((p) => ` - ${p}`).join("\n")
14850
14881
  );
14851
14882
  }
14852
- let event;
14883
+ let event2;
14853
14884
  let body;
14854
14885
  let cappedBy;
14855
14886
  try {
14856
- ({ event, body, cappedBy } = compose(payload, cliVersion));
14887
+ ({ event: event2, body, cappedBy } = compose(payload, cliVersion));
14857
14888
  } catch (err) {
14858
14889
  throw new Error(
14859
14890
  `The review state does not compose into a verdict; refusing to post:
14860
14891
  - ${err.message}`
14861
14892
  );
14862
14893
  }
14863
- const problems = inconsistencies(payload, event);
14894
+ const problems = inconsistencies(payload, event2);
14864
14895
  if (problems.length > 0) {
14865
14896
  throw new Error(
14866
14897
  `The review payload contradicts itself; refusing to post it:
@@ -14869,7 +14900,7 @@ Posting is a public, irreversible write, and this run has no authorisation for o
14869
14900
  }
14870
14901
  const post = {
14871
14902
  commit_id: payload.commit_id,
14872
- event,
14903
+ event: event2,
14873
14904
  body,
14874
14905
  comments: payload.comments ?? []
14875
14906
  };
@@ -14880,7 +14911,7 @@ Posting is a public, irreversible write, and this run has no authorisation for o
14880
14911
  );
14881
14912
  writeStdoutLine(
14882
14913
  JSON.stringify(
14883
- { posted: false, wouldPost: true, target, event, cappedBy },
14914
+ { posted: false, wouldPost: true, target, event: event2, cappedBy },
14884
14915
  null,
14885
14916
  2
14886
14917
  )
@@ -14903,20 +14934,20 @@ Posting is a public, irreversible write, and this run has no authorisation for o
14903
14934
  mkdirSync22(REVIEW_TMP_DIR, { recursive: true });
14904
14935
  atomicWriteFileSync(
14905
14936
  receiptPath,
14906
- `${JSON.stringify({ reviewIds, event, postedAt: (/* @__PURE__ */ new Date()).toISOString() })}
14937
+ `${JSON.stringify({ reviewIds, event: event2, postedAt: (/* @__PURE__ */ new Date()).toISOString() })}
14907
14938
  `
14908
14939
  );
14909
14940
  }
14910
14941
  } catch {
14911
14942
  }
14912
14943
  writeStderrLine(
14913
- `Posted ${event} to ${args.repo}#${args.pr} \u2014 ${auth.why}` + (cappedBy.length ? ` (capped by ${cappedBy.join(", ")})` : "") + "."
14944
+ `Posted ${event2} to ${args.repo}#${args.pr} \u2014 ${auth.why}` + (cappedBy.length ? ` (capped by ${cappedBy.join(", ")})` : "") + "."
14914
14945
  );
14915
14946
  writeStdoutLine(
14916
14947
  JSON.stringify(
14917
14948
  {
14918
14949
  posted: true,
14919
- event,
14950
+ event: event2,
14920
14951
  cappedBy,
14921
14952
  inlineComments: post.comments.length
14922
14953
  },
@@ -17093,9 +17124,9 @@ function newestArtifactSince(dir, pattern, startMs) {
17093
17124
  return best ? best.path : null;
17094
17125
  }
17095
17126
  __name(newestArtifactSince, "newestArtifactSince");
17096
- function exitCodeFor(completed, event, failOn) {
17127
+ function exitCodeFor(completed, event2, failOn) {
17097
17128
  if (!completed) return 1;
17098
- if (failOn === "request-changes" && event === "REQUEST_CHANGES") return 3;
17129
+ if (failOn === "request-changes" && event2 === "REQUEST_CHANGES") return 3;
17099
17130
  return 0;
17100
17131
  }
17101
17132
  __name(exitCodeFor, "exitCodeFor");
@@ -17332,13 +17363,308 @@ var runCommand = {
17332
17363
  }, "handler")
17333
17364
  };
17334
17365
 
17366
+ // packages/cli/src/commands/review/save-artifact.ts
17367
+ init_esbuild_shims();
17368
+ import {
17369
+ existsSync as existsSync14,
17370
+ lstatSync as lstatSync5,
17371
+ mkdirSync as mkdirSync25,
17372
+ readFileSync as readFileSync29,
17373
+ statSync as statSync10
17374
+ } from "node:fs";
17375
+ import {
17376
+ dirname as dirname23,
17377
+ isAbsolute as isAbsolute4,
17378
+ join as join21,
17379
+ relative as relative3,
17380
+ resolve as resolve22,
17381
+ sep as sep4,
17382
+ toNamespacedPath
17383
+ } from "node:path";
17384
+ import { isDeepStrictEqual } from "node:util";
17385
+ function workspaceRoot() {
17386
+ return resolve22(process.env["QWEN_CODE_PROJECT_DIR"] ?? process.cwd());
17387
+ }
17388
+ __name(workspaceRoot, "workspaceRoot");
17389
+ function isWithin(parent, child) {
17390
+ const rel = relative3(parent, child);
17391
+ return rel === "" || !isAbsolute4(rel) && rel !== ".." && !rel.startsWith(`..${sep4}`);
17392
+ }
17393
+ __name(isWithin, "isWithin");
17394
+ function workspacePath(root, value, label2) {
17395
+ const absolute = resolve22(root, value);
17396
+ if (!isWithin(root, absolute)) {
17397
+ throw new Error(
17398
+ `${label2} must be inside the workspace: ${JSON.stringify(value)}.`
17399
+ );
17400
+ }
17401
+ return absolute;
17402
+ }
17403
+ __name(workspacePath, "workspacePath");
17404
+ function rejectSymlinkPath(root, path3, label2) {
17405
+ const rel = relative3(root, path3);
17406
+ let current = root;
17407
+ for (const segment of rel.split(sep4)) {
17408
+ current = join21(current, segment);
17409
+ if (existsSync14(current) && lstatSync5(current).isSymbolicLink()) {
17410
+ throw new Error(`${label2} must not traverse a symbolic link.`);
17411
+ }
17412
+ }
17413
+ }
17414
+ __name(rejectSymlinkPath, "rejectSymlinkPath");
17415
+ function sameFile(left, right) {
17416
+ if (left === right) return true;
17417
+ if (!existsSync14(left) || !existsSync14(right)) return false;
17418
+ const leftStat = statSync10(left);
17419
+ const rightStat = statSync10(right);
17420
+ return leftStat.dev === rightStat.dev && leftStat.ino === rightStat.ino;
17421
+ }
17422
+ __name(sameFile, "sameFile");
17423
+ function readText(path3, label2) {
17424
+ try {
17425
+ return readFileSync29(path3, "utf8");
17426
+ } catch (error) {
17427
+ throw new Error(
17428
+ `Could not read the ${label2} file at ${JSON.stringify(path3)}: ${error instanceof Error ? error.message : String(error)}`
17429
+ );
17430
+ }
17431
+ }
17432
+ __name(readText, "readText");
17433
+ function readJson2(path3, label2) {
17434
+ const text = readText(path3, label2);
17435
+ try {
17436
+ return JSON.parse(text);
17437
+ } catch (error) {
17438
+ throw new Error(
17439
+ `The ${label2} file at ${JSON.stringify(path3)} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`
17440
+ );
17441
+ }
17442
+ }
17443
+ __name(readJson2, "readJson");
17444
+ function object(value, label2) {
17445
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
17446
+ throw new Error(`${label2} must be an object.`);
17447
+ }
17448
+ return value;
17449
+ }
17450
+ __name(object, "object");
17451
+ function string(value, label2) {
17452
+ if (typeof value !== "string") {
17453
+ throw new Error(`${label2} must be a string.`);
17454
+ }
17455
+ return value;
17456
+ }
17457
+ __name(string, "string");
17458
+ function nonEmptyString(value, label2) {
17459
+ const text = string(value, label2);
17460
+ if (text.trim() === "") {
17461
+ throw new Error(`${label2} must be a non-empty string.`);
17462
+ }
17463
+ return text;
17464
+ }
17465
+ __name(nonEmptyString, "nonEmptyString");
17466
+ function stringArray2(value, label2) {
17467
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
17468
+ throw new Error(`${label2} must be an array of strings.`);
17469
+ }
17470
+ return value;
17471
+ }
17472
+ __name(stringArray2, "stringArray");
17473
+ function event(value, label2) {
17474
+ if (value !== "APPROVE" && value !== "COMMENT" && value !== "REQUEST_CHANGES") {
17475
+ throw new Error(`${label2} has an unsupported value.`);
17476
+ }
17477
+ return value;
17478
+ }
17479
+ __name(event, "event");
17480
+ function validateVerdict(value) {
17481
+ const verdict = object(value, "Composed verdict");
17482
+ const downgradedFrom = verdict["downgradedFrom"];
17483
+ if (downgradedFrom !== null && downgradedFrom !== "Approve" && downgradedFrom !== "Request changes") {
17484
+ throw new Error(
17485
+ "Composed verdict.downgradedFrom has an unsupported value."
17486
+ );
17487
+ }
17488
+ if (typeof verdict["downgraded"] !== "boolean") {
17489
+ throw new Error("Composed verdict.downgraded must be a boolean.");
17490
+ }
17491
+ const lowSignal = verdict["lowSignal"];
17492
+ if (lowSignal !== null) {
17493
+ const signal = object(lowSignal, "Composed verdict.lowSignal");
17494
+ for (const key of ["agents", "srcDiffLines"]) {
17495
+ if (typeof signal[key] !== "number" || !Number.isInteger(signal[key]) || signal[key] < 0) {
17496
+ throw new Error(
17497
+ `Composed verdict.lowSignal.${key} must be a non-negative integer.`
17498
+ );
17499
+ }
17500
+ }
17501
+ }
17502
+ return {
17503
+ event: event(verdict["event"], "Composed verdict.event"),
17504
+ body: string(verdict["body"], "Composed verdict.body"),
17505
+ baseEvent: event(verdict["baseEvent"], "Composed verdict.baseEvent"),
17506
+ cappedBy: stringArray2(verdict["cappedBy"], "Composed verdict.cappedBy"),
17507
+ downgraded: verdict["downgraded"],
17508
+ downgradedFrom,
17509
+ remediation: stringArray2(
17510
+ verdict["remediation"],
17511
+ "Composed verdict.remediation"
17512
+ ),
17513
+ lowSignal: lowSignal === null ? null : {
17514
+ agents: lowSignal["agents"],
17515
+ srcDiffLines: lowSignal["srcDiffLines"]
17516
+ },
17517
+ verdictLine: nonEmptyString(
17518
+ verdict["verdictLine"],
17519
+ "Composed verdict.verdictLine"
17520
+ )
17521
+ };
17522
+ }
17523
+ __name(validateVerdict, "validateVerdict");
17524
+ function validateFindingsReport(value) {
17525
+ const report = object(value, "Canonical findings report");
17526
+ if (typeof report["outcomesRecorded"] !== "boolean") {
17527
+ throw new Error(
17528
+ "Canonical findings report.outcomesRecorded must be a boolean."
17529
+ );
17530
+ }
17531
+ const canonical = buildReport(validateFindings(report["findings"]));
17532
+ const supplied = {
17533
+ findings: report["findings"],
17534
+ counts: report["counts"],
17535
+ outcomesRecorded: report["outcomesRecorded"]
17536
+ };
17537
+ if (!isDeepStrictEqual(supplied, canonical)) {
17538
+ throw new Error(
17539
+ "Canonical findings report is malformed or inconsistent with its findings."
17540
+ );
17541
+ }
17542
+ return supplied;
17543
+ }
17544
+ __name(validateFindingsReport, "validateFindingsReport");
17545
+ function saveReviewArtifact(args) {
17546
+ const root = workspaceRoot();
17547
+ const findingsPath = workspacePath(root, args.findings, "Findings input");
17548
+ const composedPath = workspacePath(root, args.composed, "Composed input");
17549
+ const reportPath = workspacePath(root, args.report, "Markdown report");
17550
+ const outputPath = workspacePath(root, args.out, "Output");
17551
+ const reviewsRoot = resolve22(root, REVIEWS_DIR);
17552
+ if (!isWithin(reviewsRoot, reportPath) || reportPath === reviewsRoot) {
17553
+ throw new Error(
17554
+ `Markdown report must be a file under ${JSON.stringify(REVIEWS_DIR)}: ${JSON.stringify(args.report)}.`
17555
+ );
17556
+ }
17557
+ if (!isWithin(reviewsRoot, outputPath) || outputPath === reviewsRoot) {
17558
+ throw new Error(
17559
+ `Output must be a file under ${JSON.stringify(REVIEWS_DIR)}: ${JSON.stringify(args.out)}.`
17560
+ );
17561
+ }
17562
+ for (const [label2, inputPath] of [
17563
+ ["findings input", findingsPath],
17564
+ ["composed input", composedPath],
17565
+ ["Markdown report", reportPath]
17566
+ ]) {
17567
+ if (sameFile(outputPath, inputPath)) {
17568
+ throw new Error(`Output must not overwrite the ${label2}.`);
17569
+ }
17570
+ }
17571
+ rejectSymlinkPath(root, findingsPath, "Findings input");
17572
+ rejectSymlinkPath(root, composedPath, "Composed input");
17573
+ rejectSymlinkPath(root, reportPath, "Markdown report");
17574
+ rejectSymlinkPath(root, outputPath, "Output");
17575
+ if (!EFFORT_LEVELS.has(args.effort)) {
17576
+ throw new Error(
17577
+ `Unsupported review effort: ${JSON.stringify(args.effort)}.`
17578
+ );
17579
+ }
17580
+ if (args.effort === "low") {
17581
+ throw new Error(
17582
+ "save-artifact does not support low-effort reviews: low has no canonical composed verdict to persist."
17583
+ );
17584
+ }
17585
+ nonEmptyString(args.target, "Target");
17586
+ const findings = validateFindingsReport(
17587
+ readJson2(findingsPath, "canonical findings")
17588
+ );
17589
+ const verdict = validateVerdict(readJson2(composedPath, "composed verdict"));
17590
+ let reportIsFile;
17591
+ try {
17592
+ reportIsFile = statSync10(reportPath).isFile();
17593
+ } catch {
17594
+ }
17595
+ if (reportIsFile === false) {
17596
+ throw new Error(
17597
+ `Markdown report is not a file: ${JSON.stringify(args.report)}.`
17598
+ );
17599
+ }
17600
+ readText(reportPath, "Markdown report");
17601
+ const markdownReportPath = relative3(root, reportPath).split(sep4).join("/");
17602
+ const document = {
17603
+ schemaVersion: 1,
17604
+ target: args.target,
17605
+ effort: args.effort,
17606
+ verdict,
17607
+ findings: findings.findings,
17608
+ counts: findings.counts,
17609
+ outcomesRecorded: findings.outcomesRecorded,
17610
+ markdownReportPath
17611
+ };
17612
+ mkdirSync25(dirname23(outputPath), { recursive: true });
17613
+ atomicWriteFileSync(
17614
+ toNamespacedPath(outputPath),
17615
+ `${JSON.stringify(document, null, 2)}
17616
+ `,
17617
+ { encoding: "utf8", noFollow: true }
17618
+ );
17619
+ return {
17620
+ path: outputPath,
17621
+ workspacePath: relative3(root, outputPath).split(sep4).join("/")
17622
+ };
17623
+ }
17624
+ __name(saveReviewArtifact, "saveReviewArtifact");
17625
+ var saveArtifactCommand = {
17626
+ command: "save-artifact",
17627
+ describe: "Create a durable versioned code-review JSON document from canonical review artifacts",
17628
+ builder: /* @__PURE__ */ __name((yargs) => yargs.option("findings", {
17629
+ type: "string",
17630
+ demandOption: true,
17631
+ describe: "Canonical findings JSON"
17632
+ }).option("composed", {
17633
+ type: "string",
17634
+ demandOption: true,
17635
+ describe: "Composed verdict JSON"
17636
+ }).option("report", {
17637
+ type: "string",
17638
+ demandOption: true,
17639
+ describe: "Existing durable Markdown report"
17640
+ }).option("target", {
17641
+ type: "string",
17642
+ demandOption: true,
17643
+ describe: "Review target label"
17644
+ }).option("effort", {
17645
+ type: "string",
17646
+ choices: [...EFFORT_LEVELS].filter((effort) => effort !== "low"),
17647
+ demandOption: true,
17648
+ describe: "Resolved review effort"
17649
+ }).option("out", {
17650
+ type: "string",
17651
+ demandOption: true,
17652
+ describe: "Output path under .qwen/reviews/"
17653
+ }), "builder"),
17654
+ handler: /* @__PURE__ */ __name((argv) => {
17655
+ const saved = saveReviewArtifact(argv);
17656
+ writeStdoutLine(JSON.stringify(saved));
17657
+ writeStderrLine(`save-artifact: wrote ${saved.path}`);
17658
+ }, "handler")
17659
+ };
17660
+
17335
17661
  // packages/cli/src/commands/review.ts
17336
17662
  var reviewCommand = {
17337
17663
  command: "review",
17338
17664
  describe: "Run a review non-interactively (`run`), plus the internal helpers used by the /review skill (PR worktree setup, context fetch, rules loading, presubmit checks, cleanup)",
17339
- builder: /* @__PURE__ */ __name((yargs) => yargs.command(runCommand).command(parseArgsCommand).command(fetchPrCommand).command(captureLocalCommand).command(planDiffCommand).command(prContextCommand).command(commentStatusCommand).command(loadRulesCommand).command(agentPromptCommand).command(buildTestCommand).command(baseTreeCommand).command(testDeltaCommand).command(driveCommand).command(mockProviderCommand).command(extractStepCommand).command(scriptLintCommand).command(resolveAnchorsCommand).command(checkCoverageCommand).command(presubmitCommand).command(testEfficacyCommand).command(testPlanCommand).command(findingsCommand).command(publishAssetsCommand).command(composeReviewCommand).command(submitCommand).command(cleanupCommand).demandCommand(
17665
+ builder: /* @__PURE__ */ __name((yargs) => yargs.command(runCommand).command(parseArgsCommand).command(fetchPrCommand).command(captureLocalCommand).command(planDiffCommand).command(prContextCommand).command(commentStatusCommand).command(loadRulesCommand).command(agentPromptCommand).command(buildTestCommand).command(baseTreeCommand).command(testDeltaCommand).command(driveCommand).command(mockProviderCommand).command(extractStepCommand).command(scriptLintCommand).command(resolveAnchorsCommand).command(checkCoverageCommand).command(presubmitCommand).command(testEfficacyCommand).command(testPlanCommand).command(findingsCommand).command(publishAssetsCommand).command(composeReviewCommand).command(saveArtifactCommand).command(submitCommand).command(cleanupCommand).demandCommand(
17340
17666
  1,
17341
- "Specify a subcommand: run, parse-args, fetch-pr, capture-local, plan-diff, pr-context, comment-status, load-rules, agent-prompt, build-test, base-tree, test-delta, drive, mock-provider, extract-step, script-lint, resolve-anchors, check-coverage, presubmit, test-efficacy, test-plan, findings, publish-assets, compose-review, submit, or cleanup."
17667
+ "Specify a subcommand: run, parse-args, fetch-pr, capture-local, plan-diff, pr-context, comment-status, load-rules, agent-prompt, build-test, base-tree, test-delta, drive, mock-provider, extract-step, script-lint, resolve-anchors, check-coverage, presubmit, test-efficacy, test-plan, findings, publish-assets, compose-review, save-artifact, submit, or cleanup."
17342
17668
  ).version(false), "builder"),
17343
17669
  handler: /* @__PURE__ */ __name(() => {
17344
17670
  }, "handler")
@@ -17538,10 +17864,10 @@ var updateCommand3 = {
17538
17864
  stdioHelpers,
17539
17865
  { updateEventEmitter }
17540
17866
  ] = await Promise.all([
17541
- import("./settings-ILWAOKA4.js"),
17542
- import("./updateCheck-42SPCLH7.js"),
17543
- import("./installationInfo-IWMM6DPV.js"),
17544
- import("./standalone-update-Y5JB4S2K.js"),
17867
+ import("./settings-E6H3AURD.js"),
17868
+ import("./updateCheck-ZXRCGY66.js"),
17869
+ import("./installationInfo-OFDYLDFD.js"),
17870
+ import("./standalone-update-NYYZEHLD.js"),
17545
17871
  import("./stdioHelpers-HGIYTWAY.js"),
17546
17872
  import("./updateEventEmitter-5MKC7BLQ.js")
17547
17873
  ]);
@@ -18708,7 +19034,7 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
18708
19034
  disabledSlashCommands: disabledSlashCommands.length > 0 ? disabledSlashCommands : void 0,
18709
19035
  disabledSkillNamesProvider: bareMode || safeMode ? void 0 : disabledSkillNamesProvider,
18710
19036
  terminalImageRenderSupportProvider: interactive ? async () => {
18711
- const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-NWC2RALG.js");
19037
+ const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-QRSCS2BE.js");
18712
19038
  return getTerminalImageRenderSupport();
18713
19039
  } : void 0,
18714
19040
  disabledSkillLevels: bareMode || safeMode || !Array.isArray(settings.skills?.disabledLevels) ? void 0 : settings.skills.disabledLevels.filter(isSkillLevel),
@@ -18984,11 +19310,11 @@ var ExtensionRefreshState = class {
18984
19310
  contentChangedDuringReload = false;
18985
19311
  suppressionDepth = 0;
18986
19312
  suppressUntil = 0;
18987
- on(event, listener) {
18988
- this.events.on(event, listener);
19313
+ on(event2, listener) {
19314
+ this.events.on(event2, listener);
18989
19315
  }
18990
- off(event, listener) {
18991
- this.events.off(event, listener);
19316
+ off(event2, listener) {
19317
+ this.events.off(event2, listener);
18992
19318
  }
18993
19319
  markExtensionsChanged(reason) {
18994
19320
  if (this.isSuppressed()) {