返回首页

DSH-better-sidebar

界面与体验

omdsh-dev/DSH-better-sidebar

DeepSeek Harness 的开放侧边栏底座,支持三方拓展注册新侧边栏页面,内置文件渲染/编辑、终端、侧边对话、Git 和子代理页面。

  • deepseek
  • deepseek-harness
  • dsh
  • dsh-better-sidebar
  • dsh-plugin
  • sidebar
GitHub Stars
2573GitHub
浏览量
2DSH Plugin Hub
Forks
197GitHub
开放问题
142GitHub Issues
Manifest 版本
0.15.0dsh-better-sidebar
最近推送
2026年8月21日GitHub
许可证
MITTypeScript
插件类型
Host + Client同时运行于 Host 与 Web Client

README

查看源文件

dsh-better-sidebar

📑 目录

✨ 功能一览

  • 🗂️ 文件工作台:资源管理器(懒加载目录树;软链接按目标类型展示——目录软链接可展开、失效链接标红)+ CodeMirror 编辑器;图片 / Markdown(含 Mermaid 图表,strict 安全渲染 + 点击放大)/ HTML / PDF
  • 🌐 内嵌浏览器:多开网页 tab,后退 / 前进 / 刷新;内容运行在沙箱 iframe;外链默认按协议分流——HTTP 在侧边栏打开、HTTPS 走系统浏览器(设置页可分别调整)
  • 💻 真实终端:xterm.js + node-pty 真实 shell,断线重连回放;可选为模型注入 terminal_* 工具
  • 🌿 Git 面板:真 diff + VSCode 式 diff tab、历史、右键暂存 / 提交 / 还原
  • 🧩 后台任务页:subagent 拓扑 + 后台任务(退出码 / 实时输出 / 强制终止)
  • 💬 侧边对话(beta):Codex 风格的侧边线程——继承主会话完整上下文(含进行中的回合与工具调用)独立运行,不进入主会话;线程内可持续追问,一键「保存为新会话」提升为顶层会话
  • 🪟 双工作台:右侧栏 + 底部面板;拖 Tab 拆分 / 合并分栏(可跨面板),移动端自动合并全宽抽屉
  • 🔁 会话隔离:布局 / Tab / 面板按会话持久化,陈旧状态自动净化
  • ⚙️ 声明式设置:设置页「侧边卡片」逐项独立开关,二级设置经齿轮弹窗
  • ⚡ 按需加载:启动只拉 ~325KB 核心,终端 / 编辑器 / Mermaid 图表等重依赖用到才按需拉取(设计文档
  • 🌏 多语言:界面文案跟随 DSH 语言(zh / en)实时切换

🔌 核心理念:服务优先——内置的 7 tab + 6 viewer 与第三方插件通过同一套 ctx.betterSidebar API 注册,能力完全对等;官方不再内置、可由生态提供的功能,交由生态插件实现(已有 28+ 生态插件,见下方「🌐 插件生态」)。接入文档见「🔌 服务化扩展」与 外部插件接入指南

🚀 安装

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

支持的 DSH 版本

dsh plugin --profile web add dsh-better-sidebar@latest   # 首次会因 pnpm 11 拦截 node-pty 构建脚本而失败(依赖已写入)
cd ~/.dsh/profiles/web && pnpm approve-builds --all      # 放行构建脚本(自动重跑安装)
dsh plugin --profile web add dsh-better-sidebar@latest   # 重跑即成功

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

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

帮我安装 dsh-better-sidebar 插件(DSH 侧边栏工作台),步骤:
1. 执行 dsh plugin --profile web add dsh-better-sidebar@latest(首次会被 pnpm 11 拦截 node-pty 构建脚本而失败,属正常)
2. 在 ~/.dsh/profiles/web 下执行 pnpm approve-builds --all(放行构建脚本,会自动重跑安装)
3. 再次执行 dsh plugin --profile web add dsh-better-sidebar@latest
4. 完成后提醒我硬刷新浏览器(Cmd/Ctrl+Shift+R)
遇到报错先查 https://github.com/omdsh-dev/DSH-better-sidebar README 的常见问题表。
dsh plugin --profile web add dsh-better-sidebar@latest

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

现象原因与解决
Ignored build scriptspnpm 11 拦截构建脚本。在 profile 目录(~/.dsh/profiles/web)跑 pnpm approve-builds --all
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 之前。
Windows 下终端无法使用node-pty 依赖预编译二进制;若当前 Node 版本没有对应产物,需装编译工具链(VS Build Tools)。主流 Node 版本一般已有预编译。
终端提示「node-pty 加载失败」node-pty 安装缺失/损坏(如 pnpm 拦截了构建脚本)。终端横幅会给出修复命令:复制到 DSH 所在环境的终端/cmd 执行(在 ~/.dsh/profiles/webpnpm approve-builds --all && pnpm rebuild node-pty),完成后重启 DSH 并点重试。插件与 DSH 核心使用同一 node-pty@^1.1.0,修复后两者同步恢复。
提示 dsh: command not found先安装 DSH;或直接用 npx -y --package @deepseek-ai/dsh dsh plugin --profile web add dsh-better-sidebar@latest

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

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 追加挂载行(需要指定终端 shell 时,在行内加 `config.shell`;`config.shellArgs` 可带参启动,非空时替换默认的 `-l`。不填则自动解析 `$SHELL` / 登录 shell / powershell.exe):
   - insert:
       - id: better-sidebar
         name: 'dsh-better-sidebar'
         config:
           shell: /bin/zsh
           shellArgs:
             - --noprofile
             - --no-rc
4. 在 ~/.dsh/profiles/web 执行 pnpm install
5. 硬刷新浏览器(Cmd/Ctrl+Shift+R)即可看到效果(client 改动无需重启 DSH;host 半改动才需重启)

更新:git pull && pnpm install && pnpm build → 硬刷新浏览器即可(client 改动热加载生效,无需重启 DSH;host 半改动才需重启)。切回 npm 通道时,把依赖改回 "dsh-better-sidebar": "^0.15.0"pnpm install

前置:DSH 已集成 plugin-registrydsh 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 buildnode scripts/package-registry.mjsdsh registry uninstall/install/enable。切换通道前先移除另一通道的挂载。

🖼️ 特性巡礼

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

🗂️ 文件工作台:资源管理器支持两种格式的资源管理器:内嵌在文件预览中 / 独立显示文件树。懒加载目录树、软链接按目标类型展示(目录软链接可展开、失效链接标红)、全局文件名搜索、上传文件/文件夹与拖放上传、右键菜单(在新 Tab 打开 / 在侧边打开 / 复制路径)、悬浮 @文件 一键引用进输入框。📝 Markdown · 图片 · PDF 内联预览Markdown 预览支持 Mermaid 图表securityLevel: 'strict' 安全渲染 + 二次清洗;点击图表弹窗放大、滚轮缩放、拖拽平移);图片 / PDF 走媒体路由内联展示;Office 三件套由生态插件补齐。
🖥️ CodeMirror 代码编辑器🖼️ 图片内联预览
💻 真实终端xterm.js + node-pty 真实 shell(不是模拟器):断线重连 transcript 回放、shell / shellArgs 可配置(设置页或 cordis.patch.yml)、可选为模型注入 terminal_* 工具(agent 可直接开终端跑命令)。🌿 Git 面板暂存 / 取消暂存 / 提交(Ctrl+Enter)/ 还原,历史列表;点击改动文件打开 VSCode 式 diff tab(红绿行级对比)。
🌐 内嵌浏览器多开网页 tab:后退 / 前进 / 刷新 / 地址栏;内容运行在不透明源沙箱 iframe(界面实时显示沙箱状态,可按页面临时解锁);聊天里的外链点击可被接管到侧边栏打开(按协议分流,可配)。🧩 任务页:子代理拓扑 + 后台任务子代理树实时拓扑(运行状态、批量实时预览)+ 后台任务清单(退出码 / 实时输出 / 强制终止);新子代理 / 新任务可自动展开侧边栏(可关)。
💬 侧边对话(beta)Codex 风格侧边线程:每个对话一个独立 Tab;线程继承主会话完整上下文(含进行中回合,以 interrupted 诚实冻结)独立运行,不污染主会话;可持续追问、重启冷恢复;一键「保存为新会话」提升为顶层会话。🪟 双工作台:右侧栏 + 底部面板 + 分栏右侧栏与底部面板可同时展开;拖 Tab 到分栏边缘拆分、拖到中间合并(可跨面板);面板宽高左缘/上缘拖拽调节;移动端自动合并为全宽抽屉。
⚙️ 声明式设置设置页「侧边卡片」分区:每个 tab / 预览器一张小卡片,独立开关(高亮启用态 + 品牌开关滑块);二级设置经卡片底部「功能设置」条弹窗(开关 / 文本 / 数字 / 下拉);插件自有设置持久化在 pluginSettings📱 移动端窄屏(<768px)自动切换为全宽抽屉:底栏 tab 一次性并入右侧栏,触屏拖拽可调。

