@qwen-code/qwen-code 0.23.4 → 0.23.5-dev.codemode-responses.20260915.f024b37689

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 (232) hide show
  1. package/bundled/computer-use/SKILL.md +239 -22
  2. package/bundled/computer-use/references/windows-linux.md +3 -3
  3. package/bundled/qc-helper/docs/features/computer-use.md +2 -2
  4. package/bundled/qc-helper/docs/features/hooks.md +238 -75
  5. package/chunks/{MaxSizedBox-Q44AWRWI.js → MaxSizedBox-BFMIFJWT.js} +10 -10
  6. package/chunks/{StandaloneSessionPicker-UKII7M7U.js → StandaloneSessionPicker-4ZH7MOVG.js} +23 -23
  7. package/chunks/{acp-subagent-executor-7RUAOXE7.js → acp-subagent-executor-AHMVA4P3.js} +11 -11
  8. package/chunks/{acpAgent-5N3LHCO3.js → acpAgent-UMAJ3XR3.js} +43 -43
  9. package/chunks/{agent-LU5UJALC.js → agent-CXB2CCQN.js} +4 -4
  10. package/chunks/{agent-headless-LTLADUGR.js → agent-headless-7D5ZC736.js} +4 -4
  11. package/chunks/{bridge-P34XQP3D.js → bridge-A2WKX6IK.js} +11 -11
  12. package/chunks/{channel-settings-store-VE4ARRSR.js → channel-settings-store-AXJIN7HG.js} +15 -15
  13. package/chunks/{chunk-RJFUPP3F.js → chunk-3544ZEGZ.js} +2 -2
  14. package/chunks/{chunk-WLFILD4T.js → chunk-3CKAOJ4L.js} +2 -2
  15. package/chunks/{chunk-2P2IXKDR.js → chunk-4DTFTPTU.js} +1 -1
  16. package/chunks/{chunk-5JG3DAKS.js → chunk-4OQSG35W.js} +1 -1
  17. package/chunks/{chunk-E7HXORS7.js → chunk-54YUXX7X.js} +1 -1
  18. package/chunks/{chunk-2NRKLYID.js → chunk-5KJ54DY3.js} +12 -12
  19. package/chunks/{chunk-IUXWAKVS.js → chunk-5WLF44DS.js} +5 -5
  20. package/chunks/{chunk-RWKR4VNK.js → chunk-67ZDP7UX.js} +1 -1
  21. package/chunks/{chunk-WDB57HEI.js → chunk-6RQFMGN2.js} +3 -3
  22. package/chunks/{chunk-PNACDSCO.js → chunk-6XDB3FR4.js} +23 -23
  23. package/chunks/{chunk-BBMOAZ2E.js → chunk-6YUS5JCV.js} +3 -3
  24. package/chunks/{chunk-JZ3FFPES.js → chunk-A2UYI473.js} +5 -5
  25. package/chunks/{chunk-PCIYPEYV.js → chunk-C3YMBSLR.js} +3 -3
  26. package/chunks/{chunk-RKXAOP6F.js → chunk-DQ4LBRZN.js} +3 -3
  27. package/chunks/{chunk-UGEDTVL6.js → chunk-DWKFTUGI.js} +3 -3
  28. package/chunks/{chunk-PVKEYO5D.js → chunk-E7ZTAOJZ.js} +4 -4
  29. package/chunks/{chunk-P6XVYPWA.js → chunk-EQWKIA72.js} +22 -4
  30. package/chunks/{chunk-X7GOO6VM.js → chunk-EYLUKEYW.js} +1 -1
  31. package/chunks/{chunk-TRKIKBUW.js → chunk-FCLMJS6N.js} +1 -1
  32. package/chunks/{chunk-KLGCF6G7.js → chunk-FHSOZSBO.js} +2 -2
  33. package/chunks/{chunk-RHTNPDGD.js → chunk-FIP5QS2U.js} +1 -1
  34. package/chunks/{chunk-J4DRBDHX.js → chunk-FPPG5Y3W.js} +4 -4
  35. package/chunks/{chunk-62MWBTS7.js → chunk-FX6GJIPZ.js} +2 -2
  36. package/chunks/{chunk-TJDUJSVH.js → chunk-GFAK6DYU.js} +1 -1
  37. package/chunks/{chunk-H7L725Z6.js → chunk-GMCEFKNR.js} +8 -8
  38. package/chunks/{chunk-UUT7EFX3.js → chunk-GNKSR3FU.js} +1 -1
  39. package/chunks/{chunk-BDDE4YNP.js → chunk-HVSRWLOW.js} +3 -3
  40. package/chunks/{chunk-TW2RLZPC.js → chunk-HXMDDII6.js} +3 -3
  41. package/chunks/{chunk-E4XZSQXB.js → chunk-IANIY25T.js} +10 -10
  42. package/chunks/{chunk-3AYIKQTJ.js → chunk-IWOJ2FHG.js} +3 -3
  43. package/chunks/{chunk-7JGH6IMU.js → chunk-JIJ65YKA.js} +37 -5
  44. package/chunks/{chunk-UL4DXZMP.js → chunk-JLF2AQAL.js} +3 -3
  45. package/chunks/{chunk-MFPAVOYJ.js → chunk-JO67LVXW.js} +3 -3
  46. package/chunks/{chunk-4XP7WXC4.js → chunk-L5R4D5T4.js} +2 -2
  47. package/chunks/{chunk-7GKPKIUB.js → chunk-LBWIJ5T7.js} +1 -1
  48. package/chunks/{chunk-P225AM5U.js → chunk-LCAJ63TF.js} +1 -1
  49. package/chunks/{chunk-IR5CVY5G.js → chunk-LTINUI3O.js} +2 -2
  50. package/chunks/{chunk-SQCZDHBQ.js → chunk-MNRK6MIH.js} +3 -3
  51. package/chunks/{chunk-IGLX6UXJ.js → chunk-NJ4ZNDVP.js} +1 -1
  52. package/chunks/{chunk-LFNK4DGQ.js → chunk-PPE7VUMD.js} +1 -1
  53. package/chunks/{chunk-SYDMM6IX.js → chunk-Q4G2YPI4.js} +1 -1
  54. package/chunks/{chunk-ITOB3LRT.js → chunk-QI4WBHPF.js} +4 -4
  55. package/chunks/{chunk-L5BVU4JW.js → chunk-QJKR2P2K.js} +2 -2
  56. package/chunks/{chunk-6TFZIA2L.js → chunk-QLX4D55R.js} +1 -1
  57. package/chunks/{chunk-M6MID3FA.js → chunk-QS5Q5F42.js} +2 -2
  58. package/chunks/{chunk-FRISMWG3.js → chunk-QTUQV33C.js} +2 -2
  59. package/chunks/{chunk-WKQX4FND.js → chunk-R5OA3ONY.js} +3 -3
  60. package/chunks/{chunk-I6JRN375.js → chunk-RN6BU77T.js} +2 -2
  61. package/chunks/{chunk-PRWRNC64.js → chunk-S77FFY67.js} +1 -1
  62. package/chunks/{chunk-LMDMYMSS.js → chunk-SGXJQP5Q.js} +3 -3
  63. package/chunks/{chunk-65ANUQSV.js → chunk-SKYOAH4Z.js} +2 -2
  64. package/chunks/{chunk-VQ3SUPLA.js → chunk-SNT634Q6.js} +4 -4
  65. package/chunks/{chunk-7W2Y3PZD.js → chunk-TPEV2QHG.js} +4 -4
  66. package/chunks/{chunk-QM2MRAG4.js → chunk-TYBRGFYL.js} +40 -27
  67. package/chunks/{chunk-OXDQETZA.js → chunk-UCKM6KCJ.js} +1 -1
  68. package/chunks/{chunk-L56E7YUM.js → chunk-UQXURNLM.js} +1 -1
  69. package/chunks/{chunk-7ML2ZLQF.js → chunk-UY4OCBX4.js} +1 -1
  70. package/chunks/{chunk-K2DCZ6SZ.js → chunk-VI5UVPOB.js} +10 -10
  71. package/chunks/{chunk-ZXUKZHMV.js → chunk-W23HOFDK.js} +1 -1
  72. package/chunks/{chunk-VELFTVEO.js → chunk-WATHOB6X.js} +3 -3
  73. package/chunks/{chunk-DCRVSIK6.js → chunk-WBP64MZR.js} +79 -35
  74. package/chunks/{chunk-WMEX6CFP.js → chunk-XK4UQSIR.js} +1 -1
  75. package/chunks/{chunk-EOQXU3ZE.js → chunk-XKRYQOHS.js} +2 -2
  76. package/chunks/{chunk-F2IRY2TD.js → chunk-Y3ZXDBUL.js} +1 -1
  77. package/chunks/{chunk-ELHAQ5H4.js → chunk-YVWS4SLL.js} +2 -2
  78. package/chunks/{chunk-WNQRJXKP.js → chunk-Z6Q7I37O.js} +1 -1
  79. package/chunks/{chunk-O75ZXPOX.js → chunk-ZC75SULX.js} +1 -1
  80. package/chunks/{chunk-JLZ5YCMV.js → chunk-ZOQ6HC7U.js} +2 -2
  81. package/chunks/{chunk-DGTH4BSO.js → chunk-ZUKC5J6Q.js} +10 -10
  82. package/chunks/{codex-subagent-executor-WCRCJMQK.js → codex-subagent-executor-LANZAZPH.js} +11 -11
  83. package/chunks/{config-utils-73C3RGYN.js → config-utils-CRK2LQPA.js} +10 -10
  84. package/chunks/{contextCommand-4ZDPQJHD.js → contextCommand-GY5X3LIY.js} +11 -11
  85. package/chunks/{core-runtime-ZDUA5DYE.js → core-runtime-IJIV2LHP.js} +10 -10
  86. package/chunks/{create-sub-session-JK3SSJKO.js → create-sub-session-MNIVRHGB.js} +11 -11
  87. package/chunks/{daemon-git-worktree-guard-QU2CCJIE.js → daemon-git-worktree-guard-W6Z2BGDH.js} +10 -10
  88. package/chunks/{daemon-status-provider-2PO7NLDQ.js → daemon-status-provider-TJF3APU3.js} +15 -15
  89. package/chunks/{daemon-trust-policy-IMDTIUWB.js → daemon-trust-policy-6INCISDU.js} +15 -15
  90. package/chunks/{daemon-trust-policy-monitor-6IVBNUAD.js → daemon-trust-policy-monitor-JRTAQG54.js} +15 -15
  91. package/chunks/{deferred-core-runtime-3AZUE7F3.js → deferred-core-runtime-2JRTPTNM.js} +10 -10
  92. package/chunks/{edit-HXMBABZU.js → edit-JDIXXCYB.js} +4 -4
  93. package/chunks/{enterPlanMode-KAMW2I2C.js → enterPlanMode-YTNTBZBN.js} +4 -4
  94. package/chunks/{environment-HYMXOTVB.js → environment-UAI5L52V.js} +12 -12
  95. package/chunks/{errors-NQRH7NAM.js → errors-J4UCDCW5.js} +12 -12
  96. package/chunks/{exitPlanMode-SMEBS5EF.js → exitPlanMode-YMWJ2EO7.js} +4 -4
  97. package/chunks/{fast-path-CUWUTJUR.js → fast-path-MBAN7TK3.js} +2 -2
  98. package/chunks/{glob-VOM5DVZ3.js → glob-YEM24E3Z.js} +4 -4
  99. package/chunks/{goal-tools-YBYJ5KPM.js → goal-tools-LJIVH5T6.js} +4 -4
  100. package/chunks/{handleAutoUpdate-4CEHNJ2F.js → handleAutoUpdate-DYCSYDYL.js} +12 -12
  101. package/chunks/{i18n-G7ODGUGN.js → i18n-PTAV7SN3.js} +10 -10
  102. package/chunks/{initializer-GZ73HSOA.js → initializer-MPXTKQA4.js} +15 -15
  103. package/chunks/{installationInfo-PV472I52.js → installationInfo-U5EFA3OL.js} +10 -10
  104. package/chunks/{list-D4A7LFOF.js → list-YOE25QUI.js} +18 -18
  105. package/chunks/{llm-PJU4VT3K.js → llm-ZZ2WNQMC.js} +42 -42
  106. package/chunks/{llm-content-generator-ITOMDK65.js → llm-content-generator-CG2HRJZC.js} +2 -2
  107. package/chunks/{loadedSettingsAdapter-NNU4BY5Q.js → loadedSettingsAdapter-NPGWGURF.js} +15 -15
  108. package/chunks/{loggingContentGenerator-SMI2AJYY.js → loggingContentGenerator-TUL6SJVL.js} +5 -5
  109. package/chunks/{managed-npm-update-AN5RDI5D.js → managed-npm-update-YUDSCJP3.js} +10 -10
  110. package/chunks/{mcp-RIIEZ7NJ.js → mcp-EX3GDQVO.js} +15 -15
  111. package/chunks/{model-configuration-E5M35A3M.js → model-configuration-6DEKTXJI.js} +15 -15
  112. package/chunks/{modelConfigUtils-43SY2EDS.js → modelConfigUtils-4NA2MHEE.js} +11 -11
  113. package/chunks/{monitor-5WYDOXLI.js → monitor-PPUGNAWR.js} +4 -4
  114. package/chunks/{nonInteractiveCli-D3YFYXNB.js → nonInteractiveCli-6TW2XYP5.js} +37 -37
  115. package/chunks/{notebook-edit-GQNFJTIR.js → notebook-edit-4MUXHZHT.js} +4 -4
  116. package/chunks/{openaiContentGenerator-VJAKFZ32.js → openaiContentGenerator-5J73W5XZ.js} +3 -3
  117. package/chunks/{pidfile-I5SWEJDX.js → pidfile-M7WELKBB.js} +10 -10
  118. package/chunks/{processUtils-NSYM3SKR.js → processUtils-SPRINFNY.js} +2 -2
  119. package/chunks/{prompt-terminal-ledger-KWBANHUE.js → prompt-terminal-ledger-25BRD7FX.js} +11 -11
  120. package/chunks/{qwenContentGenerator-LR6HNFBU.js → qwenContentGenerator-H5AAKXPC.js} +5 -5
  121. package/chunks/{read-file-LOSUPKDX.js → read-file-ILGEFPB3.js} +2 -2
  122. package/chunks/{resumeHistoryUtils-6IFK3MQO.js → resumeHistoryUtils-RB52QOCH.js} +11 -11
  123. package/chunks/{ripGrep-MBSYRHNP.js → ripGrep-O6QAFHQK.js} +3 -3
  124. package/chunks/{run-qwen-serve-WYEEYIHV.js → run-qwen-serve-5NO3TKUL.js} +38 -38
  125. package/chunks/{runtime-FVTTOB4E.js → runtime-G2YUYMSZ.js} +16 -16
  126. package/chunks/{scheduled-tasks-RN6DUY7E.js → scheduled-tasks-HDHV3URA.js} +14 -14
  127. package/chunks/{scheduler-T7DDWINW.js → scheduler-6MDJX2ZK.js} +12 -12
  128. package/chunks/{serve-LVMPJBTV.js → serve-Z2EJQYKB.js} +15 -15
  129. package/chunks/{server-U7K7EJEP.js → server-JTNBK3LH.js} +38 -38
  130. package/chunks/{session-BQNC5QUN.js → session-5YK2BXH4.js} +38 -38
  131. package/chunks/{session-attachments-root-LQDHWZST.js → session-attachments-root-QO3VFJS6.js} +10 -10
  132. package/chunks/{session-pr-refresh-J7DQYX2I.js → session-pr-refresh-OTK3HCJZ.js} +13 -13
  133. package/chunks/{settings-WAWJIZHR.js → settings-2VKLACYV.js} +14 -14
  134. package/chunks/{shell-WFJEYGQI.js → shell-64NAVGMS.js} +4 -4
  135. package/chunks/{skill-RHQWSDOK.js → skill-R3ALMLLM.js} +2 -2
  136. package/chunks/{skill-settings-ALFUQQD6.js → skill-settings-HZ34TUMP.js} +14 -14
  137. package/chunks/{spawnChannel-D35CB5JB.js → spawnChannel-XGFWHEIK.js} +10 -10
  138. package/chunks/{standalone-update-NMMY6CAO.js → standalone-update-R32Y3XRR.js} +11 -11
  139. package/chunks/{start-opentui-ui-F6BN46GE.js → start-opentui-ui-YGJOUE2H.js} +50 -49
  140. package/chunks/{startInteractiveUI-E6U7L5AD.js → startInteractiveUI-5ZEVKSFF.js} +57 -56
  141. package/chunks/{team-create-DKAJ3OUY.js → team-create-GCVUXJLE.js} +4 -4
  142. package/chunks/{team-plan-approval-ZUG32DAK.js → team-plan-approval-NOL62FJD.js} +4 -4
  143. package/chunks/{terminal-image-renderer-U3Z5PMGO.js → terminal-image-renderer-WG5TLPGC.js} +10 -10
  144. package/chunks/{theme-manager-GA65ZFKB.js → theme-manager-HDS4YFPW.js} +10 -10
  145. package/chunks/{tool-search-XCEN7VXX.js → tool-search-HMT5GYUR.js} +2 -2
  146. package/chunks/{total-session-admission-FZSHBR32.js → total-session-admission-Y5RCHEXO.js} +11 -11
  147. package/chunks/{tree-sitter-4D7QS7F6.js → tree-sitter-LSORDVZ3.js} +1 -1
  148. package/chunks/{tree-sitter-bash-VEJGF5XF.js → tree-sitter-bash-UARELQ6C.js} +1 -1
  149. package/chunks/{trustedFolders-SXPNZESV.js → trustedFolders-3Y2WCXMR.js} +11 -11
  150. package/chunks/{update-relaunch-QOUTZZ7Q.js → update-relaunch-MTJ32SLF.js} +5 -5
  151. package/chunks/{updateCheck-DYRX7M34.js → updateCheck-YFX3VY6O.js} +10 -10
  152. package/chunks/{useAutoAcceptIndicator-QOG7LUT3.js → useAutoAcceptIndicator-FCHNQPMD.js} +16 -16
  153. package/chunks/{validateNonInterActiveAuth-FJPAEMDD.js → validateNonInterActiveAuth-HUFQKCGG.js} +35 -35
  154. package/chunks/{version-5IC46F2Z.js → version-S5TGWCA3.js} +1 -1
  155. package/chunks/{web-fetch-WSW4QZBA.js → web-fetch-23M7BYHB.js} +2 -2
  156. package/chunks/{web-search-5QFKXWUV.js → web-search-F5PNIQUA.js} +9 -3
  157. package/chunks/{workflow-ZF4DLK4V.js → workflow-BLJLID2C.js} +5 -5
  158. package/chunks/{workspace-providers-status-4E4XWBFS.js → workspace-providers-status-UH7KLZDT.js} +17 -17
  159. package/chunks/{workspace-registration-store-M3QEP27F.js → workspace-registration-store-3SA3V7BA.js} +1 -1
  160. package/chunks/{workspace-registry-H2ENI5G2.js → workspace-registry-C6C6EKQ5.js} +11 -11
  161. package/chunks/{workspace-runtime-coordinator-CRRNB7PC.js → workspace-runtime-coordinator-RAI6XDJB.js} +11 -11
  162. package/chunks/{workspace-service-GJ2GOHKU.js → workspace-service-H7UTJYJU.js} +16 -16
  163. package/chunks/{workspace-skills-status-CRWHV35X.js → workspace-skills-status-FPVC7XXK.js} +15 -15
  164. package/chunks/{workspace-trust-reconciler-GG2JA7KI.js → workspace-trust-reconciler-JS7A6UIF.js} +16 -16
  165. package/chunks/{write-file-LZ4EMF36.js → write-file-GQGG7NBQ.js} +5 -5
  166. package/chunks/{zoom-image-J5IMS3WD.js → zoom-image-EC43KL4H.js} +2 -2
  167. package/cli.js +12 -12
  168. package/export-transcript-document.js +1 -1
  169. package/package.json +3 -3
  170. package/web-shell/assets/{abnfDiagram-VCTEODGH-S_JCiANq.js → abnfDiagram-VCTEODGH-BtpzKw3A.js} +1 -1
  171. package/web-shell/assets/{arc-DP-839Xn.js → arc-CQiVKZJP.js} +1 -1
  172. package/web-shell/assets/{architectureDiagram-5GKGNRK7-C8rCd2KK.js → architectureDiagram-5GKGNRK7-ekIPBb2d.js} +1 -1
  173. package/web-shell/assets/{blockDiagram-NRAW4CY4-DQR82jwr.js → blockDiagram-NRAW4CY4-BrRWkWri.js} +1 -1
  174. package/web-shell/assets/{c4Diagram-UCG6FXSJ-D21PNMRP.js → c4Diagram-UCG6FXSJ-qYS8CYZ3.js} +1 -1
  175. package/web-shell/assets/channel-DSQQnOZj.js +1 -0
  176. package/web-shell/assets/{chunk-2Q5K7J3B-KdDInGLi.js → chunk-2Q5K7J3B-ZasyyEZm.js} +1 -1
  177. package/web-shell/assets/{chunk-5VM5RSS4-ltb7zRmH.js → chunk-5VM5RSS4-C_IzCGeA.js} +1 -1
  178. package/web-shell/assets/{chunk-F27PBJKO-DcpQA0Ng.js → chunk-F27PBJKO-C25NZOyD.js} +1 -1
  179. package/web-shell/assets/{chunk-G27WJ6UU-C8NDZxcy.js → chunk-G27WJ6UU-XPOHNSGX.js} +1 -1
  180. package/web-shell/assets/{chunk-JWPE2WC7-hXhhHTs1.js → chunk-JWPE2WC7-BQBh0Xni.js} +1 -1
  181. package/web-shell/assets/{chunk-LCL6LL3I-CLaOR-Hl.js → chunk-LCL6LL3I-CoShjpX7.js} +1 -1
  182. package/web-shell/assets/{chunk-POPQ4Y6H-Y5_qlB1N.js → chunk-POPQ4Y6H-BwRmCDSz.js} +1 -1
  183. package/web-shell/assets/{chunk-SVP7TREG-BWX2Voh7.js → chunk-SVP7TREG-DSzE5-Mw.js} +1 -1
  184. package/web-shell/assets/{chunk-XXDRQBXY-1wmj_kXI.js → chunk-XXDRQBXY-BQSQv30h.js} +1 -1
  185. package/web-shell/assets/classDiagram-DTDB5LWJ-V94ta08R.js +1 -0
  186. package/web-shell/assets/classDiagram-v2-JRS7N3AN-V94ta08R.js +1 -0
  187. package/web-shell/assets/{cose-bilkent-JH36ORCC-DpLc-cdd.js → cose-bilkent-JH36ORCC-XVUVTHVo.js} +1 -1
  188. package/web-shell/assets/{cynefin-OW5HDTMX-DhxGiPZW.js → cynefin-OW5HDTMX-CrsKx4lQ.js} +1 -1
  189. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dl3jfBry.js → cynefinDiagram-5FMLGOSQ-BPeZEuHw.js} +1 -1
  190. package/web-shell/assets/{dagre-3AP2YEHR-C8FA8vJk.js → dagre-3AP2YEHR-D31cQ2Qs.js} +1 -1
  191. package/web-shell/assets/{diagram-S7CK7UJ4-D-quIUtW.js → diagram-S7CK7UJ4-zyiG097Q.js} +1 -1
  192. package/web-shell/assets/{diagram-UQ7AKVKN-Bjo09Uts.js → diagram-UQ7AKVKN-Br3vtfsy.js} +1 -1
  193. package/web-shell/assets/{diagram-VSXAHHWV-IoI3ttq4.js → diagram-VSXAHHWV-Bxkhjx4u.js} +1 -1
  194. package/web-shell/assets/{diagram-VX7I27RA-BKyOZ5SO.js → diagram-VX7I27RA-BQH8QiDk.js} +1 -1
  195. package/web-shell/assets/{diagram-Z3DM3KII-Cu_OHEhw.js → diagram-Z3DM3KII-B_aQ1cw0.js} +1 -1
  196. package/web-shell/assets/{ebnfDiagram-PWID7BFC-UVB-bbPg.js → ebnfDiagram-PWID7BFC-B9N7BRQE.js} +1 -1
  197. package/web-shell/assets/{erDiagram-SSCWMZ5O-l8drddto.js → erDiagram-SSCWMZ5O-Cx6Hb1Re.js} +1 -1
  198. package/web-shell/assets/{flowDiagram-A5DVABFB-DU1I_VAI.js → flowDiagram-A5DVABFB-DTuLP7GU.js} +1 -1
  199. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BLRH05uB.js → ganttDiagram-EL5Y4UJY-DYS3d-sL.js} +1 -1
  200. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Czg_BkRE.js → gitGraphDiagram-WWUBYQGX-Cp0EGx04.js} +1 -1
  201. package/web-shell/assets/{index-CmMV8Jla.js → index-45-LkPDB.js} +1 -1
  202. package/web-shell/assets/{index-DyMtNYuu.js → index-H8um-iEl.js} +3 -3
  203. package/web-shell/assets/{infoDiagram-RXCK75RN-BpBvjkro.js → infoDiagram-RXCK75RN-9--kukiT.js} +1 -1
  204. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-phy1l3jm.js → ishikawaDiagram-5VMMS53U-CGBdsDLD.js} +1 -1
  205. package/web-shell/assets/{journeyDiagram-EYS64GPL-oY-9LgVS.js → journeyDiagram-EYS64GPL-DeXhcscd.js} +1 -1
  206. package/web-shell/assets/{kanban-definition-3QL26DDD-slZoy-sc.js → kanban-definition-3QL26DDD-CFdvsU3b.js} +1 -1
  207. package/web-shell/assets/{layout-0hnn_P9l.js → layout-DAnwQ3KB.js} +1 -1
  208. package/web-shell/assets/{linear-7Wqe8DRy.js → linear-CTo7v7Nh.js} +1 -1
  209. package/web-shell/assets/{mermaid.core-BaK8n0bq.js → mermaid.core-jggSxF1i.js} +6 -6
  210. package/web-shell/assets/{mindmap-definition-FBJOCRG2-BedUdy_E.js → mindmap-definition-FBJOCRG2-DzIepvlJ.js} +1 -1
  211. package/web-shell/assets/{pegDiagram-XKGWAZYB-DQLRdmxq.js → pegDiagram-XKGWAZYB-BFGS9GJv.js} +1 -1
  212. package/web-shell/assets/{pieDiagram-E7YTZNPT-UC20w9-5.js → pieDiagram-E7YTZNPT-B2UUcNIT.js} +1 -1
  213. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CQx2Hmk3.js → quadrantDiagram-AXDQQJYC-BgM6htrX.js} +1 -1
  214. package/web-shell/assets/{railroadDiagram-O6MQD6OU-2UEJe_y-.js → railroadDiagram-O6MQD6OU-Dk9cS7N-.js} +1 -1
  215. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-DOAJggB4.js → requirementDiagram-EFPCY7ZU-C9oRg7xi.js} +1 -1
  216. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-DnQ_qJo7.js → sankeyDiagram-P5KCCOFB-B-_c7GzI.js} +1 -1
  217. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DZrZUoCo.js → sequenceDiagram-WJ2MYXX4-R0M-347u.js} +1 -1
  218. package/web-shell/assets/{sizeCapture-X5ZJPWSS-B5G4GDQB.js → sizeCapture-X5ZJPWSS-Df0f8UAW.js} +1 -1
  219. package/web-shell/assets/{stateDiagram-HBIQ2CUA-Bn1cT0qF.js → stateDiagram-HBIQ2CUA-CsUEfAA-.js} +1 -1
  220. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CnSuTPJ2.js +1 -0
  221. package/web-shell/assets/{swimlanes-XN3QIQJK-Bzhcdn87.js → swimlanes-XN3QIQJK-9OGHVSrx.js} +1 -1
  222. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Bb7TcWQw.js +8 -0
  223. package/web-shell/assets/{timeline-definition-24CTP7MA-BqZ_3D10.js → timeline-definition-24CTP7MA-DAfGqS2B.js} +1 -1
  224. package/web-shell/assets/{vennDiagram-4TSXK5OY-z9kw1kmm.js → vennDiagram-4TSXK5OY-CKATpwHi.js} +1 -1
  225. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-Cydp1zJW.js → wardleyDiagram-VM6X3IG4-CQHdhTrm.js} +1 -1
  226. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-j4X1lQKo.js → xychartDiagram-S5SC5T6Z-5k9NLqlY.js} +1 -1
  227. package/web-shell/index.html +1 -1
  228. package/web-shell/assets/channel-BgGrpX_z.js +0 -1
  229. package/web-shell/assets/classDiagram-DTDB5LWJ-jUH7ADYs.js +0 -1
  230. package/web-shell/assets/classDiagram-v2-JRS7N3AN-jUH7ADYs.js +0 -1
  231. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BF3xtNvJ.js +0 -1
  232. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-B753mA3E.js +0 -8
