DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-dock

Dock

DeepSeek Harness dock plugin (dsh-dock): a modular feature hub—each feature is a module under features/ (which can be extracted and published as a standalone package, then installed back into the panel via dockBridge). Includes usage tracking (LLM call accounting and cost statistics, with custom per

The plugin will be installed here. Keep web if you are unsure.

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

Description

DeepSeek Harness dock plugin (dsh-dock): a modular feature hub—each feature is a module under features/ (which can be extracted and published as a standalone package, then installed back into the panel via dockBridge). Includes usage tracking (LLM call accounting and cost statistics, with custom per-model rates, multi-period time-based rates, and off-peak rates for weekends/holidays), model settings, an image understanding proxy, model balances, task animations (19 running animations + desktop companion 3D scenes), task notifications (completion/error/confirmation-required notifications, alert sounds, optional voice announcements with selectable voices, system notifications, DingTalk/Lark pushes), runtime status (overview of running tasks and recently completed tasks), and text-to-speech (browse

Compatibility and provenance

Dock is published as dsh-dock and currently resolves to version 0.21.2. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
11/4/2026

Versions

0.21.2stable
11/4/2026
0.21.1stable
11/4/2026
0.21.0stable
11/4/2026
Show 38 more versionsCollapse versions
0.20.0stable
11/3/2026
0.19.0stable
11/1/2026
0.18.0stable
10/28/2026
0.17.0stable
10/24/2026
0.16.1stable
10/23/2026
0.16.0stable
10/23/2026
0.15.0stable
10/12/2026
0.14.0stable
10/10/2026
0.13.0stable
10/1/2026
0.12.0stable
9/23/2026
0.11.6stable
9/23/2026
0.11.5stable
9/20/2026
0.11.4stable
9/20/2026
0.11.3stable
9/16/2026
0.11.2stable

Related plugins

Loading related plugins…

Latest
0.21.2
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
4.8 MB
Files
62
Surface
web
License
MIT
Source
npm
GitHub
★ 15
Weekly downloads
887
Security scan
✓ v0.21.2 scan passed
Last push
11/4/2026
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
9/14/2026
0.11.1stable
9/14/2026
0.11.0stable
9/10/2026
0.10.3stable
9/10/2026
0.10.2stable
9/10/2026
0.10.1stable
9/10/2026
0.10.0stable
9/9/2026
0.9.9stable
9/9/2026
0.9.8stable
9/8/2026
0.9.7stable
9/7/2026
0.9.6stable
9/6/2026
0.9.5stable
9/4/2026
0.9.3stable
9/3/2026
0.9.2stable
9/2/2026
0.9.1stable
9/2/2026
0.9.0stable
9/2/2026
0.8.0stable
8/27/2026
0.7.1stable
8/26/2026
0.7.0stable
8/25/2026
0.6.0stable
8/24/2026
0.5.0stable
8/23/2026
0.4.1stable
8/22/2026
0.4.0stable
8/22/2026
0.1.0stable
8/21/2026

Related plugins

More verified plugins in productivity-workflow.

Ds Harness Remoteds-harness-remoteEnd-to-end encrypted remote access to DeepSeek Harness and experimental Codex workspaces from desktop, web, and Android, with dsh-TUI Host support.Archive Manager@michengai/dsh-archive-manager归档、恢复、收藏和永久删除会话,并诊断损坏的会话日志。 · Archive, restore, favorite, and permanently delete sessions, and diagnose damaged session logs.Scriptor@linfengqaqtat/dsh-scriptorWebnovel Writer: DSH Long-Form Web Novel Writing WorkspaceMattpocock Skills Deckdsh-mattpocock-skills-deck🌹 Includes 27 engineering and productivity skills from mattpocock/skills v1.3.2 upon installation, with no need to install skills manually. Built using 52 billion tokens, this plugin provides 10× development efficiency on top of the original skills and helps beginners get started with the skill sui

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