DeepSeek Harness Web 部署版
DeepSeek Harness(@deepseek-ai/dsh)的 Web 网页部署版,
基于 Docker 一键部署。部署后通过浏览器访问完整的 Harness Web 界面:对话、工作区(网页内目录浏览 + 新建文件夹)、
插件市场(搜索 GitHub dsh-plugin 插件并安装)等。
目前项目正在高速开发中,很快将增加更多功能
Docker 部署
# 构建镜像
docker build -t dsh-web .
# 运行
docker run -d --name dsh \
-p 8080:8080 \
-e PORT=8080 \
-v dsh-data:/data \
dsh-web
# 浏览器打开 http://localhost:8080
💡 DeepSeek API Key 在网页里配置:首次打开后进入「设置 → 模型」填入
DEEPSEEK_API_KEY(dsh 把密钥保存在配置文件中,不通过环境变量注入)。
⚠️ 务必挂载持久化目录:-v dsh-data:/data 将数据卷挂载到容器 /data,
用于保存 dsh 的配置、工作区、会话记录和安装的插件。不挂载的话,容器重建后这些数据会全部丢失。
其他常用参数:
# 绑定其他端口(如 9000)
-p 9000:8080 -e PORT=8080
# 国内网络构建较慢时,可换 npm 镜像源加速
docker build --build-arg NPM_REGISTRY=https://registry.npmmirror.com -t dsh-web .
环境变量
| 变量 |
默认值 |
说明 |
DEEPSEEK_API_KEY |
— |
在网页「设置 → 模型」中配置,不通过环境变量注入 |
PORT |
8080 |
对外端口 |
DSH_HOME |
/data/dsh |
dsh 数据目录(即持久化卷挂载点 /data) |
DSH_TRUSTED_HOSTS |
— |
额外信任的主机(逗号分隔),通过域名访问时使用 |
PREVIEW_ALLOW_PORTS |
3000-9999 |
预览面板可反代的容器内端口白名单(如 5173,8000-9000),防止任意端口探测 |
PREVIEW_EXTRA_ROOTS |
— |
预览可读的额外根目录(逗号分隔),默认含 /tmp |
项目结构
├── Dockerfile # 镜像构建(Node LTS + nginx 反代 + dsh + Patchright 浏览器)
├── start.sh # 启动脚本
├── patches/ # 部署适配配置(网页目录浏览 + 插件市场 + 浏览器 MCP + 自动化)
│ ├── web.cordis.patch.yml # web profile:browse 交互 / 插件市场 / MCP 浏览器 / 自动化
│ └── headless.cordis.patch.yml # headless profile:仅浏览器 MCP(自动化任务执行时使用)
├── plugin-market/ # 插件市场插件(搜索安装 / 预览面板 / 导出项目)
├── plugins/floatboat-style/ # Floatboat 风格提示词注入插件(prompt sections)
├── plugins/automation/ # 自动化插件(定时触发 AI 执行任务)
├── plugins/image-gen/ # 图片生成插件(对话内生成图片,gpt-image-1/2 等)
├── plugins/model-extras/ # 模型增强插件(OpenAI Responses API / 自定义模型)
├── plugins/mcp-skill/ # 技能与 MCP 管理(侧栏入口 + Cursor mcp.json 导入)
├── presets/floatboat/ # 「Floatboat 风格」agent preset(部署到用户预设目录)
└── vendor/dsh-routing-suite/ # 第三方:dsh-super-injector(运行时注入器)+ router-standard 路由预设
说明
-
模型配置走官方原生:「设置 → 模型」配置 DeepSeek API Key 或添加任意 OpenAI 兼容
自定义提供方(官方支持)。额外提供 OpenAI Responses API 适配器(Codex / gpt-5 的
/v1/responses 协议,原生仅支持 chat/completions):在官方 Models 页选择 openai-responses
提供方后,把端点配置写入 $DSH_HOME/model-extras.json(baseURL / apiKey / models),
/models 自动获取模型列表。
-
对话内生成图片(GPT Image 1/2 等):「设置 → 插件 → 图片生成」配置图片端点(OpenAI 兼容
/images/generations)与 Key,自动获取图片模型(gpt-image-1、gpt-image-2、dall-e-3…)。
之后直接让 Agent 生成图片——工具 generate_image 会把图片保存到工作区 images/ 并可预览。
-
自动化(主页侧栏):左侧栏底部「⏰ 自动化」入口(类 TRAE 任务栏),点击打开抽屉面板,
可创建定时任务——间隔分钟、每天几点、每周周几几点,到点由 dsh 自带 headless 运行器执行
任务(复用同一模型配置);支持「✨ AI 优化」把一句话需求扩展为结构化任务指令、立即运行、
运行历史查看。
-
技能与 MCP(侧栏):左侧栏「技能与 MCP」入口(自动化下方)打开管理面板——
- MCP 服务器:新增/编辑/删除/启停(stdio 命令或 streamable-http URL);热插拔:
保存/启停后立即连接或断开并注册/注销工具(
mcp__<服务器>__<工具>),无需重启;
面板显示「已热连接 N 工具」状态;重启后自动恢复连接;
- OAuth 浏览器授权:需要浏览器验证的远程 MCP(如 Supabase 等 streamable-http +
OAuth 服务器)自动进入「需浏览器授权」状态,点击「打开授权」在浏览器完成登录/授权
(授权码流:回调 → token 交换 → 自动连接注册工具),授权持久化,无需重启;
- Cursor 格式:导入区直接粘贴 JSON 文本(
.cursor/mcp.json 的 mcpServers 内容,
command/args/env 与 url/headers 均支持)即批量导入并热生效;「以 Cursor 格式显示」
一键把当前服务器以 Cursor mcpServers 结构展示/导出;
- Skills:管理
$DSH_HOME/skills/<name>/SKILL.md(Claude 风格技能根)——上传
SKILL.md 文件或 zip 压缩包(自动解压定位 SKILL.md 并保留附属文件)、手动新建/删除/
启停;「AI 帮我创建」(一句话描述 → LLM 生成标准 SKILL.md 并安装)、「AI 帮我安装」
(粘贴任意教程/规则文本 → AI 整理成标准技能安装);保存即出现在输入框「/」技能菜单
(dsh 技能文件监听,实时生效)。
- GitHub 同步(会话底部):每个会话底部一行「GitHub 同步」——可选,同一
工作区下所有会话复用同一仓库+分支。绑定方式二选一:
- OAuth App(推荐):配置
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET
(GitHub Settings → Developer settings → OAuth Apps 创建)。回调地址必须填
你实际访问的域名:https://<你的域名>/api/github-sync/oauth/callback
(多个访问域名需逐个添加回调;也可用 PUBLIC_URL 显式固定对外地址)。
回调地址由服务端按当前请求域名动态生成,与注册一致才能授权成功。
会话底部点「用 GitHub 登录」→ 浏览器授权 → 自动获取账号与邮箱 → 在账号下
选择任意仓库(所有仓库)+ 分支 → 点「同步」把会话导出为 Markdown 提交到该仓库
(dsh-sessions/<会话id>.md,重复同步覆盖更新)。OAuth token 持久化,可「解绑」。
- 手动令牌:环境变量
GHP / GH_USER / GH_EMAIL,或在行内折叠的高级项填 GHP。
- 侧栏折叠:「自动化」「技能与 MCP」按钮随侧栏收窄自动隐藏文字、图标居中放大。
-
浏览器自动化(MCP):镜像内置 Patchright(playwright 的 stealth 分支,驱动级反检测,
能过基础机器人验证)的 MCP server。Agent 工具集中出现 mcp__browser__browse / interact / extract / close,可查看、填写、点击网页。web 与 headless(自动化任务)profile 都可用。
-
dsh-routing-suite(vendored,MIT):
- dsh-super-injector v0.3.3:运行时注入器,
dev_* 工具全家桶——注入/卸载/热重载/
侧挂转正/脚手架/构建发布/插件自检(dev_inject_plugin、dev_uninject_plugin、
dev_reload_package、dev_plugin_status、dev_scaffold_plugin 等 14 个),
junction 链接 + loader.create 免重启装配;设置页「插件」区提供插件管理 UI
(列表/卸载/拖入内化);清单持久化重启自动恢复。
- router-standard 预设 v0.1.1:任务感知思维模式路由(spec/react/weak 三模式 +
近距离引导 + 单任务三锚)。新建会话选择 Router Standard (experimental) 预设,
生成类任务自动 react、维护类任务自动 spec;AI 自优化工具
dev_router_status / dev_router_mode / dev_mode_subagent。
- 构建方式见
vendor/dsh-routing-suite/README.md。
-
导出:右上角「导出」按钮二级菜单——导出项目(工作区打包 zip 直接下载,不落盘,
自动排除 node_modules/.git/dist 等)、导出会话日志(复用官方 Session log)。
-
预览面板:对话中的 localhost 链接与文件在右侧分栏预览(可拖宽、缩放、移动端全屏);
地址栏显示 127.0.0.1:端口 / file:// 格式;除二进制外任意文件可预览(文本直接显示,
二进制给出下载页)。
-
镜像基于 Node 22 LTS,内置 nginx 反向代理(dsh 出于安全设计不支持 0.0.0.0 直绑)。
-
首次使用:添加工作区 → 网页内目录树选目录 → 开始对话;模型配置在 设置 → 模型。
外部 http(s) 链接保持默认新标签页打开。PREVIEW_ROOT 可覆盖文件预览根(默认 /workspace),
PREVIEW_EXTRA_ROOTS 追加额外可读根(逗号分隔;未设置时默认含容器临时目录)。
-
插件启停:设置 → 插件 → 「插件列表」展开任意插件卡片,详情里带「启用 / 停用」按钮,
通过写入 $DSH_HOME/cordis.patch.yml 用户补丁层即时生效(dsh 热更新),重启后保持。
-
Floatboat 风格预设:新建会话时在预设选择器中选「Floatboat 风格」——将 Floatboat
(AOE Tech Labs)提示词工程的精华迁移到 dsh:交付完整度优先的工作哲学、工具使用纪律
(文件最小变更/来源可信度/浏览器与检索选择/凭据处理)、交付真实性契约(不虚构产物)、
安全边界(防套取/防泄露)与委派记忆纪律。基于官方 standard preset,工具能力完全一致;
提示段落由 plugins/floatboat-style 插件以 systemPrompt.section() 注入(对应
Floatboat 的 prompt-segment 机制),每段可独立关闭。⚠️ 该 preset 依赖
dsh-floatboat-style 插件(镜像已内置),单独复制 preset 到未装插件的环境会挂载失败。
-
插件安装:搜索 GitHub topic:dsh-plugin 仓库后,自动检测每个仓库对应的
npm 包(读根 package.json;monorepo 探测 packages/ 子包,免 GitHub API 限流):
卡片标注 ✓ npm: <包名> 表示该仓库有已发布的 npm 插件包,点击「安装」直接安装
npm 包(而非 GitHub 根包,避免 monorepo 根包无 dsh.bundle 装完不生效的坑)。
安装时自动处理 pnpm 构建授权(allowBuilds 占位自动批准 + 重试)与兜底 reconcile;
安装后做插入条目冲突检测(聚合包与单包同时装会致重启崩溃,装时即警告并可一键
卸载 /api/plugin-market/uninstall)。
-
重启服务:安装成功后点「重启服务」→ 进程以非零码退出(exit(1),平台判定
崩溃必重启;优雅退出 exit 0 可能被平台视为正常关闭而不重启)→ 容器平台自动拉起
新实例 → 插件进入 loader 组合与 Web UI。前端在服务恢复后自动提示并引导刷新页面
(index.html 已禁缓存,保证新插件入口图 __DSH_BOOT__ 重新拉取)。请确保已为
/data 挂载持久化卷,否则重启会丢失新装的插件与会话数据。
-
排查日志:插件市场所有操作(install/uninstall/toggle/restart)都以
[plugin-market] 前缀输出详细日志(spec、profile 路径、pnpm 输出、allowBuilds
处理、bundles 现状、冲突检测结果),在 Zeabur 日志面板可直接 grep 定位问题。