DeepSeek Harness GenUI:为当前任务生成 React 界面,并把状态带入下一轮 Agent

前言

在 DeepSeek Harness(DSH)里,很多任务靠纯文字就能完成:问答、改写、摘要、简单列表。但当用户需要看清复杂关系,或同时处理几项相互影响的选择时,来回描述往往低效。常见做法是预置组件目录,让模型输出固定结构的卡片或表单;这类方案适合已知组件拼装,却难以覆盖事先无法确定结构和交互的任务。

下面介绍社区插件 DeepSeek Harness GenUIdsh-plugin-genui)。它走 code-first 路线:Coding Agent 为当前任务编写普通 React + TypeScript,界面保存用户的选择与输入,供下一轮 Agent 读取并继续处理。

这是什么

DeepSeek Harness GenUI 由 pengyue-polaron 维护,在 SkillHub 插件目录 归类为「客户端」。插件定位是:为 DeepSeek Harness 生成任务专属的 React 应用,并把有意义的状态带入后续 Agent 轮次。

源码托管于 GitHub,MIT 许可证,当前版本 0.13.1

核心功能

Code-first 生成界面

Agent 编写普通 React + TypeScript,插件负责构建和检查。生成代码在沙箱内运行,不依赖组件树 DSL 或中间表示(IR)。

任务状态跨轮次保留

界面把选择、表单答案、草稿和进度等语义值保存到当前任务。用户继续追问时,Agent 可以读取这些结果,不必让用户重新描述。Inline、Canvas、全屏和 CLI/localhost 是同一份任务状态的不同入口;在任一入口保存的内容,后续轮次均可使用。

Inline 与 Canvas 双形态

同一应用可以嵌入回答(Inline),也可以在对话右侧打开(Canvas)。前者适合紧凑控制项或聚焦选择;后者提供更大空间,同时保留对话。

权限声明与沙箱隔离

应用只声明实际需要的 Harness/MCP/Skill 工具,或无需凭据的公开 HTTPS 接口。打开连接型应用前,Harness 集中展示完整权限清单,由用户一次确认;能力变化时重新询问,未声明的调用会被拒绝。MCP 凭据不会进入生成代码。Web 端可从页面卡片查看或撤回权限。

失败更新不覆盖可用版本

后续修改更新同一个应用。若某次更新失败,不会替换当前可用版本。

DESIGN.md 设计语言

设置 → 插件 → 插件配置 中,可为新应用设置默认设计:自动选择、选用内置风格、导入自定义 DESIGN.md,或导出当前设计作为起点。DESIGN.md 控制设计语言,不限制页面结构。

内置风格包括:

设计风格 视觉语言
material-3 Google Material 3:色调表面、鲜明主色、清晰层级
apple-human-interface Apple Human Interface:克制、精确、内容优先
shadcn-ui shadcn/ui:语义色彩变量、利落边框、紧凑表单

与组件树渲染器的分工

插件不替代轻量的 dsh-ui 组件渲染器。组件协议适合用已知组件拼卡片、表格或表单;GenUI 适合需要按任务编写事先无法确定结构和交互的 React 应用,例如自由模拟、空间工具、连接型工作流或多步骤状态。

安装与启用

环境要求:Node.js ^22.19.0 || >=24,DeepSeek Harness ^0.1.0-rc.6

Web profile 支持 Inline、Canvas、全屏和 localhost 链接。终端 profile 将命令中的 web 换成 tui;TUI 返回本地链接,不嵌入 Canvas。

dsh plugin --profile web add dsh-plugin-genui
dsh --profile web

MCP 仍按原有方式连接到同一个 profile。插件不会下载或启动浏览器;每个候选版本须通过编译和源码契约检查,才能替换最后一个可用版本。

典型用法

两分钟试用

新建 Web 会话,复制下面任意一段提示词:

帮我规划一个周六行程,包含美术馆、滨江花园和晚餐。做成可以直接调整时间的界面,
并让我能把花园设为下雨时跳过。
根据当前仓库源码,解释生成页面如何进入带权限控制的运行时。做一个可交互的代码
路径图,并标出文件、函数和权限检查。
做一个可交互的双缝干涉实验,让我调整波长、缝间距和屏幕距离,并实时观察条纹变化。

在界面里修改并保存后,再问:

我刚才在界面里选了什么?请按保存结果继续。

要验证的不只是页面是否出现,而是下一轮 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 的权限检查,然后停在真实工具调用之前,
  因为这项访问还没有获得允许。

文档中的三类场景

README 列举了三个典型任务,可作为能力参考:

  1. 选择日历时段:把候选空闲时间变成可操作的 90 分钟时段,页面保存选中的三个时段回任务。
  2. 探索光合作用:通过光照、二氧化碳、温度和气孔开度等控制项,交互式观察各变量对反应的影响。
  3. 追踪代码路径:根据真实项目源码生成本地页面,列出文件、函数、分支及用户选中的路径。

适用场景与注意

适合谁

  • 需要在 DSH 中为特定任务生成定制界面,而非固定组件拼装的开发者。
  • 任务涉及多步骤状态、空间工具、模拟器或连接型工作流,且希望用户操作能写入任务状态的场景。

安全与生命周期

  • 生成代码在沙箱中运行;页面直连 API 仅支持已声明、无需凭据的公开 HTTPS 接口。
  • 临时链接和已授予权限 7 天后失效;任务状态在最后一次更新 7 天后过期。

安装前须知

插件以当前 dsh 进程权限运行。安装前应检查源码与 MIT 许可证,确认权限声明机制符合预期。SkillHub 是独立社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

DeepSeek Harness GenUI 把「为当前任务写 React」和「把用户状态带入下一轮 Agent」合在一起:比固定组件目录更自由,又比跨客户端 UI 协议更聚焦 DSH 任务生命周期。若你的工作流里常有「文字说不清、选完还要接着做」的步骤,可以按上文命令安装后,用两分钟试用提示词验证状态是否真能跨轮次传递。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