NanamiKite/Coyote-x-dsh ↗★ 1

coyote-x-dsh

郊狼xDSH(Coyote x DSH)— AI 接入的体感文字冒险 DeepSeek Harness MCP 插件,带郊狼 Coyote V2/V3 有界 BLE 反馈 适合需要将AI文字冒险连接到郊狼设备进行体感反馈的用户。

패키지
coyote-x-dsh
호환성
미검증
버전
1.0.0
최근 업데이트
2026. 9. 24.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:NanamiKite/Coyote-x-dsh

安全配置

不调小心被电飞(本人不耐电所以默认数值比较低((( 推荐:在 DSH Web 的插件管理器里直接调。 Web GUI → 插件管理器 → 本包(coyote-x-dsh)→ tentacle 行的配置按钮 → 六字段表单 (强度、强度上限、单次时长、时长上限、冷却、通道):

  • 表单由本包的浏览器半侧渲染——它往插件管理器的 plugins.row.config 槽位注册 coyote-x-dsh#tentacle 这一行的配置页;
  • 六个字段在插件 Config 中标注为 .volatile():保存即完整 schema 校验(越界直接拒绝)、即持久化到 profile 的 cordis.patch.yml、 即时生效——不重挂插件、不重启、不中断正在运行的有界反馈 (当前计划按启动参数跑完即止,下一次执行用新值);
  • backend 不在表单内(换后端需要重建控制器),改它编辑 YAML 即可 (loader 自动重挂,先归零)。

其余方式(等价,任选):字段写在 cordis.patch.yml (包内,重启生效)或 profile 同 id 覆盖行(热重载)的 config: 里, 由 src/plugin/index.mjs 导出的 Config schema 校验:越界值直接 拒绝,不是静默钳制。

字段默认硬上限含义
backendbleble / mock真机 BLE 或无硬件调试
channelAA / B / AB输出通道
intensity200–200默认强度挡位(协议 S = 挡位 × 7)
maxIntensity40200强度天花板:招式计划只能被钳到更低
durationMs1500100–30000默认单次时长 ms
maxDurationMs500030000时长天花板 ms
cooldown100–3600两次反馈之间的冷却秒数

即使有人改 YAML 抬参,下面两层仍然独立钳制:rules.planMove()(0–200 挡位、 ≤30000 ms、Z ≤15)与 CoyoteSafety(挡位 0–200、协议 S ≤2047、时长 ≤5000)。

客户端的 MCP 配置

mcpServers: tentacle: command: node args: ['/path/to/Coyote-x-dsh/src/mcp/server.js'] env: TENTACLE_BACKEND: ble # 无硬件调试时改为 mock # 可选规则覆盖(stdio 模式专用,语义同上表): # TENTACLE_MAX_INTENSITY: '40' # TENTACLE_MAX_DURATION_MS: '5000' # TENTACLE_COOLDOWN_S: '10' # TENTACLE_CHANNEL: 'A' # A / B / AB # TENTACLE_RULES_JSON: '{"intensity":20,"maxIntensity":40}'


加载后模型会看到 `mcp__tentacle__tentacle_status` 等工具(该前缀由 mcp-client 生成;
进程内 bundle 模式无此前缀)。

## 工具

| 工具 | 行为 |
| --- | --- |
| `tentacle_status` | 读取连接、武装、冷却、运行中反馈、当前阶段与最近事件。只读 |
| `tentacle_scenario_list` | 列出全部场景包(内置 + 自定义)。只读 |
| `tentacle_scenario_start` | 载入场景包、重置账本、开始新局 |
| `tentacle_state_read` | 读取完整状态:阶段/字段/时间线/招式/人设。只读 |
| `tentacle_state_update` | 按 schema 更新字段(int 钳制,enum/bool 拒绝非法值)。不触发硬件 |
| `tentacle_state_advance` | 沿阶段图推进(防跨图乱跳)。不触发硬件 |
| `tentacle_feedback_list` | 招式列表 + 钳制后的实际输出计划。只读 |
| `tentacle_feedback_start` | 执行有界招式(需武装 + 已连接 + 冷却结束;须给剧情理由) |
| `tentacle_stop` | 立即停止并归零。**永远可用** |
| `tentacle_connect` / `tentacle_disconnect` | 连接 / 断开设备(连接后先归零) |

## 内置场景包(原创)

| id | 标题 | 风格 | 一句话设定 |
| --- | --- | --- | --- |
| `spore-greenhouse` | 孢子温室 | 俏皮诡异 | 夜班温室里,共生藤蔓「珞珈」把你当成新宿主,好奇地试探。 |
| `abyss-dive` | 深渊潜航 | 幽闭悬疑 | 7000 米海沟,水母群「灯缕」把你的隔离服当成新的光缆。 |
| `clockwork-chase` | 发条城追缉 | 蒸汽朋克 | 偷走「秒针之心」后,你在三分钟内躲避全城发条执法者的追缉。 |
| `sympathetic-chain` | 共感之链 | 情感叙事 | 与封印魔女瑟琳结下共感契约,她的伤沿银链传到你身上。 |

每个场景包包含:世界观前言、NPC 人设口吻(`narrator`)、阶段图(`stages`)、
状态字段 schema(`state.fields`)、招式表(`moves`,各招绑定有界波形计划)、开场白与主持约定。

## 共创场景

在对话里和 AI 一起设计场景(世界观、NPC 口吻、阶段图、字段、招式),
把结果保存为 `src/game/scenarios/custom/.json`(格式见 `custom/_template.json`),
MCP 重新连接(stdio)或插件重载(进程内)即加载。`_` 开头的文件不会被加载;
同 id 时自定义包覆盖内置包。

字段类型:`int`(带 min/max,写入自动钳制)、`bool`、`enum`(values 白名单)、`text`(≤300 字)。
招式 `kind`:`sustain` 持续 / `burst` 短促 / `wave` 疏密随机(可配 `intensityRange`);
`stageGate` 可限制招式只在指定阶段可用。波形名从 `src/coyote/waveforms.js` 波形库选取。

**场景包无法突破安全上限**:所有招式计划仍经过 `planMove` 与 `CoyoteSafety` 双层钳制。

## 许可证

MIT