Skip to content

Latest commit

 

History

697 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dsh-better-sidebar

Important

v0.19.0 起接入 DSH 原生侧边栏:右列就是 DSH 自己的右侧栏,插件把每个 tab 类型注册为原生 tab(不再自绘右侧面板),只保留自绘的底部工作台与开放给所有插件的 ctx.betterSidebar 服务。

v0.21.1 起要求 DSH 0.1.7-rc.1+(peer 下限 ^0.1.7-rc.1;本版即 npm latest)。DSH 0.1.7 自带完整文档预览,插件把只读预览(表格 / PDF / 图片 / Office)整体让给内置,只保留 Markdown / HTML 与可编辑的代码编辑器。0.1.6-alpha.2 及更早的用户请固定 dsh-better-sidebar@0.19.1;按 DSH 版本选插件版本的对照表见安装。

一个服务化的侧边栏框架,一套开箱即用的完整工作台

npm version npm downloads CI GitHub stars License: MIT dshfind

支持的 DSH 版本(v0.21.1):0.1.7-rc.1+ 插件生态:GitHub topic dsh-better-sidebar

文件管理 编辑预览 底部工作台 文件变动 后台任务 侧边对话 插件接入

右侧栏 + 底部面板双工作台,并把 ctx.betterSidebar 服务开放给所有插件——
通过 registerTab / registerFileViewer 注册新的侧边栏页面与文件预览器。
🌏 中文 · English
dsh-better-sidebar 工作台截图
2026-08-12.18-35-26.mp4

📑 目录

✨ 功能一览

相比 DSH 官方侧边栏,本插件补上的关键能力:

  • 🖥️ 可编辑的代码编辑器:官方文档预览是只读的 → 插件保留可编辑的 CodeMirror 编辑器(保存、语法高亮、预览切换);Markdown / HTML 也走插件自有渲染(Mermaid 图表安全渲染 + 点击放大、README 级内嵌 HTML、浮动目录大纲、HTML 沙箱预览)
  • 🗂️ 增强文件树:接管内置「文件」页——懒加载目录树、展开的目录实时 watch 自动刷新、软链接识别、全局文件名搜索、拖拽上传、悬浮 @文件 一键引用进输入框
  • 🌿 文件变动(官方侧栏没有 Git 面板):Git 视角(diff / 历史 / 暂存·提交·还原)+ 本轮 AI 改动视角双合一,统一 diff 渲染(行内字符级高亮、语法着色、敏感内容脱敏)
  • 🧩 任务管理(官方没有):子代理拓扑实时预览 + 后台任务清单(退出码 / 实时输出 / 强制终止)
  • 💬 侧边对话(官方没有,beta):Codex 风格侧边线程——继承主会话完整上下文独立运行,可持续追问,一键提升为顶层会话
  • 🖥️ 底部工作台(官方没有):右列交给 DSH 原生右侧栏,插件另加自绘底部工作台(拖拽分栏 / 按会话持久化),可与原生栏同时展开
  • 📂 模型打开侧边栏(可选):sidebar_open 工具让模型主动在侧边栏打开文件 / 文件夹 / 网页
  • 🔌 服务化扩展:ctx.betterSidebar 向所有插件开放(registerTab / registerFileViewer),内置 5 tab + 3 viewer 走同一套 API,已有 28+ 生态插件(见「🌐 插件生态」)
  • ⚡ 按需加载:启动只拉 ~325KB 核心,编辑器 / Mermaid / 第三语言词典按需加载 · 🌏 多语言跟随 DSH · 🔁 会话隔离按会话持久化布局

🚀 安装

前置:已装好 DSH(dsh web 能正常运行),Node.js ≥ 20、pnpm ≥ 10。

支持的 DSH 版本: 支持的 DSH 版本(v0.21.1):0.1.7-rc.1+

📌 通道与支持线:v0.21.1 是正式版(npm latest),仅适配 DSH 0.1.7-rc.1+。装 DSH 请写精确版本号:npm i -g @deepseek-ai/dsh@0.1.7-rc.1(rc.1 走 npm next 通道)。DSH 0.1.6-alpha.2 及更早的用户请固定 dsh-better-sidebar@0.19.1——0.1.7 的破坏面(设置服务重写、图标导出改名、会话格式 v3→v4)大到本版不写兼容层。

🧭 按你的 DSH 版本选插件版本:

