dsh-conversation-folders:为每个 DSH 会话分配专属文件夹并自动整理

前言

在 DeepSeek Harness(DSH)里做调研或写代码时,助手往往会在工作区根目录生成表格、图表、文档等文件。多开几个对话后,根目录容易混杂,事后也很难把某次对话的产出和聊天记录对应起来。常见做法是手动建子目录或事后整理,既费时间,也容易漏删停用的会话残留。

下面介绍社区插件 dsh-conversation-folders(维护者 myqy91615-web):在已选工作区内,为真正开始对话的会话创建以标题命名的文件夹、把会话工作目录指过去,并写入对话记录;对话空闲一段时间后再按类型归档散落文件;删除会话时可连同文件夹一并清理。插件已收录 awesome-dsh-plugin 列表,当前版本 0.4.0,许可证 MIT。

这是什么

dsh-conversation-folders 是 DSH 的 Cordis 插件,定位可以概括为:每个会话一个专属文件夹(以对话标题命名)、对话记录存档、空闲后自动分类归档、删除会话时彻底清理。

它不修改 DSH 侧边栏工作区分组的展示方式,而是通过持久化的 working-directory/change 会话事件,把该会话的工作目录引导到工作区下的 会话-<对话标题>(标题尚未生成时暂用 会话-<短ID>)。作者说明这是其第一个插件,代码由 DeepSeek 大肥鱼辅助生成,欢迎试用并在 GitHub Issues 反馈问题。

目录页:https://www.skillhub.cn/plugins/myqy91615-web/dsh-conversation-folders
GitHub:https://github.com/myqy91615-web/dsh-conversation-folders

核心功能

专属文件夹与惰性分配

在工作区内发送第一条用户消息时,插件在工作区下创建文件夹并把该会话的工作目录指过去;仅新建空白占位会话、未发消息时不会创建文件夹,避免空目录堆积。

文件夹名尽量与侧边栏对话标题一致(前缀默认 会话-)。标题尚未生成时先用短 ID;若开启 renameToTitle,在空闲整理时可一次性改名为标题名,之后标题再变也不会再移动文件夹,以免已展示过的文件路径失效。

对话记录存档

用户消息与助手回复会追加写入文件夹根目录的 对话记录.md(文件名可在配置里改)。合成上下文类消息(如 runtime-context、skill-catalog 等)不写入。若插件在对话中途才启用,或记录文件被删,会从会话事件日志回填此前的真实对话。

空闲后自动分类与命名

对话进行中不会移动任何文件,助手创建的文件在会话文件夹根目录,路径在对话里始终有效。当会话结束且长时间无新任务(默认连续 10 分钟无任何会话事件,idleDelayMs 默认 600000 毫秒)后,才把根目录散落文件按扩展名移入子目录,并命名为 调研<N>_<原文件名>(N 为整理序号,仅在实际移动了文件时递增),同时在 对话记录.md 追加「整理」小结。

默认分类包括:

  • 01-表格/(xlsx、csv、ods 等)
  • 02-图表/(png、jpg、svg、webp 等)
  • 03-文档/(docx、pdf、md、pptx 等)
  • 04-数据/(json、parquet、sqlite、sql 等)
  • 05-代码/(py、js、ts、html 等)
  • 06-压缩包/(zip、rar、7z、tar 等)
  • 07-其他/

可选配置 categories 覆盖扩展名表;idleDelayMs: 0 可关闭自动整理。

删除会话与菜单入口

会话「…」菜单中新增 「删除对话及其内容」(位于「归档会话」与「复制 ID」之间)。确认文案为「将会删除对话及其所有内容,请谨慎考虑。」确认后删除对话、会话持久化产物、会话文件夹及状态映射,不经过回收站。关机或停止会话不会误删文件夹;插件在 session/disposed 后轮询会话产物目录,确认真正删除后才删文件夹(默认等待上限 deleteTimeoutMs 12000 毫秒,超时则保留文件夹,视为停止而非删除)。

