@qwen-code/qwen-code 0.24.5-preview.0 → 0.24.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 (353) hide show
  1. package/bundled/browser-use/SKILL.md +11 -10
  2. package/bundled/browser-use/runtime/index.js +70 -31
  3. package/bundled/browser-use/runtime/native-host.js +1 -0
  4. package/bundled/browser-use/runtime/scripts/native-host-setup.js +1 -0
  5. package/bundled/computer-use/SKILL.md +182 -224
  6. package/bundled/qc-helper/docs/configuration/model-providers.md +13 -2
  7. package/bundled/qc-helper/docs/conversations-recovery.md +10 -0
  8. package/bundled/qc-helper/docs/features/browser-use.md +22 -12
  9. package/bundled/qc-helper/docs/features/channels/dingtalk.md +2 -2
  10. package/bundled/qc-helper/docs/features/channels/dws.md +7 -7
  11. package/bundled/qc-helper/docs/features/channels/feishu.md +1 -1
  12. package/bundled/qc-helper/docs/features/channels/github.md +13 -9
  13. package/bundled/qc-helper/docs/features/channels/gitlab.md +12 -5
  14. package/bundled/qc-helper/docs/features/channels/overview.md +121 -46
  15. package/bundled/qc-helper/docs/features/channels/plugins.md +12 -12
  16. package/bundled/qc-helper/docs/features/channels/qqbot.md +5 -5
  17. package/bundled/qc-helper/docs/features/channels/telegram.md +5 -5
  18. package/bundled/qc-helper/docs/features/channels/wecom.md +5 -4
  19. package/bundled/qc-helper/docs/features/channels/weixin.md +3 -3
  20. package/bundled/qc-helper/docs/features/code-review.md +4 -0
  21. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  22. package/bundled/qc-helper/docs/quickstart.md +14 -14
  23. package/bundled/qc-helper/docs/qwen-serve.md +10 -4
  24. package/bundled/review/SKILL.md +44 -9
  25. package/bundled/review/references/persistence.md +3 -4
  26. package/chunks/{MaxSizedBox-3RXPTLCS.js → MaxSizedBox-4MLWQHF3.js} +33 -31
  27. package/chunks/{StandaloneSessionPicker-74775YBZ.js → StandaloneSessionPicker-PDNU6KJJ.js} +50 -48
  28. package/chunks/{acp-subagent-executor-OQXOMTFK.js → acp-subagent-executor-JB2J6N73.js} +35 -33
  29. package/chunks/{acpAgent-MD56LD7L.js → acpAgent-CAPZFZCW.js} +123 -97
  30. package/chunks/{agent-75EZNG2Q.js → agent-MTWGIPWC.js} +18 -16
  31. package/chunks/{agent-headless-TQ6MWUDT.js → agent-headless-Z27XJSXK.js} +18 -16
  32. package/chunks/{anthropicContentGenerator-DCDXTX3R.js → anthropicContentGenerator-VAFZRJWG.js} +3 -3
  33. package/chunks/{askUserQuestion-2NU6CXK2.js → askUserQuestion-V4OFZD5D.js} +1 -1
  34. package/chunks/{bridge-KGJYQUWD.js → bridge-BUCSJHCE.js} +35 -33
  35. package/chunks/{channel-management-service-YN4A3BJ6.js → channel-management-service-Q2B7WUPL.js} +27 -10
  36. package/chunks/{channel-settings-store-773UOD6B.js → channel-settings-store-U25CVEL6.js} +42 -40
  37. package/chunks/{channel-worker-group-AKPVHRUO.js → channel-worker-group-QNX4OIMZ.js} +5 -5
  38. package/chunks/{channel-worker-manager-TDAQSKWX.js → channel-worker-manager-IJCPV4WY.js} +24 -5
  39. package/chunks/{channel-worker-supervisor-PUMSN4J2.js → channel-worker-supervisor-ENJ2AE2N.js} +4 -4
  40. package/chunks/{chunk-OU4ZCLGJ.js → chunk-242INZ6Y.js} +1 -1
  41. package/chunks/{chunk-JOFZBTVL.js → chunk-245NB3M4.js} +1 -1
  42. package/chunks/{chunk-LISITUEH.js → chunk-26KGIWIW.js} +1 -1
  43. package/chunks/{chunk-WPHZEGFC.js → chunk-2RQEWY2P.js} +1 -1
  44. package/chunks/{chunk-DCTJ3GVF.js → chunk-2SCE6YR2.js} +3 -3
  45. package/chunks/{chunk-STKUN7BR.js → chunk-2XNGG7R3.js} +1 -1
  46. package/chunks/{chunk-OQE7AA2W.js → chunk-36ZMEEBW.js} +16 -12
  47. package/chunks/{chunk-Y53WH7VD.js → chunk-44K6Q5AW.js} +3 -3
  48. package/chunks/{chunk-N4VKU36J.js → chunk-465XOJLQ.js} +1 -1
  49. package/chunks/{chunk-HD4IXPPC.js → chunk-4A4XNQEZ.js} +3 -3
  50. package/chunks/{chunk-RXB6Y33E.js → chunk-4VULJ3LV.js} +1 -1
  51. package/chunks/{chunk-EBRC4GX2.js → chunk-4XXUGJJS.js} +1 -1
  52. package/chunks/{chunk-MVC4XLNM.js → chunk-53IRNMPU.js} +118 -5
  53. package/chunks/{chunk-VGLXXHTF.js → chunk-5BLOZPTW.js} +1 -1
  54. package/chunks/{chunk-3SK2A75W.js → chunk-5OJQLD3P.js} +3 -3
  55. package/chunks/{chunk-WVNCMGAO.js → chunk-6FURC4LI.js} +1 -1
  56. package/chunks/{chunk-WVTM33Q3.js → chunk-6KXQIDK2.js} +4 -4
  57. package/chunks/{chunk-ZKDUQHU4.js → chunk-7MNHZUTA.js} +35 -18
  58. package/chunks/{chunk-JEIPBSGX.js → chunk-7P5WZQXF.js} +7 -7
  59. package/chunks/{chunk-GGUOO2XC.js → chunk-7RCAMBLN.js} +1 -1
  60. package/chunks/{chunk-FBLGI2SO.js → chunk-AAOMFXVZ.js} +7 -7
  61. package/chunks/{chunk-JM76TMGV.js → chunk-ACLD6C3R.js} +8798 -7901
  62. package/chunks/{chunk-4FCWKBOC.js → chunk-ALTMZEBU.js} +6 -6
  63. package/chunks/{chunk-ZHQSWNO6.js → chunk-AN62TPO6.js} +1 -1
  64. package/chunks/{chunk-U5DPG7JW.js → chunk-AYTI24XN.js} +1 -1
  65. package/chunks/{chunk-B53FO7JN.js → chunk-AZN2GSLM.js} +2 -2
  66. package/chunks/{chunk-6KQQPPFF.js → chunk-B3J4BSPL.js} +1 -1
  67. package/chunks/{chunk-SLSH5TFD.js → chunk-BMCDSO77.js} +4 -4
  68. package/chunks/{chunk-DBYUN4U3.js → chunk-BUDUHXX3.js} +1 -1
  69. package/chunks/{chunk-TS4Y2MHO.js → chunk-CGREZDGO.js} +1 -1
  70. package/chunks/chunk-CLNDQINM.js +523 -0
  71. package/chunks/{chunk-LNUQA3OE.js → chunk-CVRZNFXO.js} +1 -1
  72. package/chunks/{chunk-3DBI3LLL.js → chunk-CWLTXYKP.js} +4 -4
  73. package/chunks/{chunk-B3XMX4SN.js → chunk-DACCX4JI.js} +4 -4
  74. package/chunks/{chunk-YWZOEHBT.js → chunk-DE2WI7RU.js} +192 -62
  75. package/chunks/{chunk-3TQVPDCN.js → chunk-DU53RB7A.js} +2 -2
  76. package/chunks/{chunk-2KZURPTB.js → chunk-DZCTQ2MF.js} +6 -1
  77. package/chunks/{chunk-35SABQFH.js → chunk-DZUNDX4M.js} +1 -1
  78. package/chunks/{chunk-4INF7OYV.js → chunk-ELY2U74S.js} +2 -2
  79. package/chunks/chunk-EMGHODF7.js +56 -0
  80. package/chunks/{chunk-5FZKG4JB.js → chunk-EMOTEATH.js} +1 -1
  81. package/chunks/{chunk-LW7WW3Z5.js → chunk-ERGQUKZ2.js} +1 -1
  82. package/chunks/{chunk-TNWJJEDT.js → chunk-ES6EQNGR.js} +6 -6
  83. package/chunks/{chunk-E3TLOFX7.js → chunk-EUHSEMO4.js} +62 -7
  84. package/chunks/{chunk-N25B6FZN.js → chunk-EYCDA5MN.js} +2 -0
  85. package/chunks/{chunk-GPTEZLRR.js → chunk-F4ERRMCO.js} +25 -23
  86. package/chunks/{chunk-SXFZ5P7F.js → chunk-FE7D3WKV.js} +1 -1
  87. package/chunks/{chunk-XEXNBTYX.js → chunk-FH45BQGZ.js} +3 -3
  88. package/chunks/{chunk-CAORZAZD.js → chunk-FLBUHGL4.js} +10 -10
  89. package/chunks/{chunk-X2R47SFR.js → chunk-FLVPNMCS.js} +1 -1
  90. package/chunks/{chunk-5SZSV2CK.js → chunk-FVIJFKEQ.js} +3 -3
  91. package/chunks/{chunk-KFLDZ3HB.js → chunk-G6XRNTXF.js} +1 -1
  92. package/chunks/{chunk-2JHQ2J3Y.js → chunk-G72UHXC3.js} +5 -5
  93. package/chunks/{chunk-4A255ZI6.js → chunk-GAHZJLQG.js} +2 -2
  94. package/chunks/{chunk-7IVZOKKW.js → chunk-GKJGKTWJ.js} +3 -3
  95. package/chunks/{chunk-KY4HZXLV.js → chunk-GLPNIOEV.js} +33 -2
  96. package/chunks/{chunk-6PRSQUPJ.js → chunk-GQZZGEMS.js} +1 -1
  97. package/chunks/{chunk-G2AE7GYZ.js → chunk-GRUASRWC.js} +1 -1
  98. package/chunks/{chunk-HH7R6RLK.js → chunk-GTQ35GRO.js} +1 -1
  99. package/chunks/{chunk-LWRJLRZS.js → chunk-GYLDOFLU.js} +3 -3
  100. package/chunks/{chunk-MZRJ2JJS.js → chunk-HDSI3RDN.js} +136 -9
  101. package/chunks/{chunk-RO5K7QUL.js → chunk-HHMJ5ONX.js} +45 -31
  102. package/chunks/{chunk-E4HNTYHK.js → chunk-HVVQYSBA.js} +32 -9
  103. package/chunks/{chunk-H2GVLBFU.js → chunk-I36GIR6K.js} +64 -2
  104. package/chunks/{chunk-VTFLRL55.js → chunk-IBRV4T3I.js} +2 -2
  105. package/chunks/{chunk-4VSTV4C2.js → chunk-IH22ZGZI.js} +53 -2
  106. package/chunks/{chunk-AOW7WIWE.js → chunk-IQH7Q5OP.js} +4 -4
  107. package/chunks/{chunk-OB444SG3.js → chunk-IYKGSUTA.js} +1 -1
  108. package/chunks/{chunk-HS5OZTQF.js → chunk-J2FLXQJM.js} +1 -1
  109. package/chunks/{chunk-BBCH7PBA.js → chunk-KACKEW2M.js} +2 -2
  110. package/chunks/{chunk-JE3J5HFM.js → chunk-KAOHUUM7.js} +62 -251
  111. package/chunks/{chunk-JCMDVGPR.js → chunk-KGLPVCX7.js} +2 -2
  112. package/chunks/{chunk-QKXZOHHQ.js → chunk-LDURD6EP.js} +15 -62
  113. package/chunks/{chunk-O4IH5UEC.js → chunk-LLIYDIGU.js} +20 -20
  114. package/chunks/{chunk-3XHMOJCP.js → chunk-MBC3PULP.js} +1 -1
  115. package/chunks/{chunk-SRZA7OU4.js → chunk-MMCGLNPP.js} +6 -6
  116. package/chunks/{chunk-3NG2ZQAJ.js → chunk-NZC74TT2.js} +1 -1
  117. package/chunks/{chunk-47C3HPMW.js → chunk-O5YL6KSX.js} +47 -18
  118. package/chunks/{chunk-EIHZ4FFM.js → chunk-O6PPYFQN.js} +3 -3
  119. package/chunks/{chunk-XCU752HT.js → chunk-OICDXWXP.js} +13 -19
  120. package/chunks/{chunk-VJCKLKZX.js → chunk-OOU7XOZF.js} +3 -3
  121. package/chunks/{chunk-OM5NSL25.js → chunk-P4P7CH7H.js} +38 -38
  122. package/chunks/{chunk-CIS4SY3R.js → chunk-PPBZHGEQ.js} +3 -3
  123. package/chunks/{chunk-PB7JBAHF.js → chunk-PVBIEIVZ.js} +0 -1
  124. package/chunks/{chunk-GG3MO6NO.js → chunk-PWGMHXIV.js} +2 -2
  125. package/chunks/{chunk-6N2PJAZG.js → chunk-PX2ZOOGQ.js} +1 -1
  126. package/chunks/{chunk-NNN2PKPV.js → chunk-PYYPSK6Q.js} +36 -495
  127. package/chunks/{chunk-TKOQGFRE.js → chunk-PZOWKCPJ.js} +1 -1
  128. package/chunks/{chunk-PJ546DX4.js → chunk-Q36IJ74U.js} +17 -11
  129. package/chunks/chunk-Q4FJVWI4.js +78 -0
  130. package/chunks/{chunk-PA4HU5IQ.js → chunk-QATPE3SN.js} +13 -7
  131. package/chunks/{chunk-MBUUQJPV.js → chunk-QGKAYDES.js} +5 -5
  132. package/chunks/{chunk-TFBQ5CKI.js → chunk-QNEBHC2E.js} +1 -1
  133. package/chunks/{chunk-6NA357SF.js → chunk-QTNSMJKU.js} +1 -1
  134. package/chunks/{chunk-TDLEDOJN.js → chunk-QU7VULWX.js} +5 -4
  135. package/chunks/{chunk-LOTGIM6V.js → chunk-R3IFSY55.js} +20 -20
  136. package/chunks/{chunk-ZX6EZ7EH.js → chunk-RBE3WRSN.js} +3 -3
  137. package/chunks/{chunk-YSZ2XZTG.js → chunk-RBKZ6SK4.js} +5 -5
  138. package/chunks/{chunk-FLRFAPDA.js → chunk-RCL6OXZC.js} +5 -5
  139. package/chunks/{chunk-H4W6TJFJ.js → chunk-RONRTFAQ.js} +1 -1
  140. package/chunks/{chunk-ZEGLZ3MN.js → chunk-SCYKHWRM.js} +5 -5
  141. package/chunks/{chunk-STUJ7IMZ.js → chunk-SI7XKACY.js} +56 -56
  142. package/chunks/{chunk-RL2HSTEB.js → chunk-SYZPPX3O.js} +1492 -1140
  143. package/chunks/{chunk-VUYJRNG5.js → chunk-T7TJPVTY.js} +3 -3
  144. package/chunks/{chunk-4V5YKOBI.js → chunk-TF7UC7F6.js} +3 -3
  145. package/chunks/{chunk-NXZD3VNX.js → chunk-TL7DSR47.js} +1 -1
  146. package/chunks/{chunk-BVFBDXI2.js → chunk-TPFV5YZK.js} +1 -1
  147. package/chunks/{chunk-YIHOHHJL.js → chunk-TZHXHWEW.js} +1 -1
  148. package/chunks/{chunk-3X5BDEXS.js → chunk-U6RMVE5X.js} +8 -8
  149. package/chunks/{chunk-HRVFPNGT.js → chunk-VFNKO4FK.js} +4 -4
  150. package/chunks/{chunk-VPALWDQL.js → chunk-VUIH3BQL.js} +31 -12
  151. package/chunks/{chunk-WVNML4HH.js → chunk-VW33WARJ.js} +1 -1
  152. package/chunks/{chunk-MICQVBPI.js → chunk-WCLHOKAZ.js} +1 -1
  153. package/chunks/{chunk-KMQ2ZH3Q.js → chunk-WVWCRZ6M.js} +2 -2
  154. package/chunks/{chunk-5NFAKADR.js → chunk-WZCVB2ER.js} +1 -36
  155. package/chunks/{chunk-JNQEW7B2.js → chunk-X3A72KX5.js} +6 -6
  156. package/chunks/{chunk-3JSIWFNA.js → chunk-XHHUGXYW.js} +527 -135
  157. package/chunks/{chunk-VIA4STCR.js → chunk-YCCBLTSL.js} +3 -3
  158. package/chunks/{chunk-Q5IEY2TN.js → chunk-Z3I5B4DH.js} +1 -1
  159. package/chunks/{chunk-O346IB64.js → chunk-ZAJNI63I.js} +1 -1
  160. package/chunks/{chunk-QR4U27UW.js → chunk-ZJFCDRVP.js} +4 -4
  161. package/chunks/{codex-subagent-executor-437LQYGM.js → codex-subagent-executor-IKWULWIZ.js} +35 -33
  162. package/chunks/{config-utils-CVLI36KM.js → config-utils-3IOTAFBG.js} +38 -34
  163. package/chunks/{contextCommand-2KSW7H5F.js → contextCommand-ZKG2JFCR.js} +33 -31
  164. package/chunks/{core-runtime-4IB27E7J.js → core-runtime-5CAK5DSM.js} +32 -30
  165. package/chunks/{create-sub-session-A73TQDAN.js → create-sub-session-DG4CVOQC.js} +33 -31
  166. package/chunks/{daemon-Y6AOK7LF.js → daemon-D4OAVQKB.js} +1 -1
  167. package/chunks/{daemon-git-worktree-guard-BTKVV3DZ.js → daemon-git-worktree-guard-S3SFT3H7.js} +32 -30
  168. package/chunks/{daemon-status-provider-ETDIOWMS.js → daemon-status-provider-GG64ZJR3.js} +40 -38
  169. package/chunks/{daemon-trust-policy-U5SPHJLP.js → daemon-trust-policy-XNWYLQ32.js} +38 -36
  170. package/chunks/{daemon-trust-policy-monitor-QKRCO5WI.js → daemon-trust-policy-monitor-DR5CRWMM.js} +38 -36
  171. package/chunks/{deferred-core-runtime-FRELZPIE.js → deferred-core-runtime-V4Q674KN.js} +32 -30
  172. package/chunks/{dist-54LGNLWW.js → dist-3M75XY4G.js} +1 -1
  173. package/chunks/{dist-YZBMQPNS.js → dist-6U5NQYA7.js} +5 -5
  174. package/chunks/{dist-FVMLRUVM.js → dist-AS2RPYOB.js} +1 -1
  175. package/chunks/{dist-HANHY2MK.js → dist-GFT4GU72.js} +2 -2
  176. package/chunks/{dist-Y5GP7SWL.js → dist-J7JK3GPY.js} +10 -9
  177. package/chunks/{dist-O723VE2K.js → dist-JTPRKF5H.js} +30 -27
  178. package/chunks/{dist-MGZKUISU.js → dist-MOO5VOC5.js} +7 -20
  179. package/chunks/{dist-IZ66D5A3.js → dist-NJ2L5QKL.js} +1 -1
  180. package/chunks/{dist-EI2XAB4W.js → dist-YC6LDCKH.js} +22 -28
  181. package/chunks/{edit-TQ3CABYP.js → edit-FPIWTN3L.js} +20 -18
  182. package/chunks/{enter-worktree-J46XVFRS.js → enter-worktree-55OWD4LT.js} +4 -3
  183. package/chunks/{enterPlanMode-JHOWELZO.js → enterPlanMode-GDZVXYB2.js} +18 -16
  184. package/chunks/{environment-LUM7XX27.js → environment-Q2BVTUQO.js} +36 -32
  185. package/chunks/{errors-SH32ID5I.js → errors-MZTLVUEM.js} +34 -32
  186. package/chunks/{execution-sandbox-settings-HIYVUBII.js → execution-sandbox-settings-3WJ67GX3.js} +3 -1
  187. package/chunks/{execution-tool-IIEL25CL.js → execution-tool-DZ4XSEFZ.js} +21 -19
  188. package/chunks/{execution-worker-NKKEZ4XF.js → execution-worker-L3TM3F5D.js} +24 -22
  189. package/chunks/{exit-worktree-BC4SDZCC.js → exit-worktree-MI6N4OUP.js} +4 -3
  190. package/chunks/{exitPlanMode-PUICCCQ5.js → exitPlanMode-VIGOD2KP.js} +18 -16
  191. package/chunks/{fast-path-QH3QTZZA.js → fast-path-JCKEFUUL.js} +4 -4
  192. package/chunks/{fast-path-settings-TQAYWLXR.js → fast-path-settings-VIYSH3SD.js} +2 -2
  193. package/chunks/{glob-OEB4WH3Z.js → glob-UOKQZHKL.js} +18 -16
  194. package/chunks/{goal-tools-KWGKFUSK.js → goal-tools-G4RIX4ER.js} +18 -16
  195. package/chunks/{handleAutoUpdate-KEA7JSUD.js → handleAutoUpdate-UZZEGL3N.js} +34 -32
  196. package/chunks/{i18n-AC3MUXKZ.js → i18n-IL33FVND.js} +32 -30
  197. package/chunks/{initializer-WBD32BEX.js → initializer-BCXBRM6Y.js} +38 -36
  198. package/chunks/{installationInfo-JRGFTKWY.js → installationInfo-V7OKUOJV.js} +32 -30
  199. package/chunks/{list-S7KW7NBX.js → list-LQHG6SXA.js} +41 -39
  200. package/chunks/{llm-E32WLISX.js → llm-JWCANCDC.js} +85 -74
  201. package/chunks/{llm-content-generator-OMKJHC5P.js → llm-content-generator-OXMMHUVK.js} +3 -3
  202. package/chunks/{loadedSettingsAdapter-5OSU3J46.js → loadedSettingsAdapter-EKXSRWMY.js} +38 -36
  203. package/chunks/{local-execution-environment-IQHCTUJ5.js → local-execution-environment-XIQLRMLF.js} +24 -22
  204. package/chunks/{loggingContentGenerator-JIYG3LJS.js → loggingContentGenerator-6KHNZDTZ.js} +20 -18
  205. package/chunks/{managed-npm-update-RKAT7AMQ.js → managed-npm-update-MBUH5TIX.js} +32 -30
  206. package/chunks/managed-runtime-attestation-worker-G23AEEMF.js +367 -0
  207. package/chunks/{mcp-SV72BZKG.js → mcp-AYVCEEN7.js} +38 -36
  208. package/chunks/{model-call-collection-PKDMVCZN.js → model-call-collection-OKUGOY4B.js} +1 -1
  209. package/chunks/{model-configuration-A52XMQW7.js → model-configuration-Q3MNGG3B.js} +38 -36
  210. package/chunks/{modelConfigUtils-7O4P3SLE.js → modelConfigUtils-WC5XDR34.js} +33 -31
  211. package/chunks/{monitor-ZXRV2DJB.js → monitor-7JUZXYZN.js} +18 -16
  212. package/chunks/{nonInteractiveCli-UPSGIYRC.js → nonInteractiveCli-B3GCZ6NJ.js} +74 -73
  213. package/chunks/{nonInteractiveToolExecutor-TDKVR43J.js → nonInteractiveToolExecutor-IUHO7PXG.js} +19 -17
  214. package/chunks/{notebook-edit-FBVHAHYM.js → notebook-edit-IYDACZDW.js} +19 -17
  215. package/chunks/{omni-3NREMV2Q.js → omni-DLBHISHC.js} +10 -7
  216. package/chunks/{openaiContentGenerator-EWPBZFIT.js → openaiContentGenerator-W5GN6H6Z.js} +12 -10
  217. package/chunks/{openaiResponsesContentGenerator-3CI3PINB.js → openaiResponsesContentGenerator-BXXRYJQQ.js} +5 -5
  218. package/chunks/{pidfile-BBUANGZX.js → pidfile-QIBF53CW.js} +32 -30
  219. package/chunks/{processUtils-6OHQLG7W.js → processUtils-2LU22KCR.js} +2 -2
  220. package/chunks/{prompt-terminal-ledger-ZBFYXJ4L.js → prompt-terminal-ledger-LXFVLR6C.js} +33 -31
  221. package/chunks/{qwenContentGenerator-62F5IKXJ.js → qwenContentGenerator-LYMLXBWI.js} +21 -19
  222. package/chunks/{reactive-degrade-URJMXJ7N.js → reactive-degrade-HPYBJHYA.js} +6 -6
  223. package/chunks/{read-file-IM4Q5TKI.js → read-file-SXS2MKDY.js} +6 -3
  224. package/chunks/{record-artifact-K4XSMW4X.js → record-artifact-XP3X7RE5.js} +3 -2
  225. package/chunks/{record-source-XZCI3IGU.js → record-source-2VBLKVIE.js} +2 -2
  226. package/chunks/{report-findings-MCGXBQFX.js → report-findings-D2QUYUOG.js} +4 -3
  227. package/chunks/{request-shutdown-TT62PREA.js → request-shutdown-R5SA5GE3.js} +1 -1
  228. package/chunks/{resumeHistoryUtils-O3NQMDVR.js → resumeHistoryUtils-UPGZGP5V.js} +35 -33
  229. package/chunks/{ripGrep-BG2FEVIV.js → ripGrep-X33VVIN5.js} +8 -5
  230. package/chunks/{run-qwen-serve-GMLWJITM.js → run-qwen-serve-CUB2NZ6P.js} +278 -79
  231. package/chunks/{runtime-SSGPOXRZ.js → runtime-2DAVBADX.js} +43 -41
  232. package/chunks/{sandboxConfig-ALYLLNWY.js → sandboxConfig-ESBH3F27.js} +34 -32
  233. package/chunks/{scheduled-tasks-QJTC5XQ7.js → scheduled-tasks-TGWYXZWW.js} +38 -36
  234. package/chunks/{scheduler-PEXTY7IG.js → scheduler-XGLZCXPN.js} +34 -32
  235. package/chunks/{send-message-3UM7XRTB.js → send-message-FBU6WDID.js} +1 -1
  236. package/chunks/{serve-OVAUTKXK.js → serve-7RX4AIID.js} +38 -36
  237. package/chunks/{server-3MMYOOJW.js → server-MJETIFJS.js} +1789 -375
  238. package/chunks/{session-PZBIKBQJ.js → session-7AVYU3TC.js} +75 -74
  239. package/chunks/{session-attachments-root-ESP5CNBV.js → session-attachments-root-RONFQ3D3.js} +32 -30
  240. package/chunks/{session-pr-refresh-B3N7PKUP.js → session-pr-refresh-ZPT6TAD4.js} +37 -35
  241. package/chunks/{settings-KSQ2DGPY.js → settings-FPMUAVWD.js} +37 -35
  242. package/chunks/{shell-3V26EVNC.js → shell-THD5EYOK.js} +18 -16
  243. package/chunks/{skill-XP7F3LBV.js → skill-2D6KXDC5.js} +52 -13
  244. package/chunks/{skill-settings-PDESL7S3.js → skill-settings-XW7X244B.js} +38 -36
  245. package/chunks/{spawnChannel-NVO7CCBW.js → spawnChannel-DBSAAUUT.js} +34 -32
  246. package/chunks/{standalone-update-FDWS2EGF.js → standalone-update-TFAWA676.js} +33 -31
  247. package/chunks/{start-opentui-ui-WIFFY5UD.js → start-opentui-ui-VYMAXPBH.js} +87 -86
  248. package/chunks/{startInteractiveUI-YBLIRIHD.js → startInteractiveUI-Z54XKH35.js} +1037 -966
  249. package/chunks/{task-create-PEI7AJLE.js → task-create-PVF66J3R.js} +2 -2
  250. package/chunks/{task-update-MQZRWBGK.js → task-update-RSIITTOK.js} +2 -2
  251. package/chunks/{team-create-Z5JUEMB7.js → team-create-TPCELNBJ.js} +18 -16
  252. package/chunks/{team-plan-approval-ZLLHMEQN.js → team-plan-approval-RUURGHQL.js} +18 -16
  253. package/chunks/{terminal-image-renderer-QFO2JTTT.js → terminal-image-renderer-SLJVUD4Z.js} +32 -30
  254. package/chunks/{theme-manager-N7ILUTRY.js → theme-manager-VBOIN2KT.js} +32 -30
  255. package/chunks/{tool-call-PLSQ34VE.js → tool-call-DUHP6UXC.js} +2 -2
  256. package/chunks/{tool-result-media-OAHUKGRK.js → tool-result-media-WU6QAREN.js} +10 -7
  257. package/chunks/{tool-search-534QKE2X.js → tool-search-ET4NH2LK.js} +7 -4
  258. package/chunks/{total-session-admission-EZJQKTPF.js → total-session-admission-UWMJWTWP.js} +35 -33
  259. package/chunks/{trustedFolders-4ZEV6RXD.js → trustedFolders-3WNZBUH7.js} +33 -31
  260. package/chunks/{update-relaunch-GB3SGRDP.js → update-relaunch-SHS3BD6V.js} +5 -5
  261. package/chunks/{updateCheck-DVAGAEQ4.js → updateCheck-MDF2FCRN.js} +32 -30
  262. package/chunks/{upload-config-DMZVTDH7.js → upload-config-LVVUIKA2.js} +4 -4
  263. package/chunks/{useAutoAcceptIndicator-PTQBS42B.js → useAutoAcceptIndicator-26OOM7OM.js} +41 -39
  264. package/chunks/{validateNonInterActiveAuth-DU3WXVSU.js → validateNonInterActiveAuth-TBCZCQIN.js} +72 -71
  265. package/chunks/{version-PNMZGKCV.js → version-MICV7I4Y.js} +1 -1
  266. package/chunks/{web-fetch-LMCOAHW6.js → web-fetch-3O2DFRE5.js} +13 -9
  267. package/chunks/{web-search-N7RR74LA.js → web-search-5FS3NB3D.js} +4 -4
  268. package/chunks/{web-shell-static-GI6FVIMI.js → web-shell-static-E3O6NW7Y.js} +4 -3
  269. package/chunks/{workflow-ZZPHI7FK.js → workflow-FRJO5ZUI.js} +19 -17
  270. package/chunks/{workspace-providers-status-TU73CNRF.js → workspace-providers-status-I5MO7Z2T.js} +43 -41
  271. package/chunks/{workspace-registration-store-743FRSOU.js → workspace-registration-store-CBHKV34L.js} +1 -1
  272. package/chunks/{workspace-registry-S7QTXFWM.js → workspace-registry-2UKNZO5M.js} +35 -33
  273. package/chunks/{workspace-runtime-coordinator-GWNDUIGO.js → workspace-runtime-coordinator-TKCI5WJW.js} +36 -34
  274. package/chunks/{workspace-service-CERZFJ3B.js → workspace-service-M3ZKR6WL.js} +40 -38
  275. package/chunks/{workspace-skills-status-5M3EIAUY.js → workspace-skills-status-OC3EYL7U.js} +41 -39
  276. package/chunks/{workspace-trust-reconciler-Q3LUKMQB.js → workspace-trust-reconciler-YQZSUOH4.js} +41 -39
  277. package/chunks/{write-file-CT54LXQL.js → write-file-BATJLBJX.js} +21 -19
  278. package/chunks/{zoom-image-EU3PGSZM.js → zoom-image-5I7DDLQE.js} +10 -6
  279. package/cli-entry.js +13 -0
  280. package/cli.js +24 -12
  281. package/execution-worker.js +1 -1
  282. package/export-transcript-document.css +1 -1
  283. package/export-transcript-document.js +104 -104
  284. package/package.json +3 -3
  285. package/web-shell/assets/{abnfDiagram-VCTEODGH-DDYEvG-M.js → abnfDiagram-VCTEODGH-DQHroFS1.js} +1 -1
  286. package/web-shell/assets/{arc-DQncKWFX.js → arc-BrOc_HVh.js} +1 -1
  287. package/web-shell/assets/{architectureDiagram-5GKGNRK7-C0-8u9zj.js → architectureDiagram-5GKGNRK7-DXce8IH6.js} +1 -1
  288. package/web-shell/assets/{blockDiagram-NRAW4CY4-Cpt59Ge5.js → blockDiagram-NRAW4CY4-96A3Q3-l.js} +1 -1
  289. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BvESWh83.js → c4Diagram-UCG6FXSJ-CQBg2PSg.js} +1 -1
  290. package/web-shell/assets/channel-CBP6pwSs.js +1 -0
  291. package/web-shell/assets/{chunk-2Q5K7J3B-wKulGIU6.js → chunk-2Q5K7J3B-i_jhVz-t.js} +1 -1
  292. package/web-shell/assets/{chunk-5VM5RSS4-BX6kRoq7.js → chunk-5VM5RSS4-Cx3gMrWT.js} +1 -1
  293. package/web-shell/assets/{chunk-F27PBJKO-wA4IqTt-.js → chunk-F27PBJKO-B9WwW7C0.js} +1 -1
  294. package/web-shell/assets/{chunk-G27WJ6UU-B7hzevlb.js → chunk-G27WJ6UU-B8t0FNPI.js} +1 -1
  295. package/web-shell/assets/{chunk-JWPE2WC7-BdBg9pJg.js → chunk-JWPE2WC7-Dg0__6CF.js} +1 -1
  296. package/web-shell/assets/{chunk-LCL6LL3I-DghmF6LJ.js → chunk-LCL6LL3I-DUwE5g3m.js} +1 -1
  297. package/web-shell/assets/{chunk-POPQ4Y6H-BbReTOod.js → chunk-POPQ4Y6H-BirYW5iS.js} +1 -1
  298. package/web-shell/assets/{chunk-SVP7TREG-C1t0_19D.js → chunk-SVP7TREG-_ONJKtFF.js} +1 -1
  299. package/web-shell/assets/{chunk-XXDRQBXY-DQBby5mI.js → chunk-XXDRQBXY-DGi0chgj.js} +1 -1
  300. package/web-shell/assets/classDiagram-DTDB5LWJ-_4_fFrN3.js +1 -0
  301. package/web-shell/assets/classDiagram-v2-JRS7N3AN-_4_fFrN3.js +1 -0
  302. package/web-shell/assets/{cose-bilkent-JH36ORCC-CNrSyg7B.js → cose-bilkent-JH36ORCC-BSSFxREn.js} +1 -1
  303. package/web-shell/assets/{cynefin-OW5HDTMX-DoxgDRN-.js → cynefin-OW5HDTMX-h-oYVCez.js} +1 -1
  304. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BmUwbS8Q.js → cynefinDiagram-5FMLGOSQ-CXj6T7Pm.js} +1 -1
  305. package/web-shell/assets/{dagre-3AP2YEHR-BJrOVIjc.js → dagre-3AP2YEHR-Ch9GIhJm.js} +1 -1
  306. package/web-shell/assets/{diagram-S7CK7UJ4-TDX4KU9V.js → diagram-S7CK7UJ4-Cq3W541T.js} +1 -1
  307. package/web-shell/assets/{diagram-UQ7AKVKN-D3VUQkGl.js → diagram-UQ7AKVKN-Bm1R5-sN.js} +1 -1
  308. package/web-shell/assets/{diagram-VSXAHHWV-CqCpgViy.js → diagram-VSXAHHWV-BW2qG6Vh.js} +1 -1
  309. package/web-shell/assets/{diagram-VX7I27RA-CthqfwCs.js → diagram-VX7I27RA-DN96PhRe.js} +1 -1
  310. package/web-shell/assets/{diagram-Z3DM3KII-BRY3Ahvu.js → diagram-Z3DM3KII-A8MnwaJr.js} +1 -1
  311. package/web-shell/assets/{ebnfDiagram-PWID7BFC-tJvTnIwp.js → ebnfDiagram-PWID7BFC-CZTpUypI.js} +1 -1
  312. package/web-shell/assets/{erDiagram-SSCWMZ5O-DT4b7w5B.js → erDiagram-SSCWMZ5O-CbxCRFru.js} +1 -1
  313. package/web-shell/assets/{flowDiagram-A5DVABFB-C5oirWSf.js → flowDiagram-A5DVABFB-Bt1PM2Dy.js} +1 -1
  314. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-ZD3kNlO4.js → ganttDiagram-EL5Y4UJY-CTgim3LX.js} +1 -1
  315. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Bp1sg_wH.js → gitGraphDiagram-WWUBYQGX-h4jX7S4l.js} +1 -1
  316. package/web-shell/assets/{index-DSIzVof7.js → index-BDxWHGNm.js} +1 -1
  317. package/web-shell/assets/index-Bd3iA5Er.js +2407 -0
  318. package/web-shell/assets/index-DuwfO01z.css +36 -0
  319. package/web-shell/assets/{infoDiagram-RXCK75RN-Btumz_CZ.js → infoDiagram-RXCK75RN-DsIsFmZ4.js} +1 -1
  320. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-Dx8_uvso.js → ishikawaDiagram-5VMMS53U-BgF2V3rC.js} +1 -1
  321. package/web-shell/assets/{journeyDiagram-EYS64GPL-DS5spUhj.js → journeyDiagram-EYS64GPL-CJ2ibWhB.js} +1 -1
  322. package/web-shell/assets/{kanban-definition-3QL26DDD-DttC9d4D.js → kanban-definition-3QL26DDD-oqNfpjND.js} +1 -1
  323. package/web-shell/assets/{layout-BDOJQJbX.js → layout-DKF2f-UC.js} +1 -1
  324. package/web-shell/assets/{linear-BsUVMxld.js → linear-CadmYA8J.js} +1 -1
  325. package/web-shell/assets/{mermaid.core-De4-EW4Z.js → mermaid.core-BSD13L-h.js} +6 -6
  326. package/web-shell/assets/{mindmap-definition-FBJOCRG2-BsYY98Wv.js → mindmap-definition-FBJOCRG2-Cg3jlHzV.js} +1 -1
  327. package/web-shell/assets/{pegDiagram-XKGWAZYB-DXnnQrVY.js → pegDiagram-XKGWAZYB-BGzqlBWk.js} +1 -1
  328. package/web-shell/assets/{pieDiagram-E7YTZNPT-DGLAGUYR.js → pieDiagram-E7YTZNPT-BVDdPYnC.js} +1 -1
  329. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-Y8DcMTa5.js → quadrantDiagram-AXDQQJYC-D7maRW6r.js} +1 -1
  330. package/web-shell/assets/{railroadDiagram-O6MQD6OU-ZgauslUZ.js → railroadDiagram-O6MQD6OU-C7J0Nnqc.js} +1 -1
  331. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-Kxtu4twe.js → requirementDiagram-EFPCY7ZU-CDEpUB7S.js} +1 -1
  332. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-BKsLF9EA.js → sankeyDiagram-P5KCCOFB-DoA0BWeR.js} +1 -1
  333. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D8sCv1NK.js → sequenceDiagram-WJ2MYXX4-DlqRjDLl.js} +1 -1
  334. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BX8sokZX.js → sizeCapture-X5ZJPWSS-3l2EJ1DB.js} +1 -1
  335. package/web-shell/assets/{stateDiagram-HBIQ2CUA-DFMl58kv.js → stateDiagram-HBIQ2CUA-Bdq0N6Lr.js} +1 -1
  336. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DtdYpKZp.js +1 -0
  337. package/web-shell/assets/{swimlanes-XN3QIQJK-BnMwURLN.js → swimlanes-XN3QIQJK-B4ArxdLV.js} +1 -1
  338. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-B_iL0Dc4.js +8 -0
  339. package/web-shell/assets/{timeline-definition-24CTP7MA-C8y77DDz.js → timeline-definition-24CTP7MA-B_Ug6D_k.js} +1 -1
  340. package/web-shell/assets/{vennDiagram-4TSXK5OY-DOWQgX9u.js → vennDiagram-4TSXK5OY-BR9tvaDT.js} +1 -1
  341. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-BM0AVIzE.js → wardleyDiagram-VM6X3IG4-BdGIt6qE.js} +1 -1
  342. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-B18-YghG.js → xychartDiagram-S5SC5T6Z-NxS8XkXN.js} +1 -1
  343. package/web-shell/index.html +2 -2
  344. package/web-shell/sw.js +1 -1
  345. package/bundled/computer-use/references/macos.md +0 -208
  346. package/bundled/computer-use/references/windows-linux.md +0 -247
  347. package/web-shell/assets/channel-B88Zt8_x.js +0 -1
  348. package/web-shell/assets/classDiagram-DTDB5LWJ-Dp-7ruHm.js +0 -1
  349. package/web-shell/assets/classDiagram-v2-JRS7N3AN-Dp-7ruHm.js +0 -1
  350. package/web-shell/assets/index-CpxLhWqx.js +0 -2337
  351. package/web-shell/assets/index-mr0Sw0G-.css +0 -36
  352. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-B3HSbbo2.js +0 -1
  353. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-FnO0SUMi.js +0 -8
