dsh-workspace-settings
按工作区保存 DeepSeek Harness 的会话默认值:模式、权限预设、模型、推理强度、Chat 工作步骤展示与收起时机;在该工作区新建或复用的空白会话自动应用这些值。
安装
dsh plugin --profile web add dsh-workspace-settings
沙箱测试
这个插件还没测过。提交测试 →
README
DSH 工作区设置





[English](README.md) | 简体中文
DeepSeek Harness(DSH) 插件:按工作区保存会话默认值。每个工作区可以有自己的 Agent
模式、权限预设、模型、推理强度,以及 Chat 的工作步骤展示级别与收起时机。在该工作区新建
会话时直接使用这些值,不再只有一份全局设置;会话内手动修改仍然优先。
界面基于 DSH 官方 UI 原语:工作区设置对话框使用宿主的 Modal / Menu / Button /
Input,行结构与内置「通用设置」一致。修改立即生效,没有保存 / 取消步骤。
截图
*从工作区行 ... 菜单打开的工作区设置:模式、权限预设、模型与推理强度在同一个原生对话框里
编辑,工作步骤展示与收起时机也在这里设置。*
目录
- [截图](#截图)
- [功能](#功能)
- [环境要求](#环境要求)
- [安装](#安装)
- [使用](#使用)
- [配置](#配置)
- [工作步骤展示与收起时机](#工作步骤展示与收起时机)
- [实现原理](#实现原理)
- [隐私](#隐私)
- [开发](#开发)
- [项目结构](#项目结构)
- [已知限制](#已知限制)
- [许可证](#许可证)
功能
- 工作区菜单入口:工作区行
...菜单新增 工作区设置,位于重命名 / 删除工作区
上方;右键工作区行也会打开同一个官方菜单。
- 设置页:设置 → 工作区设置 列出全部工作区及其覆盖项摘要,并提供编辑按钮。
- 六项按工作区保存的默认值:
设置 · 可选值
模式 · 任意已安装 Agent 预设,或跟随全局
审查与权限 · 任意已配置权限预设,或跟随全局
模型 · 任意可路由模型,或跟随全局
强度 · 所选模型的推理强度
工作步骤展示 · 简洁 / 标准 / 详细 / 完全展开,或跟随全局
工作步骤收起时机 · 回答结束后 / 下次有新消息时,或跟随全局
- 自动继承:工作区内新建或复用的空白会话会收到保存的模式、权限预设、模型与推理强度。
工作区模型及其强度会立即写为该会话已选中的值,首个消息之前输入区就显示工作区模型与强度,
而不是继续显示全局默认;会话内的显式修改仍然优先——插件只会替换“看起来仍来自全局默认或
上次工作区设置”的值。
- 官方文案:内置模式与权限显示为 标准模式 / PTC 模式 / 极简模式 / 创造模式、
仅可查看 / 工作区内修改 / 完全权限 / 自动审查,不会显示 standard、
workspace-write 这类机器键名。
- 即时保存:每个下拉选择后立即写入,与通用设置一致;关闭对话框即保留已选项,仅失败时
给出提示。
- 原生外观:菜单、弹窗、选择器与设置行都复用宿主原语和主题 token,浅色 / 深色切换与
后续主题变化自动跟随。
- 原生模型选择器:模型字段使用可搜索、按 provider 分组、固定最大高度且分组标题吸顶的
菜单,与输入区的模型选择器一致;第三方模型再多也不会超出视口。
- 本地、安静:设置保存在 DSH home 下的一个 JSON 文件;无遥测、无网络请求。
环境要求
- DeepSeek Harness(DSH),需支持 Web UI 与插件;开发与验证基于 DSH
0.2.1-rc.3
桌面端 profile。
- 推荐 DSH 版本:
0.2.1-rc.3;支持范围:>=0.2.1-rc.3 <0.3.0-0(在package.json
的 engines.dsh 中声明)。
- 插件包为 ESM(
"type": "module"),运行时从宿主客户端加载react与 UI 原语,不打包
额外依赖。
- 需要 Chromium 内核的 DSH Web UI;纯 CLI 组合中不会渲染界面。
node仅离线检查需要;普通使用不需要安装 Node。
安装
从 npm 安装(推荐)
dsh plugin --profile <profile> add dsh-workspace-settings
安装指定版本或升级:
dsh plugin --profile <profile> add dsh-workspace-settings@1.0.3 dsh plugin --profile <profile> add dsh-workspace-settings@latest
安装后重载一次 DSH 窗口,让客户端 bundle 进入启动图;此后客户端改动支持热加载。
从本地目录安装(开发)
git clone https://github.com/Thunderunruly/workspace-settings.git
然后安装到 profile:
- 桌面端:打开 设置 → 插件 → 添加插件 → 本地 bundle,选择克隆下来的目录。桌面端
profile 由 Electron 应用管理,请通过应用内插件管理器安装。
- CLI profile:把目录作为 linked 依赖加入 profile,由 bundle patch 自动插入插件行:
dsh plugin --profile web add file:/本目录绝对路径
验证安装
1. 工作区行 ... 菜单中出现 工作区设置,位于重命名 / 删除工作区上方;
2. 侧边栏「设置」中出现 工作区设置 页面;
3. 打开后每个工作区一行,右侧有「编辑」按钮和当前覆盖摘要。
升级 / 卸载
- npm 升级:执行上面的
@latest命令并重载窗口。 - 本地目录升级:在克隆目录
git pull,然后通过插件管理器重新安装 / 刷新并重载窗口。 - 卸载:在插件管理器中移除 bundle(或从 profile 删除依赖)。已保存的工作区配置位于
$DSH_HOME/storages/workspace-settings/settings.json,删除该文件才会清空。
使用
打开设置
1. 侧边栏工作区行悬停后点 ...,选择 工作区设置;或右键工作区行,在同一官方菜单中
选择。
2. 也可以走 设置 → 工作区设置,点击任意工作区的 编辑。
保存后的行为
没有保存按钮,每次修改立即持久化,对话框只报告失败;用 ×、Escape 或点击遮罩关闭都会
保留已生效的修改。
在该工作区新建会话(或复用空白会话)时,Host 会应用保存的默认值:
- 模式:通过官方 Agent 预设切换接口应用,仅在会话仍空白时执行。
- 权限:通过官方权限预设接口应用,写入标准 Session 事件。
- 模型 + 强度:作为首个模型请求的覆盖;从第二次模型请求开始,会话自己的模型选择器
重新拥有最终决定权。
- 工作步骤展示 / 收起时机:当该工作区的会话处于激活状态时,切换官方 Chat 展示偏好;
离开后恢复全局值。
已经开始对话的会话不会被改写;子代理会话与分叉会话会跳过;空白会话中用户显式选过的值会
通过“当前值 vs 全局默认 vs 上次工作区应用值”的对比被保留。
配置
插件没有 profile 配置字段,全部数据在插件自己的存储里。
内容 · 位置
工作区默认值 · $DSH_HOME/storages/workspace-settings/settings.json
工作步骤展示 / 收起时机的全局基线 · 浏览器 localStorage 键 dsh-workspace-settings:chat-baseline:v1
每个会话的“上次应用”缓存 · 同一 settings.json 的 sessions 段(派生缓存,可安全丢失)
工作区以规范化路径为键,因此重命名工作区不会丢失设置。把某一项改回 跟随全局默认 会
从存储中移除对应覆盖;所有项都跟随全局时,该工作区记录会被删除。
工作步骤展示与收起时机
DSH 0.2.1 把 工作步骤展示 与 工作步骤收起时机 存为全局 Chat 偏好(ui-chat),
而不是会话级设置。插件把工作区值当作“展示期覆盖”:
1. 当前激活会话属于带该值的工作区时,插件把官方 Chat 偏好切换到工作区值;
2. 切到其他工作区(或离开该工作区会话)时,恢复你原本的全局值(启动时捕获为基线);
3. 在通用设置中修改全局值时,会更新该基线;下次该工作区会话激活时会重新应用工作区值。
工作区覆盖生效期间,通用设置里这两行会显示工作区值,这是预期行为。展示偏好不会写入任何
Session 事件。
实现原理
一个 bundle 包含宿主端与客户端两半:
index.js— 宿主端。拥有 JSON 存储,暴露两个需认证的 POST 路由
(/api/workspace-settings/catalog、/api/workspace-settings/save),并监听
agent/created,把工作区默认值应用到空白普通会话。它使用公开的
workspaceRegistry、agentPresets、permissionPresets、sessionController 与
agentDefaultModel 服务,以及 Session 投影判断空白 / 预设 / 待应用模型状态。
client.js— 客户端。注册settings.section页面与shell.overlay浮层;浮层识别
文档化的 data-row-key="workspace:<id>" 行,接管该行菜单按钮(与右键),用官方 Menu
渲染菜单;重命名 / 删除调用公开的 ctx.workspaces 服务。设置对话框使用官方
Modal / Button / Input,行与选择器几何与内置权限设置行一致。另有一个轻量
watcher 跟随当前激活会话应用 Chat 展示偏好。
cordis.patch.yml— 把插件行插入 profile 的 bundle patch。
模型覆盖以 Agent 作用域的 system-prompt/assemble 与 agent/request 监听器实现,只在首个
请求生效,不会修改全局默认模型;会话记录自己的请求头后即停止覆盖。
隐私
- 插件不发起网络请求,全部数据保存在本地文件。
- 不收集凭据、会话内容或个人数据。
- 插件不包含遥测。
- Chat 偏好切换只写通用设置本来就会写的同一份
ui-chatprofile 值,离开时恢复全局基线。
开发
离线检查,无需浏览器:
node --check index.js node --check client.js node --test test/host.check.mjs
项目没有构建步骤:client.js 以单文件模块 bundle 直接加载,React 与 UI 原语来自运行中的
宿主模块表。测试用小型 fake 替代 Cordis 服务,覆盖校验、存储、catalog/save 路由、预设 /
权限继承与首请求模型覆盖。
本地链接安装时,直接修改本目录文件并重载 DSH 窗口即可;Host 侧改动需要重新启用插件行,
纯客户端改动支持热加载。
项目结构
client.js # 客户端:设置页、工作区菜单 …(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:3,最后更新 2026-11-06