dsh-workspace-optimize
为 DeepSeek Harness(DSH) 的左侧工作区视图提供增强侧栏:收藏、颜色标签、工作区树、排序与置顶、跨工作区移动、正文搜索、会话状态灯与 Windows 通知。
支持版本:>= 0.2.0-rc.1
安装
npm i dsh-workspace-optimize
或
dsh plugin --profile desktop add dsh-workspace-optimize
特性
侧栏
- 增强侧栏切换:默认开启插件自定义增强侧栏,可切换回原版侧栏
- 收藏、优先级、更改颜色:同时为工作区文件夹和会话添加收藏、排序优先级和更改颜色功能
- 增强侧栏已基本完全还原原版侧栏功能,保证操作习惯平滑过渡
会话状态
- 为会话添加状态指示灯,在会话运行时/等待交互/完成时会分别亮起蓝色呼吸灯、黄色呼吸灯以及绿色灯,直观显示对话状态
- 会话状态桌面提醒:在会话需要审批/等待回答/完成时会通过系统通道发送通知,随时掌控会话状态
会话操作(... 菜单)
增强侧栏现可直接右键会话与工作区打开菜单,鼠标悬停可显示会话信息
视图选项(侧栏头部 ☰)
- 增强侧栏支持以最后更新顺序进行自动排序,最后更新的会话会排至最上面
使用
切换侧栏样式
「设置 → 工作区增强 → 侧栏样式」:
- 增强侧栏:替换
sidebar.workspaces的渲染 - 官方侧栏:释放占用,官方侧栏原地位恢复(无需重载)
维护区块
桌面端窗口没有浏览器刷新入口,因此设置页提供:
| 控件 | 用途 |
|---|---|
| 刷新侧栏数据 | 只重新拉取侧栏数据,不重载页面 |
| 重新加载界面 | 重载页面以加载更新后的 client.js(会丢失未发送的输入) |
| 界面版本 | 对比页面与 Host 的界面修订号,不一致时按钮高亮提示重载 |
Host 半(
index.js、lib/)的更新仍然需要重启应用,页面重载无法加载。
空会话与僵尸会话
- 没有任何消息的空白草稿默认隐藏(与官方一致)
- 打开「显示空白会话」后,它们的标题显示为「新建会话」,便于识别
- 官方不支持删除会话,只能归档;本插件不提供删除
设置项
设置页与 /state 中的 settings 字段一一对应:
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
插件总开关(通知与状态广播仍会工作,仅关闭通知) |
sidebarMode |
optimized |
optimized 增强侧栏 / native 官方侧栏 |
showBlankSessions |
false |
是否显示空白会话草稿 |
notify.complete |
true |
会话完成时通知 |
notify.waiting |
true |
等待你确认时通知 |
notify.error |
true |
会话出错时通知 |
notify.started |
false |
会话开始运行时通知 |
notifyWhenVisible |
false |
窗口可见时也通知 |
dnd.enabled |
false |
免打扰时段开关 |
dnd.start / dnd.end |
23:00 / 08:00 |
免打扰时段(本地时间) |
通知
- 来源:Host 监听宿主会话事件(
api-session/status、api-session/activity、api-session/error、session/event),把事实推给浏览器半 - 通道:SSE(
EventSource)为主,失败时回退为轮询 - 展示:
NotificationAPI → Windows 通知中心;点击跳转到对应会话 - 权限被拒时降级为页面内提示;桌面模式通常已授权
- 页面关闭后不再收到通知(通知依赖页面进程)
数据与隐私
- 本插件自己的数据是一个 JSON 文件:
%USERPROFILE%\.dsh\workspace-optimize-state.json(Host 进程设置了DSH_PROFILE_DIR时落在该 profile 目录) - 内容:颜色、优先级、设置、工作区收藏、自建会话收藏
- 纯本地、无遥测、无外部网络请求;HTTP 接口只监听本机 DSH 的 loopback 端口
- 附件/会话日志始终由 DSH 自己管理,本插件不复制、不上传
兼容性
| 依赖 | 必需性 | 影响 |
|---|---|---|
DSH 0.2.x |
必需 | 宿主版本 |
@michengai/dsh-archive-manager |
可选 | 提供收藏共享(两处星标一致)与跨工作区移动;缺失时收藏由本插件保存、移动入口隐藏 |
官方 Schedule |
内置 | 有活跃定时任务时在会话行显示时钟标记 |
| 通知权限 | 可选 | 被拒时降级为页面内提示 |
说明:本插件不声明 sidebar.workspaces 的子插槽(sidebar.workspaces.session.*),因此 Archive Manager 等第三方插件的行级菜单不会出现在增强侧栏中;它们的设置页入口不受影响。
已知限制
- 不支持删除会话:官方没有删除 API(只能归档),本插件同步该语义
- 行级子插槽不声明:Archive Manager / Schedule 的会话行菜单在增强侧栏中不显示(Schedule 的时钟标记由本插件用官方数据自绘代替)
- 排序模式:「手动」写入宿主会话顺序;「最近更新」严格按最近用户消息时间排,手动排序在该模式下不可见
- 状态灯与「完成未查看」是内存态:重启后绿点消失,「最近修改时间」回退到投影时间或创建时间
- 正文搜索最多展示 30 条结果,不做全文分页
- 跨工作区移动会搬迁会话日志并改写工作目录;运行中的会话、子代理会话、目标已存在同名日志会被拒绝
- 页面关闭后无通知
- 侧栏替换属于
shadows-shipped-ui类型的扩展,DSH 大版本升级后可能需要适配
常见问题
切回官方侧栏后侧栏空白? 本插件注册时不声明子插槽,正常情况下撤销注册即可原地恢复官方侧栏。若遇到空白,用「设置 → 工作区增强 → 维护 → 重新加载界面」重载一次。
增强侧栏不显示? 检查设置里「侧栏样式」是否为「增强侧栏」;修改后如未生效,重载界面(或重启应用)。
归档后会话行没有立即消失? 归档采用乐观更新,行会立即按当前过滤隐藏/出现,随后后台静默校正。
运行状态灯反应慢?
状态由 Host 的 api-session/status 驱动,会随事件广播即时刷新;若网络/SSE 中断,回退轮询会有几秒延迟。
通知没有弹出?
依次检查:系统通知权限、设置里的通知类型开关、免打扰时段、窗口可见时也通知 是否开启。
会话显示「新建会话」? 这是没有任何消息的空白草稿;在设置里关闭「显示空白会话」即可隐藏。
开发
- 纯 ESM,无构建步骤:
index.js(Host)与client.js(浏览器,Module Loader 格式) - 语法检查:
node --check index.js
node --check client.js
node --check lib/api.js
node --check lib/sidebar.js
node --check lib/state.js
node --check lib/adapters.js
node --check lib/events.js
- 分支:
main为稳定版;实验性改造在独立分支进行 - 说明文档:docs/SIDEBAR-REWRITE.md(侧栏替换的设计与实现)、docs/RESEARCH.md(宿主扩展点调研)
目录
index.js Host 半入口(apply / inject / 诊断)
client.js 浏览器半(插槽、侧栏、弹层、通知、搜索)
lib/state.js 插件自有状态读写与校验
lib/adapters.js 收藏 / 移动 / 置顶 / 排序目标适配
lib/events.js 宿主会话事件采集(状态、活动、错误)
lib/sidebar.js 自绘侧栏数据源(工作区、会话、归档/置顶、定时任务)
lib/api.js /api/workspace-optimize/* 路由与 SSE
locale/ 插件显示名与描述
docs/ 设计文档
License
本插件为社区项目,与 DeepSeek AI 官方无隶属关系。
No comments yet. Be the first to write one.