@@ -47,278 +47,236 @@ If `node_repl` is unavailable, run:
47
47
 
48
48
  ```bash
49
49
  qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.6
50
- npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.9
50
+ npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.11
51
51
  ```
52
52
 
53
53
  Tell the user to restart Qwen Code, then stop. If only the SDK import is missing,
54
54
  run the second command and retry.
55
55
 
56
56
  Reuse an existing `computer` connected to the intended desktop. Otherwise import
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:
57
+ once per fresh `node_repl` session. The same App workflow below applies to macOS,
58
+ Linux and Windows; no additional platform resource is needed:
62
59
 
63
60
  ```js
64
61
  globalThis.computer = await (
65
62
  await import('@qwen-code/cua-sdk/computer-use')
66
63
  ).ComputerUse.create();
67
64
  var platform = await computer.getPlatform();
68
- var reference = {
69
- macos: 'macos.md',
70
- windows: 'windows-linux.md',
71
- }[platform];
72
- if (!reference && platform !== 'linux') {
73
- throw new Error('Unsupported connected platform');
74
- }
75
65
  nodeRepl.write(`Connected platform: ${platform}`);
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
- }
84
66
  ```
85
67
 
86
- If the returned platform is `macos` and the task already identifies an
87
- unambiguous app, append its initial observation to that same initialization
88
- call, after printing the resource:
89
-
90
- ```js
91
- if (platform === 'macos') {
92
- var app = await computer.getApp('App named by the task');
93
- nodeRepl.write((await app.getState()).text);
94
- }
95
- ```
96
-
97
- Replace the example app name with the task's app. This only binds the app and
98
- reads its current state; `getState()` can open that app if stopped. Read both
99
- the returned platform workflow and initial state before any editing or input.
100
- If the app is unknown or ambiguous, omit this block and follow the selected
101
- resource's discovery steps. Do not guess an app or use the host platform.
102
-
103
- ## Select the target platform workflow
104
-
105
- Use this returned platform, not the CLI or Node host operating system. A connected
106
- driver may control a different machine. If the platform cannot be determined,
107
- resolve the reported driver/SDK error before continuing; do not guess a platform.
68
+ Use the connected platform for shortcuts, not the CLI or Node host operating system.
69
+ When the task identifies an app, combine initialization with `computer.getApp()`
70
+ and its first `getState()` in the same call. Read that state before editing or input.
108
71
 
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.
112
- Read exactly one resource with `read_file`, resolving its absolute path from the
113
- Skill base directory shown above:
114
-
115
- - `macos`: read `references/macos.md` for the App workflow and text operations.
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.
72
+ ## API surface
135
73
 