你的 DSH 版本 安装命令 版本 / peer 声明
0.1.7-rc.1+(含之后的 0.1.7 正式版) dsh plugin --profile web add dsh-better-sidebar@latest 0.21.1,^0.1.7-rc.1
0.1.7-alpha.1 / 0.1.7-alpha.2 没有可装版本——先把 DSH 升到 rc.1,再跑上一行:
npm i -g @deepseek-ai/dsh@0.1.7-rc.1
—
0.1.6-alpha.2 及更早、0.1.5-rc.*(含 npm latest 的 0.1.5-rc.3) dsh plugin --profile web add dsh-better-sidebar@0.19.1 0.19.1,^0.1.5-rc.1
0.1.5-alpha.2 dsh plugin --profile web add dsh-better-sidebar@0.19.0-alpha.1 ^0.1.5-alpha.2
0.1.2-rc.* dsh plugin --profile web add dsh-better-sidebar@0.18.1 ^0.1.2-rc.1
0.1.2-alpha.2 dsh plugin --profile web add dsh-better-sidebar@0.18.0-alpha.0 ^0.1.2-alpha.2
0.1.0-rc.8 / 0.1.1 dsh plugin --profile web add dsh-better-sidebar@0.17.1 ^0.1.0-rc.8

命令里的 web 换成你自己的 profile 名即可。旧版本一律写精确版本号(@0.19.1 而不是 @latest),因为 latest 会随新正式版前移;反过来也不要在 0.1.7 的 alpha 上装 0.19.1,装上只会坏。

dsh plugin --profile web add dsh-better-sidebar@latest

本版不依赖任何需要构建脚本的包(终端连同 node-pty 已整体交还 DSH),安装一步到位;装完后可在 DSH 自带的 Plugins 页面直接启停。

装完硬刷新浏览器(Cmd/Ctrl+Shift+R)即可看到侧边栏(DSH 对 client 改动热加载,无需重启;仅 host 半更新时需要重启)。

方式二:让 DSH 自己装——把下面这段提示词发给任意一个 DSH 会话:

帮我安装 dsh-better-sidebar 插件(DSH 侧边栏工作台),步骤:
1. 执行 dsh plugin --profile web add dsh-better-sidebar@latest(latest 即当前正式版)
2. 完成后提醒我硬刷新浏览器(Cmd/Ctrl+Shift+R)
遇到报错先查 https://github.com/omdsh-dev/DSH-better-sidebar README 的常见问题表。

方式三:一键脚本——克隆本仓库后执行 bash scripts/install.sh(macOS / Linux / Windows Git Bash;Windows 原生环境用 install.ps1;-h 查看参数),自动完成安装 + bundle 注册(含幂等清理旧的手动挂载行)。

更新
dsh plugin --profile web add dsh-better-sidebar@latest

也可把 ~/.dsh/profiles/web/package.json 里的版本号改高后 pnpm install。改完硬刷新浏览器(Cmd/Ctrl+Shift+R)即可(client 改动无需重启 DSH)。

常见问题
现象 原因与解决
报 Ignored build scripts pnpm 11 拦截了某个传递依赖的构建脚本。在 profile 目录(~/.dsh/profiles/web)跑 pnpm approve-builds 按提示放行——本插件自身已无构建脚本依赖(终端删除后 node-pty 不在依赖里)。
报 minimum release age / 版本不足 24h 装的版本发布不足 24 小时。等 24h 或重跑一次(pnpm 会自动补 minimumReleaseAgeExclude)。
报「找不到 profile 目录」 先跑一次 dsh web,让它初始化 ~/.dsh/profiles/web。
页面出现两个侧边栏 双挂载。旧的手动挂载行:~/.dsh/profiles/web/cordis.patch.yml 还留着 - insert: ... better-sidebar ...,删掉那段(同 id 重复挂载 loader 会直接报 duplicate loader entry id)。聚合包(如 @linxin666/dsh-web-ui-all)以不同 id 挂载本包时,0.13.x 起插件自身 bundle patch 会自动退让(检测到已有启用中的同包名挂载就不挂自己),无需手动处理;若仍双挂载,先确认聚合包的 bundle 顺序在 dsh-better-sidebar 之前。
升级后设置页的值去哪了 DSH 0.1.7 删除了插件可注册的设置命名空间:偏好现在写在 profile 里本插件的挂载行上(默认 entry id better-sidebar),不再是 ~/.dsh/settings.yaml。插件会在首次启动时把旧 settings.yaml(已被宿主改名为 settings.yaml.imported)里 dsh-better-sidebar 段一次性回迁,只迁移当前 schema 仍声明的字段、且只在该行还没有用户值时执行,不会覆盖升级后新设的值。
终端无法使用 / 提示 shell 启动失败 终端由 DSH 自身的 ui-sidebar-terminal 提供(本插件不再自带终端与 node-pty,也没有终端相关设置项)。遇到问题请查 DSH 侧文档;若报错提到构建脚本,见上一行。
提示 dsh: command not found 先安装 DSH;或直接用 npx -y --package @deepseek-ai/dsh dsh plugin --profile web add dsh-better-sidebar@latest。
从源码安装 / 开发(可选,替代 npm 方式)