@@ -9,25 +9,56 @@ description: Control local desktop applications through Computer Use for tasks t
9
9
  - Do not use other technologies besides `node_repl` for computer interactions, unless specifically requested by the user (e.g. AppleScript, `osascript`, JXA, System Events, synthesized input).
10
10
  - Prefer a dedicated plugin or skill when it can complete the task; use Computer Use for app interactions that are not exposed through a more specific interface.
11
11
  - `node_repl` state is persistent across calls.
12
- - For text output, use `nodeRepl.write(...)`. `nodeRepl.write(...)` takes a string. If you would like to read a whole object, wrap it with `JSON.stringify(...)`.
12
+ - For text output, use `nodeRepl.write(...)`. It takes a string; use `JSON.stringify(...)` only for textual metadata. For an observation, write its `.text` and emit its screenshots as images; do not stringify an observation or driver result containing image bytes.
13
+ - Omit `yield_time_ms` for ordinary UI calls to use the default 10-second wait. A shorter yield does not speed up the action and can add a `node_repl_wait` round. Use a shorter yield only when you need control back before completion; if a cell is still running, collect its result with `node_repl_wait` before issuing dependent actions.
14
+
15
+ ## Forwarding results in Codex code mode
16
+
17
+ When calling `node_repl` through `tools.*` inside Codex's outer `functions.exec`,
18
+ forward each returned `content` block by its type. `nodeRepl.emitImage(...)`
19
+ produces an MCP image block; the outer script must pass that block to `image()`
20
+ for the model to receive an image. Use the tool name exposed by your MCP server:
21
+
22
+ ```js
23
+ const result = await tools.mcp__node_repl__node_repl({ code });
24
+ for (const block of result.content ?? []) {
25
+ if (block.type === 'text') {
26
+ text(block.text);
27
+ } else if (block.type === 'image') {
28
+ image(block);
29
+ }
30
+ }
31
+ ```
32
+
33
+ Here `code` is the JavaScript to run in the persistent Node REPL. Keep the
34
+ forwarding loop in the outer code-mode script, outside that `code` string.
35
+ Apply the same loop to `node_repl_wait` results: images may arrive only when a
36
+ running cell completes. Forward text blocks too, including running-cell IDs and
37
+ errors. Direct MCP tool calls do not need this outer forwarding loop.
38
+
39
+ Do not use `text(result)`, `text(block)`, or `JSON.stringify(result)` to forward
40
+ an MCP result containing images: this turns image base64 into text, consuming
41
+ context without showing the image. `image()` accepts one image block, not the
42
+ whole result, so do not use `image(result)` either.
13
43
 
