把 UI 截图解析成可落地的前端实现规范
28.7/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yumimanji/dsh-ui-spec该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 75 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 36 处,展示前 34 条)
- 写入本地文件src/asset-extractor.ts:183
await mkdir(assetDir, { recursive: true }) - 执行外部命令来自配置/变量src/browser-session.ts:178
execFile(file, args, { windowsHide: true, timeout: 5000 }, (error, stdout) => error ? reject(error) : resolvePromise(stdout)) - 读取本地文件src/browser-session.ts:183
try { await access(path); return true } catch { return false } - 发起网络请求src/browser-session.ts:276
const version = await fetch(`${session.cdp_http_url}/json/version`, { signal: AbortSignal.timeout(1500) }).then((response) => response.json()) as Reco - 读取本地文件src/browser-session.ts:297
const [line] = (await readFile(join(profilePath, 'DevToolsActivePort'), 'utf8')).trim().split(/ ? /u) - 写入本地文件src/browser-session.ts:308
await mkdir(profilePath, { recursive: true }) - 执行外部命令来自配置/变量src/browser-session.ts:321
const child = spawn(selected.path, args, { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }) - 写入本地文件src/browser-session.ts:331
await writeFile(join(profileRoot, 'ownership.json'), JSON.stringify({ session_id: sessionId, pid: session.pid, executable_path: selected.path, profile - 发起网络请求src/browser-session.ts:340
await fetch(`${session.cdp_http_url}/json/version`, { signal: AbortSignal.timeout(1200) }).then((response) => { - 删除本地文件递归src/browser-session.ts:369
await rm(profileRoot, { recursive: true, force: true }).catch(() => undefined) - 删除本地文件递归src/browser-session.ts:398
await rm(session.profile_root, { recursive: true, force: true }).catch(() => undefined) - 读取本地文件src/implementation-validation.ts:19
for (const entry of await readdir(directory, { withFileTypes: true })) { - 读取本地文件src/implementation-validation.ts:31
try { return (await stat(path)).isFile() } catch { return false } - 读取本地文件src/implementation-validation.ts:35
return createHash('sha256').update(await readFile(path)).digest('hex') - 读取本地文件src/implementation-validation.ts:218
if (!await stat(root).then((item) => item.isDirectory()).catch(() => false)) { - 读取本地文件src/implementation-validation.ts:236
for (const path of allFiles.filter((file) => SOURCE_EXTENSIONS.has(extname(file).toLocaleLowerCase()))) sourceTexts.push(await readFile(path, 'utf8')) - 读取本地文件src/implementation-validation.ts:352
const rawEvidence = JSON.parse(await readFile(evidenceFile, 'utf8')) as unknown - 执行外部命令固定命令src/ocr-runtime.ts:71
execFile( - 删除本地文件递归src/ocr.ts:293
return { path: preparedPath, scale, cleanup: async () => { await rm(directory, { recursive: true, force: true }) } } - 执行外部命令固定命令src/ocr.ts:310
execFile( - 读取本地文件src/tool.ts:94
return createHash('sha256').update(await readFile(imagePath)).digest('hex') - 读取本地文件src/tool.ts:120
const value = JSON.parse(await readFile(`${specPath}.workflow-state.json`, 'utf8')) as Record<string, unknown> - 写入本地文件src/tool.ts:133
await writeFile(`${specPath}.workflow-state.json`, JSON.stringify({ workflow_id: workflowId, attempts: seed.attempts, best_score: seed.bestScore }, nu - 读取本地文件src/tool.ts:137
const parsed = JSON.parse(await readFile(specPath, 'utf8')) as Partial<MergedSpec> - 写入本地文件src/tool.ts:320
await writeFile(args.reference_spec_path, JSON.stringify(reused, null, 2), 'utf8') - 写入本地文件src/tool.ts:324
await mkdir(args.out_dir, { recursive: true }) - 写入本地文件src/tool.ts:325
await writeFile(`${args.out_dir}/${name}.web.ui-spec.json`, JSON.stringify(reused, null, 2), 'utf8') - 写入本地文件src/tool.ts:326
await writeFile(`${args.out_dir}/${name}.web.ui-spec.md`, markdownReport(reused), 'utf8') - 写入本地文件src/tool.ts:460
await mkdir(outDir, { recursive: true }) - 读取密钥环境变量src/vision.ts:28
process.env.DSH_UI_SPEC_VISION_API_KEY ?? - 读取密钥环境变量src/vision.ts:29
process.env.DEEPSEEK_API_KEY ?? - 读取密钥环境变量src/vision.ts:30
process.env.OPENAI_API_KEY ?? - 读取本地文件src/vision.ts:90
const buf = await readFile(imagePath) - 发起网络请求src/vision.ts:114
const res = await fetch(`${cfg.baseUrl}/chat/completions`, {
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 截图解析前端规格
- 几何解析
DeepSeek Harness 插件:把 UI 截图变成结构化、可直接落地的前端规格。确定性几何解析(sharp)加上可选的视觉模型语义,合并成一份 JSON + Markdown 规格。
README
由 DeepSeek 最新模型翻译生成dsh-ui-spec
Version
License
DeepSeek Harness
将 UI 截图解析为面向实现的结构化规范,帮助纯文本 DeepSeek 模型还原自适应 Web 界面。插件使用 Windows 原生 OCR 辅助识别,并提供布局、视觉细节、交互和浏览器验证约束。
效果展示
以下结果来自 Desktop/8 测试。右侧页面由模型根据插件输出自主实现。
| 原始参考图 | DeepSeek 实现效果 |
安装
从 npm 安装:
dsh plugin --profile web add dsh-ui-spec
安装 GitHub 当前版本时,pnpm 11 需要允许源码包执行构建脚本。在 DSH profile 的 pnpm-workspace.yaml 中加入:
allowBuilds:
"dsh-ui-spec@git+https://github.com/yumimanji/dsh-ui-spec.git": true
然后安装:
dsh plugin --profile web add github:yumimanji/dsh-ui-spec
如果当前 DSH profile 无法配置 allowBuilds,请使用 npm 版本。
展开完整文档(README 剩余 1 节)
dsh-ui-spec Version License DeepSeek Harness 将 UI 截图解析为面向实现的结构化规范,帮助纯文本 DeepSeek 模型还原自适应 Web 界面。插件使用 Windows 原生 OCR 辅助识别,并提供布局、视觉细节、交互和浏览器验证约束。 效果展示 以下结果来自 Desktop/8 测试。右侧页面由模型根据插件输出自主实现。 | 原始参考图 | DeepSeek 实现效果 | 安装 从 npm 安装: dsh plugin --profile web add dsh-ui-spec 安装 GitHub 当前版本时,pnpm 11 需要允许源码包执行构建脚本。在 DSH profile 的 pnpm-workspace.yaml 中加入: allowBuilds: "dsh-ui-spec@git+https://github.com/yumimanji/dsh-ui-spec.git": true 然后安装: dsh plugin --profile web add github:yumimanji/dsh-ui-spec 如果当前 DSH profile 无法配置 allowBuilds,请使用 npm 版本。 使用 在 DSH 中直接告诉模型: 使用 ui-spec 对当前目录下的两张图片进行分析并模拟实现,页面需要自适应屏幕。完成实现后使用 manage_ui_browser 验证页面,并只关闭该工具启动的浏览器会话。 也可以指定单张图片: 使用 ui-spec 分析 C:\path\to\reference.png,并实现对应的自适应 Web UI。 安装问题 如果出现 ERR_PNPM_UNEXPECTED_STORE,说明 DSH profile 现有的 node_modules 与当前 pnpm store 不一致。重建该 profile 的依赖后,再重新安装插件: cd $env:USERPROFILE\.dsh\profiles\web Rename-Item node_modules node_modules.store-mismatch-backup pnpm install dsh plugin --profile web add dsh-ui-spec 确认 DSH 正常启动后再删除备份目录。 许可证 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yumimanji/dsh-ui-spec
把 UI 截图解析成可落地的前端实现规范
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,364已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,709已汉化DSH
71.8
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,319已汉化DSH
71.5
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,533已汉化DSH
71.1
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 93,105已汉化DSH
71.1
这是你的仓库?认领条目