@qwen-code/qwen-code 0.23.3 → 0.23.4-nightly.20260914.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 (462) hide show
  1. package/bundled/computer-use/SKILL.md +219 -154
  2. package/bundled/computer-use/references/macos.md +208 -0
  3. package/bundled/computer-use/references/windows-linux.md +247 -0
  4. package/bundled/goal-draft/SKILL.md +10 -10
  5. package/bundled/qc-helper/docs/configuration/settings.md +81 -71
  6. package/bundled/qc-helper/docs/extension/getting-started-extensions.md +2 -0
  7. package/bundled/qc-helper/docs/extension/introduction.md +9 -3
  8. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  9. package/bundled/qc-helper/docs/features/agent-board.md +89 -0
  10. package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -21
  11. package/bundled/qc-helper/docs/features/channels/dws.md +5 -1
  12. package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
  13. package/bundled/qc-helper/docs/features/code-review.md +18 -4
  14. package/bundled/qc-helper/docs/features/commands.md +9 -0
  15. package/bundled/qc-helper/docs/features/computer-use.md +26 -8
  16. package/bundled/qc-helper/docs/features/cross-session-protocol.md +23 -5
  17. package/bundled/qc-helper/docs/features/followup-suggestions.md +17 -5
  18. package/bundled/qc-helper/docs/features/goals.md +22 -18
  19. package/bundled/qc-helper/docs/features/hooks.md +280 -106
  20. package/bundled/qc-helper/docs/features/skills.md +33 -3
  21. package/bundled/qc-helper/docs/features/status-line.md +2 -0
  22. package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
  23. package/bundled/qc-helper/docs/qwen-serve.md +7 -3
  24. package/bundled/review/SKILL.md +20 -10
  25. package/bundled/review/references/persistence.md +2 -0
  26. package/bundled/workflow-authoring/SKILL.md +442 -0
  27. package/bundled/workflow-creator/SKILL.md +1 -1
  28. package/chunks/{MaxSizedBox-D4LW7RZZ.js → MaxSizedBox-RT5FZP45.js} +59 -55
  29. package/chunks/{StandaloneSessionPicker-ALTTRWUP.js → StandaloneSessionPicker-RFPH4XLD.js} +83 -79
  30. package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
  31. package/chunks/acp-subagent-executor-3OYJJTVX.js +141 -0
  32. package/chunks/{acpAgent-BBSW7XZG.js → acpAgent-DWJA7565.js} +1026 -355
  33. package/chunks/{agent-SQ6OY3QD.js → agent-JLSKPDD6.js} +43 -39
  34. package/chunks/{agent-headless-RI2THRQ7.js → agent-headless-5DRZSKW6.js} +43 -39
  35. package/chunks/{anthropicContentGenerator-JSKMKS6V.js → anthropicContentGenerator-H5YPXIDE.js} +37 -15
  36. package/chunks/{artifact-tool-PMYZCYNH.js → artifact-tool-MFGORTWZ.js} +59 -109
  37. package/chunks/{askUserQuestion-4M4YYIB4.js → askUserQuestion-WS4GUT7C.js} +3 -3
  38. package/chunks/{bridge-DAFMI72L.js → bridge-53QBYO6W.js} +63 -58
  39. package/chunks/{build-63BIOYWK.js → build-5KWQBWEQ.js} +1 -1
  40. package/chunks/{ca-KC2AISNS.js → ca-GZ4FDJU2.js} +3 -3
  41. package/chunks/{channel-management-service-OWDXVL7R.js → channel-management-service-AFVIT4VH.js} +8 -8
  42. package/chunks/{channel-settings-store-4I6JONT7.js → channel-settings-store-QJJZURJO.js} +68 -64
  43. package/chunks/{channel-worker-group-F2ZZMLNS.js → channel-worker-group-JR6JOELM.js} +8 -8
  44. package/chunks/{channel-worker-manager-2SZLJJSJ.js → channel-worker-manager-AVKJEZFL.js} +8 -8
  45. package/chunks/{channel-worker-supervisor-ZFNWMG6D.js → channel-worker-supervisor-OOYY7BAQ.js} +5 -5
  46. package/chunks/{chunk-AC6KDLH3.js → chunk-23NA3NCR.js} +1 -1
  47. package/chunks/{chunk-6JACAGYH.js → chunk-2S2WIGCM.js} +1 -1
  48. package/chunks/{chunk-IUVIBDKU.js → chunk-2YMRRI2C.js} +9 -10
  49. package/chunks/{chunk-NOAG7N22.js → chunk-3CEFQSKN.js} +2 -2
  50. package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
  51. package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
  52. package/chunks/{chunk-W5ZQMAEM.js → chunk-4Y2I3CI3.js} +1 -1
  53. package/chunks/{chunk-HGEUHUEV.js → chunk-54B2LTKP.js} +1 -1
  54. package/chunks/{chunk-IRH27ZC2.js → chunk-5EZRLTLQ.js} +4 -4
  55. package/chunks/{chunk-DLH7YIX6.js → chunk-5FK4MSHB.js} +3 -3
  56. package/chunks/{chunk-CUEXOHQH.js → chunk-5ODRE7E5.js} +9 -15
  57. package/chunks/{chunk-ZU47FBOC.js → chunk-5VPMGZ2V.js} +144 -12
  58. package/chunks/{chunk-532WHF4F.js → chunk-5VQR2DD7.js} +2 -2
  59. package/chunks/{chunk-YBUMTY7B.js → chunk-66N6C4EH.js} +1 -1
  60. package/chunks/{chunk-NHCZJQE4.js → chunk-6CHDV2MQ.js} +6 -6
  61. package/chunks/{chunk-Y2MYW47X.js → chunk-6WXVEDT2.js} +9 -2
  62. package/chunks/{chunk-SBRX4BDI.js → chunk-74NZLSCZ.js} +2 -2
  63. package/chunks/{chunk-7APZIRH3.js → chunk-755ZTFXV.js} +5 -5
  64. package/chunks/{chunk-ZHKTKHMO.js → chunk-7MIBD3LG.js} +1 -1
  65. package/chunks/{chunk-NJQTG2G3.js → chunk-7Q3B23XG.js} +11 -11
  66. package/chunks/{chunk-76RGWKLS.js → chunk-ABNX6E6K.js} +1 -1
  67. package/chunks/chunk-ACHCT36C.js +28 -0
  68. package/chunks/{chunk-NE624IVP.js → chunk-ADQUK6WA.js} +1 -1
  69. package/chunks/{chunk-PLLIWEM3.js → chunk-AEWCOE64.js} +2 -2
  70. package/chunks/{chunk-KOKPXIAN.js → chunk-AKVL46TX.js} +3 -3
  71. package/chunks/{chunk-RWVD5RRY.js → chunk-AKX4Y4PS.js} +3 -3
  72. package/chunks/{chunk-3FPYT6QC.js → chunk-ARDHE6MM.js} +23 -0
  73. package/chunks/{chunk-EVTNACMT.js → chunk-ASOI6Z7M.js} +12 -12
  74. package/chunks/{chunk-LILGKQ4B.js → chunk-AXZMWAJV.js} +156 -26
  75. package/chunks/{chunk-XBZTAGB7.js → chunk-AYS36QDK.js} +1 -1
  76. package/chunks/{chunk-MLQNSPRZ.js → chunk-BBGX7NTA.js} +15 -5
  77. package/chunks/{chunk-Q5BD56BW.js → chunk-BPLCAEJZ.js} +7 -7
  78. package/chunks/{chunk-TPKQIA7G.js → chunk-BSIOCNDK.js} +1 -1
  79. package/chunks/{chunk-U7O65WKL.js → chunk-BW2SMO6L.js} +1 -1
  80. package/chunks/{chunk-MSNHNAQZ.js → chunk-BYOV6CG6.js} +3 -3
  81. package/chunks/{chunk-WBCPROWX.js → chunk-C4HBZQNH.js} +1 -1
  82. package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
  83. package/chunks/chunk-CFMZLE3L.js +75 -0
  84. package/chunks/{chunk-SODMFNAR.js → chunk-CMM34UXX.js} +5 -5
  85. package/chunks/{chunk-AXTFYDXT.js → chunk-CXXAZ2LZ.js} +1 -1
  86. package/chunks/{chunk-OLTN767L.js → chunk-DGK4IQXU.js} +2 -2
  87. package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
  88. package/chunks/{chunk-HBU7EKY4.js → chunk-DQLYJFK2.js} +45 -15
  89. package/chunks/{chunk-BWQLXU37.js → chunk-DTMRHTFW.js} +381 -86
  90. package/chunks/{chunk-2ALXPGB4.js → chunk-E6IR653O.js} +1 -1
  91. package/chunks/{chunk-ZKYR7QS4.js → chunk-EDB556X7.js} +2 -2
  92. package/chunks/{chunk-NUQVB25K.js → chunk-EKMJR7M3.js} +2 -2
  93. package/chunks/{chunk-7QYWGTHB.js → chunk-EPVEPTI3.js} +44 -151
  94. package/chunks/{acp-subagent-executor-LEUN3N7N.js → chunk-EQAAQVLD.js} +11 -110
  95. package/chunks/{chunk-53GWJOLP.js → chunk-F7WDCD2N.js} +3 -1
  96. package/chunks/{chunk-S6Q6Q4P2.js → chunk-FBDHP23D.js} +1 -1
  97. package/chunks/{chunk-3KQBQ6FM.js → chunk-FEMYSX4G.js} +190 -28
  98. package/chunks/{chunk-3I7W2POO.js → chunk-FGROOEKM.js} +5 -40
  99. package/chunks/{chunk-LDVNJZGH.js → chunk-FIRCQJG2.js} +17 -8
  100. package/chunks/{chunk-HNLMYDQE.js → chunk-FMLBBXHB.js} +13 -9
  101. package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
  102. package/chunks/{chunk-X7UJKOHZ.js → chunk-GG27UVAT.js} +4 -6
  103. package/chunks/{chunk-DT75RKNH.js → chunk-GKLJIDLK.js} +3 -3
  104. package/chunks/{chunk-IAEXTMED.js → chunk-GNV2SFO7.js} +173 -7
  105. package/chunks/{chunk-CXTPVBFA.js → chunk-GSS4SZNG.js} +100 -17
  106. package/chunks/{chunk-BWAMMKIS.js → chunk-GYKAXTMQ.js} +135 -6
  107. package/chunks/{chunk-IL5M5NYD.js → chunk-HCKYDMYV.js} +11 -9
  108. package/chunks/{chunk-6HUXPLB5.js → chunk-HEOH7JZY.js} +5 -5
  109. package/chunks/{chunk-DTNV6UZY.js → chunk-HFJSQ4GL.js} +10 -24
  110. package/chunks/{chunk-SSGAAWLY.js → chunk-HNTIWVRC.js} +95 -73
  111. package/chunks/{chunk-E7LB57MB.js → chunk-HUD3U4GY.js} +6 -6
  112. package/chunks/{chunk-MHAADZOZ.js → chunk-HVCRYFA4.js} +3 -3
  113. package/chunks/{chunk-VZUCTJ2P.js → chunk-I6YJZGHS.js} +10 -10
  114. package/chunks/{chunk-RZHU3K6M.js → chunk-IAS753HG.js} +2 -20
  115. package/chunks/{chunk-EDMXGXAK.js → chunk-IBRQG2MP.js} +10 -13
  116. package/chunks/chunk-INGBUYL6.js +230 -0
  117. package/chunks/{chunk-7ICHPMBQ.js → chunk-IVUKJRSD.js} +4 -4
  118. package/chunks/{chunk-NRXWJXJ4.js → chunk-IYSXQ5I4.js} +15 -15
  119. package/chunks/{chunk-XGYHNWL3.js → chunk-J7LBAKDH.js} +3 -3
  120. package/chunks/{chunk-3BTSSIJO.js → chunk-JDKY7O5J.js} +99 -14
  121. package/chunks/chunk-JPXPY5L4.js +1416 -0
  122. package/chunks/{chunk-LG5Y4OWO.js → chunk-JRHKM3YQ.js} +2 -2
  123. package/chunks/{chunk-RLLRJJDR.js → chunk-JYTUSZOK.js} +2 -2
  124. package/chunks/{chunk-W5FIP7FC.js → chunk-K2JLUF22.js} +5 -5
  125. package/chunks/{chunk-POC3YMHG.js → chunk-K7YI4MSY.js} +4 -4
  126. package/chunks/{chunk-UKZ45TJL.js → chunk-KDXTBWQB.js} +420 -219
  127. package/chunks/{chunk-N7VWZDWW.js → chunk-KJFGH23C.js} +4506 -3840
  128. package/chunks/{chunk-K2OJUPOE.js → chunk-KP2FHIFR.js} +12 -0
  129. package/chunks/{chunk-GCDXVPFK.js → chunk-KYBIIQOQ.js} +31 -7
  130. package/chunks/{chunk-IV7GDNKC.js → chunk-KZCK5JUN.js} +4 -4
  131. package/chunks/{chunk-MF6E7FSA.js → chunk-L63PZHD7.js} +8 -201
  132. package/chunks/{chunk-ZW2EUO2A.js → chunk-L6DIANLD.js} +1 -1
  133. package/chunks/chunk-LAKMZLJ5.js +191 -0
  134. package/chunks/{chunk-DYFOSJHU.js → chunk-LCYVZFMV.js} +2769 -1153
  135. package/chunks/{chunk-3UXUOFO6.js → chunk-LLJIZIRQ.js} +9 -10
  136. package/chunks/chunk-LMJSPC55.js +260 -0
  137. package/chunks/{chunk-YQHLFCPU.js → chunk-LOAW7JYR.js} +32 -24
  138. package/chunks/{chunk-X6K77VHC.js → chunk-LWWRJRCD.js} +1 -1
  139. package/chunks/{chunk-UXEO7E3V.js → chunk-LYD3T3H7.js} +1 -0
  140. package/chunks/{chunk-E4UEO3XM.js → chunk-ME4JBHSB.js} +324 -2
  141. package/chunks/{chunk-BV6Q5HMY.js → chunk-MJHLKWGJ.js} +8 -7
  142. package/chunks/{chunk-NFYEQRLG.js → chunk-MQRLLBMQ.js} +1 -1
  143. package/chunks/{chunk-3XLK2QMY.js → chunk-MVLLTUOB.js} +59 -16
  144. package/chunks/{chunk-O4KNCAX4.js → chunk-NCPFOLM2.js} +11 -0
  145. package/chunks/{chunk-2SZH22YO.js → chunk-NJ2OFVUX.js} +115 -97
  146. package/chunks/{chunk-GOXQL4YH.js → chunk-NLRWN5PN.js} +2 -2
  147. package/chunks/{chunk-6MBXY6WM.js → chunk-NRQI3PGS.js} +1 -1
  148. package/chunks/{chunk-JYKWOREU.js → chunk-NSY7YQMU.js} +13 -3
  149. package/chunks/{chunk-NMRCXKQ5.js → chunk-NUIF54XD.js} +3 -3
  150. package/chunks/{chunk-3CZ2BQV6.js → chunk-NXUZFW3G.js} +49 -19
  151. package/chunks/chunk-OAWFG54S.js +32 -0
  152. package/chunks/{chunk-DAWWT2ID.js → chunk-OBHKFWAE.js} +1374 -2164
  153. package/chunks/{chunk-HBQ2NXOU.js → chunk-OKSSFN7F.js} +2 -2
  154. package/chunks/{chunk-NHJKAR6E.js → chunk-ON7M7VUD.js} +972 -18
  155. package/chunks/{chunk-5GLDOLNQ.js → chunk-OWUAZXXN.js} +4 -3
  156. package/chunks/{chunk-2UWQX4FP.js → chunk-OZEV3R3S.js} +1 -1
  157. package/chunks/{chunk-FCQJLMA2.js → chunk-Q3TFRP5G.js} +178 -8
  158. package/chunks/{chunk-ZKZHSB5W.js → chunk-QR4Q425T.js} +9 -9
  159. package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
  160. package/chunks/{chunk-TP6FYVQT.js → chunk-RSWBT7AZ.js} +33 -1
  161. package/chunks/chunk-S7UQ3V2H.js +87 -0
  162. package/chunks/{chunk-N6VQ37ZZ.js → chunk-SFL6U7U7.js} +1 -1
  163. package/chunks/{chunk-MOS5OAOG.js → chunk-SROLVJFY.js} +6 -6
  164. package/chunks/{chunk-HUXPEUFL.js → chunk-SYROIHU7.js} +1 -1
  165. package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
  166. package/chunks/chunk-TDS25ULF.js +154 -0
  167. package/chunks/chunk-U6H3XTFA.js +95 -0
  168. package/chunks/{chunk-Z3GF56ME.js → chunk-UDEWJKNB.js} +3 -3
  169. package/chunks/{chunk-7BXXIQG4.js → chunk-ULPXHGLV.js} +36 -72
  170. package/chunks/{chunk-5KI7ZDTB.js → chunk-UN6YL6VF.js} +24 -12
  171. package/chunks/{chunk-JXNIF2O5.js → chunk-V545KI73.js} +1 -1
  172. package/chunks/chunk-VGY2RGXL.js +100 -0
  173. package/chunks/{chunk-TBEXLLAO.js → chunk-VRQZESKP.js} +1 -1
  174. package/chunks/{chunk-FN3JNDRU.js → chunk-VVI7MK3V.js} +3 -3
  175. package/chunks/{chunk-NMCDMLHL.js → chunk-VYIE36BF.js} +50 -35
  176. package/chunks/{chunk-EUURTIV6.js → chunk-WBSJ6VPZ.js} +10 -2
  177. package/chunks/{chunk-NLNQNBZ2.js → chunk-WD6YQI5M.js} +1 -1
  178. package/chunks/chunk-WDH4TVD3.js +2812 -0
  179. package/chunks/chunk-WFNEY5G7.js +347 -0
  180. package/chunks/{chunk-XKBFYTCD.js → chunk-WK6DEH3Q.js} +46 -0
  181. package/chunks/{chunk-36HCNKDS.js → chunk-WKVZES7O.js} +65 -14
  182. package/chunks/{chunk-R4Q2PEFV.js → chunk-WVQHS26P.js} +1 -1
  183. package/chunks/{chunk-GSILBZLN.js → chunk-XCQJUYLQ.js} +2 -2
  184. package/chunks/{chunk-KFZYGSJN.js → chunk-XMWEUO26.js} +3 -3
  185. package/chunks/{chunk-2PJRI3EH.js → chunk-XPEZVAK2.js} +218 -43
  186. package/chunks/{chunk-OX7IZ2G5.js → chunk-XPULQNNS.js} +4 -4
  187. package/chunks/{chunk-VX63RJXE.js → chunk-XX5HQLCZ.js} +7 -0
  188. package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
  189. package/chunks/{chunk-SYLECP23.js → chunk-Y7W2X4WN.js} +4 -4
  190. package/chunks/{chunk-2ZN3O5FT.js → chunk-YAC6S4ZF.js} +6 -6
  191. package/chunks/{chunk-V2P3DOQR.js → chunk-YDFOHRS5.js} +1 -1
  192. package/chunks/{chunk-HGAELO7B.js → chunk-YFX2M3ZI.js} +2 -2
  193. package/chunks/{chunk-QMUYLYT5.js → chunk-YGFJ6BRT.js} +1 -1
  194. package/chunks/{chunk-LK2WUCDQ.js → chunk-YM6KUQ2S.js} +1 -1
  195. package/chunks/{chunk-BZM5U74J.js → chunk-YQSC7BRZ.js} +724 -468
  196. package/chunks/chunk-Z72PLR74.js +36 -0
  197. package/chunks/{chunk-6W4HBUA2.js → chunk-ZGZN54IU.js} +1 -1
  198. package/chunks/{chunk-BHTYRHJF.js → chunk-ZJ7JQUGY.js} +4 -1
  199. package/chunks/{chunk-4ALNJDHL.js → chunk-ZKIAGIGH.js} +87 -4
  200. package/chunks/{chunk-F42YYSCK.js → chunk-ZLU6NBSL.js} +8 -8
  201. package/chunks/{chunk-VG3Q2NC4.js → chunk-ZNI3YJHS.js} +32 -12
  202. package/chunks/{chunk-Q2LVVIKF.js → chunk-ZZUXUBEB.js} +29 -12
  203. package/chunks/codex-subagent-executor-QEDKWUAR.js +586 -0
  204. package/chunks/{config-utils-L6KLDYIV.js → config-utils-HCV2DX7W.js} +60 -56
  205. package/chunks/{contextCommand-UYEH7NIU.js → contextCommand-U5WK3XNI.js} +58 -54
  206. package/chunks/{core-runtime-NVHT3Z3V.js → core-runtime-RODZHBF7.js} +58 -55
  207. package/chunks/{create-sub-session-YWASE5VH.js → create-sub-session-L6UGUL4T.js} +169 -89
  208. package/chunks/{create-sub-session-TIGCFGCS.js → create-sub-session-MSGNIM37.js} +5 -2
  209. package/chunks/{cron-create-AKWX67FO.js → cron-create-U2JJ5CCF.js} +3 -3
  210. package/chunks/{cron-delete-XPB6IYZJ.js → cron-delete-7DM4LJWD.js} +2 -2
  211. package/chunks/{cron-list-XBKO4WU5.js → cron-list-VCUSZK2Y.js} +2 -2
  212. package/chunks/{daemon-G5TYKZD6.js → daemon-NJB4PWZ7.js} +3 -1
  213. package/chunks/{daemon-git-worktree-guard-FOW4RQSK.js → daemon-git-worktree-guard-Y5T7KIBG.js} +58 -54
  214. package/chunks/{daemon-status-provider-O5KQZYMP.js → daemon-status-provider-AQBGUOGB.js} +68 -63
  215. package/chunks/{daemon-trust-policy-3ATXEON7.js → daemon-trust-policy-EB2NNNDT.js} +64 -60
  216. package/chunks/{daemon-trust-policy-monitor-7MCNDNEC.js → daemon-trust-policy-monitor-AFI3E2Z5.js} +64 -60
  217. package/chunks/{de-UU2YTO37.js → de-VGY3VNBU.js} +3 -3
  218. package/chunks/{deferred-core-runtime-JK5IXL5K.js → deferred-core-runtime-H7ZSF3PZ.js} +56 -52
  219. package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
  220. package/chunks/{display-image-NAH3AZ63.js → display-image-QTHALY6N.js} +3 -3
  221. package/chunks/{dist-KLZ7XGEQ.js → dist-2QYIVNS6.js} +1 -4
  222. package/chunks/{dist-AHJYPSJL.js → dist-GUB7QRYA.js} +2 -5
  223. package/chunks/{dist-ZXTZTE54.js → dist-MPUZZOG5.js} +4 -17
  224. package/chunks/{dist-F2DVGTL3.js → dist-NIOJXMGY.js} +111 -101
  225. package/chunks/{dist-KJGRVIGJ.js → dist-PA7WPFVE.js} +5 -36
  226. package/chunks/{dist-AIKC5E5P.js → dist-SE4J6Z4O.js} +43 -669
  227. package/chunks/{dist-H6G3K26N.js → dist-T6DDPDLQ.js} +14 -34
  228. package/chunks/{dist-GWNQVPZT.js → dist-TFGETXFN.js} +10 -33
  229. package/chunks/{dist-ZA52JXAS.js → dist-VDLSBCLM.js} +1 -5
  230. package/chunks/{edit-SY35KYIE.js → edit-AFPKKMKD.js} +46 -42
  231. package/chunks/{en-CAJHTIQT.js → en-E5ZO5TZW.js} +5 -3
  232. package/chunks/{enter-worktree-54L5QJ3N.js → enter-worktree-CAARFWBI.js} +6 -5
  233. package/chunks/{enterPlanMode-HXX6KQJR.js → enterPlanMode-3Z3I6I4K.js} +43 -39
  234. package/chunks/{environment-DKXHG4HB.js → environment-G4NM4JE4.js} +59 -55
  235. package/chunks/{errors-ADY7LQJJ.js → errors-XVV3RAEG.js} +58 -54
  236. package/chunks/exec-RPKEY6HP.js +505 -0
  237. package/chunks/{exit-worktree-EORJDKDS.js → exit-worktree-JXGGUOBP.js} +6 -5
  238. package/chunks/{exitPlanMode-HSK2CQI6.js → exitPlanMode-JGUYOZCP.js} +43 -39
  239. package/chunks/{fast-path-U636VWN2.js → fast-path-SXPNVZAS.js} +10 -10
  240. package/chunks/{fast-path-settings-V7MI7EZJ.js → fast-path-settings-XDYX7X5Z.js} +2 -2
  241. package/chunks/{fr-HKNWVXRJ.js → fr-UAZJJH5N.js} +3 -3
  242. package/chunks/{glob-GUGGTH5L.js → glob-BPOP43P6.js} +43 -39
  243. package/chunks/{goal-tools-PXYRSQGX.js → goal-tools-FQXDPBCD.js} +49 -41
  244. package/chunks/{grep-3PKFKLCA.js → grep-H2I33VAO.js} +8 -3
  245. package/chunks/{handleAutoUpdate-5KHS4HIN.js → handleAutoUpdate-23TEWABL.js} +61 -57
  246. package/chunks/{i18n-KSGKMUPT.js → i18n-2LI3LH4L.js} +57 -53
  247. package/chunks/{image-gen-OCCR2WWU.js → image-gen-5G2TQ3DY.js} +6 -5
  248. package/chunks/{initializer-YYT5XEZF.js → initializer-IHSQVGZD.js} +64 -60
  249. package/chunks/{installationInfo-UNSBPYW2.js → installationInfo-KTZGFBDG.js} +57 -53
  250. package/chunks/{ja-GJS5RZGU.js → ja-2RITCMAJ.js} +3 -3
  251. package/chunks/list-K2XO7FLR.js +133 -0
  252. package/chunks/{list-agents-QLDXS5OD.js → list-agents-EWDCEPIW.js} +3 -3
  253. package/chunks/{llm-XGGLBGPH.js → llm-FFYRSEJZ.js} +161 -125
  254. package/chunks/{llm-content-generator-ZHQQT5W7.js → llm-content-generator-EXJEU5MJ.js} +14 -7
  255. package/chunks/{loadedSettingsAdapter-3DXLASK7.js → loadedSettingsAdapter-BSWBMUIT.js} +64 -60
  256. package/chunks/{loggingContentGenerator-V72OCCJO.js → loggingContentGenerator-RE3L7S24.js} +47 -43
  257. package/chunks/{loop-wakeup-HHMYIC7Z.js → loop-wakeup-VG6CGBQA.js} +4 -4
  258. package/chunks/{ls-N7ABR6HI.js → ls-6ZB3BEIR.js} +1 -1
  259. package/chunks/{lsp-LTOFWG5P.js → lsp-M54FQARP.js} +5 -1
  260. package/chunks/{managed-npm-update-HV5LPZH2.js → managed-npm-update-D56DKMKV.js} +57 -53
  261. package/chunks/mcp-BS46APKT.js +127 -0
  262. package/chunks/model-configuration-L5WZ7NBY.js +140 -0
  263. package/chunks/modelConfigUtils-WAM6HBUX.js +119 -0
  264. package/chunks/{monitor-TLBNM4MV.js → monitor-CYXNE7UB.js} +43 -39
  265. package/chunks/{nonInteractiveCli-LSJSQ2W4.js → nonInteractiveCli-ZPBORWHM.js} +112 -107
  266. package/chunks/{notebook-edit-OSPOLZP6.js → notebook-edit-CSYGREO5.js} +45 -41
  267. package/chunks/{openaiContentGenerator-BE4S5TRD.js → openaiContentGenerator-KDGLKJVS.js} +24 -19
  268. package/chunks/{openaiResponsesContentGenerator-RTCAJ5V5.js → openaiResponsesContentGenerator-AWRYZLJU.js} +110 -19
  269. package/chunks/{pidfile-H32FEPWA.js → pidfile-QGUW5UJ7.js} +56 -52
  270. package/chunks/{processUtils-SSLIPDEA.js → processUtils-Q6GS3E2T.js} +2 -2
  271. package/chunks/{prompt-terminal-ledger-I5SLL6UF.js → prompt-terminal-ledger-BLCAZPSQ.js} +57 -53
  272. package/chunks/{pt-FXMYXEUV.js → pt-5ZF7ZQUV.js} +3 -3
  273. package/chunks/{qwenContentGenerator-TMQC623Z.js → qwenContentGenerator-LSRUVWCL.js} +47 -43
  274. package/chunks/{qwenOAuth2-3ZRQHHTC.js → qwenOAuth2-WIEUEFEY.js} +5 -4
  275. package/chunks/{read-file-T2QAIZE2.js → read-file-56DVLPQR.js} +9 -8
  276. package/chunks/{read-mcp-resource-B37WANAQ.js → read-mcp-resource-LPSWXVOD.js} +1 -1
  277. package/chunks/{record-artifact-OAXWXZ5D.js → record-artifact-PXMNP7GZ.js} +3 -3
  278. package/chunks/{record-source-D7R7X3GT.js → record-source-2GSY5JD5.js} +6 -6
  279. package/chunks/{report-findings-AR3VC6EQ.js → report-findings-W6GR7SYZ.js} +4 -4
  280. package/chunks/{request-shutdown-IKNWTX5M.js → request-shutdown-53SNYGVR.js} +5 -5
  281. package/chunks/{resumeHistoryUtils-QLKDH5GY.js → resumeHistoryUtils-ZM5PHHNI.js} +63 -59
  282. package/chunks/{ripGrep-YGWL7KCV.js → ripGrep-INOTDWED.js} +13 -11
  283. package/chunks/{ru-RMHURE5U.js → ru-7BNZFQKG.js} +3 -3
  284. package/chunks/{run-qwen-serve-26KZDECC.js → run-qwen-serve-NZY4OHHH.js} +314 -127
  285. package/chunks/{runtime-BMEIVDDG.js → runtime-6CSFTXGK.js} +69 -65
  286. package/chunks/{scheduled-tasks-NCFPP6VQ.js → scheduled-tasks-T5DMXMRI.js} +66 -60
  287. package/chunks/{scheduler-47TVMUVN.js → scheduler-STH4FWGX.js} +58 -54
  288. package/chunks/{sdk-exporters-http-VWTF4W6K.js → sdk-exporters-http-3R2TRQHE.js} +2 -1
  289. package/chunks/{sdk-impl-G6FVTBQZ.js → sdk-impl-4WF3VZ2F.js} +3 -3
  290. package/chunks/{send-message-TWOGWCBG.js → send-message-UMJKN27Q.js} +7 -7
  291. package/chunks/{serve-KL3G6LQQ.js → serve-K4VRD7S3.js} +66 -62
  292. package/chunks/{server-LBPYXZ5G.js → server-SAF6RZWD.js} +783 -350
  293. package/chunks/{session-YG6742LO.js → session-2IZX2R3S.js} +117 -112
  294. package/chunks/{session-attachments-root-OUBQDYC4.js → session-attachments-root-WFCEIOC7.js} +56 -52
  295. package/chunks/{session-pr-refresh-EKGMYNAW.js → session-pr-refresh-H7LDUL7K.js} +66 -60
  296. package/chunks/{settings-DDNHJX2L.js → settings-55B6W4ML.js} +67 -63
  297. package/chunks/{shell-KUCXWITU.js → shell-C6HWMJCS.js} +43 -39
  298. package/chunks/{skill-JQLKPNWZ.js → skill-IYKRY5HC.js} +128 -23
  299. package/chunks/{skill-settings-XERQCUXZ.js → skill-settings-YWKLCBV2.js} +72 -60
  300. package/chunks/{spawnChannel-GQ45QFGB.js → spawnChannel-YXUNPB3M.js} +60 -55
  301. package/chunks/{standalone-update-PRF3ILGZ.js → standalone-update-H6YIWY5F.js} +58 -54
  302. package/chunks/{start-opentui-ui-JDSOZE3N.js → start-opentui-ui-U2NNOY65.js} +2700 -2166
  303. package/chunks/{startInteractiveUI-RRW3JVHN.js → startInteractiveUI-ZF5EJN6N.js} +1621 -1783
  304. package/chunks/{syntheticOutput-F6F27JMK.js → syntheticOutput-EX5L5GYI.js} +2 -2
  305. package/chunks/{task-create-Y623TBHB.js → task-create-75HVPEAH.js} +7 -7
  306. package/chunks/{task-list-FCPEEGWL.js → task-list-ZLJSMRFA.js} +2 -2
  307. package/chunks/{task-stop-QTKZXLPH.js → task-stop-MD7P6QGK.js} +1 -1
  308. package/chunks/{task-update-YLSXF25N.js → task-update-RI7QNVDP.js} +20 -13
  309. package/chunks/{team-create-5DRLOLOE.js → team-create-XWCSBY3R.js} +43 -39
  310. package/chunks/{team-delete-S7TLHZCF.js → team-delete-RIDINW6I.js} +1 -1
  311. package/chunks/{team-plan-approval-MWSGAL5T.js → team-plan-approval-B2SOZ46Z.js} +43 -39
  312. package/chunks/{terminal-image-renderer-H7PD4FQW.js → terminal-image-renderer-HKBBPT64.js} +58 -54
  313. package/chunks/{theme-manager-7AV73D6R.js → theme-manager-LHBAB3RV.js} +56 -52
  314. package/chunks/{todoWrite-5QI2H2FW.js → todoWrite-XSTG2VT5.js} +6 -3
  315. package/chunks/{tool-search-UGYTBLUV.js → tool-search-D7UTGG7X.js} +17 -12
  316. package/chunks/{total-session-admission-JIHSTJ5S.js → total-session-admission-VN63755O.js} +63 -58
  317. package/chunks/{trustedFolders-5VCBXFOP.js → trustedFolders-GD56NJEV.js} +57 -53
  318. package/chunks/{update-relaunch-4LF3APCV.js → update-relaunch-BMQKKDR6.js} +5 -5
  319. package/chunks/{updateCheck-4T3WUE5F.js → updateCheck-BZFE6Z5I.js} +60 -56
  320. package/chunks/{useAutoAcceptIndicator-UMGB64Z6.js → useAutoAcceptIndicator-RD4YNRGG.js} +68 -64
  321. package/chunks/{validateNonInterActiveAuth-GFJ72U2C.js → validateNonInterActiveAuth-RWWD7TVJ.js} +109 -104
  322. package/chunks/{version-EAAZN4T2.js → version-DGWI3JF2.js} +1 -1
  323. package/chunks/{web-fetch-VRU3A2NI.js → web-fetch-2KXAHKDU.js} +15 -13
  324. package/chunks/web-search-LUI2YS33.js +45 -0
  325. package/chunks/{web-shell-static-CCN4JZEE.js → web-shell-static-T7UGLVE4.js} +2 -7
  326. package/chunks/{workflow-UHPFALVZ.js → workflow-WG7WNWMP.js} +179 -79
  327. package/chunks/workspace-providers-status-VJYJMUDI.js +133 -0
  328. package/chunks/{workspace-registration-store-A7RGKW62.js → workspace-registration-store-B3XUNFOG.js} +2 -2
  329. package/chunks/{workspace-registry-C2NGE6SD.js → workspace-registry-56R5RBVU.js} +63 -58
  330. package/chunks/{workspace-runtime-coordinator-QKMZ24YF.js → workspace-runtime-coordinator-EKDPCK4L.js} +66 -59
  331. package/chunks/{workspace-service-RQTTAGGC.js → workspace-service-UYGLM6XX.js} +70 -65
  332. package/chunks/workspace-skills-status-5HMTP63B.js +130 -0
  333. package/chunks/{workspace-trust-reconciler-KFWATZUU.js → workspace-trust-reconciler-AST2535P.js} +73 -68
  334. package/chunks/{write-file-DPVB2SBQ.js → write-file-F4R5RBBH.js} +45 -41
  335. package/chunks/{zh-TW-2K2WRFPY.js → zh-TW-7PRVUGLW.js} +5 -3
  336. package/chunks/{zh-S5V3Z5CR.js → zh-V2EYTYJP.js} +5 -3
  337. package/chunks/{zoom-image-S7AWLAPC.js → zoom-image-6HKQ5MFU.js} +11 -10
  338. package/cli.js +18 -17
  339. package/codeModeHost.js +4425 -0
  340. package/export-transcript-document.css +1 -1
  341. package/export-transcript-document.js +151 -151
  342. package/locales/ca.js +5 -6
  343. package/locales/de.js +5 -6
  344. package/locales/en.js +7 -6
  345. package/locales/fr.js +6 -6
  346. package/locales/ja.js +5 -6
  347. package/locales/pt.js +5 -6
  348. package/locales/ru.js +6 -6
  349. package/locales/zh-TW.js +7 -6
  350. package/locales/zh.js +7 -6
  351. package/package.json +4 -3
  352. package/web-shell/assets/{abnfDiagram-VCTEODGH-nU24rpIE.js → abnfDiagram-VCTEODGH-BtpzKw3A.js} +1 -1
  353. package/web-shell/assets/{arc-D1hTu8QI.js → arc-CQiVKZJP.js} +1 -1
  354. package/web-shell/assets/architectureDiagram-5GKGNRK7-ekIPBb2d.js +36 -0
  355. package/web-shell/assets/blockDiagram-NRAW4CY4-BrRWkWri.js +129 -0
  356. package/web-shell/assets/{c4Diagram-UCG6FXSJ-kEFoC1ei.js → c4Diagram-UCG6FXSJ-qYS8CYZ3.js} +4 -4
  357. package/web-shell/assets/channel-DSQQnOZj.js +1 -0
  358. package/web-shell/assets/{chunk-2Q5K7J3B-DbT9wS7j.js → chunk-2Q5K7J3B-ZasyyEZm.js} +1 -1
  359. package/web-shell/assets/{chunk-5VM5RSS4-CNbULt6O.js → chunk-5VM5RSS4-C_IzCGeA.js} +1 -1
  360. package/web-shell/assets/{chunk-F27PBJKO-CbQRy4Tb.js → chunk-F27PBJKO-C25NZOyD.js} +1 -1
  361. package/web-shell/assets/chunk-G27WJ6UU-XPOHNSGX.js +231 -0
  362. package/web-shell/assets/chunk-JWPE2WC7-BQBh0Xni.js +1 -0
  363. package/web-shell/assets/chunk-LCL6LL3I-CoShjpX7.js +206 -0
  364. package/web-shell/assets/chunk-POPQ4Y6H-BwRmCDSz.js +1 -0
  365. package/web-shell/assets/{chunk-SVP7TREG-DyBb2Axj.js → chunk-SVP7TREG-DSzE5-Mw.js} +4 -4
  366. package/web-shell/assets/{chunk-XXDRQBXY-BIA0eb5B.js → chunk-XXDRQBXY-BQSQv30h.js} +1 -1
  367. package/web-shell/assets/classDiagram-DTDB5LWJ-V94ta08R.js +1 -0
  368. package/web-shell/assets/classDiagram-v2-JRS7N3AN-V94ta08R.js +1 -0
  369. package/web-shell/assets/cose-bilkent-JH36ORCC-XVUVTHVo.js +1 -0
  370. package/web-shell/assets/cynefin-OW5HDTMX-CrsKx4lQ.js +178 -0
  371. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-LENf_IUy.js → cynefinDiagram-5FMLGOSQ-BPeZEuHw.js} +1 -1
  372. package/web-shell/assets/{cytoscape.esm-CUqq0XTU.js → cytoscape.esm-DJK6lGiH.js} +3 -3
  373. package/web-shell/assets/dagre-3AP2YEHR-D31cQ2Qs.js +4 -0
  374. package/web-shell/assets/diagram-S7CK7UJ4-zyiG097Q.js +30 -0
  375. package/web-shell/assets/diagram-UQ7AKVKN-Br3vtfsy.js +41 -0
  376. package/web-shell/assets/diagram-VSXAHHWV-Bxkhjx4u.js +3 -0
  377. package/web-shell/assets/diagram-VX7I27RA-BQH8QiDk.js +24 -0
  378. package/web-shell/assets/diagram-Z3DM3KII-B_aQ1cw0.js +24 -0
  379. package/web-shell/assets/{ebnfDiagram-PWID7BFC-BGpiquRm.js → ebnfDiagram-PWID7BFC-B9N7BRQE.js} +1 -1
  380. package/web-shell/assets/{erDiagram-SSCWMZ5O-D0besu_U.js → erDiagram-SSCWMZ5O-Cx6Hb1Re.js} +13 -13
  381. package/web-shell/assets/flowDiagram-A5DVABFB-DTuLP7GU.js +168 -0
  382. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-CNlsAeNr.js → ganttDiagram-EL5Y4UJY-DYS3d-sL.js} +1 -1
  383. package/web-shell/assets/gitGraphDiagram-WWUBYQGX-Cp0EGx04.js +106 -0
  384. package/web-shell/assets/index-45-LkPDB.js +3 -0
  385. package/web-shell/assets/{index-CGT341lL.js → index-DohPy72Z.js} +1 -1
  386. package/web-shell/assets/index-H8um-iEl.js +2207 -0
  387. package/web-shell/assets/index-n6N-2a3v.css +36 -0
  388. package/web-shell/assets/{infoDiagram-RXCK75RN-Bpai64Ll.js → infoDiagram-RXCK75RN-9--kukiT.js} +1 -1
  389. package/web-shell/assets/ishikawaDiagram-5VMMS53U-CGBdsDLD.js +70 -0
  390. package/web-shell/assets/{journeyDiagram-EYS64GPL-iz_DKgFX.js → journeyDiagram-EYS64GPL-DeXhcscd.js} +1 -1
  391. package/web-shell/assets/kanban-definition-3QL26DDD-CFdvsU3b.js +89 -0
  392. package/web-shell/assets/{layout-qEvKgnvU.js → layout-DAnwQ3KB.js} +1 -1
  393. package/web-shell/assets/{linear-C6lklGdq.js → linear-CTo7v7Nh.js} +1 -1
  394. package/web-shell/assets/mermaid.core-jggSxF1i.js +312 -0
  395. package/web-shell/assets/mindmap-definition-FBJOCRG2-DzIepvlJ.js +96 -0
  396. package/web-shell/assets/{pegDiagram-XKGWAZYB-BhD0q0i6.js → pegDiagram-XKGWAZYB-BFGS9GJv.js} +1 -1
  397. package/web-shell/assets/pieDiagram-E7YTZNPT-B2UUcNIT.js +39 -0
  398. package/web-shell/assets/quadrantDiagram-AXDQQJYC-BgM6htrX.js +7 -0
  399. package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
  400. package/web-shell/assets/{railroadDiagram-O6MQD6OU-E1g2KIFK.js → railroadDiagram-O6MQD6OU-Dk9cS7N-.js} +1 -1
  401. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CuerYJOe.js → requirementDiagram-EFPCY7ZU-C9oRg7xi.js} +13 -13
  402. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CqWyCZGA.js → sankeyDiagram-P5KCCOFB-B-_c7GzI.js} +7 -7
  403. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-B-YWb8x4.js → sequenceDiagram-WJ2MYXX4-R0M-347u.js} +16 -16
  404. package/web-shell/assets/sizeCapture-X5ZJPWSS-Df0f8UAW.js +1 -0
  405. package/web-shell/assets/{stateDiagram-HBIQ2CUA-C8LDpNHS.js → stateDiagram-HBIQ2CUA-CsUEfAA-.js} +1 -1
  406. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CnSuTPJ2.js +1 -0
  407. package/web-shell/assets/swimlanes-XN3QIQJK-9OGHVSrx.js +1 -0
  408. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Bb7TcWQw.js +8 -0
  409. package/web-shell/assets/timeline-definition-24CTP7MA-DAfGqS2B.js +120 -0
  410. package/web-shell/assets/vennDiagram-4TSXK5OY-CKATpwHi.js +34 -0
  411. package/web-shell/assets/wardleyDiagram-VM6X3IG4-CQHdhTrm.js +78 -0
  412. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-ruD2Wjhg.js → xychartDiagram-S5SC5T6Z-5k9NLqlY.js} +1 -1
  413. package/web-shell/index.html +2 -2
  414. package/chunks/chunk-7Q2AXRDJ.js +0 -114
  415. package/chunks/chunk-AEY27Z35.js +0 -1411
  416. package/chunks/chunk-CFKIH3D3.js +0 -50
  417. package/chunks/chunk-HWVUSYSN.js +0 -126
  418. package/chunks/chunk-QHMLYMMS.js +0 -32
  419. package/chunks/chunk-SAH4BD2J.js +0 -92
  420. package/chunks/chunk-TWUKBNWM.js +0 -86
  421. package/chunks/chunk-ZTTC7T4X.js +0 -126
  422. package/chunks/list-YL6LDQKQ.js +0 -129
  423. package/chunks/mcp-IYVSIW6O.js +0 -123
  424. package/chunks/web-search-NEGYQNDJ.js +0 -912
  425. package/chunks/workspace-providers-status-AEYISSU2.js +0 -127
  426. package/chunks/workspace-skills-status-5HWZU3HX.js +0 -126
  427. package/web-shell/assets/architectureDiagram-5GKGNRK7-B_fgkKe7.js +0 -36
  428. package/web-shell/assets/blockDiagram-NRAW4CY4-C3pddUNg.js +0 -129
  429. package/web-shell/assets/channel-Blod4z1X.js +0 -1
  430. package/web-shell/assets/chunk-G27WJ6UU-CVbXTxYk.js +0 -231
  431. package/web-shell/assets/chunk-JWPE2WC7-D89c_BXy.js +0 -1
  432. package/web-shell/assets/chunk-LCL6LL3I-B7-I_9KB.js +0 -206
  433. package/web-shell/assets/chunk-POPQ4Y6H-DcLQFzS4.js +0 -1
  434. package/web-shell/assets/classDiagram-DTDB5LWJ-D6hFDMqb.js +0 -1
  435. package/web-shell/assets/classDiagram-v2-JRS7N3AN-D6hFDMqb.js +0 -1
  436. package/web-shell/assets/cose-bilkent-JH36ORCC-Db2FYN85.js +0 -1
  437. package/web-shell/assets/cynefin-OW5HDTMX-i4GwmBVy.js +0 -178
  438. package/web-shell/assets/dagre-3AP2YEHR-CF9XVrD9.js +0 -4
  439. package/web-shell/assets/diagram-S7CK7UJ4-DD5PJfSm.js +0 -30
  440. package/web-shell/assets/diagram-UQ7AKVKN-CjD_sBMj.js +0 -41
  441. package/web-shell/assets/diagram-VSXAHHWV-U5WwMqyA.js +0 -3
  442. package/web-shell/assets/diagram-VX7I27RA-BujpHJJf.js +0 -24
  443. package/web-shell/assets/diagram-Z3DM3KII-3ZLtKEXo.js +0 -24
  444. package/web-shell/assets/flowDiagram-A5DVABFB-9DwDuIyr.js +0 -168
  445. package/web-shell/assets/gitGraphDiagram-WWUBYQGX-C_pPFiTR.js +0 -106
  446. package/web-shell/assets/index-BYWs4JWq.js +0 -3
  447. package/web-shell/assets/index-D3YS6KuJ.js +0 -2173
  448. package/web-shell/assets/index-eBxK3rs2.css +0 -36
  449. package/web-shell/assets/ishikawaDiagram-5VMMS53U-ktpJFq4r.js +0 -70
  450. package/web-shell/assets/kanban-definition-3QL26DDD-m_gG00Yt.js +0 -89
  451. package/web-shell/assets/mermaid.core-DSCYB_2P.js +0 -312
  452. package/web-shell/assets/mindmap-definition-FBJOCRG2-DRQbT8w-.js +0 -96
  453. package/web-shell/assets/pieDiagram-E7YTZNPT-BvIGQCSd.js +0 -39
  454. package/web-shell/assets/quadrantDiagram-AXDQQJYC-BDQtfpU-.js +0 -7
  455. package/web-shell/assets/sizeCapture-X5ZJPWSS-BB7YY4Tl.js +0 -1
  456. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C4CbdvGa.js +0 -1
  457. package/web-shell/assets/swimlanes-XN3QIQJK-D94vOoxZ.js +0 -1
  458. package/web-shell/assets/swimlanesDiagram-VK2B7HYN--QNSIOC8.js +0 -8
  459. package/web-shell/assets/timeline-definition-24CTP7MA-C9C8uEYm.js +0 -120
  460. package/web-shell/assets/vennDiagram-4TSXK5OY-CYzMHbVW.js +0 -34
  461. package/web-shell/assets/wardleyDiagram-VM6X3IG4-G9nhtLES.js +0 -78
  462. package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
