Skip to main content

dsh-popout-sidebar

38Stars1Forks0Issues0Watchers

Enables a pop-out sidebar that can be detached from the main window for independent viewing.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
JavaScript
License
MIT
Branch
main
dsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add dsh-popout-sidebar

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin e2mcc/dsh-popout-sidebar for me: review the repository at https://github.com/e2mcc/dsh-popout-sidebar first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

一句话定位

给 DeepSeek Harness Web UI 增加一个可弹出为独立浏览器标签页的侧边栏,实时列出代理创建或修改的文件以及工作区目录树,并按文件类型(代码、Markdown、图片、PDF、HTML)预览内容。

核心能力

  • 追踪代理通过 write/edit 工具写入或修改的文件,自动加入产物列表(同时记录编辑前后的差异片段)。
  • 对 bash/pwsh 这类不透明执行器做工作区快照对比,把脚本间接生成的文件(如 python make_chart.py 输出的 PNG)并入产物列表。
  • 一键把侧边栏弹出为独立浏览器标签页(/popout-sidebar),可拖到另一块显示器上更大更清晰地查看。
  • 按文件类型自动选择预览方式:代码走语法高亮 + 行号、Markdown 渲染成 HTML、图片直接显示、PDF 用内置 pdf.js 渲染(独立标签页则走浏览器原生查看器)、HTML 在沙箱 iframe 里渲染。
  • 内置文件树,可懒加载展开工作区目录并直接预览文件;切换会话时文件树会自动重新指向新工作区。
  • 一键复制文件路径,或把 @路径 引用写入当前会话的输入框(失败则降级为剪贴板复制)。

