dsh-scrcpy-core:DSH 投屏控制的共用核心

前言

在 DSH 里做安卓或鸿蒙设备的投屏与自动化,如果每个平台各自实现一套菜单、标签页、解码和 AI 工具,会话侧会出现重复注册、权限口径不一致、以及「当前操作哪台设备」难以统一的问题。DeepSeek Harness 的插件模型允许把能力拆成多个包协作;dsh-scrcpy-core 的定位是 scrcpy 投屏对用户和 AI 都只有这一个门面——界面、设备列表、投屏面板与 AI 工具集中在本包,具体平台怎么连设备、怎么推流,交给各自的 provider。

下面介绍该插件是什么、能做什么、如何安装与使用,以及和 provider 配合时的注意点。事实以仓库 README 为准;维护者为 ns-zzj,npm 包名为 @nszzj/dsh-scrcpy-core(资料中版本 1.0.2,MIT 许可证)。

这是什么

dsh-scrcpy-core 是 DSH 客户端分类下的 scrcpy 共用核心。它自己不识别鸿蒙或安卓,只负责:

  • 投屏面板 UI、每台设备一个标签页
  • jmuxer 解码
  • AI 工具、提示词、权限门禁
  • 设备与聚焦状态、命令路由

各平台由独立 provider 提供「这类设备怎么说话」:

包 作用
@nszzj/dsh-scrcpy-core(本包) 上述共用能力
dsh-hos-scrcpy 鸿蒙:hdc 传输 + Java sidecar(HOScrcpy SDK)
dsh-android-scrcpy 安卓:adb 传输 + 官方 scrcpy-server

资料明确:provider 不注册 UI、不注册 AI 工具、不写 AI 提示词、不关心当前聚焦哪台设备——这些都在 core。

核心功能

会话内的投屏体验

  1. 会话右上角「scrcpy 菜单」展示按平台分组的设备列表(鸿蒙 / 安卓),每组带环境检测(鸿蒙组显示 Java + hdc,安卓组显示 adb)。
  2. 设备行点「启动」:起服务并打开该设备的投屏标签页(一机一标签,互不干扰)。
  3. 投屏面板上:鼠标点拖映射触摸、返回/主页/音量、向聚焦输入框注入文本、「添加截图至聊天框」、以及该平台支持时的「日志」。
  4. 切到其他标签页不断流:画面暂停广播以省解码与内存,回到标签页继续播放。

给 AI 的工具(中性名,只注册一次)

工具 作用 需要权限
scrcpy_devices 列出已连接设备、当前聚焦设备、四项权限状态 不需要
scrcpy_screenshot 截屏 + 内置视觉模型识别 允许截图
scrcpy_locate 读控件清单(比例坐标 0..1 等字段) 允许控制
scrcpy_tap / scrcpy_longpress 按比例坐标点击 / 长按(执行前确认并在画面闪绿点) 允许控制
scrcpy_key 按 provider 声明的可用键(如安卓 provider 的 back / home) 允许按键
scrcpy_input 向当前聚焦输入框注入文本(支持中文) 允许输入

所有操作类工具只作用于用户在投屏面板里正看着的那台设备;无聚焦设备时会明确报错,不会自动选一台。

每台设备独立四组权限开关,每组三态:禁止使用 / 需要确认 / 无需确认。「允许控制」「允许按键」「允许输入」依赖「允许截图」;关掉截图会连带关掉它们。

版本与 provider 兼容

三个包各自独立发版、独立安装。provider 登记时声明 coreCompat(如 "1.0.0"、"^1.0.0"、">=1.0.0");判定权在 core,不匹配则该 provider 标为停用,设备不进列表、动作不路由,菜单组显示「已停用」及原因,其它 provider 不受影响。

安装与启用