@@ -9,213 +9,280 @@ 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.3
20
- npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.5
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
- Import the `ComputerUse` API directly once per fresh `node_repl` session:
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:
27
62
 
28
63
  ```js
29
64
  globalThis.computer = await (
30
65
  await import('@qwen-code/cua-sdk/computer-use')
31
66
  ).ComputerUse.create();
67
+ 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
+ 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
+ ```
85
+
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
+ }
32
95
  ```
33
96
 
34
- ## API surface
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.
108
+
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.
35
135
 
36
136
  ```ts
37
137
  type WindowTarget = { pid: number; windowId: number };
38
- type ElementTarget = {
39
- pid: number;
40
- windowId?: number;
41
- elementToken: string;
42
- };
138
+ type ElementTarget = { pid: number; windowId?: number; elementToken: string };
43
139
  type CoordinateTarget = WindowTarget & { x: number; y: number };
44
140
  type PointOrElementTarget = CoordinateTarget | ElementTarget;
45
141
  type ExactActionTarget = WindowTarget | ElementTarget;
46
- type DeliveryOptions = { deliveryMode?: DeliveryMode };
47
142
 
48
143
  type ComputerUse = {
49
- click: (
50
- args: PointOrElementTarget &
51
- DeliveryOptions & { button?: MouseButton; count?: number },
52
- ) => Promise<object>;
53
- doubleClick: (
54
- args: PointOrElementTarget & DeliveryOptions,
55
- ) => Promise<object>;
56
- rightClick: (
57
- args: PointOrElementTarget & DeliveryOptions & { modifier?: string[] },
58
- ) => Promise<object>;
59
- drag: (
60
- args: WindowTarget &
61
- DeliveryOptions & {
62
- fromX: number;
63
- fromY: number;
64
- toX: number;
65
- toY: number;
66
- },
67
- ) => Promise<object>;
68
- observeWindow: (
69
- args: WindowTarget & { disableDiff?: boolean; includeScreenshot?: boolean },
70
- ) => Promise<WindowObservation>;
71
- listApps: () => Promise<Array<App>>;
72
- listWindows: (args: { pid: number }) => Promise<Array<Window>>;
73
- performSecondaryAction: (
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(
74
197
  args: ElementTarget & { action: string },
75
- ) => Promise<object>;
76
- pressKey: (
77
- args: ExactActionTarget &
78
- DeliveryOptions & { key: string; modifiers?: string[] },
79
- ) => Promise<object>;
80
- hotkey: (
81
- args: ExactActionTarget & DeliveryOptions & { keys: string[] },
82
- ) => Promise<object>;
83
- scroll: (
84
- args: PointOrElementTarget &
85
- DeliveryOptions & { direction: Direction; amount?: number },
86
- ) => Promise<object>;
87
- setValue: (args: ElementTarget & { value: string }) => Promise<object>;
88
- typeText: (
89
- args: ExactActionTarget & DeliveryOptions & { text: string },
90
- ) => Promise<object>;
91
- close: () => Promise<void>;
92
- };
93
-
94
- type App = {
95
- name?: string;
96
- bundle_id?: string;
97
- pid?: number;
98
- running?: boolean;
99
- launch_path?: string;
100
- };
101
-
102
- type Window = {
103
- window_id: number;
104
- title?: string;
105
- is_on_screen?: boolean;
106
- on_current_space?: boolean;
198
+ ): Promise<object>;
199
+ close(): Promise<void>;
107
200
  };
