A web interface for long tasks, showing key progress and allowing details to unfold when needed.
ⓘ This plugin is a sub-package of the ayuanwong/deepseek-harness-ux monorepo — stars and activity count the whole repository.
- Language
- TypeScript
- License
- BSD-3-Clause
- Branch
- main
Install
$ dsh plugin --profile web add @deepseek-ai/dsh-web-appRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
Install via your agent
Install the DeepSeek Harness plugin ayuanwong/deepseek-harness-ux/packages/bundle/web-app for me: review the repository at https://github.com/ayuanwong/dsh-ux first, then run the install command and verify the plugin loads successfully.
Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.
本文档对应
packages/bundle/web-app子路径,是落地页/plugins/{owner}/{repo}中插件百科模块的内容来源。该目录是 DSH 主仓自带的 profile 组合包层(不是独立的 npm 插件),安装命令把它作为webprofile 的浏览器表层组合包加入。
一句话定位
@deepseek-ai/dsh-web-app 是 DSH 的浏览器表层组合包:在 dsh-base 之上叠加 Web 宿主、API 网关、本地存储、浏览器插件名录和 web-runtime 粘合插件,并承担 dsh --profile web 的命令行解析(--host / --port / --trusted-host),让你执行 dsh --profile web 就能在浏览器里打开 DSH 的网页界面。
核心能力
- 提供
dsh --profile web启动入口:解析--host、--port、可重复的--trusted-host与--help,端口在参数解析完成前不会绑定 - 注册 Web 宿主行:webserver(默认
127.0.0.1:3080)、API 网关、workspace、投影缓存、JSONL/JSON 存储、会话统计、消息反馈、Web 标题生成 - 注册浏览器端插件名录:连接(fetch/SSE)、模块加载、会话侧栏与各种 UI 子模块、设置面板、目标/计划/工具调用轨迹等 30+ 行客户端插件
- 解析并提供构建好的前端 dist:通过
@deepseek-ai/dsh-web-frontend的 exports 找到dist/index.html,挂载静态资源回退位 - 采样一次 LAN 信任快照并对外提供
webRuntime服务:作为 API 网关浏览器信任栅栏的trustedHosts来源,bind 一次后再广播 - 拼接面向模型的 GUI 提示词:在系统提示词中追加
app:web-surface段,告诉模型「this page 指什么、如何更新、不要起替代服务器」;同时把DSH_WEB_URL注册到受管 bash 环境 - 加载完成后打印
dsh web: http://127.0.0.1:<port> [LAN: http://<ip>:<port>]行,作为 supervisor / 烟雾测试的 readiness 信号,并等待 Loader 树结算后再打印避免兄弟行失败时误报
技术实现
- 语言: TypeScript(ESM,工作区 monorepo)
- 关键依赖:
@deepseek-ai/dsh-host-webserver(webserver 宿主)、@deepseek-ai/dsh-host-apiproxy(API 网关)、@deepseek-ai/dsh-host-frontend-static(静态资源回退位)、@deepseek-ai/dsh-web-frontend(dist 解析目标)、commander(命令行解析);完整列表见dependencies(约 60 个工作区包) - 架构模式: profile 组合包(patch bundle)—— 包内
cordis.patch.yml通过 manifest 字段dsh.bundle.patch暴露给 profile 组合器,在dsh-base之上叠加 / 禁用 / 替换插件行;src/index.ts与src/startup.ts是其自身作为运行时粘合插件(web-app/web-startup)的实现 - 入口文件:
src/index.ts(web-runtime粘合插件)+src/startup.ts(web-startup命令行 Provider)+cordis.patch.yml(实质 patch 载荷,428 行)+src/invariant.ts(空实现,仅注册包名)
适用场景
给想要在浏览器里用 DSH、而不是在 TUI 或一次性命令里用 DSH 的用户:在 DSH 安装目录执行 dsh --profile web,即可在浏览器里得到与本地 TUI 等价但更易分享和截图的图形界面。它也适合需要把 DSH 暴露给同网段其他设备协作的人:加 --host 0.0.0.0 后 LAN 内其他机器用 --trusted-host 即可访问。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 0.1.0-rc.6+ | 同名工作区包 @deepseek-ai/cordis 与 @deepseek-ai/dsh-invariants 需在宿主中可用;本 bundle 依赖 dsh-base 作为底层 patch |
| Node | >=22.19.0 | 来自 monorepo 根 engines.node:^22.19.0 || >=24.0.0 |
| 平台 | macOS / Windows / Linux | patch 跨平台;webserver、API 网关、LAN 信任采样均通过 node:os 的 networkInterfaces 跨平台实现 |
| 原生模块 | 无 | 该包本身无原生依赖;下层 @deepseek-ai/dsh-sandbox-local 在 Windows 上挂载 @deepseek-ai/dsh-sandbox-windows-acl,是组合行为而非本包声明 |
安装方式
dsh plugin --profile web add github:ayuanwong/deepseek-harness-ux/packages/bundle/web-app
配置项
本 bundle 在 cordis.patch.yml 中给宿主行写入默认 config,这是 profile 组合器读取的静态声明。下表只列出对普通用户可见、可由命令行 / 部署覆盖的入口;cordis.patch.yml 中对工具与会话类插件的细粒度默认值(如 web-presentation.maxInputBytes=8192、session-projection-cache.writeEveryEvents=200 等)不在用户层暴露。
| 入口 | 类型 | 说明 | 默认值 |
|---|---|---|---|
--host <host> | 命令行参数 | webserver 绑定地址;传 0.0.0.0 可从同网段其他机器访问 | 未传则用 127.0.0.1(patch 默认值) |
--port <port> | 命令行参数 | webserver 监听端口;传 0 让操作系统随机分配空闲端口 | 未传则用 3080(patch 默认值) |
--trusted-host <authority...> | 命令行参数(可重复) | 追加到 API 网关浏览器信任栅栏的来源(host 或 host:port);与 LAN 自动采样的 IP 字面量合并 | 空数组 |
webRuntime.printUrl | patch 配置 | 启动完成后是否打印 dsh web: ... URL 行;非交互式场景可关 | true |
webRuntime.surfaceContext | patch 配置 | 是否向模型注册 app:web-surface 提示词段和 DSH_WEB_URL bash 变量;非 GUI 一次性调用可关 | true |
webRuntime.trustedHosts | patch 配置 | 来自 webStartup 的命令行 --trusted-host 列表,会拼到 LAN 采样之后 | 空数组 |
tools.mode | patch 配置(环境变量驱动) | 工具呈现模式:native(默认)、code、both;临时开关,等 Web UI 拥有按会话选择能力后下线 | process.env.DSH_TOOLS_MODE,未设置走 schema 默认(native) |
session-query-sqlite.path | patch 配置 | Web 内容搜索用 SQLite 索引路径 | ':memory:'(进程内内存索引) |
system-prompt.persona | patch 配置 | 默认 system persona | You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}. |
常见问题
Q: 装上之后怎么打开网页界面?
A: 在 DSH 安装目录下执行 dsh --profile web。终端会打印一行 dsh web: http://127.0.0.1:3080(绑定全网卡时还会附 (LAN: http://<你的局域网IP>:3080)),浏览器访问这个地址就能进入 GUI。
Q: 端口被占用了怎么办?
A: 启动时加 --port 0 让操作系统随机分配空闲端口,或显式指定 --port 8080 换一个端口。绑定地址可以用 --host 0.0.0.0 让局域网或公网机器也能访问。
Q: 我从另一台机器访问这个 Web 界面,浏览器一直报 host 不被信任?
A: 那是 /api 网关的浏览器信任栅栏在拦请求(防 DNS rebinding)。启动时加 --trusted-host 你的主机名或IP:端口(可重复),或在部署的 patch 中把 connection.trustedHosts 扩展成包含你的来源。IP 字面量 host 不需要带端口也能通过。
Q: 终端只打印 dsh web: http://127.0.0.1:3080,没有 LAN 地址,怎么从别的设备访问?
A: 只有当你启动时用了 --host 0.0.0.0 才会额外打印 LAN 地址。lanAddresses 是启动时的网卡快照,bind 之后再变化也不会重广播;其他情况下只打印本机回环地址,需要让别的设备访问必须显式 bind 全网卡。
Q: 启动时报 frontend dist not built; run pnpm run build from the repository root first 怎么办?
A: 这意味着这个仓库 checkout 还没编译前端 dist。在仓库根目录执行 pnpm run build(包含 build:lib 与 build:web),等前端 dist 生成后再重新 dsh --profile web。本包没有源码直服务的回退路径,必须先构建。
Q: dsh-base 已经装过了,还要再装 web-app 吗?
A: 需要。base 是所有 profile 的公共地基,不带 Web 宿主行;web-app 是在 base 之上叠加 webserver、API 网关、存储、投影缓存、浏览器插件名录以及 web-runtime 粘合插件的那一层,缺了它 dsh --profile web 打不开。
Q: 能用 dsh --profile web --help 看启动参数吗?
A: 可以。--help 不会绑定端口也不会打印 URL,只列出 --host、--port、--trusted-host 与示例命令,命令行解析完成后即退出。
Q: 默认的 system persona 能换吗?
A: 能。在更上层 profile 的 cordis.patch.yml 用 id: system-prompt 整行覆盖 config.persona,或换用 Agent Preset 中的 system 字段;web-app 这一层只提供默认 You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.。
上手难度
入门 — 这是 profile 标准的浏览器表层。dsh --profile web 就能用,需要自定义时基本只需在命令行加 --port / --host / --trusted-host 或在 profile 层写几行 patch 覆盖默认 id。
已知问题与限制
- 前端 dist 必须已构建:对 dist 的
require.resolve在激活时会明确报错并给出构建提示;本包没有从源码直接服务的回退路径 lanAddresses是启动期快照:启动后的网卡变化不会重新公告,打印的 LAN URL 始终与配置的信任栅栏一致——但反过来说,热插网卡的新地址不会被自动加入- 共享 HMR 暂时禁用:cordis.patch.yml 第 21 行留有
TODO: Re-enable shared HMR for Web after its reload lifecycle is tested.,当前id: hmr显式disabled: true;客户端插件的无刷新重载需要pnpm run dev:webwatcher 运行才能生效,浏览器插件以外的所有变更(apps/web shell、纯 packages)必须重新构建相关 Web 产物再刷新页面 - 工具模式开关是临时的:
tools.mode的DSH_TOOLS_MODE环境变量(native/code/both)是为 Web UI 按会话选择工具呈现能力而存在的临时配置钩子,等 UI 那边的能力落地后该环境变量会退役
English | 中文
让 DeepSeek Harness 的长任务更容易看懂、更容易跟进。
DeepSeek Harness UX 是一个非官方社区源码版本。它没有重写 Agent 的工作方式,而是重点改进网页里的任务过程、长回答、会话查找和文件入口。
本项目不是 DeepSeek 官方发行版,也不享有上游官方支持。DeepSeek Harness 及相关名称归其权利人所有。
你会直接感受到什么
1. 会话进行时,思考和工具步骤不会一直刷屏
任务运行时,思考、上下文、命令和工具调用会被收进一个稳定的“过程”区域。你可以直接看到当前做到哪一步、已经运行多久,不必在大量技术消息里寻找进度。
如果启用展示辅助,界面还会用一次很小的模型请求,把 Todo、思考和工具证据整理成更容易理解的阶段名称。这个请求只负责显示,不会改变 Agent 的回答。
2. 任务完成后,过程自动折叠,答案回到主视线
正常完成的任务会自动收起思考过程,让最终答案留在最显眼的位置。遇到失败或中断时,过程会继续展开,方便检查问题。
任务完成后,过程会自动收起:

需要检查时,点一下就能重新展开:

3. 长日志可以单独滚动,不会带着整个对话乱跳
展开“运行详情”后,长命令输出和工具日志会在自己的区域里滚动。滚到边缘时不会突然把整个对话带走,底部输入框也不会把页面顶出一大片空白。
4. 长回答更适合阅读
回答的段落、标题和不同轮次之间更紧凑。任务结束后,可选的展示辅助还能优化答案标题;复制内容、会话历史和模型看到的原始答案都不会被改写。
任务刚结束时,网页会在后台补齐最后一段历史,避免晚到的结束事件让界面看起来还在运行,也不会闪出新的加载页。
5. 以前的会话更容易找
会话默认按最近更新时间排列,也可以切回手动排序。侧边栏可以搜索标题、工作区名称和当前进程中的对话内容;“未分组”区域也能直接新建不属于任何工作区的会话。
6. 生成的文件更容易找到
除了工具明确写出的文件,UX 版还会识别答案里清楚列出的文档、表格、数据集、图片、音视频、压缩包、数据库和 3D/CAD 文件路径,把它们显示成可打开的产物入口。普通文字、网址、命令和示例代码不会被误当成文件。
7. 模型配置集中在设置页
首次使用时会直接进入“设置 → 模型”的完整配置卡,不再维护另一套简化的密钥弹窗。提供方、模型、API Key 和错误恢复都在同一个地方完成。
它没有改变什么
- Agent Loop、模型路由、工具、权限、沙箱和 Session Log 仍沿用 DeepSeek Harness 的执行方式。
- 原始思考、上下文、命令和工具证据没有被删除,只是收进“运行详情”。
- 展示辅助不会修改 System Prompt、用户消息、工具、原始回答或会话历史。
- Session Log 默认仍保存在本地。
和官方版本相比,还需要知道这些
- 这是基于上游源码快照维护的社区版本,不会自动获得官方后续的修复、兼容性更新和安全更新。
- 这个快照还没有官方后来加入的部分能力,例如更严格的冷会话校验、隐藏当前无法登录的 OAuth-only 提供方,以及新的全局界面扩展位。
- 当前没有内建的 Codex OAuth 登录和 Token 自动刷新;选择
openai-codex路由时需要手动提供 Token。 - 基础 Bundle 会安装休眠状态的 Codex 和 Claude Code 子代理提供方,但不会因此自动启动对应产品进程。
- 官方版提供 npm 包;这个仓库只提供源码运行,不会向
@deepseek-aiscope 发布包。 - 当前官方源码使用 MIT 许可证;这个分支保留其上游快照当时采用的 BSD 3-Clause 许可证和相关声明。
应该选哪个版本?
如果你主要在网页里运行长任务,希望过程更清楚、回答更好读、会话和文件更容易找到,可以选择 DeepSeek Harness UX。
如果你更在意最新官方更新、npm 安装、Headless 或 CLI 工作流,应优先选择官方 DeepSeek Harness。
对比依据
UX 功能源码基于 35c6172。本说明以 2026-08-17 的官方 47f9438 为对照,只把用户能直接感知的差异写成功能,不把测试、包元数据和机械性源码差异包装成产品能力。
从源码运行
环境要求:
- Node.js
^22.19或>=24 - pnpm 11
- 兼容 DeepSeek 的 API Key
git clone https://github.com/ayuanwong/deepseek-harness-ux.git
cd deepseek-harness-ux
pnpm install
pnpm run build
pnpm run dsh -- web --port 3081
打开 http://127.0.0.1:3081,在“设置 → 模型”中添加模型提供方,然后新建会话。如果 3081 已被占用,可以换成其他端口。
本仓库交付的是完整源码版本,不是能直接安装到干净上游仓库的补丁,也没有单独发布为 npm 插件。
隐私
不要提交 .env、.npmrc、API Key、本地 Session、构建产物或 profile 数据。启用任何非默认遥测模式前,请先阅读上游遥测设置。展示辅助使用当前 Session 配置的模型提供方,因此启用阶段或标题整理时,会把受限的运行证据发送给该提供方。
开发
修改包之前,请阅读 AGENTS.md、开发指南和架构文档。
pnpm run lint
pnpm run build
pnpm run hygiene
pnpm run doc-sync
友情链接
— 带 TDD、证据检查、视觉和代码智能工作流的交互式终端 UI。
— Claude Code 风格的全屏终端 UI,支持实时任务状态、流式思考、回滚和上下文指标。
— DSH Find 上整理的 DeepSeek Harness 资源与生态项目。
许可证与归属
本仓库派生自 DeepSeek Harness,并保留其源码快照中的上游声明。本源码树使用 BSD 3-Clause 许可证;第三方依赖及许可条款见 THIRD_PARTY_NOTICES.md。
Read the usage guide →
Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.
Listing badge
[](https://deepseek-plugin.org/plugins/ayuanwong/deepseek-harness-ux/packages/bundle/web-app)Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.