dsh-toy

58Star6Fork1Issue0Watching

DSH 插件,把蓝牙小玩具接入 AI agent,自动选择连接方式并施加时长强度上限,默认 30 秒自动停。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
BSD-3-Clause
分支
main
dsh-plugin

安装

$ dsh plugin --profile web add github:c3ll256/dsh-toy

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 c3ll256/dsh-toy:先查看仓库 https://github.com/c3ll256/dsh-toy.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

dsh-toy 是一个 DSH 插件,用于把支持蓝牙、串口或 USB 的硬件玩具接入 AI agent,让 agent 能询问型号、自动选连接方式、施加时长和强度上限,30 秒后自动停。

核心能力

  • 自动选择连接方式:用户报型号就按已知路径连接,不知道时在 macOS 上先做只读原始 BLE 扫描,再决定走 Intiface 还是分享链接通道
  • 按需自动启动 Intiface Engine:本机没装时下载 Buttplug 官方固定版本并校验 SHA-256,有现成就复用
  • 通过分享链接直接连接部分厂商设备:基于自有协议实现,支持安可尼、谜姬、醉清风等已知型号
  • 强度受限的标量控制:仅暴露振动、摆动、收缩、充气、吸吮五类动作,数值限定在 0-100% 范围
  • 强制性的自动停止:每条控制命令默认 30 秒后自动停,最长 300 秒,新命令会替换旧命令的计时器
  • 一键紧急停止:可暂停单个设备,也可以一次性停掉全部设备

技术实现

  • 语言: TypeScript
  • 关键依赖: @deepseek-ai/schemastery(配置和 JSON Schema)、@deepseek-ai/dsh-tools(工具注册)、ws(WebSocket 客户端)
  • 架构模式: 主入口注册 7 个工具,运行时层 ToyRuntime 把后端调用串行化并对每条命令做时长/强度边界检查,后端层 AutoToyBackend 按需组合 Buttplug、MonsterParty 两个连接实现
  • 入口文件: src/index.ts

适用场景

当 DSH 用户希望让 agent 操控已持有的硬件玩具时,只需告诉 agent 品牌和型号,无需自己安装 Intiface、选择蓝牙协议或手动启动中转服务;插件会解决硬件接入、寻找设备、施加安全边界这些事,如果用户担心误操作,默认的 30 秒自动停和强度上限会把风险控制在合理范围。

前置依赖与兼容性

依赖最低版本说明
DSH>=0.1.0-rc.6peerDependencies 声明,作为可选依赖
Node.js>=22.19.0engines 字段要求
平台macOS / Linux / WindowsIntiface 自动下载覆盖 macOS ARM64、Linux x64/ARM64、Windows x64
Xcode Command Line ToolsmacOS 原始 BLE 扫描必需提供 Swift 编译器,否则需走 Intiface 回退
原生模块未引用本地原生依赖

安装方式

dsh plugin --profile web add github:c3ll256/dsh-toy

配置项

配置类型说明默认值
buttplugUrl字符串本机 Intiface 的 WebSocket 地址ws://127.0.0.1:12345
buttplugProtocolVersion3 或 4旧版 Intiface 用 34
monsterPartySessionToken字符串分享链接里提取的临时控制凭据,只来自插件配置,不会出现在工具参数里未设置
monsterPartyApiUrl字符串分享链接服务端的解析接口https://api.monsterparty.cc/main/v1/remote
monsterPartyOrigin字符串分享链接请求的 Origin 头https://www.monsterparty.cn
clientName字符串握手时向两端宣告的客户端身份dsh-toy
connectionTimeoutMs数字HTTP 或 WebSocket 建连超时10000
requestTimeoutMs数字等待对方响应的单次请求超时5000
intifaceExecutable字符串Intiface 可执行文件名或绝对路径intiface-engine
intifaceStartupTimeoutMs数字自动启动 Intiface 后等待它开始监听的超时10000
intifaceAutoDownload布尔本机找不到 Intiface 时,是否下载官方固定版本true
readyTimeoutMs数字分享链接通道等待设备就绪的超时20000
heartbeatIntervalMs数字分享链接通道应用层心跳间隔9000
scanDurationMs数字Intiface 设备发现窗口5000
rawBleScanDurationMs数字macOS 原始 BLE 发现窗口10000
defaultDurationSeconds数字玩具控制指令省略时长时使用的默认秒数30
maxDurationSeconds数字命令时长的硬上限,超过会被拒绝300
maxIntensityPercent数字强度百分比的硬上限,超过会被拒绝100
allowHold布尔是否允许 duration 0 表示持续不停,默认拒绝false

