omdsh-dev/DSH-better-sidebar
开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, Git, and sub-agent pages.
已收录
2046
Ui
Bundle 已验证
预览
功能介绍
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
适合
- 希望在一个集成工作台内使用文件、编辑、预览、终端、Git 和子代理功能的 DSH Web 用户。
- 需要通过统一侧边栏 API 注册自定义 Tab 或文件查看器的插件开发者。
- 需要按会话持久化布局、Tab 和面板,并适配桌面与移动端的多会话工作流。
不适合
- 需要 push、pull 或 fetch 的 Git 工作流,因为内置 Git 面板不提供这些操作。
- 期待内置 DOCX、XLSX 或 PPTX 预览的用户;这些查看器已移至独立的推荐插件。
- 要求保留独立底部面板的移动端工作流,因为低于 768px 时其 Tab 会并入右侧栏。
- 依赖共享登录态或禁止 iframe 嵌入的网站,因为沙箱会限制 Cookie,部分站点也会拒绝被嵌入。
README
dsh-better-sidebar
🌏 · English
✨ 功能一览
- 🗂️ 文件工作台:资源管理器(懒加载目录树;软链接按目标类型展示——目录软链接可展开、失效链接标红)+ CodeMirror 编辑器;图片 / Markdown(含 Mermaid 图表,strict 安全渲染 + 点击放大)/ HTML / PDF / Office 内联预览
- 🌐 内嵌浏览器:多开网页 tab,后退 / 前进 / 刷新;内容运行在沙箱 iframe;外链默认按协议分流——HTTP 在侧边栏打开、HTTPS 走系统浏览器(设置页可分别调整)
-
💻 真实终端:xterm.js + node-pty 真实 shell,断线重连回放;可选为模型注入
terminal_*工具 - 🌿 Git 面板:真 diff + VSCode 式 diff tab、历史、右键暂存 / 提交 / 还原
- 🧩 后台任务页:subagent 拓扑 + 后台任务(退出码 / 实时输出 / 强制终止)
- 🪟 双工作台:右侧栏 + 底部面板;拖 Tab 拆分 / 合并分栏(可跨面板),移动端自动合并全宽抽屉
- 🔁 会话隔离:布局 / Tab / 面板按会话持久化,陈旧状态自动净化
- ⚙️ 声明式设置:设置页「侧边卡片」逐项独立开关,二级设置经齿轮弹窗
- ⚡ 按需加载:启动只拉 ~325KB 核心,终端 / 编辑器 / Mermaid 图表等重依赖用到才按需拉取(设计文档)
- 🌏 多语言:界面文案跟随 DSH 语言(zh / en)实时切换
🔌 核心理念:服务优先——内置的 7 tab + 6 viewer 与第三方插件通过同一套
ctx.betterSidebarAPI 注册,能力完全对等;官方不再内置、可由生态提供的功能,交由生态插件实现。接入文档见下方「🔌 服务化」与 外部插件接入指南。
🆕 最近更新
v0.14.0
⚠️ 本版适配 DSH 0.1.0-rc.8:全部
@deepseek-ai/*peer / devDependencies 升至^0.1.0-rc.8(含传递依赖,lockfile 零 rc.7 残留),cordis同步^4.0.0-rc.8,CI 挂载冒烟钉版@deepseek-ai/dsh@0.1.0-rc.8。rc.7 及更早的 DSH 环境将无法解析本版依赖,请先升级 DSH。自 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"]+#rootcalc 宽度防桌面壳加性溢出;chunk 激活重验证(HEAD+ETag 保留未变 chunk,5s 超时兜底 fail-open);桌面信号自动探测(win32 advanced 标题栏兼容 32px 避让,手动 pref 可覆盖);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分组渲染,列表独立滚动(弹窗不再随条目数无限增长)
🐛 修复
- 🔧 适配 DSH 0.1.0-rc.8(#232):13 个
@deepseek-ai/*peer / devDependencies 升至^0.1.0-rc.8(含传递链,lockfile 零 rc.7 残留),cordis同步^4.0.0-rc.8;移除随 rc.8 消失的dsh-client-web-react/dsh-client-schema-form(壳模块表不再提供、插件零引用);CI 挂载冒烟钉版@deepseek-ai/dsh@0.1.0-rc.8;pnpm 11.8 supply-chain 校验适配 - 🧩 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.jschunk(~7MB,无 mermaid 文件零加载);纵深防御渲染——securityLevel: 'strict'+htmlLabels: false(节点文字走真实 SVG<text>)+ SVG 注入前二次清洗(删foreignObject/script/外来 HTML 元素、剥@*/on*/href属性);点击图表在弹窗中放大(滚轮以鼠标为中心缩放、拖拽平移、工具栏与快捷键),深浅色跟随重渲、解析失败回退原码 - 🖥️ 终端 shell 与 shellArgs 可配置(#125):
cordis.patch.yml的better-sidebar.config可指定shell/shellArgs(shellArgs非空时完全替换默认参数;未配置维持自动解析$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崩溃);独立安装行为不变 - 🔧 peer 依赖对齐 DSH 0.1.0-rc.7(#207,修复 #206):全部
@deepseek-ai/*peer / devDependencies 从^0.1.0-rc.6升至^0.1.0-rc.7,CI 挂载冒烟同步钉版——消除主框架升至 rc.7 后 rc.6 / rc.7 混用依赖树导致的agent-presets: refusing to compose an unscoped context(选模型 / 发消息报错)
v0.13.0
✨ 新功能
- 📁 文件窗口与资源管理器二合一(#151):新
editorExplorer设置(编辑器卡齿轮)——文件 tab 增加路径输入框头部 + 可开关的右侧停靠文件树(每 tab 记忆展开/宽度,左缘拖拽调宽 160~480px,全局文件名搜索走 hostfs.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 偶发失败修复
🚀 安装
前置:已装好 DSH(dsh web 能正常运行),Node.js ≥ 20、pnpm ≥ 10。
dsh plugin --profile web add dsh-better-sidebar@latest
装完硬刷新浏览器(Cmd/Ctrl+Shift+R)即可看到侧边栏(DSH 对 client 改动热加载,无需重启;仅 host 半更新时需要重启)。
常见问题常见问题
在启用了 DSH 的终端中执行已验证命令 dsh plugin --profile default add github:omdsh-dev/DSH-better-sidebar。命令会解析公开 package 元数据,并保持插件与本页展示的目录身份一致。
兼容性以页面上展示的 bundle 与 profile 状态为准。如果某个 profile 尚未检测到,请先保持禁用,并在生产启用前阅读仓库文档。
GitHub 链接和 activity 元数据是 release 与维护状态的来源。新版本发布后重新查看本页,确认目录已经观察到最新版本。