108
201
 
109
202
  type WindowObservation = {
110
203
  pid: number;
111
204
  windowId: number;
112
205
  mode: 'full' | 'diff' | 'no_change';
113
- resyncReason?: string;
114
206
  text: string;
115
- elements: Array<Element>;
116
- screenshot?: Screenshot;
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 }> };
117
215
  };
118
-
119
- type Element = {
120
- element_token?: string;
121
- role?: string;
122
- label?: string;
123
- automation_id?: string;
124
- value?: unknown;
125
- actions?: string[];
126
- };
127
-
128
- type Screenshot = {
129
- images: Array<{ mimeType: string; dataBase64: string }>;
130
- };
131
-
132
- type Direction = 'up' | 'down' | 'left' | 'right';
133
- type MouseButton = 'left' | 'right' | 'middle';
134
- type DeliveryMode = 'background' | 'foreground';
135
216
  ```
136
217
 
137
- ## Workflow
138
-
139
- ### 1. Initialize
218
+ ### Discover and observe
140
219
 
141
- Start by getting the state for the app and window you want to use. When the task
142
- names an app, filter for that name directly:
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.
143
223
 
144
224
  ```js
145
225
  var apps = await computer.listApps();
146
- var matches = apps.filter(
147
- (app) => app.name === 'Target App' || app.bundle_id === 'com.example.target',
148
- );
149
- nodeRepl.write(JSON.stringify(matches));
150
-
151
- var windows = await computer.listWindows({ pid: matches[0].pid });
152
- var target = { pid: matches[0].pid, windowId: windows[0].window_id };
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 };
153
235
  var state = await computer.observeWindow(target);
