前言¶
在 DeepSeek Harness(DSH)里,多数对话都绑定到已注册的工作区:会话有 Workspace id,文件与权限与工作区目录挂钩。若你只想临时聊一轮、或像 Codex 那样做「无项目」会话,原生流程往往要先选或建工作区。DSH 原生在「空白且无工作区」时还会禁用输入框,侧边栏「未分组」分组也没有可用的「新会话」行为。
下面介绍社区插件 dsh-plugin-outside-workspace(npm 包名 dsh-outside-workspace,维护者 realhenrylan):在 Host 已有「只传 cwd、不传 workspaceId」能力的前提下,补 UI 入口与首条消息 composer,让你在不注册工作区的情况下开聊,会话归入侧边栏「未分组 / Ungrouped」。
这是什么¶
一句话:在 DSH Web / Desktop 前端里,新建不属于任何已注册工作区的会话,默认工作目录落在 Host 文档目录下的 deepseek-harness/outside-workspace。
- 仓库:github.com/realhenrylan/dsh-plugin-outside-workspace
- 社区目录页:skillhub.cn/plugins/realhenrylan/dsh-plugin-outside-workspace
- 许可证:MIT(见仓库 README)
- 当前 package 版本:0.1.0(见仓库
package.json) - 运行面:仅
dsh.client.platform: web(Web / Desktop 的 Web 前端)
社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查看源码与许可证,插件随当前 DSH 进程权限运行。
核心功能¶
入口¶
- 空白新会话页(hero):工作区选择器右侧的「不在工作区 / Outside workspace」按钮,点击后创建工作区外会话并打开。
- 侧边栏「未分组」:分组行右侧的「新会话(+)」。DSH 原生对无 Workspace id 的「未分组」不处理该按钮;本插件接管点击,同样创建工作区外会话并直接打开。
工作目录与归属¶
- 默认目录:Host 的
<文档>/deepseek-harness/outside-workspace(缺失时由 Host 递归创建)。例如 Windows 上为C:\Users\<你>\Documents\deepseek-harness\outside-workspace。 - 目录推导:若存在宿主 first-use 默认工作区(
<documents>/deepseek-harness/default-workspace),沿用其 Documents 根(尊重 Host 的documentsDirectory);否则取$host.home/Documents。v1 暂无设置项修改默认目录。 - 会话不注册工作区,侧边栏归入「未分组 / Ungrouped」。
首条消息与后续 UI¶
DSH 原生在空白且无工作区时会禁用输入框。本插件对本插件刚创建的、仍为 blank 的工作区外会话接管 composer,使新会话页与普通新会话页一致:标题、Agent 预设、权限选择、模型选择、发送按钮;项目名称位显示为「不在项目中」。首条消息支持添加文件、粘贴图片或拖入附件;Enter 发送,Shift+Enter 换行。消息被接收后会话不再 blank,交还宿主标准对话 UI 与 composer。Slash 指令与 @ 引用补全从第二条消息起可用。
安装与启用¶
在任意 DSH 会话里让 agent 使用 plugin_manager 工具安装(需要 Full access 权限):
plugin_manager({ action: "install_bundle", target: "github:realhenrylan/dsh-plugin-outside-workspace" })
也可从本地 checkout 的绝对路径安装(link: 安装,node_modules/dsh-outside-workspace 指向该目录):
plugin_manager({ action: "install_bundle", target: "<本仓库 checkout 的绝对路径>" })
安装会写入当前 profile 的 package.json(依赖与 dsh.profile.bundles)。在开启 HMR 的 Desktop / Web profile 中新装 bundle 可热生效;若页面未出现新按钮,手动刷新一次即可。
卸载:
plugin_manager({ action: "remove_bundle", target: "dsh-outside-workspace" })
典型用法¶
- 安装并刷新页面后,打开空白新会话页,点击 hero 行「不在工作区 / Outside workspace」,或到侧边栏「未分组」行点击「新会话(+)」。
- 在与普通新会话相同的首条消息页选择 Agent 预设、权限、模型,输入首条内容(可附文件或图片),发送。
- 发送后会话进入宿主标准对话界面;后续操作与常规 DSH 会话相同,工作目录仍在上述默认
outside-workspace路径。
工作原理(摘要)¶
Host 侧 ctx.sessions.create({ cwd }) 与 workspaceId 互斥,Host 会创建目录并把 cwd 记入 SessionHeader,无需改 Host。插件在浏览器半向 UI 贡献:
conversation.hero.options:hero 行按钮,创建后ctx.uiWorkspace.openSession(id)跳转。conversation.composer(chain):仅 blank 工作区外会话时接管,复用宿主 hero 布局,首条消息经ctx.sessions.using(...)的binding.session.prompt([...], 'queue')发送。- 「未分组」行「+」:在 document 捕获阶段识别
[role="treeitem"][data-row-key="workspace:"]行内最后一个行尾按钮,阻止原生无操作并复用同一创建流程;DOM 不符时自动放弃,保持原生行为。
适用场景与已知限制(v1)¶
适合:快速试 prompt、不打算建工作区的临时对话;希望从「未分组」直接开聊;需要默认文档目录下独立文件夹作为 cwd 的轻量场景。
注意:
- 默认目录固定推导,暂无配置项。
- 刷新页面后,若仍停留在空白的工作区外会话,新会话页不会恢复为插件接管版(已发过消息的不受影响)。
- 「未分组」「+」与首条消息页依赖当前 DSH 前端 DOM;上游改版可能安全退化或失效接管,不影响已创建会话的核心能力。
- 图片与附件仍受 DSH 宿主格式与大小限制;组合 native directory picker 时
directoryPicker/list不可用,首次点击可能出现预期的 fallback 警告。
结尾¶
dsh-plugin-outside-workspace 把 DSH 已有的「仅 cwd 会话」能力接到 hero 与「未分组」入口,并补齐空白无工作区时的首条消息体验,适合需要 Codex 式 projectless 会话的 Web / Desktop 用户。