前言¶
DeepSeek Harness(DSH)里,工作区通常对应一个目录,也是会话的工作目录(cwd)。在同一个根工作区里连续开多个对话时,所有任务生成的文件都会落在同一文件夹下——例如限流排查脚本和 Minecraft 整合包工具混在一个目录里,后续整理和版本管理都很麻烦。
社区里有人用 WorkBuddy 一类方案实现「一个对话一个时间戳目录」。dsh-session-folders 是 DSH 插件形态下的同类能力:在宿主侧接管新会话创建流程,在配置的根工作区下自动建时间戳子目录,让不同会话的文件分开存放。维护者为 Tonywqs,分类为工作流;仓库见 GitHub,社区目录页见 SkillHub。
这是什么¶
插件在 session.create 接缝处介入:当新会话要落在已配置的根工作区里时,先创建 <根>/<时间戳>/,将其注册为独立工作区,再让会话在该目录中创建(具体 cwd 行为取决于模式,见下文)。
目录结构示意:
D:\AIWorkSpace\DSH\ <- 根工作区(在此点「新对话」)
├── 2026-10-08-13-05-00\ <- 会话 A 的全部文件
├── 2026-10-08-14-20-11\ <- 会话 B 的全部文件
└── 2026-10-08-15-02-47\ <- 会话 C 的全部文件
侧边栏若选择「视图选项 → 分组方式 → 按工作区树」,这些子目录会嵌套显示在根工作区之下。
两种模式¶
in-place(默认) |
workspace |
|
|---|---|---|
| 会话归属 | 留在原工作区(cwd 不变) | 迁到新目录(新工作区) |
| 侧边栏 | 不多任何层级,新会话与原会话同级 | 多出一层工作区分组 |
| 文件隔离 | 规则:系统提示词注入「本次对话产物目录」,agent 依此写入 | 强制:会话 cwd 就是那个目录 |
| 适用 | 想保持侧栏干净 | 想要文件系统级硬隔离(可用侧栏「单列表」视图隐藏分组) |
README 中 in-place 对应 v0.3.1 的产物目录规则:插件注册系统提示词 section 与动态 runtime context,告知模型「本次对话的产物目录 = 时间戳目录」;变量名为 session_output_dir,非本插件管理的会话该变量为空,其它工作区不会看到多余提示。
行为细节¶
下面几种情况插件会按固定规则处理:
| 情况 | 行为 |
|---|---|
| 在根工作区里新建会话 | 建 <root>/<YYYY-MM-DD-HH-mm-ss>/,注册成工作区,会话 cwd = 该目录(workspace 模式)或依 in-place 规则 |
| 客户端侧名称 | 先显示 placeholderTitle(默认「新会话」),不显示时间戳;会话标题由首条消息生成后,若 followSessionTitle 为 true,工作区名会同步为该标题 |
| 同一秒内再开一个 | 自动退到 …-2、…-3 |
| 会话已在日期子目录里 | 不再套一层(只精确匹配根目录) |
| fork / 恢复已有会话 | 原样放行,继承来源会话的目录 |
| 其它工作区 | 完全不受影响 |
| 建目录或注册工作区失败 | 记 warn,按原请求放行——不会挡住开会话 |
安装与配置¶
安装¶
PowerShell 示例(profile 名按环境选择:桌面版多为 desktop,命令行版多为 web):
dsh plugin --profile desktop add github:Tonywqs/dsh-session-folders
装完需完全重启 DSH。也可在 设置 → 插件 → 安装插件 中填写仓库地址 github:Tonywqs/dsh-session-folders。
插件当前版本为 0.3.1(见仓库 package.json),依赖 Node >= 22,peer 依赖 @deepseek-ai/cordis ^4.0.2,许可证 MIT。插件以当前 DSH 进程权限运行,安装前建议自行查看源码与许可证。
配置¶
安装后配置写在 profile 的 cordis.patch.yml(patch 片段示例):
- insert:
- id: session-folders
name: dsh-session-folders
config:
enabled: true
roots:
- 'D:\AIWorkSpace\DSH'
nameFormat: YYYY-MM-DD-HH-mm-ss
dryRun: false
| 配置 | 默认 | 说明 |
|---|---|---|
enabled |
true | 总开关 |
roots |
[] | 需要按会话分目录的根工作区(可多个);为空时插件不生效并记 warn |
nameFormat |
YYYY-MM-DD-HH-mm-ss |
目录名格式,支持 YYYY MM DD HH mm ss |
placeholderTitle |
新会话 |
客户端工作区初始显示名 |
followSessionTitle |
true | 会话标题生成后是否同步改工作区名 |
dryRun |
false | 只记日志不落地,用于首次验证 |
首次验证¶
建议先把 dryRun 设为 true,重启 DSH 后新开一个对话,再查看日志(桌面版示例路径):
%USERPROFILE%\.dsh\logs\desktop-next.log
期望看到类似:
dsh-session-folders: active for D:\AIWorkSpace\DSH (format YYYY-MM-DD-HH-mm-ss, dry-run)
dsh-session-folders: [dry-run] would create D:\AIWorkSpace\DSH\2026-10-08-16-01-22
第二行表示接缝命中;确认无误后将 dryRun 改回 false 并再次重启,即可真正创建目录。
适用场景与注意¶
适合:在同一 DSH 根工作区里并行多个互不相关的编码或文档任务,希望文件按会话分文件夹,或需要接近 WorkBuddy 的「一对话一时间戳目录」体验。
已知限制(来自 README):
- 依赖宿主内部接缝
ctx.sessionController.commands.create;DSH 若改动该结构,插件会记 warn 并失活,会话创建本身不受影响。 - 目录名使用本地时间、秒级精度;同一秒内连开多个会话会得到
-2、-3后缀。 - 只影响新会话落在哪,不迁移历史会话 cwd,也不移动已有文件。
卸载命令:
dsh plugin --profile desktop remove dsh-session-folders
手动安装时还需删除 profiles/node_modules/dsh-session-folders 并移除 patch 中对应 insert 块;已建出的日期目录不会被删除。
结尾¶
dsh-session-folders 把「按会话分目录」做成可配置的 DSH 工作流插件:在指定根工作区新开对话时自动建时间戳子目录,并在 in-place 与 workspace 两种隔离粒度之间选择。DSH 生态强调「一切皆插件」;SkillHub 等社区目录独立于 DeepSeek / 幻方,并非官方应用商店。
- 目录页:https://www.skillhub.cn/plugins/Tonywqs/dsh-session-folders
- 源码与文档:https://github.com/Tonywqs/dsh-session-folders