dsh-magpie:在 DeepSeek Harness 侧边栏嵌入 magpie 原版 Web UI

前言

在 DSH 里用 magpie 做模型网关时,常见做法是:本机装好 magpie、手动起 magpie serve --web,再另外开浏览器看管理界面。模型接入方面,magpie 会通过 magpie dsh <model> 往 ~/.dsh/profiles/<name>/cordis.patch.yml 写入带 # magpie 标记的 llm-pi-ai 条目,与 DSH 自带的 provider 插件是两条线。

dsh-magpie(维护者 Betsy20,SkillHub 目录,GitHub)只做一件事:把 magpie 的官方 Web UI 嵌进 DSH 侧边栏,并顺带处理「找不到二进制就下载」和「后台起网关」这两步手工操作。它不注册 provider;若在插件里再挂一份 magpie-direct,模型选择器里会出现重复条目。

这是什么

  • 名称:dsh-magpie(npm 包名与 cordis 节点名一致)
  • 分类:客户端插件(dsh.client.platform: web)
  • 许可证:MIT(见仓库 package.json)
  • 当前版本:0.1.0
  • 定位:侧边栏「Magpie」面板 + 宿主子进程管理;LLM 列表仍由 magpie 写入 profile 的 cordis.patch.yml

核心功能

侧边栏原版界面(iframe)

客户端在 main、sidebar.panellist、settings.section 三处注册槽位。打开面板时通过 RPC 调用 web.url,拿到固定反向代理地址,iframe 加载 magpie 官方页面,而不是自造概览/模型页签。

iframe 指向插件自起的 proxyPort(默认 3590),由 src/web-bridge.ts 转发到 magpie serve --web 实际监听的 webPort(默认首选 3480,被占用时 magpie 会向后找端口)。

直连 magpie Web 端口时,DSH 在 127.0.0.1 上的启动 Cookie 可能占满浏览器对该 host 的 Cookie 配额,导致 magpie 登录态失效。代理在服务端向每个请求注入 Cookie,并剥离上游 Set-Cookie,iframe 侧不必保存 magpie Cookie。代理端口固定,避免 iframe src 变更后 /api/* 全部失败且无法自恢复;magpie 进程重启时代理常驻,上游短暂不可用时返回 503 与 retry-after: 1。

magpie 二进制与网关

能力 行为
四级查找 magpieBinary 配置 → ~/.dsh/magpie/bin/ → 系统安装路径 → PATH
自动下载 autoDownloadMagpie 默认 true,从 GitHub Releases 下载(首次约 69 MB)
自动启动 autoStartGateway 默认 true,后台执行 magpie serve --web --no-open
卸载清理 dispose 时结束 magpie 子进程树,避免孤儿进程占端口

网关根地址默认 http://127.0.0.1:3425(配置项 baseURL,不带 /v1)。

安装与启用

仓库 README 给出的流程如下(需 Node ^22.19.0 || >=24.0.0):

git clone https://github.com/Betsy20/dsh-magpie.git
cd dsh-magpie
npm install                                    # 触发 prepare → 生成 lib/
dsh plugin --profile desktop install "$(pwd)"   # 换成你的 profile 名

重启 DSH 后,侧边栏应出现「Magpie」入口。

注意 link: 安装不会跑 prepare。 若跳过 npm install,需先构建,否则缺少 lib/index.js,宿主会静默禁用插件(启动日志可能出现 1 entry did not activate):

node scripts/build.mjs

package.json 的 dsh.bundle.patch 指向 cordis.patch.yml,向插件树插入 id: magpie、name: dsh-magpie 节点。

配置要点

DSH 设置里使用 magpie 命名空间(schema 见仓库 src/config.ts):

键 默认值 说明
baseURL http://127.0.0.1:3425 网关根地址
webEnabled true 是否嵌入 Web UI
webHost 127.0.0.1 Web UI 监听地址
webPort 3480 首选端口(占用时 magpie 自动顺延)
proxyPort 3590 iframe 使用的固定代理端口
webKey 固定串 对应 MAGPIE_WEB_KEY(16+ 个 [A-Za-z0-9._~-])
autoStartGateway true 加载时后台起 magpie serve --web
autoDownloadMagpie true 找不到二进制时从 GitHub 下载
magpieBinary magpie 可执行文件路径(绝对路径优先)

典型覆盖示例(摘自 README):

关自动下载、指定二进制:

- id: magpie
  config:
    autoDownloadMagpie: false
    magpieBinary: /opt/magpie/magpie

网关在远程机器:

- id: magpie
  config:
    autoStartGateway: false
    baseURL: http://192.168.1.10:3425

可选预下载(与运行时同一套 ensureMagpieBinary 逻辑):

npm run magpie:download            # 没有才下
npm run magpie:download -- --force # 强制重下

典型用法

  1. 按上文完成 npm install 与 dsh plugin … install,重启 DSH。
  2. 首次需要时观察日志:可能自动下载 magpie 到 ~/.dsh/magpie/bin/,并拉起网关(示例日志中出现 http://127.0.0.1:3425 与 Web UI 代理地址)。
  3. 点击侧边栏 Magpie,在面板内使用与独立浏览器一致的 magpie 界面(挑选 Agents 模型等);模型同步仍依赖 magpie 对 cordis.patch.yml 的写入,而非本插件注册 provider。
  4. 若公司网络拦截 GitHub,将 autoDownloadMagpie 设为 false 并配置 magpieBinary。

适用场景与注意

适合谁:已在 DSH 桌面/Web 客户端使用 magpie 网关,希望管理界面与对话窗口同屏、减少切浏览器和手工起进程的操作。

务必注意:

  • 插件以当前 dsh 进程权限 运行,会自动 spawn magpie、监听本地端口、必要时从 GitHub 下载二进制;安装前请阅读 源码 与 MIT 许可证,并评估本机安全策略。
  • 不要指望本插件替代 magpie 的模型注册;README 明确说明再注册 magpie-direct 只会 duplicate 模型列表。
  • 仓库 .gitignore 说明 .env 可能含 MAGPIE_GATEWAY_KEY / MAGPIE_WEB_KEY,勿将真实密钥提交或泄露。

SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系;星标与版本以 GitHub 页面为准(资料抓取时仓库约 1 star)。

结尾

dsh-magpie 把 magpie 官方 Web UI 放进 DSH 侧边栏,用固定端口的反向代理绕开 localhost Cookie 配额问题,并在缺二进制、缺网关时做自动补齐;模型侧仍交给 magpie 写 cordis.patch.yml。需要安装说明与架构细节时,以仓库 README 为准。

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

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

Xiaoye