154
- nodeRepl.write(state.text); // This will return the accessibility tree
236
+ nodeRepl.write(state.text);
155
237
  ```
156
238
 
157
- If you cannot identify an app from the task, prior context, or builtin apps,
158
- start by discovering the available apps:
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.
159
242
 
160
- ```js
161
- var apps = await computer.listApps();
162
- nodeRepl.write(JSON.stringify(apps));
163
- ```
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.
164
247
 
165
- After performing one or more UI actions, call `observeWindow(...)` before
166
- deciding what to do next. This keeps you in the current UI state. Read the
167
- current actionable `element_token` values from `state.elements`; tokens for
168
- unchanged elements remain valid across `diff` and `no_change` observations.
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.
169
252
 
170
- For token efficiency, when appropriate, the accessibility tree will be returned
171
- as a diff from the most previous accessibility tree, listing only the elements
172
- that were removed, added, or changed. Prefer this default diff output; pass
173
- `disableDiff: true` only when you need a fresh full accessibility tree. If you
174
- disregard the text from a previous call to `observeWindow`, such as when you only
175
- emit the screenshot, get the full tree next time you inspect AX text.
176
- `state.elements` remains the current full actionable element list when
177
- `state.text` is a diff or reports no change.
253
+ ### Act and verify
178
254
 
179
- ### 2. Actions using app
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.
180
259
 
181
- Perform one or more actions, and then fetch the latest state:
260
+ Batch only actions whose target remains the same, then observe:
182
261
 
183
262
  ```js
