dsh-feyagate

toolstested: passnpmMIT

DSH plugin that installs, supervises and auto-upgrades the local miloco-mcp-server background service, bridges its MCP tools into DSH and adds service, account and license settings panels.

下载量 / Downloads
1,673
依赖体积 / node_modules
11.46 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-feyagate

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-feyagate-gateway

这个文件解决什么问题:让三类读者各自在 3 分钟内找到自己要看的东西 —— 想装的人拿到最短安装路径,想贡献的人拿到开发环境与目录职责,关心合规的人拿到"仓库里到底有什么、没有什么"。

![License: MIT](LICENSE)

npm 包名 dsh-feyagate · 版本 0.3.6

0.3.6:新增「开放接口」页 + 引擎改用产品名 + 反馈入口(界面与文案层,宿主能力未变)
- 新增第 7 个分区「开放接口」:把网关的 MCP 与 HTTP 两个接口面搬进设置页 ——
MCP 地址按实时端口拼出并可一键复制、「接入配置片段」下拉可在通用 mcpServers
JSON 与纯地址之间切换;HTTP 端点速查表每行带复制 curl(引号已按 CMD / POSIX
双兼容转义);另有 API 文档入口与服务未运行时的明确提示。
文档正文见 [docs/api.zh.md](docs/api.zh.md)(MCP 握手、工具调用示例、端点参数、
端口发现方式、安全边界与常见问题),页面上只放链接,保证只有一份正文要维护。
- 引擎统一叫「FeyaGate MCP 引擎」:miloco-mcp-server 是实现细节,界面不再要求
用户认识 "miloco" 这个词(见 ENGINE_DISPLAY_NAME);下载文件名示例等事实性
文案仍然照实写。
- 顶栏第二行改为常驻入口:「GitHub 仓库」「问题反馈」直接跳转,不再显示
"免费试用还剩 N 天" —— 各平台剩余天数各不相同、0 又表示"没有试用期/已用完",
压缩成一句只会误导;每个平台的详情回到「授权 › 平台能力」看。
- 日志页新增「去 GitHub 反馈」,配合「复制全部」把日志带到 Issues。
- 「门面端口」更名为 「MCP server 端口」(字段与行为不变,只是叫法按用户视角)。
0.3.5(历史):设置页交互重做 + 授权页免费版文案修正(纯界面与展示层,宿主能力未变)
- 一屏只有一个主按钮。 顶部常驻状态条右侧只出现"现在该做的那一件事"(没装→安装、
没跑→启动、一切正常→不放按钮);原来"顶部大按钮 + 页内按钮"两个入口会各自触发安装,
现在两处共用同一段逻辑(同一个 busy、同一套错误文案)。
- 版本卡合并。 原「版本」+「指定版本」两张卡合成一张:一句结论(尚未安装 / 发现新
版本 vX / 已经是最新)+ 本机版本与最新可用两个事实 + 主按钮;「重装 / 指定版本 /
允许无校验值 / 回滚 / 兼容区间」全部收进折叠的「更多安装选项」。
- 卸载整卡默认折叠,两个危险按钮不再常驻页面。
- 每个分区加一句职责说明;顺序调整为「服务 → 平台登录 → 账号总览 → 授权 → 设置 → 日志」。
- 平台登录页新增"登录之后能干什么"小表(设备 / 摄像头 / 场景与定时 / 自动化都在聊天里
让模型调工具完成),并保留凭据只走本机回环的说明。
- 授权页免费版文案修正:免费版不再显示 —(永久或未订阅) 与
— · 还剩 0 天,改为 无限期(免费版) / 无限期(免费版不涉及);米家永久免费
不再显示"试用剩 0 天"。根因是子进程用空字符串表示"没有",而旧代码用 ?? 兜底
挡不住空串;现在 src/child-api.ts 把空值一律归一为 null,并且宽限期没有到期时间时
不再把 grace_period_remaining = 0 当成"还剩 0 天"。
> ⚠ 注意 pnpm 的发布冷静期:pnpm 11 默认 minimum-release-age = 24h,
> 刚发布的版本用 dsh plugin add dsh-feyagate 可能仍装到上一个版本(会被静默降级,
> 并往 pnpm-workspace.yaml 写 minimumReleaseAgeExclude)。要立刻装到 0.3.5,
> 请写全版本号:dsh plugin --profile <profile> add dsh-feyagate@0.3.5。
0.3.4(历史):Windows 上「安装后台服务」必然失败。0.3.3 的清单里
channel.stable["win-x64"] 指向 v1.2.19,而该版本上游**只发了 zip、没有
.sha256 sidecar**,清单只能记 sha256: null;安装流程的设计是"没有校验值一律拒装",
于是 Windows 用户点按钮只会看到「上游未为 … 提供校验值」。0.3.4 把 win-x64 的默认
版本改成 v1.2.21,并修掉让这个坏清单通过 CI 的原因:verify-manifest.mjs 现在
按运行时同一套排序取真正会被下载的资产,并把"默认装不上"从 warning 升级为错误,
另加 scripts/check-manifest-guard.mjs 用真清单钉死这条规则。
0.3.1 变更(历史):重新生成 manifest/server-manifest.json。上游 miloco-mcp-server v1.2.20 的 mac-arm64 产物
已于 2026-09-25 重新打包并覆盖发布(旧包缺 4 个依赖库导致启动即 dyld: Library not loaded,且 MQTT 未编入
导致华为设备能登录却无法控制)。清单里的 sha256 必须跟着更新,否则安装会以校验不通过结束 ——
请先升级插件到 0.3.1 再安装/升级后台服务。