136
74
  ```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
-
75
+ type Point = number | { x: number; y: number };
143
76
  type ComputerUse = {
144
- listApps(): Promise<
145
- Array<{
146
- name?: string;
147
- bundle_id?: string;
148
- pid?: number;
149
- running?: boolean;
150
- }>
77
+ getPlatform: () => Promise<'macos' | 'linux' | 'windows'>;
78
+ getApp: (nameOrIdentifierOrPath: string) => Promise<App>;
79
+ listApps: () => Promise<
80
+ Array<{ id: string; displayName: string; isRunning: boolean }>
151
81
  >;
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;
82
+ close: () => Promise<void>;
83
+ };
84
+ type App = {
85
+ getState: (options?: {
86
+ disableDiff?: boolean;
87
+ includeScreenshot?: boolean;
88
+ maxTextChars?: number;
89
+ }) => Promise<State>;
90
+ click: (
91
+ point: Point,
92
+ options?: { button?: 'left' | 'right' | 'middle'; count?: number },
93
+ ) => Promise<object>;
94
+ doubleClick: (point: Point) => Promise<object>;
95
+ rightClick: (
96
+ point: Point,
97
+ options?: { modifier?: string[] },
98
+ ) => Promise<object>;
99
+ setValue: (element: number, value: string) => Promise<object>;
100
+ performSecondaryAction: (element: number, action: string) => Promise<object>;
101
+ typeText: (text: string) => Promise<object>;
102
+ paste: (
103
+ text: string,
104
+ options?: { format?: 'text' | 'md' | 'html'; signal?: AbortSignal },
105
+ ) => Promise<object>;
106
+ selectText: (
107
+ element: number,
108
+ text: string,
109
+ options?: {
110
+ prefix?: string;
111
+ suffix?: string;
112
+ selection?: 'text' | 'cursor_before' | 'cursor_after';
113
+ signal?: AbortSignal;
188
114
  },
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>;
115
+ ) => Promise<object>;
116
+ pressKey: (
117
+ key: string,
118
+ options?: { modifiers?: string[] },
119
+ ) => Promise<object>;
120
+ hotkey: (keys: string[]) => Promise<object>;
121
+ scroll: (
122
+ point: Point,
123
+ options: { direction: 'up' | 'down' | 'left' | 'right'; amount?: number },
124
+ ) => Promise<object>;
125
+ drag: (options: {
126
+ fromX: number;
127
+ fromY: number;
128
+ toX: number;
129
+ toY: number;
130
+ }) => Promise<object>;
200
131
  };
201
-
202
- type WindowObservation = {
203
- pid: number;
204
- windowId: number;
132
+ type State = {
133
+ app: string;
134
+ window: string;
205
135
  mode: 'full' | 'diff' | 'no_change';
206
136
  text: string;
207
- elements: Array<{
208
- element_token?: string;
209
- role?: string;
210
- label?: string;
211
- value?: unknown;
212
- actions?: string[];
213
- }>;
214
137
  screenshot?: { images: Array<{ mimeType: string; dataBase64: string }> };
215
138
  };
216
139
  ```
