@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.
- package/bundled/browser-use/SKILL.md +11 -10
- package/bundled/browser-use/runtime/index.js +70 -31
- package/bundled/browser-use/runtime/native-host.js +1 -0
- package/bundled/browser-use/runtime/scripts/native-host-setup.js +1 -0
- package/bundled/computer-use/SKILL.md +182 -224
- package/bundled/qc-helper/docs/configuration/model-providers.md +13 -2
- package/bundled/qc-helper/docs/conversations-recovery.md +10 -0
- package/bundled/qc-helper/docs/features/browser-use.md +22 -12
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +2 -2
- package/bundled/qc-helper/docs/features/channels/dws.md +7 -7
- package/bundled/qc-helper/docs/features/channels/feishu.md +1 -1
- package/bundled/qc-helper/docs/features/channels/github.md +13 -9
- package/bundled/qc-helper/docs/features/channels/gitlab.md +12 -5
- package/bundled/qc-helper/docs/features/channels/overview.md +121 -46
- package/bundled/qc-helper/docs/features/channels/plugins.md +12 -12
- package/bundled/qc-helper/docs/features/channels/qqbot.md +5 -5
- package/bundled/qc-helper/docs/features/channels/telegram.md +5 -5
- package/bundled/qc-helper/docs/features/channels/wecom.md +5 -4
- package/bundled/qc-helper/docs/features/channels/weixin.md +3 -3
- package/bundled/qc-helper/docs/features/code-review.md +4 -0
- package/bundled/qc-helper/docs/features/computer-use.md +1 -1
- package/bundled/qc-helper/docs/quickstart.md +14 -14
- package/bundled/qc-helper/docs/qwen-serve.md +10 -4
- package/bundled/review/SKILL.md +44 -9
- package/bundled/review/references/persistence.md +3 -4
- package/chunks/{MaxSizedBox-3RXPTLCS.js → MaxSizedBox-4MLWQHF3.js} +33 -31
- package/chunks/{StandaloneSessionPicker-74775YBZ.js → StandaloneSessionPicker-PDNU6KJJ.js} +50 -48
- package/chunks/{acp-subagent-executor-OQXOMTFK.js → acp-subagent-executor-JB2J6N73.js} +35 -33
- package/chunks/{acpAgent-MD56LD7L.js → acpAgent-CAPZFZCW.js} +123 -97
- package/chunks/{agent-75EZNG2Q.js → agent-MTWGIPWC.js} +18 -16
- package/chunks/{agent-headless-TQ6MWUDT.js → agent-headless-Z27XJSXK.js} +18 -16
- package/chunks/{anthropicContentGenerator-DCDXTX3R.js → anthropicContentGenerator-VAFZRJWG.js} +3 -3
- package/chunks/{askUserQuestion-2NU6CXK2.js → askUserQuestion-V4OFZD5D.js} +1 -1
- package/chunks/{bridge-KGJYQUWD.js → bridge-BUCSJHCE.js} +35 -33
- package/chunks/{channel-management-service-YN4A3BJ6.js → channel-management-service-Q2B7WUPL.js} +27 -10
- package/chunks/{channel-settings-store-773UOD6B.js → channel-settings-store-U25CVEL6.js} +42 -40
- package/chunks/{channel-worker-group-AKPVHRUO.js → channel-worker-group-QNX4OIMZ.js} +5 -5
- package/chunks/{channel-worker-manager-TDAQSKWX.js → channel-worker-manager-IJCPV4WY.js} +24 -5
- package/chunks/{channel-worker-supervisor-PUMSN4J2.js → channel-worker-supervisor-ENJ2AE2N.js} +4 -4
- package/chunks/{chunk-OU4ZCLGJ.js → chunk-242INZ6Y.js} +1 -1
- package/chunks/{chunk-JOFZBTVL.js → chunk-245NB3M4.js} +1 -1
- package/chunks/{chunk-LISITUEH.js → chunk-26KGIWIW.js} +1 -1
- package/chunks/{chunk-WPHZEGFC.js → chunk-2RQEWY2P.js} +1 -1
- package/chunks/{chunk-DCTJ3GVF.js → chunk-2SCE6YR2.js} +3 -3
- package/chunks/{chunk-STKUN7BR.js → chunk-2XNGG7R3.js} +1 -1
- package/chunks/{chunk-OQE7AA2W.js → chunk-36ZMEEBW.js} +16 -12
- package/chunks/{chunk-Y53WH7VD.js → chunk-44K6Q5AW.js} +3 -3
- package/chunks/{chunk-N4VKU36J.js → chunk-465XOJLQ.js} +1 -1
- package/chunks/{chunk-HD4IXPPC.js → chunk-4A4XNQEZ.js} +3 -3
- package/chunks/{chunk-RXB6Y33E.js → chunk-4VULJ3LV.js} +1 -1
- package/chunks/{chunk-EBRC4GX2.js → chunk-4XXUGJJS.js} +1 -1
- package/chunks/{chunk-MVC4XLNM.js → chunk-53IRNMPU.js} +118 -5
- package/chunks/{chunk-VGLXXHTF.js → chunk-5BLOZPTW.js} +1 -1
- package/chunks/{chunk-3SK2A75W.js → chunk-5OJQLD3P.js} +3 -3
- package/chunks/{chunk-WVNCMGAO.js → chunk-6FURC4LI.js} +1 -1
- package/chunks/{chunk-WVTM33Q3.js → chunk-6KXQIDK2.js} +4 -4
- package/chunks/{chunk-ZKDUQHU4.js → chunk-7MNHZUTA.js} +35 -18
- package/chunks/{chunk-JEIPBSGX.js → chunk-7P5WZQXF.js} +7 -7
- package/chunks/{chunk-GGUOO2XC.js → chunk-7RCAMBLN.js} +1 -1
- package/chunks/{chunk-FBLGI2SO.js → chunk-AAOMFXVZ.js} +7 -7
- package/chunks/{chunk-JM76TMGV.js → chunk-ACLD6C3R.js} +8798 -7901
- package/chunks/{chunk-4FCWKBOC.js → chunk-ALTMZEBU.js} +6 -6
- package/chunks/{chunk-ZHQSWNO6.js → chunk-AN62TPO6.js} +1 -1
- package/chunks/{chunk-U5DPG7JW.js → chunk-AYTI24XN.js} +1 -1
- package/chunks/{chunk-B53FO7JN.js → chunk-AZN2GSLM.js} +2 -2
- package/chunks/{chunk-6KQQPPFF.js → chunk-B3J4BSPL.js} +1 -1
- package/chunks/{chunk-SLSH5TFD.js → chunk-BMCDSO77.js} +4 -4
- package/chunks/{chunk-DBYUN4U3.js → chunk-BUDUHXX3.js} +1 -1
- package/chunks/{chunk-TS4Y2MHO.js → chunk-CGREZDGO.js} +1 -1
- package/chunks/chunk-CLNDQINM.js +523 -0
- package/chunks/{chunk-LNUQA3OE.js → chunk-CVRZNFXO.js} +1 -1
- package/chunks/{chunk-3DBI3LLL.js → chunk-CWLTXYKP.js} +4 -4
- package/chunks/{chunk-B3XMX4SN.js → chunk-DACCX4JI.js} +4 -4
- package/chunks/{chunk-YWZOEHBT.js → chunk-DE2WI7RU.js} +192 -62
- package/chunks/{chunk-3TQVPDCN.js → chunk-DU53RB7A.js} +2 -2
- package/chunks/{chunk-2KZURPTB.js → chunk-DZCTQ2MF.js} +6 -1
- package/chunks/{chunk-35SABQFH.js → chunk-DZUNDX4M.js} +1 -1
- package/chunks/{chunk-4INF7OYV.js → chunk-ELY2U74S.js} +2 -2
- package/chunks/chunk-EMGHODF7.js +56 -0
- package/chunks/{chunk-5FZKG4JB.js → chunk-EMOTEATH.js} +1 -1
- package/chunks/{chunk-LW7WW3Z5.js → chunk-ERGQUKZ2.js} +1 -1
- package/chunks/{chunk-TNWJJEDT.js → chunk-ES6EQNGR.js} +6 -6
- package/chunks/{chunk-E3TLOFX7.js → chunk-EUHSEMO4.js} +62 -7
- package/chunks/{chunk-N25B6FZN.js → chunk-EYCDA5MN.js} +2 -0
- package/chunks/{chunk-GPTEZLRR.js → chunk-F4ERRMCO.js} +25 -23
- package/chunks/{chunk-SXFZ5P7F.js → chunk-FE7D3WKV.js} +1 -1
- package/chunks/{chunk-XEXNBTYX.js → chunk-FH45BQGZ.js} +3 -3
- package/chunks/{chunk-CAORZAZD.js → chunk-FLBUHGL4.js} +10 -10
- package/chunks/{chunk-X2R47SFR.js → chunk-FLVPNMCS.js} +1 -1
- package/chunks/{chunk-5SZSV2CK.js → chunk-FVIJFKEQ.js} +3 -3
- package/chunks/{chunk-KFLDZ3HB.js → chunk-G6XRNTXF.js} +1 -1
- package/chunks/{chunk-2JHQ2J3Y.js → chunk-G72UHXC3.js} +5 -5
- package/chunks/{chunk-4A255ZI6.js → chunk-GAHZJLQG.js} +2 -2
- package/chunks/{chunk-7IVZOKKW.js → chunk-GKJGKTWJ.js} +3 -3
- package/chunks/{chunk-KY4HZXLV.js → chunk-GLPNIOEV.js} +33 -2
- package/chunks/{chunk-6PRSQUPJ.js → chunk-GQZZGEMS.js} +1 -1
- package/chunks/{chunk-G2AE7GYZ.js → chunk-GRUASRWC.js} +1 -1
- package/chunks/{chunk-HH7R6RLK.js → chunk-GTQ35GRO.js} +1 -1
- package/chunks/{chunk-LWRJLRZS.js → chunk-GYLDOFLU.js} +3 -3
- package/chunks/{chunk-MZRJ2JJS.js → chunk-HDSI3RDN.js} +136 -9
- package/chunks/{chunk-RO5K7QUL.js → chunk-HHMJ5ONX.js} +45 -31
- package/chunks/{chunk-E4HNTYHK.js → chunk-HVVQYSBA.js} +32 -9
- package/chunks/{chunk-H2GVLBFU.js → chunk-I36GIR6K.js} +64 -2
- package/chunks/{chunk-VTFLRL55.js → chunk-IBRV4T3I.js} +2 -2
- package/chunks/{chunk-4VSTV4C2.js → chunk-IH22ZGZI.js} +53 -2
- package/chunks/{chunk-AOW7WIWE.js → chunk-IQH7Q5OP.js} +4 -4
- package/chunks/{chunk-OB444SG3.js → chunk-IYKGSUTA.js} +1 -1
- package/chunks/{chunk-HS5OZTQF.js → chunk-J2FLXQJM.js} +1 -1
- package/chunks/{chunk-BBCH7PBA.js → chunk-KACKEW2M.js} +2 -2
- package/chunks/{chunk-JE3J5HFM.js → chunk-KAOHUUM7.js} +62 -251
- package/chunks/{chunk-JCMDVGPR.js → chunk-KGLPVCX7.js} +2 -2
- package/chunks/{chunk-QKXZOHHQ.js → chunk-LDURD6EP.js} +15 -62
- package/chunks/{chunk-O4IH5UEC.js → chunk-LLIYDIGU.js} +20 -20
- package/chunks/{chunk-3XHMOJCP.js → chunk-MBC3PULP.js} +1 -1
- package/chunks/{chunk-SRZA7OU4.js → chunk-MMCGLNPP.js} +6 -6
- package/chunks/{chunk-3NG2ZQAJ.js → chunk-NZC74TT2.js} +1 -1
- package/chunks/{chunk-47C3HPMW.js → chunk-O5YL6KSX.js} +47 -18
- package/chunks/{chunk-EIHZ4FFM.js → chunk-O6PPYFQN.js} +3 -3
- package/chunks/{chunk-XCU752HT.js → chunk-OICDXWXP.js} +13 -19
- package/chunks/{chunk-VJCKLKZX.js → chunk-OOU7XOZF.js} +3 -3
- package/chunks/{chunk-OM5NSL25.js → chunk-P4P7CH7H.js} +38 -38
- package/chunks/{chunk-CIS4SY3R.js → chunk-PPBZHGEQ.js} +3 -3
- package/chunks/{chunk-PB7JBAHF.js → chunk-PVBIEIVZ.js} +0 -1
- package/chunks/{chunk-GG3MO6NO.js → chunk-PWGMHXIV.js} +2 -2
- package/chunks/{chunk-6N2PJAZG.js → chunk-PX2ZOOGQ.js} +1 -1
- package/chunks/{chunk-NNN2PKPV.js → chunk-PYYPSK6Q.js} +36 -495
- package/chunks/{chunk-TKOQGFRE.js → chunk-PZOWKCPJ.js} +1 -1
- package/chunks/{chunk-PJ546DX4.js → chunk-Q36IJ74U.js} +17 -11
- package/chunks/chunk-Q4FJVWI4.js +78 -0
- package/chunks/{chunk-PA4HU5IQ.js → chunk-QATPE3SN.js} +13 -7
- package/chunks/{chunk-MBUUQJPV.js → chunk-QGKAYDES.js} +5 -5
- package/chunks/{chunk-TFBQ5CKI.js → chunk-QNEBHC2E.js} +1 -1
- package/chunks/{chunk-6NA357SF.js → chunk-QTNSMJKU.js} +1 -1
- package/chunks/{chunk-TDLEDOJN.js → chunk-QU7VULWX.js} +5 -4
- package/chunks/{chunk-LOTGIM6V.js → chunk-R3IFSY55.js} +20 -20
- package/chunks/{chunk-ZX6EZ7EH.js → chunk-RBE3WRSN.js} +3 -3
- package/chunks/{chunk-YSZ2XZTG.js → chunk-RBKZ6SK4.js} +5 -5
- package/chunks/{chunk-FLRFAPDA.js → chunk-RCL6OXZC.js} +5 -5
- package/chunks/{chunk-H4W6TJFJ.js → chunk-RONRTFAQ.js} +1 -1
- package/chunks/{chunk-ZEGLZ3MN.js → chunk-SCYKHWRM.js} +5 -5
- package/chunks/{chunk-STUJ7IMZ.js → chunk-SI7XKACY.js} +56 -56
- package/chunks/{chunk-RL2HSTEB.js → chunk-SYZPPX3O.js} +1492 -1140
- package/chunks/{chunk-VUYJRNG5.js → chunk-T7TJPVTY.js} +3 -3
- package/chunks/{chunk-4V5YKOBI.js → chunk-TF7UC7F6.js} +3 -3
- package/chunks/{chunk-NXZD3VNX.js → chunk-TL7DSR47.js} +1 -1
- package/chunks/{chunk-BVFBDXI2.js → chunk-TPFV5YZK.js} +1 -1
- package/chunks/{chunk-YIHOHHJL.js → chunk-TZHXHWEW.js} +1 -1
- package/chunks/{chunk-3X5BDEXS.js → chunk-U6RMVE5X.js} +8 -8
- package/chunks/{chunk-HRVFPNGT.js → chunk-VFNKO4FK.js} +4 -4
- package/chunks/{chunk-VPALWDQL.js → chunk-VUIH3BQL.js} +31 -12
- package/chunks/{chunk-WVNML4HH.js → chunk-VW33WARJ.js} +1 -1
- package/chunks/{chunk-MICQVBPI.js → chunk-WCLHOKAZ.js} +1 -1
- package/chunks/{chunk-KMQ2ZH3Q.js → chunk-WVWCRZ6M.js} +2 -2
- package/chunks/{chunk-5NFAKADR.js → chunk-WZCVB2ER.js} +1 -36
- package/chunks/{chunk-JNQEW7B2.js → chunk-X3A72KX5.js} +6 -6
- package/chunks/{chunk-3JSIWFNA.js → chunk-XHHUGXYW.js} +527 -135
- package/chunks/{chunk-VIA4STCR.js → chunk-YCCBLTSL.js} +3 -3
- package/chunks/{chunk-Q5IEY2TN.js → chunk-Z3I5B4DH.js} +1 -1
- package/chunks/{chunk-O346IB64.js → chunk-ZAJNI63I.js} +1 -1
- package/chunks/{chunk-QR4U27UW.js → chunk-ZJFCDRVP.js} +4 -4
- package/chunks/{codex-subagent-executor-437LQYGM.js → codex-subagent-executor-IKWULWIZ.js} +35 -33
- package/chunks/{config-utils-CVLI36KM.js → config-utils-3IOTAFBG.js} +38 -34
- package/chunks/{contextCommand-2KSW7H5F.js → contextCommand-ZKG2JFCR.js} +33 -31
- package/chunks/{core-runtime-4IB27E7J.js → core-runtime-5CAK5DSM.js} +32 -30
- package/chunks/{create-sub-session-A73TQDAN.js → create-sub-session-DG4CVOQC.js} +33 -31
- package/chunks/{daemon-Y6AOK7LF.js → daemon-D4OAVQKB.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-BTKVV3DZ.js → daemon-git-worktree-guard-S3SFT3H7.js} +32 -30
- package/chunks/{daemon-status-provider-ETDIOWMS.js → daemon-status-provider-GG64ZJR3.js} +40 -38
- package/chunks/{daemon-trust-policy-U5SPHJLP.js → daemon-trust-policy-XNWYLQ32.js} +38 -36
- package/chunks/{daemon-trust-policy-monitor-QKRCO5WI.js → daemon-trust-policy-monitor-DR5CRWMM.js} +38 -36
- package/chunks/{deferred-core-runtime-FRELZPIE.js → deferred-core-runtime-V4Q674KN.js} +32 -30
- package/chunks/{dist-54LGNLWW.js → dist-3M75XY4G.js} +1 -1
- package/chunks/{dist-YZBMQPNS.js → dist-6U5NQYA7.js} +5 -5
- package/chunks/{dist-FVMLRUVM.js → dist-AS2RPYOB.js} +1 -1
- package/chunks/{dist-HANHY2MK.js → dist-GFT4GU72.js} +2 -2
- package/chunks/{dist-Y5GP7SWL.js → dist-J7JK3GPY.js} +10 -9
- package/chunks/{dist-O723VE2K.js → dist-JTPRKF5H.js} +30 -27
- package/chunks/{dist-MGZKUISU.js → dist-MOO5VOC5.js} +7 -20
- package/chunks/{dist-IZ66D5A3.js → dist-NJ2L5QKL.js} +1 -1
- package/chunks/{dist-EI2XAB4W.js → dist-YC6LDCKH.js} +22 -28
- package/chunks/{edit-TQ3CABYP.js → edit-FPIWTN3L.js} +20 -18
- package/chunks/{enter-worktree-J46XVFRS.js → enter-worktree-55OWD4LT.js} +4 -3
- package/chunks/{enterPlanMode-JHOWELZO.js → enterPlanMode-GDZVXYB2.js} +18 -16
- package/chunks/{environment-LUM7XX27.js → environment-Q2BVTUQO.js} +36 -32
- package/chunks/{errors-SH32ID5I.js → errors-MZTLVUEM.js} +34 -32
- package/chunks/{execution-sandbox-settings-HIYVUBII.js → execution-sandbox-settings-3WJ67GX3.js} +3 -1
- package/chunks/{execution-tool-IIEL25CL.js → execution-tool-DZ4XSEFZ.js} +21 -19
- package/chunks/{execution-worker-NKKEZ4XF.js → execution-worker-L3TM3F5D.js} +24 -22
- package/chunks/{exit-worktree-BC4SDZCC.js → exit-worktree-MI6N4OUP.js} +4 -3
- package/chunks/{exitPlanMode-PUICCCQ5.js → exitPlanMode-VIGOD2KP.js} +18 -16
- package/chunks/{fast-path-QH3QTZZA.js → fast-path-JCKEFUUL.js} +4 -4
- package/chunks/{fast-path-settings-TQAYWLXR.js → fast-path-settings-VIYSH3SD.js} +2 -2
- package/chunks/{glob-OEB4WH3Z.js → glob-UOKQZHKL.js} +18 -16
- package/chunks/{goal-tools-KWGKFUSK.js → goal-tools-G4RIX4ER.js} +18 -16
- package/chunks/{handleAutoUpdate-KEA7JSUD.js → handleAutoUpdate-UZZEGL3N.js} +34 -32
- package/chunks/{i18n-AC3MUXKZ.js → i18n-IL33FVND.js} +32 -30
- package/chunks/{initializer-WBD32BEX.js → initializer-BCXBRM6Y.js} +38 -36
- package/chunks/{installationInfo-JRGFTKWY.js → installationInfo-V7OKUOJV.js} +32 -30
- package/chunks/{list-S7KW7NBX.js → list-LQHG6SXA.js} +41 -39
- package/chunks/{llm-E32WLISX.js → llm-JWCANCDC.js} +85 -74
- package/chunks/{llm-content-generator-OMKJHC5P.js → llm-content-generator-OXMMHUVK.js} +3 -3
- package/chunks/{loadedSettingsAdapter-5OSU3J46.js → loadedSettingsAdapter-EKXSRWMY.js} +38 -36
- package/chunks/{local-execution-environment-IQHCTUJ5.js → local-execution-environment-XIQLRMLF.js} +24 -22
- package/chunks/{loggingContentGenerator-JIYG3LJS.js → loggingContentGenerator-6KHNZDTZ.js} +20 -18
- package/chunks/{managed-npm-update-RKAT7AMQ.js → managed-npm-update-MBUH5TIX.js} +32 -30
- package/chunks/managed-runtime-attestation-worker-G23AEEMF.js +367 -0
- package/chunks/{mcp-SV72BZKG.js → mcp-AYVCEEN7.js} +38 -36
- package/chunks/{model-call-collection-PKDMVCZN.js → model-call-collection-OKUGOY4B.js} +1 -1
- package/chunks/{model-configuration-A52XMQW7.js → model-configuration-Q3MNGG3B.js} +38 -36
- package/chunks/{modelConfigUtils-7O4P3SLE.js → modelConfigUtils-WC5XDR34.js} +33 -31
- package/chunks/{monitor-ZXRV2DJB.js → monitor-7JUZXYZN.js} +18 -16
- package/chunks/{nonInteractiveCli-UPSGIYRC.js → nonInteractiveCli-B3GCZ6NJ.js} +74 -73
- package/chunks/{nonInteractiveToolExecutor-TDKVR43J.js → nonInteractiveToolExecutor-IUHO7PXG.js} +19 -17
- package/chunks/{notebook-edit-FBVHAHYM.js → notebook-edit-IYDACZDW.js} +19 -17
- package/chunks/{omni-3NREMV2Q.js → omni-DLBHISHC.js} +10 -7
- package/chunks/{openaiContentGenerator-EWPBZFIT.js → openaiContentGenerator-W5GN6H6Z.js} +12 -10
- package/chunks/{openaiResponsesContentGenerator-3CI3PINB.js → openaiResponsesContentGenerator-BXXRYJQQ.js} +5 -5
- package/chunks/{pidfile-BBUANGZX.js → pidfile-QIBF53CW.js} +32 -30
- package/chunks/{processUtils-6OHQLG7W.js → processUtils-2LU22KCR.js} +2 -2
- package/chunks/{prompt-terminal-ledger-ZBFYXJ4L.js → prompt-terminal-ledger-LXFVLR6C.js} +33 -31
- package/chunks/{qwenContentGenerator-62F5IKXJ.js → qwenContentGenerator-LYMLXBWI.js} +21 -19
- package/chunks/{reactive-degrade-URJMXJ7N.js → reactive-degrade-HPYBJHYA.js} +6 -6
- package/chunks/{read-file-IM4Q5TKI.js → read-file-SXS2MKDY.js} +6 -3
- package/chunks/{record-artifact-K4XSMW4X.js → record-artifact-XP3X7RE5.js} +3 -2
- package/chunks/{record-source-XZCI3IGU.js → record-source-2VBLKVIE.js} +2 -2
- package/chunks/{report-findings-MCGXBQFX.js → report-findings-D2QUYUOG.js} +4 -3
- package/chunks/{request-shutdown-TT62PREA.js → request-shutdown-R5SA5GE3.js} +1 -1
- package/chunks/{resumeHistoryUtils-O3NQMDVR.js → resumeHistoryUtils-UPGZGP5V.js} +35 -33
- package/chunks/{ripGrep-BG2FEVIV.js → ripGrep-X33VVIN5.js} +8 -5
- package/chunks/{run-qwen-serve-GMLWJITM.js → run-qwen-serve-CUB2NZ6P.js} +278 -79
- package/chunks/{runtime-SSGPOXRZ.js → runtime-2DAVBADX.js} +43 -41
- package/chunks/{sandboxConfig-ALYLLNWY.js → sandboxConfig-ESBH3F27.js} +34 -32
- package/chunks/{scheduled-tasks-QJTC5XQ7.js → scheduled-tasks-TGWYXZWW.js} +38 -36
- package/chunks/{scheduler-PEXTY7IG.js → scheduler-XGLZCXPN.js} +34 -32
- package/chunks/{send-message-3UM7XRTB.js → send-message-FBU6WDID.js} +1 -1
- package/chunks/{serve-OVAUTKXK.js → serve-7RX4AIID.js} +38 -36
- package/chunks/{server-3MMYOOJW.js → server-MJETIFJS.js} +1789 -375
- package/chunks/{session-PZBIKBQJ.js → session-7AVYU3TC.js} +75 -74
- package/chunks/{session-attachments-root-ESP5CNBV.js → session-attachments-root-RONFQ3D3.js} +32 -30
- package/chunks/{session-pr-refresh-B3N7PKUP.js → session-pr-refresh-ZPT6TAD4.js} +37 -35
- package/chunks/{settings-KSQ2DGPY.js → settings-FPMUAVWD.js} +37 -35
- package/chunks/{shell-3V26EVNC.js → shell-THD5EYOK.js} +18 -16
- package/chunks/{skill-XP7F3LBV.js → skill-2D6KXDC5.js} +52 -13
- package/chunks/{skill-settings-PDESL7S3.js → skill-settings-XW7X244B.js} +38 -36
- package/chunks/{spawnChannel-NVO7CCBW.js → spawnChannel-DBSAAUUT.js} +34 -32
- package/chunks/{standalone-update-FDWS2EGF.js → standalone-update-TFAWA676.js} +33 -31
- package/chunks/{start-opentui-ui-WIFFY5UD.js → start-opentui-ui-VYMAXPBH.js} +87 -86
- package/chunks/{startInteractiveUI-YBLIRIHD.js → startInteractiveUI-Z54XKH35.js} +1037 -966
- package/chunks/{task-create-PEI7AJLE.js → task-create-PVF66J3R.js} +2 -2
- package/chunks/{task-update-MQZRWBGK.js → task-update-RSIITTOK.js} +2 -2
- package/chunks/{team-create-Z5JUEMB7.js → team-create-TPCELNBJ.js} +18 -16
- package/chunks/{team-plan-approval-ZLLHMEQN.js → team-plan-approval-RUURGHQL.js} +18 -16
- package/chunks/{terminal-image-renderer-QFO2JTTT.js → terminal-image-renderer-SLJVUD4Z.js} +32 -30
- package/chunks/{theme-manager-N7ILUTRY.js → theme-manager-VBOIN2KT.js} +32 -30
- package/chunks/{tool-call-PLSQ34VE.js → tool-call-DUHP6UXC.js} +2 -2
- package/chunks/{tool-result-media-OAHUKGRK.js → tool-result-media-WU6QAREN.js} +10 -7
- package/chunks/{tool-search-534QKE2X.js → tool-search-ET4NH2LK.js} +7 -4
- package/chunks/{total-session-admission-EZJQKTPF.js → total-session-admission-UWMJWTWP.js} +35 -33
- package/chunks/{trustedFolders-4ZEV6RXD.js → trustedFolders-3WNZBUH7.js} +33 -31
- package/chunks/{update-relaunch-GB3SGRDP.js → update-relaunch-SHS3BD6V.js} +5 -5
- package/chunks/{updateCheck-DVAGAEQ4.js → updateCheck-MDF2FCRN.js} +32 -30
- package/chunks/{upload-config-DMZVTDH7.js → upload-config-LVVUIKA2.js} +4 -4
- package/chunks/{useAutoAcceptIndicator-PTQBS42B.js → useAutoAcceptIndicator-26OOM7OM.js} +41 -39
- package/chunks/{validateNonInterActiveAuth-DU3WXVSU.js → validateNonInterActiveAuth-TBCZCQIN.js} +72 -71
- package/chunks/{version-PNMZGKCV.js → version-MICV7I4Y.js} +1 -1
- package/chunks/{web-fetch-LMCOAHW6.js → web-fetch-3O2DFRE5.js} +13 -9
- package/chunks/{web-search-N7RR74LA.js → web-search-5FS3NB3D.js} +4 -4
- package/chunks/{web-shell-static-GI6FVIMI.js → web-shell-static-E3O6NW7Y.js} +4 -3
- package/chunks/{workflow-ZZPHI7FK.js → workflow-FRJO5ZUI.js} +19 -17
- package/chunks/{workspace-providers-status-TU73CNRF.js → workspace-providers-status-I5MO7Z2T.js} +43 -41
- package/chunks/{workspace-registration-store-743FRSOU.js → workspace-registration-store-CBHKV34L.js} +1 -1
- package/chunks/{workspace-registry-S7QTXFWM.js → workspace-registry-2UKNZO5M.js} +35 -33
- package/chunks/{workspace-runtime-coordinator-GWNDUIGO.js → workspace-runtime-coordinator-TKCI5WJW.js} +36 -34
- package/chunks/{workspace-service-CERZFJ3B.js → workspace-service-M3ZKR6WL.js} +40 -38
- package/chunks/{workspace-skills-status-5M3EIAUY.js → workspace-skills-status-OC3EYL7U.js} +41 -39
- package/chunks/{workspace-trust-reconciler-Q3LUKMQB.js → workspace-trust-reconciler-YQZSUOH4.js} +41 -39
- package/chunks/{write-file-CT54LXQL.js → write-file-BATJLBJX.js} +21 -19
- package/chunks/{zoom-image-EU3PGSZM.js → zoom-image-5I7DDLQE.js} +10 -6
- package/cli-entry.js +13 -0
- package/cli.js +24 -12
- package/execution-worker.js +1 -1
- package/export-transcript-document.css +1 -1
- package/export-transcript-document.js +104 -104
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DDYEvG-M.js → abnfDiagram-VCTEODGH-DQHroFS1.js} +1 -1
- package/web-shell/assets/{arc-DQncKWFX.js → arc-BrOc_HVh.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-C0-8u9zj.js → architectureDiagram-5GKGNRK7-DXce8IH6.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-Cpt59Ge5.js → blockDiagram-NRAW4CY4-96A3Q3-l.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BvESWh83.js → c4Diagram-UCG6FXSJ-CQBg2PSg.js} +1 -1
- package/web-shell/assets/channel-CBP6pwSs.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-wKulGIU6.js → chunk-2Q5K7J3B-i_jhVz-t.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-BX6kRoq7.js → chunk-5VM5RSS4-Cx3gMrWT.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-wA4IqTt-.js → chunk-F27PBJKO-B9WwW7C0.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-B7hzevlb.js → chunk-G27WJ6UU-B8t0FNPI.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-BdBg9pJg.js → chunk-JWPE2WC7-Dg0__6CF.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-DghmF6LJ.js → chunk-LCL6LL3I-DUwE5g3m.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-BbReTOod.js → chunk-POPQ4Y6H-BirYW5iS.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-C1t0_19D.js → chunk-SVP7TREG-_ONJKtFF.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DQBby5mI.js → chunk-XXDRQBXY-DGi0chgj.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-_4_fFrN3.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-_4_fFrN3.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CNrSyg7B.js → cose-bilkent-JH36ORCC-BSSFxREn.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-DoxgDRN-.js → cynefin-OW5HDTMX-h-oYVCez.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BmUwbS8Q.js → cynefinDiagram-5FMLGOSQ-CXj6T7Pm.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-BJrOVIjc.js → dagre-3AP2YEHR-Ch9GIhJm.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-TDX4KU9V.js → diagram-S7CK7UJ4-Cq3W541T.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-D3VUQkGl.js → diagram-UQ7AKVKN-Bm1R5-sN.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-CqCpgViy.js → diagram-VSXAHHWV-BW2qG6Vh.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-CthqfwCs.js → diagram-VX7I27RA-DN96PhRe.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-BRY3Ahvu.js → diagram-Z3DM3KII-A8MnwaJr.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-tJvTnIwp.js → ebnfDiagram-PWID7BFC-CZTpUypI.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-DT4b7w5B.js → erDiagram-SSCWMZ5O-CbxCRFru.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-C5oirWSf.js → flowDiagram-A5DVABFB-Bt1PM2Dy.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-ZD3kNlO4.js → ganttDiagram-EL5Y4UJY-CTgim3LX.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Bp1sg_wH.js → gitGraphDiagram-WWUBYQGX-h4jX7S4l.js} +1 -1
- package/web-shell/assets/{index-DSIzVof7.js → index-BDxWHGNm.js} +1 -1
- package/web-shell/assets/index-Bd3iA5Er.js +2407 -0
- package/web-shell/assets/index-DuwfO01z.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-Btumz_CZ.js → infoDiagram-RXCK75RN-DsIsFmZ4.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-Dx8_uvso.js → ishikawaDiagram-5VMMS53U-BgF2V3rC.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-DS5spUhj.js → journeyDiagram-EYS64GPL-CJ2ibWhB.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-DttC9d4D.js → kanban-definition-3QL26DDD-oqNfpjND.js} +1 -1
- package/web-shell/assets/{layout-BDOJQJbX.js → layout-DKF2f-UC.js} +1 -1
- package/web-shell/assets/{linear-BsUVMxld.js → linear-CadmYA8J.js} +1 -1
- package/web-shell/assets/{mermaid.core-De4-EW4Z.js → mermaid.core-BSD13L-h.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BsYY98Wv.js → mindmap-definition-FBJOCRG2-Cg3jlHzV.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DXnnQrVY.js → pegDiagram-XKGWAZYB-BGzqlBWk.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-DGLAGUYR.js → pieDiagram-E7YTZNPT-BVDdPYnC.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-Y8DcMTa5.js → quadrantDiagram-AXDQQJYC-D7maRW6r.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-ZgauslUZ.js → railroadDiagram-O6MQD6OU-C7J0Nnqc.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-Kxtu4twe.js → requirementDiagram-EFPCY7ZU-CDEpUB7S.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-BKsLF9EA.js → sankeyDiagram-P5KCCOFB-DoA0BWeR.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D8sCv1NK.js → sequenceDiagram-WJ2MYXX4-DlqRjDLl.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-BX8sokZX.js → sizeCapture-X5ZJPWSS-3l2EJ1DB.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-DFMl58kv.js → stateDiagram-HBIQ2CUA-Bdq0N6Lr.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DtdYpKZp.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-BnMwURLN.js → swimlanes-XN3QIQJK-B4ArxdLV.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-B_iL0Dc4.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-C8y77DDz.js → timeline-definition-24CTP7MA-B_Ug6D_k.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DOWQgX9u.js → vennDiagram-4TSXK5OY-BR9tvaDT.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-BM0AVIzE.js → wardleyDiagram-VM6X3IG4-BdGIt6qE.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-B18-YghG.js → xychartDiagram-S5SC5T6Z-NxS8XkXN.js} +1 -1
- package/web-shell/index.html +2 -2
- package/web-shell/sw.js +1 -1
- package/bundled/computer-use/references/macos.md +0 -208
- package/bundled/computer-use/references/windows-linux.md +0 -247
- package/web-shell/assets/channel-B88Zt8_x.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-Dp-7ruHm.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-Dp-7ruHm.js +0 -1
- package/web-shell/assets/index-CpxLhWqx.js +0 -2337
- package/web-shell/assets/index-mr0Sw0G-.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-B3HSbbo2.js +0 -1
- 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.
|
|
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
|
-
|
|
58
|
-
and
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
)
|
|
190
|
-
pressKey(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
)
|
|
199
|
-
|
|
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
|
-
|
|
203
|
-
|
|
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
|
-
|
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
|
226
|
-
nodeRepl.write(
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
|
279
|
-
await
|
|
280
|
-
|
|
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
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
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
|
-
|
|
292
|
-
|
|
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
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
223
|
+
```js
|
|
224
|
+
await app.selectText(37, 'draft', { prefix: 'Status: ' });
|
|
225
|
+
nodeRepl.write((await app.getState()).text);
|
|
226
|
+
```
|
|
300
227
|
|
|
301
|
-
|
|
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
|
-
|
|
304
|
-
each image:
|
|
232
|
+
After confirming the selection, replace it with plain text:
|
|
305
233
|
|
|
306
234
|
```js
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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
|
-
|
|
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`
|
|
120
|
-
setup API refuses to
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
the Qwen Code
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
unpacked
|
|
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
|
|
25
|
-
is enabled in the intended profile, then
|
|
26
|
-
needs configuration on first use, Qwen will guide
|
|
27
|
-
No separate Browser Use Qwen extension or
|
|
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
|
-
"
|
|
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, `
|
|
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
|