会话菜单由客户端半区提供(client.js + package.json 的 dsh.client)。安装或升级后需刷新页面(必要时重启 DSH)使菜单生效。

目录结构示例

整理后的工作区可能类似:

D:\deepseek工作区\
├─ 会话-白酒行业调研\
│  ├─ 对话记录.md
│  ├─ 01-表格\
│  │  └─ 调研1_行业数据对比.xlsx
│  ├─ 02-图表\
│  │  └─ 调研1_趋势图.png
│  └─ 03-文档\
│     └─ 调研1_研究报告.md
└─ 其他工作区内容…

安装与启用

插件详情页:https://awesome-dsh-plugin.com/p/myqy91615-web/dsh-conversation-folders/

通过 CLI 从 GitHub 安装(README 推荐方式;包尚未发布到 npm,暂不可用 dsh plugin add npm:dsh-conversation-folders):

dsh plugin --profile desktop add github:myqy91615-web/dsh-conversation-folders

也可在 DSH「插件」管理界面添加,或以本地路径 / file: 方式安装。安装或升级后刷新页面(必要时重启 DSH)。

在 cordis.patch.yml 中可配置(键均可省略):

- id: dsh-conversation-folders
  name: dsh-conversation-folders
  config:
    enabled: true            # 关闭后停止管理文件夹(已有文件夹与映射不删除)
    folderPrefix: 会话-       # 会话文件夹名前缀
    transcriptName: 对话记录.md
    categorize: true         # 空闲后自动分类归档
    runNamePrefix: 调研       # 自动命名前缀:调研<N>_<原文件名>
    idleDelayMs: 600000      # 空闲多久后整理(毫秒);0 关闭
    renameToTitle: true      # 空闲整理时把短 ID 文件夹改名为对话标题
    deleteTimeoutMs: 12000   # 删除后等待会话产物消失的最长毫秒数

典型用法与验证

README 给出的验证步骤可直接复现:

  1. 在某个工作区内新建对话并发送一条消息;
  2. 检查工作区:应出现 会话-<标题>/(标题未生成时为短 ID),内含 对话记录.md;
  3. 让助手创建表格、图表等——对话进行中文件仍在文件夹根目录;
  4. 停止对话 10 分钟(或调小 idleDelayMs)后:文件进入 01-表格/ 等目录并带 调研1_ 前缀,文件夹可改为对话标题,对话记录.md 追加整理小结;
  5. 通过菜单删除该对话:对应文件夹及内容应一并消失。

需要立即整理或排查状态时,插件提供 HTTP API(路径前缀 /conversation-folders/api/):

  • GET /status — 映射统计、idleDelayMs、pendingIdle
  • GET /mappings — 全部映射详情
  • POST /organize-session,body {"sessionId":"…"} — 立即整理某会话
  • POST /delete-session,body {"sessionId":"…"} — 删除对话及全部内容

适用场景与注意

适合谁:在同一 DSH 工作区里频繁做多轮调研、写报告、生成代码和附件,希望按对话隔离文件、保留 Markdown 对话记录、并在对话结束后再自动分门别类的人。

实现上的边界(README「限制」一节):

  • 只整理会话文件夹根目录的散落文件;已有子目录及其中的文件不会被打散;
  • 被其他程序占用的文件(例如 Excel 打开的 xlsx)可能无法移动,重试仍失败则保留原位并记日志;
  • 删除等待超时则保留文件夹,避免误判为删除。

安全与信任:插件以当前 DSH 进程权限读写工作区与会话目录;删除逻辑经过 realpath 正规化与父目录校验。安装前建议阅读 仓库源码 与 MIT 许可证,确认符合你的环境与合规要求。awesome-dsh-plugin 社区目录为独立生态站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-conversation-folders 把「一次对话的一摊文件 + 聊天记录」收拢到工作区下的专属文件夹,并在空闲后按类型归档,同时提供菜单级彻底删除,减轻工作区根目录被污染和会话残留难以清理的问题。若你在 DSH desktop profile 下长期使用多会话工作流,可按上文 GitHub 命令安装,并用 README 验证步骤走一遍即可。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