217
140
 
218
- ### Discover and observe
141
+ ## Workflow
142
+
143
+ `paste` and `selectText` currently require macOS. On Linux/Windows, use the shared
144
+ `typeText`, `setValue`, `pressKey` and observed actions. Unsupported text methods
145
+ fail with `unsupported_platform`; do not retry them as window failures.
219
146
 
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.
147
+ ### 1. Initialize
148
+
149
+ If initialization already bound the task's app and returned its state, reuse
150
+ that `app` and observation. Otherwise, bind the app named by the task, then read its state.
151
+ `getApp()` binds identity; `getState()` can open a discovered stopped app. Combine these
152
+ steps in one Node REPL call:
223
153
 
224
154
  ```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);
155
+ var app = await computer.getApp('Microsoft Excel');
156
+ nodeRepl.write((await app.getState()).text);
237
157
  ```
238
158
 
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 rows omit default enabled/unselected states and the primary click action.
249
- `disabled` and `selected` mark non-default states; `actions` lists secondary
250
- actions. Editable content appears separately from its label as `value`, including
251
- an empty value after clearing a field. The element list retains all actions.
252
- Empty layout containers and duplicate labels are omitted; adjacent static text
253
- may share a row. Window, dialog, list and table context, focused/selected state,
254
- and actionable elements remain visible. Use element tokens, not row positions.
255
- Linux observations omit virtual children when an app manages their lifetime
256
- (`managed_descendants_omitted`). The returned tree is bounded; use a screenshot
257
- for sheet or canvas content that is not present in the tree.
258
- Linux also omits hidden native menu branches (`hidden_menu_subtrees_omitted`).
259
- Open a menu and observe again to read its displayed commands. A collection
260
- timeout returns the completed portion with an incomplete-capture indication;
261
- it does not establish that missing controls are absent.
262
-
263
- Text is limited to 12,000 characters by default. Filter the elements for controls
264
- you need, or request `disableDiff: true` with a larger `maxTextChars` (minimum
265
- 512). An omitted row does not prove absence. If you discarded earlier text,
266
- request a full tree the next time you read accessibility text.
267
-
268
- ### Act and verify
269
-
270
- Prefer current element tokens. Use screenshot coordinates for controls whose
271
- accessibility actions or text are unavailable. Coordinates are pixels in the
272
- PNG for that exact window, measured from its top-left corner. Accessibility
273
- `frame` values are screen-space logical points; do not use them as PNG pixels.
274
-
275
- Batch only actions whose target remains the same, then observe:
159
+ The app handle tracks its current window and dialog. Read the returned window
160
+ title to confirm the intended document. If the app is unknown or its name is
161
+ ambiguous, discover applications with `computer.listApps()` and use a matching
162
+ application `id` when it distinguishes the app. Two running instances may have
163
+ the same ID; retrying that ID cannot resolve the ambiguity. Ask the user to keep
164
+ only the intended instance open rather than guessing a target or retrying it.
165
+
166
+ AX text uses short numeric IDs, such as `[37] TextField "Name"`. Use IDs from
167
+ the current observation for element actions. IDs can change when the app's
168
+ window or session changes. Disabled and static-text rows are observation-only.
169
+
170
+ For token efficiency, the accessibility tree will be returned
171
+ as a diff when appropriate. Prefer this default diff output. A full state
172
+ replaces the previous state; a diff updates it; no-change preserves it. If you
173
+ need a full replacement, use `disableDiff: true` only when the previous state
174
+ is unavailable or no longer useful. Do not disregard the text and then assume
175
+ that a subsequent diff will reproduce the information you skipped.
176
+
177
+ Returned text defaults to at most 12,000 characters. Set `maxTextChars` (minimum 512) to adjust the limit. A truncation notice means some captured rows were
178
+ omitted; request `app.getState({ disableDiff: true, maxTextChars: 24000 })` when
179
+ you need more full text. An omitted row does not prove an element is absent.
180
+ Traversal-limited captures cover only the captured nodes: identical captures
181
+ can return no-change, while changes return full captured state. Use current
182
+ captured IDs; after a read failure, use only IDs from the latest observation.
183
+
184
+ ### 2. Actions using app
185
+
186
+ After performing one or more UI actions, call `app.getState()` before deciding
187
+ what to do next. Batch actions whose target remains the same, then print only
188
+ the state needed for the next decision:
276
189
 