常见问题

Q: 这个插件能控制什么?

A: 支持蓝牙、串口、USB 类型的品牌玩具,以及部分使用分享链接的厂商(安可尼、谜姬、醉清风等)。macOS 上还能先做只读原始 BLE 扫描,再决定走哪条连接路径。

Q: 需要自己安装 Intiface Engine 吗?

A: 不需要。插件默认会自动从 Buttplug 官方 GitHub Release 下载固定版本并校验 SHA-256 后启动;如果已经手动运行着 Intiface,会优先复用现有实例而不是关闭它。

Q: 用起来安全吗?

A: 所有控制命令都会经过时长和强度上限检查,默认 30 秒后自动停止,最大强度 100%、最长 300 秒;只有显式开启 allowHold 才允许"开着不关",否则拒绝。

Q: MonsterParty 分享 token 怎么用?

A: 把它保存到插件配置里(常用环境变量读取),不要直接暴露给模型。分享 token 通常一次性使用,断线后需重新生成链接。

Q: 报错 spawn intiface-engine ENOENT 怎么办?

A: 说明 Intiface 没装,且自动下载没生效;更新到包含该能力的版本,把 intifaceAutoDownload 设为 true,并确认能访问 GitHub。

Q: 可以在 Windows / Linux 上用吗?

A: 可以。Intiface 自动下载支持 macOS ARM64、Linux x64/ARM64、Windows x64,其他平台需要通过 intifaceExecutable 指定自己准备好的引擎。

Q: 怎么彻底停掉?

A: 直接告诉 agent 停止全部设备,或调用玩具控制器,插件卸载或热更新时也会自动停输出并关闭由它启动的 Intiface 进程。

Q: 原始 BLE 扫描为什么只支持 macOS?

A: 它依赖 Xcode Command Line Tools 提供的 Swift 编译器,只做只读发现,不连接、不写特征;其他平台直接走 Intiface 回退路径。

上手难度

入门 — 用户告诉 agent 品牌型号即可,无需了解 Intiface、蓝牙协议或分享链接;唯一需要动手的是 macOS 用户首次扫描时授予蓝牙权限,以及 Linux 用户安装 Xcode Command Line Tools 这种罕见的依赖。

已知问题与限制

  • 内置的 RoomFun 兼容映射仅对蓝牙名称 RoomFun、型号标识 RF_CANNON_PT3、固件 4.3 加一个振动输出做过实机验证,其他 RoomFun 型号不能假定兼容
  • 分享链接通道只实现了 Chemtrails 记录的 relay 行为和 AKN_DS_SUCKEGG 映射,厂商协议若变化需要更新实现
  • Intiface 仅暴露可映射为百分比的标量功能,位置、方向、传感器、原始访问、订阅能力不在当前范围
  • 原始 BLE 扫描只支持 macOS,并依赖 Xcode Command Line Tools 提供的 Swift 编译器;它只做只读发现,不能作为未知设备的通用控制协议
  • 设备重连后,设备 id 可能会变化,应重新调用 toy_list 刷新
  • 测试仅使用本地协议 fixture 进行,不连接真实硬件
  • 分享链接 token 通常一次性使用,断线后失效,连接前需重新生成

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/c3ll256/dsh-toy)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录