LiuJunheng/DeepSeekHarnessGreen--plugins-dsh-sidebar-lite ↗★ 16
dsh-sidebar-lite
WebUI 右侧侧边栏:① 文件资源管理器(工作区根 sandboxPolicy.workspaceRoot 为默认根、目录优先/隐藏文件灰显、支持上级任意路径浏览);② 文件预览/编辑(受控文本区 + 图片/PDF/MD 预览、保存回写);③ 内嵌浏览器(沙箱 iframe + 地址栏导航);④ CMD 终端(轻量 SSE 流 + cmd.exe 逐行执行);⑤ 任务管理(后台任务列表/输出/停止)。零原生依赖、零构建,纯 JS 注入。参考/复刻自第三方插件 DSH Better Sidebar(omdsh-dev/DSH-better-sidebar),本版内置其资源管理/文件预览/浏览器/终端/任务五项核心能力。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:LiuJunheng/DeepSeekHarnessGreen#123f0e98ee3267b9da82e9af6e74c1ab93901deb&path:plugins/dsh-sidebar-lite说明文档
阅读完整 README ↗dsh-sidebar-lite(WebUI 侧边栏插件)
三国云:「关云长千里走单骑,只取五样家什——兵马、文牍、烽火、令旗、军情。」 本插件以「资源管理、文件预览/编辑、内嵌浏览器、CMD 终端、任务管理」五样本事,为 DeepSeek Harness 的 WebUI 右侧送来一方侧栏。
一个 DSH 内置插件,在 WebUI 右侧注入一个可折叠、可左右自由拉伸宽度(拖动左边缘)的侧边栏,能力聚焦五项:
展开/收拢交互(参考官方左侧栏 + better-sidebar 的 toggle cluster,开关在面板顶部,不挡内容)
- 两个开关都用官方样式圆形图标按钮(无边框 / 圆形 / secondary 墨色 / hover 加深填底),图标为「右侧面板」轮廓(复刻官方
IconPanelRightOutline16),非字符箭头。- 收起态:右缘垂直居中的圆形图标按钮(
right:10px;top:50%)点击展开;避开官方右上角「下载对话」按钮。- 展开态:折叠按钮在标题条右端(内容区之外,绝不叠在列表中间高度);左边缘保留 5px 透明拖拽条(
ew-resize)自由调宽。- 展开时官方 header 已被
#root的margin-right让位推到面板左侧,面板右上角无官方按钮,故标题条右端与下载按钮不重叠。
- 文件资源管理器 — 默认以会话工作目录(
session.header.cwd,即用户在 WebUI 选择的工作区)为根;无会话 / 会话无 cwd 时回退到工作区根(优先workspaceRegistry工作区注册表,次选显式配置的sandboxPolicy.workspaceRoot,兜底链绝不落process.cwd()=安装目录runtime\dsh),列出目录树(目录优先、隐藏文件灰显、目录懒加载展开、单目录最多 1000 条防溢出),头部带 「返回上级 ⬆」、「回到工作目录」按钮(SVG 房子 + 「目录」文字标签,目标 = 会话工作目录cwd,悬停显示实际目标路径)与可编辑路径框(回车跳转到任意路径),彻底放开上级/任意路径浏览——不再把会话工作目录当作锁死的固定根;文件行支持右键:以官方 @ 引用插入(新,衔接 DSH 官方 @+文件 机制,见下)、另存为(仅文件,本地机器用系统对话框自选保存位置)、复制相对路径、复制绝对路径(复制成功短暂提示"已复制")。 - 文件预览 / 编辑 — 文本文件就地编辑并保存回写;图片 / PDF / HTML 通过
fetch → blob → objectURL预览。路径以绝对路径为准,不强制锁在工作目录内(支持浏览上级时同时预览/编辑上级文件)。- 独立预览侧栏框:点击文件在主侧栏旁的第二个侧栏框里打开(
right: 主面板宽,默认 360px 可拖左缘调宽),资源管理器列表不被挤占、可边看列表边预览;关闭侧栏自动收起预览框。
- 独立预览侧栏框:点击文件在主侧栏旁的第二个侧栏框里打开(
- 内嵌浏览器 — 地址栏导航 + 沙箱
iframe,用于在侧栏内浏览网页。 - CMD 终端 — 逐行执行命令的轻量终端:
child_process.spawn(cmd.exe)+ SSE 流推送输出(带历史回放,刷新后重连可恢复现场);避免node-pty原生依赖,契合绿色版零原生依赖定位。命令结果由 cmd 自行回显。 - 任务管理(后台任务) — 复用官方 session/jobs 推送镜像(
jobsBySession)列出当前会话的后台任务(状态、标题),并可查看 AI 读取到的输出(jobs.output,从会话事件日志重放,不消费模型游标)与请求停止(jobs.kill,复用官方 jobs 注册表)。
引用与致谢(Reference & Acknowledgment)
本插件的交互形态与整体设计参考、复刻自第三方开源插件 DSH Better Sidebar:
-
项目名:
omdsh-dev/DSH-better-sidebar -
主页:
-
本版取其核心能力并做对齐重构:
来源能力(Better Sidebar) 本版取舍 文件资源管理器 / 文件预览 / 内嵌浏览器 保留(核心,并放开上级目录浏览) 会话工作目录溯源( session.header.cwd)与工作区兜底升级(资源管理器默认根 = 会话工作目录 header.cwd,无会话/无 cwd 时回退工作区根——权威来源workspaceRegistry工作区注册表,次选显式配置的sandboxPolicy.workspaceRoot;兜底链绝不落 dsh 进程 cwdruntime\dsh,引避坑 #65)资源管理器「回到工作目录」按钮 新增 + 图标升级(在刷新按钮旁,目标 = `cwd 运行中会话定位( currentvssessionId)修复(官方 list store 用 current字段表示当前激活会话 id,原代码误用不存在的sessionId字段导致sessionId恒为 null,任务面板永远空、会话 cwd 拿不到,引避坑 #64)后台任务(Jobs)列表/输出/收割 保留(列表走官方 jobs 推送镜像,输出/停止走 jobs.output / jobs.kill) 终端(node-pty / xterm) 换为 cmd.exe + SSE的轻量方案(绿色版零原生依赖,逐行执行)自定义头防跨站 + DNS-rebinding / CSRF 边界 保留( X-DSH-Sidebar-Lite: 1)Git 面板、Diff、Subagent、多分栏等 去除(偏离本版本职定位)
特此向原创作者致谢。若介意使用,可随时禁用本插件;本插件不修改任何官方文件/包。
工作方式(零依赖、零构建)
- 宿主端
lib/index.js:在 DSH 的webServer上注册路由前缀/__dsh/sidebar-lite/*。session.cwd/fs.tree/fs.read/fs.write/terminal.*/jobs.*:POST JSON。file:GET 回原始媒体字节(预览 / 另存为)。terminal.stream:GET 返回 SSE 流(命令输出回放 + 实时推送;req.on('close')只摘监听器、不杀进程,重连复用,terminal.kill才真正结束)。- 所有请求必须携带自定义头
X-DSH-Sidebar-Lite: 1,跨域页面无法伪造;路径一律按绝对路径处理,允许上溯浏览(安全边界从「目录围栏」让位于「自定义头 + 本地进程」)。
- 客户端
lib/client.js:走window.__ModuleLoader__.load注入到 WebUI,挂一个document.body上的 portal 面板(与 Better Sidebar 挂载路径一致,不依赖官方内部布局插槽),订阅ctx.sessions.list定位当前激活会话,并读取其jobsBySession生成任务列表。
「以官方 @ 引用插入」= 衔接新版 DSH 官方 @+文件 引用
官方 dsh-client-ui-reference 的 @ 触发以会话工作目录(header.cwd)为根、用相对路径的 @path / @"path with spaces" 作为提示词文本,并以结构化 occurrence(输入框 chip + 提交时经 source codec 序列化)呈现。本插件右键文件该项时:① 把所选文件换算成相对会话工作目录的相对路径(Windows 大小写不敏感,跨盘/目录外拒绝并提示);② 经 standard-kit sessions.provideInfo 取当前输入机状态(draft/draftRev)与 inputActions;③ 向当前会话作用域派发与官方 @ 菜单 onPick 完全同一个事件 slash/input-insert-reference,由官方输入机 mint 成 chip(草稿里显示 @文件名,发送时序列化为完整相对路径 mention)。侧栏已解析出权威会话工作目录 cwd(header.cwd),直接作为官方引用的根,无需额外请求;纯客户端改动,同步运行副本后强制刷新页面即生效,无需重启服务。
安装 / 卸载
插件通过 cordis.patch.yml 以一行 bundle 插入 profile 插件树,随 DSH 服务启动加载:
右下角 → 插件管理 →(enable/disable dsh-sidebar-lite)
或直接编辑配置文件,增删 dsh-sidebar-lite 一行后再重启服务。
路由与安全一览
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /__dsh/sidebar-lite/session.cwd | 解析会话权威工作目录 + 工作区根(资源管理器默认根) |
| POST | /__dsh/sidebar-lite/fs.tree | 列目录(目录优先、隐藏灰显、truncated) |
| POST | /__dsh/sidebar-lite/fs.read | 读文件(文本/二进制 head) |
| POST | /__dsh/sidebar-lite/fs.write | 写文件(临时文件 + rename 原子化) |
| GET | /__dsh/sidebar-lite/file?sessionId=&cwd=&path=&download= | 读原始字节(预览 / 另存为用) |
| GET | /__dsh/sidebar-lite/terminal.stream?sessionId=&cwd=&tab= | SSE 流(命令输出/回放) |
| POST | /__dsh/sidebar-lite/terminal.open | 确保终端进程就绪(可复用) |
| POST | /__dsh/sidebar-lite/terminal.input | 写入一行命令到 cmd stdin |
| POST | /__dsh/sidebar-lite/terminal.kill | 结束终端进程 |
| POST | /__dsh/sidebar-lite/jobs.output | 重放某任务 AI 已读到的输出 |
| POST | /__dsh/sidebar-lite/jobs.kill | 请求停止某后台任务 |
安全要点:
- 所有请求走自定义头防跨站;路径以绝对路径为准,允许上溯浏览(用户自查范围,与
dsh-file-browser一致,不再是isWithin目录围栏);- 媒体文件上限 32MB、文本上限 1MB(超出置
truncated只读);- 终端的 SSE 流断开不杀进程(刷新/切页可重连恢复),仅「停止」按钮或
terminal.kill真正结束;插件卸载时会清理全部已开终端。
License
MIT(本插件自身代码)。设计参考来源为 omdsh-dev/DSH-better-sidebar,引用原则与署名见上文「引用与致谢」。