LiuJunheng/DeepSeekHarnessGreen--plugins-dsh-sidebar-lite16

dsh-sidebar-lite

WebUI 右侧侧边栏:① 文件资源管理器(工作区根 sandboxPolicy.workspaceRoot 为默认根、目录优先/隐藏文件灰显、支持上级任意路径浏览);② 文件预览/编辑(受控文本区 + 图片/PDF/MD 预览、保存回写);③ 内嵌浏览器(沙箱 iframe + 地址栏导航);④ CMD 终端(轻量 SSE 流 + cmd.exe 逐行执行);⑤ 任务管理(后台任务列表/输出/停止)。零原生依赖、零构建,纯 JS 注入。参考/复刻自第三方插件 DSH Better Sidebar(omdsh-dev/DSH-better-sidebar),本版内置其资源管理/文件预览/浏览器/终端/任务五项核心能力。

包名
dsh-sidebar-lite
版本
0.2.0
许可证
Apache-2.0
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:LiuJunheng/DeepSeekHarnessGreen#123f0e98ee3267b9da82e9af6e74c1ab93901deb&path:plugins/dsh-sidebar-lite

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 已被 #rootmargin-right 让位推到面板左侧,面板右上角无官方按钮,故标题条右端与下载按钮不重叠。
  1. 文件资源管理器 — 默认以会话工作目录session.header.cwd,即用户在 WebUI 选择的工作区)为根;无会话 / 会话无 cwd 时回退到工作区根(优先 workspaceRegistry 工作区注册表,次选显式配置的 sandboxPolicy.workspaceRoot,兜底链绝不落 process.cwd()=安装目录 runtime\dsh),列出目录树(目录优先、隐藏文件灰显、目录懒加载展开、单目录最多 1000 条防溢出),头部带 「返回上级 ⬆」「回到工作目录」按钮(SVG 房子 + 「目录」文字标签,目标 = 会话工作目录 cwd,悬停显示实际目标路径)可编辑路径框(回车跳转到任意路径),彻底放开上级/任意路径浏览——不再把会话工作目录当作锁死的固定根;文件行支持右键以官方 @ 引用插入(新,衔接 DSH 官方 @+文件 机制,见下)、另存为(仅文件,本地机器用系统对话框自选保存位置)、复制相对路径、复制绝对路径(复制成功短暂提示"已复制")。
  2. 文件预览 / 编辑 — 文本文件就地编辑并保存回写;图片 / PDF / HTML 通过 fetch → blob → objectURL 预览。路径以绝对路径为准,不强制锁在工作目录内(支持浏览上级时同时预览/编辑上级文件)。
    • 独立预览侧栏框:点击文件在主侧栏旁的第二个侧栏框里打开(right: 主面板宽,默认 360px 可拖左缘调宽),资源管理器列表不被挤占、可边看列表边预览;关闭侧栏自动收起预览框。
  3. 内嵌浏览器 — 地址栏导航 + 沙箱 iframe,用于在侧栏内浏览网页。
  4. CMD 终端 — 逐行执行命令的轻量终端:child_process.spawn(cmd.exe) + SSE 流推送输出(带历史回放,刷新后重连可恢复现场);避免 node-pty 原生依赖,契合绿色版零原生依赖定位。命令结果由 cmd 自行回显。
  5. 任务管理(后台任务) — 复用官方 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 进程 cwd runtime\dsh,引避坑 #65)
    资源管理器「回到工作目录」按钮新增 + 图标升级(在刷新按钮旁,目标 = `cwd
    运行中会话定位(current vs sessionId修复(官方 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,引用原则与署名见上文「引用与致谢」。