bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
侧边栏多选清空(归档)工作区对话,并批量删除已清空的空工作区。支持会话行/工作区头行勾选、半选态、全选、二次确认与失败保留;删除工作区保留文件夹与日志,会话移至未分组。
DSH Web 插件:多选清空(归档)工作区对话 + 批量删除空工作区。
在侧边栏会话列表底部新增「多选」入口,进入多选模式后每一行都会出现勾选框, 点选若干会话/工作区后一键「清空选中」——批量归档全部选中的对话; 会话已清空的空工作区可用红色勾选框批量删除工作区。
Esc 或工具条「✕ 退出」退出;
退出后行上的勾选框会完全清理,不留任何痕迹。清理中 3/10…);
失败项保留选中并在 toast 提示,其余成功项已归档。「清空」在平台语义里是归档(archive):会话从列表移除、日志与文件保留。 一个工作区的普通会话全部归档后就没有内容可清了——此时灰色/红色框就是在告诉你 "这行已经没有可清空的会话"。要彻底移除这个工作区,请用红色删除框。
┌─────────────────────────────────────────────┐
│ 浏览器插件 (client bundle) │
│ · sidebar.footer.action 槽位注册「多选」入口 │
│ · 多选模式: 行勾选框 / 工具条 / 确认弹窗 │
│ · 分组感知行映射(标题匹配, 不依赖内部组件) │
└──────────┬──────────────────────────────────┘
│ 读取 ctx.sessions.list / ctx.workspaces.list
│ 调用 archiveSession() / delete()
┌──────────▼──────────────────────────────────┐
│ 平台客户端服务 (SessionRuntime / WorkspaceRuntime)│
│ · 会话/工作区基线投影(zustand store) │
│ · RPC: workspace.archiveSession / workspace.delete│
└──────────┬──────────────────────────────────┘
│ Host RPC
┌──────────▼──────────────────────────────────┐
│ 服务器插件 (cordis 插件行) │
│ · 声明插件行 + GET /multi-clear/status │
└─────────────────────────────────────────────┘
sessions.list / workspaces.list 快照)+ DOM 行标题匹配,
不依赖任何内部组件实现;dsh.bundle.patch 为纯 insert,兼容热挂载。# npm 安装(发布后)
dsh plugin --profile web add dsh-multi-clear
# 或本地源码安装
dsh plugin --profile web add /path/to/dsh-multi-clear
会自动应用本包 dsh.bundle.patch(cordis.patch.yml)注册插件行。
把以下依赖加入 $DSH_HOME/profiles/web/package.json:
{
"dependencies": {
"dsh-multi-clear": "https://github.com/Flonger/dsh-multi-clear/releases/latest/download/dsh-multi-clear-0.1.0.tgz"
},
"dsh": {
"profile": {
"bundles": [ "…", "dsh-multi-clear" ]
}
}
}
然后在 $DSH_HOME/profiles/web 下执行 pnpm install,重启 DSH 应用。
把本仓库地址或 README 交给您的 DSH/Codex/Claude 助手,它会按方式一/二完成安装。
✕ 退出 / 已选 N 项[ · 工作区 M] / 全选 / 删除工作区(M) / 清空选中。规则:仅"普通会话"可清空——子代理会话、已归档会话、空白草稿会话(新会话)不参与勾选; 搜索模式下不做勾选(退出搜索即可)。全选只作用于可清空会话,不含删除工作区。
覆盖配置写进 $DSH_HOME/profiles/web/cordis.patch.yml:
- id: dsh-multi-clear
config:
confirmBeforeClear: false # 清空前跳过二次确认(默认 true)
客户端进入多选模式时会读取 GET /multi-clear/status 下发的 confirmBeforeClear。
# 服务端插件已生效
curl http://127.0.0.1:43120/multi-clear/status
# → {"ok":true,"plugin":"dsh-multi-clear","confirmBeforeClear":true}
# 客户端 bundle 可访问
curl -o /dev/null -w "%{http_code}\n" http://127.0.0.1:43120/plugins/dsh-multi-clear/client.js
# → 200
刷新页面后侧边栏底部应出现「多选」按钮。
dsh-multi-clear/
├── package.json # dsh.client 声明(platform=web + inject 依赖)
├── cordis.patch.yml # bundle 层插件行(纯 insert, 兼容热挂载)
├── src/index.js # 服务端半部(插件行 + /multi-clear/status)
├── client/client.js # 浏览器半部(lazy-CJS 客户端 bundle, 单文件无构建)
├── test/smoke-client.mjs # 客户端零依赖冒烟测试(派生逻辑 + slot 注册 + 渲染)
├── test/smoke-server.mjs # 服务端路由冒烟测试
├── .github/workflows/publish.yml # 打 tag 自动发布 npm
├── publish-to-github.sh # 一键发布到 GitHub + DSH 插件市场
└── assets/preview.png
pnpm test # 冒烟测试: 客户端派生逻辑 + slot 注册 + 入口渲染 + 服务端路由
服务端测试需要能解析
@deepseek-ai/schemastery的 node_modules (本仓库已建符号链接指向 web profile 的 node_modules,见.gitignore)。
GH_TOKEN=ghp_xxx ./publish-to-github.sh # 发布到 GitHub + 插件市场
GH_TOKEN=ghp_xxx NPM_TOKEN=npm_xxx ./publish-to-github.sh # 同时发布 npm
或推送 v* tag 触发 GitHub Actions 自动发布 npm(见 .github/workflows/publish.yml)。
Q: 为什么有的行不能勾选? A: 灰色框 = 该行没有可清空的会话(会话已全部归档的工作区/空白草稿行); 子代理会话与已归档会话本身不参与勾选;「展开其余 N 个会话」里隐藏的会话 可先用工作区头行勾选或全选覆盖,或点开溢出按钮后再勾。
Q: 清空和删除工作区有什么区别? A: 清空 = 归档会话(会话从列表移除,日志与文件保留,可随时通过导入重新读回); 删除工作区 = 从工作区列表移除(文件夹与会话日志保留,会话移至未分组)。 两者都不会删除磁盘上的任何文件。
Q: 退出多选后为什么看不到圈圈了? A: 退出时会自动清理所有注入的勾选框/类名/数据集(并带 CSS 兜底), 保证侧边栏恢复原样。
Q: 会误删我的会话吗? A: 清空与删除都需要二次确认;归档/删除逐条执行,失败项保留选中并提示。
/multi-clear/status 只读状态路由。