277
190
  ```js
278
- await computer.click({ pid: target.pid, elementToken });
279
- await computer.typeText({ ...target, text: 'hello' });
280
- nodeRepl.write((await computer.observeWindow(target)).text);
191
+ await app.click(37);
192
+ await app.hotkey([platform === 'macos' ? 'super' : 'ctrl', 'a']);
193
+ await app.typeText('hello');
194
+ await app.pressKey('Return');
195
+ nodeRepl.write((await app.getState()).text);
281
196
  ```
282
197
 
283
- When the controls and next actions are already known, combine the actions and
284
- saving in the same cell, then observe. A new observation is a decision boundary;
285
- do not split a known sequence into one call per action.
198
+ Use the actual ID from your observation; `37` is only an example.
199
+
200
+ An observation is a decision boundary. When the current state already identifies
201
+ the controls and the next actions are known, combine those actions and saving
202
+ in the same call. Read state after the batch. End the batch at a new dialog,
203
+ menu, changed target or uncertain result; use that state before choosing the
204
+ next action. Do not split a known sequence merely to put each action in its own
205
+ call.
206
+
207
+ - Prefer element IDs to coordinates. `setValue(id, value)` changes a writable control, and `performSecondaryAction(id, action)` invokes a secondary action listed for that element. Use an observed action name rather than guessing.
208
+ - When an action opens or closes a dialog, sheet or menu, end the batch and call `app.getState()` to read the new window and IDs before continuing.
209
+ - `No open application window.` means the app is still running without a document window. If closing it completed the task, finish instead of retrying actions; otherwise open the intended file or window first.
210
+ - An action error can occur after the UI already changed. Read state before deciding whether to retry. Partial, unconfirmed or cancelled actions must not be blindly repeated.
211
+ - Coordinate actions use pixels in this app's current screenshot, with `(0, 0)` at its top-left. Every App observation refreshes that frame internally. Request `includeScreenshot: true` when you need to inspect the image, especially after a window change. Do not infer coordinates from another window or desktop screenshot.
212
+ - `pressKey` sends one key, optionally with modifiers. `hotkey` sends a combination such as `['super', 's']`. Use the connected platform's appropriate shortcut: macOS generally uses `super`; Linux/Windows generally use `ctrl`.
213
+ - App input manages any required activation internally and restores the previous focus, unless the user has moved it elsewhere. If the platform cannot confirm the target or restore focus, the action reports an error. There is no delivery-mode choice and no automatic replay after an uncertain result.
214
+ - On Linux, some compositor sessions cannot confirm an exact App target. An `app_window_unavailable` result can mean the session does not support this workflow; ask the user to use a supported desktop session instead of retrying input.
215
+ - Literal `\n` or `\r` in `typeText` sends Return. In a composer or form this may submit rather than insert a newline.
216
+ - If AX is incomplete or does not explain the interface, request a screenshot and inspect it. Only currently captured actionable IDs can be used for element actions.
286
217
 