要装两个包:core + 你目标平台的 provider。 core 必须装成 profile 的直接依赖;只装 provider 时 core 仅为传递依赖,bundle 层不挂载且不会有警告(README 2026-09-25 对照说明)。只装 provider、未装 core 时状态为 pending (waiting for service: scrcpyProviders),不报错但不可用,属设计行为。

桌面端(资料称 0.1.7 场景下当前主力)

dsh plugin --profile desktop … 会被 CLI 拒绝:

error: profile "desktop" is managed exclusively by the Electron application

须走应用内插件面板,可填:

  • npm 包名(core:@nszzj/dsh-scrcpy-core;鸿蒙:@nszzj/dsh-hos-scrcpy;安卓:@nszzj/dsh-android-scrcpy)
  • 本地 tgz 路径
  • github: 规格(例如 github:ns-zzj/dsh-scrcpy-core)

禁用 / 启用:README 实测 启用可热生效;禁用会从 profile 的 dsh.profile.bundles 摘掉该包(依赖保留,恢复不必重装),但已装载实例不会在运行中卸载,需重启后才真正消失。

命令行(web 等 profile)

dsh plugin --profile <profile> add dsh-scrcpy-core dsh-hos-scrcpy

或把 dsh-hos-scrcpy 换成 dsh-android-scrcpy。然后重启 dsh web;会话右上角出现「scrcpy 菜单」即表示安装成功。

支持范围

主力为桌面端(Electron)。dsh web 大体可用(客户端半区为浏览器代码,RPC 走宿主 HTTP),但 README 注明未做完整验证,出问题以桌面端为准。WS 握手的 Origin 校验放行 dsh-app:// 与本机回环,web 版一般不因 Origin 被挡;外部网页会得到 403。

典型用法

  1. 安装 core 与对应 provider 后,打开 DSH 会话,点右上角「scrcpy 菜单」,确认平台组环境检测通过。
  2. 在目标设备行点「启动」,在投屏标签页内操作设备;需要 AI 介入时,在每台设备的投屏面板「设置」里配置四项权限与识别模型。
  3. 连接类参数(Java 路径、hdc、adb 等)在菜单里各平台组右上角「连接设置」中填写——字段与检测由 provider 提供,core 只渲染表单。
  4. 在对话中让 AI 调用 scrcpy_devices 了解聚焦设备与权限,再按需使用截图、定位、点击、按键、输入等工具;需要确认 模式下用户可拒绝,AI 不应在拒绝后盲目重试。

识别模型下拉列出所有 provider 的所有模型(不按是否支持图片筛选);若选了不支持图片的模型,由上游 API 报错。

适用场景与注意

适合谁: 已在 DSH 桌面端或 web profile 中开发、调试,并需要统一投屏 UI 与 AI 操控入口的团队或个人;实际连设备、推流需另装 dsh-hos-scrcpy 或 dsh-android-scrcpy。

运行与信任: 插件在当前 DSH 进程权限下运行,可访问本机 adb/hdc、设备画面与输入。安装前请阅读 GitHub 源码 与 MIT 许可证,自行评估是否纳入工作流。

已知限制(摘自 README): 安卓 provider 目前没有日志流;鸿蒙 SDK 在画面静止时可能无帧,界面会提示用户滑动手机,安卓无此提示;投屏为变化驱动,静止时帧计数不增长属正常;安卓侧已实现 UHID 外接键盘(点一下画面后 PC 键入由设备输入法处理),「输入」按钮走直接注入文本;鸿蒙侧 uinput 能否喂给输入法 README 标注未实测。

社区目录 skillhub.cn 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本包是投屏栈的共用层,而非单独完成全平台投屏的单体插件。

结尾

dsh-scrcpy-core 把投屏界面、多设备标签、解码、权限与 AI 工具收到一处,平台差异下沉到 provider,避免重复注册与路由混乱。使用上记住 core 与 provider 都要装、core 须为直接依赖,桌面端走应用内插件面板,CLI profile 用官方 add 命令并重启 web。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