调试本地改动或跟随开发分支时,把依赖指向本地克隆并自行构建:

1. git clone https://github.com/omdsh-dev/DSH-better-sidebar.git ~/Code/DSH-better-sidebar
   cd ~/Code/DSH-better-sidebar && pnpm install && pnpm build
2. ~/.dsh/profiles/web/package.json 的 dependencies 写 "dsh-better-sidebar": "link:<克隆目录绝对路径>"
3. ~/.dsh/profiles/web/cordis.patch.yml 追加挂载行(这一行的 `config` 就是本插件的设置表单:部署限额 `readLimit` / `mediaLimit` / `uploadLimit` / `listLimit` 加用户偏好字段,设置页写的就是它;不写则全部用 schema 默认值):
   - insert:
       - id: better-sidebar
         name: 'dsh-better-sidebar'
         config:
           readLimit: 524288
4. 在 ~/.dsh/profiles/web 执行 pnpm install
5. 硬刷新浏览器(Cmd/Ctrl+Shift+R)即可看到效果(client 改动无需重启 DSH;host 半改动才需重启)

更新:git pull && pnpm install && pnpm build → 硬刷新浏览器即可(client 改动热加载生效,无需重启 DSH;host 半改动才需重启)。切回 npm 通道时,把依赖改回 npm 上的对应版本(稳定线 "^0.19.1";本线 "^0.21.1")再 pnpm install。

通过 plugin-registry 安装(可选,与上述二选一)

前置:DSH 已集成 plugin-registry(dsh registry 可用)。同时启用两个通道会双挂载(Node 半挂两次、页面两个侧边栏)。

git clone https://github.com/omdsh-dev/DSH-better-sidebar.git && cd DSH-better-sidebar
pnpm install && pnpm build
node scripts/package-registry.mjs   # 组装 registry/ 暂存(含清单 + 产物 + README,不入库)
dsh registry install ./registry     # 安装(默认禁用)
dsh registry enable dsh-external/dsh-better-sidebar

更新:git pull && pnpm install && pnpm build → node scripts/package-registry.mjs → dsh registry uninstall/install/enable。切换通道前先移除另一通道的挂载。

🖼️ 特性巡礼

以下均为真实界面实拍(每行两张,点击可放大)。

🗂️ 文件工作台:资源管理器
支持两种格式的资源管理器:内嵌在文件预览中 / 独立显示文件树。懒加载目录树、展开的目录由宿主按目录 watch、改动后自动重列、软链接按目标类型展示(目录软链接可展开、失效链接标红)、全局文件名搜索、上传文件/文件夹与拖放上传、右键菜单(在新 Tab 打开 / 在侧边打开 / 复制路径)、悬浮 @文件 一键引用进输入框。
文件资源管理器
📝 Markdown · HTML 内联预览
Markdown 预览支持 Mermaid 图表(securityLevel: 'strict' 安全渲染 + 二次清洗;点击图表弹窗放大、滚轮缩放、拖拽平移)、README 级内嵌 HTML(徽章墙 <div align=center>、<details> 折叠块内嵌 markdown、表格单元格内联标签——DOMPurify 白名单消毒真实渲染,<script> 等活性内容剥除,本地图片经会话媒体路由重写)与浮动目录大纲(≥3 标题出现,点击平滑跳转、自动展开折叠块);HTML 走插件自带的沙箱预览,并带 htmlViewerNoSandbox / htmlViewerDefaultUnsafe 两个宿主没有的逃生门开关。图片 / PDF / 表格 / Office 不再是插件能力——那些格式由 DSH 自己的文档预览渲染。
Markdown + Mermaid 预览
🖥️ CodeMirror 代码编辑器
可编辑的文本 / 代码编辑器(保存、语法高亮、预览切换)——宿主自己的文档预览是只读的,这是插件保留 catch-all viewer 的理由。
CodeMirror 代码编辑器
🖼️ 图片 / PDF / 表格 / Office 预览(由 DSH 内置提供)
这些只读格式由 DSH 自己的 ui-sidebar-documentpreview 渲染:宿主侧 Office→PDF 转换、电子表格 worker 表格、图片 / PDF 缩放视口,并按目录自动刷新。插件已删除自己的 image / pdf / 下载兜底 viewer,也不再认领这些扩展名。
图片内联预览
💻 终端(由 DSH 内置提供)
右侧栏终端由 DSH 自己的 ui-sidebar-terminal 提供:shell 选择、双击重命名、断线重连、刷新后恢复、主题与对比度跟随。插件不再自带终端实现。

⚠️ 模型侧提示:插件原来自带的 8 个 terminal_* 工具(默认关)是模型唯一的跨调用持久终端;上游等价物 @deepseek-ai/dsh-tool-terminal 未被任何内置 bundle 默认挂载,若你需要该能力,请在 profile 的 cordis.patch.yml 里自行插入一行 tool-terminal。

