dsh-dashboard
by Howardzhangdqs
DeepSeek Harness(DSH)web 界面的工作台插件:为会话视图补充侧边栏、底部面板与一组文件/任务工具面。单包双半结构(host + client),按 DSH 官方插件规范组织,不修改宿主源码。
A workbench plugin for the DeepSeek Harness (DSH) web interface: adds a sidebar, bottom panels and a set of file and task panes to the session view. Single-package dual-half structure (host + client), organized per the official DSH plugin spec without touching host source.
安装
dsh plugin --profile web add github:Howardzhangdqs/dsh-dashboardGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
DeepSeek Harness(DSH)web 界面的工作台插件:为会话视图补充侧边栏、底部面板与一组文件/任务工具面。单包双半结构(host + client),按 DSH 官方插件规范组织,不修改宿主源码。
核心能力:文件资源管理、编辑与多种格式预览、真实终端、Git 面板、后台任务视图,以及供第三方插件注册扩展页面与文件预览器的 ctx.dashboard 服务。
基于 omdsh-dev/DSH-better-sidebar 二次开发(fork,v0.10.3),后续演进独立进行;上游的接入文档由本仓库的 AGENTS.md 延续。
中文 · English
概述
DSH 的会话视图原生提供对话流与轨迹两栏,长任务中对工作区文件的查看、编辑与对照需求没有承载面。本插件在会话视图右侧挂载一个 VSCode 式工作台:右侧栏与底部面板各持有独立的标签页体系,支持分栏与拖拽;所有状态(布局、分栏、标签、面板开关)按会话隔离持久化。
技术路线要点:
- 零宿主侵入。插件作为独立 npm 包被 profile 引用,通过 cordis 挂载机制接入;不改 DSH 源码、不反向依赖其构建。
- host/client 双半。host 半提供会话级 HTTP/WebSocket API(文件系统、git、伪终端、媒体路由),全部经过与宿主
/api一致的信任围栏;client 半通过 slot 机制挂接界面。 - 按需加载。重依赖(Univer、docx-preview、pptx-renderer、CodeMirror、xterm)按功能分块,首次使用时经插件自有路由下发;核心包约 325KB。
演示视频与界面截图见发布页。
功能
文件与编辑
- 资源管理器:懒加载目录树(根 = 会话 cwd),点击在侧边栏打开;行尾悬浮按钮插入
@文件引用到输入框;右键复制相对/绝对路径。 - 编辑与预览:CodeMirror 6 多语言语法高亮,Ctrl/Cmd+S 原子保存;图片、Markdown(预览/编辑切换)、HTML(沙箱 iframe,可加载相对资源)、PDF、Word、Excel、PPT 内联预览;切换标签不丢失未保存草稿。
工作台
- 分栏体系:拖动标签拆分/合并分栏(支持跨面板拖动),分隔线调节比例;两面板共享拐角,可双向拖动调节尺寸。
- 底部面板:与右侧栏同构的第二个工作台,只挤占中间 Agent 输出区;右侧栏折叠时自动延伸至对话与轨迹两列下方;首次展开可自动开启一个终端(可在设置中关闭)。
- 输入框折叠:输入卡可折叠为单行——左侧保留「+ 附加文件」与权限选择(仅图标),中间为单行输入(内容换行后逐行增高,与展开态同上限后转为内部滚动),右侧为展开按钮、模型选择、上下文占用环与发送。折叠带动画过渡(盒高 FLIP 与渐隐),遵循系统减弱动态偏好;状态持久化。
- 会话隔离:布局/分栏/标签/面板状态按会话持久化于 localStorage,陈旧状态自动清理。
扩展面
- 终端:xterm.js + node-pty 真实 shell(每会话 3 个界面实例上限),标签保活、断线重连回放;可选择为模型注入 8 个
terminal_*工具。 - Git 面板:真实 diff 与 diff 标签页、懒加载提交历史、暂存/放弃/提交/还原/捡取。
- 后台任务页:主会话的完整 agent 拓扑与执行记录跳转;同页汇总当前树的后台任务(类型徽标 + 退出码,实时输出为非消费式 peek,不干扰模型的
job_output;二次确认后可强制终止)。 - 移动端:视口 < 768px 时仅保留右侧栏,底部面板的标签页并入其标签条,以全宽抽屉呈现。
平台服务
ctx.dashboard服务:第三方插件可注册侧边栏页面(tab)与文件预览器(viewer);内置 6 个 tab 与 9 个 viewer 也经同一服务注册。v0.10.5 随包改名,旧服务名ctx.betterSidebar作为兼容别名仍然解析——已接入的外部插件无需修改。- 声明式设置:设置页按注册表渲染功能清单(可逐项启停),功能相关的二级设置经原生弹窗编辑。
- 多语言:界面文案跟随 DSH 语言设置(zh/en),Host 偏好优先于浏览器语言,切换实时生效。
安装(从源码)
从源码构建安装。前置:DSH 已安装(dsh web 可运行),Node.js ≥ 22.13(DSH 基座依赖 Node 22+ API,如 Promise.withResolvers、zlib.createZstdDecompress),pnpm ≥ 10。
# 1. 克隆并构建
git clone https://github.com/Howardzhangdqs/dsh-dashboard.git ~/Code/dsh-dashboard
cd ~/Code/dsh-dashboard && pnpm install && pnpm build
# 2. 放行 node-pty / protobufjs 构建脚本(pnpm 11 默认拦截;pnpm 10 可跳过)
cd ~/.dsh/profiles/web
cat >> pnpm-workspace.yaml <<'YAML'
onlyBuiltDependencies:
- node-pty
- protobufjs
YAML
# 交互终端也可用 pnpm approve-builds 选择;上面的 YAML 形式幂等、可脚本化
# 3. 依赖指向本地克隆(package.json 的 dependencies)
# "dsh-dashboard": "link:/home/you/Code/dsh-dashboard"
# 4. 追加挂载行(cordis.patch.yml)
# - insert:
# - id: dashboard
# name: 'dsh-dashboard'
# 5. 安装并重启
pnpm install
完成后重启 DSH 并硬刷新(Cmd/Ctrl+Shift+R)。
更新:git pull && pnpm install && pnpm build 后重启 DSH(仅 client 改动可硬刷新)。
git clone https://github.com/Howardzhangdqs/dsh-dashboard.git ~/Code/dsh-dashboard
cd ~/Code/dsh-dashboard; pnpm install; pnpm build
cd ~\.dsh\profiles\web
Add-Content -Path pnpm-workspace.yaml -Value "`nonlyBuiltDependencies:`n - node-pty`n - protobufjs"
# package.json dependencies: "dsh-dashboard": "link:<克隆绝对路径>"
# cordis.patch.yml 追加:
# - insert:
# - id: dashboard
# name: 'dsh-dashboard'
pnpm install
路径含空格时给 link: 值加引号。重启 DSH 后硬刷新。
每个版本随 GitHub Release 附带 pnpm pack 产出的预构建 tarball(含 lib/ 产物与 dsh.plugin.json,无 sourcemap)。dsh plugin add 接受任何 pnpm 依赖形式,直接指向附件 URL 即可:
dsh plugin --profile web add https://github.com/Howardzhangdqs/dsh-dashboard/releases/download/v0.10.5/dsh-dashboard-0.10.5.tgz
pnpm 对远程 tarball 不执行构建脚本,装的就是附件里的预构建产物;包内 dsh.bundle 声明使 dsh plugin 自动完成挂载。node-pty 原生模块仍需在 profile 目录放行构建(pnpm-workspace.yaml 加 onlyBuiltDependencies: [node-pty, protobufjs] 后 pnpm rebuild node-pty,需 make/g++/python3 工具链)。升级时改 URL 中的版本号重跑即可。
上游 omdsh-dev/DSH-better-sidebar 以 dsh-better-sidebar 发布到 npm;本仓库(改名后的 dsh-dashboard)不发布 npm,用源码或 Release 附件安装。仓内一键脚本(scripts/install.sh / scripts/install.ps1)保留作参考。
| 现象 | 原因与处理 |
|---|---|
Ignored build scripts |
pnpm 11 拦截构建脚本。在 profile 的 pnpm-workspace.yaml 加 onlyBuiltDependencies: [node-pty, protobufjs] 后 pnpm rebuild node-pty(交互终端也可 pnpm approve-builds 选择)。 |
minimum release age / 版本不足 24h |
pnpm 拦截发布不足 24 小时的依赖版本。在 pnpm-workspace.yaml 的 minimumReleaseAgeExclude 下加该包名,或等待 24 小时。 |
| 「找不到 profile 目录」 | 先运行一次 dsh web 初始化 ~/.dsh/profiles/web。 |
| 页面出现两个侧边栏 | 双挂载:~/.dsh/profiles/web/cordis.patch.yml 存在重复的手动挂载行(如上游旧名 id: better-sidebar 与 id: dashboard 并存),删除多余的那段。 |
| Windows 终端不可用 | node-pty 依赖预编译二进制;当前 Node 版本无对应产物时需编译工具链(VS Build Tools)。主流 Node 版本一般已有预编译。 |
启动报 Promise.withResolvers is not a function / createZstdDecompress 未导出 |
Node 版本低于 DSH 基座要求(≥ 22.13)。升级 Node 后重启。 |
| Windows 无 bash / curl | 使用 PowerShell 等价步骤,或安装 Git Bash / WSL。 |
克隆后 pnpm install && pnpm build;日常循环用 pnpm watch(tsdown 增量)+ pnpm test。调试期 profile 依赖保持 link: 指向工作区即可;仅 client 改动硬刷新生效,host 半改动需重启 DSH。
前置:DSH 已集成 plugin-registry(dsh registry 可用)。两个通道同时启用会双挂载(Node 半加载两次、页面出现两个侧边栏)。
git clone https://github.com/Howardzhangdqs/dsh-dashboard.git && cd dsh-dashboard
pnpm install && pnpm build
node scripts/package-registry.mjs # 组装 registry/ 暂存(清单 + 产物 + README,不入库)
dsh registry install ./registry # 安装(默认禁用)
dsh registry enable dsh-external/dsh-dashboard
更新:git pull && pnpm install && pnpm build → node scripts/package-registry.mjs → dsh registry uninstall/install/enable。切换通道前先移除另一通道的挂载。
快捷键
| 操作 | 按键 |
|---|---|
| 保存编辑 | Ctrl/Cmd + S |
| Git 提交 | Ctrl + Enter |
| 关闭标签 | 鼠标中键 |
| 拆分/合并分栏 | 拖动标签至分栏边缘 / 中间 |
| 引用文件到输入框 | 悬浮行尾 @文件 按钮 |
| 复制文件路径 | 右键行 → 复制相对/绝对路径 |
服务接口:注册页面与文件预览器
自 v0.4.0 起暴露 ctx.dashboard 服务(v0.10.5 随包改名;旧名 ctx.betterSidebar 作为兼容别名仍然解析),第三方插件可注册侧边栏页面与文件预览器:
import type {} from 'dsh-dashboard' // 触发 ctx.dashboard 类型合并
export const inject = ['dashboard'] // 旧名 'betterSidebar' 别名同样有效
export function apply(ctx: Context) {
ctx.effect(() => ctx.dashboard.registerTab({
id: 'my-plugin:db', title: 'Database', component: ({ scope }) => <DbView sessionId={scope.sessionId} />,
}))
}
完整接入文档(TabDescriptor / FileViewerDescriptor 字段定义、匹配算法、HMR 生命周期、声明式设置)见 AGENTS.md。
开发与构建
pnpm install # @deepseek-ai/* 已发布到 npm(^0.1.0-rc.6),直接解析
pnpm typecheck # tsc --noEmit
pnpm build # → lib/index.js + lib/invariant.js + lib/client.js + lib/client-registry.js + lib/types
pnpm test # vitest(含 manifest 一致性守卫;需先 build)
pnpm watch # tsdown --watch
架构:单 npm 包、host/client 双半结构。host 半(src/index.ts)提供 /sidebar/api/* JSON API、/sidebar/file 媒体路由、/sidebar/html 预览路由、/sidebar/ws/terminal WebSocket(文件系统 / git / 伪终端 / 预览,全部会话级并经信任围栏);client 半(src/client/index.tsx)负责 portal 侧边栏、各视图与拦截;状态按会话持久化于 localStorage。运行期不依赖 npm 或源码 checkout(@deepseek-ai/* 由 web profile 提供)。
安全
- 路由受 Host 头信任围栏保护(与
/api一致);fs.write原子写入;媒体/预览路由仅限会话 cwd 内文件;git 仅调用 CLI,不设置身份。 - HTML 预览的内容在不透明源沙箱 iframe 中渲染:无
allow-same-origin/allow-top-navigation、no-referrer、权限策略全禁;/sidebar/html路由附加 CSPsandbox与大小/路径边界。 - 界面实时显示沙箱状态(关闭时红色警示),可临时解锁当前页面;设置页可按功能关闭沙箱(默认关闭该开关并附警告文案)——关闭后内容与界面同源,仅建议用于完全可信内容。
已知限制
- Git 不支持 push/pull/fetch;无文件监听(手动刷新);工具行内文件打开按钮不可拦截。
- 终端标签拖至另一分栏会重挂载(shell 重启)。
.xlsx预览不保留单元格样式(SheetJS 社区版限制);Office/PPTX 预览内联进 client bundle(约 23MB),首次加载较慢。- HTML 预览渲染已保存文件(不反映未保存草稿)。
- 移动端(<768px)无底部面板:进入窄屏时其标签页一次性并入右侧栏;桌面端底部面板仅在宽视口可用。
平台支持
Windows / Linux / macOS 三平台适配(Linux 日常验证,其余经单元测试覆盖)。node-pty 优先使用预编译二进制,缺失时需编译工具链(Windows VS Build Tools / Linux make+g+++python3 / macOS Xcode CLT)。
许可
MIT(见 LICENSE)。
原始 README: https://github.com/Howardzhangdqs/dsh-dashboard/blob/main/README.md ↗
同类插件
查看全部 →
dsh-web-ui-all
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。

dsh-web-ui
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。

dsh-TUI
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。

DSH-better-sidebar
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。

working-activity
让 agent 的"工作状态行"活过来——实时工具动态与进度、俏皮文案、模型自述、上下文预警。同一套想法,适配两个平台: pi CLI 与 DeepSeek Harness(DSH) 。

deepseek-idesign
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。