跳到主内容

plugin 使用指南

DSH 官方 bundle 插件:在 DSH 侧栏加 "DSH Remote" 入口与右侧抽屉,内置随 DSH 自启停的远程网关,提供完整管理控制台、斜杠命令桥接与 Token 用量统计聚合。

本文为派生内容(基于 wiki / faq / compatibility_json 自动组装),非 AI 即时创作。

本文由本站基于该插件已收录的字段自动派生(wiki / faq / compatibility_json / readme),非 AI 即时创作。每节末尾标源字段。

快速上手

dsh-Remote

— 源: plugin_wiki.wiki_content

安装与验证

dsh plugin --profile web add dsh-remote-plugin

复制以上命令在 DSH Web Profile 内运行。安装完成后在「插件列表」启用即可。

— 源: plugins.install

关键要点

  • 自动化测试:当前 16 项测试覆盖鉴权 / 路径穿越 / 符号链接逃逸 / Range / 断点续传 SHA-256 / 事件轮询 / Token 统计 / 发布一致性。
  • CI 自动构建:APK + Linux/Win 单文件网关 + npm 发布 + 独立仓库同步。
  • Editor Picks 精选:Editor Picks
  • 多市场收录:awesome-dsh-plugin / Oh-My-DSH / dsh-suite / dsh-plugins-store / vlln/plugin-registry。
  • DSH Compat:每周自动在最新 DSH 上验证插件可安装、可加载(compat workflow)。

— 源: plugin_wiki.readme_zh (fallback readme_raw)

常见问题

这个插件包和 dsh-Remote 主项目是什么关系?

它就是 dsh-Remote 仓库 monorepo 里的 packages/plugin 子目录,包名 dsh-remote-plugin,对外发布的就是这一个 npm 包;同一仓库还包含同源的单文件网关 gateway.js、手机端 WebUI public/、桌面 WebUI public/desktop/ 和 Android 端 android/。安装本插件后这些能力一并可用。来源:packages/plugin/package.json:1-4、packages/plugin/README.md:1-3。

安装到 web profile 后侧栏没出现入口怎么办?

一定要完整重启 DSH Web 进程(systemctl --user restart dsh-web 或手动停掉再启动),然后在 DSH Web 端执行 Ctrl+F5 强刷浏览器。只刷新页面或只重启插件管理器都不够,DSH 进程内的 cordis 注册表不会重新扫。来源:packages/plugin/README.md:17、AGENTS.md:49-54。

抽屉面板显示"网关未运行"怎么处理?

在抽屉面板点"启动网关"按钮,或重启 DSH Web 让插件自愈拉起;启动前插件会做 127.0.0.1 端口占用预检(net.connect),端口被占会直接拒绝并提示修改端口。可用 DSH_REMOTE_AUTOSTART=0 彻底禁用自愈;自愈开关同时受 ~/.dsh-remote/gateway.enabled 文件影响。来源:packages/plugin/index.mjs:177-192 + 260-275 + 344-376。

自带网关和单独跑 gateway.js 有什么区别?

插件版本始终随 DSH 同进程路径存活:DSH 启动就拉起网关、DSH 重启就刷新网关,自愈逻辑写在插件里(端口 / 上游变化才重启,避免 VPN 抖动误重启);单独跑 gateway.js 是一个独立 Node 进程,DSH 重启或网关崩溃后不会自动恢复,需要外部 systemd 或手动拉起。两种模式共用同一份 gateway.cjs 二进制能力。来源:packages/plugin/index.mjs:741-754、gateway.js:1-24。

我改了网关端口,手机怎么连不上?

端口优先级是 DSH_REMOTE_GATEWAY_PORT 环境变量 → ~/.dsh-remote/gateway-port 文件 → 8787。改了端口必须同步:手机"设置 → 服务器"的地址、路由器的防火墙放行、局域网 IP 后的端口号都得跟着改;插件管理面板会显示当前实际端口和来源(env / file / default)。来源:packages/plugin/index.mjs:25-37 + 573-619。

斜杠命令(/xxx)是怎么从手机发到 DSH 的?

手机端 → 网关 /remote/api/command(带 Bearer 令牌)→ 插件的同名前缀路由 → 用 ctx.agents.get 或 ctx.agents.resume 拿到 Agent → ctx.commands.execute(agent, line, signal) 执行。因为 DSH 自己的 api-proxy 白名单不含 commands.*,只能通过插件端点执行;执行失败或命令不存在时返回 executed:false 让前端回退成普通文本。来源:packages/plugin/index.mjs:662-706、AGENTS.md:23。

Token 用量统计怎么汇总的?

插件通过 ctx.on('session/event', ...) 监听 DSH 会话事件流;只关心带 usage 的 assistant/message,按 sessionId 串行队列把 {inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens} 投到网关 /stats/ingest;网关未运行则静默失败,等网关起来后按 seq 游标从 session.jsonl.zstd 补齐。来源:packages/plugin/index.mjs:396-440、AGENTS.md:18。

Windows 上能用吗?

插件本身(侧栏入口、抽屉、管理面板、网关启停)跨平台都可用;但"远程启停本机 DSH"功能依赖 systemd 用户服务,Windows 调用 /admin/api/dsh 会返回 PLATFORM_UNSUPPORTED。Linux 下若 systemctl 不可达(DBUS / user bus 失败)会返回 SYSTEMD_UNAVAILABLE,并细分命令超时、权限不足、服务失败等错误码。来源:packages/plugin/gateway.cjs:596-603、public/index.html:934。

— 源: plugin_wiki.faq_json

兼容性

  • DSH: 未声明(通过 dsh.bundle.patch 把 dsh-remote 自身插入 profile 层栈,dsh.client.inject 注入 @deepseek-ai/dsh-client-runtime 与 @deepseek-ai/dsh-client-ui-slots;插件侧依赖 ctx.webServer / ctx.commands / ctx.agents 三个 Cordis 服务)
  • Node: >=18(packages/plugin/package.json:44-46);单文件网关打包目标 node22-linux-x64 / node22-win-x64 / node22-macos-arm64(package.json:25-29)

— 源: plugin_wiki.compatibility_json

踩坑提醒

安装前请审阅上游仓库;本指南基于已收录字段自动派生,可能滞后于最新版本。如发现与官方文档冲突,请以上游为准。

— 来源:通用规则