真实终端
🌿 文件变动:Git 视角 + 本轮文件
双视角合一:Git 视角保留完整源代码管理(暂存 / 取消暂存 / 提交(Ctrl+Enter)/ 还原、历史、worktree 与子仓库选择);本轮文件视角实时折叠会话事件日志,记录模型读 / 写 / 编辑的每个文件(按文件分组、按类型筛选、操作数角标)。点击任意改动在底部可拖拽预览面板查看统一 diff——删红 / 增绿 / 改蓝配对 + 行内字符级高亮 + 语法着色 + 上下文折叠——也可一键展开为 VSCode 式独立 diff tab(同一渲染栈)。
文件变动
🌐 外链接管(浏览器视图由 DSH 提供)
网页 tab 是 DSH 自己的 ui-sidebar-browser(多开 / 后退前进刷新 / 地址栏 / 沙箱 iframe),0.1.7 起只在 desktop profile 挂载——Web profile 里没有这个 kind。插件保留宿主没有的那一半:只认领有 tab 类型通过 urlTarget 明确声明的链接(Ctrl/Cmd 点击始终放行),其余一律放行给宿主(正文链接的去向由宿主的用户设置 linkOpening 决定);按协议分流的三个外链接管设置项已删除,认领成功但目标类型此刻不可用时兜底到 window.open。
内嵌浏览器
🧩 任务页:子代理拓扑 + 后台任务
子代理树实时拓扑(运行状态、批量实时预览)+ 后台任务清单(退出码 / 实时输出 / 强制终止);新子代理 / 新任务可自动激活任务页,宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉(可关)。
任务页:子代理拓扑
💬 侧边对话(beta)
Codex 风格侧边线程:每个对话一个独立 Tab;线程继承主会话完整上下文(含进行中回合,以 interrupted 诚实冻结)独立运行,不污染主会话;可持续追问、重启冷恢复;一键「保存为新会话」提升为顶层会话。
侧边对话(beta)
🖥️ DSH 原生右侧栏 + 插件底部工作台
右列是 DSH 自己的右侧栏:插件把每个 tab 类型注册成原生 tab(含接管内置「文件」页),聊天里的文件点击直接落到原生栏——宿主自己的文档预览已覆盖的格式由宿主渲染,插件只认领 Markdown / HTML / 可编辑代码;插件自有底部面板可与其同时展开,拖 Tab 到分栏边缘拆分、拖到中间合并,高度拖上缘调节;开合按钮在会话头右侧。
双工作台(右侧栏 + 底部面板)
⚙️ 声明式设置
设置页「侧边卡片」分区:每个 tab / 预览器一张小卡片,独立开关(高亮启用态 + 品牌开关滑块);二级设置经卡片底部「功能设置」条弹窗(开关 / 文本 / 数字 / 下拉);插件自有设置持久化在 pluginSettings,整份偏好则写在 profile 里本插件的挂载行上(DSH 0.1.7 起设置按 Loader entry id 寻址)。
声明式设置:侧边卡片
📱 移动端
窄屏(<768px)自动切换为全宽抽屉:底栏 tab 一次性并入右侧栏,触屏拖拽可调。
移动端全宽抽屉

💬 社区

推荐添加QQ群(577011007)

微信群二维码 QQ群二维码

🆕 最近更新

支持的 DSH 版本:支持的 DSH 版本(v0.21.1):0.1.7-rc.1+ · 完整发布历史见 Releases

v0.21.1