14
44
  ## Bootstrap
15
45
 
16
46
  If `node_repl` is unavailable, run:
17
47
 
18
48
  ```bash
19
- qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.4
20
- npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.7
49
+ qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.5
50
+ npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.8
21
51
  ```
22
52
 
23
53
  Tell the user to restart Qwen Code, then stop. If only the SDK import is missing,
24
54
  run the second command and retry.
25
55
 
26
56
  Reuse an existing `computer` connected to the intended desktop. Otherwise import
27
- the `ComputerUse` API once per fresh `node_repl` session. Combine initialization,
28
- connected-platform discovery and the selected resource read in one call. Set
29
- `skillBase` to the absolute Skill base directory of this `SKILL.md`, as shown by
30
- the skill loader or the file you just read:
57
+ the `ComputerUse` API once per fresh `node_repl` session. Combine initialization
58
+ and connected-platform discovery in one call. Linux uses the complete workflow below
59
+ in this file. macOS and Windows also read their selected resource in that call;
60
+ set `skillBase` to the absolute Skill base directory shown by the skill loader
61
+ or the file you just read:
31
62
 
32
63
  ```js
33
64
  globalThis.computer = await (
@@ -37,16 +68,19 @@ var platform = await computer.getPlatform();
37
68
  var reference = {
38
69
  macos: 'macos.md',
39
70
  windows: 'windows-linux.md',
40
- linux: 'windows-linux.md',
41
71
  }[platform];
42
- if (!reference) throw new Error('Unsupported connected platform');
43
- var skillBase = '/absolute/path/to/computer-use';
72
+ if (!reference && platform !== 'linux') {
73
+ throw new Error('Unsupported connected platform');
74
+ }
44
75
  nodeRepl.write(`Connected platform: ${platform}`);
45
- nodeRepl.write(
46
- await (
47
- await import('node:fs/promises')
48
- ).readFile(`${skillBase}/references/${reference}`, 'utf8'),
49
- );
76
+ if (reference) {
77
+ var skillBase = '/absolute/path/to/computer-use';
78
+ nodeRepl.write(
79
+ await (
80
+ await import('node:fs/promises')
81
+ ).readFile(`${skillBase}/references/${reference}`, 'utf8'),
82
+ );
83
+ }
50
84
  ```
