DSH CyberWorkStation 是一个桌面启动器,外加 22 个插件,专为 DeepSeek Harness…
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
dsh plugin --profile web add WZZNNE/DSH-CyberWorkStation状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 00:46:35
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
界面预览
6 张 · 点击查看大图功能亮点
- 一键部署整合包
- 赛博朋克桌面启动器
- 控制台与插件市场
展开完整介绍(129 字)↓
DSH CyberWorkStation——一键打包的 DeepSeek Harness(dsh)整合包:赛博朋克桌面启动器、SillyTavern 级控制台、8 个生产级插件、AI 皮肤工作室与市场。内置核心 rc.8,运行 setup.cmd 即可开跑。
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
DSH CyberWorkStation
| English
DSH CyberWorkStation 是一个桌面启动器,外加 22 个插件,专为 DeepSeek Harness (dsh) 打造。它面向的是想把 dsh 当日常工具用、而不是当命令行玩具的人:双击就能启动,所有设置和密钥集中在一处,模型在做什么、花了多少钱一目了然,装新功能也不用打开配置文件。上游核心原封不动放在 core/ 下,所以核心升级之后这一切都还在。
内置核心:dsh 0.1.5-rc.2(上游 tag dsh-v0.1.5-rc.2)。
core: 0.1.5-rc.2 · plugins: 22 · skills: 10 · license: MIT
如果这东西对你有用,点个 star 能帮更多 dsh 用户找到它。
Dashboard
Contents
- What this is
- The launcher, page by page
- Inside dsh itself
- What the screenshots cannot show
- Context and memory
- Plugin roster
- Skills
- For contributors
- Skins and artwork
- License and credits
What this is
开箱即用的 dsh 是个命令行智能体,自带一个能用但朴素的 Web UI。它周边的一切,从选模型到装插件,都得在终端里或者 settings.yaml 里折腾。这个仓库把核心包了两层,让整个工作流都能在屏幕上完成。
第一层是 DSH Launcher,一个独立的小程序。双击打开一个窗口,里面 13 个页面,覆盖 dsh 安装的整个生命周期:启动和停止核心、安装插件和技能、浏览会话和存储、更新和检查环境、看 token 统计、编辑 Control Deck、调模型参数、管理凭据、编辑记忆和上下文、切换皮肤、读日志。
第二层是 22 个插件,住在 dsh 自己的页面里。它们给 Settings 加了凭据中心、模型列表同步、网页搜索、媒体 API、桌面宠物和用量与花费页面;给对话本身加了消息编辑、临时聊天、文件拖放和思考等级。没有哪个面板是硬贴到界面上的,每个都出现在内置面板该在的位置。这 22 个里,19 个是为这套东西写的,3 个是别人 MIT 项目的 fork;另外 8 个社区插件直接拿来用,末尾的名册会逐个列出出处。
本文里的「核心」都指 core/ 下检出的上游 deepseek-harness。它按原样使用,正因如此,Updates 页面才能把它换成任意上游版本。
有几项特性决定了整套东西用起来的手感。每个功能要么是插件,要么是独立程序,所以升级核心永远不会让你丢掉某个功能。在启动器页面或 dsh 的 Settings 里改了设置,大约 1.5 秒内就会生效,不用重启。API key 只存进 dsh 的凭据库,装了 keyring 插件时则存进 Windows Credential Manager,除此之外不存别处。启动器和 dsh 都只监听本机。
一览
| 部分 | 数量 | 说明 |
| DSH Launcher | 13 个页面 · 中文 / 英文 · 3 套皮肤 | launcher/,双击 DSH启动器.exe;核心约 5 秒启动完成 |
| 套件插件 | 22 个(19 个原创 · 3 个 fork) | plugins/,安装时自动注册 |
| 社区插件 | 8 个 + 1 个 MCP 记忆服务器 | 从启动器的插件市场安装,不在仓库里 |
| 可选的树内核心能力 | 10 个上游包 | 常驻终端、定时调度、LSP、MCP 客户端、Claude Code / Codex 钩子桥 |
| 工程技能 | 7 个(Claude Code) | 架构 / 插件 / 前端 / 运维 / playbook / 测试 / 本地模型 |
| dsh 内技能 | 3 个 | 皮肤工作室、控制台编写、桌面宠物制作 |
| 皮肤 | 3 套启动器 · 2 套前端 · 社区皮肤按需 | 在启动器的 Skins 页面管理 |
flowchart LR
subgraph L["DSH Launcher · 127.0.0.1:3090"]
L1["Dashboard / Plugins / Skills / Sessions / Storage / Updates"]
L2["Tokens / Control Deck / Model params / Credentials / Memory / Skins / Logs"]
end
subgraph D["dsh core · 127.0.0.1:3080 · unmodified"]
D0["dsh runtime · sessions · tools · Web UI"]
D1["22 suite plugins"]
D2["8 community plugins + optional core capabilities"]
end
L -- "start / stop / install / update" --> D
L -- "edit config, live within 1.5 s" --> D1
快速开始(分步操作)
你需要什么:Windows 10 / 11、Edge 或 Chrome,以及一个 API key(OpenRouter 或 DeepSeek 官方都行,有一个就够)。用 API 不需要 GPU,普通 PC 就行。只有本地跑模型时 GPU 才重要。
第 1 步:安装两个免费程序
1. Git:打开 https://git-scm.com/download/win ,下载「64-bit Git for Windows Setup」,一路点 Next 用默认值。安装脚本会检查它,启动器的一键更新也依赖它。
2. Node.js:打开 https://nodejs.org ,下载标着 LTS 的版本(24.x;22.19 或更高也可以,别用 23.x),一路点 Next 用默认值。
然后打开一个新终端验证(旧窗口看不到刚装好的程序):按 Win + R,输入 cmd,回车,运行:
git --version
node -v
两行都应该打印出版本号(例如 git version 2.51.0 和 v24.19.0)。如果提示「不是内部或外部命令」,说明安装没完成,或者窗口没重新打开。
第 2 步:下载项目 在同一个终端里,逐行输入下面的命令,每行按一次回车(把 D: 换成你想用的盘符,文件夹名字随你取):
D:
mkdir AI
cd AI
git clone https://github.com/WZZNNE/DSH-CyberWorkStation.git
cd DSH-CyberWorkStation
git clone 会把整个项目下载到 D:\AI\DSH-CyberWorkStation;网速慢就等它跑完再输下一行。
不用 git 也行:在 GitHub 页面点绿色的「Code」按钮,再点「Download ZIP」,解压到 D:\AI,然后在终端里运行 cd /d D:\AI\DSH-CyberWorkStation-main。Git 还是得装(安装脚本会检查),唯一的区别是 ZIP 安装没法在 Updates 页面一键更新核心,只能重新下载新的 ZIP。
第 3 步:一条命令完成安装
setup.cmd
它会检查 Git 和 Node 版本、安装依赖、构建核心(第一次要 5 到 10 分钟,输出刷屏很正常)、注册所有插件和技能,最后打开启动器窗口。如果中途报错停下,看最后几行:提示 Node 版本问题就装 LTS 版;网络超时就再跑一次 setup.cmd,它会接着上次的进度继续。
第 4 步:填密钥,启动
1. 在启动器左栏打开「Credentials」,在 OPENROUTER_API_KEY 或 DEEPSEEK_API_KEY 那一行点「Set / replace」,粘贴你的密钥(在 https://openrouter.ai/keys 或 https://platform.deepseek.com 申请)。密钥只存在 dsh 的凭据库里,不会写进配置文件。
2. 同一页往下,在「dsh default model」下面选服务商(openrouter 或 deepseek-official),再选模型,点「Set as default」。
3. 回到 Dashboard,点「LAUNCH」;状态变成 RUNNING 后,点「Open WEB UI」就能开始聊天了。
以后每次启动:双击 launcher\DSH启动器.exe。这个 EXE 只是个引导外壳,源码就在 launcher/launcher-shell.cs,它做的事只有运行 node server.mjs 并打开浏览器窗口。不想用它,就双击 launcher\start-launcher.cmd(它会留一个控制台窗口,关掉窗口启动器就停了),或者用 Windows 自带的编译器自己编译外壳:
cd launcher
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:winexe /r:System.Windows.Forms.dll /r:System.Web.Extensions.dll /win32icon:dsh.ico /out:DSH启动器.exe launcher-shell.cs
常见问题
- setup.cmd 提示缺 Git 或 Node:装好后重开终端,再跑一次。
- 双击 EXE 没反应:先运行 start-launcher.cmd,看它控制台窗口里的报错;如果 3090 端口被别的程序占了,把环境变量 DSH_LAUNCHER_PORT 设成别的端口。
- 公司网络或代理:克隆前先运行 git config --global http.proxy http://127.0.0.1:7890(换成你自己的代理地址和端口)。
- 想把配置放到 C:\Users\<you>\.dsh 以外的地方:在运行 setup.cmd 之前,把环境变量 DSH_HOME 指向另一个目录。
启动器,逐页看
启动器是个独立程序,和 dsh 并排运行。双击 DSH启动器.exe,它会在无边框应用窗口里打开 http://127.0.0.1:3090,只监听本机,并自带访问 token。页面沿左侧边缘排列;左下角的「中 → EN」开关切换整个启动器的语言。
本节和下一节的截图取自比内置版本更早的核心版本(0.1.1-rc.2),而且截取时核心处于离线状态。因此那些需要读取运行中 dsh 的页面(模型参数、凭据、记忆与上下文)显示的是占位内容;dsh 上线后它们显示什么,会在每张图下面说明。
图 1:仪表盘
仪表盘
仪表盘是你进入后落到的页面,在你看别的东西之前,它先回答两个问题:dsh 在跑吗,我下一步去哪。顶部横幅显示状态,OFFLINE 或 RUNNING。下面四张卡片分别给出核心版本、Node 版本、当前默认模型(带一个链接,可跳到凭据页修改),以及一个「Open WEB UI」按钮,点进去就是 dsh。Folders 一行用绝对路径新建工作区,四张快捷卡片分别在资源管理器里打开核心仓库、~/.dsh 主目录、插件文件夹和会话日志。中间的 console 会随着核心启动和运行实时输出日志。右下角是 Start 和 Exit。
核心已经构建好时,Start 大约五秒就能把它拉起来;没构建好就回退到源码启动;连点两次不会启动第二份。Exit 只停掉 dsh 自己的进程,别的都不动。在 Folders 一行里输入工作区,按下按钮它就存在了,刷新 dsh 页面即可选中。dsh 自带的「+」按钮无法为未分组会话创建工作区,所以新工作区要从这一行来。
启用 cyberpunk-2077 皮肤后,Start 会带上电流特效,RUNNING 状态也会翻转入位。任何页面都能用深链接直接打开,比如 #deck。
图 2:插件
插件
这一页把 dsh 的插件命令行变成了表单。顶部输入 npm 包名或指向本地文件夹的 link: 路径,即可安装。下面的表格列出 web 配置档里的每个插件,含版本、来源(npm 或 link)、是否作为 bundle 层挂载,以及一个 Uninstall 按钮;社区插件和套件插件共用同一张表。再往下,Plugin Market 会搜索 npm,一键安装搜索结果;还有一个只读列表,展示核心自行挂载的一百多行。
本页所有内容,以及 Updates 页上的一键插件更新,都走核心自带的插件命令,所以结果和你手动输入命令完全一样。配置档补丁引用了两个插件,凭据钥匙串和局域网围栏,它们受保护:从这里卸载会被拒绝,并引导你去看迁移步骤,这样下次启动就不会去加载一个已经不在的模块。市场会把 npm 结果过滤到 dsh 生态,并把皮肤包排除在插件列表之外,因为皮肤有自己的市场。名册里的社区插件都是这样安装的。
图 3:技能
技能
技能来自两个地方,页面把两者都展示出来:用户文件夹 ~/.dsh/skills,套件在这里安装 control-deck-authoring、desktop-pet 和 skin-studio;以及核心源码自带的 12 个开发流程技能。每一行显示技能来自哪里、用途是什么。底部的技能市场按关键词搜索 GitHub 仓库,并把选中的仓库解包到用户文件夹。
三个 dsh 内置技能属于套件自己。Skin Studio 让模型为你设计皮肤。Control Deck Authoring 让模型编写提示词、正则脚本和 lorebook,或者迁移 SillyTavern 资产。Desktop Pet 带模型从人设走到资产清单。仓库还附带 7 个面向 Claude Code 的工程技能;它们不出现在本页;参见 技能。
图 4:会话
会话
~/.dsh/sessions 下的每个会话都列在这里,按工作目录分组,最新的排在最前。每个分组标题显示数量和最后活动时间,过滤器可按工作区或会话 id 缩小列表。「打开会话文件夹」会跳转到资源管理器,展开分组后可为每个会话导出 ZIP,导出时 dsh 必须在运行。分组名前的「≈」表示该目录是推断出来的,而非记录下来的。
本页是只读的:没有删除按钮,会话在资源管理器里删除。截图里的 tmp\2026… 文件夹是临时聊天插件为每个临时会话创建的暂存目录。
图 5:存储
存储
表格统计九个目录的大小(核心仓库、~/.dsh、sessions、storages、profile、plugins、用户技能、launcher、node_modules),每个都能一键打开。下方,配置备份把套件在 ~/.dsh 下的配置打包成单个 JSON 文件:settings.yaml、Control Deck 及其预设、网页搜索、安全规则、模型参数、记忆存储、配置档补丁、技能、钩子和前端皮肤。「预览」会在写入任何内容前列出文件,「恢复」会先保存当前文件的副本,再替换它们。
备份永远不包含凭据文件和会话日志。恢复只接受白名单内的文件,拒绝越出预期路径或超出大小限制的打包文件,并告诉你哪些恢复的文件需要重启 dsh 才能生效。内存存储不需要重启:dsh 运行期间,恢复的存储会直接合并进来。
图 6:更新
Updates
Version 卡片对比本地核心与上游最新发布版,提供三条路径:原地更新核心(git pull 并构建)、升级到上游最新 tag,或升级到你指定的 tag。Plugins 卡片一次性更新配置档里的所有插件。在它们下方,自检运行八项检查:Node 版本、pnpm、端口、核心检出、插件 peer 链接、配置文件、构建出的命令行是否存在,以及 web 配置档里注册的插件。这些检查的输出在底部滚动显示。本页还有一张卡片,用来修复旧格式的会话日志——核心 0.1.5 不再接受这种格式:先预览,然后停掉 dsh 再修复。
「升级到 tag」会把整个核心换成任意上游版本并重新构建,套件的功能不受影响。自检认识套件里的每个插件,所以新加的插件无需任何注册步骤就能覆盖到。
图 7:Token
Tokens
Tokens 页面是用法概览,风格类似 Claude Code 的用量报告:Overview 和 Models 两个标签页,All / 30d / 7d 三个时间范围,八张卡片(会话、消息、总 token、活跃天数、当前与最长连续天数、最忙的一天、最常用的模型),26 周热力图,以及按天列出调用、缓存命中与未命中、输出和成本的表格。
这些数字来自 cost 插件的账本;启动器读取账本,不另存一份。本地模型算作免费:回环路由只有在指定了付费服务商、并带上该服务商的凭据时才计费。Models 标签页按模型拆分 token 和成本。
图 8:Control Deck
Control Deck
Control Deck 是仿照 SillyTavern 做的提示词工作台,用来塑造模型收到什么,而不用改文件。顶栏放预设(保存、加载、删除)和导入/导出,可以针对整个 deck,也可以针对 SillyTavern 的 World Info、regex script 和 prompt preset JSON。下面跟着七个标签页。Prompts 放若干分级条目,支持 {{date}}、{{model}}、{{random:a,b}} 这类宏,还有一个可选的注入间隔。Regex scripts 作用于用户输入、World Info 或显示出来的 AI 输出。World Info 在关键词命中时注入设定,字段集和 SillyTavern 完全一致。Sampling and context 把 temperature、max output 和 stop words 收在一个总开关后面,另加一份工具禁用列表。Web search 对应 dsh Settings 里的同名区块,Safety rules 放你自己的 deny、ask 和 auto-allow 模式,最后一个标签页是 Quick start。底部一个「Save & hot-reload」按钮,一次写入所有标签页。
注入永远不会改写你的原话:提示词和命中的设定会作为一条单独的上下文条目,紧跟在你的消息后面加进去。字段沿用 SillyTavern 的名称和含义,用过 SillyTavern 的人不用重新学。坏掉的 regex 拖不垮 dsh:规则跑在单独的线程上,超时的那条会被禁用,并在状态栏里点名。预设加载或导入还在途中时你敲的修改,会在回复到达后保留;保存失败的话,草稿也留在原地。
Web search 标签页对应 Fig. 21,两边写的是同一份配置。字段说明放在 control-deck-authoring 技能里,所以你可以让模型替你写条目。
Fig. 9: Model parameters
Model parameters
在这里设置任意模型的上下文窗口(contextWindow)和最大输出(maxTokens),路由允许的话还能设 thinking levels。工具栏会探测 LM Studio 或 Ollama,给那些没声明级别的本地模型教上推荐级别,刷新列表并按 model id 过滤;这里教出来的级别随后会出现在 dsh 自己的模型选择器里。
dsh 起来之后,每条路由(DeepSeek 官方、OpenRouter、本地)都会列出所有模型及其生效值,每一行单独保存,不会打扰其他行里的草稿。本地模型按家族教级别,Fig. 16 展示了它在选择器里的样子。这里也是你修正上下文窗口的地方:dsh 默认 262,144,而本地服务器往往只加载了 8k,两边对不上之前,压缩会发生在错误的位置。OpenRouter 的行可以一键添加或移除 :online 网页搜索变体。
Fig. 10: Credentials Center
Credentials Center
dsh 运行起来后,这个页面会列出所有 API 凭据引用(比如 OPENROUTER_API_KEY),以及它的状态(是否已配置)、存放位置、绑定的功能(模型路由、媒体、网页搜索、桌面宠物、记忆嵌入)、别名和备注,还有设置 / 替换 / 删除操作,外加所有备用密钥。你可以添加引用,也可以筛选出已绑定的那些。下面两张卡片负责模型这一侧:Model list 里的「Refresh model list」会把 OpenRouter 最新目录同步进路由,dsh default model 则先选路由、再选模型。dsh Settings 里有个同名分区,两边写入的是同一个地方。
引用列表会自动汇总;新增路由或插件不需要任何注册步骤,密钥值也永远不会回显。一个引用可以存多个密钥:一键切换,被替换的那个会留作备用。默认模型写入前会先对照路由的列表校验,所以不存在的 id 绝不会落进配置。
图 11:记忆与上下文
记忆与上下文
三个标签页。Session context 是第一个:显示每个会话的上下文压力及其压缩摘要,摘要可以编辑。Long-term memory 存放摘要、事实和笔记条目,支持搜索、置顶、作用域、编辑、删除、导入和导出。Settings 涵盖是否存储摘要与提取事实、注入模式、每次注入的条目数、给模型用的记忆工具、可选的向量召回,以及召回测试。
原版 dsh 在压缩后会写一份摘要,你能读但不能改,而且会话之间什么都不记。这个页面把两样都补上了:可编辑的摘要,以及跨会话记忆。完整走查见上下文与记忆。
图 12:皮肤
皮肤
三个区块。UI settings 为 default 皮肤选择浅色、深色或跟随系统。Launcher skins 列出 cyberpunk-2077、default 和 night-city-holo,即时生效,支持导入 CSS。Frontend skins 对 dsh web UI 做同样的事:「(none)」恢复原版外观,cyberpunk-2077 和 night-city-holo 内置,也接受导入,「Get community skins」打开市场,刷新 dsh 页面后选择生效。截图里两边都穿着 Night City holo 皮肤。
Launcher skins 和 dsh frontend skins 分开管理,两边都接受你自己的 CSS。社区皮肤市场把 npm 皮肤包转成本地 CSS;之后它们就像你自己的皮肤一样切换或删除,绝不会混进插件系统。每个内置皮肤长什么样,见皮肤与美术。
图 13:日志
日志日志有四个来源:启动器日志、dsh 输出、核心更新和插件更新。只要一个仅看错误的过滤器、一个关键词过滤器、复制和下载完整文件,就能覆盖日常所需。更新、皮肤转换和备份恢复的输出都落在这里,访问 token 永远不会出现在日志里。
dsh 内部
接下来 14 张图都是 dsh 自己的页面。有些面板来自套件插件,有些来自社区插件,有些是内置的;每个标题下面那行会说明来源。
图 14:消息编辑器
dsh-chat-editor · 原创
消息编辑器
会话标题栏里的 ✎ 打开这个面板:对话的每个节点,连同它的角色、轮次、模型是否还能看到它(压缩会隐藏较早的消息)以及它的长度。每条消息提供四个操作。编辑和删除既改变你看到的内容,也改变模型看到的内容。折叠只收起显示,点一下就能重新展开。分叉会从这条消息之前的位置开始一个新会话。截图里正在编辑一条助手消息。
你的消息和助手消息都可以编辑和删除。编辑过的助手消息会作为一条带标记的更正落下来。删除无法撤销:原文仍留在会话日志里,但你和模型都不会再看到它。分叉可以从任何已完成的轮次开始,第一轮除外。编辑或删除一条消息,也会让从它提取出的记忆失效;见上下文与记忆。
图 15:对话
核心 + 若干插件
对话
一个真实会话,套件和社区添加的功能都在视野里。左栏:「临时聊天」分组;底部的余额、今日花费和缓存命中条;「导入会话」,以及一排图标,对应移动端远程、临时聊天、宠物和宠物聊天。会话标题栏里:✎ 和 Conversation / Trajectory / Context 三个标签页。输入框旁边:一个麦克风和一个模型选择器。底部:两行状态,上面一行是内置的,下面一行是费用插件的单会话花费和 token 拆分。右侧:Files 面板。颜色来自 night-city-holo 前端皮肤。
添加的东西都落在核心已经预留好的位置:侧边栏底部的图标行、设置里的分区、会话标题栏里的按钮、输入框旁边的图标。布局还是你熟悉的那套。有几个入口在画面之外:把非图片文件拖到聊天上,会把它存进工作区并插入一条引用;输入 @ 会打开文件选择器;/context 命令会打开上下文明细;宠物是 dsh 里一个可拖动的浮动窗口。
图 16:思考等级
核心选择器 + dsh-local-reasoning
思考等级模型选择器旁边的等级下拉菜单提供 Default、Off、Low、Medium 和 Xhigh。选择器是原生的,但本地模型没有自己的等级;这里显示的等级由「模型参数」页面写入。
某个模型在下拉菜单里提供哪些选项,本地路由来自「模型参数」页面(见图 9),OpenRouter 来自模型列表同步(见图 20)。对于 Qwen3 这类只有开 / 关的模型,Off 会追加 /no_think,其他任何等级都会追加 /think。新会话在创建时锁定模型,在选择器里更换模型也会重写全局默认值。
图 17:Settings → Credentials Center
dsh-credentials-center · 原创
Settings → Credentials Center
与启动器的 Credentials 页面数据相同,按引用逐张卡片呈现:名称、状态、来源、设置 / 替换、删除、备用密钥,第二行是别名、备注和绑定标签,标签显示哪些模型路由、媒体、搜索或宠物使用这个密钥。左栏列出 Settings 的每个分区:General、Models、Credentials、Plugins、Agent presets、Session import、Model-list sync、Web search (global)、Media APIs、Desktop pet、Usage & cost、File mentions、Sidebar cards。
安装凭据密钥环插件后,密钥存放在 Windows Credential Manager 中;同名的环境变量仍然优先。
图 18:Settings → Plugins → Plugin configuration
核心槽位 + 若干插件卡片
Settings → Plugins
每个有设置的插件一张卡片。Terminal、Agent loop 和 Web search 是原生插件。Context 保存社区插件 dsh-context 的偏好设置。Image understanding 是 dsh-vision-bridge-zh,它先用选定的视觉模型描述图片,再把图片交给聊天模型,这样纯文本模型也能处理图片。Session import · system prompt 是 dsh-import-note。「Plugin list」标签页是只读清单。
Session import 卡片只说明一件事:导入的会话永远不会覆盖 dsh 或任何插件的系统提示词。Image understanding 是社区视觉桥的中文界面分支;路由和配置不变。
图 19:Settings → Session import
dsh-chat-import · 社区(已采用)
Settings → Session import
社区插件自己的页面:一个导入系统提示词开关(默认关闭)和双向同步。外部 → DSH 监视 Claude、Codex 或 Grok Build 的新会话并增量导入;DSH → 外部把新轮次写回。间隔以秒为单位,还有一个「Sync now」按钮。
原样使用,它从 19 个智能体(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode、Kimi CLI 等)导入会话,并导出回其中三个。侧边栏的「Import session」是它的入口。
图 20:Settings → Model-list sync
dsh-provider-sync · 原创设置 → 模型列表同步
这一节让 OpenRouter 路由的模型列表保持最新:上次同步时间、间隔(24 小时)、「立即同步」、一个开关(给 Claude 模型名追加一条备注),以及各路由的计数(截图里是 474 个模型,16 个新增,23 个变更,310 个带思考等级)。Credentials 页面上的「刷新模型列表」按钮调用的是同一个同步。
同步会添加新模型,刷新名称、上下文窗口和输出上限,为具备推理能力的模型声明思考等级,同时不动你手动改过的任何内容。Claude 模型会得到一条「not available for OpenRouter native search」备注,因为 OpenRouter 的服务端网页搜索不响应 Claude;web-search 插件改为让 Claude 走工具搜索。
图 21:设置 → 网页搜索(全局)
dsh-web-search-plus · 原创
设置 → 网页搜索
网页搜索在这里配置一次,启动器的 Control Deck 标签页共用同一份配置。Mode 在关闭、让模型自行决定、按触发词搜索、以及 API 服务商自带的搜索之间选择。Source 选择引擎:SearXNG(截图里是自托管实例)、Serper、SerpApi、Tavily、Brave 或 DeepSeek 官方。「打开页面文本」会在搜索后打开前 N 条结果,并把它们的文本一并交给模型。web_fetch 开关让模型读取任意公开网页。下方是 Save、Test search,以及一张只读的已保存凭据卡片。
The four modes map to four situations. Off is for working offline. "Let the model decide" hands the model a search tool that it calls when it needs to. Trigger words serve local models without tool calling, SillyTavern-style: a backtick phrase, keyword or regex hit searches first and answers second. Provider search is OpenRouter's server-side search, billed per search, with Claude models excepted (see Fig. 20). web_fetch reads public addresses only and refuses private and loopback ones. dsh's own presets also provide a web_fetch tool, and the same switch and address rules apply to it, so the model cannot reach a private address by calling either copy. "Open page text" saves a tool round trip, and text extraction can use a local trafilatura service. Keys are stored in dsh's credential store, and "Test search" shows results and timing.
Fig. 22: Settings → Media APIs
dsh-media-lab · original
Settings → Media APIs
Image generation, video generation, speech synthesis and speech recognition share one panel. For each kind you choose the provider, endpoint, model (the list can be fetched), size or resolution and API key, and "Try it" runs a live round trip so you know the settings work before the model needs them. Files are saved under ~/.dsh/media and play directly in the conversation; local services need no key. In the screenshot, images go to OpenRouter's gpt-image-2 and video to OpenRouter's hailuo-3.
The model gains four tools, generate_image, generate_video, text_to_speech and transcribe_audio, and their results appear in the conversation. Nine providers are supported (OpenAI-compatible, OpenRouter, Gemini, Veo, Replicate, fal, ElevenLabs, Fish Audio, MiniMax) plus a custom HTTP adapter, and the "shared harness API (DSH)" source borrows a route saved on the Models page so a key is never entered twice. Image-to-video, reference-guided image generation, TTS voice presets and automatic clean-up of old files are included. Each of the four kinds uses the key of its own chosen provider and never borrows another's, and internal addresses returned by a provider are refused.
Fig. 23: Settings → Desktop pet
dsh-desktop-pet-cws · original
Settings → Desktop pet
The top of the page manages the current pet (create, delete) and its enable and show switches, then the persona (name, personality and voice, appearance, greeting, scope) and the chat model (follow dsh, share a DSH provider, or its own endpoint and key). Further down come the lorebook, expressions and frame animations, the owner profile, permissions, proactive-talk frequency, voice, reminders, look, and the desktop window.
The pet has its own persona, lorebook, multimodal API and chat history. It knows what you are working on (one line when a task starts and one when it finishes), talks first, at one of four frequencies, sets reminders, speaks and listens, and can draw itself. It can appear in three windows: a floating pet inside the dsh page; a desktop sprite (per-pixel transparency, drag and resize, click to talk); an Edge app window. The desktop window is restored after a dsh restart. Screen reading and computer control each have three permission levels (never, ask, full), and as soon as anything you did not type yourself enters the conversation, such as a screenshot, a search result or uploaded material, control requests must be confirmed with a card. An expression can be one drawing with a motion, or an 8 to 24 frame animation at its own frame rate.
Pet conversations are managed in their own page, opened from 💬 in the sidebar. The Look section adjusts the bubble or lets the image model draw the bubble, input bar and send key. The companion skill desktop-pet walks the model from persona to artwork.
Fig. 24: Settings → Usage & cost
dsh-cost-meter-plus · fork
Settings → Usage & cost
The page runs top to bottom: a UI-language switch and the official account balance (total, grant and top-up, with a refresh), cost cards for today, this month and all time, today's sessions, token statistics with a heat map, per-model statistics, and further down the budget, the price table and the vendors' Coding Plan quota panels.
The upstream dsh-cost-meter provides per-session, daily and historical cost, official price sync, a price catalog of 90-odd models, 7 Coding Plan quotas, budgets and alerts, and a zh/en UI. This fork adds multi-vendor balances (DeepSeek, OpenRouter, local, OpenAI, each shown as its API allows), automatic OpenRouter price sync, a cache-hit bar in the sidebar, a per-session token split and free local routes, and moves balance and cost to the top of the settings page.
Fig. 25: Settings → Sidebar cards
dsh-better-sidebar · community (adopted)
Settings → Sidebar cards
Settings for the VS Code-style right-hand workbench (files, editor, terminal, Git, browser, background tasks): open by default in new sessions, default width, open chat files in the sidebar, expose a sidebar tool to the model, position compatibility mode, and a switch per content tab. The Files panel on the right of Fig. 15 is this plugin.
Fig. 26: Trajectory
stock
Trajectory
The Trajectory tab lays the session out over time: Duration / Turns / Calls scales at the top, a timeline below, and every step in order with its text, tool calls and result previews. The trajectory tells you what was done; the Context tab in the next figure tells you what the model is carrying right now.
Fig. 27: Context
dsh-context 0.52.2 · community (adopted)
Context
The dashboard opens with context stats (turns, steps, tool calls, injections, compactions, prunes) and token stats with a cache-hit ring, then timing for model calls, tool runs and overhead. The current context (200.1k of 262.1k, 76% used) is split into system prompt, tool definitions, user messages, injected context, assistant messages and tool results. A trend chart shows one bar per request with compactions and prunes marked, a context browser expands every item to its actual content, and context events and file activity follow.
It needs version 0.40 or later, and the launcher self-check names outdated versions. This is where the suite's effects become visible: how much the tool definitions weigh, what the Control Deck, search and memory injected, at which step compaction happened, and how far the current request is from the threshold.
What the screenshots cannot show
Some capabilities have no panel of their own, or only a corner of one. They are grouped here by what they are for.
Safety
Destructive-command blocking (dsh-safe-guard, original). Commands such as rm -rf /, git push --force without a lease, raw device writes, mkfs, Windows drive-root deletes and formats, and fork bombs are denied outright, without disturbing the normal approval flow for everything else. On the Control Deck's Safety tab you add your own deny, ask (approval card) and auto-allow patterns.
Keys in the system keyring (dsh-credentials-keyring, original). API keys are stored in the Windows Credential Manager instead of a plaintext file. Environment variables still win, and a keyring failure means a lookup fails, never a lost key.
LAN fence for the mobile remote (dsh-lan-fence, original). With the scan-to-pair remote enabled, unpaired LAN devices get 403 on dsh's /api while the pairing channel keeps working. It is a plugin, so a core upgrade leaves the fence in place.
Local only. Every launcher request carries a token, and every suite endpoint that writes configuration refuses cross-site requests and foreign hosts.
Conversation
Temporary chats (dsh-temp-chat-cws, original). One sidebar button opens a chat that belongs to no project, in a shared "Temporary chats" workspace, running a chat-only preset with no files and no terminal. Nothing is deleted automatically; a clean-up button removes the folder when you want.
File drops (dsh-drop-files, original). Drop any non-image file onto the chat and it is saved into the current workspace's .dsh-uploads/, with @.dsh-uploads/<name> inserted into the composer for the model to read with its file tools; the limit is 25 MB per file. PDF, Office and archive files are stored but the model cannot read them, and the drop says so.
Skin Studio (dsh-skin-studio-cws plus the skin-studio skill, original). Ask the model in chat to make a skin for the launcher or for dsh. It asks about style, primary colour, light or dark and a background image first, then writes the CSS and applies it. With no image and no image model it asks you for one rather than inventing one.
Smaller pieces
Three plugins need no panel at all. dsh-price-hint shows input, output and cache prices per million tokens when you hover a model in the picker. dsh-quick-workspace is what the dashboard's Folders row calls, and it creates the directory if it is missing. dsh-skin-loader applies the frontend skin chosen on the Skins page to the dsh page.
Optional core capabilities switched on (upstream packages)
| Capability | What it gives you |
| Persistent terminal (the three dsh-terminal packages) | the model can open a persistent PTY, send commands interactively, read output and send signals, with background jobs |
| Scheduling (dsh-schedule) | remind the agent at a time or on a fixed rate |
| LSP code intelligence (the three dsh-lsp packages) | a TypeScript language server; the model can go to definition, find references and hover types |
| MCP client + reference memory server | the official knowledge-graph memory example (entities, relations, observations); independent from the suite's memory plugin |
| Claude Code / Codex hook bridges | reuse hooks.json files in Claude Code or Codex format |
Context and memory
This chapter covers the launcher's Memory & context page and the dsh-memory-lite plugin. It starts with what dsh does on its own, then shows what enters the context and where each part is controlled, and ends with how memory is recorded, recalled and corrected.
1. What dsh does by itself
History is append-only and never truncated. When the conversation nears the limit (80% of the context window), dsh compacts the oldest stretch into a summary, and from then on the model sees the summary instead of the original. /compact triggers the same step by hand.
The limit is each model's contextWindow, 262,144 by default. Local models rarely load that much, so set the real value per model on the launcher's Model parameters page; otherwise compaction happens in the wrong place.
Stock dsh has no cross-session memory. In a new session the model starts from nothing.
2. What enters the context, and where to adjust it
| Content | From | Adjust in | Default budget |
| System prompt entries | Control Deck → Prompts | Control Deck | by entry order |
| Matched World Info, user-prefix prompts | Control Deck → World Info / Prompts | Control Deck | 8000 characters, scans the last 6 messages |
| Search results (trigger mode) | Web search | dsh Settings → Web search (global) | character budget; up to 5 pages opened |
| Page text ("open page text", web_fetch) | Web search | same | 2000 characters per page (adjustable); 200,000 for a full page read |
| Memory recall | Memory & context | launcher → Memory & context → Settings | 4000 characters, at most 5 items |
| Text descriptions of images (text-only models) | Image understanding | dsh Settings → Plugins → Image understanding | images up to 4 MP / 20 MB |
| Tool definitions | tools registered by the core and plugins | Control Deck tool switches; temporary chats mask all tools by default | about 94 items, 17.6k tokens in Fig. 27 |
Every injection is one separate context entry placed after your message; your words are not rewritten. To see the effect, look at the context ring beside the composer, the session's Context tab (the community plugin dsh-context), or the pressure bar on the launcher's memory page.
flowchart TB
U["Your message"] --> REQ["Request to the model (with injections: lore · search results · memory recall)"]
REQ --> LOG[("Session history (append-only)")]
LOG -- "near the limit" --> CMP["Auto-compaction summary"]
CMP -- "stored automatically" --> MEM[("Memory store: summaries / facts / notes")]
LOG -- "facts extracted every 8 turns" --> MEM
MEM -- "recalled by relevance" --> REQ
EDIT["Launcher: edit the active summary"] --> LOG
CE["Message editor: edit / delete"] --> LOG
CE -- "related memory invalidated" --> MEM
3. Session context tab: view and edit the compaction summary
The tab shows, for every session, open or closed, the context pressure against the threshold, the active summary and the compaction history. You can change the summary text and save it; from the next request on, the model continues from your text, and the original stays in the session log. "Compact now" compacts before the threshold is reached, and "Store in memory" saves the current summary as a memory item. Editing is refused while the session is answering or compacting, or when that summary has already been replaced by a newer compaction.
4. Long-term memory tab: remembering across sessions
Three kinds of items are stored. Summaries are the automatic compaction summaries, the latest per session. Facts are extracted every 8 turns by the session's own model, which picks out what is worth remembering long-term; this can be disabled and the interval adjusted. Notes are written by you on the page, or by the model through the memory_note tool.
Each item has a scope: global, for things about you, or this workspace only, for things about a project. Items can be pinned, edited, deleted, imported and exported, and unpinned ones cleared in one click.
On the first turn of a new session, pinned and relevant items are added as one context entry after your message; on later turns only relevant items not yet injected are added. The injection mode (pinned plus relevant on the first turn, first turn only, or off), the items per injection and the character budget are all adjustable. Recall is keyword-based, Chinese included, and can use a local embeddings endpoint (LM Studio, Ollama) for semantic recall; the recall test on the Settings tab shows what a given sentence would inject. The model also gets memory_recall and memory_note tools, which can be turned off.
If a message is edited or deleted with the message editor, the facts and summaries taken from it are invalidated. They stay on the memory page with a label so you can inspect them and are no longer recalled automatically, and sessions that already received them get a withdrawal or correction notice at their next step. Saving an item's text on the memory page confirms it and makes it valid again.
5. Where the files are
Settings live in ~/.dsh/memory-lite.json (enabled, store summaries, extract facts, interval, injection mode, items per injection, character budget, model tools, embeddings endpoint). Data lives in ~/.dsh/memory/memory.json for the items and vectors.json for the optional embeddings. Both are part of the launcher's config backup, and a restore is merged in while dsh is running.
6. Questions that come up
Does it cost extra model calls? Only fact extraction, which is one short request every 8 turns with the session's own model and can be disabled, and a manual "Compact now". Recall and injection are local.
Is the original text still there after editing a summary? Yes. The edit is a new record appended to the log, and the Context tab's event list shows it.
Will memory drag in things from other projects? Facts are global or workspace-scoped, and workspace items are recalled only in the same directory. Later turns have a relevance gate, the total injection is budgeted, and the recall test shows the outcome in advance.
Plugin roster
Original means written for this suite; a feature may follow another program's behaviour, but none of its code, and the table says where. Fork means built on someone else's open-source project, with the upstream license kept and the changes listed. Adopted means a third-party project used as it is. Versions are those installed at the time of writing.
Program
Standalone program, not a dsh plugin.
| Plugin / program | Version | Provenance | Role | Where |
| DSH Launcher | 13 pages | original | Start / exit, plugin and skill markets, sessions and storage, updates and self-check, token analytics, Control Deck, model parameters, Credentials Center, memory & context, skins, logs; zh / en. Its UX follows 秋叶 aaaki's ComfyUI launcher (experience only, no code). | launcher/ |
Suite plugins · original
19 plugins.
| Plugin | Version | Provenance | Role | Where |
| dsh-control-deck | 0.3.1 | original | Control Deck modelled on SillyTavern: leveled prompts, regex scripts, World Info, sampling overrides, tool switches, presets, ST JSON import/export. Follows SillyTavern's behaviour without its code. | launcher → Control Deck |
| dsh-safe-guard | 0.2.0 | original | Destructive-command blocking plus custom deny / ask / allow rules. | Control Deck → Safety |
| dsh-credentials-keyring | 0.1.0 | original | API keys in the Windows Credential Manager. | Credentials Center "source" column |
| dsh-skin-loader | 0.1.0 | original | Skins the dsh web page. | launcher → Skins |
| dsh-price-hint | 0.1.0 | original | Hover prices in the model picker. | dsh model picker |
| dsh-quick-workspace | 0.1.0 | original | Create a workspace from a path. | launcher dashboard |
| dsh-skin-studio-cws | 0.1.0 | original | Let the model make skins in chat (skin_studio tool). | chat |
| dsh-local-reasoning | 0.1.1 | original | Context window, max output and thinking levels for any model; local models probed and taught; OpenRouter :online variants. | launcher → Model parameters |
| dsh-web-search-plus | 0.5.0 | original | Four web-search modes, six sources, the web_fetch page reader, automatic page text. Trigger semantics follow SillyTavern's WebSearch extension without its code. | dsh Settings → Web search (global), Control Deck |
| dsh-memory-lite | 0.1.0 | original | Editable compaction summaries, compact now; long-term memory (summaries, facts, notes) with automatic injection and the memory_recall / memory_note tools. | launcher → Memory & context |
| dsh-chat-editor | 0.1.0 | original | Edit, delete or fold any message, fork from any turn. | session header ✎ |
| dsh-temp-chat-cws | 0.1.1 | original | Temporary chats that belong to no project. | sidebar button |
| dsh-media-lab | 0.1.1 | original | Image, video, TTS and STT with nine providers plus custom endpoints; results play in the chat. | dsh Settings → Media APIs |
| dsh-desktop-pet-cws | 0.2.2 | original | Desktop pet: persona, lorebook, own API, proactive talk, reminders, voice, frame animation, screen and control permissions, three windows. | dsh Settings → Desktop pet, sidebar |
| dsh-lan-fence | 0.1.0 | original | Fences /api from unpaired LAN devices during mobile remote. | (no panel) |
| dsh-provider-sync | 0.2.0 | original | Automatic OpenRouter model-list sync with thinking levels for reasoning models. | dsh Settings → Model-list sync |
| dsh-drop-files | 0.1.1 | original | Drop any file onto the chat. | chat drag and drop |
| dsh-credentials-center | 0.3.0 | original | Every API key on one page: bindings, aliases, spare keys, default model. | launcher → Credentials + dsh Settings |
| dsh-import-note | 0.1.0 | original | One card: session import never overrides system prompts. | dsh Settings → Plugins |
Suite plugins · forks
3 forks, all of MIT projects, upstream license kept.
| Plugin | Version | Provenance | Upstream / license | Role | Where |
| dsh-cost-meter-plus | 1.6.0 | fork | Han-1413141/dsh-cost-meter 1.5.19 · MIT | Upstream: per-session, daily and historical cost, official price sync, a 90-odd model price catalog, 7 Coding Plan quotas, budget alerts, zh / en. Added here: multi-vendor balances, automatic OpenRouter price sync, cache-hit bar, per-session token split, free local routes, balance and cost moved to the top of the settings page. | dsh Settings → Usage & cost, sidebar |
| dsh-token-usage-plus | 2.1.0-plus.1 | fork | Tastelessor/dsh-usage-stats 2.1.0 · MIT | Upstream: usage cards, heat map, official peak/off-peak pricing. Added here: peak/off-peak display removed, OpenRouter prices filled from the cost ledger. Not mounted by default, since the cost page covers it; kept for anyone who wants the separate usage page. | (not mounted by default) |
| dsh-vision-bridge-zh | 0.4.6 | fork | @goodandready/dsh-vision-bridge 0.4.5 · MIT | Upstream: vision for text-only models (automatic rewriting and 26 vision tools: describe, OCR, grounding, crop, long screenshots, PDF, video). Added here: Chinese UI; more reliable multi-image comparison and directory handling. | dsh Settings → Plugins → Image understanding |
Community plugins · adopted
8 plugins and 1 MCP server, installed from the launcher's plugin market and used as they are. Two plugins you may see on npm are not recommended with this core: dsh-auto-approval (incompatible with the current core) and dsh-filesnap (recorded sessions cannot be opened after uninstalling it).
| Plugin | Version | Provenance | Upstream / license | Role | Where |
| dsh-context | 0.52.2 | adopted | bowenliang123 · Apache-2.0 | Context dashboard (composition, trend, events, browser, file activity) and the /context command. Needs 0.40+. | session → Context tab |
| dsh-better-sidebar | 0.19.1 | adopted | omdsh-dev · MIT | VS Code-style right sidebar: files, editor, terminal, Git, browser, background tasks. | dsh Settings → Sidebar cards, right panel |
| @linxin666/dsh-remote-web-ui | 0.3.22 | adopted | zhu1090093659/dsh-web · Apache-2.0 | Scan-to-pair remote for phones or PCs sharing the same web GUI, one-time tokens, revocable devices, optional Cloudflare tunnel. | sidebar phone icon |
| dsh-automation | 0.2.0-alpha.0 | adopted | Ephemeral-AI-Lab · MIT | Timed and recurring self-prompts inside a session. Needs Node ≥ 24 (under Node 22 use its 0.1.4). | chat |
| dsh-chat-import | 0.11.5 | adopted | Nwflower · MIT | Import sessions from 19 agents (Claude Code, Codex, ChatGPT, Cursor, Gemini and others); two-way sync. | sidebar "Import session", dsh Settings → Session import |
| dsh-voice-input-web | 0.1.2 | adopted | CrazyGummies · MIT | Microphone in the composer, browser speech recognition, no keys. | composer |
| dsh-notification | 0.1.1 | adopted | nishit130 · MIT | Desktop and webhook notifications when the agent finishes, errors or waits for approval. | (background) |
| @syncended/dsh-retry | 0.2.3 | adopted | syncended · MIT | Automatic retries on transient model errors, interrupted-session recovery. | (background) |
| @modelcontextprotocol/server-memory | 2026.7.4 | adopted | Model Context Protocol project · MIT | MCP knowledge-graph memory server, mounted through the core's MCP client. | model tools |
Core and optional in-tree capabilities · adopted
Official deepseek-harness code, unchanged.
| Package | Version | Provenance | Upstream / license | Role | Where |
| deepseek-harness (core/) | 0.1.5-rc.2 | upstream | deepseek-ai · MIT | The full upstream source, vendored and unmodified; the launcher upgrades it to any upstream version. Ships 12 development-process skills. | core/ |
| dsh-terminal / -bash / tool-terminal | 0.1.5-rc.2 | upstream | in-tree | Persistent terminal and six model tools. | profile patch |
| dsh-schedule | 0.1.5-rc.2 | upstream | in-tree | Scheduled reminders. | profile patch |
| dsh-lsp / lsp-stdio / tool-lsp | 0.1.5-rc.2 | upstream | in-tree | LSP code intelligence (TypeScript). | profile patch |
| dsh-mcp-client | 0.1.5-rc.2 | upstream | in-tree | MCP client. | profile patch |
| dsh-hooks-claude-code / -codex | 0.1.5-rc.2 | upstream | in-tree | Claude Code / Codex hook bridges. | profile patch |
Totals
| Category | Count |
| Original programs | 1 (the DSH Launcher) |
| Original plugins | 19 |
| Forked plugins | 3 (cost-meter-plus, token-usage-plus, vision-bridge-zh) |
| Adopted community plugins | 8 + 1 MCP server |
| Adopted optional core packages | 10 |
| Original skills | 7 engineering + 3 in-dsh |
| Skills shipped with the core | 12 (adopted) |
| Original skins | 3 launcher · 2 frontend |
| Lines changed in the core | 0 |
Skills
There are two kinds. Engineering skills are for Claude Code and live in skills/; copy them to ~/.claude/skills/ and they guide an agent working on this repository. Skills for the model inside dsh live in dsh-skills/; setup copies them to ~/.dsh/skills/, and they show up on the launcher's Skills page. All of them were written for this suite.
Engineering skills (Claude Code, 7)
| Skill | For |
| dsh-architecture | understanding dsh's plugin system, profiles / bundles / patches and the turn flow; read before working against the core's internals |
| dsh-plugin-dev | writing dsh plugins: tools, hooks, permission gates, commands, model adapters |
| dsh-frontend-dev | changing the dsh web UI: panels, settings cards, sidebar items, themes |
| dsh-env-ops | setting up, upgrading and troubleshooting build, install and startup errors (Windows first) |
| dsh-playbook | how to run it, configure models and API keys, make it faster and cheaper, install plugins |
| dsh-testing | which tests to run, how to write them, how to refresh snapshots |
| dsh-local-models | LM Studio / Ollama routes, thinking levels, context-window alignment |
In-dsh skills (3)
| Skill | For |
| skin-studio | letting the model make launcher or dsh skins (variable tables, templates, background images) |
| control-deck-authoring | letting the model write prompts, regex, lorebooks and presets, or migrate SillyTavern assets |
| desktop-pet | letting the model build a pet with you: requirements, persona, asset list, artwork, plugin config |
Shipped with the core (adopted)
The core ships 12 development-process skills (code review, documentation standards, pre-push checks, translation and so on). They appear on the launcher's Skills page as repo skills.
For contributors
The suite plugins are the plugins/dsh-* folders: plain ES-module packages with no build step. plugins/_shared is the shared kit dsh-cyberworkstation-kit, which holds the stored-session reader and the loopback write fence that the suite's routers use; launcher/peer-links.mjs links it next to the core's packages so that plugins can import it. The launcher itself is launcher/, with server.mjs on top and the pieces under lib/. The vendored core under core/ is never edited by hand.
Useful commands from the repository root: npm run lint (ESLint, flat config), npm run peer-links (recreate the plugin links), npm run readme:zh (README.zh.md is generated from docs/showcase-src/content), npm run repair:preview / npm run repair (the session-log repair script; dsh must be stopped), and npm run publish:npm (maintainer only; npm login first, publish:npm:dry packs without publishing).
Comments are written in English. Suite files are LF, enforced by .gitattributes; the vendored core keeps its own rules.
Skins and artwork
Both kinds of skin are switched and imported on the launcher's Skins page; the table says where each came from and what it looks like.
| Skin | Side | Provenance | Notes |
| default | launcher | original | light / dark / system |
| cyberpunk-2077 | launcher + frontend | original | neon yellow and electric cyan, chamfered cards, glitch and electric effects; artwork generated with 即梦 AI |
| night-city-holo | launcher + frontend | original | graphite base, holographic cyan hairlines, 2077 gold active state, vector navigation icons, no scanlines or flicker; the Night City backdrop was generated with gpt-image-2 |
| Community skins | frontend | community authors (adopted) | converted from npm into local CSS by "Get community skins" (miku, matrix, minecraft, xp and others are available); each keeps its own license, none is committed |
The pet's holographic UI set (bubble, input bar, send key) ships with the pet plugin. The expression frames of the pet "王胖子" were generated with gpt-image-2.
License and credits
- Original suite code: MIT (LICENSE).
- Forked plugins keep their upstream MIT licenses: Han-1413141/dsh-cost-meter, Tastelessor/dsh-usage-stats, @goodandready/dsh-vision-bridge.
- Adopted community plugins carry their own licenses (MIT / Apache-2.0), see the roster; community skins belong to their authors.
- The Control Deck and web search follow the behaviour of SillyTavern and its WebSearch extension (behaviour only, none of their code).
- The launcher's UX follows 秋叶 aaaki's ComfyUI launcher.
- Core: deepseek-ai/deepseek-harness (MIT).
- Launcher artwork generated with 即梦 AI; the Night City backdrop and the pet frames with gpt-image-2.预览分享卡片长什么样 ↓
DSH CyberWorkStation 是一个桌面启动器,外加 22 个插件,专为 DeepSeek Harness…