287
- End the batch when opening a dialog or menu. For a dialog, list windows and
288
- observe the matching window before typing. For a menu in the same window,
289
- refresh its observation and use current menu tokens. Never guess a window ID.
218
+ ## Paste and select text
290
219
 
291
- The runtime may retry focus preparation before sending input. An action error,
292
- cancellation, `suspected_noop` or `unverifiable` result does not establish that
293
- nothing happened. Observe the current windows and state before deciding to
294
- repeat an action. Do not blindly replay the previous batch or token.
220
+ These App methods are available on macOS only. Read current state first and use
221
+ an observed element ID for selection.
295
222
 
296
- `pressKey` accepts one key and optional modifiers; `hotkey` accepts a combination
297
- such as `{ ...target, keys: ['ctrl', 'c'] }`. `performSecondaryAction` requires an
298
- action actually exposed by that element. Newlines in `typeText` can submit forms
299
- or send messages instead of inserting a line break.
223
+ ```js
224
+ await app.selectText(37, 'draft', { prefix: 'Status: ' });
225
+ nodeRepl.write((await app.getState()).text);
226
+ ```
300
227
 
301
- ### Read screenshots
228
+ Use a real ID and text from your observation; the example assumes that the
229
+ selected element contains exactly one matching `draft` immediately after
230
+ `Status: `.
302
231
 