📦 正式版(npm latest):仅支持 DSH 0.1.7-rc.1+(peer 下限 ^0.1.7-rc.1,CI 钉 @deepseek-ai/dsh@0.1.7-rc.1)。DSH 0.1.6-alpha.2 及更早的用户请固定在 v0.19.1——0.1.7 动了设置服务、图标具名导出与会话格式三处硬契约,本版不写运行时兼容层。⚠️ 上一版 v0.20.0 从未发布到 npm:它的终端 / 浏览器让出也一并落在本版,npm 上从 0.19.1 直接到本版。

  • 🗂️ 只读文件预览整体让给 DSH 的文档预览:DSH 0.1.7 的 ui-sidebar-documentpreview 自带表格 / PDF / 图片 / Office 渲染(宿主侧 Office→PDF 转换、电子表格 worker 表格、图片 / PDF 缩放、按目录自动刷新),所以插件删掉了自己的 image / pdf / binary-download 三个 viewer,并在 editor.canOpen 里拒绝认领这些扩展名——xlsx xls csv tsv fods pdf png jpg jpeg gif webp svg bmp ico doc docx ppt pptx——把文件地址交回宿主。rc.1 收回其中 9 个:xlsb / xlt / xltx / xltm / ots / dot / dotx / avif / ods 宿主其实没有渲染器(点开只有「暂不支持预览」),而它们在让出之前是走插件兜底显示下载面板的,属于我们上一版自己引入的回归;现由插件的 code catch-all 重新认领。fods 继续让出(宿主会用纯文本显示这段扁平 XML,比下载面板有用)。插件仍保留三件宿主没有的:Markdown(自带渲染器)、HTML(自带沙箱预览 + htmlViewerNoSandbox / htmlViewerDefaultUnsafe 两个安全开关)、以及可编辑的文本 / 代码编辑器(内置那几个是只读预览);未知二进制(.zip / .wasm)仍走代码编辑器判 binary 后的下载面板,功能不回归。
  • 🔗 外链接管收敛:删掉按协议分流的三个外链接管设置项(20 份词典的相关词条一并删除)。现在插件只认领有 tab 类型通过 urlTarget 明确声明认领的链接,其余一律放行、由宿主决定(DSH 0.1.7 新增用户设置 linkOpening,决定正文链接进侧栏还是新标签页);一个都没认领到时不阻止默认行为;认领成功但目标类型在打开那一刻已不可用(插件卸载 / 被关)时兜底 window.open(url, '_blank', 'noopener,noreferrer')——顺手修掉了上一版留下的真实回归:插件自绘 markdown(侧边对话转录 / 编辑器预览 / diff 面板)里的 http 链接点了没反应。另外宿主的 browser kind 在 Web profile 已不再挂载(0.1.7 只在 desktop profile 挂载它)。
  • ⚙️ 设置接入面重写 + 用户偏好的自动回迁:DSH 0.1.7 删除了插件可注册的设置命名空间,改为按插件 Loader 行的 entry id 找表单(SettingsForms:只剩 describe / update / replace / mutate / configure)。插件偏好因此落在 profile 的 cordis patch 文档里(即本插件的挂载行),不再是 ~/.dsh/settings.yaml;schema 来自插件模块导出的 Config(本版把用户偏好并进 Config,并给每个偏好字段标 meta.volatile = true——这一个标记就是「改设置实时生效、不重挂插件」的全部机制)。用户设置不会丢:插件首次启动时会把旧 settings.yaml / settings.yaml.imported 里的 dsh-better-sidebar 段一次性回迁(只在该行还没有任何用户值时执行,且只迁移当前 schema 仍声明的字段)。entry id 是运行时自发现的(本包默认 better-sidebar,聚合包挂载时会是别的 id),不硬编码。
  • 🔄 文件树实时刷新:插件接管了内置「文件」页,宿主自己的按目录 watch 覆盖不到它——本版新增 /sidebar/ws/fs-watch:客户端上报已展开的目录,宿主按目录 fs.watch(150ms 去抖、每连接 64 个句柄上限、路径仍走 fs.tree 同一道 workspace fence),改动后只重列那一层、折叠即退订。此前文件树会一直陈旧到手动刷新。
  • 🐛 会话跟随修好了:插件此前读的是一个不存在的 SessionListState.current 字段(插件的类型镜像自己造了它,编译期一直放行),导致「按会话持久化」实际没绑上、窄屏 park 门控恒假。现在改用 DSH 0.1.7 的 ctx.sidebarRight.mounted(只在该列真正换成另一个会话时才变化)。
  • 🖥️ 模型侧代价不变:插件原有的 8 个 terminal_* 工具(默认关)已在上一版删除,上游等价物 @deepseek-ai/dsh-tool-terminal 仍未被任何 shipped bundle 默认挂载,需要持久终端时请在 profile 的 cordis.patch.yml 里自行插入一行 tool-terminal(否则模型只有一次性 bash / pwsh)。
  • 📐 基线:@deepseek-ai/dsh-* 全部钉 0.1.7-rc.1,@deepseek-ai/cordis peer 下限 ^4.0.3;ui-primitives 图标具名导出整族改名(Icon<Name><14|16> → Icon<Name>Regular / Medium,26 个具名导入随之适配);会话格式 v3→v4(sidechat 边界注入改用 plugin:dsh-better-sidebar,tool 结果消息改 role: 'tool' 顶层形状,解析器同时接受新旧两种形状以兼容历史日志)。

📜 更早版本:完整发布历史见 CHANGELOG.md(v0.20.0 → v0.12.3)与 GitHub Releases。

⌨️ 快捷键

操作 按键
保存编辑 Ctrl/Cmd + S
Git 提交 Ctrl + Enter
关闭 Tab 鼠标中键
Tab 右键菜单 关闭 / 关闭其他页签 / 关闭左侧页签 / 关闭右侧页签(当前标签组)
拆分/合并分栏 拖 Tab 到分栏边缘 / 中间
引用文件到输入框 悬浮行尾 @文件 按钮
复制文件路径 右键行 → 复制相对/绝对地址