184
263
  await computer.click({ pid: target.pid, elementToken });
185
- await computer.setValue({ pid: target.pid, elementToken, value: 'openai.com' });
186
- await computer.pressKey({ ...target, key: 'Enter' });
187
264
  await computer.typeText({ ...target, text: 'hello' });
188
- await computer.scroll({
189
- pid: target.pid,
190
- elementToken,
191
- direction: 'down',
192
- amount: 1,
193
- });
194
- await computer.performSecondaryAction({
195
- pid: target.pid,
196
- elementToken,
197
- action: 'Show Menu',
198
- });
199
265
  nodeRepl.write((await computer.observeWindow(target)).text);
200
266
  ```
201
267
 
202
- Notes:
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.
203
271
 
204
- - Prefer `element_token`-based actions over coordinate actions. If AX actions or AX text are unavailable or behave unexpectedly, switch to screenshots, coordinate clicks, and key presses.
205
- - `doubleClick` and `rightClick` invoke their dedicated SDK actions; `rightClick` also accepts optional modifiers.
206
- - If the UI is not behaving as expected, try fetching the latest `observeWindow(...)` state to make sure you have the latest context.
207
- - Prefer using accessibility text over screenshots for efficiency, but if the interface is not fully working or not providing enough context, make sure to fetch a screenshot to get more context. The accessibility interface may be incomplete in some applications, so a screenshot helps fully understand what is going on.
208
- - `performSecondaryAction` invokes an accessibility action that an element exposes besides a normal click, such as expanding a disclosure row, showing a menu, incrementing a control, or cancelling something. It requires an action actually exposed for that element in the accessibility text. Do not guess action names.
209
- - `pressKey` presses one key and accepts optional modifiers; `hotkey` sends a key combination such as `{ keys: ['ctrl', 'c'] }`. Single-key examples include `"a"`, `"Enter"`, `"Tab"`, and `"Up"`.
210
- - Take care when passing strings containing `\n` or `\r` to `typeText`, as it simulates pressing the return key. Many apps with message composers or forms will respond by sending the message or submitting the form rather than inserting a newline.
211
- - The SDK targets an exact PID and window ID. If an action opens a dialog, menu, or new window, call `listWindows({ pid })` again and select the current window before continuing.
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.
212
276
 
213
- ## Reading screenshots
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.
214
281
 
215
- Request a screenshot with the observation, read its accessibility text, and
216
- emit each returned image:
282
+ ### Read screenshots
217
283
 
218
- `includeScreenshot: true` is the parameter that requests a screenshot.
284
+ Request the screenshot explicitly, print only the observation's text, and emit
285
+ each image:
219
286
 
220
287
  ```js
