前言¶
DeepSeek Harness(DSH)的原生输入区在会话没有工作区时会被置为不可用,用户需要先选择一个工作区才能开始输入。本插件让“独立会话”成为一个可用的、持久的状态。
它是什么¶
standalone-session 是一个为 DeepSeek Harness 提供独立会话能力的客户端插件。由维护者 LRainner 开发,MIT 许可证。该插件通过复用 DSH 原生输入区,在不创建假工作区的前提下解锁输入框,并提供独立侧边栏面板进行会话管理。
核心功能¶
独立会话不隶属于任何工作区,DSH 的工作区注册表里不会出现任何由本插件创建的“假工作区”。主要能力包括:
- 原生输入区解锁:模型选择、附件、
/指令、发送全部照常 - 侧边栏显示:独立会话显示在侧边栏顶层的“未分组”区域,带有
独/独立/Standalonebadge - 持久化恢复:重启 DSH 后独立会话仍可恢复,不会自动变成某个工作区的会话
- 管理面板:提供独立会话的创建、打开、重命名和删除管理
- 工作目录:独立会话的工作目录为
~/.dsh/dsh-standalone-sessions/<sessionId>
安装¶
从本地 tarball 安装¶
cd dsh-plugin-standalone-session
npm install
npm run build
npm pack
产物为 dsh-plugin-standalone-session-0.1.0.tgz。
Web 配置:
dsh plugin --profile web add /absolute/path/to/dsh-plugin-standalone-session-0.1.0.tgz
重启 dsh web,然后硬刷新页面(macOS Cmd+Shift+R)。
Desktop 配置:
DSH 0.2.1-rc.2 的 dsh CLI 会拒绝直接管理 desktop 配置:
error: profile "desktop" is managed exclusively by the Electron application
应通过应用内的插件页面安装:
- 打开 DeepSeek Harness 桌面应用。
- 侧边栏 → 插件 → 安装/添加插件。
- 输入本仓库 tarball 的绝对路径,或它解包后的绝对目录。
- 安装完成后,完全退出并重新启动 DeepSeek Harness。
使用¶
新建独立会话¶
侧边栏顶部的 新建独立会话(+) 行是主要入口。点击会立即创建并进入一个新的独立会话,不会先显示管理面板。如果上一次由这个入口创建的会话仍然是空白且存在,会直接复用它。
其他入口:
- 管理面板里的
新建独立会话:总是创建全新的空白会话。 - 命令菜单:在任意会话的输入框输入
/,选择独立会话:新建/Standalone Session: New。
管理会话¶
点击侧边栏底部的 管理独立会话,或使用命令菜单里的 独立会话:管理 / Standalone Session: Manage,打开管理面板。
管理面板列出所有未归档的独立会话,提供以下操作:
- 打开:切回原生会话页。
- 重命名:调用原生 Session Controller 的重命名能力,标题投影同步更新。
- 删除:调用原生归档(DSH 没有物理删除会话的公开 API)。
删除语义¶
DSH 把“删除”实现为归档:会话从普通列表消失,但仍可在原生归档视图中恢复。
- 从未产生过用户消息、且目录为空的独立会话:归档后,宿主端会删除它的专用工作目录。
- 从未产生过用户消息、但目录非空:保留目录。
- 已经产生过消息的独立会话:归档后保留工作目录。
数据与清理¶
默认工作目录:
~/.dsh/dsh-standalone-sessions/
├── registry.json
└── session-<uuid>/
插件不会把独立会话写进 workspace.json 的工作区列表。删除空白独立会话后,对应 session-<uuid>/ 会被删除;已使用会话的目录会保留。
完整清理(谨慎):
# 先卸载插件并重启 DSH
rm -rf ~/.dsh/dsh-standalone-sessions
这会删除独立会话的工作目录(可能包含 agent 写入的文件)。若要连同会话历史一起删除,请使用 DSH 自身的归档/存储管理方式。
实现方案¶
插件没有采用“临时创建一个工作区”的方案。原因是临时工作区必须进入宿主 workspaceRegistry 才会被识别,要隐藏它就必须替换/过滤原生 WorkspaceBrowser,风险更大。本插件改为一个范围极小的视图适配器:
- 插件包装
conversation.composer.barslot 的现有组件。 - 仅当当前会话的 durable
cwd带有独立标记且原生disabled === true时,传入disabled: false,并清空工作区选择器的占位参数。 - 原生 InputBar 仍然负责编辑器、模型选择、附件、斜杠指令、提交、停止和错误展示。
兼容性¶
- 目标宿主:
0.2.1-rc.2,声明范围>=0.2.1-rc.2 <0.3.0-0。 - 本插件不依赖 npm 上的
@deepseek-ai/dsh-tools、@deepseek-ai/dsh-client-ui-*等子包。 - 如果未来 DSH 修改
conversation.composer.barslot 或原生 InputBar props,输入区解锁可能失效;插件会安全降级。
已知限制¶
- 原生“未分组”区域仍会显示独立会话:插件没有替换原生浏览器来彻底隐藏这个分组。
- 删除 = 归档:已删除会话可从原生归档视图恢复。
- 空白会话依赖本插件解锁输入区:卸载后空白独立会话的输入区会回到原生 inert 状态。
- 没有全局快捷键:只注册了命令菜单项和侧边栏入口。
- 没有自动模型回复测试:本地验证使用了隔离的 DSH profile 和真实浏览器,首次消息成功写入并保持独立状态。
开发¶
npm install
npm run typecheck # tsc --noEmit
npm run build # 宿主 ESM + 客户端 Module Loader bundle + .d.ts
npm test # Vitest:49 个单元测试
npm run check # typecheck + build + test
适用场景¶
适合需要在 DSH 中创建不依附于任何工作区的会话的用户,例如:
- 快速测试提示词或配置
- 独立的知识整理和记录
- 不需要文件上下文的对话
插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。