DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-dock

Dock

DeepSeek Harness 功能坞插件(dsh-dock):模块化功能中枢——每个功能一个 features/ 模块(可单独提取成包发布,又可经 dockBridge 装回面板)。含用量记录(LLM 调用记账/费用统计,支持各模型自定义单价、多段分时价与周末/节假日谷价)、模型设置、图片理解代理、模型余额、任务动画(19 种运行动画 + 桌面伙伴 3D 场景)、任务通知(完成/异常/需确认通知、提示音、语音播报可选音色、系统通知、钉钉/飞书推送)、运行状态(进行中任务与最近完成一览)、语音朗读(浏览

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-dock@0.21.2
README兼容性版本
功能坞首页总揽用量记录页设置 → 功能坞:每个模块一张卡片,卡片开关与面板页脚开关等效用量记录 · 图表统计:今日模型用量占比环形图、24 小时调用分布柱状图、模型耗时排行与多维分布横条图(全部跟随筛选条件联动)图表统计(指标可切换 总 Token / 调用次数 / 金额 / 输出 Token)图表统计(分布统计维度可切换 模型 / 提供商 / 状态 / 推理强度)模型余额:全部已配置 Provider 的余额/配额一屏查看(可查余额的排前面)任务动画设置页:19 种氛围模式、新版双工位桌面伙伴与大小控制

兼容性与来源证明

Dock 以 dsh-dock 发布,当前版本为 0.21.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.21.2stable
2026/11/4
0.21.1stable
2026/11/4
0.21.0stable
2026/11/4
查看其余 38 个版本收起版本
0.20.0stable
2026/11/3
0.19.0stable
2026/11/1
0.18.0stable
2026/10/28
0.17.0stable
2026/10/24
0.16.1stable
2026/10/23
0.16.0stable
2026/10/23
0.15.0stable
2026/10/12
0.14.0stable
2026/10/10
0.13.0stable
2026/10/1
0.12.0stable
2026/9/23
0.11.6stable
2026/9/23
0.11.5stable
2026/9/20
0.11.4stable
2026/9/20
0.11.3stable
2026/9/16
0.11.2stable
2026/9/14

相关插件

正在加载相关插件…

最新版
0.21.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
4.8 MB
文件数
62
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 15
周下载
887
安全扫描
✓ v0.21.2 扫描通过
最近提交
2026/11/4
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
0.11.1stable
2026/9/14
0.11.0stable
2026/9/10
0.10.3stable
2026/9/10
0.10.2stable
2026/9/10
0.10.1stable
2026/9/10
0.10.0stable
2026/9/9
0.9.9stable
2026/9/9
0.9.8stable
2026/9/8
0.9.7stable
2026/9/7
0.9.6stable
2026/9/6
0.9.5stable
2026/9/4
0.9.3stable
2026/9/3
0.9.2stable
2026/9/2
0.9.1stable
2026/9/2
0.9.0stable
2026/9/2
0.8.0stable
2026/8/27
0.7.1stable
2026/8/26
0.7.0stable
2026/8/25
0.6.0stable
2026/8/24
0.5.0stable
2026/8/23
0.4.1stable
2026/8/22
0.4.0stable
2026/8/22
0.1.0stable
2026/8/21

相关插件

继续浏览 productivity-workflow 分类下经过校验的插件。

Ds Harness Remoteds-harness-remote通过桌面端、网页端和 Android 端,端到端加密远程访问 DeepSeek Harness 和实验性 Codex 工作区,并支持 dsh-TUI Host。Archive Manager@michengai/dsh-archive-manager归档、恢复、收藏和永久删除会话,并诊断损坏的会话日志。Scriptor@linfengqaqtat/dsh-scriptorWebnovel Writer:DSH 长篇网文写作工作台Mattpocock Skills Deckdsh-mattpocock-skills-deck🌹安装即自带mattpocock/skills v1.3.2的27个工程与效率技能,无需手动装技能。520亿token打造本插件,在原始技能之上提供10倍的开发效率,也能帮助新手更快上手该技能套件。支持 GitHub 与 GitLab 的 issue;本地 Markdown 为预览版。感谢您的使用和支持💗

README

dsh-dock · 功能坞

DeepSeek Harness 功能坞插件:用一张管理面板,统一注册、开关所有小功能。

模型余额、用量记录、模型设置、图片理解代理……这些散落的小功能,全部收进一个「功能坞」: 每个功能是独立模块,有注册表、有开关、有错误隔离。新功能按模块追加,老功能互不牵连。

功能坞首页总揽


功能一览

功能说明
用量记录记录全部 LLM API 调用:秒级时间筛选、Token/费用统计(可配置各模型单价、持久保存并按自填单价计费,支持多段分时价与周末/节假日谷价,内置峰谷计价 + 官网价目自动同步作兜底)、分组汇总、明细检索与 CSV 导出
模型设置编辑各 Provider 模型目录:输入类型(文本/图片 + 标注)与思考强度档位;图片能力可由你手动声明,新增 Provider 后进入页面自动重读目录,写回官方配置热生效
模型提供商管理自定义模型 Provider 本身:新增 / 编辑 / 删除(OpenAI 兼容、Anthropic Messages 等)、API Key 写入本机凭据库、拉取上游 {baseURL}/models 列表;排版同官方模型管理页。独立功能,可单独停用——停用后写配置与出站拉取的路由一并关闭
模型余额展示所有模型 Provider 账户余额(5 分钟自动刷新);内置「DeepSeek 账号」官网余额(走宿主登录态,充值/赠送分列,不是 API Key 余额接口)
任务动画19 种任务运行动画(含星际远征、星云潮汐、曲速航道、量子雷达、星座网络、深海脉动、神经电路等),速度随任务活动联动,配置全部持久化
任务通知任务完成 / 异常 / 需确认 / 需回答 / 卡住通知(设置页支持「服务端配置 / 本机配置」总开关 + 事件×渠道勾选矩阵):页内卡片(总开关 + 完成/异常/需确认/卡住各自独立开关 + 卡片口径简洁/适中/详细三挡;卡住卡写明主/子任务、停滞时长与最后动作,恢复自动收、主任务在等子任务时不误报;停在原地等人(等批准 / 等回答)一律不算卡住,等回答单独弹「任务需要你回答」卡)、6 种提示音、浏览器系统通知、语音播报(服务端总开关 + 本机开关两层:服务端管全实例、本机开关存当前浏览器,两者都开才播报;完成/停止/需授权/需回答/卡住 × 简洁/适中/详细三挡 × 音色可选)、钉钉/飞书群机器人推送(宿主直发,浏览器关着也能推,消息口径可调);与动画互相独立、各自启停
运行状态任务运行状态一览:进行中任务的阶段 / 耗时 / 回合 / 步骤 / 工具 / Token、等人介入提醒(等批准的工具与说明 / 等回答的问题,分别打「等待确认」「等待回答」标签)与最近完成记录(只读,与动画/通知共用同一份宿主侧追踪)
语音朗读把会话回复读出来(浏览器 Web Speech API 语音合成,不消耗 token、不经过服务器):每条已完成回复下方一个 🔊 喇叭——点一下读这条、播放中再点暂停、继续就地续读(不重头),另有重新朗读/停止;也可开「自动朗读」,任务结束时直接读最后一条回复。音色/语速/音调/音量可调,Markdown 自动清洗(代码块、表格、思考过程不念),支持「只读前 N 句 / 字数上限」

| 趣味游戏 | 任务等待时消磨时间的十款小游戏(五子棋、中国象棋、俄罗斯方块、推箱子、贪吃蛇、打砖块、极速赛车、坦克大战、星际躲避、反应堆解谜);浮动窗口可拖动/缩放/最小化,不遮挡会话,靠屏幕侧边隐藏 | | 图片理解代理 | 图片识别等(visionproxy);原图候选默认折叠展示,图片能力以你的声明为准 | | 远程访问 | 账号密码登录的远程入口:网关监听 0.0.0.0 独立端口,手机/平板/局域网设备访问同一实例,会话与任务进度实时一致;主实例保持仅监听 127.0.0.1,结构上不存在绕开登录的直连路径;LAN 非安全上下文自动补 crypto.randomUUID。 | | 心跳监视 / 主题信息 | 示例功能(纯 Client) |

会话区随身小控件:启用后,在会话输入区工具行(模型选择器左侧)显示——

  • 模型余额:当前选中 Provider 的账户余额(跟随模型切换实时更新),点击打开功能坞并定位到该 Provider 的余额详情;
  • 用量记录:当前会话的总 Token 与估算花费(10 秒静默刷新),点击打开功能坞并跳转到该会话的用量记录。

勾选「启用」即显示,点芯片跳转;每个功能可在面板页脚或设置页单独设置「会话页显示/隐藏」。

界面

「功能坞」现在是侧栏一级面板图标(与「插件」「服务台」并列):点击打开功能坞面板页。可用侧栏「更多」菜单里的 Pin 把它固定在侧栏顶部,或取消固定收进「更多」——位置随你。会话输入区的余额/用量小控件点击仍会弹出浮层面板。

用量记录页

面板支持最大化 / 最小化 / 还原、标题栏拖动、右下角缩放。


安装

dsh-dock 是 DeepSeek Harness(dsh)的插件,装进 dsh 的 web profile(dsh 把插件当作 profile 的一层 bundle 层,由 dsh plugin 管理)。两种方式,选一个即可。

方式一:npm 安装

dsh plugin --profile web add dsh-dock

方式二:从源码安装(本地检出 + link:)

适合要用最新提交、或自己改代码(改完刷新就能看到)的场景。

关键点:dsh 的 link: 安装不会替插件安装依赖(pnpm 对 link: 包不装 deps),而本插件宿主 半部运行时要 import js-yaml、qrcode;Node 又按符号链接的真实路径解析——两者叠加,必须先在 源码树里备好 <repo>/node_modules,否则插件一加载就 MODULE_NOT_FOUND。 (@deepseek-ai/* 由 dsh 运行时从自身安装闭包统一解析——插件源码树里有没有那份都不影响运行。)

# 1) 克隆(发版库在 GitHub;内网开发库地址见 docs/workflow.md §1)
git clone https://github.com/wycto/dsh-dock.git
cd dsh-dock

# 2) 在源码树里装运行期依赖(这步不能省,见上面关键点)
npm install

# 3) 以 link: 装进 web profile。本地路径必须是绝对路径;dsh 会同时把 dsh-dock
#    写进 profile 的 dsh.profile.bundles(等价写法:直接给绝对路径,不带 link:)
dsh plugin --profile web add "link:$PWD"

# 4) 重启 dsh web 生效
dsh web

同一 profile 里同名包只能有一个:如果之前装过 npm 版 dsh-dock,先 dsh plugin --profile web remove dsh-dock 再执行第 3 步(见下方「换回 npm 版」的反向操作)。

验证 / 卸载 / 换回 npm 版:

dsh web --dump-config                     # 查看合成配置(确认 dsh-dock 已加载)
dsh plugin --profile web remove dsh-dock  # 卸载
dsh plugin --profile web add dsh-dock     # 换回 npm 版

源码安装后的维护:

  • 更新代码:仓库里 git pull 即可;client.js 是随仓库提交的构建产物,会跟着一起更新。
  • 改了客户端源码(src/、features/*/view.jsx):npm run build:client 重建 client.js,再刷新页面。
  • 改了宿主半部(index.js、src/host-core.js、features/*/host.js):重启 dsh web 才生效。
  • 想「改代码即刷新」的开发机流程(.devdeps 依赖 + 宿主/客户端双 HMR + 自动重建),见 docs/workflow.md §4b。

也可以手动在 cordis.patch.yml 中声明插件后重启 dsh。

要求:DeepSeek Harness 环境(dsh),Node.js 18+。

使用方法

快速上手

  1. 启动 dsh:npx @deepseek-ai/dsh web
  2. 打开浏览器访问 dsh 的 web 界面
  3. 在左侧边栏底部找到 「功能坞」 按钮,点击弹出功能面板
  4. 面板左侧是导航:首页总揽 + 各功能模块;右侧是对应内容区

启用 / 停用功能

每个功能有独立开关,两个入口:

  • 弹窗页脚:进入某个功能页,页脚显示「已启用(点击停用)/ 已停用(点击启用)」
  • 设置页:账号菜单 → 设置 → 功能坞,每个模块卡片上有开关

停用某功能后,其菜单项、首页卡片、会话区小控件一并隐藏。

设置 → 功能坞:每个模块一张卡片,卡片开关与面板页脚开关等效

会话区随身小控件

启用「模型余额」「用量记录」后,会话输入区工具行(模型选择器左侧)会出现两个小芯片:

  • ⛁ 会话用量:显示当前会话的 Token 数与估算费用(10 秒自动刷新)
  • 余额:显示当前选中模型的 Provider 账户余额(跟随模型切换实时更新)

点击芯片直接跳转功能坞对应页(「会话用量」打开后即按当前会话筛选出结果,无需再点查询)。每个功能可在面板页脚或设置页单独设置「会话页显示 / 隐藏」。

各功能使用

用量记录

用量记录页:秒级时间筛选、9 张 KPI 卡、分组汇总与 15 列明细(支持 CSV 导出)

  1. 打开功能坞 → 用量记录
  2. 使用顶部筛选:时间范围(秒级)、会话、提供商、模型(与提供商联动)、状态、推理强度
  3. 点「查询」有等待动画:数据量大时要等几秒,这段时间不再只有一行「加载中…」——状态行变成 ⟳ 加载中...(转圈 + 省略号一个个蹦出来),按钮转成「查询中…」(转圈 + 流光扫过,期间禁用不会重复提交),数据区顶部浮出「记账小队」banner(🧮📒🔍 轮流蹦跳 + ✦ 闪星 + 扫光进度条,每 1.3 秒换一句俏皮文案,等超过 5 秒会换成安抚语气),加载期间旧数据整体压暗且不可点;结果到位时闪一次「✓ 数据已更新」、KPI 卡错峰回弹
  4. 查看 9 张 KPI 卡(调用次数 / Token / 输入 / 缓存命中 / 命中率 / 输出 / 金额 USD / 金额 CNY / 累计耗时)
  5. 「分组汇总」按 无 / 提供商 / 模型 / 状态 / 强度 维度切换
  6. 明细表 15 列可排序,100 行/页,点击「会话 ID」即筛选该会话;行右侧「详情」看单次调用信息
  7. 「CSV 导出」下载当前筛选结果
  8. 「图表统计」页签:多维图表跟随筛选联动

用量记录 · 图表统计:今日模型用量占比环形图、24 小时调用分布柱状图、模型耗时排行与多维分布横条图(全部跟随筛选条件联动)

图表统计(指标可切换 总 Token / 调用次数 / 金额 / 输出 Token)

图表统计(分布统计维度可切换 模型 / 提供商 / 状态 / 推理强度)

  • 「今日模型用量占比」环形图:今天 0 点之后的记录按模型分扇区,中央显示今日合计,图例带百分比
  • 「24 小时调用分布」柱状图:按小时聚合,一眼看出高峰时段
  • 「模型耗时排行」横条图:按模型累计 LLM 耗时降序,看哪个模型最占时间
  • 「分布统计」横条图:维度一键切换 模型 / 提供商 / 状态 / 推理强度
  • 指标可切换 总 Token / 调用次数 / 金额 / 输出 Token;所有图都基于当前筛选结果即时聚合,筛选一变图表即变
  1. 费用不准?点「单价设置」按模型填真实单价:官网刊例价是抓来的,与实际计费(第三方中转、折扣、自建端点)常有出入。点开独立的「单价设置」子弹窗(可最大化、拖动、缩放),可按模型逐条配置单价(人民币元 / 百万 tokens,匹配模型名子串即可),并设置兜底单价、USD→CNY 汇率、是否继续自动同步官网价。每个模型还可配置多段分时价(如 DeepSeek 的高峰/优惠时段),命中哪段用哪段、时段外回落基准价,支持跨零点(如 23~7)与半点边界(如 8.5 = 08:30)。每段可选日期类型:每天 / 仅工作日 / 仅周末或节假日;再配合顶部的法定节假日列表(2026-10-01 或 2026-10-01~2026-10-07),即可表达「周末与节假日全天谷价、只有非节假日非周末的高峰时段双倍」(内置 DeepSeek V4 即此口径:工作日 912、1418 双倍)。保存后写入宿主配置持久保存,费用立即按自填单价重算(无需重扫历史);计价优先级:自定义单价 > 官网同步价 > 内置价 > 兜底价。明细表里走兜底价的金额会标「兜底」,方便你补配。

模型余额

模型余额:全部已配置 Provider 的余额/配额一屏查看(可查余额的排前面)

  1. 打开功能坞 → 模型余额
  2. 列表展示全部已配置 Provider 的余额/配额状态(每 5 分钟自动刷新,可手动「刷新」)
  3. 选的是 「DeepSeek 账号」(官网账号,未填 API Key)时,余额走宿主同一条登录态查官网站内余额:充值余额与赠送余额分列展示,美元按 7.2 估算为人民币;未登录或登录失效显示「需登录」并给出官网控制台链接,重新登录后自动恢复;金额与官网页一致按「分」截断(不四舍五入,避免显示比官网多一分钱)

任务动画

任务动画设置页:19 种氛围模式、新版双工位桌面伙伴与大小控制

  1. 打开功能坞 → 任务动画(与「任务通知」「运行状态」互相独立,可只开其一):
    • 运行动画:任务进行中才出现,19 种氛围模式任选(默认「流光细线」),速度随任务吞吐自动加快(Token 速率驱动):
      • 流光细线 / 呼吸光点 / 轨道光环 / 环屏巡航 / 代码雨 / 星野 / 极光:顶部流光、徽标呼吸、轨道光环、边缘巡航、字符缓落、星点闪烁、柔光带等克制动效
      • 桌面伙伴:CSS 3D 立体的具象人物坐在紧凑双工位前,任务活动越密集动作越快;流级实时同步任务阶段——模型思考时微抬头、单手托下巴,正文输出/写代码时低头键入右侧工位,查资料时转头扫视左侧屏幕;整卡可拖到屏幕任意位置(位置持久化),右下角手柄 / 面板滑块可缩放大小(85%~220%,自动保存)
      • 星际远征 / 星云潮汐 / 曲速航道 / 量子雷达 / 星座网络 / 数据萤火 / 深海脉动 / 棱镜光谱 / 神经电路 / 引力涟漪 / 灵感天灯:从星系远征到电路脉冲的十一种氛围场景(星际远征完成时货运舰会归航停泊在输入框上方)
  2. 任务结束动效自动消失,完成瞬间一缕流光掠过;功能坞面板打开时环境动效自动隐藏避免重叠
  3. 任务运行状态(进行中 / 等人介入(等批准或等回答) / 最近完成)见左侧「运行状态」菜单,结束与需确认提醒见「任务通知」
  4. 配置(动画开关 / 动画模式 / 桌面伙伴大小)经宿主 settings 持久化,重启 dsh 后自动恢复

任务通知(从「任务动画」拆出,独立菜单项与开关)

任务通知:配置来源(服务端/本机)+ 按事件提醒矩阵 + 按渠道设置 + 群机器人(Webhook 已脱敏)

  1. 打开功能坞 → 任务通知:
    • 配置来源(顶部总开关):服务端配置(默认,存宿主 settings,所有浏览器/设备共享)或本机配置(只存当前浏览器 localStorage,自己一套开关、不影响别人;可一键从服务端复制)。群机器人推送与语音服务端总开关始终由服务端执行/控制,本机模式下不可修改。
    • 按事件提醒(默认页签):事件 × 渠道矩阵——纵向是完成 / 异常 / 需确认·需回答 / 卡住,横向是页内卡片 / 提示音 / 系统通知 / 语音播报 / 钉钉 / 飞书;勾选即「该事件用该渠道提醒」。「—」表示该渠道不支持此事件(提示音与系统通知没有卡住,群机器人只在任务结束推送)。每个渠道的总开关、正文口径与详细参数在「按渠道设置」页签。
    • 按渠道设置:
      • 页内卡片:总开关 + 正文口径三挡(简洁 / 适中 / 详细);结束卡常驻到「看过」、点卡直达会话、≥3 张自动叠放收纳。
      • 提示音:总开关 + 6 种 WebAudio 合成音效可选、可单独试听。
      • 系统通知:总开关 + 浏览器授权状态;仅页面在后台时推送。
      • 语音播报:服务端总开关 + 本机开关(两者都开才播报)+ 播报口径三挡 + 语速/音量/音色/语言/试听;播报事件在上方矩阵的「语音播报」列勾选。
    • 群机器人:钉钉 / 飞书推送(任务结束由宿主直发,浏览器关着也能推);各自可填 Webhook、发送测试消息,并选择消息口径(简洁 / 适中 / 详细);推送事件在「按事件提醒」的钉钉/飞书列勾选(仅完成 / 异常)。
    • 语音播报细节(可选,默认关):任务完成 / 停止 / 需要授权 / 需要回答 / 卡住时用浏览器语音(Web Speech API)说一句话——口径三挡:简洁=一句话(「任务完成」;卡住则报「主任务(或子任务)·标题 卡住了」,一听就知道卡在哪),适中=点名任务(结束带原因与耗时、需授权带要批准的场景、卡住带停滞时长),详细=全量(结束带回合统计与回复摘要、需授权带工具名、需回答带问题正文、卡住带最后动作);可调语速/音量/音色/语言并试听(音色下拉与【语音朗读】同款:读本机音色表、中文在前分组,换设备选中的音色不存在时自动按语言回落)。与【语音朗读】共用本机声音但两套开关互不依赖;播报是打断式的(正在朗读正文时任务信先来);「卡住」= 编程阶段长时间没有任何动静时报一次,主任务与子任务会话分别判定、分别播报(会话头 origin/delegationDepth 判归属;恢复后再卡可再报;等批准、等回答的会话都不算卡住——前者由「需要授权」负责、后者由「需要回答」负责;主任务有子任务在跑时不算卡住,交给子任务判定;有在飞的工具调用、正在压缩上下文也不算卡住,那是在干活,判据统一在 src/shared.js 的 taskStalled,两条通知路径共用一份)
  2. 通知与动画互不依赖:停用「任务动画」后通知照常工作,反之亦然(动画 / 通知 / 运行状态共用同一份宿主侧任务追踪,只有一份开销)
  3. 群机器人推送的事件筛选跟随「完成 / 异常通知」开关;通知配置经宿主 settings 持久化,重启后恢复;升级会自动把旧版存在「任务动画」里的通知配置迁移过来

运行状态(从「任务动画」拆出,独立菜单项与开关;只读)

运行状态:进行中任务的阶段/耗时/回合/步骤/工具/Token、等待确认与最近完成(只读)

  1. 打开功能坞 → 运行状态:
    • 进行中任务:任务标题 + 阶段标签(思考中 / 输出中 / 编写代码 / 查资料)、模型(Provider)、已运行时长、回合 / 步骤 / 工具次数、输入↧输出↥ Token
    • 等人介入:顶部横幅提示「N 项等你介入」,并分别点名「M 项等批准、K 项等你回答」;对应任务打「等待确认」标签(工具等你批准,任务停在原地)或「等待回答」标签(会话提问等你选答案),并列出等待的工具与说明 / 问题与标题
    • 最近完成:最多 10 条,含结束原因(完成 / 出错 / 已中止 / 受阻 / 达输出上限 / 中断)、耗时、Token 与结束时间
  2. 面板打开时自动刷新(有任务 2 秒、空闲 8 秒、出错 15 秒),也可手动「刷新」;本模块没有常驻浮层,关掉面板即零开销
  3. 本页只读、不写任何配置:数据来自宿主侧会话级任务追踪(与动画 / 通知共用一份);动效在「任务动画」,结束 / 需确认 / 需回答提醒在「任务通知」

语音朗读

  1. 打开功能坞 → 语音朗读(启用后生效):
    • 每条已完成回复的下方(复制/分支那一排之前)出现一个 🔊 喇叭,三态控制:没在读点一下读这条;正在读再点=暂停(停在当前这句的当前字上);暂停后再点=就地继续,不重头。播放中旁边另有「重新朗读」(回第一句)与「停止」两枚按钮;换一条朗读时上一条立即让位(等浏览器把旧队列冲刷空再开播,不会先听完上一条的尾巴);行尾还有一个 ⚙ 快设:就地弹语速/音量滑杆(播放中拖动下一句起生效),「更多设置」直达功能坞面板;
    • 自动朗读:任务结束时自动读该会话最后一条回复(与「任务通知」共用同一份宿主侧任务追踪做触发源——冷读历史会话不会把老回复补读一遍)。可单独设置「出错 / 中止也读」「新内容打断当前朗读」;宿主进程是旧版本(还没注册 /dsh-dock/tts 路由)时自动降级为本地兜底:你正在看的会话照常读,后台会话要重启 dsh web 后才覆盖——面板底部黄条会说明这一点;
    • 声音:音色下拉(读本机浏览器的 speechSynthesis.getVoices();音色是设备相关的,选中的音色在本机不存在时自动按语言回落)、强制语言、语速 / 音调 / 音量,「试听」「停止」按钮;
    • 念什么:回复正文是 Markdown,默认跳过代码块与表格(只留一句「此处有代码/表格,略」)、思考过程永远不读、链接只念锚文字;「只读前 N 句」「字数上限」适合只听结论的场景。
  2. 朗读完全发生在你自己的浏览器里(Web Speech API):不消耗 token、不经过服务器;声音从当前这台设备的扬声器出来。浏览器不支持时(如部分 Linux Chromium)按钮会给出原因提示;配置经宿主 settings 持久化(tts 段),跨浏览器共享,宿主路由不可用时降级为本浏览器 localStorage。
  3. 长回复自动按句分片顺序播放(Chrome 对超长 utterance 会静默停住,这是标准解法)。浏览器策略要求页面有过用户手势才允许出声:刚打开页面就开自动朗读可能被拦,点一下页面即可。

模型设置

模型设置:各 Provider 模型目录编辑器(输入类型 / 思考强度 / 图片能力声明)

  1. 打开功能坞 → 模型设置
  2. 编辑各 Provider 的模型目录:输入类型(文本 / 图片)、思考强度档位;Provider 增删改后在别的页签回来会自动重读目录,顶部和底部都可手动刷新
  3. 是否可直接识图以你勾选的「图片」能力为准;运行时候选仅作辅助提示
  4. 保存后写回官方配置,即时生效(无需重启)
  5. Provider 自身的增删改在独立功能「模型提供商」里(下方),本页不再有入口卡与子页面

模型提供商(独立功能,与「模型设置」各自启停)

模型提供商:每个 Provider 一行卡片(显示名称 / 路由 key / 模型数 / 密钥状态徽标 + 编辑 / 删除),底部虚线新增

编辑 Provider:一行一字段(路由 key / 显示名称 / baseURL / API 协议 / API Key),模型清单沿用官方模型行样式

新增 Provider:底部虚线入口展开的创建卡片,可「获取模型列表」勾选上游模型后批量加入

  • 新增 / 编辑 / 删除自定义模型 Provider(OpenAI 兼容、Anthropic Messages 等),写入官方配置并热生效;内置 DeepSeek 官方 Provider 在该页只读,其模型目录在「模型设置」里编辑
  • API Key 存本机凭据库(文件仅 root 可读),输入框永不回显;留空则不改动已存密钥;凭据库条目名留空时按路由 key 自动推导
  • 获取模型列表:宿主代打 GET {baseURL}/models,结果按可勾选清单展示(全选 / 清空 / 已选计数),勾上哪个加哪个
  • 删除仍是两段式确认(点一次变「确认删除?」,再点才真删);编辑/新增卡片都是行内展开
  • 深链 params.openProviderForm 可直接展开新增表单
  • 可停用:不需要改 Provider 的部署(例如只用官方 DeepSeek 端点)把它关掉,写官方配置、写凭据库、发起出站拉取的那三条路由会随功能一起卸载

图片理解代理(visionproxy)

  • 用于图片内容识别等场景。原图直发候选默认折叠,模型设置中勾选「图片」输入类型的模型即可走该通道;请按实际 Provider 能力选择,端点不支持时取消该标记即可恢复代理识别。

远程访问

主 DSH 默认只监听 127.0.0.1(官方 CLI 拒绝 --host 0.0.0.0,因为浏览器表层没有登录认证)。「远程访问」提供账号密码登录的网关作为唯一远程入口,主实例保持仅本机:

  1. 账号密码登录网关(唯一远程入口):在功能坞「远程访问」页设置账号密码并点开启,网关监听 0.0.0.0 的独立端口(默认主端口+1,如 3080 → 3081,可改)。所有设备(电脑/手机/平板)访问 http://<电脑IP>:<网关端口>,未登录自动跳转登录页,登录后进入的是同一个 DSH 进程——历史会话、工作区(含浏览式选目录)、正在进行的任务进度、设置实时一致;登录会话 Cookie 7 天滑动过期,点「退出登录」随时注销。网关与主服务是同一台机器上的两个监听,不能共用一个端口。工作区目录选择钉为浏览器浏览模式(远程设备不能弹本机对话框);远程页面的兼容兜底(crypto.randomUUID)由网关注入。
    • 密码只存加盐哈希;登录失败按来源 IP 限速(10 分钟 10 次);修改密码后所有设备立即下线;关闭远程访问即停止网关并注销所有会话。
    • 重启自动拉起:开启状态与端口会被记住,重启 dsh web 后插件加载时网关按上次端口自动重新监听,不必进面板再点一次;账号密码同样保持。历史升级中若账号等配置滞留在 ~/.dsh/settings.yaml.imported(dsh 升级改名旧配置时官方导入 dsh-dock 段失败),下次启动会一次性自动恢复——现网已有改动的段不会被覆盖。
    • 异地组网:Tailscale/ZeroTier 等虚拟组网内直接用组网 IP 访问同一入口,效果与局域网相同。
    • 旧版「服务器模式(0.0.0.0)」与「扫码令牌接力」已被此方案取代:前者把无认证的 DSH 裸露给局域网,后者双实例任务状态不同步。开启远程访问时会自动清理旧的 0.0.0.0 webserver 补丁行(提示重启后回到仅本机)。
  2. 手机端接力体验(远程访问自带)(页面排版/抽屉/设置弹层由【手机适配】模块负责,见上表):
    • PWA 添加到主屏幕:网关自带 manifest 与图标(品牌渐变 + 白色气泡,零依赖生成),手机浏览器「添加到主屏幕」后像 App 一样全屏打开,无地址栏;未登录也能先装,打开后自然进登录页。
    • 断线提示:换网 / 锁屏久置导致连接中断时,页面顶部出现「连接已断开,正在重连…」胶囊,恢复后自动消失(连续 2 次探测失败才提示,不闪报)。
    • 面板「远程访问」页与首页总揽会显示当前在线设备数;登录页支持密码明文切换。

不开「远程访问」的直连形态:也可以不经网关、自行经 patch 层把主实例绑 0.0.0.0 直连(安全自担,浏览器表层没有登录认证)。这种形态下「远程访问」功能可以整个停用,dsh-dock 仍兜住与功能开关无关的一件事:非回环浏览器的「预览版说明」自动确认(dsh 对远程浏览器的确认不持久化,每次刷新都会重弹;插件级注入,回环地址不介入、保留原生的一次性持久确认)。

趣味游戏

趣味游戏:十款小游戏在浮动窗口里运行(棋盘对战 / 经典机台 / 街机动作),不占满屏、不遮挡会话

  • 任务在后台继续执行时,游戏在局部浮动窗口里运行(可拖动、可调大小、可最大化/最小化、不遮挡会话内容)。
  • 屏幕侧边的「趣味游戏」磁吸入口贴在左边栏右缘(不挡工作区目录),可换上下部位、左右换边,位置会被记住。
  • 十款小游戏:五子棋、中国象棋(你 vs AI)、俄罗斯方块、推箱子、贪吃蛇、打砖块、极速赛车、坦克大战、星际躲避、反应堆解谜;都支持键盘(配套的也配了按钮)操作。

心跳监视 / 主题信息

  • 示例功能,展示纯 Client 功能模块的写法

常见问题

  • 插件会消耗 token 吗:默认不会。用量记录/模型余额/任务动画/任务通知/运行状态/模型设置/语音朗读都是被动监听或本地查询,不调用 AI(语音朗读走浏览器自己的 Web Speech API,连服务器都不过)。唯一主动调 AI 的是「图片理解代理」(用视觉模型识图),它默认关闭,需你在模型设置里手动开启才生效;开启后每次识图按所选视觉模型计费。
  • 功能开关刷新后重置:v0.5.0 起功能开关已持久化(浏览器本地存储),刷新/重启后保持。
  • 任务动画/任务通知/运行状态不生效:三者的路由都在宿主进程内(动画/通知的配置持久化也在宿主),旧宿主需重启 dsh web 加载(面板页会提示「宿主进程是旧版本」)。另注意通知与运行状态已各自独立成菜单项,需在功能坞里分别开启「任务通知」「运行状态」。
  • 用量记录空白:确认 dsh 是较新版本且插件宿主已加载(查看启动日志含 [dsh-dock] host half loaded);旧宿主进程需重启 dsh web 加载新路由。
  • 费用不准 / 与实际账单对不上:金额是按单价估算的,官网抓取来的刊例价不代表你的实际计费。在用量记录页点「单价设置」(独立子弹窗,可最大化/拖动/缩放),按模型填真实单价并保存(持久化到宿主配置),费用会立即按自填单价重算;每个模型还支持多段分时价(跨零点 / 半点边界 / 每天·仅工作日·仅周末节假日)+ 全局法定节假日列表。计价优先级为「自定义单价 > 官网同步价 > 内置价 > 兜底价」,明细里走兜底价的金额会标「兜底」。
  • 余额显示「需登录 / 无密钥」:对应 Provider 未在 dsh 凭据中配置可查询余额的密钥,属正常状态提示。「DeepSeek 账号」显示「需登录」则是设置里那条官方账号没登录(或登录已失效),去设置 → 模型里登录一次即可。
  • 切模型 / 打开历史会话卡住,报 preset "…" failed to mount:这是该 agent 预设与 dsh 版本 的 schema 漂移,不是本插件的问题。预设目录在 ~/.dsh/.agent-presets/<id>/,dsh 升级后预设里的 行可能不再合法(例如 @deepseek-ai/dsh-persona 在 0.1.5-rc.1 把 config.text 改为必填的 config.prefix + config.suffix),导致绑定了它的会话无法 resume。修法:把该预设与 dsh 自带的 standard 预设对齐(照抄新字段,保留自己的 persona 正文);细节见 docs/workflow.md §6「升级核对」。

开发:新增一个功能模块

开发流程、提交/推送约定与发版流程见 docs/workflow.md(唯一真源); 配套 agent 预设为 dsh-dock 插件开发。改动历史见 docs/session-notes.md。

每个功能是一个 features/<id>/ 目录,由两部分组成:

features/<id>/
  host.js        # 宿主半部:注册 RPC 路由 / 定时任务(纯 ESM,零构建)
  view.js(x)     # 客户端视图:渲染面板内容(自带样式,CSS 类名带前缀隔离)

在视图模块导出功能描述符:

export const feature = {
  id: "my-feature",
  name: "我的功能",
  order: 160,              // 菜单排序(首页固定第一,数值越大越靠后)
  accent: "#22c55e",       // 品牌色
  description: "…",
  css: "…",
  View: MyView,            // 面板内容组件,收到 { ctx, feature, params }
  HomeStat: MyStat,        // 可选:首页总揽卡片统计
  Chip: MyChip,            // 可选:会话输入区小控件
  Overlay: MyOverlay,      // 可选:功能全局浮层(功能启用即常驻整页挂载,如任务动效/通知)
};

外壳只做组装:宿主半部在 index.js 注册,客户端在外壳 src/client.jsx 装配。 每个模块可整体拎出单独打包发布(scripts/extract-feature.mjs 生成独立包骨架, 独立包装回后经 dockBridge 注册回功能坞菜单)。

硬约定:路由入口必须先过浏览器信任栅栏

webServer 的命名路由由载体直接派发给 handler,载体本身不拥有认证或 Origin 策略; /api 的 Host/Origin 校验与会话认证由 Connection 在自己的 FetchHandler 上做,管不到 插件注册的命名路由。所以任何自行注册的路由,第一件事必须是:

import { rejectUntrustedRequest } from '../../src/host-core.js'
// …
async handler(req, res) {
  if (rejectUntrustedRequest(ctx, req, res)) return   // 401 无会话 / 403 来源不可信
  // …业务逻辑
}

不挂守卫 = 任何能连到端口的人都能直接调用它(可写配置、写凭据库、发起带着本机密钥的出站请求)。 node scripts/test-route-trust-host.mjs 会静态检查每一处 webServer.register 都挂了守卫, 并行为验证 401/403/栅栏缺失(fail-closed)三条路径——新增路由务必让这条用例继续绿。

许可

MIT