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 关闭。

安装

  1. 将本目录复制到 DSH profile 的 node_modules 下(例如 ~/.dsh/profiles/web/node_modules/dsh-plugin-layout-tuner/)。
  2. ~/.dsh/profiles/web/cordis.patch.ymlinsert 列表添加:
- 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]
  1. 重启 DSH(或热重载 web 插件)。

数据文件

  • $DSH_HOME/dsh-categories.json —— 分类树 + 会话归属 + 完成状态
  • $DSH_HOME/dsh-layout.json —— 布局设置(列数 / 标题行数 / 聊天宽度 / 侧栏宽度)

删除这两个文件即恢复默认(分类清空、布局回到默认值)。

开发

  • lib/index.js —— host 半:状态持久化 + /dshext/layout-tuner/state HTTP 端点 + /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 calledws 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 已配置)