🔌 服务化扩展

从 v0.4.0 起暴露 ctx.betterSidebar 服务,其他插件可注册侧边栏页面与文件预览器(内置 5 tab + 3 viewer 亦通过同一服务注册)。v0.12.1 补齐基座能力(完整类型导出、能力探测、状态订阅、tab 角标、生命周期回调、定向打开、插件自有设置等)。v0.19.0 起新增文件图标注册:registerFileIcon 按扩展名(或保留的 'folder' / 'folder-open' 目录扩展名、exts: [] 全局默认)替换文件树与文件 tab 的图标,彩色 ReactNode 亦可——内置消费、注册即生效,无需自己接线。

完整接入文档(全字段、匹配算法、HMR 陷阱、声明式设置、版本探测、原生栏承载面与皮肤契约):docs/external-plugin-guide.md;仓库开发规则(硬约束 / CI / 发版)见 AGENTS.md。

➕ 添加插件(推荐插件目录)

设置页「侧边卡片」两个网格末尾的虚线卡片分别打开 Tab / 预览插件弹窗:声明扩展点、「在 GitHub 上浏览更多插件」按钮(GitHub topic dsh-better-sidebar)、推荐插件目录(名字 / 仓库 / 简介 / 安装脚本),每个条目「跳转」直达仓库、「复制」把安装命令写入剪贴板。

收录新插件:向 src/client/plugins-tabs.ts(Tab 注册)或 src/client/plugins-viewers.ts(文件预览注册)追加一条 PluginEntry,并把仓库打上 dsh-better-sidebar topic;数据完整性由 tests/plugin-list.spec.ts 守护。

🛠️ 开发与构建

pnpm install      # @deepseek-ai/* devDependencies 已发布(基线 0.1.7-rc.1,alpha dist-tag),直接解析、无需令牌
pnpm typecheck    # tsc --noEmit
pnpm lint         # eslint .(flat config:js + typescript-eslint + react-hooks recommended)
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

Make 薄封装(make help 查看全部目标;package.json 仍是唯一事实源):

make check          # 聚合校验门禁:typecheck → build → test → check:consumer-types(对齐 CI)
make mount          # 真机挂载冒烟:build + pack → 安装 Chromium → pnpm test:mount
make clean          # 清理 lib/、*.tgz、playwright-report/、test-results/

pnpm check:consumer-types:对外类型声明面守卫——以浏览器-only 消费者(无 @types/node、skipLibCheck: false)的视角对构建出的 lib/types 做类型检查,需先 pnpm build。

