让模型读屏、点击、输入并启动应用
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add asdukw/dsh-plugin-android-tools该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 取源不可用(Error: github tarball HTTP 404 @ https:
- · api.github.com
- · repos
- · asdukw
- · dsh-plugin-android-tools
- · tarball)
扫描于 2026/11/1(0 天前)
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 读取屏幕内容
- 点击与输入
- 启动应用
给 DeepSeek Harness(dsh)用的 Android 设备自动化工具:读屏、点击、输入、返回、启动应用、滑动,走本地 HTTP 桥接
README
由 DeepSeek 最新模型翻译生成dsh-plugin-android-tools
DeepSeek Harness(dsh)插件:把设备 UI 自动化桥变成 agent 工具 —— 读屏、点节点/坐标、输入文本、返回、启动应用、滑动。
插件本身是一个平台无关的薄 HTTP 客户端:它只注册工具并把调用转发给实现下方契约的 桥宿主;读控件树、注入手势等设备相关工作都在宿主里。参考宿主运行在 Android 上(AccessibilityService),但任何实现该契约的系统都能用同一个插件。
前置条件
- 运行中的 dsh,带 @deepseek-ai/dsh-tools >= 0.1.0-rc.6(peer dependency)。
- 一个桥宿主:本仓库只发布客户端这一半,宿主不在这里发布。可以对接已有宿主,或按下方契约实现(见编写宿主);仓库内附带一个可运行的 mock 宿主用于测试。没有宿主时,工具调用会以明确错误失败。
展开完整文档(README 剩余 1 节)
dsh-plugin-android-tools
DeepSeek Harness(dsh)插件:把设备 UI 自动化桥变成 agent 工具 —— 读屏、点节点/坐标、输入文本、返回、启动应用、滑动。
插件本身是一个平台无关的薄 HTTP 客户端:它只注册工具并把调用转发给实现下方契约的 桥宿主;读控件树、注入手势等设备相关工作都在宿主里。参考宿主运行在 Android 上(AccessibilityService),但任何实现该契约的系统都能用同一个插件。
前置条件
- 运行中的 dsh,带 @deepseek-ai/dsh-tools >= 0.1.0-rc.6(peer dependency)。
- 一个桥宿主:本仓库只发布客户端这一半,宿主不在这里发布。可以对接已有宿主,或按下方契约实现(见编写宿主);仓库内附带一个可运行的 mock 宿主用于测试。没有宿主时,工具调用会以明确错误失败。
工具
| 工具 | 说明 |
| read_screen | 读取当前屏幕控件树,输出形如 [12] TextView "发送" clickable @(900,2200) 的行 |
| tap_node(ref) | 点击上次 read_screen 输出里的节点 |
| tap_point(x,y) | 按屏幕坐标点击(极少需要) |
| type_text(text) | 把文本写进当前聚焦输入框;只输入不发送 |
| press_back | 系统返回键 |
| launch_app(query) | 按应用名(模糊)或包名启动 |
| swipe(direction) | 向 up / down / left / right 滑动一屏 |
工具是与具体 App 无关的原子动作,由模型组合成任务。
安装
从 git 安装,锁定 release tag:
dsh plugin add github:asdukw/dsh-plugin-android-tools#v0.2.0
或安装任意 GitHub Release 附带的 tarball:
dsh plugin add ./dsh-plugin-android-tools-0.2.0.tgz
npm 发布启用后也可以:
dsh plugin add dsh-plugin-android-tools
包内声明了 dsh.bundle 层(cordis.patch.yml),安装时自动插入插件行;之后重启 dsh。
配置
| 变量 | 含义 |
| ANDROID_BRIDGE_URL | 桥的基础地址,如 http://127.0.0.1:37812 |
| ANDROID_BRIDGE_TOKEN | 每个请求校验的共享 token,通常由宿主每次启动随机生成 |
宿主 App 或启动器一般会注入这两个变量;也可以在启动 dsh 的环境里手动导出。
任一缺失时所有工具调用以 ANDROID_BRIDGE_URL/ANDROID_BRIDGE_TOKEN not set 失败。
使用
推荐的循环是先读屏、操作、再读屏确认:
User: 打开时钟应用,设置一个 5 分钟计时器 Agent: launch_app("Clock") → read_screen → tap_node(12) → type_text("5") → …
想在没有真机的情况下试跑,用仓库自带的 mock 宿主(固定屏幕、无需设备):
node examples/mock-host.mjs # mock host on http://127.0.0.1:37812 (token: dev-token)
export ANDROID_BRIDGE_URL=http://127.0.0.1:37812
export ANDROID_BRIDGE_TOKEN=dev-token
mock 会确认所有动作,并为 read_screen 返回一份固定控件树。
桥契约
POST {ANDROID_BRIDGE_URL}/action
header: x-android-bridge-token: <ANDROID_BRIDGE_TOKEN>
body: { "action": "read_screen" | "tap_node" | "tap_point" | "type_text"
| "press_back" | "launch_app" | "swipe",
...动作参数 }
成功:{ "ok": true, "payload": "…" };失败:{ "ok": false, "summary": "…" }。
| 动作 | 参数 | payload |
| read_screen | – | 控件树文本,一行一个节点([ref] 类名 "文本" [flags] @(x,y)) |
| tap_node | ref(整数) | 结果摘要 |
| tap_point | x、y(整数) | 结果摘要 |
| type_text | text(字符串) | 结果摘要 |
| press_back | – | 结果摘要 |
| launch_app | query(字符串) | 结果摘要 |
| swipe | direction(up / down / left / right) | 结果摘要 |
桥应只监听本地(如 loopback)并校验 token:读屏内容可能包含个人数据,桥还能驱动设备。
payload 只交给模型,不要写日志。
编写宿主
宿主就是任何能读 UI、注入输入的进程;上方契约就是全部接口:
| 宿主所在平台 | 典型构件 |
| Android | AccessibilityService(getRootInActiveWindow、dispatchGesture、ACTION_SET_TEXT 等) |
| Windows | UI Automation |
| macOS | Accessibility API(AXUIElement) |
| iOS | WebDriverAgent / XCTest |
| 其他 | 任何能产出 read_screen 文本并接受点击的系统 |
检查清单:
- 只监听 loopback(或做强鉴权),每个请求校验 x-android-bridge-token;
- 把 action + 参数映射到平台原语,返回 {ok, payload} 或 {ok, summary};
- read_screen 按文档格式一行一个有效节点 —— 模型依赖 [ref] 在下一次读屏前保持稳定,tap_node 才能点中;
- ROM/OEM 怪癖都留在宿主里,工具接口保持不变。
examples/mock-host.mjs 是约 60 行的参考实现(解析/鉴权/回包形状)。
平台说明
- 插件里没有任何 OS 相关代码 —— 只说 HTTP。要移植到别的平台,写一个桥宿主即可,插件本身不用改。
- ROM/OEM 差异(无障碍权限、手势注入怪癖、控件树差异)都放在桥后面,工具接口保持稳定。
聊天辅助
聊天页上下文跟踪(collect_chat / read_chat / wait)在独立插件: dsh-plugin-chat-tools。
开发
烟测无需安装依赖(用 loader stub 顶替 @deepseek-ai/dsh-tools):
npm test
发布:推 v* tag。release workflow 会跑测试、打包,并创建附带 .tgz 的 GitHub Release。npm 发布是同一 workflow 里的 gated job:先本地发首个版本(npm login 后 npm publish --access public),在 npmjs.com 添加 trusted publisher(package → Settings → Trusted Publisher → GitHub Actions:user asdukw、repository dsh-plugin-android-tools、workflow filename release.yml、允许 npm publish),然后启用:
gh variable set NPM_PUBLISH_READY --body true -R asdukw/dsh-plugin-android-tools
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
asdukw/dsh-plugin-android-tools
让模型读屏、点击、输入并启动应用
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9