Code-first React + TypeScript 任务应用,支持 Inline、Canvas、全屏与 localhost;交互状态可供 Agent 后续轮次读取,MCP 和 API 访问在用户授权后执行。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-plugin-genui
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:pengyue-polaron/deepseek-harness-genui
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 简体中文
DeepSeek Harness GenUI 是 Agent 任务里的动态界面层。文字不好用时,Agent 可以让当前任务临时长出一个聚焦界面:解释难讲清的关系、收集复杂选择,或操作已经连接的工具。
界面不是对话结束后的产物,它就是对话的一部分。
在这段对话里,界面既可以是 Agent 的表达,也可以是用户的结构化回应;获得授权后,它还可以成为真实工具的入口。
区别在哪里
| 生成什么 | 接下来怎样 | |
|---|---|---|
| App Builder | 一个可保存、可分享的独立应用 | 应用本身成为交付物 |
| MCP Apps | 工具作者预先准备的界面 | 界面始终跟着对应工具 |
| DeepSeek Harness GenUI | 当前任务临时缺少的界面 | 保存的状态回到 Agent,已授权的工具可以继续办事 |
什么时候值得生成界面
它主要解决两类问题:把难讲清的关系画出来,把难描述的选择变成可以直接操作的界面。
普通问答、文字改写、摘要和简单列表只返回文字。
Inline 与 Canvas
同一个页面既可以放在回答里,也可以在对话右侧打开。
| Inline | Canvas |
|---|---|
| 适合紧凑的控制项或聚焦选择。 | 提供更大空间,同时保留对话。 |
Inline、Canvas、全屏和本地页面读写同一份任务状态。界面保存的选择和输入,可以在 Agent 后续轮次继续使用。
CLI 示例
终端 profile 会返回 localhost 页面。下一轮可以直接引用用户刚才在页面里选择的路径。
❯ 解释这个仓库里生成页面如何进入带权限控制的运行时。做一个交互式代码路径页面,
然后返回 localhost 地址。
我梳理了 src/tools.ts → src/artifacts/builder.ts → src/runtime/server.ts
→ src/artifacts/registry.ts。
http://127.0.0.1:<port>/genui/app/<task-app>
❯ 我刚才选的路径停在哪里?
它到达了 src/runtime/server.ts 的权限检查,然后停在真实工具调用之前,
因为这项访问还没有获得允许。
工作方式
- Agent 把解释留在对话里,只在交互有实际价值时创建一个聚焦页面。
- Agent 编写 React + TypeScript,并且只声明需要的准确 Harness/MCP/Skill 工具,或无需凭据的公开 HTTPS 范围;插件负责构建和检查界面。
- 界面把选择、表单答案、草稿和进度等有意义的结果保存到当前任务。用户下一轮继续时,Agent 可以先读取这些结果,不必让用户重新描述一遍。
- 后续修改更新同一个页面,失败的修改不会替换正常版本。
每项声明过的能力在第一次使用前,都会申请当前任务内的授权;未声明的调用直接拒绝。Web 端可以从页面卡片查看或撤回权限。MCP 凭据不会进入生成代码,页面直连 API 仅支持无需凭据的公开 HTTPS。
Design MD
视觉方向写在 DESIGN.md 中。插件内置 4 套风格:
| 风格 | 适用场景 |
|---|---|
editorial-workbench |
阅读、规划、表单和内容密集型任务 |
ledger-grid |
对比、排程、证据和候选清单 |
field-atlas |
科学、因果和空间概念解释 |
kinetic-signal |
变化中的数据、连接工具和用户触发操作 |
打开 设置 → 插件 → 插件配置,可以自动选择、指定内置风格、导入 DESIGN.md,或导出一份作为起点。这个选择只影响之后新建的页面,不会在页面中增加设计设置。
安装
使用 Node.js ^22.19.0 || >=24。当前版本在 DeepSeek Harness 0.1.0-rc.6 上通过测试。
dsh plugin --profile web add dsh-plugin-genui
dsh plugin --profile web exec playwright install chromium
dsh --profile web
Web profile 支持 Inline、Canvas、全屏和 localhost 链接。终端 profile 把命令里的 web 换成 tui;TUI 返回本地链接,不嵌入 Canvas。MCP 仍按原有方式连接到同一个 profile。
安全
生成代码在沙箱中运行。工具调用和公开 HTTPS 范围必须提前声明、限定范围并由用户授权。临时链接和已授予权限会在 7 天后失效;任务状态在最后一次更新 7 天后过期。用户可以回到任务里的页面卡片查看或收回权限。
插件使用 DeepSeek Harness + Cordis、React 18 + TypeScript、esbuild、Playwright 和 Vitest。
开发
从源码构建需要 pnpm 11。
pnpm install
pnpm run typecheck
pnpm test
pnpm run package:plugin
链接
同类插件
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 2775
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 1305
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 1293
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/dsh-at-file★ 225
Codex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
huiliyi37/dsh-tianshu-tui★ 174
DeepSeek Harness 的终端 UI(TUI)。
Nagi-ovo/dsh-visualize★ 126
对话内生成式 UI:模型把交互式 HTML 卡片直接画进会话流,带流式预览与沙箱渲染。