架构:单 npm 包、host/client 双半结构——host(src/index.ts):/sidebar/api/* JSON API、/sidebar/file 媒体路由、/sidebar/html 预览路由、/sidebar/upload 上传路由,以及两条 WebSocket(/sidebar/ws/agent-opens 模型打开推送、/sidebar/ws/fs-watch 文件树目录 watch;fs / git / 预览全部会话级 + 信任围栏);client(src/client/index.tsx):portal 侧边栏 + 各视图 + 链接接管;状态按会话持久化 localStorage。插件按 DSH 官方规范组织(无 default 导出、双 client bundle),运行期不依赖 npm / checkout(@deepseek-ai/* 由 web profile 提供)。

🔐 安全

  • 路由受 Host 头信任围栏保护(与 /api 一致);fs.write 原子写入;媒体/预览路由仅限会话 cwd 内文件(workspaceFence 关掉时除外,见设置页);git 只调 CLI、绝不设置身份
  • HTML 预览的内容在不透明源沙箱 iframe 中渲染(无 allow-same-origin/allow-top-navigation、no-referrer、权限策略全禁);/sidebar/html 路由带 CSP sandbox + 大小/路径边界
  • 设置页可按功能关闭 HTML 预览的沙箱(htmlViewerNoSandbox / htmlViewerDefaultUnsafe,默认关闭,带警告文案)——关闭后内容与界面同源,仅建议对完全可信内容使用。网页 tab 的沙箱不再是插件的面:浏览器视图由宿主提供(desktop profile),其沙箱与导航策略见 DSH 侧文档

⚠️ 已知限制

  • Git 无 push/pull/fetch;Markdown 预览提供手动刷新按钮,刷新未保存编辑前会确认是否丢弃草稿;文件树只对已展开的目录做 watch(折叠的目录不订阅,也不做全工作区递归扫描);工具行内文件打开按钮不可拦截
  • 只读预览的格式由宿主决定:表格 / PDF / 图片 / Office 走 DSH 自己的 ui-sidebar-documentpreview,插件只渲染 Markdown / HTML 与可编辑的文本代码;宿主的实现(渲染细节、缩放、刷新时机)随 DSH 版本走
  • 浏览器视图只在 desktop profile 存在:Web profile 没有宿主 browser kind,插件也不再自带浏览器 tab,因此网页 tab 只在 desktop profile 可用;登录态 / 第三方 Cookie / X-Frame-Options 等限制随宿主实现
  • HTML 预览渲染的是已保存文件(不反映未保存草稿)
  • 移动端(<768px)无底部面板:进入窄屏时其标签页一次性并入右侧栏(迁移后回桌面仍保留在右侧栏),桌面端的底部面板只在宽视口下可用。未选中会话时,点按弱化开关会显示选择会话提示;选中会话后开关打开全宽抽屉

🖥️ 平台支持

Windows / Linux / macOS 三平台适配(macOS 日常验证;其余经单元测试覆盖)。插件不再包含原生依赖(终端与 node-pty 已整体交还 DSH 自身),构建只需 Node + pnpm,无需编译工具链。

🌐 插件生态

ctx.betterSidebar 服务向所有插件开放两个扩展点:registerTab(注册侧边栏页面) 与 registerFileViewer(注册文件预览器)。内置的 5 tab + 3 viewer 与第三方插件走同一套 API,能力完全对等。

import type {} from 'dsh-better-sidebar'  // 触发 ctx.betterSidebar 类型合并
export const inject = ['betterSidebar']
export function apply(ctx: Context) {
  ctx.effect(() => ctx.betterSidebar.registerTab({
    id: 'my-plugin:db', title: 'Database', component: ({ scope }) => <DbView sessionId={scope.sessionId} />,
  }))
  ctx.effect(() => ctx.betterSidebar.registerFileViewer({
    id: 'my-plugin:csv', exts: ['csv'], fetchStrategy: 'custom',
    load: async (path, scope) => parseCsv(await fetchText(scope, path)),
    component: ({ customData }) => <CsvGrid rows={customData} />,
  }))
}

GitHub topic dsh-better-sidebar 下已有 28+ 生态插件(持续增长中):

设置页「添加插件」弹窗:推荐插件目录 + 一键复制安装命令
设置页「侧边卡片」内置「添加插件」弹窗:推荐目录 + 一键复制安装命令 + 直达 GitHub topic

📑 Tab 插件(注册侧边栏页面)

24 个插件(点击展开)
插件 ⭐ 简介
ChenRuoT/dsh-sidebar-qa stars 划选追问侧边页:类 Codex 侧边提问 / Claude Code /btw
fuhefei/dsh-sentinel stars 条件驱动唤醒系统:文件 / 命令 / HTTP / 进程 / Webhook 监视,到点唤醒 agent;dock + 侧栏分支 + 全局仪表盘
Fisfzy/ego-browser stars Agent 浏览器:i18n 感知的本机浏览器 Tab(@dsh-external/ego-browser,装了 better-sidebar 自动注册侧边栏页,未装回退浮动浮窗观察)
jiuge2467/dsh-studio stars 全栈增强工作台:多源 MCP 可视化调试中枢、视觉思考引擎
Iwctwbh/dsh-flowglass stars 流镜 Flowglass:会话流程图实时可视化(消息 / 工具组 / 子代理分支)
FeatherHunter/dsh-mattpocock-skills-deck stars mattpocock/skills 游戏化任务系统:地图拨迷雾、任务栏推进
GULI-lab/DSH-element-source stars 点击页面任意 UI 元素直达 Vue / React / Svelte / Angular 源码并送入会话
Lzh3070/dsh-file-review-tab stars 文件改动审查页:行级红绿 diff + 撤销 + chat 行深链
yq04/dsh-git-remotes stars Git 远程页:分支 / 上游 / ahead-behind,fetch 可 prune、ff-only pull、确认后 push
ztyhehe/dsh-better-sidebar-svn stars SVN 源码管理页:status / diff / log / commit / update / revert / 冲突解决,与内置 Git 面板对称
Melody-max114/dsh-excel-panel stars Excel 编辑页:xlsx 预览 / 编辑、公式实时计算、合并单元格、保存回原文件
v587d/dsh-anysearch-refs stars AnySearch 搜索结果引用卡片:搜索词、来源摘要、关键词高亮
mlosun/dsh-docs-panel stars 全局文档面板:随身 Markdown 笔记,任何工作区随时可读
lnyuqian/dsh-skill-sidebar stars 技能面板:扫描本机技能目录,4-6 字功能短语 + 一键复制调用 + 置顶
g-yixuan/dsh-sidenote stars Codex 风格侧边对话 + 划选引用注释(轻量消费插件)
thirsty5034/dsh-ssh-tunnel stars 多主机 SSH 隧道 + SSH 管理器页
thirsty5034/dsh-git-forge stars GitHub / Gitea 账号、项目授权与推送策略
YesSanSan/dsh-conversation-outline stars 对话大纲页:按轮次结构化展示、一键跳转、LLM 一句话标题
Wulabalabo/dsh-sidebar-Explorer-Plus stars 文件管理页:上传 / 移动 / 删除 / 重命名 / 新建文件夹(补全写操作)
yq04/dsh-turn-review stars 本轮审查:逐回合审查 agent 改动
Ghz114514/dsh-refpics stars Pinterest 风格参考图搜索:瀑布流、侧栏画板、下载与 Eagle 收藏
yzlin499/dsh-yzlin499-easy-plugins stars 实用小工具集(毛坯房 DSH 友好)
dong-victor/dsh-better-sidebar-starter stars 运行配置页:IDEA 式 Run/Debug 配置(npm / springboot / python / custom)——一键启动、历史保存、WebSocket 实时日志(ANSI 彩色)、多实例并行、进程树跨平台杀死
baosfeng/my-dsh-plugins stars 个人多插件合集(dsh-file-activity):侧边栏文件活动页——记录文件读取 / 新增 / 修改历史与统计,按文件夹平铺,点击用原生预览打开
Hoemr/dsh-better-overleaf stars Overleaf 标签页:直连 CDP 浏览器登录(支持第三方 Chromium)、项目切换、工作区下 overleaf/ 目录本地 git 镜像与双向同步

🖼️ 预览插件(注册文件预览器)

3 个插件(点击展开)
插件 ⭐ 简介
HuanLinOTO/dsh-plugin-better-sidebar-plugin-office stars Office 三件套预览(.docx / .xlsx / .pptx),独立 bundle 瘦身主体(官方推荐目录收录)
zemul/dsh-video-preview stars 视频内联预览:.mp4 / .webm / .mov / .mkv / .avi,自带 /video 路由支持 HTTP Range 拖进度条
dong-victor/dsh-better-sidebar-jupyter stars .ipynb 可运行 Notebook 视图:懒启动 Python kernel、流式输出、保存回写

🧰 增强与工具

3 个插件(点击展开)
插件 ⭐ 简介
eg-bole/dsh-better-sidebar-icons stars VSCode 风格文件 / 文件夹图标主题:文件树与编辑器 Tab 换上熟悉的开发环境图标(vscode-icons 移植,纯 DOM 覆盖零侵入,安装 / 卸载零残留)
dong-victor/dsh-better-sidebar-terminal-plus stars 终端增强:内嵌 Nerd Font 图标字体、修复 xterm 图标渲染、稳定终端 cwd
Max-Null/dsh-sidebar-preview-select stars 预览划选增强:侧边栏预览里划选文本 → 浮动「发送到会话」
Hoemr/dsh-quicklook stars QuickLook 式空格预览:活动文件标签页按 Space 全尺寸查看图片 / PDF / 文本,Space 或 Esc 关闭

📣 上架你的插件:给仓库打上 dsh-better-sidebar topic 即出现在 topic 页;再向 src/client/plugins-tabs.ts / src/client/plugins-viewers.ts 提一条 PluginEntry PR,即可进入设置页内置推荐目录(数据完整性由 tests/plugin-list.spec.ts 守护)。

🤝 参与贡献

  • 代码改动走 PR:feat/* / fix/* 分支开发 → gh pr create;纯文档改动可直接推 main
  • 收录生态插件:给仓库打 dsh-better-sidebar topic + 向 src/client/plugins-tabs.ts / plugins-viewers.ts 提 PR
  • 提交前自检:pnpm typecheck && pnpm build && pnpm test(或 make check 一键聚合;CI 另有 npm 打包 → 真实挂载 → 无头渲染门禁 pnpm test:mount,及聚合双挂载回归 pnpm test:mount:aggregate)
  • 仓库工作规范见 AGENTS.md(含仓库硬约束与 CI 说明)

👥 贡献者

感谢每一位贡献者:

贡献者

🔗 友情链接

  • dsh-tianshu-tui:DeepSeek Harness 交互式终端 UI 插件(渲染核心由自研 harness agent Tianshu-Tui 演进而来),在官方基础上增加 TDD 与证据门等工作流
  • dsh-TUI:Claude Code 风格全屏交互终端插件——像素鲸鱼顶栏、实时工作状态行、思考流式展开、双击 Esc 回滚、上下文进度条 + TPS 仪表,npm 一键安装
  • dshfind 插件超市:三方插件市场——GitHub topic dsh-plugin 下的公开仓库清单,每日同步 star、贡献者与增长数据
  • DeepSeek Harness Desktop:为 DeepSeek Harness 生态打造的现代化桌面端——无需配置 Node.js 或执行命令即可启动和管理本地 Harness 服务;官网

MIT License · Built for the DeepSeek Harness ecosystem · 在 topic dsh-better-sidebar 发现更多生态插件

About

开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git, and sub-agent pages.

Topics

Resources

Stars

3.8k stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages