- ホーム
- プラグイン
- セッションとメッセージ
- dsh-session-workspace
dsh-session-workspace
stevenwang15/dsh-session-workspace
Gives each new DeepSeek Harness conversation started from the default workspace its own workspace directory and sandbox root (manually added project workspaces stay shared unless mode is set to all), with a composer toggle for the next conversation.
インストール
dsh plugin --profile web add github:stevenwang15/dsh-session-workspaceREADME
dsh-session-workspace
每个对话,一个专属文件夹。 装一次,之后直接点「新建对话」就行——DSH 会自动给这个对话一个独立文件夹,别的对话看不到、也改不到里面的文件。
English | 中文

一行安装
dsh plugin --profile desktop add github:stevenwang15/dsh-session-workspace
需要 Node 22+。完整装法、参数与卸载见下文。
它解决什么烦恼
现在的 DeepSeek Harness 里,所有对话共用同一个文件夹(default-workspace)。
打个比方:大家都在同一张桌子上干活。你在 A 对话里写了一半的报告、跑出来的数据、下载的附件,换个对话一看,全都还在桌上——B 对话能看到、能改、甚至能删掉。对话越多,桌子越乱。
装上这个插件之后:每开一个新对话,DSH 自动发一张自己的新桌子。 这个对话里产生的所有文件都只在自己的文件夹里,和其他对话互不打扰。
| 装之前 | 装之后 | |
|---|---|---|
| 新对话放文件的位置 | 全部挤在同一个文件夹 | 每个对话一个独立文件夹 |
| A 对话的文件,B 对话能看到吗 | 能 | 不能 |
| 需要你手动操作吗 | —— | 不需要,照常点「新建对话」 |
装完之后你会看到什么
- 点侧边栏的 新建对话(New Session);
- 侧边栏多出一行工作区,名字是创建时间,比如
2026-11-06 20:15; - 这个对话读写的文件都在
文稿/deepseek-harness/session-workspaces/20261106-201533-a1b2/里; - 再点一次新建对话,又是一个全新的工作区和文件夹;
- 全程不用手动建文件夹、不用选路径、不用改设置。
想找文件?在访达(Finder)里打开这个文件夹就能看到所有对话的文件夹:
open ~/Documents/deepseek-harness/session-workspaces
输入框旁边的小开关
打开任意对话后,输入框工具栏的最左边有一个小胶囊:
- 亮着
独立工作区:新对话会自动建独立文件夹(默认就是这样); - 点一下变成灰色
共用工作区:下一个新对话先不隔离,还放在你当前选的文件夹里; - 再点一下又恢复。想临时不隔离的时候用,重启 DSH 后自动变回默认,不会改坏设置。
小提醒:一个对话的文件夹在它被创建的那一刻就定下来了,所以这个开关只影响之后新建的对话,不会把当前对话搬家。
安装(三步)
第 1 步:在终端里装插件
dsh plugin --profile desktop add github:stevenwang15/dsh-session-workspace
如果这条命令报错,也可以用 Release 里的压缩包:下载
dsh-session-workspace-0.2.0.tgz,然后执行dsh plugin --profile desktop add file:下载文件的绝对路径。
第 2 步:告诉 DSH 启用它
打开 ~/.dsh/profiles/desktop/package.json,找到 dsh → profile → bundles 这个数组,把 "dsh-session-workspace" 加进去,像这样:
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
…其它原本就有的条目…,
"dsh-session-workspace"
]
第 3 步:彻底重启 DSH
菜单栏「DeepSeek Harness → 退出」(或窗口激活时按 Cmd+Q),确认「活动监视器」里没有任何 DeepSeek Harness 进程了,再重新打开。
只关掉窗口、再点 Dock 图标打开,不算重启——后台进程还在跑,插件不会生效。这是最容易踩的坑。
怎么确认装好了
- 打开任意对话,输入框工具栏左边能看到
独立工作区胶囊; - 点「新建对话」,侧边栏会多出一个新工作区;
- 看一下
~/Documents/deepseek-harness/session-workspaces/,里面会多出带时间戳的文件夹。
常见问题
看不到胶囊?
- 确认是彻底退出再打开(活动监视器里旧进程都没了);
- 再按 Cmd+R / F5 刷新一次页面;
- 确认第 2 步的
bundles里确实加了"dsh-session-workspace"。
点了新建对话,但没有新文件夹? 可能是这几种正常情况:
- 复用了上一次留下的「空白对话」;
- 输入框开关切到了
共用工作区; - 你在一个手动添加的项目工作区里新建——默认会尊重你的选择,不隔离。
升级插件后没变化? 插件是本地安装的,重复安装同一路径不会覆盖旧版本。先删掉再装,然后彻底重启:
dsh plugin --profile desktop remove dsh-session-workspace
dsh plugin --profile desktop add github:stevenwang15/dsh-session-workspace
删掉侧边栏的工作区,会删掉文件吗? 不会。删工作区只是删掉侧边栏里的这一行分组,文件夹和聊天记录都还在。
会占很多磁盘吗? 每个新对话一个文件夹,和普通文件夹一样。插件不会自动清理,方便你回溯;不用的文件夹可以自己删。
卸载插件?
./scripts/uninstall-local.sh desktop # 或者手动从 bundles 里删掉再 remove
已经建好的工作区和文件夹都会保留。
下面是给想深入了解的人看的(普通用户可以跳过)
可调整的设置
在 ~/.dsh/profiles/desktop/cordis.patch.yml 末尾加一行就能改:
- id: session-workspace
config:
enabled: true # false = 完全停用这个插件
mode: managed # managed = 手动加的项目不隔离;all = 所有新对话都隔离
baseDir: /Users/你/Documents/deepseek-harness/session-workspaces
| 设置 | 默认 | 说明 |
|---|---|---|
enabled | true | 总开关,false 就等于没装。 |
mode | managed | managed:只隔离默认工作区和插件自己建的工作区,你手动添加的项目保持原样;all:新建对话一律隔离。 |
baseDir | 默认工作区旁边的 session-workspaces | 每个对话的文件夹都放在这里。 |
它是怎么做到的(技术版)
DSH 里「工作区」就是一个目录:会话创建时记录的 cwd 同时是它的沙箱根(只能写这个目录)和侧边栏的分组依据。插件做两件事:
- Host 半身(
index.js):包装ctx.sessionController.create。新对话来临时,先独占创建一个目录、注册成 Workspace,再带着这个 Workspace 创建会话,于是会话的cwd= 新目录。- 显式指定目录(
cwd)、复用空白会话(sessionId)、手动项目工作区都保持原生行为; - 创建失败会自动回退到原生行为,不会卡住你新建对话;
- 通过内核
connection的 Fetch 路由提供GET/POST /api/session-workspace/{state,enabled},鉴权由内核/api通道负责。
- 显式指定目录(
- 浏览器半身(
client.js):手写的__ModuleLoader__bundle(无构建步骤,只依赖 DSH 自带的 React),通过conversation.input.left插槽把胶囊放到输入框工具栏,颜色全部使用主题变量,自动跟随明暗模式。
失败的清理、沙箱根不可变、子代理/分叉继承父目录等细节,都写在了代码注释和 docs/notes/ 里。
兼容性
- 在 DSH 0.2.2-rc.1(当前桌面版)上完整测试通过;
- 隔离功能只依赖 DSH 的公开服务;如果未来的版本移除了输入框插槽,胶囊会不显示,但隔离本身照常工作。
开发与测试
零依赖、无需构建,克隆即可跑:
npm test # 28 项测试(Host 单元 21 + 浏览器半身 2 + 分发契约 5)
npm run e2e # 真 DSH Host 端到端:隔离 / 空白复用 / 显式目录
npm run e2e:control # 真 DSH Host 端到端:开关接口 + 浏览器 bundle 发布
E2E 会起一个独立的 DSH_HOME(在工作区下的 .e2e*),不碰你正在用的 ~/.dsh,也不花模型 token。详见 docs/E2E.md。
License
DSH 插件家族
| 插件 | 一句话 |
|---|---|
| dsh-caveman | 让 agent 少说废话、多留事实 |
| dsh-taste-skill | 前端设计:先定方向,再量,再看 |
| dsh-session-workspace | 一个对话,一个独立工作区 |
遇到问题或想加功能,请开 issue。如果这个插件帮到你,给个 ⭐ 能让更多人找到它。