dsh-plugin-layout-tuner
August 17, 2026 · View on GitHub
DSH Web GUI 界面布局调节 + 自定义分类树插件。
功能
1. 布局调节(默认生效,无需进入任何模式)
- 会话列数:左侧栏会话列表网格列数 1-4(默认 2 列)
- 标题行数:会话标题换行 1 / 2 / 3 行(默认 1 行不换行)
- 聊天宽度:聊天内容宽度 748–1140px(默认 900px)
- 侧栏宽度:鼠标移到左侧栏右边框(与聊天区交界处)出现竖线手柄,直接拖拽即可调整宽度;宽度自动记忆,重启后回读参考
调整入口:左侧栏底部「▦ 布局」按钮(弹出面板),改动即时生效并持久化到 $DSH_HOME/dsh-layout.json。
2. 自定义分类树(左侧栏底部「🗂️ 分类」按钮进入)
围绕您自己定义的功能组织会话,与真实目录/工作区无关:
- 两列视图:左列 1 级分类(如「餐厅」),右列子分类胶囊 + 会话列表
- 分类管理:左列分类行「+」弹出下拉菜单(💬 新建对话 / 📁 新建子分类);右列头部「+」同样弹出下拉菜单;点分类行「⋯」编辑(改名 / 18 种 emoji 图标 / 8 种颜色 / 🗄 归档 / 🗑 删除)
- 归档/删除分类:编辑弹窗提供「🗄 归档」——分类从列表隐藏、数据保留,左列底部「已归档分类(点击恢复)」一键还原;「🗑 删除」——彻底删除分类并清除其下会话归属
- 分类下新建对话:菜单选「💬 新建对话」→ 自动创建新会话并归入当前分类(复用 DSH 原生 startSession,创建可能耗时 1-2 分钟,自动归类等待 120 秒)
- 会话三点菜单:点会话行「⋯」操作菜单(完成/加入类目/归档)从点击位置展开,不再固定在左下角
- 归档会话隐藏:已归档会话在分类视图不显示、不计入分类计数与状态点
- 拖拽归类:把会话拖到某个分类名上即可归入;分类名旁显示会话数
- 完成沉底:会话行右侧「✓」标记已完成 → 变灰沉到底部;「↺」撤销
- 时间紧凑:相对时间显示为「刚刚 / 5分 / 3时 / 2天」,不再占大面积
- 可靠返回:分类视图顶部常驻「← 返回原始模式」按钮;渲染出错时显示错误与返回按钮,绝不困住用户
3. Ctrl+P 快速搜索
拦截浏览器打印快捷键,弹出搜索框:按会话标题与分类名搜索,点击直达。Esc 关闭。
安装
- 将本目录复制到 DSH profile 的
node_modules下(例如~/.dsh/profiles/web/node_modules/dsh-plugin-layout-tuner/)。 - 在
~/.dsh/profiles/web/cordis.patch.yml的insert列表添加:
- id: layout-tuner
name: dsh-plugin-layout-tuner
# ★ host 半只 inject host 服务;slots 是 client 侧服务,由 lib/client.js 的 exports.inject 自己声明。
# 把 slots 写进这里 = host 插件树永远 pending → DSH 启动即崩(2026-08-17 真实事故)。
inject: [webServer]
- 重启 DSH(或热重载 web 插件)。
数据文件
$DSH_HOME/dsh-categories.json—— 分类树 + 会话归属 + 完成状态$DSH_HOME/dsh-layout.json—— 布局设置(列数 / 标题行数 / 聊天宽度 / 侧栏宽度)
删除这两个文件即恢复默认(分类清空、布局回到默认值)。
开发
lib/index.js—— host 半:状态持久化 +/dshext/layout-tuner/stateHTTP 端点 +/dshext/layout-tuner/diag诊断端点lib/client.js—— client 半:浏览器 UI(CJS factory,__ModuleLoader__.load)
修改后无需构建(手写 bundle),刷新 DSH 页面即可生效;Host 半改动需重启 DSH。
诊断:client 半把调试信息 POST 到 /dshext/layout-tuner/diag,host 半追加写入 $DSH_HOME/layout-tuner-diag.log。排查「新建对话不生效」先看该文件(应出现 startSession called 与 ws snap items/recent)。
⚠️ 开发冲突注意:本插件目录存在外部同步方(Codex 等也会维护),改完 lib/*.js 后如发现功能消失,先检查安装目录 node_modules/dsh-plugin-layout-tuner/lib/ 是否被覆盖回旧版,重新同步即可。
安全推送(审计 + 提交 + 推送)
仓库自带 tools/push-safe.mjs:推送前自动扫描敏感信息(私钥 / GitHub·OpenAI·AWS·Slack token / 密码赋值 / 凭据路径 / 邮箱 / 公网 IP / 长 base64),命中即拒绝提交。
```sh node tools/push-safe.mjs "提交说明" # 审计 + 提交(不推送) node tools/push-safe.mjs "提交说明" --push # 审计 + 提交 + 推送 node tools/push-safe.mjs --check # 只审计当前改动 node tools/push-safe.mjs --repo <其他仓库路径> ... # 复用脚本审计其它仓库 ```
公网仓库:https://github.com/Yourset/dsh-plugin-layout-tuner (origin 已配置)