技术实现

  • 语言: JavaScript(ESM,无 TypeScript;build 产物为 Node 端 host.js 与浏览器端 client.js)
  • 关键依赖: cordis(插件加载与 schema 注入,关键词中声明)/ React(客户端组件运行时,client/body.js:25 通过 require('react') 注入)/ 打包内置的 pdf.js(Mozilla PDFium 渲染器,src/vendor/ 目录)/ DSH 自带的 @deepseek-ai/dsh-client-ui-primitives(可选,用于走原生 CodeBlock 高亮)
  • 架构模式: 双半插件(Host + Client)。Host 在 Node 进程内监听 tools/result 与 tools/execute 事件追踪产物、注册 /popout-sidebar/* HTTP 路由、注册 slots.inject('settings.section');Client 通过 shell.overlay 槽位注册常驻按钮 + 浮动面板,二者通过 HTTP 路由通信。构建脚本 scripts/build.js 把 src/shared/、src/host/、src/client/ 用 @@占位符@@ 拼成单文件 bundle。
  • 入口文件: host 静态入口 src/index.js(动态加载 src/host.js)、client 单文件 bundle src/client.js、manifest 补丁 cordis.patch.yml、DSH 元数据 package.json#dsh

适用场景

当代理在长时间会话里频繁写文件、改代码、跑脚本生成图片/PDF,而你希望把工作区和文件变更摆在 DSH 对话旁一眼可见时使用;尤其适合需要在大屏(外接显示器)上独立查看产物的工作流,以及对文件结构和差异比对有强需求的开发场景。

前置依赖与兼容性

依赖最低版本说明
DSH未声明插件通过 dsh.bundle.patch 与 dsh.client.inject 注册,需要宿主支持 cordis bundle patch 机制与 shell.overlay/settings.section 槽位
Node.js>= 20package.json#engines 声明
平台跨平台通过 ctx.get('fs') 抽象访问文件系统,无原生模块、无平台相关代码
原生模块无文件读取走 DSH 的 fs 服务,PDF 渲染在浏览器侧完成

安装方式

dsh plugin --profile web add github:e2mcc/dsh-popout-sidebar

配置项

配置保存在浏览器 localStorage 键 dsh-popout-sidebar:settings,可在 DSH 设置 → Popout Sidebar 选项卡中调整。

配置类型说明默认值
默认展开开关页面加载后侧边栏是否默认展开;关闭则默认收起,需点右上角图标打开开
自动刷新开关面板打开时是否每 2 秒拉取一次产物列表,保持列表与后端追踪状态同步开
文件树开关是否在侧边栏显示「文件树」标签页,用于浏览工作区目录开
最短面板宽度数字(%)面板占窗口宽度的最小百分比(20–60 可调);更宽可通过拖动面板左边缘临时调整20
预览区默认高度数字(%)预览区占面板高度的百分比(20–80),决定列表/预览区分界线的初始位置;仍可拖动分界线临时调整70

常见问题

Q: 安装后需要在浏览器做什么操作?

A: 装完先重启 dsh web 让 host 端重新加载,然后在浏览器做 Cmd/Ctrl+Shift+R 硬刷新;右上角会出现常驻的「产物」图标按钮(即使没有当前会话也可见),点击即可展开侧边栏。

Q: 这个侧边栏和其他 sidebar 插件冲突吗?

A: 不冲突。它把面板固定在右侧,当其他 sidebar 插件打开时本面板会自动让位到其左侧,二者可同时显示;面板宽度通过读取宿主 --dsh-sidebar-width 变量做位移偏移。

Q: 「清除」按钮会删除磁盘上的文件吗?

A: 不会。清除只会从内存里的产物列表移除条目(host 端的 removeFile 仅 splice 数组),磁盘文件保持不变;面板顶部还有提示文案「仅清除内存记录,不删除磁盘文件」。

Q: 它怎么追踪 shell 命令产生的文件(比如 python 脚本生成的 PNG)?

A: 对 bash 和 pwsh 这两个执行器,插件在工具执行前后对工作区做指纹快照(递归遍历目录,用文件 version token 做指纹,跳过 node_modules、.git 等大目录,深度 16、5000 文件上限),比对差异后把新增或改写的文件并入产物列表;其他不透明执行器暂不追踪。

Q: 设置保存在哪里?跨设备同步吗?

A: 保存在当前浏览器 localStorage 键 dsh-popout-sidebar:settings,不跨设备同步;如需在新设备上获得同样设置,建议截图后手动调整,或直接复用同一浏览器 profile。

Q: 独立标签页里的 PDF 预览为什么能离线用?

A: pdf.js 的 lib 与 worker 被打包进了 src/vendor/,由构建脚本内联进 src/host.js,host 通过 /popout-sidebar/pdfjs/pdf.min.js 与 pdf.worker.min.js 路由以一年强缓存吐给浏览器;侧边栏内嵌自定义 pdf.js 渲染,独立标签页走浏览器原生 PDF 查看器。

上手难度

入门 — 安装一条命令即可使用,零配置即可看到产物追踪与预览;要体验全部功能(设置调优、清除模式、独立标签页、文件树)只需在 DSH 设置里开关几次。

已知问题与限制

  • 文本预览单文件最多截取 200,000 字符,超过会显示 (truncated preview) 提示(src/host/core.js:198)。
  • 编辑差异片段会被裁剪到 8,000 字符 / 段,超长替换区域只会展示首部(src/host/core.js:153)。
  • 产物列表最多保留 1,000 条记录,超出会按插入顺序丢弃最早条目(src/host/core.js:52)。
  • 工作区快照递归深度上限 16、单次最多扫描 5,000 个文件,并固定跳过 node_modules、.venv、.git、dist、build 等目录(src/host/core.js:22-29);无法自定义跳过目录。
  • 仅对 bash 和 pwsh 两个执行器做快照对比追踪,其他「不透明」执行器产生的文件不会被自动收录(src/host/core.js:19)。
  • 媒体路由单次读取上限 25 MB,体积更大的二进制预览可能失败(src/host/routes.js:64)。
  • 独立标签页默认强制浅色主题(在另一显示器上更稳定),如需深色需在 URL 后手动加 ?scheme=dark(src/host/page.js:8-12)。

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/e2mcc/dsh-popout-sidebar)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory