farming-code 2.2.30 → 2.2.32
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/THIRD_PARTY_NOTICES.md +7 -0
- package/backend/acp/{client-services.js → client-services.cjs} +132 -134
- package/backend/acp/packaged-claude-acp.cjs +37 -0
- package/backend/acp/packaged-codex-acp.cjs +37 -0
- package/backend/acp/patch-decisions.cjs +182 -0
- package/backend/acp/permission-security.cjs +131 -0
- package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
- package/backend/{acp-runtime.js → acp-runtime.cjs} +1220 -1112
- package/backend/acp-session-state.cjs +622 -0
- package/backend/acp-transcript.cjs +525 -0
- package/backend/agent-env.cjs +257 -0
- package/backend/agent-extension-discovery.cjs +452 -0
- package/backend/agent-extension-inventory.cjs +116 -0
- package/backend/agent-json-stream.cjs +283 -0
- package/backend/agent-lifecycle-journal.cjs +185 -0
- package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
- package/backend/agent-order-transaction.cjs +85 -0
- package/backend/agent-order.cjs +159 -0
- package/backend/agent-provider-session.cjs +98 -0
- package/backend/agent-runtime-binding.cjs +179 -0
- package/backend/agent-session-history.cjs +1022 -0
- package/backend/agent-session-inventory.cjs +291 -0
- package/backend/async-cache.cjs +104 -0
- package/backend/atomic-json-store.cjs +67 -0
- package/backend/auth.cjs +261 -0
- package/backend/authoritative-inventory-cache.cjs +383 -0
- package/backend/business-health.cjs +68 -0
- package/backend/chat-runtime.cjs +50 -0
- package/backend/claude-settings.cjs +132 -0
- package/backend/cli-agents.cjs +435 -0
- package/backend/codex-context-window.cjs +196 -0
- package/backend/codex-models.cjs +228 -0
- package/backend/codex-session-archive.cjs +82 -0
- package/backend/codex-session-history.cjs +590 -0
- package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
- package/backend/codex-transcript-sanitizer.cjs +130 -0
- package/backend/codex-transcript.cjs +2107 -0
- package/backend/command-runner-child.cjs +105 -0
- package/backend/config-manager.cjs +1263 -0
- package/backend/control-api.cjs +439 -0
- package/backend/data/LICENSE.cua +21 -0
- package/backend/executable-discovery.cjs +204 -0
- package/backend/farming-agent-bootstrap.cjs +81 -0
- package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
- package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
- package/backend/farming-cli.cjs +414 -0
- package/backend/farming-net-pass.cjs +319 -0
- package/backend/farming-net-registry.cjs +123 -0
- package/backend/farming-net-server.cjs +309 -0
- package/backend/farming-session-store.cjs +651 -0
- package/backend/git-worktree-info.cjs +181 -0
- package/backend/haiku-token.cjs +828 -0
- package/backend/index-html.cjs +96 -0
- package/backend/input-parts.cjs +68 -0
- package/backend/input-routing.cjs +40 -0
- package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
- package/backend/main-agent-skills.cjs +309 -0
- package/backend/main-page-session.cjs +132 -0
- package/backend/native-pty-controller-generation.cjs +139 -0
- package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
- package/backend/native-pty-host-identity.cjs +125 -0
- package/backend/native-pty-host-path.cjs +68 -0
- package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
- package/backend/native-session-engine.cjs +296 -0
- package/backend/network.cjs +57 -0
- package/backend/npm-update-helper.cjs +399 -0
- package/backend/packaged-node-pty.cjs +120 -0
- package/backend/preview-session-manager.cjs +89 -0
- package/backend/provider-adapters.cjs +492 -0
- package/backend/provider-home-configuration.cjs +211 -0
- package/backend/provider-session-id.cjs +79 -0
- package/backend/provider-session-service.cjs +333 -0
- package/backend/qr-share-tickets.cjs +119 -0
- package/backend/resource-broadcast-protocol.cjs +50 -0
- package/backend/review-diff-router.cjs +202 -0
- package/backend/review-diff-service.cjs +1267 -0
- package/backend/review-session-router.cjs +93 -0
- package/backend/review-session-service.cjs +470 -0
- package/backend/review-session-store.cjs +161 -0
- package/backend/review-state-router.cjs +132 -0
- package/backend/review-state-store.cjs +299 -0
- package/backend/run-history-store.cjs +97 -0
- package/backend/runtime-dependency-manager.cjs +893 -0
- package/backend/runtime-executable-invocation.cjs +37 -0
- package/backend/runtime-observation.cjs +96 -0
- package/backend/server-process-identity.cjs +70 -0
- package/backend/server.cjs +3356 -0
- package/backend/session-engine-bridge.cjs +144 -0
- package/backend/session-engine-router.cjs +105 -0
- package/backend/session-engine.cjs +64 -0
- package/backend/session-stream-protocol.cjs +181 -0
- package/backend/shell-busy-integration.cjs +442 -0
- package/backend/slash-command-discovery.cjs +423 -0
- package/backend/storage-layout.cjs +263 -0
- package/backend/system-monitor.cjs +96 -0
- package/backend/terminal-attach-checkpoint.cjs +73 -0
- package/backend/terminal-exit-quiescence.cjs +57 -0
- package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
- package/backend/terminal-runtime-cleanup.cjs +99 -0
- package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
- package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
- package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
- package/backend/terminal-screen-worker.cjs +352 -0
- package/backend/terminal-state-serialization.cjs +147 -0
- package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
- package/backend/theme-manager.cjs +185 -0
- package/backend/{update-service.js → update-service.cjs} +258 -248
- package/backend/usage-forecast.cjs +95 -0
- package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
- package/backend/usage-history-smoke.cjs +85 -0
- package/backend/usage-history-worker.cjs +60 -0
- package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
- package/backend/workspace-directory.cjs +239 -0
- package/backend/workspace-discovery.cjs +271 -0
- package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
- package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
- package/backend/workspace-root-registry.cjs +192 -0
- package/bin/farming +1 -1
- package/dist/acp/codex-acp-1.1.4.mjs +18 -1
- package/dist/assets/App-BCkdpWB6.css +1 -0
- package/dist/assets/App-CRjKpaGp.js +697 -0
- package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
- package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
- package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
- package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
- package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
- package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
- package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
- package/dist/assets/code-dark-B7eM_9G9.css +1 -0
- package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
- package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
- package/dist/assets/file-icons-BpeqWkIB.js +1 -0
- package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
- package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
- package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
- package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
- package/dist/assets/{index-D-zetSol.js → index-C8MchCem.js} +3 -3
- package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
- package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
- package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
- package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
- package/dist/assets/main-CLKXa6hf.css +1 -0
- package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
- package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
- package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
- package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
- package/dist/assets/review-C8-oPKXk.css +1 -0
- package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
- package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
- package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
- package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
- package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
- package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
- package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
- package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
- package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
- package/dist/index.html +1 -1
- package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
- package/extensions/browser/backend/agent-capability.cjs +85 -0
- package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
- package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
- package/extensions/browser/backend/browser-resource-store.cjs +228 -0
- package/extensions/browser/backend/browser-router.cjs +203 -0
- package/extensions/browser/backend/executable-discovery.cjs +248 -0
- package/extensions/browser/backend/farming-browser-client.cjs +116 -0
- package/extensions/browser/backend/index.cjs +32 -0
- package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
- package/extensions/browser/bin/farming-browser +16 -7
- package/extensions/computer/backend/agent-capability.cjs +72 -0
- package/extensions/computer/backend/computer-constants.cjs +59 -0
- package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
- package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
- package/extensions/computer/backend/computer-resource-store.cjs +190 -0
- package/extensions/computer/backend/computer-router.cjs +257 -0
- package/extensions/computer/backend/cua-tools.json +3067 -0
- package/extensions/computer/backend/farming-computer-client.cjs +84 -0
- package/extensions/computer/backend/index.cjs +35 -0
- package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
- package/extensions/computer/bin/farming-computer +131 -0
- package/frontend/farming-net/app.js +255 -262
- package/frontend/ghostty-loader.js +24 -20
- package/frontend/reading-anchor.js +210 -193
- package/frontend/runtime-paths.js +24 -26
- package/frontend/session-bridge.js +90 -111
- package/frontend/session-modal-bridge.js +184 -302
- package/frontend/skin-bridge.js +20 -23
- package/frontend/skins/crt/app.js +7686 -7901
- package/frontend/skins/crt/effects.js +7 -6
- package/frontend/skins/crt/index.html +6 -6
- package/frontend/skins/crt/styles/markdown.css +4 -4
- package/frontend/terminal-bridge.js +174 -181
- package/frontend/terminal-replay.js +320 -345
- package/frontend/theme-loader.js +55 -71
- package/package.json +64 -37
- package/shared/backend-connection-status.js +38 -69
- package/shared/browser-protocol.js +235 -110
- package/shared/websocket-liveness.js +40 -0
- package/backend/acp/packaged-claude-acp.js +0 -13
- package/backend/acp/packaged-codex-acp.js +0 -13
- package/backend/acp/patch-decisions.js +0 -153
- package/backend/acp/permission-security.js +0 -108
- package/backend/acp-session-state.js +0 -634
- package/backend/acp-transcript.js +0 -512
- package/backend/agent-env.js +0 -250
- package/backend/agent-json-stream.js +0 -268
- package/backend/agent-lifecycle-journal.js +0 -133
- package/backend/agent-order.js +0 -166
- package/backend/agent-provider-session.js +0 -76
- package/backend/agent-runtime-binding.js +0 -174
- package/backend/agent-session-history.js +0 -986
- package/backend/async-cache.js +0 -94
- package/backend/atomic-json-store.js +0 -37
- package/backend/auth.js +0 -251
- package/backend/chat-runtime.js +0 -28
- package/backend/claude-settings.js +0 -121
- package/backend/cli-agents.js +0 -486
- package/backend/codex-context-window.js +0 -189
- package/backend/codex-models.js +0 -226
- package/backend/codex-session-archive.js +0 -65
- package/backend/codex-session-history.js +0 -647
- package/backend/codex-transcript-sanitizer.js +0 -115
- package/backend/codex-transcript.js +0 -2362
- package/backend/command-runner-child.js +0 -67
- package/backend/config-manager.js +0 -1117
- package/backend/control-api.js +0 -455
- package/backend/executable-discovery.js +0 -216
- package/backend/farming-agent-bootstrap.js +0 -49
- package/backend/farming-cli.js +0 -403
- package/backend/farming-net-pass.js +0 -285
- package/backend/farming-net-registry.js +0 -112
- package/backend/farming-net-server.js +0 -298
- package/backend/farming-session-store.js +0 -677
- package/backend/git-worktree-info.js +0 -181
- package/backend/haiku-token.js +0 -772
- package/backend/index-html.js +0 -80
- package/backend/input-parts.js +0 -54
- package/backend/input-routing.js +0 -24
- package/backend/json-cli-runtime.js +0 -275
- package/backend/main-agent-skills.js +0 -288
- package/backend/main-page-session.js +0 -122
- package/backend/native-pty-controller-generation.js +0 -106
- package/backend/native-pty-host-identity.js +0 -86
- package/backend/native-pty-host-path.js +0 -42
- package/backend/native-session-engine.js +0 -268
- package/backend/network.js +0 -23
- package/backend/npm-update-helper.js +0 -374
- package/backend/packaged-node-pty.js +0 -99
- package/backend/preview-session-manager.js +0 -68
- package/backend/provider-adapters.js +0 -399
- package/backend/provider-session-id.js +0 -47
- package/backend/provider-session-service.js +0 -345
- package/backend/qr-share-tickets.js +0 -100
- package/backend/review-diff-router.js +0 -180
- package/backend/review-diff-service.js +0 -1270
- package/backend/review-session-router.js +0 -74
- package/backend/review-session-service.js +0 -446
- package/backend/review-session-store.js +0 -151
- package/backend/review-state-router.js +0 -116
- package/backend/review-state-store.js +0 -286
- package/backend/run-history-store.js +0 -67
- package/backend/runtime-dependency-manager.js +0 -759
- package/backend/runtime-executable-invocation.js +0 -20
- package/backend/runtime-observation.js +0 -81
- package/backend/server-process-identity.js +0 -47
- package/backend/server.js +0 -3225
- package/backend/session-engine-bridge.js +0 -129
- package/backend/session-engine-router.js +0 -66
- package/backend/session-engine.js +0 -39
- package/backend/session-stream-protocol.js +0 -185
- package/backend/shell-busy-integration.js +0 -472
- package/backend/slash-command-discovery.js +0 -433
- package/backend/storage-layout.js +0 -205
- package/backend/system-monitor.js +0 -77
- package/backend/terminal-attach-checkpoint.js +0 -74
- package/backend/terminal-exit-quiescence.js +0 -39
- package/backend/terminal-runtime-cleanup.js +0 -80
- package/backend/terminal-screen-worker.js +0 -337
- package/backend/terminal-state-serialization.js +0 -127
- package/backend/theme-manager.js +0 -163
- package/backend/usage-forecast.js +0 -86
- package/backend/usage-history-scanner.ts +0 -2718
- package/backend/usage-history-smoke.js +0 -64
- package/backend/usage-history-worker.js +0 -34
- package/backend/workspace-directory.js +0 -232
- package/backend/workspace-discovery.js +0 -311
- package/backend/workspace-root-registry.js +0 -166
- package/dist/assets/App-BKNUILuL.css +0 -1
- package/dist/assets/App-Z1N7T0eM.js +0 -695
- package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
- package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
- package/dist/assets/ProjectFilesSection-K3GHuQ4U.js +0 -12
- package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
- package/dist/assets/code-dark-kLsQLvpf.css +0 -1
- package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
- package/dist/assets/main-DUTz-Rd2.css +0 -1
- package/dist/assets/review-BcnwQtJv.css +0 -1
- package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
- package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
- package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
- package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
- package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
- package/extensions/browser/backend/agent-capability.js +0 -55
- package/extensions/browser/backend/browser-mcp-server.js +0 -621
- package/extensions/browser/backend/browser-resource-manager.js +0 -1331
- package/extensions/browser/backend/browser-resource-store.js +0 -190
- package/extensions/browser/backend/browser-router.js +0 -141
- package/extensions/browser/backend/executable-discovery.js +0 -238
- package/extensions/browser/backend/farming-browser-client.js +0 -83
- package/extensions/browser/backend/index.js +0 -7
- package/extensions/browser/backend/managed-chromium-installer.js +0 -593
- package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
- package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
- package/extensions/browser/frontend/browser-resource-state.ts +0 -60
- package/extensions/browser/frontend/browser.css +0 -567
- package/extensions/browser/frontend/types.ts +0 -38
- package/extensions/browser/frontend/useBrowserResources.ts +0 -166
- package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
- package/shared/backend-connection-status.d.ts +0 -37
- package/shared/browser-protocol.d.ts +0 -5
- /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
- /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
- /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
- /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
- /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
- /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
- /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
- /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
- /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
- /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
- /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
- /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
- /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
- /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
- /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
- /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
- /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
- /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
- /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
- /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
- /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
- /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
- /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
- /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
- /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
- /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
- /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
- /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
- /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
- /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
- /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
- /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
- /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
- /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
- /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
- /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
- /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
- /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
- /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
- /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
- /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
- /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
- /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
- /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
- /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
- /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
- /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
- /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
- /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
- /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
- /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
- /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
- /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
- /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
- /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
- /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
- /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
|
@@ -0,0 +1,3067 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"driverVersion": "0.12.4",
|
|
4
|
+
"sourceImage": "trycua/xfce-cua@sha256:274eb636f5cf3fc58f705916ee72b7a701270b3877369d08533a385c5325be9b",
|
|
5
|
+
"toolCount": 53,
|
|
6
|
+
"tools": [
|
|
7
|
+
{
|
|
8
|
+
"name": "computer_list_apps",
|
|
9
|
+
"upstreamName": "list_apps",
|
|
10
|
+
"description": "List Linux apps — both currently running and installed-but-not-running — with per-app state flags:\n\n- running: is a process for this app live? (pid is 0 when false)\n- active: reserved (Linux X11/Wayland focus model differs from frontmost-app); always false.\n- kind: `\"desktop\"` for XDG `.desktop` launcher entries.\n- launch_path: the launcher command from `Exec=` (field codes stripped). Pass to `launch_app(launch_path=...)`.\n- bundle_id: the XDG \"desktop file id\" — the `.desktop` file's path relative to its XDG `applications/` root with the `.desktop` suffix stripped and path separators replaced with `-` (e.g. `kde4/konqbrowser.desktop` → `kde4-konqbrowser`).\n- last_used: RFC3339 mtime of the `.desktop` file, when readable.\n\nRunning apps come from `/proc`. Installed apps come from XDG Desktop Entry files in $XDG_DATA_HOME/applications and each $XDG_DATA_DIRS entry's applications/ subdir. Entries with `NoDisplay=true` or `Hidden=true` are filtered. A `.desktop` file whose launcher matches a running process (by basename) is merged into a single entry with `running: true`.\n\nUse this for \"is X installed?\" as well as \"is X running?\". For per-window state — visibility, geometry, titles — call list_windows instead.",
|
|
11
|
+
"inputSchema": {
|
|
12
|
+
"additionalProperties": false,
|
|
13
|
+
"properties": {},
|
|
14
|
+
"type": "object"
|
|
15
|
+
},
|
|
16
|
+
"annotations": {
|
|
17
|
+
"destructiveHint": false,
|
|
18
|
+
"idempotentHint": true,
|
|
19
|
+
"openWorldHint": false,
|
|
20
|
+
"readOnlyHint": true
|
|
21
|
+
},
|
|
22
|
+
"_meta": {
|
|
23
|
+
"farming.dev/upstream": "cua-driver",
|
|
24
|
+
"farming.dev/capabilities": [
|
|
25
|
+
"app.list"
|
|
26
|
+
],
|
|
27
|
+
"farming.dev/risk": {
|
|
28
|
+
"class": "r1",
|
|
29
|
+
"enforcement": "metadata_only",
|
|
30
|
+
"operation_sensitive": false,
|
|
31
|
+
"version": "1"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "computer_list_windows",
|
|
37
|
+
"upstreamName": "list_windows",
|
|
38
|
+
"description": "List top-level X11 windows via _NET_CLIENT_LIST.",
|
|
39
|
+
"inputSchema": {
|
|
40
|
+
"additionalProperties": false,
|
|
41
|
+
"properties": {
|
|
42
|
+
"on_screen_only": {
|
|
43
|
+
"description": "When true, filter to visible windows only. Default false.",
|
|
44
|
+
"type": "boolean"
|
|
45
|
+
},
|
|
46
|
+
"pid": {
|
|
47
|
+
"type": "integer"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"type": "object"
|
|
51
|
+
},
|
|
52
|
+
"annotations": {
|
|
53
|
+
"destructiveHint": false,
|
|
54
|
+
"idempotentHint": true,
|
|
55
|
+
"openWorldHint": false,
|
|
56
|
+
"readOnlyHint": true
|
|
57
|
+
},
|
|
58
|
+
"_meta": {
|
|
59
|
+
"farming.dev/upstream": "cua-driver",
|
|
60
|
+
"farming.dev/capabilities": [
|
|
61
|
+
"window.list"
|
|
62
|
+
],
|
|
63
|
+
"farming.dev/risk": {
|
|
64
|
+
"class": "r1",
|
|
65
|
+
"enforcement": "metadata_only",
|
|
66
|
+
"operation_sensitive": false,
|
|
67
|
+
"version": "1"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "computer_get_window_state",
|
|
73
|
+
"upstreamName": "get_window_state",
|
|
74
|
+
"description": "Walk a running app's AT-SPI tree and return BOTH a structured `elements` array (preferred) AND a Markdown rendering of the same tree (back-compat). Every actionable element is tagged with [element_index N] in the markdown and as `element_index` in the structured array.\n\nPREFERRED CONSUMERS read `structuredContent.elements` (one entry per indexed row with `element_index`, `role`, `label`, `frame: {x,y,w,h}` when AT-SPI reports usable bounds, `parent_index`, `depth`). The markdown `tree_markdown` stays available and unchanged in shape for existing text-parsing callers — but new fields will only be added to the structured side.\n\nAlways returns BOTH the element tree AND a screenshot — ground on both and cross-check (the tree lies on some surfaces). Choose the modality at ACTION time: an element ax action (element_index/element_token → accessibility rung) or an element px action (x,y → pixel rung off this screenshot). capture_mode is deprecated and ignored.\n\nOptional `max_elements` / `max_depth` bound the AT-SPI walk to mitigate context-window blow-up on Electron / large web apps that produce 10k+ element trees. When applied, BOTH the markdown and the structured elements are truncated identically. Omit both for current default behaviour.",
|
|
75
|
+
"inputSchema": {
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"properties": {
|
|
78
|
+
"capture_mode": {
|
|
79
|
+
"description": "DEPRECATED and ignored. get_window_state always returns BOTH the element tree and a screenshot — ground on both. The modality is chosen at action time by how you address the target: an element ax action (element_index/element_token) or an element px action (x,y). Any value (including the old \"som\"/\"screenshot\" aliases) is accepted but has no effect.",
|
|
80
|
+
"enum": [
|
|
81
|
+
"ax",
|
|
82
|
+
"vision"
|
|
83
|
+
],
|
|
84
|
+
"type": "string"
|
|
85
|
+
},
|
|
86
|
+
"include_screenshot": {
|
|
87
|
+
"description": "Default true — returns a grounding screenshot alongside the tree. Set false to skip the grab and return tree only (the cheap path for re-indexing before an element ax action).",
|
|
88
|
+
"type": "boolean"
|
|
89
|
+
},
|
|
90
|
+
"max_depth": {
|
|
91
|
+
"description": "Cap on the AT-SPI tree walk depth. Omit for the default (uncapped). Lower for deeply nested apps.",
|
|
92
|
+
"minimum": 1,
|
|
93
|
+
"type": "integer"
|
|
94
|
+
},
|
|
95
|
+
"max_elements": {
|
|
96
|
+
"description": "Cap on total AT-SPI nodes walked. Omit for the default (5 000). Lower for huge web/Electron trees.",
|
|
97
|
+
"minimum": 1,
|
|
98
|
+
"type": "integer"
|
|
99
|
+
},
|
|
100
|
+
"pid": {
|
|
101
|
+
"type": "integer"
|
|
102
|
+
},
|
|
103
|
+
"query": {
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
"screenshot_out_file": {
|
|
107
|
+
"description": "When set, write the PNG to this file path (~ expanded) instead of embedding base64 in the response. The structured output carries screenshot_file_path instead.",
|
|
108
|
+
"type": "string"
|
|
109
|
+
},
|
|
110
|
+
"session": {
|
|
111
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
112
|
+
"type": "string"
|
|
113
|
+
},
|
|
114
|
+
"window_id": {
|
|
115
|
+
"description": "X11 XID from list_windows.",
|
|
116
|
+
"type": "integer"
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"required": [
|
|
120
|
+
"pid",
|
|
121
|
+
"window_id"
|
|
122
|
+
],
|
|
123
|
+
"type": "object"
|
|
124
|
+
},
|
|
125
|
+
"annotations": {
|
|
126
|
+
"destructiveHint": false,
|
|
127
|
+
"idempotentHint": true,
|
|
128
|
+
"openWorldHint": false,
|
|
129
|
+
"readOnlyHint": true
|
|
130
|
+
},
|
|
131
|
+
"_meta": {
|
|
132
|
+
"farming.dev/upstream": "cua-driver",
|
|
133
|
+
"farming.dev/capabilities": [
|
|
134
|
+
"accessibility.window_state",
|
|
135
|
+
"accessibility.tree",
|
|
136
|
+
"accessibility.tree.structured",
|
|
137
|
+
"accessibility.tree.bounded",
|
|
138
|
+
"accessibility.element_tokens",
|
|
139
|
+
"screen.capture",
|
|
140
|
+
"screen.capture.window"
|
|
141
|
+
],
|
|
142
|
+
"farming.dev/risk": {
|
|
143
|
+
"class": "r2",
|
|
144
|
+
"enforcement": "metadata_only",
|
|
145
|
+
"operation_sensitive": false,
|
|
146
|
+
"version": "1"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "computer_launch_app",
|
|
152
|
+
"upstreamName": "launch_app",
|
|
153
|
+
"description": "Launch a Linux app in the background. Provide launch_path (preferred — round-trip the value from list_apps), name (app name, launched via xdg-open or direct exec), bundle_id (ignored on Linux), or urls (list of URLs to open). Resolution precedence: launch_path > name > bundle_id.",
|
|
154
|
+
"inputSchema": {
|
|
155
|
+
"additionalProperties": false,
|
|
156
|
+
"properties": {
|
|
157
|
+
"additional_arguments": {
|
|
158
|
+
"description": "Extra command-line arguments passed to the launched process.",
|
|
159
|
+
"items": {
|
|
160
|
+
"type": "string"
|
|
161
|
+
},
|
|
162
|
+
"type": "array"
|
|
163
|
+
},
|
|
164
|
+
"bundle_id": {
|
|
165
|
+
"description": "Ignored on Linux (macOS/Windows concept).",
|
|
166
|
+
"type": "string"
|
|
167
|
+
},
|
|
168
|
+
"launch_path": {
|
|
169
|
+
"description": "Round-trip the `launch_path` returned by `list_apps` — the Exec= command from the .desktop file with XDG field codes already stripped. Highest precedence on Linux; spawned directly via the system shell.",
|
|
170
|
+
"type": "string"
|
|
171
|
+
},
|
|
172
|
+
"name": {
|
|
173
|
+
"description": "App name or command to launch.",
|
|
174
|
+
"type": "string"
|
|
175
|
+
},
|
|
176
|
+
"urls": {
|
|
177
|
+
"description": "URLs to open via xdg-open.",
|
|
178
|
+
"items": {
|
|
179
|
+
"type": "string"
|
|
180
|
+
},
|
|
181
|
+
"type": "array"
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"type": "object"
|
|
185
|
+
},
|
|
186
|
+
"annotations": {
|
|
187
|
+
"destructiveHint": false,
|
|
188
|
+
"idempotentHint": false,
|
|
189
|
+
"openWorldHint": true,
|
|
190
|
+
"readOnlyHint": false
|
|
191
|
+
},
|
|
192
|
+
"_meta": {
|
|
193
|
+
"farming.dev/upstream": "cua-driver",
|
|
194
|
+
"farming.dev/capabilities": [
|
|
195
|
+
"app.launch"
|
|
196
|
+
],
|
|
197
|
+
"farming.dev/risk": {
|
|
198
|
+
"class": "r1",
|
|
199
|
+
"enforcement": "metadata_only",
|
|
200
|
+
"operation_sensitive": false,
|
|
201
|
+
"version": "1"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "computer_kill_app",
|
|
207
|
+
"upstreamName": "kill_app",
|
|
208
|
+
"description": "Force-terminate a process by pid (kill -9 equivalent on Linux). Use as escalation when the cooperative close path failed to make the process exit. Unsaved state is lost — prefer the cooperative path first.",
|
|
209
|
+
"inputSchema": {
|
|
210
|
+
"additionalProperties": false,
|
|
211
|
+
"properties": {
|
|
212
|
+
"pid": {
|
|
213
|
+
"description": "PID of the process to terminate.",
|
|
214
|
+
"type": "integer"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"required": [
|
|
218
|
+
"pid"
|
|
219
|
+
],
|
|
220
|
+
"type": "object"
|
|
221
|
+
},
|
|
222
|
+
"annotations": {
|
|
223
|
+
"destructiveHint": true,
|
|
224
|
+
"idempotentHint": true,
|
|
225
|
+
"openWorldHint": false,
|
|
226
|
+
"readOnlyHint": false
|
|
227
|
+
},
|
|
228
|
+
"_meta": {
|
|
229
|
+
"farming.dev/upstream": "cua-driver",
|
|
230
|
+
"farming.dev/capabilities": [
|
|
231
|
+
"app.kill"
|
|
232
|
+
],
|
|
233
|
+
"farming.dev/risk": {
|
|
234
|
+
"class": "r1",
|
|
235
|
+
"enforcement": "metadata_only",
|
|
236
|
+
"operation_sensitive": false,
|
|
237
|
+
"version": "1"
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"name": "computer_bring_to_front",
|
|
243
|
+
"upstreamName": "bring_to_front",
|
|
244
|
+
"description": "Persistently activate a window so subsequent input lands on it. X11: EWMH _NET_ACTIVE_WINDOW activation (the `wmctrl -a` equivalent, proper timestamp handling to beat focus-stealing prevention) — call it before `delivery_mode:\"foreground\"` input to avoid a per-call flash, or to escalate when background injection didn't land. Wayland: activates through a target-addressable compositor adapter (wlroots foreign-toplevel or the GNOME Shell helper) and refuses when the compositor offers no safe adapter. Matches the macOS / Windows bring_to_front rung.",
|
|
245
|
+
"inputSchema": {
|
|
246
|
+
"additionalProperties": false,
|
|
247
|
+
"properties": {
|
|
248
|
+
"pid": {
|
|
249
|
+
"type": "integer"
|
|
250
|
+
},
|
|
251
|
+
"window_id": {
|
|
252
|
+
"description": "X11 window id (xid) to activate. If omitted, the first window of `pid` is used.",
|
|
253
|
+
"type": "integer"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"required": [
|
|
257
|
+
"pid"
|
|
258
|
+
],
|
|
259
|
+
"type": "object"
|
|
260
|
+
},
|
|
261
|
+
"annotations": {
|
|
262
|
+
"destructiveHint": false,
|
|
263
|
+
"idempotentHint": true,
|
|
264
|
+
"openWorldHint": false,
|
|
265
|
+
"readOnlyHint": false
|
|
266
|
+
},
|
|
267
|
+
"_meta": {
|
|
268
|
+
"farming.dev/upstream": "cua-driver",
|
|
269
|
+
"farming.dev/capabilities": [
|
|
270
|
+
"window.activate"
|
|
271
|
+
],
|
|
272
|
+
"farming.dev/risk": {
|
|
273
|
+
"class": "r1",
|
|
274
|
+
"enforcement": "metadata_only",
|
|
275
|
+
"operation_sensitive": false,
|
|
276
|
+
"version": "1"
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"name": "computer_click",
|
|
282
|
+
"upstreamName": "click",
|
|
283
|
+
"description": "Click against a target pid. **Prefer `element_index` over pixel coordinates** — element_index works on backgrounded / hidden windows, surfaces a stable handle, and tells you what you're clicking via the cached AT-SPI element's role + label. Reach for `x, y` only when the target is a canvas / custom-drawn surface that doesn't appear in the AT-SPI tree.\n\nProvide either (window_id + x/y) or (pid + element_index). Routes via XSendEvent (no focus steal). element_index cache is scoped per (pid, window_id) and is replaced by the next get_window_state of the same window — re-snapshot every turn before clicking.\n\nAfter a zoom call, pass from_zoom=true to auto-translate zoom-image coords back to full-window space.\n\nbutton: \"left\" (default), \"right\", or \"middle\". Defaults to left so the field is fully back-compat. X11: routes through XSendEvent ButtonPress/Release with the matching button code. Native Wayland: only left-button is supported via the virtual-pointer protocol — right/middle return an error rather than silently degrading to left.",
|
|
284
|
+
"inputSchema": {
|
|
285
|
+
"additionalProperties": false,
|
|
286
|
+
"properties": {
|
|
287
|
+
"button": {
|
|
288
|
+
"description": "Mouse button. Default: \"left\" (legacy back-compat). X11: routed via ButtonPress/Release with the matching evdev code. Native Wayland: only left-button is supported via the virtual-pointer protocol; right/middle return an error.",
|
|
289
|
+
"enum": [
|
|
290
|
+
"left",
|
|
291
|
+
"right",
|
|
292
|
+
"middle"
|
|
293
|
+
],
|
|
294
|
+
"type": "string"
|
|
295
|
+
},
|
|
296
|
+
"count": {
|
|
297
|
+
"type": "integer"
|
|
298
|
+
},
|
|
299
|
+
"cursor_id": {
|
|
300
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
301
|
+
"type": "string"
|
|
302
|
+
},
|
|
303
|
+
"delivery_mode": {
|
|
304
|
+
"default": "background",
|
|
305
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
306
|
+
"enum": [
|
|
307
|
+
"background",
|
|
308
|
+
"foreground"
|
|
309
|
+
],
|
|
310
|
+
"type": "string"
|
|
311
|
+
},
|
|
312
|
+
"element_index": {
|
|
313
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
314
|
+
"type": "integer"
|
|
315
|
+
},
|
|
316
|
+
"element_token": {
|
|
317
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
318
|
+
"type": "string"
|
|
319
|
+
},
|
|
320
|
+
"from_zoom": {
|
|
321
|
+
"description": "Set true after a zoom call to auto-translate zoom-image pixel coordinates back to full-window space.",
|
|
322
|
+
"type": "boolean"
|
|
323
|
+
},
|
|
324
|
+
"pid": {
|
|
325
|
+
"type": "integer"
|
|
326
|
+
},
|
|
327
|
+
"scope": {
|
|
328
|
+
"default": "window",
|
|
329
|
+
"enum": [
|
|
330
|
+
"window",
|
|
331
|
+
"desktop"
|
|
332
|
+
],
|
|
333
|
+
"type": "string"
|
|
334
|
+
},
|
|
335
|
+
"session": {
|
|
336
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
337
|
+
"type": "string"
|
|
338
|
+
},
|
|
339
|
+
"window_id": {
|
|
340
|
+
"type": "integer"
|
|
341
|
+
},
|
|
342
|
+
"x": {
|
|
343
|
+
"type": "number"
|
|
344
|
+
},
|
|
345
|
+
"y": {
|
|
346
|
+
"type": "number"
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
"required": [],
|
|
350
|
+
"type": "object"
|
|
351
|
+
},
|
|
352
|
+
"annotations": {
|
|
353
|
+
"destructiveHint": true,
|
|
354
|
+
"idempotentHint": false,
|
|
355
|
+
"openWorldHint": true,
|
|
356
|
+
"readOnlyHint": false
|
|
357
|
+
},
|
|
358
|
+
"_meta": {
|
|
359
|
+
"farming.dev/upstream": "cua-driver",
|
|
360
|
+
"farming.dev/capabilities": [
|
|
361
|
+
"input.pointer.click",
|
|
362
|
+
"input.pointer.click.left",
|
|
363
|
+
"accessibility.element_tokens",
|
|
364
|
+
"input.delivery_mode"
|
|
365
|
+
],
|
|
366
|
+
"farming.dev/risk": {
|
|
367
|
+
"class": "r1",
|
|
368
|
+
"enforcement": "metadata_only",
|
|
369
|
+
"operation_sensitive": false,
|
|
370
|
+
"version": "1"
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"name": "computer_double_click",
|
|
376
|
+
"upstreamName": "double_click",
|
|
377
|
+
"description": "Double-click at (x,y) or an element_index (AT-SPI bounds) via XSendEvent. No focus steal. Provide either (window_id + x/y) or (pid + element_index). After a zoom call, pass from_zoom=true to auto-translate zoom-image coords.",
|
|
378
|
+
"inputSchema": {
|
|
379
|
+
"additionalProperties": false,
|
|
380
|
+
"properties": {
|
|
381
|
+
"cursor_id": {
|
|
382
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
383
|
+
"type": "string"
|
|
384
|
+
},
|
|
385
|
+
"delivery_mode": {
|
|
386
|
+
"default": "background",
|
|
387
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
388
|
+
"enum": [
|
|
389
|
+
"background",
|
|
390
|
+
"foreground"
|
|
391
|
+
],
|
|
392
|
+
"type": "string"
|
|
393
|
+
},
|
|
394
|
+
"element_index": {
|
|
395
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
396
|
+
"type": "integer"
|
|
397
|
+
},
|
|
398
|
+
"element_token": {
|
|
399
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
400
|
+
"type": "string"
|
|
401
|
+
},
|
|
402
|
+
"from_zoom": {
|
|
403
|
+
"description": "Set true after a zoom call to auto-translate zoom-image pixel coordinates back to full-window space.",
|
|
404
|
+
"type": "boolean"
|
|
405
|
+
},
|
|
406
|
+
"pid": {
|
|
407
|
+
"type": "integer"
|
|
408
|
+
},
|
|
409
|
+
"session": {
|
|
410
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
411
|
+
"type": "string"
|
|
412
|
+
},
|
|
413
|
+
"window_id": {
|
|
414
|
+
"type": "integer"
|
|
415
|
+
},
|
|
416
|
+
"x": {
|
|
417
|
+
"type": "number"
|
|
418
|
+
},
|
|
419
|
+
"y": {
|
|
420
|
+
"type": "number"
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
"required": [
|
|
424
|
+
"pid"
|
|
425
|
+
],
|
|
426
|
+
"type": "object"
|
|
427
|
+
},
|
|
428
|
+
"annotations": {
|
|
429
|
+
"destructiveHint": true,
|
|
430
|
+
"idempotentHint": false,
|
|
431
|
+
"openWorldHint": true,
|
|
432
|
+
"readOnlyHint": false
|
|
433
|
+
},
|
|
434
|
+
"_meta": {
|
|
435
|
+
"farming.dev/upstream": "cua-driver",
|
|
436
|
+
"farming.dev/capabilities": [
|
|
437
|
+
"input.pointer.click",
|
|
438
|
+
"input.pointer.click.left",
|
|
439
|
+
"input.pointer.click.double",
|
|
440
|
+
"accessibility.element_tokens",
|
|
441
|
+
"input.delivery_mode"
|
|
442
|
+
],
|
|
443
|
+
"farming.dev/risk": {
|
|
444
|
+
"class": "r1",
|
|
445
|
+
"enforcement": "metadata_only",
|
|
446
|
+
"operation_sensitive": false,
|
|
447
|
+
"version": "1"
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"name": "computer_right_click",
|
|
453
|
+
"upstreamName": "right_click",
|
|
454
|
+
"description": "Right-click at (x,y) or an element_index (AT-SPI bounds) via XSendEvent. No focus steal. Provide either (window_id + x/y) or (pid + element_index). After a zoom call, pass from_zoom=true to auto-translate zoom-image coords.",
|
|
455
|
+
"inputSchema": {
|
|
456
|
+
"additionalProperties": false,
|
|
457
|
+
"properties": {
|
|
458
|
+
"cursor_id": {
|
|
459
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
460
|
+
"type": "string"
|
|
461
|
+
},
|
|
462
|
+
"delivery_mode": {
|
|
463
|
+
"default": "background",
|
|
464
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
465
|
+
"enum": [
|
|
466
|
+
"background",
|
|
467
|
+
"foreground"
|
|
468
|
+
],
|
|
469
|
+
"type": "string"
|
|
470
|
+
},
|
|
471
|
+
"element_index": {
|
|
472
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
473
|
+
"type": "integer"
|
|
474
|
+
},
|
|
475
|
+
"element_token": {
|
|
476
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
477
|
+
"type": "string"
|
|
478
|
+
},
|
|
479
|
+
"from_zoom": {
|
|
480
|
+
"description": "Set true after a zoom call to auto-translate zoom-image pixel coordinates back to full-window space.",
|
|
481
|
+
"type": "boolean"
|
|
482
|
+
},
|
|
483
|
+
"modifier": {
|
|
484
|
+
"description": "Modifier keys held during the action: cmd, shift, option/alt, ctrl.",
|
|
485
|
+
"items": {
|
|
486
|
+
"type": "string"
|
|
487
|
+
},
|
|
488
|
+
"type": "array"
|
|
489
|
+
},
|
|
490
|
+
"pid": {
|
|
491
|
+
"type": "integer"
|
|
492
|
+
},
|
|
493
|
+
"session": {
|
|
494
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
495
|
+
"type": "string"
|
|
496
|
+
},
|
|
497
|
+
"window_id": {
|
|
498
|
+
"type": "integer"
|
|
499
|
+
},
|
|
500
|
+
"x": {
|
|
501
|
+
"type": "number"
|
|
502
|
+
},
|
|
503
|
+
"y": {
|
|
504
|
+
"type": "number"
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
"required": [
|
|
508
|
+
"pid"
|
|
509
|
+
],
|
|
510
|
+
"type": "object"
|
|
511
|
+
},
|
|
512
|
+
"annotations": {
|
|
513
|
+
"destructiveHint": true,
|
|
514
|
+
"idempotentHint": false,
|
|
515
|
+
"openWorldHint": true,
|
|
516
|
+
"readOnlyHint": false
|
|
517
|
+
},
|
|
518
|
+
"_meta": {
|
|
519
|
+
"farming.dev/upstream": "cua-driver",
|
|
520
|
+
"farming.dev/capabilities": [
|
|
521
|
+
"input.pointer.click",
|
|
522
|
+
"input.pointer.click.right",
|
|
523
|
+
"accessibility.element_tokens",
|
|
524
|
+
"input.delivery_mode"
|
|
525
|
+
],
|
|
526
|
+
"farming.dev/risk": {
|
|
527
|
+
"class": "r1",
|
|
528
|
+
"enforcement": "metadata_only",
|
|
529
|
+
"operation_sensitive": false,
|
|
530
|
+
"version": "1"
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"name": "computer_drag",
|
|
536
|
+
"upstreamName": "drag",
|
|
537
|
+
"description": "Press-drag-release gesture from (from_x, from_y) to (to_x, to_y) in window-local screenshot pixels via XSendEvent (ButtonPress + MotionNotify × steps + ButtonRelease). duration_ms (default 500), steps (default 20). No focus steal.",
|
|
538
|
+
"inputSchema": {
|
|
539
|
+
"additionalProperties": false,
|
|
540
|
+
"properties": {
|
|
541
|
+
"button": {
|
|
542
|
+
"description": "Mouse button. Default \"left\".",
|
|
543
|
+
"enum": [
|
|
544
|
+
"left",
|
|
545
|
+
"right",
|
|
546
|
+
"middle"
|
|
547
|
+
],
|
|
548
|
+
"type": "string"
|
|
549
|
+
},
|
|
550
|
+
"cursor_id": {
|
|
551
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
552
|
+
"type": "string"
|
|
553
|
+
},
|
|
554
|
+
"delivery_mode": {
|
|
555
|
+
"default": "background",
|
|
556
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
557
|
+
"enum": [
|
|
558
|
+
"background",
|
|
559
|
+
"foreground"
|
|
560
|
+
],
|
|
561
|
+
"type": "string"
|
|
562
|
+
},
|
|
563
|
+
"duration_ms": {
|
|
564
|
+
"description": "Total drag duration. Default: 500.",
|
|
565
|
+
"maximum": 10000,
|
|
566
|
+
"minimum": 0,
|
|
567
|
+
"type": "integer"
|
|
568
|
+
},
|
|
569
|
+
"from_x": {
|
|
570
|
+
"type": "number"
|
|
571
|
+
},
|
|
572
|
+
"from_y": {
|
|
573
|
+
"type": "number"
|
|
574
|
+
},
|
|
575
|
+
"from_zoom": {
|
|
576
|
+
"type": "boolean"
|
|
577
|
+
},
|
|
578
|
+
"modifier": {
|
|
579
|
+
"description": "Modifier keys held during the action: cmd, shift, option/alt, ctrl.",
|
|
580
|
+
"items": {
|
|
581
|
+
"type": "string"
|
|
582
|
+
},
|
|
583
|
+
"type": "array"
|
|
584
|
+
},
|
|
585
|
+
"pid": {
|
|
586
|
+
"type": "integer"
|
|
587
|
+
},
|
|
588
|
+
"scope": {
|
|
589
|
+
"default": "window",
|
|
590
|
+
"enum": [
|
|
591
|
+
"window",
|
|
592
|
+
"desktop"
|
|
593
|
+
],
|
|
594
|
+
"type": "string"
|
|
595
|
+
},
|
|
596
|
+
"session": {
|
|
597
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
598
|
+
"type": "string"
|
|
599
|
+
},
|
|
600
|
+
"steps": {
|
|
601
|
+
"description": "Intermediate MotionNotify events. Default: 20.",
|
|
602
|
+
"maximum": 200,
|
|
603
|
+
"minimum": 1,
|
|
604
|
+
"type": "integer"
|
|
605
|
+
},
|
|
606
|
+
"to_x": {
|
|
607
|
+
"type": "number"
|
|
608
|
+
},
|
|
609
|
+
"to_y": {
|
|
610
|
+
"type": "number"
|
|
611
|
+
},
|
|
612
|
+
"window_id": {
|
|
613
|
+
"description": "Target window XID. Required.",
|
|
614
|
+
"type": "integer"
|
|
615
|
+
}
|
|
616
|
+
},
|
|
617
|
+
"required": [
|
|
618
|
+
"from_x",
|
|
619
|
+
"from_y",
|
|
620
|
+
"to_x",
|
|
621
|
+
"to_y"
|
|
622
|
+
],
|
|
623
|
+
"type": "object"
|
|
624
|
+
},
|
|
625
|
+
"annotations": {
|
|
626
|
+
"destructiveHint": true,
|
|
627
|
+
"idempotentHint": false,
|
|
628
|
+
"openWorldHint": true,
|
|
629
|
+
"readOnlyHint": false
|
|
630
|
+
},
|
|
631
|
+
"_meta": {
|
|
632
|
+
"farming.dev/upstream": "cua-driver",
|
|
633
|
+
"farming.dev/capabilities": [
|
|
634
|
+
"input.pointer.drag",
|
|
635
|
+
"input.delivery_mode"
|
|
636
|
+
],
|
|
637
|
+
"farming.dev/risk": {
|
|
638
|
+
"class": "r1",
|
|
639
|
+
"enforcement": "metadata_only",
|
|
640
|
+
"operation_sensitive": false,
|
|
641
|
+
"version": "1"
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
"name": "computer_mouse_button_down",
|
|
647
|
+
"upstreamName": "mouse_button_down",
|
|
648
|
+
"description": "Press and hold a mouse button at (x,y) via background X11 delivery. Does not release the button; pair with mouse_drag / mouse_button_up. Returns the current held-button state.",
|
|
649
|
+
"inputSchema": {
|
|
650
|
+
"additionalProperties": false,
|
|
651
|
+
"properties": {
|
|
652
|
+
"button": {
|
|
653
|
+
"description": "Mouse button. Default \"left\".",
|
|
654
|
+
"enum": [
|
|
655
|
+
"left",
|
|
656
|
+
"right",
|
|
657
|
+
"middle"
|
|
658
|
+
],
|
|
659
|
+
"type": "string"
|
|
660
|
+
},
|
|
661
|
+
"cursor_id": {
|
|
662
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
663
|
+
"type": "string"
|
|
664
|
+
},
|
|
665
|
+
"from_zoom": {
|
|
666
|
+
"description": "Set true after a zoom call to auto-translate zoom-image pixel coordinates back to full-window space.",
|
|
667
|
+
"type": "boolean"
|
|
668
|
+
},
|
|
669
|
+
"pid": {
|
|
670
|
+
"type": "integer"
|
|
671
|
+
},
|
|
672
|
+
"session": {
|
|
673
|
+
"description": "Optional multi-cursor session id; takes precedence over cursor_id.",
|
|
674
|
+
"type": "string"
|
|
675
|
+
},
|
|
676
|
+
"window_id": {
|
|
677
|
+
"type": "integer"
|
|
678
|
+
},
|
|
679
|
+
"x": {
|
|
680
|
+
"type": "number"
|
|
681
|
+
},
|
|
682
|
+
"y": {
|
|
683
|
+
"type": "number"
|
|
684
|
+
}
|
|
685
|
+
},
|
|
686
|
+
"required": [
|
|
687
|
+
"pid",
|
|
688
|
+
"window_id",
|
|
689
|
+
"x",
|
|
690
|
+
"y"
|
|
691
|
+
],
|
|
692
|
+
"type": "object"
|
|
693
|
+
},
|
|
694
|
+
"annotations": {
|
|
695
|
+
"destructiveHint": true,
|
|
696
|
+
"idempotentHint": false,
|
|
697
|
+
"openWorldHint": true,
|
|
698
|
+
"readOnlyHint": false
|
|
699
|
+
},
|
|
700
|
+
"_meta": {
|
|
701
|
+
"farming.dev/upstream": "cua-driver",
|
|
702
|
+
"farming.dev/capabilities": [
|
|
703
|
+
"input.pointer.button"
|
|
704
|
+
],
|
|
705
|
+
"farming.dev/risk": {
|
|
706
|
+
"class": "r1",
|
|
707
|
+
"enforcement": "metadata_only",
|
|
708
|
+
"operation_sensitive": false,
|
|
709
|
+
"version": "1"
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
"name": "computer_mouse_drag",
|
|
715
|
+
"upstreamName": "mouse_drag",
|
|
716
|
+
"description": "Move a previously-held mouse button to a new point via background X11 delivery. Requires an active mouse_button_down state; does not release the button. Returns the updated held-button state.",
|
|
717
|
+
"inputSchema": {
|
|
718
|
+
"additionalProperties": false,
|
|
719
|
+
"properties": {
|
|
720
|
+
"cursor_id": {
|
|
721
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
722
|
+
"type": "string"
|
|
723
|
+
},
|
|
724
|
+
"duration_ms": {
|
|
725
|
+
"description": "Total drag duration. Default: 500.",
|
|
726
|
+
"maximum": 10000,
|
|
727
|
+
"minimum": 0,
|
|
728
|
+
"type": "integer"
|
|
729
|
+
},
|
|
730
|
+
"from_zoom": {
|
|
731
|
+
"description": "Set true after a zoom call to auto-translate zoom-image pixel coordinates back to full-window space.",
|
|
732
|
+
"type": "boolean"
|
|
733
|
+
},
|
|
734
|
+
"pid": {
|
|
735
|
+
"type": "integer"
|
|
736
|
+
},
|
|
737
|
+
"session": {
|
|
738
|
+
"description": "Optional multi-cursor session id; takes precedence over cursor_id.",
|
|
739
|
+
"type": "string"
|
|
740
|
+
},
|
|
741
|
+
"steps": {
|
|
742
|
+
"description": "Intermediate MotionNotify events. Default: 20.",
|
|
743
|
+
"maximum": 200,
|
|
744
|
+
"minimum": 1,
|
|
745
|
+
"type": "integer"
|
|
746
|
+
},
|
|
747
|
+
"window_id": {
|
|
748
|
+
"type": "integer"
|
|
749
|
+
},
|
|
750
|
+
"x": {
|
|
751
|
+
"type": "number"
|
|
752
|
+
},
|
|
753
|
+
"y": {
|
|
754
|
+
"type": "number"
|
|
755
|
+
}
|
|
756
|
+
},
|
|
757
|
+
"required": [
|
|
758
|
+
"x",
|
|
759
|
+
"y"
|
|
760
|
+
],
|
|
761
|
+
"type": "object"
|
|
762
|
+
},
|
|
763
|
+
"annotations": {
|
|
764
|
+
"destructiveHint": true,
|
|
765
|
+
"idempotentHint": false,
|
|
766
|
+
"openWorldHint": true,
|
|
767
|
+
"readOnlyHint": false
|
|
768
|
+
},
|
|
769
|
+
"_meta": {
|
|
770
|
+
"farming.dev/upstream": "cua-driver",
|
|
771
|
+
"farming.dev/capabilities": [
|
|
772
|
+
"input.pointer.drag"
|
|
773
|
+
],
|
|
774
|
+
"farming.dev/risk": {
|
|
775
|
+
"class": "r1",
|
|
776
|
+
"enforcement": "metadata_only",
|
|
777
|
+
"operation_sensitive": false,
|
|
778
|
+
"version": "1"
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"name": "computer_mouse_button_up",
|
|
784
|
+
"upstreamName": "mouse_button_up",
|
|
785
|
+
"description": "Release a previously-held mouse button via background X11 delivery. If x/y are omitted, releases at the last held position. Returns the current held-button state.",
|
|
786
|
+
"inputSchema": {
|
|
787
|
+
"additionalProperties": false,
|
|
788
|
+
"properties": {
|
|
789
|
+
"cursor_id": {
|
|
790
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
791
|
+
"type": "string"
|
|
792
|
+
},
|
|
793
|
+
"from_zoom": {
|
|
794
|
+
"description": "Set true after a zoom call to auto-translate zoom-image pixel coordinates back to full-window space.",
|
|
795
|
+
"type": "boolean"
|
|
796
|
+
},
|
|
797
|
+
"pid": {
|
|
798
|
+
"type": "integer"
|
|
799
|
+
},
|
|
800
|
+
"session": {
|
|
801
|
+
"description": "Optional multi-cursor session id; takes precedence over cursor_id.",
|
|
802
|
+
"type": "string"
|
|
803
|
+
},
|
|
804
|
+
"window_id": {
|
|
805
|
+
"type": "integer"
|
|
806
|
+
},
|
|
807
|
+
"x": {
|
|
808
|
+
"type": "number"
|
|
809
|
+
},
|
|
810
|
+
"y": {
|
|
811
|
+
"type": "number"
|
|
812
|
+
}
|
|
813
|
+
},
|
|
814
|
+
"type": "object"
|
|
815
|
+
},
|
|
816
|
+
"annotations": {
|
|
817
|
+
"destructiveHint": true,
|
|
818
|
+
"idempotentHint": false,
|
|
819
|
+
"openWorldHint": true,
|
|
820
|
+
"readOnlyHint": false
|
|
821
|
+
},
|
|
822
|
+
"_meta": {
|
|
823
|
+
"farming.dev/upstream": "cua-driver",
|
|
824
|
+
"farming.dev/capabilities": [
|
|
825
|
+
"input.pointer.button"
|
|
826
|
+
],
|
|
827
|
+
"farming.dev/risk": {
|
|
828
|
+
"class": "r1",
|
|
829
|
+
"enforcement": "metadata_only",
|
|
830
|
+
"operation_sensitive": false,
|
|
831
|
+
"version": "1"
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"name": "computer_parallel_mouse_drag",
|
|
837
|
+
"upstreamName": "parallel_mouse_drag",
|
|
838
|
+
"description": "Run multiple mouse drag gestures concurrently via Linux MPX/XI2 virtual master pointers. Each drag item runs on its own session-scoped master pointer (true same-window concurrent draws on X11). Each item presses once, glides continuously through its whole path, and releases once — one smooth held drag, not a chain of clicks. A path is given either as a straight segment (from_x/from_y → to_x/to_y) or as a function `fn` = y(x) sampled over [x_from, x_to] in window-local pixels (e.g. fn:\"x\" is a diagonal, fn:\"300+120*sin(x/40)\" a sine wave). Functions support + - * / ^, sin/cos/tan, sqrt, abs, exp, ln, pi, e.",
|
|
839
|
+
"inputSchema": {
|
|
840
|
+
"additionalProperties": false,
|
|
841
|
+
"properties": {
|
|
842
|
+
"drags": {
|
|
843
|
+
"items": {
|
|
844
|
+
"additionalProperties": false,
|
|
845
|
+
"properties": {
|
|
846
|
+
"button": {
|
|
847
|
+
"description": "Mouse button. Default \"left\".",
|
|
848
|
+
"enum": [
|
|
849
|
+
"left",
|
|
850
|
+
"right",
|
|
851
|
+
"middle"
|
|
852
|
+
],
|
|
853
|
+
"type": "string"
|
|
854
|
+
},
|
|
855
|
+
"duration_ms": {
|
|
856
|
+
"description": "Default: 1500 for fn paths, 500 for straight.",
|
|
857
|
+
"maximum": 10000,
|
|
858
|
+
"minimum": 0,
|
|
859
|
+
"type": "integer"
|
|
860
|
+
},
|
|
861
|
+
"fn": {
|
|
862
|
+
"description": "Expression y(x) in window-local pixels; sampled over [x_from,x_to]. Mutually exclusive with from_x/to_x.",
|
|
863
|
+
"type": "string"
|
|
864
|
+
},
|
|
865
|
+
"from_x": {
|
|
866
|
+
"type": "number"
|
|
867
|
+
},
|
|
868
|
+
"from_y": {
|
|
869
|
+
"type": "number"
|
|
870
|
+
},
|
|
871
|
+
"path": {
|
|
872
|
+
"description": "Explicit window-local waypoints [[x,y],...] (>=2); pressed once, glided through, released once. Takes precedence over fn/from-to.",
|
|
873
|
+
"items": {
|
|
874
|
+
"items": {
|
|
875
|
+
"type": "number"
|
|
876
|
+
},
|
|
877
|
+
"type": "array"
|
|
878
|
+
},
|
|
879
|
+
"type": "array"
|
|
880
|
+
},
|
|
881
|
+
"samples": {
|
|
882
|
+
"description": "Waypoints sampled along `fn`. Default: 80.",
|
|
883
|
+
"maximum": 400,
|
|
884
|
+
"minimum": 2,
|
|
885
|
+
"type": "integer"
|
|
886
|
+
},
|
|
887
|
+
"session": {
|
|
888
|
+
"description": "Session/cursor id; also keys the virtual master pointer.",
|
|
889
|
+
"type": "string"
|
|
890
|
+
},
|
|
891
|
+
"steps": {
|
|
892
|
+
"description": "Motion sub-steps along the whole path. Default: scaled to path length.",
|
|
893
|
+
"maximum": 300,
|
|
894
|
+
"minimum": 1,
|
|
895
|
+
"type": "integer"
|
|
896
|
+
},
|
|
897
|
+
"to_x": {
|
|
898
|
+
"type": "number"
|
|
899
|
+
},
|
|
900
|
+
"to_y": {
|
|
901
|
+
"type": "number"
|
|
902
|
+
},
|
|
903
|
+
"window_id": {
|
|
904
|
+
"type": "integer"
|
|
905
|
+
},
|
|
906
|
+
"x_from": {
|
|
907
|
+
"description": "Domain start (window-local x) when `fn` is used.",
|
|
908
|
+
"type": "number"
|
|
909
|
+
},
|
|
910
|
+
"x_to": {
|
|
911
|
+
"description": "Domain end (window-local x) when `fn` is used.",
|
|
912
|
+
"type": "number"
|
|
913
|
+
}
|
|
914
|
+
},
|
|
915
|
+
"required": [
|
|
916
|
+
"session",
|
|
917
|
+
"window_id"
|
|
918
|
+
],
|
|
919
|
+
"type": "object"
|
|
920
|
+
},
|
|
921
|
+
"minItems": 2,
|
|
922
|
+
"type": "array"
|
|
923
|
+
}
|
|
924
|
+
},
|
|
925
|
+
"required": [
|
|
926
|
+
"drags"
|
|
927
|
+
],
|
|
928
|
+
"type": "object"
|
|
929
|
+
},
|
|
930
|
+
"annotations": {
|
|
931
|
+
"destructiveHint": true,
|
|
932
|
+
"idempotentHint": false,
|
|
933
|
+
"openWorldHint": true,
|
|
934
|
+
"readOnlyHint": false
|
|
935
|
+
},
|
|
936
|
+
"_meta": {
|
|
937
|
+
"farming.dev/upstream": "cua-driver",
|
|
938
|
+
"farming.dev/capabilities": [
|
|
939
|
+
"input.pointer.drag"
|
|
940
|
+
],
|
|
941
|
+
"farming.dev/risk": {
|
|
942
|
+
"class": "r1",
|
|
943
|
+
"enforcement": "metadata_only",
|
|
944
|
+
"operation_sensitive": false,
|
|
945
|
+
"version": "1"
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
{
|
|
950
|
+
"name": "computer_type_text",
|
|
951
|
+
"upstreamName": "type_text",
|
|
952
|
+
"description": "Type text to a window via XSendEvent (KeyPress/KeyRelease). No focus steal.",
|
|
953
|
+
"inputSchema": {
|
|
954
|
+
"additionalProperties": false,
|
|
955
|
+
"properties": {
|
|
956
|
+
"delivery_mode": {
|
|
957
|
+
"default": "background",
|
|
958
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
959
|
+
"enum": [
|
|
960
|
+
"background",
|
|
961
|
+
"foreground"
|
|
962
|
+
],
|
|
963
|
+
"type": "string"
|
|
964
|
+
},
|
|
965
|
+
"element_index": {
|
|
966
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
967
|
+
"type": "integer"
|
|
968
|
+
},
|
|
969
|
+
"element_token": {
|
|
970
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
971
|
+
"type": "string"
|
|
972
|
+
},
|
|
973
|
+
"pid": {
|
|
974
|
+
"type": "integer"
|
|
975
|
+
},
|
|
976
|
+
"scope": {
|
|
977
|
+
"default": "window",
|
|
978
|
+
"enum": [
|
|
979
|
+
"window",
|
|
980
|
+
"desktop"
|
|
981
|
+
],
|
|
982
|
+
"type": "string"
|
|
983
|
+
},
|
|
984
|
+
"session": {
|
|
985
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
986
|
+
"type": "string"
|
|
987
|
+
},
|
|
988
|
+
"text": {
|
|
989
|
+
"type": "string"
|
|
990
|
+
},
|
|
991
|
+
"window_id": {
|
|
992
|
+
"type": "integer"
|
|
993
|
+
},
|
|
994
|
+
"x": {
|
|
995
|
+
"description": "Screenshot-pixel X of the field to type into — the element px action form. Pass x,y (no element_index) and the tool pixel-clicks there to establish real renderer focus, then types. Use for Chromium/Electron inputs the AX path can't reach. Read straight off the get_window_state PNG, same convention as click.",
|
|
996
|
+
"type": "number"
|
|
997
|
+
},
|
|
998
|
+
"y": {
|
|
999
|
+
"description": "Screenshot-pixel Y of the field (see x).",
|
|
1000
|
+
"type": "number"
|
|
1001
|
+
}
|
|
1002
|
+
},
|
|
1003
|
+
"required": [
|
|
1004
|
+
"text"
|
|
1005
|
+
],
|
|
1006
|
+
"type": "object"
|
|
1007
|
+
},
|
|
1008
|
+
"annotations": {
|
|
1009
|
+
"destructiveHint": true,
|
|
1010
|
+
"idempotentHint": false,
|
|
1011
|
+
"openWorldHint": true,
|
|
1012
|
+
"readOnlyHint": false
|
|
1013
|
+
},
|
|
1014
|
+
"_meta": {
|
|
1015
|
+
"farming.dev/upstream": "cua-driver",
|
|
1016
|
+
"farming.dev/capabilities": [
|
|
1017
|
+
"input.keyboard.type",
|
|
1018
|
+
"input.keyboard.type.terminal_safe",
|
|
1019
|
+
"accessibility.element_tokens",
|
|
1020
|
+
"input.delivery_mode"
|
|
1021
|
+
],
|
|
1022
|
+
"farming.dev/risk": {
|
|
1023
|
+
"class": "r1",
|
|
1024
|
+
"enforcement": "metadata_only",
|
|
1025
|
+
"operation_sensitive": false,
|
|
1026
|
+
"version": "1"
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"name": "computer_press_key",
|
|
1032
|
+
"upstreamName": "press_key",
|
|
1033
|
+
"description": "Press a key via XSendEvent to a window. No focus steal.",
|
|
1034
|
+
"inputSchema": {
|
|
1035
|
+
"additionalProperties": false,
|
|
1036
|
+
"properties": {
|
|
1037
|
+
"delivery_mode": {
|
|
1038
|
+
"default": "background",
|
|
1039
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
1040
|
+
"enum": [
|
|
1041
|
+
"background",
|
|
1042
|
+
"foreground"
|
|
1043
|
+
],
|
|
1044
|
+
"type": "string"
|
|
1045
|
+
},
|
|
1046
|
+
"element_index": {
|
|
1047
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
1048
|
+
"type": "integer"
|
|
1049
|
+
},
|
|
1050
|
+
"element_token": {
|
|
1051
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
1052
|
+
"type": "string"
|
|
1053
|
+
},
|
|
1054
|
+
"key": {
|
|
1055
|
+
"type": "string"
|
|
1056
|
+
},
|
|
1057
|
+
"modifiers": {
|
|
1058
|
+
"items": {
|
|
1059
|
+
"type": "string"
|
|
1060
|
+
},
|
|
1061
|
+
"type": "array"
|
|
1062
|
+
},
|
|
1063
|
+
"pid": {
|
|
1064
|
+
"type": "integer"
|
|
1065
|
+
},
|
|
1066
|
+
"scope": {
|
|
1067
|
+
"default": "window",
|
|
1068
|
+
"enum": [
|
|
1069
|
+
"window",
|
|
1070
|
+
"desktop"
|
|
1071
|
+
],
|
|
1072
|
+
"type": "string"
|
|
1073
|
+
},
|
|
1074
|
+
"session": {
|
|
1075
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1076
|
+
"type": "string"
|
|
1077
|
+
},
|
|
1078
|
+
"window_id": {
|
|
1079
|
+
"type": "integer"
|
|
1080
|
+
},
|
|
1081
|
+
"x": {
|
|
1082
|
+
"description": "Screenshot-pixel X — the element px action form: pixel-click there to focus, then send the key. Use when the key must go to a Chromium/Electron surface the AX path can't focus. Pass with y, no element_index.",
|
|
1083
|
+
"type": "number"
|
|
1084
|
+
},
|
|
1085
|
+
"y": {
|
|
1086
|
+
"description": "Screenshot-pixel Y (see x).",
|
|
1087
|
+
"type": "number"
|
|
1088
|
+
}
|
|
1089
|
+
},
|
|
1090
|
+
"required": [
|
|
1091
|
+
"key"
|
|
1092
|
+
],
|
|
1093
|
+
"type": "object"
|
|
1094
|
+
},
|
|
1095
|
+
"annotations": {
|
|
1096
|
+
"destructiveHint": true,
|
|
1097
|
+
"idempotentHint": false,
|
|
1098
|
+
"openWorldHint": true,
|
|
1099
|
+
"readOnlyHint": false
|
|
1100
|
+
},
|
|
1101
|
+
"_meta": {
|
|
1102
|
+
"farming.dev/upstream": "cua-driver",
|
|
1103
|
+
"farming.dev/capabilities": [
|
|
1104
|
+
"input.keyboard.press",
|
|
1105
|
+
"accessibility.element_tokens",
|
|
1106
|
+
"input.delivery_mode"
|
|
1107
|
+
],
|
|
1108
|
+
"farming.dev/risk": {
|
|
1109
|
+
"class": "r1",
|
|
1110
|
+
"enforcement": "metadata_only",
|
|
1111
|
+
"operation_sensitive": false,
|
|
1112
|
+
"version": "1"
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
},
|
|
1116
|
+
{
|
|
1117
|
+
"name": "computer_hotkey",
|
|
1118
|
+
"upstreamName": "hotkey",
|
|
1119
|
+
"description": "Press a combination of keys simultaneously, e.g. [\"ctrl\",\"c\"] for Copy. Sent via XSendEvent directly to the target pid; target does NOT need to be frontmost.",
|
|
1120
|
+
"inputSchema": {
|
|
1121
|
+
"additionalProperties": false,
|
|
1122
|
+
"properties": {
|
|
1123
|
+
"delivery_mode": {
|
|
1124
|
+
"default": "background",
|
|
1125
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
1126
|
+
"enum": [
|
|
1127
|
+
"background",
|
|
1128
|
+
"foreground"
|
|
1129
|
+
],
|
|
1130
|
+
"type": "string"
|
|
1131
|
+
},
|
|
1132
|
+
"element_index": {
|
|
1133
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
1134
|
+
"type": "integer"
|
|
1135
|
+
},
|
|
1136
|
+
"element_token": {
|
|
1137
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
1138
|
+
"type": "string"
|
|
1139
|
+
},
|
|
1140
|
+
"keys": {
|
|
1141
|
+
"description": "Modifier(s) + one non-modifier key, e.g. [\"ctrl\",\"c\"].",
|
|
1142
|
+
"items": {
|
|
1143
|
+
"type": "string"
|
|
1144
|
+
},
|
|
1145
|
+
"minItems": 2,
|
|
1146
|
+
"type": "array"
|
|
1147
|
+
},
|
|
1148
|
+
"pid": {
|
|
1149
|
+
"type": "integer"
|
|
1150
|
+
},
|
|
1151
|
+
"scope": {
|
|
1152
|
+
"default": "window",
|
|
1153
|
+
"enum": [
|
|
1154
|
+
"window",
|
|
1155
|
+
"desktop"
|
|
1156
|
+
],
|
|
1157
|
+
"type": "string"
|
|
1158
|
+
},
|
|
1159
|
+
"session": {
|
|
1160
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1161
|
+
"type": "string"
|
|
1162
|
+
},
|
|
1163
|
+
"window_id": {
|
|
1164
|
+
"type": "integer"
|
|
1165
|
+
},
|
|
1166
|
+
"x": {
|
|
1167
|
+
"description": "Screenshot-pixel X — the element px action form: pixel-click there to focus, then send the combo (so e.g. Ctrl+V pastes into that field). Pass with y. Use for Chromium/Electron surfaces the background combo can't reach.",
|
|
1168
|
+
"type": "number"
|
|
1169
|
+
},
|
|
1170
|
+
"y": {
|
|
1171
|
+
"description": "Screenshot-pixel Y (see x).",
|
|
1172
|
+
"type": "number"
|
|
1173
|
+
}
|
|
1174
|
+
},
|
|
1175
|
+
"required": [
|
|
1176
|
+
"keys"
|
|
1177
|
+
],
|
|
1178
|
+
"type": "object"
|
|
1179
|
+
},
|
|
1180
|
+
"annotations": {
|
|
1181
|
+
"destructiveHint": true,
|
|
1182
|
+
"idempotentHint": false,
|
|
1183
|
+
"openWorldHint": true,
|
|
1184
|
+
"readOnlyHint": false
|
|
1185
|
+
},
|
|
1186
|
+
"_meta": {
|
|
1187
|
+
"farming.dev/upstream": "cua-driver",
|
|
1188
|
+
"farming.dev/capabilities": [
|
|
1189
|
+
"input.keyboard.hotkey",
|
|
1190
|
+
"input.delivery_mode"
|
|
1191
|
+
],
|
|
1192
|
+
"farming.dev/risk": {
|
|
1193
|
+
"class": "r1",
|
|
1194
|
+
"enforcement": "metadata_only",
|
|
1195
|
+
"operation_sensitive": false,
|
|
1196
|
+
"version": "1"
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
"name": "computer_set_value",
|
|
1202
|
+
"upstreamName": "set_value",
|
|
1203
|
+
"description": "Set value of an AT-SPI element via SetValue action.",
|
|
1204
|
+
"inputSchema": {
|
|
1205
|
+
"additionalProperties": false,
|
|
1206
|
+
"properties": {
|
|
1207
|
+
"element_index": {
|
|
1208
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
1209
|
+
"type": "integer"
|
|
1210
|
+
},
|
|
1211
|
+
"element_token": {
|
|
1212
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
1213
|
+
"type": "string"
|
|
1214
|
+
},
|
|
1215
|
+
"pid": {
|
|
1216
|
+
"type": "integer"
|
|
1217
|
+
},
|
|
1218
|
+
"session": {
|
|
1219
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1220
|
+
"type": "string"
|
|
1221
|
+
},
|
|
1222
|
+
"value": {
|
|
1223
|
+
"type": "string"
|
|
1224
|
+
},
|
|
1225
|
+
"window_id": {
|
|
1226
|
+
"description": "Required when element_index is used; optional when element_token is supplied (the token carries it).",
|
|
1227
|
+
"type": "integer"
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
"required": [
|
|
1231
|
+
"pid",
|
|
1232
|
+
"value"
|
|
1233
|
+
],
|
|
1234
|
+
"type": "object"
|
|
1235
|
+
},
|
|
1236
|
+
"annotations": {
|
|
1237
|
+
"destructiveHint": true,
|
|
1238
|
+
"idempotentHint": false,
|
|
1239
|
+
"openWorldHint": true,
|
|
1240
|
+
"readOnlyHint": false
|
|
1241
|
+
},
|
|
1242
|
+
"_meta": {
|
|
1243
|
+
"farming.dev/upstream": "cua-driver",
|
|
1244
|
+
"farming.dev/capabilities": [
|
|
1245
|
+
"input.keyboard.type",
|
|
1246
|
+
"accessibility.element_tokens"
|
|
1247
|
+
],
|
|
1248
|
+
"farming.dev/risk": {
|
|
1249
|
+
"class": "r1",
|
|
1250
|
+
"enforcement": "metadata_only",
|
|
1251
|
+
"operation_sensitive": false,
|
|
1252
|
+
"version": "1"
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
"name": "computer_scroll",
|
|
1258
|
+
"upstreamName": "scroll",
|
|
1259
|
+
"description": "Scroll the target pid's focused region via XSendEvent Button4/5. direction required; by defaults to line, amount defaults to 3.",
|
|
1260
|
+
"inputSchema": {
|
|
1261
|
+
"additionalProperties": false,
|
|
1262
|
+
"properties": {
|
|
1263
|
+
"amount": {
|
|
1264
|
+
"maximum": 50,
|
|
1265
|
+
"minimum": 1,
|
|
1266
|
+
"type": "integer"
|
|
1267
|
+
},
|
|
1268
|
+
"by": {
|
|
1269
|
+
"enum": [
|
|
1270
|
+
"line",
|
|
1271
|
+
"page"
|
|
1272
|
+
],
|
|
1273
|
+
"type": "string"
|
|
1274
|
+
},
|
|
1275
|
+
"cursor_id": {
|
|
1276
|
+
"description": "Optional multi-cursor instance id. Default: 'default'.",
|
|
1277
|
+
"type": "string"
|
|
1278
|
+
},
|
|
1279
|
+
"delivery_mode": {
|
|
1280
|
+
"default": "background",
|
|
1281
|
+
"description": "Input delivery mode. 'background' (default) never activates or raises the target window. On X11 it injects via XTEST / the XInput2 master pointer (no focus steal). On Wayland it goes through libei + xdg-desktop-portal, which injects to the compositor's input focus — Wayland's security model has no per-window background targeting, so a specific non-focused window cannot be aimed at; when no libei backend is available the tool returns a structured background_unavailable error. 'foreground' is the explicit escalation: activate the target (X11 _NET_ACTIVE_WINDOW; Wayland compositor activate), inject, then restore the prior active window — a brief focus swap unless the target was already active. Call bring_to_front first to avoid the flash. Matches the macOS / Windows delivery_mode surface.",
|
|
1282
|
+
"enum": [
|
|
1283
|
+
"background",
|
|
1284
|
+
"foreground"
|
|
1285
|
+
],
|
|
1286
|
+
"type": "string"
|
|
1287
|
+
},
|
|
1288
|
+
"direction": {
|
|
1289
|
+
"enum": [
|
|
1290
|
+
"up",
|
|
1291
|
+
"down",
|
|
1292
|
+
"left",
|
|
1293
|
+
"right"
|
|
1294
|
+
],
|
|
1295
|
+
"type": "string"
|
|
1296
|
+
},
|
|
1297
|
+
"element_index": {
|
|
1298
|
+
"description": "Element index from the last get_window_state. REQUIRES `pid` and `window_id` alongside it — element_index alone (no pid) fails fast, it is not a silent no-op.",
|
|
1299
|
+
"type": "integer"
|
|
1300
|
+
},
|
|
1301
|
+
"element_token": {
|
|
1302
|
+
"description": "Opaque per-snapshot element handle from `structuredContent.elements[].element_token`. Takes precedence over element_index when both are supplied. Returns an explicit \"stale\" error once a newer snapshot supersedes it — re-snapshot in that case.",
|
|
1303
|
+
"type": "string"
|
|
1304
|
+
},
|
|
1305
|
+
"pid": {
|
|
1306
|
+
"type": "integer"
|
|
1307
|
+
},
|
|
1308
|
+
"scope": {
|
|
1309
|
+
"default": "window",
|
|
1310
|
+
"enum": [
|
|
1311
|
+
"window",
|
|
1312
|
+
"desktop"
|
|
1313
|
+
],
|
|
1314
|
+
"type": "string"
|
|
1315
|
+
},
|
|
1316
|
+
"session": {
|
|
1317
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1318
|
+
"type": "string"
|
|
1319
|
+
},
|
|
1320
|
+
"window_id": {
|
|
1321
|
+
"type": "integer"
|
|
1322
|
+
},
|
|
1323
|
+
"x": {
|
|
1324
|
+
"description": "Window-local screenshot-pixel X of the scroll target. Pass with y and without element_index.",
|
|
1325
|
+
"type": "number"
|
|
1326
|
+
},
|
|
1327
|
+
"y": {
|
|
1328
|
+
"description": "Window-local screenshot-pixel Y of the scroll target. Pass with x and without element_index.",
|
|
1329
|
+
"type": "number"
|
|
1330
|
+
}
|
|
1331
|
+
},
|
|
1332
|
+
"required": [
|
|
1333
|
+
"direction"
|
|
1334
|
+
],
|
|
1335
|
+
"type": "object"
|
|
1336
|
+
},
|
|
1337
|
+
"annotations": {
|
|
1338
|
+
"destructiveHint": false,
|
|
1339
|
+
"idempotentHint": false,
|
|
1340
|
+
"openWorldHint": true,
|
|
1341
|
+
"readOnlyHint": false
|
|
1342
|
+
},
|
|
1343
|
+
"_meta": {
|
|
1344
|
+
"farming.dev/upstream": "cua-driver",
|
|
1345
|
+
"farming.dev/capabilities": [
|
|
1346
|
+
"input.pointer.scroll",
|
|
1347
|
+
"accessibility.element_tokens",
|
|
1348
|
+
"input.delivery_mode"
|
|
1349
|
+
],
|
|
1350
|
+
"farming.dev/risk": {
|
|
1351
|
+
"class": "r1",
|
|
1352
|
+
"enforcement": "metadata_only",
|
|
1353
|
+
"operation_sensitive": false,
|
|
1354
|
+
"version": "1"
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
},
|
|
1358
|
+
{
|
|
1359
|
+
"name": "computer_get_screen_size",
|
|
1360
|
+
"upstreamName": "get_screen_size",
|
|
1361
|
+
"description": "Return the logical size of the main display in points plus its backing scale factor. Agents click in points; Retina displays have scale_factor 2.0. Requires no TCC permissions.",
|
|
1362
|
+
"inputSchema": {
|
|
1363
|
+
"additionalProperties": false,
|
|
1364
|
+
"properties": {
|
|
1365
|
+
"session": {
|
|
1366
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1367
|
+
"type": "string"
|
|
1368
|
+
}
|
|
1369
|
+
},
|
|
1370
|
+
"type": "object"
|
|
1371
|
+
},
|
|
1372
|
+
"annotations": {
|
|
1373
|
+
"destructiveHint": false,
|
|
1374
|
+
"idempotentHint": true,
|
|
1375
|
+
"openWorldHint": false,
|
|
1376
|
+
"readOnlyHint": true
|
|
1377
|
+
},
|
|
1378
|
+
"_meta": {
|
|
1379
|
+
"farming.dev/upstream": "cua-driver",
|
|
1380
|
+
"farming.dev/capabilities": [
|
|
1381
|
+
"screen.dimensions"
|
|
1382
|
+
],
|
|
1383
|
+
"farming.dev/risk": {
|
|
1384
|
+
"class": "r0",
|
|
1385
|
+
"enforcement": "metadata_only",
|
|
1386
|
+
"operation_sensitive": false,
|
|
1387
|
+
"version": "1"
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
},
|
|
1391
|
+
{
|
|
1392
|
+
"name": "computer_get_desktop_state",
|
|
1393
|
+
"upstreamName": "get_desktop_state",
|
|
1394
|
+
"description": "Full-display vision screenshot in true screen pixels (no downscale), for capture_scope=\"desktop\" GUI loops. Captures the entire display (root window) as native-size PNG so screen-absolute pixel coordinates land exactly. No AT-SPI walk.",
|
|
1395
|
+
"inputSchema": {
|
|
1396
|
+
"additionalProperties": false,
|
|
1397
|
+
"properties": {
|
|
1398
|
+
"screenshot_out_file": {
|
|
1399
|
+
"description": "Write PNG here instead of base64.",
|
|
1400
|
+
"type": "string"
|
|
1401
|
+
},
|
|
1402
|
+
"session": {
|
|
1403
|
+
"description": "Optional session id.",
|
|
1404
|
+
"type": "string"
|
|
1405
|
+
}
|
|
1406
|
+
},
|
|
1407
|
+
"type": "object"
|
|
1408
|
+
},
|
|
1409
|
+
"annotations": {
|
|
1410
|
+
"destructiveHint": false,
|
|
1411
|
+
"idempotentHint": false,
|
|
1412
|
+
"openWorldHint": false,
|
|
1413
|
+
"readOnlyHint": true
|
|
1414
|
+
},
|
|
1415
|
+
"_meta": {
|
|
1416
|
+
"farming.dev/upstream": "cua-driver",
|
|
1417
|
+
"farming.dev/capabilities": [
|
|
1418
|
+
"screen.capture",
|
|
1419
|
+
"screen.dimensions"
|
|
1420
|
+
],
|
|
1421
|
+
"farming.dev/risk": {
|
|
1422
|
+
"class": "r2",
|
|
1423
|
+
"enforcement": "metadata_only",
|
|
1424
|
+
"operation_sensitive": false,
|
|
1425
|
+
"version": "1"
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
"name": "computer_get_cursor_position",
|
|
1431
|
+
"upstreamName": "get_cursor_position",
|
|
1432
|
+
"description": "Return the current mouse cursor position in screen points (origin top-left).",
|
|
1433
|
+
"inputSchema": {
|
|
1434
|
+
"additionalProperties": false,
|
|
1435
|
+
"properties": {
|
|
1436
|
+
"session": {
|
|
1437
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1438
|
+
"type": "string"
|
|
1439
|
+
}
|
|
1440
|
+
},
|
|
1441
|
+
"type": "object"
|
|
1442
|
+
},
|
|
1443
|
+
"annotations": {
|
|
1444
|
+
"destructiveHint": false,
|
|
1445
|
+
"idempotentHint": true,
|
|
1446
|
+
"openWorldHint": false,
|
|
1447
|
+
"readOnlyHint": true
|
|
1448
|
+
},
|
|
1449
|
+
"_meta": {
|
|
1450
|
+
"farming.dev/upstream": "cua-driver",
|
|
1451
|
+
"farming.dev/capabilities": [
|
|
1452
|
+
"screen.cursor.position"
|
|
1453
|
+
],
|
|
1454
|
+
"farming.dev/risk": {
|
|
1455
|
+
"class": "r0",
|
|
1456
|
+
"enforcement": "metadata_only",
|
|
1457
|
+
"operation_sensitive": false,
|
|
1458
|
+
"version": "1"
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"name": "computer_move_cursor",
|
|
1464
|
+
"upstreamName": "move_cursor",
|
|
1465
|
+
"description": "Move the agent cursor overlay, or with scope=desktop move the real OS pointer in get_desktop_state coordinates.",
|
|
1466
|
+
"inputSchema": {
|
|
1467
|
+
"additionalProperties": false,
|
|
1468
|
+
"properties": {
|
|
1469
|
+
"cursor_id": {
|
|
1470
|
+
"type": "string"
|
|
1471
|
+
},
|
|
1472
|
+
"scope": {
|
|
1473
|
+
"default": "window",
|
|
1474
|
+
"enum": [
|
|
1475
|
+
"window",
|
|
1476
|
+
"desktop"
|
|
1477
|
+
],
|
|
1478
|
+
"type": "string"
|
|
1479
|
+
},
|
|
1480
|
+
"session": {
|
|
1481
|
+
"description": "Optional session id: declares/uses the agent cursor and per-session state for this run. The same id works over MCP, the CLI, or the raw socket, and follows the run across apps/windows. Omit to run cursor-less.",
|
|
1482
|
+
"type": "string"
|
|
1483
|
+
},
|
|
1484
|
+
"x": {
|
|
1485
|
+
"type": "number"
|
|
1486
|
+
},
|
|
1487
|
+
"y": {
|
|
1488
|
+
"type": "number"
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1491
|
+
"required": [
|
|
1492
|
+
"x",
|
|
1493
|
+
"y"
|
|
1494
|
+
],
|
|
1495
|
+
"type": "object"
|
|
1496
|
+
},
|
|
1497
|
+
"annotations": {
|
|
1498
|
+
"destructiveHint": false,
|
|
1499
|
+
"idempotentHint": true,
|
|
1500
|
+
"openWorldHint": false,
|
|
1501
|
+
"readOnlyHint": false
|
|
1502
|
+
},
|
|
1503
|
+
"_meta": {
|
|
1504
|
+
"farming.dev/upstream": "cua-driver",
|
|
1505
|
+
"farming.dev/capabilities": [
|
|
1506
|
+
"agent_cursor.move",
|
|
1507
|
+
"input.pointer.move"
|
|
1508
|
+
],
|
|
1509
|
+
"farming.dev/risk": {
|
|
1510
|
+
"class": "r1",
|
|
1511
|
+
"enforcement": "metadata_only",
|
|
1512
|
+
"operation_sensitive": false,
|
|
1513
|
+
"version": "1"
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
"name": "computer_set_agent_cursor_enabled",
|
|
1519
|
+
"upstreamName": "set_agent_cursor_enabled",
|
|
1520
|
+
"description": "Show or hide the agent cursor overlay.",
|
|
1521
|
+
"inputSchema": {
|
|
1522
|
+
"additionalProperties": false,
|
|
1523
|
+
"properties": {
|
|
1524
|
+
"cursor_id": {
|
|
1525
|
+
"type": "string"
|
|
1526
|
+
},
|
|
1527
|
+
"enabled": {
|
|
1528
|
+
"type": "boolean"
|
|
1529
|
+
},
|
|
1530
|
+
"session": {
|
|
1531
|
+
"type": "string"
|
|
1532
|
+
}
|
|
1533
|
+
},
|
|
1534
|
+
"required": [
|
|
1535
|
+
"enabled"
|
|
1536
|
+
],
|
|
1537
|
+
"type": "object"
|
|
1538
|
+
},
|
|
1539
|
+
"annotations": {
|
|
1540
|
+
"destructiveHint": false,
|
|
1541
|
+
"idempotentHint": true,
|
|
1542
|
+
"openWorldHint": false,
|
|
1543
|
+
"readOnlyHint": false
|
|
1544
|
+
},
|
|
1545
|
+
"_meta": {
|
|
1546
|
+
"farming.dev/upstream": "cua-driver",
|
|
1547
|
+
"farming.dev/capabilities": [
|
|
1548
|
+
"agent_cursor.set_enabled"
|
|
1549
|
+
],
|
|
1550
|
+
"farming.dev/risk": {
|
|
1551
|
+
"class": "r1",
|
|
1552
|
+
"enforcement": "metadata_only",
|
|
1553
|
+
"operation_sensitive": false,
|
|
1554
|
+
"version": "1"
|
|
1555
|
+
}
|
|
1556
|
+
}
|
|
1557
|
+
},
|
|
1558
|
+
{
|
|
1559
|
+
"name": "computer_set_agent_cursor_motion",
|
|
1560
|
+
"upstreamName": "set_agent_cursor_motion",
|
|
1561
|
+
"description": "Configure the visual appearance and motion curve of an agent cursor instance.\n\n- cursor_id: instance name (default='default')\n- cursor_icon: built-in ('arrow' | 'teardrop') or a path to a PNG/JPEG/SVG/ICO file; '' reverts to the default cursor\n- cursor_color: hex color e.g. '#00FFFF' or CSS name\n- cursor_label: short text shown near the cursor\n- cursor_size: dot radius in points (default=16)\n- cursor_opacity: 0.0–1.0 (default=0.85)\n\nMotion curve (Bezier):\n- arc_size: perpendicular deflection as fraction of path length [0,1]. Default 0.25\n- spring: settle damping [0.3,1.0]; 1.0=no overshoot. Default 0.72\n- glide_duration_ms: fixed flight duration per move [50,5000]; omit for speed-based\n- dwell_after_click_ms: pause after click ripple [0,5000]. Default 80\n- idle_hide_ms: auto-hide delay [0,60000]; 0=never. Default 20000",
|
|
1562
|
+
"inputSchema": {
|
|
1563
|
+
"additionalProperties": false,
|
|
1564
|
+
"properties": {
|
|
1565
|
+
"arc_flow": {
|
|
1566
|
+
"description": "Asymmetry bias [-1,1]. Default 0.0.",
|
|
1567
|
+
"type": "number"
|
|
1568
|
+
},
|
|
1569
|
+
"arc_size": {
|
|
1570
|
+
"description": "Arc deflection as fraction of path length [0,1]. Default 0.25.",
|
|
1571
|
+
"type": "number"
|
|
1572
|
+
},
|
|
1573
|
+
"cursor_color": {
|
|
1574
|
+
"type": "string"
|
|
1575
|
+
},
|
|
1576
|
+
"cursor_icon": {
|
|
1577
|
+
"type": "string"
|
|
1578
|
+
},
|
|
1579
|
+
"cursor_id": {
|
|
1580
|
+
"type": "string"
|
|
1581
|
+
},
|
|
1582
|
+
"cursor_label": {
|
|
1583
|
+
"type": "string"
|
|
1584
|
+
},
|
|
1585
|
+
"cursor_opacity": {
|
|
1586
|
+
"type": "number"
|
|
1587
|
+
},
|
|
1588
|
+
"cursor_size": {
|
|
1589
|
+
"type": "number"
|
|
1590
|
+
},
|
|
1591
|
+
"dwell_after_click_ms": {
|
|
1592
|
+
"maximum": 5000,
|
|
1593
|
+
"minimum": 0,
|
|
1594
|
+
"type": "number"
|
|
1595
|
+
},
|
|
1596
|
+
"end_handle": {
|
|
1597
|
+
"description": "End-handle fraction [0,1]. Default 0.3.",
|
|
1598
|
+
"type": "number"
|
|
1599
|
+
},
|
|
1600
|
+
"glide_duration_ms": {
|
|
1601
|
+
"maximum": 5000,
|
|
1602
|
+
"minimum": 50,
|
|
1603
|
+
"type": "number"
|
|
1604
|
+
},
|
|
1605
|
+
"idle_hide_ms": {
|
|
1606
|
+
"maximum": 60000,
|
|
1607
|
+
"minimum": 0,
|
|
1608
|
+
"type": "number"
|
|
1609
|
+
},
|
|
1610
|
+
"session": {
|
|
1611
|
+
"type": "string"
|
|
1612
|
+
},
|
|
1613
|
+
"spring": {
|
|
1614
|
+
"description": "Settle damping [0.3,1.0]. Default 0.72.",
|
|
1615
|
+
"type": "number"
|
|
1616
|
+
},
|
|
1617
|
+
"start_handle": {
|
|
1618
|
+
"description": "Start-handle fraction [0,1]. Default 0.3.",
|
|
1619
|
+
"type": "number"
|
|
1620
|
+
},
|
|
1621
|
+
"turn_radius": {
|
|
1622
|
+
"maximum": 1000,
|
|
1623
|
+
"minimum": 1,
|
|
1624
|
+
"type": "number"
|
|
1625
|
+
}
|
|
1626
|
+
},
|
|
1627
|
+
"type": "object"
|
|
1628
|
+
},
|
|
1629
|
+
"annotations": {
|
|
1630
|
+
"destructiveHint": false,
|
|
1631
|
+
"idempotentHint": true,
|
|
1632
|
+
"openWorldHint": false,
|
|
1633
|
+
"readOnlyHint": false
|
|
1634
|
+
},
|
|
1635
|
+
"_meta": {
|
|
1636
|
+
"farming.dev/upstream": "cua-driver",
|
|
1637
|
+
"farming.dev/capabilities": [
|
|
1638
|
+
"agent_cursor.set_motion"
|
|
1639
|
+
],
|
|
1640
|
+
"farming.dev/risk": {
|
|
1641
|
+
"class": "r1",
|
|
1642
|
+
"enforcement": "metadata_only",
|
|
1643
|
+
"operation_sensitive": false,
|
|
1644
|
+
"version": "1"
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
},
|
|
1648
|
+
{
|
|
1649
|
+
"name": "computer_get_agent_cursor_state",
|
|
1650
|
+
"upstreamName": "get_agent_cursor_state",
|
|
1651
|
+
"description": "Return the current state of all agent cursor instances.",
|
|
1652
|
+
"inputSchema": {
|
|
1653
|
+
"additionalProperties": false,
|
|
1654
|
+
"properties": {
|
|
1655
|
+
"cursor_id": {
|
|
1656
|
+
"type": "string"
|
|
1657
|
+
},
|
|
1658
|
+
"session": {
|
|
1659
|
+
"type": "string"
|
|
1660
|
+
}
|
|
1661
|
+
},
|
|
1662
|
+
"type": "object"
|
|
1663
|
+
},
|
|
1664
|
+
"annotations": {
|
|
1665
|
+
"destructiveHint": false,
|
|
1666
|
+
"idempotentHint": true,
|
|
1667
|
+
"openWorldHint": false,
|
|
1668
|
+
"readOnlyHint": true
|
|
1669
|
+
},
|
|
1670
|
+
"_meta": {
|
|
1671
|
+
"farming.dev/upstream": "cua-driver",
|
|
1672
|
+
"farming.dev/capabilities": [
|
|
1673
|
+
"agent_cursor.state"
|
|
1674
|
+
],
|
|
1675
|
+
"farming.dev/risk": {
|
|
1676
|
+
"class": "r0",
|
|
1677
|
+
"enforcement": "metadata_only",
|
|
1678
|
+
"operation_sensitive": false,
|
|
1679
|
+
"version": "1"
|
|
1680
|
+
}
|
|
1681
|
+
}
|
|
1682
|
+
},
|
|
1683
|
+
{
|
|
1684
|
+
"name": "computer_set_agent_cursor_style",
|
|
1685
|
+
"upstreamName": "set_agent_cursor_style",
|
|
1686
|
+
"description": "Update the visual style of the agent cursor overlay.\n\n- gradient_colors: array of CSS hex strings (e.g. [\"#FF0000\",\"#0000FF\"]) used as the arrow fill gradient from tip to tail. Empty array reverts to the default palette colours.\n- bloom_color: hex string for the radial halo/bloom behind the cursor (e.g. \"#00FFFF\"). Empty string reverts to the default.\n- image_path: path to a PNG, JPEG, SVG, or ICO file to use as the cursor icon instead of the default silhouette. Empty string reverts to the default cursor.\nAll parameters are optional; omit any you do not want to change.",
|
|
1687
|
+
"inputSchema": {
|
|
1688
|
+
"additionalProperties": false,
|
|
1689
|
+
"properties": {
|
|
1690
|
+
"bloom_color": {
|
|
1691
|
+
"description": "Hex bloom/halo colour (e.g. '#00FFFF'). '' = revert to default.",
|
|
1692
|
+
"type": "string"
|
|
1693
|
+
},
|
|
1694
|
+
"cursor_id": {
|
|
1695
|
+
"description": "Cursor instance. Default: 'default'.",
|
|
1696
|
+
"type": "string"
|
|
1697
|
+
},
|
|
1698
|
+
"gradient_colors": {
|
|
1699
|
+
"description": "CSS hex gradient stops tip→tail. [] = revert to default.",
|
|
1700
|
+
"items": {
|
|
1701
|
+
"type": "string"
|
|
1702
|
+
},
|
|
1703
|
+
"type": "array"
|
|
1704
|
+
},
|
|
1705
|
+
"image_path": {
|
|
1706
|
+
"description": "Path to PNG/JPEG/SVG/ICO cursor image. '' = revert to the default cursor.",
|
|
1707
|
+
"type": "string"
|
|
1708
|
+
},
|
|
1709
|
+
"session": {
|
|
1710
|
+
"description": "Optional multi-cursor session id; takes precedence over cursor_id.",
|
|
1711
|
+
"type": "string"
|
|
1712
|
+
}
|
|
1713
|
+
},
|
|
1714
|
+
"type": "object"
|
|
1715
|
+
},
|
|
1716
|
+
"annotations": {
|
|
1717
|
+
"destructiveHint": false,
|
|
1718
|
+
"idempotentHint": true,
|
|
1719
|
+
"openWorldHint": false,
|
|
1720
|
+
"readOnlyHint": false
|
|
1721
|
+
},
|
|
1722
|
+
"_meta": {
|
|
1723
|
+
"farming.dev/upstream": "cua-driver",
|
|
1724
|
+
"farming.dev/capabilities": [
|
|
1725
|
+
"agent_cursor.set_style"
|
|
1726
|
+
],
|
|
1727
|
+
"farming.dev/risk": {
|
|
1728
|
+
"class": "r1",
|
|
1729
|
+
"enforcement": "metadata_only",
|
|
1730
|
+
"operation_sensitive": false,
|
|
1731
|
+
"version": "1"
|
|
1732
|
+
}
|
|
1733
|
+
}
|
|
1734
|
+
},
|
|
1735
|
+
{
|
|
1736
|
+
"name": "computer_check_permissions",
|
|
1737
|
+
"upstreamName": "check_permissions",
|
|
1738
|
+
"description": "Check required permissions for cua-driver-rs on Linux.",
|
|
1739
|
+
"inputSchema": {
|
|
1740
|
+
"additionalProperties": false,
|
|
1741
|
+
"properties": {},
|
|
1742
|
+
"type": "object"
|
|
1743
|
+
},
|
|
1744
|
+
"annotations": {
|
|
1745
|
+
"destructiveHint": false,
|
|
1746
|
+
"idempotentHint": true,
|
|
1747
|
+
"openWorldHint": false,
|
|
1748
|
+
"readOnlyHint": true
|
|
1749
|
+
},
|
|
1750
|
+
"_meta": {
|
|
1751
|
+
"farming.dev/upstream": "cua-driver",
|
|
1752
|
+
"farming.dev/capabilities": [
|
|
1753
|
+
"system.permissions.tcc",
|
|
1754
|
+
"system.permissions.tcc.accessibility",
|
|
1755
|
+
"system.permissions.tcc.screen_recording"
|
|
1756
|
+
],
|
|
1757
|
+
"farming.dev/risk": {
|
|
1758
|
+
"class": "r0",
|
|
1759
|
+
"enforcement": "metadata_only",
|
|
1760
|
+
"operation_sensitive": false,
|
|
1761
|
+
"version": "1"
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
"name": "computer_health_report",
|
|
1767
|
+
"upstreamName": "health_report",
|
|
1768
|
+
"description": "Single-call end-to-end driver diagnostics. Designed to let downstream consumers ship one stable call instead of stitching together check_permissions, doctor, version, bundle attribution, and platform capability status. On macOS, prompt-capable direct capture is deliberately skipped; use `cua-driver permissions grant` to verify it explicitly. cua-driver owns the health model; consumers stay thin.\n\nInput — all optional:\n {\n \"include\": [\"<check_name>\", ...], // run only these\n \"skip\": [\"<check_name>\", ...] // skip these\n }\nIf both are given, `include` wins.\n\nCanonical check names:\n macOS : binary_version, platform_supported, session_active,\n bundle_identity, tcc_accessibility, tcc_screen_recording,\n ax_capability, screen_capture_capability\n Windows: binary_version, platform_supported, session_active,\n ax_capability (via UIA), screen_capture_capability (via DXGI)\n Linux : binary_version, platform_supported, session_active,\n ax_capability (via AT-SPI), screen_capture_capability (via X11)\n\nOutput — stable contract, schema_version=\"1\":\n {\n \"schema_version\": \"1\",\n \"platform\": \"darwin\" | \"win32\" | \"linux\",\n \"driver_version\": \"<semver>\",\n \"overall\": \"ok\" | \"degraded\" | \"failed\",\n \"checks\": [\n {\n \"name\": \"<one of the canonical names above>\",\n \"status\": \"pass\" | \"fail\" | \"skip\",\n \"message\": \"<one-line summary, always present>\",\n \"hint\": \"<remediation step, present when status=fail>\",\n \"data\": { /* check-specific structured fields */ }\n },\n ...\n ]\n }\n\n`overall` rules:\n - `ok` — every non-skipped check passes\n - `degraded` — at least one non-core check fails (binary is still usable)\n - `failed` — any core check fails (binary_version, platform_supported, session_active)\n\nStability: schema_version=\"1\" is the contract. Future breaking changes will be `\"2\"`. Adding new check names under the same schema_version is non-breaking; consumers must tolerate unknown check names.",
|
|
1769
|
+
"inputSchema": {
|
|
1770
|
+
"additionalProperties": false,
|
|
1771
|
+
"properties": {
|
|
1772
|
+
"include": {
|
|
1773
|
+
"description": "Only run these checks (canonical names). Wins over `skip`.",
|
|
1774
|
+
"items": {
|
|
1775
|
+
"type": "string"
|
|
1776
|
+
},
|
|
1777
|
+
"type": "array"
|
|
1778
|
+
},
|
|
1779
|
+
"skip": {
|
|
1780
|
+
"description": "Skip these checks (canonical names). Ignored when `include` is set.",
|
|
1781
|
+
"items": {
|
|
1782
|
+
"type": "string"
|
|
1783
|
+
},
|
|
1784
|
+
"type": "array"
|
|
1785
|
+
}
|
|
1786
|
+
},
|
|
1787
|
+
"type": "object"
|
|
1788
|
+
},
|
|
1789
|
+
"annotations": {
|
|
1790
|
+
"destructiveHint": false,
|
|
1791
|
+
"idempotentHint": true,
|
|
1792
|
+
"openWorldHint": false,
|
|
1793
|
+
"readOnlyHint": true
|
|
1794
|
+
},
|
|
1795
|
+
"_meta": {
|
|
1796
|
+
"farming.dev/upstream": "cua-driver",
|
|
1797
|
+
"farming.dev/capabilities": [],
|
|
1798
|
+
"farming.dev/risk": {
|
|
1799
|
+
"class": "r0",
|
|
1800
|
+
"enforcement": "metadata_only",
|
|
1801
|
+
"operation_sensitive": false,
|
|
1802
|
+
"version": "1"
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
},
|
|
1806
|
+
{
|
|
1807
|
+
"name": "computer_get_config",
|
|
1808
|
+
"upstreamName": "get_config",
|
|
1809
|
+
"description": "Return current cua-driver-rs configuration.",
|
|
1810
|
+
"inputSchema": {
|
|
1811
|
+
"additionalProperties": false,
|
|
1812
|
+
"properties": {},
|
|
1813
|
+
"type": "object"
|
|
1814
|
+
},
|
|
1815
|
+
"annotations": {
|
|
1816
|
+
"destructiveHint": false,
|
|
1817
|
+
"idempotentHint": true,
|
|
1818
|
+
"openWorldHint": false,
|
|
1819
|
+
"readOnlyHint": true
|
|
1820
|
+
},
|
|
1821
|
+
"_meta": {
|
|
1822
|
+
"farming.dev/upstream": "cua-driver",
|
|
1823
|
+
"farming.dev/capabilities": [
|
|
1824
|
+
"system.config.read"
|
|
1825
|
+
],
|
|
1826
|
+
"farming.dev/risk": {
|
|
1827
|
+
"class": "r0",
|
|
1828
|
+
"enforcement": "metadata_only",
|
|
1829
|
+
"operation_sensitive": false,
|
|
1830
|
+
"version": "1"
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1833
|
+
},
|
|
1834
|
+
{
|
|
1835
|
+
"name": "computer_set_config",
|
|
1836
|
+
"upstreamName": "set_config",
|
|
1837
|
+
"description": "Update cua-driver-rs configuration. capture_mode / max_image_dimension take effect immediately.\n\nTwo input shapes (both accepted, matching Windows/Swift):\n- **{key, value}** (preferred): `{\"key\": \"max_image_dimension\", \"value\": 800}` — single leaf write.\n- **Legacy per-field**: `{\"capture_mode\": \"som\", \"max_image_dimension\": 0}`.\n\nThe experimental_pip keys persist to ~/.cua-driver/config.json and apply on next daemon restart (the PiP backend is initialised once at startup; Linux ships only the trait stub today — see issue #1729).",
|
|
1838
|
+
"inputSchema": {
|
|
1839
|
+
"additionalProperties": false,
|
|
1840
|
+
"properties": {
|
|
1841
|
+
"capture_mode": {
|
|
1842
|
+
"description": "Legacy per-field shape. Default capture mode for get_window_state. (\"som\"/\"screenshot\" still decode as deprecated aliases.)",
|
|
1843
|
+
"enum": [
|
|
1844
|
+
"ax",
|
|
1845
|
+
"vision"
|
|
1846
|
+
],
|
|
1847
|
+
"type": "string"
|
|
1848
|
+
},
|
|
1849
|
+
"experimental_pip": {
|
|
1850
|
+
"description": "Enable the experimental PiP preview window (applies next restart; Linux backend stubbed).",
|
|
1851
|
+
"type": "boolean"
|
|
1852
|
+
},
|
|
1853
|
+
"experimental_pip_geometry": {
|
|
1854
|
+
"description": "PiP window size + optional position in `WxH` or `WxH+X+Y` form.",
|
|
1855
|
+
"type": "string"
|
|
1856
|
+
},
|
|
1857
|
+
"key": {
|
|
1858
|
+
"description": "Name of a single config field to write ({key, value} shape). Pair with `value`.",
|
|
1859
|
+
"type": "string"
|
|
1860
|
+
},
|
|
1861
|
+
"max_image_dimension": {
|
|
1862
|
+
"description": "Legacy per-field shape. Max dimension for screenshot resizing (0 = no limit).",
|
|
1863
|
+
"type": "integer"
|
|
1864
|
+
},
|
|
1865
|
+
"value": {
|
|
1866
|
+
"description": "New value for `key`. JSON type depends on the key."
|
|
1867
|
+
}
|
|
1868
|
+
},
|
|
1869
|
+
"type": "object"
|
|
1870
|
+
},
|
|
1871
|
+
"annotations": {
|
|
1872
|
+
"destructiveHint": false,
|
|
1873
|
+
"idempotentHint": true,
|
|
1874
|
+
"openWorldHint": false,
|
|
1875
|
+
"readOnlyHint": false
|
|
1876
|
+
},
|
|
1877
|
+
"_meta": {
|
|
1878
|
+
"farming.dev/upstream": "cua-driver",
|
|
1879
|
+
"farming.dev/capabilities": [
|
|
1880
|
+
"system.config.write"
|
|
1881
|
+
],
|
|
1882
|
+
"farming.dev/risk": {
|
|
1883
|
+
"class": "r2",
|
|
1884
|
+
"enforcement": "metadata_only",
|
|
1885
|
+
"operation_sensitive": false,
|
|
1886
|
+
"version": "1"
|
|
1887
|
+
}
|
|
1888
|
+
}
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"name": "computer_get_accessibility_tree",
|
|
1892
|
+
"upstreamName": "get_accessibility_tree",
|
|
1893
|
+
"description": "Return a lightweight snapshot of the desktop: running processes and on-screen visible X11 windows with their bounds and owner pid.\n\nFor the full AT-SPI subtree of a single window (with interactive element indices you can click by), use get_window_state instead — this is a fast discovery read.",
|
|
1894
|
+
"inputSchema": {
|
|
1895
|
+
"additionalProperties": false,
|
|
1896
|
+
"properties": {},
|
|
1897
|
+
"type": "object"
|
|
1898
|
+
},
|
|
1899
|
+
"annotations": {
|
|
1900
|
+
"destructiveHint": false,
|
|
1901
|
+
"idempotentHint": true,
|
|
1902
|
+
"openWorldHint": false,
|
|
1903
|
+
"readOnlyHint": true
|
|
1904
|
+
},
|
|
1905
|
+
"_meta": {
|
|
1906
|
+
"farming.dev/upstream": "cua-driver",
|
|
1907
|
+
"farming.dev/capabilities": [
|
|
1908
|
+
"accessibility.tree",
|
|
1909
|
+
"accessibility.tree.structured"
|
|
1910
|
+
],
|
|
1911
|
+
"farming.dev/risk": {
|
|
1912
|
+
"class": "r2",
|
|
1913
|
+
"enforcement": "metadata_only",
|
|
1914
|
+
"operation_sensitive": false,
|
|
1915
|
+
"version": "1"
|
|
1916
|
+
}
|
|
1917
|
+
}
|
|
1918
|
+
},
|
|
1919
|
+
{
|
|
1920
|
+
"name": "computer_zoom",
|
|
1921
|
+
"upstreamName": "zoom",
|
|
1922
|
+
"description": "Capture a cropped JPEG of a window region (x1,y1)–(x2,y2) in screenshot pixels, with 20% padding. Output is at most 500 px wide.\n\nAfter a zoom, pass from_zoom=true to click/type_text to auto-translate coordinates back to full-window space.",
|
|
1923
|
+
"inputSchema": {
|
|
1924
|
+
"additionalProperties": false,
|
|
1925
|
+
"properties": {
|
|
1926
|
+
"pid": {
|
|
1927
|
+
"description": "Target pid — required for from_zoom click/type translation.",
|
|
1928
|
+
"type": "integer"
|
|
1929
|
+
},
|
|
1930
|
+
"window_id": {
|
|
1931
|
+
"type": "integer"
|
|
1932
|
+
},
|
|
1933
|
+
"x1": {
|
|
1934
|
+
"type": "number"
|
|
1935
|
+
},
|
|
1936
|
+
"x2": {
|
|
1937
|
+
"type": "number"
|
|
1938
|
+
},
|
|
1939
|
+
"y1": {
|
|
1940
|
+
"type": "number"
|
|
1941
|
+
},
|
|
1942
|
+
"y2": {
|
|
1943
|
+
"type": "number"
|
|
1944
|
+
}
|
|
1945
|
+
},
|
|
1946
|
+
"required": [
|
|
1947
|
+
"window_id",
|
|
1948
|
+
"x1",
|
|
1949
|
+
"y1",
|
|
1950
|
+
"x2",
|
|
1951
|
+
"y2"
|
|
1952
|
+
],
|
|
1953
|
+
"type": "object"
|
|
1954
|
+
},
|
|
1955
|
+
"annotations": {
|
|
1956
|
+
"destructiveHint": false,
|
|
1957
|
+
"idempotentHint": true,
|
|
1958
|
+
"openWorldHint": false,
|
|
1959
|
+
"readOnlyHint": true
|
|
1960
|
+
},
|
|
1961
|
+
"_meta": {
|
|
1962
|
+
"farming.dev/upstream": "cua-driver",
|
|
1963
|
+
"farming.dev/capabilities": [
|
|
1964
|
+
"screen.capture",
|
|
1965
|
+
"screen.capture.window",
|
|
1966
|
+
"screen.capture.region"
|
|
1967
|
+
],
|
|
1968
|
+
"farming.dev/risk": {
|
|
1969
|
+
"class": "r2",
|
|
1970
|
+
"enforcement": "metadata_only",
|
|
1971
|
+
"operation_sensitive": false,
|
|
1972
|
+
"version": "1"
|
|
1973
|
+
}
|
|
1974
|
+
}
|
|
1975
|
+
},
|
|
1976
|
+
{
|
|
1977
|
+
"name": "computer_page",
|
|
1978
|
+
"upstreamName": "page",
|
|
1979
|
+
"description": "Legacy browser compatibility tool. Prefer get_browser_state and the typed browser_* tools for exact targeting, endpoint ownership, and consent. Read-only get_text and query_dom remain available by default. Mutating actions require the daemon operator to set CUA_DRIVER_ENABLE_LEGACY_PAGE_MUTATIONS=1 before daemon startup (restart the daemon after changing it); this escape hatch does not provide the typed browser surface's exact binding or existing-profile grant guarantees. Supports Chrome, Brave, Edge, Safari (via AppleScript on macOS), Electron apps (via CDP), Chromium/Firefox on Windows (via UIA for read; CDP for execute_javascript when --remote-debugging-port is set), and WKWebView/Tauri/AT-SPI fallbacks.\n\nActions:\n- execute_javascript: Run JS and return the result.\n- get_text: Extract visible text from the page.\n- query_dom: Find elements matching a CSS selector.\n- click_element: Click a CSS-selected element AND animate the agent cursor to its on-screen center first (so the user sees what the agent is doing). Prefer over `execute_javascript('el.click()')` whenever you want visible cursor feedback.\n- insert_text: Insert `text` at whatever currently holds DOM focus in one native operation (CDP Input.insertText) — no synthesized key events, but more durable than a one-shot execute_javascript write since rich-text editors already have to treat it like an IME commit. Try this before type_keystrokes on a contenteditable that discarded an execute_javascript write. Click/focus the target field first.\n- type_keystrokes: Type `text` via real per-character keystroke events into whatever currently holds DOM focus. Slower than insert_text but the most durable rung — use it when insert_text also gets discarded, or the editor's own keydown/keyup handlers need to see real keys. Click/focus the target field first.\n- enable_javascript_apple_events: macOS-only — patch the browser's Preferences to allow JS from Apple Events (Chrome/Brave/Edge, requires user confirmation and a browser restart).",
|
|
1980
|
+
"inputSchema": {
|
|
1981
|
+
"additionalProperties": false,
|
|
1982
|
+
"properties": {
|
|
1983
|
+
"action": {
|
|
1984
|
+
"description": "Action to perform.",
|
|
1985
|
+
"enum": [
|
|
1986
|
+
"execute_javascript",
|
|
1987
|
+
"get_text",
|
|
1988
|
+
"query_dom",
|
|
1989
|
+
"click_element",
|
|
1990
|
+
"insert_text",
|
|
1991
|
+
"type_keystrokes",
|
|
1992
|
+
"enable_javascript_apple_events"
|
|
1993
|
+
],
|
|
1994
|
+
"type": "string"
|
|
1995
|
+
},
|
|
1996
|
+
"attributes": {
|
|
1997
|
+
"description": "Element attributes to include in query_dom results.",
|
|
1998
|
+
"items": {
|
|
1999
|
+
"type": "string"
|
|
2000
|
+
},
|
|
2001
|
+
"type": "array"
|
|
2002
|
+
},
|
|
2003
|
+
"bundle_id": {
|
|
2004
|
+
"description": "Bundle ID of the browser. Required for enable_javascript_apple_events (macOS only).",
|
|
2005
|
+
"type": "string"
|
|
2006
|
+
},
|
|
2007
|
+
"cdp_port": {
|
|
2008
|
+
"description": "Optional, for execute_javascript/insert_text/type_keystrokes: use this exact CDP port instead of auto-discovering one from pid. Needed when the port was opened via the browser's own remote-debugging toggle rather than a launch-time flag, since that path may not answer the auto-discovery probe.",
|
|
2009
|
+
"maximum": 65535,
|
|
2010
|
+
"minimum": 1,
|
|
2011
|
+
"type": "integer"
|
|
2012
|
+
},
|
|
2013
|
+
"css_selector": {
|
|
2014
|
+
"description": "CSS selector for query_dom (e.g. 'a', 'button', 'input', 'h1'-'h6', 'p', 'img', 'select', '*').",
|
|
2015
|
+
"type": "string"
|
|
2016
|
+
},
|
|
2017
|
+
"javascript": {
|
|
2018
|
+
"description": "JavaScript to execute. Required for execute_javascript.",
|
|
2019
|
+
"type": "string"
|
|
2020
|
+
},
|
|
2021
|
+
"pid": {
|
|
2022
|
+
"description": "Target process ID.",
|
|
2023
|
+
"type": "integer"
|
|
2024
|
+
},
|
|
2025
|
+
"selector": {
|
|
2026
|
+
"description": "CSS selector for click_element (e.g. 'button.submit', '#login a').",
|
|
2027
|
+
"type": "string"
|
|
2028
|
+
},
|
|
2029
|
+
"target_url_contains": {
|
|
2030
|
+
"description": "Optional, for execute_javascript/insert_text/type_keystrokes: require exactly one browser tab whose URL contains this substring. Use this on a multi-tab browser — there's no built-in link between window_id and which tab a CDP call reaches.",
|
|
2031
|
+
"type": "string"
|
|
2032
|
+
},
|
|
2033
|
+
"text": {
|
|
2034
|
+
"description": "Text to insert or type. Required for insert_text and type_keystrokes. The target field must already have DOM focus (click/focus it first).",
|
|
2035
|
+
"type": "string"
|
|
2036
|
+
},
|
|
2037
|
+
"user_has_confirmed_enabling": {
|
|
2038
|
+
"description": "Must be true to proceed with enable_javascript_apple_events. This will quit and relaunch the browser.",
|
|
2039
|
+
"type": "boolean"
|
|
2040
|
+
},
|
|
2041
|
+
"window_id": {
|
|
2042
|
+
"description": "Target window ID from list_windows.",
|
|
2043
|
+
"type": "integer"
|
|
2044
|
+
}
|
|
2045
|
+
},
|
|
2046
|
+
"required": [
|
|
2047
|
+
"action"
|
|
2048
|
+
],
|
|
2049
|
+
"type": "object"
|
|
2050
|
+
},
|
|
2051
|
+
"annotations": {
|
|
2052
|
+
"destructiveHint": false,
|
|
2053
|
+
"idempotentHint": false,
|
|
2054
|
+
"openWorldHint": true,
|
|
2055
|
+
"readOnlyHint": false
|
|
2056
|
+
},
|
|
2057
|
+
"_meta": {
|
|
2058
|
+
"farming.dev/upstream": "cua-driver",
|
|
2059
|
+
"farming.dev/capabilities": [
|
|
2060
|
+
"page.action"
|
|
2061
|
+
],
|
|
2062
|
+
"farming.dev/risk": {
|
|
2063
|
+
"class": "r3",
|
|
2064
|
+
"enforcement": "metadata_only",
|
|
2065
|
+
"operation_sensitive": true,
|
|
2066
|
+
"version": "1"
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
},
|
|
2070
|
+
{
|
|
2071
|
+
"name": "computer_get_browser_state",
|
|
2072
|
+
"upstreamName": "get_browser_state",
|
|
2073
|
+
"description": "Read-only browser inspection. Mode 1 (bind): pass pid + window_id of a native browser window to classify it, correlate it to a CDP target (exact-or-refuse), and mint a session-scoped target id plus tab ids. Mode 2 (snapshot): pass target_id + tab_id. The dom_refs_v1 compatibility format returns composed DOM refs. semantic_v2 joins accessibility, DOM, layout, and viewport state; ranks visible content before retained/offscreen state; and returns a semantic outline, typed action refs, content refs, scoped reads, and opaque continuation. Never performs setup — a missing endpoint is a structured browser_requires_setup refusal pointing at browser_prepare.",
|
|
2074
|
+
"inputSchema": {
|
|
2075
|
+
"additionalProperties": true,
|
|
2076
|
+
"properties": {
|
|
2077
|
+
"continuation": {
|
|
2078
|
+
"description": "Opaque continuation minted by an earlier semantic_v2 response.",
|
|
2079
|
+
"type": "string"
|
|
2080
|
+
},
|
|
2081
|
+
"include_screenshot": {
|
|
2082
|
+
"default": false,
|
|
2083
|
+
"description": "Capture the exact tab viewport as PNG through CDP without selecting the tab or foregrounding its native window. The request refuses if capture cannot be completed.",
|
|
2084
|
+
"type": "boolean"
|
|
2085
|
+
},
|
|
2086
|
+
"pid": {
|
|
2087
|
+
"description": "Native browser process id (bind mode).",
|
|
2088
|
+
"type": "integer"
|
|
2089
|
+
},
|
|
2090
|
+
"query": {
|
|
2091
|
+
"description": "Read-only semantic match over role, accessible name, and visible text.",
|
|
2092
|
+
"type": "string"
|
|
2093
|
+
},
|
|
2094
|
+
"scope_ref": {
|
|
2095
|
+
"description": "Current semantic/content ref whose subtree should be observed.",
|
|
2096
|
+
"type": "string"
|
|
2097
|
+
},
|
|
2098
|
+
"session": {
|
|
2099
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2100
|
+
"type": "string"
|
|
2101
|
+
},
|
|
2102
|
+
"snapshot_format": {
|
|
2103
|
+
"description": "Versioned snapshot contract. dom_refs_v1 remains the compatibility default.",
|
|
2104
|
+
"enum": [
|
|
2105
|
+
"dom_refs_v1",
|
|
2106
|
+
"semantic_v2"
|
|
2107
|
+
],
|
|
2108
|
+
"type": "string"
|
|
2109
|
+
},
|
|
2110
|
+
"tab_id": {
|
|
2111
|
+
"description": "Opaque tab id from get_browser_state (session-scoped).",
|
|
2112
|
+
"type": "string"
|
|
2113
|
+
},
|
|
2114
|
+
"target_id": {
|
|
2115
|
+
"description": "Opaque browser target id minted by get_browser_state (session-scoped; never a CDP id).",
|
|
2116
|
+
"type": "string"
|
|
2117
|
+
},
|
|
2118
|
+
"window_id": {
|
|
2119
|
+
"description": "Native window id owned by pid (bind mode).",
|
|
2120
|
+
"type": "integer"
|
|
2121
|
+
}
|
|
2122
|
+
},
|
|
2123
|
+
"type": "object"
|
|
2124
|
+
},
|
|
2125
|
+
"annotations": {
|
|
2126
|
+
"destructiveHint": false,
|
|
2127
|
+
"idempotentHint": true,
|
|
2128
|
+
"openWorldHint": false,
|
|
2129
|
+
"readOnlyHint": true
|
|
2130
|
+
},
|
|
2131
|
+
"_meta": {
|
|
2132
|
+
"farming.dev/upstream": "cua-driver",
|
|
2133
|
+
"farming.dev/capabilities": [
|
|
2134
|
+
"browser.state"
|
|
2135
|
+
],
|
|
2136
|
+
"farming.dev/risk": {
|
|
2137
|
+
"class": "r2",
|
|
2138
|
+
"enforcement": "metadata_only",
|
|
2139
|
+
"operation_sensitive": false,
|
|
2140
|
+
"version": "1"
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
2143
|
+
},
|
|
2144
|
+
{
|
|
2145
|
+
"name": "computer_browser_prepare",
|
|
2146
|
+
"upstreamName": "browser_prepare",
|
|
2147
|
+
"description": "Explicitly prepare an owned DevTools endpoint for a browser pid. Existing endpoints are detected without side effects. Acting setup for an isolated profile requires host approval or a short-lived setup token plus allow_launch=true. It launches a separate browser and never copies, modifies, or terminates the requested user profile. Existing-profile attachment is explicit and follows the daemon's immutable permission mode: standard requires a certified protected-consent provider, bounded requires a launch-approved exact resource manifest plus protected indicator, and unrestricted requires explicit trusted startup risk acceptance. Ordinary MCP transport approval never proves profile consent. On proven platforms, an authorized request also permits one bounded exact-window setup: open the recognized browser product's fixed remote-debugging page, toggle its uniquely matched per-instance checkbox, prove the PID-owned loopback endpoint, and close the temporary tab. Every visible effect is reported; ambiguity is refused.",
|
|
2148
|
+
"inputSchema": {
|
|
2149
|
+
"additionalProperties": true,
|
|
2150
|
+
"properties": {
|
|
2151
|
+
"allow_launch": {
|
|
2152
|
+
"description": "Allow a separate driver-owned isolated Chromium process to be launched (default false).",
|
|
2153
|
+
"type": "boolean"
|
|
2154
|
+
},
|
|
2155
|
+
"approval_token": {
|
|
2156
|
+
"description": "Legacy single-use setup token. Existing-profile use is disabled unless a trusted launcher explicitly enables the same-user-writable compatibility path.",
|
|
2157
|
+
"type": "string"
|
|
2158
|
+
},
|
|
2159
|
+
"pid": {
|
|
2160
|
+
"description": "Browser process id to prepare.",
|
|
2161
|
+
"type": "integer"
|
|
2162
|
+
},
|
|
2163
|
+
"profile": {
|
|
2164
|
+
"additionalProperties": false,
|
|
2165
|
+
"properties": {
|
|
2166
|
+
"mode": {
|
|
2167
|
+
"enum": [
|
|
2168
|
+
"isolated_new",
|
|
2169
|
+
"isolated_named"
|
|
2170
|
+
],
|
|
2171
|
+
"type": "string"
|
|
2172
|
+
},
|
|
2173
|
+
"name": {
|
|
2174
|
+
"description": "Required only for isolated_named; 1-64 path-safe ASCII characters.",
|
|
2175
|
+
"type": "string"
|
|
2176
|
+
}
|
|
2177
|
+
},
|
|
2178
|
+
"required": [
|
|
2179
|
+
"mode"
|
|
2180
|
+
],
|
|
2181
|
+
"type": "object"
|
|
2182
|
+
},
|
|
2183
|
+
"session": {
|
|
2184
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2185
|
+
"type": "string"
|
|
2186
|
+
},
|
|
2187
|
+
"strategy": {
|
|
2188
|
+
"additionalProperties": false,
|
|
2189
|
+
"properties": {
|
|
2190
|
+
"kind": {
|
|
2191
|
+
"enum": [
|
|
2192
|
+
"existing_profile"
|
|
2193
|
+
],
|
|
2194
|
+
"type": "string"
|
|
2195
|
+
}
|
|
2196
|
+
},
|
|
2197
|
+
"required": [
|
|
2198
|
+
"kind"
|
|
2199
|
+
],
|
|
2200
|
+
"type": "object"
|
|
2201
|
+
},
|
|
2202
|
+
"window_id": {
|
|
2203
|
+
"description": "Exact native window approval anchor; required for strategy.kind=existing_profile.",
|
|
2204
|
+
"type": "integer"
|
|
2205
|
+
}
|
|
2206
|
+
},
|
|
2207
|
+
"required": [
|
|
2208
|
+
"pid"
|
|
2209
|
+
],
|
|
2210
|
+
"type": "object"
|
|
2211
|
+
},
|
|
2212
|
+
"annotations": {
|
|
2213
|
+
"destructiveHint": true,
|
|
2214
|
+
"idempotentHint": false,
|
|
2215
|
+
"openWorldHint": true,
|
|
2216
|
+
"readOnlyHint": false
|
|
2217
|
+
},
|
|
2218
|
+
"_meta": {
|
|
2219
|
+
"farming.dev/upstream": "cua-driver",
|
|
2220
|
+
"farming.dev/capabilities": [
|
|
2221
|
+
"browser.prepare"
|
|
2222
|
+
],
|
|
2223
|
+
"farming.dev/risk": {
|
|
2224
|
+
"class": "r2",
|
|
2225
|
+
"enforcement": "metadata_only",
|
|
2226
|
+
"operation_sensitive": true,
|
|
2227
|
+
"version": "1"
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2230
|
+
},
|
|
2231
|
+
{
|
|
2232
|
+
"name": "computer_browser_navigate",
|
|
2233
|
+
"upstreamName": "browser_navigate",
|
|
2234
|
+
"description": "Navigate one tab of an exactly-bound browser target to a new URL (http/https/about only). Refused for heuristic bindings. Navigation invalidates all p<snapshot>:<index> refs for the tab.",
|
|
2235
|
+
"inputSchema": {
|
|
2236
|
+
"additionalProperties": true,
|
|
2237
|
+
"properties": {
|
|
2238
|
+
"session": {
|
|
2239
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2240
|
+
"type": "string"
|
|
2241
|
+
},
|
|
2242
|
+
"tab_id": {
|
|
2243
|
+
"description": "Opaque tab id from get_browser_state (session-scoped).",
|
|
2244
|
+
"type": "string"
|
|
2245
|
+
},
|
|
2246
|
+
"target_id": {
|
|
2247
|
+
"description": "Opaque browser target id minted by get_browser_state (session-scoped; never a CDP id).",
|
|
2248
|
+
"type": "string"
|
|
2249
|
+
},
|
|
2250
|
+
"url": {
|
|
2251
|
+
"description": "Destination URL (http:, https:, or about:).",
|
|
2252
|
+
"type": "string"
|
|
2253
|
+
}
|
|
2254
|
+
},
|
|
2255
|
+
"required": [
|
|
2256
|
+
"target_id",
|
|
2257
|
+
"tab_id",
|
|
2258
|
+
"url"
|
|
2259
|
+
],
|
|
2260
|
+
"type": "object"
|
|
2261
|
+
},
|
|
2262
|
+
"annotations": {
|
|
2263
|
+
"destructiveHint": false,
|
|
2264
|
+
"idempotentHint": false,
|
|
2265
|
+
"openWorldHint": true,
|
|
2266
|
+
"readOnlyHint": false
|
|
2267
|
+
},
|
|
2268
|
+
"_meta": {
|
|
2269
|
+
"farming.dev/upstream": "cua-driver",
|
|
2270
|
+
"farming.dev/capabilities": [
|
|
2271
|
+
"browser.navigate"
|
|
2272
|
+
],
|
|
2273
|
+
"farming.dev/risk": {
|
|
2274
|
+
"class": "r2",
|
|
2275
|
+
"enforcement": "metadata_only",
|
|
2276
|
+
"operation_sensitive": false,
|
|
2277
|
+
"version": "1"
|
|
2278
|
+
}
|
|
2279
|
+
}
|
|
2280
|
+
},
|
|
2281
|
+
{
|
|
2282
|
+
"name": "computer_browser_click",
|
|
2283
|
+
"upstreamName": "browser_click",
|
|
2284
|
+
"description": "Click a page element (by ref) or viewport coordinates in an exactly-bound tab. Default route is trusted hardware-like input (Input.dispatchMouseEvent), and refuses where that route cannot preserve standalone-browser background posture. input_route=\"dom_event\" (synthetic el.click(), ref required) is used only when explicitly requested. Refused for heuristic bindings.",
|
|
2285
|
+
"inputSchema": {
|
|
2286
|
+
"additionalProperties": true,
|
|
2287
|
+
"properties": {
|
|
2288
|
+
"input_route": {
|
|
2289
|
+
"description": "\"trusted\" (default): Input.dispatchMouseEvent. It refuses rather than foregrounding a standalone browser. \"dom_event\": synthetic full-background DOM click, only when explicitly requested.",
|
|
2290
|
+
"enum": [
|
|
2291
|
+
"trusted",
|
|
2292
|
+
"dom_event"
|
|
2293
|
+
],
|
|
2294
|
+
"type": "string"
|
|
2295
|
+
},
|
|
2296
|
+
"ref": {
|
|
2297
|
+
"description": "Page element ref in the p<snapshot>:<index> namespace from get_browser_state. Refs are invalidated by navigation and by newer snapshots of the same tab.",
|
|
2298
|
+
"type": "string"
|
|
2299
|
+
},
|
|
2300
|
+
"session": {
|
|
2301
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2302
|
+
"type": "string"
|
|
2303
|
+
},
|
|
2304
|
+
"tab_id": {
|
|
2305
|
+
"description": "Opaque tab id from get_browser_state (session-scoped).",
|
|
2306
|
+
"type": "string"
|
|
2307
|
+
},
|
|
2308
|
+
"target_id": {
|
|
2309
|
+
"description": "Opaque browser target id minted by get_browser_state (session-scoped; never a CDP id).",
|
|
2310
|
+
"type": "string"
|
|
2311
|
+
},
|
|
2312
|
+
"x": {
|
|
2313
|
+
"description": "Viewport x (CSS px) — alternative to ref.",
|
|
2314
|
+
"type": "number"
|
|
2315
|
+
},
|
|
2316
|
+
"y": {
|
|
2317
|
+
"description": "Viewport y (CSS px) — alternative to ref.",
|
|
2318
|
+
"type": "number"
|
|
2319
|
+
}
|
|
2320
|
+
},
|
|
2321
|
+
"required": [
|
|
2322
|
+
"target_id",
|
|
2323
|
+
"tab_id"
|
|
2324
|
+
],
|
|
2325
|
+
"type": "object"
|
|
2326
|
+
},
|
|
2327
|
+
"annotations": {
|
|
2328
|
+
"destructiveHint": false,
|
|
2329
|
+
"idempotentHint": false,
|
|
2330
|
+
"openWorldHint": true,
|
|
2331
|
+
"readOnlyHint": false
|
|
2332
|
+
},
|
|
2333
|
+
"_meta": {
|
|
2334
|
+
"farming.dev/upstream": "cua-driver",
|
|
2335
|
+
"farming.dev/capabilities": [
|
|
2336
|
+
"browser.input.click"
|
|
2337
|
+
],
|
|
2338
|
+
"farming.dev/risk": {
|
|
2339
|
+
"class": "r2",
|
|
2340
|
+
"enforcement": "metadata_only",
|
|
2341
|
+
"operation_sensitive": false,
|
|
2342
|
+
"version": "1"
|
|
2343
|
+
}
|
|
2344
|
+
}
|
|
2345
|
+
},
|
|
2346
|
+
{
|
|
2347
|
+
"name": "computer_browser_type",
|
|
2348
|
+
"upstreamName": "browser_type",
|
|
2349
|
+
"description": "Type text into an exactly-bound tab via the Input domain. mode=\"insert_text\" (default) uses Input.insertText; mode=\"keystrokes\" dispatches per-character key events. Pass a ref to an editable element from the latest snapshot. A ref is required; heuristic bindings are refused.",
|
|
2350
|
+
"inputSchema": {
|
|
2351
|
+
"additionalProperties": true,
|
|
2352
|
+
"properties": {
|
|
2353
|
+
"mode": {
|
|
2354
|
+
"description": "insert_text (default): bulk Input.insertText. keystrokes: per-character Input.dispatchKeyEvent.",
|
|
2355
|
+
"enum": [
|
|
2356
|
+
"insert_text",
|
|
2357
|
+
"keystrokes"
|
|
2358
|
+
],
|
|
2359
|
+
"type": "string"
|
|
2360
|
+
},
|
|
2361
|
+
"ref": {
|
|
2362
|
+
"description": "Page element ref in the p<snapshot>:<index> namespace from get_browser_state. Refs are invalidated by navigation and by newer snapshots of the same tab.",
|
|
2363
|
+
"type": "string"
|
|
2364
|
+
},
|
|
2365
|
+
"session": {
|
|
2366
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2367
|
+
"type": "string"
|
|
2368
|
+
},
|
|
2369
|
+
"tab_id": {
|
|
2370
|
+
"description": "Opaque tab id from get_browser_state (session-scoped).",
|
|
2371
|
+
"type": "string"
|
|
2372
|
+
},
|
|
2373
|
+
"target_id": {
|
|
2374
|
+
"description": "Opaque browser target id minted by get_browser_state (session-scoped; never a CDP id).",
|
|
2375
|
+
"type": "string"
|
|
2376
|
+
},
|
|
2377
|
+
"text": {
|
|
2378
|
+
"description": "Text to type.",
|
|
2379
|
+
"type": "string"
|
|
2380
|
+
}
|
|
2381
|
+
},
|
|
2382
|
+
"required": [
|
|
2383
|
+
"target_id",
|
|
2384
|
+
"tab_id",
|
|
2385
|
+
"ref",
|
|
2386
|
+
"text"
|
|
2387
|
+
],
|
|
2388
|
+
"type": "object"
|
|
2389
|
+
},
|
|
2390
|
+
"annotations": {
|
|
2391
|
+
"destructiveHint": false,
|
|
2392
|
+
"idempotentHint": false,
|
|
2393
|
+
"openWorldHint": true,
|
|
2394
|
+
"readOnlyHint": false
|
|
2395
|
+
},
|
|
2396
|
+
"_meta": {
|
|
2397
|
+
"farming.dev/upstream": "cua-driver",
|
|
2398
|
+
"farming.dev/capabilities": [
|
|
2399
|
+
"browser.input.type"
|
|
2400
|
+
],
|
|
2401
|
+
"farming.dev/risk": {
|
|
2402
|
+
"class": "r2",
|
|
2403
|
+
"enforcement": "metadata_only",
|
|
2404
|
+
"operation_sensitive": false,
|
|
2405
|
+
"version": "1"
|
|
2406
|
+
}
|
|
2407
|
+
}
|
|
2408
|
+
},
|
|
2409
|
+
{
|
|
2410
|
+
"name": "computer_browser_dialog",
|
|
2411
|
+
"upstreamName": "browser_dialog",
|
|
2412
|
+
"description": "Inspect or resolve a page-owned JavaScript alert, confirm, prompt, or beforeunload dialog on one exactly-bound tab. This never handles browser permission UI, extension UI, native dialogs, or file pickers. Inspect returns an opaque dialog_id; accept/dismiss require that exact current id. Resolution defaults to background delivery; Linux callers must explicitly request foreground delivery because Chromium's native modal cannot be resolved there without changing foreground posture.",
|
|
2413
|
+
"inputSchema": {
|
|
2414
|
+
"additionalProperties": true,
|
|
2415
|
+
"properties": {
|
|
2416
|
+
"action": {
|
|
2417
|
+
"enum": [
|
|
2418
|
+
"inspect",
|
|
2419
|
+
"accept",
|
|
2420
|
+
"dismiss"
|
|
2421
|
+
],
|
|
2422
|
+
"type": "string"
|
|
2423
|
+
},
|
|
2424
|
+
"delivery_mode": {
|
|
2425
|
+
"default": "background",
|
|
2426
|
+
"description": "Requested foreground posture for accept/dismiss. Linux Chromium requires foreground; inspect is read-only.",
|
|
2427
|
+
"enum": [
|
|
2428
|
+
"background",
|
|
2429
|
+
"foreground"
|
|
2430
|
+
],
|
|
2431
|
+
"type": "string"
|
|
2432
|
+
},
|
|
2433
|
+
"dialog_id": {
|
|
2434
|
+
"description": "Opaque current dialog generation returned by action=inspect.",
|
|
2435
|
+
"type": "string"
|
|
2436
|
+
},
|
|
2437
|
+
"prompt_text": {
|
|
2438
|
+
"description": "Sensitive response text, valid only when accepting a prompt dialog.",
|
|
2439
|
+
"type": "string"
|
|
2440
|
+
},
|
|
2441
|
+
"session": {
|
|
2442
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2443
|
+
"type": "string"
|
|
2444
|
+
},
|
|
2445
|
+
"tab_id": {
|
|
2446
|
+
"description": "Opaque tab id from get_browser_state (session-scoped).",
|
|
2447
|
+
"type": "string"
|
|
2448
|
+
},
|
|
2449
|
+
"target_id": {
|
|
2450
|
+
"description": "Opaque browser target id minted by get_browser_state (session-scoped; never a CDP id).",
|
|
2451
|
+
"type": "string"
|
|
2452
|
+
}
|
|
2453
|
+
},
|
|
2454
|
+
"required": [
|
|
2455
|
+
"target_id",
|
|
2456
|
+
"tab_id",
|
|
2457
|
+
"action"
|
|
2458
|
+
],
|
|
2459
|
+
"type": "object"
|
|
2460
|
+
},
|
|
2461
|
+
"annotations": {
|
|
2462
|
+
"destructiveHint": false,
|
|
2463
|
+
"idempotentHint": false,
|
|
2464
|
+
"openWorldHint": true,
|
|
2465
|
+
"readOnlyHint": false
|
|
2466
|
+
},
|
|
2467
|
+
"_meta": {
|
|
2468
|
+
"farming.dev/upstream": "cua-driver",
|
|
2469
|
+
"farming.dev/capabilities": [
|
|
2470
|
+
"browser.dialog",
|
|
2471
|
+
"input.delivery_mode"
|
|
2472
|
+
],
|
|
2473
|
+
"farming.dev/risk": {
|
|
2474
|
+
"class": "r3",
|
|
2475
|
+
"enforcement": "metadata_only",
|
|
2476
|
+
"operation_sensitive": true,
|
|
2477
|
+
"version": "1"
|
|
2478
|
+
}
|
|
2479
|
+
}
|
|
2480
|
+
},
|
|
2481
|
+
{
|
|
2482
|
+
"name": "computer_browser_set_input_files",
|
|
2483
|
+
"upstreamName": "browser_set_input_files",
|
|
2484
|
+
"description": "Assign one or more explicit absolute local files to an exact live <input type=file> ref through CDP. This bypasses native file pickers, rejects symlinks and non-regular files, and never returns local paths.",
|
|
2485
|
+
"inputSchema": {
|
|
2486
|
+
"additionalProperties": true,
|
|
2487
|
+
"properties": {
|
|
2488
|
+
"files": {
|
|
2489
|
+
"items": {
|
|
2490
|
+
"description": "Absolute path to one local regular file.",
|
|
2491
|
+
"type": "string"
|
|
2492
|
+
},
|
|
2493
|
+
"maxItems": 32,
|
|
2494
|
+
"minItems": 1,
|
|
2495
|
+
"type": "array"
|
|
2496
|
+
},
|
|
2497
|
+
"ref": {
|
|
2498
|
+
"description": "Page element ref in the p<snapshot>:<index> namespace from get_browser_state. Refs are invalidated by navigation and by newer snapshots of the same tab.",
|
|
2499
|
+
"type": "string"
|
|
2500
|
+
},
|
|
2501
|
+
"session": {
|
|
2502
|
+
"description": "Stable caller-declared session id. Browser targets, tabs, and refs are scoped to this session.",
|
|
2503
|
+
"type": "string"
|
|
2504
|
+
},
|
|
2505
|
+
"tab_id": {
|
|
2506
|
+
"description": "Opaque tab id from get_browser_state (session-scoped).",
|
|
2507
|
+
"type": "string"
|
|
2508
|
+
},
|
|
2509
|
+
"target_id": {
|
|
2510
|
+
"description": "Opaque browser target id minted by get_browser_state (session-scoped; never a CDP id).",
|
|
2511
|
+
"type": "string"
|
|
2512
|
+
}
|
|
2513
|
+
},
|
|
2514
|
+
"required": [
|
|
2515
|
+
"target_id",
|
|
2516
|
+
"tab_id",
|
|
2517
|
+
"ref",
|
|
2518
|
+
"files"
|
|
2519
|
+
],
|
|
2520
|
+
"type": "object"
|
|
2521
|
+
},
|
|
2522
|
+
"annotations": {
|
|
2523
|
+
"destructiveHint": false,
|
|
2524
|
+
"idempotentHint": false,
|
|
2525
|
+
"openWorldHint": true,
|
|
2526
|
+
"readOnlyHint": false
|
|
2527
|
+
},
|
|
2528
|
+
"_meta": {
|
|
2529
|
+
"farming.dev/upstream": "cua-driver",
|
|
2530
|
+
"farming.dev/capabilities": [
|
|
2531
|
+
"browser.input.files"
|
|
2532
|
+
],
|
|
2533
|
+
"farming.dev/risk": {
|
|
2534
|
+
"class": "r3",
|
|
2535
|
+
"enforcement": "metadata_only",
|
|
2536
|
+
"operation_sensitive": false,
|
|
2537
|
+
"version": "1"
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
},
|
|
2541
|
+
{
|
|
2542
|
+
"name": "computer_browser_download",
|
|
2543
|
+
"upstreamName": "browser_download",
|
|
2544
|
+
"description": "Trigger one download through an exact live browser ref and save it inside an explicitly approved directory. Requires MCP-host destructive-tool approval, refuses ambiguous or stale capabilities, and never returns the source URL, filename, or destination path.",
|
|
2545
|
+
"inputSchema": {
|
|
2546
|
+
"additionalProperties": true,
|
|
2547
|
+
"properties": {
|
|
2548
|
+
"destination_root": {
|
|
2549
|
+
"description": "Absolute, existing, canonical directory approved to receive the download.",
|
|
2550
|
+
"type": "string"
|
|
2551
|
+
},
|
|
2552
|
+
"ref": {
|
|
2553
|
+
"description": "Live page ref whose activation initiates the download.",
|
|
2554
|
+
"type": "string"
|
|
2555
|
+
},
|
|
2556
|
+
"session": {
|
|
2557
|
+
"description": "Explicit caller session owning the browser capabilities.",
|
|
2558
|
+
"type": "string"
|
|
2559
|
+
},
|
|
2560
|
+
"tab_id": {
|
|
2561
|
+
"description": "Opaque exact tab id from get_browser_state.",
|
|
2562
|
+
"type": "string"
|
|
2563
|
+
},
|
|
2564
|
+
"target_id": {
|
|
2565
|
+
"description": "Opaque exact browser target id from get_browser_state.",
|
|
2566
|
+
"type": "string"
|
|
2567
|
+
}
|
|
2568
|
+
},
|
|
2569
|
+
"required": [
|
|
2570
|
+
"session",
|
|
2571
|
+
"target_id",
|
|
2572
|
+
"tab_id",
|
|
2573
|
+
"ref",
|
|
2574
|
+
"destination_root"
|
|
2575
|
+
],
|
|
2576
|
+
"type": "object"
|
|
2577
|
+
},
|
|
2578
|
+
"annotations": {
|
|
2579
|
+
"destructiveHint": true,
|
|
2580
|
+
"idempotentHint": false,
|
|
2581
|
+
"openWorldHint": true,
|
|
2582
|
+
"readOnlyHint": false
|
|
2583
|
+
},
|
|
2584
|
+
"_meta": {
|
|
2585
|
+
"farming.dev/upstream": "cua-driver",
|
|
2586
|
+
"farming.dev/capabilities": [
|
|
2587
|
+
"browser.download"
|
|
2588
|
+
],
|
|
2589
|
+
"farming.dev/risk": {
|
|
2590
|
+
"class": "r3",
|
|
2591
|
+
"enforcement": "metadata_only",
|
|
2592
|
+
"operation_sensitive": false,
|
|
2593
|
+
"version": "1"
|
|
2594
|
+
}
|
|
2595
|
+
}
|
|
2596
|
+
},
|
|
2597
|
+
{
|
|
2598
|
+
"name": "computer_browser_pointer",
|
|
2599
|
+
"upstreamName": "browser_pointer",
|
|
2600
|
+
"description": "Perform hover, right-click, double-click, scroll, or drag in an exactly-bound browser tab. Semantic refs must declare pointer for hover, right-click, double-click, and drag; scroll accepts a scroll or pointer capability. The trusted route uses CDP Input events and refuses if standalone background posture cannot be preserved. The explicit dom_event route requires a page ref and synthesizes full-background DOM events. Never activates or brings a tab to the foreground.",
|
|
2601
|
+
"inputSchema": {
|
|
2602
|
+
"additionalProperties": true,
|
|
2603
|
+
"properties": {
|
|
2604
|
+
"action": {
|
|
2605
|
+
"enum": [
|
|
2606
|
+
"hover",
|
|
2607
|
+
"right_click",
|
|
2608
|
+
"double_click",
|
|
2609
|
+
"scroll",
|
|
2610
|
+
"drag"
|
|
2611
|
+
],
|
|
2612
|
+
"type": "string"
|
|
2613
|
+
},
|
|
2614
|
+
"delta_x": {
|
|
2615
|
+
"description": "Horizontal scroll delta in CSS pixels.",
|
|
2616
|
+
"type": "number"
|
|
2617
|
+
},
|
|
2618
|
+
"delta_y": {
|
|
2619
|
+
"description": "Vertical scroll delta in CSS pixels.",
|
|
2620
|
+
"type": "number"
|
|
2621
|
+
},
|
|
2622
|
+
"destination_ref": {
|
|
2623
|
+
"description": "Drag destination page ref in the exact same frame.",
|
|
2624
|
+
"type": "string"
|
|
2625
|
+
},
|
|
2626
|
+
"input_route": {
|
|
2627
|
+
"default": "trusted",
|
|
2628
|
+
"enum": [
|
|
2629
|
+
"trusted",
|
|
2630
|
+
"dom_event"
|
|
2631
|
+
],
|
|
2632
|
+
"type": "string"
|
|
2633
|
+
},
|
|
2634
|
+
"ref": {
|
|
2635
|
+
"description": "Origin page ref. Alternative to x/y.",
|
|
2636
|
+
"type": "string"
|
|
2637
|
+
},
|
|
2638
|
+
"session": {
|
|
2639
|
+
"description": "Explicit caller session owning the browser capabilities.",
|
|
2640
|
+
"type": "string"
|
|
2641
|
+
},
|
|
2642
|
+
"tab_id": {
|
|
2643
|
+
"description": "Opaque tab id minted by get_browser_state.",
|
|
2644
|
+
"type": "string"
|
|
2645
|
+
},
|
|
2646
|
+
"target_id": {
|
|
2647
|
+
"description": "Opaque target id minted by get_browser_state.",
|
|
2648
|
+
"type": "string"
|
|
2649
|
+
},
|
|
2650
|
+
"to_x": {
|
|
2651
|
+
"description": "Drag destination viewport x in CSS pixels.",
|
|
2652
|
+
"type": "number"
|
|
2653
|
+
},
|
|
2654
|
+
"to_y": {
|
|
2655
|
+
"description": "Drag destination viewport y in CSS pixels.",
|
|
2656
|
+
"type": "number"
|
|
2657
|
+
},
|
|
2658
|
+
"x": {
|
|
2659
|
+
"description": "Origin viewport x in CSS pixels.",
|
|
2660
|
+
"type": "number"
|
|
2661
|
+
},
|
|
2662
|
+
"y": {
|
|
2663
|
+
"description": "Origin viewport y in CSS pixels.",
|
|
2664
|
+
"type": "number"
|
|
2665
|
+
}
|
|
2666
|
+
},
|
|
2667
|
+
"required": [
|
|
2668
|
+
"target_id",
|
|
2669
|
+
"tab_id",
|
|
2670
|
+
"session",
|
|
2671
|
+
"action"
|
|
2672
|
+
],
|
|
2673
|
+
"type": "object"
|
|
2674
|
+
},
|
|
2675
|
+
"annotations": {
|
|
2676
|
+
"destructiveHint": false,
|
|
2677
|
+
"idempotentHint": false,
|
|
2678
|
+
"openWorldHint": true,
|
|
2679
|
+
"readOnlyHint": false
|
|
2680
|
+
},
|
|
2681
|
+
"_meta": {
|
|
2682
|
+
"farming.dev/upstream": "cua-driver",
|
|
2683
|
+
"farming.dev/capabilities": [
|
|
2684
|
+
"browser.input.pointer"
|
|
2685
|
+
],
|
|
2686
|
+
"farming.dev/risk": {
|
|
2687
|
+
"class": "r2",
|
|
2688
|
+
"enforcement": "metadata_only",
|
|
2689
|
+
"operation_sensitive": false,
|
|
2690
|
+
"version": "1"
|
|
2691
|
+
}
|
|
2692
|
+
}
|
|
2693
|
+
},
|
|
2694
|
+
{
|
|
2695
|
+
"name": "computer_start_recording",
|
|
2696
|
+
"upstreamName": "start_recording",
|
|
2697
|
+
"description": "Start trajectory recording. Every subsequent action-tool invocation (click, right_click, scroll, type_text, press_key, hotkey, set_value) writes a turn folder under `output_dir`:\n\n- `before_state.json` / `after_state.json` — application AX/UIA/AT-SPI state immediately before and after the action.\n- `before.png` / `after.png` — target-window screenshots immediately before and after the action.\n- `evidence.json` — capture status and a stable classification when an expected artifact could not be captured.\n- `app_state.json` — post-action AX/UIA snapshot for the target pid.\n- `screenshot.png` — compatibility alias of `after.png`.\n- `action.json` — tool name, full input arguments, result summary, pid, click point (when applicable), ISO-8601 timestamp.\n- `click.png` — for click-family actions only, `before.png` with a red marker at the click point.\n\nTurn folders are named `turn-00001/`, `turn-00002/`, etc. Turn numbering restarts at 1 each time recording is (re-)started.\n\n**Video is off by default.** Pass `record_video: true` to also capture the main display to `<output_dir>/recording.mp4` (H.264 / 30 fps) for the lifetime of the session. The recording is torn down automatically when the MCP client disconnects.\n\n**macOS uses native ScreenCaptureKit** (daemon-owned SCStream + SCRecordingOutput) so video inherits the daemon's Screen Recording grant — no extra TCC prompt, no ffmpeg subprocess. Requires macOS 15.0+.\n\n**Windows + Linux use an ffmpeg subprocess** (`gdigrab` / `x11grab` + libx264). Requires ffmpeg on PATH (winget install Gyan.FFmpeg / apt install ffmpeg); when ffmpeg is missing or fails on startup the per-turn capture (screenshots + action.json) still runs and the session's `last_error` field carries the diagnostic.\n\nState persists for the life of the daemon; a restart resets to disabled with no on-disk state. Call `stop_recording` to disable + finalize the mp4.",
|
|
2698
|
+
"inputSchema": {
|
|
2699
|
+
"additionalProperties": false,
|
|
2700
|
+
"properties": {
|
|
2701
|
+
"output_dir": {
|
|
2702
|
+
"description": "Absolute or ~-rooted directory where turn folders and (when enabled) the video file are written.",
|
|
2703
|
+
"type": "string"
|
|
2704
|
+
},
|
|
2705
|
+
"record_video": {
|
|
2706
|
+
"description": "Capture the main display to <output_dir>/recording.mp4. Default: false. Set to true to also capture the main display to recording.mp4 (otherwise only the per-turn screenshots + JSON are recorded). On macOS this uses native ScreenCaptureKit (no extra TCC prompt, macOS 15.0+); on Windows + Linux it requires ffmpeg on PATH.",
|
|
2707
|
+
"type": "boolean"
|
|
2708
|
+
}
|
|
2709
|
+
},
|
|
2710
|
+
"required": [
|
|
2711
|
+
"output_dir"
|
|
2712
|
+
],
|
|
2713
|
+
"type": "object"
|
|
2714
|
+
},
|
|
2715
|
+
"annotations": {
|
|
2716
|
+
"destructiveHint": false,
|
|
2717
|
+
"idempotentHint": true,
|
|
2718
|
+
"openWorldHint": false,
|
|
2719
|
+
"readOnlyHint": false
|
|
2720
|
+
},
|
|
2721
|
+
"_meta": {
|
|
2722
|
+
"farming.dev/upstream": "cua-driver",
|
|
2723
|
+
"farming.dev/capabilities": [
|
|
2724
|
+
"recording.start"
|
|
2725
|
+
],
|
|
2726
|
+
"farming.dev/risk": {
|
|
2727
|
+
"class": "r2",
|
|
2728
|
+
"enforcement": "metadata_only",
|
|
2729
|
+
"operation_sensitive": false,
|
|
2730
|
+
"version": "1"
|
|
2731
|
+
}
|
|
2732
|
+
}
|
|
2733
|
+
},
|
|
2734
|
+
{
|
|
2735
|
+
"name": "computer_stop_recording",
|
|
2736
|
+
"upstreamName": "stop_recording",
|
|
2737
|
+
"description": "Stop trajectory recording. Disables further per-turn capture and, when video was enabled, gracefully terminates the ffmpeg subprocess so the mp4's moov atom is finalized (the file is playable). Calling stop on an already-stopped session is a no-op. The response carries `last_video_path` pointing at the finalized mp4 (when video was on).\n\nA manual `stop_recording` is **unconditional** — it stops whatever recording is active regardless of which session started it. Ownership-scoped teardown (so one MCP client disconnecting can't stop a recording a later client started) is handled by the daemon's `session_end` lifecycle signal, not by this tool.",
|
|
2738
|
+
"inputSchema": {
|
|
2739
|
+
"additionalProperties": false,
|
|
2740
|
+
"properties": {},
|
|
2741
|
+
"type": "object"
|
|
2742
|
+
},
|
|
2743
|
+
"annotations": {
|
|
2744
|
+
"destructiveHint": false,
|
|
2745
|
+
"idempotentHint": true,
|
|
2746
|
+
"openWorldHint": false,
|
|
2747
|
+
"readOnlyHint": false
|
|
2748
|
+
},
|
|
2749
|
+
"_meta": {
|
|
2750
|
+
"farming.dev/upstream": "cua-driver",
|
|
2751
|
+
"farming.dev/capabilities": [
|
|
2752
|
+
"recording.stop"
|
|
2753
|
+
],
|
|
2754
|
+
"farming.dev/risk": {
|
|
2755
|
+
"class": "r1",
|
|
2756
|
+
"enforcement": "metadata_only",
|
|
2757
|
+
"operation_sensitive": false,
|
|
2758
|
+
"version": "1"
|
|
2759
|
+
}
|
|
2760
|
+
}
|
|
2761
|
+
},
|
|
2762
|
+
{
|
|
2763
|
+
"name": "computer_get_recording_state",
|
|
2764
|
+
"upstreamName": "get_recording_state",
|
|
2765
|
+
"description": "Report the current trajectory recorder state: whether recording is enabled, the output directory (when enabled), and the 1-based counter for the next turn folder that will be written. Counter increments on every recorded action tool call and resets to 1 each time recording is (re-)enabled.\n\nPure read-only.",
|
|
2766
|
+
"inputSchema": {
|
|
2767
|
+
"additionalProperties": false,
|
|
2768
|
+
"properties": {},
|
|
2769
|
+
"type": "object"
|
|
2770
|
+
},
|
|
2771
|
+
"annotations": {
|
|
2772
|
+
"destructiveHint": false,
|
|
2773
|
+
"idempotentHint": true,
|
|
2774
|
+
"openWorldHint": false,
|
|
2775
|
+
"readOnlyHint": true
|
|
2776
|
+
},
|
|
2777
|
+
"_meta": {
|
|
2778
|
+
"farming.dev/upstream": "cua-driver",
|
|
2779
|
+
"farming.dev/capabilities": [
|
|
2780
|
+
"recording.state"
|
|
2781
|
+
],
|
|
2782
|
+
"farming.dev/risk": {
|
|
2783
|
+
"class": "r0",
|
|
2784
|
+
"enforcement": "metadata_only",
|
|
2785
|
+
"operation_sensitive": false,
|
|
2786
|
+
"version": "1"
|
|
2787
|
+
}
|
|
2788
|
+
}
|
|
2789
|
+
},
|
|
2790
|
+
{
|
|
2791
|
+
"name": "computer_replay_trajectory",
|
|
2792
|
+
"upstreamName": "replay_trajectory",
|
|
2793
|
+
"description": "Replay a recorded trajectory by re-invoking every turn's tool call in lexical order. `dir` must point at a directory previously written by `start_recording`. Each `turn-NNNNN/` is parsed for `action.json`, and the recorded tool is called with its recorded `arguments` via the same dispatch path an MCP / CLI call uses.\n\nCaveats:\n- Element-indexed actions (`click({pid, element_index})` etc.) will fail because element indices are per-snapshot and don't survive across sessions. Pixel clicks (`click({pid, x, y})`) and all keyboard tools replay cleanly. Failures are reported but don't stop replay unless `stop_on_error` is true.\n- `get_window_state` and other read-only tools are NOT currently recorded, so replays do not re-populate the per-(pid, window_id) element cache.\n- If recording is ENABLED while replay runs, the replay itself is recorded into the currently configured output directory. That's deliberate: recording a replay against a new build and diffing the two trajectories is the regression-test workflow.",
|
|
2794
|
+
"inputSchema": {
|
|
2795
|
+
"additionalProperties": false,
|
|
2796
|
+
"properties": {
|
|
2797
|
+
"delay_ms": {
|
|
2798
|
+
"description": "Milliseconds to sleep between turns, for human-observable pacing. Default 500.",
|
|
2799
|
+
"maximum": 10000,
|
|
2800
|
+
"minimum": 0,
|
|
2801
|
+
"type": "integer"
|
|
2802
|
+
},
|
|
2803
|
+
"dir": {
|
|
2804
|
+
"description": "Trajectory directory previously written by `start_recording`. Absolute or ~-rooted.",
|
|
2805
|
+
"type": "string"
|
|
2806
|
+
},
|
|
2807
|
+
"stop_on_error": {
|
|
2808
|
+
"description": "Stop replay on the first tool-call error. Default true — set false to best-effort through the full trajectory.",
|
|
2809
|
+
"type": "boolean"
|
|
2810
|
+
}
|
|
2811
|
+
},
|
|
2812
|
+
"required": [
|
|
2813
|
+
"dir"
|
|
2814
|
+
],
|
|
2815
|
+
"type": "object"
|
|
2816
|
+
},
|
|
2817
|
+
"annotations": {
|
|
2818
|
+
"destructiveHint": true,
|
|
2819
|
+
"idempotentHint": false,
|
|
2820
|
+
"openWorldHint": false,
|
|
2821
|
+
"readOnlyHint": false
|
|
2822
|
+
},
|
|
2823
|
+
"_meta": {
|
|
2824
|
+
"farming.dev/upstream": "cua-driver",
|
|
2825
|
+
"farming.dev/capabilities": [
|
|
2826
|
+
"recording.replay"
|
|
2827
|
+
],
|
|
2828
|
+
"farming.dev/risk": {
|
|
2829
|
+
"class": "r1",
|
|
2830
|
+
"enforcement": "metadata_only",
|
|
2831
|
+
"operation_sensitive": false,
|
|
2832
|
+
"version": "1"
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
},
|
|
2836
|
+
{
|
|
2837
|
+
"name": "computer_install_ffmpeg",
|
|
2838
|
+
"upstreamName": "install_ffmpeg",
|
|
2839
|
+
"description": "Install the ffmpeg binary used by start_recording's video capture (Linux/Windows; macOS records natively and needs no ffmpeg). Two-step and confirmed: called without `confirm` it only REPORTS the exact install command for this platform's package manager; pass `confirm: true` to actually run it. No-op if ffmpeg is already on PATH. ffmpeg is run as a separate process, never linked into the driver.",
|
|
2840
|
+
"inputSchema": {
|
|
2841
|
+
"additionalProperties": false,
|
|
2842
|
+
"properties": {
|
|
2843
|
+
"confirm": {
|
|
2844
|
+
"description": "Run the install command. Without it, only the planned command is reported.",
|
|
2845
|
+
"type": "boolean"
|
|
2846
|
+
}
|
|
2847
|
+
},
|
|
2848
|
+
"type": "object"
|
|
2849
|
+
},
|
|
2850
|
+
"annotations": {
|
|
2851
|
+
"destructiveHint": true,
|
|
2852
|
+
"idempotentHint": false,
|
|
2853
|
+
"openWorldHint": true,
|
|
2854
|
+
"readOnlyHint": false
|
|
2855
|
+
},
|
|
2856
|
+
"_meta": {
|
|
2857
|
+
"farming.dev/upstream": "cua-driver",
|
|
2858
|
+
"farming.dev/capabilities": [
|
|
2859
|
+
"recording.install_dependency"
|
|
2860
|
+
],
|
|
2861
|
+
"farming.dev/risk": {
|
|
2862
|
+
"class": "r3",
|
|
2863
|
+
"enforcement": "metadata_only",
|
|
2864
|
+
"operation_sensitive": false,
|
|
2865
|
+
"version": "1"
|
|
2866
|
+
}
|
|
2867
|
+
}
|
|
2868
|
+
},
|
|
2869
|
+
{
|
|
2870
|
+
"name": "computer_start_session",
|
|
2871
|
+
"upstreamName": "start_session",
|
|
2872
|
+
"description": "Declare a session — a named, color-coded identity for THIS agent run. Pass a stable `session` id and choose capture_scope=auto|window|desktop; the agent cursor, capture policy, per-session config, and recording all key on it, and it follows the run across any apps/windows. The cursor's color is derived from the id, so distinct runs are visually distinct. A cursor is shown only for a declared session — call this (or pass `session` on your first action) to opt in. Idempotent: re-calling with the same id just refreshes its idle-TTL. End it with `end_session` (or let the idle-TTL reclaim it). Concurrent runs/subagents each pass their own `session` to get their own cursor.",
|
|
2873
|
+
"inputSchema": {
|
|
2874
|
+
"additionalProperties": true,
|
|
2875
|
+
"properties": {
|
|
2876
|
+
"capture_scope": {
|
|
2877
|
+
"default": "auto",
|
|
2878
|
+
"description": "Per-session perception/action modality. auto starts window-only and requires explicit escalation before desktop tools; window and desktop are strict. Immutable for the live session.",
|
|
2879
|
+
"enum": [
|
|
2880
|
+
"auto",
|
|
2881
|
+
"window",
|
|
2882
|
+
"desktop"
|
|
2883
|
+
],
|
|
2884
|
+
"type": "string"
|
|
2885
|
+
},
|
|
2886
|
+
"session": {
|
|
2887
|
+
"description": "Stable session id for this run (e.g. \"research-run-1\").",
|
|
2888
|
+
"type": "string"
|
|
2889
|
+
}
|
|
2890
|
+
},
|
|
2891
|
+
"required": [
|
|
2892
|
+
"session"
|
|
2893
|
+
],
|
|
2894
|
+
"type": "object"
|
|
2895
|
+
},
|
|
2896
|
+
"annotations": {
|
|
2897
|
+
"destructiveHint": false,
|
|
2898
|
+
"idempotentHint": true,
|
|
2899
|
+
"openWorldHint": false,
|
|
2900
|
+
"readOnlyHint": false
|
|
2901
|
+
},
|
|
2902
|
+
"_meta": {
|
|
2903
|
+
"farming.dev/upstream": "cua-driver",
|
|
2904
|
+
"farming.dev/capabilities": [
|
|
2905
|
+
"session.lifecycle.start",
|
|
2906
|
+
"session.capture_scope"
|
|
2907
|
+
],
|
|
2908
|
+
"farming.dev/risk": {
|
|
2909
|
+
"class": "r1",
|
|
2910
|
+
"enforcement": "metadata_only",
|
|
2911
|
+
"operation_sensitive": false,
|
|
2912
|
+
"version": "1"
|
|
2913
|
+
}
|
|
2914
|
+
}
|
|
2915
|
+
},
|
|
2916
|
+
{
|
|
2917
|
+
"name": "computer_escalate_session",
|
|
2918
|
+
"upstreamName": "escalate_session",
|
|
2919
|
+
"description": "Unlock the desktop phase of an auto capture-scope session after the window action ladder has been exhausted and verified. This is a one-way transition for the live session and records a bounded reason.",
|
|
2920
|
+
"inputSchema": {
|
|
2921
|
+
"additionalProperties": true,
|
|
2922
|
+
"properties": {
|
|
2923
|
+
"detail": {
|
|
2924
|
+
"description": "Optional bounded diagnostic detail. Never use secrets or page content.",
|
|
2925
|
+
"maxLength": 200,
|
|
2926
|
+
"type": "string"
|
|
2927
|
+
},
|
|
2928
|
+
"reason": {
|
|
2929
|
+
"enum": [
|
|
2930
|
+
"ax_tree_pixel_mismatch",
|
|
2931
|
+
"background_delivery_failed",
|
|
2932
|
+
"foreground_ineffective",
|
|
2933
|
+
"no_window_target",
|
|
2934
|
+
"other"
|
|
2935
|
+
],
|
|
2936
|
+
"type": "string"
|
|
2937
|
+
},
|
|
2938
|
+
"session": {
|
|
2939
|
+
"type": "string"
|
|
2940
|
+
}
|
|
2941
|
+
},
|
|
2942
|
+
"required": [
|
|
2943
|
+
"session",
|
|
2944
|
+
"reason"
|
|
2945
|
+
],
|
|
2946
|
+
"type": "object"
|
|
2947
|
+
},
|
|
2948
|
+
"annotations": {
|
|
2949
|
+
"destructiveHint": false,
|
|
2950
|
+
"idempotentHint": false,
|
|
2951
|
+
"openWorldHint": false,
|
|
2952
|
+
"readOnlyHint": false
|
|
2953
|
+
},
|
|
2954
|
+
"_meta": {
|
|
2955
|
+
"farming.dev/upstream": "cua-driver",
|
|
2956
|
+
"farming.dev/capabilities": [
|
|
2957
|
+
"session.capture_scope.escalate"
|
|
2958
|
+
],
|
|
2959
|
+
"farming.dev/risk": {
|
|
2960
|
+
"class": "r2",
|
|
2961
|
+
"enforcement": "metadata_only",
|
|
2962
|
+
"operation_sensitive": false,
|
|
2963
|
+
"version": "1"
|
|
2964
|
+
}
|
|
2965
|
+
}
|
|
2966
|
+
},
|
|
2967
|
+
{
|
|
2968
|
+
"name": "computer_get_session_state",
|
|
2969
|
+
"upstreamName": "get_session_state",
|
|
2970
|
+
"description": "Read the live session's capture policy and effective scope.",
|
|
2971
|
+
"inputSchema": {
|
|
2972
|
+
"additionalProperties": true,
|
|
2973
|
+
"properties": {
|
|
2974
|
+
"session": {
|
|
2975
|
+
"type": "string"
|
|
2976
|
+
}
|
|
2977
|
+
},
|
|
2978
|
+
"required": [
|
|
2979
|
+
"session"
|
|
2980
|
+
],
|
|
2981
|
+
"type": "object"
|
|
2982
|
+
},
|
|
2983
|
+
"annotations": {
|
|
2984
|
+
"destructiveHint": false,
|
|
2985
|
+
"idempotentHint": true,
|
|
2986
|
+
"openWorldHint": false,
|
|
2987
|
+
"readOnlyHint": true
|
|
2988
|
+
},
|
|
2989
|
+
"_meta": {
|
|
2990
|
+
"farming.dev/upstream": "cua-driver",
|
|
2991
|
+
"farming.dev/capabilities": [
|
|
2992
|
+
"session.capture_scope.read"
|
|
2993
|
+
],
|
|
2994
|
+
"farming.dev/risk": {
|
|
2995
|
+
"class": "r0",
|
|
2996
|
+
"enforcement": "metadata_only",
|
|
2997
|
+
"operation_sensitive": false,
|
|
2998
|
+
"version": "1"
|
|
2999
|
+
}
|
|
3000
|
+
}
|
|
3001
|
+
},
|
|
3002
|
+
{
|
|
3003
|
+
"name": "computer_end_session",
|
|
3004
|
+
"upstreamName": "end_session",
|
|
3005
|
+
"description": "End a session declared with `start_session`: removes its agent cursor, stops any recording it owns, and clears its per-session config. Call this when a run finishes so its cursor doesn't linger (otherwise the idle-TTL reclaims it after a period of inactivity). Idempotent.",
|
|
3006
|
+
"inputSchema": {
|
|
3007
|
+
"additionalProperties": true,
|
|
3008
|
+
"properties": {
|
|
3009
|
+
"session": {
|
|
3010
|
+
"description": "The session id to end.",
|
|
3011
|
+
"type": "string"
|
|
3012
|
+
}
|
|
3013
|
+
},
|
|
3014
|
+
"required": [
|
|
3015
|
+
"session"
|
|
3016
|
+
],
|
|
3017
|
+
"type": "object"
|
|
3018
|
+
},
|
|
3019
|
+
"annotations": {
|
|
3020
|
+
"destructiveHint": true,
|
|
3021
|
+
"idempotentHint": true,
|
|
3022
|
+
"openWorldHint": false,
|
|
3023
|
+
"readOnlyHint": false
|
|
3024
|
+
},
|
|
3025
|
+
"_meta": {
|
|
3026
|
+
"farming.dev/upstream": "cua-driver",
|
|
3027
|
+
"farming.dev/capabilities": [
|
|
3028
|
+
"session.lifecycle.end"
|
|
3029
|
+
],
|
|
3030
|
+
"farming.dev/risk": {
|
|
3031
|
+
"class": "r1",
|
|
3032
|
+
"enforcement": "metadata_only",
|
|
3033
|
+
"operation_sensitive": false,
|
|
3034
|
+
"version": "1"
|
|
3035
|
+
}
|
|
3036
|
+
}
|
|
3037
|
+
},
|
|
3038
|
+
{
|
|
3039
|
+
"name": "computer_check_for_update",
|
|
3040
|
+
"upstreamName": "check_for_update",
|
|
3041
|
+
"description": "Check whether a newer cua-driver-rs release is available on GitHub. Returns the current and latest versions, an `update_available` boolean, the install one-liner, and the release notes URL. Read-only — never installs. Mirror of `cua-driver check-update --json`.",
|
|
3042
|
+
"inputSchema": {
|
|
3043
|
+
"additionalProperties": false,
|
|
3044
|
+
"properties": {},
|
|
3045
|
+
"type": "object"
|
|
3046
|
+
},
|
|
3047
|
+
"annotations": {
|
|
3048
|
+
"destructiveHint": false,
|
|
3049
|
+
"idempotentHint": true,
|
|
3050
|
+
"openWorldHint": true,
|
|
3051
|
+
"readOnlyHint": true
|
|
3052
|
+
},
|
|
3053
|
+
"_meta": {
|
|
3054
|
+
"farming.dev/upstream": "cua-driver",
|
|
3055
|
+
"farming.dev/capabilities": [
|
|
3056
|
+
"driver.update_check"
|
|
3057
|
+
],
|
|
3058
|
+
"farming.dev/risk": {
|
|
3059
|
+
"class": "r0",
|
|
3060
|
+
"enforcement": "metadata_only",
|
|
3061
|
+
"operation_sensitive": false,
|
|
3062
|
+
"version": "1"
|
|
3063
|
+
}
|
|
3064
|
+
}
|
|
3065
|
+
}
|
|
3066
|
+
]
|
|
3067
|
+
}
|