在侧栏列表上方加「工作区 / 最新会话」切换条,含固定会话分组、行级菜单(固定/取消固定、复制 Session ID)、标题过滤;pin 存于浏览器 localStorage,并对 dsh-plugin-pin-session 做一次性迁移与过渡双写。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:NattoCB/dsh-plugin-sidebar-views
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
语言 / Language:中文 | English
一个 DeepSeek Harness 客户端插件,升级侧栏会话列表: 列表上方加「工作区 / 历史会话」切换条——工作区是原生分组,历史会话把全部会话按最近排序平铺, 带相对时间戳、运行状态点与所属工作区标签;固定会话分组常驻顶部。 0.3.0 起历史会话再分「工作区 / 外部调用」两组,外部调用(headless 流量)默认折叠、实时计数。 0.3.4 起分组只看 workspace 成员资格:
Automation-*workspace 里的会话属「工作区」组, 其最新运行直接排在工作区组顶部;注册滞后的会话按 cwd→workspace 路径前缀兜底归组。 纯 DOM 实现——无 React、无 portal、不接管 slot;装进webprofile 重启即用。
✨ 功能一览
- 🔀 双视图切换条:列表上方两个 tab——「工作区」(原生 workspace 分组)与「历史会话」(全部会话按最近排序的单层平铺列表,含相对时间戳、运行中/已完成/待处理状态点、所属工作区标签)。
- 📌 固定会话分组:两种视图下都常驻列表顶部,实时计数、折叠状态记忆;已不存在的会话以置灰行显示,不会悄悄消失。
- 🗂️ 工作区 / 外部调用分组:历史会话分两组——「工作区」(挂在任意 workspace 下的会话,默认展开,按最近排序;
Automation-*workspace 也是正常 workspace,其最新运行就在本组顶部)在上,「外部调用」(真正无 workspace 的 headless 会话,如dsh --profile <x>直连创建)在下,默认折叠并显示实时计数。host 侧 workspace 注册滞后时按会话 cwd 对 workspace 路径做最长前缀匹配兜底归组。折叠状态存 localStorage(dsx2-groups);搜索时强制展开两组;折叠组完全跳过行渲染,上千条 headless 历史也不建 DOM。 - ⋯ 行级菜单:每一行(固定组与平铺行)都有「⋯」菜单:固定 / 取消固定会话、复制 Session ID。工作区视图的原生会话菜单(重命名/分叉/归档)同样注入「复制 Session ID」;原生工作区菜单的「在 Finder 中打开」固定排在「删除工作区」上方,且在 React 重渲染擦除后自动补回。
- 🔎 标题过滤:历史会话视图内置过滤框,按标题实时筛选。
- 📁 在 Finder 中打开:workspace 原生「…」菜单新增打开目录项,取菜单 fiber 携带的 workspace cwd,经宿主
workspaces.openPath服务激活——无宿主侧代码。 - 🧩 纯 DOM、零框架:不写 React、不开 portal、不接管 slot。切换条作为原生列表容器的第一个子元素植入;历史模式下用 CSS class 隐藏原生列表;keep-alive interval 在原生重渲染后自愈;
ResizeObserver在侧栏收窄成 rail 时整体隐藏。 - ⚡ 大列表性能:DocumentFragment 批量插入、视口外分组
content-visibility跳过 layout/paint、数据刷新 400ms 节流(tab 切换/折叠/搜索等直接交互路径不节流,保持即时);展开 2400+ 行实测毫秒级。 - 🔁 旧插件平滑迁移:检测到旧
dsh-plugin-pin-session时,启动时一次性合并其固定列表(id 去重、保持最旧优先,GET /pin-session/pins),过渡期每次固定/取消双写到旧插件POST /pin-session/pin|unpin;旧插件移除后两者均为静默空操作。
Quick Start
前置条件
- 已安装 DeepSeek Harness(
dsh web可运行)。 - 客户端 bundle 只在进程启动时进入 boot graph——安装后需要重启
dsh web。
安装(装入 web profile)
一条命令安装:
dsh plugin --profile web add github:NattoCB/dsh-plugin-sidebar-views
手动安装:在 profile 的 package.json 里,把包加入 dependencies、把插件名加入 dsh.profile.bundles,然后在 profile 目录跑 pnpm install,重启 dsh web。
运行
重启后侧栏列表上方即出现切换条,零配置。切换视图、固定会话、折叠分组的状态全部存浏览器 localStorage,刷新不丢。
存储与迁移
Pin 与分组状态都存浏览器 localStorage,固定关系跟随浏览器 profile,不跟随 DSH host:
| localStorage 键 | 内容 |
|---|---|
dsx2-pins |
固定列表(最旧优先 [{ id, title?, pinnedAt }]) |
dsx2-pins-collapsed |
固定分组的折叠状态 |
dsx2-groups |
工作区/外部调用分组的折叠状态(外部组默认折叠) |
对旧 dsh-plugin-pin-session 的迁移语义见功能一览 🔁:一次性合并 + 过渡期双写,均为静默容错。
卸载安全
从 profile package.json 的 dependencies 与 dsh.profile.bundles 两处同时移除本插件,然后重启 DSH。只删 node_modules 里的包而留下 bundles 条目,boot graph 会请求一个已不存在的 client.js——模块加载器将其视为致命错误,整个 web GUI 无法挂载。
Development
npm test # node --test: 包契约 + pin 合并逻辑
client/client.js 是 window.__ModuleLoader__.load({ id, factory }) bundle,与 DSH 自家客户端 bundle 同形。pin 合并逻辑导出为 exports._mergePins,测试跑的是真实代码而非拷贝。
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8978
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8978
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 5292
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
ccch1mneyyy/dsh-TUI★ 4819
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/DSH-better-sidebar★ 4290
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1478
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。