🌐 插件生态

ctx.betterSidebar 服务向所有插件开放两个扩展点:registerTab(注册侧边栏页面)registerFileViewer(注册文件预览器)。内置的 7 tab + 6 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+ 生态插件(持续增长中):

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

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

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

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

🧰 增强与工具

插件简介
dong-victor/dsh-better-sidebar-terminal-plus终端增强:内嵌 Nerd Font 图标字体、修复 xterm 图标渲染、稳定终端 cwd
Max-Null/dsh-sidebar-preview-select预览划选增强:侧边栏预览里划选文本 → 浮动「发送到会话」

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

🆕 最近更新

支持的 DSH 版本 · 完整发布历史见 Releases

v0.15.2

自 v0.15.1 以来的全部更改:

✨ 新功能

  • 🗂️ 文件树「在应用中打开」子菜单#334):文件树右键菜单新增「在应用中打开 >」子菜单——内置打开方式(资源管理器显示/选中、VS Code、Cursor、Zed),每行右侧图钉可固定为右键菜单顶层直达项(再点取消);配置可选 SSH host 后 VSCode 系条目改用 vscode-remote/ssh-remote+<host>/<path> 协议打开,本地专用条目自动隐藏;支持自定义编辑器(名称 + URL 模板 {path} + 是否 VSCode 系,配置入口在 Files 卡片齿轮弹窗)。打开动作经新宿主路由 POST /sidebar/api/open.external(argv 数组 spawn,无 shell 注入)(设计文档
  • 📑 Tab 右键菜单#331):页签右键提供「关闭 / 关闭其他页签 / 关闭左侧页签 / 关闭右侧页签」,作用范围为当前 pane(标签组),无可关对象时置灰;仅打开菜单、不切换激活页签;批量关闭逐条走既有 onClose 路径,生命周期完整
  • 📄 Diff 文件默认折叠#270):改动文件头部改为可访问的展开/折叠控件;识别出的源文件默认展开,测试 / 文档 / 生成文件 / lockfile 与未知类型默认折叠;保留现有 500 行上限
  • 📖 README 更新:特性巡礼改为表格展示(每行两张图,节省空间);社区补全微信群 / QQ 群二维码(#325,QQ 群 577011007)

🐛 修复

  • 🪟 空分栏清理#268):持久化的 split pane 在临时 diff tab 被清理后遗留全尺寸空分栏——sanitizeState 现在同时修剪空的 split leaf,并修复修剪后的失效激活 pane 指针;整个工作台为空时保留唯一空 pane
  • 🖥️ Windows 下隐藏 Git 子进程窗口#301,关闭 #124):runGit() 统一加 windowsHide: true,仓库状态轮询与操作不再闪现控制台窗口(其他平台行为不变)
  • 📁 未跟踪文件夹内文件差异#242):git status--untracked-files=normal 切换为 --untracked-files=all——新文件夹内每个文件独立成行、可正常加载差异(修正 fs.read 报 "is a directory",与 VSCode 默认行为一致)
  • 开关/拖拽每帧 React 重渲染消除(关闭 #315):centerRect 改 ref + 底栏 DOM 直写(零 React 渲染);TabContent memo(显式比较器);新增 frame-batcher 对 Divider/dock 拖拽按帧合并;拖拽期跳过无意义 locate。4x CPU 节流 A/B:开关 >17ms 帧 collapse 19→6 / expand 24→4~6,p95 21ms→15ms;拖拽不变(非回归)

自 v0.15.0 以来的全部更改:

✨ 新功能

  • 💬 侧边对话 Codex 风格转录重构#314):转录改为折叠行——工具调用 / 思考 / 上下文注入统一为安静的单行 chrome(chevron + 标签 + 单行参数摘要,展开为 hairline 缩进正文,无卡片无填充),流式标签与创建 shimmer(shimmer = 生成中)、失败工具 danger、prefers-reduced-motion 停帧;首条问题不再被边界提示吞掉——上下文注入与首问拆分交付(边界 + 快照经 agent.inject 排队、问题唤醒驱动),转录把注入映射为可折叠注入行、真实用户消息(含首问)渲染为用户气泡,旧线程的首问同样拆分为独立气泡
  • 📖 README 重写:功能导览(逐特性实机截图)、用户视角 DSH 兼容徽章、简化安装流程(addapprove-buildsadd、node-pty 安全构建、粘贴到 DSH 安装提示)、插件生态 28+ 与分类折叠展示

🐛 修复

  • 🖥️ 终端跨会话切换保活#323):切到其他会话不再被当作瞬时掉线——客户端卸载时发送 park 控制帧,主机跳过 30s 重连宽限倒计时;切回会话(open() 取消 parked)或显式关闭恢复正常生命周期;agent 终端保持无限期存活
  • 📂 文件树上传遮罩不再拦截 Tab 拖拽#317):拖拽 Tab(重排 / 跨 pane split)经过资源管理器时不再弹上传遮罩、不吞事件——统一按 dataTransfer.typesFiles 门控(与面板宿主 shield 一致),Tab 正常落下;OS 文件拖拽行为不变
  • 💬 子代理自动展开去抖#314):Side Chat 线程创建不再误弹任务页——0→N 触发 500ms 重臂并对实时快照按原基线重评估,标题过滤器识别线程后才放行;真实子代理依然自动展开

v0.15.0

自 v0.14.0 以来的全部更改:

✨ 新功能

  • 💬 侧边对话(beta) Tab#286):Codex 风格的侧边线程,每个对话一个独立 Tab——子会话继承主会话完整上下文(已完成回合 + 未回答消息 + 进行中回合的 assistant 输出与工具调用,以「interrupted」冻结标记诚实继承);同组合创建(同 preset / provider / model)复用前缀输入缓存;线程对主会话列表不可见、零子代理目录噪音;线程内可持续追问(重启后自动冷恢复);一键「保存为新会话」提升为顶层会话(设计文档
  • 📤 文件窗口上传#239):头部「上传文件 / 上传文件夹」按钮 + 拖放上传(拖到树区 = 工作区根,目录行 = 进该目录,文件行 = 进其所在目录,对齐 VSCode);上传时全屏模糊进度弹层(文件级进度 + 取消 / Esc);上传中按钮禁用、成功后文件树自动刷新
  • 🧩 桌面兼容四选项#284):位置兼容模式改为主行下拉——自动检测(默认,保守:仅使用标准的 Window Controls Overlay 几何,32/36px 等各壳差异自动跟随、最大化/还原实时更新,网页环境零修改)/ DSH官方Web(显式零适配)/ 壳兼容方案(内置预设,手动启用;只收录 issue/PR 中出现过且 100+ star 的壳,命中环境带「已检测」提示)/ 自定义方案(自定义 CSS + 下移距离)。旧版本已有兼容配置的用户自动落到自定义方案;交互控件统一退出桌面拖拽区(no-drag);底栏推挤锚点复合选择器双保险([data-pane]:has(> [data-slot])
  • 🎛️ 设置页 UI/UX 现代化#300):侧边卡片二级设置入口改为卡片底部「功能设置」设置条(替代右下角隐形齿轮,可发现性提升);协调双色启用态(brand 激活强调 + success 绿勾选徽标);全部颜色仍为 --dsw-alias-* 令牌派生,皮肤体系自动跟随
  • 推荐插件目录新增dsh-docs-panel 全局文档面板(#230)、dsh-flowglass#261)、dsh-git-forgedsh-ssh-tunnel#204)、dsh-turn-review#102

🐛 修复

  • 子代理页实时预览批量接口#298):旧实现每个 running 子代理独立轮询 subagents.history,host 侧每次触发全量子代理枚举形成 O(N²) 放大、多子代理并发时页面卡顿——改为单个批量接口 subagents.live(一次枚举整棵子代理树)+ 客户端单轮询、单在途请求;展示逻辑与文案不变
  • 🖱️ 拖拽中断 / 快速释放不再回滚#249,关闭 #247 #248):中断 / 快速释放提交最后已知位置;HMR 后中心列重定位兜底(修复热更新后底栏空白)
  • 📐 推挤变量挂载期持续有效#259,修复 #258):拖拽松手后底边栏不再闪全宽
  • 🔧 适配 DSH 0.1.1-rc.1 / rc.2(@next)#297 #305):无代码逻辑改动
  • 🔒 上传链路安全加固#239):relativePath 空段 / 绝对路径显式拒绝;临时文件唯一命名(并发上传互不干扰、崩溃不阻塞);写流错误监听(磁盘失败不崩溃进程);客户端错误码与服务端统一、413 本地化

v0.14.0

⚠️ 本版起需要 DSH ≥ 0.1.0-rc.8。自 v0.13.1 以来的全部更改:

✨ 新功能

  • 🖼️ 统一面板宿主注入重构#232):面板/开关簇迁入 [data-dsh-panel-host] 固定含块层(fixed inset-0 z-40),免疫桌面套壳中间层 transform 对 fixed 含块的劫持;挂载自检(页面级 transform → data-dsh-panel-host-degraded 降级同步,按未修正几何判定、祖先变换消失才退出);推挤锚点改 #root [data-dsh-frame] > [data-pane="conversation"] + #root calc 宽度防桌面壳加性溢出;chunk 激活重验证(HEAD+ETag 保留未变 chunk,5s 超时兜底 fail-open);visualViewport 键盘 inset + env(safe-area-inset-*) 移动端适配
  • 📂 文件打开方式默认独立#232):editorExplorer 默认从「合并」改为「独立」——新会话树点击 / 打开文件按路径新开文件 tab,无路径窗口即纯资源管理器;合并模式保留为可选手动开启
  • 🖥️ 终端 shell / shellArgs 设置页可配#232):终端卡齿轮二级页面新增「Shell 路径」「Shell 参数」两行配置(此前只能通过 cordis.patch.yml 配置)——设置页写入后对之后打开的 UI 终端与模型终端(terminal_create)即时生效;留空保持 yaml → $SHELL / 登录 shell / powershell.exe 的既有解析顺序
  • 🏷️ 设置页版本徽标#232):侧边卡片设置页顶部新增 DSH-better-sidebar v0.14.0 身份徽标(版本与服务实例同步,由测试守护)
  • 🔍 添加插件目录搜索 / 分组 / 独立滚动#232):为插件生态增长做准备——目录列表顶部加实时搜索(按名称 / id / 描述过滤),条目支持可选 category 分组渲染,列表独立滚动(弹窗不再随条目数无限增长)

🐛 修复

  • 🧩 rc.8 模块系统迁移#232):rc.8 不再暴露 window.__DSH_MODULES__ 页面全局(改由 ctx.modules 服务提供),懒加载 chunk 的外部依赖解析全面失效——client 注入 modules 服务 + 插件自有全局共享给 chunk 副本(终端 / 编辑器 / Mermaid 恢复正常按需加载)
  • 🧩 chunk 重验证屏障健壮性#232):HEAD 重验证加 5s 超时兜底(路由挂起时 fail-open 重取,屏障不再可能无限期阻塞懒加载);resetChunks 清挂起的重验证屏障
  • 🖱️ 拖拽健壮性#232):快速释放(浏览器合并 / 丢失 pointermove 突发)时提交最后已知拖动位置而非回退;pointercancel / 捕获丢失中断同样保留拖动结果;提交后立即重测中心列(消除底栏宽度中间帧抖动);HMR 重激活后中心列重定位兜底(<html> 样式观察 + 底栏打开重测),修复热更新后底栏空白 / 输入框位移

v0.13.1

✨ 新功能

  • 📊 Markdown 预览安全渲染 Mermaid 图表#164):预览的 md 含 mermaid fence 时按需下发 client-mermaid.js chunk(~7MB,无 mermaid 文件零加载);纵深防御渲染——securityLevel: 'strict' + htmlLabels: false(节点文字走真实 SVG <text>)+ SVG 注入前二次清洗(删 foreignObject/script/外来 HTML 元素、剥 @*/on*/href 属性);点击图表在弹窗中放大(滚轮以鼠标为中心缩放、拖拽平移、工具栏与快捷键),深浅色跟随重渲、解析失败回退原码
  • 🖥️ 终端 shell 与 shellArgs 可配置#125):cordis.patch.ymlbetter-sidebar.config 可指定 shell / shellArgsshellArgs 非空时完全替换默认参数;未配置维持自动解析 $SHELL / 登录 shell / powershell.exe 原行为),UI 终端与 agent 终端(terminal_create)同时生效;终端 tab 标题改用 shell 名(bash / zsh / powershell),内部标识改 UUID,同 shell 可开多个终端

🐛 修复

  • 🔗 聚合双挂载自动退让#200):聚合包(如 dsh-web-ui-all)以独立条目 id 挂载同包时,cordis.patch.yml 的守卫表达式自动禁用自身 better-sidebar 行,不再重复注册 /sidebar/api 导致 duplicate prefix route 整个插件树启动失败(dsh web 崩溃);独立安装行为不变
  • 🔧 适配 DSH 0.1.0-rc.7#207,修复 #206):修复 DSH 主框架升至 rc.7 后选模型 / 发消息报 agent-presets: refusing to compose an unscoped context 的问题

v0.13.0

✨ 新功能

  • 📁 文件窗口与资源管理器二合一#151):新 editorExplorer 设置(编辑器卡齿轮)——文件 tab 增加路径输入框头部 + 可开关的右侧停靠文件树(每 tab 记忆展开/宽度,左缘拖拽调宽 160~480px,全局文件名搜索走 host fs.search 路由,预算封顶并跳过 .git / 符号链接目录);独立模式(默认)树点击 / 输入框 Enter 按路径新开文件 tab,合并模式原地切换当前 tab;新会话默认 seed 空文件窗口(Files)替代 explorer tab,无路径窗口在独立模式为纯资源管理器、合并模式为带 chrome 的空文件窗口;树右键提供「在新 Tab 中打开」「在侧边打开」(split)
  • 🎛️ 声明式设置 select 行#151):设置项新增 type: 'select'options 支持 value/title/desc/icon,multi 多选存数组);带图标的选项渲染大图标选项卡、收起态同样显示图标;editorExplorer 改为图标化下拉(合并 / 独立);能力清单新增 settingSelect
  • 🔀 与 dsh-web-ui 家族右侧面板互斥#181):读取 aionui-panel 设置命名空间的提供方选择——当选择「使用 aionui-panel」时,整个 better-sidebar(右侧栏 / 底部面板 / 浮动入口 / 各类接管)不再挂载;选择 DSH-better-sidebar(或未安装 aionui)时正常。设置页保存后实时生效(settings-document 推送),无需刷新

v0.12.3

✨ 新功能

  • 🎨 皮肤兼容(令牌驱动):全面消费 DSH 设计令牌,与 dsh-web-ui 皮肤中心 10 款皮肤兼容,换肤自动跟随;终端/编辑器表面在透明/半透明玻璃值下回退不透明底色,文字不叠在皮肤背景上(#110,修复 #106 #105 #90 #60,附带 #52 #57 #92)
  • 🗂️ 统一路径处理:UNC 路径 / 软链接分类(目录软链接可展开、失效链接标红)、HTML 路由平台守卫(#134,#65 #67 #43 #79 #115)
  • 🖥️ 终端 shell 可配置:设置项自定义 shell,Windows 自动探测 pwsh(#95
  • 📝 编辑器新增语言:C# / Kotlin / Swift 语法高亮(#120
  • 🧭 设置页导航图标:设置页导航图标与布局优化(#114
  • 推荐插件目录新增dsh-git-remotes——Git 远程 Tab(分支/上游/ahead-behind、fetch 可 prune、ff-only pull、确认后才 push,不替换内置暂存/提交)(#91);dsh-video-preview——视频内联预览(.mp4/.webm/.mov/.mkv/.avi 等,自带 /video 宿主路由支持 HTTP Range 206 拖进度条,不受 20MB mediaLimit 限制)(#126

🐛 修复

  • 🔧 xterm 依赖迁移:弃用的 xterm 迁移至 @xterm/xterm(Closes #122#128
  • 📝 Markdown 编辑器:选区转对话弹窗恢复可用(#24
  • 🐛 node-pty 加载失败不再拖垮 server#140):宿主半改为懒加载 node-pty,缺失时插件照常挂载,终端以修复提示横幅(可复制命令 + 重试按钮)呈现,agent 终端工具自动跳过
  • 🧪 测试工程:单元测试拆分(#141)+ smoke 偶发失败修复

💬 社区

推荐添加QQ群(577011007)

⌨️ 快捷键

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

🔌 服务化扩展

从 v0.4.0 起暴露 ctx.betterSidebar 服务,其他插件可注册侧边栏页面与文件预览器(内置 7 tab + 6 viewer 亦通过同一服务注册)。v0.12.1 补齐基座能力(完整类型导出、能力探测、状态订阅、tab 角标、生命周期回调、定向打开、插件自有设置等)。

完整接入文档:

  • AGENTS.md——仓库内维护的接入文档(全字段、匹配算法、HMR 陷阱、声明式设置、版本探测);
  • docs/external-plugin-guide.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.1-rc.1,直接解析、无需令牌
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(fs / git / pty / 预览,全部会话级 + 信任围栏);client(src/client/index.tsx):portal 侧边栏 + 各视图 + 拦截;状态按会话持久化 localStorage。插件按 DSH 官方规范组织(无 default 导出、双 client bundle),运行期不依赖 npm / checkout(@deepseek-ai/* 由 web profile 提供)。

🔐 安全

  • 路由受 Host 头信任围栏保护(与 /api 一致);fs.write 原子写入;媒体/预览路由仅限会话 cwd 内文件;git 只调 CLI、绝不设置身份
  • HTML 预览与浏览器 tab 的内容在不透明源沙箱 iframe 中渲染(无 allow-same-origin/allow-top-navigationno-referrer、权限策略全禁);/sidebar/html 路由带 CSP sandbox + 大小/路径边界;地址栏拒绝 javascript:/data:/file: 与 localhost 等本机地址
  • 界面实时显示沙箱状态(关闭时红色警示),可临时解锁当前页面;设置页可按功能关闭沙箱(默认关闭该设置,带警告文案)——关闭后内容与界面同源,仅建议对完全可信内容使用

⚠️ 已知限制

  • Git 无 push/pull/fetch;无文件 watcher(手动刷新);工具行内文件打开按钮不可拦截
  • 终端 Tab 拖到另一分栏会重挂载(shell 重开)
  • Office 三件套预览(.docx/.xlsx/.pptx)已移至「推荐插件」(Office 预览插件,见设置页「添加插件」弹窗);未安装时此类文件走代码/下载查看兜底
  • 浏览器沙箱无登录态/第三方 Cookie 受限,部分站点登录需走弹窗;被 X-Frame-Options/frame-ancestors 拒绝嵌入的站点(如 arxiv.org)显示原因面板(含「在浏览器中打开」);iframe 内部跳转不进后退栈
  • HTML 预览渲染的是已保存文件(不反映未保存草稿)
  • 移动端(<768px)无底部面板:进入窄屏时其标签页一次性并入右侧栏(迁移后回桌面仍保留在右侧栏),桌面端的底部面板只在宽视口下可用;移动端底部首展自动开终端不触发

🖥️ 平台支持

Windows / Linux / macOS 三平台适配(macOS 日常验证;其余经单元测试覆盖);node-pty 优先预编译二进制,失败需编译工具链(Windows VS Build Tools / Linux make+g+++python3 / macOS Xcode CLT)。

🤝 参与贡献

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

⭐ Star History

👥 贡献者

感谢每一位贡献者:

🔗 友情链接

  • 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 服务;官网

评论

0
最新优先