303
- Request the screenshot explicitly, print only the observation's text, and emit
304
- each image:
232
+ After confirming the selection, replace it with plain text:
305
233
 
306
234
  ```js
307
- var state = await computer.observeWindow({
308
- ...target,
309
- includeScreenshot: true,
310
- });
235
+ await app.paste('ready');
236
+ nodeRepl.write((await app.getState()).text);
237
+ ```
238
+
239
+ - `selectText(element, text)` selects one exact, case-sensitive match. Optional
240
+ `prefix` and `suffix` must be immediately adjacent to that match. Missing or
241
+ ambiguous matches fail; provide enough observed context to identify one.
242
+ - `selection` defaults to `'text'`. Use `'cursor_before'` or `'cursor_after'` to
243
+ place the insertion point at a match boundary instead of selecting the text.
244
+ The element must support a writable text selection; static labels may not.
245
+ - `paste(text)` defaults to plain text. Use `{ format: 'md' }` for Markdown or
246
+ `{ format: 'html' }` for HTML; the receiving app determines which supplied
247
+ format it accepts. Use plain text when markup should remain literal.
248
+ - Paste uses the clipboard temporarily. It restores the previous clipboard only
249
+ while it still owns that transaction; a newer external clipboard change is
250
+ preserved.
251
+ - Both methods accept an optional `signal`. A completed dispatch, error or
252
+ cancellation does not by itself prove what changed. Observe state before
253
+ deciding whether to retry; do not blindly repeat unconfirmed text operations.
254
+
255
+ ## Reading screenshots
256
+
257
+ Every App observation captures the current screenshot internally, independent
258
+ of whether AX returns full state, a diff or no-change. The default return omits
259
+ the image. `includeScreenshot: true` exposes it when visual inspection is needed.
260
+ Prefer the text-only default when it identifies the controls and confirms the
261
+ requested change. Request an image to resolve missing or ambiguous information,
262
+ choose coordinates or verify an appearance that AX does not describe.
263
+
264
+ ```js
265
+ var state = await app.getState({ includeScreenshot: true });
311
266
  nodeRepl.write(state.text);
312
267
  for (const image of state.screenshot?.images ?? []) {
313
268
  await nodeRepl.emitImage(`data:${image.mimeType};base64,${image.dataBase64}`);
314
269
  }
315
270
  ```
316
271
 
317
- Do not stringify the whole observation or a raw driver result containing image
318
- bytes. In outer code mode, also forward each returned image block with `image()`
319
- as shown in the shared entrypoint, including images from `node_repl_wait`.
272
+ Include connection cleanup at the end of the call that emits the final
273
+ verification. Inspect that result before reporting success; reconnect and
274
+ continue if it reveals unfinished work. A separate cleanup-only model turn is
275
+ unnecessary:
276
+
277
+ ```js
278
+ await computer.close();
279
+ globalThis.computer = undefined;
280
+ ```
320
281
 
321
- Include `await computer.close()` and clearing `globalThis.computer` at the end
322
- of the cell that emits final verification. Inspect that result before reporting
323
- success; reconnect if it reveals unfinished work. Avoid a separate cleanup-only
324
- call. Reset the REPL only when no other persistent state is needed.
282
+ Reset the Node REPL only when no other persistent state is needed.
@@ -116,8 +116,19 @@ Two rules are deliberate:
116
116
  working unchanged. A `provider:modelId` selector whose provider exists but
117
117
  has no such route is an error instead: a deleted or mistyped route never
118
118
  falls back to a stored key silently.
119
- - While a route is selected, `experimental.liveVoice.apiKey` is unused, and the
120
- setup API refuses to store a new one.
119
+ - While a route is selected, `experimental.liveVoice.apiKey` and
120
+ `experimental.liveVoice.endpoint` are unused, and the setup API refuses to
121
+ store new ones.
122
+
123
+ On the free-standing path the Web Shell's Qwen Live settings set the endpoint
124
+ and model directly. Enter the OpenAI-compatible base URL of the region or
125
+ dedicated domain your key belongs to, such as
126
+ `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`; left empty, Live uses
127
+ Beijing (`https://dashscope.aliyuncs.com/compatible-mode/v1`), and a key from
128
+ elsewhere is rejected with `401`. The base URL is stored as entered and
129
+ converted to `wss://<host>/api-ws/v1/realtime` when a call starts; the host must
130
+ be a DashScope or `*.maas.aliyuncs.com` endpoint. While Live Voice is on, a new
131
+ endpoint is checked with a Realtime handshake before it is saved.
121
132
 
122
133
  ## Override reasoning capabilities
123
134
 
@@ -58,6 +58,16 @@ the more limited compatibility check described below.
58
58
  children, other daemons, containers, namespaces, and machines sharing the
59
59
  filesystem. Verify the fence from the relevant host/namespace. If you cannot
60
60
  establish this, stop here and ask an operator who can.
61
+ If a daemon was killed by `SIGKILL` or an OOM event on the same boot, its
62
+ detached ACP writer child may still be alive and holding the lease. Killing
63
+ the daemon does not clear that fence: fence the child as well before
64
+ continuing, and do not retry around or remove the lock to bypass it. A host
65
+ reboot or a restart into a new PID namespace is a different identity-boundary
66
+ case; it does not mean that a writer child survived.
67
+ If a daemon runs under a wrapper or supervisor, record its ACP descendants
68
+ before an orderly stop and include them in the stop/fence operation. That
69
+ lets normal shutdown reclaim them and limits this manual path to genuinely
70
+ non-graceful exits.
61
71
  3. Inspect the exact record and any associated claim/retired artifacts with a
62
72
  maintainer. Determine whether the last transcript and handoff proof are
63
73
  authoritative. Do not edit ownership identity fields to manufacture a match.
@@ -5,14 +5,23 @@ existing tabs and signed-in sessions.
5
5
 
6
6
  ## Use
7
7
 
8
- Use macOS or Linux with Chrome 125 or later. **Install and enable the Qwen
9
- Chrome extension in the Chrome profile you want to use.** The extension is
10
- required and is not installed by the Qwen Code package. There is no Chrome Web
11
- Store listing yet. Build it from the `packages/chrome-extension` directory of
12
- the Qwen Code repository by following its
13
- [README](https://github.com/QwenLM/qwen-code/tree/main/packages/chrome-extension#readme),
14
- then open `chrome://extensions`, enable Developer mode, choose **Load
15
- unpacked**, and pick the built `dist/extension` directory.
8
+ Use macOS or Linux with Chrome 125 or later and Qwen Code 0.24.2 or later
9
+ (check with `qwen --version`). **Install the
10
+ [Qwen Code extension from the Chrome Web Store](https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph)
11
+ in the Chrome profile you want to use.** The extension is required and is not
12
+ installed by the Qwen Code package. Chrome keeps it up to date once installed.
13
+
14
+ **Use one copy of the extension per profile.** If you previously loaded it
15
+ unpacked, remove or disable that copy in `chrome://extensions` before using the
16
+ store version. With both enabled, Qwen sees two browsers for the same profile
17
+ and may connect to either.
18
+
19
+ If the Chrome Web Store says the extension is not available in your region,
20
+ build it from source instead: follow the
21
+ [README](https://github.com/QwenLM/qwen-code/tree/main/packages/chrome-extension#readme)
22
+ of the `packages/chrome-extension` directory in the Qwen Code repository, then
23
+ open `chrome://extensions`, enable Developer mode, choose **Load unpacked**, and
24
+ pick the built `dist/extension` directory.
16
25
 
17
26
  Describe your browser task directly, for example:
18
27
 
@@ -21,10 +30,11 @@ Describe your browser task directly, for example:
21
30
  Qwen selects the Browser Use skill when appropriate. The first browser task
22
31
  automatically registers a small local connection program in your user directory;
23
32
  later tasks reuse it. Qwen confirms the connection with the extension before
24
- operating pages. If it cannot connect, open Chrome and check that the extension
25
- is enabled in the intended profile, then retry. If a runtime dependency
26
- needs configuration on first use, Qwen will guide you and may ask you to restart.
27
- No separate Browser Use Qwen extension or `qwen serve` process is needed.
33
+ operating pages. If it cannot connect, open Chrome and check that Qwen Code is
34
+ 0.24.2 or later and that the extension is enabled in the intended profile, then
35
+ retry. If a runtime dependency needs configuration on first use, Qwen will guide
36
+ you and may ask you to restart. No separate Browser Use Qwen extension or
37
+ `qwen serve` process is needed.
28
38
 
29
39
  ## Disable
30
40
 
@@ -31,7 +31,7 @@ Add the channel to `~/.qwen/settings.json`:
31
31
  "clientId": "$DINGTALK_CLIENT_ID",
32
32
  "clientSecret": "$DINGTALK_CLIENT_SECRET",
33
33
  "useConnectionManager": true,
34
- "senderPolicy": "open",
34
+ "privatePolicy": "open",
35
35
  "sessionScope": "user",
36
36
  "cwd": "/path/to/your/project",
37
37
  "instructions": "You are a concise coding assistant responding via DingTalk.",
@@ -241,7 +241,7 @@ The multi-line layout above is what the agent sees in a 1:1 chat. In a group the
241
241
  ## Tips
242
242
 
243
243
  - **Use DingTalk markdown-aware instructions** — DingTalk supports headings, bold text, links, code blocks, and tables. Keep tables compact because narrow screens may scroll horizontally.
244
- - **Restrict access** — In an organization context, `senderPolicy: "open"` may be acceptable. For tighter control, use `"allowlist"` or `"pairing"`. See [DM Pairing](./overview#dm-pairing) for details.
244
+ - **Restrict access** — In an organization context, `privatePolicy: "open"` may be acceptable. For tighter control, use `"allowlist"` or `"pairing"`. See [DM Pairing](./overview#dm-pairing) for details.
245
245
  - **Referenced messages** — Quoting (replying to) a user message includes the quoted text as context for the agent. Rich-text quotes preserve their text order and attach embedded pictures. If the quoted message is a picture, file, audio, or video message, the bot downloads and attaches it the same way as when sent directly. Quoting bot responses is not yet supported.
246
246
 
247
247
  ## Troubleshooting