把模型回答里的对比、图表和算式渲染成可交互卡片
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add beex-labs/dsh-smart-ui该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 19 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 15 处,展示前 15 条)
- 写入剪贴板client.js:1030
? navigator.clipboard.writeText(plan.text) - 写入剪贴板client.js:1327
? navigator.clipboard.writeText(text) - 读取本地文件build-echarts.mjs:25
const version = JSON.parse(readFileSync(join(echartsDir, 'package.json'), 'utf8')).version - 读取本地文件build-echarts.mjs:26
const umd = readFileSync(source, 'utf8') - 写入本地文件build-echarts.mjs:47
writeFileSync(target, output, 'utf8') - 读取本地文件build-echarts.mjs:48
console.log(`wrote ${target} (${Math.round(statSync(target).size / 1024)} KB) from echarts@${version}`) - 读取本地文件build-engine.mjs:17
const source = readFileSync(join(here, 'engine.cjs'), 'utf8') - 写入本地文件build-engine.mjs:38
writeFileSync(target, output, 'utf8') - 读取本地文件build-engine.mjs:39
console.log(`wrote ${target} (${Math.round(statSync(target).size / 1024)} KB) from engine.cjs`) - 读取本地文件build-mermaid.mjs:28
const version = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')).version - 读取本地文件build-mermaid.mjs:29
let iife = readFileSync(source, 'utf8') - 写入本地文件build-mermaid.mjs:65
writeFileSync(target, output, 'utf8') - 读取本地文件build-mermaid.mjs:66
console.log(`wrote ${target} (${(statSync(target).size / 1024 / 1024).toFixed(1)} MB) from mermaid@${version}`) - 读取本地文件demos/check.mjs:14
const files = readdirSync(dir).filter((f) => /^\d-.*\.json$/.test(f)).sort() - 读取本地文件demos/check.mjs:27
const specOf = (file) => JSON.parse(readFileSync(join(dir, file), 'utf8'))
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
在 DSH 里把 AI 回答渲染成可交互的 UI 卡片:对比、图表、示意图、表格、计算器和单位换算。模型只写 JSON 规格,不写标记。
README
由 DeepSeek 最新模型翻译生成dsh-smart-ui
给 DSH 的对话加上结构化 UI 卡片。模型调用 ui_render 工具,只写一份 JSON 数据,页面把它渲染成交互卡片:对比表、图表、头条数字、步骤、表格、可改数字的计算工具、单位换算、流程图。
回答里常出现"真正的结构"——三项以上的对比、一组数量级、几个头条数字、有序步骤、行列表格、用户想改数字重算的算式。这些用纯文字描述既费 token 又难读。本插件让模型把结构交给卡片,文字只留结论。
- 模型只写数据,不写 HTML/JSX:规格是纯 JSON,进会话记录,fork、resume 之后原样重绘。
- 卡片是工具参数的纯函数:不向宿主取任何状态,重载、续聊得到的都是同一张卡。
- 明暗两套主题:规格里只有语义 tone(success / warn …),客户端把 tone 解析成主题变量,模型永远不写具体颜色。
卡片类型
| kind | 用在什么时候 | 主要字段 |
| compare | 三件以上的东西在同一组标准下比较 | columns、rows[{label, cells[]}] |
| chart | 一组数量级(bar)、有序趋势(line)、整体的构成(pie / donut) | series[{label, value, tone?, hint?
展开完整文档(README 剩余 1 节)
dsh-smart-ui
给 DSH 的对话加上结构化 UI 卡片。模型调用 ui_render 工具,只写一份 JSON 数据,页面把它渲染成交互卡片:对比表、图表、头条数字、步骤、表格、可改数字的计算工具、单位换算、流程图。
回答里常出现"真正的结构"——三项以上的对比、一组数量级、几个头条数字、有序步骤、行列表格、用户想改数字重算的算式。这些用纯文字描述既费 token 又难读。本插件让模型把结构交给卡片,文字只留结论。
- 模型只写数据,不写 HTML/JSX:规格是纯 JSON,进会话记录,fork、resume 之后原样重绘。
- 卡片是工具参数的纯函数:不向宿主取任何状态,重载、续聊得到的都是同一张卡。
- 明暗两套主题:规格里只有语义 tone(success / warn …),客户端把 tone 解析成主题变量,模型永远不写具体颜色。
卡片类型
| kind | 用在什么时候 | 主要字段 |
| compare | 三件以上的东西在同一组标准下比较 | columns、rows[{label, cells[]}] |
| chart | 一组数量级(bar)、有序趋势(line)、整体的构成(pie / donut) | series[{label, value, tone?, hint?}]、variant、unit |
| stats | 二到六个头条数字 | stats[{label, value, tone?, hint?}] |
| progress | 一个比例,比如通过率、配额用量 | value、max、label、unit、tone |
| steps | 三步以上的有序流程 | steps["text" \| {text, detail?}] |
| table | 一行行的记录 | columns、rows[][] |
| diagram | 用箭头连起来的方框:流程、决策树、层级、依赖、类图 | nodes[{id, label, detail?, tone?}] + edges[{from, to, label?}] + layout,或直接给 mermaid 源码 |
| calculator | 用户会拿自己的数字重算的算式:AA 付账、小费 | mode: split \| tip、fields[{label, value, min?, max?}] |
| unit | 单位换算 | units、factors?、from、to、value |
| note | 一件不能错过的事 | text、tone |
每种卡片都接受 title(标题)和 caption(脚注)。
diagram 有两种写法:结构化的 nodes + edges(编译成 Mermaid flowchart,layout: "tree" 表示自上而下的层级)或完整的 mermaid 源码(时序图、状态机、甘特图、ER 图等全部图族)。两者只能选一个。
工作方式
模型写 spec(纯 JSON) ↓ index.js 注册 ui_render 工具 + 一段提示词:校验规格、归一化、超限报错回模型 ↓ client.js 在 tool.call.toolview 槽位渲染卡片
- index.js 是宿主一半:工具 schema、规格校验(normalizeSpec)、Mermaid 源码编译都在这里,保证会话记录里存的就是画出来的那张图。
- client.js 是客户端一半:compare / stats / steps / table / note / calculator / unit 是纯 React,progress 是内联 SVG,chart 走 ECharts,diagram 走 Mermaid。
- 图表库按需加载:client.echarts.js / client.mermaid.js 是生成出来的懒加载 chunk,第一次画图时才拉,且不进 git。
安装
把本仓库放进 DSH profile 依赖里(本地 link: 或直接指向 GitHub 仓库都行):
{
"dependencies": { "dsh-smart-ui": "link:<此目录绝对路径>" },
"dsh": { "profile": { "bundles": ["dsh-smart-ui"] } }
}
profile 里的 cordis.patch.yml 插入插件行:
- insert:
- id: smart-ui
name: 'dsh-smart-ui'
然后安装依赖:
cd "$DSH_PROFILE_DIR"
pnpm install --no-frozen-lockfile
构建
两个图表 chunk 是生成物,git 不跟踪。装完依赖后必须先构建,否则图表会退化成纯文本摘要:
pnpm install
node build-echarts.mjs # 生成 client.echarts.js
node build-mermaid.mjs # 生成 client.mermaid.js
脚本把 npm 包的发行文件包进 DSH 的模块加载器外壳:ECharts 取 UMD 的 exports 分支(不泄漏全局),Mermaid 截获它赋给 globalThis 的 API 再删掉全局。
测试
node test/normalize.mjs # 规格归一化自检:每种 kind 的正常路径 + 防御路径
node test/echarts-chunk.mjs # 不用浏览器验证生成的 chunk 能加载出可用的 ECharts
node test/render-svg.mjs # ECharts SSR 渲染图表/流程图到 test/out,供人眼检查
node test/render-mermaid.mjs # 无头浏览器渲染 Mermaid 各图族到 test/out-mermaid
node test/shot-mermaid.mjs # Chrome 截图(Mermaid 的文字是 foreignObject,只能靠真浏览器)
后两个脚本会找 Chrome / Edge(Windows 默认安装路径)。
有意设定的限制
| 限制 | 值 | 原因 |
| 一个 spec 的节点数 | 400(apply(ctx, { maxNodes }) 可调) | 失控的模型不能卡死页面 |
| 原始 mermaid 源码长度 | 12000 字符 | 一张图不能吃掉整个页面 |
| diagram 的两种写法 | 二选一 | 两条路径不会对不上 |
致谢
感谢为本项目做出贡献的人:
许可证
MIT,见 LICENSE。
仓库本身不含图表库的代码(生成的 chunk 被 .gitignore 排除),构建时从 npm 取:ECharts 采用 Apache License 2.0,Mermaid 采用 MIT。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
beex-labs/dsh-smart-ui
把模型回答里的对比、图表和算式渲染成可交互卡片
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目