🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

生成式任务界面 pengyue-polaron/deepseek-harness-genui

DeepSeek Harnessv0.15.2
pengyue-polaron10 天前有提交已提供中文文档扫描:含敏感能力ui

为 DeepSeek Harness 打造的任务专用 React 应用,状态可延续到下一轮智能体

59.8/100
综合分
118
GitHub 星标
1,005
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-genui
npm 源 · dsh-plugin-genui 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-plugin-genui @ 0.15.2
✓Node 引擎要求 ^22.19.0 || ^24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 17:41:02

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 49 处,展示前 38 条)
  • 读取本地文件
    lib/index.js:61
    return JSON.parse(await readFile(path, "utf8"));
  • 写入本地文件
    lib/index.js:64
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/index.js:66
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, {
  • 写入本地文件
    lib/index.js:70
    await rename(temporary, path);
  • 写入本地文件
    lib/index.js:147
    await mkdir(this.root, {
  • 读取本地文件
    lib/index.js:151
    const entries = await readdir(this.root, { withFileTypes: true });
  • 删除本地文件
    lib/index.js:156
    if (Date.parse(record.updatedAt) + TASK_TTL_MS <= Date.now()) await rm(safeJoin(this.root, id), {
  • 删除本地文件
    lib/index.js:406
    await Promise.all(removed.map((versionId) => rm(dirname(this.versionPath(record.id, versionId)), {
  • 写入本地文件
    lib/index.js:592
    await mkdir(this.root, {
  • 写入本地文件
    lib/index.js:598
    await writeFile(this.path(preset.id), preset.content, {
  • 读取本地文件
    lib/index.js:608
    const parsed = JSON.parse(await readFile(this.settingsPath(), "utf8"));
  • 读取本地文件
    lib/index.js:634
    const entries = await readdir(this.root, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:639
    title: titleOf(await readFile(this.path(id), "utf8"), id)
  • 读取本地文件
    lib/index.js:652
    const content = await readFile(this.path(safeId), "utf8");
  • 发起网络请求
    lib/client.js:49
    const response = await fetch(input, {
  • 读取本地文件
    src/artifacts/registry.ts:14
    return JSON.parse(await readFile(path, 'utf8')) as T
  • 写入本地文件
    src/artifacts/registry.ts:18
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/artifacts/registry.ts:20
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 })
  • 写入本地文件
    src/artifacts/registry.ts:21
    await rename(temporary, path)
  • 写入本地文件
    src/artifacts/registry.ts:96
    await mkdir(this.root, { recursive: true, mode: 0o700 })
  • 读取本地文件
    src/artifacts/registry.ts:97
    const entries = await readdir(this.root, { withFileTypes: true })
  • 删除本地文件递归
    src/artifacts/registry.ts:103
    await rm(safeJoin(this.root, id), { recursive: true, force: true })
  • 删除本地文件递归
    src/artifacts/registry.ts:388
    await Promise.all(removed.map(versionId => rm(dirname(this.versionPath(record.id, versionId)), { recursive: true, force: true })))
  • 发起网络请求
    src/client/api.ts:38
    const response = await fetch(input, { ...init, signal: controller.signal })
  • 写入本地文件
    src/designs/store.ts:41
    await mkdir(this.root, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/designs/store.ts:44
    await writeFile(this.path(preset.id), preset.content, { encoding: 'utf8', mode: 0o600, flag: 'wx' })
  • 读取本地文件
    src/designs/store.ts:50
    const parsed: unknown = JSON.parse(await readFile(this.settingsPath(), 'utf8'))
  • 读取本地文件
    src/designs/store.ts:80
    const entries = await readdir(this.root, { withFileTypes: true })
  • 读取本地文件
    src/designs/store.ts:86
    const content = await readFile(this.path(id), 'utf8')
  • 读取本地文件
    src/designs/store.ts:100
    const content = await readFile(this.path(safeId), 'utf8')
  • 写入本地文件
    src/designs/store.ts:110
    await writeFile(temporary, content, { encoding: 'utf8', mode: 0o600 })
  • 写入本地文件
    src/designs/store.ts:111
    await rename(temporary, path)
  • 写入本地文件
    src/designs/store.ts:126
    await writeFile(temporary, `${JSON.stringify({ defaultDesignId: id ?? null }, null, 2)}\n`, {
  • 写入本地文件
    src/designs/store.ts:129
    await rename(temporary, path)
  • 读取本地文件
    src/runtime/capabilities.ts:32
    return await readFile(path)
  • 读取本地文件
    src/runtime/capabilities.ts:47
    return readFile(path)
  • 读取本地文件
    src/runtime/server.ts:266
    const hasCss = await stat(cssPath).then(() => true, () => false)
  • 读取本地文件
    src/runtime/server.ts:281
    const content = await readFile(assetPath)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-ui-tool@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-mcp-client
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

功能亮点

  • 任务专用React应用
  • 状态延续至下一轮
v0.15.22026-10-24
· DeepSeek Harness GenUI v0.15.2 本次发布支持 Harness 0.2.1-rc.2(npm latest 于 2026-10-23 核对)和 0.2.1-rc.3(next),同时保留此前支持的宿主。 · 变更 · 通过当前宿主的插件兼容性校验,不再申请版本豁免。 · 工具参数还在流式传输时就显示应用标题。改用宿主提供的带边界惰性参数读取器,不再反复解析完整的生成源码载荷,并为旧版宿主保留回退方案。 · 让回执解析不再依赖宿主工具记录里无关的字段,同时保留对格式错误和重复信封的拒绝。 · 把两个当前宿主都加入 CI。更新已安装 Web 测试,适配新的登录对话框和账户菜单,并在重新加载后先等设置加载完成再检查已保存的值。 · 在发布工作流的逐字节 tarball 校验之前延长 npm 传播重试,解决上次发布时的验证超时。 · 安装或升级 更新你的应用使用的配置档,然后重启 Harness: dsh plugin --profile web add dsh-plugin-genui@0.15.2 --save-exact dsh --profile web 使用 Node.js ^22.19.0 || ^24.0.0。插件用户无需批准编译器安装脚本,也不需要 Chrome 或 Chromium。当前的设计偏好位于「设置 → 内置插件 → 生成应用设计」。 · 验证与范围 本地 Node 24 验证在每个当前宿主上通过 146 项基线测试和 144 项适用测试,另外还通过类型检查、构建、打包体积预算、打包后的 Web 安装、真实宿主兼容性校验、设置持久化和管理端点。从 0.13.2、0.14.1 和 0.14.2 干净安装、卸载和升级,均保留已编译应用、状态、授权和版本历史。生产依赖审计未报告已知漏洞。 发布预检还要求精确提交上的 CI 成功、实时 HTTPS 场景通过,以及一次全新的构建、安装、升级检查。发布任务会确认 npm 提供的正是已审查的 tarball,并把同一产物和校验和附到 GitHub release 上。 支持的 Harness 版本为 0.1.0-rc.6–rc.8、0.1.1-rc.1–rc.2、0.1.5-rc.2–rc.3、0.1.7-rc.1 和 0.2.1-rc.2–rc.3。未测试的中间版本、alpha 版本和未来的预发布版本不在支持范围内。TUI 和无头模式仍不支持。原生桌面窗口和付费模型推理不在这些检查覆盖范围内。旧版桥接测试夹具和已退役的设置服务商 API 只在仍暴露它们的宿主上测试。 发现的问题、测试范围和剩余优化机会见兼容性审查。
v0.15.12026-09-24
· DeepSeek Harness GenUI v0.15.1 本次发布修复了 issue #14:在 Harness 0.1.7-rc.1 上安装会被拒绝。同时让插件适配该宿主机的设置与工具视图 API。 · 变更 · 在 Harness 对等版本范围中接纳已测试的 0.1.7-rc.1 宿主。移除过时的 dsh-client-runtime 对等依赖:它只用于旧版开发类型,但新宿主会拿自身版本校验可选对等依赖,即使该依赖并不存在。 · 在 0.1.7-rc.1 上,设计偏好显示在「设置 → 内置插件 → 生成应用设计」下。旧宿主保留原有卡片,并避免调用已移除的设置命名空间 API。 · 处理参数就绪前的工具准备新阶段,让配置 schema 声明在各宿主依赖版本间保持可移植。 · 把 0.1.7-rc.1 加入 CI 宿主矩阵。不加豁免地跑宿主自带的兼容性校验,安装打包后的插件,启动 Web,保存设计选择,重新加载,并检查管理端点。 · 安装或升级 更新应用实际使用的配置档,然后重启 Harness。Web 端: dsh plugin --profile web add dsh-plugin-genui@0.15.1 --save-exact dsh --profile web 无需版本豁免,也无需批准编译器安装脚本。桌面应用可能使用单独的 DSH_HOME 或配置档;请更新那个安装的配置档。 · 验证与范围 支持的版本为 0.1.0-rc.6 到 rc.8、0.1.1-rc.1 到 rc.2、0.1.5-rc.2 到 rc.3,以及恰好 0.1.7-rc.1。本补丁不声称兼容未测试的中间版本或未来版本。 CI 检查 Node 22.19 和 24、现有宿主矩阵加 0.1.7-rc.1、类型声明、随包发布的运行时 bundle、工具与状态行为,以及浏览器渲染。已发布的 0.13.2 桥接测试夹具只在旧宿主上运行;旧的设置服务商测试只在带该 API 的宿主上运行,而实际的现代 Web 测试覆盖新的设置界面。 发布预检还会跑实时 HTTPS 浏览器场景、生产依赖审计、干净安装,以及保留已编译应用、状态、权限和版本历史的升级。发布环节会验证 npm 提供的正是审核过的 tarball。 TUI 与无头配置档仍不支持。原生 Electron/Tauri 窗口未逐一测试。宿主兼容性检查不需要模型凭据或付费推理。
v0.15.02026-09-24
· DeepSeek Harness GenUI v0.15.0 本次发布新增完整的 Harness 0.1.5-rc.3 Web 兼容性检查,并把生成应用的图表升级到 Recharts 3。升级后,已有的编译应用和保存的任务状态都会保留。 · 变更 · 把支持的现代 Harness 对等版本范围扩展到 0.1.5-rc.2 和 rc.3。测试 rc.3 的安装、随包发布的 bundle、工具与浏览器行为、实际的 Web 设置卡片,以及重新加载后的设计选择。保留原有的 0.1.0-rc.6 到 rc.8 和 0.1.1-rc.1 到 rc.2 宿主覆盖。 · 在现代兼容性测试夹具中锁定 Harness 的传递依赖,避免上游预发布版本的解析悄悄混入不同宿主版本。 · 把 Recharts 升级到 3.10.1,补上它需要的 react-is 对等依赖,并更新智能体的图表 API 指引。新增响应式柱状图、折线图和饼图的浏览器测试,覆盖保存输入和重新加载。 · 检查从 0.13.2、0.14.1 和 0.14.2 升级后,编译应用和映射的字节、状态、授权与版本历史均未变化。 · 打包前要求提供许可证和发布文档,并通过 .nvmrc 选用 Node 24 做本地开发。 · 图表源码兼容性 已有的编译应用保留其内嵌的图表库;升级插件不会重写它们。新构建使用 Recharts 3。重建或编辑旧图表源码时,可能需要迁移已移除的 activeIndex 属性和 Customized 图表状态属性。参见 Recharts 3 迁移指南。正是这一源码兼容性变化,让本次发布采用新的次版本号。 · 安装或升级 在你应用实际使用的 Harness 配置档中更新插件,然后重启 Harness。Web 配置档: dsh plugin --profile web add dsh-plugin-genui@0.15.0 --save-exact dsh --profile web 桌面应用可能使用单独的 DSH_HOME 或配置档。更新系统命令行的默认配置档不会更新这些安装。 · 验证与范围 · 本地基线套件:143 项通过;现代宿主套件:142 项通过。两者各跳过一项需手动开启的实时网络测试。历史 0.13.2 桥接夹具只对原始宿主运行,因为那个已发布的插件导入了旧导出。 · 类型检查、构建、bundle 体积预算、干净安装与卸载、升级检查均在本地通过。生产依赖审计未报告已知漏洞。参见本地验证报告。 · 发布以 Linux CI 为前提,需通过 Node 22.19 和 24、宿主矩阵、实时 HTTPS 场景、生产审计、安装与升级检查,以及对已发布 npm tarball 的逐字节校验。 · Harness 0.1.7-rc.1 只通过了探索性的服务端入口导入检查,不在完整兼容性承诺范围内。 TUI/无头配置档仍不受支持。原生 Electron/Tauri 窗口未逐一测试。这些兼容性检查不使用任何模型 API 凭据或付费推理。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness GenUI dsh.so risk DeepSeek Harness GenUI 让 Agent 在文字不够好用时,为当前任务生成一个聚焦界面。Coding Agent 编写普通的 React + TypeScript,而不是组件树 DSL;界面可以把用户选择保存给下一轮 Agent。 它适合讲清复杂关系、收集相互关联的选择,或在工具工作流中继续处理,而不必让用户重复输入。 相关研究:《EvoGenUI-Bench: Evaluating LLMs as Multi-Turn Generative UI Assistants》。 安装 需要 Node.js ^22.19.0 || ^24.0.0 和受支持的 DeepSeek Harness Web profile。 dsh plugin --profile web add dsh-plugin-genui dsh --profile web v0.15.2 支持 Harness 0.2.1-rc.2(2026-10-23 核实的 npm latest)和 0.2.1-rc.3(next),同时保留此前验证过的宿主版本。验证范围及源码安装方法见兼容性报告。支持 Inline、Canvas、全屏和 localhost;不支持 TUI/headless。
展开完整文档(README 剩余 1 节)
DeepSeek Harness GenUI

dsh.so risk

DeepSeek Harness GenUI 让 Agent 在文字不够好用时,为当前任务生成一个聚焦界面。Coding Agent 编写普通的 React + TypeScript,而不是组件树 DSL;界面可以把用户选择保存给下一轮 Agent。

它适合讲清复杂关系、收集相互关联的选择,或在工具工作流中继续处理,而不必让用户重复输入。

相关研究:《EvoGenUI-Bench: Evaluating LLMs as Multi-Turn Generative UI Assistants》。

安装

需要 Node.js ^22.19.0 || ^24.0.0 和受支持的 DeepSeek Harness Web profile。

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

v0.15.2 支持 Harness 0.2.1-rc.2(2026-10-23 核实的 npm latest)和 0.2.1-rc.3(next),同时保留此前验证过的宿主版本。验证范围及源码安装方法见兼容性报告。支持 Inline、Canvas、全屏和 localhost;不支持 TUI/headless。本地编译器使用 WebAssembly,无需批准安装脚本;插件用户不需要安装 Chrome 或 Chromium。

适用场景

当用户需要看清复杂关系,或同时处理几项相互影响的选择时,界面比文字更合适。普通问答、改写、摘要和简单列表仍应只返回文字。

选择日历时段选择写作时段并保存回任务。后续写入日历仍是独立且需要授权的操作。

探索光合作用调整四个因果变量,直接观察限制环节如何变化。

追踪代码路径把基于真实源码的 CLI 解释变成文件、函数和分支都可探索的本地页面。

核心闭环

1. Agent 为当前任务编写并构建 React + TypeScript 页面。
2. 用户保存选择、表单答案、草稿或进度等有意义的结果。
3. 下一轮 Agent 读取这些值并继续任务。
4. 页面必须声明要使用的工具和公开 HTTPS 接口。Harness 负责按任务授权,未声明调用会被拒绝。

后续修改会更新同一个页面。构建或源码检查失败的候选不会替换最后一个可用版本;启动崩溃的版本会被隔离,并在可能时回滚。

Inline 与 Canvas

| Inline | Canvas |
| 适合紧凑的控制项或聚焦选择。 | 提供更大空间,同时保留对话。 |

Inline、Canvas、全屏和 localhost 是同一份任务状态的不同入口。

试一下

新建一个 Web 会话,复制一段提示词:

帮我规划一个周六行程,包含美术馆、滨江花园和晚餐。做成可以直接调整时间的界面,并让我能把花园设为下雨时跳过。

做一个可交互的双缝干涉实验,让我调整波长、缝间距和屏幕距离,并实时观察条纹变化。

在界面中保存以后,再问:

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

真正要验证的不只是“页面出现了”,而是下一轮 Agent 能不能接着刚才的操作继续做。

为什么选择 Code-first

组件协议通常更适合可预测的卡片、表格、图表和表单。这个插件面向结构事先无法确定的场景,例如模拟器、空间工具、源码浏览器,以及保存结果需要继续进入同一个 Harness 任务的多步骤应用。

它的取舍很明确:生成代码比固定组件目录更自由,但项目也有意只服务 DeepSeek Harness,而不是跨客户端 UI 协议。相关路线可参考 dsh-genui、dsh-visualize、A2UI 和 MCP Apps。

DESIGN.md

新版宿主打开 设置 → 内置插件 → 生成应用的风格(旧版为 设置 → 插件 → 插件配置),可以自动选择设计,使用 material-3、apple-human-interface 或 shadcn-ui,也可以导入自定义 DESIGN.md。它只控制视觉语言,不限制 React 为任务实现所需的页面结构和交互。

安全

生成代码在 opaque-origin 沙箱中运行。可信父页面保管真实的任务 capability token,只代理已保存状态、已声明工具和已声明的无凭据公开 HTTPS 接口。MCP 凭据不会进入生成代码。临时链接和授权 7 天后过期;任务状态也会在最后一次更新 7 天后过期。

这条边界能保护宿主凭据与能力,但不能让恶意代码安全地读取已经授权给它的数据。不要把秘密写进生成页面状态,也不要授权页面读取不应展示的数据。精确威胁模型见 Security。

开发

从源码构建需要 pnpm 11:

pnpm install
pnpm run typecheck
pnpm run build
pnpm test
pnpm run package:plugin

验收场景 · 发布说明 · 参与贡献 · MIT

已收录:dsh-market · dsh.so · awesome-dsh-plugin · dsh.plus
预览分享卡片长什么样 ↓pengyue-polaron/deepseek-harness-genui
分享 · DeepSeek Harness Hub
pengyue-polaron/deepseek-harness-genui

为 DeepSeek Harness 打造的任务专用 React 应用,状态可延续到下一轮智能体

回到顶部