221
288
  var state = await computer.observeWindow({
@@ -228,11 +295,9 @@ for (const image of state.screenshot?.images ?? []) {
228
295
  }
229
296
  ```
230
297
 
231
- When all Computer Use work is complete:
232
-
233
- ```js
234
- await computer.close();
235
- globalThis.computer = undefined;
236
- ```
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`.
237
301
 
238
- Reset the Node REPL only when no other persistent state is needed.
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.
@@ -0,0 +1,208 @@
1
+ # macOS Computer Use
2
+
3
+ Use this workflow only when `computer.getPlatform()` returned `macos`.
4
+ The shared entrypoint has already initialized `computer`.
5
+
6
+ ## API surface
7
+
8
+ ```ts
9
+ type Point = number | { x: number; y: number };
10
+ type ComputerUse = {
11
+ getApp: (nameOrIdentifierOrPath: string) => Promise<App>;
12
+ listApps: () => Promise<
13
+ Array<{ id: string; displayName: string; isRunning: boolean }>
14
+ >;
15
+ close: () => Promise<void>;
16
+ };
17
+ type App = {
18
+ getState: (options?: {
19
+ disableDiff?: boolean;
20
+ includeScreenshot?: boolean;
21
+ maxTextChars?: number;
22
+ }) => Promise<State>;
23
+ click: (
24
+ point: Point,
25
+ options?: { button?: 'left' | 'right' | 'middle'; count?: number },
26
+ ) => Promise<object>;
27
+ doubleClick: (point: Point) => Promise<object>;
28
+ rightClick: (
29
+ point: Point,
30
+ options?: { modifier?: string[] },
31
+ ) => Promise<object>;
32
+ setValue: (element: number, value: string) => Promise<object>;
33
+ performSecondaryAction: (element: number, action: string) => Promise<object>;
34
+ typeText: (text: string) => Promise<object>;
35
+ paste: (
36
+ text: string,
37
+ options?: { format?: 'text' | 'md' | 'html'; signal?: AbortSignal },
38
+ ) => Promise<object>;
39
+ selectText: (
40
+ element: number,
41
+ text: string,
42
+ options?: {
43
+ prefix?: string;
44
+ suffix?: string;
45
+ selection?: 'text' | 'cursor_before' | 'cursor_after';
46
+ signal?: AbortSignal;
47
+ },
48
+ ) => Promise<object>;
49
+ pressKey: (
50
+ key: string,
51
+ options?: { modifiers?: string[] },
52
+ ) => Promise<object>;
53
+ hotkey: (keys: string[]) => Promise<object>;
54
+ scroll: (
55
+ point: Point,
56
+ options: { direction: 'up' | 'down' | 'left' | 'right'; amount?: number },
57
+ ) => Promise<object>;
58
+ drag: (options: {
59
+ fromX: number;
60
+ fromY: number;
61
+ toX: number;
62
+ toY: number;
63
+ }) => Promise<object>;
64
+ };
65
+ type State = {
66
+ app: string;
67
+ window: string;
68
+ mode: 'full' | 'diff' | 'no_change';
69
+ text: string;
70
+ screenshot?: { images: Array<{ mimeType: string; dataBase64: string }> };
71
+ };
72
+ ```
73
+
74
+ ## Workflow
75
+
76
+ ### 1. Initialize
77
+
78
+ If initialization already bound the task's app and returned its state, reuse
79
+ that `app` and observation. Otherwise, bind the app named by the task, then read its state.
80
+ `getApp()` binds identity; `getState()` can open a discovered stopped app. Combine these
81
+ steps in one Node REPL call:
82
+
83
+ ```js
84
+ var app = await computer.getApp('Microsoft Excel');
85
+ nodeRepl.write((await app.getState()).text);
86
+ ```
87
+
88
+ The app handle tracks its current window and dialog. Read the returned window
89
+ title to confirm the intended document. If the app is unknown or its name is
90
+ ambiguous, discover applications with `computer.listApps()` and use a matching
91
+ application `id`.
92
+
93
+ AX text uses short numeric IDs, such as `[37] TextField "Name"`. Use IDs from
94
+ the current observation for element actions. IDs can change when the app's
95
+ window or session changes. Disabled and static-text rows are observation-only.
96
+
97
+ For token efficiency, the accessibility tree will be returned
98
+ as a diff when appropriate. Prefer this default diff output. A full state
99
+ replaces the previous state; a diff updates it; no-change preserves it. If you
100
+ need a full replacement, use `disableDiff: true` only when the previous state
101
+ is unavailable or no longer useful. Do not disregard the text and then assume
102
+ that a subsequent diff will reproduce the information you skipped.
103
+
104
+ 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
105
+ omitted; request `app.getState({ disableDiff: true, maxTextChars: 24000 })` when
106
+ you need more full text. An omitted row does not prove an element is absent.
107
+ Traversal-limited captures cover only the captured nodes: identical captures
108
+ can return no-change, while changes return full captured state. Use current
109
+ captured IDs; after a read failure, use only IDs from the latest observation.
110
+
111
+ ### 2. Actions using app
112
+
113
+ After performing one or more UI actions, call `app.getState()` before deciding
114
+ what to do next. Batch actions whose target remains the same, then print only
115
+ the state needed for the next decision:
116
+
117
+ ```js
118
+ await app.click(37);
119
+ await app.hotkey(['super', 'a']);
120
+ await app.typeText('hello');
121
+ await app.pressKey('Return');
122
+ nodeRepl.write((await app.getState()).text);
123
+ ```
124
+
125
+ Use the actual ID from your observation; `37` is only an example.
126
+
127
+ An observation is a decision boundary. When the current state already identifies
128
+ the controls and the next actions are known, combine those actions and saving
129
+ in the same call. Read state after the batch. End the batch at a new dialog,
130
+ menu, changed target or uncertain result; use that state before choosing the
131
+ next action. Do not split a known sequence merely to put each action in its own
132
+ call.
133
+
134
+ - 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.
135
+ - 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.
136
+ - `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.
137
+ - 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.
138
+ - 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.
139
+ - `pressKey` sends one key, optionally with modifiers. `hotkey` sends a combination such as `['super', 's']`. Use the platform's appropriate shortcut.
140
+ - App input activates the exact target internally for one dispatch and restores the previously active app. There is no delivery-mode choice and no automatic replay after an uncertain result.
141
+ - Literal `\n` or `\r` in `typeText` sends Return. In a composer or form this may submit rather than insert a newline.
142
+ - 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.
143
+
144
+ ## Paste and select text
145
+
146
+ These App methods are available on macOS only. Read current state first and use
147
+ an observed element ID for selection.
148
+
149
+ ```js
150
+ await app.selectText(37, 'draft', { prefix: 'Status: ' });
151
+ nodeRepl.write((await app.getState()).text);
152
+ ```
153
+
154
+ Use a real ID and text from your observation; the example assumes that the
155
+ selected element contains exactly one matching `draft` immediately after
156
+ `Status: `.
157
+
158
+ After confirming the selection, replace it with plain text:
159
+
160
+ ```js
161
+ await app.paste('ready');
162
+ nodeRepl.write((await app.getState()).text);
163
+ ```
164
+
165
+ - `selectText(element, text)` selects one exact, case-sensitive match. Optional
166
+ `prefix` and `suffix` must be immediately adjacent to that match. Missing or
167
+ ambiguous matches fail; provide enough observed context to identify one.
168
+ - `selection` defaults to `'text'`. Use `'cursor_before'` or `'cursor_after'` to
169
+ place the insertion point at a match boundary instead of selecting the text.
170
+ The element must support a writable text selection; static labels may not.
171
+ - `paste(text)` defaults to plain text. Use `{ format: 'md' }` for Markdown or
172
+ `{ format: 'html' }` for HTML; the receiving app determines which supplied
173
+ format it accepts. Use plain text when markup should remain literal.
174
+ - Paste uses the clipboard temporarily. It restores the previous clipboard only
175
+ while it still owns that transaction; a newer external clipboard change is
176
+ preserved.
177
+ - Both methods accept an optional `signal`. A completed dispatch, error or
178
+ cancellation does not by itself prove what changed. Observe state before
179
+ deciding whether to retry; do not blindly repeat unconfirmed text operations.
180
+
181
+ ## Reading screenshots
182
+
183
+ Every App observation captures the current screenshot internally, independent
184
+ of whether AX returns full state, a diff or no-change. The default return omits
185
+ the image. `includeScreenshot: true` exposes it when visual inspection is needed.
186
+ Prefer the text-only default when it identifies the controls and confirms the
187
+ requested change. Request an image to resolve missing or ambiguous information,
188
+ choose coordinates or verify an appearance that AX does not describe.
189
+
190
+ ```js
191
+ var state = await app.getState({ includeScreenshot: true });
192
+ nodeRepl.write(state.text);
193
+ for (const image of state.screenshot?.images ?? []) {
194
+ await nodeRepl.emitImage(`data:${image.mimeType};base64,${image.dataBase64}`);
195
+ }
196
+ ```
197
+
198
+ Include connection cleanup at the end of the call that emits the final
199
+ verification. Inspect that result before reporting success; reconnect and
200
+ continue if it reveals unfinished work. A separate cleanup-only model turn is
201
+ unnecessary:
202
+
203
+ ```js
204
+ await computer.close();
205
+ globalThis.computer = undefined;
206
+ ```
207
+
208
+ Reset the Node REPL only when no other persistent state is needed.