前言¶
在 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 官方页面,而不是自造概览/模型页签。
反向代理与 Cookie¶
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 # 强制重下
典型用法¶
- 按上文完成
npm install与dsh plugin … install,重启 DSH。 - 首次需要时观察日志:可能自动下载 magpie 到
~/.dsh/magpie/bin/,并拉起网关(示例日志中出现http://127.0.0.1:3425与 Web UI 代理地址)。 - 点击侧边栏 Magpie,在面板内使用与独立浏览器一致的 magpie 界面(挑选 Agents 模型等);模型同步仍依赖 magpie 对
cordis.patch.yml的写入,而非本插件注册 provider。 - 若公司网络拦截 GitHub,将
autoDownloadMagpie设为false并配置magpieBinary。
适用场景与注意¶
适合谁:已在 DSH 桌面/Web 客户端使用 magpie 网关,希望管理界面与对话窗口同屏、减少切浏览器和手工起进程的操作。
务必注意:
- 插件以当前 dsh 进程权限 运行,会自动
spawnmagpie、监听本地端口、必要时从 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 为准。