51
85
 
52
86
  If the returned platform is `macos` and the task already identifies an
@@ -72,15 +106,198 @@ Use this returned platform, not the CLI or Node host operating system. A connect
72
106
  driver may control a different machine. If the platform cannot be determined,
73
107
  resolve the reported driver/SDK error before continuing; do not guess a platform.
74
108
 
75
- The initialization call above reads exactly one resource. If filesystem imports
76
- are unavailable, use the following fallback before any UI work.
109
+ For Linux, use the workflow below directly; no additional skill file is needed.
110
+ For macOS or Windows, initialization reads exactly one resource. If filesystem
111
+ imports are unavailable, use the following fallback before any UI work.
77
112
  Read exactly one resource with `read_file`, resolving its absolute path from the
78
113
  Skill base directory shown above:
79
114
 
80
115
  - `macos`: read `references/macos.md` for the App workflow and text operations.
81
- - `windows` or `linux`: read `references/windows-linux.md` for the exact-window workflow.
116
+ - `windows`: read `references/windows-linux.md` for the exact-window workflow.
117
+
118
+ On macOS and Windows, read the selected resource before taking actions. Once it
119
+ has been printed in the initialization result, do not read it again. After
120
+ changing the connected desktop, query its platform again and follow that
121
+ platform’s workflow. Resource files remain on the machine hosting this Skill;
122
+ do not look for them on the controlled desktop.
123
+
124
+ ## Linux Computer Use
125
+
126
+ Use this workflow when `computer.getPlatform()` returns `linux`. The bootstrap
127
+ above has already initialized `computer`. This workflow is complete in this
128
+ `computer-use/SKILL.md` file.
129
+
130
+ ### Targeting and input
131
+
132
+ Keep the observed process ID, window ID and element tokens. Input delivery is
133
+ managed by the runtime: it chooses a semantic action where available and prepares
134
+ the exact window's focus when native keyboard or pointer input requires it.
135
+
136
+ ```ts
137
+ type WindowTarget = { pid: number; windowId: number };
138
+ type ElementTarget = { pid: number; windowId?: number; elementToken: string };
139
+ type CoordinateTarget = WindowTarget & { x: number; y: number };
140
+ type PointOrElementTarget = CoordinateTarget | ElementTarget;
141
+ type ExactActionTarget = WindowTarget | ElementTarget;
142
+
143
+ type ComputerUse = {
144
+ listApps(): Promise<
145
+ Array<{
146
+ name?: string;
147
+ bundle_id?: string;
148
+ pid?: number;
149
+ running?: boolean;
150
+ }>
151
+ >;
152
+ listWindows(args: { pid: number; onScreenOnly?: boolean }): Promise<
153
+ Array<{
154
+ window_id: number;
155
+ title?: string;
156
+ is_on_screen?: boolean;
157
+ }>
158
+ >;
159
+ observeWindow(
160
+ args: WindowTarget & {
161
+ disableDiff?: boolean;
162
+ includeScreenshot?: boolean;
163
+ maxTextChars?: number;
164
+ },
165
+ ): Promise<WindowObservation>;
166
+ click(
167
+ args: PointOrElementTarget & {
168
+ button?: 'left' | 'right' | 'middle';
169
+ count?: number;
170
+ },
171
+ ): Promise<object>;
172
+ doubleClick(args: PointOrElementTarget): Promise<object>;
173
+ rightClick(
174
+ args: PointOrElementTarget & { modifier?: string[] },
175
+ ): Promise<object>;
176
+ drag(
177
+ args: WindowTarget & {
178
+ fromX: number;
179
+ fromY: number;
180
+ toX: number;
181
+ toY: number;
182
+ },
183
+ ): Promise<object>;
184
+ scroll(
185
+ args: PointOrElementTarget & {
186
+ direction: 'up' | 'down' | 'left' | 'right';
187
+ amount?: number;
188
+ },
189
+ ): Promise<object>;
190
+ pressKey(
191
+ args: ExactActionTarget & { key: string; modifiers?: string[] },
192
+ ): Promise<object>;
193
+ hotkey(args: ExactActionTarget & { keys: string[] }): Promise<object>;
194
+ typeText(args: ExactActionTarget & { text: string }): Promise<object>;
195
+ setValue(args: ElementTarget & { value: string }): Promise<object>;
196
+ performSecondaryAction(
197
+ args: ElementTarget & { action: string },
198
+ ): Promise<object>;
199
+ close(): Promise<void>;
200
+ };
201
+
202
+ type WindowObservation = {
203
+ pid: number;
204
+ windowId: number;
205
+ mode: 'full' | 'diff' | 'no_change';
206
+ text: string;
207
+ elements: Array<{
208
+ element_token?: string;
209
+ role?: string;
210
+ label?: string;
211
+ value?: unknown;
212
+ actions?: string[];
213
+ }>;
214
+ screenshot?: { images: Array<{ mimeType: string; dataBase64: string }> };
215
+ };
216
+ ```
217
+
218
+ ### Discover and observe
219
+
220
+ Filter the app named by the task, then select its intended window from the
221
+ observed titles. If either is ambiguous, print the candidates before choosing.
222
+ Do not assume the first window is the task window.
223
+
224
+ ```js
225
+ var apps = await computer.listApps();
226
+ nodeRepl.write(JSON.stringify(apps.filter((app) => app.name === 'Target App')));
227
+ // Use the matching app's observed PID.
228
+ var windows = await computer.listWindows({
229
+ pid: targetPid,
230
+ onScreenOnly: true,
231
+ });
232
+ nodeRepl.write(JSON.stringify(windows));
233
+ // Use the selected window's observed ID.
234
+ var target = { pid: targetPid, windowId: selectedWindowId };
235
+ var state = await computer.observeWindow(target);
236
+ nodeRepl.write(state.text);
237
+ ```
238
+
239
+ Combine discovery, selection and observation in one cell when the target is
240
+ unambiguous. If the app is unknown, print `await computer.listApps()` first.
241
+ Reuse `computer` and the selected target across calls.
242
+
243
+ Observations default to text diffs. `state.elements` is the full current
244
+ captured element list even when `.text` reports a diff or no change. Use tokens
245
+ from that list; unchanged tokens remain usable across observations. After a
246
+ capture read failure, use only tokens issued by the latest observation.
247
+
248
+ Text is limited to 12,000 characters by default. Filter the elements for controls
249
+ you need, or request `disableDiff: true` with a larger `maxTextChars` (minimum
250
+ 512). An omitted row does not prove absence. If you discarded earlier text,
251
+ request a full tree the next time you read accessibility text.
252
+
253
+ ### Act and verify
254
+
255
+ Prefer current element tokens. Use screenshot coordinates for controls whose
256
+ accessibility actions or text are unavailable. Coordinates are pixels in the
257
+ PNG for that exact window, measured from its top-left corner. Accessibility
258
+ `frame` values are screen-space logical points; do not use them as PNG pixels.
259
+
260
+ Batch only actions whose target remains the same, then observe:
261
+
262
+ ```js
263
+ await computer.click({ pid: target.pid, elementToken });
264
+ await computer.typeText({ ...target, text: 'hello' });
265
+ nodeRepl.write((await computer.observeWindow(target)).text);
266
+ ```
267
+
268
+ End the batch when opening a dialog or menu. For a dialog, list windows and
269
+ observe the matching window before typing. For a menu in the same window,
270
+ refresh its observation and use current menu tokens. Never guess a window ID.
271
+
272
+ The runtime may retry focus preparation before sending input. An action error,
273
+ cancellation, `suspected_noop` or `unverifiable` result does not establish that
274
+ nothing happened. Observe the current windows and state before deciding to
275
+ repeat an action. Do not blindly replay the previous batch or token.
276
+
277
+ `pressKey` accepts one key and optional modifiers; `hotkey` accepts a combination
278
+ such as `{ ...target, keys: ['ctrl', 'c'] }`. `performSecondaryAction` requires an
279
+ action actually exposed by that element. Newlines in `typeText` can submit forms
280
+ or send messages instead of inserting a line break.
281
+
282
+ ### Read screenshots
283
+
284
+ Request the screenshot explicitly, print only the observation's text, and emit
285
+ each image:
286
+
287
+ ```js
288
+ var state = await computer.observeWindow({
289
+ ...target,
290
+ includeScreenshot: true,
291
+ });
292
+ nodeRepl.write(state.text);
293
+ for (const image of state.screenshot?.images ?? []) {
294
+ await nodeRepl.emitImage(`data:${image.mimeType};base64,${image.dataBase64}`);
295
+ }
296
+ ```
297
+
298
+ Do not stringify the whole observation or a raw driver result containing image
299
+ bytes. In outer code mode, also forward each returned image block with `image()`
300
+ as shown in the shared entrypoint, including images from `node_repl_wait`.
82
301
 
83
- Read the selected resource before taking actions. Once it has been printed in the
84
- initialization result, do not read it again. After changing the connected desktop,
85
- query its platform again and read the matching resource. Resource files remain on
86
- the machine hosting this Skill; do not look for them on the controlled desktop.
302
+ When all Computer Use work is complete, call `await computer.close()` and clear
303
+ `globalThis.computer`. Reset the REPL only when no other persistent state is needed.
@@ -1,7 +1,7 @@
1
- # Windows and Linux Computer Use
1
+ # Windows Computer Use
2
2
 
3
- Use this workflow only when `computer.getPlatform()` returned `windows` or
4
- `linux`. The shared entrypoint has already initialized `computer`.
3
+ Use this workflow only when `computer.getPlatform()` returned `windows`.
4
+ The shared entrypoint has already initialized `computer`.
5
5
 
6
6
  ## API surface
7
7
 
@@ -25,8 +25,8 @@ Node.js 22 or later and npm are required.
25
25
  When first used, the skill runs these commands itself:
26
26
 
27
27
  ```bash
28
- qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.4
29
- npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.7
28
+ qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.5
29
+ npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.8
30
30
  ```
31
31
 
32
32
  Restart Qwen Code after the MCP server is first added. The skill then resumes