独立会话插件

前言

DeepSeek Harness(DSH)的原生输入区在会话没有工作区时会被置为不可用,用户需要先选择一个工作区才能开始输入。本插件让“独立会话”成为一个可用的、持久的状态。

它是什么

standalone-session 是一个为 DeepSeek Harness 提供独立会话能力的客户端插件。由维护者 LRainner 开发,MIT 许可证。该插件通过复用 DSH 原生输入区,在不创建假工作区的前提下解锁输入框,并提供独立侧边栏面板进行会话管理。

核心功能

独立会话不隶属于任何工作区,DSH 的工作区注册表里不会出现任何由本插件创建的“假工作区”。主要能力包括:

  • 原生输入区解锁:模型选择、附件、/ 指令、发送全部照常
  • 侧边栏显示:独立会话显示在侧边栏顶层的“未分组”区域,带有 独 / 独立 / Standalone badge
  • 持久化恢复:重启 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

应通过应用内的插件页面安装:

  1. 打开 DeepSeek Harness 桌面应用。
  2. 侧边栏 → 插件 → 安装/添加插件。
  3. 输入本仓库 tarball 的绝对路径,或它解包后的绝对目录。
  4. 安装完成后,完全退出并重新启动 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.bar slot 的现有组件。
  • 仅当当前会话的 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.bar slot 或原生 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 进程权限运行,安装前应检查源码与许可证。

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

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

小夜