一句话

FeyaGate(飞阳网关)的 DSH 插件:在 DSH 里托管本机的后台服务 miloco-mcp-server(自动下载 → 校验 → 安装 → 守护 → 升级 → 失败回滚),把它的 76 个 MCP 工具(数量出自 FeyaGate_MCP_API.md §4)接进 DSH,并在设置面板里提供「服务 / 账号 / 授权」三个管理界面。

插件本体开源(MIT);真正的智能家居逻辑在闭源二进制里,二进制不进这个仓库、不随 npm 包分发,运行时从权利人自己的渠道下载并按清单校验(见 [NOTICE](NOTICE))。

用词约定(全文一致):平台账号相关一律说「登录」,只有许可证才说「授权」;本机这个进程一律叫「后台服务」,不叫「网关」;「飞阳网关」是产品名与设置入口名。


架构一眼看完

┌─────────────────────────────── DSH 宿主进程 ────────────────────────────────┐
│                                                                            │
│  ┌────────────────────────┐        ┌─────────────────────────────────────┐ │
│  │ 浏览器半侧 lib/client.js│  同源  │ Host 半侧(插件本体,进程内运行)    │ │
│  │ 设置 › 飞阳网关         │ ◄────► │ /dsh-feyagate/* 管理 API            │ │
│  │ [服务][账号][授权]      │  HTTP  │ 安装·校验·守护·升级·生成 config.yaml │ │
│  └────────────────────────┘        └──────┬──────────────────┬───────────┘ │
│                                           │ ① spawn / 健康轮询 │ ② 常驻    │
│  ┌───────────────────────────────┐        │    /health         │          │
│  │ @deepseek-ai/dsh-mcp-client   │  HTTP  │                    ▼          │
│  │ serverName: feyagate          │ ─────► │        ┌────────────────────┐ │
│  │ 工具名 mcp__feyagate__*       │        │        │ MCP 门面 :38081    │ │
│  └───────────────────────────────┘        │        │ 秒答 initialize    │ │
│         ▲ 模型在对话里调用                 │        │ 就绪后代理工具调用 │ │
│         │                                  │        └─────────┬──────────┘ │
└─────────┼──────────────────────────────────┼──────────────────┼────────────┘
          │                                  ▼                  │ ③ 代理
          │                   ┌──────────────────────────────┐  │
          │                   │ 后台服务 miloco-mcp-server   │◄─┘
          │                   │ 127.0.0.1:38080(可漂移)    │
          │                   │ POST /mcp/http · GET /health │
          │                   │ 落盘 ~/.dsh/dsh-feyagate/    │
          │                   └───────────┬──────────────────┘
          │                               │ HTTPS / P2P / MQTT
          │                               ▼
          │        小米云 · 涂鸦云 · 美的云 · 易微联 · 华为云 · Home Assistant
          │                               ▲
          │                               │ 局域网
          └─────────────── 米家摄像头 · 小爱音箱 · 小智终端

三条要点:

1. 桥连的是插件自己的常驻门面,不是子进程。门面端口写进 state.json,由 [cordis.patch.yml](cordis.patch.yml) 里的 !!js 表达式在 boot 时读取;子进程没装也能秒回 initialize(只返回空工具表),因此"先启动 DSH 再装服务"不会烧掉 MCP 桥的重连预算,升级窗口对模型也是零感知。tools/list_changed 的送达是最终一致的:桥的 SSE 流建立时若子进程已健康,门面立即补发一次;通知发出时若暂无客户端流,则标记 pending 并有界重发(5s/次、上限 12 次)——两种时序下桥都不需要重启 DSH 即可拿到工具列表。

2. 子进程真实端口是运行期细节。默认 38080,被占用时在 20 个端口范围内漂移;期望端口进 state.json 的 server.port,实际生效的端口在启动这一轮写进生成的 config.yaml,不写进任何静态配置。

3. 安装根目录本身是不可移动的。config.yaml 就放在根目录,子进程把设备身份与许可证锚定在 config.yaml 所在目录 —— 根目录一换就等于换了一份身份(见下方「数据在哪里」与 [ADR-0002](docs/adr/0002-install-directory.md))。


安装与最短路径

1. 装插件

dsh plugin --profile <profile> add dsh-feyagate

<profile> 是你要装进去的 profile 名(例如 web)。这条命令把参数原样转发给 pnpm,并在 package.json 里看到 dsh.bundle.patch 后把本插件

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::6,最后更新 2026-10-11

Links

GitHub · Homepage · npm

Same category